var Pb = Object.defineProperty;
var gR = (a) => {
throw TypeError(a);
};
var fb = (a, U, l) => U in a ? Pb(a, U, { enumerable: !0, configurable: !0, writable: !0, value: l }) : a[U] = l;
var f = (a, U, l) => fb(a, typeof U != "symbol" ? U + "" : U, l), RQ = (a, U, l) => U.has(a) || gR("Cannot " + l);
var c = (a, U, l) => (RQ(a, U, "read from private field"), l ? l.call(a) : U.get(a)), b = (a, U, l) => U.has(a) ? gR("Cannot add the same private member more than once") : U instanceof WeakSet ? U.add(a) : U.set(a, l), R = (a, U, l, d) => (RQ(a, U, "write to private field"), d ? d.call(a, l) : U.set(a, l), l), h = (a, U, l) => (RQ(a, U, "access private method"), l);
var eU = (a, U, l, d) => ({
set _(t) {
R(a, U, t, l);
},
get _() {
return c(a, U, d);
}
});
import { shallowRef as TV, watchEffect as Ab, toValue as KR, watch as LQ, onBeforeUnmount as qN, defineComponent as _b, ref as qb, toRef as $b, computed as lm, openBlock as In, createElementBlock as Dn, Fragment as Um, renderList as dm, renderSlot as HR, createElementVNode as vR, normalizeStyle as tm, createCommentVNode as PR } from "vue";
var Zm = {
/***/
9306: (
/***/
(a, U, l) => {
var d = l(4901), t = l(6823), Z = TypeError;
a.exports = function(F) {
if (d(F)) return F;
throw new Z(t(F) + " is not a function");
};
}
),
/***/
3506: (
/***/
(a, U, l) => {
var d = l(3925), t = String, Z = TypeError;
a.exports = function(F) {
if (d(F)) return F;
throw new Z("Can't set " + t(F) + " as a prototype");
};
}
),
/***/
7080: (
/***/
(a, U, l) => {
var d = l(4402).has;
a.exports = function(t) {
return d(t), t;
};
}
),
/***/
679: (
/***/
(a, U, l) => {
var d = l(1625), t = TypeError;
a.exports = function(Z, F) {
if (d(F, Z)) return Z;
throw new t("Incorrect invocation");
};
}
),
/***/
8551: (
/***/
(a, U, l) => {
var d = l(34), t = String, Z = TypeError;
a.exports = function(F) {
if (d(F)) return F;
throw new Z(t(F) + " is not an object");
};
}
),
/***/
7811: (
/***/
(a) => {
a.exports = typeof ArrayBuffer < "u" && typeof DataView < "u";
}
),
/***/
7394: (
/***/
(a, U, l) => {
var d = l(4576), t = l(6706), Z = l(2195), F = d.ArrayBuffer, n = d.TypeError;
a.exports = F && t(F.prototype, "byteLength", "get") || function(s) {
if (Z(s) !== "ArrayBuffer") throw new n("ArrayBuffer expected");
return s.byteLength;
};
}
),
/***/
3238: (
/***/
(a, U, l) => {
var d = l(4576), t = l(7476), Z = l(7394), F = d.ArrayBuffer, n = F && F.prototype, s = n && t(n.slice);
a.exports = function(W) {
if (Z(W) !== 0 || !s) return !1;
try {
return s(W, 0, 0), !1;
} catch {
return !0;
}
};
}
),
/***/
5169: (
/***/
(a, U, l) => {
var d = l(3238), t = TypeError;
a.exports = function(Z) {
if (d(Z)) throw new t("ArrayBuffer is detached");
return Z;
};
}
),
/***/
5636: (
/***/
(a, U, l) => {
var d = l(4576), t = l(9504), Z = l(6706), F = l(7696), n = l(5169), s = l(7394), W = l(4483), V = l(1548), Q = d.structuredClone, i = d.ArrayBuffer, N = d.DataView, e = Math.min, m = i.prototype, J = N.prototype, M = t(m.slice), G = Z(m, "resizable", "get"), S = Z(m, "maxByteLength", "get"), T = t(J.getInt8), u = t(J.setInt8);
a.exports = (V || W) && function(Y, o, B) {
var X = s(Y), p = o === void 0 ? X : F(o), y = !G || !G(Y), r;
if (n(Y), V && (Y = Q(Y, { transfer: [Y] }), X === p && (B || y)))
return Y;
if (X >= p && (!B || y))
r = M(Y, 0, p);
else {
var D = B && !y && S ? { maxByteLength: S(Y) } : void 0;
r = new i(p, D);
for (var E = new N(Y), P = new N(r), k = e(p, X), I = 0; I < k; I++) u(P, I, T(E, I));
}
return V || W(Y), r;
};
}
),
/***/
4644: (
/***/
(a, U, l) => {
var d = l(7811), t = l(3724), Z = l(4576), F = l(4901), n = l(34), s = l(9297), W = l(6955), V = l(6823), Q = l(6699), i = l(6840), N = l(2106), e = l(1625), m = l(2787), J = l(2967), M = l(8227), G = l(3392), S = l(1181), T = S.enforce, u = S.get, Y = Z.Int8Array, o = Y && Y.prototype, B = Z.Uint8ClampedArray, X = B && B.prototype, p = Y && m(Y), y = o && m(o), r = Object.prototype, D = Z.TypeError, E = M("toStringTag"), P = G("TYPED_ARRAY_TAG"), k = "TypedArrayConstructor", I = d && !!J && W(Z.opera) !== "Opera", q = !1, sl, Gl, pl, ml = {
Int8Array: 1,
Uint8Array: 1,
Uint8ClampedArray: 1,
Int16Array: 2,
Uint16Array: 2,
Int32Array: 4,
Uint32Array: 4,
Float32Array: 4,
Float64Array: 8
}, Sl = {
BigInt64Array: 8,
BigUint64Array: 8
}, xd = function(Dl) {
if (!n(Dl)) return !1;
var El = W(Dl);
return El === "DataView" || s(ml, El) || s(Sl, El);
}, jd = function($) {
var Dl = m($);
if (n(Dl)) {
var El = u(Dl);
return El && s(El, k) ? El[k] : jd(Dl);
}
}, x = function($) {
if (!n($)) return !1;
var Dl = W($);
return s(ml, Dl) || s(Sl, Dl);
}, L = function($) {
if (x($)) return $;
throw new D("Target is not a typed array");
}, w = function($) {
if (F($) && (!J || e(p, $))) return $;
throw new D(V($) + " is not a typed array constructor");
}, dl = function($, Dl, El, Od) {
if (t) {
if (El) for (var uU in ml) {
var lU = Z[uU];
if (lU && s(lU.prototype, $)) try {
delete lU.prototype[$];
} catch {
try {
lU.prototype[$] = Dl;
} catch {
}
}
}
(!y[$] || El) && i(y, $, El ? Dl : I && o[$] || Dl, Od);
}
}, Tl = function($, Dl, El) {
var Od, uU;
if (t) {
if (J) {
if (El) {
for (Od in ml)
if (uU = Z[Od], uU && s(uU, $)) try {
delete uU[$];
} catch {
}
}
if (!p[$] || El)
try {
return i(p, $, El ? Dl : I && p[$] || Dl);
} catch {
}
else return;
}
for (Od in ml)
uU = Z[Od], uU && (!uU[$] || El) && i(uU, $, Dl);
}
};
for (sl in ml)
Gl = Z[sl], pl = Gl && Gl.prototype, pl ? T(pl)[k] = Gl : I = !1;
for (sl in Sl)
Gl = Z[sl], pl = Gl && Gl.prototype, pl && (T(pl)[k] = Gl);
if ((!I || !F(p) || p === Function.prototype) && (p = function() {
throw new D("Incorrect invocation");
}, I))
for (sl in ml)
Z[sl] && J(Z[sl], p);
if ((!I || !y || y === r) && (y = p.prototype, I))
for (sl in ml)
Z[sl] && J(Z[sl].prototype, y);
if (I && m(X) !== y && J(X, y), t && !s(y, E)) {
q = !0, N(y, E, {
configurable: !0,
get: function() {
return n(this) ? this[P] : void 0;
}
});
for (sl in ml) Z[sl] && Q(Z[sl], P, sl);
}
a.exports = {
NATIVE_ARRAY_BUFFER_VIEWS: I,
TYPED_ARRAY_TAG: q && P,
aTypedArray: L,
aTypedArrayConstructor: w,
exportTypedArrayMethod: dl,
exportTypedArrayStaticMethod: Tl,
getTypedArrayConstructor: jd,
isView: xd,
isTypedArray: x,
TypedArray: p,
TypedArrayPrototype: y
};
}
),
/***/
5370: (
/***/
(a, U, l) => {
var d = l(6198);
a.exports = function(t, Z, F) {
for (var n = 0, s = arguments.length > 2 ? F : d(Z), W = new t(s); s > n; ) W[n] = Z[n++];
return W;
};
}
),
/***/
9617: (
/***/
(a, U, l) => {
var d = l(5397), t = l(5610), Z = l(6198), F = function(n) {
return function(s, W, V) {
var Q = d(s), i = Z(Q);
if (i === 0) return !n && -1;
var N = t(V, i), e;
if (n && W !== W) {
for (; i > N; )
if (e = Q[N++], e !== e) return !0;
} else for (; i > N; N++)
if ((n || N in Q) && Q[N] === W) return n || N || 0;
return !n && -1;
};
};
a.exports = {
// `Array.prototype.includes` method
// https://tc39.es/ecma262/#sec-array.prototype.includes
includes: F(!0),
// `Array.prototype.indexOf` method
// https://tc39.es/ecma262/#sec-array.prototype.indexof
indexOf: F(!1)
};
}
),
/***/
4527: (
/***/
(a, U, l) => {
var d = l(3724), t = l(4376), Z = TypeError, F = Object.getOwnPropertyDescriptor, n = d && !function() {
if (this !== void 0) return !0;
try {
Object.defineProperty([], "length", { writable: !1 }).length = 1;
} catch (s) {
return s instanceof TypeError;
}
}();
a.exports = n ? function(s, W) {
if (t(s) && !F(s, "length").writable)
throw new Z("Cannot set read only .length");
return s.length = W;
} : function(s, W) {
return s.length = W;
};
}
),
/***/
7680: (
/***/
(a, U, l) => {
var d = l(9504);
a.exports = d([].slice);
}
),
/***/
7628: (
/***/
(a, U, l) => {
var d = l(6198);
a.exports = function(t, Z) {
for (var F = d(t), n = new Z(F), s = 0; s < F; s++) n[s] = t[F - s - 1];
return n;
};
}
),
/***/
9928: (
/***/
(a, U, l) => {
var d = l(6198), t = l(1291), Z = RangeError;
a.exports = function(F, n, s, W) {
var V = d(F), Q = t(s), i = Q < 0 ? V + Q : Q;
if (i >= V || i < 0) throw new Z("Incorrect index");
for (var N = new n(V), e = 0; e < V; e++) N[e] = e === i ? W : F[e];
return N;
};
}
),
/***/
6319: (
/***/
(a, U, l) => {
var d = l(8551), t = l(9539);
a.exports = function(Z, F, n, s) {
try {
return s ? F(d(n)[0], n[1]) : F(n);
} catch (W) {
t(Z, "throw", W);
}
};
}
),
/***/
2195: (
/***/
(a, U, l) => {
var d = l(9504), t = d({}.toString), Z = d("".slice);
a.exports = function(F) {
return Z(t(F), 8, -1);
};
}
),
/***/
6955: (
/***/
(a, U, l) => {
var d = l(2140), t = l(4901), Z = l(2195), F = l(8227), n = F("toStringTag"), s = Object, W = Z(/* @__PURE__ */ function() {
return arguments;
}()) === "Arguments", V = function(Q, i) {
try {
return Q[i];
} catch {
}
};
a.exports = d ? Z : function(Q) {
var i, N, e;
return Q === void 0 ? "Undefined" : Q === null ? "Null" : typeof (N = V(i = s(Q), n)) == "string" ? N : W ? Z(i) : (e = Z(i)) === "Object" && t(i.callee) ? "Arguments" : e;
};
}
),
/***/
7740: (
/***/
(a, U, l) => {
var d = l(9297), t = l(5031), Z = l(7347), F = l(4913);
a.exports = function(n, s, W) {
for (var V = t(s), Q = F.f, i = Z.f, N = 0; N < V.length; N++) {
var e = V[N];
!d(n, e) && !(W && d(W, e)) && Q(n, e, i(s, e));
}
};
}
),
/***/
2211: (
/***/
(a, U, l) => {
var d = l(9039);
a.exports = !d(function() {
function t() {
}
return t.prototype.constructor = null, Object.getPrototypeOf(new t()) !== t.prototype;
});
}
),
/***/
2529: (
/***/
(a) => {
a.exports = function(U, l) {
return { value: U, done: l };
};
}
),
/***/
6699: (
/***/
(a, U, l) => {
var d = l(3724), t = l(4913), Z = l(6980);
a.exports = d ? function(F, n, s) {
return t.f(F, n, Z(1, s));
} : function(F, n, s) {
return F[n] = s, F;
};
}
),
/***/
6980: (
/***/
(a) => {
a.exports = function(U, l) {
return {
enumerable: !(U & 1),
configurable: !(U & 2),
writable: !(U & 4),
value: l
};
};
}
),
/***/
4659: (
/***/
(a, U, l) => {
var d = l(3724), t = l(4913), Z = l(6980);
a.exports = function(F, n, s) {
d ? t.f(F, n, Z(0, s)) : F[n] = s;
};
}
),
/***/
2106: (
/***/
(a, U, l) => {
var d = l(283), t = l(4913);
a.exports = function(Z, F, n) {
return n.get && d(n.get, F, { getter: !0 }), n.set && d(n.set, F, { setter: !0 }), t.f(Z, F, n);
};
}
),
/***/
6840: (
/***/
(a, U, l) => {
var d = l(4901), t = l(4913), Z = l(283), F = l(9433);
a.exports = function(n, s, W, V) {
V || (V = {});
var Q = V.enumerable, i = V.name !== void 0 ? V.name : s;
if (d(W) && Z(W, i, V), V.global)
Q ? n[s] = W : F(s, W);
else {
try {
V.unsafe ? n[s] && (Q = !0) : delete n[s];
} catch {
}
Q ? n[s] = W : t.f(n, s, {
value: W,
enumerable: !1,
configurable: !V.nonConfigurable,
writable: !V.nonWritable
});
}
return n;
};
}
),
/***/
6279: (
/***/
(a, U, l) => {
var d = l(6840);
a.exports = function(t, Z, F) {
for (var n in Z) d(t, n, Z[n], F);
return t;
};
}
),
/***/
9433: (
/***/
(a, U, l) => {
var d = l(4576), t = Object.defineProperty;
a.exports = function(Z, F) {
try {
t(d, Z, { value: F, configurable: !0, writable: !0 });
} catch {
d[Z] = F;
}
return F;
};
}
),
/***/
3724: (
/***/
(a, U, l) => {
var d = l(9039);
a.exports = !d(function() {
return Object.defineProperty({}, 1, { get: function() {
return 7;
} })[1] !== 7;
});
}
),
/***/
4483: (
/***/
(a, U, l) => {
var d = l(4576), t = l(9429), Z = l(1548), F = d.structuredClone, n = d.ArrayBuffer, s = d.MessageChannel, W = !1, V, Q, i, N;
if (Z)
W = function(e) {
F(e, { transfer: [e] });
};
else if (n) try {
s || (V = t("worker_threads"), V && (s = V.MessageChannel)), s && (Q = new s(), i = new n(2), N = function(e) {
Q.port1.postMessage(null, [e]);
}, i.byteLength === 2 && (N(i), i.byteLength === 0 && (W = N)));
} catch {
}
a.exports = W;
}
),
/***/
4055: (
/***/
(a, U, l) => {
var d = l(4576), t = l(34), Z = d.document, F = t(Z) && t(Z.createElement);
a.exports = function(n) {
return F ? Z.createElement(n) : {};
};
}
),
/***/
6837: (
/***/
(a) => {
var U = TypeError, l = 9007199254740991;
a.exports = function(d) {
if (d > l) throw U("Maximum allowed index exceeded");
return d;
};
}
),
/***/
5002: (
/***/
(a) => {
a.exports = {
IndexSizeError: { s: "INDEX_SIZE_ERR", c: 1, m: 1 },
DOMStringSizeError: { s: "DOMSTRING_SIZE_ERR", c: 2, m: 0 },
HierarchyRequestError: { s: "HIERARCHY_REQUEST_ERR", c: 3, m: 1 },
WrongDocumentError: { s: "WRONG_DOCUMENT_ERR", c: 4, m: 1 },
InvalidCharacterError: { s: "INVALID_CHARACTER_ERR", c: 5, m: 1 },
NoDataAllowedError: { s: "NO_DATA_ALLOWED_ERR", c: 6, m: 0 },
NoModificationAllowedError: { s: "NO_MODIFICATION_ALLOWED_ERR", c: 7, m: 1 },
NotFoundError: { s: "NOT_FOUND_ERR", c: 8, m: 1 },
NotSupportedError: { s: "NOT_SUPPORTED_ERR", c: 9, m: 1 },
InUseAttributeError: { s: "INUSE_ATTRIBUTE_ERR", c: 10, m: 1 },
InvalidStateError: { s: "INVALID_STATE_ERR", c: 11, m: 1 },
SyntaxError: { s: "SYNTAX_ERR", c: 12, m: 1 },
InvalidModificationError: { s: "INVALID_MODIFICATION_ERR", c: 13, m: 1 },
NamespaceError: { s: "NAMESPACE_ERR", c: 14, m: 1 },
InvalidAccessError: { s: "INVALID_ACCESS_ERR", c: 15, m: 1 },
ValidationError: { s: "VALIDATION_ERR", c: 16, m: 0 },
TypeMismatchError: { s: "TYPE_MISMATCH_ERR", c: 17, m: 1 },
SecurityError: { s: "SECURITY_ERR", c: 18, m: 1 },
NetworkError: { s: "NETWORK_ERR", c: 19, m: 1 },
AbortError: { s: "ABORT_ERR", c: 20, m: 1 },
URLMismatchError: { s: "URL_MISMATCH_ERR", c: 21, m: 1 },
QuotaExceededError: { s: "QUOTA_EXCEEDED_ERR", c: 22, m: 1 },
TimeoutError: { s: "TIMEOUT_ERR", c: 23, m: 1 },
InvalidNodeTypeError: { s: "INVALID_NODE_TYPE_ERR", c: 24, m: 1 },
DataCloneError: { s: "DATA_CLONE_ERR", c: 25, m: 1 }
};
}
),
/***/
8727: (
/***/
(a) => {
a.exports = [
"constructor",
"hasOwnProperty",
"isPrototypeOf",
"propertyIsEnumerable",
"toLocaleString",
"toString",
"valueOf"
];
}
),
/***/
6193: (
/***/
(a, U, l) => {
var d = l(4215);
a.exports = d === "NODE";
}
),
/***/
2839: (
/***/
(a, U, l) => {
var d = l(4576), t = d.navigator, Z = t && t.userAgent;
a.exports = Z ? String(Z) : "";
}
),
/***/
9519: (
/***/
(a, U, l) => {
var d = l(4576), t = l(2839), Z = d.process, F = d.Deno, n = Z && Z.versions || F && F.version, s = n && n.v8, W, V;
s && (W = s.split("."), V = W[0] > 0 && W[0] < 4 ? 1 : +(W[0] + W[1])), !V && t && (W = t.match(/Edge\/(\d+)/), (!W || W[1] >= 74) && (W = t.match(/Chrome\/(\d+)/), W && (V = +W[1]))), a.exports = V;
}
),
/***/
4215: (
/***/
(a, U, l) => {
var d = l(4576), t = l(2839), Z = l(2195), F = function(n) {
return t.slice(0, n.length) === n;
};
a.exports = function() {
return F("Bun/") ? "BUN" : F("Cloudflare-Workers") ? "CLOUDFLARE" : F("Deno/") ? "DENO" : F("Node.js/") ? "NODE" : d.Bun && typeof Bun.version == "string" ? "BUN" : d.Deno && typeof Deno.version == "object" ? "DENO" : Z(d.process) === "process" ? "NODE" : d.window && d.document ? "BROWSER" : "REST";
}();
}
),
/***/
8574: (
/***/
(a, U, l) => {
var d = l(9504), t = Error, Z = d("".replace), F = function(W) {
return String(new t(W).stack);
}("zxcasd"), n = /\n\s*at [^:]*:[^\n]*/, s = n.test(F);
a.exports = function(W, V) {
if (s && typeof W == "string" && !t.prepareStackTrace)
for (; V--; ) W = Z(W, n, "");
return W;
};
}
),
/***/
6518: (
/***/
(a, U, l) => {
var d = l(4576), t = l(7347).f, Z = l(6699), F = l(6840), n = l(9433), s = l(7740), W = l(2796);
a.exports = function(V, Q) {
var i = V.target, N = V.global, e = V.stat, m, J, M, G, S, T;
if (N ? J = d : e ? J = d[i] || n(i, {}) : J = d[i] && d[i].prototype, J) for (M in Q) {
if (S = Q[M], V.dontCallGetSet ? (T = t(J, M), G = T && T.value) : G = J[M], m = W(N ? M : i + (e ? "." : "#") + M, V.forced), !m && G !== void 0) {
if (typeof S == typeof G) continue;
s(S, G);
}
(V.sham || G && G.sham) && Z(S, "sham", !0), F(J, M, S, V);
}
};
}
),
/***/
9039: (
/***/
(a) => {
a.exports = function(U) {
try {
return !!U();
} catch {
return !0;
}
};
}
),
/***/
8745: (
/***/
(a, U, l) => {
var d = l(616), t = Function.prototype, Z = t.apply, F = t.call;
a.exports = typeof Reflect == "object" && Reflect.apply || (d ? F.bind(Z) : function() {
return F.apply(Z, arguments);
});
}
),
/***/
6080: (
/***/
(a, U, l) => {
var d = l(7476), t = l(9306), Z = l(616), F = d(d.bind);
a.exports = function(n, s) {
return t(n), s === void 0 ? n : Z ? F(n, s) : function() {
return n.apply(s, arguments);
};
};
}
),
/***/
616: (
/***/
(a, U, l) => {
var d = l(9039);
a.exports = !d(function() {
var t = (function() {
}).bind();
return typeof t != "function" || t.hasOwnProperty("prototype");
});
}
),
/***/
9565: (
/***/
(a, U, l) => {
var d = l(616), t = Function.prototype.call;
a.exports = d ? t.bind(t) : function() {
return t.apply(t, arguments);
};
}
),
/***/
350: (
/***/
(a, U, l) => {
var d = l(3724), t = l(9297), Z = Function.prototype, F = d && Object.getOwnPropertyDescriptor, n = t(Z, "name"), s = n && (function() {
}).name === "something", W = n && (!d || d && F(Z, "name").configurable);
a.exports = {
EXISTS: n,
PROPER: s,
CONFIGURABLE: W
};
}
),
/***/
6706: (
/***/
(a, U, l) => {
var d = l(9504), t = l(9306);
a.exports = function(Z, F, n) {
try {
return d(t(Object.getOwnPropertyDescriptor(Z, F)[n]));
} catch {
}
};
}
),
/***/
7476: (
/***/
(a, U, l) => {
var d = l(2195), t = l(9504);
a.exports = function(Z) {
if (d(Z) === "Function") return t(Z);
};
}
),
/***/
9504: (
/***/
(a, U, l) => {
var d = l(616), t = Function.prototype, Z = t.call, F = d && t.bind.bind(Z, Z);
a.exports = d ? F : function(n) {
return function() {
return Z.apply(n, arguments);
};
};
}
),
/***/
9429: (
/***/
(a, U, l) => {
var d = l(4576), t = l(6193);
a.exports = function(Z) {
if (t) {
try {
return d.process.getBuiltinModule(Z);
} catch {
}
try {
return Function('return require("' + Z + '")')();
} catch {
}
}
};
}
),
/***/
7751: (
/***/
(a, U, l) => {
var d = l(4576), t = l(4901), Z = function(F) {
return t(F) ? F : void 0;
};
a.exports = function(F, n) {
return arguments.length < 2 ? Z(d[F]) : d[F] && d[F][n];
};
}
),
/***/
1767: (
/***/
(a) => {
a.exports = function(U) {
return {
iterator: U,
next: U.next,
done: !1
};
};
}
),
/***/
8646: (
/***/
(a, U, l) => {
var d = l(9565), t = l(8551), Z = l(1767), F = l(851);
a.exports = function(n, s) {
(!s || typeof n != "string") && t(n);
var W = F(n);
return Z(t(W !== void 0 ? d(W, n) : n));
};
}
),
/***/
851: (
/***/
(a, U, l) => {
var d = l(6955), t = l(5966), Z = l(4117), F = l(6269), n = l(8227), s = n("iterator");
a.exports = function(W) {
if (!Z(W)) return t(W, s) || t(W, "@@iterator") || F[d(W)];
};
}
),
/***/
81: (
/***/
(a, U, l) => {
var d = l(9565), t = l(9306), Z = l(8551), F = l(6823), n = l(851), s = TypeError;
a.exports = function(W, V) {
var Q = arguments.length < 2 ? n(W) : V;
if (t(Q)) return Z(d(Q, W));
throw new s(F(W) + " is not iterable");
};
}
),
/***/
5966: (
/***/
(a, U, l) => {
var d = l(9306), t = l(4117);
a.exports = function(Z, F) {
var n = Z[F];
return t(n) ? void 0 : d(n);
};
}
),
/***/
3789: (
/***/
(a, U, l) => {
var d = l(9306), t = l(8551), Z = l(9565), F = l(1291), n = l(1767), s = "Invalid size", W = RangeError, V = TypeError, Q = Math.max, i = function(N, e) {
this.set = N, this.size = Q(e, 0), this.has = d(N.has), this.keys = d(N.keys);
};
i.prototype = {
getIterator: function() {
return n(t(Z(this.keys, this.set)));
},
includes: function(N) {
return Z(this.has, this.set, N);
}
}, a.exports = function(N) {
t(N);
var e = +N.size;
if (e !== e) throw new V(s);
var m = F(e);
if (m < 0) throw new W(s);
return new i(N, m);
};
}
),
/***/
4576: (
/***/
function(a) {
var U = function(l) {
return l && l.Math === Math && l;
};
a.exports = // eslint-disable-next-line es/no-global-this -- safe
U(typeof globalThis == "object" && globalThis) || U(typeof window == "object" && window) || // eslint-disable-next-line no-restricted-globals -- safe
U(typeof self == "object" && self) || U(typeof global == "object" && global) || U(typeof this == "object" && this) || // eslint-disable-next-line no-new-func -- fallback
/* @__PURE__ */ function() {
return this;
}() || Function("return this")();
}
),
/***/
9297: (
/***/
(a, U, l) => {
var d = l(9504), t = l(8981), Z = d({}.hasOwnProperty);
a.exports = Object.hasOwn || function(n, s) {
return Z(t(n), s);
};
}
),
/***/
421: (
/***/
(a) => {
a.exports = {};
}
),
/***/
397: (
/***/
(a, U, l) => {
var d = l(7751);
a.exports = d("document", "documentElement");
}
),
/***/
5917: (
/***/
(a, U, l) => {
var d = l(3724), t = l(9039), Z = l(4055);
a.exports = !d && !t(function() {
return Object.defineProperty(Z("div"), "a", {
get: function() {
return 7;
}
}).a !== 7;
});
}
),
/***/
7055: (
/***/
(a, U, l) => {
var d = l(9504), t = l(9039), Z = l(2195), F = Object, n = d("".split);
a.exports = t(function() {
return !F("z").propertyIsEnumerable(0);
}) ? function(s) {
return Z(s) === "String" ? n(s, "") : F(s);
} : F;
}
),
/***/
3167: (
/***/
(a, U, l) => {
var d = l(4901), t = l(34), Z = l(2967);
a.exports = function(F, n, s) {
var W, V;
return (
// it can work only with native `setPrototypeOf`
Z && // we haven't completely correct pre-ES6 way for getting `new.target`, so use this
d(W = n.constructor) && W !== s && t(V = W.prototype) && V !== s.prototype && Z(F, V), F
);
};
}
),
/***/
3706: (
/***/
(a, U, l) => {
var d = l(9504), t = l(4901), Z = l(7629), F = d(Function.toString);
t(Z.inspectSource) || (Z.inspectSource = function(n) {
return F(n);
}), a.exports = Z.inspectSource;
}
),
/***/
1181: (
/***/
(a, U, l) => {
var d = l(8622), t = l(4576), Z = l(34), F = l(6699), n = l(9297), s = l(7629), W = l(6119), V = l(421), Q = "Object already initialized", i = t.TypeError, N = t.WeakMap, e, m, J, M = function(u) {
return J(u) ? m(u) : e(u, {});
}, G = function(u) {
return function(Y) {
var o;
if (!Z(Y) || (o = m(Y)).type !== u)
throw new i("Incompatible receiver, " + u + " required");
return o;
};
};
if (d || s.state) {
var S = s.state || (s.state = new N());
S.get = S.get, S.has = S.has, S.set = S.set, e = function(u, Y) {
if (S.has(u)) throw new i(Q);
return Y.facade = u, S.set(u, Y), Y;
}, m = function(u) {
return S.get(u) || {};
}, J = function(u) {
return S.has(u);
};
} else {
var T = W("state");
V[T] = !0, e = function(u, Y) {
if (n(u, T)) throw new i(Q);
return Y.facade = u, F(u, T, Y), Y;
}, m = function(u) {
return n(u, T) ? u[T] : {};
}, J = function(u) {
return n(u, T);
};
}
a.exports = {
set: e,
get: m,
has: J,
enforce: M,
getterFor: G
};
}
),
/***/
4209: (
/***/
(a, U, l) => {
var d = l(8227), t = l(6269), Z = d("iterator"), F = Array.prototype;
a.exports = function(n) {
return n !== void 0 && (t.Array === n || F[Z] === n);
};
}
),
/***/
4376: (
/***/
(a, U, l) => {
var d = l(2195);
a.exports = Array.isArray || function(Z) {
return d(Z) === "Array";
};
}
),
/***/
1108: (
/***/
(a, U, l) => {
var d = l(6955);
a.exports = function(t) {
var Z = d(t);
return Z === "BigInt64Array" || Z === "BigUint64Array";
};
}
),
/***/
4901: (
/***/
(a) => {
var U = typeof document == "object" && document.all;
a.exports = typeof U > "u" && U !== void 0 ? function(l) {
return typeof l == "function" || l === U;
} : function(l) {
return typeof l == "function";
};
}
),
/***/
2796: (
/***/
(a, U, l) => {
var d = l(9039), t = l(4901), Z = /#|\.prototype\./, F = function(Q, i) {
var N = s[n(Q)];
return N === V ? !0 : N === W ? !1 : t(i) ? d(i) : !!i;
}, n = F.normalize = function(Q) {
return String(Q).replace(Z, ".").toLowerCase();
}, s = F.data = {}, W = F.NATIVE = "N", V = F.POLYFILL = "P";
a.exports = F;
}
),
/***/
4117: (
/***/
(a) => {
a.exports = function(U) {
return U == null;
};
}
),
/***/
34: (
/***/
(a, U, l) => {
var d = l(4901);
a.exports = function(t) {
return typeof t == "object" ? t !== null : d(t);
};
}
),
/***/
3925: (
/***/
(a, U, l) => {
var d = l(34);
a.exports = function(t) {
return d(t) || t === null;
};
}
),
/***/
6395: (
/***/
(a) => {
a.exports = !1;
}
),
/***/
757: (
/***/
(a, U, l) => {
var d = l(7751), t = l(4901), Z = l(1625), F = l(7040), n = Object;
a.exports = F ? function(s) {
return typeof s == "symbol";
} : function(s) {
var W = d("Symbol");
return t(W) && Z(W.prototype, n(s));
};
}
),
/***/
507: (
/***/
(a, U, l) => {
var d = l(9565);
a.exports = function(t, Z, F) {
for (var n = F ? t : t.iterator, s = t.next, W, V; !(W = d(s, n)).done; )
if (V = Z(W.value), V !== void 0) return V;
};
}
),
/***/
2652: (
/***/
(a, U, l) => {
var d = l(6080), t = l(9565), Z = l(8551), F = l(6823), n = l(4209), s = l(6198), W = l(1625), V = l(81), Q = l(851), i = l(9539), N = TypeError, e = function(J, M) {
this.stopped = J, this.result = M;
}, m = e.prototype;
a.exports = function(J, M, G) {
var S = G && G.that, T = !!(G && G.AS_ENTRIES), u = !!(G && G.IS_RECORD), Y = !!(G && G.IS_ITERATOR), o = !!(G && G.INTERRUPTED), B = d(M, S), X, p, y, r, D, E, P, k = function(q) {
return X && i(X, "normal", q), new e(!0, q);
}, I = function(q) {
return T ? (Z(q), o ? B(q[0], q[1], k) : B(q[0], q[1])) : o ? B(q, k) : B(q);
};
if (u)
X = J.iterator;
else if (Y)
X = J;
else {
if (p = Q(J), !p) throw new N(F(J) + " is not iterable");
if (n(p)) {
for (y = 0, r = s(J); r > y; y++)
if (D = I(J[y]), D && W(m, D)) return D;
return new e(!1);
}
X = V(J, p);
}
for (E = u ? J.next : X.next; !(P = t(E, X)).done; ) {
try {
D = I(P.value);
} catch (q) {
i(X, "throw", q);
}
if (typeof D == "object" && D && W(m, D)) return D;
}
return new e(!1);
};
}
),
/***/
9539: (
/***/
(a, U, l) => {
var d = l(9565), t = l(8551), Z = l(5966);
a.exports = function(F, n, s) {
var W, V;
t(F);
try {
if (W = Z(F, "return"), !W) {
if (n === "throw") throw s;
return s;
}
W = d(W, F);
} catch (Q) {
V = !0, W = Q;
}
if (n === "throw") throw s;
if (V) throw W;
return t(W), s;
};
}
),
/***/
9462: (
/***/
(a, U, l) => {
var d = l(9565), t = l(2360), Z = l(6699), F = l(6279), n = l(8227), s = l(1181), W = l(5966), V = l(7657).IteratorPrototype, Q = l(2529), i = l(9539), N = n("toStringTag"), e = "IteratorHelper", m = "WrapForValidIterator", J = s.set, M = function(T) {
var u = s.getterFor(T ? m : e);
return F(t(V), {
next: function() {
var o = u(this);
if (T) return o.nextHandler();
try {
var B = o.done ? void 0 : o.nextHandler();
return Q(B, o.done);
} catch (X) {
throw o.done = !0, X;
}
},
return: function() {
var Y = u(this), o = Y.iterator;
if (Y.done = !0, T) {
var B = W(o, "return");
return B ? d(B, o) : Q(void 0, !0);
}
if (Y.inner) try {
i(Y.inner.iterator, "normal");
} catch (X) {
return i(o, "throw", X);
}
return o && i(o, "normal"), Q(void 0, !0);
}
});
}, G = M(!0), S = M(!1);
Z(S, N, "Iterator Helper"), a.exports = function(T, u) {
var Y = function(B, X) {
X ? (X.iterator = B.iterator, X.next = B.next) : X = B, X.type = u ? m : e, X.nextHandler = T, X.counter = 0, X.done = !1, J(this, X);
};
return Y.prototype = u ? G : S, Y;
};
}
),
/***/
713: (
/***/
(a, U, l) => {
var d = l(9565), t = l(9306), Z = l(8551), F = l(1767), n = l(9462), s = l(6319), W = n(function() {
var V = this.iterator, Q = Z(d(this.next, V)), i = this.done = !!Q.done;
if (!i) return s(V, this.mapper, [Q.value, this.counter++], !0);
});
a.exports = function(Q) {
return Z(this), t(Q), new W(F(this), {
mapper: Q
});
};
}
),
/***/
7657: (
/***/
(a, U, l) => {
var d = l(9039), t = l(4901), Z = l(34), F = l(2360), n = l(2787), s = l(6840), W = l(8227), V = l(6395), Q = W("iterator"), i = !1, N, e, m;
[].keys && (m = [].keys(), "next" in m ? (e = n(n(m)), e !== Object.prototype && (N = e)) : i = !0);
var J = !Z(N) || d(function() {
var M = {};
return N[Q].call(M) !== M;
});
J ? N = {} : V && (N = F(N)), t(N[Q]) || s(N, Q, function() {
return this;
}), a.exports = {
IteratorPrototype: N,
BUGGY_SAFARI_ITERATORS: i
};
}
),
/***/
6269: (
/***/
(a) => {
a.exports = {};
}
),
/***/
6198: (
/***/
(a, U, l) => {
var d = l(8014);
a.exports = function(t) {
return d(t.length);
};
}
),
/***/
283: (
/***/
(a, U, l) => {
var d = l(9504), t = l(9039), Z = l(4901), F = l(9297), n = l(3724), s = l(350).CONFIGURABLE, W = l(3706), V = l(1181), Q = V.enforce, i = V.get, N = String, e = Object.defineProperty, m = d("".slice), J = d("".replace), M = d([].join), G = n && !t(function() {
return e(function() {
}, "length", { value: 8 }).length !== 8;
}), S = String(String).split("String"), T = a.exports = function(u, Y, o) {
m(N(Y), 0, 7) === "Symbol(" && (Y = "[" + J(N(Y), /^Symbol\(([^)]*)\).*$/, "$1") + "]"), o && o.getter && (Y = "get " + Y), o && o.setter && (Y = "set " + Y), (!F(u, "name") || s && u.name !== Y) && (n ? e(u, "name", { value: Y, configurable: !0 }) : u.name = Y), G && o && F(o, "arity") && u.length !== o.arity && e(u, "length", { value: o.arity });
try {
o && F(o, "constructor") && o.constructor ? n && e(u, "prototype", { writable: !1 }) : u.prototype && (u.prototype = void 0);
} catch {
}
var B = Q(u);
return F(B, "source") || (B.source = M(S, typeof Y == "string" ? Y : "")), u;
};
Function.prototype.toString = T(function() {
return Z(this) && i(this).source || W(this);
}, "toString");
}
),
/***/
741: (
/***/
(a) => {
var U = Math.ceil, l = Math.floor;
a.exports = Math.trunc || function(t) {
var Z = +t;
return (Z > 0 ? l : U)(Z);
};
}
),
/***/
6043: (
/***/
(a, U, l) => {
var d = l(9306), t = TypeError, Z = function(F) {
var n, s;
this.promise = new F(function(W, V) {
if (n !== void 0 || s !== void 0) throw new t("Bad Promise constructor");
n = W, s = V;
}), this.resolve = d(n), this.reject = d(s);
};
a.exports.f = function(F) {
return new Z(F);
};
}
),
/***/
2603: (
/***/
(a, U, l) => {
var d = l(655);
a.exports = function(t, Z) {
return t === void 0 ? arguments.length < 2 ? "" : Z : d(t);
};
}
),
/***/
4149: (
/***/
(a) => {
var U = RangeError;
a.exports = function(l) {
if (l === l) return l;
throw new U("NaN is not allowed");
};
}
),
/***/
2360: (
/***/
(a, U, l) => {
var d = l(8551), t = l(6801), Z = l(8727), F = l(421), n = l(397), s = l(4055), W = l(6119), V = ">", Q = "<", i = "prototype", N = "script", e = W("IE_PROTO"), m = function() {
}, J = function(u) {
return Q + N + V + u + Q + "/" + N + V;
}, M = function(u) {
u.write(J("")), u.close();
var Y = u.parentWindow.Object;
return u = null, Y;
}, G = function() {
var u = s("iframe"), Y = "java" + N + ":", o;
return u.style.display = "none", n.appendChild(u), u.src = String(Y), o = u.contentWindow.document, o.open(), o.write(J("document.F=Object")), o.close(), o.F;
}, S, T = function() {
try {
S = new ActiveXObject("htmlfile");
} catch {
}
T = typeof document < "u" ? document.domain && S ? M(S) : G() : M(S);
for (var u = Z.length; u--; ) delete T[i][Z[u]];
return T();
};
F[e] = !0, a.exports = Object.create || function(Y, o) {
var B;
return Y !== null ? (m[i] = d(Y), B = new m(), m[i] = null, B[e] = Y) : B = T(), o === void 0 ? B : t.f(B, o);
};
}
),
/***/
6801: (
/***/
(a, U, l) => {
var d = l(3724), t = l(8686), Z = l(4913), F = l(8551), n = l(5397), s = l(1072);
U.f = d && !t ? Object.defineProperties : function(V, Q) {
F(V);
for (var i = n(Q), N = s(Q), e = N.length, m = 0, J; e > m; ) Z.f(V, J = N[m++], i[J]);
return V;
};
}
),
/***/
4913: (
/***/
(a, U, l) => {
var d = l(3724), t = l(5917), Z = l(8686), F = l(8551), n = l(6969), s = TypeError, W = Object.defineProperty, V = Object.getOwnPropertyDescriptor, Q = "enumerable", i = "configurable", N = "writable";
U.f = d ? Z ? function(m, J, M) {
if (F(m), J = n(J), F(M), typeof m == "function" && J === "prototype" && "value" in M && N in M && !M[N]) {
var G = V(m, J);
G && G[N] && (m[J] = M.value, M = {
configurable: i in M ? M[i] : G[i],
enumerable: Q in M ? M[Q] : G[Q],
writable: !1
});
}
return W(m, J, M);
} : W : function(m, J, M) {
if (F(m), J = n(J), F(M), t) try {
return W(m, J, M);
} catch {
}
if ("get" in M || "set" in M) throw new s("Accessors not supported");
return "value" in M && (m[J] = M.value), m;
};
}
),
/***/
7347: (
/***/
(a, U, l) => {
var d = l(3724), t = l(9565), Z = l(8773), F = l(6980), n = l(5397), s = l(6969), W = l(9297), V = l(5917), Q = Object.getOwnPropertyDescriptor;
U.f = d ? Q : function(N, e) {
if (N = n(N), e = s(e), V) try {
return Q(N, e);
} catch {
}
if (W(N, e)) return F(!t(Z.f, N, e), N[e]);
};
}
),
/***/
8480: (
/***/
(a, U, l) => {
var d = l(1828), t = l(8727), Z = t.concat("length", "prototype");
U.f = Object.getOwnPropertyNames || function(n) {
return d(n, Z);
};
}
),
/***/
3717: (
/***/
(a, U) => {
U.f = Object.getOwnPropertySymbols;
}
),
/***/
2787: (
/***/
(a, U, l) => {
var d = l(9297), t = l(4901), Z = l(8981), F = l(6119), n = l(2211), s = F("IE_PROTO"), W = Object, V = W.prototype;
a.exports = n ? W.getPrototypeOf : function(Q) {
var i = Z(Q);
if (d(i, s)) return i[s];
var N = i.constructor;
return t(N) && i instanceof N ? N.prototype : i instanceof W ? V : null;
};
}
),
/***/
1625: (
/***/
(a, U, l) => {
var d = l(9504);
a.exports = d({}.isPrototypeOf);
}
),
/***/
1828: (
/***/
(a, U, l) => {
var d = l(9504), t = l(9297), Z = l(5397), F = l(9617).indexOf, n = l(421), s = d([].push);
a.exports = function(W, V) {
var Q = Z(W), i = 0, N = [], e;
for (e in Q) !t(n, e) && t(Q, e) && s(N, e);
for (; V.length > i; ) t(Q, e = V[i++]) && (~F(N, e) || s(N, e));
return N;
};
}
),
/***/
1072: (
/***/
(a, U, l) => {
var d = l(1828), t = l(8727);
a.exports = Object.keys || function(F) {
return d(F, t);
};
}
),
/***/
8773: (
/***/
(a, U) => {
var l = {}.propertyIsEnumerable, d = Object.getOwnPropertyDescriptor, t = d && !l.call({ 1: 2 }, 1);
U.f = t ? function(F) {
var n = d(this, F);
return !!n && n.enumerable;
} : l;
}
),
/***/
2967: (
/***/
(a, U, l) => {
var d = l(6706), t = l(34), Z = l(7750), F = l(3506);
a.exports = Object.setPrototypeOf || ("__proto__" in {} ? function() {
var n = !1, s = {}, W;
try {
W = d(Object.prototype, "__proto__", "set"), W(s, []), n = s instanceof Array;
} catch {
}
return function(Q, i) {
return Z(Q), F(i), t(Q) && (n ? W(Q, i) : Q.__proto__ = i), Q;
};
}() : void 0);
}
),
/***/
4270: (
/***/
(a, U, l) => {
var d = l(9565), t = l(4901), Z = l(34), F = TypeError;
a.exports = function(n, s) {
var W, V;
if (s === "string" && t(W = n.toString) && !Z(V = d(W, n)) || t(W = n.valueOf) && !Z(V = d(W, n)) || s !== "string" && t(W = n.toString) && !Z(V = d(W, n))) return V;
throw new F("Can't convert object to primitive value");
};
}
),
/***/
5031: (
/***/
(a, U, l) => {
var d = l(7751), t = l(9504), Z = l(8480), F = l(3717), n = l(8551), s = t([].concat);
a.exports = d("Reflect", "ownKeys") || function(V) {
var Q = Z.f(n(V)), i = F.f;
return i ? s(Q, i(V)) : Q;
};
}
),
/***/
8235: (
/***/
(a, U, l) => {
var d = l(9504), t = l(9297), Z = SyntaxError, F = parseInt, n = String.fromCharCode, s = d("".charAt), W = d("".slice), V = d(/./.exec), Q = {
'\\"': '"',
"\\\\": "\\",
"\\/": "/",
"\\b": "\b",
"\\f": "\f",
"\\n": `
`,
"\\r": "\r",
"\\t": " "
}, i = /^[\da-f]{4}$/i, N = /^[\u0000-\u001F]$/;
a.exports = function(e, m) {
for (var J = !0, M = ""; m < e.length; ) {
var G = s(e, m);
if (G === "\\") {
var S = W(e, m, m + 2);
if (t(Q, S))
M += Q[S], m += 2;
else if (S === "\\u") {
m += 2;
var T = W(e, m, m + 4);
if (!V(i, T)) throw new Z("Bad Unicode escape at: " + m);
M += n(F(T, 16)), m += 4;
} else throw new Z('Unknown escape sequence: "' + S + '"');
} else if (G === '"') {
J = !1, m++;
break;
} else {
if (V(N, G)) throw new Z("Bad control character in string literal at: " + m);
M += G, m++;
}
}
if (J) throw new Z("Unterminated string at: " + m);
return { value: M, end: m };
};
}
),
/***/
1103: (
/***/
(a) => {
a.exports = function(U) {
try {
return { error: !1, value: U() };
} catch (l) {
return { error: !0, value: l };
}
};
}
),
/***/
7750: (
/***/
(a, U, l) => {
var d = l(4117), t = TypeError;
a.exports = function(Z) {
if (d(Z)) throw new t("Can't call method on " + Z);
return Z;
};
}
),
/***/
9286: (
/***/
(a, U, l) => {
var d = l(4402), t = l(8469), Z = d.Set, F = d.add;
a.exports = function(n) {
var s = new Z();
return t(n, function(W) {
F(s, W);
}), s;
};
}
),
/***/
3440: (
/***/
(a, U, l) => {
var d = l(7080), t = l(4402), Z = l(9286), F = l(5170), n = l(3789), s = l(8469), W = l(507), V = t.has, Q = t.remove;
a.exports = function(N) {
var e = d(this), m = n(N), J = Z(e);
return F(e) <= m.size ? s(e, function(M) {
m.includes(M) && Q(J, M);
}) : W(m.getIterator(), function(M) {
V(e, M) && Q(J, M);
}), J;
};
}
),
/***/
4402: (
/***/
(a, U, l) => {
var d = l(9504), t = Set.prototype;
a.exports = {
// eslint-disable-next-line es/no-set -- safe
Set,
add: d(t.add),
has: d(t.has),
remove: d(t.delete),
proto: t
};
}
),
/***/
8750: (
/***/
(a, U, l) => {
var d = l(7080), t = l(4402), Z = l(5170), F = l(3789), n = l(8469), s = l(507), W = t.Set, V = t.add, Q = t.has;
a.exports = function(N) {
var e = d(this), m = F(N), J = new W();
return Z(e) > m.size ? s(m.getIterator(), function(M) {
Q(e, M) && V(J, M);
}) : n(e, function(M) {
m.includes(M) && V(J, M);
}), J;
};
}
),
/***/
4449: (
/***/
(a, U, l) => {
var d = l(7080), t = l(4402).has, Z = l(5170), F = l(3789), n = l(8469), s = l(507), W = l(9539);
a.exports = function(Q) {
var i = d(this), N = F(Q);
if (Z(i) <= N.size) return n(i, function(m) {
if (N.includes(m)) return !1;
}, !0) !== !1;
var e = N.getIterator();
return s(e, function(m) {
if (t(i, m)) return W(e, "normal", !1);
}) !== !1;
};
}
),
/***/
3838: (
/***/
(a, U, l) => {
var d = l(7080), t = l(5170), Z = l(8469), F = l(3789);
a.exports = function(s) {
var W = d(this), V = F(s);
return t(W) > V.size ? !1 : Z(W, function(Q) {
if (!V.includes(Q)) return !1;
}, !0) !== !1;
};
}
),
/***/
8527: (
/***/
(a, U, l) => {
var d = l(7080), t = l(4402).has, Z = l(5170), F = l(3789), n = l(507), s = l(9539);
a.exports = function(V) {
var Q = d(this), i = F(V);
if (Z(Q) < i.size) return !1;
var N = i.getIterator();
return n(N, function(e) {
if (!t(Q, e)) return s(N, "normal", !1);
}) !== !1;
};
}
),
/***/
8469: (
/***/
(a, U, l) => {
var d = l(9504), t = l(507), Z = l(4402), F = Z.Set, n = Z.proto, s = d(n.forEach), W = d(n.keys), V = W(new F()).next;
a.exports = function(Q, i, N) {
return N ? t({ iterator: W(Q), next: V }, i) : s(Q, i);
};
}
),
/***/
4916: (
/***/
(a, U, l) => {
var d = l(7751), t = function(Z) {
return {
size: Z,
has: function() {
return !1;
},
keys: function() {
return {
next: function() {
return { done: !0 };
}
};
}
};
};
a.exports = function(Z) {
var F = d("Set");
try {
new F()[Z](t(0));
try {
return new F()[Z](t(-1)), !1;
} catch {
return !0;
}
} catch {
return !1;
}
};
}
),
/***/
5170: (
/***/
(a, U, l) => {
var d = l(6706), t = l(4402);
a.exports = d(t.proto, "size", "get") || function(Z) {
return Z.size;
};
}
),
/***/
3650: (
/***/
(a, U, l) => {
var d = l(7080), t = l(4402), Z = l(9286), F = l(3789), n = l(507), s = t.add, W = t.has, V = t.remove;
a.exports = function(i) {
var N = d(this), e = F(i).getIterator(), m = Z(N);
return n(e, function(J) {
W(N, J) ? V(m, J) : s(m, J);
}), m;
};
}
),
/***/
4204: (
/***/
(a, U, l) => {
var d = l(7080), t = l(4402).add, Z = l(9286), F = l(3789), n = l(507);
a.exports = function(W) {
var V = d(this), Q = F(W).getIterator(), i = Z(V);
return n(Q, function(N) {
t(i, N);
}), i;
};
}
),
/***/
6119: (
/***/
(a, U, l) => {
var d = l(5745), t = l(3392), Z = d("keys");
a.exports = function(F) {
return Z[F] || (Z[F] = t(F));
};
}
),
/***/
7629: (
/***/
(a, U, l) => {
var d = l(6395), t = l(4576), Z = l(9433), F = "__core-js_shared__", n = a.exports = t[F] || Z(F, {});
(n.versions || (n.versions = [])).push({
version: "3.39.0",
mode: d ? "pure" : "global",
copyright: "© 2014-2024 Denis Pushkarev (zloirock.ru)",
license: "https://github.com/zloirock/core-js/blob/v3.39.0/LICENSE",
source: "https://github.com/zloirock/core-js"
});
}
),
/***/
5745: (
/***/
(a, U, l) => {
var d = l(7629);
a.exports = function(t, Z) {
return d[t] || (d[t] = Z || {});
};
}
),
/***/
1548: (
/***/
(a, U, l) => {
var d = l(4576), t = l(9039), Z = l(9519), F = l(4215), n = d.structuredClone;
a.exports = !!n && !t(function() {
if (F === "DENO" && Z > 92 || F === "NODE" && Z > 94 || F === "BROWSER" && Z > 97) return !1;
var s = new ArrayBuffer(8), W = n(s, { transfer: [s] });
return s.byteLength !== 0 || W.byteLength !== 8;
});
}
),
/***/
4495: (
/***/
(a, U, l) => {
var d = l(9519), t = l(9039), Z = l(4576), F = Z.String;
a.exports = !!Object.getOwnPropertySymbols && !t(function() {
var n = Symbol("symbol detection");
return !F(n) || !(Object(n) instanceof Symbol) || // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances
!Symbol.sham && d && d < 41;
});
}
),
/***/
5610: (
/***/
(a, U, l) => {
var d = l(1291), t = Math.max, Z = Math.min;
a.exports = function(F, n) {
var s = d(F);
return s < 0 ? t(s + n, 0) : Z(s, n);
};
}
),
/***/
5854: (
/***/
(a, U, l) => {
var d = l(2777), t = TypeError;
a.exports = function(Z) {
var F = d(Z, "number");
if (typeof F == "number") throw new t("Can't convert number to bigint");
return BigInt(F);
};
}
),
/***/
7696: (
/***/
(a, U, l) => {
var d = l(1291), t = l(8014), Z = RangeError;
a.exports = function(F) {
if (F === void 0) return 0;
var n = d(F), s = t(n);
if (n !== s) throw new Z("Wrong length or index");
return s;
};
}
),
/***/
5397: (
/***/
(a, U, l) => {
var d = l(7055), t = l(7750);
a.exports = function(Z) {
return d(t(Z));
};
}
),
/***/
1291: (
/***/
(a, U, l) => {
var d = l(741);
a.exports = function(t) {
var Z = +t;
return Z !== Z || Z === 0 ? 0 : d(Z);
};
}
),
/***/
8014: (
/***/
(a, U, l) => {
var d = l(1291), t = Math.min;
a.exports = function(Z) {
var F = d(Z);
return F > 0 ? t(F, 9007199254740991) : 0;
};
}
),
/***/
8981: (
/***/
(a, U, l) => {
var d = l(7750), t = Object;
a.exports = function(Z) {
return t(d(Z));
};
}
),
/***/
9590: (
/***/
(a, U, l) => {
var d = l(1291), t = RangeError;
a.exports = function(Z) {
var F = d(Z);
if (F < 0) throw new t("The argument can't be less than 0");
return F;
};
}
),
/***/
2777: (
/***/
(a, U, l) => {
var d = l(9565), t = l(34), Z = l(757), F = l(5966), n = l(4270), s = l(8227), W = TypeError, V = s("toPrimitive");
a.exports = function(Q, i) {
if (!t(Q) || Z(Q)) return Q;
var N = F(Q, V), e;
if (N) {
if (i === void 0 && (i = "default"), e = d(N, Q, i), !t(e) || Z(e)) return e;
throw new W("Can't convert object to primitive value");
}
return i === void 0 && (i = "number"), n(Q, i);
};
}
),
/***/
6969: (
/***/
(a, U, l) => {
var d = l(2777), t = l(757);
a.exports = function(Z) {
var F = d(Z, "string");
return t(F) ? F : F + "";
};
}
),
/***/
2140: (
/***/
(a, U, l) => {
var d = l(8227), t = d("toStringTag"), Z = {};
Z[t] = "z", a.exports = String(Z) === "[object z]";
}
),
/***/
655: (
/***/
(a, U, l) => {
var d = l(6955), t = String;
a.exports = function(Z) {
if (d(Z) === "Symbol") throw new TypeError("Cannot convert a Symbol value to a string");
return t(Z);
};
}
),
/***/
6823: (
/***/
(a) => {
var U = String;
a.exports = function(l) {
try {
return U(l);
} catch {
return "Object";
}
};
}
),
/***/
3392: (
/***/
(a, U, l) => {
var d = l(9504), t = 0, Z = Math.random(), F = d(1 .toString);
a.exports = function(n) {
return "Symbol(" + (n === void 0 ? "" : n) + ")_" + F(++t + Z, 36);
};
}
),
/***/
7040: (
/***/
(a, U, l) => {
var d = l(4495);
a.exports = d && !Symbol.sham && typeof Symbol.iterator == "symbol";
}
),
/***/
8686: (
/***/
(a, U, l) => {
var d = l(3724), t = l(9039);
a.exports = d && t(function() {
return Object.defineProperty(function() {
}, "prototype", {
value: 42,
writable: !1
}).prototype !== 42;
});
}
),
/***/
2812: (
/***/
(a) => {
var U = TypeError;
a.exports = function(l, d) {
if (l < d) throw new U("Not enough arguments");
return l;
};
}
),
/***/
8622: (
/***/
(a, U, l) => {
var d = l(4576), t = l(4901), Z = d.WeakMap;
a.exports = t(Z) && /native code/.test(String(Z));
}
),
/***/
8227: (
/***/
(a, U, l) => {
var d = l(4576), t = l(5745), Z = l(9297), F = l(3392), n = l(4495), s = l(7040), W = d.Symbol, V = t("wks"), Q = s ? W.for || W : W && W.withoutSetter || F;
a.exports = function(i) {
return Z(V, i) || (V[i] = n && Z(W, i) ? W[i] : Q("Symbol." + i)), V[i];
};
}
),
/***/
6573: (
/***/
(a, U, l) => {
var d = l(3724), t = l(2106), Z = l(3238), F = ArrayBuffer.prototype;
d && !("detached" in F) && t(F, "detached", {
configurable: !0,
get: function() {
return Z(this);
}
});
}
),
/***/
7936: (
/***/
(a, U, l) => {
var d = l(6518), t = l(5636);
t && d({ target: "ArrayBuffer", proto: !0 }, {
transferToFixedLength: function() {
return t(this, arguments.length ? arguments[0] : void 0, !1);
}
});
}
),
/***/
8100: (
/***/
(a, U, l) => {
var d = l(6518), t = l(5636);
t && d({ target: "ArrayBuffer", proto: !0 }, {
transfer: function() {
return t(this, arguments.length ? arguments[0] : void 0, !0);
}
});
}
),
/***/
4114: (
/***/
(a, U, l) => {
var d = l(6518), t = l(8981), Z = l(6198), F = l(4527), n = l(6837), s = l(9039), W = s(function() {
return [].push.call({ length: 4294967296 }, 1) !== 4294967297;
}), V = function() {
try {
Object.defineProperty([], "length", { writable: !1 }).push();
} catch (i) {
return i instanceof TypeError;
}
}, Q = W || !V();
d({ target: "Array", proto: !0, arity: 1, forced: Q }, {
// eslint-disable-next-line no-unused-vars -- required for `.length`
push: function(N) {
var e = t(this), m = Z(e), J = arguments.length;
n(m + J);
for (var M = 0; M < J; M++)
e[m] = arguments[M], m++;
return F(e, m), m;
}
});
}
),
/***/
8111: (
/***/
(a, U, l) => {
var d = l(6518), t = l(4576), Z = l(679), F = l(8551), n = l(4901), s = l(2787), W = l(2106), V = l(4659), Q = l(9039), i = l(9297), N = l(8227), e = l(7657).IteratorPrototype, m = l(3724), J = l(6395), M = "constructor", G = "Iterator", S = N("toStringTag"), T = TypeError, u = t[G], Y = J || !n(u) || u.prototype !== e || !Q(function() {
u({});
}), o = function() {
if (Z(this, e), s(this) === e) throw new T("Abstract class Iterator not directly constructable");
}, B = function(X, p) {
m ? W(e, X, {
configurable: !0,
get: function() {
return p;
},
set: function(y) {
if (F(this), this === e) throw new T("You can't redefine this property");
i(this, X) ? this[X] = y : V(this, X, y);
}
}) : e[X] = p;
};
i(e, S) || B(S, G), (Y || !i(e, M) || e[M] === Object) && B(M, o), o.prototype = e, d({ global: !0, constructor: !0, forced: Y }, {
Iterator: o
});
}
),
/***/
9314: (
/***/
(a, U, l) => {
var d = l(6518), t = l(9565), Z = l(8551), F = l(1767), n = l(4149), s = l(9590), W = l(9462), V = l(6395), Q = W(function() {
for (var i = this.iterator, N = this.next, e, m; this.remaining; )
if (this.remaining--, e = Z(t(N, i)), m = this.done = !!e.done, m) return;
if (e = Z(t(N, i)), m = this.done = !!e.done, !m) return e.value;
});
d({ target: "Iterator", proto: !0, real: !0, forced: V }, {
drop: function(N) {
Z(this);
var e = s(n(+N));
return new Q(F(this), {
remaining: e
});
}
});
}
),
/***/
1148: (
/***/
(a, U, l) => {
var d = l(6518), t = l(2652), Z = l(9306), F = l(8551), n = l(1767);
d({ target: "Iterator", proto: !0, real: !0 }, {
every: function(W) {
F(this), Z(W);
var V = n(this), Q = 0;
return !t(V, function(i, N) {
if (!W(i, Q++)) return N();
}, { IS_RECORD: !0, INTERRUPTED: !0 }).stopped;
}
});
}
),
/***/
2489: (
/***/
(a, U, l) => {
var d = l(6518), t = l(9565), Z = l(9306), F = l(8551), n = l(1767), s = l(9462), W = l(6319), V = l(6395), Q = s(function() {
for (var i = this.iterator, N = this.predicate, e = this.next, m, J, M; ; ) {
if (m = F(t(e, i)), J = this.done = !!m.done, J) return;
if (M = m.value, W(i, N, [M, this.counter++], !0)) return M;
}
});
d({ target: "Iterator", proto: !0, real: !0, forced: V }, {
filter: function(N) {
return F(this), Z(N), new Q(n(this), {
predicate: N
});
}
});
}
),
/***/
531: (
/***/
(a, U, l) => {
var d = l(6518), t = l(9565), Z = l(9306), F = l(8551), n = l(1767), s = l(8646), W = l(9462), V = l(9539), Q = l(6395), i = W(function() {
for (var N = this.iterator, e = this.mapper, m, J; ; ) {
if (J = this.inner) try {
if (m = F(t(J.next, J.iterator)), !m.done) return m.value;
this.inner = null;
} catch (M) {
V(N, "throw", M);
}
if (m = F(t(this.next, N)), this.done = !!m.done) return;
try {
this.inner = s(e(m.value, this.counter++), !1);
} catch (M) {
V(N, "throw", M);
}
}
});
d({ target: "Iterator", proto: !0, real: !0, forced: Q }, {
flatMap: function(e) {
return F(this), Z(e), new i(n(this), {
mapper: e,
inner: null
});
}
});
}
),
/***/
1701: (
/***/
(a, U, l) => {
var d = l(6518), t = l(713), Z = l(6395);
d({ target: "Iterator", proto: !0, real: !0, forced: Z }, {
map: t
});
}
),
/***/
3579: (
/***/
(a, U, l) => {
var d = l(6518), t = l(2652), Z = l(9306), F = l(8551), n = l(1767);
d({ target: "Iterator", proto: !0, real: !0 }, {
some: function(W) {
F(this), Z(W);
var V = n(this), Q = 0;
return t(V, function(i, N) {
if (W(i, Q++)) return N();
}, { IS_RECORD: !0, INTERRUPTED: !0 }).stopped;
}
});
}
),
/***/
1689: (
/***/
(a, U, l) => {
var d = l(6518), t = l(4576), Z = l(8745), F = l(7680), n = l(6043), s = l(9306), W = l(1103), V = t.Promise, Q = !1, i = !V || !V.try || W(function() {
V.try(function(N) {
Q = N === 8;
}, 8);
}).error || !Q;
d({ target: "Promise", stat: !0, forced: i }, {
try: function(N) {
var e = arguments.length > 1 ? F(arguments, 1) : [], m = n.f(this), J = W(function() {
return Z(s(N), void 0, e);
});
return (J.error ? m.reject : m.resolve)(J.value), m.promise;
}
});
}
),
/***/
4628: (
/***/
(a, U, l) => {
var d = l(6518), t = l(6043);
d({ target: "Promise", stat: !0 }, {
withResolvers: function() {
var F = t.f(this);
return {
promise: F.promise,
resolve: F.resolve,
reject: F.reject
};
}
});
}
),
/***/
7642: (
/***/
(a, U, l) => {
var d = l(6518), t = l(3440), Z = l(4916);
d({ target: "Set", proto: !0, real: !0, forced: !Z("difference") }, {
difference: t
});
}
),
/***/
8004: (
/***/
(a, U, l) => {
var d = l(6518), t = l(9039), Z = l(8750), F = l(4916), n = !F("intersection") || t(function() {
return String(Array.from((/* @__PURE__ */ new Set([1, 2, 3])).intersection(/* @__PURE__ */ new Set([3, 2])))) !== "3,2";
});
d({ target: "Set", proto: !0, real: !0, forced: n }, {
intersection: Z
});
}
),
/***/
3853: (
/***/
(a, U, l) => {
var d = l(6518), t = l(4449), Z = l(4916);
d({ target: "Set", proto: !0, real: !0, forced: !Z("isDisjointFrom") }, {
isDisjointFrom: t
});
}
),
/***/
5876: (
/***/
(a, U, l) => {
var d = l(6518), t = l(3838), Z = l(4916);
d({ target: "Set", proto: !0, real: !0, forced: !Z("isSubsetOf") }, {
isSubsetOf: t
});
}
),
/***/
2475: (
/***/
(a, U, l) => {
var d = l(6518), t = l(8527), Z = l(4916);
d({ target: "Set", proto: !0, real: !0, forced: !Z("isSupersetOf") }, {
isSupersetOf: t
});
}
),
/***/
5024: (
/***/
(a, U, l) => {
var d = l(6518), t = l(3650), Z = l(4916);
d({ target: "Set", proto: !0, real: !0, forced: !Z("symmetricDifference") }, {
symmetricDifference: t
});
}
),
/***/
1698: (
/***/
(a, U, l) => {
var d = l(6518), t = l(4204), Z = l(4916);
d({ target: "Set", proto: !0, real: !0, forced: !Z("union") }, {
union: t
});
}
),
/***/
7467: (
/***/
(a, U, l) => {
var d = l(7628), t = l(4644), Z = t.aTypedArray, F = t.exportTypedArrayMethod, n = t.getTypedArrayConstructor;
F("toReversed", function() {
return d(Z(this), n(this));
});
}
),
/***/
4732: (
/***/
(a, U, l) => {
var d = l(4644), t = l(9504), Z = l(9306), F = l(5370), n = d.aTypedArray, s = d.getTypedArrayConstructor, W = d.exportTypedArrayMethod, V = t(d.TypedArrayPrototype.sort);
W("toSorted", function(i) {
i !== void 0 && Z(i);
var N = n(this), e = F(s(N), N);
return V(e, i);
});
}
),
/***/
9577: (
/***/
(a, U, l) => {
var d = l(9928), t = l(4644), Z = l(1108), F = l(1291), n = l(5854), s = t.aTypedArray, W = t.getTypedArrayConstructor, V = t.exportTypedArrayMethod, Q = !!function() {
try {
new Int8Array(1).with(2, { valueOf: function() {
throw 8;
} });
} catch (i) {
return i === 8;
}
}();
V("with", function(i, N) {
var e = s(this), m = F(i), J = Z(e) ? n(N) : +N;
return d(e, W(e), m, J);
}, !Q);
}
),
/***/
8992: (
/***/
(a, U, l) => {
l(8111);
}
),
/***/
4743: (
/***/
(a, U, l) => {
l(9314);
}
),
/***/
3215: (
/***/
(a, U, l) => {
l(1148);
}
),
/***/
4520: (
/***/
(a, U, l) => {
l(2489);
}
),
/***/
670: (
/***/
(a, U, l) => {
l(531);
}
),
/***/
1454: (
/***/
(a, U, l) => {
l(1701);
}
),
/***/
7550: (
/***/
(a, U, l) => {
l(3579);
}
),
/***/
8335: (
/***/
(a, U, l) => {
var d = l(6518), t = l(3724), Z = l(4576), F = l(7751), n = l(9504), s = l(9565), W = l(4901), V = l(34), Q = l(4376), i = l(9297), N = l(655), e = l(6198), m = l(4659), J = l(9039), M = l(8235), G = l(4495), S = Z.JSON, T = Z.Number, u = Z.SyntaxError, Y = S && S.parse, o = F("Object", "keys"), B = Object.getOwnPropertyDescriptor, X = n("".charAt), p = n("".slice), y = n(/./.exec), r = n([].push), D = /^\d$/, E = /^[1-9]$/, P = /^[\d-]$/, k = /^[\t\n\r ]$/, I = 0, q = 1, sl = function(x, L) {
x = N(x);
var w = new Sl(x, 0), dl = w.parse(), Tl = dl.value, $ = w.skip(k, dl.end);
if ($ < x.length)
throw new u('Unexpected extra character: "' + X(x, $) + '" after the parsed data at: ' + $);
return W(L) ? Gl({ "": Tl }, "", L, dl) : Tl;
}, Gl = function(x, L, w, dl) {
var Tl = x[L], $ = dl && Tl === dl.value, Dl = $ && typeof dl.source == "string" ? { source: dl.source } : {}, El, Od, uU, lU, K0;
if (V(Tl)) {
var iQ = Q(Tl), TW = $ ? dl.nodes : iQ ? [] : {};
if (iQ)
for (El = TW.length, uU = e(Tl), lU = 0; lU < uU; lU++)
pl(Tl, lU, Gl(Tl, "" + lU, w, lU < El ? TW[lU] : void 0));
else
for (Od = o(Tl), uU = e(Od), lU = 0; lU < uU; lU++)
K0 = Od[lU], pl(Tl, K0, Gl(Tl, K0, w, i(TW, K0) ? TW[K0] : void 0));
}
return s(w, x, L, Tl, Dl);
}, pl = function(x, L, w) {
if (t) {
var dl = B(x, L);
if (dl && !dl.configurable) return;
}
w === void 0 ? delete x[L] : m(x, L, w);
}, ml = function(x, L, w, dl) {
this.value = x, this.end = L, this.source = w, this.nodes = dl;
}, Sl = function(x, L) {
this.source = x, this.index = L;
};
Sl.prototype = {
fork: function(x) {
return new Sl(this.source, x);
},
parse: function() {
var x = this.source, L = this.skip(k, this.index), w = this.fork(L), dl = X(x, L);
if (y(P, dl)) return w.number();
switch (dl) {
case "{":
return w.object();
case "[":
return w.array();
case '"':
return w.string();
case "t":
return w.keyword(!0);
case "f":
return w.keyword(!1);
case "n":
return w.keyword(null);
}
throw new u('Unexpected character: "' + dl + '" at: ' + L);
},
node: function(x, L, w, dl, Tl) {
return new ml(L, dl, x ? null : p(this.source, w, dl), Tl);
},
object: function() {
for (var x = this.source, L = this.index + 1, w = !1, dl = {}, Tl = {}; L < x.length; ) {
if (L = this.until(['"', "}"], L), X(x, L) === "}" && !w) {
L++;
break;
}
var $ = this.fork(L).string(), Dl = $.value;
L = $.end, L = this.until([":"], L) + 1, L = this.skip(k, L), $ = this.fork(L).parse(), m(Tl, Dl, $), m(dl, Dl, $.value), L = this.until([",", "}"], $.end);
var El = X(x, L);
if (El === ",")
w = !0, L++;
else if (El === "}") {
L++;
break;
}
}
return this.node(q, dl, this.index, L, Tl);
},
array: function() {
for (var x = this.source, L = this.index + 1, w = !1, dl = [], Tl = []; L < x.length; ) {
if (L = this.skip(k, L), X(x, L) === "]" && !w) {
L++;
break;
}
var $ = this.fork(L).parse();
if (r(Tl, $), r(dl, $.value), L = this.until([",", "]"], $.end), X(x, L) === ",")
w = !0, L++;
else if (X(x, L) === "]") {
L++;
break;
}
}
return this.node(q, dl, this.index, L, Tl);
},
string: function() {
var x = this.index, L = M(this.source, this.index + 1);
return this.node(I, L.value, x, L.end);
},
number: function() {
var x = this.source, L = this.index, w = L;
if (X(x, w) === "-" && w++, X(x, w) === "0") w++;
else if (y(E, X(x, w))) w = this.skip(D, w + 1);
else throw new u("Failed to parse number at: " + w);
if (X(x, w) === "." && (w = this.skip(D, w + 1)), X(x, w) === "e" || X(x, w) === "E") {
w++, (X(x, w) === "+" || X(x, w) === "-") && w++;
var dl = w;
if (w = this.skip(D, w), dl === w) throw new u("Failed to parse number's exponent value at: " + w);
}
return this.node(I, T(p(x, L, w)), L, w);
},
keyword: function(x) {
var L = "" + x, w = this.index, dl = w + L.length;
if (p(this.source, w, dl) !== L) throw new u("Failed to parse value at: " + w);
return this.node(I, x, w, dl);
},
skip: function(x, L) {
for (var w = this.source; L < w.length && y(x, X(w, L)); L++) ;
return L;
},
until: function(x, L) {
L = this.skip(k, L);
for (var w = X(this.source, L), dl = 0; dl < x.length; dl++) if (x[dl] === w) return L;
throw new u('Unexpected character: "' + w + '" at: ' + L);
}
};
var xd = J(function() {
var x = "9007199254740993", L;
return Y(x, function(w, dl, Tl) {
L = Tl.source;
}), L !== x;
}), jd = G && !J(function() {
return 1 / Y("-0 ") !== -1 / 0;
});
d({ target: "JSON", stat: !0, forced: xd }, {
parse: function(L, w) {
return jd && !W(w) ? Y(L) : sl(L, w);
}
});
}
),
/***/
5247: (
/***/
(a, U, l) => {
l(1689);
}
),
/***/
4979: (
/***/
(a, U, l) => {
var d = l(6518), t = l(4576), Z = l(7751), F = l(6980), n = l(4913).f, s = l(9297), W = l(679), V = l(3167), Q = l(2603), i = l(5002), N = l(8574), e = l(3724), m = l(6395), J = "DOMException", M = Z("Error"), G = Z(J), S = function() {
W(this, T);
var k = arguments.length, I = Q(k < 1 ? void 0 : arguments[0]), q = Q(k < 2 ? void 0 : arguments[1], "Error"), sl = new G(I, q), Gl = new M(I);
return Gl.name = J, n(sl, "stack", F(1, N(Gl.stack, 1))), V(sl, this, S), sl;
}, T = S.prototype = G.prototype, u = "stack" in new M(J), Y = "stack" in new G(1, 2), o = G && e && Object.getOwnPropertyDescriptor(t, J), B = !!o && !(o.writable && o.configurable), X = u && !B && !Y;
d({ global: !0, constructor: !0, forced: m || X }, {
// TODO: fix export logic
DOMException: X ? S : G
});
var p = Z(J), y = p.prototype;
if (y.constructor !== p) {
m || n(y, "constructor", F(1, p));
for (var r in i) if (s(i, r)) {
var D = i[r], E = D.s;
s(p, E) || n(p, E, F(6, D.c));
}
}
}
),
/***/
4603: (
/***/
(a, U, l) => {
var d = l(6840), t = l(9504), Z = l(655), F = l(2812), n = URLSearchParams, s = n.prototype, W = t(s.append), V = t(s.delete), Q = t(s.forEach), i = t([].push), N = new n("a=1&a=2&b=3");
N.delete("a", 1), N.delete("b", void 0), N + "" != "a=2" && d(s, "delete", function(e) {
var m = arguments.length, J = m < 2 ? void 0 : arguments[1];
if (m && J === void 0) return V(this, e);
var M = [];
Q(this, function(X, p) {
i(M, { key: p, value: X });
}), F(m, 1);
for (var G = Z(e), S = Z(J), T = 0, u = 0, Y = !1, o = M.length, B; T < o; )
B = M[T++], Y || B.key === G ? (Y = !0, V(this, B.key)) : u++;
for (; u < o; )
B = M[u++], B.key === G && B.value === S || W(this, B.key, B.value);
}, { enumerable: !0, unsafe: !0 });
}
),
/***/
7566: (
/***/
(a, U, l) => {
var d = l(6840), t = l(9504), Z = l(655), F = l(2812), n = URLSearchParams, s = n.prototype, W = t(s.getAll), V = t(s.has), Q = new n("a=1");
(Q.has("a", 2) || !Q.has("a", void 0)) && d(s, "has", function(N) {
var e = arguments.length, m = e < 2 ? void 0 : arguments[1];
if (e && m === void 0) return V(this, N);
var J = W(this, N);
F(e, 1);
for (var M = Z(m), G = 0; G < J.length; )
if (J[G++] === M) return !0;
return !1;
}, { enumerable: !0, unsafe: !0 });
}
),
/***/
8721: (
/***/
(a, U, l) => {
var d = l(3724), t = l(9504), Z = l(2106), F = URLSearchParams.prototype, n = t(F.forEach);
d && !("size" in F) && Z(F, "size", {
get: function() {
var W = 0;
return n(this, function() {
W++;
}), W;
},
configurable: !0,
enumerable: !0
});
}
)
/******/
}, fR = {};
function il(a) {
var U = fR[a];
if (U !== void 0)
return U.exports;
var l = fR[a] = {
/******/
// no module.id needed
/******/
// no module.loaded needed
/******/
exports: {}
/******/
};
return Zm[a].call(l.exports, l, l.exports, il), l.exports;
}
il.d = (a, U) => {
for (var l in U)
il.o(U, l) && !il.o(a, l) && Object.defineProperty(a, l, { enumerable: !0, get: U[l] });
};
il.o = (a, U) => Object.prototype.hasOwnProperty.call(a, U);
var ll = globalThis.pdfjsLib = {};
il.d(ll, {
AbortException: () => (
/* reexport */
WF
),
AnnotationEditorLayer: () => (
/* reexport */
ZM
),
AnnotationEditorParamsType: () => (
/* reexport */
Vl
),
AnnotationEditorType: () => (
/* reexport */
cl
),
AnnotationEditorUIManager: () => (
/* reexport */
es
),
AnnotationLayer: () => (
/* reexport */
$2
),
AnnotationMode: () => (
/* reexport */
RZ
),
ColorPicker: () => (
/* reexport */
kh
),
DOMSVGFactory: () => (
/* reexport */
DR
),
DrawLayer: () => (
/* reexport */
FM
),
FeatureTest: () => (
/* reexport */
LU
),
GlobalWorkerOptions: () => (
/* reexport */
bF
),
ImageKind: () => (
/* reexport */
EW
),
InvalidPDFException: () => (
/* reexport */
IQ
),
MissingPDFException: () => (
/* reexport */
Ns
),
OPS: () => (
/* reexport */
Td
),
OutputScale: () => (
/* reexport */
EQ
),
PDFDataRangeTransport: () => (
/* reexport */
dh
),
PDFDateString: () => (
/* reexport */
Ue
),
PDFWorker: () => (
/* reexport */
AW
),
PasswordResponses: () => (
/* reexport */
sm
),
PermissionFlag: () => (
/* reexport */
nm
),
PixelsPerInch: () => (
/* reexport */
Bn
),
RenderingCancelledException: () => (
/* reexport */
yR
),
TextLayer: () => (
/* reexport */
Vi
),
TouchManager: () => (
/* reexport */
Me
),
UnexpectedResponseException: () => (
/* reexport */
XV
),
Util: () => (
/* reexport */
v
),
VerbosityLevel: () => (
/* reexport */
tQ
),
XfaLayer: () => (
/* reexport */
Zh
),
build: () => (
/* reexport */
L2
),
createValidAbsoluteUrl: () => (
/* reexport */
Qm
),
fetchData: () => (
/* reexport */
nQ
),
getDocument: () => (
/* reexport */
T2
),
getFilenameFromUrl: () => (
/* reexport */
Jm
),
getPdfFilenameFromUrl: () => (
/* reexport */
Gm
),
getXfaPageViewport: () => (
/* reexport */
Sm
),
isDataScheme: () => (
/* reexport */
sQ
),
isPdfFile: () => (
/* reexport */
zR
),
noContextMenu: () => (
/* reexport */
Cd
),
normalizeUnicode: () => (
/* reexport */
bm
),
setLayerDimensions: () => (
/* reexport */
x0
),
shadow: () => (
/* reexport */
Wl
),
stopEvent: () => (
/* reexport */
nd
),
version: () => (
/* reexport */
z2
)
});
il(4114);
il(6573);
il(8100);
il(7936);
il(7467);
il(4732);
il(9577);
il(5247);
il(4979);
il(4603);
il(7566);
il(8721);
const XU = typeof process == "object" && process + "" == "[object process]" && !process.versions.nw && !(process.versions.electron && process.type && process.type !== "browser"), $N = [1, 0, 0, 1, 0, 0], kQ = [1e-3, 0, 0, 1e-3, 0, 0], Fm = 1e7, NQ = 1.35, Fd = {
ANY: 1,
DISPLAY: 2,
PRINT: 4,
SAVE: 8,
ANNOTATIONS_FORMS: 16,
ANNOTATIONS_STORAGE: 32,
ANNOTATIONS_DISABLE: 64,
IS_EDITING: 128,
OPLIST: 256
}, RZ = {
DISABLE: 0,
ENABLE: 1,
ENABLE_FORMS: 2,
ENABLE_STORAGE: 3
}, cm = "pdfjs_internal_editor_", cl = {
DISABLE: -1,
NONE: 0,
FREETEXT: 3,
HIGHLIGHT: 9,
STAMP: 13,
INK: 15
}, Vl = {
RESIZE: 1,
CREATE: 2,
FREETEXT_SIZE: 11,
FREETEXT_COLOR: 12,
FREETEXT_OPACITY: 13,
INK_COLOR: 21,
INK_THICKNESS: 22,
INK_OPACITY: 23,
HIGHLIGHT_COLOR: 31,
HIGHLIGHT_DEFAULT_COLOR: 32,
HIGHLIGHT_THICKNESS: 33,
HIGHLIGHT_FREE: 34,
HIGHLIGHT_SHOW_ALL: 35,
DRAW_STEP: 41
}, nm = {
PRINT: 4,
MODIFY_CONTENTS: 8,
COPY: 16,
MODIFY_ANNOTATIONS: 32,
FILL_INTERACTIVE_FORMS: 256,
COPY_FOR_ACCESSIBILITY: 512,
ASSEMBLE: 1024,
PRINT_HIGH_QUALITY: 2048
}, hU = {
FILL: 0,
STROKE: 1,
FILL_STROKE: 2,
INVISIBLE: 3,
FILL_ADD_TO_PATH: 4,
STROKE_ADD_TO_PATH: 5,
FILL_STROKE_ADD_TO_PATH: 6,
ADD_TO_PATH: 7,
FILL_STROKE_MASK: 3,
ADD_TO_PATH_FLAG: 4
}, EW = {
GRAYSCALE_1BPP: 1,
RGB_24BPP: 2,
RGBA_32BPP: 3
}, Pl = {
TEXT: 1,
LINK: 2,
FREETEXT: 3,
LINE: 4,
SQUARE: 5,
CIRCLE: 6,
POLYGON: 7,
POLYLINE: 8,
HIGHLIGHT: 9,
UNDERLINE: 10,
SQUIGGLY: 11,
STRIKEOUT: 12,
STAMP: 13,
CARET: 14,
INK: 15,
POPUP: 16,
FILEATTACHMENT: 17,
SOUND: 18,
MOVIE: 19,
WIDGET: 20,
SCREEN: 21,
PRINTERMARK: 22,
TRAPNET: 23,
WATERMARK: 24,
THREED: 25,
REDACT: 26
}, En = {
SOLID: 1,
DASHED: 2,
BEVELED: 3,
INSET: 4,
UNDERLINE: 5
}, tQ = {
ERRORS: 0,
WARNINGS: 1,
INFOS: 5
}, Td = {
dependency: 1,
setLineWidth: 2,
setLineCap: 3,
setLineJoin: 4,
setMiterLimit: 5,
setDash: 6,
setRenderingIntent: 7,
setFlatness: 8,
setGState: 9,
save: 10,
restore: 11,
transform: 12,
moveTo: 13,
lineTo: 14,
curveTo: 15,
curveTo2: 16,
curveTo3: 17,
closePath: 18,
rectangle: 19,
stroke: 20,
closeStroke: 21,
fill: 22,
eoFill: 23,
fillStroke: 24,
eoFillStroke: 25,
closeFillStroke: 26,
closeEOFillStroke: 27,
endPath: 28,
clip: 29,
eoClip: 30,
beginText: 31,
endText: 32,
setCharSpacing: 33,
setWordSpacing: 34,
setHScale: 35,
setLeading: 36,
setFont: 37,
setTextRenderingMode: 38,
setTextRise: 39,
moveText: 40,
setLeadingMoveText: 41,
setTextMatrix: 42,
nextLine: 43,
showText: 44,
showSpacedText: 45,
nextLineShowText: 46,
nextLineSetSpacingShowText: 47,
setCharWidth: 48,
setCharWidthAndBounds: 49,
setStrokeColorSpace: 50,
setFillColorSpace: 51,
setStrokeColor: 52,
setStrokeColorN: 53,
setFillColor: 54,
setFillColorN: 55,
setStrokeGray: 56,
setFillGray: 57,
setStrokeRGBColor: 58,
setFillRGBColor: 59,
setStrokeCMYKColor: 60,
setFillCMYKColor: 61,
shadingFill: 62,
beginInlineImage: 63,
beginImageData: 64,
endInlineImage: 65,
paintXObject: 66,
markPoint: 67,
markPointProps: 68,
beginMarkedContent: 69,
beginMarkedContentProps: 70,
endMarkedContent: 71,
beginCompat: 72,
endCompat: 73,
paintFormXObjectBegin: 74,
paintFormXObjectEnd: 75,
beginGroup: 76,
endGroup: 77,
beginAnnotation: 80,
endAnnotation: 81,
paintImageMaskXObject: 83,
paintImageMaskXObjectGroup: 84,
paintImageXObject: 85,
paintInlineImageXObject: 86,
paintInlineImageXObjectGroup: 87,
paintImageXObjectRepeat: 88,
paintImageMaskXObjectRepeat: 89,
paintSolidColorImageMask: 90,
constructPath: 91,
setStrokeTransparent: 92,
setFillTransparent: 93
}, sm = {
NEED_PASSWORD: 1,
INCORRECT_PASSWORD: 2
};
let ZQ = tQ.WARNINGS;
function am(a) {
Number.isInteger(a) && (ZQ = a);
}
function Wm() {
return ZQ;
}
function FQ(a) {
ZQ >= tQ.INFOS && console.log(`Info: ${a}`);
}
function Ul(a) {
ZQ >= tQ.WARNINGS && console.log(`Warning: ${a}`);
}
function ul(a) {
throw new Error(a);
}
function Kl(a, U) {
a || ul(U);
}
function Vm(a) {
switch (a == null ? void 0 : a.protocol) {
case "http:":
case "https:":
case "ftp:":
case "mailto:":
case "tel:":
return !0;
default:
return !1;
}
}
function Qm(a, U = null, l = null) {
if (!a)
return null;
try {
if (l && typeof a == "string") {
if (l.addDefaultProtocol && a.startsWith("www.")) {
const t = a.match(/\./g);
(t == null ? void 0 : t.length) >= 2 && (a = `http://${a}`);
}
if (l.tryConvertEncoding)
try {
a = hm(a);
} catch {
}
}
const d = U ? new URL(a, U) : new URL(a);
if (Vm(d))
return d;
} catch {
}
return null;
}
function Wl(a, U, l, d = !1) {
return Object.defineProperty(a, U, {
value: l,
enumerable: !d,
configurable: !0,
writable: !1
}), l;
}
const QF = function() {
function U(l, d) {
this.message = l, this.name = d;
}
return U.prototype = new Error(), U.constructor = U, U;
}();
class AR extends QF {
constructor(U, l) {
super(U, "PasswordException"), this.code = l;
}
}
class eQ extends QF {
constructor(U, l) {
super(U, "UnknownErrorException"), this.details = l;
}
}
let IQ = class extends QF {
constructor(U) {
super(U, "InvalidPDFException");
}
}, Ns = class extends QF {
constructor(U) {
super(U, "MissingPDFException");
}
}, XV = class extends QF {
constructor(U, l) {
super(U, "UnexpectedResponseException"), this.status = l;
}
};
class im extends QF {
constructor(U) {
super(U, "FormatError");
}
}
let WF = class extends QF {
constructor(U) {
super(U, "AbortException");
}
};
function le(a) {
(typeof a != "object" || (a == null ? void 0 : a.length) === void 0) && ul("Invalid argument for bytesToString");
const U = a.length, l = 8192;
if (U < l)
return String.fromCharCode.apply(null, a);
const d = [];
for (let t = 0; t < U; t += l) {
const Z = Math.min(t + l, U), F = a.subarray(t, Z);
d.push(String.fromCharCode.apply(null, F));
}
return d.join("");
}
function cQ(a) {
typeof a != "string" && ul("Invalid argument for stringToBytes");
const U = a.length, l = new Uint8Array(U);
for (let d = 0; d < U; ++d)
l[d] = a.charCodeAt(d) & 255;
return l;
}
function Rm(a) {
return String.fromCharCode(a >> 24 & 255, a >> 16 & 255, a >> 8 & 255, a & 255);
}
function pR(a) {
const U = /* @__PURE__ */ Object.create(null);
for (const [l, d] of a)
U[l] = d;
return U;
}
function Nm() {
const a = new Uint8Array(4);
return a[0] = 1, new Uint32Array(a.buffer, 0, 1)[0] === 1;
}
function em() {
try {
return new Function(""), !0;
} catch {
return !1;
}
}
class LU {
static get isLittleEndian() {
return Wl(this, "isLittleEndian", Nm());
}
static get isEvalSupported() {
return Wl(this, "isEvalSupported", em());
}
static get isOffscreenCanvasSupported() {
return Wl(this, "isOffscreenCanvasSupported", typeof OffscreenCanvas < "u");
}
static get isImageDecoderSupported() {
return Wl(this, "isImageDecoderSupported", typeof ImageDecoder < "u");
}
static get platform() {
return typeof navigator < "u" && typeof (navigator == null ? void 0 : navigator.platform) == "string" ? Wl(this, "platform", {
isMac: navigator.platform.includes("Mac"),
isWindows: navigator.platform.includes("Win"),
isFirefox: typeof (navigator == null ? void 0 : navigator.userAgent) == "string" && navigator.userAgent.includes("Firefox")
}) : Wl(this, "platform", {
isMac: !1,
isWindows: !1,
isFirefox: !1
});
}
static get isCSSRoundSupported() {
var U, l;
return Wl(this, "isCSSRoundSupported", (l = (U = globalThis.CSS) == null ? void 0 : U.supports) == null ? void 0 : l.call(U, "width: round(1.5px, 1px)"));
}
}
const hQ = Array.from(Array(256).keys(), (a) => a.toString(16).padStart(2, "0"));
var cZ, yQ, rW, DQ;
let v = (yQ = class {
static makeHexColor(U, l, d) {
return `#${hQ[U]}${hQ[l]}${hQ[d]}`;
}
static scaleMinMax(U, l) {
let d;
U[0] ? (U[0] < 0 && (d = l[0], l[0] = l[2], l[2] = d), l[0] *= U[0], l[2] *= U[0], U[3] < 0 && (d = l[1], l[1] = l[3], l[3] = d), l[1] *= U[3], l[3] *= U[3]) : (d = l[0], l[0] = l[1], l[1] = d, d = l[2], l[2] = l[3], l[3] = d, U[1] < 0 && (d = l[1], l[1] = l[3], l[3] = d), l[1] *= U[1], l[3] *= U[1], U[2] < 0 && (d = l[0], l[0] = l[2], l[2] = d), l[0] *= U[2], l[2] *= U[2]), l[0] += U[4], l[1] += U[5], l[2] += U[4], l[3] += U[5];
}
static transform(U, l) {
return [U[0] * l[0] + U[2] * l[1], U[1] * l[0] + U[3] * l[1], U[0] * l[2] + U[2] * l[3], U[1] * l[2] + U[3] * l[3], U[0] * l[4] + U[2] * l[5] + U[4], U[1] * l[4] + U[3] * l[5] + U[5]];
}
static applyTransform(U, l) {
const d = U[0] * l[0] + U[1] * l[2] + l[4], t = U[0] * l[1] + U[1] * l[3] + l[5];
return [d, t];
}
static applyInverseTransform(U, l) {
const d = l[0] * l[3] - l[1] * l[2], t = (U[0] * l[3] - U[1] * l[2] + l[2] * l[5] - l[4] * l[3]) / d, Z = (-U[0] * l[1] + U[1] * l[0] + l[4] * l[1] - l[5] * l[0]) / d;
return [t, Z];
}
static getAxialAlignedBoundingBox(U, l) {
const d = this.applyTransform(U, l), t = this.applyTransform(U.slice(2, 4), l), Z = this.applyTransform([U[0], U[3]], l), F = this.applyTransform([U[2], U[1]], l);
return [Math.min(d[0], t[0], Z[0], F[0]), Math.min(d[1], t[1], Z[1], F[1]), Math.max(d[0], t[0], Z[0], F[0]), Math.max(d[1], t[1], Z[1], F[1])];
}
static inverseTransform(U) {
const l = U[0] * U[3] - U[1] * U[2];
return [U[3] / l, -U[1] / l, -U[2] / l, U[0] / l, (U[2] * U[5] - U[4] * U[3]) / l, (U[4] * U[1] - U[5] * U[0]) / l];
}
static singularValueDecompose2dScale(U) {
const l = [U[0], U[2], U[1], U[3]], d = U[0] * l[0] + U[1] * l[2], t = U[0] * l[1] + U[1] * l[3], Z = U[2] * l[0] + U[3] * l[2], F = U[2] * l[1] + U[3] * l[3], n = (d + F) / 2, s = Math.sqrt((d + F) ** 2 - 4 * (d * F - Z * t)) / 2, W = n + s || 1, V = n - s || 1;
return [Math.sqrt(W), Math.sqrt(V)];
}
static normalizeRect(U) {
const l = U.slice(0);
return U[0] > U[2] && (l[0] = U[2], l[2] = U[0]), U[1] > U[3] && (l[1] = U[3], l[3] = U[1]), l;
}
static intersect(U, l) {
const d = Math.max(Math.min(U[0], U[2]), Math.min(l[0], l[2])), t = Math.min(Math.max(U[0], U[2]), Math.max(l[0], l[2]));
if (d > t)
return null;
const Z = Math.max(Math.min(U[1], U[3]), Math.min(l[1], l[3])), F = Math.min(Math.max(U[1], U[3]), Math.max(l[1], l[3]));
return Z > F ? null : [d, Z, t, F];
}
static bezierBoundingBox(U, l, d, t, Z, F, n, s, W) {
return W ? (W[0] = Math.min(W[0], U, n), W[1] = Math.min(W[1], l, s), W[2] = Math.max(W[2], U, n), W[3] = Math.max(W[3], l, s)) : W = [Math.min(U, n), Math.min(l, s), Math.max(U, n), Math.max(l, s)], h(this, cZ, DQ).call(this, U, d, Z, n, l, t, F, s, 3 * (-U + 3 * (d - Z) + n), 6 * (U - 2 * d + Z), 3 * (d - U), W), h(this, cZ, DQ).call(this, U, d, Z, n, l, t, F, s, 3 * (-l + 3 * (t - F) + s), 6 * (l - 2 * t + F), 3 * (t - l), W), W;
}
}, cZ = new WeakSet(), rW = function(U, l, d, t, Z, F, n, s, W, V) {
if (W <= 0 || W >= 1)
return;
const Q = 1 - W, i = W * W, N = i * W, e = Q * (Q * (Q * U + 3 * W * l) + 3 * i * d) + N * t, m = Q * (Q * (Q * Z + 3 * W * F) + 3 * i * n) + N * s;
V[0] = Math.min(V[0], e), V[1] = Math.min(V[1], m), V[2] = Math.max(V[2], e), V[3] = Math.max(V[3], m);
}, DQ = function(U, l, d, t, Z, F, n, s, W, V, Q, i) {
if (Math.abs(W) < 1e-12) {
Math.abs(V) >= 1e-12 && h(this, cZ, rW).call(this, U, l, d, t, Z, F, n, s, -Q / V, i);
return;
}
const N = V ** 2 - 4 * Q * W;
if (N < 0)
return;
const e = Math.sqrt(N), m = 2 * W;
h(this, cZ, rW).call(this, U, l, d, t, Z, F, n, s, (-V + e) / m, i), h(this, cZ, rW).call(this, U, l, d, t, Z, F, n, s, (-V - e) / m, i);
}, b(yQ, cZ), yQ);
function hm(a) {
return decodeURIComponent(escape(a));
}
let bQ = null, _R = null;
function bm(a) {
return bQ || (bQ = /([\u00a0\u00b5\u037e\u0eb3\u2000-\u200a\u202f\u2126\ufb00-\ufb04\ufb06\ufb20-\ufb36\ufb38-\ufb3c\ufb3e\ufb40-\ufb41\ufb43-\ufb44\ufb46-\ufba1\ufba4-\ufba9\ufbae-\ufbb1\ufbd3-\ufbdc\ufbde-\ufbe7\ufbea-\ufbf8\ufbfc-\ufbfd\ufc00-\ufc5d\ufc64-\ufcf1\ufcf5-\ufd3d\ufd88\ufdf4\ufdfa-\ufdfb\ufe71\ufe77\ufe79\ufe7b\ufe7d]+)|(\ufb05+)/gu, _R = /* @__PURE__ */ new Map([["ſt", "ſt"]])), a.replaceAll(bQ, (U, l, d) => l ? l.normalize("NFKC") : _R.get(d));
}
function mm() {
if (typeof crypto.randomUUID == "function")
return crypto.randomUUID();
const a = new Uint8Array(32);
return crypto.getRandomValues(a), le(a);
}
const BR = "pdfjs_internal_id_";
function Mm(a) {
return Uint8Array.prototype.toBase64 ? a.toBase64() : btoa(le(a));
}
il(4628);
il(7642);
il(8004);
il(3853);
il(5876);
il(2475);
il(5024);
il(1698);
il(1454);
il(8992);
il(4743);
il(3215);
il(7550);
il(8335);
const Mt = "http://www.w3.org/2000/svg";
var et;
let Bn = (et = class {
}, f(et, "CSS", 96), f(et, "PDF", 72), f(et, "PDF_TO_CSS_UNITS", et.CSS / et.PDF), et);
async function nQ(a, U = "text") {
if (jn(a, document.baseURI)) {
const l = await fetch(a);
if (!l.ok)
throw new Error(l.statusText);
switch (U) {
case "arraybuffer":
return l.arrayBuffer();
case "blob":
return l.blob();
case "json":
return l.json();
}
return l.text();
}
return new Promise((l, d) => {
const t = new XMLHttpRequest();
t.open("GET", a, !0), t.responseType = U, t.onreadystatechange = () => {
if (t.readyState === XMLHttpRequest.DONE) {
if (t.status === 200 || t.status === 0) {
switch (U) {
case "arraybuffer":
case "blob":
case "json":
l(t.response);
return;
}
l(t.responseText);
return;
}
d(new Error(t.statusText));
}
}, t.send(null);
});
}
class JW {
constructor({
viewBox: U,
userUnit: l,
scale: d,
rotation: t,
offsetX: Z = 0,
offsetY: F = 0,
dontFlip: n = !1
}) {
this.viewBox = U, this.userUnit = l, this.scale = d, this.rotation = t, this.offsetX = Z, this.offsetY = F, d *= l;
const s = (U[2] + U[0]) / 2, W = (U[3] + U[1]) / 2;
let V, Q, i, N;
switch (t %= 360, t < 0 && (t += 360), t) {
case 180:
V = -1, Q = 0, i = 0, N = 1;
break;
case 90:
V = 0, Q = 1, i = 1, N = 0;
break;
case 270:
V = 0, Q = -1, i = -1, N = 0;
break;
case 0:
V = 1, Q = 0, i = 0, N = -1;
break;
default:
throw new Error("PageViewport: Invalid rotation, must be a multiple of 90 degrees.");
}
n && (i = -i, N = -N);
let e, m, J, M;
V === 0 ? (e = Math.abs(W - U[1]) * d + Z, m = Math.abs(s - U[0]) * d + F, J = (U[3] - U[1]) * d, M = (U[2] - U[0]) * d) : (e = Math.abs(s - U[0]) * d + Z, m = Math.abs(W - U[1]) * d + F, J = (U[2] - U[0]) * d, M = (U[3] - U[1]) * d), this.transform = [V * d, Q * d, i * d, N * d, e - V * d * s - i * d * W, m - Q * d * s - N * d * W], this.width = J, this.height = M;
}
get rawDims() {
const {
userUnit: U,
viewBox: l
} = this, d = l.map((t) => t * U);
return Wl(this, "rawDims", {
pageWidth: d[2] - d[0],
pageHeight: d[3] - d[1],
pageX: d[0],
pageY: d[1]
});
}
clone({
scale: U = this.scale,
rotation: l = this.rotation,
offsetX: d = this.offsetX,
offsetY: t = this.offsetY,
dontFlip: Z = !1
} = {}) {
return new JW({
viewBox: this.viewBox.slice(),
userUnit: this.userUnit,
scale: U,
rotation: l,
offsetX: d,
offsetY: t,
dontFlip: Z
});
}
convertToViewportPoint(U, l) {
return v.applyTransform([U, l], this.transform);
}
convertToViewportRectangle(U) {
const l = v.applyTransform([U[0], U[1]], this.transform), d = v.applyTransform([U[2], U[3]], this.transform);
return [l[0], l[1], d[0], d[1]];
}
convertToPdfPoint(U, l) {
return v.applyInverseTransform([U, l], this.transform);
}
}
let yR = class extends QF {
constructor(U, l = 0) {
super(U, "RenderingCancelledException"), this.extraDelay = l;
}
};
function sQ(a) {
const U = a.length;
let l = 0;
for (; l < U && a[l].trim() === ""; )
l++;
return a.substring(l, l + 5).toLowerCase() === "data:";
}
function zR(a) {
return typeof a == "string" && /\.pdf$/i.test(a);
}
function Jm(a) {
return [a] = a.split(/[#?]/, 1), a.substring(a.lastIndexOf("/") + 1);
}
function Gm(a, U = "document.pdf") {
if (typeof a != "string")
return U;
if (sQ(a))
return Ul('getPdfFilenameFromUrl: ignore "data:"-URL for performance reasons.'), U;
const l = /^(?:(?:[^:]+:)?\/\/[^/]+)?([^?#]*)(\?[^#]*)?(#.*)?$/, d = /[^/?#=]+\.pdf\b(?!.*\.pdf\b)/i, t = l.exec(a);
let Z = d.exec(t[1]) || d.exec(t[2]) || d.exec(t[3]);
if (Z && (Z = Z[0], Z.includes("%")))
try {
Z = d.exec(decodeURIComponent(Z))[0];
} catch {
}
return Z || U;
}
class qR {
constructor() {
f(this, "started", /* @__PURE__ */ Object.create(null));
f(this, "times", []);
}
time(U) {
U in this.started && Ul(`Timer is already running for ${U}`), this.started[U] = Date.now();
}
timeEnd(U) {
U in this.started || Ul(`Timer has not been started for ${U}`), this.times.push({
name: U,
start: this.started[U],
end: Date.now()
}), delete this.started[U];
}
toString() {
const U = [];
let l = 0;
for (const {
name: d
} of this.times)
l = Math.max(d.length, l);
for (const {
name: d,
start: t,
end: Z
} of this.times)
U.push(`${d.padEnd(l)} ${Z - t}ms
`);
return U.join("");
}
}
function jn(a, U) {
try {
const {
protocol: l
} = U ? new URL(a, U) : new URL(a);
return l === "http:" || l === "https:";
} catch {
return !1;
}
}
function Cd(a) {
a.preventDefault();
}
function nd(a) {
a.preventDefault(), a.stopPropagation();
}
var zQ, Ms;
let Ue = (zQ = class {
static toDateObject(U) {
if (!U || typeof U != "string")
return null;
c(this, Ms) || R(this, Ms, new RegExp("^D:(\\d{4})(\\d{2})?(\\d{2})?(\\d{2})?(\\d{2})?(\\d{2})?([Z|+|-])?(\\d{2})?'?(\\d{2})?'?"));
const l = c(this, Ms).exec(U);
if (!l)
return null;
const d = parseInt(l[1], 10);
let t = parseInt(l[2], 10);
t = t >= 1 && t <= 12 ? t - 1 : 0;
let Z = parseInt(l[3], 10);
Z = Z >= 1 && Z <= 31 ? Z : 1;
let F = parseInt(l[4], 10);
F = F >= 0 && F <= 23 ? F : 0;
let n = parseInt(l[5], 10);
n = n >= 0 && n <= 59 ? n : 0;
let s = parseInt(l[6], 10);
s = s >= 0 && s <= 59 ? s : 0;
const W = l[7] || "Z";
let V = parseInt(l[8], 10);
V = V >= 0 && V <= 23 ? V : 0;
let Q = parseInt(l[9], 10) || 0;
return Q = Q >= 0 && Q <= 59 ? Q : 0, W === "-" ? (F += V, n += Q) : W === "+" && (F -= V, n -= Q), new Date(Date.UTC(d, t, Z, F, n, s));
}
}, Ms = new WeakMap(), b(zQ, Ms), zQ);
function Sm(a, {
scale: U = 1,
rotation: l = 0
}) {
const {
width: d,
height: t
} = a.attributes.style, Z = [0, 0, parseInt(d), parseInt(t)];
return new JW({
viewBox: Z,
userUnit: 1,
scale: U,
rotation: l
});
}
function LR(a) {
if (a.startsWith("#")) {
const U = parseInt(a.slice(1), 16);
return [(U & 16711680) >> 16, (U & 65280) >> 8, U & 255];
}
return a.startsWith("rgb(") ? a.slice(4, -1).split(",").map((U) => parseInt(U)) : a.startsWith("rgba(") ? a.slice(5, -1).split(",").map((U) => parseInt(U)).slice(0, 3) : (Ul(`Not a valid color format: "${a}"`), [0, 0, 0]);
}
function Tm(a) {
const U = document.createElement("span");
U.style.visibility = "hidden", document.body.append(U);
for (const l of a.keys()) {
U.style.color = l;
const d = window.getComputedStyle(U).color;
a.set(l, LR(d));
}
U.remove();
}
function Bl(a) {
const {
a: U,
b: l,
c: d,
d: t,
e: Z,
f: F
} = a.getTransform();
return [U, l, d, t, Z, F];
}
function gd(a) {
const {
a: U,
b: l,
c: d,
d: t,
e: Z,
f: F
} = a.getTransform().invertSelf();
return [U, l, d, t, Z, F];
}
function x0(a, U, l = !1, d = !0) {
if (U instanceof JW) {
const {
pageWidth: t,
pageHeight: Z
} = U.rawDims, {
style: F
} = a, n = LU.isCSSRoundSupported, s = `var(--scale-factor) * ${t}px`, W = `var(--scale-factor) * ${Z}px`, V = n ? `round(down, ${s}, var(--scale-round-x, 1px))` : `calc(${s})`, Q = n ? `round(down, ${W}, var(--scale-round-y, 1px))` : `calc(${W})`;
!l || U.rotation % 180 === 0 ? (F.width = V, F.height = Q) : (F.width = Q, F.height = V);
}
d && a.setAttribute("data-main-rotation", U.rotation);
}
let EQ = class {
constructor() {
const U = window.devicePixelRatio || 1;
this.sx = U, this.sy = U;
}
get scaled() {
return this.sx !== 1 || this.sy !== 1;
}
get symmetric() {
return this.sx === this.sy;
}
};
var NZ, JF, Xd, GF, Js, Gs, IV, de, kU, te, Ze, CW, Fe, CQ;
const Tt = class Tt {
constructor(U) {
b(this, kU);
b(this, NZ, null);
b(this, JF, null);
b(this, Xd);
b(this, GF, null);
b(this, Js, null);
R(this, Xd, U), c(Tt, Gs) || R(Tt, Gs, Object.freeze({
freetext: "pdfjs-editor-remove-freetext-button",
highlight: "pdfjs-editor-remove-highlight-button",
ink: "pdfjs-editor-remove-ink-button",
stamp: "pdfjs-editor-remove-stamp-button"
}));
}
render() {
const U = R(this, NZ, document.createElement("div"));
U.classList.add("editToolbar", "hidden"), U.setAttribute("role", "toolbar");
const l = c(this, Xd)._uiManager._signal;
U.addEventListener("contextmenu", Cd, {
signal: l
}), U.addEventListener("pointerdown", h(Tt, IV, de), {
signal: l
});
const d = R(this, GF, document.createElement("div"));
d.className = "buttons", U.append(d);
const t = c(this, Xd).toolbarPosition;
if (t) {
const {
style: Z
} = U, F = c(this, Xd)._uiManager.direction === "ltr" ? 1 - t[0] : t[0];
Z.insetInlineEnd = `${100 * F}%`, Z.top = `calc(${100 * t[1]}% + var(--editor-toolbar-vert-offset))`;
}
return h(this, kU, Fe).call(this), U;
}
get div() {
return c(this, NZ);
}
hide() {
var U;
c(this, NZ).classList.add("hidden"), (U = c(this, JF)) == null || U.hideDropdown();
}
show() {
var U;
c(this, NZ).classList.remove("hidden"), (U = c(this, Js)) == null || U.shown();
}
async addAltText(U) {
const l = await U.render();
h(this, kU, CW).call(this, l), c(this, GF).prepend(l, c(this, kU, CQ)), R(this, Js, U);
}
addColorPicker(U) {
R(this, JF, U);
const l = U.renderButton();
h(this, kU, CW).call(this, l), c(this, GF).prepend(l, c(this, kU, CQ));
}
remove() {
var U;
c(this, NZ).remove(), (U = c(this, JF)) == null || U.destroy(), R(this, JF, null);
}
};
NZ = new WeakMap(), JF = new WeakMap(), Xd = new WeakMap(), GF = new WeakMap(), Js = new WeakMap(), Gs = new WeakMap(), IV = new WeakSet(), de = function(U) {
U.stopPropagation();
}, kU = new WeakSet(), te = function(U) {
c(this, Xd)._focusEventsAllowed = !1, nd(U);
}, Ze = function(U) {
c(this, Xd)._focusEventsAllowed = !0, nd(U);
}, CW = function(U) {
const l = c(this, Xd)._uiManager._signal;
U.addEventListener("focusin", h(this, kU, te).bind(this), {
capture: !0,
signal: l
}), U.addEventListener("focusout", h(this, kU, Ze).bind(this), {
capture: !0,
signal: l
}), U.addEventListener("contextmenu", Cd, {
signal: l
});
}, Fe = function() {
const {
editorType: U,
_uiManager: l
} = c(this, Xd), d = document.createElement("button");
d.className = "delete", d.tabIndex = 0, d.setAttribute("data-l10n-id", c(Tt, Gs)[U]), h(this, kU, CW).call(this, d), d.addEventListener("click", (t) => {
l.delete();
}, {
signal: l._signal
}), c(this, GF).append(d);
}, CQ = function() {
const U = document.createElement("div");
return U.className = "divider", U;
}, b(Tt, IV), b(Tt, Gs, null);
let rQ = Tt;
var Ss, SF, TF, VF, ce, ne, se;
class Xm {
constructor(U) {
b(this, VF);
b(this, Ss, null);
b(this, SF, null);
b(this, TF);
R(this, TF, U);
}
show(U, l, d) {
const [t, Z] = h(this, VF, ne).call(this, l, d), {
style: F
} = c(this, SF) || R(this, SF, h(this, VF, ce).call(this));
U.append(c(this, SF)), F.insetInlineEnd = `${100 * t}%`, F.top = `calc(${100 * Z}% + var(--editor-toolbar-vert-offset))`;
}
hide() {
c(this, SF).remove();
}
}
Ss = new WeakMap(), SF = new WeakMap(), TF = new WeakMap(), VF = new WeakSet(), ce = function() {
const U = R(this, SF, document.createElement("div"));
U.className = "editToolbar", U.setAttribute("role", "toolbar"), U.addEventListener("contextmenu", Cd, {
signal: c(this, TF)._signal
});
const l = R(this, Ss, document.createElement("div"));
return l.className = "buttons", U.append(l), h(this, VF, se).call(this), U;
}, ne = function(U, l) {
let d = 0, t = 0;
for (const Z of U) {
const F = Z.y + Z.height;
if (F < d)
continue;
const n = Z.x + (l ? Z.width : 0);
if (F > d) {
t = n, d = F;
continue;
}
l ? n > t && (t = n) : n < t && (t = n);
}
return [l ? 1 - t : t, d];
}, se = function() {
const U = document.createElement("button");
U.className = "highlightButton", U.tabIndex = 0, U.setAttribute("data-l10n-id", "pdfjs-highlight-floating-button1");
const l = document.createElement("span");
U.append(l), l.className = "visuallyHidden", l.setAttribute("data-l10n-id", "pdfjs-highlight-floating-button-label");
const d = c(this, TF)._signal;
U.addEventListener("contextmenu", Cd, {
signal: d
}), U.addEventListener("click", () => {
c(this, TF).highlightSelection("floating_button");
}, {
signal: d
}), c(this, Ss).append(U);
};
function uV(a, U, l) {
for (const d of l)
U.addEventListener(d, a[d].bind(a));
}
var DV;
class um {
constructor() {
b(this, DV, 0);
}
get id() {
return `${cm}${eU(this, DV)._++}`;
}
}
DV = new WeakMap();
var Fc, Ts, mU, cc, wW;
const CR = class CR {
constructor() {
b(this, cc);
b(this, Fc, mm());
b(this, Ts, 0);
b(this, mU, null);
}
static get _isSVGFittingCanvas() {
const U = 'data:image/svg+xml;charset=UTF-8,', d = new OffscreenCanvas(1, 3).getContext("2d", {
willReadFrequently: !0
}), t = new Image();
t.src = U;
const Z = t.decode().then(() => (d.drawImage(t, 0, 0, 1, 1, 0, 0, 1, 3), new Uint32Array(d.getImageData(0, 0, 1, 1).data.buffer)[0] === 0));
return Wl(this, "_isSVGFittingCanvas", Z);
}
async getFromFile(U) {
const {
lastModified: l,
name: d,
size: t,
type: Z
} = U;
return h(this, cc, wW).call(this, `${l}_${d}_${t}_${Z}`, U);
}
async getFromUrl(U) {
return h(this, cc, wW).call(this, U, U);
}
async getFromBlob(U, l) {
const d = await l;
return h(this, cc, wW).call(this, U, d);
}
async getFromId(U) {
c(this, mU) || R(this, mU, /* @__PURE__ */ new Map());
const l = c(this, mU).get(U);
if (!l)
return null;
if (l.bitmap)
return l.refCounter += 1, l;
if (l.file)
return this.getFromFile(l.file);
if (l.blobPromise) {
const {
blobPromise: d
} = l;
return delete l.blobPromise, this.getFromBlob(l.id, d);
}
return this.getFromUrl(l.url);
}
getFromCanvas(U, l) {
c(this, mU) || R(this, mU, /* @__PURE__ */ new Map());
let d = c(this, mU).get(U);
if (d != null && d.bitmap)
return d.refCounter += 1, d;
const t = new OffscreenCanvas(l.width, l.height);
return t.getContext("2d").drawImage(l, 0, 0), d = {
bitmap: t.transferToImageBitmap(),
id: `image_${c(this, Fc)}_${eU(this, Ts)._++}`,
refCounter: 1,
isSvg: !1
}, c(this, mU).set(U, d), c(this, mU).set(d.id, d), d;
}
getSvgUrl(U) {
const l = c(this, mU).get(U);
return l != null && l.isSvg ? l.svgUrl : null;
}
deleteId(U) {
var t;
c(this, mU) || R(this, mU, /* @__PURE__ */ new Map());
const l = c(this, mU).get(U);
if (!l || (l.refCounter -= 1, l.refCounter !== 0))
return;
const {
bitmap: d
} = l;
if (!l.url && !l.file) {
const Z = new OffscreenCanvas(d.width, d.height);
Z.getContext("bitmaprenderer").transferFromImageBitmap(d), l.blobPromise = Z.convertToBlob();
}
(t = d.close) == null || t.call(d), l.bitmap = null;
}
isValidId(U) {
return U.startsWith(`image_${c(this, Fc)}_`);
}
};
Fc = new WeakMap(), Ts = new WeakMap(), mU = new WeakMap(), cc = new WeakSet(), wW = async function(U, l) {
c(this, mU) || R(this, mU, /* @__PURE__ */ new Map());
let d = c(this, mU).get(U);
if (d === null)
return null;
if (d != null && d.bitmap)
return d.refCounter += 1, d;
try {
d || (d = {
bitmap: null,
id: `image_${c(this, Fc)}_${eU(this, Ts)._++}`,
refCounter: 0,
isSvg: !1
});
let t;
if (typeof l == "string" ? (d.url = l, t = await nQ(l, "blob")) : l instanceof File ? t = d.file = l : l instanceof Blob && (t = l), t.type === "image/svg+xml") {
const Z = CR._isSVGFittingCanvas, F = new FileReader(), n = new Image(), s = new Promise((W, V) => {
n.onload = () => {
d.bitmap = n, d.isSvg = !0, W();
}, F.onload = async () => {
const Q = d.svgUrl = F.result;
n.src = await Z ? `${Q}#svgView(preserveAspectRatio(none))` : Q;
}, n.onerror = F.onerror = V;
});
F.readAsDataURL(t), await s;
} else
d.bitmap = await createImageBitmap(t);
d.refCounter = 1;
} catch (t) {
Ul(t), d = null;
}
return c(this, mU).set(U, d), d && c(this, mU).set(d.id, d), d;
};
let wQ = CR;
var xl, eZ, Xs, zl;
class Ym {
constructor(U = 128) {
b(this, xl, []);
b(this, eZ, !1);
b(this, Xs);
b(this, zl, -1);
R(this, Xs, U);
}
add({
cmd: U,
undo: l,
post: d,
mustExec: t,
type: Z = NaN,
overwriteIfSameType: F = !1,
keepUndo: n = !1
}) {
if (t && U(), c(this, eZ))
return;
const s = {
cmd: U,
undo: l,
post: d,
type: Z
};
if (c(this, zl) === -1) {
c(this, xl).length > 0 && (c(this, xl).length = 0), R(this, zl, 0), c(this, xl).push(s);
return;
}
if (F && c(this, xl)[c(this, zl)].type === Z) {
n && (s.undo = c(this, xl)[c(this, zl)].undo), c(this, xl)[c(this, zl)] = s;
return;
}
const W = c(this, zl) + 1;
W === c(this, Xs) ? c(this, xl).splice(0, 1) : (R(this, zl, W), W < c(this, xl).length && c(this, xl).splice(W)), c(this, xl).push(s);
}
undo() {
if (c(this, zl) === -1)
return;
R(this, eZ, !0);
const {
undo: U,
post: l
} = c(this, xl)[c(this, zl)];
U(), l == null || l(), R(this, eZ, !1), R(this, zl, c(this, zl) - 1);
}
redo() {
if (c(this, zl) < c(this, xl).length - 1) {
R(this, zl, c(this, zl) + 1), R(this, eZ, !0);
const {
cmd: U,
post: l
} = c(this, xl)[c(this, zl)];
U(), l == null || l(), R(this, eZ, !1);
}
}
hasSomethingToUndo() {
return c(this, zl) !== -1;
}
hasSomethingToRedo() {
return c(this, zl) < c(this, xl).length - 1;
}
cleanType(U) {
if (c(this, zl) !== -1) {
for (let l = c(this, zl); l >= 0; l--)
if (c(this, xl)[l].type !== U) {
c(this, xl).splice(l + 1, c(this, zl) - l), R(this, zl, l);
return;
}
c(this, xl).length = 0, R(this, zl, -1);
}
}
destroy() {
R(this, xl, null);
}
}
xl = new WeakMap(), eZ = new WeakMap(), Xs = new WeakMap(), zl = new WeakMap();
var EV, ae;
class GW {
constructor(U) {
b(this, EV);
this.buffer = [], this.callbacks = /* @__PURE__ */ new Map(), this.allKeys = /* @__PURE__ */ new Set();
const {
isMac: l
} = LU.platform;
for (const [d, t, Z = {}] of U)
for (const F of d) {
const n = F.startsWith("mac+");
l && n ? (this.callbacks.set(F.slice(4), {
callback: t,
options: Z
}), this.allKeys.add(F.split("+").at(-1))) : !l && !n && (this.callbacks.set(F, {
callback: t,
options: Z
}), this.allKeys.add(F.split("+").at(-1)));
}
}
exec(U, l) {
if (!this.allKeys.has(l.key))
return;
const d = this.callbacks.get(h(this, EV, ae).call(this, l));
if (!d)
return;
const {
callback: t,
options: {
bubbles: Z = !1,
args: F = [],
checker: n = null
}
} = d;
n && !n(U, l) || (t.bind(U, ...F, l)(), Z || nd(l));
}
}
EV = new WeakSet(), ae = function(U) {
U.altKey && this.buffer.push("alt"), U.ctrlKey && this.buffer.push("ctrl"), U.metaKey && this.buffer.push("meta"), U.shiftKey && this.buffer.push("shift"), this.buffer.push(U.key);
const l = this.buffer.join("+");
return this.buffer.length = 0, l;
};
const rV = class rV {
get _colors() {
const U = /* @__PURE__ */ new Map([["CanvasText", null], ["Canvas", null]]);
return Tm(U), Wl(this, "_colors", U);
}
convert(U) {
const l = LR(U);
if (!window.matchMedia("(forced-colors: active)").matches)
return l;
for (const [d, t] of this._colors)
if (t.every((Z, F) => Z === l[F]))
return rV._colorsMapping.get(d);
return l;
}
getHexCode(U) {
const l = this._colors.get(U);
return l ? v.makeHexColor(...l) : U;
}
};
f(rV, "_colorsMapping", /* @__PURE__ */ new Map([["CanvasText", [0, 0, 0]], ["Canvas", [255, 255, 255]]]));
let xQ = rV;
var nc, HU, fl, aU, sc, Yt, ac, Vd, hZ, XF, Wc, uF, Pd, ud, YF, us, Ys, Vc, os, fd, bZ, Qc, mZ, Ad, CV, MZ, ps, JZ, oF, Bs, ys, UU, hl, ot, pF, zs, Ls, GZ, _d, pt, ks, Qd, ZZ, C, xW, jQ, We, Ve, jW, Qe, ie, Re, OQ, Ne, gQ, KQ, ee, YU, Jt, he, be, HQ, me, On, vQ;
let es = (ZZ = class {
constructor(U, l, d, t, Z, F, n, s, W, V, Q, i, N) {
b(this, C);
b(this, nc, new AbortController());
b(this, HU, null);
b(this, fl, /* @__PURE__ */ new Map());
b(this, aU, /* @__PURE__ */ new Map());
b(this, sc, null);
b(this, Yt, null);
b(this, ac, null);
b(this, Vd, new Ym());
b(this, hZ, null);
b(this, XF, null);
b(this, Wc, 0);
b(this, uF, /* @__PURE__ */ new Set());
b(this, Pd, null);
b(this, ud, null);
b(this, YF, /* @__PURE__ */ new Set());
f(this, "_editorUndoBar", null);
b(this, us, !1);
b(this, Ys, !1);
b(this, Vc, !1);
b(this, os, null);
b(this, fd, null);
b(this, bZ, null);
b(this, Qc, null);
b(this, mZ, !1);
b(this, Ad, null);
b(this, CV, new um());
b(this, MZ, !1);
b(this, ps, !1);
b(this, JZ, null);
b(this, oF, null);
b(this, Bs, null);
b(this, ys, null);
b(this, UU, cl.NONE);
b(this, hl, /* @__PURE__ */ new Set());
b(this, ot, null);
b(this, pF, null);
b(this, zs, null);
b(this, Ls, {
isEditing: !1,
isEmpty: !0,
hasSomethingToUndo: !1,
hasSomethingToRedo: !1,
hasSelectedEditor: !1,
hasSelectedText: !1
});
b(this, GZ, [0, 0]);
b(this, _d, null);
b(this, pt, null);
b(this, ks, null);
b(this, Qd, null);
const e = this._signal = c(this, nc).signal;
R(this, pt, U), R(this, ks, l), R(this, sc, d), this._eventBus = t, t._on("editingaction", this.onEditingAction.bind(this), {
signal: e
}), t._on("pagechanging", this.onPageChanging.bind(this), {
signal: e
}), t._on("scalechanging", this.onScaleChanging.bind(this), {
signal: e
}), t._on("rotationchanging", this.onRotationChanging.bind(this), {
signal: e
}), t._on("setpreference", this.onSetPreference.bind(this), {
signal: e
}), t._on("switchannotationeditorparams", (m) => this.updateParams(m.type, m.value), {
signal: e
}), h(this, C, Qe).call(this), h(this, C, ee).call(this), h(this, C, OQ).call(this), R(this, Yt, Z.annotationStorage), R(this, os, Z.filterFactory), R(this, pF, F), R(this, Qc, n || null), R(this, us, s), R(this, Ys, W), R(this, Vc, V), R(this, ys, Q || null), this.viewParameters = {
realScale: Bn.PDF_TO_CSS_UNITS,
rotation: 0
}, this.isShiftKeyDown = !1, this._editorUndoBar = i || null, this._supportsPinchToZoom = N !== !1;
}
static get _keyboardManager() {
const U = ZZ.prototype, l = (F) => c(F, pt).contains(document.activeElement) && document.activeElement.tagName !== "BUTTON" && F.hasSomethingToControl(), d = (F, {
target: n
}) => {
if (n instanceof HTMLInputElement) {
const {
type: s
} = n;
return s !== "text" && s !== "number";
}
return !0;
}, t = this.TRANSLATE_SMALL, Z = this.TRANSLATE_BIG;
return Wl(this, "_keyboardManager", new GW([[["ctrl+a", "mac+meta+a"], U.selectAll, {
checker: d
}], [["ctrl+z", "mac+meta+z"], U.undo, {
checker: d
}], [["ctrl+y", "ctrl+shift+z", "mac+meta+shift+z", "ctrl+shift+Z", "mac+meta+shift+Z"], U.redo, {
checker: d
}], [["Backspace", "alt+Backspace", "ctrl+Backspace", "shift+Backspace", "mac+Backspace", "mac+alt+Backspace", "mac+ctrl+Backspace", "Delete", "ctrl+Delete", "shift+Delete", "mac+Delete"], U.delete, {
checker: d
}], [["Enter", "mac+Enter"], U.addNewEditorFromKeyboard, {
checker: (F, {
target: n
}) => !(n instanceof HTMLButtonElement) && c(F, pt).contains(n) && !F.isEnterHandled
}], [[" ", "mac+ "], U.addNewEditorFromKeyboard, {
checker: (F, {
target: n
}) => !(n instanceof HTMLButtonElement) && c(F, pt).contains(document.activeElement)
}], [["Escape", "mac+Escape"], U.unselectAll], [["ArrowLeft", "mac+ArrowLeft"], U.translateSelectedEditors, {
args: [-t, 0],
checker: l
}], [["ctrl+ArrowLeft", "mac+shift+ArrowLeft"], U.translateSelectedEditors, {
args: [-Z, 0],
checker: l
}], [["ArrowRight", "mac+ArrowRight"], U.translateSelectedEditors, {
args: [t, 0],
checker: l
}], [["ctrl+ArrowRight", "mac+shift+ArrowRight"], U.translateSelectedEditors, {
args: [Z, 0],
checker: l
}], [["ArrowUp", "mac+ArrowUp"], U.translateSelectedEditors, {
args: [0, -t],
checker: l
}], [["ctrl+ArrowUp", "mac+shift+ArrowUp"], U.translateSelectedEditors, {
args: [0, -Z],
checker: l
}], [["ArrowDown", "mac+ArrowDown"], U.translateSelectedEditors, {
args: [0, t],
checker: l
}], [["ctrl+ArrowDown", "mac+shift+ArrowDown"], U.translateSelectedEditors, {
args: [0, Z],
checker: l
}]]));
}
destroy() {
var U, l, d, t, Z;
(U = c(this, Qd)) == null || U.resolve(), R(this, Qd, null), (l = c(this, nc)) == null || l.abort(), R(this, nc, null), this._signal = null;
for (const F of c(this, aU).values())
F.destroy();
c(this, aU).clear(), c(this, fl).clear(), c(this, YF).clear(), R(this, HU, null), c(this, hl).clear(), c(this, Vd).destroy(), (d = c(this, sc)) == null || d.destroy(), (t = c(this, Ad)) == null || t.hide(), R(this, Ad, null), c(this, fd) && (clearTimeout(c(this, fd)), R(this, fd, null)), c(this, _d) && (clearTimeout(c(this, _d)), R(this, _d, null)), (Z = this._editorUndoBar) == null || Z.destroy();
}
combinedSignal(U) {
return AbortSignal.any([this._signal, U.signal]);
}
get mlManager() {
return c(this, ys);
}
get useNewAltTextFlow() {
return c(this, Ys);
}
get useNewAltTextWhenAddingImage() {
return c(this, Vc);
}
get hcmFilter() {
return Wl(this, "hcmFilter", c(this, pF) ? c(this, os).addHCMFilter(c(this, pF).foreground, c(this, pF).background) : "none");
}
get direction() {
return Wl(this, "direction", getComputedStyle(c(this, pt)).direction);
}
get highlightColors() {
return Wl(this, "highlightColors", c(this, Qc) ? new Map(c(this, Qc).split(",").map((U) => U.split("=").map((l) => l.trim()))) : null);
}
get highlightColorNames() {
return Wl(this, "highlightColorNames", this.highlightColors ? new Map(Array.from(this.highlightColors, (U) => U.reverse())) : null);
}
setCurrentDrawingSession(U) {
U ? (this.unselectAll(), this.disableUserSelect(!0)) : this.disableUserSelect(!1), R(this, XF, U);
}
setMainHighlightColorPicker(U) {
R(this, Bs, U);
}
editAltText(U, l = !1) {
var d;
(d = c(this, sc)) == null || d.editAltText(this, U, l);
}
switchToMode(U, l) {
this._eventBus.on("annotationeditormodechanged", l, {
once: !0,
signal: this._signal
}), this._eventBus.dispatch("showannotationeditorui", {
source: this,
mode: U
});
}
setPreference(U, l) {
this._eventBus.dispatch("setpreference", {
source: this,
name: U,
value: l
});
}
onSetPreference({
name: U,
value: l
}) {
switch (U) {
case "enableNewAltTextWhenAddingImage":
R(this, Vc, l);
break;
}
}
onPageChanging({
pageNumber: U
}) {
R(this, Wc, U - 1);
}
focusMainContainer() {
c(this, pt).focus();
}
findParent(U, l) {
for (const d of c(this, aU).values()) {
const {
x: t,
y: Z,
width: F,
height: n
} = d.div.getBoundingClientRect();
if (U >= t && U <= t + F && l >= Z && l <= Z + n)
return d;
}
return null;
}
disableUserSelect(U = !1) {
c(this, ks).classList.toggle("noUserSelect", U);
}
addShouldRescale(U) {
c(this, YF).add(U);
}
removeShouldRescale(U) {
c(this, YF).delete(U);
}
onScaleChanging({
scale: U
}) {
var l;
this.commitOrRemove(), this.viewParameters.realScale = U * Bn.PDF_TO_CSS_UNITS;
for (const d of c(this, YF))
d.onScaleChanging();
(l = c(this, XF)) == null || l.onScaleChanging();
}
onRotationChanging({
pagesRotation: U
}) {
this.commitOrRemove(), this.viewParameters.rotation = U;
}
highlightSelection(U = "") {
const l = document.getSelection();
if (!l || l.isCollapsed)
return;
const {
anchorNode: d,
anchorOffset: t,
focusNode: Z,
focusOffset: F
} = l, n = l.toString(), W = h(this, C, xW).call(this, l).closest(".textLayer"), V = this.getSelectionBoxes(W);
if (!V)
return;
l.empty();
const Q = h(this, C, jQ).call(this, W), i = c(this, UU) === cl.NONE, N = () => {
Q == null || Q.createAndAddNewEditor({
x: 0,
y: 0
}, !1, {
methodOfCreation: U,
boxes: V,
anchorNode: d,
anchorOffset: t,
focusNode: Z,
focusOffset: F,
text: n
}), i && this.showAllEditors("highlight", !0, !0);
};
if (i) {
this.switchToMode(cl.HIGHLIGHT, N);
return;
}
N();
}
addToAnnotationStorage(U) {
!U.isEmpty() && c(this, Yt) && !c(this, Yt).has(U.id) && c(this, Yt).setValue(U.id, U);
}
blur() {
if (this.isShiftKeyDown = !1, c(this, mZ) && (R(this, mZ, !1), h(this, C, jW).call(this, "main_toolbar")), !this.hasSelection)
return;
const {
activeElement: U
} = document;
for (const l of c(this, hl))
if (l.div.contains(U)) {
R(this, oF, [l, U]), l._focusEventsAllowed = !1;
break;
}
}
focus() {
if (!c(this, oF))
return;
const [U, l] = c(this, oF);
R(this, oF, null), l.addEventListener("focusin", () => {
U._focusEventsAllowed = !0;
}, {
once: !0,
signal: this._signal
}), l.focus();
}
addEditListeners() {
h(this, C, OQ).call(this), h(this, C, gQ).call(this);
}
removeEditListeners() {
h(this, C, Ne).call(this), h(this, C, KQ).call(this);
}
dragOver(U) {
for (const {
type: l
} of U.dataTransfer.items)
for (const d of c(this, ud))
if (d.isHandlingMimeForPasting(l)) {
U.dataTransfer.dropEffect = "copy", U.preventDefault();
return;
}
}
drop(U) {
for (const l of U.dataTransfer.items)
for (const d of c(this, ud))
if (d.isHandlingMimeForPasting(l.type)) {
d.paste(l, this.currentLayer), U.preventDefault();
return;
}
}
copy(U) {
var d;
if (U.preventDefault(), (d = c(this, HU)) == null || d.commitOrRemove(), !this.hasSelection)
return;
const l = [];
for (const t of c(this, hl)) {
const Z = t.serialize(!0);
Z && l.push(Z);
}
l.length !== 0 && U.clipboardData.setData("application/pdfjs", JSON.stringify(l));
}
cut(U) {
this.copy(U), this.delete();
}
async paste(U) {
U.preventDefault();
const {
clipboardData: l
} = U;
for (const Z of l.items)
for (const F of c(this, ud))
if (F.isHandlingMimeForPasting(Z.type)) {
F.paste(Z, this.currentLayer);
return;
}
let d = l.getData("application/pdfjs");
if (!d)
return;
try {
d = JSON.parse(d);
} catch (Z) {
Ul(`paste: "${Z.message}".`);
return;
}
if (!Array.isArray(d))
return;
this.unselectAll();
const t = this.currentLayer;
try {
const Z = [];
for (const s of d) {
const W = await t.deserialize(s);
if (!W)
return;
Z.push(W);
}
const F = () => {
for (const s of Z)
h(this, C, HQ).call(this, s);
h(this, C, vQ).call(this, Z);
}, n = () => {
for (const s of Z)
s.remove();
};
this.addCommands({
cmd: F,
undo: n,
mustExec: !0
});
} catch (Z) {
Ul(`paste: "${Z.message}".`);
}
}
keydown(U) {
!this.isShiftKeyDown && U.key === "Shift" && (this.isShiftKeyDown = !0), c(this, UU) !== cl.NONE && !this.isEditorHandlingKeyboard && ZZ._keyboardManager.exec(this, U);
}
keyup(U) {
this.isShiftKeyDown && U.key === "Shift" && (this.isShiftKeyDown = !1, c(this, mZ) && (R(this, mZ, !1), h(this, C, jW).call(this, "main_toolbar")));
}
onEditingAction({
name: U
}) {
switch (U) {
case "undo":
case "redo":
case "delete":
case "selectAll":
this[U]();
break;
case "highlightSelection":
this.highlightSelection("context_menu");
break;
}
}
setEditingState(U) {
U ? (h(this, C, ie).call(this), h(this, C, gQ).call(this), h(this, C, YU).call(this, {
isEditing: c(this, UU) !== cl.NONE,
isEmpty: h(this, C, On).call(this),
hasSomethingToUndo: c(this, Vd).hasSomethingToUndo(),
hasSomethingToRedo: c(this, Vd).hasSomethingToRedo(),
hasSelectedEditor: !1
})) : (h(this, C, Re).call(this), h(this, C, KQ).call(this), h(this, C, YU).call(this, {
isEditing: !1
}), this.disableUserSelect(!1));
}
registerEditorTypes(U) {
if (!c(this, ud)) {
R(this, ud, U);
for (const l of c(this, ud))
h(this, C, Jt).call(this, l.defaultPropertiesToUpdate);
}
}
getId() {
return c(this, CV).id;
}
get currentLayer() {
return c(this, aU).get(c(this, Wc));
}
getLayer(U) {
return c(this, aU).get(U);
}
get currentPageIndex() {
return c(this, Wc);
}
addLayer(U) {
c(this, aU).set(U.pageIndex, U), c(this, MZ) ? U.enable() : U.disable();
}
removeLayer(U) {
c(this, aU).delete(U.pageIndex);
}
async updateMode(U, l = null, d = !1) {
var t;
if (c(this, UU) !== U && !(c(this, Qd) && (await c(this, Qd).promise, !c(this, Qd)))) {
if (R(this, Qd, Promise.withResolvers()), R(this, UU, U), U === cl.NONE) {
this.setEditingState(!1), h(this, C, be).call(this), (t = this._editorUndoBar) == null || t.hide(), c(this, Qd).resolve();
return;
}
this.setEditingState(!0), await h(this, C, he).call(this), this.unselectAll();
for (const Z of c(this, aU).values())
Z.updateMode(U);
if (!l) {
d && this.addNewEditorFromKeyboard(), c(this, Qd).resolve();
return;
}
for (const Z of c(this, fl).values())
Z.annotationElementId === l ? (this.setSelected(Z), Z.enterInEditMode()) : Z.unselect();
c(this, Qd).resolve();
}
}
addNewEditorFromKeyboard() {
this.currentLayer.canCreateNewEmptyEditor() && this.currentLayer.addNewEditor();
}
updateToolbar(U) {
U !== c(this, UU) && this._eventBus.dispatch("switchannotationeditormode", {
source: this,
mode: U
});
}
updateParams(U, l) {
var d;
if (c(this, ud)) {
switch (U) {
case Vl.CREATE:
this.currentLayer.addNewEditor();
return;
case Vl.HIGHLIGHT_DEFAULT_COLOR:
(d = c(this, Bs)) == null || d.updateColor(l);
break;
case Vl.HIGHLIGHT_SHOW_ALL:
this._eventBus.dispatch("reporttelemetry", {
source: this,
details: {
type: "editing",
data: {
type: "highlight",
action: "toggle_visibility"
}
}
}), (c(this, zs) || R(this, zs, /* @__PURE__ */ new Map())).set(U, l), this.showAllEditors("highlight", l);
break;
}
for (const t of c(this, hl))
t.updateParams(U, l);
for (const t of c(this, ud))
t.updateDefaultParams(U, l);
}
}
showAllEditors(U, l, d = !1) {
var Z;
for (const F of c(this, fl).values())
F.editorType === U && F.show(l);
(((Z = c(this, zs)) == null ? void 0 : Z.get(Vl.HIGHLIGHT_SHOW_ALL)) ?? !0) !== l && h(this, C, Jt).call(this, [[Vl.HIGHLIGHT_SHOW_ALL, l]]);
}
enableWaiting(U = !1) {
if (c(this, ps) !== U) {
R(this, ps, U);
for (const l of c(this, aU).values())
U ? l.disableClick() : l.enableClick(), l.div.classList.toggle("waiting", U);
}
}
getEditors(U) {
const l = [];
for (const d of c(this, fl).values())
d.pageIndex === U && l.push(d);
return l;
}
getEditor(U) {
return c(this, fl).get(U);
}
addEditor(U) {
c(this, fl).set(U.id, U);
}
removeEditor(U) {
var l;
U.div.contains(document.activeElement) && (c(this, fd) && clearTimeout(c(this, fd)), R(this, fd, setTimeout(() => {
this.focusMainContainer(), R(this, fd, null);
}, 0))), c(this, fl).delete(U.id), this.unselect(U), (!U.annotationElementId || !c(this, uF).has(U.annotationElementId)) && ((l = c(this, Yt)) == null || l.remove(U.id));
}
addDeletedAnnotationElement(U) {
c(this, uF).add(U.annotationElementId), this.addChangedExistingAnnotation(U), U.deleted = !0;
}
isDeletedAnnotationElement(U) {
return c(this, uF).has(U);
}
removeDeletedAnnotationElement(U) {
c(this, uF).delete(U.annotationElementId), this.removeChangedExistingAnnotation(U), U.deleted = !1;
}
setActiveEditor(U) {
c(this, HU) !== U && (R(this, HU, U), U && h(this, C, Jt).call(this, U.propertiesToUpdate));
}
updateUI(U) {
c(this, C, me) === U && h(this, C, Jt).call(this, U.propertiesToUpdate);
}
updateUIForDefaultProperties(U) {
h(this, C, Jt).call(this, U.defaultPropertiesToUpdate);
}
toggleSelected(U) {
if (c(this, hl).has(U)) {
c(this, hl).delete(U), U.unselect(), h(this, C, YU).call(this, {
hasSelectedEditor: this.hasSelection
});
return;
}
c(this, hl).add(U), U.select(), h(this, C, Jt).call(this, U.propertiesToUpdate), h(this, C, YU).call(this, {
hasSelectedEditor: !0
});
}
setSelected(U) {
var l;
(l = c(this, XF)) == null || l.commitOrRemove();
for (const d of c(this, hl))
d !== U && d.unselect();
c(this, hl).clear(), c(this, hl).add(U), U.select(), h(this, C, Jt).call(this, U.propertiesToUpdate), h(this, C, YU).call(this, {
hasSelectedEditor: !0
});
}
isSelected(U) {
return c(this, hl).has(U);
}
get firstSelectedEditor() {
return c(this, hl).values().next().value;
}
unselect(U) {
U.unselect(), c(this, hl).delete(U), h(this, C, YU).call(this, {
hasSelectedEditor: this.hasSelection
});
}
get hasSelection() {
return c(this, hl).size !== 0;
}
get isEnterHandled() {
return c(this, hl).size === 1 && this.firstSelectedEditor.isEnterHandled;
}
undo() {
var U;
c(this, Vd).undo(), h(this, C, YU).call(this, {
hasSomethingToUndo: c(this, Vd).hasSomethingToUndo(),
hasSomethingToRedo: !0,
isEmpty: h(this, C, On).call(this)
}), (U = this._editorUndoBar) == null || U.hide();
}
redo() {
c(this, Vd).redo(), h(this, C, YU).call(this, {
hasSomethingToUndo: !0,
hasSomethingToRedo: c(this, Vd).hasSomethingToRedo(),
isEmpty: h(this, C, On).call(this)
});
}
addCommands(U) {
c(this, Vd).add(U), h(this, C, YU).call(this, {
hasSomethingToUndo: !0,
hasSomethingToRedo: !1,
isEmpty: h(this, C, On).call(this)
});
}
cleanUndoStack(U) {
c(this, Vd).cleanType(U);
}
delete() {
var Z;
this.commitOrRemove();
const U = (Z = this.currentLayer) == null ? void 0 : Z.endDrawingSession(!0);
if (!this.hasSelection && !U)
return;
const l = U ? [U] : [...c(this, hl)], d = () => {
var F;
(F = this._editorUndoBar) == null || F.show(t, l.length === 1 ? l[0].editorType : l.length);
for (const n of l)
n.remove();
}, t = () => {
for (const F of l)
h(this, C, HQ).call(this, F);
};
this.addCommands({
cmd: d,
undo: t,
mustExec: !0
});
}
commitOrRemove() {
var U;
(U = c(this, HU)) == null || U.commitOrRemove();
}
hasSomethingToControl() {
return c(this, HU) || this.hasSelection;
}
selectAll() {
for (const U of c(this, hl))
U.commit();
h(this, C, vQ).call(this, c(this, fl).values());
}
unselectAll() {
var U;
if (!(c(this, HU) && (c(this, HU).commitOrRemove(), c(this, UU) !== cl.NONE)) && !((U = c(this, XF)) != null && U.commitOrRemove()) && this.hasSelection) {
for (const l of c(this, hl))
l.unselect();
c(this, hl).clear(), h(this, C, YU).call(this, {
hasSelectedEditor: !1
});
}
}
translateSelectedEditors(U, l, d = !1) {
if (d || this.commitOrRemove(), !this.hasSelection)
return;
c(this, GZ)[0] += U, c(this, GZ)[1] += l;
const [t, Z] = c(this, GZ), F = [...c(this, hl)], n = 1e3;
c(this, _d) && clearTimeout(c(this, _d)), R(this, _d, setTimeout(() => {
R(this, _d, null), c(this, GZ)[0] = c(this, GZ)[1] = 0, this.addCommands({
cmd: () => {
for (const s of F)
c(this, fl).has(s.id) && s.translateInPage(t, Z);
},
undo: () => {
for (const s of F)
c(this, fl).has(s.id) && s.translateInPage(-t, -Z);
},
mustExec: !1
});
}, n));
for (const s of F)
s.translateInPage(U, l);
}
setUpDragSession() {
if (this.hasSelection) {
this.disableUserSelect(!0), R(this, Pd, /* @__PURE__ */ new Map());
for (const U of c(this, hl))
c(this, Pd).set(U, {
savedX: U.x,
savedY: U.y,
savedPageIndex: U.pageIndex,
newX: 0,
newY: 0,
newPageIndex: -1
});
}
}
endDragSession() {
if (!c(this, Pd))
return !1;
this.disableUserSelect(!1);
const U = c(this, Pd);
R(this, Pd, null);
let l = !1;
for (const [{
x: t,
y: Z,
pageIndex: F
}, n] of U)
n.newX = t, n.newY = Z, n.newPageIndex = F, l || (l = t !== n.savedX || Z !== n.savedY || F !== n.savedPageIndex);
if (!l)
return !1;
const d = (t, Z, F, n) => {
if (c(this, fl).has(t.id)) {
const s = c(this, aU).get(n);
s ? t._setParentAndPosition(s, Z, F) : (t.pageIndex = n, t.x = Z, t.y = F);
}
};
return this.addCommands({
cmd: () => {
for (const [t, {
newX: Z,
newY: F,
newPageIndex: n
}] of U)
d(t, Z, F, n);
},
undo: () => {
for (const [t, {
savedX: Z,
savedY: F,
savedPageIndex: n
}] of U)
d(t, Z, F, n);
},
mustExec: !0
}), !0;
}
dragSelectedEditors(U, l) {
if (c(this, Pd))
for (const d of c(this, Pd).keys())
d.drag(U, l);
}
rebuild(U) {
if (U.parent === null) {
const l = this.getLayer(U.pageIndex);
l ? (l.changeParent(U), l.addOrRebuild(U)) : (this.addEditor(U), this.addToAnnotationStorage(U), U.rebuild());
} else
U.parent.addOrRebuild(U);
}
get isEditorHandlingKeyboard() {
var U;
return ((U = this.getActive()) == null ? void 0 : U.shouldGetKeyboardEvents()) || c(this, hl).size === 1 && this.firstSelectedEditor.shouldGetKeyboardEvents();
}
isActive(U) {
return c(this, HU) === U;
}
getActive() {
return c(this, HU);
}
getMode() {
return c(this, UU);
}
get imageManager() {
return Wl(this, "imageManager", new wQ());
}
getSelectionBoxes(U) {
if (!U)
return null;
const l = document.getSelection();
for (let W = 0, V = l.rangeCount; W < V; W++)
if (!U.contains(l.getRangeAt(W).commonAncestorContainer))
return null;
const {
x: d,
y: t,
width: Z,
height: F
} = U.getBoundingClientRect();
let n;
switch (U.getAttribute("data-main-rotation")) {
case "90":
n = (W, V, Q, i) => ({
x: (V - t) / F,
y: 1 - (W + Q - d) / Z,
width: i / F,
height: Q / Z
});
break;
case "180":
n = (W, V, Q, i) => ({
x: 1 - (W + Q - d) / Z,
y: 1 - (V + i - t) / F,
width: Q / Z,
height: i / F
});
break;
case "270":
n = (W, V, Q, i) => ({
x: 1 - (V + i - t) / F,
y: (W - d) / Z,
width: i / F,
height: Q / Z
});
break;
default:
n = (W, V, Q, i) => ({
x: (W - d) / Z,
y: (V - t) / F,
width: Q / Z,
height: i / F
});
break;
}
const s = [];
for (let W = 0, V = l.rangeCount; W < V; W++) {
const Q = l.getRangeAt(W);
if (!Q.collapsed)
for (const {
x: i,
y: N,
width: e,
height: m
} of Q.getClientRects())
e === 0 || m === 0 || s.push(n(i, N, e, m));
}
return s.length === 0 ? null : s;
}
addChangedExistingAnnotation({
annotationElementId: U,
id: l
}) {
(c(this, ac) || R(this, ac, /* @__PURE__ */ new Map())).set(U, l);
}
removeChangedExistingAnnotation({
annotationElementId: U
}) {
var l;
(l = c(this, ac)) == null || l.delete(U);
}
renderAnnotationElement(U) {
var t;
const l = (t = c(this, ac)) == null ? void 0 : t.get(U.data.id);
if (!l)
return;
const d = c(this, Yt).getRawValue(l);
d && (c(this, UU) === cl.NONE && !d.hasBeenModified || d.renderAnnotationElement(U));
}
}, nc = new WeakMap(), HU = new WeakMap(), fl = new WeakMap(), aU = new WeakMap(), sc = new WeakMap(), Yt = new WeakMap(), ac = new WeakMap(), Vd = new WeakMap(), hZ = new WeakMap(), XF = new WeakMap(), Wc = new WeakMap(), uF = new WeakMap(), Pd = new WeakMap(), ud = new WeakMap(), YF = new WeakMap(), us = new WeakMap(), Ys = new WeakMap(), Vc = new WeakMap(), os = new WeakMap(), fd = new WeakMap(), bZ = new WeakMap(), Qc = new WeakMap(), mZ = new WeakMap(), Ad = new WeakMap(), CV = new WeakMap(), MZ = new WeakMap(), ps = new WeakMap(), JZ = new WeakMap(), oF = new WeakMap(), Bs = new WeakMap(), ys = new WeakMap(), UU = new WeakMap(), hl = new WeakMap(), ot = new WeakMap(), pF = new WeakMap(), zs = new WeakMap(), Ls = new WeakMap(), GZ = new WeakMap(), _d = new WeakMap(), pt = new WeakMap(), ks = new WeakMap(), Qd = new WeakMap(), C = new WeakSet(), xW = function({
anchorNode: U
}) {
return U.nodeType === Node.TEXT_NODE ? U.parentElement : U;
}, jQ = function(U) {
const {
currentLayer: l
} = this;
if (l.hasTextLayer(U))
return l;
for (const d of c(this, aU).values())
if (d.hasTextLayer(U))
return d;
return null;
}, We = function() {
const U = document.getSelection();
if (!U || U.isCollapsed)
return;
const d = h(this, C, xW).call(this, U).closest(".textLayer"), t = this.getSelectionBoxes(d);
t && (c(this, Ad) || R(this, Ad, new Xm(this)), c(this, Ad).show(d, t, this.direction === "ltr"));
}, Ve = function() {
var Z, F, n;
const U = document.getSelection();
if (!U || U.isCollapsed) {
c(this, ot) && ((Z = c(this, Ad)) == null || Z.hide(), R(this, ot, null), h(this, C, YU).call(this, {
hasSelectedText: !1
}));
return;
}
const {
anchorNode: l
} = U;
if (l === c(this, ot))
return;
const t = h(this, C, xW).call(this, U).closest(".textLayer");
if (!t) {
c(this, ot) && ((F = c(this, Ad)) == null || F.hide(), R(this, ot, null), h(this, C, YU).call(this, {
hasSelectedText: !1
}));
return;
}
if ((n = c(this, Ad)) == null || n.hide(), R(this, ot, l), h(this, C, YU).call(this, {
hasSelectedText: !0
}), !(c(this, UU) !== cl.HIGHLIGHT && c(this, UU) !== cl.NONE) && (c(this, UU) === cl.HIGHLIGHT && this.showAllEditors("highlight", !0, !0), R(this, mZ, this.isShiftKeyDown), !this.isShiftKeyDown)) {
const s = c(this, UU) === cl.HIGHLIGHT ? h(this, C, jQ).call(this, t) : null;
s == null || s.toggleDrawing();
const W = new AbortController(), V = this.combinedSignal(W), Q = (i) => {
i.type === "pointerup" && i.button !== 0 || (W.abort(), s == null || s.toggleDrawing(!0), i.type === "pointerup" && h(this, C, jW).call(this, "main_toolbar"));
};
window.addEventListener("pointerup", Q, {
signal: V
}), window.addEventListener("blur", Q, {
signal: V
});
}
}, jW = function(U = "") {
c(this, UU) === cl.HIGHLIGHT ? this.highlightSelection(U) : c(this, us) && h(this, C, We).call(this);
}, Qe = function() {
document.addEventListener("selectionchange", h(this, C, Ve).bind(this), {
signal: this._signal
});
}, ie = function() {
if (c(this, bZ))
return;
R(this, bZ, new AbortController());
const U = this.combinedSignal(c(this, bZ));
window.addEventListener("focus", this.focus.bind(this), {
signal: U
}), window.addEventListener("blur", this.blur.bind(this), {
signal: U
});
}, Re = function() {
var U;
(U = c(this, bZ)) == null || U.abort(), R(this, bZ, null);
}, OQ = function() {
if (c(this, JZ))
return;
R(this, JZ, new AbortController());
const U = this.combinedSignal(c(this, JZ));
window.addEventListener("keydown", this.keydown.bind(this), {
signal: U
}), window.addEventListener("keyup", this.keyup.bind(this), {
signal: U
});
}, Ne = function() {
var U;
(U = c(this, JZ)) == null || U.abort(), R(this, JZ, null);
}, gQ = function() {
if (c(this, hZ))
return;
R(this, hZ, new AbortController());
const U = this.combinedSignal(c(this, hZ));
document.addEventListener("copy", this.copy.bind(this), {
signal: U
}), document.addEventListener("cut", this.cut.bind(this), {
signal: U
}), document.addEventListener("paste", this.paste.bind(this), {
signal: U
});
}, KQ = function() {
var U;
(U = c(this, hZ)) == null || U.abort(), R(this, hZ, null);
}, ee = function() {
const U = this._signal;
document.addEventListener("dragover", this.dragOver.bind(this), {
signal: U
}), document.addEventListener("drop", this.drop.bind(this), {
signal: U
});
}, YU = function(U) {
Object.entries(U).some(([d, t]) => c(this, Ls)[d] !== t) && (this._eventBus.dispatch("annotationeditorstateschanged", {
source: this,
details: Object.assign(c(this, Ls), U)
}), c(this, UU) === cl.HIGHLIGHT && U.hasSelectedEditor === !1 && h(this, C, Jt).call(this, [[Vl.HIGHLIGHT_FREE, !0]]));
}, Jt = function(U) {
this._eventBus.dispatch("annotationeditorparamschanged", {
source: this,
details: U
});
}, he = async function() {
if (!c(this, MZ)) {
R(this, MZ, !0);
const U = [];
for (const l of c(this, aU).values())
U.push(l.enable());
await Promise.all(U);
for (const l of c(this, fl).values())
l.enable();
}
}, be = function() {
if (this.unselectAll(), c(this, MZ)) {
R(this, MZ, !1);
for (const U of c(this, aU).values())
U.disable();
for (const U of c(this, fl).values())
U.disable();
}
}, HQ = function(U) {
const l = c(this, aU).get(U.pageIndex);
l ? l.addOrRebuild(U) : (this.addEditor(U), this.addToAnnotationStorage(U));
}, me = function() {
let U = null;
for (U of c(this, hl))
;
return U;
}, On = function() {
if (c(this, fl).size === 0)
return !0;
if (c(this, fl).size === 1)
for (const U of c(this, fl).values())
return U.isEmpty();
return !1;
}, vQ = function(U) {
for (const l of c(this, hl))
l.unselect();
c(this, hl).clear();
for (const l of U)
l.isEmpty() || (c(this, hl).add(l), l.select());
h(this, C, YU).call(this, {
hasSelectedEditor: this.hasSelection
});
}, f(ZZ, "TRANSLATE_SMALL", 1), f(ZZ, "TRANSLATE_BIG", 10), ZZ);
var dU, qd, Yd, ic, $d, vU, Rc, lt, rU, Bt, BF, Ut, SZ, rd, gn, OW;
const oU = class oU {
constructor(U) {
b(this, rd);
b(this, dU, null);
b(this, qd, !1);
b(this, Yd, null);
b(this, ic, null);
b(this, $d, null);
b(this, vU, null);
b(this, Rc, !1);
b(this, lt, null);
b(this, rU, null);
b(this, Bt, null);
b(this, BF, null);
b(this, Ut, !1);
R(this, rU, U), R(this, Ut, U._uiManager.useNewAltTextFlow), c(oU, SZ) || R(oU, SZ, Object.freeze({
added: "pdfjs-editor-new-alt-text-added-button",
"added-label": "pdfjs-editor-new-alt-text-added-button-label",
missing: "pdfjs-editor-new-alt-text-missing-button",
"missing-label": "pdfjs-editor-new-alt-text-missing-button-label",
review: "pdfjs-editor-new-alt-text-to-review-button",
"review-label": "pdfjs-editor-new-alt-text-to-review-button-label"
}));
}
static initialize(U) {
oU._l10n ?? (oU._l10n = U);
}
async render() {
const U = R(this, Yd, document.createElement("button"));
U.className = "altText", U.tabIndex = "0";
const l = R(this, ic, document.createElement("span"));
U.append(l), c(this, Ut) ? (U.classList.add("new"), U.setAttribute("data-l10n-id", c(oU, SZ).missing), l.setAttribute("data-l10n-id", c(oU, SZ)["missing-label"])) : (U.setAttribute("data-l10n-id", "pdfjs-editor-alt-text-button"), l.setAttribute("data-l10n-id", "pdfjs-editor-alt-text-button-label"));
const d = c(this, rU)._uiManager._signal;
U.addEventListener("contextmenu", Cd, {
signal: d
}), U.addEventListener("pointerdown", (Z) => Z.stopPropagation(), {
signal: d
});
const t = (Z) => {
Z.preventDefault(), c(this, rU)._uiManager.editAltText(c(this, rU)), c(this, Ut) && c(this, rU)._reportTelemetry({
action: "pdfjs.image.alt_text.image_status_label_clicked",
data: {
label: c(this, rd, gn)
}
});
};
return U.addEventListener("click", t, {
capture: !0,
signal: d
}), U.addEventListener("keydown", (Z) => {
Z.target === U && Z.key === "Enter" && (R(this, Rc, !0), t(Z));
}, {
signal: d
}), await h(this, rd, OW).call(this), U;
}
finish() {
c(this, Yd) && (c(this, Yd).focus({
focusVisible: c(this, Rc)
}), R(this, Rc, !1));
}
isEmpty() {
return c(this, Ut) ? c(this, dU) === null : !c(this, dU) && !c(this, qd);
}
hasData() {
return c(this, Ut) ? c(this, dU) !== null || !!c(this, Bt) : this.isEmpty();
}
get guessedText() {
return c(this, Bt);
}
async setGuessedText(U) {
c(this, dU) === null && (R(this, Bt, U), R(this, BF, await oU._l10n.get("pdfjs-editor-new-alt-text-generated-alt-text-with-disclaimer", {
generatedAltText: U
})), h(this, rd, OW).call(this));
}
toggleAltTextBadge(U = !1) {
var l;
if (!c(this, Ut) || c(this, dU)) {
(l = c(this, lt)) == null || l.remove(), R(this, lt, null);
return;
}
if (!c(this, lt)) {
const d = R(this, lt, document.createElement("div"));
d.className = "noAltTextBadge", c(this, rU).div.append(d);
}
c(this, lt).classList.toggle("hidden", !U);
}
serialize(U) {
let l = c(this, dU);
return !U && c(this, Bt) === l && (l = c(this, BF)), {
altText: l,
decorative: c(this, qd),
guessedText: c(this, Bt),
textWithDisclaimer: c(this, BF)
};
}
get data() {
return {
altText: c(this, dU),
decorative: c(this, qd)
};
}
set data({
altText: U,
decorative: l,
guessedText: d,
textWithDisclaimer: t,
cancel: Z = !1
}) {
d && (R(this, Bt, d), R(this, BF, t)), !(c(this, dU) === U && c(this, qd) === l) && (Z || (R(this, dU, U), R(this, qd, l)), h(this, rd, OW).call(this));
}
toggle(U = !1) {
c(this, Yd) && (!U && c(this, vU) && (clearTimeout(c(this, vU)), R(this, vU, null)), c(this, Yd).disabled = !U);
}
shown() {
c(this, rU)._reportTelemetry({
action: "pdfjs.image.alt_text.image_status_label_displayed",
data: {
label: c(this, rd, gn)
}
});
}
destroy() {
var U, l;
(U = c(this, Yd)) == null || U.remove(), R(this, Yd, null), R(this, ic, null), R(this, $d, null), (l = c(this, lt)) == null || l.remove(), R(this, lt, null);
}
};
dU = new WeakMap(), qd = new WeakMap(), Yd = new WeakMap(), ic = new WeakMap(), $d = new WeakMap(), vU = new WeakMap(), Rc = new WeakMap(), lt = new WeakMap(), rU = new WeakMap(), Bt = new WeakMap(), BF = new WeakMap(), Ut = new WeakMap(), SZ = new WeakMap(), rd = new WeakSet(), gn = function() {
return c(this, dU) && "added" || c(this, dU) === null && this.guessedText && "review" || "missing";
}, OW = async function() {
var t, Z, F;
const U = c(this, Yd);
if (!U)
return;
if (c(this, Ut)) {
if (U.classList.toggle("done", !!c(this, dU)), U.setAttribute("data-l10n-id", c(oU, SZ)[c(this, rd, gn)]), (t = c(this, ic)) == null || t.setAttribute("data-l10n-id", c(oU, SZ)[`${c(this, rd, gn)}-label`]), !c(this, dU)) {
(Z = c(this, $d)) == null || Z.remove();
return;
}
} else {
if (!c(this, dU) && !c(this, qd)) {
U.classList.remove("done"), (F = c(this, $d)) == null || F.remove();
return;
}
U.classList.add("done"), U.setAttribute("data-l10n-id", "pdfjs-editor-alt-text-edit-button");
}
let l = c(this, $d);
if (!l) {
R(this, $d, l = document.createElement("span")), l.className = "tooltip", l.setAttribute("role", "tooltip"), l.id = `alt-text-tooltip-${c(this, rU).id}`;
const n = 100, s = c(this, rU)._uiManager._signal;
s.addEventListener("abort", () => {
clearTimeout(c(this, vU)), R(this, vU, null);
}, {
once: !0
}), U.addEventListener("mouseenter", () => {
R(this, vU, setTimeout(() => {
R(this, vU, null), c(this, $d).classList.add("show"), c(this, rU)._reportTelemetry({
action: "alt_text_tooltip"
});
}, n));
}, {
signal: s
}), U.addEventListener("mouseleave", () => {
var W;
c(this, vU) && (clearTimeout(c(this, vU)), R(this, vU, null)), (W = c(this, $d)) == null || W.classList.remove("show");
}, {
signal: s
});
}
c(this, qd) ? l.setAttribute("data-l10n-id", "pdfjs-editor-alt-text-decorative-tooltip") : (l.removeAttribute("data-l10n-id"), l.textContent = c(this, dU)), l.parentNode || U.append(l);
const d = c(this, rU).getImageForAltText();
d == null || d.setAttribute("aria-describedby", l.id);
}, b(oU, SZ, null), f(oU, "_l10n", null);
let YV = oU;
var Is, yF, Ds, Es, rs, Cs, ws, Nc, yt, zF, TZ, sZ, Je, Ge, PQ, ec;
let Me = (ec = class {
constructor({
container: U,
isPinchingDisabled: l = null,
isPinchingStopped: d = null,
onPinchStart: t = null,
onPinching: Z = null,
onPinchEnd: F = null,
signal: n
}) {
b(this, sZ);
b(this, Is);
b(this, yF, !1);
b(this, Ds, null);
b(this, Es);
b(this, rs);
b(this, Cs);
b(this, ws);
b(this, Nc);
b(this, yt, null);
b(this, zF);
b(this, TZ, null);
R(this, Is, U), R(this, Ds, d), R(this, Es, l), R(this, rs, t), R(this, Cs, Z), R(this, ws, F), R(this, zF, new AbortController()), R(this, Nc, AbortSignal.any([n, c(this, zF).signal])), U.addEventListener("touchstart", h(this, sZ, Je).bind(this), {
passive: !1,
signal: c(this, Nc)
});
}
get MIN_TOUCH_DISTANCE_TO_PINCH() {
return Wl(this, "MIN_TOUCH_DISTANCE_TO_PINCH", 35 / (window.devicePixelRatio || 1));
}
destroy() {
var U;
(U = c(this, zF)) == null || U.abort(), R(this, zF, null);
}
}, Is = new WeakMap(), yF = new WeakMap(), Ds = new WeakMap(), Es = new WeakMap(), rs = new WeakMap(), Cs = new WeakMap(), ws = new WeakMap(), Nc = new WeakMap(), yt = new WeakMap(), zF = new WeakMap(), TZ = new WeakMap(), sZ = new WeakSet(), Je = function(U) {
var t, Z, F;
if ((t = c(this, Es)) != null && t.call(this) || U.touches.length < 2)
return;
if (!c(this, TZ)) {
R(this, TZ, new AbortController());
const n = AbortSignal.any([c(this, Nc), c(this, TZ).signal]), s = c(this, Is), W = {
signal: n,
passive: !1
};
s.addEventListener("touchmove", h(this, sZ, Ge).bind(this), W), s.addEventListener("touchend", h(this, sZ, PQ).bind(this), W), s.addEventListener("touchcancel", h(this, sZ, PQ).bind(this), W), (Z = c(this, rs)) == null || Z.call(this);
}
if (nd(U), U.touches.length !== 2 || (F = c(this, Ds)) != null && F.call(this)) {
R(this, yt, null);
return;
}
let [l, d] = U.touches;
l.identifier > d.identifier && ([l, d] = [d, l]), R(this, yt, {
touch0X: l.screenX,
touch0Y: l.screenY,
touch1X: d.screenX,
touch1Y: d.screenY
});
}, Ge = function(U) {
var T;
if (!c(this, yt) || U.touches.length !== 2)
return;
let [l, d] = U.touches;
l.identifier > d.identifier && ([l, d] = [d, l]);
const {
screenX: t,
screenY: Z
} = l, {
screenX: F,
screenY: n
} = d, s = c(this, yt), {
touch0X: W,
touch0Y: V,
touch1X: Q,
touch1Y: i
} = s, N = Q - W, e = i - V, m = F - t, J = n - Z, M = Math.hypot(m, J) || 1, G = Math.hypot(N, e) || 1;
if (!c(this, yF) && Math.abs(G - M) <= ec.MIN_TOUCH_DISTANCE_TO_PINCH)
return;
if (s.touch0X = t, s.touch0Y = Z, s.touch1X = F, s.touch1Y = n, U.preventDefault(), !c(this, yF)) {
R(this, yF, !0);
return;
}
const S = [(t + F) / 2, (Z + n) / 2];
(T = c(this, Cs)) == null || T.call(this, S, G, M);
}, PQ = function(U) {
var l;
c(this, TZ).abort(), R(this, TZ, null), (l = c(this, ws)) == null || l.call(this), c(this, yt) && (U.preventDefault(), R(this, yt, null), R(this, yF, !1));
}, ec);
var LF, od, ol, hc, XZ, xs, kF, WU, IF, zt, uZ, js, DF, PU, Os, EF, Lt, dt, bc, mc, id, rF, gs, wV, A, fQ, Ks, AQ, gW, Se, Te, _Q, KW, qQ, Xe, ue, Ye, $Q, oe, li, pe, Be, ye, Ui, Kn;
const nl = class nl {
constructor(U) {
b(this, A);
b(this, LF, null);
b(this, od, null);
b(this, ol, null);
b(this, hc, !1);
b(this, XZ, null);
b(this, xs, "");
b(this, kF, !1);
b(this, WU, null);
b(this, IF, null);
b(this, zt, null);
b(this, uZ, null);
b(this, js, "");
b(this, DF, !1);
b(this, PU, null);
b(this, Os, !1);
b(this, EF, !1);
b(this, Lt, !1);
b(this, dt, null);
b(this, bc, 0);
b(this, mc, 0);
b(this, id, null);
b(this, rF, null);
f(this, "_editToolbar", null);
f(this, "_initialOptions", /* @__PURE__ */ Object.create(null));
f(this, "_initialData", null);
f(this, "_isVisible", !0);
f(this, "_uiManager", null);
f(this, "_focusEventsAllowed", !0);
b(this, gs, !1);
b(this, wV, nl._zIndex++);
this.parent = U.parent, this.id = U.id, this.width = this.height = null, this.pageIndex = U.parent.pageIndex, this.name = U.name, this.div = null, this._uiManager = U.uiManager, this.annotationElementId = null, this._willKeepAspectRatio = !1, this._initialOptions.isCentered = U.isCentered, this._structTreeParentId = null;
const {
rotation: l,
rawDims: {
pageWidth: d,
pageHeight: t,
pageX: Z,
pageY: F
}
} = this.parent.viewport;
this.rotation = l, this.pageRotation = (360 + l - this._uiManager.viewParameters.rotation) % 360, this.pageDimensions = [d, t], this.pageTranslation = [Z, F];
const [n, s] = this.parentDimensions;
this.x = U.x / n, this.y = U.y / s, this.isAttachedToDOM = !1, this.deleted = !1;
}
static get _resizerKeyboardManager() {
const U = nl.prototype._resizeWithKeyboard, l = es.TRANSLATE_SMALL, d = es.TRANSLATE_BIG;
return Wl(this, "_resizerKeyboardManager", new GW([[["ArrowLeft", "mac+ArrowLeft"], U, {
args: [-l, 0]
}], [["ctrl+ArrowLeft", "mac+shift+ArrowLeft"], U, {
args: [-d, 0]
}], [["ArrowRight", "mac+ArrowRight"], U, {
args: [l, 0]
}], [["ctrl+ArrowRight", "mac+shift+ArrowRight"], U, {
args: [d, 0]
}], [["ArrowUp", "mac+ArrowUp"], U, {
args: [0, -l]
}], [["ctrl+ArrowUp", "mac+shift+ArrowUp"], U, {
args: [0, -d]
}], [["ArrowDown", "mac+ArrowDown"], U, {
args: [0, l]
}], [["ctrl+ArrowDown", "mac+shift+ArrowDown"], U, {
args: [0, d]
}], [["Escape", "mac+Escape"], nl.prototype._stopResizingWithKeyboard]]));
}
get editorType() {
return Object.getPrototypeOf(this).constructor._type;
}
static get isDrawer() {
return !1;
}
static get _defaultLineColor() {
return Wl(this, "_defaultLineColor", this._colorManager.getHexCode("CanvasText"));
}
static deleteAnnotationElement(U) {
const l = new om({
id: U.parent.getNextId(),
parent: U.parent,
uiManager: U._uiManager
});
l.annotationElementId = U.annotationElementId, l.deleted = !0, l._uiManager.addToAnnotationStorage(l);
}
static initialize(U, l) {
if (nl._l10n ?? (nl._l10n = U), nl._l10nResizer || (nl._l10nResizer = Object.freeze({
topLeft: "pdfjs-editor-resizer-top-left",
topMiddle: "pdfjs-editor-resizer-top-middle",
topRight: "pdfjs-editor-resizer-top-right",
middleRight: "pdfjs-editor-resizer-middle-right",
bottomRight: "pdfjs-editor-resizer-bottom-right",
bottomMiddle: "pdfjs-editor-resizer-bottom-middle",
bottomLeft: "pdfjs-editor-resizer-bottom-left",
middleLeft: "pdfjs-editor-resizer-middle-left"
})), nl._borderLineWidth !== -1)
return;
const d = getComputedStyle(document.documentElement);
nl._borderLineWidth = parseFloat(d.getPropertyValue("--outline-width")) || 0;
}
static updateDefaultParams(U, l) {
}
static get defaultPropertiesToUpdate() {
return [];
}
static isHandlingMimeForPasting(U) {
return !1;
}
static paste(U, l) {
ul("Not implemented");
}
get propertiesToUpdate() {
return [];
}
get _isDraggable() {
return c(this, gs);
}
set _isDraggable(U) {
var l;
R(this, gs, U), (l = this.div) == null || l.classList.toggle("draggable", U);
}
get isEnterHandled() {
return !0;
}
center() {
const [U, l] = this.pageDimensions;
switch (this.parentRotation) {
case 90:
this.x -= this.height * l / (U * 2), this.y += this.width * U / (l * 2);
break;
case 180:
this.x += this.width / 2, this.y += this.height / 2;
break;
case 270:
this.x += this.height * l / (U * 2), this.y -= this.width * U / (l * 2);
break;
default:
this.x -= this.width / 2, this.y -= this.height / 2;
break;
}
this.fixAndSetPosition();
}
addCommands(U) {
this._uiManager.addCommands(U);
}
get currentLayer() {
return this._uiManager.currentLayer;
}
setInBackground() {
this.div.style.zIndex = 0;
}
setInForeground() {
this.div.style.zIndex = c(this, wV);
}
setParent(U) {
U !== null ? (this.pageIndex = U.pageIndex, this.pageDimensions = U.pageDimensions) : h(this, A, Kn).call(this), this.parent = U;
}
focusin(U) {
this._focusEventsAllowed && (c(this, DF) ? R(this, DF, !1) : this.parent.setSelected(this));
}
focusout(U) {
var d;
if (!this._focusEventsAllowed || !this.isAttachedToDOM)
return;
const l = U.relatedTarget;
l != null && l.closest(`#${this.id}`) || (U.preventDefault(), (d = this.parent) != null && d.isMultipleSelection || this.commitOrRemove());
}
commitOrRemove() {
this.isEmpty() ? this.remove() : this.commit();
}
commit() {
this.addToAnnotationStorage();
}
addToAnnotationStorage() {
this._uiManager.addToAnnotationStorage(this);
}
setAt(U, l, d, t) {
const [Z, F] = this.parentDimensions;
[d, t] = this.screenToPageTranslation(d, t), this.x = (U + d) / Z, this.y = (l + t) / F, this.fixAndSetPosition();
}
translate(U, l) {
h(this, A, fQ).call(this, this.parentDimensions, U, l);
}
translateInPage(U, l) {
c(this, PU) || R(this, PU, [this.x, this.y, this.width, this.height]), h(this, A, fQ).call(this, this.pageDimensions, U, l), this.div.scrollIntoView({
block: "nearest"
});
}
drag(U, l) {
c(this, PU) || R(this, PU, [this.x, this.y, this.width, this.height]);
const {
div: d,
parentDimensions: [t, Z]
} = this;
if (this.x += U / t, this.y += l / Z, this.parent && (this.x < 0 || this.x > 1 || this.y < 0 || this.y > 1)) {
const {
x: Q,
y: i
} = this.div.getBoundingClientRect();
this.parent.findNewParent(this, Q, i) && (this.x -= Math.floor(this.x), this.y -= Math.floor(this.y));
}
let {
x: F,
y: n
} = this;
const [s, W] = this.getBaseTranslation();
F += s, n += W;
const {
style: V
} = d;
V.left = `${(100 * F).toFixed(2)}%`, V.top = `${(100 * n).toFixed(2)}%`, this._onTranslating(F, n), d.scrollIntoView({
block: "nearest"
});
}
_onTranslating(U, l) {
}
_onTranslated(U, l) {
}
get _hasBeenMoved() {
return !!c(this, PU) && (c(this, PU)[0] !== this.x || c(this, PU)[1] !== this.y);
}
get _hasBeenResized() {
return !!c(this, PU) && (c(this, PU)[2] !== this.width || c(this, PU)[3] !== this.height);
}
getBaseTranslation() {
const [U, l] = this.parentDimensions, {
_borderLineWidth: d
} = nl, t = d / U, Z = d / l;
switch (this.rotation) {
case 90:
return [-t, Z];
case 180:
return [t, Z];
case 270:
return [t, -Z];
default:
return [-t, -Z];
}
}
get _mustFixPosition() {
return !0;
}
fixAndSetPosition(U = this.rotation) {
const {
div: {
style: l
},
pageDimensions: [d, t]
} = this;
let {
x: Z,
y: F,
width: n,
height: s
} = this;
if (n *= d, s *= t, Z *= d, F *= t, this._mustFixPosition)
switch (U) {
case 0:
Z = Math.max(0, Math.min(d - n, Z)), F = Math.max(0, Math.min(t - s, F));
break;
case 90:
Z = Math.max(0, Math.min(d - s, Z)), F = Math.min(t, Math.max(n, F));
break;
case 180:
Z = Math.min(d, Math.max(n, Z)), F = Math.min(t, Math.max(s, F));
break;
case 270:
Z = Math.min(d, Math.max(s, Z)), F = Math.max(0, Math.min(t - n, F));
break;
}
this.x = Z /= d, this.y = F /= t;
const [W, V] = this.getBaseTranslation();
Z += W, F += V, l.left = `${(100 * Z).toFixed(2)}%`, l.top = `${(100 * F).toFixed(2)}%`, this.moveInDOM();
}
screenToPageTranslation(U, l) {
var d;
return h(d = nl, Ks, AQ).call(d, U, l, this.parentRotation);
}
pageTranslationToScreen(U, l) {
var d;
return h(d = nl, Ks, AQ).call(d, U, l, 360 - this.parentRotation);
}
get parentScale() {
return this._uiManager.viewParameters.realScale;
}
get parentRotation() {
return (this._uiManager.viewParameters.rotation + this.pageRotation) % 360;
}
get parentDimensions() {
const {
parentScale: U,
pageDimensions: [l, d]
} = this;
return [l * U, d * U];
}
setDims(U, l) {
const [d, t] = this.parentDimensions, {
style: Z
} = this.div;
Z.width = `${(100 * U / d).toFixed(2)}%`, c(this, kF) || (Z.height = `${(100 * l / t).toFixed(2)}%`);
}
fixDims() {
const {
style: U
} = this.div, {
height: l,
width: d
} = U, t = d.endsWith("%"), Z = !c(this, kF) && l.endsWith("%");
if (t && Z)
return;
const [F, n] = this.parentDimensions;
t || (U.width = `${(100 * parseFloat(d) / F).toFixed(2)}%`), !c(this, kF) && !Z && (U.height = `${(100 * parseFloat(l) / n).toFixed(2)}%`);
}
getInitialTranslation() {
return [0, 0];
}
_onResized() {
}
static _round(U) {
return Math.round(U * 1e4) / 1e4;
}
_onResizing() {
}
altTextFinish() {
var U;
(U = c(this, ol)) == null || U.finish();
}
async addEditToolbar() {
return this._editToolbar || c(this, EF) ? this._editToolbar : (this._editToolbar = new rQ(this), this.div.append(this._editToolbar.render()), c(this, ol) && await this._editToolbar.addAltText(c(this, ol)), this._editToolbar);
}
removeEditToolbar() {
var U;
this._editToolbar && (this._editToolbar.remove(), this._editToolbar = null, (U = c(this, ol)) == null || U.destroy());
}
addContainer(U) {
var d;
const l = (d = this._editToolbar) == null ? void 0 : d.div;
l ? l.before(U) : this.div.append(U);
}
getClientDimensions() {
return this.div.getBoundingClientRect();
}
async addAltTextButton() {
c(this, ol) || (YV.initialize(nl._l10n), R(this, ol, new YV(this)), c(this, LF) && (c(this, ol).data = c(this, LF), R(this, LF, null)), await this.addEditToolbar());
}
get altTextData() {
var U;
return (U = c(this, ol)) == null ? void 0 : U.data;
}
set altTextData(U) {
c(this, ol) && (c(this, ol).data = U);
}
get guessedAltText() {
var U;
return (U = c(this, ol)) == null ? void 0 : U.guessedText;
}
async setGuessedAltText(U) {
var l;
await ((l = c(this, ol)) == null ? void 0 : l.setGuessedText(U));
}
serializeAltText(U) {
var l;
return (l = c(this, ol)) == null ? void 0 : l.serialize(U);
}
hasAltText() {
return !!c(this, ol) && !c(this, ol).isEmpty();
}
hasAltTextData() {
var U;
return ((U = c(this, ol)) == null ? void 0 : U.hasData()) ?? !1;
}
render() {
var Z;
this.div = document.createElement("div"), this.div.setAttribute("data-editor-rotation", (360 - this.rotation) % 360), this.div.className = this.name, this.div.setAttribute("id", this.id), this.div.tabIndex = c(this, hc) ? -1 : 0, this._isVisible || this.div.classList.add("hidden"), this.setInForeground(), h(this, A, li).call(this);
const [U, l] = this.parentDimensions;
this.parentRotation % 180 !== 0 && (this.div.style.maxWidth = `${(100 * l / U).toFixed(2)}%`, this.div.style.maxHeight = `${(100 * U / l).toFixed(2)}%`);
const [d, t] = this.getInitialTranslation();
return this.translate(d, t), uV(this, this.div, ["pointerdown"]), this.isResizable && this._uiManager._supportsPinchToZoom && (c(this, rF) || R(this, rF, new Me({
container: this.div,
isPinchingDisabled: () => !this.isSelected,
onPinchStart: h(this, A, Xe).bind(this),
onPinching: h(this, A, ue).bind(this),
onPinchEnd: h(this, A, Ye).bind(this),
signal: this._uiManager._signal
}))), (Z = this._uiManager._editorUndoBar) == null || Z.hide(), this.div;
}
pointerdown(U) {
const {
isMac: l
} = LU.platform;
if (U.button !== 0 || U.ctrlKey && l) {
U.preventDefault();
return;
}
if (R(this, DF, !0), this._isDraggable) {
h(this, A, oe).call(this, U);
return;
}
h(this, A, $Q).call(this, U);
}
get isSelected() {
return this._uiManager.isSelected(this);
}
_onStartDragging() {
}
_onStopDragging() {
}
moveInDOM() {
c(this, dt) && clearTimeout(c(this, dt)), R(this, dt, setTimeout(() => {
var U;
R(this, dt, null), (U = this.parent) == null || U.moveEditorInDOM(this);
}, 0));
}
_setParentAndPosition(U, l, d) {
U.changeParent(this), this.x = l, this.y = d, this.fixAndSetPosition(), this._onTranslated();
}
getRect(U, l, d = this.rotation) {
const t = this.parentScale, [Z, F] = this.pageDimensions, [n, s] = this.pageTranslation, W = U / t, V = l / t, Q = this.x * Z, i = this.y * F, N = this.width * Z, e = this.height * F;
switch (d) {
case 0:
return [Q + W + n, F - i - V - e + s, Q + W + N + n, F - i - V + s];
case 90:
return [Q + V + n, F - i + W + s, Q + V + e + n, F - i + W + N + s];
case 180:
return [Q - W - N + n, F - i + V + s, Q - W + n, F - i + V + e + s];
case 270:
return [Q - V - e + n, F - i - W - N + s, Q - V + n, F - i - W + s];
default:
throw new Error("Invalid rotation");
}
}
getRectInCurrentCoords(U, l) {
const [d, t, Z, F] = U, n = Z - d, s = F - t;
switch (this.rotation) {
case 0:
return [d, l - F, n, s];
case 90:
return [d, l - t, s, n];
case 180:
return [Z, l - t, n, s];
case 270:
return [Z, l - F, s, n];
default:
throw new Error("Invalid rotation");
}
}
onceAdded(U) {
}
isEmpty() {
return !1;
}
enableEditMode() {
R(this, EF, !0);
}
disableEditMode() {
R(this, EF, !1);
}
isInEditMode() {
return c(this, EF);
}
shouldGetKeyboardEvents() {
return c(this, Lt);
}
needsToBeRebuilt() {
return this.div && !this.isAttachedToDOM;
}
get isOnScreen() {
const {
top: U,
left: l,
bottom: d,
right: t
} = this.getClientDimensions(), {
innerHeight: Z,
innerWidth: F
} = window;
return l < F && t > 0 && U < Z && d > 0;
}
rebuild() {
h(this, A, li).call(this);
}
rotate(U) {
}
resize() {
}
serializeDeleted() {
var U;
return {
id: this.annotationElementId,
deleted: !0,
pageIndex: this.pageIndex,
popupRef: ((U = this._initialData) == null ? void 0 : U.popupRef) || ""
};
}
serialize(U = !1, l = null) {
ul("An editor must be serializable");
}
static async deserialize(U, l, d) {
const t = new this.prototype.constructor({
parent: l,
id: l.getNextId(),
uiManager: d
});
t.rotation = U.rotation, R(t, LF, U.accessibilityData);
const [Z, F] = t.pageDimensions, [n, s, W, V] = t.getRectInCurrentCoords(U.rect, F);
return t.x = n / Z, t.y = s / F, t.width = W / Z, t.height = V / F, t;
}
get hasBeenModified() {
return !!this.annotationElementId && (this.deleted || this.serialize() !== null);
}
remove() {
var U, l;
if ((U = c(this, uZ)) == null || U.abort(), R(this, uZ, null), this.isEmpty() || this.commit(), this.parent ? this.parent.remove(this) : this._uiManager.removeEditor(this), c(this, dt) && (clearTimeout(c(this, dt)), R(this, dt, null)), h(this, A, Kn).call(this), this.removeEditToolbar(), c(this, id)) {
for (const d of c(this, id).values())
clearTimeout(d);
R(this, id, null);
}
this.parent = null, (l = c(this, rF)) == null || l.destroy(), R(this, rF, null);
}
get isResizable() {
return !1;
}
makeResizable() {
this.isResizable && (h(this, A, Se).call(this), c(this, WU).classList.remove("hidden"), uV(this, this.div, ["keydown"]));
}
get toolbarPosition() {
return null;
}
keydown(U) {
if (!this.isResizable || U.target !== this.div || U.key !== "Enter")
return;
this._uiManager.setSelected(this), R(this, zt, {
savedX: this.x,
savedY: this.y,
savedWidth: this.width,
savedHeight: this.height
});
const l = c(this, WU).children;
if (!c(this, od)) {
R(this, od, Array.from(l));
const F = h(this, A, pe).bind(this), n = h(this, A, Be).bind(this), s = this._uiManager._signal;
for (const W of c(this, od)) {
const V = W.getAttribute("data-resizer-name");
W.setAttribute("role", "spinbutton"), W.addEventListener("keydown", F, {
signal: s
}), W.addEventListener("blur", n, {
signal: s
}), W.addEventListener("focus", h(this, A, ye).bind(this, V), {
signal: s
}), W.setAttribute("data-l10n-id", nl._l10nResizer[V]);
}
}
const d = c(this, od)[0];
let t = 0;
for (const F of l) {
if (F === d)
break;
t++;
}
const Z = (360 - this.rotation + this.parentRotation) % 360 / 90 * (c(this, od).length / 4);
if (Z !== t) {
if (Z < t)
for (let n = 0; n < t - Z; n++)
c(this, WU).append(c(this, WU).firstChild);
else if (Z > t)
for (let n = 0; n < Z - t; n++)
c(this, WU).firstChild.before(c(this, WU).lastChild);
let F = 0;
for (const n of l) {
const W = c(this, od)[F++].getAttribute("data-resizer-name");
n.setAttribute("data-l10n-id", nl._l10nResizer[W]);
}
}
h(this, A, Ui).call(this, 0), R(this, Lt, !0), c(this, WU).firstChild.focus({
focusVisible: !0
}), U.preventDefault(), U.stopImmediatePropagation();
}
_resizeWithKeyboard(U, l) {
c(this, Lt) && h(this, A, qQ).call(this, c(this, js), {
deltaX: U,
deltaY: l,
fromKeyboard: !0
});
}
_stopResizingWithKeyboard() {
h(this, A, Kn).call(this), this.div.focus();
}
select() {
var U, l, d;
if (this.makeResizable(), (U = this.div) == null || U.classList.add("selectedEditor"), !this._editToolbar) {
this.addEditToolbar().then(() => {
var t, Z;
(t = this.div) != null && t.classList.contains("selectedEditor") && ((Z = this._editToolbar) == null || Z.show());
});
return;
}
(l = this._editToolbar) == null || l.show(), (d = c(this, ol)) == null || d.toggleAltTextBadge(!1);
}
unselect() {
var U, l, d, t, Z;
(U = c(this, WU)) == null || U.classList.add("hidden"), (l = this.div) == null || l.classList.remove("selectedEditor"), (d = this.div) != null && d.contains(document.activeElement) && this._uiManager.currentLayer.div.focus({
preventScroll: !0
}), (t = this._editToolbar) == null || t.hide(), (Z = c(this, ol)) == null || Z.toggleAltTextBadge(!0);
}
updateParams(U, l) {
}
disableEditing() {
}
enableEditing() {
}
enterInEditMode() {
}
getImageForAltText() {
return null;
}
get contentDiv() {
return this.div;
}
get isEditing() {
return c(this, Os);
}
set isEditing(U) {
R(this, Os, U), this.parent && (U ? (this.parent.setSelected(this), this.parent.setActiveEditor(this)) : this.parent.setActiveEditor(null));
}
setAspectRatio(U, l) {
R(this, kF, !0);
const d = U / l, {
style: t
} = this.div;
t.aspectRatio = d, t.height = "auto";
}
static get MIN_SIZE() {
return 16;
}
static canCreateNewEmptyEditor() {
return !0;
}
get telemetryInitialData() {
return {
action: "added"
};
}
get telemetryFinalData() {
return null;
}
_reportTelemetry(U, l = !1) {
if (l) {
c(this, id) || R(this, id, /* @__PURE__ */ new Map());
const {
action: d
} = U;
let t = c(this, id).get(d);
t && clearTimeout(t), t = setTimeout(() => {
this._reportTelemetry(U), c(this, id).delete(d), c(this, id).size === 0 && R(this, id, null);
}, nl._telemetryTimeout), c(this, id).set(d, t);
return;
}
U.type || (U.type = this.editorType), this._uiManager._eventBus.dispatch("reporttelemetry", {
source: this,
details: {
type: "editing",
data: U
}
});
}
show(U = this._isVisible) {
this.div.classList.toggle("hidden", !U), this._isVisible = U;
}
enable() {
this.div && (this.div.tabIndex = 0), R(this, hc, !1);
}
disable() {
this.div && (this.div.tabIndex = -1), R(this, hc, !0);
}
renderAnnotationElement(U) {
let l = U.container.querySelector(".annotationContent");
if (!l)
l = document.createElement("div"), l.classList.add("annotationContent", this.editorType), U.container.prepend(l);
else if (l.nodeName === "CANVAS") {
const d = l;
l = document.createElement("div"), l.classList.add("annotationContent", this.editorType), d.before(l);
}
return l;
}
resetAnnotationElement(U) {
const {
firstChild: l
} = U.container;
(l == null ? void 0 : l.nodeName) === "DIV" && l.classList.contains("annotationContent") && l.remove();
}
};
LF = new WeakMap(), od = new WeakMap(), ol = new WeakMap(), hc = new WeakMap(), XZ = new WeakMap(), xs = new WeakMap(), kF = new WeakMap(), WU = new WeakMap(), IF = new WeakMap(), zt = new WeakMap(), uZ = new WeakMap(), js = new WeakMap(), DF = new WeakMap(), PU = new WeakMap(), Os = new WeakMap(), EF = new WeakMap(), Lt = new WeakMap(), dt = new WeakMap(), bc = new WeakMap(), mc = new WeakMap(), id = new WeakMap(), rF = new WeakMap(), gs = new WeakMap(), wV = new WeakMap(), A = new WeakSet(), fQ = function([U, l], d, t) {
[d, t] = this.screenToPageTranslation(d, t), this.x += d / U, this.y += t / l, this._onTranslating(this.x, this.y), this.fixAndSetPosition();
}, Ks = new WeakSet(), AQ = function(U, l, d) {
switch (d) {
case 90:
return [l, -U];
case 180:
return [-U, -l];
case 270:
return [-l, U];
default:
return [U, l];
}
}, gW = function(U) {
switch (U) {
case 90: {
const [l, d] = this.pageDimensions;
return [0, -l / d, d / l, 0];
}
case 180:
return [-1, 0, 0, -1];
case 270: {
const [l, d] = this.pageDimensions;
return [0, l / d, -d / l, 0];
}
default:
return [1, 0, 0, 1];
}
}, Se = function() {
if (c(this, WU))
return;
R(this, WU, document.createElement("div")), c(this, WU).classList.add("resizers");
const U = this._willKeepAspectRatio ? ["topLeft", "topRight", "bottomRight", "bottomLeft"] : ["topLeft", "topMiddle", "topRight", "middleRight", "bottomRight", "bottomMiddle", "bottomLeft", "middleLeft"], l = this._uiManager._signal;
for (const d of U) {
const t = document.createElement("div");
c(this, WU).append(t), t.classList.add("resizer", d), t.setAttribute("data-resizer-name", d), t.addEventListener("pointerdown", h(this, A, Te).bind(this, d), {
signal: l
}), t.addEventListener("contextmenu", Cd, {
signal: l
}), t.tabIndex = -1;
}
this.div.prepend(c(this, WU));
}, Te = function(U, l) {
var V;
l.preventDefault();
const {
isMac: d
} = LU.platform;
if (l.button !== 0 || l.ctrlKey && d)
return;
(V = c(this, ol)) == null || V.toggle(!1);
const t = this._isDraggable;
this._isDraggable = !1, R(this, IF, [l.screenX, l.screenY]);
const Z = new AbortController(), F = this._uiManager.combinedSignal(Z);
this.parent.togglePointerEvents(!1), window.addEventListener("pointermove", h(this, A, qQ).bind(this, U), {
passive: !0,
capture: !0,
signal: F
}), window.addEventListener("touchmove", nd, {
passive: !1,
signal: F
}), window.addEventListener("contextmenu", Cd, {
signal: F
}), R(this, zt, {
savedX: this.x,
savedY: this.y,
savedWidth: this.width,
savedHeight: this.height
});
const n = this.parent.div.style.cursor, s = this.div.style.cursor;
this.div.style.cursor = this.parent.div.style.cursor = window.getComputedStyle(l.target).cursor;
const W = () => {
var Q;
Z.abort(), this.parent.togglePointerEvents(!0), (Q = c(this, ol)) == null || Q.toggle(!0), this._isDraggable = t, this.parent.div.style.cursor = n, this.div.style.cursor = s, h(this, A, KW).call(this);
};
window.addEventListener("pointerup", W, {
signal: F
}), window.addEventListener("blur", W, {
signal: F
});
}, _Q = function(U, l, d, t) {
this.width = d, this.height = t, this.x = U, this.y = l;
const [Z, F] = this.parentDimensions;
this.setDims(Z * d, F * t), this.fixAndSetPosition(), this._onResized();
}, KW = function() {
if (!c(this, zt))
return;
const {
savedX: U,
savedY: l,
savedWidth: d,
savedHeight: t
} = c(this, zt);
R(this, zt, null);
const Z = this.x, F = this.y, n = this.width, s = this.height;
Z === U && F === l && n === d && s === t || this.addCommands({
cmd: h(this, A, _Q).bind(this, Z, F, n, s),
undo: h(this, A, _Q).bind(this, U, l, d, t),
mustExec: !0
});
}, qQ = function(U, l) {
const [d, t] = this.parentDimensions, Z = this.x, F = this.y, n = this.width, s = this.height, W = nl.MIN_SIZE / d, V = nl.MIN_SIZE / t, Q = h(this, A, gW).call(this, this.rotation), i = (k, I) => [Q[0] * k + Q[2] * I, Q[1] * k + Q[3] * I], N = h(this, A, gW).call(this, 360 - this.rotation), e = (k, I) => [N[0] * k + N[2] * I, N[1] * k + N[3] * I];
let m, J, M = !1, G = !1;
switch (U) {
case "topLeft":
M = !0, m = (k, I) => [0, 0], J = (k, I) => [k, I];
break;
case "topMiddle":
m = (k, I) => [k / 2, 0], J = (k, I) => [k / 2, I];
break;
case "topRight":
M = !0, m = (k, I) => [k, 0], J = (k, I) => [0, I];
break;
case "middleRight":
G = !0, m = (k, I) => [k, I / 2], J = (k, I) => [0, I / 2];
break;
case "bottomRight":
M = !0, m = (k, I) => [k, I], J = (k, I) => [0, 0];
break;
case "bottomMiddle":
m = (k, I) => [k / 2, I], J = (k, I) => [k / 2, 0];
break;
case "bottomLeft":
M = !0, m = (k, I) => [0, I], J = (k, I) => [k, 0];
break;
case "middleLeft":
G = !0, m = (k, I) => [0, I / 2], J = (k, I) => [k, I / 2];
break;
}
const S = m(n, s), T = J(n, s);
let u = i(...T);
const Y = nl._round(Z + u[0]), o = nl._round(F + u[1]);
let B = 1, X = 1, p, y;
if (l.fromKeyboard)
({
deltaX: p,
deltaY: y
} = l);
else {
const {
screenX: k,
screenY: I
} = l, [q, sl] = c(this, IF);
[p, y] = this.screenToPageTranslation(k - q, I - sl), c(this, IF)[0] = k, c(this, IF)[1] = I;
}
if ([p, y] = e(p / d, y / t), M) {
const k = Math.hypot(n, s);
B = X = Math.max(Math.min(Math.hypot(T[0] - S[0] - p, T[1] - S[1] - y) / k, 1 / n, 1 / s), W / n, V / s);
} else G ? B = Math.max(W, Math.min(1, Math.abs(T[0] - S[0] - p))) / n : X = Math.max(V, Math.min(1, Math.abs(T[1] - S[1] - y))) / s;
const r = nl._round(n * B), D = nl._round(s * X);
u = i(...J(r, D));
const E = Y - u[0], P = o - u[1];
c(this, PU) || R(this, PU, [this.x, this.y, this.width, this.height]), this.width = r, this.height = D, this.x = E, this.y = P, this.setDims(d * r, t * D), this.fixAndSetPosition(), this._onResizing();
}, Xe = function() {
var U;
R(this, zt, {
savedX: this.x,
savedY: this.y,
savedWidth: this.width,
savedHeight: this.height
}), (U = c(this, ol)) == null || U.toggle(!1), this.parent.togglePointerEvents(!1);
}, ue = function(U, l, d) {
let Z = 0.7 * (d / l) + 1 - 0.7;
if (Z === 1)
return;
const F = h(this, A, gW).call(this, this.rotation), n = (Y, o) => [F[0] * Y + F[2] * o, F[1] * Y + F[3] * o], [s, W] = this.parentDimensions, V = this.x, Q = this.y, i = this.width, N = this.height, e = nl.MIN_SIZE / s, m = nl.MIN_SIZE / W;
Z = Math.max(Math.min(Z, 1 / i, 1 / N), e / i, m / N);
const J = nl._round(i * Z), M = nl._round(N * Z);
if (J === i && M === N)
return;
c(this, PU) || R(this, PU, [V, Q, i, N]);
const G = n(i / 2, N / 2), S = nl._round(V + G[0]), T = nl._round(Q + G[1]), u = n(J / 2, M / 2);
this.x = S - u[0], this.y = T - u[1], this.width = J, this.height = M, this.setDims(s * J, W * M), this.fixAndSetPosition(), this._onResizing();
}, Ye = function() {
var U;
(U = c(this, ol)) == null || U.toggle(!0), this.parent.togglePointerEvents(!0), h(this, A, KW).call(this);
}, $Q = function(U) {
const {
isMac: l
} = LU.platform;
U.ctrlKey && !l || U.shiftKey || U.metaKey && l ? this.parent.toggleSelected(this) : this.parent.setSelected(this);
}, oe = function(U) {
const {
isSelected: l
} = this;
this._uiManager.setUpDragSession();
let d = !1;
const t = new AbortController(), Z = this._uiManager.combinedSignal(t), F = {
capture: !0,
passive: !1,
signal: Z
}, n = (W) => {
t.abort(), R(this, XZ, null), R(this, DF, !1), this._uiManager.endDragSession() || h(this, A, $Q).call(this, W), d && this._onStopDragging();
};
l && (R(this, bc, U.clientX), R(this, mc, U.clientY), R(this, XZ, U.pointerId), R(this, xs, U.pointerType), window.addEventListener("pointermove", (W) => {
d || (d = !0, this._onStartDragging());
const {
clientX: V,
clientY: Q,
pointerId: i
} = W;
if (i !== c(this, XZ)) {
nd(W);
return;
}
const [N, e] = this.screenToPageTranslation(V - c(this, bc), Q - c(this, mc));
R(this, bc, V), R(this, mc, Q), this._uiManager.dragSelectedEditors(N, e);
}, F), window.addEventListener("touchmove", nd, F), window.addEventListener("pointerdown", (W) => {
W.pointerType === c(this, xs) && (c(this, rF) || W.isPrimary) && n(W), nd(W);
}, F));
const s = (W) => {
if (!c(this, XZ) || c(this, XZ) === W.pointerId) {
n(W);
return;
}
nd(W);
};
window.addEventListener("pointerup", s, {
signal: Z
}), window.addEventListener("blur", s, {
signal: Z
});
}, li = function() {
if (c(this, uZ) || !this.div)
return;
R(this, uZ, new AbortController());
const U = this._uiManager.combinedSignal(c(this, uZ));
this.div.addEventListener("focusin", this.focusin.bind(this), {
signal: U
}), this.div.addEventListener("focusout", this.focusout.bind(this), {
signal: U
});
}, pe = function(U) {
nl._resizerKeyboardManager.exec(this, U);
}, Be = function(U) {
var l;
c(this, Lt) && ((l = U.relatedTarget) == null ? void 0 : l.parentNode) !== c(this, WU) && h(this, A, Kn).call(this);
}, ye = function(U) {
R(this, js, c(this, Lt) ? U : "");
}, Ui = function(U) {
if (c(this, od))
for (const l of c(this, od))
l.tabIndex = U;
}, Kn = function() {
R(this, Lt, !1), h(this, A, Ui).call(this, -1), h(this, A, KW).call(this);
}, b(nl, Ks), f(nl, "_l10n", null), f(nl, "_l10nResizer", null), f(nl, "_borderLineWidth", -1), f(nl, "_colorManager", new xQ()), f(nl, "_zIndex", 1), f(nl, "_telemetryTimeout", 1e3);
let kl = nl;
class om extends kl {
constructor(U) {
super(U), this.annotationElementId = U.annotationElementId, this.deleted = !0;
}
serialize() {
return this.serializeDeleted();
}
}
const $R = 3285377520, Wd = 4294901760, Kd = 65535;
class ze {
constructor(U) {
this.h1 = U ? U & 4294967295 : $R, this.h2 = U ? U & 4294967295 : $R;
}
update(U) {
let l, d;
if (typeof U == "string") {
l = new Uint8Array(U.length * 2), d = 0;
for (let m = 0, J = U.length; m < J; m++) {
const M = U.charCodeAt(m);
M <= 255 ? l[d++] = M : (l[d++] = M >>> 8, l[d++] = M & 255);
}
} else if (ArrayBuffer.isView(U))
l = U.slice(), d = l.byteLength;
else
throw new Error("Invalid data format, must be a string or TypedArray.");
const t = d >> 2, Z = d - t * 4, F = new Uint32Array(l.buffer, 0, t);
let n = 0, s = 0, W = this.h1, V = this.h2;
const Q = 3432918353, i = 461845907, N = Q & Kd, e = i & Kd;
for (let m = 0; m < t; m++)
m & 1 ? (n = F[m], n = n * Q & Wd | n * N & Kd, n = n << 15 | n >>> 17, n = n * i & Wd | n * e & Kd, W ^= n, W = W << 13 | W >>> 19, W = W * 5 + 3864292196) : (s = F[m], s = s * Q & Wd | s * N & Kd, s = s << 15 | s >>> 17, s = s * i & Wd | s * e & Kd, V ^= s, V = V << 13 | V >>> 19, V = V * 5 + 3864292196);
switch (n = 0, Z) {
case 3:
n ^= l[t * 4 + 2] << 16;
case 2:
n ^= l[t * 4 + 1] << 8;
case 1:
n ^= l[t * 4], n = n * Q & Wd | n * N & Kd, n = n << 15 | n >>> 17, n = n * i & Wd | n * e & Kd, t & 1 ? W ^= n : V ^= n;
}
this.h1 = W, this.h2 = V;
}
hexdigest() {
let U = this.h1, l = this.h2;
return U ^= l >>> 1, U = U * 3981806797 & Wd | U * 36045 & Kd, l = l * 4283543511 & Wd | ((l << 16 | U >>> 16) * 2950163797 & Wd) >>> 16, U ^= l >>> 1, U = U * 444984403 & Wd | U * 60499 & Kd, l = l * 3301882366 & Wd | ((l << 16 | U >>> 16) * 3120437893 & Wd) >>> 16, U ^= l >>> 1, (U >>> 0).toString(16).padStart(8, "0") + (l >>> 0).toString(16).padStart(8, "0");
}
}
const di = Object.freeze({
map: null,
hash: "",
transfer: void 0
});
var CF, wF, tU, xV, Le;
class kR {
constructor() {
b(this, xV);
b(this, CF, !1);
b(this, wF, null);
b(this, tU, /* @__PURE__ */ new Map());
this.onSetModified = null, this.onResetModified = null, this.onAnnotationEditor = null;
}
getValue(U, l) {
const d = c(this, tU).get(U);
return d === void 0 ? l : Object.assign(l, d);
}
getRawValue(U) {
return c(this, tU).get(U);
}
remove(U) {
if (c(this, tU).delete(U), c(this, tU).size === 0 && this.resetModified(), typeof this.onAnnotationEditor == "function") {
for (const l of c(this, tU).values())
if (l instanceof kl)
return;
this.onAnnotationEditor(null);
}
}
setValue(U, l) {
const d = c(this, tU).get(U);
let t = !1;
if (d !== void 0)
for (const [Z, F] of Object.entries(l))
d[Z] !== F && (t = !0, d[Z] = F);
else
t = !0, c(this, tU).set(U, l);
t && h(this, xV, Le).call(this), l instanceof kl && typeof this.onAnnotationEditor == "function" && this.onAnnotationEditor(l.constructor._type);
}
has(U) {
return c(this, tU).has(U);
}
getAll() {
return c(this, tU).size > 0 ? pR(c(this, tU)) : null;
}
setAll(U) {
for (const [l, d] of Object.entries(U))
this.setValue(l, d);
}
get size() {
return c(this, tU).size;
}
resetModified() {
c(this, CF) && (R(this, CF, !1), typeof this.onResetModified == "function" && this.onResetModified());
}
get print() {
return new ke(this);
}
get serializable() {
if (c(this, tU).size === 0)
return di;
const U = /* @__PURE__ */ new Map(), l = new ze(), d = [], t = /* @__PURE__ */ Object.create(null);
let Z = !1;
for (const [F, n] of c(this, tU)) {
const s = n instanceof kl ? n.serialize(!1, t) : n;
s && (U.set(F, s), l.update(`${F}:${JSON.stringify(s)}`), Z || (Z = !!s.bitmap));
}
if (Z)
for (const F of U.values())
F.bitmap && d.push(F.bitmap);
return U.size > 0 ? {
map: U,
hash: l.hexdigest(),
transfer: d
} : di;
}
get editorStats() {
let U = null;
const l = /* @__PURE__ */ new Map();
for (const d of c(this, tU).values()) {
if (!(d instanceof kl))
continue;
const t = d.telemetryFinalData;
if (!t)
continue;
const {
type: Z
} = t;
l.has(Z) || l.set(Z, Object.getPrototypeOf(d).constructor), U || (U = /* @__PURE__ */ Object.create(null));
const F = U[Z] || (U[Z] = /* @__PURE__ */ new Map());
for (const [n, s] of Object.entries(t)) {
if (n === "type")
continue;
let W = F.get(n);
W || (W = /* @__PURE__ */ new Map(), F.set(n, W));
const V = W.get(s) ?? 0;
W.set(s, V + 1);
}
}
for (const [d, t] of l)
U[d] = t.computeTelemetryFinalData(U[d]);
return U;
}
resetModifiedIds() {
R(this, wF, null);
}
get modifiedIds() {
if (c(this, wF))
return c(this, wF);
const U = [];
for (const l of c(this, tU).values())
!(l instanceof kl) || !l.annotationElementId || !l.serialize() || U.push(l.annotationElementId);
return R(this, wF, {
ids: new Set(U),
hash: U.join(",")
});
}
}
CF = new WeakMap(), wF = new WeakMap(), tU = new WeakMap(), xV = new WeakSet(), Le = function() {
c(this, CF) || (R(this, CF, !0), typeof this.onSetModified == "function" && this.onSetModified());
};
var Hs;
class ke extends kR {
constructor(l) {
super();
b(this, Hs);
const {
map: d,
hash: t,
transfer: Z
} = l.serializable, F = structuredClone(d, Z ? {
transfer: Z
} : null);
R(this, Hs, {
map: F,
hash: t,
transfer: Z
});
}
get print() {
ul("Should not call PrintAnnotationStorage.print");
}
get serializable() {
return c(this, Hs);
}
get modifiedIds() {
return Wl(this, "modifiedIds", {
ids: /* @__PURE__ */ new Set(),
hash: ""
});
}
}
Hs = new WeakMap();
var Mc;
class pm {
constructor({
ownerDocument: U = globalThis.document,
styleElement: l = null
}) {
b(this, Mc, /* @__PURE__ */ new Set());
this._document = U, this.nativeFontFaces = /* @__PURE__ */ new Set(), this.styleElement = null, this.loadingRequests = [], this.loadTestFontId = 0;
}
addNativeFontFace(U) {
this.nativeFontFaces.add(U), this._document.fonts.add(U);
}
removeNativeFontFace(U) {
this.nativeFontFaces.delete(U), this._document.fonts.delete(U);
}
insertRule(U) {
this.styleElement || (this.styleElement = this._document.createElement("style"), this._document.documentElement.getElementsByTagName("head")[0].append(this.styleElement));
const l = this.styleElement.sheet;
l.insertRule(U, l.cssRules.length);
}
clear() {
for (const U of this.nativeFontFaces)
this._document.fonts.delete(U);
this.nativeFontFaces.clear(), c(this, Mc).clear(), this.styleElement && (this.styleElement.remove(), this.styleElement = null);
}
async loadSystemFont({
systemFontInfo: U,
_inspectFont: l
}) {
if (!(!U || c(this, Mc).has(U.loadedName))) {
if (Kl(!this.disableFontFace, "loadSystemFont shouldn't be called when `disableFontFace` is set."), this.isFontLoadingAPISupported) {
const {
loadedName: d,
src: t,
style: Z
} = U, F = new FontFace(d, t, Z);
this.addNativeFontFace(F);
try {
await F.load(), c(this, Mc).add(d), l == null || l(U);
} catch {
Ul(`Cannot load system font: ${U.baseFontName}, installing it could help to improve PDF rendering.`), this.removeNativeFontFace(F);
}
return;
}
ul("Not implemented: loadSystemFont without the Font Loading API.");
}
}
async bind(U) {
if (U.attached || U.missingFile && !U.systemFontInfo)
return;
if (U.attached = !0, U.systemFontInfo) {
await this.loadSystemFont(U);
return;
}
if (this.isFontLoadingAPISupported) {
const d = U.createNativeFontFace();
if (d) {
this.addNativeFontFace(d);
try {
await d.loaded;
} catch (t) {
throw Ul(`Failed to load font '${d.family}': '${t}'.`), U.disableFontFace = !0, t;
}
}
return;
}
const l = U.createFontFaceRule();
if (l) {
if (this.insertRule(l), this.isSyncFontLoadingSupported)
return;
await new Promise((d) => {
const t = this._queueLoadingCallback(d);
this._prepareFontLoadEvent(U, t);
});
}
}
get isFontLoadingAPISupported() {
var l;
const U = !!((l = this._document) != null && l.fonts);
return Wl(this, "isFontLoadingAPISupported", U);
}
get isSyncFontLoadingSupported() {
let U = !1;
return (XU || typeof navigator < "u" && typeof (navigator == null ? void 0 : navigator.userAgent) == "string" && /Mozilla\/5.0.*?rv:\d+.*? Gecko/.test(navigator.userAgent)) && (U = !0), Wl(this, "isSyncFontLoadingSupported", U);
}
_queueLoadingCallback(U) {
function l() {
for (Kl(!t.done, "completeRequest() cannot be called twice."), t.done = !0; d.length > 0 && d[0].done; ) {
const Z = d.shift();
setTimeout(Z.callback, 0);
}
}
const {
loadingRequests: d
} = this, t = {
done: !1,
complete: l,
callback: U
};
return d.push(t), t;
}
get _loadTestFont() {
const U = atob("T1RUTwALAIAAAwAwQ0ZGIDHtZg4AAAOYAAAAgUZGVE1lkzZwAAAEHAAAABxHREVGABQAFQAABDgAAAAeT1MvMlYNYwkAAAEgAAAAYGNtYXABDQLUAAACNAAAAUJoZWFk/xVFDQAAALwAAAA2aGhlYQdkA+oAAAD0AAAAJGhtdHgD6AAAAAAEWAAAAAZtYXhwAAJQAAAAARgAAAAGbmFtZVjmdH4AAAGAAAAAsXBvc3T/hgAzAAADeAAAACAAAQAAAAEAALZRFsRfDzz1AAsD6AAAAADOBOTLAAAAAM4KHDwAAAAAA+gDIQAAAAgAAgAAAAAAAAABAAADIQAAAFoD6AAAAAAD6AABAAAAAAAAAAAAAAAAAAAAAQAAUAAAAgAAAAQD6AH0AAUAAAKKArwAAACMAooCvAAAAeAAMQECAAACAAYJAAAAAAAAAAAAAQAAAAAAAAAAAAAAAFBmRWQAwAAuAC4DIP84AFoDIQAAAAAAAQAAAAAAAAAAACAAIAABAAAADgCuAAEAAAAAAAAAAQAAAAEAAAAAAAEAAQAAAAEAAAAAAAIAAQAAAAEAAAAAAAMAAQAAAAEAAAAAAAQAAQAAAAEAAAAAAAUAAQAAAAEAAAAAAAYAAQAAAAMAAQQJAAAAAgABAAMAAQQJAAEAAgABAAMAAQQJAAIAAgABAAMAAQQJAAMAAgABAAMAAQQJAAQAAgABAAMAAQQJAAUAAgABAAMAAQQJAAYAAgABWABYAAAAAAAAAwAAAAMAAAAcAAEAAAAAADwAAwABAAAAHAAEACAAAAAEAAQAAQAAAC7//wAAAC7////TAAEAAAAAAAABBgAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAD/gwAyAAAAAQAAAAAAAAAAAAAAAAAAAAABAAQEAAEBAQJYAAEBASH4DwD4GwHEAvgcA/gXBIwMAYuL+nz5tQXkD5j3CBLnEQACAQEBIVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYAAABAQAADwACAQEEE/t3Dov6fAH6fAT+fPp8+nwHDosMCvm1Cvm1DAz6fBQAAAAAAAABAAAAAMmJbzEAAAAAzgTjFQAAAADOBOQpAAEAAAAAAAAADAAUAAQAAAABAAAAAgABAAAAAAAAAAAD6AAAAAAAAA==");
return Wl(this, "_loadTestFont", U);
}
_prepareFontLoadEvent(U, l) {
function d(T, u) {
return T.charCodeAt(u) << 24 | T.charCodeAt(u + 1) << 16 | T.charCodeAt(u + 2) << 8 | T.charCodeAt(u + 3) & 255;
}
function t(T, u, Y, o) {
const B = T.substring(0, u), X = T.substring(u + Y);
return B + o + X;
}
let Z, F;
const n = this._document.createElement("canvas");
n.width = 1, n.height = 1;
const s = n.getContext("2d");
let W = 0;
function V(T, u) {
if (++W > 30) {
Ul("Load test font never loaded."), u();
return;
}
if (s.font = "30px " + T, s.fillText(".", 0, 20), s.getImageData(0, 0, 1, 1).data[3] > 0) {
u();
return;
}
setTimeout(V.bind(null, T, u));
}
const Q = `lt${Date.now()}${this.loadTestFontId++}`;
let i = this._loadTestFont;
i = t(i, 976, Q.length, Q);
const e = 16, m = 1482184792;
let J = d(i, e);
for (Z = 0, F = Q.length - 3; Z < F; Z += 4)
J = J - m + d(Q, Z) | 0;
Z < Q.length && (J = J - m + d(Q + "XXX", Z) | 0), i = t(i, e, 4, Rm(J));
const M = `url(data:font/opentype;base64,${btoa(i)});`, G = `@font-face {font-family:"${Q}";src:${M}}`;
this.insertRule(G);
const S = this._document.createElement("div");
S.style.visibility = "hidden", S.style.width = S.style.height = "10px", S.style.position = "absolute", S.style.top = S.style.left = "0px";
for (const T of [U.loadedName, Q]) {
const u = this._document.createElement("span");
u.textContent = "Hi", u.style.fontFamily = T, S.append(u);
}
this._document.body.append(S), V(Q, () => {
S.remove(), l.complete();
});
}
}
Mc = new WeakMap();
class Bm {
constructor(U, {
disableFontFace: l = !1,
fontExtraProperties: d = !1,
inspectFont: t = null
}) {
this.compiledGlyphs = /* @__PURE__ */ Object.create(null);
for (const Z in U)
this[Z] = U[Z];
this.disableFontFace = l === !0, this.fontExtraProperties = d === !0, this._inspectFont = t;
}
createNativeFontFace() {
var l;
if (!this.data || this.disableFontFace)
return null;
let U;
if (!this.cssFontInfo)
U = new FontFace(this.loadedName, this.data, {});
else {
const d = {
weight: this.cssFontInfo.fontWeight
};
this.cssFontInfo.italicAngle && (d.style = `oblique ${this.cssFontInfo.italicAngle}deg`), U = new FontFace(this.cssFontInfo.fontFamily, this.data, d);
}
return (l = this._inspectFont) == null || l.call(this, this), U;
}
createFontFaceRule() {
var d;
if (!this.data || this.disableFontFace)
return null;
const U = `url(data:${this.mimetype};base64,${Mm(this.data)});`;
let l;
if (!this.cssFontInfo)
l = `@font-face {font-family:"${this.loadedName}";src:${U}}`;
else {
let t = `font-weight: ${this.cssFontInfo.fontWeight};`;
this.cssFontInfo.italicAngle && (t += `font-style: oblique ${this.cssFontInfo.italicAngle}deg;`), l = `@font-face {font-family:"${this.cssFontInfo.fontFamily}";${t}src:${U}}`;
}
return (d = this._inspectFont) == null || d.call(this, this, U), l;
}
getPathGenerator(U, l) {
if (this.compiledGlyphs[l] !== void 0)
return this.compiledGlyphs[l];
const d = this.loadedName + "_path_" + l;
let t;
try {
t = U.get(d);
} catch (F) {
Ul(`getPathGenerator - ignoring character: "${F}".`);
}
const Z = new Path2D(t || "");
return this.fontExtraProperties || U.delete(d), this.compiledGlyphs[l] = Z;
}
}
const XW = {
DATA: 1,
ERROR: 2
}, gl = {
CANCEL: 1,
CANCEL_COMPLETE: 2,
CLOSE: 3,
ENQUEUE: 4,
ERROR: 5,
PULL: 6,
PULL_COMPLETE: 7,
START_COMPLETE: 8
};
function lN() {
}
function EU(a) {
if (a instanceof WF || a instanceof IQ || a instanceof Ns || a instanceof AR || a instanceof XV || a instanceof eQ)
return a;
switch (a instanceof Error || typeof a == "object" && a !== null || ul('wrapReason: Expected "reason" to be a (possibly cloned) Error.'), a.name) {
case "AbortException":
return new WF(a.message);
case "InvalidPDFException":
return new IQ(a.message);
case "MissingPDFException":
return new Ns(a.message);
case "PasswordException":
return new AR(a.message, a.code);
case "UnexpectedResponseException":
return new XV(a.message, a.status);
case "UnknownErrorException":
return new eQ(a.message, a.details);
}
return new eQ(a.message, a.toString());
}
var Jc, Gd, Ie, De, Ee, HW;
class Hn {
constructor(U, l, d) {
b(this, Gd);
b(this, Jc, new AbortController());
this.sourceName = U, this.targetName = l, this.comObj = d, this.callbackId = 1, this.streamId = 1, this.streamSinks = /* @__PURE__ */ Object.create(null), this.streamControllers = /* @__PURE__ */ Object.create(null), this.callbackCapabilities = /* @__PURE__ */ Object.create(null), this.actionHandler = /* @__PURE__ */ Object.create(null), d.addEventListener("message", h(this, Gd, Ie).bind(this), {
signal: c(this, Jc).signal
});
}
on(U, l) {
const d = this.actionHandler;
if (d[U])
throw new Error(`There is already an actionName called "${U}"`);
d[U] = l;
}
send(U, l, d) {
this.comObj.postMessage({
sourceName: this.sourceName,
targetName: this.targetName,
action: U,
data: l
}, d);
}
sendWithPromise(U, l, d) {
const t = this.callbackId++, Z = Promise.withResolvers();
this.callbackCapabilities[t] = Z;
try {
this.comObj.postMessage({
sourceName: this.sourceName,
targetName: this.targetName,
action: U,
callbackId: t,
data: l
}, d);
} catch (F) {
Z.reject(F);
}
return Z.promise;
}
sendWithStream(U, l, d, t) {
const Z = this.streamId++, F = this.sourceName, n = this.targetName, s = this.comObj;
return new ReadableStream({
start: (W) => {
const V = Promise.withResolvers();
return this.streamControllers[Z] = {
controller: W,
startCall: V,
pullCall: null,
cancelCall: null,
isClosed: !1
}, s.postMessage({
sourceName: F,
targetName: n,
action: U,
streamId: Z,
data: l,
desiredSize: W.desiredSize
}, t), V.promise;
},
pull: (W) => {
const V = Promise.withResolvers();
return this.streamControllers[Z].pullCall = V, s.postMessage({
sourceName: F,
targetName: n,
stream: gl.PULL,
streamId: Z,
desiredSize: W.desiredSize
}), V.promise;
},
cancel: (W) => {
Kl(W instanceof Error, "cancel must have a valid reason");
const V = Promise.withResolvers();
return this.streamControllers[Z].cancelCall = V, this.streamControllers[Z].isClosed = !0, s.postMessage({
sourceName: F,
targetName: n,
stream: gl.CANCEL,
streamId: Z,
reason: EU(W)
}), V.promise;
}
}, d);
}
destroy() {
var U;
(U = c(this, Jc)) == null || U.abort(), R(this, Jc, null);
}
}
Jc = new WeakMap(), Gd = new WeakSet(), Ie = function({
data: U
}) {
if (U.targetName !== this.sourceName)
return;
if (U.stream) {
h(this, Gd, Ee).call(this, U);
return;
}
if (U.callback) {
const d = U.callbackId, t = this.callbackCapabilities[d];
if (!t)
throw new Error(`Cannot resolve callback ${d}`);
if (delete this.callbackCapabilities[d], U.callback === XW.DATA)
t.resolve(U.data);
else if (U.callback === XW.ERROR)
t.reject(EU(U.reason));
else
throw new Error("Unexpected callback case");
return;
}
const l = this.actionHandler[U.action];
if (!l)
throw new Error(`Unknown action from worker: ${U.action}`);
if (U.callbackId) {
const d = this.sourceName, t = U.sourceName, Z = this.comObj;
Promise.try(l, U.data).then(function(F) {
Z.postMessage({
sourceName: d,
targetName: t,
callback: XW.DATA,
callbackId: U.callbackId,
data: F
});
}, function(F) {
Z.postMessage({
sourceName: d,
targetName: t,
callback: XW.ERROR,
callbackId: U.callbackId,
reason: EU(F)
});
});
return;
}
if (U.streamId) {
h(this, Gd, De).call(this, U);
return;
}
l(U.data);
}, De = function(U) {
const l = U.streamId, d = this.sourceName, t = U.sourceName, Z = this.comObj, F = this, n = this.actionHandler[U.action], s = {
enqueue(W, V = 1, Q) {
if (this.isCancelled)
return;
const i = this.desiredSize;
this.desiredSize -= V, i > 0 && this.desiredSize <= 0 && (this.sinkCapability = Promise.withResolvers(), this.ready = this.sinkCapability.promise), Z.postMessage({
sourceName: d,
targetName: t,
stream: gl.ENQUEUE,
streamId: l,
chunk: W
}, Q);
},
close() {
this.isCancelled || (this.isCancelled = !0, Z.postMessage({
sourceName: d,
targetName: t,
stream: gl.CLOSE,
streamId: l
}), delete F.streamSinks[l]);
},
error(W) {
Kl(W instanceof Error, "error must have a valid reason"), !this.isCancelled && (this.isCancelled = !0, Z.postMessage({
sourceName: d,
targetName: t,
stream: gl.ERROR,
streamId: l,
reason: EU(W)
}));
},
sinkCapability: Promise.withResolvers(),
onPull: null,
onCancel: null,
isCancelled: !1,
desiredSize: U.desiredSize,
ready: null
};
s.sinkCapability.resolve(), s.ready = s.sinkCapability.promise, this.streamSinks[l] = s, Promise.try(n, U.data, s).then(function() {
Z.postMessage({
sourceName: d,
targetName: t,
stream: gl.START_COMPLETE,
streamId: l,
success: !0
});
}, function(W) {
Z.postMessage({
sourceName: d,
targetName: t,
stream: gl.START_COMPLETE,
streamId: l,
reason: EU(W)
});
});
}, Ee = function(U) {
const l = U.streamId, d = this.sourceName, t = U.sourceName, Z = this.comObj, F = this.streamControllers[l], n = this.streamSinks[l];
switch (U.stream) {
case gl.START_COMPLETE:
U.success ? F.startCall.resolve() : F.startCall.reject(EU(U.reason));
break;
case gl.PULL_COMPLETE:
U.success ? F.pullCall.resolve() : F.pullCall.reject(EU(U.reason));
break;
case gl.PULL:
if (!n) {
Z.postMessage({
sourceName: d,
targetName: t,
stream: gl.PULL_COMPLETE,
streamId: l,
success: !0
});
break;
}
n.desiredSize <= 0 && U.desiredSize > 0 && n.sinkCapability.resolve(), n.desiredSize = U.desiredSize, Promise.try(n.onPull || lN).then(function() {
Z.postMessage({
sourceName: d,
targetName: t,
stream: gl.PULL_COMPLETE,
streamId: l,
success: !0
});
}, function(W) {
Z.postMessage({
sourceName: d,
targetName: t,
stream: gl.PULL_COMPLETE,
streamId: l,
reason: EU(W)
});
});
break;
case gl.ENQUEUE:
if (Kl(F, "enqueue should have stream controller"), F.isClosed)
break;
F.controller.enqueue(U.chunk);
break;
case gl.CLOSE:
if (Kl(F, "close should have stream controller"), F.isClosed)
break;
F.isClosed = !0, F.controller.close(), h(this, Gd, HW).call(this, F, l);
break;
case gl.ERROR:
Kl(F, "error should have stream controller"), F.controller.error(EU(U.reason)), h(this, Gd, HW).call(this, F, l);
break;
case gl.CANCEL_COMPLETE:
U.success ? F.cancelCall.resolve() : F.cancelCall.reject(EU(U.reason)), h(this, Gd, HW).call(this, F, l);
break;
case gl.CANCEL:
if (!n)
break;
const s = EU(U.reason);
Promise.try(n.onCancel || lN, s).then(function() {
Z.postMessage({
sourceName: d,
targetName: t,
stream: gl.CANCEL_COMPLETE,
streamId: l,
success: !0
});
}, function(W) {
Z.postMessage({
sourceName: d,
targetName: t,
stream: gl.CANCEL_COMPLETE,
streamId: l,
reason: EU(W)
});
}), n.sinkCapability.reject(s), n.isCancelled = !0, delete this.streamSinks[l];
break;
default:
throw new Error("Unexpected stream case");
}
}, HW = async function(U, l) {
var d, t, Z;
await Promise.allSettled([(d = U.startCall) == null ? void 0 : d.promise, (t = U.pullCall) == null ? void 0 : t.promise, (Z = U.cancelCall) == null ? void 0 : Z.promise]), delete this.streamControllers[l];
};
var vs;
class re {
constructor({
enableHWA: U = !1
}) {
b(this, vs, !1);
R(this, vs, U);
}
create(U, l) {
if (U <= 0 || l <= 0)
throw new Error("Invalid canvas size");
const d = this._createCanvas(U, l);
return {
canvas: d,
context: d.getContext("2d", {
willReadFrequently: !c(this, vs)
})
};
}
reset(U, l, d) {
if (!U.canvas)
throw new Error("Canvas is not specified");
if (l <= 0 || d <= 0)
throw new Error("Invalid canvas size");
U.canvas.width = l, U.canvas.height = d;
}
destroy(U) {
if (!U.canvas)
throw new Error("Canvas is not specified");
U.canvas.width = 0, U.canvas.height = 0, U.canvas = null, U.context = null;
}
_createCanvas(U, l) {
ul("Abstract method `_createCanvas` called.");
}
}
vs = new WeakMap();
class ym extends re {
constructor({
ownerDocument: U = globalThis.document,
enableHWA: l = !1
}) {
super({
enableHWA: l
}), this._document = U;
}
_createCanvas(U, l) {
const d = this._document.createElement("canvas");
return d.width = U, d.height = l, d;
}
}
class Ce {
constructor({
baseUrl: U = null,
isCompressed: l = !0
}) {
this.baseUrl = U, this.isCompressed = l;
}
async fetch({
name: U
}) {
if (!this.baseUrl)
throw new Error("Ensure that the `cMapUrl` and `cMapPacked` API parameters are provided.");
if (!U)
throw new Error("CMap name must be specified.");
const l = this.baseUrl + U + (this.isCompressed ? ".bcmap" : "");
return this._fetch(l).then((d) => ({
cMapData: d,
isCompressed: this.isCompressed
})).catch((d) => {
throw new Error(`Unable to load ${this.isCompressed ? "binary " : ""}CMap at: ${l}`);
});
}
async _fetch(U) {
ul("Abstract method `_fetch` called.");
}
}
class we extends Ce {
async _fetch(U) {
const l = await nQ(U, this.isCompressed ? "arraybuffer" : "text");
return l instanceof ArrayBuffer ? new Uint8Array(l) : cQ(l);
}
}
il(4520);
class xe {
addFilter(U) {
return "none";
}
addHCMFilter(U, l) {
return "none";
}
addAlphaFilter(U) {
return "none";
}
addLuminosityFilter(U) {
return "none";
}
addHighlightHCMFilter(U, l, d, t, Z) {
return "none";
}
destroy(U = !1) {
}
}
var xF, Gc, kt, It, MU, jF, OF, j, bU, vn, H0, vW, v0, je, ti, P0, Pn, fn, Zi, An;
class zm extends xe {
constructor({
docId: l,
ownerDocument: d = globalThis.document
}) {
super();
b(this, j);
b(this, xF);
b(this, Gc);
b(this, kt);
b(this, It);
b(this, MU);
b(this, jF);
b(this, OF, 0);
R(this, It, l), R(this, MU, d);
}
addFilter(l) {
if (!l)
return "none";
let d = c(this, j, bU).get(l);
if (d)
return d;
const [t, Z, F] = h(this, j, vW).call(this, l), n = l.length === 1 ? t : `${t}${Z}${F}`;
if (d = c(this, j, bU).get(n), d)
return c(this, j, bU).set(l, d), d;
const s = `g_${c(this, It)}_transfer_map_${eU(this, OF)._++}`, W = h(this, j, v0).call(this, s);
c(this, j, bU).set(l, W), c(this, j, bU).set(n, W);
const V = h(this, j, P0).call(this, s);
return h(this, j, fn).call(this, t, Z, F, V), W;
}
addHCMFilter(l, d) {
var e;
const t = `${l}-${d}`, Z = "base";
let F = c(this, j, vn).get(Z);
if ((F == null ? void 0 : F.key) === t || (F ? ((e = F.filter) == null || e.remove(), F.key = t, F.url = "none", F.filter = null) : (F = {
key: t,
url: "none",
filter: null
}, c(this, j, vn).set(Z, F)), !l || !d))
return F.url;
const n = h(this, j, An).call(this, l);
l = v.makeHexColor(...n);
const s = h(this, j, An).call(this, d);
if (d = v.makeHexColor(...s), c(this, j, H0).style.color = "", l === "#000000" && d === "#ffffff" || l === d)
return F.url;
const W = new Array(256);
for (let m = 0; m <= 255; m++) {
const J = m / 255;
W[m] = J <= 0.03928 ? J / 12.92 : ((J + 0.055) / 1.055) ** 2.4;
}
const V = W.join(","), Q = `g_${c(this, It)}_hcm_filter`, i = F.filter = h(this, j, P0).call(this, Q);
h(this, j, fn).call(this, V, V, V, i), h(this, j, ti).call(this, i);
const N = (m, J) => {
const M = n[m] / 255, G = s[m] / 255, S = new Array(J + 1);
for (let T = 0; T <= J; T++)
S[T] = M + T / J * (G - M);
return S.join(",");
};
return h(this, j, fn).call(this, N(0, 5), N(1, 5), N(2, 5), i), F.url = h(this, j, v0).call(this, Q), F.url;
}
addAlphaFilter(l) {
let d = c(this, j, bU).get(l);
if (d)
return d;
const [t] = h(this, j, vW).call(this, [l]), Z = `alpha_${t}`;
if (d = c(this, j, bU).get(Z), d)
return c(this, j, bU).set(l, d), d;
const F = `g_${c(this, It)}_alpha_map_${eU(this, OF)._++}`, n = h(this, j, v0).call(this, F);
c(this, j, bU).set(l, n), c(this, j, bU).set(Z, n);
const s = h(this, j, P0).call(this, F);
return h(this, j, Zi).call(this, t, s), n;
}
addLuminosityFilter(l) {
let d = c(this, j, bU).get(l || "luminosity");
if (d)
return d;
let t, Z;
if (l ? ([t] = h(this, j, vW).call(this, [l]), Z = `luminosity_${t}`) : Z = "luminosity", d = c(this, j, bU).get(Z), d)
return c(this, j, bU).set(l, d), d;
const F = `g_${c(this, It)}_luminosity_map_${eU(this, OF)._++}`, n = h(this, j, v0).call(this, F);
c(this, j, bU).set(l, n), c(this, j, bU).set(Z, n);
const s = h(this, j, P0).call(this, F);
return h(this, j, je).call(this, s), l && h(this, j, Zi).call(this, t, s), n;
}
addHighlightHCMFilter(l, d, t, Z, F) {
var G;
const n = `${d}-${t}-${Z}-${F}`;
let s = c(this, j, vn).get(l);
if ((s == null ? void 0 : s.key) === n || (s ? ((G = s.filter) == null || G.remove(), s.key = n, s.url = "none", s.filter = null) : (s = {
key: n,
url: "none",
filter: null
}, c(this, j, vn).set(l, s)), !d || !t))
return s.url;
const [W, V] = [d, t].map(h(this, j, An).bind(this));
let Q = Math.round(0.2126 * W[0] + 0.7152 * W[1] + 0.0722 * W[2]), i = Math.round(0.2126 * V[0] + 0.7152 * V[1] + 0.0722 * V[2]), [N, e] = [Z, F].map(h(this, j, An).bind(this));
i < Q && ([Q, i, N, e] = [i, Q, e, N]), c(this, j, H0).style.color = "";
const m = (S, T, u) => {
const Y = new Array(256), o = (i - Q) / u, B = S / 255, X = (T - S) / (255 * u);
let p = 0;
for (let y = 0; y <= u; y++) {
const r = Math.round(Q + y * o), D = B + y * X;
for (let E = p; E <= r; E++)
Y[E] = D;
p = r + 1;
}
for (let y = p; y < 256; y++)
Y[y] = Y[p - 1];
return Y.join(",");
}, J = `g_${c(this, It)}_hcm_${l}_filter`, M = s.filter = h(this, j, P0).call(this, J);
return h(this, j, ti).call(this, M), h(this, j, fn).call(this, m(N[0], e[0], 5), m(N[1], e[1], 5), m(N[2], e[2], 5), M), s.url = h(this, j, v0).call(this, J), s.url;
}
destroy(l = !1) {
var d, t, Z, F;
l && ((d = c(this, jF)) != null && d.size) || ((t = c(this, kt)) == null || t.parentNode.parentNode.remove(), R(this, kt, null), (Z = c(this, Gc)) == null || Z.clear(), R(this, Gc, null), (F = c(this, jF)) == null || F.clear(), R(this, jF, null), R(this, OF, 0));
}
}
xF = new WeakMap(), Gc = new WeakMap(), kt = new WeakMap(), It = new WeakMap(), MU = new WeakMap(), jF = new WeakMap(), OF = new WeakMap(), j = new WeakSet(), bU = function() {
return c(this, Gc) || R(this, Gc, /* @__PURE__ */ new Map());
}, vn = function() {
return c(this, jF) || R(this, jF, /* @__PURE__ */ new Map());
}, H0 = function() {
if (!c(this, kt)) {
const l = c(this, MU).createElement("div"), {
style: d
} = l;
d.visibility = "hidden", d.contain = "strict", d.width = d.height = 0, d.position = "absolute", d.top = d.left = 0, d.zIndex = -1;
const t = c(this, MU).createElementNS(Mt, "svg");
t.setAttribute("width", 0), t.setAttribute("height", 0), R(this, kt, c(this, MU).createElementNS(Mt, "defs")), l.append(t), t.append(c(this, kt)), c(this, MU).body.append(l);
}
return c(this, kt);
}, vW = function(l) {
if (l.length === 1) {
const W = l[0], V = new Array(256);
for (let i = 0; i < 256; i++)
V[i] = W[i] / 255;
const Q = V.join(",");
return [Q, Q, Q];
}
const [d, t, Z] = l, F = new Array(256), n = new Array(256), s = new Array(256);
for (let W = 0; W < 256; W++)
F[W] = d[W] / 255, n[W] = t[W] / 255, s[W] = Z[W] / 255;
return [F.join(","), n.join(","), s.join(",")];
}, v0 = function(l) {
if (c(this, xF) === void 0) {
R(this, xF, "");
const d = c(this, MU).URL;
d !== c(this, MU).baseURI && (sQ(d) ? Ul('#createUrl: ignore "data:"-URL for performance reasons.') : R(this, xF, d.split("#", 1)[0]));
}
return `url(${c(this, xF)}#${l})`;
}, je = function(l) {
const d = c(this, MU).createElementNS(Mt, "feColorMatrix");
d.setAttribute("type", "matrix"), d.setAttribute("values", "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0.59 0.11 0 0"), l.append(d);
}, ti = function(l) {
const d = c(this, MU).createElementNS(Mt, "feColorMatrix");
d.setAttribute("type", "matrix"), d.setAttribute("values", "0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0.2126 0.7152 0.0722 0 0 0 0 0 1 0"), l.append(d);
}, P0 = function(l) {
const d = c(this, MU).createElementNS(Mt, "filter");
return d.setAttribute("color-interpolation-filters", "sRGB"), d.setAttribute("id", l), c(this, j, H0).append(d), d;
}, Pn = function(l, d, t) {
const Z = c(this, MU).createElementNS(Mt, d);
Z.setAttribute("type", "discrete"), Z.setAttribute("tableValues", t), l.append(Z);
}, fn = function(l, d, t, Z) {
const F = c(this, MU).createElementNS(Mt, "feComponentTransfer");
Z.append(F), h(this, j, Pn).call(this, F, "feFuncR", l), h(this, j, Pn).call(this, F, "feFuncG", d), h(this, j, Pn).call(this, F, "feFuncB", t);
}, Zi = function(l, d) {
const t = c(this, MU).createElementNS(Mt, "feComponentTransfer");
d.append(t), h(this, j, Pn).call(this, t, "feFuncA", l);
}, An = function(l) {
return c(this, j, H0).style.color = l, LR(getComputedStyle(c(this, j, H0)).getPropertyValue("color"));
};
class Oe {
constructor({
baseUrl: U = null
}) {
this.baseUrl = U;
}
async fetch({
filename: U
}) {
if (!this.baseUrl)
throw new Error("Ensure that the `standardFontDataUrl` API parameter is provided.");
if (!U)
throw new Error("Font filename must be specified.");
const l = `${this.baseUrl}${U}`;
return this._fetch(l).catch((d) => {
throw new Error(`Unable to load font data at: ${l}`);
});
}
async _fetch(U) {
ul("Abstract method `_fetch` called.");
}
}
class ge extends Oe {
async _fetch(U) {
const l = await nQ(U, "arraybuffer");
return new Uint8Array(l);
}
}
if (XU) {
let a;
try {
const U = process.getBuiltinModule("module").createRequire(import.meta.url);
try {
a = U("@napi-rs/canvas");
} catch (l) {
Ul(`Cannot load "@napi-rs/canvas" package: "${l}".`);
}
} catch (U) {
Ul(`Cannot access the \`require\` function: "${U}".`);
}
globalThis.DOMMatrix || (a != null && a.DOMMatrix ? globalThis.DOMMatrix = a.DOMMatrix : Ul("Cannot polyfill `DOMMatrix`, rendering may be broken.")), globalThis.ImageData || (a != null && a.ImageData ? globalThis.ImageData = a.ImageData : Ul("Cannot polyfill `ImageData`, rendering may be broken.")), globalThis.Path2D || (a != null && a.Path2D ? globalThis.Path2D = a.Path2D : Ul("Cannot polyfill `Path2D`, rendering may be broken."));
}
async function Ke(a) {
const l = await process.getBuiltinModule("fs").promises.readFile(a);
return new Uint8Array(l);
}
class Lm extends xe {
}
class km extends re {
_createCanvas(U, l) {
return process.getBuiltinModule("module").createRequire(import.meta.url)("@napi-rs/canvas").createCanvas(U, l);
}
}
class Im extends Ce {
async _fetch(U) {
return Ke(U);
}
}
class Dm extends Oe {
async _fetch(U) {
return Ke(U);
}
}
const TU = {
FILL: "Fill",
STROKE: "Stroke",
SHADING: "Shading"
};
function Fi(a, U) {
if (!U)
return;
const l = U[2] - U[0], d = U[3] - U[1], t = new Path2D();
t.rect(U[0], U[1], l, d), a.clip(t);
}
class IR {
getPattern() {
ul("Abstract method `getPattern` called.");
}
}
class Em extends IR {
constructor(U) {
super(), this._type = U[1], this._bbox = U[2], this._colorStops = U[3], this._p0 = U[4], this._p1 = U[5], this._r0 = U[6], this._r1 = U[7], this.matrix = null;
}
_createGradient(U) {
let l;
this._type === "axial" ? l = U.createLinearGradient(this._p0[0], this._p0[1], this._p1[0], this._p1[1]) : this._type === "radial" && (l = U.createRadialGradient(this._p0[0], this._p0[1], this._r0, this._p1[0], this._p1[1], this._r1));
for (const d of this._colorStops)
l.addColorStop(d[0], d[1]);
return l;
}
getPattern(U, l, d, t) {
let Z;
if (t === TU.STROKE || t === TU.FILL) {
const F = l.current.getClippedPathBoundingBox(t, Bl(U)) || [0, 0, 0, 0], n = Math.ceil(F[2] - F[0]) || 1, s = Math.ceil(F[3] - F[1]) || 1, W = l.cachedCanvases.getCanvas("pattern", n, s), V = W.context;
V.clearRect(0, 0, V.canvas.width, V.canvas.height), V.beginPath(), V.rect(0, 0, V.canvas.width, V.canvas.height), V.translate(-F[0], -F[1]), d = v.transform(d, [1, 0, 0, 1, F[0], F[1]]), V.transform(...l.baseTransform), this.matrix && V.transform(...this.matrix), Fi(V, this._bbox), V.fillStyle = this._createGradient(V), V.fill(), Z = U.createPattern(W.canvas, "no-repeat");
const Q = new DOMMatrix(d);
Z.setTransform(Q);
} else
Fi(U, this._bbox), Z = this._createGradient(U);
return Z;
}
}
function mQ(a, U, l, d, t, Z, F, n) {
const s = U.coords, W = U.colors, V = a.data, Q = a.width * 4;
let i;
s[l + 1] > s[d + 1] && (i = l, l = d, d = i, i = Z, Z = F, F = i), s[d + 1] > s[t + 1] && (i = d, d = t, t = i, i = F, F = n, n = i), s[l + 1] > s[d + 1] && (i = l, l = d, d = i, i = Z, Z = F, F = i);
const N = (s[l] + U.offsetX) * U.scaleX, e = (s[l + 1] + U.offsetY) * U.scaleY, m = (s[d] + U.offsetX) * U.scaleX, J = (s[d + 1] + U.offsetY) * U.scaleY, M = (s[t] + U.offsetX) * U.scaleX, G = (s[t + 1] + U.offsetY) * U.scaleY;
if (e >= G)
return;
const S = W[Z], T = W[Z + 1], u = W[Z + 2], Y = W[F], o = W[F + 1], B = W[F + 2], X = W[n], p = W[n + 1], y = W[n + 2], r = Math.round(e), D = Math.round(G);
let E, P, k, I, q, sl, Gl, pl;
for (let ml = r; ml <= D; ml++) {
if (ml < J) {
const L = ml < e ? 0 : (e - ml) / (e - J);
E = N - (N - m) * L, P = S - (S - Y) * L, k = T - (T - o) * L, I = u - (u - B) * L;
} else {
let L;
ml > G ? L = 1 : J === G ? L = 0 : L = (J - ml) / (J - G), E = m - (m - M) * L, P = Y - (Y - X) * L, k = o - (o - p) * L, I = B - (B - y) * L;
}
let Sl;
ml < e ? Sl = 0 : ml > G ? Sl = 1 : Sl = (e - ml) / (e - G), q = N - (N - M) * Sl, sl = S - (S - X) * Sl, Gl = T - (T - p) * Sl, pl = u - (u - y) * Sl;
const xd = Math.round(Math.min(E, q)), jd = Math.round(Math.max(E, q));
let x = Q * ml + xd * 4;
for (let L = xd; L <= jd; L++)
Sl = (E - L) / (E - q), Sl < 0 ? Sl = 0 : Sl > 1 && (Sl = 1), V[x++] = P - (P - sl) * Sl | 0, V[x++] = k - (k - Gl) * Sl | 0, V[x++] = I - (I - pl) * Sl | 0, V[x++] = 255;
}
}
function rm(a, U, l) {
const d = U.coords, t = U.colors;
let Z, F;
switch (U.type) {
case "lattice":
const n = U.verticesPerRow, s = Math.floor(d.length / n) - 1, W = n - 1;
for (Z = 0; Z < s; Z++) {
let V = Z * n;
for (let Q = 0; Q < W; Q++, V++)
mQ(a, l, d[V], d[V + 1], d[V + n], t[V], t[V + 1], t[V + n]), mQ(a, l, d[V + n + 1], d[V + 1], d[V + n], t[V + n + 1], t[V + 1], t[V + n]);
}
break;
case "triangles":
for (Z = 0, F = d.length; Z < F; Z += 3)
mQ(a, l, d[Z], d[Z + 1], d[Z + 2], t[Z], t[Z + 1], t[Z + 2]);
break;
default:
throw new Error("illegal figure");
}
}
class Cm extends IR {
constructor(U) {
super(), this._coords = U[2], this._colors = U[3], this._figures = U[4], this._bounds = U[5], this._bbox = U[7], this._background = U[8], this.matrix = null;
}
_createMeshCanvas(U, l, d) {
const n = Math.floor(this._bounds[0]), s = Math.floor(this._bounds[1]), W = Math.ceil(this._bounds[2]) - n, V = Math.ceil(this._bounds[3]) - s, Q = Math.min(Math.ceil(Math.abs(W * U[0] * 1.1)), 3e3), i = Math.min(Math.ceil(Math.abs(V * U[1] * 1.1)), 3e3), N = W / Q, e = V / i, m = {
coords: this._coords,
colors: this._colors,
offsetX: -n,
offsetY: -s,
scaleX: 1 / N,
scaleY: 1 / e
}, J = Q + 2 * 2, M = i + 2 * 2, G = d.getCanvas("mesh", J, M), S = G.context, T = S.createImageData(Q, i);
if (l) {
const Y = T.data;
for (let o = 0, B = Y.length; o < B; o += 4)
Y[o] = l[0], Y[o + 1] = l[1], Y[o + 2] = l[2], Y[o + 3] = 255;
}
for (const Y of this._figures)
rm(T, Y, m);
return S.putImageData(T, 2, 2), {
canvas: G.canvas,
offsetX: n - 2 * N,
offsetY: s - 2 * e,
scaleX: N,
scaleY: e
};
}
getPattern(U, l, d, t) {
Fi(U, this._bbox);
let Z;
if (t === TU.SHADING)
Z = v.singularValueDecompose2dScale(Bl(U));
else if (Z = v.singularValueDecompose2dScale(l.baseTransform), this.matrix) {
const n = v.singularValueDecompose2dScale(this.matrix);
Z = [Z[0] * n[0], Z[1] * n[1]];
}
const F = this._createMeshCanvas(Z, t === TU.SHADING ? null : this._background, l.cachedCanvases);
return t !== TU.SHADING && (U.setTransform(...l.baseTransform), this.matrix && U.transform(...this.matrix)), U.translate(F.offsetX, F.offsetY), U.scale(F.scaleX, F.scaleY), U.createPattern(F.canvas, "no-repeat");
}
}
class wm extends IR {
getPattern() {
return "hotpink";
}
}
function xm(a) {
switch (a[0]) {
case "RadialAxial":
return new Em(a);
case "Mesh":
return new Cm(a);
case "Dummy":
return new wm();
}
throw new Error(`Unknown IR type: ${a[0]}`);
}
const UN = {
COLORED: 1,
UNCOLORED: 2
}, jV = class jV {
constructor(U, l, d, t, Z) {
this.operatorList = U[2], this.matrix = U[3], this.bbox = U[4], this.xstep = U[5], this.ystep = U[6], this.paintType = U[7], this.tilingType = U[8], this.color = l, this.ctx = d, this.canvasGraphicsFactory = t, this.baseTransform = Z;
}
createPatternCanvas(U) {
const {
bbox: l,
operatorList: d,
paintType: t,
tilingType: Z,
color: F,
canvasGraphicsFactory: n
} = this;
let {
xstep: s,
ystep: W
} = this;
s = Math.abs(s), W = Math.abs(W), FQ("TilingType: " + Z);
const V = l[0], Q = l[1], i = l[2], N = l[3], e = i - V, m = N - Q, J = v.singularValueDecompose2dScale(this.matrix), M = v.singularValueDecompose2dScale(this.baseTransform), G = J[0] * M[0], S = J[1] * M[1];
let T = e, u = m, Y = !1, o = !1;
const B = Math.ceil(s * G), X = Math.ceil(W * S), p = Math.ceil(e * G), y = Math.ceil(m * S);
B >= p ? T = s : Y = !0, X >= y ? u = W : o = !0;
const r = this.getSizeAndScale(T, this.ctx.canvas.width, G), D = this.getSizeAndScale(u, this.ctx.canvas.height, S), E = U.cachedCanvases.getCanvas("pattern", r.size, D.size), P = E.context, k = n.createCanvasGraphics(P);
if (k.groupLevel = U.groupLevel, this.setFillAndStrokeStyleToContext(k, t, F), P.translate(-r.scale * V, -D.scale * Q), k.transform(r.scale, 0, 0, D.scale, 0, 0), P.save(), this.clipBbox(k, V, Q, i, N), k.baseTransform = Bl(k.ctx), k.executeOperatorList(d), k.endDrawing(), P.restore(), Y || o) {
const I = E.canvas;
Y && (T = s), o && (u = W);
const q = this.getSizeAndScale(T, this.ctx.canvas.width, G), sl = this.getSizeAndScale(u, this.ctx.canvas.height, S), Gl = q.size, pl = sl.size, ml = U.cachedCanvases.getCanvas("pattern-workaround", Gl, pl), Sl = ml.context, xd = Y ? Math.floor(e / s) : 0, jd = o ? Math.floor(m / W) : 0;
for (let x = 0; x <= xd; x++)
for (let L = 0; L <= jd; L++)
Sl.drawImage(I, Gl * x, pl * L, Gl, pl, 0, 0, Gl, pl);
return {
canvas: ml.canvas,
scaleX: q.scale,
scaleY: sl.scale,
offsetX: V,
offsetY: Q
};
}
return {
canvas: E.canvas,
scaleX: r.scale,
scaleY: D.scale,
offsetX: V,
offsetY: Q
};
}
getSizeAndScale(U, l, d) {
const t = Math.max(jV.MAX_PATTERN_SIZE, l);
let Z = Math.ceil(U * d);
return Z >= t ? Z = t : d = Z / U, {
scale: d,
size: Z
};
}
clipBbox(U, l, d, t, Z) {
const F = t - l, n = Z - d;
U.ctx.rect(l, d, F, n), U.current.updateRectMinMax(Bl(U.ctx), [l, d, t, Z]), U.clip(), U.endPath();
}
setFillAndStrokeStyleToContext(U, l, d) {
const t = U.ctx, Z = U.current;
switch (l) {
case UN.COLORED:
const F = this.ctx;
t.fillStyle = F.fillStyle, t.strokeStyle = F.strokeStyle, Z.fillColor = F.fillStyle, Z.strokeColor = F.strokeStyle;
break;
case UN.UNCOLORED:
const n = v.makeHexColor(d[0], d[1], d[2]);
t.fillStyle = n, t.strokeStyle = n, Z.fillColor = n, Z.strokeColor = n;
break;
default:
throw new im(`Unsupported paint type: ${l}`);
}
}
getPattern(U, l, d, t) {
let Z = d;
t !== TU.SHADING && (Z = v.transform(Z, l.baseTransform), this.matrix && (Z = v.transform(Z, this.matrix)));
const F = this.createPatternCanvas(l);
let n = new DOMMatrix(Z);
n = n.translate(F.offsetX, F.offsetY), n = n.scale(1 / F.scaleX, 1 / F.scaleY);
const s = U.createPattern(F.canvas, "repeat");
return s.setTransform(n), s;
}
};
f(jV, "MAX_PATTERN_SIZE", 3e3);
let ci = jV;
function jm({
src: a,
srcPos: U = 0,
dest: l,
width: d,
height: t,
nonBlackColor: Z = 4294967295,
inverseDecode: F = !1
}) {
const n = LU.isLittleEndian ? 4278190080 : 255, [s, W] = F ? [Z, n] : [n, Z], V = d >> 3, Q = d & 7, i = a.length;
l = new Uint32Array(l.buffer);
let N = 0;
for (let e = 0; e < t; e++) {
for (const J = U + V; U < J; U++) {
const M = U < i ? a[U] : 255;
l[N++] = M & 128 ? W : s, l[N++] = M & 64 ? W : s, l[N++] = M & 32 ? W : s, l[N++] = M & 16 ? W : s, l[N++] = M & 8 ? W : s, l[N++] = M & 4 ? W : s, l[N++] = M & 2 ? W : s, l[N++] = M & 1 ? W : s;
}
if (Q === 0)
continue;
const m = U < i ? a[U++] : 255;
for (let J = 0; J < Q; J++)
l[N++] = m & 1 << 7 - J ? W : s;
}
return {
srcPos: U,
destPos: N
};
}
const dN = 16, tN = 100, Om = 15, ZN = 10, FN = 1e3, OU = 16;
function gm(a, U) {
if (a._removeMirroring)
throw new Error("Context is already forwarding operations.");
a.__originalSave = a.save, a.__originalRestore = a.restore, a.__originalRotate = a.rotate, a.__originalScale = a.scale, a.__originalTranslate = a.translate, a.__originalTransform = a.transform, a.__originalSetTransform = a.setTransform, a.__originalResetTransform = a.resetTransform, a.__originalClip = a.clip, a.__originalMoveTo = a.moveTo, a.__originalLineTo = a.lineTo, a.__originalBezierCurveTo = a.bezierCurveTo, a.__originalRect = a.rect, a.__originalClosePath = a.closePath, a.__originalBeginPath = a.beginPath, a._removeMirroring = () => {
a.save = a.__originalSave, a.restore = a.__originalRestore, a.rotate = a.__originalRotate, a.scale = a.__originalScale, a.translate = a.__originalTranslate, a.transform = a.__originalTransform, a.setTransform = a.__originalSetTransform, a.resetTransform = a.__originalResetTransform, a.clip = a.__originalClip, a.moveTo = a.__originalMoveTo, a.lineTo = a.__originalLineTo, a.bezierCurveTo = a.__originalBezierCurveTo, a.rect = a.__originalRect, a.closePath = a.__originalClosePath, a.beginPath = a.__originalBeginPath, delete a._removeMirroring;
}, a.save = function() {
U.save(), this.__originalSave();
}, a.restore = function() {
U.restore(), this.__originalRestore();
}, a.translate = function(d, t) {
U.translate(d, t), this.__originalTranslate(d, t);
}, a.scale = function(d, t) {
U.scale(d, t), this.__originalScale(d, t);
}, a.transform = function(d, t, Z, F, n, s) {
U.transform(d, t, Z, F, n, s), this.__originalTransform(d, t, Z, F, n, s);
}, a.setTransform = function(d, t, Z, F, n, s) {
U.setTransform(d, t, Z, F, n, s), this.__originalSetTransform(d, t, Z, F, n, s);
}, a.resetTransform = function() {
U.resetTransform(), this.__originalResetTransform();
}, a.rotate = function(d) {
U.rotate(d), this.__originalRotate(d);
}, a.clip = function(d) {
U.clip(d), this.__originalClip(d);
}, a.moveTo = function(l, d) {
U.moveTo(l, d), this.__originalMoveTo(l, d);
}, a.lineTo = function(l, d) {
U.lineTo(l, d), this.__originalLineTo(l, d);
}, a.bezierCurveTo = function(l, d, t, Z, F, n) {
U.bezierCurveTo(l, d, t, Z, F, n), this.__originalBezierCurveTo(l, d, t, Z, F, n);
}, a.rect = function(l, d, t, Z) {
U.rect(l, d, t, Z), this.__originalRect(l, d, t, Z);
}, a.closePath = function() {
U.closePath(), this.__originalClosePath();
}, a.beginPath = function() {
U.beginPath(), this.__originalBeginPath();
};
}
class Km {
constructor(U) {
this.canvasFactory = U, this.cache = /* @__PURE__ */ Object.create(null);
}
getCanvas(U, l, d) {
let t;
return this.cache[U] !== void 0 ? (t = this.cache[U], this.canvasFactory.reset(t, l, d)) : (t = this.canvasFactory.create(l, d), this.cache[U] = t), t;
}
delete(U) {
delete this.cache[U];
}
clear() {
for (const U in this.cache) {
const l = this.cache[U];
this.canvasFactory.destroy(l), delete this.cache[U];
}
}
}
function uW(a, U, l, d, t, Z, F, n, s, W) {
const [V, Q, i, N, e, m] = Bl(a);
if (Q === 0 && i === 0) {
const G = F * V + e, S = Math.round(G), T = n * N + m, u = Math.round(T), Y = (F + s) * V + e, o = Math.abs(Math.round(Y) - S) || 1, B = (n + W) * N + m, X = Math.abs(Math.round(B) - u) || 1;
return a.setTransform(Math.sign(V), 0, 0, Math.sign(N), S, u), a.drawImage(U, l, d, t, Z, 0, 0, o, X), a.setTransform(V, Q, i, N, e, m), [o, X];
}
if (V === 0 && N === 0) {
const G = n * i + e, S = Math.round(G), T = F * Q + m, u = Math.round(T), Y = (n + W) * i + e, o = Math.abs(Math.round(Y) - S) || 1, B = (F + s) * Q + m, X = Math.abs(Math.round(B) - u) || 1;
return a.setTransform(0, Math.sign(Q), Math.sign(i), 0, S, u), a.drawImage(U, l, d, t, Z, 0, 0, X, o), a.setTransform(V, Q, i, N, e, m), [X, o];
}
a.drawImage(U, l, d, t, Z, F, n, s, W);
const J = Math.hypot(V, Q), M = Math.hypot(i, N);
return [J * s, M * W];
}
function Hm(a) {
const {
width: U,
height: l
} = a;
if (U > FN || l > FN)
return null;
const d = 1e3, t = new Uint8Array([0, 2, 4, 0, 1, 0, 5, 4, 8, 10, 0, 8, 0, 2, 1, 0]), Z = U + 1;
let F = new Uint8Array(Z * (l + 1)), n, s, W;
const V = U + 7 & -8;
let Q = new Uint8Array(V * l), i = 0;
for (const M of a.data) {
let G = 128;
for (; G > 0; )
Q[i++] = M & G ? 0 : 255, G >>= 1;
}
let N = 0;
for (i = 0, Q[i] !== 0 && (F[0] = 1, ++N), s = 1; s < U; s++)
Q[i] !== Q[i + 1] && (F[s] = Q[i] ? 2 : 1, ++N), i++;
for (Q[i] !== 0 && (F[s] = 2, ++N), n = 1; n < l; n++) {
i = n * V, W = n * Z, Q[i - V] !== Q[i] && (F[W] = Q[i] ? 1 : 8, ++N);
let M = (Q[i] ? 4 : 0) + (Q[i - V] ? 8 : 0);
for (s = 1; s < U; s++)
M = (M >> 2) + (Q[i + 1] ? 4 : 0) + (Q[i - V + 1] ? 8 : 0), t[M] && (F[W + s] = t[M], ++N), i++;
if (Q[i - V] !== Q[i] && (F[W + s] = Q[i] ? 2 : 4, ++N), N > d)
return null;
}
for (i = V * (l - 1), W = n * Z, Q[i] !== 0 && (F[W] = 8, ++N), s = 1; s < U; s++)
Q[i] !== Q[i + 1] && (F[W + s] = Q[i] ? 4 : 8, ++N), i++;
if (Q[i] !== 0 && (F[W + s] = 4, ++N), N > d)
return null;
const e = new Int32Array([0, Z, -1, 0, -Z, 0, 0, 0, 1]), m = new Path2D();
for (n = 0; N && n <= l; n++) {
let M = n * Z;
const G = M + U;
for (; M < G && !F[M]; )
M++;
if (M === G)
continue;
m.moveTo(M % Z, n);
const S = M;
let T = F[M];
do {
const u = e[T];
do
M += u;
while (!F[M]);
const Y = F[M];
Y !== 5 && Y !== 10 ? (T = Y, F[M] = 0) : (T = Y & 51 * T >> 4, F[M] &= T >> 2 | T << 2), m.lineTo(M % Z, M / Z | 0), F[M] || --N;
} while (S !== M);
--n;
}
return Q = null, F = null, function(M) {
M.save(), M.scale(1 / U, -1 / l), M.translate(0, -l), M.fill(m), M.beginPath(), M.restore();
};
}
class cN {
constructor(U, l) {
this.alphaIsShape = !1, this.fontSize = 0, this.fontSizeScale = 1, this.textMatrix = $N, this.textMatrixScale = 1, this.fontMatrix = kQ, this.leading = 0, this.x = 0, this.y = 0, this.lineX = 0, this.lineY = 0, this.charSpacing = 0, this.wordSpacing = 0, this.textHScale = 1, this.textRenderingMode = hU.FILL, this.textRise = 0, this.fillColor = "#000000", this.strokeColor = "#000000", this.patternFill = !1, this.patternStroke = !1, this.fillAlpha = 1, this.strokeAlpha = 1, this.lineWidth = 1, this.activeSMask = null, this.transferMaps = "none", this.startNewPathAndClipBox([0, 0, U, l]);
}
clone() {
const U = Object.create(this);
return U.clipBox = this.clipBox.slice(), U;
}
setCurrentPoint(U, l) {
this.x = U, this.y = l;
}
updatePathMinMax(U, l, d) {
[l, d] = v.applyTransform([l, d], U), this.minX = Math.min(this.minX, l), this.minY = Math.min(this.minY, d), this.maxX = Math.max(this.maxX, l), this.maxY = Math.max(this.maxY, d);
}
updateRectMinMax(U, l) {
const d = v.applyTransform(l, U), t = v.applyTransform(l.slice(2), U), Z = v.applyTransform([l[0], l[3]], U), F = v.applyTransform([l[2], l[1]], U);
this.minX = Math.min(this.minX, d[0], t[0], Z[0], F[0]), this.minY = Math.min(this.minY, d[1], t[1], Z[1], F[1]), this.maxX = Math.max(this.maxX, d[0], t[0], Z[0], F[0]), this.maxY = Math.max(this.maxY, d[1], t[1], Z[1], F[1]);
}
updateScalingPathMinMax(U, l) {
v.scaleMinMax(U, l), this.minX = Math.min(this.minX, l[0]), this.minY = Math.min(this.minY, l[1]), this.maxX = Math.max(this.maxX, l[2]), this.maxY = Math.max(this.maxY, l[3]);
}
updateCurvePathMinMax(U, l, d, t, Z, F, n, s, W, V) {
const Q = v.bezierBoundingBox(l, d, t, Z, F, n, s, W, V);
V || this.updateRectMinMax(U, Q);
}
getPathBoundingBox(U = TU.FILL, l = null) {
const d = [this.minX, this.minY, this.maxX, this.maxY];
if (U === TU.STROKE) {
l || ul("Stroke bounding box must include transform.");
const t = v.singularValueDecompose2dScale(l), Z = t[0] * this.lineWidth / 2, F = t[1] * this.lineWidth / 2;
d[0] -= Z, d[1] -= F, d[2] += Z, d[3] += F;
}
return d;
}
updateClipFromPath() {
const U = v.intersect(this.clipBox, this.getPathBoundingBox());
this.startNewPathAndClipBox(U || [0, 0, 0, 0]);
}
isEmptyClip() {
return this.minX === 1 / 0;
}
startNewPathAndClipBox(U) {
this.clipBox = U, this.minX = 1 / 0, this.minY = 1 / 0, this.maxX = 0, this.maxY = 0;
}
getClippedPathBoundingBox(U = TU.FILL, l = null) {
return v.intersect(this.clipBox, this.getPathBoundingBox(U, l));
}
}
function nN(a, U) {
if (U instanceof ImageData) {
a.putImageData(U, 0, 0);
return;
}
const l = U.height, d = U.width, t = l % OU, Z = (l - t) / OU, F = t === 0 ? Z : Z + 1, n = a.createImageData(d, OU);
let s = 0, W;
const V = U.data, Q = n.data;
let i, N, e, m;
if (U.kind === EW.GRAYSCALE_1BPP) {
const J = V.byteLength, M = new Uint32Array(Q.buffer, 0, Q.byteLength >> 2), G = M.length, S = d + 7 >> 3, T = 4294967295, u = LU.isLittleEndian ? 4278190080 : 255;
for (i = 0; i < F; i++) {
for (e = i < Z ? OU : t, W = 0, N = 0; N < e; N++) {
const Y = J - s;
let o = 0;
const B = Y > S ? d : Y * 8 - 7, X = B & -8;
let p = 0, y = 0;
for (; o < X; o += 8)
y = V[s++], M[W++] = y & 128 ? T : u, M[W++] = y & 64 ? T : u, M[W++] = y & 32 ? T : u, M[W++] = y & 16 ? T : u, M[W++] = y & 8 ? T : u, M[W++] = y & 4 ? T : u, M[W++] = y & 2 ? T : u, M[W++] = y & 1 ? T : u;
for (; o < B; o++)
p === 0 && (y = V[s++], p = 128), M[W++] = y & p ? T : u, p >>= 1;
}
for (; W < G; )
M[W++] = 0;
a.putImageData(n, 0, i * OU);
}
} else if (U.kind === EW.RGBA_32BPP) {
for (N = 0, m = d * OU * 4, i = 0; i < Z; i++)
Q.set(V.subarray(s, s + m)), s += m, a.putImageData(n, 0, N), N += OU;
i < F && (m = d * t * 4, Q.set(V.subarray(s, s + m)), a.putImageData(n, 0, N));
} else if (U.kind === EW.RGB_24BPP)
for (e = OU, m = d * e, i = 0; i < F; i++) {
for (i >= Z && (e = t, m = d * e), W = 0, N = m; N--; )
Q[W++] = V[s++], Q[W++] = V[s++], Q[W++] = V[s++], Q[W++] = 255;
a.putImageData(n, 0, i * OU);
}
else
throw new Error(`bad image kind: ${U.kind}`);
}
function sN(a, U) {
if (U.bitmap) {
a.drawImage(U.bitmap, 0, 0);
return;
}
const l = U.height, d = U.width, t = l % OU, Z = (l - t) / OU, F = t === 0 ? Z : Z + 1, n = a.createImageData(d, OU);
let s = 0;
const W = U.data, V = n.data;
for (let Q = 0; Q < F; Q++) {
const i = Q < Z ? OU : t;
({
srcPos: s
} = jm({
src: W,
srcPos: s,
dest: V,
width: d,
height: i,
nonBlackColor: 0
})), a.putImageData(n, 0, Q * OU);
}
}
function rn(a, U) {
const l = ["strokeStyle", "fillStyle", "fillRule", "globalAlpha", "lineWidth", "lineCap", "lineJoin", "miterLimit", "globalCompositeOperation", "font", "filter"];
for (const d of l)
a[d] !== void 0 && (U[d] = a[d]);
a.setLineDash !== void 0 && (U.setLineDash(a.getLineDash()), U.lineDashOffset = a.lineDashOffset);
}
function YW(a) {
if (a.strokeStyle = a.fillStyle = "#000000", a.fillRule = "nonzero", a.globalAlpha = 1, a.lineWidth = 1, a.lineCap = "butt", a.lineJoin = "miter", a.miterLimit = 10, a.globalCompositeOperation = "source-over", a.font = "10px sans-serif", a.setLineDash !== void 0 && (a.setLineDash([]), a.lineDashOffset = 0), !XU) {
const {
filter: U
} = a;
U !== "none" && U !== "" && (a.filter = "none");
}
}
function aN(a, U) {
if (U)
return !0;
const l = v.singularValueDecompose2dScale(a);
l[0] = Math.fround(l[0]), l[1] = Math.fround(l[1]);
const d = Math.fround((globalThis.devicePixelRatio || 1) * Bn.PDF_TO_CSS_UNITS);
return l[0] <= d && l[1] <= d;
}
const vm = ["butt", "round", "square"], Pm = ["miter", "round", "bevel"], fm = {}, WN = {};
var wd, ni, si, ai;
const wR = class wR {
constructor(U, l, d, t, Z, {
optionalContentConfig: F,
markedContentStack: n = null
}, s, W) {
b(this, wd);
this.ctx = U, this.current = new cN(this.ctx.canvas.width, this.ctx.canvas.height), this.stateStack = [], this.pendingClip = null, this.pendingEOFill = !1, this.res = null, this.xobjs = null, this.commonObjs = l, this.objs = d, this.canvasFactory = t, this.filterFactory = Z, this.groupStack = [], this.processingType3 = null, this.baseTransform = null, this.baseTransformStack = [], this.groupLevel = 0, this.smaskStack = [], this.smaskCounter = 0, this.tempSMask = null, this.suspendedCtx = null, this.contentVisible = !0, this.markedContentStack = n || [], this.optionalContentConfig = F, this.cachedCanvases = new Km(this.canvasFactory), this.cachedPatterns = /* @__PURE__ */ new Map(), this.annotationCanvasMap = s, this.viewportScale = 1, this.outputScaleX = 1, this.outputScaleY = 1, this.pageColors = W, this._cachedScaleForStroking = [-1, 0], this._cachedGetSinglePixelWidth = null, this._cachedBitmapsMap = /* @__PURE__ */ new Map();
}
getObject(U, l = null) {
return typeof U == "string" ? U.startsWith("g_") ? this.commonObjs.get(U) : this.objs.get(U) : l;
}
beginDrawing({
transform: U,
viewport: l,
transparency: d = !1,
background: t = null
}) {
const Z = this.ctx.canvas.width, F = this.ctx.canvas.height, n = this.ctx.fillStyle;
if (this.ctx.fillStyle = t || "#ffffff", this.ctx.fillRect(0, 0, Z, F), this.ctx.fillStyle = n, d) {
const s = this.cachedCanvases.getCanvas("transparent", Z, F);
this.compositeCtx = this.ctx, this.transparentCanvas = s.canvas, this.ctx = s.context, this.ctx.save(), this.ctx.transform(...Bl(this.compositeCtx));
}
this.ctx.save(), YW(this.ctx), U && (this.ctx.transform(...U), this.outputScaleX = U[0], this.outputScaleY = U[0]), this.ctx.transform(...l.transform), this.viewportScale = l.scale, this.baseTransform = Bl(this.ctx);
}
executeOperatorList(U, l, d, t) {
const Z = U.argsArray, F = U.fnArray;
let n = l || 0;
const s = Z.length;
if (s === n)
return n;
const W = s - n > ZN && typeof d == "function", V = W ? Date.now() + Om : 0;
let Q = 0;
const i = this.commonObjs, N = this.objs;
let e;
for (; ; ) {
if (t !== void 0 && n === t.nextBreakPoint)
return t.breakIt(n, d), n;
if (e = F[n], e !== Td.dependency)
this[e].apply(this, Z[n]);
else
for (const m of Z[n]) {
const J = m.startsWith("g_") ? i : N;
if (!J.has(m))
return J.get(m, d), n;
}
if (n++, n === s)
return n;
if (W && ++Q > ZN) {
if (Date.now() > V)
return d(), n;
Q = 0;
}
}
}
endDrawing() {
h(this, wd, ni).call(this), this.cachedCanvases.clear(), this.cachedPatterns.clear();
for (const U of this._cachedBitmapsMap.values()) {
for (const l of U.values())
typeof HTMLCanvasElement < "u" && l instanceof HTMLCanvasElement && (l.width = l.height = 0);
U.clear();
}
this._cachedBitmapsMap.clear(), h(this, wd, si).call(this);
}
_scaleImage(U, l) {
const d = U.width ?? U.displayWidth, t = U.height ?? U.displayHeight;
let Z = Math.max(Math.hypot(l[0], l[1]), 1), F = Math.max(Math.hypot(l[2], l[3]), 1), n = d, s = t, W = "prescale1", V, Q;
for (; Z > 2 && n > 1 || F > 2 && s > 1; ) {
let i = n, N = s;
Z > 2 && n > 1 && (i = n >= 16384 ? Math.floor(n / 2) - 1 || 1 : Math.ceil(n / 2), Z /= n / i), F > 2 && s > 1 && (N = s >= 16384 ? Math.floor(s / 2) - 1 || 1 : Math.ceil(s) / 2, F /= s / N), V = this.cachedCanvases.getCanvas(W, i, N), Q = V.context, Q.clearRect(0, 0, i, N), Q.drawImage(U, 0, 0, n, s, 0, 0, i, N), U = V.canvas, n = i, s = N, W = W === "prescale1" ? "prescale2" : "prescale1";
}
return {
img: U,
paintWidth: n,
paintHeight: s
};
}
_createMaskCanvas(U) {
const l = this.ctx, {
width: d,
height: t
} = U, Z = this.current.fillColor, F = this.current.patternFill, n = Bl(l);
let s, W, V, Q;
if ((U.bitmap || U.data) && U.count > 1) {
const B = U.bitmap || U.data.buffer;
W = JSON.stringify(F ? n : [n.slice(0, 4), Z]), s = this._cachedBitmapsMap.get(B), s || (s = /* @__PURE__ */ new Map(), this._cachedBitmapsMap.set(B, s));
const X = s.get(W);
if (X && !F) {
const p = Math.round(Math.min(n[0], n[2]) + n[4]), y = Math.round(Math.min(n[1], n[3]) + n[5]);
return {
canvas: X,
offsetX: p,
offsetY: y
};
}
V = X;
}
V || (Q = this.cachedCanvases.getCanvas("maskCanvas", d, t), sN(Q.context, U));
let i = v.transform(n, [1 / d, 0, 0, -1 / t, 0, 0]);
i = v.transform(i, [1, 0, 0, 1, 0, -t]);
const [N, e, m, J] = v.getAxialAlignedBoundingBox([0, 0, d, t], i), M = Math.round(m - N) || 1, G = Math.round(J - e) || 1, S = this.cachedCanvases.getCanvas("fillCanvas", M, G), T = S.context, u = N, Y = e;
T.translate(-u, -Y), T.transform(...i), V || (V = this._scaleImage(Q.canvas, gd(T)), V = V.img, s && F && s.set(W, V)), T.imageSmoothingEnabled = aN(Bl(T), U.interpolate), uW(T, V, 0, 0, V.width, V.height, 0, 0, d, t), T.globalCompositeOperation = "source-in";
const o = v.transform(gd(T), [1, 0, 0, 1, -u, -Y]);
return T.fillStyle = F ? Z.getPattern(l, this, o, TU.FILL) : Z, T.fillRect(0, 0, d, t), s && !F && (this.cachedCanvases.delete("fillCanvas"), s.set(W, S.canvas)), {
canvas: S.canvas,
offsetX: Math.round(u),
offsetY: Math.round(Y)
};
}
setLineWidth(U) {
U !== this.current.lineWidth && (this._cachedScaleForStroking[0] = -1), this.current.lineWidth = U, this.ctx.lineWidth = U;
}
setLineCap(U) {
this.ctx.lineCap = vm[U];
}
setLineJoin(U) {
this.ctx.lineJoin = Pm[U];
}
setMiterLimit(U) {
this.ctx.miterLimit = U;
}
setDash(U, l) {
const d = this.ctx;
d.setLineDash !== void 0 && (d.setLineDash(U), d.lineDashOffset = l);
}
setRenderingIntent(U) {
}
setFlatness(U) {
}
setGState(U) {
for (const [l, d] of U)
switch (l) {
case "LW":
this.setLineWidth(d);
break;
case "LC":
this.setLineCap(d);
break;
case "LJ":
this.setLineJoin(d);
break;
case "ML":
this.setMiterLimit(d);
break;
case "D":
this.setDash(d[0], d[1]);
break;
case "RI":
this.setRenderingIntent(d);
break;
case "FL":
this.setFlatness(d);
break;
case "Font":
this.setFont(d[0], d[1]);
break;
case "CA":
this.current.strokeAlpha = d;
break;
case "ca":
this.current.fillAlpha = d, this.ctx.globalAlpha = d;
break;
case "BM":
this.ctx.globalCompositeOperation = d;
break;
case "SMask":
this.current.activeSMask = d ? this.tempSMask : null, this.tempSMask = null, this.checkSMaskState();
break;
case "TR":
this.ctx.filter = this.current.transferMaps = this.filterFactory.addFilter(d);
break;
}
}
get inSMaskMode() {
return !!this.suspendedCtx;
}
checkSMaskState() {
const U = this.inSMaskMode;
this.current.activeSMask && !U ? this.beginSMaskMode() : !this.current.activeSMask && U && this.endSMaskMode();
}
beginSMaskMode() {
if (this.inSMaskMode)
throw new Error("beginSMaskMode called while already in smask mode");
const U = this.ctx.canvas.width, l = this.ctx.canvas.height, d = "smaskGroupAt" + this.groupLevel, t = this.cachedCanvases.getCanvas(d, U, l);
this.suspendedCtx = this.ctx, this.ctx = t.context;
const Z = this.ctx;
Z.setTransform(...Bl(this.suspendedCtx)), rn(this.suspendedCtx, Z), gm(Z, this.suspendedCtx), this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]);
}
endSMaskMode() {
if (!this.inSMaskMode)
throw new Error("endSMaskMode called while not in smask mode");
this.ctx._removeMirroring(), rn(this.ctx, this.suspendedCtx), this.ctx = this.suspendedCtx, this.suspendedCtx = null;
}
compose(U) {
if (!this.current.activeSMask)
return;
U ? (U[0] = Math.floor(U[0]), U[1] = Math.floor(U[1]), U[2] = Math.ceil(U[2]), U[3] = Math.ceil(U[3])) : U = [0, 0, this.ctx.canvas.width, this.ctx.canvas.height];
const l = this.current.activeSMask, d = this.suspendedCtx;
this.composeSMask(d, l, this.ctx, U), this.ctx.save(), this.ctx.setTransform(1, 0, 0, 1, 0, 0), this.ctx.clearRect(0, 0, this.ctx.canvas.width, this.ctx.canvas.height), this.ctx.restore();
}
composeSMask(U, l, d, t) {
const Z = t[0], F = t[1], n = t[2] - Z, s = t[3] - F;
n === 0 || s === 0 || (this.genericComposeSMask(l.context, d, n, s, l.subtype, l.backdrop, l.transferMap, Z, F, l.offsetX, l.offsetY), U.save(), U.globalAlpha = 1, U.globalCompositeOperation = "source-over", U.setTransform(1, 0, 0, 1, 0, 0), U.drawImage(d.canvas, 0, 0), U.restore());
}
genericComposeSMask(U, l, d, t, Z, F, n, s, W, V, Q) {
let i = U.canvas, N = s - V, e = W - Q;
if (F) {
const J = v.makeHexColor(...F);
if (N < 0 || e < 0 || N + d > i.width || e + t > i.height) {
const M = this.cachedCanvases.getCanvas("maskExtension", d, t), G = M.context;
G.drawImage(i, -N, -e), G.globalCompositeOperation = "destination-atop", G.fillStyle = J, G.fillRect(0, 0, d, t), G.globalCompositeOperation = "source-over", i = M.canvas, N = e = 0;
} else {
U.save(), U.globalAlpha = 1, U.setTransform(1, 0, 0, 1, 0, 0);
const M = new Path2D();
M.rect(N, e, d, t), U.clip(M), U.globalCompositeOperation = "destination-atop", U.fillStyle = J, U.fillRect(N, e, d, t), U.restore();
}
}
l.save(), l.globalAlpha = 1, l.setTransform(1, 0, 0, 1, 0, 0), Z === "Alpha" && n ? l.filter = this.filterFactory.addAlphaFilter(n) : Z === "Luminosity" && (l.filter = this.filterFactory.addLuminosityFilter(n));
const m = new Path2D();
m.rect(s, W, d, t), l.clip(m), l.globalCompositeOperation = "destination-in", l.drawImage(i, N, e, d, t, s, W, d, t), l.restore();
}
save() {
this.inSMaskMode ? (rn(this.ctx, this.suspendedCtx), this.suspendedCtx.save()) : this.ctx.save();
const U = this.current;
this.stateStack.push(U), this.current = U.clone();
}
restore() {
this.stateStack.length === 0 && this.inSMaskMode && this.endSMaskMode(), this.stateStack.length !== 0 && (this.current = this.stateStack.pop(), this.inSMaskMode ? (this.suspendedCtx.restore(), rn(this.suspendedCtx, this.ctx)) : this.ctx.restore(), this.checkSMaskState(), this.pendingClip = null, this._cachedScaleForStroking[0] = -1, this._cachedGetSinglePixelWidth = null);
}
transform(U, l, d, t, Z, F) {
this.ctx.transform(U, l, d, t, Z, F), this._cachedScaleForStroking[0] = -1, this._cachedGetSinglePixelWidth = null;
}
constructPath(U, l, d) {
const t = this.ctx, Z = this.current;
let F = Z.x, n = Z.y, s, W;
const V = Bl(t), Q = V[0] === 0 && V[3] === 0 || V[1] === 0 && V[2] === 0, i = Q ? d.slice(0) : null;
for (let N = 0, e = 0, m = U.length; N < m; N++)
switch (U[N] | 0) {
case Td.rectangle:
F = l[e++], n = l[e++];
const J = l[e++], M = l[e++], G = F + J, S = n + M;
t.moveTo(F, n), J === 0 || M === 0 ? t.lineTo(G, S) : (t.lineTo(G, n), t.lineTo(G, S), t.lineTo(F, S)), Q || Z.updateRectMinMax(V, [F, n, G, S]), t.closePath();
break;
case Td.moveTo:
F = l[e++], n = l[e++], t.moveTo(F, n), Q || Z.updatePathMinMax(V, F, n);
break;
case Td.lineTo:
F = l[e++], n = l[e++], t.lineTo(F, n), Q || Z.updatePathMinMax(V, F, n);
break;
case Td.curveTo:
s = F, W = n, F = l[e + 4], n = l[e + 5], t.bezierCurveTo(l[e], l[e + 1], l[e + 2], l[e + 3], F, n), Z.updateCurvePathMinMax(V, s, W, l[e], l[e + 1], l[e + 2], l[e + 3], F, n, i), e += 6;
break;
case Td.curveTo2:
s = F, W = n, t.bezierCurveTo(F, n, l[e], l[e + 1], l[e + 2], l[e + 3]), Z.updateCurvePathMinMax(V, s, W, F, n, l[e], l[e + 1], l[e + 2], l[e + 3], i), F = l[e + 2], n = l[e + 3], e += 4;
break;
case Td.curveTo3:
s = F, W = n, F = l[e + 2], n = l[e + 3], t.bezierCurveTo(l[e], l[e + 1], F, n, F, n), Z.updateCurvePathMinMax(V, s, W, l[e], l[e + 1], F, n, F, n, i), e += 4;
break;
case Td.closePath:
t.closePath();
break;
}
Q && Z.updateScalingPathMinMax(V, i), Z.setCurrentPoint(F, n);
}
closePath() {
this.ctx.closePath();
}
stroke(U = !0) {
const l = this.ctx, d = this.current.strokeColor;
l.globalAlpha = this.current.strokeAlpha, this.contentVisible && (typeof d == "object" && (d != null && d.getPattern) ? (l.save(), l.strokeStyle = d.getPattern(l, this, gd(l), TU.STROKE), this.rescaleAndStroke(!1), l.restore()) : this.rescaleAndStroke(!0)), U && this.consumePath(this.current.getClippedPathBoundingBox()), l.globalAlpha = this.current.fillAlpha;
}
closeStroke() {
this.closePath(), this.stroke();
}
fill(U = !0) {
const l = this.ctx, d = this.current.fillColor, t = this.current.patternFill;
let Z = !1;
t && (l.save(), l.fillStyle = d.getPattern(l, this, gd(l), TU.FILL), Z = !0);
const F = this.current.getClippedPathBoundingBox();
this.contentVisible && F !== null && (this.pendingEOFill ? (l.fill("evenodd"), this.pendingEOFill = !1) : l.fill()), Z && l.restore(), U && this.consumePath(F);
}
eoFill() {
this.pendingEOFill = !0, this.fill();
}
fillStroke() {
this.fill(!1), this.stroke(!1), this.consumePath();
}
eoFillStroke() {
this.pendingEOFill = !0, this.fillStroke();
}
closeFillStroke() {
this.closePath(), this.fillStroke();
}
closeEOFillStroke() {
this.pendingEOFill = !0, this.closePath(), this.fillStroke();
}
endPath() {
this.consumePath();
}
clip() {
this.pendingClip = fm;
}
eoClip() {
this.pendingClip = WN;
}
beginText() {
this.current.textMatrix = $N, this.current.textMatrixScale = 1, this.current.x = this.current.lineX = 0, this.current.y = this.current.lineY = 0;
}
endText() {
const U = this.pendingTextPaths, l = this.ctx;
if (U === void 0) {
l.beginPath();
return;
}
const d = new Path2D(), t = l.getTransform().invertSelf();
for (const {
transform: Z,
x: F,
y: n,
fontSize: s,
path: W
} of U)
d.addPath(W, new DOMMatrix(Z).preMultiplySelf(t).translate(F, n).scale(s, -s));
l.clip(d), l.beginPath(), delete this.pendingTextPaths;
}
setCharSpacing(U) {
this.current.charSpacing = U;
}
setWordSpacing(U) {
this.current.wordSpacing = U;
}
setHScale(U) {
this.current.textHScale = U / 100;
}
setLeading(U) {
this.current.leading = -U;
}
setFont(U, l) {
var V;
const d = this.commonObjs.get(U), t = this.current;
if (!d)
throw new Error(`Can't find font for ${U}`);
if (t.fontMatrix = d.fontMatrix || kQ, (t.fontMatrix[0] === 0 || t.fontMatrix[3] === 0) && Ul("Invalid font matrix for font " + U), l < 0 ? (l = -l, t.fontDirection = -1) : t.fontDirection = 1, this.current.font = d, this.current.fontSize = l, d.isType3Font)
return;
const Z = d.loadedName || "sans-serif", F = ((V = d.systemFontInfo) == null ? void 0 : V.css) || `"${Z}", ${d.fallbackName}`;
let n = "normal";
d.black ? n = "900" : d.bold && (n = "bold");
const s = d.italic ? "italic" : "normal";
let W = l;
l < dN ? W = dN : l > tN && (W = tN), this.current.fontSizeScale = l / W, this.ctx.font = `${s} ${n} ${W}px ${F}`;
}
setTextRenderingMode(U) {
this.current.textRenderingMode = U;
}
setTextRise(U) {
this.current.textRise = U;
}
moveText(U, l) {
this.current.x = this.current.lineX += U, this.current.y = this.current.lineY += l;
}
setLeadingMoveText(U, l) {
this.setLeading(-l), this.moveText(U, l);
}
setTextMatrix(U, l, d, t, Z, F) {
this.current.textMatrix = [U, l, d, t, Z, F], this.current.textMatrixScale = Math.hypot(U, l), this.current.x = this.current.lineX = 0, this.current.y = this.current.lineY = 0;
}
nextLine() {
this.moveText(0, this.current.leading);
}
paintChar(U, l, d, t, Z) {
const F = this.ctx, n = this.current, s = n.font, W = n.textRenderingMode, V = n.fontSize / n.fontSizeScale, Q = W & hU.FILL_STROKE_MASK, i = !!(W & hU.ADD_TO_PATH_FLAG), N = n.patternFill && !s.missingFile, e = n.patternStroke && !s.missingFile;
let m;
if ((s.disableFontFace || i || N || e) && (m = s.getPathGenerator(this.commonObjs, U)), s.disableFontFace || N || e) {
if (F.save(), F.translate(l, d), F.scale(V, -V), Q === hU.FILL || Q === hU.FILL_STROKE)
if (t) {
const J = F.getTransform();
F.setTransform(...t), F.fill(h(this, wd, ai).call(this, m, J, t));
} else
F.fill(m);
if (Q === hU.STROKE || Q === hU.FILL_STROKE)
if (Z) {
const J = F.getTransform();
F.setTransform(...Z), F.stroke(h(this, wd, ai).call(this, m, J, Z));
} else
F.lineWidth /= V, F.stroke(m);
F.restore();
} else
(Q === hU.FILL || Q === hU.FILL_STROKE) && F.fillText(U, l, d), (Q === hU.STROKE || Q === hU.FILL_STROKE) && F.strokeText(U, l, d);
i && (this.pendingTextPaths || (this.pendingTextPaths = [])).push({
transform: Bl(F),
x: l,
y: d,
fontSize: V,
path: m
});
}
get isFontSubpixelAAEnabled() {
const {
context: U
} = this.cachedCanvases.getCanvas("isFontSubpixelAAEnabled", 10, 10);
U.scale(1.5, 1), U.fillText("I", 0, 10);
const l = U.getImageData(0, 0, 10, 10).data;
let d = !1;
for (let t = 3; t < l.length; t += 4)
if (l[t] > 0 && l[t] < 255) {
d = !0;
break;
}
return Wl(this, "isFontSubpixelAAEnabled", d);
}
showText(U) {
const l = this.current, d = l.font;
if (d.isType3Font)
return this.showType3Text(U);
const t = l.fontSize;
if (t === 0)
return;
const Z = this.ctx, F = l.fontSizeScale, n = l.charSpacing, s = l.wordSpacing, W = l.fontDirection, V = l.textHScale * W, Q = U.length, i = d.vertical, N = i ? 1 : -1, e = d.defaultVMetrics, m = t * l.fontMatrix[0], J = l.textRenderingMode === hU.FILL && !d.disableFontFace && !l.patternFill;
Z.save(), Z.transform(...l.textMatrix), Z.translate(l.x, l.y + l.textRise), W > 0 ? Z.scale(V, -1) : Z.scale(V, 1);
let M, G;
if (l.patternFill) {
Z.save();
const o = l.fillColor.getPattern(Z, this, gd(Z), TU.FILL);
M = Bl(Z), Z.restore(), Z.fillStyle = o;
}
if (l.patternStroke) {
Z.save();
const o = l.strokeColor.getPattern(Z, this, gd(Z), TU.STROKE);
G = Bl(Z), Z.restore(), Z.strokeStyle = o;
}
let S = l.lineWidth;
const T = l.textMatrixScale;
if (T === 0 || S === 0) {
const o = l.textRenderingMode & hU.FILL_STROKE_MASK;
(o === hU.STROKE || o === hU.FILL_STROKE) && (S = this.getSinglePixelWidth());
} else
S /= T;
if (F !== 1 && (Z.scale(F, F), S /= F), Z.lineWidth = S, d.isInvalidPDFjsFont) {
const o = [];
let B = 0;
for (const X of U)
o.push(X.unicode), B += X.width;
Z.fillText(o.join(""), 0, 0), l.x += B * m * V, Z.restore(), this.compose();
return;
}
let u = 0, Y;
for (Y = 0; Y < Q; ++Y) {
const o = U[Y];
if (typeof o == "number") {
u += N * o * t / 1e3;
continue;
}
let B = !1;
const X = (o.isSpace ? s : 0) + n, p = o.fontChar, y = o.accent;
let r, D, E = o.width;
if (i) {
const k = o.vmetric || e, I = -(o.vmetric ? k[1] : E * 0.5) * m, q = k[2] * m;
E = k ? -k[0] : E, r = I / F, D = (u + q) / F;
} else
r = u / F, D = 0;
if (d.remeasure && E > 0) {
const k = Z.measureText(p).width * 1e3 / t * F;
if (E < k && this.isFontSubpixelAAEnabled) {
const I = E / k;
B = !0, Z.save(), Z.scale(I, 1), r /= I;
} else E !== k && (r += (E - k) / 2e3 * t / F);
}
if (this.contentVisible && (o.isInFont || d.missingFile)) {
if (J && !y)
Z.fillText(p, r, D);
else if (this.paintChar(p, r, D, M, G), y) {
const k = r + t * y.offset.x / F, I = D - t * y.offset.y / F;
this.paintChar(y.fontChar, k, I, M, G);
}
}
const P = i ? E * m - X * W : E * m + X * W;
u += P, B && Z.restore();
}
i ? l.y -= u : l.x += u * V, Z.restore(), this.compose();
}
showType3Text(U) {
const l = this.ctx, d = this.current, t = d.font, Z = d.fontSize, F = d.fontDirection, n = t.vertical ? 1 : -1, s = d.charSpacing, W = d.wordSpacing, V = d.textHScale * F, Q = d.fontMatrix || kQ, i = U.length, N = d.textRenderingMode === hU.INVISIBLE;
let e, m, J, M;
if (!(N || Z === 0)) {
for (this._cachedScaleForStroking[0] = -1, this._cachedGetSinglePixelWidth = null, l.save(), l.transform(...d.textMatrix), l.translate(d.x, d.y), l.scale(V, F), e = 0; e < i; ++e) {
if (m = U[e], typeof m == "number") {
M = n * m * Z / 1e3, this.ctx.translate(M, 0), d.x += M * V;
continue;
}
const G = (m.isSpace ? W : 0) + s, S = t.charProcOperatorList[m.operatorListId];
if (!S) {
Ul(`Type3 character "${m.operatorListId}" is not available.`);
continue;
}
this.contentVisible && (this.processingType3 = m, this.save(), l.scale(Z, Z), l.transform(...Q), this.executeOperatorList(S), this.restore()), J = v.applyTransform([m.width, 0], Q)[0] * Z + G, l.translate(J, 0), d.x += J * V;
}
l.restore(), this.processingType3 = null;
}
}
setCharWidth(U, l) {
}
setCharWidthAndBounds(U, l, d, t, Z, F) {
this.ctx.rect(d, t, Z - d, F - t), this.ctx.clip(), this.endPath();
}
getColorN_Pattern(U) {
let l;
if (U[0] === "TilingPattern") {
const d = U[1], t = this.baseTransform || Bl(this.ctx), Z = {
createCanvasGraphics: (F) => new wR(F, this.commonObjs, this.objs, this.canvasFactory, this.filterFactory, {
optionalContentConfig: this.optionalContentConfig,
markedContentStack: this.markedContentStack
})
};
l = new ci(U, d, this.ctx, Z, t);
} else
l = this._getPattern(U[1], U[2]);
return l;
}
setStrokeColorN() {
this.current.strokeColor = this.getColorN_Pattern(arguments), this.current.patternStroke = !0;
}
setFillColorN() {
this.current.fillColor = this.getColorN_Pattern(arguments), this.current.patternFill = !0;
}
setStrokeRGBColor(U, l, d) {
this.ctx.strokeStyle = this.current.strokeColor = v.makeHexColor(U, l, d), this.current.patternStroke = !1;
}
setStrokeTransparent() {
this.ctx.strokeStyle = this.current.strokeColor = "transparent", this.current.patternStroke = !1;
}
setFillRGBColor(U, l, d) {
this.ctx.fillStyle = this.current.fillColor = v.makeHexColor(U, l, d), this.current.patternFill = !1;
}
setFillTransparent() {
this.ctx.fillStyle = this.current.fillColor = "transparent", this.current.patternFill = !1;
}
_getPattern(U, l = null) {
let d;
return this.cachedPatterns.has(U) ? d = this.cachedPatterns.get(U) : (d = xm(this.getObject(U)), this.cachedPatterns.set(U, d)), l && (d.matrix = l), d;
}
shadingFill(U) {
if (!this.contentVisible)
return;
const l = this.ctx;
this.save();
const d = this._getPattern(U);
l.fillStyle = d.getPattern(l, this, gd(l), TU.SHADING);
const t = gd(l);
if (t) {
const {
width: Z,
height: F
} = l.canvas, [n, s, W, V] = v.getAxialAlignedBoundingBox([0, 0, Z, F], t);
this.ctx.fillRect(n, s, W - n, V - s);
} else
this.ctx.fillRect(-1e10, -1e10, 2e10, 2e10);
this.compose(this.current.getClippedPathBoundingBox()), this.restore();
}
beginInlineImage() {
ul("Should not call beginInlineImage");
}
beginImageData() {
ul("Should not call beginImageData");
}
paintFormXObjectBegin(U, l) {
if (this.contentVisible && (this.save(), this.baseTransformStack.push(this.baseTransform), U && this.transform(...U), this.baseTransform = Bl(this.ctx), l)) {
const d = l[2] - l[0], t = l[3] - l[1];
this.ctx.rect(l[0], l[1], d, t), this.current.updateRectMinMax(Bl(this.ctx), l), this.clip(), this.endPath();
}
}
paintFormXObjectEnd() {
this.contentVisible && (this.restore(), this.baseTransform = this.baseTransformStack.pop());
}
beginGroup(U) {
if (!this.contentVisible)
return;
this.save(), this.inSMaskMode && (this.endSMaskMode(), this.current.activeSMask = null);
const l = this.ctx;
U.isolated || FQ("TODO: Support non-isolated groups."), U.knockout && Ul("Knockout groups not supported.");
const d = Bl(l);
if (U.matrix && l.transform(...U.matrix), !U.bbox)
throw new Error("Bounding box is required.");
let t = v.getAxialAlignedBoundingBox(U.bbox, Bl(l));
const Z = [0, 0, l.canvas.width, l.canvas.height];
t = v.intersect(t, Z) || [0, 0, 0, 0];
const F = Math.floor(t[0]), n = Math.floor(t[1]), s = Math.max(Math.ceil(t[2]) - F, 1), W = Math.max(Math.ceil(t[3]) - n, 1);
this.current.startNewPathAndClipBox([0, 0, s, W]);
let V = "groupAt" + this.groupLevel;
U.smask && (V += "_smask_" + this.smaskCounter++ % 2);
const Q = this.cachedCanvases.getCanvas(V, s, W), i = Q.context;
i.translate(-F, -n), i.transform(...d), U.smask ? this.smaskStack.push({
canvas: Q.canvas,
context: i,
offsetX: F,
offsetY: n,
subtype: U.smask.subtype,
backdrop: U.smask.backdrop,
transferMap: U.smask.transferMap || null,
startTransformInverse: null
}) : (l.setTransform(1, 0, 0, 1, 0, 0), l.translate(F, n), l.save()), rn(l, i), this.ctx = i, this.setGState([["BM", "source-over"], ["ca", 1], ["CA", 1]]), this.groupStack.push(l), this.groupLevel++;
}
endGroup(U) {
if (!this.contentVisible)
return;
this.groupLevel--;
const l = this.ctx, d = this.groupStack.pop();
if (this.ctx = d, this.ctx.imageSmoothingEnabled = !1, U.smask)
this.tempSMask = this.smaskStack.pop(), this.restore();
else {
this.ctx.restore();
const t = Bl(this.ctx);
this.restore(), this.ctx.save(), this.ctx.setTransform(...t);
const Z = v.getAxialAlignedBoundingBox([0, 0, l.canvas.width, l.canvas.height], t);
this.ctx.drawImage(l.canvas, 0, 0), this.ctx.restore(), this.compose(Z);
}
}
beginAnnotation(U, l, d, t, Z) {
if (h(this, wd, ni).call(this), YW(this.ctx), this.ctx.save(), this.save(), this.baseTransform && this.ctx.setTransform(...this.baseTransform), l) {
const F = l[2] - l[0], n = l[3] - l[1];
if (Z && this.annotationCanvasMap) {
d = d.slice(), d[4] -= l[0], d[5] -= l[1], l = l.slice(), l[0] = l[1] = 0, l[2] = F, l[3] = n;
const [s, W] = v.singularValueDecompose2dScale(Bl(this.ctx)), {
viewportScale: V
} = this, Q = Math.ceil(F * this.outputScaleX * V), i = Math.ceil(n * this.outputScaleY * V);
this.annotationCanvas = this.canvasFactory.create(Q, i);
const {
canvas: N,
context: e
} = this.annotationCanvas;
this.annotationCanvasMap.set(U, N), this.annotationCanvas.savedCtx = this.ctx, this.ctx = e, this.ctx.save(), this.ctx.setTransform(s, 0, 0, -W, 0, n * W), YW(this.ctx);
} else
YW(this.ctx), this.endPath(), this.ctx.rect(l[0], l[1], F, n), this.ctx.clip(), this.ctx.beginPath();
}
this.current = new cN(this.ctx.canvas.width, this.ctx.canvas.height), this.transform(...d), this.transform(...t);
}
endAnnotation() {
this.annotationCanvas && (this.ctx.restore(), h(this, wd, si).call(this), this.ctx = this.annotationCanvas.savedCtx, delete this.annotationCanvas.savedCtx, delete this.annotationCanvas);
}
paintImageMaskXObject(U) {
if (!this.contentVisible)
return;
const l = U.count;
U = this.getObject(U.data, U), U.count = l;
const d = this.ctx, t = this.processingType3;
if (t && (t.compiled === void 0 && (t.compiled = Hm(U)), t.compiled)) {
t.compiled(d);
return;
}
const Z = this._createMaskCanvas(U), F = Z.canvas;
d.save(), d.setTransform(1, 0, 0, 1, 0, 0), d.drawImage(F, Z.offsetX, Z.offsetY), d.restore(), this.compose();
}
paintImageMaskXObjectRepeat(U, l, d = 0, t = 0, Z, F) {
if (!this.contentVisible)
return;
U = this.getObject(U.data, U);
const n = this.ctx;
n.save();
const s = Bl(n);
n.transform(l, d, t, Z, 0, 0);
const W = this._createMaskCanvas(U);
n.setTransform(1, 0, 0, 1, W.offsetX - s[4], W.offsetY - s[5]);
for (let V = 0, Q = F.length; V < Q; V += 2) {
const i = v.transform(s, [l, d, t, Z, F[V], F[V + 1]]), [N, e] = v.applyTransform([0, 0], i);
n.drawImage(W.canvas, N, e);
}
n.restore(), this.compose();
}
paintImageMaskXObjectGroup(U) {
if (!this.contentVisible)
return;
const l = this.ctx, d = this.current.fillColor, t = this.current.patternFill;
for (const Z of U) {
const {
data: F,
width: n,
height: s,
transform: W
} = Z, V = this.cachedCanvases.getCanvas("maskCanvas", n, s), Q = V.context;
Q.save();
const i = this.getObject(F, Z);
sN(Q, i), Q.globalCompositeOperation = "source-in", Q.fillStyle = t ? d.getPattern(Q, this, gd(l), TU.FILL) : d, Q.fillRect(0, 0, n, s), Q.restore(), l.save(), l.transform(...W), l.scale(1, -1), uW(l, V.canvas, 0, 0, n, s, 0, -1, 1, 1), l.restore();
}
this.compose();
}
paintImageXObject(U) {
if (!this.contentVisible)
return;
const l = this.getObject(U);
if (!l) {
Ul("Dependent image isn't ready yet");
return;
}
this.paintInlineImageXObject(l);
}
paintImageXObjectRepeat(U, l, d, t) {
if (!this.contentVisible)
return;
const Z = this.getObject(U);
if (!Z) {
Ul("Dependent image isn't ready yet");
return;
}
const F = Z.width, n = Z.height, s = [];
for (let W = 0, V = t.length; W < V; W += 2)
s.push({
transform: [l, 0, 0, d, t[W], t[W + 1]],
x: 0,
y: 0,
w: F,
h: n
});
this.paintInlineImageXObjectGroup(Z, s);
}
applyTransferMapsToCanvas(U) {
return this.current.transferMaps !== "none" && (U.filter = this.current.transferMaps, U.drawImage(U.canvas, 0, 0), U.filter = "none"), U.canvas;
}
applyTransferMapsToBitmap(U) {
if (this.current.transferMaps === "none")
return U.bitmap;
const {
bitmap: l,
width: d,
height: t
} = U, Z = this.cachedCanvases.getCanvas("inlineImage", d, t), F = Z.context;
return F.filter = this.current.transferMaps, F.drawImage(l, 0, 0), F.filter = "none", Z.canvas;
}
paintInlineImageXObject(U) {
if (!this.contentVisible)
return;
const l = U.width, d = U.height, t = this.ctx;
if (this.save(), !XU) {
const {
filter: n
} = t;
n !== "none" && n !== "" && (t.filter = "none");
}
t.scale(1 / l, -1 / d);
let Z;
if (U.bitmap)
Z = this.applyTransferMapsToBitmap(U);
else if (typeof HTMLElement == "function" && U instanceof HTMLElement || !U.data)
Z = U;
else {
const s = this.cachedCanvases.getCanvas("inlineImage", l, d).context;
nN(s, U), Z = this.applyTransferMapsToCanvas(s);
}
const F = this._scaleImage(Z, gd(t));
t.imageSmoothingEnabled = aN(Bl(t), U.interpolate), uW(t, F.img, 0, 0, F.paintWidth, F.paintHeight, 0, -d, l, d), this.compose(), this.restore();
}
paintInlineImageXObjectGroup(U, l) {
if (!this.contentVisible)
return;
const d = this.ctx;
let t;
if (U.bitmap)
t = U.bitmap;
else {
const Z = U.width, F = U.height, s = this.cachedCanvases.getCanvas("inlineImage", Z, F).context;
nN(s, U), t = this.applyTransferMapsToCanvas(s);
}
for (const Z of l)
d.save(), d.transform(...Z.transform), d.scale(1, -1), uW(d, t, Z.x, Z.y, Z.w, Z.h, 0, -1, 1, 1), d.restore();
this.compose();
}
paintSolidColorImageMask() {
this.contentVisible && (this.ctx.fillRect(0, 0, 1, 1), this.compose());
}
markPoint(U) {
}
markPointProps(U, l) {
}
beginMarkedContent(U) {
this.markedContentStack.push({
visible: !0
});
}
beginMarkedContentProps(U, l) {
U === "OC" ? this.markedContentStack.push({
visible: this.optionalContentConfig.isVisible(l)
}) : this.markedContentStack.push({
visible: !0
}), this.contentVisible = this.isContentVisible();
}
endMarkedContent() {
this.markedContentStack.pop(), this.contentVisible = this.isContentVisible();
}
beginCompat() {
}
endCompat() {
}
consumePath(U) {
const l = this.current.isEmptyClip();
this.pendingClip && this.current.updateClipFromPath(), this.pendingClip || this.compose(U);
const d = this.ctx;
this.pendingClip && (l || (this.pendingClip === WN ? d.clip("evenodd") : d.clip()), this.pendingClip = null), this.current.startNewPathAndClipBox(this.current.clipBox), d.beginPath();
}
getSinglePixelWidth() {
if (!this._cachedGetSinglePixelWidth) {
const U = Bl(this.ctx);
if (U[1] === 0 && U[2] === 0)
this._cachedGetSinglePixelWidth = 1 / Math.min(Math.abs(U[0]), Math.abs(U[3]));
else {
const l = Math.abs(U[0] * U[3] - U[2] * U[1]), d = Math.hypot(U[0], U[2]), t = Math.hypot(U[1], U[3]);
this._cachedGetSinglePixelWidth = Math.max(d, t) / l;
}
}
return this._cachedGetSinglePixelWidth;
}
getScaleForStroking() {
if (this._cachedScaleForStroking[0] === -1) {
const {
lineWidth: U
} = this.current, {
a: l,
b: d,
c: t,
d: Z
} = this.ctx.getTransform();
let F, n;
if (d === 0 && t === 0) {
const s = Math.abs(l), W = Math.abs(Z);
if (s === W)
if (U === 0)
F = n = 1 / s;
else {
const V = s * U;
F = n = V < 1 ? 1 / V : 1;
}
else if (U === 0)
F = 1 / s, n = 1 / W;
else {
const V = s * U, Q = W * U;
F = V < 1 ? 1 / V : 1, n = Q < 1 ? 1 / Q : 1;
}
} else {
const s = Math.abs(l * Z - d * t), W = Math.hypot(l, d), V = Math.hypot(t, Z);
if (U === 0)
F = V / s, n = W / s;
else {
const Q = U * s;
F = V > Q ? V / Q : 1, n = W > Q ? W / Q : 1;
}
}
this._cachedScaleForStroking[0] = F, this._cachedScaleForStroking[1] = n;
}
return this._cachedScaleForStroking;
}
rescaleAndStroke(U) {
const {
ctx: l
} = this, {
lineWidth: d
} = this.current, [t, Z] = this.getScaleForStroking();
if (l.lineWidth = d || 1, t === 1 && Z === 1) {
l.stroke();
return;
}
const F = l.getLineDash();
if (U && l.save(), l.scale(t, Z), F.length > 0) {
const n = Math.max(t, Z);
l.setLineDash(F.map((s) => s / n)), l.lineDashOffset /= n;
}
l.stroke(), U && l.restore();
}
isContentVisible() {
for (let U = this.markedContentStack.length - 1; U >= 0; U--)
if (!this.markedContentStack[U].visible)
return !1;
return !0;
}
};
wd = new WeakSet(), ni = function() {
for (; this.stateStack.length || this.inSMaskMode; )
this.restore();
this.current.activeSMask = null, this.ctx.restore(), this.transparentCanvas && (this.ctx = this.compositeCtx, this.ctx.save(), this.ctx.setTransform(1, 0, 0, 1, 0, 0), this.ctx.drawImage(this.transparentCanvas, 0, 0), this.ctx.restore(), this.transparentCanvas = null);
}, si = function() {
if (this.pageColors) {
const U = this.filterFactory.addHCMFilter(this.pageColors.foreground, this.pageColors.background);
if (U !== "none") {
const l = this.ctx.filter;
this.ctx.filter = U, this.ctx.drawImage(this.ctx.canvas, 0, 0), this.ctx.filter = l;
}
}
}, ai = function(U, l, d) {
const t = new Path2D();
return t.addPath(U, new DOMMatrix(d).invertSelf().multiplySelf(l)), t;
};
let tc = wR;
for (const a in Td)
tc.prototype[a] !== void 0 && (tc.prototype[Td[a]] = tc.prototype[a]);
var DW, Ps, fs;
let bF = (DW = class {
static get workerPort() {
return c(this, Ps);
}
static set workerPort(U) {
if (!(typeof Worker < "u" && U instanceof Worker) && U !== null)
throw new Error("Invalid `workerPort` type.");
R(this, Ps, U);
}
static get workerSrc() {
return c(this, fs);
}
static set workerSrc(U) {
if (typeof U != "string")
throw new Error("Invalid `workerSrc` type.");
R(this, fs, U);
}
}, Ps = new WeakMap(), fs = new WeakMap(), b(DW, Ps, null), b(DW, fs, ""), DW);
var gF, As;
class Am {
constructor({
parsedData: U,
rawData: l
}) {
b(this, gF);
b(this, As);
R(this, gF, U), R(this, As, l);
}
getRaw() {
return c(this, As);
}
get(U) {
return c(this, gF).get(U) ?? null;
}
getAll() {
return pR(c(this, gF));
}
has(U) {
return c(this, gF).has(U);
}
}
gF = new WeakMap(), As = new WeakMap();
const f0 = Symbol("INTERNAL");
var _s, qs, $s, Sc;
class _m {
constructor(U, {
name: l,
intent: d,
usage: t,
rbGroups: Z
}) {
b(this, _s, !1);
b(this, qs, !1);
b(this, $s, !1);
b(this, Sc, !0);
R(this, _s, !!(U & Fd.DISPLAY)), R(this, qs, !!(U & Fd.PRINT)), this.name = l, this.intent = d, this.usage = t, this.rbGroups = Z;
}
get visible() {
if (c(this, $s))
return c(this, Sc);
if (!c(this, Sc))
return !1;
const {
print: U,
view: l
} = this.usage;
return c(this, _s) ? (l == null ? void 0 : l.viewState) !== "OFF" : c(this, qs) ? (U == null ? void 0 : U.printState) !== "OFF" : !0;
}
_setVisible(U, l, d = !1) {
U !== f0 && ul("Internal method `_setVisible` called."), R(this, $s, d), R(this, Sc, l);
}
}
_s = new WeakMap(), qs = new WeakMap(), $s = new WeakMap(), Sc = new WeakMap();
var YZ, bl, Tc, Xc, la, Wi;
class qm {
constructor(U, l = Fd.DISPLAY) {
b(this, la);
b(this, YZ, null);
b(this, bl, /* @__PURE__ */ new Map());
b(this, Tc, null);
b(this, Xc, null);
if (this.renderingIntent = l, this.name = null, this.creator = null, U !== null) {
this.name = U.name, this.creator = U.creator, R(this, Xc, U.order);
for (const d of U.groups)
c(this, bl).set(d.id, new _m(l, d));
if (U.baseState === "OFF")
for (const d of c(this, bl).values())
d._setVisible(f0, !1);
for (const d of U.on)
c(this, bl).get(d)._setVisible(f0, !0);
for (const d of U.off)
c(this, bl).get(d)._setVisible(f0, !1);
R(this, Tc, this.getHash());
}
}
isVisible(U) {
if (c(this, bl).size === 0)
return !0;
if (!U)
return FQ("Optional content group not defined."), !0;
if (U.type === "OCG")
return c(this, bl).has(U.id) ? c(this, bl).get(U.id).visible : (Ul(`Optional content group not found: ${U.id}`), !0);
if (U.type === "OCMD") {
if (U.expression)
return h(this, la, Wi).call(this, U.expression);
if (!U.policy || U.policy === "AnyOn") {
for (const l of U.ids) {
if (!c(this, bl).has(l))
return Ul(`Optional content group not found: ${l}`), !0;
if (c(this, bl).get(l).visible)
return !0;
}
return !1;
} else if (U.policy === "AllOn") {
for (const l of U.ids) {
if (!c(this, bl).has(l))
return Ul(`Optional content group not found: ${l}`), !0;
if (!c(this, bl).get(l).visible)
return !1;
}
return !0;
} else if (U.policy === "AnyOff") {
for (const l of U.ids) {
if (!c(this, bl).has(l))
return Ul(`Optional content group not found: ${l}`), !0;
if (!c(this, bl).get(l).visible)
return !0;
}
return !1;
} else if (U.policy === "AllOff") {
for (const l of U.ids) {
if (!c(this, bl).has(l))
return Ul(`Optional content group not found: ${l}`), !0;
if (c(this, bl).get(l).visible)
return !1;
}
return !0;
}
return Ul(`Unknown optional content policy ${U.policy}.`), !0;
}
return Ul(`Unknown group type ${U.type}.`), !0;
}
setVisibility(U, l = !0, d = !0) {
var Z;
const t = c(this, bl).get(U);
if (!t) {
Ul(`Optional content group not found: ${U}`);
return;
}
if (d && l && t.rbGroups.length)
for (const F of t.rbGroups)
for (const n of F)
n !== U && ((Z = c(this, bl).get(n)) == null || Z._setVisible(f0, !1, !0));
t._setVisible(f0, !!l, !0), R(this, YZ, null);
}
setOCGState({
state: U,
preserveRB: l
}) {
let d;
for (const t of U) {
switch (t) {
case "ON":
case "OFF":
case "Toggle":
d = t;
continue;
}
const Z = c(this, bl).get(t);
if (Z)
switch (d) {
case "ON":
this.setVisibility(t, !0, l);
break;
case "OFF":
this.setVisibility(t, !1, l);
break;
case "Toggle":
this.setVisibility(t, !Z.visible, l);
break;
}
}
R(this, YZ, null);
}
get hasInitialVisibility() {
return c(this, Tc) === null || this.getHash() === c(this, Tc);
}
getOrder() {
return c(this, bl).size ? c(this, Xc) ? c(this, Xc).slice() : [...c(this, bl).keys()] : null;
}
getGroups() {
return c(this, bl).size > 0 ? pR(c(this, bl)) : null;
}
getGroup(U) {
return c(this, bl).get(U) || null;
}
getHash() {
if (c(this, YZ) !== null)
return c(this, YZ);
const U = new ze();
for (const [l, d] of c(this, bl))
U.update(`${l}:${d.visible}`);
return R(this, YZ, U.hexdigest());
}
}
YZ = new WeakMap(), bl = new WeakMap(), Tc = new WeakMap(), Xc = new WeakMap(), la = new WeakSet(), Wi = function(U) {
const l = U.length;
if (l < 2)
return !0;
const d = U[0];
for (let t = 1; t < l; t++) {
const Z = U[t];
let F;
if (Array.isArray(Z))
F = h(this, la, Wi).call(this, Z);
else if (c(this, bl).has(Z))
F = c(this, bl).get(Z).visible;
else
return Ul(`Optional content group not found: ${Z}`), !0;
switch (d) {
case "And":
if (!F)
return !1;
break;
case "Or":
if (F)
return !0;
break;
case "Not":
return !F;
default:
return !0;
}
}
return d === "And";
};
class $m {
constructor(U, {
disableRange: l = !1,
disableStream: d = !1
}) {
Kl(U, 'PDFDataTransportStream - missing required "pdfDataRangeTransport" argument.');
const {
length: t,
initialData: Z,
progressiveDone: F,
contentDispositionFilename: n
} = U;
if (this._queuedChunks = [], this._progressiveDone = F, this._contentDispositionFilename = n, (Z == null ? void 0 : Z.length) > 0) {
const s = Z instanceof Uint8Array && Z.byteLength === Z.buffer.byteLength ? Z.buffer : new Uint8Array(Z).buffer;
this._queuedChunks.push(s);
}
this._pdfDataRangeTransport = U, this._isStreamingSupported = !d, this._isRangeSupported = !l, this._contentLength = t, this._fullRequestReader = null, this._rangeReaders = [], U.addRangeListener((s, W) => {
this._onReceiveData({
begin: s,
chunk: W
});
}), U.addProgressListener((s, W) => {
this._onProgress({
loaded: s,
total: W
});
}), U.addProgressiveReadListener((s) => {
this._onReceiveData({
chunk: s
});
}), U.addProgressiveDoneListener(() => {
this._onProgressiveDone();
}), U.transportReady();
}
_onReceiveData({
begin: U,
chunk: l
}) {
const d = l instanceof Uint8Array && l.byteLength === l.buffer.byteLength ? l.buffer : new Uint8Array(l).buffer;
if (U === void 0)
this._fullRequestReader ? this._fullRequestReader._enqueue(d) : this._queuedChunks.push(d);
else {
const t = this._rangeReaders.some(function(Z) {
return Z._begin !== U ? !1 : (Z._enqueue(d), !0);
});
Kl(t, "_onReceiveData - no `PDFDataTransportStreamRangeReader` instance found.");
}
}
get _progressiveDataLength() {
var U;
return ((U = this._fullRequestReader) == null ? void 0 : U._loaded) ?? 0;
}
_onProgress(U) {
var l, d, t, Z;
U.total === void 0 ? (d = (l = this._rangeReaders[0]) == null ? void 0 : l.onProgress) == null || d.call(l, {
loaded: U.loaded
}) : (Z = (t = this._fullRequestReader) == null ? void 0 : t.onProgress) == null || Z.call(t, {
loaded: U.loaded,
total: U.total
});
}
_onProgressiveDone() {
var U;
(U = this._fullRequestReader) == null || U.progressiveDone(), this._progressiveDone = !0;
}
_removeRangeReader(U) {
const l = this._rangeReaders.indexOf(U);
l >= 0 && this._rangeReaders.splice(l, 1);
}
getFullReader() {
Kl(!this._fullRequestReader, "PDFDataTransportStream.getFullReader can only be called once.");
const U = this._queuedChunks;
return this._queuedChunks = null, new l2(this, U, this._progressiveDone, this._contentDispositionFilename);
}
getRangeReader(U, l) {
if (l <= this._progressiveDataLength)
return null;
const d = new U2(this, U, l);
return this._pdfDataRangeTransport.requestDataRange(U, l), this._rangeReaders.push(d), d;
}
cancelAllRequests(U) {
var l;
(l = this._fullRequestReader) == null || l.cancel(U);
for (const d of this._rangeReaders.slice(0))
d.cancel(U);
this._pdfDataRangeTransport.abort();
}
}
class l2 {
constructor(U, l, d = !1, t = null) {
this._stream = U, this._done = d || !1, this._filename = zR(t) ? t : null, this._queuedChunks = l || [], this._loaded = 0;
for (const Z of this._queuedChunks)
this._loaded += Z.byteLength;
this._requests = [], this._headersReady = Promise.resolve(), U._fullRequestReader = this, this.onProgress = null;
}
_enqueue(U) {
this._done || (this._requests.length > 0 ? this._requests.shift().resolve({
value: U,
done: !1
}) : this._queuedChunks.push(U), this._loaded += U.byteLength);
}
get headersReady() {
return this._headersReady;
}
get filename() {
return this._filename;
}
get isRangeSupported() {
return this._stream._isRangeSupported;
}
get isStreamingSupported() {
return this._stream._isStreamingSupported;
}
get contentLength() {
return this._stream._contentLength;
}
async read() {
if (this._queuedChunks.length > 0)
return {
value: this._queuedChunks.shift(),
done: !1
};
if (this._done)
return {
value: void 0,
done: !0
};
const U = Promise.withResolvers();
return this._requests.push(U), U.promise;
}
cancel(U) {
this._done = !0;
for (const l of this._requests)
l.resolve({
value: void 0,
done: !0
});
this._requests.length = 0;
}
progressiveDone() {
this._done || (this._done = !0);
}
}
class U2 {
constructor(U, l, d) {
this._stream = U, this._begin = l, this._end = d, this._queuedChunk = null, this._requests = [], this._done = !1, this.onProgress = null;
}
_enqueue(U) {
if (!this._done) {
if (this._requests.length === 0)
this._queuedChunk = U;
else {
this._requests.shift().resolve({
value: U,
done: !1
});
for (const d of this._requests)
d.resolve({
value: void 0,
done: !0
});
this._requests.length = 0;
}
this._done = !0, this._stream._removeRangeReader(this);
}
}
get isStreamingSupported() {
return !1;
}
async read() {
if (this._queuedChunk) {
const l = this._queuedChunk;
return this._queuedChunk = null, {
value: l,
done: !1
};
}
if (this._done)
return {
value: void 0,
done: !0
};
const U = Promise.withResolvers();
return this._requests.push(U), U.promise;
}
cancel(U) {
this._done = !0;
for (const l of this._requests)
l.resolve({
value: void 0,
done: !0
});
this._requests.length = 0, this._stream._removeRangeReader(this);
}
}
function d2(a) {
let U = !0, l = d("filename\\*", "i").exec(a);
if (l) {
l = l[1];
let V = n(l);
return V = unescape(V), V = s(V), V = W(V), Z(V);
}
if (l = F(a), l) {
const V = W(l);
return Z(V);
}
if (l = d("filename", "i").exec(a), l) {
l = l[1];
let V = n(l);
return V = W(V), Z(V);
}
function d(V, Q) {
return new RegExp("(?:^|;)\\s*" + V + '\\s*=\\s*([^";\\s][^;\\s]*|"(?:[^"\\\\]|\\\\"?)+"?)', Q);
}
function t(V, Q) {
if (V) {
if (!/^[\x00-\xFF]+$/.test(Q))
return Q;
try {
const i = new TextDecoder(V, {
fatal: !0
}), N = cQ(Q);
Q = i.decode(N), U = !1;
} catch {
}
}
return Q;
}
function Z(V) {
return U && /[\x80-\xff]/.test(V) && (V = t("utf-8", V), U && (V = t("iso-8859-1", V))), V;
}
function F(V) {
const Q = [];
let i;
const N = d("filename\\*((?!0\\d)\\d+)(\\*?)", "ig");
for (; (i = N.exec(V)) !== null; ) {
let [, m, J, M] = i;
if (m = parseInt(m, 10), m in Q) {
if (m === 0)
break;
continue;
}
Q[m] = [J, M];
}
const e = [];
for (let m = 0; m < Q.length && m in Q; ++m) {
let [J, M] = Q[m];
M = n(M), J && (M = unescape(M), m === 0 && (M = s(M))), e.push(M);
}
return e.join("");
}
function n(V) {
if (V.startsWith('"')) {
const Q = V.slice(1).split('\\"');
for (let i = 0; i < Q.length; ++i) {
const N = Q[i].indexOf('"');
N !== -1 && (Q[i] = Q[i].slice(0, N), Q.length = i + 1), Q[i] = Q[i].replaceAll(/\\(.)/g, "$1");
}
V = Q.join('"');
}
return V;
}
function s(V) {
const Q = V.indexOf("'");
if (Q === -1)
return V;
const i = V.slice(0, Q), e = V.slice(Q + 1).replace(/^[^']*'/, "");
return t(i, e);
}
function W(V) {
return !V.startsWith("=?") || /[\x00-\x19\x80-\xff]/.test(V) ? V : V.replaceAll(/=\?([\w-]*)\?([QqBb])\?((?:[^?]|\?(?!=))*)\?=/g, function(Q, i, N, e) {
if (N === "q" || N === "Q")
return e = e.replaceAll("_", " "), e = e.replaceAll(/=([0-9a-fA-F]{2})/g, function(m, J) {
return String.fromCharCode(parseInt(J, 16));
}), t(i, e);
try {
e = atob(e);
} catch {
}
return t(i, e);
});
}
return "";
}
function He(a, U) {
const l = new Headers();
if (!a || !U || typeof U != "object")
return l;
for (const d in U) {
const t = U[d];
t !== void 0 && l.append(d, t);
}
return l;
}
function aQ(a) {
try {
return new URL(a).origin;
} catch {
}
return null;
}
function ve({
responseHeaders: a,
isHttp: U,
rangeChunkSize: l,
disableRange: d
}) {
const t = {
allowRangeRequests: !1,
suggestedLength: void 0
}, Z = parseInt(a.get("Content-Length"), 10);
return !Number.isInteger(Z) || (t.suggestedLength = Z, Z <= 2 * l) || d || !U || a.get("Accept-Ranges") !== "bytes" || (a.get("Content-Encoding") || "identity") !== "identity" || (t.allowRangeRequests = !0), t;
}
function Pe(a) {
const U = a.get("Content-Disposition");
if (U) {
let l = d2(U);
if (l.includes("%"))
try {
l = decodeURIComponent(l);
} catch {
}
if (zR(l))
return l;
}
return null;
}
function WQ(a, U) {
return a === 404 || a === 0 && U.startsWith("file:") ? new Ns('Missing PDF "' + U + '".') : new XV(`Unexpected server response (${a}) while retrieving PDF "${U}".`, a);
}
function fe(a) {
return a === 200 || a === 206;
}
function Ae(a, U, l) {
return {
method: "GET",
headers: a,
signal: l.signal,
mode: "cors",
credentials: U ? "include" : "same-origin",
redirect: "follow"
};
}
function _e(a) {
return a instanceof Uint8Array ? a.buffer : a instanceof ArrayBuffer ? a : (Ul(`getArrayBuffer - unexpected data format: ${a}`), new Uint8Array(a).buffer);
}
class VN {
constructor(U) {
f(this, "_responseOrigin", null);
this.source = U, this.isHttp = /^https?:/i.test(U.url), this.headers = He(this.isHttp, U.httpHeaders), this._fullRequestReader = null, this._rangeRequestReaders = [];
}
get _progressiveDataLength() {
var U;
return ((U = this._fullRequestReader) == null ? void 0 : U._loaded) ?? 0;
}
getFullReader() {
return Kl(!this._fullRequestReader, "PDFFetchStream.getFullReader can only be called once."), this._fullRequestReader = new t2(this), this._fullRequestReader;
}
getRangeReader(U, l) {
if (l <= this._progressiveDataLength)
return null;
const d = new Z2(this, U, l);
return this._rangeRequestReaders.push(d), d;
}
cancelAllRequests(U) {
var l;
(l = this._fullRequestReader) == null || l.cancel(U);
for (const d of this._rangeRequestReaders.slice(0))
d.cancel(U);
}
}
class t2 {
constructor(U) {
this._stream = U, this._reader = null, this._loaded = 0, this._filename = null;
const l = U.source;
this._withCredentials = l.withCredentials || !1, this._contentLength = l.length, this._headersCapability = Promise.withResolvers(), this._disableRange = l.disableRange || !1, this._rangeChunkSize = l.rangeChunkSize, !this._rangeChunkSize && !this._disableRange && (this._disableRange = !0), this._abortController = new AbortController(), this._isStreamingSupported = !l.disableStream, this._isRangeSupported = !l.disableRange;
const d = new Headers(U.headers), t = l.url;
fetch(t, Ae(d, this._withCredentials, this._abortController)).then((Z) => {
if (U._responseOrigin = aQ(Z.url), !fe(Z.status))
throw WQ(Z.status, t);
this._reader = Z.body.getReader(), this._headersCapability.resolve();
const F = Z.headers, {
allowRangeRequests: n,
suggestedLength: s
} = ve({
responseHeaders: F,
isHttp: U.isHttp,
rangeChunkSize: this._rangeChunkSize,
disableRange: this._disableRange
});
this._isRangeSupported = n, this._contentLength = s || this._contentLength, this._filename = Pe(F), !this._isStreamingSupported && this._isRangeSupported && this.cancel(new WF("Streaming is disabled."));
}).catch(this._headersCapability.reject), this.onProgress = null;
}
get headersReady() {
return this._headersCapability.promise;
}
get filename() {
return this._filename;
}
get contentLength() {
return this._contentLength;
}
get isRangeSupported() {
return this._isRangeSupported;
}
get isStreamingSupported() {
return this._isStreamingSupported;
}
async read() {
var d;
await this._headersCapability.promise;
const {
value: U,
done: l
} = await this._reader.read();
return l ? {
value: U,
done: l
} : (this._loaded += U.byteLength, (d = this.onProgress) == null || d.call(this, {
loaded: this._loaded,
total: this._contentLength
}), {
value: _e(U),
done: !1
});
}
cancel(U) {
var l;
(l = this._reader) == null || l.cancel(U), this._abortController.abort();
}
}
class Z2 {
constructor(U, l, d) {
this._stream = U, this._reader = null, this._loaded = 0;
const t = U.source;
this._withCredentials = t.withCredentials || !1, this._readCapability = Promise.withResolvers(), this._isStreamingSupported = !t.disableStream, this._abortController = new AbortController();
const Z = new Headers(U.headers);
Z.append("Range", `bytes=${l}-${d - 1}`);
const F = t.url;
fetch(F, Ae(Z, this._withCredentials, this._abortController)).then((n) => {
const s = aQ(n.url);
if (s !== U._responseOrigin)
throw new Error(`Expected range response-origin "${s}" to match "${U._responseOrigin}".`);
if (!fe(n.status))
throw WQ(n.status, F);
this._readCapability.resolve(), this._reader = n.body.getReader();
}).catch(this._readCapability.reject), this.onProgress = null;
}
get isStreamingSupported() {
return this._isStreamingSupported;
}
async read() {
var d;
await this._readCapability.promise;
const {
value: U,
done: l
} = await this._reader.read();
return l ? {
value: U,
done: l
} : (this._loaded += U.byteLength, (d = this.onProgress) == null || d.call(this, {
loaded: this._loaded
}), {
value: _e(U),
done: !1
});
}
cancel(U) {
var l;
(l = this._reader) == null || l.cancel(U), this._abortController.abort();
}
}
const MQ = 200, JQ = 206;
function F2(a) {
const U = a.response;
return typeof U != "string" ? U : cQ(U).buffer;
}
class c2 {
constructor({
url: U,
httpHeaders: l,
withCredentials: d
}) {
f(this, "_responseOrigin", null);
this.url = U, this.isHttp = /^https?:/i.test(U), this.headers = He(this.isHttp, l), this.withCredentials = d || !1, this.currXhrId = 0, this.pendingRequests = /* @__PURE__ */ Object.create(null);
}
request(U) {
const l = new XMLHttpRequest(), d = this.currXhrId++, t = this.pendingRequests[d] = {
xhr: l
};
l.open("GET", this.url), l.withCredentials = this.withCredentials;
for (const [Z, F] of this.headers)
l.setRequestHeader(Z, F);
return this.isHttp && "begin" in U && "end" in U ? (l.setRequestHeader("Range", `bytes=${U.begin}-${U.end - 1}`), t.expectedStatus = JQ) : t.expectedStatus = MQ, l.responseType = "arraybuffer", Kl(U.onError, "Expected `onError` callback to be provided."), l.onerror = () => {
U.onError(l.status);
}, l.onreadystatechange = this.onStateChange.bind(this, d), l.onprogress = this.onProgress.bind(this, d), t.onHeadersReceived = U.onHeadersReceived, t.onDone = U.onDone, t.onError = U.onError, t.onProgress = U.onProgress, l.send(null), d;
}
onProgress(U, l) {
var t;
const d = this.pendingRequests[U];
d && ((t = d.onProgress) == null || t.call(d, l));
}
onStateChange(U, l) {
const d = this.pendingRequests[U];
if (!d)
return;
const t = d.xhr;
if (t.readyState >= 2 && d.onHeadersReceived && (d.onHeadersReceived(), delete d.onHeadersReceived), t.readyState !== 4 || !(U in this.pendingRequests))
return;
if (delete this.pendingRequests[U], t.status === 0 && this.isHttp) {
d.onError(t.status);
return;
}
const Z = t.status || MQ;
if (!(Z === MQ && d.expectedStatus === JQ) && Z !== d.expectedStatus) {
d.onError(t.status);
return;
}
const n = F2(t);
if (Z === JQ) {
const s = t.getResponseHeader("Content-Range"), W = /bytes (\d+)-(\d+)\/(\d+)/.exec(s);
W ? d.onDone({
begin: parseInt(W[1], 10),
chunk: n
}) : (Ul('Missing or invalid "Content-Range" header.'), d.onError(0));
} else n ? d.onDone({
begin: 0,
chunk: n
}) : d.onError(t.status);
}
getRequestXhr(U) {
return this.pendingRequests[U].xhr;
}
isPendingRequest(U) {
return U in this.pendingRequests;
}
abortRequest(U) {
const l = this.pendingRequests[U].xhr;
delete this.pendingRequests[U], l.abort();
}
}
class n2 {
constructor(U) {
this._source = U, this._manager = new c2(U), this._rangeChunkSize = U.rangeChunkSize, this._fullRequestReader = null, this._rangeRequestReaders = [];
}
_onRangeRequestReaderClosed(U) {
const l = this._rangeRequestReaders.indexOf(U);
l >= 0 && this._rangeRequestReaders.splice(l, 1);
}
getFullReader() {
return Kl(!this._fullRequestReader, "PDFNetworkStream.getFullReader can only be called once."), this._fullRequestReader = new s2(this._manager, this._source), this._fullRequestReader;
}
getRangeReader(U, l) {
const d = new a2(this._manager, U, l);
return d.onClosed = this._onRangeRequestReaderClosed.bind(this), this._rangeRequestReaders.push(d), d;
}
cancelAllRequests(U) {
var l;
(l = this._fullRequestReader) == null || l.cancel(U);
for (const d of this._rangeRequestReaders.slice(0))
d.cancel(U);
}
}
class s2 {
constructor(U, l) {
this._manager = U, this._url = l.url, this._fullRequestId = U.request({
onHeadersReceived: this._onHeadersReceived.bind(this),
onDone: this._onDone.bind(this),
onError: this._onError.bind(this),
onProgress: this._onProgress.bind(this)
}), this._headersCapability = Promise.withResolvers(), this._disableRange = l.disableRange || !1, this._contentLength = l.length, this._rangeChunkSize = l.rangeChunkSize, !this._rangeChunkSize && !this._disableRange && (this._disableRange = !0), this._isStreamingSupported = !1, this._isRangeSupported = !1, this._cachedChunks = [], this._requests = [], this._done = !1, this._storedError = void 0, this._filename = null, this.onProgress = null;
}
_onHeadersReceived() {
const U = this._fullRequestId, l = this._manager.getRequestXhr(U);
this._manager._responseOrigin = aQ(l.responseURL);
const d = l.getAllResponseHeaders(), t = new Headers(d ? d.trimStart().replace(/[^\S ]+$/, "").split(/[\r\n]+/).map((n) => {
const [s, ...W] = n.split(": ");
return [s, W.join(": ")];
}) : []), {
allowRangeRequests: Z,
suggestedLength: F
} = ve({
responseHeaders: t,
isHttp: this._manager.isHttp,
rangeChunkSize: this._rangeChunkSize,
disableRange: this._disableRange
});
Z && (this._isRangeSupported = !0), this._contentLength = F || this._contentLength, this._filename = Pe(t), this._isRangeSupported && this._manager.abortRequest(U), this._headersCapability.resolve();
}
_onDone(U) {
if (U && (this._requests.length > 0 ? this._requests.shift().resolve({
value: U.chunk,
done: !1
}) : this._cachedChunks.push(U.chunk)), this._done = !0, !(this._cachedChunks.length > 0)) {
for (const l of this._requests)
l.resolve({
value: void 0,
done: !0
});
this._requests.length = 0;
}
}
_onError(U) {
this._storedError = WQ(U, this._url), this._headersCapability.reject(this._storedError);
for (const l of this._requests)
l.reject(this._storedError);
this._requests.length = 0, this._cachedChunks.length = 0;
}
_onProgress(U) {
var l;
(l = this.onProgress) == null || l.call(this, {
loaded: U.loaded,
total: U.lengthComputable ? U.total : this._contentLength
});
}
get filename() {
return this._filename;
}
get isRangeSupported() {
return this._isRangeSupported;
}
get isStreamingSupported() {
return this._isStreamingSupported;
}
get contentLength() {
return this._contentLength;
}
get headersReady() {
return this._headersCapability.promise;
}
async read() {
if (await this._headersCapability.promise, this._storedError)
throw this._storedError;
if (this._cachedChunks.length > 0)
return {
value: this._cachedChunks.shift(),
done: !1
};
if (this._done)
return {
value: void 0,
done: !0
};
const U = Promise.withResolvers();
return this._requests.push(U), U.promise;
}
cancel(U) {
this._done = !0, this._headersCapability.reject(U);
for (const l of this._requests)
l.resolve({
value: void 0,
done: !0
});
this._requests.length = 0, this._manager.isPendingRequest(this._fullRequestId) && this._manager.abortRequest(this._fullRequestId), this._fullRequestReader = null;
}
}
class a2 {
constructor(U, l, d) {
this._manager = U, this._url = U.url, this._requestId = U.request({
begin: l,
end: d,
onHeadersReceived: this._onHeadersReceived.bind(this),
onDone: this._onDone.bind(this),
onError: this._onError.bind(this),
onProgress: this._onProgress.bind(this)
}), this._requests = [], this._queuedChunk = null, this._done = !1, this._storedError = void 0, this.onProgress = null, this.onClosed = null;
}
_onHeadersReceived() {
var l;
const U = aQ((l = this._manager.getRequestXhr(this._requestId)) == null ? void 0 : l.responseURL);
U !== this._manager._responseOrigin && (this._storedError = new Error(`Expected range response-origin "${U}" to match "${this._manager._responseOrigin}".`), this._onError(0));
}
_close() {
var U;
(U = this.onClosed) == null || U.call(this, this);
}
_onDone(U) {
const l = U.chunk;
this._requests.length > 0 ? this._requests.shift().resolve({
value: l,
done: !1
}) : this._queuedChunk = l, this._done = !0;
for (const d of this._requests)
d.resolve({
value: void 0,
done: !0
});
this._requests.length = 0, this._close();
}
_onError(U) {
this._storedError ?? (this._storedError = WQ(U, this._url));
for (const l of this._requests)
l.reject(this._storedError);
this._requests.length = 0, this._queuedChunk = null;
}
_onProgress(U) {
var l;
this.isStreamingSupported || (l = this.onProgress) == null || l.call(this, {
loaded: U.loaded
});
}
get isStreamingSupported() {
return !1;
}
async read() {
if (this._storedError)
throw this._storedError;
if (this._queuedChunk !== null) {
const l = this._queuedChunk;
return this._queuedChunk = null, {
value: l,
done: !1
};
}
if (this._done)
return {
value: void 0,
done: !0
};
const U = Promise.withResolvers();
return this._requests.push(U), U.promise;
}
cancel(U) {
this._done = !0;
for (const l of this._requests)
l.resolve({
value: void 0,
done: !0
});
this._requests.length = 0, this._manager.isPendingRequest(this._requestId) && this._manager.abortRequest(this._requestId), this._close();
}
}
const W2 = /^[a-z][a-z0-9\-+.]+:/i;
function V2(a) {
if (W2.test(a))
return new URL(a);
const U = process.getBuiltinModule("url");
return new URL(U.pathToFileURL(a));
}
class Q2 {
constructor(U) {
this.source = U, this.url = V2(U.url), Kl(this.url.protocol === "file:", "PDFNodeStream only supports file:// URLs."), this._fullRequestReader = null, this._rangeRequestReaders = [];
}
get _progressiveDataLength() {
var U;
return ((U = this._fullRequestReader) == null ? void 0 : U._loaded) ?? 0;
}
getFullReader() {
return Kl(!this._fullRequestReader, "PDFNodeStream.getFullReader can only be called once."), this._fullRequestReader = new i2(this), this._fullRequestReader;
}
getRangeReader(U, l) {
if (l <= this._progressiveDataLength)
return null;
const d = new R2(this, U, l);
return this._rangeRequestReaders.push(d), d;
}
cancelAllRequests(U) {
var l;
(l = this._fullRequestReader) == null || l.cancel(U);
for (const d of this._rangeRequestReaders.slice(0))
d.cancel(U);
}
}
class i2 {
constructor(U) {
this._url = U.url, this._done = !1, this._storedError = null, this.onProgress = null;
const l = U.source;
this._contentLength = l.length, this._loaded = 0, this._filename = null, this._disableRange = l.disableRange || !1, this._rangeChunkSize = l.rangeChunkSize, !this._rangeChunkSize && !this._disableRange && (this._disableRange = !0), this._isStreamingSupported = !l.disableStream, this._isRangeSupported = !l.disableRange, this._readableStream = null, this._readCapability = Promise.withResolvers(), this._headersCapability = Promise.withResolvers();
const d = process.getBuiltinModule("fs");
d.promises.lstat(this._url).then((t) => {
this._contentLength = t.size, this._setReadableStream(d.createReadStream(this._url)), this._headersCapability.resolve();
}, (t) => {
t.code === "ENOENT" && (t = new Ns(`Missing PDF "${this._url}".`)), this._storedError = t, this._headersCapability.reject(t);
});
}
get headersReady() {
return this._headersCapability.promise;
}
get filename() {
return this._filename;
}
get contentLength() {
return this._contentLength;
}
get isRangeSupported() {
return this._isRangeSupported;
}
get isStreamingSupported() {
return this._isStreamingSupported;
}
async read() {
var d;
if (await this._readCapability.promise, this._done)
return {
value: void 0,
done: !0
};
if (this._storedError)
throw this._storedError;
const U = this._readableStream.read();
return U === null ? (this._readCapability = Promise.withResolvers(), this.read()) : (this._loaded += U.length, (d = this.onProgress) == null || d.call(this, {
loaded: this._loaded,
total: this._contentLength
}), {
value: new Uint8Array(U).buffer,
done: !1
});
}
cancel(U) {
if (!this._readableStream) {
this._error(U);
return;
}
this._readableStream.destroy(U);
}
_error(U) {
this._storedError = U, this._readCapability.resolve();
}
_setReadableStream(U) {
this._readableStream = U, U.on("readable", () => {
this._readCapability.resolve();
}), U.on("end", () => {
U.destroy(), this._done = !0, this._readCapability.resolve();
}), U.on("error", (l) => {
this._error(l);
}), !this._isStreamingSupported && this._isRangeSupported && this._error(new WF("streaming is disabled")), this._storedError && this._readableStream.destroy(this._storedError);
}
}
class R2 {
constructor(U, l, d) {
this._url = U.url, this._done = !1, this._storedError = null, this.onProgress = null, this._loaded = 0, this._readableStream = null, this._readCapability = Promise.withResolvers();
const t = U.source;
this._isStreamingSupported = !t.disableStream;
const Z = process.getBuiltinModule("fs");
this._setReadableStream(Z.createReadStream(this._url, {
start: l,
end: d - 1
}));
}
get isStreamingSupported() {
return this._isStreamingSupported;
}
async read() {
var d;
if (await this._readCapability.promise, this._done)
return {
value: void 0,
done: !0
};
if (this._storedError)
throw this._storedError;
const U = this._readableStream.read();
return U === null ? (this._readCapability = Promise.withResolvers(), this.read()) : (this._loaded += U.length, (d = this.onProgress) == null || d.call(this, {
loaded: this._loaded
}), {
value: new Uint8Array(U).buffer,
done: !1
});
}
cancel(U) {
if (!this._readableStream) {
this._error(U);
return;
}
this._readableStream.destroy(U);
}
_error(U) {
this._storedError = U, this._readCapability.resolve();
}
_setReadableStream(U) {
this._readableStream = U, U.on("readable", () => {
this._readCapability.resolve();
}), U.on("end", () => {
U.destroy(), this._done = !0, this._readCapability.resolve();
}), U.on("error", (l) => {
this._error(l);
}), this._storedError && this._readableStream.destroy(this._storedError);
}
}
const N2 = 1e5, DU = 30, e2 = 0.8;
var AN, oZ, CU, Ua, da, KF, Dt, ta, Za, HF, uc, Yc, pZ, oc, Fa, pc, vF, ca, na, wl, PF, fF, sa, BZ, Bc, aZ, qe, $e, Qi, sd, PW, ii, lh, Uh;
let Vi = (wl = class {
constructor({
textContentSource: U,
container: l,
viewport: d
}) {
b(this, aZ);
b(this, oZ, Promise.withResolvers());
b(this, CU, null);
b(this, Ua, !1);
b(this, da, !!((AN = globalThis.FontInspector) != null && AN.enabled));
b(this, KF, null);
b(this, Dt, null);
b(this, ta, 0);
b(this, Za, 0);
b(this, HF, null);
b(this, uc, null);
b(this, Yc, 0);
b(this, pZ, 0);
b(this, oc, /* @__PURE__ */ Object.create(null));
b(this, Fa, []);
b(this, pc, null);
b(this, vF, []);
b(this, ca, /* @__PURE__ */ new WeakMap());
b(this, na, null);
var s;
if (U instanceof ReadableStream)
R(this, pc, U);
else if (typeof U == "object")
R(this, pc, new ReadableStream({
start(W) {
W.enqueue(U), W.close();
}
}));
else
throw new Error('No "textContentSource" parameter specified.');
R(this, CU, R(this, uc, l)), R(this, pZ, d.scale * (globalThis.devicePixelRatio || 1)), R(this, Yc, d.rotation), R(this, Dt, {
div: null,
properties: null,
ctx: null
});
const {
pageWidth: t,
pageHeight: Z,
pageX: F,
pageY: n
} = d.rawDims;
R(this, na, [1, 0, 0, -1, -F, n + Z]), R(this, Za, t), R(this, ta, Z), h(s = wl, sd, lh).call(s), x0(l, d), c(this, oZ).promise.finally(() => {
c(wl, Bc).delete(this), R(this, Dt, null), R(this, oc, null);
}).catch(() => {
});
}
static get fontFamilyMap() {
const {
isWindows: U,
isFirefox: l
} = LU.platform;
return Wl(this, "fontFamilyMap", /* @__PURE__ */ new Map([["sans-serif", `${U && l ? "Calibri, " : ""}sans-serif`], ["monospace", `${U && l ? "Lucida Console, " : ""}monospace`]]));
}
render() {
const U = () => {
c(this, HF).read().then(({
value: l,
done: d
}) => {
if (d) {
c(this, oZ).resolve();
return;
}
c(this, KF) ?? R(this, KF, l.lang), Object.assign(c(this, oc), l.styles), h(this, aZ, qe).call(this, l.items), U();
}, c(this, oZ).reject);
};
return R(this, HF, c(this, pc).getReader()), c(wl, Bc).add(this), U(), c(this, oZ).promise;
}
update({
viewport: U,
onBefore: l = null
}) {
var Z;
const d = U.scale * (globalThis.devicePixelRatio || 1), t = U.rotation;
if (t !== c(this, Yc) && (l == null || l(), R(this, Yc, t), x0(c(this, uc), {
rotation: t
})), d !== c(this, pZ)) {
l == null || l(), R(this, pZ, d);
const F = {
div: null,
properties: null,
ctx: h(Z = wl, sd, PW).call(Z, c(this, KF))
};
for (const n of c(this, vF))
F.properties = c(this, ca).get(n), F.div = n, h(this, aZ, Qi).call(this, F);
}
}
cancel() {
var l;
const U = new WF("TextLayer task cancelled.");
(l = c(this, HF)) == null || l.cancel(U).catch(() => {
}), R(this, HF, null), c(this, oZ).reject(U);
}
get textDivs() {
return c(this, vF);
}
get textContentItemsStr() {
return c(this, Fa);
}
static cleanup() {
if (!(c(this, Bc).size > 0)) {
c(this, PF).clear();
for (const {
canvas: U
} of c(this, fF).values())
U.remove();
c(this, fF).clear();
}
}
}, oZ = new WeakMap(), CU = new WeakMap(), Ua = new WeakMap(), da = new WeakMap(), KF = new WeakMap(), Dt = new WeakMap(), ta = new WeakMap(), Za = new WeakMap(), HF = new WeakMap(), uc = new WeakMap(), Yc = new WeakMap(), pZ = new WeakMap(), oc = new WeakMap(), Fa = new WeakMap(), pc = new WeakMap(), vF = new WeakMap(), ca = new WeakMap(), na = new WeakMap(), PF = new WeakMap(), fF = new WeakMap(), sa = new WeakMap(), BZ = new WeakMap(), Bc = new WeakMap(), aZ = new WeakSet(), qe = function(U) {
var t, Z;
if (c(this, Ua))
return;
(Z = c(this, Dt)).ctx ?? (Z.ctx = h(t = wl, sd, PW).call(t, c(this, KF)));
const l = c(this, vF), d = c(this, Fa);
for (const F of U) {
if (l.length > N2) {
Ul("Ignoring additional textDivs for performance reasons."), R(this, Ua, !0);
return;
}
if (F.str === void 0) {
if (F.type === "beginMarkedContentProps" || F.type === "beginMarkedContent") {
const n = c(this, CU);
R(this, CU, document.createElement("span")), c(this, CU).classList.add("markedContent"), F.id !== null && c(this, CU).setAttribute("id", `${F.id}`), n.append(c(this, CU));
} else F.type === "endMarkedContent" && R(this, CU, c(this, CU).parentNode);
continue;
}
d.push(F.str), h(this, aZ, $e).call(this, F);
}
}, $e = function(U) {
var m;
const l = document.createElement("span"), d = {
angle: 0,
canvasWidth: 0,
hasText: U.str !== "",
hasEOL: U.hasEOL,
fontSize: 0
};
c(this, vF).push(l);
const t = v.transform(c(this, na), U.transform);
let Z = Math.atan2(t[1], t[0]);
const F = c(this, oc)[U.fontName];
F.vertical && (Z += Math.PI / 2);
let n = c(this, da) && F.fontSubstitution || F.fontFamily;
n = wl.fontFamilyMap.get(n) || n;
const s = Math.hypot(t[2], t[3]), W = s * h(m = wl, sd, Uh).call(m, n, c(this, KF));
let V, Q;
Z === 0 ? (V = t[4], Q = t[5] - W) : (V = t[4] + W * Math.sin(Z), Q = t[5] - W * Math.cos(Z));
const i = "calc(var(--scale-factor)*", N = l.style;
c(this, CU) === c(this, uc) ? (N.left = `${(100 * V / c(this, Za)).toFixed(2)}%`, N.top = `${(100 * Q / c(this, ta)).toFixed(2)}%`) : (N.left = `${i}${V.toFixed(2)}px)`, N.top = `${i}${Q.toFixed(2)}px)`), N.fontSize = `${i}${(c(wl, BZ) * s).toFixed(2)}px)`, N.fontFamily = n, d.fontSize = s, l.setAttribute("role", "presentation"), l.textContent = U.str, l.dir = U.dir, c(this, da) && (l.dataset.fontName = F.fontSubstitutionLoadedName || U.fontName), Z !== 0 && (d.angle = Z * (180 / Math.PI));
let e = !1;
if (U.str.length > 1)
e = !0;
else if (U.str !== " " && U.transform[0] !== U.transform[3]) {
const J = Math.abs(U.transform[0]), M = Math.abs(U.transform[3]);
J !== M && Math.max(J, M) / Math.min(J, M) > 1.5 && (e = !0);
}
if (e && (d.canvasWidth = F.vertical ? U.height : U.width), c(this, ca).set(l, d), c(this, Dt).div = l, c(this, Dt).properties = d, h(this, aZ, Qi).call(this, c(this, Dt)), d.hasText && c(this, CU).append(l), d.hasEOL) {
const J = document.createElement("br");
J.setAttribute("role", "presentation"), c(this, CU).append(J);
}
}, Qi = function(U) {
var n;
const {
div: l,
properties: d,
ctx: t
} = U, {
style: Z
} = l;
let F = "";
if (c(wl, BZ) > 1 && (F = `scale(${1 / c(wl, BZ)})`), d.canvasWidth !== 0 && d.hasText) {
const {
fontFamily: s
} = Z, {
canvasWidth: W,
fontSize: V
} = d;
h(n = wl, sd, ii).call(n, t, V * c(this, pZ), s);
const {
width: Q
} = t.measureText(l.textContent);
Q > 0 && (F = `scaleX(${W * c(this, pZ) / Q}) ${F}`);
}
d.angle !== 0 && (F = `rotate(${d.angle}deg) ${F}`), F.length > 0 && (Z.transform = F);
}, sd = new WeakSet(), PW = function(U = null) {
let l = c(this, fF).get(U || (U = ""));
if (!l) {
const d = document.createElement("canvas");
d.className = "hiddenCanvasElement", d.lang = U, document.body.append(d), l = d.getContext("2d", {
alpha: !1,
willReadFrequently: !0
}), c(this, fF).set(U, l), c(this, sa).set(l, {
size: 0,
family: ""
});
}
return l;
}, ii = function(U, l, d) {
const t = c(this, sa).get(U);
l === t.size && d === t.family || (U.font = `${l}px ${d}`, t.size = l, t.family = d);
}, lh = function() {
if (c(this, BZ) !== null)
return;
const U = document.createElement("div");
U.style.opacity = 0, U.style.lineHeight = 1, U.style.fontSize = "1px", U.style.position = "absolute", U.textContent = "X", document.body.append(U), R(this, BZ, U.getBoundingClientRect().height), U.remove();
}, Uh = function(U, l) {
const d = c(this, PF).get(U);
if (d)
return d;
const t = h(this, sd, PW).call(this, l);
t.canvas.width = t.canvas.height = DU, h(this, sd, ii).call(this, t, DU, U);
const Z = t.measureText("");
let F = Z.fontBoundingBoxAscent, n = Math.abs(Z.fontBoundingBoxDescent);
if (F) {
const V = F / (F + n);
return c(this, PF).set(U, V), t.canvas.width = t.canvas.height = 0, V;
}
t.strokeStyle = "red", t.clearRect(0, 0, DU, DU), t.strokeText("g", 0, 0);
let s = t.getImageData(0, 0, DU, DU).data;
n = 0;
for (let V = s.length - 1 - 3; V >= 0; V -= 4)
if (s[V] > 0) {
n = Math.ceil(V / 4 / DU);
break;
}
t.clearRect(0, 0, DU, DU), t.strokeText("A", 0, DU), s = t.getImageData(0, 0, DU, DU).data, F = 0;
for (let V = 0, Q = s.length; V < Q; V += 4)
if (s[V] > 0) {
F = DU - Math.floor(V / 4 / DU);
break;
}
t.canvas.width = t.canvas.height = 0;
const W = F ? F / (F + n) : e2;
return c(this, PF).set(U, W), W;
}, b(wl, sd), b(wl, PF, /* @__PURE__ */ new Map()), b(wl, fF, /* @__PURE__ */ new Map()), b(wl, sa, /* @__PURE__ */ new WeakMap()), b(wl, BZ, null), b(wl, Bc, /* @__PURE__ */ new Set()), wl);
class hs {
static textContent(U) {
const l = [], d = {
items: l,
styles: /* @__PURE__ */ Object.create(null)
};
function t(Z) {
var s;
if (!Z)
return;
let F = null;
const n = Z.name;
if (n === "#text")
F = Z.value;
else if (hs.shouldBuildText(n))
(s = Z == null ? void 0 : Z.attributes) != null && s.textContent ? F = Z.attributes.textContent : Z.value && (F = Z.value);
else return;
if (F !== null && l.push({
str: F
}), !!Z.children)
for (const W of Z.children)
t(W);
}
return t(U), d;
}
static shouldBuildText(U) {
return !(U === "textarea" || U === "input" || U === "option" || U === "select");
}
}
const h2 = 65536, b2 = 100, m2 = 5e3, M2 = XU ? km : ym, J2 = XU ? Im : we, G2 = XU ? Lm : zm, S2 = XU ? Dm : ge;
function T2(a = {}) {
typeof a == "string" || a instanceof URL ? a = {
url: a
} : (a instanceof ArrayBuffer || ArrayBuffer.isView(a)) && (a = {
data: a
});
const U = new Ri(), {
docId: l
} = U, d = a.url ? X2(a.url) : null, t = a.data ? u2(a.data) : null, Z = a.httpHeaders || null, F = a.withCredentials === !0, n = a.password ?? null, s = a.range instanceof dh ? a.range : null, W = Number.isInteger(a.rangeChunkSize) && a.rangeChunkSize > 0 ? a.rangeChunkSize : h2;
let V = a.worker instanceof AW ? a.worker : null;
const Q = a.verbosity, i = typeof a.docBaseUrl == "string" && !sQ(a.docBaseUrl) ? a.docBaseUrl : null, N = typeof a.cMapUrl == "string" ? a.cMapUrl : null, e = a.cMapPacked !== !1, m = a.CMapReaderFactory || J2, J = typeof a.standardFontDataUrl == "string" ? a.standardFontDataUrl : null, M = a.StandardFontDataFactory || S2, G = a.stopAtErrors !== !0, S = Number.isInteger(a.maxImageSize) && a.maxImageSize > -1 ? a.maxImageSize : -1, T = a.isEvalSupported !== !1, u = typeof a.isOffscreenCanvasSupported == "boolean" ? a.isOffscreenCanvasSupported : !XU, Y = typeof a.isImageDecoderSupported == "boolean" ? a.isImageDecoderSupported : !XU && (LU.platform.isFirefox || !globalThis.chrome), o = Number.isInteger(a.canvasMaxAreaInBytes) ? a.canvasMaxAreaInBytes : -1, B = typeof a.disableFontFace == "boolean" ? a.disableFontFace : XU, X = a.fontExtraProperties === !0, p = a.enableXfa === !0, y = a.ownerDocument || globalThis.document, r = a.disableRange === !0, D = a.disableStream === !0, E = a.disableAutoFetch === !0, P = a.pdfBug === !0, k = a.CanvasFactory || M2, I = a.FilterFactory || G2, q = a.enableHWA === !0, sl = s ? s.length : a.length ?? NaN, Gl = typeof a.useSystemFonts == "boolean" ? a.useSystemFonts : !XU && !B, pl = typeof a.useWorkerFetch == "boolean" ? a.useWorkerFetch : m === we && M === ge && N && J && jn(N, document.baseURI) && jn(J, document.baseURI), ml = null;
am(Q);
const Sl = {
canvasFactory: new k({
ownerDocument: y,
enableHWA: q
}),
filterFactory: new I({
docId: l,
ownerDocument: y
}),
cMapReaderFactory: pl ? null : new m({
baseUrl: N,
isCompressed: e
}),
standardFontDataFactory: pl ? null : new M({
baseUrl: J
})
};
if (!V) {
const x = {
verbosity: Q,
port: bF.workerPort
};
V = x.port ? AW.fromPort(x) : new AW(x), U._worker = V;
}
const xd = {
docId: l,
apiVersion: "4.10.38",
data: t,
password: n,
disableAutoFetch: E,
rangeChunkSize: W,
length: sl,
docBaseUrl: i,
enableXfa: p,
evaluatorOptions: {
maxImageSize: S,
disableFontFace: B,
ignoreErrors: G,
isEvalSupported: T,
isOffscreenCanvasSupported: u,
isImageDecoderSupported: Y,
canvasMaxAreaInBytes: o,
fontExtraProperties: X,
useSystemFonts: Gl,
cMapUrl: pl ? N : null,
standardFontDataUrl: pl ? J : null
}
}, jd = {
disableFontFace: B,
fontExtraProperties: X,
ownerDocument: y,
pdfBug: P,
styleElement: ml,
loadingParams: {
disableAutoFetch: E,
enableXfa: p
}
};
return V.promise.then(function() {
if (U.destroyed)
throw new Error("Loading aborted");
if (V.destroyed)
throw new Error("Worker was destroyed");
const x = V.messageHandler.sendWithPromise("GetDocRequest", xd, t ? [t.buffer] : null);
let L;
if (s)
L = new $m(s, {
disableRange: r,
disableStream: D
});
else if (!t) {
if (!d)
throw new Error("getDocument - no `url` parameter provided.");
let w;
if (XU)
if (jn(d)) {
if (typeof fetch > "u" || typeof Response > "u" || !("body" in Response.prototype))
throw new Error("getDocument - the Fetch API was disabled in Node.js, see `--no-experimental-fetch`.");
w = VN;
} else
w = Q2;
else
w = jn(d) ? VN : n2;
L = new w({
url: d,
length: sl,
httpHeaders: Z,
withCredentials: F,
rangeChunkSize: W,
disableRange: r,
disableStream: D
});
}
return x.then((w) => {
if (U.destroyed)
throw new Error("Loading aborted");
if (V.destroyed)
throw new Error("Worker was destroyed");
const dl = new Hn(l, w, V.port), Tl = new B2(dl, U, L, jd, Sl);
U._transport = Tl, dl.send("Ready", null);
});
}).catch(U._capability.reject), U;
}
function X2(a) {
if (a instanceof URL)
return a.href;
try {
return new URL(a, window.location).href;
} catch {
if (XU && typeof a == "string")
return a;
}
throw new Error("Invalid PDF url data: either string or URL-object is expected in the url property.");
}
function u2(a) {
if (XU && typeof Buffer < "u" && a instanceof Buffer)
throw new Error("Please provide binary data as `Uint8Array`, rather than `Buffer`.");
if (a instanceof Uint8Array && a.byteLength === a.buffer.byteLength)
return a;
if (typeof a == "string")
return cQ(a);
if (a instanceof ArrayBuffer || ArrayBuffer.isView(a) || typeof a == "object" && !isNaN(a == null ? void 0 : a.length))
return new Uint8Array(a);
throw new Error("Invalid PDF binary data: either TypedArray, string, or array-like object is expected in the data property.");
}
function QN(a) {
return typeof a == "object" && Number.isInteger(a == null ? void 0 : a.num) && a.num >= 0 && Number.isInteger(a == null ? void 0 : a.gen) && a.gen >= 0;
}
var OV;
const gV = class gV {
constructor() {
this._capability = Promise.withResolvers(), this._transport = null, this._worker = null, this.docId = `d${eU(gV, OV)._++}`, this.destroyed = !1, this.onPassword = null, this.onProgress = null;
}
get promise() {
return this._capability.promise;
}
async destroy() {
var U, l, d, t;
this.destroyed = !0;
try {
(U = this._worker) != null && U.port && (this._worker._pendingDestroy = !0), await ((l = this._transport) == null ? void 0 : l.destroy());
} catch (Z) {
throw (d = this._worker) != null && d.port && delete this._worker._pendingDestroy, Z;
}
this._transport = null, (t = this._worker) == null || t.destroy(), this._worker = null;
}
};
OV = new WeakMap(), b(gV, OV, 0);
let Ri = gV, dh = class {
constructor(U, l, d = !1, t = null) {
this.length = U, this.initialData = l, this.progressiveDone = d, this.contentDispositionFilename = t, this._rangeListeners = [], this._progressListeners = [], this._progressiveReadListeners = [], this._progressiveDoneListeners = [], this._readyCapability = Promise.withResolvers();
}
addRangeListener(U) {
this._rangeListeners.push(U);
}
addProgressListener(U) {
this._progressListeners.push(U);
}
addProgressiveReadListener(U) {
this._progressiveReadListeners.push(U);
}
addProgressiveDoneListener(U) {
this._progressiveDoneListeners.push(U);
}
onDataRange(U, l) {
for (const d of this._rangeListeners)
d(U, l);
}
onDataProgress(U, l) {
this._readyCapability.promise.then(() => {
for (const d of this._progressListeners)
d(U, l);
});
}
onDataProgressiveRead(U) {
this._readyCapability.promise.then(() => {
for (const l of this._progressiveReadListeners)
l(U);
});
}
onDataProgressiveDone() {
this._readyCapability.promise.then(() => {
for (const U of this._progressiveDoneListeners)
U();
});
}
transportReady() {
this._readyCapability.resolve();
}
requestDataRange(U, l) {
ul("Abstract method PDFDataRangeTransport.requestDataRange");
}
abort() {
}
};
class Y2 {
constructor(U, l) {
this._pdfInfo = U, this._transport = l;
}
get annotationStorage() {
return this._transport.annotationStorage;
}
get canvasFactory() {
return this._transport.canvasFactory;
}
get filterFactory() {
return this._transport.filterFactory;
}
get numPages() {
return this._pdfInfo.numPages;
}
get fingerprints() {
return this._pdfInfo.fingerprints;
}
get isPureXfa() {
return Wl(this, "isPureXfa", !!this._transport._htmlForXfa);
}
get allXfaHtml() {
return this._transport._htmlForXfa;
}
getPage(U) {
return this._transport.getPage(U);
}
getPageIndex(U) {
return this._transport.getPageIndex(U);
}
getDestinations() {
return this._transport.getDestinations();
}
getDestination(U) {
return this._transport.getDestination(U);
}
getPageLabels() {
return this._transport.getPageLabels();
}
getPageLayout() {
return this._transport.getPageLayout();
}
getPageMode() {
return this._transport.getPageMode();
}
getViewerPreferences() {
return this._transport.getViewerPreferences();
}
getOpenAction() {
return this._transport.getOpenAction();
}
getAttachments() {
return this._transport.getAttachments();
}
getJSActions() {
return this._transport.getDocJSActions();
}
getOutline() {
return this._transport.getOutline();
}
getOptionalContentConfig({
intent: U = "display"
} = {}) {
const {
renderingIntent: l
} = this._transport.getRenderingIntent(U);
return this._transport.getOptionalContentConfig(l);
}
getPermissions() {
return this._transport.getPermissions();
}
getMetadata() {
return this._transport.getMetadata();
}
getMarkInfo() {
return this._transport.getMarkInfo();
}
getData() {
return this._transport.getData();
}
saveDocument() {
return this._transport.saveDocument();
}
getDownloadInfo() {
return this._transport.downloadInfoCapability.promise;
}
cleanup(U = !1) {
return this._transport.startCleanup(U || this.isPureXfa);
}
destroy() {
return this.loadingTask.destroy();
}
cachedPageNumber(U) {
return this._transport.cachedPageNumber(U);
}
get loadingParams() {
return this._transport.loadingParams;
}
get loadingTask() {
return this._transport.loadingTask;
}
getFieldObjects() {
return this._transport.getFieldObjects();
}
hasJSActions() {
return this._transport.hasJSActions();
}
getCalculationOrderIds() {
return this._transport.getCalculationOrderIds();
}
}
var yZ, Et, Md, A0, fW;
class o2 {
constructor(U, l, d, t = !1) {
b(this, Md);
b(this, yZ, null);
b(this, Et, !1);
this._pageIndex = U, this._pageInfo = l, this._transport = d, this._stats = t ? new qR() : null, this._pdfBug = t, this.commonObjs = d.commonObjs, this.objs = new th(), this._maybeCleanupAfterRender = !1, this._intentStates = /* @__PURE__ */ new Map(), this.destroyed = !1;
}
get pageNumber() {
return this._pageIndex + 1;
}
get rotate() {
return this._pageInfo.rotate;
}
get ref() {
return this._pageInfo.ref;
}
get userUnit() {
return this._pageInfo.userUnit;
}
get view() {
return this._pageInfo.view;
}
getViewport({
scale: U,
rotation: l = this.rotate,
offsetX: d = 0,
offsetY: t = 0,
dontFlip: Z = !1
} = {}) {
return new JW({
viewBox: this.view,
userUnit: this.userUnit,
scale: U,
rotation: l,
offsetX: d,
offsetY: t,
dontFlip: Z
});
}
getAnnotations({
intent: U = "display"
} = {}) {
const {
renderingIntent: l
} = this._transport.getRenderingIntent(U);
return this._transport.getAnnotations(this._pageIndex, l);
}
getJSActions() {
return this._transport.getPageJSActions(this._pageIndex);
}
get filterFactory() {
return this._transport.filterFactory;
}
get isPureXfa() {
return Wl(this, "isPureXfa", !!this._transport._htmlForXfa);
}
async getXfa() {
var U;
return ((U = this._transport._htmlForXfa) == null ? void 0 : U.children[this._pageIndex]) || null;
}
render({
canvasContext: U,
viewport: l,
intent: d = "display",
annotationMode: t = RZ.ENABLE,
transform: Z = null,
background: F = null,
optionalContentConfigPromise: n = null,
annotationCanvasMap: s = null,
pageColors: W = null,
printAnnotationStorage: V = null,
isEditing: Q = !1
}) {
var T, u;
(T = this._stats) == null || T.time("Overall");
const i = this._transport.getRenderingIntent(d, t, V, Q), {
renderingIntent: N,
cacheKey: e
} = i;
R(this, Et, !1), h(this, Md, fW).call(this), n || (n = this._transport.getOptionalContentConfig(N));
let m = this._intentStates.get(e);
m || (m = /* @__PURE__ */ Object.create(null), this._intentStates.set(e, m)), m.streamReaderCancelTimeout && (clearTimeout(m.streamReaderCancelTimeout), m.streamReaderCancelTimeout = null);
const J = !!(N & Fd.PRINT);
m.displayReadyCapability || (m.displayReadyCapability = Promise.withResolvers(), m.operatorList = {
fnArray: [],
argsArray: [],
lastChunk: !1,
separateAnnots: null
}, (u = this._stats) == null || u.time("Page Request"), this._pumpOperatorList(i));
const M = (Y) => {
var o;
m.renderTasks.delete(G), (this._maybeCleanupAfterRender || J) && R(this, Et, !0), h(this, Md, A0).call(this, !J), Y ? (G.capability.reject(Y), this._abortOperatorList({
intentState: m,
reason: Y instanceof Error ? Y : new Error(Y)
})) : G.capability.resolve(), this._stats && (this._stats.timeEnd("Rendering"), this._stats.timeEnd("Overall"), (o = globalThis.Stats) != null && o.enabled && globalThis.Stats.add(this.pageNumber, this._stats));
}, G = new ei({
callback: M,
params: {
canvasContext: U,
viewport: l,
transform: Z,
background: F
},
objs: this.objs,
commonObjs: this.commonObjs,
annotationCanvasMap: s,
operatorList: m.operatorList,
pageIndex: this._pageIndex,
canvasFactory: this._transport.canvasFactory,
filterFactory: this._transport.filterFactory,
useRequestAnimationFrame: !J,
pdfBug: this._pdfBug,
pageColors: W
});
(m.renderTasks || (m.renderTasks = /* @__PURE__ */ new Set())).add(G);
const S = G.task;
return Promise.all([m.displayReadyCapability.promise, n]).then(([Y, o]) => {
var B;
if (this.destroyed) {
M();
return;
}
if ((B = this._stats) == null || B.time("Rendering"), !(o.renderingIntent & N))
throw new Error("Must use the same `intent`-argument when calling the `PDFPageProxy.render` and `PDFDocumentProxy.getOptionalContentConfig` methods.");
G.initializeGraphics({
transparency: Y,
optionalContentConfig: o
}), G.operatorListChanged();
}).catch(M), S;
}
getOperatorList({
intent: U = "display",
annotationMode: l = RZ.ENABLE,
printAnnotationStorage: d = null,
isEditing: t = !1
} = {}) {
var W;
function Z() {
n.operatorList.lastChunk && (n.opListReadCapability.resolve(n.operatorList), n.renderTasks.delete(s));
}
const F = this._transport.getRenderingIntent(U, l, d, t, !0);
let n = this._intentStates.get(F.cacheKey);
n || (n = /* @__PURE__ */ Object.create(null), this._intentStates.set(F.cacheKey, n));
let s;
return n.opListReadCapability || (s = /* @__PURE__ */ Object.create(null), s.operatorListChanged = Z, n.opListReadCapability = Promise.withResolvers(), (n.renderTasks || (n.renderTasks = /* @__PURE__ */ new Set())).add(s), n.operatorList = {
fnArray: [],
argsArray: [],
lastChunk: !1,
separateAnnots: null
}, (W = this._stats) == null || W.time("Page Request"), this._pumpOperatorList(F)), n.opListReadCapability.promise;
}
streamTextContent({
includeMarkedContent: U = !1,
disableNormalization: l = !1
} = {}) {
return this._transport.messageHandler.sendWithStream("GetTextContent", {
pageIndex: this._pageIndex,
includeMarkedContent: U === !0,
disableNormalization: l === !0
}, {
highWaterMark: 100,
size(t) {
return t.items.length;
}
});
}
getTextContent(U = {}) {
if (this._transport._htmlForXfa)
return this.getXfa().then((d) => hs.textContent(d));
const l = this.streamTextContent(U);
return new Promise(function(d, t) {
function Z() {
F.read().then(function({
value: s,
done: W
}) {
if (W) {
d(n);
return;
}
n.lang ?? (n.lang = s.lang), Object.assign(n.styles, s.styles), n.items.push(...s.items), Z();
}, t);
}
const F = l.getReader(), n = {
items: [],
styles: /* @__PURE__ */ Object.create(null),
lang: null
};
Z();
});
}
getStructTree() {
return this._transport.getStructTree(this._pageIndex);
}
_destroy() {
this.destroyed = !0;
const U = [];
for (const l of this._intentStates.values())
if (this._abortOperatorList({
intentState: l,
reason: new Error("Page was destroyed."),
force: !0
}), !l.opListReadCapability)
for (const d of l.renderTasks)
U.push(d.completed), d.cancel();
return this.objs.clear(), R(this, Et, !1), h(this, Md, fW).call(this), Promise.all(U);
}
cleanup(U = !1) {
R(this, Et, !0);
const l = h(this, Md, A0).call(this, !1);
return U && l && this._stats && (this._stats = new qR()), l;
}
_startRenderPage(U, l) {
var t, Z;
const d = this._intentStates.get(l);
d && ((t = this._stats) == null || t.timeEnd("Page Request"), (Z = d.displayReadyCapability) == null || Z.resolve(U));
}
_renderPageChunk(U, l) {
for (let d = 0, t = U.length; d < t; d++)
l.operatorList.fnArray.push(U.fnArray[d]), l.operatorList.argsArray.push(U.argsArray[d]);
l.operatorList.lastChunk = U.lastChunk, l.operatorList.separateAnnots = U.separateAnnots;
for (const d of l.renderTasks)
d.operatorListChanged();
U.lastChunk && h(this, Md, A0).call(this, !0);
}
_pumpOperatorList({
renderingIntent: U,
cacheKey: l,
annotationStorageSerializable: d,
modifiedIds: t
}) {
const {
map: Z,
transfer: F
} = d, s = this._transport.messageHandler.sendWithStream("GetOperatorList", {
pageIndex: this._pageIndex,
intent: U,
cacheKey: l,
annotationStorage: Z,
modifiedIds: t
}, F).getReader(), W = this._intentStates.get(l);
W.streamReader = s;
const V = () => {
s.read().then(({
value: Q,
done: i
}) => {
if (i) {
W.streamReader = null;
return;
}
this._transport.destroyed || (this._renderPageChunk(Q, W), V());
}, (Q) => {
if (W.streamReader = null, !this._transport.destroyed) {
if (W.operatorList) {
W.operatorList.lastChunk = !0;
for (const i of W.renderTasks)
i.operatorListChanged();
h(this, Md, A0).call(this, !0);
}
if (W.displayReadyCapability)
W.displayReadyCapability.reject(Q);
else if (W.opListReadCapability)
W.opListReadCapability.reject(Q);
else
throw Q;
}
});
};
V();
}
_abortOperatorList({
intentState: U,
reason: l,
force: d = !1
}) {
if (U.streamReader) {
if (U.streamReaderCancelTimeout && (clearTimeout(U.streamReaderCancelTimeout), U.streamReaderCancelTimeout = null), !d) {
if (U.renderTasks.size > 0)
return;
if (l instanceof yR) {
let t = b2;
l.extraDelay > 0 && l.extraDelay < 1e3 && (t += l.extraDelay), U.streamReaderCancelTimeout = setTimeout(() => {
U.streamReaderCancelTimeout = null, this._abortOperatorList({
intentState: U,
reason: l,
force: !0
});
}, t);
return;
}
}
if (U.streamReader.cancel(new WF(l.message)).catch(() => {
}), U.streamReader = null, !this._transport.destroyed) {
for (const [t, Z] of this._intentStates)
if (Z === U) {
this._intentStates.delete(t);
break;
}
this.cleanup();
}
}
}
get stats() {
return this._stats;
}
}
yZ = new WeakMap(), Et = new WeakMap(), Md = new WeakSet(), A0 = function(U = !1) {
if (h(this, Md, fW).call(this), !c(this, Et) || this.destroyed)
return !1;
if (U)
return R(this, yZ, setTimeout(() => {
R(this, yZ, null), h(this, Md, A0).call(this, !1);
}, m2)), !1;
for (const {
renderTasks: l,
operatorList: d
} of this._intentStates.values())
if (l.size > 0 || !d.lastChunk)
return !1;
return this._intentStates.clear(), this.objs.clear(), R(this, Et, !1), !0;
}, fW = function() {
c(this, yZ) && (clearTimeout(c(this, yZ)), R(this, yZ, null));
};
var rt, KV;
class p2 {
constructor() {
b(this, rt, /* @__PURE__ */ new Map());
b(this, KV, Promise.resolve());
}
postMessage(U, l) {
const d = {
data: structuredClone(U, l ? {
transfer: l
} : null)
};
c(this, KV).then(() => {
for (const [t] of c(this, rt))
t.call(this, d);
});
}
addEventListener(U, l, d = null) {
let t = null;
if ((d == null ? void 0 : d.signal) instanceof AbortSignal) {
const {
signal: Z
} = d;
if (Z.aborted) {
Ul("LoopbackPort - cannot use an `aborted` signal.");
return;
}
const F = () => this.removeEventListener(U, l);
t = () => Z.removeEventListener("abort", F), Z.addEventListener("abort", F);
}
c(this, rt).set(l, t);
}
removeEventListener(U, l) {
const d = c(this, rt).get(l);
d == null || d(), c(this, rt).delete(l);
}
terminate() {
for (const [, U] of c(this, rt))
U == null || U();
c(this, rt).clear();
}
}
rt = new WeakMap(), KV = new WeakMap();
var Xl, HV, AF, _F, yc, _W, zc, qW;
let AW = (Xl = class {
constructor({
name: U = null,
port: l = null,
verbosity: d = Wm()
} = {}) {
b(this, yc);
var t;
if (this.name = U, this.destroyed = !1, this.verbosity = d, this._readyCapability = Promise.withResolvers(), this._port = null, this._webWorker = null, this._messageHandler = null, l) {
if ((t = c(Xl, _F)) != null && t.has(l))
throw new Error("Cannot use more than one PDFWorker per port.");
(c(Xl, _F) || R(Xl, _F, /* @__PURE__ */ new WeakMap())).set(l, this), this._initializeFromPort(l);
return;
}
this._initialize();
}
get promise() {
return this._readyCapability.promise;
}
get port() {
return this._port;
}
get messageHandler() {
return this._messageHandler;
}
_initializeFromPort(U) {
this._port = U, this._messageHandler = new Hn("main", "worker", U), this._messageHandler.on("ready", function() {
}), h(this, yc, _W).call(this);
}
_initialize() {
if (c(Xl, AF) || c(Xl, zc, qW)) {
this._setupFakeWorker();
return;
}
let {
workerSrc: U
} = Xl;
try {
Xl._isSameOrigin(window.location.href, U) || (U = Xl._createCDNWrapper(new URL(U, window.location).href));
const l = new Worker(U, {
type: "module"
}), d = new Hn("main", "worker", l), t = () => {
Z.abort(), d.destroy(), l.terminate(), this.destroyed ? this._readyCapability.reject(new Error("Worker was destroyed")) : this._setupFakeWorker();
}, Z = new AbortController();
l.addEventListener("error", () => {
this._webWorker || t();
}, {
signal: Z.signal
}), d.on("test", (n) => {
if (Z.abort(), this.destroyed || !n) {
t();
return;
}
this._messageHandler = d, this._port = l, this._webWorker = l, h(this, yc, _W).call(this);
}), d.on("ready", (n) => {
if (Z.abort(), this.destroyed) {
t();
return;
}
try {
F();
} catch {
this._setupFakeWorker();
}
});
const F = () => {
const n = new Uint8Array();
d.send("test", n, [n.buffer]);
};
F();
return;
} catch {
FQ("The worker has been disabled.");
}
this._setupFakeWorker();
}
_setupFakeWorker() {
c(Xl, AF) || (Ul("Setting up fake worker."), R(Xl, AF, !0)), Xl._setupFakeWorkerGlobal.then((U) => {
if (this.destroyed) {
this._readyCapability.reject(new Error("Worker was destroyed"));
return;
}
const l = new p2();
this._port = l;
const d = `fake${eU(Xl, HV)._++}`, t = new Hn(d + "_worker", d, l);
U.setup(t, l), this._messageHandler = new Hn(d, d + "_worker", l), h(this, yc, _W).call(this);
}).catch((U) => {
this._readyCapability.reject(new Error(`Setting up fake worker failed: "${U.message}".`));
});
}
destroy() {
var U, l, d;
this.destroyed = !0, (U = this._webWorker) == null || U.terminate(), this._webWorker = null, (l = c(Xl, _F)) == null || l.delete(this._port), this._port = null, (d = this._messageHandler) == null || d.destroy(), this._messageHandler = null;
}
static fromPort(U) {
var d;
if (!(U != null && U.port))
throw new Error("PDFWorker.fromPort - invalid method signature.");
const l = (d = c(this, _F)) == null ? void 0 : d.get(U.port);
if (l) {
if (l._pendingDestroy)
throw new Error("PDFWorker.fromPort - the worker is being destroyed.\nPlease remember to await `PDFDocumentLoadingTask.destroy()`-calls.");
return l;
}
return new Xl(U);
}
static get workerSrc() {
if (bF.workerSrc)
return bF.workerSrc;
throw new Error('No "GlobalWorkerOptions.workerSrc" specified.');
}
static get _setupFakeWorkerGlobal() {
return Wl(this, "_setupFakeWorkerGlobal", (async () => c(this, zc, qW) ? c(this, zc, qW) : (await import(
/*webpackIgnore: true*/
this.workerSrc
)).WorkerMessageHandler)());
}
}, HV = new WeakMap(), AF = new WeakMap(), _F = new WeakMap(), yc = new WeakSet(), _W = function() {
this._readyCapability.resolve(), this._messageHandler.send("configure", {
verbosity: this.verbosity
});
}, zc = new WeakSet(), qW = function() {
var U;
try {
return ((U = globalThis.pdfjsWorker) == null ? void 0 : U.WorkerMessageHandler) || null;
} catch {
return null;
}
}, b(Xl, zc), b(Xl, HV, 0), b(Xl, AF, !1), b(Xl, _F), XU && (R(Xl, AF, !0), bF.workerSrc || (bF.workerSrc = "./pdf.worker.mjs")), Xl._isSameOrigin = (U, l) => {
let d;
try {
if (d = new URL(U), !d.origin || d.origin === "null")
return !1;
} catch {
return !1;
}
const t = new URL(l, d);
return d.origin === t.origin;
}, Xl._createCDNWrapper = (U) => {
const l = `await import("${U}");`;
return URL.createObjectURL(new Blob([l], {
type: "text/javascript"
}));
}, Xl);
var Ct, tt, Lc, kc, wt, qF, _n;
class B2 {
constructor(U, l, d, t, Z) {
b(this, qF);
b(this, Ct, /* @__PURE__ */ new Map());
b(this, tt, /* @__PURE__ */ new Map());
b(this, Lc, /* @__PURE__ */ new Map());
b(this, kc, /* @__PURE__ */ new Map());
b(this, wt, null);
this.messageHandler = U, this.loadingTask = l, this.commonObjs = new th(), this.fontLoader = new pm({
ownerDocument: t.ownerDocument,
styleElement: t.styleElement
}), this.loadingParams = t.loadingParams, this._params = t, this.canvasFactory = Z.canvasFactory, this.filterFactory = Z.filterFactory, this.cMapReaderFactory = Z.cMapReaderFactory, this.standardFontDataFactory = Z.standardFontDataFactory, this.destroyed = !1, this.destroyCapability = null, this._networkStream = d, this._fullReader = null, this._lastProgress = null, this.downloadInfoCapability = Promise.withResolvers(), this.setupMessageHandler();
}
get annotationStorage() {
return Wl(this, "annotationStorage", new kR());
}
getRenderingIntent(U, l = RZ.ENABLE, d = null, t = !1, Z = !1) {
let F = Fd.DISPLAY, n = di;
switch (U) {
case "any":
F = Fd.ANY;
break;
case "display":
break;
case "print":
F = Fd.PRINT;
break;
default:
Ul(`getRenderingIntent - invalid intent: ${U}`);
}
const s = F & Fd.PRINT && d instanceof ke ? d : this.annotationStorage;
switch (l) {
case RZ.DISABLE:
F += Fd.ANNOTATIONS_DISABLE;
break;
case RZ.ENABLE:
break;
case RZ.ENABLE_FORMS:
F += Fd.ANNOTATIONS_FORMS;
break;
case RZ.ENABLE_STORAGE:
F += Fd.ANNOTATIONS_STORAGE, n = s.serializable;
break;
default:
Ul(`getRenderingIntent - invalid annotationMode: ${l}`);
}
t && (F += Fd.IS_EDITING), Z && (F += Fd.OPLIST);
const {
ids: W,
hash: V
} = s.modifiedIds, Q = [F, n.hash, V];
return {
renderingIntent: F,
cacheKey: Q.join("_"),
annotationStorageSerializable: n,
modifiedIds: W
};
}
destroy() {
var d;
if (this.destroyCapability)
return this.destroyCapability.promise;
this.destroyed = !0, this.destroyCapability = Promise.withResolvers(), (d = c(this, wt)) == null || d.reject(new Error("Worker was destroyed during onPassword callback"));
const U = [];
for (const t of c(this, tt).values())
U.push(t._destroy());
c(this, tt).clear(), c(this, Lc).clear(), c(this, kc).clear(), this.hasOwnProperty("annotationStorage") && this.annotationStorage.resetModified();
const l = this.messageHandler.sendWithPromise("Terminate", null);
return U.push(l), Promise.all(U).then(() => {
var t, Z;
this.commonObjs.clear(), this.fontLoader.clear(), c(this, Ct).clear(), this.filterFactory.destroy(), Vi.cleanup(), (t = this._networkStream) == null || t.cancelAllRequests(new WF("Worker was terminated.")), (Z = this.messageHandler) == null || Z.destroy(), this.messageHandler = null, this.destroyCapability.resolve();
}, this.destroyCapability.reject), this.destroyCapability.promise;
}
setupMessageHandler() {
const {
messageHandler: U,
loadingTask: l
} = this;
U.on("GetReader", (d, t) => {
Kl(this._networkStream, "GetReader - no `IPDFStream` instance available."), this._fullReader = this._networkStream.getFullReader(), this._fullReader.onProgress = (Z) => {
this._lastProgress = {
loaded: Z.loaded,
total: Z.total
};
}, t.onPull = () => {
this._fullReader.read().then(function({
value: Z,
done: F
}) {
if (F) {
t.close();
return;
}
Kl(Z instanceof ArrayBuffer, "GetReader - expected an ArrayBuffer."), t.enqueue(new Uint8Array(Z), 1, [Z]);
}).catch((Z) => {
t.error(Z);
});
}, t.onCancel = (Z) => {
this._fullReader.cancel(Z), t.ready.catch((F) => {
if (!this.destroyed)
throw F;
});
};
}), U.on("ReaderHeadersReady", async (d) => {
var n;
await this._fullReader.headersReady;
const {
isStreamingSupported: t,
isRangeSupported: Z,
contentLength: F
} = this._fullReader;
return (!t || !Z) && (this._lastProgress && ((n = l.onProgress) == null || n.call(l, this._lastProgress)), this._fullReader.onProgress = (s) => {
var W;
(W = l.onProgress) == null || W.call(l, {
loaded: s.loaded,
total: s.total
});
}), {
isStreamingSupported: t,
isRangeSupported: Z,
contentLength: F
};
}), U.on("GetRangeReader", (d, t) => {
Kl(this._networkStream, "GetRangeReader - no `IPDFStream` instance available.");
const Z = this._networkStream.getRangeReader(d.begin, d.end);
if (!Z) {
t.close();
return;
}
t.onPull = () => {
Z.read().then(function({
value: F,
done: n
}) {
if (n) {
t.close();
return;
}
Kl(F instanceof ArrayBuffer, "GetRangeReader - expected an ArrayBuffer."), t.enqueue(new Uint8Array(F), 1, [F]);
}).catch((F) => {
t.error(F);
});
}, t.onCancel = (F) => {
Z.cancel(F), t.ready.catch((n) => {
if (!this.destroyed)
throw n;
});
};
}), U.on("GetDoc", ({
pdfInfo: d
}) => {
this._numPages = d.numPages, this._htmlForXfa = d.htmlForXfa, delete d.htmlForXfa, l._capability.resolve(new Y2(d, this));
}), U.on("DocException", (d) => {
l._capability.reject(EU(d));
}), U.on("PasswordRequest", (d) => {
R(this, wt, Promise.withResolvers());
try {
if (!l.onPassword)
throw EU(d);
const t = (Z) => {
Z instanceof Error ? c(this, wt).reject(Z) : c(this, wt).resolve({
password: Z
});
};
l.onPassword(t, d.code);
} catch (t) {
c(this, wt).reject(t);
}
return c(this, wt).promise;
}), U.on("DataLoaded", (d) => {
var t;
(t = l.onProgress) == null || t.call(l, {
loaded: d.length,
total: d.length
}), this.downloadInfoCapability.resolve(d);
}), U.on("StartRenderPage", (d) => {
if (this.destroyed)
return;
c(this, tt).get(d.pageIndex)._startRenderPage(d.transparency, d.cacheKey);
}), U.on("commonobj", ([d, t, Z]) => {
var F;
if (this.destroyed || this.commonObjs.has(d))
return null;
switch (t) {
case "Font":
const {
disableFontFace: n,
fontExtraProperties: s,
pdfBug: W
} = this._params;
if ("error" in Z) {
const N = Z.error;
Ul(`Error during font loading: ${N}`), this.commonObjs.resolve(d, N);
break;
}
const V = W && ((F = globalThis.FontInspector) != null && F.enabled) ? (N, e) => globalThis.FontInspector.fontAdded(N, e) : null, Q = new Bm(Z, {
disableFontFace: n,
fontExtraProperties: s,
inspectFont: V
});
this.fontLoader.bind(Q).catch(() => U.sendWithPromise("FontFallback", {
id: d
})).finally(() => {
!s && Q.data && (Q.data = null), this.commonObjs.resolve(d, Q);
});
break;
case "CopyLocalImage":
const {
imageRef: i
} = Z;
Kl(i, "The imageRef must be defined.");
for (const N of c(this, tt).values())
for (const [, e] of N.objs)
if ((e == null ? void 0 : e.ref) === i)
return e.dataLen ? (this.commonObjs.resolve(d, structuredClone(e)), e.dataLen) : null;
break;
case "FontPath":
case "Image":
case "Pattern":
this.commonObjs.resolve(d, Z);
break;
default:
throw new Error(`Got unknown common object type ${t}`);
}
return null;
}), U.on("obj", ([d, t, Z, F]) => {
var s;
if (this.destroyed)
return;
const n = c(this, tt).get(t);
if (!n.objs.has(d)) {
if (n._intentStates.size === 0) {
(s = F == null ? void 0 : F.bitmap) == null || s.close();
return;
}
switch (Z) {
case "Image":
n.objs.resolve(d, F), (F == null ? void 0 : F.dataLen) > Fm && (n._maybeCleanupAfterRender = !0);
break;
case "Pattern":
n.objs.resolve(d, F);
break;
default:
throw new Error(`Got unknown object type ${Z}`);
}
}
}), U.on("DocProgress", (d) => {
var t;
this.destroyed || (t = l.onProgress) == null || t.call(l, {
loaded: d.loaded,
total: d.total
});
}), U.on("FetchBuiltInCMap", async (d) => {
if (this.destroyed)
throw new Error("Worker was destroyed.");
if (!this.cMapReaderFactory)
throw new Error("CMapReaderFactory not initialized, see the `useWorkerFetch` parameter.");
return this.cMapReaderFactory.fetch(d);
}), U.on("FetchStandardFontData", async (d) => {
if (this.destroyed)
throw new Error("Worker was destroyed.");
if (!this.standardFontDataFactory)
throw new Error("StandardFontDataFactory not initialized, see the `useWorkerFetch` parameter.");
return this.standardFontDataFactory.fetch(d);
});
}
getData() {
return this.messageHandler.sendWithPromise("GetData", null);
}
saveDocument() {
var d;
this.annotationStorage.size <= 0 && Ul("saveDocument called while `annotationStorage` is empty, please use the getData-method instead.");
const {
map: U,
transfer: l
} = this.annotationStorage.serializable;
return this.messageHandler.sendWithPromise("SaveDocument", {
isPureXfa: !!this._htmlForXfa,
numPages: this._numPages,
annotationStorage: U,
filename: ((d = this._fullReader) == null ? void 0 : d.filename) ?? null
}, l).finally(() => {
this.annotationStorage.resetModified();
});
}
getPage(U) {
if (!Number.isInteger(U) || U <= 0 || U > this._numPages)
return Promise.reject(new Error("Invalid page request."));
const l = U - 1, d = c(this, Lc).get(l);
if (d)
return d;
const t = this.messageHandler.sendWithPromise("GetPage", {
pageIndex: l
}).then((Z) => {
if (this.destroyed)
throw new Error("Transport destroyed");
Z.refStr && c(this, kc).set(Z.refStr, U);
const F = new o2(l, Z, this, this._params.pdfBug);
return c(this, tt).set(l, F), F;
});
return c(this, Lc).set(l, t), t;
}
getPageIndex(U) {
return QN(U) ? this.messageHandler.sendWithPromise("GetPageIndex", {
num: U.num,
gen: U.gen
}) : Promise.reject(new Error("Invalid pageIndex request."));
}
getAnnotations(U, l) {
return this.messageHandler.sendWithPromise("GetAnnotations", {
pageIndex: U,
intent: l
});
}
getFieldObjects() {
return h(this, qF, _n).call(this, "GetFieldObjects");
}
hasJSActions() {
return h(this, qF, _n).call(this, "HasJSActions");
}
getCalculationOrderIds() {
return this.messageHandler.sendWithPromise("GetCalculationOrderIds", null);
}
getDestinations() {
return this.messageHandler.sendWithPromise("GetDestinations", null);
}
getDestination(U) {
return typeof U != "string" ? Promise.reject(new Error("Invalid destination request.")) : this.messageHandler.sendWithPromise("GetDestination", {
id: U
});
}
getPageLabels() {
return this.messageHandler.sendWithPromise("GetPageLabels", null);
}
getPageLayout() {
return this.messageHandler.sendWithPromise("GetPageLayout", null);
}
getPageMode() {
return this.messageHandler.sendWithPromise("GetPageMode", null);
}
getViewerPreferences() {
return this.messageHandler.sendWithPromise("GetViewerPreferences", null);
}
getOpenAction() {
return this.messageHandler.sendWithPromise("GetOpenAction", null);
}
getAttachments() {
return this.messageHandler.sendWithPromise("GetAttachments", null);
}
getDocJSActions() {
return h(this, qF, _n).call(this, "GetDocJSActions");
}
getPageJSActions(U) {
return this.messageHandler.sendWithPromise("GetPageJSActions", {
pageIndex: U
});
}
getStructTree(U) {
return this.messageHandler.sendWithPromise("GetStructTree", {
pageIndex: U
});
}
getOutline() {
return this.messageHandler.sendWithPromise("GetOutline", null);
}
getOptionalContentConfig(U) {
return h(this, qF, _n).call(this, "GetOptionalContentConfig").then((l) => new qm(l, U));
}
getPermissions() {
return this.messageHandler.sendWithPromise("GetPermissions", null);
}
getMetadata() {
const U = "GetMetadata", l = c(this, Ct).get(U);
if (l)
return l;
const d = this.messageHandler.sendWithPromise(U, null).then((t) => {
var Z, F;
return {
info: t[0],
metadata: t[1] ? new Am(t[1]) : null,
contentDispositionFilename: ((Z = this._fullReader) == null ? void 0 : Z.filename) ?? null,
contentLength: ((F = this._fullReader) == null ? void 0 : F.contentLength) ?? null
};
});
return c(this, Ct).set(U, d), d;
}
getMarkInfo() {
return this.messageHandler.sendWithPromise("GetMarkInfo", null);
}
async startCleanup(U = !1) {
if (!this.destroyed) {
await this.messageHandler.sendWithPromise("Cleanup", null);
for (const l of c(this, tt).values())
if (!l.cleanup())
throw new Error(`startCleanup: Page ${l.pageNumber} is currently rendering.`);
this.commonObjs.clear(), U || this.fontLoader.clear(), c(this, Ct).clear(), this.filterFactory.destroy(!0), Vi.cleanup();
}
}
cachedPageNumber(U) {
if (!QN(U))
return null;
const l = U.gen === 0 ? `${U.num}R` : `${U.num}R${U.gen}`;
return c(this, kc).get(l) ?? null;
}
}
Ct = new WeakMap(), tt = new WeakMap(), Lc = new WeakMap(), kc = new WeakMap(), wt = new WeakMap(), qF = new WeakSet(), _n = function(U, l = null) {
const d = c(this, Ct).get(U);
if (d)
return d;
const t = this.messageHandler.sendWithPromise(U, l);
return c(this, Ct).set(U, t), t;
};
const Cn = Symbol("INITIAL_DATA");
var fU, aa, Ni;
class th {
constructor() {
b(this, aa);
b(this, fU, /* @__PURE__ */ Object.create(null));
}
get(U, l = null) {
if (l) {
const t = h(this, aa, Ni).call(this, U);
return t.promise.then(() => l(t.data)), null;
}
const d = c(this, fU)[U];
if (!d || d.data === Cn)
throw new Error(`Requesting object that isn't resolved yet ${U}.`);
return d.data;
}
has(U) {
const l = c(this, fU)[U];
return !!l && l.data !== Cn;
}
delete(U) {
const l = c(this, fU)[U];
return !l || l.data === Cn ? !1 : (delete c(this, fU)[U], !0);
}
resolve(U, l = null) {
const d = h(this, aa, Ni).call(this, U);
d.data = l, d.resolve();
}
clear() {
var U;
for (const l in c(this, fU)) {
const {
data: d
} = c(this, fU)[l];
(U = d == null ? void 0 : d.bitmap) == null || U.close();
}
R(this, fU, /* @__PURE__ */ Object.create(null));
}
*[Symbol.iterator]() {
for (const U in c(this, fU)) {
const {
data: l
} = c(this, fU)[U];
l !== Cn && (yield [U, l]);
}
}
}
fU = new WeakMap(), aa = new WeakSet(), Ni = function(U) {
var l;
return (l = c(this, fU))[U] || (l[U] = {
...Promise.withResolvers(),
data: Cn
});
};
var zZ;
class y2 {
constructor(U) {
b(this, zZ, null);
R(this, zZ, U), this.onContinue = null;
}
get promise() {
return c(this, zZ).capability.promise;
}
cancel(U = 0) {
c(this, zZ).cancel(null, U);
}
get separateAnnots() {
const {
separateAnnots: U
} = c(this, zZ).operatorList;
if (!U)
return !1;
const {
annotationCanvasMap: l
} = c(this, zZ);
return U.form || U.canvas && (l == null ? void 0 : l.size) > 0;
}
}
zZ = new WeakMap();
var LZ, $F;
const mF = class mF {
constructor({
callback: U,
params: l,
objs: d,
commonObjs: t,
annotationCanvasMap: Z,
operatorList: F,
pageIndex: n,
canvasFactory: s,
filterFactory: W,
useRequestAnimationFrame: V = !1,
pdfBug: Q = !1,
pageColors: i = null
}) {
b(this, LZ, null);
this.callback = U, this.params = l, this.objs = d, this.commonObjs = t, this.annotationCanvasMap = Z, this.operatorListIdx = null, this.operatorList = F, this._pageIndex = n, this.canvasFactory = s, this.filterFactory = W, this._pdfBug = Q, this.pageColors = i, this.running = !1, this.graphicsReadyCallback = null, this.graphicsReady = !1, this._useRequestAnimationFrame = V === !0 && typeof window < "u", this.cancelled = !1, this.capability = Promise.withResolvers(), this.task = new y2(this), this._cancelBound = this.cancel.bind(this), this._continueBound = this._continue.bind(this), this._scheduleNextBound = this._scheduleNext.bind(this), this._nextBound = this._next.bind(this), this._canvas = l.canvasContext.canvas;
}
get completed() {
return this.capability.promise.catch(function() {
});
}
initializeGraphics({
transparency: U = !1,
optionalContentConfig: l
}) {
var n, s;
if (this.cancelled)
return;
if (this._canvas) {
if (c(mF, $F).has(this._canvas))
throw new Error("Cannot use the same canvas during multiple render() operations. Use different canvas or ensure previous operations were cancelled or completed.");
c(mF, $F).add(this._canvas);
}
this._pdfBug && ((n = globalThis.StepperManager) != null && n.enabled) && (this.stepper = globalThis.StepperManager.create(this._pageIndex), this.stepper.init(this.operatorList), this.stepper.nextBreakPoint = this.stepper.getNextBreakPoint());
const {
canvasContext: d,
viewport: t,
transform: Z,
background: F
} = this.params;
this.gfx = new tc(d, this.commonObjs, this.objs, this.canvasFactory, this.filterFactory, {
optionalContentConfig: l
}, this.annotationCanvasMap, this.pageColors), this.gfx.beginDrawing({
transform: Z,
viewport: t,
transparency: U,
background: F
}), this.operatorListIdx = 0, this.graphicsReady = !0, (s = this.graphicsReadyCallback) == null || s.call(this);
}
cancel(U = null, l = 0) {
var d;
this.running = !1, this.cancelled = !0, (d = this.gfx) == null || d.endDrawing(), c(this, LZ) && (window.cancelAnimationFrame(c(this, LZ)), R(this, LZ, null)), c(mF, $F).delete(this._canvas), this.callback(U || new yR(`Rendering cancelled, page ${this._pageIndex + 1}`, l));
}
operatorListChanged() {
var U;
if (!this.graphicsReady) {
this.graphicsReadyCallback || (this.graphicsReadyCallback = this._continueBound);
return;
}
(U = this.stepper) == null || U.updateOperatorList(this.operatorList), !this.running && this._continue();
}
_continue() {
this.running = !0, !this.cancelled && (this.task.onContinue ? this.task.onContinue(this._scheduleNextBound) : this._scheduleNext());
}
_scheduleNext() {
this._useRequestAnimationFrame ? R(this, LZ, window.requestAnimationFrame(() => {
R(this, LZ, null), this._nextBound().catch(this._cancelBound);
})) : Promise.resolve().then(this._nextBound).catch(this._cancelBound);
}
async _next() {
this.cancelled || (this.operatorListIdx = this.gfx.executeOperatorList(this.operatorList, this.operatorListIdx, this._continueBound, this.stepper), this.operatorListIdx === this.operatorList.argsArray.length && (this.running = !1, this.operatorList.lastChunk && (this.gfx.endDrawing(), c(mF, $F).delete(this._canvas), this.callback())));
}
};
LZ = new WeakMap(), $F = new WeakMap(), b(mF, $F, /* @__PURE__ */ new WeakSet());
let ei = mF;
const z2 = "4.10.38", L2 = "f9bea397f";
il(670);
function iN(a) {
return Math.floor(Math.max(0, Math.min(1, a)) * 255).toString(16).padStart(2, "0");
}
function wn(a) {
return Math.max(0, Math.min(255, 255 * a));
}
class RN {
static CMYK_G([U, l, d, t]) {
return ["G", 1 - Math.min(1, 0.3 * U + 0.59 * d + 0.11 * l + t)];
}
static G_CMYK([U]) {
return ["CMYK", 0, 0, 0, 1 - U];
}
static G_RGB([U]) {
return ["RGB", U, U, U];
}
static G_rgb([U]) {
return U = wn(U), [U, U, U];
}
static G_HTML([U]) {
const l = iN(U);
return `#${l}${l}${l}`;
}
static RGB_G([U, l, d]) {
return ["G", 0.3 * U + 0.59 * l + 0.11 * d];
}
static RGB_rgb(U) {
return U.map(wn);
}
static RGB_HTML(U) {
return `#${U.map(iN).join("")}`;
}
static T_HTML() {
return "#00000000";
}
static T_rgb() {
return [null];
}
static CMYK_RGB([U, l, d, t]) {
return ["RGB", 1 - Math.min(1, U + t), 1 - Math.min(1, d + t), 1 - Math.min(1, l + t)];
}
static CMYK_rgb([U, l, d, t]) {
return [wn(1 - Math.min(1, U + t)), wn(1 - Math.min(1, d + t)), wn(1 - Math.min(1, l + t))];
}
static CMYK_HTML(U) {
const l = this.CMYK_RGB(U).slice(1);
return this.RGB_HTML(l);
}
static RGB_CMYK([U, l, d]) {
const t = 1 - U, Z = 1 - l, F = 1 - d, n = Math.min(t, Z, F);
return ["CMYK", t, Z, F, n];
}
}
class k2 {
create(U, l, d = !1) {
if (U <= 0 || l <= 0)
throw new Error("Invalid SVG dimensions");
const t = this._createSVG("svg:svg");
return t.setAttribute("version", "1.1"), d || (t.setAttribute("width", `${U}px`), t.setAttribute("height", `${l}px`)), t.setAttribute("preserveAspectRatio", "none"), t.setAttribute("viewBox", `0 0 ${U} ${l}`), t;
}
createElement(U) {
if (typeof U != "string")
throw new Error("Invalid SVG element type");
return this._createSVG(U);
}
_createSVG(U) {
ul("Abstract method `_createSVG` called.");
}
}
let DR = class extends k2 {
_createSVG(U) {
return document.createElementNS(Mt, U);
}
}, Zh = class {
static setupStorage(U, l, d, t, Z) {
const F = t.getValue(l, {
value: null
});
switch (d.name) {
case "textarea":
if (F.value !== null && (U.textContent = F.value), Z === "print")
break;
U.addEventListener("input", (n) => {
t.setValue(l, {
value: n.target.value
});
});
break;
case "input":
if (d.attributes.type === "radio" || d.attributes.type === "checkbox") {
if (F.value === d.attributes.xfaOn ? U.setAttribute("checked", !0) : F.value === d.attributes.xfaOff && U.removeAttribute("checked"), Z === "print")
break;
U.addEventListener("change", (n) => {
t.setValue(l, {
value: n.target.checked ? n.target.getAttribute("xfaOn") : n.target.getAttribute("xfaOff")
});
});
} else {
if (F.value !== null && U.setAttribute("value", F.value), Z === "print")
break;
U.addEventListener("input", (n) => {
t.setValue(l, {
value: n.target.value
});
});
}
break;
case "select":
if (F.value !== null) {
U.setAttribute("value", F.value);
for (const n of d.children)
n.attributes.value === F.value ? n.attributes.selected = !0 : n.attributes.hasOwnProperty("selected") && delete n.attributes.selected;
}
U.addEventListener("input", (n) => {
const s = n.target.options, W = s.selectedIndex === -1 ? "" : s[s.selectedIndex].value;
t.setValue(l, {
value: W
});
});
break;
}
}
static setAttributes({
html: U,
element: l,
storage: d = null,
intent: t,
linkService: Z
}) {
const {
attributes: F
} = l, n = U instanceof HTMLAnchorElement;
F.type === "radio" && (F.name = `${F.name}-${t}`);
for (const [s, W] of Object.entries(F))
if (W != null)
switch (s) {
case "class":
W.length && U.setAttribute(s, W.join(" "));
break;
case "dataId":
break;
case "id":
U.setAttribute("data-element-id", W);
break;
case "style":
Object.assign(U.style, W);
break;
case "textContent":
U.textContent = W;
break;
default:
(!n || s !== "href" && s !== "newWindow") && U.setAttribute(s, W);
}
n && Z.addLinkAttributes(U, F.href, F.newWindow), d && F.dataId && this.setupStorage(U, F.dataId, l, d);
}
static render(U) {
var Q, i;
const l = U.annotationStorage, d = U.linkService, t = U.xfaHtml, Z = U.intent || "display", F = document.createElement(t.name);
t.attributes && this.setAttributes({
html: F,
element: t,
intent: Z,
linkService: d
});
const n = Z !== "richText", s = U.div;
if (s.append(F), U.viewport) {
const N = `matrix(${U.viewport.transform.join(",")})`;
s.style.transform = N;
}
n && s.setAttribute("class", "xfaLayer xfaFont");
const W = [];
if (t.children.length === 0) {
if (t.value) {
const N = document.createTextNode(t.value);
F.append(N), n && hs.shouldBuildText(t.name) && W.push(N);
}
return {
textDivs: W
};
}
const V = [[t, -1, F]];
for (; V.length > 0; ) {
const [N, e, m] = V.at(-1);
if (e + 1 === N.children.length) {
V.pop();
continue;
}
const J = N.children[++V.at(-1)[1]];
if (J === null)
continue;
const {
name: M
} = J;
if (M === "#text") {
const S = document.createTextNode(J.value);
W.push(S), m.append(S);
continue;
}
const G = (Q = J == null ? void 0 : J.attributes) != null && Q.xmlns ? document.createElementNS(J.attributes.xmlns, M) : document.createElement(M);
if (m.append(G), J.attributes && this.setAttributes({
html: G,
element: J,
storage: l,
intent: Z,
linkService: d
}), ((i = J.children) == null ? void 0 : i.length) > 0)
V.push([J, -1, G]);
else if (J.value) {
const S = document.createTextNode(J.value);
n && hs.shouldBuildText(M) && W.push(S), G.append(S);
}
}
for (const N of s.querySelectorAll(".xfaNonInteractive input, .xfaNonInteractive textarea"))
N.setAttribute("readOnly", !0);
return {
textDivs: W
};
}
static update(U) {
const l = `matrix(${U.viewport.transform.join(",")})`;
U.div.style.transform = l, U.div.hidden = !1;
}
};
const SW = 1e3, I2 = 9, j0 = /* @__PURE__ */ new WeakSet();
function aF(a) {
return {
width: a[2] - a[0],
height: a[3] - a[1]
};
}
class D2 {
static create(U) {
switch (U.data.annotationType) {
case Pl.LINK:
return new Fh(U);
case Pl.TEXT:
return new E2(U);
case Pl.WIDGET:
switch (U.data.fieldType) {
case "Tx":
return new r2(U);
case "Btn":
return U.data.radioButton ? new sh(U) : U.data.checkBox ? new w2(U) : new x2(U);
case "Ch":
return new j2(U);
case "Sig":
return new C2(U);
}
return new g0(U);
case Pl.POPUP:
return new bi(U);
case Pl.FREETEXT:
return new ih(U);
case Pl.LINE:
return new g2(U);
case Pl.SQUARE:
return new K2(U);
case Pl.CIRCLE:
return new H2(U);
case Pl.POLYLINE:
return new Rh(U);
case Pl.CARET:
return new P2(U);
case Pl.INK:
return new ER(U);
case Pl.POLYGON:
return new v2(U);
case Pl.HIGHLIGHT:
return new Nh(U);
case Pl.UNDERLINE:
return new f2(U);
case Pl.SQUIGGLY:
return new A2(U);
case Pl.STRIKEOUT:
return new _2(U);
case Pl.STAMP:
return new eh(U);
case Pl.FILEATTACHMENT:
return new q2(U);
default:
return new Ol(U);
}
}
}
var l0, Ic, Dc, Wa, hi;
const xR = class xR {
constructor(U, {
isRenderable: l = !1,
ignoreBorder: d = !1,
createQuadrilaterals: t = !1
} = {}) {
b(this, Wa);
b(this, l0, null);
b(this, Ic, !1);
b(this, Dc, null);
this.isRenderable = l, this.data = U.data, this.layer = U.layer, this.linkService = U.linkService, this.downloadManager = U.downloadManager, this.imageResourcesPath = U.imageResourcesPath, this.renderForms = U.renderForms, this.svgFactory = U.svgFactory, this.annotationStorage = U.annotationStorage, this.enableScripting = U.enableScripting, this.hasJSActions = U.hasJSActions, this._fieldObjects = U.fieldObjects, this.parent = U.parent, l && (this.container = this._createContainer(d)), t && this._createQuadrilaterals();
}
static _hasPopupData({
titleObj: U,
contentsObj: l,
richText: d
}) {
return !!(U != null && U.str || l != null && l.str || d != null && d.str);
}
get _isEditable() {
return this.data.isEditable;
}
get hasPopupData() {
return xR._hasPopupData(this.data);
}
updateEdited(U) {
var d;
if (!this.container)
return;
c(this, l0) || R(this, l0, {
rect: this.data.rect.slice(0)
});
const {
rect: l
} = U;
l && h(this, Wa, hi).call(this, l), (d = c(this, Dc)) == null || d.popup.updateEdited(U);
}
resetEdited() {
var U;
c(this, l0) && (h(this, Wa, hi).call(this, c(this, l0).rect), (U = c(this, Dc)) == null || U.popup.resetEdited(), R(this, l0, null));
}
_createContainer(U) {
const {
data: l,
parent: {
page: d,
viewport: t
}
} = this, Z = document.createElement("section");
Z.setAttribute("data-annotation-id", l.id), this instanceof g0 || (Z.tabIndex = SW);
const {
style: F
} = Z;
if (F.zIndex = this.parent.zIndex++, l.alternativeText && (Z.title = l.alternativeText), l.noRotate && Z.classList.add("norotate"), !l.rect || this instanceof bi) {
const {
rotation: m
} = l;
return !l.hasOwnCanvas && m !== 0 && this.setRotation(m, Z), Z;
}
const {
width: n,
height: s
} = aF(l.rect);
if (!U && l.borderStyle.width > 0) {
F.borderWidth = `${l.borderStyle.width}px`;
const m = l.borderStyle.horizontalCornerRadius, J = l.borderStyle.verticalCornerRadius;
if (m > 0 || J > 0) {
const G = `calc(${m}px * var(--scale-factor)) / calc(${J}px * var(--scale-factor))`;
F.borderRadius = G;
} else if (this instanceof sh) {
const G = `calc(${n}px * var(--scale-factor)) / calc(${s}px * var(--scale-factor))`;
F.borderRadius = G;
}
switch (l.borderStyle.style) {
case En.SOLID:
F.borderStyle = "solid";
break;
case En.DASHED:
F.borderStyle = "dashed";
break;
case En.BEVELED:
Ul("Unimplemented border style: beveled");
break;
case En.INSET:
Ul("Unimplemented border style: inset");
break;
case En.UNDERLINE:
F.borderBottomStyle = "solid";
break;
}
const M = l.borderColor || null;
M ? (R(this, Ic, !0), F.borderColor = v.makeHexColor(M[0] | 0, M[1] | 0, M[2] | 0)) : F.borderWidth = 0;
}
const W = v.normalizeRect([l.rect[0], d.view[3] - l.rect[1] + d.view[1], l.rect[2], d.view[3] - l.rect[3] + d.view[1]]), {
pageWidth: V,
pageHeight: Q,
pageX: i,
pageY: N
} = t.rawDims;
F.left = `${100 * (W[0] - i) / V}%`, F.top = `${100 * (W[1] - N) / Q}%`;
const {
rotation: e
} = l;
return l.hasOwnCanvas || e === 0 ? (F.width = `${100 * n / V}%`, F.height = `${100 * s / Q}%`) : this.setRotation(e, Z), Z;
}
setRotation(U, l = this.container) {
if (!this.data.rect)
return;
const {
pageWidth: d,
pageHeight: t
} = this.parent.viewport.rawDims, {
width: Z,
height: F
} = aF(this.data.rect);
let n, s;
U % 180 === 0 ? (n = 100 * Z / d, s = 100 * F / t) : (n = 100 * F / d, s = 100 * Z / t), l.style.width = `${n}%`, l.style.height = `${s}%`, l.setAttribute("data-main-rotation", (360 - U) % 360);
}
get _commonActions() {
const U = (l, d, t) => {
const Z = t.detail[l], F = Z[0], n = Z.slice(1);
t.target.style[d] = RN[`${F}_HTML`](n), this.annotationStorage.setValue(this.data.id, {
[d]: RN[`${F}_rgb`](n)
});
};
return Wl(this, "_commonActions", {
display: (l) => {
const {
display: d
} = l.detail, t = d % 2 === 1;
this.container.style.visibility = t ? "hidden" : "visible", this.annotationStorage.setValue(this.data.id, {
noView: t,
noPrint: d === 1 || d === 2
});
},
print: (l) => {
this.annotationStorage.setValue(this.data.id, {
noPrint: !l.detail.print
});
},
hidden: (l) => {
const {
hidden: d
} = l.detail;
this.container.style.visibility = d ? "hidden" : "visible", this.annotationStorage.setValue(this.data.id, {
noPrint: d,
noView: d
});
},
focus: (l) => {
setTimeout(() => l.target.focus({
preventScroll: !1
}), 0);
},
userName: (l) => {
l.target.title = l.detail.userName;
},
readonly: (l) => {
l.target.disabled = l.detail.readonly;
},
required: (l) => {
this._setRequired(l.target, l.detail.required);
},
bgColor: (l) => {
U("bgColor", "backgroundColor", l);
},
fillColor: (l) => {
U("fillColor", "backgroundColor", l);
},
fgColor: (l) => {
U("fgColor", "color", l);
},
textColor: (l) => {
U("textColor", "color", l);
},
borderColor: (l) => {
U("borderColor", "borderColor", l);
},
strokeColor: (l) => {
U("strokeColor", "borderColor", l);
},
rotation: (l) => {
const d = l.detail.rotation;
this.setRotation(d), this.annotationStorage.setValue(this.data.id, {
rotation: d
});
}
});
}
_dispatchEventFromSandbox(U, l) {
const d = this._commonActions;
for (const t of Object.keys(l.detail)) {
const Z = U[t] || d[t];
Z == null || Z(l);
}
}
_setDefaultPropertiesFromJS(U) {
if (!this.enableScripting)
return;
const l = this.annotationStorage.getRawValue(this.data.id);
if (!l)
return;
const d = this._commonActions;
for (const [t, Z] of Object.entries(l)) {
const F = d[t];
if (F) {
const n = {
detail: {
[t]: Z
},
target: U
};
F(n), delete l[t];
}
}
}
_createQuadrilaterals() {
if (!this.container)
return;
const {
quadPoints: U
} = this.data;
if (!U)
return;
const [l, d, t, Z] = this.data.rect.map((m) => Math.fround(m));
if (U.length === 8) {
const [m, J, M, G] = U.subarray(2, 6);
if (t === m && Z === J && l === M && d === G)
return;
}
const {
style: F
} = this.container;
let n;
if (c(this, Ic)) {
const {
borderColor: m,
borderWidth: J
} = F;
F.borderWidth = 0, n = ["url('data:image/svg+xml;utf8,", '')"), F.backgroundImage = n.join("")), this.container.append(Q), this.container.style.clipPath = `url(#${e})`;
}
_createPopup() {
const {
data: U
} = this, l = R(this, Dc, new bi({
data: {
color: U.color,
titleObj: U.titleObj,
modificationDate: U.modificationDate,
contentsObj: U.contentsObj,
richText: U.richText,
parentRect: U.rect,
borderStyle: 0,
id: `popup_${U.id}`,
rotation: U.rotation
},
parent: this.parent,
elements: [this]
}));
this.parent.div.append(l.render());
}
render() {
ul("Abstract method `AnnotationElement.render` called");
}
_getElementsByName(U, l = null) {
const d = [];
if (this._fieldObjects) {
const t = this._fieldObjects[U];
if (t)
for (const {
page: Z,
id: F,
exportValues: n
} of t) {
if (Z === -1 || F === l)
continue;
const s = typeof n == "string" ? n : null, W = document.querySelector(`[data-element-id="${F}"]`);
if (W && !j0.has(W)) {
Ul(`_getElementsByName - element not allowed: ${F}`);
continue;
}
d.push({
id: F,
exportValue: s,
domElement: W
});
}
return d;
}
for (const t of document.getElementsByName(U)) {
const {
exportValue: Z
} = t, F = t.getAttribute("data-element-id");
F !== l && j0.has(t) && d.push({
id: F,
exportValue: Z,
domElement: t
});
}
return d;
}
show() {
var U;
this.container && (this.container.hidden = !1), (U = this.popup) == null || U.maybeShow();
}
hide() {
var U;
this.container && (this.container.hidden = !0), (U = this.popup) == null || U.forceHide();
}
getElementsToTriggerPopup() {
return this.container;
}
addHighlightArea() {
const U = this.getElementsToTriggerPopup();
if (Array.isArray(U))
for (const l of U)
l.classList.add("highlightArea");
else
U.classList.add("highlightArea");
}
_editOnDoubleClick() {
if (!this._isEditable)
return;
const {
annotationEditorType: U,
data: {
id: l
}
} = this;
this.container.addEventListener("dblclick", () => {
var d;
(d = this.linkService.eventBus) == null || d.dispatch("switchannotationeditormode", {
source: this,
mode: U,
editId: l
});
});
}
};
l0 = new WeakMap(), Ic = new WeakMap(), Dc = new WeakMap(), Wa = new WeakSet(), hi = function(U) {
const {
container: {
style: l
},
data: {
rect: d,
rotation: t
},
parent: {
viewport: {
rawDims: {
pageWidth: Z,
pageHeight: F,
pageX: n,
pageY: s
}
}
}
} = this;
d == null || d.splice(0, 4, ...U);
const {
width: W,
height: V
} = aF(U);
l.left = `${100 * (U[0] - n) / Z}%`, l.top = `${100 * (F - U[3] + s) / F}%`, t === 0 ? (l.width = `${100 * W / Z}%`, l.height = `${100 * V / F}%`) : this.setRotation(t);
};
let Ol = xR;
var cd, iF, ch, nh;
class Fh extends Ol {
constructor(l, d = null) {
super(l, {
isRenderable: !0,
ignoreBorder: !!(d != null && d.ignoreBorder),
createQuadrilaterals: !0
});
b(this, cd);
this.isTooltipOnly = l.data.isTooltipOnly;
}
render() {
const {
data: l,
linkService: d
} = this, t = document.createElement("a");
t.setAttribute("data-element-id", l.id);
let Z = !1;
return l.url ? (d.addLinkAttributes(t, l.url, l.newWindow), Z = !0) : l.action ? (this._bindNamedAction(t, l.action), Z = !0) : l.attachment ? (h(this, cd, ch).call(this, t, l.attachment, l.attachmentDest), Z = !0) : l.setOCGState ? (h(this, cd, nh).call(this, t, l.setOCGState), Z = !0) : l.dest ? (this._bindLink(t, l.dest), Z = !0) : (l.actions && (l.actions.Action || l.actions["Mouse Up"] || l.actions["Mouse Down"]) && this.enableScripting && this.hasJSActions && (this._bindJSAction(t, l), Z = !0), l.resetForm ? (this._bindResetFormAction(t, l.resetForm), Z = !0) : this.isTooltipOnly && !Z && (this._bindLink(t, ""), Z = !0)), this.container.classList.add("linkAnnotation"), Z && this.container.append(t), this.container;
}
_bindLink(l, d) {
l.href = this.linkService.getDestinationHash(d), l.onclick = () => (d && this.linkService.goToDestination(d), !1), (d || d === "") && h(this, cd, iF).call(this);
}
_bindNamedAction(l, d) {
l.href = this.linkService.getAnchorUrl(""), l.onclick = () => (this.linkService.executeNamedAction(d), !1), h(this, cd, iF).call(this);
}
_bindJSAction(l, d) {
l.href = this.linkService.getAnchorUrl("");
const t = /* @__PURE__ */ new Map([["Action", "onclick"], ["Mouse Up", "onmouseup"], ["Mouse Down", "onmousedown"]]);
for (const Z of Object.keys(d.actions)) {
const F = t.get(Z);
F && (l[F] = () => {
var n;
return (n = this.linkService.eventBus) == null || n.dispatch("dispatcheventinsandbox", {
source: this,
detail: {
id: d.id,
name: Z
}
}), !1;
});
}
l.onclick || (l.onclick = () => !1), h(this, cd, iF).call(this);
}
_bindResetFormAction(l, d) {
const t = l.onclick;
if (t || (l.href = this.linkService.getAnchorUrl("")), h(this, cd, iF).call(this), !this._fieldObjects) {
Ul('_bindResetFormAction - "resetForm" action not supported, ensure that the `fieldObjects` parameter is provided.'), t || (l.onclick = () => !1);
return;
}
l.onclick = () => {
var Q;
t == null || t();
const {
fields: Z,
refs: F,
include: n
} = d, s = [];
if (Z.length !== 0 || F.length !== 0) {
const i = new Set(F);
for (const N of Z) {
const e = this._fieldObjects[N] || [];
for (const {
id: m
} of e)
i.add(m);
}
for (const N of Object.values(this._fieldObjects))
for (const e of N)
i.has(e.id) === n && s.push(e);
} else
for (const i of Object.values(this._fieldObjects))
s.push(...i);
const W = this.annotationStorage, V = [];
for (const i of s) {
const {
id: N
} = i;
switch (V.push(N), i.type) {
case "text": {
const m = i.defaultValue || "";
W.setValue(N, {
value: m
});
break;
}
case "checkbox":
case "radiobutton": {
const m = i.defaultValue === i.exportValues;
W.setValue(N, {
value: m
});
break;
}
case "combobox":
case "listbox": {
const m = i.defaultValue || "";
W.setValue(N, {
value: m
});
break;
}
default:
continue;
}
const e = document.querySelector(`[data-element-id="${N}"]`);
if (e) {
if (!j0.has(e)) {
Ul(`_bindResetFormAction - element not allowed: ${N}`);
continue;
}
} else continue;
e.dispatchEvent(new Event("resetform"));
}
return this.enableScripting && ((Q = this.linkService.eventBus) == null || Q.dispatch("dispatcheventinsandbox", {
source: this,
detail: {
id: "app",
ids: V,
name: "ResetForm"
}
})), !1;
};
}
}
cd = new WeakSet(), iF = function() {
this.container.setAttribute("data-internal-link", "");
}, ch = function(l, d, t = null) {
l.href = this.linkService.getAnchorUrl(""), d.description && (l.title = d.description), l.onclick = () => {
var Z;
return (Z = this.downloadManager) == null || Z.openOrDownloadData(d.content, d.filename, t), !1;
}, h(this, cd, iF).call(this);
}, nh = function(l, d) {
l.href = this.linkService.getAnchorUrl(""), l.onclick = () => (this.linkService.executeSetOCGState(d), !1), h(this, cd, iF).call(this);
};
class E2 extends Ol {
constructor(U) {
super(U, {
isRenderable: !0
});
}
render() {
this.container.classList.add("textAnnotation");
const U = document.createElement("img");
return U.src = this.imageResourcesPath + "annotation-" + this.data.name.toLowerCase() + ".svg", U.setAttribute("data-l10n-id", "pdfjs-text-annotation-type"), U.setAttribute("data-l10n-args", JSON.stringify({
type: this.data.name
})), !this.data.popupRef && this.hasPopupData && this._createPopup(), this.container.append(U), this.container;
}
}
class g0 extends Ol {
render() {
return this.container;
}
showElementAndHideCanvas(U) {
var l;
this.data.hasOwnCanvas && (((l = U.previousSibling) == null ? void 0 : l.nodeName) === "CANVAS" && (U.previousSibling.hidden = !0), U.hidden = !1);
}
_getKeyModifier(U) {
return LU.platform.isMac ? U.metaKey : U.ctrlKey;
}
_setEventListener(U, l, d, t, Z) {
d.includes("mouse") ? U.addEventListener(d, (F) => {
var n;
(n = this.linkService.eventBus) == null || n.dispatch("dispatcheventinsandbox", {
source: this,
detail: {
id: this.data.id,
name: t,
value: Z(F),
shift: F.shiftKey,
modifier: this._getKeyModifier(F)
}
});
}) : U.addEventListener(d, (F) => {
var n;
if (d === "blur") {
if (!l.focused || !F.relatedTarget)
return;
l.focused = !1;
} else if (d === "focus") {
if (l.focused)
return;
l.focused = !0;
}
Z && ((n = this.linkService.eventBus) == null || n.dispatch("dispatcheventinsandbox", {
source: this,
detail: {
id: this.data.id,
name: t,
value: Z(F)
}
}));
});
}
_setEventListeners(U, l, d, t) {
var Z, F, n;
for (const [s, W] of d)
(W === "Action" || (Z = this.data.actions) != null && Z[W]) && ((W === "Focus" || W === "Blur") && (l || (l = {
focused: !1
})), this._setEventListener(U, l, s, W, t), W === "Focus" && !((F = this.data.actions) != null && F.Blur) ? this._setEventListener(U, l, "blur", "Blur", null) : W === "Blur" && !((n = this.data.actions) != null && n.Focus) && this._setEventListener(U, l, "focus", "Focus", null));
}
_setBackgroundColor(U) {
const l = this.data.backgroundColor || null;
U.style.backgroundColor = l === null ? "transparent" : v.makeHexColor(l[0], l[1], l[2]);
}
_setTextStyle(U) {
const l = ["left", "center", "right"], {
fontColor: d
} = this.data.defaultAppearanceData, t = this.data.defaultAppearanceData.fontSize || I2, Z = U.style;
let F;
const n = 2, s = (W) => Math.round(10 * W) / 10;
if (this.data.multiLine) {
const W = Math.abs(this.data.rect[3] - this.data.rect[1] - n), V = Math.round(W / (NQ * t)) || 1, Q = W / V;
F = Math.min(t, s(Q / NQ));
} else {
const W = Math.abs(this.data.rect[3] - this.data.rect[1] - n);
F = Math.min(t, s(W / NQ));
}
Z.fontSize = `calc(${F}px * var(--scale-factor))`, Z.color = v.makeHexColor(d[0], d[1], d[2]), this.data.textAlignment !== null && (Z.textAlign = l[this.data.textAlignment]);
}
_setRequired(U, l) {
l ? U.setAttribute("required", !0) : U.removeAttribute("required"), U.setAttribute("aria-required", l);
}
}
class r2 extends g0 {
constructor(U) {
const l = U.renderForms || U.data.hasOwnCanvas || !U.data.hasAppearance && !!U.data.fieldValue;
super(U, {
isRenderable: l
});
}
setPropertyOnSiblings(U, l, d, t) {
const Z = this.annotationStorage;
for (const F of this._getElementsByName(U.name, U.id))
F.domElement && (F.domElement[l] = d), Z.setValue(F.id, {
[t]: d
});
}
render() {
var t, Z;
const U = this.annotationStorage, l = this.data.id;
this.container.classList.add("textWidgetAnnotation");
let d = null;
if (this.renderForms) {
const F = U.getValue(l, {
value: this.data.fieldValue
});
let n = F.value || "";
const s = U.getValue(l, {
charLimit: this.data.maxLen
}).charLimit;
s && n.length > s && (n = n.slice(0, s));
let W = F.formattedValue || ((t = this.data.textContent) == null ? void 0 : t.join(`
`)) || null;
W && this.data.comb && (W = W.replaceAll(/\s+/g, ""));
const V = {
userValue: n,
formattedValue: W,
lastCommittedValue: null,
commitKey: 1,
focused: !1
};
this.data.multiLine ? (d = document.createElement("textarea"), d.textContent = W ?? n, this.data.doNotScroll && (d.style.overflowY = "hidden")) : (d = document.createElement("input"), d.type = "text", d.setAttribute("value", W ?? n), this.data.doNotScroll && (d.style.overflowX = "hidden")), this.data.hasOwnCanvas && (d.hidden = !0), j0.add(d), d.setAttribute("data-element-id", l), d.disabled = this.data.readOnly, d.name = this.data.fieldName, d.tabIndex = SW, this._setRequired(d, this.data.required), s && (d.maxLength = s), d.addEventListener("input", (i) => {
U.setValue(l, {
value: i.target.value
}), this.setPropertyOnSiblings(d, "value", i.target.value, "value"), V.formattedValue = null;
}), d.addEventListener("resetform", (i) => {
const N = this.data.defaultFieldValue ?? "";
d.value = V.userValue = N, V.formattedValue = null;
});
let Q = (i) => {
const {
formattedValue: N
} = V;
N != null && (i.target.value = N), i.target.scrollLeft = 0;
};
if (this.enableScripting && this.hasJSActions) {
d.addEventListener("focus", (N) => {
var m;
if (V.focused)
return;
const {
target: e
} = N;
V.userValue && (e.value = V.userValue), V.lastCommittedValue = e.value, V.commitKey = 1, (m = this.data.actions) != null && m.Focus || (V.focused = !0);
}), d.addEventListener("updatefromsandbox", (N) => {
this.showElementAndHideCanvas(N.target);
const e = {
value(m) {
V.userValue = m.detail.value ?? "", U.setValue(l, {
value: V.userValue.toString()
}), m.target.value = V.userValue;
},
formattedValue(m) {
const {
formattedValue: J
} = m.detail;
V.formattedValue = J, J != null && m.target !== document.activeElement && (m.target.value = J), U.setValue(l, {
formattedValue: J
});
},
selRange(m) {
m.target.setSelectionRange(...m.detail.selRange);
},
charLimit: (m) => {
var S;
const {
charLimit: J
} = m.detail, {
target: M
} = m;
if (J === 0) {
M.removeAttribute("maxLength");
return;
}
M.setAttribute("maxLength", J);
let G = V.userValue;
!G || G.length <= J || (G = G.slice(0, J), M.value = V.userValue = G, U.setValue(l, {
value: G
}), (S = this.linkService.eventBus) == null || S.dispatch("dispatcheventinsandbox", {
source: this,
detail: {
id: l,
name: "Keystroke",
value: G,
willCommit: !0,
commitKey: 1,
selStart: M.selectionStart,
selEnd: M.selectionEnd
}
}));
}
};
this._dispatchEventFromSandbox(e, N);
}), d.addEventListener("keydown", (N) => {
var J;
V.commitKey = 1;
let e = -1;
if (N.key === "Escape" ? e = 0 : N.key === "Enter" && !this.data.multiLine ? e = 2 : N.key === "Tab" && (V.commitKey = 3), e === -1)
return;
const {
value: m
} = N.target;
V.lastCommittedValue !== m && (V.lastCommittedValue = m, V.userValue = m, (J = this.linkService.eventBus) == null || J.dispatch("dispatcheventinsandbox", {
source: this,
detail: {
id: l,
name: "Keystroke",
value: m,
willCommit: !0,
commitKey: e,
selStart: N.target.selectionStart,
selEnd: N.target.selectionEnd
}
}));
});
const i = Q;
Q = null, d.addEventListener("blur", (N) => {
var m, J;
if (!V.focused || !N.relatedTarget)
return;
(m = this.data.actions) != null && m.Blur || (V.focused = !1);
const {
value: e
} = N.target;
V.userValue = e, V.lastCommittedValue !== e && ((J = this.linkService.eventBus) == null || J.dispatch("dispatcheventinsandbox", {
source: this,
detail: {
id: l,
name: "Keystroke",
value: e,
willCommit: !0,
commitKey: V.commitKey,
selStart: N.target.selectionStart,
selEnd: N.target.selectionEnd
}
})), i(N);
}), (Z = this.data.actions) != null && Z.Keystroke && d.addEventListener("beforeinput", (N) => {
var u;
V.lastCommittedValue = null;
const {
data: e,
target: m
} = N, {
value: J,
selectionStart: M,
selectionEnd: G
} = m;
let S = M, T = G;
switch (N.inputType) {
case "deleteWordBackward": {
const Y = J.substring(0, M).match(/\w*[^\w]*$/);
Y && (S -= Y[0].length);
break;
}
case "deleteWordForward": {
const Y = J.substring(M).match(/^[^\w]*\w*/);
Y && (T += Y[0].length);
break;
}
case "deleteContentBackward":
M === G && (S -= 1);
break;
case "deleteContentForward":
M === G && (T += 1);
break;
}
N.preventDefault(), (u = this.linkService.eventBus) == null || u.dispatch("dispatcheventinsandbox", {
source: this,
detail: {
id: l,
name: "Keystroke",
value: J,
change: e || "",
willCommit: !1,
selStart: S,
selEnd: T
}
});
}), this._setEventListeners(d, V, [["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], (N) => N.target.value);
}
if (Q && d.addEventListener("blur", Q), this.data.comb) {
const N = (this.data.rect[2] - this.data.rect[0]) / s;
d.classList.add("comb"), d.style.letterSpacing = `calc(${N}px * var(--scale-factor) - 1ch)`;
}
} else
d = document.createElement("div"), d.textContent = this.data.fieldValue, d.style.verticalAlign = "middle", d.style.display = "table-cell", this.data.hasOwnCanvas && (d.hidden = !0);
return this._setTextStyle(d), this._setBackgroundColor(d), this._setDefaultPropertiesFromJS(d), this.container.append(d), this.container;
}
}
class C2 extends g0 {
constructor(U) {
super(U, {
isRenderable: !!U.data.hasOwnCanvas
});
}
}
class w2 extends g0 {
constructor(U) {
super(U, {
isRenderable: U.renderForms
});
}
render() {
const U = this.annotationStorage, l = this.data, d = l.id;
let t = U.getValue(d, {
value: l.exportValue === l.fieldValue
}).value;
typeof t == "string" && (t = t !== "Off", U.setValue(d, {
value: t
})), this.container.classList.add("buttonWidgetAnnotation", "checkBox");
const Z = document.createElement("input");
return j0.add(Z), Z.setAttribute("data-element-id", d), Z.disabled = l.readOnly, this._setRequired(Z, this.data.required), Z.type = "checkbox", Z.name = l.fieldName, t && Z.setAttribute("checked", !0), Z.setAttribute("exportValue", l.exportValue), Z.tabIndex = SW, Z.addEventListener("change", (F) => {
const {
name: n,
checked: s
} = F.target;
for (const W of this._getElementsByName(n, d)) {
const V = s && W.exportValue === l.exportValue;
W.domElement && (W.domElement.checked = V), U.setValue(W.id, {
value: V
});
}
U.setValue(d, {
value: s
});
}), Z.addEventListener("resetform", (F) => {
const n = l.defaultFieldValue || "Off";
F.target.checked = n === l.exportValue;
}), this.enableScripting && this.hasJSActions && (Z.addEventListener("updatefromsandbox", (F) => {
const n = {
value(s) {
s.target.checked = s.detail.value !== "Off", U.setValue(d, {
value: s.target.checked
});
}
};
this._dispatchEventFromSandbox(n, F);
}), this._setEventListeners(Z, null, [["change", "Validate"], ["change", "Action"], ["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], (F) => F.target.checked)), this._setBackgroundColor(Z), this._setDefaultPropertiesFromJS(Z), this.container.append(Z), this.container;
}
}
class sh extends g0 {
constructor(U) {
super(U, {
isRenderable: U.renderForms
});
}
render() {
this.container.classList.add("buttonWidgetAnnotation", "radioButton");
const U = this.annotationStorage, l = this.data, d = l.id;
let t = U.getValue(d, {
value: l.fieldValue === l.buttonValue
}).value;
if (typeof t == "string" && (t = t !== l.buttonValue, U.setValue(d, {
value: t
})), t)
for (const F of this._getElementsByName(l.fieldName, d))
U.setValue(F.id, {
value: !1
});
const Z = document.createElement("input");
if (j0.add(Z), Z.setAttribute("data-element-id", d), Z.disabled = l.readOnly, this._setRequired(Z, this.data.required), Z.type = "radio", Z.name = l.fieldName, t && Z.setAttribute("checked", !0), Z.tabIndex = SW, Z.addEventListener("change", (F) => {
const {
name: n,
checked: s
} = F.target;
for (const W of this._getElementsByName(n, d))
U.setValue(W.id, {
value: !1
});
U.setValue(d, {
value: s
});
}), Z.addEventListener("resetform", (F) => {
const n = l.defaultFieldValue;
F.target.checked = n != null && n === l.buttonValue;
}), this.enableScripting && this.hasJSActions) {
const F = l.buttonValue;
Z.addEventListener("updatefromsandbox", (n) => {
const s = {
value: (W) => {
const V = F === W.detail.value;
for (const Q of this._getElementsByName(W.target.name)) {
const i = V && Q.id === d;
Q.domElement && (Q.domElement.checked = i), U.setValue(Q.id, {
value: i
});
}
}
};
this._dispatchEventFromSandbox(s, n);
}), this._setEventListeners(Z, null, [["change", "Validate"], ["change", "Action"], ["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"]], (n) => n.target.checked);
}
return this._setBackgroundColor(Z), this._setDefaultPropertiesFromJS(Z), this.container.append(Z), this.container;
}
}
class x2 extends Fh {
constructor(U) {
super(U, {
ignoreBorder: U.data.hasAppearance
});
}
render() {
const U = super.render();
U.classList.add("buttonWidgetAnnotation", "pushButton");
const l = U.lastChild;
return this.enableScripting && this.hasJSActions && l && (this._setDefaultPropertiesFromJS(l), l.addEventListener("updatefromsandbox", (d) => {
this._dispatchEventFromSandbox({}, d);
})), U;
}
}
class j2 extends g0 {
constructor(U) {
super(U, {
isRenderable: U.renderForms
});
}
render() {
this.container.classList.add("choiceWidgetAnnotation");
const U = this.annotationStorage, l = this.data.id, d = U.getValue(l, {
value: this.data.fieldValue
}), t = document.createElement("select");
j0.add(t), t.setAttribute("data-element-id", l), t.disabled = this.data.readOnly, this._setRequired(t, this.data.required), t.name = this.data.fieldName, t.tabIndex = SW;
let Z = this.data.combo && this.data.options.length > 0;
this.data.combo || (t.size = this.data.options.length, this.data.multiSelect && (t.multiple = !0)), t.addEventListener("resetform", (V) => {
const Q = this.data.defaultFieldValue;
for (const i of t.options)
i.selected = i.value === Q;
});
for (const V of this.data.options) {
const Q = document.createElement("option");
Q.textContent = V.displayValue, Q.value = V.exportValue, d.value.includes(V.exportValue) && (Q.setAttribute("selected", !0), Z = !1), t.append(Q);
}
let F = null;
if (Z) {
const V = document.createElement("option");
V.value = " ", V.setAttribute("hidden", !0), V.setAttribute("selected", !0), t.prepend(V), F = () => {
V.remove(), t.removeEventListener("input", F), F = null;
}, t.addEventListener("input", F);
}
const n = (V) => {
const Q = V ? "value" : "textContent", {
options: i,
multiple: N
} = t;
return N ? Array.prototype.filter.call(i, (e) => e.selected).map((e) => e[Q]) : i.selectedIndex === -1 ? null : i[i.selectedIndex][Q];
};
let s = n(!1);
const W = (V) => {
const Q = V.target.options;
return Array.prototype.map.call(Q, (i) => ({
displayValue: i.textContent,
exportValue: i.value
}));
};
return this.enableScripting && this.hasJSActions ? (t.addEventListener("updatefromsandbox", (V) => {
const Q = {
value(i) {
F == null || F();
const N = i.detail.value, e = new Set(Array.isArray(N) ? N : [N]);
for (const m of t.options)
m.selected = e.has(m.value);
U.setValue(l, {
value: n(!0)
}), s = n(!1);
},
multipleSelection(i) {
t.multiple = !0;
},
remove(i) {
const N = t.options, e = i.detail.remove;
N[e].selected = !1, t.remove(e), N.length > 0 && Array.prototype.findIndex.call(N, (J) => J.selected) === -1 && (N[0].selected = !0), U.setValue(l, {
value: n(!0),
items: W(i)
}), s = n(!1);
},
clear(i) {
for (; t.length !== 0; )
t.remove(0);
U.setValue(l, {
value: null,
items: []
}), s = n(!1);
},
insert(i) {
const {
index: N,
displayValue: e,
exportValue: m
} = i.detail.insert, J = t.children[N], M = document.createElement("option");
M.textContent = e, M.value = m, J ? J.before(M) : t.append(M), U.setValue(l, {
value: n(!0),
items: W(i)
}), s = n(!1);
},
items(i) {
const {
items: N
} = i.detail;
for (; t.length !== 0; )
t.remove(0);
for (const e of N) {
const {
displayValue: m,
exportValue: J
} = e, M = document.createElement("option");
M.textContent = m, M.value = J, t.append(M);
}
t.options.length > 0 && (t.options[0].selected = !0), U.setValue(l, {
value: n(!0),
items: W(i)
}), s = n(!1);
},
indices(i) {
const N = new Set(i.detail.indices);
for (const e of i.target.options)
e.selected = N.has(e.index);
U.setValue(l, {
value: n(!0)
}), s = n(!1);
},
editable(i) {
i.target.disabled = !i.detail.editable;
}
};
this._dispatchEventFromSandbox(Q, V);
}), t.addEventListener("input", (V) => {
var N;
const Q = n(!0), i = n(!1);
U.setValue(l, {
value: Q
}), V.preventDefault(), (N = this.linkService.eventBus) == null || N.dispatch("dispatcheventinsandbox", {
source: this,
detail: {
id: l,
name: "Keystroke",
value: s,
change: i,
changeEx: Q,
willCommit: !1,
commitKey: 1,
keyDown: !1
}
});
}), this._setEventListeners(t, null, [["focus", "Focus"], ["blur", "Blur"], ["mousedown", "Mouse Down"], ["mouseenter", "Mouse Enter"], ["mouseleave", "Mouse Exit"], ["mouseup", "Mouse Up"], ["input", "Action"], ["input", "Validate"]], (V) => V.target.value)) : t.addEventListener("input", function(V) {
U.setValue(l, {
value: n(!0)
});
}), this.data.combo && this._setTextStyle(t), this._setBackgroundColor(t), this._setDefaultPropertiesFromJS(t), this.container.append(t), this.container;
}
}
class bi extends Ol {
constructor(U) {
const {
data: l,
elements: d
} = U;
super(U, {
isRenderable: Ol._hasPopupData(l)
}), this.elements = d, this.popup = null;
}
render() {
this.container.classList.add("popupAnnotation");
const U = this.popup = new O2({
container: this.container,
color: this.data.color,
titleObj: this.data.titleObj,
modificationDate: this.data.modificationDate,
contentsObj: this.data.contentsObj,
richText: this.data.richText,
rect: this.data.rect,
parentRect: this.data.parentRect || null,
parent: this.parent,
elements: this.elements,
open: this.data.open
}), l = [];
for (const d of this.elements)
d.popup = U, d.container.ariaHasPopup = "dialog", l.push(d.data.id), d.addHighlightArea();
return this.container.setAttribute("aria-controls", l.map((d) => `${BR}${d}`).join(",")), this.container;
}
}
var Ec, vV, PV, rc, U0, rl, xt, Cc, Va, Qa, wc, jt, pd, Ot, ia, gt, Ra, d0, t0, Jl, $W, mi, ah, Wh, Vh, Qh, lV, UV, Mi;
class O2 {
constructor({
container: U,
color: l,
elements: d,
titleObj: t,
modificationDate: Z,
contentsObj: F,
richText: n,
parent: s,
rect: W,
parentRect: V,
open: Q
}) {
b(this, Jl);
b(this, Ec, h(this, Jl, Vh).bind(this));
b(this, vV, h(this, Jl, Mi).bind(this));
b(this, PV, h(this, Jl, UV).bind(this));
b(this, rc, h(this, Jl, lV).bind(this));
b(this, U0, null);
b(this, rl, null);
b(this, xt, null);
b(this, Cc, null);
b(this, Va, null);
b(this, Qa, null);
b(this, wc, null);
b(this, jt, !1);
b(this, pd, null);
b(this, Ot, null);
b(this, ia, null);
b(this, gt, null);
b(this, Ra, null);
b(this, d0, null);
b(this, t0, !1);
var i;
R(this, rl, U), R(this, Ra, t), R(this, xt, F), R(this, gt, n), R(this, Qa, s), R(this, U0, l), R(this, ia, W), R(this, wc, V), R(this, Va, d), R(this, Cc, Ue.toDateObject(Z)), this.trigger = d.flatMap((N) => N.getElementsToTriggerPopup());
for (const N of this.trigger)
N.addEventListener("click", c(this, rc)), N.addEventListener("mouseenter", c(this, PV)), N.addEventListener("mouseleave", c(this, vV)), N.classList.add("popupTriggerArea");
for (const N of d)
(i = N.container) == null || i.addEventListener("keydown", c(this, Ec));
c(this, rl).hidden = !0, Q && h(this, Jl, lV).call(this);
}
render() {
if (c(this, pd))
return;
const U = R(this, pd, document.createElement("div"));
if (U.className = "popup", c(this, U0)) {
const Z = U.style.outlineColor = v.makeHexColor(...c(this, U0));
CSS.supports("background-color", "color-mix(in srgb, red 30%, white)") ? U.style.backgroundColor = `color-mix(in srgb, ${Z} 30%, white)` : U.style.backgroundColor = v.makeHexColor(...c(this, U0).map((n) => Math.floor(0.7 * (255 - n) + n)));
}
const l = document.createElement("span");
l.className = "header";
const d = document.createElement("h1");
if (l.append(d), {
dir: d.dir,
str: d.textContent
} = c(this, Ra), U.append(l), c(this, Cc)) {
const Z = document.createElement("span");
Z.classList.add("popupDate"), Z.setAttribute("data-l10n-id", "pdfjs-annotation-date-time-string"), Z.setAttribute("data-l10n-args", JSON.stringify({
dateObj: c(this, Cc).valueOf()
})), l.append(Z);
}
const t = c(this, Jl, $W);
if (t)
Zh.render({
xfaHtml: t,
intent: "richText",
div: U
}), U.lastChild.classList.add("richText", "popupContent");
else {
const Z = this._formatContents(c(this, xt));
U.append(Z);
}
c(this, rl).append(U);
}
_formatContents({
str: U,
dir: l
}) {
const d = document.createElement("p");
d.classList.add("popupContent"), d.dir = l;
const t = U.split(/(?:\r\n?|\n)/);
for (let Z = 0, F = t.length; Z < F; ++Z) {
const n = t[Z];
d.append(document.createTextNode(n)), Z < F - 1 && d.append(document.createElement("br"));
}
return d;
}
updateEdited({
rect: U,
popupContent: l
}) {
var d;
c(this, d0) || R(this, d0, {
contentsObj: c(this, xt),
richText: c(this, gt)
}), U && R(this, Ot, null), l && (R(this, gt, h(this, Jl, Wh).call(this, l)), R(this, xt, null)), (d = c(this, pd)) == null || d.remove(), R(this, pd, null);
}
resetEdited() {
var U;
c(this, d0) && ({
contentsObj: eU(this, xt)._,
richText: eU(this, gt)._
} = c(this, d0), R(this, d0, null), (U = c(this, pd)) == null || U.remove(), R(this, pd, null), R(this, Ot, null));
}
forceHide() {
R(this, t0, this.isVisible), c(this, t0) && (c(this, rl).hidden = !0);
}
maybeShow() {
c(this, t0) && (c(this, pd) || h(this, Jl, UV).call(this), R(this, t0, !1), c(this, rl).hidden = !1);
}
get isVisible() {
return c(this, rl).hidden === !1;
}
}
Ec = new WeakMap(), vV = new WeakMap(), PV = new WeakMap(), rc = new WeakMap(), U0 = new WeakMap(), rl = new WeakMap(), xt = new WeakMap(), Cc = new WeakMap(), Va = new WeakMap(), Qa = new WeakMap(), wc = new WeakMap(), jt = new WeakMap(), pd = new WeakMap(), Ot = new WeakMap(), ia = new WeakMap(), gt = new WeakMap(), Ra = new WeakMap(), d0 = new WeakMap(), t0 = new WeakMap(), Jl = new WeakSet(), $W = function() {
const U = c(this, gt), l = c(this, xt);
return U != null && U.str && (!(l != null && l.str) || l.str === U.str) && c(this, gt).html || null;
}, mi = function() {
var U, l, d;
return ((d = (l = (U = c(this, Jl, $W)) == null ? void 0 : U.attributes) == null ? void 0 : l.style) == null ? void 0 : d.fontSize) || 0;
}, ah = function() {
var U, l, d;
return ((d = (l = (U = c(this, Jl, $W)) == null ? void 0 : U.attributes) == null ? void 0 : l.style) == null ? void 0 : d.color) || null;
}, Wh = function(U) {
const l = [], d = {
str: U,
html: {
name: "div",
attributes: {
dir: "auto"
},
children: [{
name: "p",
children: l
}]
}
}, t = {
style: {
color: c(this, Jl, ah),
fontSize: c(this, Jl, mi) ? `calc(${c(this, Jl, mi)}px * var(--scale-factor))` : ""
}
};
for (const Z of U.split(`
`))
l.push({
name: "span",
value: Z,
attributes: t
});
return d;
}, Vh = function(U) {
U.altKey || U.shiftKey || U.ctrlKey || U.metaKey || (U.key === "Enter" || U.key === "Escape" && c(this, jt)) && h(this, Jl, lV).call(this);
}, Qh = function() {
if (c(this, Ot) !== null)
return;
const {
page: {
view: U
},
viewport: {
rawDims: {
pageWidth: l,
pageHeight: d,
pageX: t,
pageY: Z
}
}
} = c(this, Qa);
let F = !!c(this, wc), n = F ? c(this, wc) : c(this, ia);
for (const e of c(this, Va))
if (!n || v.intersect(e.data.rect, n) !== null) {
n = e.data.rect, F = !0;
break;
}
const s = v.normalizeRect([n[0], U[3] - n[1] + U[1], n[2], U[3] - n[3] + U[1]]), V = F ? n[2] - n[0] + 5 : 0, Q = s[0] + V, i = s[1];
R(this, Ot, [100 * (Q - t) / l, 100 * (i - Z) / d]);
const {
style: N
} = c(this, rl);
N.left = `${c(this, Ot)[0]}%`, N.top = `${c(this, Ot)[1]}%`;
}, lV = function() {
R(this, jt, !c(this, jt)), c(this, jt) ? (h(this, Jl, UV).call(this), c(this, rl).addEventListener("click", c(this, rc)), c(this, rl).addEventListener("keydown", c(this, Ec))) : (h(this, Jl, Mi).call(this), c(this, rl).removeEventListener("click", c(this, rc)), c(this, rl).removeEventListener("keydown", c(this, Ec)));
}, UV = function() {
c(this, pd) || this.render(), this.isVisible ? c(this, jt) && c(this, rl).classList.add("focused") : (h(this, Jl, Qh).call(this), c(this, rl).hidden = !1, c(this, rl).style.zIndex = parseInt(c(this, rl).style.zIndex) + 1e3);
}, Mi = function() {
c(this, rl).classList.remove("focused"), !(c(this, jt) || !this.isVisible) && (c(this, rl).hidden = !0, c(this, rl).style.zIndex = parseInt(c(this, rl).style.zIndex) - 1e3);
};
class ih extends Ol {
constructor(U) {
super(U, {
isRenderable: !0,
ignoreBorder: !0
}), this.textContent = U.data.textContent, this.textPosition = U.data.textPosition, this.annotationEditorType = cl.FREETEXT;
}
render() {
if (this.container.classList.add("freeTextAnnotation"), this.textContent) {
const U = document.createElement("div");
U.classList.add("annotationTextContent"), U.setAttribute("role", "comment");
for (const l of this.textContent) {
const d = document.createElement("span");
d.textContent = l, U.append(d);
}
this.container.append(U);
}
return !this.data.popupRef && this.hasPopupData && this._createPopup(), this._editOnDoubleClick(), this.container;
}
}
var Na;
class g2 extends Ol {
constructor(l) {
super(l, {
isRenderable: !0,
ignoreBorder: !0
});
b(this, Na, null);
}
render() {
this.container.classList.add("lineAnnotation");
const l = this.data, {
width: d,
height: t
} = aF(l.rect), Z = this.svgFactory.create(d, t, !0), F = R(this, Na, this.svgFactory.createElement("svg:line"));
return F.setAttribute("x1", l.rect[2] - l.lineCoordinates[0]), F.setAttribute("y1", l.rect[3] - l.lineCoordinates[1]), F.setAttribute("x2", l.rect[2] - l.lineCoordinates[2]), F.setAttribute("y2", l.rect[3] - l.lineCoordinates[3]), F.setAttribute("stroke-width", l.borderStyle.width || 1), F.setAttribute("stroke", "transparent"), F.setAttribute("fill", "transparent"), Z.append(F), this.container.append(Z), !l.popupRef && this.hasPopupData && this._createPopup(), this.container;
}
getElementsToTriggerPopup() {
return c(this, Na);
}
addHighlightArea() {
this.container.classList.add("highlightArea");
}
}
Na = new WeakMap();
var ea;
class K2 extends Ol {
constructor(l) {
super(l, {
isRenderable: !0,
ignoreBorder: !0
});
b(this, ea, null);
}
render() {
this.container.classList.add("squareAnnotation");
const l = this.data, {
width: d,
height: t
} = aF(l.rect), Z = this.svgFactory.create(d, t, !0), F = l.borderStyle.width, n = R(this, ea, this.svgFactory.createElement("svg:rect"));
return n.setAttribute("x", F / 2), n.setAttribute("y", F / 2), n.setAttribute("width", d - F), n.setAttribute("height", t - F), n.setAttribute("stroke-width", F || 1), n.setAttribute("stroke", "transparent"), n.setAttribute("fill", "transparent"), Z.append(n), this.container.append(Z), !l.popupRef && this.hasPopupData && this._createPopup(), this.container;
}
getElementsToTriggerPopup() {
return c(this, ea);
}
addHighlightArea() {
this.container.classList.add("highlightArea");
}
}
ea = new WeakMap();
var ha;
class H2 extends Ol {
constructor(l) {
super(l, {
isRenderable: !0,
ignoreBorder: !0
});
b(this, ha, null);
}
render() {
this.container.classList.add("circleAnnotation");
const l = this.data, {
width: d,
height: t
} = aF(l.rect), Z = this.svgFactory.create(d, t, !0), F = l.borderStyle.width, n = R(this, ha, this.svgFactory.createElement("svg:ellipse"));
return n.setAttribute("cx", d / 2), n.setAttribute("cy", t / 2), n.setAttribute("rx", d / 2 - F / 2), n.setAttribute("ry", t / 2 - F / 2), n.setAttribute("stroke-width", F || 1), n.setAttribute("stroke", "transparent"), n.setAttribute("fill", "transparent"), Z.append(n), this.container.append(Z), !l.popupRef && this.hasPopupData && this._createPopup(), this.container;
}
getElementsToTriggerPopup() {
return c(this, ha);
}
addHighlightArea() {
this.container.classList.add("highlightArea");
}
}
ha = new WeakMap();
var ba;
class Rh extends Ol {
constructor(l) {
super(l, {
isRenderable: !0,
ignoreBorder: !0
});
b(this, ba, null);
this.containerClassName = "polylineAnnotation", this.svgElementName = "svg:polyline";
}
render() {
this.container.classList.add(this.containerClassName);
const {
data: {
rect: l,
vertices: d,
borderStyle: t,
popupRef: Z
}
} = this;
if (!d)
return this.container;
const {
width: F,
height: n
} = aF(l), s = this.svgFactory.create(F, n, !0);
let W = [];
for (let Q = 0, i = d.length; Q < i; Q += 2) {
const N = d[Q] - l[0], e = l[3] - d[Q + 1];
W.push(`${N},${e}`);
}
W = W.join(" ");
const V = R(this, ba, this.svgFactory.createElement(this.svgElementName));
return V.setAttribute("points", W), V.setAttribute("stroke-width", t.width || 1), V.setAttribute("stroke", "transparent"), V.setAttribute("fill", "transparent"), s.append(V), this.container.append(s), !Z && this.hasPopupData && this._createPopup(), this.container;
}
getElementsToTriggerPopup() {
return c(this, ba);
}
addHighlightArea() {
this.container.classList.add("highlightArea");
}
}
ba = new WeakMap();
class v2 extends Rh {
constructor(U) {
super(U), this.containerClassName = "polygonAnnotation", this.svgElementName = "svg:polygon";
}
}
class P2 extends Ol {
constructor(U) {
super(U, {
isRenderable: !0,
ignoreBorder: !0
});
}
render() {
return this.container.classList.add("caretAnnotation"), !this.data.popupRef && this.hasPopupData && this._createPopup(), this.container;
}
}
var ma, Z0, Ma, Ji;
class ER extends Ol {
constructor(l) {
super(l, {
isRenderable: !0,
ignoreBorder: !0
});
b(this, Ma);
b(this, ma, null);
b(this, Z0, []);
this.containerClassName = "inkAnnotation", this.svgElementName = "svg:polyline", this.annotationEditorType = this.data.it === "InkHighlight" ? cl.HIGHLIGHT : cl.INK;
}
render() {
this.container.classList.add(this.containerClassName);
const {
data: {
rect: l,
rotation: d,
inkLists: t,
borderStyle: Z,
popupRef: F
}
} = this, {
transform: n,
width: s,
height: W
} = h(this, Ma, Ji).call(this, d, l), V = this.svgFactory.create(s, W, !0), Q = R(this, ma, this.svgFactory.createElement("svg:g"));
V.append(Q), Q.setAttribute("stroke-width", Z.width || 1), Q.setAttribute("stroke-linecap", "round"), Q.setAttribute("stroke-linejoin", "round"), Q.setAttribute("stroke-miterlimit", 10), Q.setAttribute("stroke", "transparent"), Q.setAttribute("fill", "transparent"), Q.setAttribute("transform", n);
for (let i = 0, N = t.length; i < N; i++) {
const e = this.svgFactory.createElement(this.svgElementName);
c(this, Z0).push(e), e.setAttribute("points", t[i].join(",")), Q.append(e);
}
return !F && this.hasPopupData && this._createPopup(), this.container.append(V), this._editOnDoubleClick(), this.container;
}
updateEdited(l) {
super.updateEdited(l);
const {
thickness: d,
points: t,
rect: Z
} = l, F = c(this, ma);
if (d >= 0 && F.setAttribute("stroke-width", d || 1), t)
for (let n = 0, s = c(this, Z0).length; n < s; n++)
c(this, Z0)[n].setAttribute("points", t[n].join(","));
if (Z) {
const {
transform: n,
width: s,
height: W
} = h(this, Ma, Ji).call(this, this.data.rotation, Z);
F.parentElement.setAttribute("viewBox", `0 0 ${s} ${W}`), F.setAttribute("transform", n);
}
}
getElementsToTriggerPopup() {
return c(this, Z0);
}
addHighlightArea() {
this.container.classList.add("highlightArea");
}
}
ma = new WeakMap(), Z0 = new WeakMap(), Ma = new WeakSet(), Ji = function(l, d) {
switch (l) {
case 90:
return {
transform: `rotate(90) translate(${-d[0]},${d[1]}) scale(1,-1)`,
width: d[3] - d[1],
height: d[2] - d[0]
};
case 180:
return {
transform: `rotate(180) translate(${-d[2]},${d[1]}) scale(1,-1)`,
width: d[2] - d[0],
height: d[3] - d[1]
};
case 270:
return {
transform: `rotate(270) translate(${-d[2]},${d[3]}) scale(1,-1)`,
width: d[3] - d[1],
height: d[2] - d[0]
};
default:
return {
transform: `translate(${-d[0]},${d[3]}) scale(1,-1)`,
width: d[2] - d[0],
height: d[3] - d[1]
};
}
};
class Nh extends Ol {
constructor(U) {
super(U, {
isRenderable: !0,
ignoreBorder: !0,
createQuadrilaterals: !0
}), this.annotationEditorType = cl.HIGHLIGHT;
}
render() {
return !this.data.popupRef && this.hasPopupData && this._createPopup(), this.container.classList.add("highlightAnnotation"), this._editOnDoubleClick(), this.container;
}
}
class f2 extends Ol {
constructor(U) {
super(U, {
isRenderable: !0,
ignoreBorder: !0,
createQuadrilaterals: !0
});
}
render() {
return !this.data.popupRef && this.hasPopupData && this._createPopup(), this.container.classList.add("underlineAnnotation"), this.container;
}
}
class A2 extends Ol {
constructor(U) {
super(U, {
isRenderable: !0,
ignoreBorder: !0,
createQuadrilaterals: !0
});
}
render() {
return !this.data.popupRef && this.hasPopupData && this._createPopup(), this.container.classList.add("squigglyAnnotation"), this.container;
}
}
class _2 extends Ol {
constructor(U) {
super(U, {
isRenderable: !0,
ignoreBorder: !0,
createQuadrilaterals: !0
});
}
render() {
return !this.data.popupRef && this.hasPopupData && this._createPopup(), this.container.classList.add("strikeoutAnnotation"), this.container;
}
}
class eh extends Ol {
constructor(U) {
super(U, {
isRenderable: !0,
ignoreBorder: !0
}), this.annotationEditorType = cl.STAMP;
}
render() {
return this.container.classList.add("stampAnnotation"), this.container.setAttribute("role", "img"), !this.data.popupRef && this.hasPopupData && this._createPopup(), this._editOnDoubleClick(), this.container;
}
}
var Ja, Ga, Gi;
class q2 extends Ol {
constructor(l) {
var t;
super(l, {
isRenderable: !0
});
b(this, Ga);
b(this, Ja, null);
const {
file: d
} = this.data;
this.filename = d.filename, this.content = d.content, (t = this.linkService.eventBus) == null || t.dispatch("fileattachmentannotation", {
source: this,
...d
});
}
render() {
this.container.classList.add("fileAttachmentAnnotation");
const {
container: l,
data: d
} = this;
let t;
d.hasAppearance || d.fillAlpha === 0 ? t = document.createElement("div") : (t = document.createElement("img"), t.src = `${this.imageResourcesPath}annotation-${/paperclip/i.test(d.name) ? "paperclip" : "pushpin"}.svg`, d.fillAlpha && d.fillAlpha < 1 && (t.style = `filter: opacity(${Math.round(d.fillAlpha * 100)}%);`)), t.addEventListener("dblclick", h(this, Ga, Gi).bind(this)), R(this, Ja, t);
const {
isMac: Z
} = LU.platform;
return l.addEventListener("keydown", (F) => {
F.key === "Enter" && (Z ? F.metaKey : F.ctrlKey) && h(this, Ga, Gi).call(this);
}), !d.popupRef && this.hasPopupData ? this._createPopup() : t.classList.add("popupTriggerArea"), l.append(t), l;
}
getElementsToTriggerPopup() {
return c(this, Ja);
}
addHighlightArea() {
this.container.classList.add("highlightArea");
}
}
Ja = new WeakMap(), Ga = new WeakSet(), Gi = function() {
var l;
(l = this.downloadManager) == null || l.openOrDownloadData(this.content, this.filename);
};
var Sa, F0, c0, Ta, O0, hh, Si, _N;
let $2 = (_N = class {
constructor({
div: U,
accessibilityManager: l,
annotationCanvasMap: d,
annotationEditorUIManager: t,
page: Z,
viewport: F,
structTreeLayer: n
}) {
b(this, O0);
b(this, Sa, null);
b(this, F0, null);
b(this, c0, /* @__PURE__ */ new Map());
b(this, Ta, null);
this.div = U, R(this, Sa, l), R(this, F0, d), R(this, Ta, n || null), this.page = Z, this.viewport = F, this.zIndex = 0, this._annotationEditorUIManager = t;
}
hasEditableAnnotations() {
return c(this, c0).size > 0;
}
async render(U) {
var F;
const {
annotations: l
} = U, d = this.div;
x0(d, this.viewport);
const t = /* @__PURE__ */ new Map(), Z = {
data: null,
layer: d,
linkService: U.linkService,
downloadManager: U.downloadManager,
imageResourcesPath: U.imageResourcesPath || "",
renderForms: U.renderForms !== !1,
svgFactory: new DR(),
annotationStorage: U.annotationStorage || new kR(),
enableScripting: U.enableScripting === !0,
hasJSActions: U.hasJSActions,
fieldObjects: U.fieldObjects,
parent: this,
elements: null
};
for (const n of l) {
if (n.noHTML)
continue;
const s = n.annotationType === Pl.POPUP;
if (s) {
const Q = t.get(n.id);
if (!Q)
continue;
Z.elements = Q;
} else {
const {
width: Q,
height: i
} = aF(n.rect);
if (Q <= 0 || i <= 0)
continue;
}
Z.data = n;
const W = D2.create(Z);
if (!W.isRenderable)
continue;
if (!s && n.popupRef) {
const Q = t.get(n.popupRef);
Q ? Q.push(W) : t.set(n.popupRef, [W]);
}
const V = W.render();
n.hidden && (V.style.visibility = "hidden"), await h(this, O0, hh).call(this, V, n.id), W._isEditable && (c(this, c0).set(W.data.id, W), (F = this._annotationEditorUIManager) == null || F.renderAnnotationElement(W));
}
h(this, O0, Si).call(this);
}
update({
viewport: U
}) {
const l = this.div;
this.viewport = U, x0(l, {
rotation: U.rotation
}), h(this, O0, Si).call(this), l.hidden = !1;
}
getEditableAnnotations() {
return Array.from(c(this, c0).values());
}
getEditableAnnotation(U) {
return c(this, c0).get(U);
}
}, Sa = new WeakMap(), F0 = new WeakMap(), c0 = new WeakMap(), Ta = new WeakMap(), O0 = new WeakSet(), hh = async function(U, l) {
var F, n;
const d = U.firstChild || U, t = d.id = `${BR}${l}`, Z = await ((F = c(this, Ta)) == null ? void 0 : F.getAriaAttributes(t));
if (Z)
for (const [s, W] of Z)
d.setAttribute(s, W);
this.div.append(U), (n = c(this, Sa)) == null || n.moveElementInDOM(this.div, U, d, !1);
}, Si = function() {
if (!c(this, F0))
return;
const U = this.div;
for (const [l, d] of c(this, F0)) {
const t = U.querySelector(`[data-annotation-id="${l}"]`);
if (!t)
continue;
d.className = "annotationContent";
const {
firstChild: Z
} = t;
Z ? Z.nodeName === "CANVAS" ? Z.replaceWith(d) : Z.classList.contains("annotationContent") ? Z.after(d) : Z.before(d) : t.append(d);
}
c(this, F0).clear();
}, _N);
const oW = /\r\n?|\n/g;
var Bd, AU, Xa, n0, _U, vl, bh, mh, Mh, dV, nZ, tV, ZV, Jh, Xi, Gh;
const Yl = class Yl extends kl {
constructor(l) {
super({
...l,
name: "freeTextEditor"
});
b(this, vl);
b(this, Bd);
b(this, AU, "");
b(this, Xa, `${this.id}-editor`);
b(this, n0, null);
b(this, _U);
R(this, Bd, l.color || Yl._defaultColor || kl._defaultLineColor), R(this, _U, l.fontSize || Yl._defaultFontSize);
}
static get _keyboardManager() {
const l = Yl.prototype, d = (F) => F.isEmpty(), t = es.TRANSLATE_SMALL, Z = es.TRANSLATE_BIG;
return Wl(this, "_keyboardManager", new GW([[["ctrl+s", "mac+meta+s", "ctrl+p", "mac+meta+p"], l.commitOrRemove, {
bubbles: !0
}], [["ctrl+Enter", "mac+meta+Enter", "Escape", "mac+Escape"], l.commitOrRemove], [["ArrowLeft", "mac+ArrowLeft"], l._translateEmpty, {
args: [-t, 0],
checker: d
}], [["ctrl+ArrowLeft", "mac+shift+ArrowLeft"], l._translateEmpty, {
args: [-Z, 0],
checker: d
}], [["ArrowRight", "mac+ArrowRight"], l._translateEmpty, {
args: [t, 0],
checker: d
}], [["ctrl+ArrowRight", "mac+shift+ArrowRight"], l._translateEmpty, {
args: [Z, 0],
checker: d
}], [["ArrowUp", "mac+ArrowUp"], l._translateEmpty, {
args: [0, -t],
checker: d
}], [["ctrl+ArrowUp", "mac+shift+ArrowUp"], l._translateEmpty, {
args: [0, -Z],
checker: d
}], [["ArrowDown", "mac+ArrowDown"], l._translateEmpty, {
args: [0, t],
checker: d
}], [["ctrl+ArrowDown", "mac+shift+ArrowDown"], l._translateEmpty, {
args: [0, Z],
checker: d
}]]));
}
static initialize(l, d) {
kl.initialize(l, d);
const t = getComputedStyle(document.documentElement);
this._internalPadding = parseFloat(t.getPropertyValue("--freetext-padding"));
}
static updateDefaultParams(l, d) {
switch (l) {
case Vl.FREETEXT_SIZE:
Yl._defaultFontSize = d;
break;
case Vl.FREETEXT_COLOR:
Yl._defaultColor = d;
break;
}
}
updateParams(l, d) {
switch (l) {
case Vl.FREETEXT_SIZE:
h(this, vl, bh).call(this, d);
break;
case Vl.FREETEXT_COLOR:
h(this, vl, mh).call(this, d);
break;
}
}
static get defaultPropertiesToUpdate() {
return [[Vl.FREETEXT_SIZE, Yl._defaultFontSize], [Vl.FREETEXT_COLOR, Yl._defaultColor || kl._defaultLineColor]];
}
get propertiesToUpdate() {
return [[Vl.FREETEXT_SIZE, c(this, _U)], [Vl.FREETEXT_COLOR, c(this, Bd)]];
}
_translateEmpty(l, d) {
this._uiManager.translateSelectedEditors(l, d, !0);
}
getInitialTranslation() {
const l = this.parentScale;
return [-Yl._internalPadding * l, -(Yl._internalPadding + c(this, _U)) * l];
}
rebuild() {
this.parent && (super.rebuild(), this.div !== null && (this.isAttachedToDOM || this.parent.add(this)));
}
enableEditMode() {
if (this.isInEditMode())
return;
this.parent.setEditingState(!1), this.parent.updateToolbar(cl.FREETEXT), super.enableEditMode(), this.overlayDiv.classList.remove("enabled"), this.editorDiv.contentEditable = !0, this._isDraggable = !1, this.div.removeAttribute("aria-activedescendant"), R(this, n0, new AbortController());
const l = this._uiManager.combinedSignal(c(this, n0));
this.editorDiv.addEventListener("keydown", this.editorDivKeydown.bind(this), {
signal: l
}), this.editorDiv.addEventListener("focus", this.editorDivFocus.bind(this), {
signal: l
}), this.editorDiv.addEventListener("blur", this.editorDivBlur.bind(this), {
signal: l
}), this.editorDiv.addEventListener("input", this.editorDivInput.bind(this), {
signal: l
}), this.editorDiv.addEventListener("paste", this.editorDivPaste.bind(this), {
signal: l
});
}
disableEditMode() {
var l;
this.isInEditMode() && (this.parent.setEditingState(!0), super.disableEditMode(), this.overlayDiv.classList.add("enabled"), this.editorDiv.contentEditable = !1, this.div.setAttribute("aria-activedescendant", c(this, Xa)), this._isDraggable = !0, (l = c(this, n0)) == null || l.abort(), R(this, n0, null), this.div.focus({
preventScroll: !0
}), this.isEditing = !1, this.parent.div.classList.add("freetextEditing"));
}
focusin(l) {
this._focusEventsAllowed && (super.focusin(l), l.target !== this.editorDiv && this.editorDiv.focus());
}
onceAdded(l) {
var d;
this.width || (this.enableEditMode(), l && this.editorDiv.focus(), (d = this._initialOptions) != null && d.isCentered && this.center(), this._initialOptions = null);
}
isEmpty() {
return !this.editorDiv || this.editorDiv.innerText.trim() === "";
}
remove() {
this.isEditing = !1, this.parent && (this.parent.setEditingState(!0), this.parent.div.classList.add("freetextEditing")), super.remove();
}
commit() {
if (!this.isInEditMode())
return;
super.commit(), this.disableEditMode();
const l = c(this, AU), d = R(this, AU, h(this, vl, Mh).call(this).trimEnd());
if (l === d)
return;
const t = (Z) => {
if (R(this, AU, Z), !Z) {
this.remove();
return;
}
h(this, vl, ZV).call(this), this._uiManager.rebuild(this), h(this, vl, dV).call(this);
};
this.addCommands({
cmd: () => {
t(d);
},
undo: () => {
t(l);
},
mustExec: !1
}), h(this, vl, dV).call(this);
}
shouldGetKeyboardEvents() {
return this.isInEditMode();
}
enterInEditMode() {
this.enableEditMode(), this.editorDiv.focus();
}
dblclick(l) {
this.enterInEditMode();
}
keydown(l) {
l.target === this.div && l.key === "Enter" && (this.enterInEditMode(), l.preventDefault());
}
editorDivKeydown(l) {
Yl._keyboardManager.exec(this, l);
}
editorDivFocus(l) {
this.isEditing = !0;
}
editorDivBlur(l) {
this.isEditing = !1;
}
editorDivInput(l) {
this.parent.div.classList.toggle("freetextEditing", this.isEmpty());
}
disableEditing() {
this.editorDiv.setAttribute("role", "comment"), this.editorDiv.removeAttribute("aria-multiline");
}
enableEditing() {
this.editorDiv.setAttribute("role", "textbox"), this.editorDiv.setAttribute("aria-multiline", !0);
}
render() {
if (this.div)
return this.div;
let l, d;
this.width && (l = this.x, d = this.y), super.render(), this.editorDiv = document.createElement("div"), this.editorDiv.className = "internal", this.editorDiv.setAttribute("id", c(this, Xa)), this.editorDiv.setAttribute("data-l10n-id", "pdfjs-free-text2"), this.editorDiv.setAttribute("data-l10n-attrs", "default-content"), this.enableEditing(), this.editorDiv.contentEditable = !0;
const {
style: t
} = this.editorDiv;
if (t.fontSize = `calc(${c(this, _U)}px * var(--scale-factor))`, t.color = c(this, Bd), this.div.append(this.editorDiv), this.overlayDiv = document.createElement("div"), this.overlayDiv.classList.add("overlay", "enabled"), this.div.append(this.overlayDiv), uV(this, this.div, ["dblclick", "keydown"]), this.width) {
const [Z, F] = this.parentDimensions;
if (this.annotationElementId) {
const {
position: n
} = this._initialData;
let [s, W] = this.getInitialTranslation();
[s, W] = this.pageTranslationToScreen(s, W);
const [V, Q] = this.pageDimensions, [i, N] = this.pageTranslation;
let e, m;
switch (this.rotation) {
case 0:
e = l + (n[0] - i) / V, m = d + this.height - (n[1] - N) / Q;
break;
case 90:
e = l + (n[0] - i) / V, m = d - (n[1] - N) / Q, [s, W] = [W, -s];
break;
case 180:
e = l - this.width + (n[0] - i) / V, m = d - (n[1] - N) / Q, [s, W] = [-s, -W];
break;
case 270:
e = l + (n[0] - i - this.height * Q) / V, m = d + (n[1] - N - this.width * V) / Q, [s, W] = [-W, s];
break;
}
this.setAt(e * Z, m * F, s, W);
} else
this.setAt(l * Z, d * F, this.width * Z, this.height * F);
h(this, vl, ZV).call(this), this._isDraggable = !0, this.editorDiv.contentEditable = !1;
} else
this._isDraggable = !1, this.editorDiv.contentEditable = !0;
return this.div;
}
editorDivPaste(l) {
var e, m, J;
const d = l.clipboardData || window.clipboardData, {
types: t
} = d;
if (t.length === 1 && t[0] === "text/plain")
return;
l.preventDefault();
const Z = h(e = Yl, nZ, Xi).call(e, d.getData("text") || "").replaceAll(oW, `
`);
if (!Z)
return;
const F = window.getSelection();
if (!F.rangeCount)
return;
this.editorDiv.normalize(), F.deleteFromDocument();
const n = F.getRangeAt(0);
if (!Z.includes(`
`)) {
n.insertNode(document.createTextNode(Z)), this.editorDiv.normalize(), F.collapseToStart();
return;
}
const {
startContainer: s,
startOffset: W
} = n, V = [], Q = [];
if (s.nodeType === Node.TEXT_NODE) {
const M = s.parentElement;
if (Q.push(s.nodeValue.slice(W).replaceAll(oW, "")), M !== this.editorDiv) {
let G = V;
for (const S of this.editorDiv.childNodes) {
if (S === M) {
G = Q;
continue;
}
G.push(h(m = Yl, nZ, tV).call(m, S));
}
}
V.push(s.nodeValue.slice(0, W).replaceAll(oW, ""));
} else if (s === this.editorDiv) {
let M = V, G = 0;
for (const S of this.editorDiv.childNodes)
G++ === W && (M = Q), M.push(h(J = Yl, nZ, tV).call(J, S));
}
R(this, AU, `${V.join(`
`)}${Z}${Q.join(`
`)}`), h(this, vl, ZV).call(this);
const i = new Range();
let N = V.reduce((M, G) => M + G.length, 0);
for (const {
firstChild: M
} of this.editorDiv.childNodes)
if (M.nodeType === Node.TEXT_NODE) {
const G = M.nodeValue.length;
if (N <= G) {
i.setStart(M, N), i.setEnd(M, N);
break;
}
N -= G;
}
F.removeAllRanges(), F.addRange(i);
}
get contentDiv() {
return this.editorDiv;
}
static async deserialize(l, d, t) {
var n;
let Z = null;
if (l instanceof ih) {
const {
data: {
defaultAppearanceData: {
fontSize: s,
fontColor: W
},
rect: V,
rotation: Q,
id: i,
popupRef: N
},
textContent: e,
textPosition: m,
parent: {
page: {
pageNumber: J
}
}
} = l;
if (!e || e.length === 0)
return null;
Z = l = {
annotationType: cl.FREETEXT,
color: Array.from(W),
fontSize: s,
value: e.join(`
`),
position: m,
pageIndex: J - 1,
rect: V.slice(0),
rotation: Q,
id: i,
deleted: !1,
popupRef: N
};
}
const F = await super.deserialize(l, d, t);
return R(F, _U, l.fontSize), R(F, Bd, v.makeHexColor(...l.color)), R(F, AU, h(n = Yl, nZ, Xi).call(n, l.value)), F.annotationElementId = l.id || null, F._initialData = Z, F;
}
serialize(l = !1) {
if (this.isEmpty())
return null;
if (this.deleted)
return this.serializeDeleted();
const d = Yl._internalPadding * this.parentScale, t = this.getRect(d, d), Z = kl._colorManager.convert(this.isAttachedToDOM ? getComputedStyle(this.editorDiv).color : c(this, Bd)), F = {
annotationType: cl.FREETEXT,
color: Z,
fontSize: c(this, _U),
value: h(this, vl, Jh).call(this),
pageIndex: this.pageIndex,
rect: t,
rotation: this.rotation,
structTreeParentId: this._structTreeParentId
};
return l ? F : this.annotationElementId && !h(this, vl, Gh).call(this, F) ? null : (F.id = this.annotationElementId, F);
}
renderAnnotationElement(l) {
const d = super.renderAnnotationElement(l);
if (this.deleted)
return d;
const {
style: t
} = d;
t.fontSize = `calc(${c(this, _U)}px * var(--scale-factor))`, t.color = c(this, Bd), d.replaceChildren();
for (const F of c(this, AU).split(`
`)) {
const n = document.createElement("div");
n.append(F ? document.createTextNode(F) : document.createElement("br")), d.append(n);
}
const Z = Yl._internalPadding * this.parentScale;
return l.updateEdited({
rect: this.getRect(Z, Z),
popupContent: c(this, AU)
}), d;
}
resetAnnotationElement(l) {
super.resetAnnotationElement(l), l.resetEdited();
}
};
Bd = new WeakMap(), AU = new WeakMap(), Xa = new WeakMap(), n0 = new WeakMap(), _U = new WeakMap(), vl = new WeakSet(), bh = function(l) {
const d = (Z) => {
this.editorDiv.style.fontSize = `calc(${Z}px * var(--scale-factor))`, this.translate(0, -(Z - c(this, _U)) * this.parentScale), R(this, _U, Z), h(this, vl, dV).call(this);
}, t = c(this, _U);
this.addCommands({
cmd: d.bind(this, l),
undo: d.bind(this, t),
post: this._uiManager.updateUI.bind(this._uiManager, this),
mustExec: !0,
type: Vl.FREETEXT_SIZE,
overwriteIfSameType: !0,
keepUndo: !0
});
}, mh = function(l) {
const d = (Z) => {
R(this, Bd, this.editorDiv.style.color = Z);
}, t = c(this, Bd);
this.addCommands({
cmd: d.bind(this, l),
undo: d.bind(this, t),
post: this._uiManager.updateUI.bind(this._uiManager, this),
mustExec: !0,
type: Vl.FREETEXT_COLOR,
overwriteIfSameType: !0,
keepUndo: !0
});
}, Mh = function() {
var t;
const l = [];
this.editorDiv.normalize();
let d = null;
for (const Z of this.editorDiv.childNodes)
(d == null ? void 0 : d.nodeType) === Node.TEXT_NODE && Z.nodeName === "BR" || (l.push(h(t = Yl, nZ, tV).call(t, Z)), d = Z);
return l.join(`
`);
}, dV = function() {
const [l, d] = this.parentDimensions;
let t;
if (this.isAttachedToDOM)
t = this.div.getBoundingClientRect();
else {
const {
currentLayer: Z,
div: F
} = this, n = F.style.display, s = F.classList.contains("hidden");
F.classList.remove("hidden"), F.style.display = "hidden", Z.div.append(this.div), t = F.getBoundingClientRect(), F.remove(), F.style.display = n, F.classList.toggle("hidden", s);
}
this.rotation % 180 === this.parentRotation % 180 ? (this.width = t.width / l, this.height = t.height / d) : (this.width = t.height / l, this.height = t.width / d), this.fixAndSetPosition();
}, nZ = new WeakSet(), tV = function(l) {
return (l.nodeType === Node.TEXT_NODE ? l.nodeValue : l.innerText).replaceAll(oW, "");
}, ZV = function() {
if (this.editorDiv.replaceChildren(), !!c(this, AU))
for (const l of c(this, AU).split(`
`)) {
const d = document.createElement("div");
d.append(l ? document.createTextNode(l) : document.createElement("br")), this.editorDiv.append(d);
}
}, Jh = function() {
return c(this, AU).replaceAll(" ", " ");
}, Xi = function(l) {
return l.replaceAll(" ", " ");
}, Gh = function(l) {
const {
value: d,
fontSize: t,
color: Z,
pageIndex: F
} = this._initialData;
return this._hasBeenMoved || l.value !== d || l.fontSize !== t || l.color.some((n, s) => n !== Z[s]) || l.pageIndex !== F;
}, b(Yl, nZ), f(Yl, "_freeTextDefaultContent", ""), f(Yl, "_internalPadding", 0), f(Yl, "_defaultColor", null), f(Yl, "_defaultFontSize", 10), f(Yl, "_type", "freetext"), f(Yl, "_editorType", cl.FREETEXT);
let Ti = Yl;
class O {
toSVGPath() {
ul("Abstract method `toSVGPath` must be implemented.");
}
get box() {
ul("Abstract getter `box` must be implemented.");
}
serialize(U, l) {
ul("Abstract method `serialize` must be implemented.");
}
static _rescale(U, l, d, t, Z, F) {
F || (F = new Float32Array(U.length));
for (let n = 0, s = U.length; n < s; n += 2)
F[n] = l + U[n] * t, F[n + 1] = d + U[n + 1] * Z;
return F;
}
static _rescaleAndSwap(U, l, d, t, Z, F) {
F || (F = new Float32Array(U.length));
for (let n = 0, s = U.length; n < s; n += 2)
F[n] = l + U[n + 1] * t, F[n + 1] = d + U[n] * Z;
return F;
}
static _translate(U, l, d, t) {
t || (t = new Float32Array(U.length));
for (let Z = 0, F = U.length; Z < F; Z += 2)
t[Z] = l + U[Z], t[Z + 1] = d + U[Z + 1];
return t;
}
static svgRound(U) {
return Math.round(U * 1e4);
}
static _normalizePoint(U, l, d, t, Z) {
switch (Z) {
case 90:
return [1 - l / d, U / t];
case 180:
return [1 - U / d, 1 - l / t];
case 270:
return [l / d, 1 - U / t];
default:
return [U / d, l / t];
}
}
static _normalizePagePoint(U, l, d) {
switch (d) {
case 90:
return [1 - l, U];
case 180:
return [1 - U, 1 - l];
case 270:
return [l, 1 - U];
default:
return [U, l];
}
}
static createBezierPoints(U, l, d, t, Z, F) {
return [(U + 5 * d) / 6, (l + 5 * t) / 6, (5 * d + Z) / 6, (5 * t + F) / 6, (d + Z) / 2, (t + F) / 2];
}
}
f(O, "PRECISION", 1e-4);
var qU, yd, xc, jc, Zt, al, s0, a0, ua, Ya, Oc, gc, kZ, oa, fV, AV, $l, qn, Sh, Th, Xh, uh, Yh, oh;
const Xt = class Xt {
constructor({
x: U,
y: l
}, d, t, Z, F, n = 0) {
b(this, $l);
b(this, qU);
b(this, yd, []);
b(this, xc);
b(this, jc);
b(this, Zt, []);
b(this, al, new Float32Array(18));
b(this, s0);
b(this, a0);
b(this, ua);
b(this, Ya);
b(this, Oc);
b(this, gc);
b(this, kZ, []);
R(this, qU, d), R(this, gc, Z * t), R(this, jc, F), c(this, al).set([NaN, NaN, NaN, NaN, U, l], 6), R(this, xc, n), R(this, Ya, c(Xt, oa) * t), R(this, ua, c(Xt, AV) * t), R(this, Oc, t), c(this, kZ).push(U, l);
}
isEmpty() {
return isNaN(c(this, al)[8]);
}
add({
x: U,
y: l
}) {
var X;
R(this, s0, U), R(this, a0, l);
const [d, t, Z, F] = c(this, qU);
let [n, s, W, V] = c(this, al).subarray(8, 12);
const Q = U - W, i = l - V, N = Math.hypot(Q, i);
if (N < c(this, ua))
return !1;
const e = N - c(this, Ya), m = e / N, J = m * Q, M = m * i;
let G = n, S = s;
n = W, s = V, W += J, V += M, (X = c(this, kZ)) == null || X.push(U, l);
const T = -M / e, u = J / e, Y = T * c(this, gc), o = u * c(this, gc);
return c(this, al).set(c(this, al).subarray(2, 8), 0), c(this, al).set([W + Y, V + o], 4), c(this, al).set(c(this, al).subarray(14, 18), 12), c(this, al).set([W - Y, V - o], 16), isNaN(c(this, al)[6]) ? (c(this, Zt).length === 0 && (c(this, al).set([n + Y, s + o], 2), c(this, Zt).push(NaN, NaN, NaN, NaN, (n + Y - d) / Z, (s + o - t) / F), c(this, al).set([n - Y, s - o], 14), c(this, yd).push(NaN, NaN, NaN, NaN, (n - Y - d) / Z, (s - o - t) / F)), c(this, al).set([G, S, n, s, W, V], 6), !this.isEmpty()) : (c(this, al).set([G, S, n, s, W, V], 6), Math.abs(Math.atan2(S - s, G - n) - Math.atan2(M, J)) < Math.PI / 2 ? ([n, s, W, V] = c(this, al).subarray(2, 6), c(this, Zt).push(NaN, NaN, NaN, NaN, ((n + W) / 2 - d) / Z, ((s + V) / 2 - t) / F), [n, s, G, S] = c(this, al).subarray(14, 18), c(this, yd).push(NaN, NaN, NaN, NaN, ((G + n) / 2 - d) / Z, ((S + s) / 2 - t) / F), !0) : ([G, S, n, s, W, V] = c(this, al).subarray(0, 6), c(this, Zt).push(((G + 5 * n) / 6 - d) / Z, ((S + 5 * s) / 6 - t) / F, ((5 * n + W) / 6 - d) / Z, ((5 * s + V) / 6 - t) / F, ((n + W) / 2 - d) / Z, ((s + V) / 2 - t) / F), [W, V, n, s, G, S] = c(this, al).subarray(12, 18), c(this, yd).push(((G + 5 * n) / 6 - d) / Z, ((S + 5 * s) / 6 - t) / F, ((5 * n + W) / 6 - d) / Z, ((5 * s + V) / 6 - t) / F, ((n + W) / 2 - d) / Z, ((s + V) / 2 - t) / F), !0));
}
toSVGPath() {
if (this.isEmpty())
return "";
const U = c(this, Zt), l = c(this, yd);
if (isNaN(c(this, al)[6]) && !this.isEmpty())
return h(this, $l, Sh).call(this);
const d = [];
d.push(`M${U[4]} ${U[5]}`);
for (let t = 6; t < U.length; t += 6)
isNaN(U[t]) ? d.push(`L${U[t + 4]} ${U[t + 5]}`) : d.push(`C${U[t]} ${U[t + 1]} ${U[t + 2]} ${U[t + 3]} ${U[t + 4]} ${U[t + 5]}`);
h(this, $l, Xh).call(this, d);
for (let t = l.length - 6; t >= 6; t -= 6)
isNaN(l[t]) ? d.push(`L${l[t + 4]} ${l[t + 5]}`) : d.push(`C${l[t]} ${l[t + 1]} ${l[t + 2]} ${l[t + 3]} ${l[t + 4]} ${l[t + 5]}`);
return h(this, $l, Th).call(this, d), d.join(" ");
}
newFreeDrawOutline(U, l, d, t, Z, F) {
return new ph(U, l, d, t, Z, F);
}
getOutlines() {
var Q;
const U = c(this, Zt), l = c(this, yd), d = c(this, al), [t, Z, F, n] = c(this, qU), s = new Float32Array((((Q = c(this, kZ)) == null ? void 0 : Q.length) ?? 0) + 2);
for (let i = 0, N = s.length - 2; i < N; i += 2)
s[i] = (c(this, kZ)[i] - t) / F, s[i + 1] = (c(this, kZ)[i + 1] - Z) / n;
if (s[s.length - 2] = (c(this, s0) - t) / F, s[s.length - 1] = (c(this, a0) - Z) / n, isNaN(d[6]) && !this.isEmpty())
return h(this, $l, uh).call(this, s);
const W = new Float32Array(c(this, Zt).length + 24 + c(this, yd).length);
let V = U.length;
for (let i = 0; i < V; i += 2) {
if (isNaN(U[i])) {
W[i] = W[i + 1] = NaN;
continue;
}
W[i] = U[i], W[i + 1] = U[i + 1];
}
V = h(this, $l, oh).call(this, W, V);
for (let i = l.length - 6; i >= 6; i -= 6)
for (let N = 0; N < 6; N += 2) {
if (isNaN(l[i + N])) {
W[V] = W[V + 1] = NaN, V += 2;
continue;
}
W[V] = l[i + N], W[V + 1] = l[i + N + 1], V += 2;
}
return h(this, $l, Yh).call(this, W, V), this.newFreeDrawOutline(W, s, c(this, qU), c(this, Oc), c(this, xc), c(this, jc));
}
};
qU = new WeakMap(), yd = new WeakMap(), xc = new WeakMap(), jc = new WeakMap(), Zt = new WeakMap(), al = new WeakMap(), s0 = new WeakMap(), a0 = new WeakMap(), ua = new WeakMap(), Ya = new WeakMap(), Oc = new WeakMap(), gc = new WeakMap(), kZ = new WeakMap(), oa = new WeakMap(), fV = new WeakMap(), AV = new WeakMap(), $l = new WeakSet(), qn = function() {
const U = c(this, al).subarray(4, 6), l = c(this, al).subarray(16, 18), [d, t, Z, F] = c(this, qU);
return [(c(this, s0) + (U[0] - l[0]) / 2 - d) / Z, (c(this, a0) + (U[1] - l[1]) / 2 - t) / F, (c(this, s0) + (l[0] - U[0]) / 2 - d) / Z, (c(this, a0) + (l[1] - U[1]) / 2 - t) / F];
}, Sh = function() {
const [U, l, d, t] = c(this, qU), [Z, F, n, s] = h(this, $l, qn).call(this);
return `M${(c(this, al)[2] - U) / d} ${(c(this, al)[3] - l) / t} L${(c(this, al)[4] - U) / d} ${(c(this, al)[5] - l) / t} L${Z} ${F} L${n} ${s} L${(c(this, al)[16] - U) / d} ${(c(this, al)[17] - l) / t} L${(c(this, al)[14] - U) / d} ${(c(this, al)[15] - l) / t} Z`;
}, Th = function(U) {
const l = c(this, yd);
U.push(`L${l[4]} ${l[5]} Z`);
}, Xh = function(U) {
const [l, d, t, Z] = c(this, qU), F = c(this, al).subarray(4, 6), n = c(this, al).subarray(16, 18), [s, W, V, Q] = h(this, $l, qn).call(this);
U.push(`L${(F[0] - l) / t} ${(F[1] - d) / Z} L${s} ${W} L${V} ${Q} L${(n[0] - l) / t} ${(n[1] - d) / Z}`);
}, uh = function(U) {
const l = c(this, al), [d, t, Z, F] = c(this, qU), [n, s, W, V] = h(this, $l, qn).call(this), Q = new Float32Array(36);
return Q.set([NaN, NaN, NaN, NaN, (l[2] - d) / Z, (l[3] - t) / F, NaN, NaN, NaN, NaN, (l[4] - d) / Z, (l[5] - t) / F, NaN, NaN, NaN, NaN, n, s, NaN, NaN, NaN, NaN, W, V, NaN, NaN, NaN, NaN, (l[16] - d) / Z, (l[17] - t) / F, NaN, NaN, NaN, NaN, (l[14] - d) / Z, (l[15] - t) / F], 0), this.newFreeDrawOutline(Q, U, c(this, qU), c(this, Oc), c(this, xc), c(this, jc));
}, Yh = function(U, l) {
const d = c(this, yd);
return U.set([NaN, NaN, NaN, NaN, d[4], d[5]], l), l += 6;
}, oh = function(U, l) {
const d = c(this, al).subarray(4, 6), t = c(this, al).subarray(16, 18), [Z, F, n, s] = c(this, qU), [W, V, Q, i] = h(this, $l, qn).call(this);
return U.set([NaN, NaN, NaN, NaN, (d[0] - Z) / n, (d[1] - F) / s, NaN, NaN, NaN, NaN, W, V, NaN, NaN, NaN, NaN, Q, i, NaN, NaN, NaN, NaN, (t[0] - Z) / n, (t[1] - F) / s], l), l += 24;
}, b(Xt, oa, 8), b(Xt, fV, 2), b(Xt, AV, c(Xt, oa) + c(Xt, fV));
let oV = Xt;
var Kc, W0, Kt, pa, $U, Ba, jl, _V, Bh;
class ph extends O {
constructor(l, d, t, Z, F, n) {
super();
b(this, _V);
b(this, Kc);
b(this, W0, new Float32Array(4));
b(this, Kt);
b(this, pa);
b(this, $U);
b(this, Ba);
b(this, jl);
R(this, jl, l), R(this, $U, d), R(this, Kc, t), R(this, Ba, Z), R(this, Kt, F), R(this, pa, n), this.lastPoint = [NaN, NaN], h(this, _V, Bh).call(this, n);
const [s, W, V, Q] = c(this, W0);
for (let i = 0, N = l.length; i < N; i += 2)
l[i] = (l[i] - s) / V, l[i + 1] = (l[i + 1] - W) / Q;
for (let i = 0, N = d.length; i < N; i += 2)
d[i] = (d[i] - s) / V, d[i + 1] = (d[i + 1] - W) / Q;
}
toSVGPath() {
const l = [`M${c(this, jl)[4]} ${c(this, jl)[5]}`];
for (let d = 6, t = c(this, jl).length; d < t; d += 6) {
if (isNaN(c(this, jl)[d])) {
l.push(`L${c(this, jl)[d + 4]} ${c(this, jl)[d + 5]}`);
continue;
}
l.push(`C${c(this, jl)[d]} ${c(this, jl)[d + 1]} ${c(this, jl)[d + 2]} ${c(this, jl)[d + 3]} ${c(this, jl)[d + 4]} ${c(this, jl)[d + 5]}`);
}
return l.push("Z"), l.join(" ");
}
serialize([l, d, t, Z], F) {
const n = t - l, s = Z - d;
let W, V;
switch (F) {
case 0:
W = O._rescale(c(this, jl), l, Z, n, -s), V = O._rescale(c(this, $U), l, Z, n, -s);
break;
case 90:
W = O._rescaleAndSwap(c(this, jl), l, d, n, s), V = O._rescaleAndSwap(c(this, $U), l, d, n, s);
break;
case 180:
W = O._rescale(c(this, jl), t, d, -n, s), V = O._rescale(c(this, $U), t, d, -n, s);
break;
case 270:
W = O._rescaleAndSwap(c(this, jl), t, Z, -n, -s), V = O._rescaleAndSwap(c(this, $U), t, Z, -n, -s);
break;
}
return {
outline: Array.from(W),
points: [Array.from(V)]
};
}
get box() {
return c(this, W0);
}
newOutliner(l, d, t, Z, F, n = 0) {
return new oV(l, d, t, Z, F, n);
}
getNewOutline(l, d) {
const [t, Z, F, n] = c(this, W0), [s, W, V, Q] = c(this, Kc), i = F * V, N = n * Q, e = t * V + s, m = Z * Q + W, J = this.newOutliner({
x: c(this, $U)[0] * i + e,
y: c(this, $U)[1] * N + m
}, c(this, Kc), c(this, Ba), l, c(this, pa), d ?? c(this, Kt));
for (let M = 2; M < c(this, $U).length; M += 2)
J.add({
x: c(this, $U)[M] * i + e,
y: c(this, $U)[M + 1] * N + m
});
return J.getOutlines();
}
}
Kc = new WeakMap(), W0 = new WeakMap(), Kt = new WeakMap(), pa = new WeakMap(), $U = new WeakMap(), Ba = new WeakMap(), jl = new WeakMap(), _V = new WeakSet(), Bh = function(l) {
const d = c(this, jl);
let t = d[4], Z = d[5], F = t, n = Z, s = t, W = Z, V = t, Q = Z;
const i = l ? Math.max : Math.min;
for (let e = 6, m = d.length; e < m; e += 6) {
if (isNaN(d[e]))
F = Math.min(F, d[e + 4]), n = Math.min(n, d[e + 5]), s = Math.max(s, d[e + 4]), W = Math.max(W, d[e + 5]), Q < d[e + 5] ? (V = d[e + 4], Q = d[e + 5]) : Q === d[e + 5] && (V = i(V, d[e + 4]));
else {
const J = v.bezierBoundingBox(t, Z, ...d.slice(e, e + 6));
F = Math.min(F, J[0]), n = Math.min(n, J[1]), s = Math.max(s, J[2]), W = Math.max(W, J[3]), Q < J[3] ? (V = J[2], Q = J[3]) : Q === J[3] && (V = i(V, J[2]));
}
t = d[e + 4], Z = d[e + 5];
}
const N = c(this, W0);
N[0] = F - c(this, Kt), N[1] = n - c(this, Kt), N[2] = s - F + 2 * c(this, Kt), N[3] = W - n + 2 * c(this, Kt), this.lastPoint = [V, Q];
};
var ya, za, IZ, zd, IU, yh, FV, zh, Lh, Yi;
class ui {
constructor(U, l = 0, d = 0, t = !0) {
b(this, IU);
b(this, ya);
b(this, za);
b(this, IZ, []);
b(this, zd, []);
let Z = 1 / 0, F = -1 / 0, n = 1 / 0, s = -1 / 0;
const V = 10 ** -4;
for (const {
x: M,
y: G,
width: S,
height: T
} of U) {
const u = Math.floor((M - l) / V) * V, Y = Math.ceil((M + S + l) / V) * V, o = Math.floor((G - l) / V) * V, B = Math.ceil((G + T + l) / V) * V, X = [u, o, B, !0], p = [Y, o, B, !1];
c(this, IZ).push(X, p), Z = Math.min(Z, u), F = Math.max(F, Y), n = Math.min(n, o), s = Math.max(s, B);
}
const Q = F - Z + 2 * d, i = s - n + 2 * d, N = Z - d, e = n - d, m = c(this, IZ).at(t ? -1 : -2), J = [m[0], m[2]];
for (const M of c(this, IZ)) {
const [G, S, T] = M;
M[0] = (G - N) / Q, M[1] = (S - e) / i, M[2] = (T - e) / i;
}
R(this, ya, new Float32Array([N, e, Q, i])), R(this, za, J);
}
getOutlines() {
c(this, IZ).sort((l, d) => l[0] - d[0] || l[1] - d[1] || l[2] - d[2]);
const U = [];
for (const l of c(this, IZ))
l[3] ? (U.push(...h(this, IU, Yi).call(this, l)), h(this, IU, zh).call(this, l)) : (h(this, IU, Lh).call(this, l), U.push(...h(this, IU, Yi).call(this, l)));
return h(this, IU, yh).call(this, U);
}
}
ya = new WeakMap(), za = new WeakMap(), IZ = new WeakMap(), zd = new WeakMap(), IU = new WeakSet(), yh = function(U) {
const l = [], d = /* @__PURE__ */ new Set();
for (const F of U) {
const [n, s, W] = F;
l.push([n, s, F], [n, W, F]);
}
l.sort((F, n) => F[1] - n[1] || F[0] - n[0]);
for (let F = 0, n = l.length; F < n; F += 2) {
const s = l[F][2], W = l[F + 1][2];
s.push(W), W.push(s), d.add(s), d.add(W);
}
const t = [];
let Z;
for (; d.size > 0; ) {
const F = d.values().next().value;
let [n, s, W, V, Q] = F;
d.delete(F);
let i = n, N = s;
for (Z = [n, W], t.push(Z); ; ) {
let e;
if (d.has(V))
e = V;
else if (d.has(Q))
e = Q;
else
break;
d.delete(e), [n, s, W, V, Q] = e, i !== n && (Z.push(i, N, n, N === s ? s : W), i = n), N = N === s ? W : s;
}
Z.push(i, N);
}
return new lM(t, c(this, ya), c(this, za));
}, FV = function(U) {
const l = c(this, zd);
let d = 0, t = l.length - 1;
for (; d <= t; ) {
const Z = d + t >> 1, F = l[Z][0];
if (F === U)
return Z;
F < U ? d = Z + 1 : t = Z - 1;
}
return t + 1;
}, zh = function([, U, l]) {
const d = h(this, IU, FV).call(this, U);
c(this, zd).splice(d, 0, [U, l]);
}, Lh = function([, U, l]) {
const d = h(this, IU, FV).call(this, U);
for (let t = d; t < c(this, zd).length; t++) {
const [Z, F] = c(this, zd)[t];
if (Z !== U)
break;
if (Z === U && F === l) {
c(this, zd).splice(t, 1);
return;
}
}
for (let t = d - 1; t >= 0; t--) {
const [Z, F] = c(this, zd)[t];
if (Z !== U)
break;
if (Z === U && F === l) {
c(this, zd).splice(t, 1);
return;
}
}
}, Yi = function(U) {
const [l, d, t] = U, Z = [[l, d, t]], F = h(this, IU, FV).call(this, t);
for (let n = 0; n < F; n++) {
const [s, W] = c(this, zd)[n];
for (let V = 0, Q = Z.length; V < Q; V++) {
const [, i, N] = Z[V];
if (!(W <= i || N <= s)) {
if (i >= s) {
if (N > W)
Z[V][1] = W;
else {
if (Q === 1)
return [];
Z.splice(V, 1), V--, Q--;
}
continue;
}
Z[V][2] = s, N > W && Z.push([l, W, N]);
}
}
}
return Z;
};
var La, Hc;
class lM extends O {
constructor(l, d, t) {
super();
b(this, La);
b(this, Hc);
R(this, Hc, l), R(this, La, d), this.lastPoint = t;
}
toSVGPath() {
const l = [];
for (const d of c(this, Hc)) {
let [t, Z] = d;
l.push(`M${t} ${Z}`);
for (let F = 2; F < d.length; F += 2) {
const n = d[F], s = d[F + 1];
n === t ? (l.push(`V${s}`), Z = s) : s === Z && (l.push(`H${n}`), t = n);
}
l.push("Z");
}
return l.join(" ");
}
serialize([l, d, t, Z], F) {
const n = [], s = t - l, W = Z - d;
for (const V of c(this, Hc)) {
const Q = new Array(V.length);
for (let i = 0; i < V.length; i += 2)
Q[i] = l + V[i] * s, Q[i + 1] = Z - V[i + 1] * W;
n.push(Q);
}
return n;
}
get box() {
return c(this, La);
}
get classNamesForOutlining() {
return ["highlightOutline"];
}
}
La = new WeakMap(), Hc = new WeakMap();
class oi extends oV {
newFreeDrawOutline(U, l, d, t, Z, F) {
return new UM(U, l, d, t, Z, F);
}
}
class UM extends ph {
newOutliner(U, l, d, t, Z, F = 0) {
return new oi(U, l, d, t, Z, F);
}
}
var Ld, V0, vc, Al, ka, Pc, Ia, Da, DZ, kd, fc, RU, Ea, Ml, pi, Bi, yi, RF, Ih, WZ;
let kh = (RU = class {
constructor({
editor: U = null,
uiManager: l = null
}) {
b(this, Ml);
b(this, Ld, null);
b(this, V0, null);
b(this, vc);
b(this, Al, null);
b(this, ka, !1);
b(this, Pc, !1);
b(this, Ia, null);
b(this, Da);
b(this, DZ, null);
b(this, kd, null);
b(this, fc);
var d;
U ? (R(this, Pc, !1), R(this, fc, Vl.HIGHLIGHT_COLOR), R(this, Ia, U)) : (R(this, Pc, !0), R(this, fc, Vl.HIGHLIGHT_DEFAULT_COLOR)), R(this, kd, (U == null ? void 0 : U._uiManager) || l), R(this, Da, c(this, kd)._eventBus), R(this, vc, (U == null ? void 0 : U.color) || ((d = c(this, kd)) == null ? void 0 : d.highlightColors.values().next().value) || "#FFFF98"), c(RU, Ea) || R(RU, Ea, Object.freeze({
blue: "pdfjs-editor-colorpicker-blue",
green: "pdfjs-editor-colorpicker-green",
pink: "pdfjs-editor-colorpicker-pink",
red: "pdfjs-editor-colorpicker-red",
yellow: "pdfjs-editor-colorpicker-yellow"
}));
}
static get _keyboardManager() {
return Wl(this, "_keyboardManager", new GW([[["Escape", "mac+Escape"], RU.prototype._hideDropdownFromKeyboard], [[" ", "mac+ "], RU.prototype._colorSelectFromKeyboard], [["ArrowDown", "ArrowRight", "mac+ArrowDown", "mac+ArrowRight"], RU.prototype._moveToNext], [["ArrowUp", "ArrowLeft", "mac+ArrowUp", "mac+ArrowLeft"], RU.prototype._moveToPrevious], [["Home", "mac+Home"], RU.prototype._moveToBeginning], [["End", "mac+End"], RU.prototype._moveToEnd]]));
}
renderButton() {
const U = R(this, Ld, document.createElement("button"));
U.className = "colorPicker", U.tabIndex = "0", U.setAttribute("data-l10n-id", "pdfjs-editor-colorpicker-button"), U.setAttribute("aria-haspopup", !0);
const l = c(this, kd)._signal;
U.addEventListener("click", h(this, Ml, RF).bind(this), {
signal: l
}), U.addEventListener("keydown", h(this, Ml, yi).bind(this), {
signal: l
});
const d = R(this, V0, document.createElement("span"));
return d.className = "swatch", d.setAttribute("aria-hidden", !0), d.style.backgroundColor = c(this, vc), U.append(d), U;
}
renderMainDropdown() {
const U = R(this, Al, h(this, Ml, pi).call(this));
return U.setAttribute("aria-orientation", "horizontal"), U.setAttribute("aria-labelledby", "highlightColorPickerLabel"), U;
}
_colorSelectFromKeyboard(U) {
if (U.target === c(this, Ld)) {
h(this, Ml, RF).call(this, U);
return;
}
const l = U.target.getAttribute("data-color");
l && h(this, Ml, Bi).call(this, l, U);
}
_moveToNext(U) {
var l, d;
if (!c(this, Ml, WZ)) {
h(this, Ml, RF).call(this, U);
return;
}
if (U.target === c(this, Ld)) {
(l = c(this, Al).firstChild) == null || l.focus();
return;
}
(d = U.target.nextSibling) == null || d.focus();
}
_moveToPrevious(U) {
var l, d;
if (U.target === ((l = c(this, Al)) == null ? void 0 : l.firstChild) || U.target === c(this, Ld)) {
c(this, Ml, WZ) && this._hideDropdownFromKeyboard();
return;
}
c(this, Ml, WZ) || h(this, Ml, RF).call(this, U), (d = U.target.previousSibling) == null || d.focus();
}
_moveToBeginning(U) {
var l;
if (!c(this, Ml, WZ)) {
h(this, Ml, RF).call(this, U);
return;
}
(l = c(this, Al).firstChild) == null || l.focus();
}
_moveToEnd(U) {
var l;
if (!c(this, Ml, WZ)) {
h(this, Ml, RF).call(this, U);
return;
}
(l = c(this, Al).lastChild) == null || l.focus();
}
hideDropdown() {
var U, l;
(U = c(this, Al)) == null || U.classList.add("hidden"), (l = c(this, DZ)) == null || l.abort(), R(this, DZ, null);
}
_hideDropdownFromKeyboard() {
var U;
if (!c(this, Pc)) {
if (!c(this, Ml, WZ)) {
(U = c(this, Ia)) == null || U.unselect();
return;
}
this.hideDropdown(), c(this, Ld).focus({
preventScroll: !0,
focusVisible: c(this, ka)
});
}
}
updateColor(U) {
if (c(this, V0) && (c(this, V0).style.backgroundColor = U), !c(this, Al))
return;
const l = c(this, kd).highlightColors.values();
for (const d of c(this, Al).children)
d.setAttribute("aria-selected", l.next().value === U);
}
destroy() {
var U, l;
(U = c(this, Ld)) == null || U.remove(), R(this, Ld, null), R(this, V0, null), (l = c(this, Al)) == null || l.remove(), R(this, Al, null);
}
}, Ld = new WeakMap(), V0 = new WeakMap(), vc = new WeakMap(), Al = new WeakMap(), ka = new WeakMap(), Pc = new WeakMap(), Ia = new WeakMap(), Da = new WeakMap(), DZ = new WeakMap(), kd = new WeakMap(), fc = new WeakMap(), Ea = new WeakMap(), Ml = new WeakSet(), pi = function() {
const U = document.createElement("div"), l = c(this, kd)._signal;
U.addEventListener("contextmenu", Cd, {
signal: l
}), U.className = "dropdown", U.role = "listbox", U.setAttribute("aria-multiselectable", !1), U.setAttribute("aria-orientation", "vertical"), U.setAttribute("data-l10n-id", "pdfjs-editor-colorpicker-dropdown");
for (const [d, t] of c(this, kd).highlightColors) {
const Z = document.createElement("button");
Z.tabIndex = "0", Z.role = "option", Z.setAttribute("data-color", t), Z.title = d, Z.setAttribute("data-l10n-id", c(RU, Ea)[d]);
const F = document.createElement("span");
Z.append(F), F.className = "swatch", F.style.backgroundColor = t, Z.setAttribute("aria-selected", t === c(this, vc)), Z.addEventListener("click", h(this, Ml, Bi).bind(this, t), {
signal: l
}), U.append(Z);
}
return U.addEventListener("keydown", h(this, Ml, yi).bind(this), {
signal: l
}), U;
}, Bi = function(U, l) {
l.stopPropagation(), c(this, Da).dispatch("switchannotationeditorparams", {
source: this,
type: c(this, fc),
value: U
});
}, yi = function(U) {
RU._keyboardManager.exec(this, U);
}, RF = function(U) {
if (c(this, Ml, WZ)) {
this.hideDropdown();
return;
}
if (R(this, ka, U.detail === 0), c(this, DZ) || (R(this, DZ, new AbortController()), window.addEventListener("pointerdown", h(this, Ml, Ih).bind(this), {
signal: c(this, kd).combinedSignal(c(this, DZ))
})), c(this, Al)) {
c(this, Al).classList.remove("hidden");
return;
}
const l = R(this, Al, h(this, Ml, pi).call(this));
c(this, Ld).append(l);
}, Ih = function(U) {
var l;
(l = c(this, Al)) != null && l.contains(U.target) || this.hideDropdown();
}, WZ = function() {
return c(this, Al) && !c(this, Al).classList.contains("hidden");
}, b(RU, Ea, null), RU);
var Ac, ra, Ht, Q0, _c, wU, Ca, wa, i0, Rd, ld, VU, qc, vt, JU, $c, Nd, xa, Zl, zi, cV, Dh, Eh, rh, Li, NF, Jd, _0, Ch, nV, $n, wh, xh, jh, Oh, gh;
const el = class el extends kl {
constructor(l) {
super({
...l,
name: "highlightEditor"
});
b(this, Zl);
b(this, Ac, null);
b(this, ra, 0);
b(this, Ht);
b(this, Q0, null);
b(this, _c, null);
b(this, wU, null);
b(this, Ca, null);
b(this, wa, 0);
b(this, i0, null);
b(this, Rd, null);
b(this, ld, null);
b(this, VU, !1);
b(this, qc, null);
b(this, vt);
b(this, JU, null);
b(this, $c, "");
b(this, Nd);
b(this, xa, "");
this.color = l.color || el._defaultColor, R(this, Nd, l.thickness || el._defaultThickness), R(this, vt, l.opacity || el._defaultOpacity), R(this, Ht, l.boxes || null), R(this, xa, l.methodOfCreation || ""), R(this, $c, l.text || ""), this._isDraggable = !1, l.highlightId > -1 ? (R(this, VU, !0), h(this, Zl, cV).call(this, l), h(this, Zl, NF).call(this)) : c(this, Ht) && (R(this, Ac, l.anchorNode), R(this, ra, l.anchorOffset), R(this, Ca, l.focusNode), R(this, wa, l.focusOffset), h(this, Zl, zi).call(this), h(this, Zl, NF).call(this), this.rotate(this.rotation));
}
static get _keyboardManager() {
const l = el.prototype;
return Wl(this, "_keyboardManager", new GW([[["ArrowLeft", "mac+ArrowLeft"], l._moveCaret, {
args: [0]
}], [["ArrowRight", "mac+ArrowRight"], l._moveCaret, {
args: [1]
}], [["ArrowUp", "mac+ArrowUp"], l._moveCaret, {
args: [2]
}], [["ArrowDown", "mac+ArrowDown"], l._moveCaret, {
args: [3]
}]]));
}
get telemetryInitialData() {
return {
action: "added",
type: c(this, VU) ? "free_highlight" : "highlight",
color: this._uiManager.highlightColorNames.get(this.color),
thickness: c(this, Nd),
methodOfCreation: c(this, xa)
};
}
get telemetryFinalData() {
return {
type: "highlight",
color: this._uiManager.highlightColorNames.get(this.color)
};
}
static computeTelemetryFinalData(l) {
return {
numberOfColors: l.get("color").size
};
}
static initialize(l, d) {
var t;
kl.initialize(l, d), el._defaultColor || (el._defaultColor = ((t = d.highlightColors) == null ? void 0 : t.values().next().value) || "#fff066");
}
static updateDefaultParams(l, d) {
switch (l) {
case Vl.HIGHLIGHT_DEFAULT_COLOR:
el._defaultColor = d;
break;
case Vl.HIGHLIGHT_THICKNESS:
el._defaultThickness = d;
break;
}
}
translateInPage(l, d) {
}
get toolbarPosition() {
return c(this, qc);
}
updateParams(l, d) {
switch (l) {
case Vl.HIGHLIGHT_COLOR:
h(this, Zl, Dh).call(this, d);
break;
case Vl.HIGHLIGHT_THICKNESS:
h(this, Zl, Eh).call(this, d);
break;
}
}
static get defaultPropertiesToUpdate() {
return [[Vl.HIGHLIGHT_DEFAULT_COLOR, el._defaultColor], [Vl.HIGHLIGHT_THICKNESS, el._defaultThickness]];
}
get propertiesToUpdate() {
return [[Vl.HIGHLIGHT_COLOR, this.color || el._defaultColor], [Vl.HIGHLIGHT_THICKNESS, c(this, Nd) || el._defaultThickness], [Vl.HIGHLIGHT_FREE, c(this, VU)]];
}
async addEditToolbar() {
const l = await super.addEditToolbar();
return l ? (this._uiManager.highlightColors && (R(this, _c, new kh({
editor: this
})), l.addColorPicker(c(this, _c))), l) : null;
}
disableEditing() {
super.disableEditing(), this.div.classList.toggle("disabled", !0);
}
enableEditing() {
super.enableEditing(), this.div.classList.toggle("disabled", !1);
}
fixAndSetPosition() {
return super.fixAndSetPosition(h(this, Zl, $n).call(this));
}
getBaseTranslation() {
return [0, 0];
}
getRect(l, d) {
return super.getRect(l, d, h(this, Zl, $n).call(this));
}
onceAdded(l) {
this.annotationElementId || this.parent.addUndoableEditor(this), l && this.div.focus();
}
remove() {
h(this, Zl, Li).call(this), this._reportTelemetry({
action: "deleted"
}), super.remove();
}
rebuild() {
this.parent && (super.rebuild(), this.div !== null && (h(this, Zl, NF).call(this), this.isAttachedToDOM || this.parent.add(this)));
}
setParent(l) {
var t;
let d = !1;
this.parent && !l ? h(this, Zl, Li).call(this) : l && (h(this, Zl, NF).call(this, l), d = !this.parent && ((t = this.div) == null ? void 0 : t.classList.contains("selectedEditor"))), super.setParent(l), this.show(this._isVisible), d && this.select();
}
rotate(l) {
var Z, F, n;
const {
drawLayer: d
} = this.parent;
let t;
c(this, VU) ? (l = (l - this.rotation + 360) % 360, t = h(Z = el, Jd, _0).call(Z, c(this, Rd).box, l)) : t = h(F = el, Jd, _0).call(F, [this.x, this.y, this.width, this.height], l), d.updateProperties(c(this, ld), {
bbox: t,
root: {
"data-main-rotation": l
}
}), d.updateProperties(c(this, JU), {
bbox: h(n = el, Jd, _0).call(n, c(this, wU).box, l),
root: {
"data-main-rotation": l
}
});
}
render() {
if (this.div)
return this.div;
const l = super.render();
c(this, $c) && (l.setAttribute("aria-label", c(this, $c)), l.setAttribute("role", "mark")), c(this, VU) ? l.classList.add("free") : this.div.addEventListener("keydown", h(this, Zl, Ch).bind(this), {
signal: this._uiManager._signal
});
const d = R(this, i0, document.createElement("div"));
l.append(d), d.setAttribute("aria-hidden", "true"), d.className = "internal", d.style.clipPath = c(this, Q0);
const [t, Z] = this.parentDimensions;
return this.setDims(this.width * t, this.height * Z), uV(this, c(this, i0), ["pointerover", "pointerleave"]), this.enableEditing(), l;
}
pointerover() {
var l;
this.isSelected || (l = this.parent) == null || l.drawLayer.updateProperties(c(this, JU), {
rootClass: {
hovered: !0
}
});
}
pointerleave() {
var l;
this.isSelected || (l = this.parent) == null || l.drawLayer.updateProperties(c(this, JU), {
rootClass: {
hovered: !1
}
});
}
_moveCaret(l) {
switch (this.parent.unselect(this), l) {
case 0:
case 2:
h(this, Zl, nV).call(this, !0);
break;
case 1:
case 3:
h(this, Zl, nV).call(this, !1);
break;
}
}
select() {
var l;
super.select(), c(this, JU) && ((l = this.parent) == null || l.drawLayer.updateProperties(c(this, JU), {
rootClass: {
hovered: !1,
selected: !0
}
}));
}
unselect() {
var l;
super.unselect(), c(this, JU) && ((l = this.parent) == null || l.drawLayer.updateProperties(c(this, JU), {
rootClass: {
selected: !1
}
}), c(this, VU) || h(this, Zl, nV).call(this, !1));
}
get _mustFixPosition() {
return !c(this, VU);
}
show(l = this._isVisible) {
super.show(l), this.parent && (this.parent.drawLayer.updateProperties(c(this, ld), {
rootClass: {
hidden: !l
}
}), this.parent.drawLayer.updateProperties(c(this, JU), {
rootClass: {
hidden: !l
}
}));
}
static startHighlighting(l, d, {
target: t,
x: Z,
y: F
}) {
const {
x: n,
y: s,
width: W,
height: V
} = t.getBoundingClientRect(), Q = new AbortController(), i = l.combinedSignal(Q), N = (e) => {
Q.abort(), h(this, Jd, Oh).call(this, l, e);
};
window.addEventListener("blur", N, {
signal: i
}), window.addEventListener("pointerup", N, {
signal: i
}), window.addEventListener("pointerdown", nd, {
capture: !0,
passive: !1,
signal: i
}), window.addEventListener("contextmenu", Cd, {
signal: i
}), t.addEventListener("pointermove", h(this, Jd, jh).bind(this, l), {
signal: i
}), this._freeHighlight = new oi({
x: Z,
y: F
}, [n, s, W, V], l.scale, this._defaultThickness / 2, d, 1e-3), {
id: this._freeHighlightId,
clipPathId: this._freeHighlightClipId
} = l.drawLayer.draw({
bbox: [0, 0, 1, 1],
root: {
viewBox: "0 0 1 1",
fill: this._defaultColor,
"fill-opacity": this._defaultOpacity
},
rootClass: {
highlight: !0,
free: !0
},
path: {
d: this._freeHighlight.toSVGPath()
}
}, !0, !0);
}
static async deserialize(l, d, t) {
var m, J, M, G;
let Z = null;
if (l instanceof Nh) {
const {
data: {
quadPoints: S,
rect: T,
rotation: u,
id: Y,
color: o,
opacity: B,
popupRef: X
},
parent: {
page: {
pageNumber: p
}
}
} = l;
Z = l = {
annotationType: cl.HIGHLIGHT,
color: Array.from(o),
opacity: B,
quadPoints: S,
boxes: null,
pageIndex: p - 1,
rect: T.slice(0),
rotation: u,
id: Y,
deleted: !1,
popupRef: X
};
} else if (l instanceof ER) {
const {
data: {
inkLists: S,
rect: T,
rotation: u,
id: Y,
color: o,
borderStyle: {
rawWidth: B
},
popupRef: X
},
parent: {
page: {
pageNumber: p
}
}
} = l;
Z = l = {
annotationType: cl.HIGHLIGHT,
color: Array.from(o),
thickness: B,
inkLists: S,
boxes: null,
pageIndex: p - 1,
rect: T.slice(0),
rotation: u,
id: Y,
deleted: !1,
popupRef: X
};
}
const {
color: F,
quadPoints: n,
inkLists: s,
opacity: W
} = l, V = await super.deserialize(l, d, t);
V.color = v.makeHexColor(...F), R(V, vt, W || 1), s && R(V, Nd, l.thickness), V.annotationElementId = l.id || null, V._initialData = Z;
const [Q, i] = V.pageDimensions, [N, e] = V.pageTranslation;
if (n) {
const S = R(V, Ht, []);
for (let T = 0; T < n.length; T += 8)
S.push({
x: (n[T] - N) / Q,
y: 1 - (n[T + 1] - e) / i,
width: (n[T + 2] - n[T]) / Q,
height: (n[T + 1] - n[T + 5]) / i
});
h(m = V, Zl, zi).call(m), h(J = V, Zl, NF).call(J), V.rotate(V.rotation);
} else if (s) {
R(V, VU, !0);
const S = s[0], T = {
x: S[0] - N,
y: i - (S[1] - e)
}, u = new oi(T, [0, 0, Q, i], 1, c(V, Nd) / 2, !0, 1e-3);
for (let B = 0, X = S.length; B < X; B += 2)
T.x = S[B] - N, T.y = i - (S[B + 1] - e), u.add(T);
const {
id: Y,
clipPathId: o
} = d.drawLayer.draw({
bbox: [0, 0, 1, 1],
root: {
viewBox: "0 0 1 1",
fill: V.color,
"fill-opacity": V._defaultOpacity
},
rootClass: {
highlight: !0,
free: !0
},
path: {
d: u.toSVGPath()
}
}, !0, !0);
h(M = V, Zl, cV).call(M, {
highlightOutlines: u.getOutlines(),
highlightId: Y,
clipPathId: o
}), h(G = V, Zl, NF).call(G);
}
return V;
}
serialize(l = !1) {
if (this.isEmpty() || l)
return null;
if (this.deleted)
return this.serializeDeleted();
const d = this.getRect(0, 0), t = kl._colorManager.convert(this.color), Z = {
annotationType: cl.HIGHLIGHT,
color: t,
opacity: c(this, vt),
thickness: c(this, Nd),
quadPoints: h(this, Zl, wh).call(this),
outlines: h(this, Zl, xh).call(this, d),
pageIndex: this.pageIndex,
rect: d,
rotation: h(this, Zl, $n).call(this),
structTreeParentId: this._structTreeParentId
};
return this.annotationElementId && !h(this, Zl, gh).call(this, Z) ? null : (Z.id = this.annotationElementId, Z);
}
renderAnnotationElement(l) {
return l.updateEdited({
rect: this.getRect(0, 0)
}), null;
}
static canCreateNewEmptyEditor() {
return !1;
}
};
Ac = new WeakMap(), ra = new WeakMap(), Ht = new WeakMap(), Q0 = new WeakMap(), _c = new WeakMap(), wU = new WeakMap(), Ca = new WeakMap(), wa = new WeakMap(), i0 = new WeakMap(), Rd = new WeakMap(), ld = new WeakMap(), VU = new WeakMap(), qc = new WeakMap(), vt = new WeakMap(), JU = new WeakMap(), $c = new WeakMap(), Nd = new WeakMap(), xa = new WeakMap(), Zl = new WeakSet(), zi = function() {
const l = new ui(c(this, Ht), 1e-3);
R(this, Rd, l.getOutlines()), [this.x, this.y, this.width, this.height] = c(this, Rd).box;
const d = new ui(c(this, Ht), 25e-4, 1e-3, this._uiManager.direction === "ltr");
R(this, wU, d.getOutlines());
const {
lastPoint: t
} = c(this, wU);
R(this, qc, [(t[0] - this.x) / this.width, (t[1] - this.y) / this.height]);
}, cV = function({
highlightOutlines: l,
highlightId: d,
clipPathId: t
}) {
var Q, i;
if (R(this, Rd, l), R(this, wU, l.getNewOutline(c(this, Nd) / 2 + 1.5, 25e-4)), d >= 0)
R(this, ld, d), R(this, Q0, t), this.parent.drawLayer.finalizeDraw(d, {
bbox: l.box,
path: {
d: l.toSVGPath()
}
}), R(this, JU, this.parent.drawLayer.drawOutline({
rootClass: {
highlightOutline: !0,
free: !0
},
bbox: c(this, wU).box,
path: {
d: c(this, wU).toSVGPath()
}
}, !0));
else if (this.parent) {
const N = this.parent.viewport.rotation;
this.parent.drawLayer.updateProperties(c(this, ld), {
bbox: h(Q = el, Jd, _0).call(Q, c(this, Rd).box, (N - this.rotation + 360) % 360),
path: {
d: l.toSVGPath()
}
}), this.parent.drawLayer.updateProperties(c(this, JU), {
bbox: h(i = el, Jd, _0).call(i, c(this, wU).box, N),
path: {
d: c(this, wU).toSVGPath()
}
});
}
const [F, n, s, W] = l.box;
switch (this.rotation) {
case 0:
this.x = F, this.y = n, this.width = s, this.height = W;
break;
case 90: {
const [N, e] = this.parentDimensions;
this.x = n, this.y = 1 - F, this.width = s * e / N, this.height = W * N / e;
break;
}
case 180:
this.x = 1 - F, this.y = 1 - n, this.width = s, this.height = W;
break;
case 270: {
const [N, e] = this.parentDimensions;
this.x = 1 - n, this.y = F, this.width = s * e / N, this.height = W * N / e;
break;
}
}
const {
lastPoint: V
} = c(this, wU);
R(this, qc, [(V[0] - F) / s, (V[1] - n) / W]);
}, Dh = function(l) {
const d = (F, n) => {
var s, W;
this.color = F, R(this, vt, n), (s = this.parent) == null || s.drawLayer.updateProperties(c(this, ld), {
root: {
fill: F,
"fill-opacity": n
}
}), (W = c(this, _c)) == null || W.updateColor(F);
}, t = this.color, Z = c(this, vt);
this.addCommands({
cmd: d.bind(this, l, el._defaultOpacity),
undo: d.bind(this, t, Z),
post: this._uiManager.updateUI.bind(this._uiManager, this),
mustExec: !0,
type: Vl.HIGHLIGHT_COLOR,
overwriteIfSameType: !0,
keepUndo: !0
}), this._reportTelemetry({
action: "color_changed",
color: this._uiManager.highlightColorNames.get(l)
}, !0);
}, Eh = function(l) {
const d = c(this, Nd), t = (Z) => {
R(this, Nd, Z), h(this, Zl, rh).call(this, Z);
};
this.addCommands({
cmd: t.bind(this, l),
undo: t.bind(this, d),
post: this._uiManager.updateUI.bind(this._uiManager, this),
mustExec: !0,
type: Vl.INK_THICKNESS,
overwriteIfSameType: !0,
keepUndo: !0
}), this._reportTelemetry({
action: "thickness_changed",
thickness: l
}, !0);
}, rh = function(l) {
if (!c(this, VU))
return;
h(this, Zl, cV).call(this, {
highlightOutlines: c(this, Rd).getNewOutline(l / 2)
}), this.fixAndSetPosition();
const [d, t] = this.parentDimensions;
this.setDims(this.width * d, this.height * t);
}, Li = function() {
c(this, ld) === null || !this.parent || (this.parent.drawLayer.remove(c(this, ld)), R(this, ld, null), this.parent.drawLayer.remove(c(this, JU)), R(this, JU, null));
}, NF = function(l = this.parent) {
c(this, ld) === null && ({
id: eU(this, ld)._,
clipPathId: eU(this, Q0)._
} = l.drawLayer.draw({
bbox: c(this, Rd).box,
root: {
viewBox: "0 0 1 1",
fill: this.color,
"fill-opacity": c(this, vt)
},
rootClass: {
highlight: !0,
free: c(this, VU)
},
path: {
d: c(this, Rd).toSVGPath()
}
}, !1, !0), R(this, JU, l.drawLayer.drawOutline({
rootClass: {
highlightOutline: !0,
free: c(this, VU)
},
bbox: c(this, wU).box,
path: {
d: c(this, wU).toSVGPath()
}
}, c(this, VU))), c(this, i0) && (c(this, i0).style.clipPath = c(this, Q0)));
}, Jd = new WeakSet(), _0 = function([l, d, t, Z], F) {
switch (F) {
case 90:
return [1 - d - Z, l, Z, t];
case 180:
return [1 - l - t, 1 - d - Z, t, Z];
case 270:
return [d, 1 - l - t, Z, t];
}
return [l, d, t, Z];
}, Ch = function(l) {
el._keyboardManager.exec(this, l);
}, nV = function(l) {
if (!c(this, Ac))
return;
const d = window.getSelection();
l ? d.setPosition(c(this, Ac), c(this, ra)) : d.setPosition(c(this, Ca), c(this, wa));
}, $n = function() {
return c(this, VU) ? this.rotation : 0;
}, wh = function() {
if (c(this, VU))
return null;
const [l, d] = this.pageDimensions, [t, Z] = this.pageTranslation, F = c(this, Ht), n = new Float32Array(F.length * 8);
let s = 0;
for (const {
x: W,
y: V,
width: Q,
height: i
} of F) {
const N = W * l + t, e = (1 - V) * d + Z;
n[s] = n[s + 4] = N, n[s + 1] = n[s + 3] = e, n[s + 2] = n[s + 6] = N + Q * l, n[s + 5] = n[s + 7] = e - i * d, s += 8;
}
return n;
}, xh = function(l) {
return c(this, Rd).serialize(l, h(this, Zl, $n).call(this));
}, jh = function(l, d) {
this._freeHighlight.add(d) && l.drawLayer.updateProperties(this._freeHighlightId, {
path: {
d: this._freeHighlight.toSVGPath()
}
});
}, Oh = function(l, d) {
this._freeHighlight.isEmpty() ? l.drawLayer.remove(this._freeHighlightId) : l.createAndAddNewEditor(d, !1, {
highlightId: this._freeHighlightId,
highlightOutlines: this._freeHighlight.getOutlines(),
clipPathId: this._freeHighlightClipId,
methodOfCreation: "main_toolbar"
}), this._freeHighlightId = -1, this._freeHighlight = null, this._freeHighlightClipId = "";
}, gh = function(l) {
const {
color: d
} = this._initialData;
return l.color.some((t, Z) => t !== d[Z]);
}, b(el, Jd), f(el, "_defaultColor", null), f(el, "_defaultOpacity", 1), f(el, "_defaultThickness", 12), f(el, "_type", "highlight"), f(el, "_editorType", cl.HIGHLIGHT), f(el, "_freeHighlightId", -1), f(el, "_freeHighlight", null), f(el, "_freeHighlightClipId", "");
let pV = el;
var R0;
class dM {
constructor() {
b(this, R0, /* @__PURE__ */ Object.create(null));
}
updateProperty(U, l) {
this[U] = l, this.updateSVGProperty(U, l);
}
updateProperties(U) {
if (U)
for (const [l, d] of Object.entries(U))
this.updateProperty(l, d);
}
updateSVGProperty(U, l) {
c(this, R0)[U] = l;
}
toSVGProperties() {
const U = c(this, R0);
return R(this, R0, /* @__PURE__ */ Object.create(null)), {
root: U
};
}
reset() {
R(this, R0, /* @__PURE__ */ Object.create(null));
}
updateAll(U = this) {
this.updateProperties(U);
}
clone() {
ul("Not implemented");
}
}
R0 = new WeakMap();
var Ud, ln, ZU, N0, e0, EZ, rZ, CZ, h0, Rl, Ii, Di, Ei, ls, Kh, sV, Us, q0;
const g = class g extends kl {
constructor(l) {
super(l);
b(this, Rl);
b(this, Ud, null);
b(this, ln);
f(this, "_drawId", null);
R(this, ln, l.mustBeCommitted || !1), l.drawOutlines && (h(this, Rl, Ii).call(this, l), h(this, Rl, ls).call(this));
}
static _mergeSVGProperties(l, d) {
const t = new Set(Object.keys(l));
for (const [Z, F] of Object.entries(d))
t.has(Z) ? Object.assign(l[Z], F) : l[Z] = F;
return l;
}
static getDefaultDrawingOptions(l) {
ul("Not implemented");
}
static get typesMap() {
ul("Not implemented");
}
static get isDrawer() {
return !0;
}
static get supportMultipleDrawings() {
return !1;
}
static updateDefaultParams(l, d) {
const t = this.typesMap.get(l);
t && this._defaultDrawingOptions.updateProperty(t, d), this._currentParent && (c(g, ZU).updateProperty(t, d), this._currentParent.drawLayer.updateProperties(this._currentDrawId, this._defaultDrawingOptions.toSVGProperties()));
}
updateParams(l, d) {
const t = this.constructor.typesMap.get(l);
t && this._updateProperty(l, t, d);
}
static get defaultPropertiesToUpdate() {
const l = [], d = this._defaultDrawingOptions;
for (const [t, Z] of this.typesMap)
l.push([t, d[Z]]);
return l;
}
get propertiesToUpdate() {
const l = [], {
_drawingOptions: d
} = this;
for (const [t, Z] of this.constructor.typesMap)
l.push([t, d[Z]]);
return l;
}
_updateProperty(l, d, t) {
const Z = this._drawingOptions, F = Z[d], n = (s) => {
var V;
Z.updateProperty(d, s);
const W = c(this, Ud).updateProperty(d, s);
W && h(this, Rl, Us).call(this, W), (V = this.parent) == null || V.drawLayer.updateProperties(this._drawId, Z.toSVGProperties());
};
this.addCommands({
cmd: n.bind(this, t),
undo: n.bind(this, F),
post: this._uiManager.updateUI.bind(this._uiManager, this),
mustExec: !0,
type: l,
overwriteIfSameType: !0,
keepUndo: !0
});
}
_onResizing() {
var l;
(l = this.parent) == null || l.drawLayer.updateProperties(this._drawId, g._mergeSVGProperties(c(this, Ud).getPathResizingSVGProperties(h(this, Rl, sV).call(this)), {
bbox: h(this, Rl, q0).call(this)
}));
}
_onResized() {
var l;
(l = this.parent) == null || l.drawLayer.updateProperties(this._drawId, g._mergeSVGProperties(c(this, Ud).getPathResizedSVGProperties(h(this, Rl, sV).call(this)), {
bbox: h(this, Rl, q0).call(this)
}));
}
_onTranslating(l, d) {
var t;
(t = this.parent) == null || t.drawLayer.updateProperties(this._drawId, {
bbox: h(this, Rl, q0).call(this, l, d)
});
}
_onTranslated() {
var l;
(l = this.parent) == null || l.drawLayer.updateProperties(this._drawId, g._mergeSVGProperties(c(this, Ud).getPathTranslatedSVGProperties(h(this, Rl, sV).call(this), this.parentDimensions), {
bbox: h(this, Rl, q0).call(this)
}));
}
_onStartDragging() {
var l;
(l = this.parent) == null || l.drawLayer.updateProperties(this._drawId, {
rootClass: {
moving: !0
}
});
}
_onStopDragging() {
var l;
(l = this.parent) == null || l.drawLayer.updateProperties(this._drawId, {
rootClass: {
moving: !1
}
});
}
commit() {
super.commit(), this.disableEditMode(), this.disableEditing();
}
disableEditing() {
super.disableEditing(), this.div.classList.toggle("disabled", !0);
}
enableEditing() {
super.enableEditing(), this.div.classList.toggle("disabled", !1);
}
getBaseTranslation() {
return [0, 0];
}
get isResizable() {
return !0;
}
onceAdded(l) {
this.annotationElementId || this.parent.addUndoableEditor(this), this._isDraggable = !0, c(this, ln) && (R(this, ln, !1), this.commit(), this.parent.setSelected(this), l && this.isOnScreen && this.div.focus());
}
remove() {
h(this, Rl, Ei).call(this), super.remove();
}
rebuild() {
this.parent && (super.rebuild(), this.div !== null && (h(this, Rl, ls).call(this), h(this, Rl, Us).call(this, c(this, Ud).box), this.isAttachedToDOM || this.parent.add(this)));
}
setParent(l) {
var t;
let d = !1;
this.parent && !l ? (this._uiManager.removeShouldRescale(this), h(this, Rl, Ei).call(this)) : l && (this._uiManager.addShouldRescale(this), h(this, Rl, ls).call(this, l), d = !this.parent && ((t = this.div) == null ? void 0 : t.classList.contains("selectedEditor"))), super.setParent(l), d && this.select();
}
rotate() {
this.parent && this.parent.drawLayer.updateProperties(this._drawId, g._mergeSVGProperties({
bbox: h(this, Rl, q0).call(this)
}, c(this, Ud).updateRotation((this.parentRotation - this.rotation + 360) % 360)));
}
onScaleChanging() {
this.parent && h(this, Rl, Us).call(this, c(this, Ud).updateParentDimensions(this.parentDimensions, this.parent.scale));
}
static onScaleChangingWhenDrawing() {
}
render() {
if (this.div)
return this.div;
const l = super.render();
l.classList.add("draw");
const d = document.createElement("div");
l.append(d), d.setAttribute("aria-hidden", "true"), d.className = "internal";
const [t, Z] = this.parentDimensions;
return this.setDims(this.width * t, this.height * Z), this._uiManager.addShouldRescale(this), this.disableEditing(), l;
}
static createDrawerInstance(l, d, t, Z, F) {
ul("Not implemented");
}
static startDrawing(l, d, t, Z) {
var J;
const {
target: F,
offsetX: n,
offsetY: s,
pointerId: W,
pointerType: V
} = Z;
if (c(g, rZ) && c(g, rZ) !== V)
return;
const {
viewport: {
rotation: Q
}
} = l, {
width: i,
height: N
} = F.getBoundingClientRect(), e = R(g, N0, new AbortController()), m = l.combinedSignal(e);
if (c(g, EZ) || R(g, EZ, W), c(g, rZ) ?? R(g, rZ, V), window.addEventListener("pointerup", (M) => {
var G;
c(g, EZ) === M.pointerId ? this._endDraw(M) : (G = c(g, CZ)) == null || G.delete(M.pointerId);
}, {
signal: m
}), window.addEventListener("pointercancel", (M) => {
var G;
c(g, EZ) === M.pointerId ? this._currentParent.endDrawingSession() : (G = c(g, CZ)) == null || G.delete(M.pointerId);
}, {
signal: m
}), window.addEventListener("pointerdown", (M) => {
c(g, rZ) === M.pointerType && ((c(g, CZ) || R(g, CZ, /* @__PURE__ */ new Set())).add(M.pointerId), c(g, ZU).isCancellable() && (c(g, ZU).removeLastElement(), c(g, ZU).isEmpty() ? this._currentParent.endDrawingSession(!0) : this._endDraw(null)));
}, {
capture: !0,
passive: !1,
signal: m
}), window.addEventListener("contextmenu", Cd, {
signal: m
}), F.addEventListener("pointermove", this._drawMove.bind(this), {
signal: m
}), F.addEventListener("touchmove", (M) => {
M.timeStamp === c(g, h0) && nd(M);
}, {
signal: m
}), l.toggleDrawing(), (J = d._editorUndoBar) == null || J.hide(), c(g, ZU)) {
l.drawLayer.updateProperties(this._currentDrawId, c(g, ZU).startNew(n, s, i, N, Q));
return;
}
d.updateUIForDefaultProperties(this), R(g, ZU, this.createDrawerInstance(n, s, i, N, Q)), R(g, e0, this.getDefaultDrawingOptions()), this._currentParent = l, {
id: this._currentDrawId
} = l.drawLayer.draw(this._mergeSVGProperties(c(g, e0).toSVGProperties(), c(g, ZU).defaultSVGProperties), !0, !1);
}
static _drawMove(l) {
var F;
if (R(g, h0, -1), !c(g, ZU))
return;
const {
offsetX: d,
offsetY: t,
pointerId: Z
} = l;
if (c(g, EZ) === Z) {
if (((F = c(g, CZ)) == null ? void 0 : F.size) >= 1) {
this._endDraw(l);
return;
}
this._currentParent.drawLayer.updateProperties(this._currentDrawId, c(g, ZU).add(d, t)), R(g, h0, l.timeStamp), nd(l);
}
}
static _cleanup(l) {
l && (this._currentDrawId = -1, this._currentParent = null, R(g, ZU, null), R(g, e0, null), R(g, rZ, null), R(g, h0, NaN)), c(g, N0) && (c(g, N0).abort(), R(g, N0, null), R(g, EZ, NaN), R(g, CZ, null));
}
static _endDraw(l) {
const d = this._currentParent;
if (d) {
if (d.toggleDrawing(!0), this._cleanup(!1), l && d.drawLayer.updateProperties(this._currentDrawId, c(g, ZU).end(l.offsetX, l.offsetY)), this.supportMultipleDrawings) {
const t = c(g, ZU), Z = this._currentDrawId, F = t.getLastElement();
d.addCommands({
cmd: () => {
d.drawLayer.updateProperties(Z, t.setLastElement(F));
},
undo: () => {
d.drawLayer.updateProperties(Z, t.removeLastElement());
},
mustExec: !1,
type: Vl.DRAW_STEP
});
return;
}
this.endDrawing(!1);
}
}
static endDrawing(l) {
const d = this._currentParent;
if (!d)
return null;
if (d.toggleDrawing(!0), d.cleanUndoStack(Vl.DRAW_STEP), !c(g, ZU).isEmpty()) {
const {
pageDimensions: [t, Z],
scale: F
} = d, n = d.createAndAddNewEditor({
offsetX: 0,
offsetY: 0
}, !1, {
drawId: this._currentDrawId,
drawOutlines: c(g, ZU).getOutlines(t * F, Z * F, F, this._INNER_MARGIN),
drawingOptions: c(g, e0),
mustBeCommitted: !l
});
return this._cleanup(!0), n;
}
return d.drawLayer.remove(this._currentDrawId), this._cleanup(!0), null;
}
createDrawingOptions(l) {
}
static deserializeDraw(l, d, t, Z, F, n) {
ul("Not implemented");
}
static async deserialize(l, d, t) {
var Q, i;
const {
rawDims: {
pageWidth: Z,
pageHeight: F,
pageX: n,
pageY: s
}
} = d.viewport, W = this.deserializeDraw(n, s, Z, F, this._INNER_MARGIN, l), V = await super.deserialize(l, d, t);
return V.createDrawingOptions(l), h(Q = V, Rl, Ii).call(Q, {
drawOutlines: W
}), h(i = V, Rl, ls).call(i), V.onScaleChanging(), V.rotate(), V;
}
serializeDraw(l) {
const [d, t] = this.pageTranslation, [Z, F] = this.pageDimensions;
return c(this, Ud).serialize([d, t, Z, F], l);
}
renderAnnotationElement(l) {
return l.updateEdited({
rect: this.getRect(0, 0)
}), null;
}
static canCreateNewEmptyEditor() {
return !1;
}
};
Ud = new WeakMap(), ln = new WeakMap(), ZU = new WeakMap(), N0 = new WeakMap(), e0 = new WeakMap(), EZ = new WeakMap(), rZ = new WeakMap(), CZ = new WeakMap(), h0 = new WeakMap(), Rl = new WeakSet(), Ii = function({
drawOutlines: l,
drawId: d,
drawingOptions: t
}) {
R(this, Ud, l), this._drawingOptions || (this._drawingOptions = t), d >= 0 ? (this._drawId = d, this.parent.drawLayer.finalizeDraw(d, l.defaultProperties)) : this._drawId = h(this, Rl, Di).call(this, l, this.parent), h(this, Rl, Us).call(this, l.box);
}, Di = function(l, d) {
const {
id: t
} = d.drawLayer.draw(g._mergeSVGProperties(this._drawingOptions.toSVGProperties(), l.defaultSVGProperties), !1, !1);
return t;
}, Ei = function() {
this._drawId === null || !this.parent || (this.parent.drawLayer.remove(this._drawId), this._drawId = null, this._drawingOptions.reset());
}, ls = function(l = this.parent) {
if (!(this._drawId !== null && this.parent === l)) {
if (this._drawId !== null) {
this.parent.drawLayer.updateParent(this._drawId, l.drawLayer);
return;
}
this._drawingOptions.updateAll(), this._drawId = h(this, Rl, Di).call(this, c(this, Ud), l);
}
}, Kh = function([l, d, t, Z]) {
const {
parentDimensions: [F, n],
rotation: s
} = this;
switch (s) {
case 90:
return [d, 1 - l, t * (n / F), Z * (F / n)];
case 180:
return [1 - l, 1 - d, t, Z];
case 270:
return [1 - d, l, t * (n / F), Z * (F / n)];
default:
return [l, d, t, Z];
}
}, sV = function() {
const {
x: l,
y: d,
width: t,
height: Z,
parentDimensions: [F, n],
rotation: s
} = this;
switch (s) {
case 90:
return [1 - d, l, t * (F / n), Z * (n / F)];
case 180:
return [1 - l, 1 - d, t, Z];
case 270:
return [d, 1 - l, t * (F / n), Z * (n / F)];
default:
return [l, d, t, Z];
}
}, Us = function(l) {
if ([this.x, this.y, this.width, this.height] = h(this, Rl, Kh).call(this, l), this.div) {
this.fixAndSetPosition();
const [d, t] = this.parentDimensions;
this.setDims(this.width * d, this.height * t);
}
this._onResized();
}, q0 = function() {
const {
x: l,
y: d,
width: t,
height: Z,
rotation: F,
parentRotation: n,
parentDimensions: [s, W]
} = this;
switch ((F * 4 + n) / 90) {
case 1:
return [1 - d - Z, l, Z, t];
case 2:
return [1 - l - t, 1 - d - Z, t, Z];
case 3:
return [d, 1 - l - t, Z, t];
case 4:
return [l, d - t * (s / W), Z * (W / s), t * (s / W)];
case 5:
return [1 - d, l, t * (s / W), Z * (W / s)];
case 6:
return [1 - l - Z * (W / s), 1 - d, Z * (W / s), t * (s / W)];
case 7:
return [d - t * (s / W), 1 - l - Z * (W / s), t * (s / W), Z * (W / s)];
case 8:
return [l - t, d - Z, t, Z];
case 9:
return [1 - d, l - t, Z, t];
case 10:
return [1 - l, 1 - d, t, Z];
case 11:
return [d - Z, 1 - l, Z, t];
case 12:
return [l - Z * (W / s), d, Z * (W / s), t * (s / W)];
case 13:
return [1 - d - t * (s / W), l - Z * (W / s), t * (s / W), Z * (W / s)];
case 14:
return [1 - l, 1 - d - t * (s / W), Z * (W / s), t * (s / W)];
case 15:
return [d, 1 - l, t * (s / W), Z * (W / s)];
default:
return [l, d, t, Z];
}
}, f(g, "_currentDrawId", -1), f(g, "_currentParent", null), b(g, ZU, null), b(g, N0, null), b(g, e0, null), b(g, EZ, NaN), b(g, rZ, null), b(g, CZ, null), b(g, h0, NaN), f(g, "_INNER_MARGIN", 3);
let ki = g;
var Ft, FU, cU, b0, Un, pU, QU, ed, m0, M0, J0, dn, aV;
class tM {
constructor(U, l, d, t, Z, F) {
b(this, dn);
b(this, Ft, new Float64Array(6));
b(this, FU);
b(this, cU);
b(this, b0);
b(this, Un);
b(this, pU);
b(this, QU, "");
b(this, ed, 0);
b(this, m0, new BV());
b(this, M0);
b(this, J0);
R(this, M0, d), R(this, J0, t), R(this, b0, Z), R(this, Un, F), [U, l] = h(this, dn, aV).call(this, U, l);
const n = R(this, FU, [NaN, NaN, NaN, NaN, U, l]);
R(this, pU, [U, l]), R(this, cU, [{
line: n,
points: c(this, pU)
}]), c(this, Ft).set(n, 0);
}
updateProperty(U, l) {
U === "stroke-width" && R(this, Un, l);
}
isEmpty() {
return !c(this, cU) || c(this, cU).length === 0;
}
isCancellable() {
return c(this, pU).length <= 10;
}
add(U, l) {
[U, l] = h(this, dn, aV).call(this, U, l);
const [d, t, Z, F] = c(this, Ft).subarray(2, 6), n = U - Z, s = l - F;
return Math.hypot(c(this, M0) * n, c(this, J0) * s) <= 2 ? null : (c(this, pU).push(U, l), isNaN(d) ? (c(this, Ft).set([Z, F, U, l], 2), c(this, FU).push(NaN, NaN, NaN, NaN, U, l), {
path: {
d: this.toSVGPath()
}
}) : (isNaN(c(this, Ft)[0]) && c(this, FU).splice(6, 6), c(this, Ft).set([d, t, Z, F, U, l], 0), c(this, FU).push(...O.createBezierPoints(d, t, Z, F, U, l)), {
path: {
d: this.toSVGPath()
}
}));
}
end(U, l) {
const d = this.add(U, l);
return d || (c(this, pU).length === 2 ? {
path: {
d: this.toSVGPath()
}
} : null);
}
startNew(U, l, d, t, Z) {
R(this, M0, d), R(this, J0, t), R(this, b0, Z), [U, l] = h(this, dn, aV).call(this, U, l);
const F = R(this, FU, [NaN, NaN, NaN, NaN, U, l]);
R(this, pU, [U, l]);
const n = c(this, cU).at(-1);
return n && (n.line = new Float32Array(n.line), n.points = new Float32Array(n.points)), c(this, cU).push({
line: F,
points: c(this, pU)
}), c(this, Ft).set(F, 0), R(this, ed, 0), this.toSVGPath(), null;
}
getLastElement() {
return c(this, cU).at(-1);
}
setLastElement(U) {
return c(this, cU) ? (c(this, cU).push(U), R(this, FU, U.line), R(this, pU, U.points), R(this, ed, 0), {
path: {
d: this.toSVGPath()
}
}) : c(this, m0).setLastElement(U);
}
removeLastElement() {
if (!c(this, cU))
return c(this, m0).removeLastElement();
c(this, cU).pop(), R(this, QU, "");
for (let U = 0, l = c(this, cU).length; U < l; U++) {
const {
line: d,
points: t
} = c(this, cU)[U];
R(this, FU, d), R(this, pU, t), R(this, ed, 0), this.toSVGPath();
}
return {
path: {
d: c(this, QU)
}
};
}
toSVGPath() {
const U = O.svgRound(c(this, FU)[4]), l = O.svgRound(c(this, FU)[5]);
if (c(this, pU).length === 2)
return R(this, QU, `${c(this, QU)} M ${U} ${l} Z`), c(this, QU);
if (c(this, pU).length <= 6) {
const t = c(this, QU).lastIndexOf("M");
R(this, QU, `${c(this, QU).slice(0, t)} M ${U} ${l}`), R(this, ed, 6);
}
if (c(this, pU).length === 4) {
const t = O.svgRound(c(this, FU)[10]), Z = O.svgRound(c(this, FU)[11]);
return R(this, QU, `${c(this, QU)} L ${t} ${Z}`), R(this, ed, 12), c(this, QU);
}
const d = [];
c(this, ed) === 0 && (d.push(`M ${U} ${l}`), R(this, ed, 6));
for (let t = c(this, ed), Z = c(this, FU).length; t < Z; t += 6) {
const [F, n, s, W, V, Q] = c(this, FU).slice(t, t + 6).map(O.svgRound);
d.push(`C${F} ${n} ${s} ${W} ${V} ${Q}`);
}
return R(this, QU, c(this, QU) + d.join(" ")), R(this, ed, c(this, FU).length), c(this, QU);
}
getOutlines(U, l, d, t) {
const Z = c(this, cU).at(-1);
return Z.line = new Float32Array(Z.line), Z.points = new Float32Array(Z.points), c(this, m0).build(c(this, cU), U, l, d, c(this, b0), c(this, Un), t), R(this, Ft, null), R(this, FU, null), R(this, cU, null), R(this, QU, null), c(this, m0);
}
get defaultSVGProperties() {
return {
root: {
viewBox: "0 0 10000 10000"
},
rootClass: {
draw: !0
},
bbox: [0, 0, 1, 1]
};
}
}
Ft = new WeakMap(), FU = new WeakMap(), cU = new WeakMap(), b0 = new WeakMap(), Un = new WeakMap(), pU = new WeakMap(), QU = new WeakMap(), ed = new WeakMap(), m0 = new WeakMap(), M0 = new WeakMap(), J0 = new WeakMap(), dn = new WeakSet(), aV = function(U, l) {
return O._normalizePoint(U, l, c(this, M0), c(this, J0), c(this, b0));
};
var BU, ja, Oa, dd, ct, nt, tn, Zn, Fn, NU, Gt, Hh, vh, Ph;
const jR = class jR extends O {
constructor() {
super(...arguments);
b(this, NU);
b(this, BU);
b(this, ja, 0);
b(this, Oa);
b(this, dd);
b(this, ct);
b(this, nt);
b(this, tn);
b(this, Zn);
b(this, Fn);
}
build(l, d, t, Z, F, n, s) {
R(this, ct, d), R(this, nt, t), R(this, tn, Z), R(this, Zn, F), R(this, Fn, n), R(this, Oa, s ?? 0), R(this, dd, l), h(this, NU, vh).call(this);
}
setLastElement(l) {
return c(this, dd).push(l), {
path: {
d: this.toSVGPath()
}
};
}
removeLastElement() {
return c(this, dd).pop(), {
path: {
d: this.toSVGPath()
}
};
}
toSVGPath() {
const l = [];
for (const {
line: d
} of c(this, dd)) {
if (l.push(`M${O.svgRound(d[4])} ${O.svgRound(d[5])}`), d.length === 6) {
l.push("Z");
continue;
}
if (d.length === 12) {
l.push(`L${O.svgRound(d[10])} ${O.svgRound(d[11])}`);
continue;
}
for (let t = 6, Z = d.length; t < Z; t += 6) {
const [F, n, s, W, V, Q] = d.subarray(t, t + 6).map(O.svgRound);
l.push(`C${F} ${n} ${s} ${W} ${V} ${Q}`);
}
}
return l.join("");
}
serialize([l, d, t, Z], F) {
const n = [], s = [], [W, V, Q, i] = h(this, NU, Hh).call(this);
let N, e, m, J, M, G, S, T, u;
switch (c(this, Zn)) {
case 0:
u = O._rescale, N = l, e = d + Z, m = t, J = -Z, M = l + W * t, G = d + (1 - V - i) * Z, S = l + (W + Q) * t, T = d + (1 - V) * Z;
break;
case 90:
u = O._rescaleAndSwap, N = l, e = d, m = t, J = Z, M = l + V * t, G = d + W * Z, S = l + (V + i) * t, T = d + (W + Q) * Z;
break;
case 180:
u = O._rescale, N = l + t, e = d, m = -t, J = Z, M = l + (1 - W - Q) * t, G = d + V * Z, S = l + (1 - W) * t, T = d + (V + i) * Z;
break;
case 270:
u = O._rescaleAndSwap, N = l + t, e = d + Z, m = -t, J = -Z, M = l + (1 - V - i) * t, G = d + (1 - W - Q) * Z, S = l + (1 - V) * t, T = d + (1 - W) * Z;
break;
}
for (const {
line: Y,
points: o
} of c(this, dd))
n.push(u(Y, N, e, m, J, F ? new Array(Y.length) : null)), s.push(u(o, N, e, m, J, F ? new Array(o.length) : null));
return {
lines: n,
points: s,
rect: [M, G, S, T]
};
}
static deserialize(l, d, t, Z, F, {
paths: {
lines: n,
points: s
},
rotation: W,
thickness: V
}) {
const Q = [];
let i, N, e, m, J;
switch (W) {
case 0:
J = O._rescale, i = -l / t, N = d / Z + 1, e = 1 / t, m = -1 / Z;
break;
case 90:
J = O._rescaleAndSwap, i = -d / Z, N = -l / t, e = 1 / Z, m = 1 / t;
break;
case 180:
J = O._rescale, i = l / t + 1, N = -d / Z, e = -1 / t, m = 1 / Z;
break;
case 270:
J = O._rescaleAndSwap, i = d / Z + 1, N = l / t + 1, e = -1 / Z, m = -1 / t;
break;
}
if (!n) {
n = [];
for (const G of s) {
const S = G.length;
if (S === 2) {
n.push(new Float32Array([NaN, NaN, NaN, NaN, G[0], G[1]]));
continue;
}
if (S === 4) {
n.push(new Float32Array([NaN, NaN, NaN, NaN, G[0], G[1], NaN, NaN, NaN, NaN, G[2], G[3]]));
continue;
}
const T = new Float32Array(3 * (S - 2));
n.push(T);
let [u, Y, o, B] = G.subarray(0, 4);
T.set([NaN, NaN, NaN, NaN, u, Y], 0);
for (let X = 4; X < S; X += 2) {
const p = G[X], y = G[X + 1];
T.set(O.createBezierPoints(u, Y, o, B, p, y), (X - 2) * 3), [u, Y, o, B] = [o, B, p, y];
}
}
}
for (let G = 0, S = n.length; G < S; G++)
Q.push({
line: J(n[G].map((T) => T ?? NaN), i, N, e, m),
points: J(s[G].map((T) => T ?? NaN), i, N, e, m)
});
const M = new jR();
return M.build(Q, t, Z, 1, W, V, F), M;
}
get box() {
return c(this, BU);
}
updateProperty(l, d) {
return l === "stroke-width" ? h(this, NU, Ph).call(this, d) : null;
}
updateParentDimensions([l, d], t) {
const [Z, F] = h(this, NU, Gt).call(this);
R(this, ct, l), R(this, nt, d), R(this, tn, t);
const [n, s] = h(this, NU, Gt).call(this), W = n - Z, V = s - F, Q = c(this, BU);
return Q[0] -= W, Q[1] -= V, Q[2] += 2 * W, Q[3] += 2 * V, Q;
}
updateRotation(l) {
return R(this, ja, l), {
path: {
transform: this.rotationTransform
}
};
}
get viewBox() {
return c(this, BU).map(O.svgRound).join(" ");
}
get defaultProperties() {
const [l, d] = c(this, BU);
return {
root: {
viewBox: this.viewBox
},
path: {
"transform-origin": `${O.svgRound(l)} ${O.svgRound(d)}`
}
};
}
get rotationTransform() {
const [, , l, d] = c(this, BU);
let t = 0, Z = 0, F = 0, n = 0, s = 0, W = 0;
switch (c(this, ja)) {
case 90:
Z = d / l, F = -l / d, s = l;
break;
case 180:
t = -1, n = -1, s = l, W = d;
break;
case 270:
Z = -d / l, F = l / d, W = d;
break;
default:
return "";
}
return `matrix(${t} ${Z} ${F} ${n} ${O.svgRound(s)} ${O.svgRound(W)})`;
}
getPathResizingSVGProperties([l, d, t, Z]) {
const [F, n] = h(this, NU, Gt).call(this), [s, W, V, Q] = c(this, BU);
if (Math.abs(V - F) <= O.PRECISION || Math.abs(Q - n) <= O.PRECISION) {
const J = l + t / 2 - (s + V / 2), M = d + Z / 2 - (W + Q / 2);
return {
path: {
"transform-origin": `${O.svgRound(l)} ${O.svgRound(d)}`,
transform: `${this.rotationTransform} translate(${J} ${M})`
}
};
}
const i = (t - 2 * F) / (V - 2 * F), N = (Z - 2 * n) / (Q - 2 * n), e = V / t, m = Q / Z;
return {
path: {
"transform-origin": `${O.svgRound(s)} ${O.svgRound(W)}`,
transform: `${this.rotationTransform} scale(${e} ${m}) translate(${O.svgRound(F)} ${O.svgRound(n)}) scale(${i} ${N}) translate(${O.svgRound(-F)} ${O.svgRound(-n)})`
}
};
}
getPathResizedSVGProperties([l, d, t, Z]) {
const [F, n] = h(this, NU, Gt).call(this), s = c(this, BU), [W, V, Q, i] = s;
if (s[0] = l, s[1] = d, s[2] = t, s[3] = Z, Math.abs(Q - F) <= O.PRECISION || Math.abs(i - n) <= O.PRECISION) {
const M = l + t / 2 - (W + Q / 2), G = d + Z / 2 - (V + i / 2);
for (const {
line: S,
points: T
} of c(this, dd))
O._translate(S, M, G, S), O._translate(T, M, G, T);
return {
root: {
viewBox: this.viewBox
},
path: {
"transform-origin": `${O.svgRound(l)} ${O.svgRound(d)}`,
transform: this.rotationTransform || null,
d: this.toSVGPath()
}
};
}
const N = (t - 2 * F) / (Q - 2 * F), e = (Z - 2 * n) / (i - 2 * n), m = -N * (W + F) + l + F, J = -e * (V + n) + d + n;
if (N !== 1 || e !== 1 || m !== 0 || J !== 0)
for (const {
line: M,
points: G
} of c(this, dd))
O._rescale(M, m, J, N, e, M), O._rescale(G, m, J, N, e, G);
return {
root: {
viewBox: this.viewBox
},
path: {
"transform-origin": `${O.svgRound(l)} ${O.svgRound(d)}`,
transform: this.rotationTransform || null,
d: this.toSVGPath()
}
};
}
getPathTranslatedSVGProperties([l, d], t) {
const [Z, F] = t, n = c(this, BU), s = l - n[0], W = d - n[1];
if (c(this, ct) === Z && c(this, nt) === F)
for (const {
line: V,
points: Q
} of c(this, dd))
O._translate(V, s, W, V), O._translate(Q, s, W, Q);
else {
const V = c(this, ct) / Z, Q = c(this, nt) / F;
R(this, ct, Z), R(this, nt, F);
for (const {
line: i,
points: N
} of c(this, dd))
O._rescale(i, s, W, V, Q, i), O._rescale(N, s, W, V, Q, N);
n[2] *= V, n[3] *= Q;
}
return n[0] = l, n[1] = d, {
root: {
viewBox: this.viewBox
},
path: {
d: this.toSVGPath(),
"transform-origin": `${O.svgRound(l)} ${O.svgRound(d)}`
}
};
}
get defaultSVGProperties() {
const l = c(this, BU);
return {
root: {
viewBox: this.viewBox
},
rootClass: {
draw: !0
},
path: {
d: this.toSVGPath(),
"transform-origin": `${O.svgRound(l[0])} ${O.svgRound(l[1])}`,
transform: this.rotationTransform || null
},
bbox: l
};
}
};
BU = new WeakMap(), ja = new WeakMap(), Oa = new WeakMap(), dd = new WeakMap(), ct = new WeakMap(), nt = new WeakMap(), tn = new WeakMap(), Zn = new WeakMap(), Fn = new WeakMap(), NU = new WeakSet(), Gt = function(l = c(this, Fn)) {
const d = c(this, Oa) + l / 2 * c(this, tn);
return c(this, Zn) % 180 === 0 ? [d / c(this, ct), d / c(this, nt)] : [d / c(this, nt), d / c(this, ct)];
}, Hh = function() {
const [l, d, t, Z] = c(this, BU), [F, n] = h(this, NU, Gt).call(this, 0);
return [l + F, d + n, t - 2 * F, Z - 2 * n];
}, vh = function() {
const l = R(this, BU, new Float32Array([1 / 0, 1 / 0, -1 / 0, -1 / 0]));
for (const {
line: Z
} of c(this, dd)) {
if (Z.length <= 12) {
for (let s = 4, W = Z.length; s < W; s += 6) {
const [V, Q] = Z.subarray(s, s + 2);
l[0] = Math.min(l[0], V), l[1] = Math.min(l[1], Q), l[2] = Math.max(l[2], V), l[3] = Math.max(l[3], Q);
}
continue;
}
let F = Z[4], n = Z[5];
for (let s = 6, W = Z.length; s < W; s += 6) {
const [V, Q, i, N, e, m] = Z.subarray(s, s + 6);
v.bezierBoundingBox(F, n, V, Q, i, N, e, m, l), F = e, n = m;
}
}
const [d, t] = h(this, NU, Gt).call(this);
l[0] = Math.min(1, Math.max(0, l[0] - d)), l[1] = Math.min(1, Math.max(0, l[1] - t)), l[2] = Math.min(1, Math.max(0, l[2] + d)), l[3] = Math.min(1, Math.max(0, l[3] + t)), l[2] -= l[0], l[3] -= l[1];
}, Ph = function(l) {
const [d, t] = h(this, NU, Gt).call(this);
R(this, Fn, l);
const [Z, F] = h(this, NU, Gt).call(this), [n, s] = [Z - d, F - t], W = c(this, BU);
return W[0] -= n, W[1] -= s, W[2] += 2 * n, W[3] += 2 * s, W;
};
let BV = jR;
var cn;
const OR = class OR extends dM {
constructor(l) {
super();
b(this, cn);
R(this, cn, l), super.updateProperties({
fill: "none",
stroke: kl._defaultLineColor,
"stroke-opacity": 1,
"stroke-width": 1,
"stroke-linecap": "round",
"stroke-linejoin": "round",
"stroke-miterlimit": 10
});
}
updateSVGProperty(l, d) {
l === "stroke-width" && (d ?? (d = this["stroke-width"]), d *= c(this, cn).realScale), super.updateSVGProperty(l, d);
}
clone() {
const l = new OR(c(this, cn));
return l.updateAll(this), l;
}
};
cn = new WeakMap();
let ri = OR;
var qV, fh;
const Uc = class Uc extends ki {
constructor(l) {
super({
...l,
name: "inkEditor"
});
b(this, qV);
this._willKeepAspectRatio = !0;
}
static initialize(l, d) {
kl.initialize(l, d), this._defaultDrawingOptions = new ri(d.viewParameters);
}
static getDefaultDrawingOptions(l) {
const d = this._defaultDrawingOptions.clone();
return d.updateProperties(l), d;
}
static get supportMultipleDrawings() {
return !0;
}
static get typesMap() {
return Wl(this, "typesMap", /* @__PURE__ */ new Map([[Vl.INK_THICKNESS, "stroke-width"], [Vl.INK_COLOR, "stroke"], [Vl.INK_OPACITY, "stroke-opacity"]]));
}
static createDrawerInstance(l, d, t, Z, F) {
return new tM(l, d, t, Z, F, this._defaultDrawingOptions["stroke-width"]);
}
static deserializeDraw(l, d, t, Z, F, n) {
return BV.deserialize(l, d, t, Z, F, n);
}
static async deserialize(l, d, t) {
let Z = null;
if (l instanceof ER) {
const {
data: {
inkLists: n,
rect: s,
rotation: W,
id: V,
color: Q,
opacity: i,
borderStyle: {
rawWidth: N
},
popupRef: e
},
parent: {
page: {
pageNumber: m
}
}
} = l;
Z = l = {
annotationType: cl.INK,
color: Array.from(Q),
thickness: N,
opacity: i,
paths: {
points: n
},
boxes: null,
pageIndex: m - 1,
rect: s.slice(0),
rotation: W,
id: V,
deleted: !1,
popupRef: e
};
}
const F = await super.deserialize(l, d, t);
return F.annotationElementId = l.id || null, F._initialData = Z, F;
}
onScaleChanging() {
if (!this.parent)
return;
super.onScaleChanging();
const {
_drawId: l,
_drawingOptions: d,
parent: t
} = this;
d.updateSVGProperty("stroke-width"), t.drawLayer.updateProperties(l, d.toSVGProperties());
}
static onScaleChangingWhenDrawing() {
const l = this._currentParent;
l && (super.onScaleChangingWhenDrawing(), this._defaultDrawingOptions.updateSVGProperty("stroke-width"), l.drawLayer.updateProperties(this._currentDrawId, this._defaultDrawingOptions.toSVGProperties()));
}
createDrawingOptions({
color: l,
thickness: d,
opacity: t
}) {
this._drawingOptions = Uc.getDefaultDrawingOptions({
stroke: v.makeHexColor(...l),
"stroke-width": d,
"stroke-opacity": t
});
}
serialize(l = !1) {
if (this.isEmpty())
return null;
if (this.deleted)
return this.serializeDeleted();
const {
lines: d,
points: t,
rect: Z
} = this.serializeDraw(l), {
_drawingOptions: {
stroke: F,
"stroke-opacity": n,
"stroke-width": s
}
} = this, W = {
annotationType: cl.INK,
color: kl._colorManager.convert(F),
opacity: n,
thickness: s,
paths: {
lines: d,
points: t
},
pageIndex: this.pageIndex,
rect: Z,
rotation: this.rotation,
structTreeParentId: this._structTreeParentId
};
return l ? W : this.annotationElementId && !h(this, qV, fh).call(this, W) ? null : (W.id = this.annotationElementId, W);
}
renderAnnotationElement(l) {
const {
points: d,
rect: t
} = this.serializeDraw(!1);
return l.updateEdited({
rect: t,
thickness: this._drawingOptions["stroke-width"],
points: d
}), null;
}
};
qV = new WeakSet(), fh = function(l) {
const {
color: d,
thickness: t,
opacity: Z,
pageIndex: F
} = this._initialData;
return this._hasBeenMoved || this._hasBeenResized || l.color.some((n, s) => n !== d[s]) || l.thickness !== t || l.opacity !== Z || l.pageIndex !== F;
}, f(Uc, "_type", "ink"), f(Uc, "_editorType", cl.INK), f(Uc, "_defaultDrawingOptions", null);
let Ci = Uc;
var Ll, iU, wZ, Pt, xZ, nn, st, at, td, sn, Nl, ds, ts, WV, xi, VV, ji, QV, Ah;
const is = class is extends kl {
constructor(l) {
super({
...l,
name: "stampEditor"
});
b(this, Nl);
b(this, Ll, null);
b(this, iU, null);
b(this, wZ, null);
b(this, Pt, null);
b(this, xZ, null);
b(this, nn, "");
b(this, st, null);
b(this, at, null);
b(this, td, !1);
b(this, sn, !1);
R(this, Pt, l.bitmapUrl), R(this, xZ, l.bitmapFile);
}
static initialize(l, d) {
kl.initialize(l, d);
}
static get supportedTypes() {
return Wl(this, "supportedTypes", ["apng", "avif", "bmp", "gif", "jpeg", "png", "svg+xml", "webp", "x-icon"].map((d) => `image/${d}`));
}
static get supportedTypesStr() {
return Wl(this, "supportedTypesStr", this.supportedTypes.join(","));
}
static isHandlingMimeForPasting(l) {
return this.supportedTypes.includes(l);
}
static paste(l, d) {
d.pasteEditor(cl.STAMP, {
bitmapFile: l.getAsFile()
});
}
altTextFinish() {
this._uiManager.useNewAltTextFlow && (this.div.hidden = !1), super.altTextFinish();
}
get telemetryFinalData() {
var l;
return {
type: "stamp",
hasAltText: !!((l = this.altTextData) != null && l.altText)
};
}
static computeTelemetryFinalData(l) {
const d = l.get("hasAltText");
return {
hasAltText: d.get(!0) ?? 0,
hasNoAltText: d.get(!1) ?? 0
};
}
async mlGuessAltText(l = null, d = !0) {
if (this.hasAltTextData())
return null;
const {
mlManager: t
} = this._uiManager;
if (!t)
throw new Error("No ML.");
if (!await t.isEnabledFor("altText"))
throw new Error("ML isn't enabled for alt text.");
const {
data: Z,
width: F,
height: n
} = l || this.copyCanvas(null, null, !0).imageData, s = await t.guess({
name: "altText",
request: {
data: Z,
width: F,
height: n,
channels: Z.length / (F * n)
}
});
if (!s)
throw new Error("No response from the AI service.");
if (s.error)
throw new Error("Error from the AI service.");
if (s.cancel)
return null;
if (!s.output)
throw new Error("No valid response from the AI service.");
const W = s.output;
return await this.setGuessedAltText(W), d && !this.hasAltTextData() && (this.altTextData = {
alt: W,
decorative: !1
}), W;
}
remove() {
var l;
c(this, iU) && (R(this, Ll, null), this._uiManager.imageManager.deleteId(c(this, iU)), (l = c(this, st)) == null || l.remove(), R(this, st, null), c(this, at) && (clearTimeout(c(this, at)), R(this, at, null))), super.remove();
}
rebuild() {
if (!this.parent) {
c(this, iU) && h(this, Nl, WV).call(this);
return;
}
super.rebuild(), this.div !== null && (c(this, iU) && c(this, st) === null && h(this, Nl, WV).call(this), this.isAttachedToDOM || this.parent.add(this));
}
onceAdded(l) {
this._isDraggable = !0, l && this.div.focus();
}
isEmpty() {
return !(c(this, wZ) || c(this, Ll) || c(this, Pt) || c(this, xZ) || c(this, iU));
}
get isResizable() {
return !0;
}
render() {
if (this.div)
return this.div;
let l, d;
if (this.width && (l = this.x, d = this.y), super.render(), this.div.hidden = !0, this.div.setAttribute("role", "figure"), this.addAltTextButton(), c(this, Ll) ? h(this, Nl, xi).call(this) : h(this, Nl, WV).call(this), this.width && !this.annotationElementId) {
const [t, Z] = this.parentDimensions;
this.setAt(l * t, d * Z, this.width * t, this.height * Z);
}
return this._uiManager.addShouldRescale(this), this.div;
}
_onResized() {
this.onScaleChanging();
}
onScaleChanging() {
if (!this.parent)
return;
c(this, at) !== null && clearTimeout(c(this, at)), R(this, at, setTimeout(() => {
R(this, at, null), h(this, Nl, ji).call(this);
}, 200));
}
copyCanvas(l, d, t = !1) {
var N;
l || (l = 224);
const {
width: Z,
height: F
} = c(this, Ll), n = new EQ();
let s = c(this, Ll), W = Z, V = F, Q = null;
if (d) {
if (Z > d || F > d) {
const B = Math.min(d / Z, d / F);
W = Math.floor(Z * B), V = Math.floor(F * B);
}
Q = document.createElement("canvas");
const e = Q.width = Math.ceil(W * n.sx), m = Q.height = Math.ceil(V * n.sy);
c(this, td) || (s = h(this, Nl, VV).call(this, e, m));
const J = Q.getContext("2d");
J.filter = this._uiManager.hcmFilter;
let M = "white", G = "#cfcfd8";
this._uiManager.hcmFilter !== "none" ? G = "black" : (N = window.matchMedia) != null && N.call(window, "(prefers-color-scheme: dark)").matches && (M = "#8f8f9d", G = "#42414d");
const S = 15, T = S * n.sx, u = S * n.sy, Y = new OffscreenCanvas(T * 2, u * 2), o = Y.getContext("2d");
o.fillStyle = M, o.fillRect(0, 0, T * 2, u * 2), o.fillStyle = G, o.fillRect(0, 0, T, u), o.fillRect(T, u, T, u), J.fillStyle = J.createPattern(Y, "repeat"), J.fillRect(0, 0, e, m), J.drawImage(s, 0, 0, s.width, s.height, 0, 0, e, m);
}
let i = null;
if (t) {
let e, m;
if (n.symmetric && s.width < l && s.height < l)
e = s.width, m = s.height;
else if (s = c(this, Ll), Z > l || F > l) {
const G = Math.min(l / Z, l / F);
e = Math.floor(Z * G), m = Math.floor(F * G), c(this, td) || (s = h(this, Nl, VV).call(this, e, m));
}
const M = new OffscreenCanvas(e, m).getContext("2d", {
willReadFrequently: !0
});
M.drawImage(s, 0, 0, s.width, s.height, 0, 0, e, m), i = {
width: e,
height: m,
data: M.getImageData(0, 0, e, m).data
};
}
return {
canvas: Q,
width: W,
height: V,
imageData: i
};
}
getImageForAltText() {
return c(this, st);
}
static async deserialize(l, d, t) {
var m;
let Z = null;
if (l instanceof eh) {
const {
data: {
rect: J,
rotation: M,
id: G,
structParent: S,
popupRef: T
},
container: u,
parent: {
page: {
pageNumber: Y
}
}
} = l, o = u.querySelector("canvas"), B = t.imageManager.getFromCanvas(u.id, o);
o.remove();
const X = ((m = await d._structTree.getAriaAttributes(`${BR}${G}`)) == null ? void 0 : m.get("aria-label")) || "";
Z = l = {
annotationType: cl.STAMP,
bitmapId: B.id,
bitmap: B.bitmap,
pageIndex: Y - 1,
rect: J.slice(0),
rotation: M,
id: G,
deleted: !1,
accessibilityData: {
decorative: !1,
altText: X
},
isSvg: !1,
structParent: S,
popupRef: T
};
}
const F = await super.deserialize(l, d, t), {
rect: n,
bitmap: s,
bitmapUrl: W,
bitmapId: V,
isSvg: Q,
accessibilityData: i
} = l;
V && t.imageManager.isValidId(V) ? (R(F, iU, V), s && R(F, Ll, s)) : R(F, Pt, W), R(F, td, Q);
const [N, e] = F.pageDimensions;
return F.width = (n[2] - n[0]) / N, F.height = (n[3] - n[1]) / e, F.annotationElementId = l.id || null, i && (F.altTextData = i), F._initialData = Z, R(F, sn, !!Z), F;
}
serialize(l = !1, d = null) {
if (this.isEmpty())
return null;
if (this.deleted)
return this.serializeDeleted();
const t = {
annotationType: cl.STAMP,
bitmapId: c(this, iU),
pageIndex: this.pageIndex,
rect: this.getRect(0, 0),
rotation: this.rotation,
isSvg: c(this, td),
structTreeParentId: this._structTreeParentId
};
if (l)
return t.bitmapUrl = h(this, Nl, QV).call(this, !0), t.accessibilityData = this.serializeAltText(!0), t;
const {
decorative: Z,
altText: F
} = this.serializeAltText(!1);
if (!Z && F && (t.accessibilityData = {
type: "Figure",
alt: F
}), this.annotationElementId) {
const s = h(this, Nl, Ah).call(this, t);
if (s.isSame)
return null;
s.isSameAltText ? delete t.accessibilityData : t.accessibilityData.structParent = this._initialData.structParent ?? -1;
}
if (t.id = this.annotationElementId, d === null)
return t;
d.stamps || (d.stamps = /* @__PURE__ */ new Map());
const n = c(this, td) ? (t.rect[2] - t.rect[0]) * (t.rect[3] - t.rect[1]) : null;
if (!d.stamps.has(c(this, iU)))
d.stamps.set(c(this, iU), {
area: n,
serialized: t
}), t.bitmap = h(this, Nl, QV).call(this, !1);
else if (c(this, td)) {
const s = d.stamps.get(c(this, iU));
n > s.area && (s.area = n, s.serialized.bitmap.close(), s.serialized.bitmap = h(this, Nl, QV).call(this, !1));
}
return t;
}
renderAnnotationElement(l) {
return l.updateEdited({
rect: this.getRect(0, 0)
}), null;
}
};
Ll = new WeakMap(), iU = new WeakMap(), wZ = new WeakMap(), Pt = new WeakMap(), xZ = new WeakMap(), nn = new WeakMap(), st = new WeakMap(), at = new WeakMap(), td = new WeakMap(), sn = new WeakMap(), Nl = new WeakSet(), ds = function(l, d = !1) {
if (!l) {
this.remove();
return;
}
R(this, Ll, l.bitmap), d || (R(this, iU, l.id), R(this, td, l.isSvg)), l.file && R(this, nn, l.file.name), h(this, Nl, xi).call(this);
}, ts = function() {
if (R(this, wZ, null), this._uiManager.enableWaiting(!1), !!c(this, st)) {
if (this._uiManager.useNewAltTextWhenAddingImage && this._uiManager.useNewAltTextFlow && c(this, Ll)) {
this._editToolbar.hide(), this._uiManager.editAltText(this, !0);
return;
}
if (!this._uiManager.useNewAltTextWhenAddingImage && this._uiManager.useNewAltTextFlow && c(this, Ll)) {
this._reportTelemetry({
action: "pdfjs.image.image_added",
data: {
alt_text_modal: !1,
alt_text_type: "empty"
}
});
try {
this.mlGuessAltText();
} catch {
}
}
this.div.focus();
}
}, WV = function() {
if (c(this, iU)) {
this._uiManager.enableWaiting(!0), this._uiManager.imageManager.getFromId(c(this, iU)).then((t) => h(this, Nl, ds).call(this, t, !0)).finally(() => h(this, Nl, ts).call(this));
return;
}
if (c(this, Pt)) {
const t = c(this, Pt);
R(this, Pt, null), this._uiManager.enableWaiting(!0), R(this, wZ, this._uiManager.imageManager.getFromUrl(t).then((Z) => h(this, Nl, ds).call(this, Z)).finally(() => h(this, Nl, ts).call(this)));
return;
}
if (c(this, xZ)) {
const t = c(this, xZ);
R(this, xZ, null), this._uiManager.enableWaiting(!0), R(this, wZ, this._uiManager.imageManager.getFromFile(t).then((Z) => h(this, Nl, ds).call(this, Z)).finally(() => h(this, Nl, ts).call(this)));
return;
}
const l = document.createElement("input");
l.type = "file", l.accept = is.supportedTypesStr;
const d = this._uiManager._signal;
R(this, wZ, new Promise((t) => {
l.addEventListener("change", async () => {
if (!l.files || l.files.length === 0)
this.remove();
else {
this._uiManager.enableWaiting(!0);
const Z = await this._uiManager.imageManager.getFromFile(l.files[0]);
this._reportTelemetry({
action: "pdfjs.image.image_selected",
data: {
alt_text_modal: this._uiManager.useNewAltTextFlow
}
}), h(this, Nl, ds).call(this, Z);
}
t();
}, {
signal: d
}), l.addEventListener("cancel", () => {
this.remove(), t();
}, {
signal: d
});
}).finally(() => h(this, Nl, ts).call(this))), l.click();
}, xi = function() {
var Q;
const {
div: l
} = this;
let {
width: d,
height: t
} = c(this, Ll);
const [Z, F] = this.pageDimensions, n = 0.75;
if (this.width)
d = this.width * Z, t = this.height * F;
else if (d > n * Z || t > n * F) {
const i = Math.min(n * Z / d, n * F / t);
d *= i, t *= i;
}
const [s, W] = this.parentDimensions;
this.setDims(d * s / Z, t * W / F), this._uiManager.enableWaiting(!1);
const V = R(this, st, document.createElement("canvas"));
V.setAttribute("role", "img"), this.addContainer(V), this.width = d / Z, this.height = t / F, (Q = this._initialOptions) != null && Q.isCentered ? this.center() : this.fixAndSetPosition(), this._initialOptions = null, (!this._uiManager.useNewAltTextWhenAddingImage || !this._uiManager.useNewAltTextFlow || this.annotationElementId) && (l.hidden = !1), h(this, Nl, ji).call(this), c(this, sn) || (this.parent.addUndoableEditor(this), R(this, sn, !0)), this._reportTelemetry({
action: "inserted_image"
}), c(this, nn) && V.setAttribute("aria-label", c(this, nn));
}, VV = function(l, d) {
const {
width: t,
height: Z
} = c(this, Ll);
let F = t, n = Z, s = c(this, Ll);
for (; F > 2 * l || n > 2 * d; ) {
const W = F, V = n;
F > 2 * l && (F = F >= 16384 ? Math.floor(F / 2) - 1 : Math.ceil(F / 2)), n > 2 * d && (n = n >= 16384 ? Math.floor(n / 2) - 1 : Math.ceil(n / 2));
const Q = new OffscreenCanvas(F, n);
Q.getContext("2d").drawImage(s, 0, 0, W, V, 0, 0, F, n), s = Q.transferToImageBitmap();
}
return s;
}, ji = function() {
const [l, d] = this.parentDimensions, {
width: t,
height: Z
} = this, F = new EQ(), n = Math.ceil(t * l * F.sx), s = Math.ceil(Z * d * F.sy), W = c(this, st);
if (!W || W.width === n && W.height === s)
return;
W.width = n, W.height = s;
const V = c(this, td) ? c(this, Ll) : h(this, Nl, VV).call(this, n, s), Q = W.getContext("2d");
Q.filter = this._uiManager.hcmFilter, Q.drawImage(V, 0, 0, V.width, V.height, 0, 0, n, s);
}, QV = function(l) {
if (l) {
if (c(this, td)) {
const Z = this._uiManager.imageManager.getSvgUrl(c(this, iU));
if (Z)
return Z;
}
const d = document.createElement("canvas");
return {
width: d.width,
height: d.height
} = c(this, Ll), d.getContext("2d").drawImage(c(this, Ll), 0, 0), d.toDataURL();
}
if (c(this, td)) {
const [d, t] = this.pageDimensions, Z = Math.round(this.width * d * Bn.PDF_TO_CSS_UNITS), F = Math.round(this.height * t * Bn.PDF_TO_CSS_UNITS), n = new OffscreenCanvas(Z, F);
return n.getContext("2d").drawImage(c(this, Ll), 0, 0, c(this, Ll).width, c(this, Ll).height, 0, 0, Z, F), n.transferToImageBitmap();
}
return structuredClone(c(this, Ll));
}, Ah = function(l) {
var n;
const {
pageIndex: d,
accessibilityData: {
altText: t
}
} = this._initialData, Z = l.pageIndex === d, F = (((n = l.accessibilityData) == null ? void 0 : n.alt) || "") === t;
return {
isSame: !this._hasBeenMoved && !this._hasBeenResized && Z && F,
isSameAltText: F
};
}, f(is, "_type", "stamp"), f(is, "_editorType", cl.STAMP);
let wi = is;
var G0, an, Wt, jZ, ft, hd, OZ, Wn, S0, Id, At, GU, _t, H, gU, gZ, yl, _h, Hd, Oi, gi, iV;
let ZM = (gU = class {
constructor({
uiManager: U,
pageIndex: l,
div: d,
structTreeLayer: t,
accessibilityManager: Z,
annotationLayer: F,
drawLayer: n,
textLayer: s,
viewport: W,
l10n: V
}) {
b(this, yl);
b(this, G0);
b(this, an, !1);
b(this, Wt, null);
b(this, jZ, null);
b(this, ft, null);
b(this, hd, /* @__PURE__ */ new Map());
b(this, OZ, !1);
b(this, Wn, !1);
b(this, S0, !1);
b(this, Id, null);
b(this, At, null);
b(this, GU, null);
b(this, _t, null);
b(this, H);
const Q = [...c(gU, gZ).values()];
if (!gU._initialized) {
gU._initialized = !0;
for (const i of Q)
i.initialize(V, U);
}
U.registerEditorTypes(Q), R(this, H, U), this.pageIndex = l, this.div = d, R(this, G0, Z), R(this, Wt, F), this.viewport = W, R(this, GU, s), this.drawLayer = n, this._structTree = t, c(this, H).addLayer(this);
}
get isEmpty() {
return c(this, hd).size === 0;
}
get isInvisible() {
return this.isEmpty && c(this, H).getMode() === cl.NONE;
}
updateToolbar(U) {
c(this, H).updateToolbar(U);
}
updateMode(U = c(this, H).getMode()) {
switch (h(this, yl, iV).call(this), U) {
case cl.NONE:
this.disableTextSelection(), this.togglePointerEvents(!1), this.toggleAnnotationLayerPointerEvents(!0), this.disableClick();
return;
case cl.INK:
this.disableTextSelection(), this.togglePointerEvents(!0), this.enableClick();
break;
case cl.HIGHLIGHT:
this.enableTextSelection(), this.togglePointerEvents(!1), this.disableClick();
break;
default:
this.disableTextSelection(), this.togglePointerEvents(!0), this.enableClick();
}
this.toggleAnnotationLayerPointerEvents(!1);
const {
classList: l
} = this.div;
for (const d of c(gU, gZ).values())
l.toggle(`${d._type}Editing`, U === d._editorType);
this.div.hidden = !1;
}
hasTextLayer(U) {
var l;
return U === ((l = c(this, GU)) == null ? void 0 : l.div);
}
setEditingState(U) {
c(this, H).setEditingState(U);
}
addCommands(U) {
c(this, H).addCommands(U);
}
cleanUndoStack(U) {
c(this, H).cleanUndoStack(U);
}
toggleDrawing(U = !1) {
this.div.classList.toggle("drawing", !U);
}
togglePointerEvents(U = !1) {
this.div.classList.toggle("disabled", !U);
}
toggleAnnotationLayerPointerEvents(U = !1) {
var l;
(l = c(this, Wt)) == null || l.div.classList.toggle("disabled", !U);
}
async enable() {
R(this, S0, !0), this.div.tabIndex = 0, this.togglePointerEvents(!0);
const U = /* @__PURE__ */ new Set();
for (const d of c(this, hd).values())
d.enableEditing(), d.show(!0), d.annotationElementId && (c(this, H).removeChangedExistingAnnotation(d), U.add(d.annotationElementId));
if (!c(this, Wt)) {
R(this, S0, !1);
return;
}
const l = c(this, Wt).getEditableAnnotations();
for (const d of l) {
if (d.hide(), c(this, H).isDeletedAnnotationElement(d.data.id) || U.has(d.data.id))
continue;
const t = await this.deserialize(d);
t && (this.addOrRebuild(t), t.enableEditing());
}
R(this, S0, !1);
}
disable() {
var t;
R(this, Wn, !0), this.div.tabIndex = -1, this.togglePointerEvents(!1);
const U = /* @__PURE__ */ new Map(), l = /* @__PURE__ */ new Map();
for (const Z of c(this, hd).values())
if (Z.disableEditing(), !!Z.annotationElementId) {
if (Z.serialize() !== null) {
U.set(Z.annotationElementId, Z);
continue;
} else
l.set(Z.annotationElementId, Z);
(t = this.getEditableAnnotation(Z.annotationElementId)) == null || t.show(), Z.remove();
}
if (c(this, Wt)) {
const Z = c(this, Wt).getEditableAnnotations();
for (const F of Z) {
const {
id: n
} = F.data;
if (c(this, H).isDeletedAnnotationElement(n))
continue;
let s = l.get(n);
if (s) {
s.resetAnnotationElement(F), s.show(!1), F.show();
continue;
}
s = U.get(n), s && (c(this, H).addChangedExistingAnnotation(s), s.renderAnnotationElement(F) && s.show(!1)), F.show();
}
}
h(this, yl, iV).call(this), this.isEmpty && (this.div.hidden = !0);
const {
classList: d
} = this.div;
for (const Z of c(gU, gZ).values())
d.remove(`${Z._type}Editing`);
this.disableTextSelection(), this.toggleAnnotationLayerPointerEvents(!0), R(this, Wn, !1);
}
getEditableAnnotation(U) {
var l;
return ((l = c(this, Wt)) == null ? void 0 : l.getEditableAnnotation(U)) || null;
}
setActiveEditor(U) {
c(this, H).getActive() !== U && c(this, H).setActiveEditor(U);
}
enableTextSelection() {
var U;
if (this.div.tabIndex = -1, (U = c(this, GU)) != null && U.div && !c(this, _t)) {
R(this, _t, new AbortController());
const l = c(this, H).combinedSignal(c(this, _t));
c(this, GU).div.addEventListener("pointerdown", h(this, yl, _h).bind(this), {
signal: l
}), c(this, GU).div.classList.add("highlighting");
}
}
disableTextSelection() {
var U;
this.div.tabIndex = 0, (U = c(this, GU)) != null && U.div && c(this, _t) && (c(this, _t).abort(), R(this, _t, null), c(this, GU).div.classList.remove("highlighting"));
}
enableClick() {
if (c(this, jZ))
return;
R(this, jZ, new AbortController());
const U = c(this, H).combinedSignal(c(this, jZ));
this.div.addEventListener("pointerdown", this.pointerdown.bind(this), {
signal: U
});
const l = this.pointerup.bind(this);
this.div.addEventListener("pointerup", l, {
signal: U
}), this.div.addEventListener("pointercancel", l, {
signal: U
});
}
disableClick() {
var U;
(U = c(this, jZ)) == null || U.abort(), R(this, jZ, null);
}
attach(U) {
c(this, hd).set(U.id, U);
const {
annotationElementId: l
} = U;
l && c(this, H).isDeletedAnnotationElement(l) && c(this, H).removeDeletedAnnotationElement(U);
}
detach(U) {
var l;
c(this, hd).delete(U.id), (l = c(this, G0)) == null || l.removePointerInTextLayer(U.contentDiv), !c(this, Wn) && U.annotationElementId && c(this, H).addDeletedAnnotationElement(U);
}
remove(U) {
this.detach(U), c(this, H).removeEditor(U), U.div.remove(), U.isAttachedToDOM = !1;
}
changeParent(U) {
var l;
U.parent !== this && (U.parent && U.annotationElementId && (c(this, H).addDeletedAnnotationElement(U.annotationElementId), kl.deleteAnnotationElement(U), U.annotationElementId = null), this.attach(U), (l = U.parent) == null || l.detach(U), U.setParent(this), U.div && U.isAttachedToDOM && (U.div.remove(), this.div.append(U.div)));
}
add(U) {
if (!(U.parent === this && U.isAttachedToDOM)) {
if (this.changeParent(U), c(this, H).addEditor(U), this.attach(U), !U.isAttachedToDOM) {
const l = U.render();
this.div.append(l), U.isAttachedToDOM = !0;
}
U.fixAndSetPosition(), U.onceAdded(!c(this, S0)), c(this, H).addToAnnotationStorage(U), U._reportTelemetry(U.telemetryInitialData);
}
}
moveEditorInDOM(U) {
var d;
if (!U.isAttachedToDOM)
return;
const {
activeElement: l
} = document;
U.div.contains(l) && !c(this, ft) && (U._focusEventsAllowed = !1, R(this, ft, setTimeout(() => {
R(this, ft, null), U.div.contains(document.activeElement) ? U._focusEventsAllowed = !0 : (U.div.addEventListener("focusin", () => {
U._focusEventsAllowed = !0;
}, {
once: !0,
signal: c(this, H)._signal
}), l.focus());
}, 0))), U._structTreeParentId = (d = c(this, G0)) == null ? void 0 : d.moveElementInDOM(this.div, U.div, U.contentDiv, !0);
}
addOrRebuild(U) {
U.needsToBeRebuilt() ? (U.parent || (U.parent = this), U.rebuild(), U.show()) : this.add(U);
}
addUndoableEditor(U) {
const l = () => U._uiManager.rebuild(U), d = () => {
U.remove();
};
this.addCommands({
cmd: l,
undo: d,
mustExec: !1
});
}
getNextId() {
return c(this, H).getId();
}
combinedSignal(U) {
return c(this, H).combinedSignal(U);
}
canCreateNewEmptyEditor() {
var U;
return (U = c(this, yl, Hd)) == null ? void 0 : U.canCreateNewEmptyEditor();
}
pasteEditor(U, l) {
c(this, H).updateToolbar(U), c(this, H).updateMode(U);
const {
offsetX: d,
offsetY: t
} = h(this, yl, gi).call(this), Z = this.getNextId(), F = h(this, yl, Oi).call(this, {
parent: this,
id: Z,
x: d,
y: t,
uiManager: c(this, H),
isCentered: !0,
...l
});
F && this.add(F);
}
async deserialize(U) {
var l;
return await ((l = c(gU, gZ).get(U.annotationType ?? U.annotationEditorType)) == null ? void 0 : l.deserialize(U, this, c(this, H))) || null;
}
createAndAddNewEditor(U, l, d = {}) {
const t = this.getNextId(), Z = h(this, yl, Oi).call(this, {
parent: this,
id: t,
x: U.offsetX,
y: U.offsetY,
uiManager: c(this, H),
isCentered: l,
...d
});
return Z && this.add(Z), Z;
}
addNewEditor() {
this.createAndAddNewEditor(h(this, yl, gi).call(this), !0);
}
setSelected(U) {
c(this, H).setSelected(U);
}
toggleSelected(U) {
c(this, H).toggleSelected(U);
}
unselect(U) {
c(this, H).unselect(U);
}
pointerup(U) {
var d;
const {
isMac: l
} = LU.platform;
if (!(U.button !== 0 || U.ctrlKey && l) && U.target === this.div && c(this, OZ) && (R(this, OZ, !1), !((d = c(this, yl, Hd)) != null && d.isDrawer && c(this, yl, Hd).supportMultipleDrawings))) {
if (!c(this, an)) {
R(this, an, !0);
return;
}
if (c(this, H).getMode() === cl.STAMP) {
c(this, H).unselectAll();
return;
}
this.createAndAddNewEditor(U, !1);
}
}
pointerdown(U) {
var t;
if (c(this, H).getMode() === cl.HIGHLIGHT && this.enableTextSelection(), c(this, OZ)) {
R(this, OZ, !1);
return;
}
const {
isMac: l
} = LU.platform;
if (U.button !== 0 || U.ctrlKey && l || U.target !== this.div)
return;
if (R(this, OZ, !0), (t = c(this, yl, Hd)) != null && t.isDrawer) {
this.startDrawingSession(U);
return;
}
const d = c(this, H).getActive();
R(this, an, !d || d.isEmpty());
}
startDrawingSession(U) {
if (this.div.focus(), c(this, Id)) {
c(this, yl, Hd).startDrawing(this, c(this, H), !1, U);
return;
}
c(this, H).setCurrentDrawingSession(this), R(this, Id, new AbortController());
const l = c(this, H).combinedSignal(c(this, Id));
this.div.addEventListener("blur", ({
relatedTarget: d
}) => {
d && !this.div.contains(d) && (R(this, At, null), this.commitOrRemove());
}, {
signal: l
}), c(this, yl, Hd).startDrawing(this, c(this, H), !1, U);
}
pause(U) {
if (U) {
const {
activeElement: l
} = document;
this.div.contains(l) && R(this, At, l);
return;
}
c(this, At) && setTimeout(() => {
var l;
(l = c(this, At)) == null || l.focus(), R(this, At, null);
}, 0);
}
endDrawingSession(U = !1) {
return c(this, Id) ? (c(this, H).setCurrentDrawingSession(null), c(this, Id).abort(), R(this, Id, null), R(this, At, null), c(this, yl, Hd).endDrawing(U)) : null;
}
findNewParent(U, l, d) {
const t = c(this, H).findParent(l, d);
return t === null || t === this ? !1 : (t.changeParent(U), !0);
}
commitOrRemove() {
return c(this, Id) ? (this.endDrawingSession(), !0) : !1;
}
onScaleChanging() {
c(this, Id) && c(this, yl, Hd).onScaleChangingWhenDrawing(this);
}
destroy() {
var U, l;
this.commitOrRemove(), ((U = c(this, H).getActive()) == null ? void 0 : U.parent) === this && (c(this, H).commitOrRemove(), c(this, H).setActiveEditor(null)), c(this, ft) && (clearTimeout(c(this, ft)), R(this, ft, null));
for (const d of c(this, hd).values())
(l = c(this, G0)) == null || l.removePointerInTextLayer(d.contentDiv), d.setParent(null), d.isAttachedToDOM = !1, d.div.remove();
this.div = null, c(this, hd).clear(), c(this, H).removeLayer(this);
}
render({
viewport: U
}) {
this.viewport = U, x0(this.div, U);
for (const l of c(this, H).getEditors(this.pageIndex))
this.add(l), l.rebuild();
this.updateMode();
}
update({
viewport: U
}) {
c(this, H).commitOrRemove(), h(this, yl, iV).call(this);
const l = this.viewport.rotation, d = U.rotation;
if (this.viewport = U, x0(this.div, {
rotation: d
}), l !== d)
for (const t of c(this, hd).values())
t.rotate(d);
}
get pageDimensions() {
const {
pageWidth: U,
pageHeight: l
} = this.viewport.rawDims;
return [U, l];
}
get scale() {
return c(this, H).viewParameters.realScale;
}
}, G0 = new WeakMap(), an = new WeakMap(), Wt = new WeakMap(), jZ = new WeakMap(), ft = new WeakMap(), hd = new WeakMap(), OZ = new WeakMap(), Wn = new WeakMap(), S0 = new WeakMap(), Id = new WeakMap(), At = new WeakMap(), GU = new WeakMap(), _t = new WeakMap(), H = new WeakMap(), gZ = new WeakMap(), yl = new WeakSet(), _h = function(U) {
c(this, H).unselectAll();
const {
target: l
} = U;
if (l === c(this, GU).div || (l.getAttribute("role") === "img" || l.classList.contains("endOfContent")) && c(this, GU).div.contains(l)) {
const {
isMac: d
} = LU.platform;
if (U.button !== 0 || U.ctrlKey && d)
return;
c(this, H).showAllEditors("highlight", !0, !0), c(this, GU).div.classList.add("free"), this.toggleDrawing(), pV.startHighlighting(this, c(this, H).direction === "ltr", {
target: c(this, GU).div,
x: U.x,
y: U.y
}), c(this, GU).div.addEventListener("pointerup", () => {
c(this, GU).div.classList.remove("free"), this.toggleDrawing(!0);
}, {
once: !0,
signal: c(this, H)._signal
}), U.preventDefault();
}
}, Hd = function() {
return c(gU, gZ).get(c(this, H).getMode());
}, Oi = function(U) {
const l = c(this, yl, Hd);
return l ? new l.prototype.constructor(U) : null;
}, gi = function() {
const {
x: U,
y: l,
width: d,
height: t
} = this.div.getBoundingClientRect(), Z = Math.max(0, U), F = Math.max(0, l), n = Math.min(window.innerWidth, U + d), s = Math.min(window.innerHeight, l + t), W = (Z + n) / 2 - U, V = (F + s) / 2 - l, [Q, i] = this.viewport.rotation % 180 === 0 ? [W, V] : [V, W];
return {
offsetX: Q,
offsetY: i
};
}, iV = function() {
for (const U of c(this, hd).values())
U.isEmpty() && U.remove();
}, f(gU, "_initialized", !1), b(gU, gZ, new Map([Ti, Ci, wi, pV].map((U) => [U._editorType, U]))), gU);
var Dd, ga, yU, T0, $V, ql, qh, bt, Ki, $h, Hi;
let FM = (ql = class {
constructor({
pageIndex: U
}) {
b(this, bt);
b(this, Dd, null);
b(this, ga, 0);
b(this, yU, /* @__PURE__ */ new Map());
b(this, T0, /* @__PURE__ */ new Map());
this.pageIndex = U;
}
setParent(U) {
if (!c(this, Dd)) {
R(this, Dd, U);
return;
}
if (c(this, Dd) !== U) {
if (c(this, yU).size > 0)
for (const l of c(this, yU).values())
l.remove(), U.append(l);
R(this, Dd, U);
}
}
static get _svgFactory() {
return Wl(this, "_svgFactory", new DR());
}
draw(U, l = !1, d = !1) {
const t = eU(this, ga)._++, Z = h(this, bt, Ki).call(this), F = ql._svgFactory.createElement("defs");
Z.append(F);
const n = ql._svgFactory.createElement("path");
F.append(n);
const s = `path_p${this.pageIndex}_${t}`;
n.setAttribute("id", s), n.setAttribute("vector-effect", "non-scaling-stroke"), l && c(this, T0).set(t, n);
const W = d ? h(this, bt, $h).call(this, F, s) : null, V = ql._svgFactory.createElement("use");
return Z.append(V), V.setAttribute("href", `#${s}`), this.updateProperties(Z, U), c(this, yU).set(t, Z), {
id: t,
clipPathId: `url(#${W})`
};
}
drawOutline(U, l) {
const d = eU(this, ga)._++, t = h(this, bt, Ki).call(this), Z = ql._svgFactory.createElement("defs");
t.append(Z);
const F = ql._svgFactory.createElement("path");
Z.append(F);
const n = `path_p${this.pageIndex}_${d}`;
F.setAttribute("id", n), F.setAttribute("vector-effect", "non-scaling-stroke");
let s;
if (l) {
const Q = ql._svgFactory.createElement("mask");
Z.append(Q), s = `mask_p${this.pageIndex}_${d}`, Q.setAttribute("id", s), Q.setAttribute("maskUnits", "objectBoundingBox");
const i = ql._svgFactory.createElement("rect");
Q.append(i), i.setAttribute("width", "1"), i.setAttribute("height", "1"), i.setAttribute("fill", "white");
const N = ql._svgFactory.createElement("use");
Q.append(N), N.setAttribute("href", `#${n}`), N.setAttribute("stroke", "none"), N.setAttribute("fill", "black"), N.setAttribute("fill-rule", "nonzero"), N.classList.add("mask");
}
const W = ql._svgFactory.createElement("use");
t.append(W), W.setAttribute("href", `#${n}`), s && W.setAttribute("mask", `url(#${s})`);
const V = W.cloneNode();
return t.append(V), W.classList.add("mainOutline"), V.classList.add("secondaryOutline"), this.updateProperties(t, U), c(this, yU).set(d, t), d;
}
finalizeDraw(U, l) {
c(this, T0).delete(U), this.updateProperties(U, l);
}
updateProperties(U, l) {
var s;
if (!l)
return;
const {
root: d,
bbox: t,
rootClass: Z,
path: F
} = l, n = typeof U == "number" ? c(this, yU).get(U) : U;
if (n) {
if (d && h(this, bt, Hi).call(this, n, d), t && h(s = ql, $V, qh).call(s, n, t), Z) {
const {
classList: W
} = n;
for (const [V, Q] of Object.entries(Z))
W.toggle(V, Q);
}
if (F) {
const V = n.firstChild.firstChild;
h(this, bt, Hi).call(this, V, F);
}
}
}
updateParent(U, l) {
if (l === this)
return;
const d = c(this, yU).get(U);
d && (c(l, Dd).append(d), c(this, yU).delete(U), c(l, yU).set(U, d));
}
remove(U) {
c(this, T0).delete(U), c(this, Dd) !== null && (c(this, yU).get(U).remove(), c(this, yU).delete(U));
}
destroy() {
R(this, Dd, null);
for (const U of c(this, yU).values())
U.remove();
c(this, yU).clear(), c(this, T0).clear();
}
}, Dd = new WeakMap(), ga = new WeakMap(), yU = new WeakMap(), T0 = new WeakMap(), $V = new WeakSet(), qh = function(U, [l, d, t, Z]) {
const {
style: F
} = U;
F.top = `${100 * d}%`, F.left = `${100 * l}%`, F.width = `${100 * t}%`, F.height = `${100 * Z}%`;
}, bt = new WeakSet(), Ki = function() {
const U = ql._svgFactory.create(1, 1, !0);
return c(this, Dd).append(U), U.setAttribute("aria-hidden", !0), U;
}, $h = function(U, l) {
const d = ql._svgFactory.createElement("clipPath");
U.append(d);
const t = `clip_${l}`;
d.setAttribute("id", t), d.setAttribute("clipPathUnits", "objectBoundingBox");
const Z = ql._svgFactory.createElement("use");
return d.append(Z), Z.setAttribute("href", `#${l}`), Z.classList.add("clip"), t;
}, Hi = function(U, l) {
for (const [d, t] of Object.entries(l))
t === null ? U.removeAttribute(d) : U.setAttribute(d, t);
}, b(ql, $V), ql);
globalThis.pdfjsTestingUtils = {
HighlightOutliner: ui
};
ll.AbortException;
ll.AnnotationEditorLayer;
ll.AnnotationEditorParamsType;
ll.AnnotationEditorType;
ll.AnnotationEditorUIManager;
var cM = ll.AnnotationLayer;
ll.AnnotationMode;
ll.ColorPicker;
ll.DOMSVGFactory;
ll.DrawLayer;
ll.FeatureTest;
var pW = ll.GlobalWorkerOptions;
ll.ImageKind;
ll.InvalidPDFException;
ll.MissingPDFException;
ll.OPS;
ll.OutputScale;
ll.PDFDataRangeTransport;
ll.PDFDateString;
ll.PDFWorker;
var nM = ll.PasswordResponses;
ll.PermissionFlag;
ll.PixelsPerInch;
ll.RenderingCancelledException;
var sM = ll.TextLayer;
ll.TouchManager;
ll.UnexpectedResponseException;
ll.Util;
ll.VerbosityLevel;
ll.XfaLayer;
ll.build;
ll.createValidAbsoluteUrl;
ll.fetchData;
var aM = ll.getDocument;
ll.getFilenameFromUrl;
ll.getPdfFilenameFromUrl;
ll.getXfaPageViewport;
ll.isDataScheme;
ll.isPdfFile;
ll.noContextMenu;
ll.normalizeUnicode;
ll.setLayerDimensions;
ll.shadow;
ll.stopEvent;
ll.version;
const WM = "data:text/javascript;base64,LyoqCiAqIEBsaWNzdGFydCBUaGUgZm9sbG93aW5nIGlzIHRoZSBlbnRpcmUgbGljZW5zZSBub3RpY2UgZm9yIHRoZQogKiBKYXZhU2NyaXB0IGNvZGUgaW4gdGhpcyBwYWdlCiAqCiAqIENvcHlyaWdodCAyMDI0IE1vemlsbGEgRm91bmRhdGlvbgogKgogKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgogKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICoKICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogKgogKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKgogKiBAbGljZW5kIFRoZSBhYm92ZSBpcyB0aGUgZW50aXJlIGxpY2Vuc2Ugbm90aWNlIGZvciB0aGUKICogSmF2YVNjcmlwdCBjb2RlIGluIHRoaXMgcGFnZQogKi92YXIgZT17OTMwNjooZSx0LGkpPT57dmFyIGE9aSg0OTAxKSxyPWkoNjgyMykscz1UeXBlRXJyb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKGEoZSkpcmV0dXJuIGU7dGhyb3cgbmV3IHMocihlKSsiIGlzIG5vdCBhIGZ1bmN0aW9uIil9fSwzNTA2OihlLHQsaSk9Pnt2YXIgYT1pKDM5MjUpLHI9U3RyaW5nLHM9VHlwZUVycm9yO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZihhKGUpKXJldHVybiBlO3Rocm93IG5ldyBzKCJDYW4ndCBzZXQgIityKGUpKyIgYXMgYSBwcm90b3R5cGUiKX19LDcwODA6KGUsdCxpKT0+e3ZhciBhPWkoNDQwMikuaGFzO2UuZXhwb3J0cz1mdW5jdGlvbihlKXthKGUpO3JldHVybiBlfX0sNjc5OihlLHQsaSk9Pnt2YXIgYT1pKDE2MjUpLHI9VHlwZUVycm9yO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKGEodCxlKSlyZXR1cm4gZTt0aHJvdyBuZXcgcigiSW5jb3JyZWN0IGludm9jYXRpb24iKX19LDg1NTE6KGUsdCxpKT0+e3ZhciBhPWkoMzQpLHI9U3RyaW5nLHM9VHlwZUVycm9yO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZihhKGUpKXJldHVybiBlO3Rocm93IG5ldyBzKHIoZSkrIiBpcyBub3QgYW4gb2JqZWN0Iil9fSw3ODExOmU9PntlLmV4cG9ydHM9InVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmInVuZGVmaW5lZCIhPXR5cGVvZiBEYXRhVmlld30sNzM5NDooZSx0LGkpPT57dmFyIGE9aSg0NTc2KSxyPWkoNjcwNikscz1pKDIxOTUpLG49YS5BcnJheUJ1ZmZlcixvPWEuVHlwZUVycm9yO2UuZXhwb3J0cz1uJiZyKG4ucHJvdG90eXBlLCJieXRlTGVuZ3RoIiwiZ2V0Iil8fGZ1bmN0aW9uKGUpe2lmKCJBcnJheUJ1ZmZlciIhPT1zKGUpKXRocm93IG5ldyBvKCJBcnJheUJ1ZmZlciBleHBlY3RlZCIpO3JldHVybiBlLmJ5dGVMZW5ndGh9fSwzMjM4OihlLHQsaSk9Pnt2YXIgYT1pKDQ1NzYpLHI9aSg3NDc2KSxzPWkoNzM5NCksbj1hLkFycmF5QnVmZmVyLG89biYmbi5wcm90b3R5cGUsZz1vJiZyKG8uc2xpY2UpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZigwIT09cyhlKSlyZXR1cm4hMTtpZighZylyZXR1cm4hMTt0cnl7ZyhlLDAsMCk7cmV0dXJuITF9Y2F0Y2goZSl7cmV0dXJuITB9fX0sNTE2OTooZSx0LGkpPT57dmFyIGE9aSgzMjM4KSxyPVR5cGVFcnJvcjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoYShlKSl0aHJvdyBuZXcgcigiQXJyYXlCdWZmZXIgaXMgZGV0YWNoZWQiKTtyZXR1cm4gZX19LDU2MzY6KGUsdCxpKT0+e3ZhciBhPWkoNDU3Nikscj1pKDk1MDQpLHM9aSg2NzA2KSxuPWkoNzY5Niksbz1pKDUxNjkpLGc9aSg3Mzk0KSxjPWkoNDQ4MyksbD1pKDE1NDgpLGg9YS5zdHJ1Y3R1cmVkQ2xvbmUsQz1hLkFycmF5QnVmZmVyLFE9YS5EYXRhVmlldyxFPU1hdGgubWluLHU9Qy5wcm90b3R5cGUsZD1RLnByb3RvdHlwZSxmPXIodS5zbGljZSkscD1zKHUsInJlc2l6YWJsZSIsImdldCIpLG09cyh1LCJtYXhCeXRlTGVuZ3RoIiwiZ2V0IikseT1yKGQuZ2V0SW50OCksdz1yKGQuc2V0SW50OCk7ZS5leHBvcnRzPShsfHxjKSYmZnVuY3Rpb24oZSx0LGkpe3ZhciBhLHI9ZyhlKSxzPXZvaWQgMD09PXQ/cjpuKHQpLHU9IXB8fCFwKGUpO28oZSk7aWYobCl7ZT1oKGUse3RyYW5zZmVyOltlXX0pO2lmKHI9PT1zJiYoaXx8dSkpcmV0dXJuIGV9aWYocj49cyYmKCFpfHx1KSlhPWYoZSwwLHMpO2Vsc2V7dmFyIGQ9aSYmIXUmJm0/e21heEJ5dGVMZW5ndGg6bShlKX06dm9pZCAwO2E9bmV3IEMocyxkKTtmb3IodmFyIGI9bmV3IFEoZSksRD1uZXcgUShhKSxTPUUocyxyKSxrPTA7azxTO2srKyl3KEQsayx5KGIsaykpfWx8fGMoZSk7cmV0dXJuIGF9fSw0NjQ0OihlLHQsaSk9Pnt2YXIgYSxyLHMsbj1pKDc4MTEpLG89aSgzNzI0KSxnPWkoNDU3NiksYz1pKDQ5MDEpLGw9aSgzNCksaD1pKDkyOTcpLEM9aSg2OTU1KSxRPWkoNjgyMyksRT1pKDY2OTkpLHU9aSg2ODQwKSxkPWkoMjEwNiksZj1pKDE2MjUpLHA9aSgyNzg3KSxtPWkoMjk2NykseT1pKDgyMjcpLHc9aSgzMzkyKSxiPWkoMTE4MSksRD1iLmVuZm9yY2UsUz1iLmdldCxrPWcuSW50OEFycmF5LFI9ayYmay5wcm90b3R5cGUsTj1nLlVpbnQ4Q2xhbXBlZEFycmF5LEc9TiYmTi5wcm90b3R5cGUsTT1rJiZwKGspLFU9UiYmcChSKSx4PU9iamVjdC5wcm90b3R5cGUsTD1nLlR5cGVFcnJvcixIPXkoInRvU3RyaW5nVGFnIiksSj13KCJUWVBFRF9BUlJBWV9UQUciKSx2PSJUeXBlZEFycmF5Q29uc3RydWN0b3IiLFk9biYmISFtJiYiT3BlcmEiIT09QyhnLm9wZXJhKSxLPSExLFQ9e0ludDhBcnJheToxLFVpbnQ4QXJyYXk6MSxVaW50OENsYW1wZWRBcnJheToxLEludDE2QXJyYXk6MixVaW50MTZBcnJheToyLEludDMyQXJyYXk6NCxVaW50MzJBcnJheTo0LEZsb2F0MzJBcnJheTo0LEZsb2F0NjRBcnJheTo4fSxxPXtCaWdJbnQ2NEFycmF5OjgsQmlnVWludDY0QXJyYXk6OH0sZ2V0VHlwZWRBcnJheUNvbnN0cnVjdG9yPWZ1bmN0aW9uKGUpe3ZhciB0PXAoZSk7aWYobCh0KSl7dmFyIGk9Uyh0KTtyZXR1cm4gaSYmaChpLHYpP2lbdl06Z2V0VHlwZWRBcnJheUNvbnN0cnVjdG9yKHQpfX0saXNUeXBlZEFycmF5PWZ1bmN0aW9uKGUpe2lmKCFsKGUpKXJldHVybiExO3ZhciB0PUMoZSk7cmV0dXJuIGgoVCx0KXx8aChxLHQpfTtmb3IoYSBpbiBUKShzPShyPWdbYV0pJiZyLnByb3RvdHlwZSk/RChzKVt2XT1yOlk9ITE7Zm9yKGEgaW4gcSkocz0ocj1nW2FdKSYmci5wcm90b3R5cGUpJiYoRChzKVt2XT1yKTtpZighWXx8IWMoTSl8fE09PT1GdW5jdGlvbi5wcm90b3R5cGUpe009ZnVuY3Rpb24gVHlwZWRBcnJheSgpe3Rocm93IG5ldyBMKCJJbmNvcnJlY3QgaW52b2NhdGlvbiIpfTtpZihZKWZvcihhIGluIFQpZ1thXSYmbShnW2FdLE0pfWlmKCFZfHwhVXx8VT09PXgpe1U9TS5wcm90b3R5cGU7aWYoWSlmb3IoYSBpbiBUKWdbYV0mJm0oZ1thXS5wcm90b3R5cGUsVSl9WSYmcChHKSE9PVUmJm0oRyxVKTtpZihvJiYhaChVLEgpKXtLPSEwO2QoVSxILHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGwodGhpcyk/dGhpc1tKXTp2b2lkIDB9fSk7Zm9yKGEgaW4gVClnW2FdJiZFKGdbYV0sSixhKX1lLmV4cG9ydHM9e05BVElWRV9BUlJBWV9CVUZGRVJfVklFV1M6WSxUWVBFRF9BUlJBWV9UQUc6SyYmSixhVHlwZWRBcnJheTpmdW5jdGlvbihlKXtpZihpc1R5cGVkQXJyYXkoZSkpcmV0dXJuIGU7dGhyb3cgbmV3IEwoIlRhcmdldCBpcyBub3QgYSB0eXBlZCBhcnJheSIpfSxhVHlwZWRBcnJheUNvbnN0cnVjdG9yOmZ1bmN0aW9uKGUpe2lmKGMoZSkmJighbXx8ZihNLGUpKSlyZXR1cm4gZTt0aHJvdyBuZXcgTChRKGUpKyIgaXMgbm90IGEgdHlwZWQgYXJyYXkgY29uc3RydWN0b3IiKX0sZXhwb3J0VHlwZWRBcnJheU1ldGhvZDpmdW5jdGlvbihlLHQsaSxhKXtpZihvKXtpZihpKWZvcih2YXIgciBpbiBUKXt2YXIgcz1nW3JdO2lmKHMmJmgocy5wcm90b3R5cGUsZSkpdHJ5e2RlbGV0ZSBzLnByb3RvdHlwZVtlXX1jYXRjaChpKXt0cnl7cy5wcm90b3R5cGVbZV09dH1jYXRjaChlKXt9fX1VW2VdJiYhaXx8dShVLGUsaT90OlkmJlJbZV18fHQsYSl9fSxleHBvcnRUeXBlZEFycmF5U3RhdGljTWV0aG9kOmZ1bmN0aW9uKGUsdCxpKXt2YXIgYSxyO2lmKG8pe2lmKG0pe2lmKGkpZm9yKGEgaW4gVClpZigocj1nW2FdKSYmaChyLGUpKXRyeXtkZWxldGUgcltlXX1jYXRjaChlKXt9aWYoTVtlXSYmIWkpcmV0dXJuO3RyeXtyZXR1cm4gdShNLGUsaT90OlkmJk1bZV18fHQpfWNhdGNoKGUpe319Zm9yKGEgaW4gVCkhKHI9Z1thXSl8fHJbZV0mJiFpfHx1KHIsZSx0KX19LGdldFR5cGVkQXJyYXlDb25zdHJ1Y3Rvcixpc1ZpZXc6ZnVuY3Rpb24gaXNWaWV3KGUpe2lmKCFsKGUpKXJldHVybiExO3ZhciB0PUMoZSk7cmV0dXJuIkRhdGFWaWV3Ij09PXR8fGgoVCx0KXx8aChxLHQpfSxpc1R5cGVkQXJyYXksVHlwZWRBcnJheTpNLFR5cGVkQXJyYXlQcm90b3R5cGU6VX19LDUzNzA6KGUsdCxpKT0+e3ZhciBhPWkoNjE5OCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxpKXtmb3IodmFyIHI9MCxzPWFyZ3VtZW50cy5sZW5ndGg+Mj9pOmEodCksbj1uZXcgZShzKTtzPnI7KW5bcl09dFtyKytdO3JldHVybiBufX0sOTYxNzooZSx0LGkpPT57dmFyIGE9aSg1Mzk3KSxyPWkoNTYxMCkscz1pKDYxOTgpLGNyZWF0ZU1ldGhvZD1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxpLG4pe3ZhciBvPWEodCksZz1zKG8pO2lmKDA9PT1nKXJldHVybiFlJiYtMTt2YXIgYyxsPXIobixnKTtpZihlJiZpIT1pKXtmb3IoO2c+bDspaWYoKGM9b1tsKytdKSE9YylyZXR1cm4hMH1lbHNlIGZvcig7Zz5sO2wrKylpZigoZXx8bCBpbiBvKSYmb1tsXT09PWkpcmV0dXJuIGV8fGx8fDA7cmV0dXJuIWUmJi0xfX07ZS5leHBvcnRzPXtpbmNsdWRlczpjcmVhdGVNZXRob2QoITApLGluZGV4T2Y6Y3JlYXRlTWV0aG9kKCExKX19LDQ1Mjc6KGUsdCxpKT0+e3ZhciBhPWkoMzcyNCkscj1pKDQzNzYpLHM9VHlwZUVycm9yLG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixvPWEmJiFmdW5jdGlvbigpe2lmKHZvaWQgMCE9PXRoaXMpcmV0dXJuITA7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwibGVuZ3RoIix7d3JpdGFibGU6ITF9KS5sZW5ndGg9MX1jYXRjaChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIFR5cGVFcnJvcn19KCk7ZS5leHBvcnRzPW8/ZnVuY3Rpb24oZSx0KXtpZihyKGUpJiYhbihlLCJsZW5ndGgiKS53cml0YWJsZSl0aHJvdyBuZXcgcygiQ2Fubm90IHNldCByZWFkIG9ubHkgLmxlbmd0aCIpO3JldHVybiBlLmxlbmd0aD10fTpmdW5jdGlvbihlLHQpe3JldHVybiBlLmxlbmd0aD10fX0sNzY4MDooZSx0LGkpPT57dmFyIGE9aSg5NTA0KTtlLmV4cG9ydHM9YShbXS5zbGljZSl9LDc2Mjg6KGUsdCxpKT0+e3ZhciBhPWkoNjE5OCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBpPWEoZSkscj1uZXcgdChpKSxzPTA7czxpO3MrKylyW3NdPWVbaS1zLTFdO3JldHVybiByfX0sOTkyODooZSx0LGkpPT57dmFyIGE9aSg2MTk4KSxyPWkoMTI5MSkscz1SYW5nZUVycm9yO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsaSxuKXt2YXIgbz1hKGUpLGc9cihpKSxjPWc8MD9vK2c6ZztpZihjPj1vfHxjPDApdGhyb3cgbmV3IHMoIkluY29ycmVjdCBpbmRleCIpO2Zvcih2YXIgbD1uZXcgdChvKSxoPTA7aDxvO2grKylsW2hdPWg9PT1jP246ZVtoXTtyZXR1cm4gbH19LDYzMTk6KGUsdCxpKT0+e3ZhciBhPWkoODU1MSkscj1pKDk1MzkpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsaSxzKXt0cnl7cmV0dXJuIHM/dChhKGkpWzBdLGlbMV0pOnQoaSl9Y2F0Y2godCl7cihlLCJ0aHJvdyIsdCl9fX0sMjE5NTooZSx0LGkpPT57dmFyIGE9aSg5NTA0KSxyPWEoe30udG9TdHJpbmcpLHM9YSgiIi5zbGljZSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBzKHIoZSksOCwtMSl9fSw2OTU1OihlLHQsaSk9Pnt2YXIgYT1pKDIxNDApLHI9aSg0OTAxKSxzPWkoMjE5NSksbj1pKDgyMjcpKCJ0b1N0cmluZ1RhZyIpLG89T2JqZWN0LGc9IkFyZ3VtZW50cyI9PT1zKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk7ZS5leHBvcnRzPWE/czpmdW5jdGlvbihlKXt2YXIgdCxpLGE7cmV0dXJuIHZvaWQgMD09PWU/IlVuZGVmaW5lZCI6bnVsbD09PWU/Ik51bGwiOiJzdHJpbmciPT10eXBlb2YoaT1mdW5jdGlvbihlLHQpe3RyeXtyZXR1cm4gZVt0XX1jYXRjaChlKXt9fSh0PW8oZSksbikpP2k6Zz9zKHQpOiJPYmplY3QiPT09KGE9cyh0KSkmJnIodC5jYWxsZWUpPyJBcmd1bWVudHMiOmF9fSw3NzQwOihlLHQsaSk9Pnt2YXIgYT1pKDkyOTcpLHI9aSg1MDMxKSxzPWkoNzM0Nyksbj1pKDQ5MTMpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsaSl7Zm9yKHZhciBvPXIodCksZz1uLmYsYz1zLmYsbD0wO2w8by5sZW5ndGg7bCsrKXt2YXIgaD1vW2xdO2EoZSxoKXx8aSYmYShpLGgpfHxnKGUsaCxjKHQsaCkpfX19LDIyMTE6KGUsdCxpKT0+e3ZhciBhPWkoOTAzOSk7ZS5leHBvcnRzPSFhKChmdW5jdGlvbigpe2Z1bmN0aW9uIEYoKXt9Ri5wcm90b3R5cGUuY29uc3RydWN0b3I9bnVsbDtyZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKG5ldyBGKSE9PUYucHJvdG90eXBlfSkpfSwyNTI5OmU9PntlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm57dmFsdWU6ZSxkb25lOnR9fX0sNjY5OTooZSx0LGkpPT57dmFyIGE9aSgzNzI0KSxyPWkoNDkxMykscz1pKDY5ODApO2UuZXhwb3J0cz1hP2Z1bmN0aW9uKGUsdCxpKXtyZXR1cm4gci5mKGUsdCxzKDEsaSkpfTpmdW5jdGlvbihlLHQsaSl7ZVt0XT1pO3JldHVybiBlfX0sNjk4MDplPT57ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJue2VudW1lcmFibGU6ISgxJmUpLGNvbmZpZ3VyYWJsZTohKDImZSksd3JpdGFibGU6ISg0JmUpLHZhbHVlOnR9fX0sNDY1OTooZSx0LGkpPT57dmFyIGE9aSgzNzI0KSxyPWkoNDkxMykscz1pKDY5ODApO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsaSl7YT9yLmYoZSx0LHMoMCxpKSk6ZVt0XT1pfX0sMjEwNjooZSx0LGkpPT57dmFyIGE9aSgyODMpLHI9aSg0OTEzKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LGkpe2kuZ2V0JiZhKGkuZ2V0LHQse2dldHRlcjohMH0pO2kuc2V0JiZhKGkuc2V0LHQse3NldHRlcjohMH0pO3JldHVybiByLmYoZSx0LGkpfX0sNjg0MDooZSx0LGkpPT57dmFyIGE9aSg0OTAxKSxyPWkoNDkxMykscz1pKDI4Myksbj1pKDk0MzMpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsaSxvKXtvfHwobz17fSk7dmFyIGc9by5lbnVtZXJhYmxlLGM9dm9pZCAwIT09by5uYW1lP28ubmFtZTp0O2EoaSkmJnMoaSxjLG8pO2lmKG8uZ2xvYmFsKWc/ZVt0XT1pOm4odCxpKTtlbHNle3RyeXtvLnVuc2FmZT9lW3RdJiYoZz0hMCk6ZGVsZXRlIGVbdF19Y2F0Y2goZSl7fWc/ZVt0XT1pOnIuZihlLHQse3ZhbHVlOmksZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6IW8ubm9uQ29uZmlndXJhYmxlLHdyaXRhYmxlOiFvLm5vbldyaXRhYmxlfSl9cmV0dXJuIGV9fSw2Mjc5OihlLHQsaSk9Pnt2YXIgYT1pKDY4NDApO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsaSl7Zm9yKHZhciByIGluIHQpYShlLHIsdFtyXSxpKTtyZXR1cm4gZX19LDk0MzM6KGUsdCxpKT0+e3ZhciBhPWkoNDU3Nikscj1PYmplY3QuZGVmaW5lUHJvcGVydHk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dHJ5e3IoYSxlLHt2YWx1ZTp0LGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pfWNhdGNoKGkpe2FbZV09dH1yZXR1cm4gdH19LDM3MjQ6KGUsdCxpKT0+e3ZhciBhPWkoOTAzOSk7ZS5leHBvcnRzPSFhKChmdW5jdGlvbigpe3JldHVybiA3IT09T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LDEse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pWzFdfSkpfSw0NDgzOihlLHQsaSk9Pnt2YXIgYSxyLHMsbixvPWkoNDU3NiksZz1pKDk0MjkpLGM9aSgxNTQ4KSxsPW8uc3RydWN0dXJlZENsb25lLGg9by5BcnJheUJ1ZmZlcixDPW8uTWVzc2FnZUNoYW5uZWwsUT0hMTtpZihjKVE9ZnVuY3Rpb24oZSl7bChlLHt0cmFuc2ZlcjpbZV19KX07ZWxzZSBpZihoKXRyeXtDfHwoYT1nKCJ3b3JrZXJfdGhyZWFkcyIpKSYmKEM9YS5NZXNzYWdlQ2hhbm5lbCk7aWYoQyl7cj1uZXcgQztzPW5ldyBoKDIpO249ZnVuY3Rpb24oZSl7ci5wb3J0MS5wb3N0TWVzc2FnZShudWxsLFtlXSl9O2lmKDI9PT1zLmJ5dGVMZW5ndGgpe24ocyk7MD09PXMuYnl0ZUxlbmd0aCYmKFE9bil9fX1jYXRjaChlKXt9ZS5leHBvcnRzPVF9LDQwNTU6KGUsdCxpKT0+e3ZhciBhPWkoNDU3Nikscj1pKDM0KSxzPWEuZG9jdW1lbnQsbj1yKHMpJiZyKHMuY3JlYXRlRWxlbWVudCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBuP3MuY3JlYXRlRWxlbWVudChlKTp7fX19LDY4Mzc6ZT0+e3ZhciB0PVR5cGVFcnJvcjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoZT45MDA3MTk5MjU0NzQwOTkxKXRocm93IHQoIk1heGltdW0gYWxsb3dlZCBpbmRleCBleGNlZWRlZCIpO3JldHVybiBlfX0sNTAwMjplPT57ZS5leHBvcnRzPXtJbmRleFNpemVFcnJvcjp7czoiSU5ERVhfU0laRV9FUlIiLGM6MSxtOjF9LERPTVN0cmluZ1NpemVFcnJvcjp7czoiRE9NU1RSSU5HX1NJWkVfRVJSIixjOjIsbTowfSxIaWVyYXJjaHlSZXF1ZXN0RXJyb3I6e3M6IkhJRVJBUkNIWV9SRVFVRVNUX0VSUiIsYzozLG06MX0sV3JvbmdEb2N1bWVudEVycm9yOntzOiJXUk9OR19ET0NVTUVOVF9FUlIiLGM6NCxtOjF9LEludmFsaWRDaGFyYWN0ZXJFcnJvcjp7czoiSU5WQUxJRF9DSEFSQUNURVJfRVJSIixjOjUsbToxfSxOb0RhdGFBbGxvd2VkRXJyb3I6e3M6Ik5PX0RBVEFfQUxMT1dFRF9FUlIiLGM6NixtOjB9LE5vTW9kaWZpY2F0aW9uQWxsb3dlZEVycm9yOntzOiJOT19NT0RJRklDQVRJT05fQUxMT1dFRF9FUlIiLGM6NyxtOjF9LE5vdEZvdW5kRXJyb3I6e3M6Ik5PVF9GT1VORF9FUlIiLGM6OCxtOjF9LE5vdFN1cHBvcnRlZEVycm9yOntzOiJOT1RfU1VQUE9SVEVEX0VSUiIsYzo5LG06MX0sSW5Vc2VBdHRyaWJ1dGVFcnJvcjp7czoiSU5VU0VfQVRUUklCVVRFX0VSUiIsYzoxMCxtOjF9LEludmFsaWRTdGF0ZUVycm9yOntzOiJJTlZBTElEX1NUQVRFX0VSUiIsYzoxMSxtOjF9LFN5bnRheEVycm9yOntzOiJTWU5UQVhfRVJSIixjOjEyLG06MX0sSW52YWxpZE1vZGlmaWNhdGlvbkVycm9yOntzOiJJTlZBTElEX01PRElGSUNBVElPTl9FUlIiLGM6MTMsbToxfSxOYW1lc3BhY2VFcnJvcjp7czoiTkFNRVNQQUNFX0VSUiIsYzoxNCxtOjF9LEludmFsaWRBY2Nlc3NFcnJvcjp7czoiSU5WQUxJRF9BQ0NFU1NfRVJSIixjOjE1LG06MX0sVmFsaWRhdGlvbkVycm9yOntzOiJWQUxJREFUSU9OX0VSUiIsYzoxNixtOjB9LFR5cGVNaXNtYXRjaEVycm9yOntzOiJUWVBFX01JU01BVENIX0VSUiIsYzoxNyxtOjF9LFNlY3VyaXR5RXJyb3I6e3M6IlNFQ1VSSVRZX0VSUiIsYzoxOCxtOjF9LE5ldHdvcmtFcnJvcjp7czoiTkVUV09SS19FUlIiLGM6MTksbToxfSxBYm9ydEVycm9yOntzOiJBQk9SVF9FUlIiLGM6MjAsbToxfSxVUkxNaXNtYXRjaEVycm9yOntzOiJVUkxfTUlTTUFUQ0hfRVJSIixjOjIxLG06MX0sUXVvdGFFeGNlZWRlZEVycm9yOntzOiJRVU9UQV9FWENFRURFRF9FUlIiLGM6MjIsbToxfSxUaW1lb3V0RXJyb3I6e3M6IlRJTUVPVVRfRVJSIixjOjIzLG06MX0sSW52YWxpZE5vZGVUeXBlRXJyb3I6e3M6IklOVkFMSURfTk9ERV9UWVBFX0VSUiIsYzoyNCxtOjF9LERhdGFDbG9uZUVycm9yOntzOiJEQVRBX0NMT05FX0VSUiIsYzoyNSxtOjF9fX0sODcyNzplPT57ZS5leHBvcnRzPVsiY29uc3RydWN0b3IiLCJoYXNPd25Qcm9wZXJ0eSIsImlzUHJvdG90eXBlT2YiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsInRvTG9jYWxlU3RyaW5nIiwidG9TdHJpbmciLCJ2YWx1ZU9mIl19LDYxOTM6KGUsdCxpKT0+e3ZhciBhPWkoNDIxNSk7ZS5leHBvcnRzPSJOT0RFIj09PWF9LDI4Mzk6KGUsdCxpKT0+e3ZhciBhPWkoNDU3NikubmF2aWdhdG9yLHI9YSYmYS51c2VyQWdlbnQ7ZS5leHBvcnRzPXI/U3RyaW5nKHIpOiIifSw5NTE5OihlLHQsaSk9Pnt2YXIgYSxyLHM9aSg0NTc2KSxuPWkoMjgzOSksbz1zLnByb2Nlc3MsZz1zLkRlbm8sYz1vJiZvLnZlcnNpb25zfHxnJiZnLnZlcnNpb24sbD1jJiZjLnY4O2wmJihyPShhPWwuc3BsaXQoIi4iKSlbMF0+MCYmYVswXTw0PzE6KyhhWzBdK2FbMV0pKTshciYmbiYmKCEoYT1uLm1hdGNoKC9FZGdlXC8oXGQrKS8pKXx8YVsxXT49NzQpJiYoYT1uLm1hdGNoKC9DaHJvbWVcLyhcZCspLykpJiYocj0rYVsxXSk7ZS5leHBvcnRzPXJ9LDQyMTU6KGUsdCxpKT0+e3ZhciBhPWkoNDU3Nikscj1pKDI4MzkpLHM9aSgyMTk1KSx1c2VyQWdlbnRTdGFydHNXaXRoPWZ1bmN0aW9uKGUpe3JldHVybiByLnNsaWNlKDAsZS5sZW5ndGgpPT09ZX07ZS5leHBvcnRzPXVzZXJBZ2VudFN0YXJ0c1dpdGgoIkJ1bi8iKT8iQlVOIjp1c2VyQWdlbnRTdGFydHNXaXRoKCJDbG91ZGZsYXJlLVdvcmtlcnMiKT8iQ0xPVURGTEFSRSI6dXNlckFnZW50U3RhcnRzV2l0aCgiRGVuby8iKT8iREVOTyI6dXNlckFnZW50U3RhcnRzV2l0aCgiTm9kZS5qcy8iKT8iTk9ERSI6YS5CdW4mJiJzdHJpbmciPT10eXBlb2YgQnVuLnZlcnNpb24/IkJVTiI6YS5EZW5vJiYib2JqZWN0Ij09dHlwZW9mIERlbm8udmVyc2lvbj8iREVOTyI6InByb2Nlc3MiPT09cyhhLnByb2Nlc3MpPyJOT0RFIjphLndpbmRvdyYmYS5kb2N1bWVudD8iQlJPV1NFUiI6IlJFU1QifSw4NTc0OihlLHQsaSk9Pnt2YXIgYT1pKDk1MDQpLHI9RXJyb3Iscz1hKCIiLnJlcGxhY2UpLG49U3RyaW5nKG5ldyByKCJ6eGNhc2QiKS5zdGFjayksbz0vXG5ccyphdCBbXjpdKjpbXlxuXSovLGc9by50ZXN0KG4pO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKGcmJiJzdHJpbmciPT10eXBlb2YgZSYmIXIucHJlcGFyZVN0YWNrVHJhY2UpZm9yKDt0LS07KWU9cyhlLG8sIiIpO3JldHVybiBlfX0sNjUxODooZSx0LGkpPT57dmFyIGE9aSg0NTc2KSxyPWkoNzM0NykuZixzPWkoNjY5OSksbj1pKDY4NDApLG89aSg5NDMzKSxnPWkoNzc0MCksYz1pKDI3OTYpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBpLGwsaCxDLFEsRT1lLnRhcmdldCx1PWUuZ2xvYmFsLGQ9ZS5zdGF0O2lmKGk9dT9hOmQ/YVtFXXx8byhFLHt9KTphW0VdJiZhW0VdLnByb3RvdHlwZSlmb3IobCBpbiB0KXtDPXRbbF07aD1lLmRvbnRDYWxsR2V0U2V0PyhRPXIoaSxsKSkmJlEudmFsdWU6aVtsXTtpZighYyh1P2w6RSsoZD8iLiI6IiMiKStsLGUuZm9yY2VkKSYmdm9pZCAwIT09aCl7aWYodHlwZW9mIEM9PXR5cGVvZiBoKWNvbnRpbnVlO2coQyxoKX0oZS5zaGFtfHxoJiZoLnNoYW0pJiZzKEMsInNoYW0iLCEwKTtuKGksbCxDLGUpfX19LDkwMzk6ZT0+e2UuZXhwb3J0cz1mdW5jdGlvbihlKXt0cnl7cmV0dXJuISFlKCl9Y2F0Y2goZSl7cmV0dXJuITB9fX0sODc0NTooZSx0LGkpPT57dmFyIGE9aSg2MTYpLHI9RnVuY3Rpb24ucHJvdG90eXBlLHM9ci5hcHBseSxuPXIuY2FsbDtlLmV4cG9ydHM9Im9iamVjdCI9PXR5cGVvZiBSZWZsZWN0JiZSZWZsZWN0LmFwcGx5fHwoYT9uLmJpbmQocyk6ZnVuY3Rpb24oKXtyZXR1cm4gbi5hcHBseShzLGFyZ3VtZW50cyl9KX0sNjA4MDooZSx0LGkpPT57dmFyIGE9aSg3NDc2KSxyPWkoOTMwNikscz1pKDYxNiksbj1hKGEuYmluZCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cihlKTtyZXR1cm4gdm9pZCAwPT09dD9lOnM/bihlLHQpOmZ1bmN0aW9uKCl7cmV0dXJuIGUuYXBwbHkodCxhcmd1bWVudHMpfX19LDYxNjooZSx0LGkpPT57dmFyIGE9aSg5MDM5KTtlLmV4cG9ydHM9IWEoKGZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24oKXt9LmJpbmQoKTtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2YgZXx8ZS5oYXNPd25Qcm9wZXJ0eSgicHJvdG90eXBlIil9KSl9LDk1NjU6KGUsdCxpKT0+e3ZhciBhPWkoNjE2KSxyPUZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO2UuZXhwb3J0cz1hP3IuYmluZChyKTpmdW5jdGlvbigpe3JldHVybiByLmFwcGx5KHIsYXJndW1lbnRzKX19LDM1MDooZSx0LGkpPT57dmFyIGE9aSgzNzI0KSxyPWkoOTI5Nykscz1GdW5jdGlvbi5wcm90b3R5cGUsbj1hJiZPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLG89cihzLCJuYW1lIiksZz1vJiYic29tZXRoaW5nIj09PWZ1bmN0aW9uIHNvbWV0aGluZygpe30ubmFtZSxjPW8mJighYXx8YSYmbihzLCJuYW1lIikuY29uZmlndXJhYmxlKTtlLmV4cG9ydHM9e0VYSVNUUzpvLFBST1BFUjpnLENPTkZJR1VSQUJMRTpjfX0sNjcwNjooZSx0LGkpPT57dmFyIGE9aSg5NTA0KSxyPWkoOTMwNik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxpKXt0cnl7cmV0dXJuIGEocihPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdClbaV0pKX1jYXRjaChlKXt9fX0sNzQ3NjooZSx0LGkpPT57dmFyIGE9aSgyMTk1KSxyPWkoOTUwNCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKCJGdW5jdGlvbiI9PT1hKGUpKXJldHVybiByKGUpfX0sOTUwNDooZSx0LGkpPT57dmFyIGE9aSg2MTYpLHI9RnVuY3Rpb24ucHJvdG90eXBlLHM9ci5jYWxsLG49YSYmci5iaW5kLmJpbmQocyxzKTtlLmV4cG9ydHM9YT9uOmZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBzLmFwcGx5KGUsYXJndW1lbnRzKX19fSw5NDI5OihlLHQsaSk9Pnt2YXIgYT1pKDQ1NzYpLHI9aSg2MTkzKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYocil7dHJ5e3JldHVybiBhLnByb2Nlc3MuZ2V0QnVpbHRpbk1vZHVsZShlKX1jYXRjaChlKXt9dHJ5e3JldHVybiBGdW5jdGlvbigncmV0dXJuIHJlcXVpcmUoIicrZSsnIiknKSgpfWNhdGNoKGUpe319fX0sNzc1MTooZSx0LGkpPT57dmFyIGE9aSg0NTc2KSxyPWkoNDkwMSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8Mj8oaT1hW2VdLHIoaSk/aTp2b2lkIDApOmFbZV0mJmFbZV1bdF07dmFyIGl9fSwxNzY3OmU9PntlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJue2l0ZXJhdG9yOmUsbmV4dDplLm5leHQsZG9uZTohMX19fSw4NTE6KGUsdCxpKT0+e3ZhciBhPWkoNjk1NSkscj1pKDU5NjYpLHM9aSg0MTE3KSxuPWkoNjI2OSksbz1pKDgyMjcpKCJpdGVyYXRvciIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZighcyhlKSlyZXR1cm4gcihlLG8pfHxyKGUsIkBAaXRlcmF0b3IiKXx8blthKGUpXX19LDgxOihlLHQsaSk9Pnt2YXIgYT1pKDk1NjUpLHI9aSg5MzA2KSxzPWkoODU1MSksbj1pKDY4MjMpLG89aSg4NTEpLGc9VHlwZUVycm9yO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBpPWFyZ3VtZW50cy5sZW5ndGg8Mj9vKGUpOnQ7aWYocihpKSlyZXR1cm4gcyhhKGksZSkpO3Rocm93IG5ldyBnKG4oZSkrIiBpcyBub3QgaXRlcmFibGUiKX19LDU5NjY6KGUsdCxpKT0+e3ZhciBhPWkoOTMwNikscj1pKDQxMTcpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBpPWVbdF07cmV0dXJuIHIoaSk/dm9pZCAwOmEoaSl9fSwzNzg5OihlLHQsaSk9Pnt2YXIgYT1pKDkzMDYpLHI9aSg4NTUxKSxzPWkoOTU2NSksbj1pKDEyOTEpLG89aSgxNzY3KSxnPSJJbnZhbGlkIHNpemUiLGM9UmFuZ2VFcnJvcixsPVR5cGVFcnJvcixoPU1hdGgubWF4LFNldFJlY29yZD1mdW5jdGlvbihlLHQpe3RoaXMuc2V0PWU7dGhpcy5zaXplPWgodCwwKTt0aGlzLmhhcz1hKGUuaGFzKTt0aGlzLmtleXM9YShlLmtleXMpfTtTZXRSZWNvcmQucHJvdG90eXBlPXtnZXRJdGVyYXRvcjpmdW5jdGlvbigpe3JldHVybiBvKHIocyh0aGlzLmtleXMsdGhpcy5zZXQpKSl9LGluY2x1ZGVzOmZ1bmN0aW9uKGUpe3JldHVybiBzKHRoaXMuaGFzLHRoaXMuc2V0LGUpfX07ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3IoZSk7dmFyIHQ9K2Uuc2l6ZTtpZih0IT10KXRocm93IG5ldyBsKGcpO3ZhciBpPW4odCk7aWYoaTwwKXRocm93IG5ldyBjKGcpO3JldHVybiBuZXcgU2V0UmVjb3JkKGUsaSl9fSw0NTc2OmZ1bmN0aW9uKGUpe3ZhciBjaGVjaz1mdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5NYXRoPT09TWF0aCYmZX07ZS5leHBvcnRzPWNoZWNrKCJvYmplY3QiPT10eXBlb2YgZ2xvYmFsVGhpcyYmZ2xvYmFsVGhpcyl8fGNoZWNrKCJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cpfHxjaGVjaygib2JqZWN0Ij09dHlwZW9mIHNlbGYmJnNlbGYpfHxjaGVjaygib2JqZWN0Ij09dHlwZW9mIGdsb2JhbCYmZ2xvYmFsKXx8Y2hlY2soIm9iamVjdCI9PXR5cGVvZiB0aGlzJiZ0aGlzKXx8ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30oKXx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKX0sOTI5NzooZSx0LGkpPT57dmFyIGE9aSg5NTA0KSxyPWkoODk4MSkscz1hKHt9Lmhhc093blByb3BlcnR5KTtlLmV4cG9ydHM9T2JqZWN0Lmhhc093bnx8ZnVuY3Rpb24gaGFzT3duKGUsdCl7cmV0dXJuIHMocihlKSx0KX19LDQyMTplPT57ZS5leHBvcnRzPXt9fSwzOTc6KGUsdCxpKT0+e3ZhciBhPWkoNzc1MSk7ZS5leHBvcnRzPWEoImRvY3VtZW50IiwiZG9jdW1lbnRFbGVtZW50Iil9LDU5MTc6KGUsdCxpKT0+e3ZhciBhPWkoMzcyNCkscj1pKDkwMzkpLHM9aSg0MDU1KTtlLmV4cG9ydHM9IWEmJiFyKChmdW5jdGlvbigpe3JldHVybiA3IT09T2JqZWN0LmRlZmluZVByb3BlcnR5KHMoImRpdiIpLCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pKX0sNzA1NTooZSx0LGkpPT57dmFyIGE9aSg5NTA0KSxyPWkoOTAzOSkscz1pKDIxOTUpLG49T2JqZWN0LG89YSgiIi5zcGxpdCk7ZS5leHBvcnRzPXIoKGZ1bmN0aW9uKCl7cmV0dXJuIW4oInoiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKX0pKT9mdW5jdGlvbihlKXtyZXR1cm4iU3RyaW5nIj09PXMoZSk/byhlLCIiKTpuKGUpfTpufSwzMTY3OihlLHQsaSk9Pnt2YXIgYT1pKDQ5MDEpLHI9aSgzNCkscz1pKDI5NjcpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsaSl7dmFyIG4sbztzJiZhKG49dC5jb25zdHJ1Y3RvcikmJm4hPT1pJiZyKG89bi5wcm90b3R5cGUpJiZvIT09aS5wcm90b3R5cGUmJnMoZSxvKTtyZXR1cm4gZX19LDM3MDY6KGUsdCxpKT0+e3ZhciBhPWkoOTUwNCkscj1pKDQ5MDEpLHM9aSg3NjI5KSxuPWEoRnVuY3Rpb24udG9TdHJpbmcpO3Iocy5pbnNwZWN0U291cmNlKXx8KHMuaW5zcGVjdFNvdXJjZT1mdW5jdGlvbihlKXtyZXR1cm4gbihlKX0pO2UuZXhwb3J0cz1zLmluc3BlY3RTb3VyY2V9LDExODE6KGUsdCxpKT0+e3ZhciBhLHIscyxuPWkoODYyMiksbz1pKDQ1NzYpLGc9aSgzNCksYz1pKDY2OTkpLGw9aSg5Mjk3KSxoPWkoNzYyOSksQz1pKDYxMTkpLFE9aSg0MjEpLEU9Ik9iamVjdCBhbHJlYWR5IGluaXRpYWxpemVkIix1PW8uVHlwZUVycm9yLGQ9by5XZWFrTWFwO2lmKG58fGguc3RhdGUpe3ZhciBmPWguc3RhdGV8fChoLnN0YXRlPW5ldyBkKTtmLmdldD1mLmdldDtmLmhhcz1mLmhhcztmLnNldD1mLnNldDthPWZ1bmN0aW9uKGUsdCl7aWYoZi5oYXMoZSkpdGhyb3cgbmV3IHUoRSk7dC5mYWNhZGU9ZTtmLnNldChlLHQpO3JldHVybiB0fTtyPWZ1bmN0aW9uKGUpe3JldHVybiBmLmdldChlKXx8e319O3M9ZnVuY3Rpb24oZSl7cmV0dXJuIGYuaGFzKGUpfX1lbHNle3ZhciBwPUMoInN0YXRlIik7UVtwXT0hMDthPWZ1bmN0aW9uKGUsdCl7aWYobChlLHApKXRocm93IG5ldyB1KEUpO3QuZmFjYWRlPWU7YyhlLHAsdCk7cmV0dXJuIHR9O3I9ZnVuY3Rpb24oZSl7cmV0dXJuIGwoZSxwKT9lW3BdOnt9fTtzPWZ1bmN0aW9uKGUpe3JldHVybiBsKGUscCl9fWUuZXhwb3J0cz17c2V0OmEsZ2V0OnIsaGFzOnMsZW5mb3JjZTpmdW5jdGlvbihlKXtyZXR1cm4gcyhlKT9yKGUpOmEoZSx7fSl9LGdldHRlckZvcjpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7dmFyIGk7aWYoIWcodCl8fChpPXIodCkpLnR5cGUhPT1lKXRocm93IG5ldyB1KCJJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICIrZSsiIHJlcXVpcmVkIik7cmV0dXJuIGl9fX19LDQyMDk6KGUsdCxpKT0+e3ZhciBhPWkoODIyNykscj1pKDYyNjkpLHM9YSgiaXRlcmF0b3IiKSxuPUFycmF5LnByb3RvdHlwZTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWUmJihyLkFycmF5PT09ZXx8bltzXT09PWUpfX0sNDM3NjooZSx0LGkpPT57dmFyIGE9aSgyMTk1KTtlLmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24gaXNBcnJheShlKXtyZXR1cm4iQXJyYXkiPT09YShlKX19LDExMDg6KGUsdCxpKT0+e3ZhciBhPWkoNjk1NSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PWEoZSk7cmV0dXJuIkJpZ0ludDY0QXJyYXkiPT09dHx8IkJpZ1VpbnQ2NEFycmF5Ij09PXR9fSw0OTAxOmU9Pnt2YXIgdD0ib2JqZWN0Ij09dHlwZW9mIGRvY3VtZW50JiZkb2N1bWVudC5hbGw7ZS5leHBvcnRzPXZvaWQgMD09PXQmJnZvaWQgMCE9PXQ/ZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGV8fGU9PT10fTpmdW5jdGlvbihlKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZX19LDI3OTY6KGUsdCxpKT0+e3ZhciBhPWkoOTAzOSkscj1pKDQ5MDEpLHM9LyN8XC5wcm90b3R5cGVcLi8saXNGb3JjZWQ9ZnVuY3Rpb24oZSx0KXt2YXIgaT1vW24oZSldO3JldHVybiBpPT09Y3x8aSE9PWcmJihyKHQpP2EodCk6ISF0KX0sbj1pc0ZvcmNlZC5ub3JtYWxpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIFN0cmluZyhlKS5yZXBsYWNlKHMsIi4iKS50b0xvd2VyQ2FzZSgpfSxvPWlzRm9yY2VkLmRhdGE9e30sZz1pc0ZvcmNlZC5OQVRJVkU9Ik4iLGM9aXNGb3JjZWQuUE9MWUZJTEw9IlAiO2UuZXhwb3J0cz1pc0ZvcmNlZH0sNDExNzplPT57ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT1lfX0sMzQ6KGUsdCxpKT0+e3ZhciBhPWkoNDkwMSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiJvYmplY3QiPT10eXBlb2YgZT9udWxsIT09ZTphKGUpfX0sMzkyNTooZSx0LGkpPT57dmFyIGE9aSgzNCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBhKGUpfHxudWxsPT09ZX19LDYzOTU6ZT0+e2UuZXhwb3J0cz0hMX0sNzU3OihlLHQsaSk9Pnt2YXIgYT1pKDc3NTEpLHI9aSg0OTAxKSxzPWkoMTYyNSksbj1pKDcwNDApLG89T2JqZWN0O2UuZXhwb3J0cz1uP2Z1bmN0aW9uKGUpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgZX06ZnVuY3Rpb24oZSl7dmFyIHQ9YSgiU3ltYm9sIik7cmV0dXJuIHIodCkmJnModC5wcm90b3R5cGUsbyhlKSl9fSw1MDc6KGUsdCxpKT0+e3ZhciBhPWkoOTU2NSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxpKXtmb3IodmFyIHIscyxuPWk/ZTplLml0ZXJhdG9yLG89ZS5uZXh0OyEocj1hKG8sbikpLmRvbmU7KWlmKHZvaWQgMCE9PShzPXQoci52YWx1ZSkpKXJldHVybiBzfX0sMjY1MjooZSx0LGkpPT57dmFyIGE9aSg2MDgwKSxyPWkoOTU2NSkscz1pKDg1NTEpLG49aSg2ODIzKSxvPWkoNDIwOSksZz1pKDYxOTgpLGM9aSgxNjI1KSxsPWkoODEpLGg9aSg4NTEpLEM9aSg5NTM5KSxRPVR5cGVFcnJvcixSZXN1bHQ9ZnVuY3Rpb24oZSx0KXt0aGlzLnN0b3BwZWQ9ZTt0aGlzLnJlc3VsdD10fSxFPVJlc3VsdC5wcm90b3R5cGU7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxpKXt2YXIgdSxkLGYscCxtLHksdyxiPWkmJmkudGhhdCxEPSEoIWl8fCFpLkFTX0VOVFJJRVMpLFM9ISghaXx8IWkuSVNfUkVDT1JEKSxrPSEoIWl8fCFpLklTX0lURVJBVE9SKSxSPSEoIWl8fCFpLklOVEVSUlVQVEVEKSxOPWEodCxiKSxzdG9wPWZ1bmN0aW9uKGUpe3UmJkModSwibm9ybWFsIixlKTtyZXR1cm4gbmV3IFJlc3VsdCghMCxlKX0sY2FsbEZuPWZ1bmN0aW9uKGUpe2lmKEQpe3MoZSk7cmV0dXJuIFI/TihlWzBdLGVbMV0sc3RvcCk6TihlWzBdLGVbMV0pfXJldHVybiBSP04oZSxzdG9wKTpOKGUpfTtpZihTKXU9ZS5pdGVyYXRvcjtlbHNlIGlmKGspdT1lO2Vsc2V7aWYoIShkPWgoZSkpKXRocm93IG5ldyBRKG4oZSkrIiBpcyBub3QgaXRlcmFibGUiKTtpZihvKGQpKXtmb3IoZj0wLHA9ZyhlKTtwPmY7ZisrKWlmKChtPWNhbGxGbihlW2ZdKSkmJmMoRSxtKSlyZXR1cm4gbTtyZXR1cm4gbmV3IFJlc3VsdCghMSl9dT1sKGUsZCl9eT1TP2UubmV4dDp1Lm5leHQ7Zm9yKDshKHc9cih5LHUpKS5kb25lOyl7dHJ5e209Y2FsbEZuKHcudmFsdWUpfWNhdGNoKGUpe0ModSwidGhyb3ciLGUpfWlmKCJvYmplY3QiPT10eXBlb2YgbSYmbSYmYyhFLG0pKXJldHVybiBtfXJldHVybiBuZXcgUmVzdWx0KCExKX19LDk1Mzk6KGUsdCxpKT0+e3ZhciBhPWkoOTU2NSkscj1pKDg1NTEpLHM9aSg1OTY2KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LGkpe3ZhciBuLG87cihlKTt0cnl7aWYoIShuPXMoZSwicmV0dXJuIikpKXtpZigidGhyb3ciPT09dCl0aHJvdyBpO3JldHVybiBpfW49YShuLGUpfWNhdGNoKGUpe289ITA7bj1lfWlmKCJ0aHJvdyI9PT10KXRocm93IGk7aWYobyl0aHJvdyBuO3Iobik7cmV0dXJuIGl9fSw5NDYyOihlLHQsaSk9Pnt2YXIgYT1pKDk1NjUpLHI9aSgyMzYwKSxzPWkoNjY5OSksbj1pKDYyNzkpLG89aSg4MjI3KSxnPWkoMTE4MSksYz1pKDU5NjYpLGw9aSg3NjU3KS5JdGVyYXRvclByb3RvdHlwZSxoPWkoMjUyOSksQz1pKDk1MzkpLFE9bygidG9TdHJpbmdUYWciKSxFPSJJdGVyYXRvckhlbHBlciIsdT0iV3JhcEZvclZhbGlkSXRlcmF0b3IiLGQ9Zy5zZXQsY3JlYXRlSXRlcmF0b3JQcm94eVByb3RvdHlwZT1mdW5jdGlvbihlKXt2YXIgdD1nLmdldHRlckZvcihlP3U6RSk7cmV0dXJuIG4ocihsKSx7bmV4dDpmdW5jdGlvbiBuZXh0KCl7dmFyIGk9dCh0aGlzKTtpZihlKXJldHVybiBpLm5leHRIYW5kbGVyKCk7dHJ5e3ZhciBhPWkuZG9uZT92b2lkIDA6aS5uZXh0SGFuZGxlcigpO3JldHVybiBoKGEsaS5kb25lKX1jYXRjaChlKXtpLmRvbmU9ITA7dGhyb3cgZX19LHJldHVybjpmdW5jdGlvbigpe3ZhciBpPXQodGhpcykscj1pLml0ZXJhdG9yO2kuZG9uZT0hMDtpZihlKXt2YXIgcz1jKHIsInJldHVybiIpO3JldHVybiBzP2EocyxyKTpoKHZvaWQgMCwhMCl9aWYoaS5pbm5lcil0cnl7QyhpLmlubmVyLml0ZXJhdG9yLCJub3JtYWwiKX1jYXRjaChlKXtyZXR1cm4gQyhyLCJ0aHJvdyIsZSl9ciYmQyhyLCJub3JtYWwiKTtyZXR1cm4gaCh2b2lkIDAsITApfX0pfSxmPWNyZWF0ZUl0ZXJhdG9yUHJveHlQcm90b3R5cGUoITApLHA9Y3JlYXRlSXRlcmF0b3JQcm94eVByb3RvdHlwZSghMSk7cyhwLFEsIkl0ZXJhdG9yIEhlbHBlciIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBpPWZ1bmN0aW9uIEl0ZXJhdG9yKGksYSl7aWYoYSl7YS5pdGVyYXRvcj1pLml0ZXJhdG9yO2EubmV4dD1pLm5leHR9ZWxzZSBhPWk7YS50eXBlPXQ/dTpFO2EubmV4dEhhbmRsZXI9ZTthLmNvdW50ZXI9MDthLmRvbmU9ITE7ZCh0aGlzLGEpfTtpLnByb3RvdHlwZT10P2Y6cDtyZXR1cm4gaX19LDcxMzooZSx0LGkpPT57dmFyIGE9aSg5NTY1KSxyPWkoOTMwNikscz1pKDg1NTEpLG49aSgxNzY3KSxvPWkoOTQ2MiksZz1pKDYzMTkpLGM9bygoZnVuY3Rpb24oKXt2YXIgZT10aGlzLml0ZXJhdG9yLHQ9cyhhKHRoaXMubmV4dCxlKSk7aWYoISh0aGlzLmRvbmU9ISF0LmRvbmUpKXJldHVybiBnKGUsdGhpcy5tYXBwZXIsW3QudmFsdWUsdGhpcy5jb3VudGVyKytdLCEwKX0pKTtlLmV4cG9ydHM9ZnVuY3Rpb24gbWFwKGUpe3ModGhpcyk7cihlKTtyZXR1cm4gbmV3IGMobih0aGlzKSx7bWFwcGVyOmV9KX19LDc2NTc6KGUsdCxpKT0+e3ZhciBhLHIscyxuPWkoOTAzOSksbz1pKDQ5MDEpLGc9aSgzNCksYz1pKDIzNjApLGw9aSgyNzg3KSxoPWkoNjg0MCksQz1pKDgyMjcpLFE9aSg2Mzk1KSxFPUMoIml0ZXJhdG9yIiksdT0hMTtbXS5rZXlzJiYoIm5leHQiaW4ocz1bXS5rZXlzKCkpPyhyPWwobChzKSkpIT09T2JqZWN0LnByb3RvdHlwZSYmKGE9cik6dT0hMCk7IWcoYSl8fG4oKGZ1bmN0aW9uKCl7dmFyIGU9e307cmV0dXJuIGFbRV0uY2FsbChlKSE9PWV9KSk/YT17fTpRJiYoYT1jKGEpKTtvKGFbRV0pfHxoKGEsRSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKTtlLmV4cG9ydHM9e0l0ZXJhdG9yUHJvdG90eXBlOmEsQlVHR1lfU0FGQVJJX0lURVJBVE9SUzp1fX0sNjI2OTplPT57ZS5leHBvcnRzPXt9fSw2MTk4OihlLHQsaSk9Pnt2YXIgYT1pKDgwMTQpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gYShlLmxlbmd0aCl9fSwyODM6KGUsdCxpKT0+e3ZhciBhPWkoOTUwNCkscj1pKDkwMzkpLHM9aSg0OTAxKSxuPWkoOTI5Nyksbz1pKDM3MjQpLGc9aSgzNTApLkNPTkZJR1VSQUJMRSxjPWkoMzcwNiksbD1pKDExODEpLGg9bC5lbmZvcmNlLEM9bC5nZXQsUT1TdHJpbmcsRT1PYmplY3QuZGVmaW5lUHJvcGVydHksdT1hKCIiLnNsaWNlKSxkPWEoIiIucmVwbGFjZSksZj1hKFtdLmpvaW4pLHA9byYmIXIoKGZ1bmN0aW9uKCl7cmV0dXJuIDghPT1FKChmdW5jdGlvbigpe30pLCJsZW5ndGgiLHt2YWx1ZTo4fSkubGVuZ3RofSkpLG09U3RyaW5nKFN0cmluZykuc3BsaXQoIlN0cmluZyIpLHk9ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxpKXsiU3ltYm9sKCI9PT11KFEodCksMCw3KSYmKHQ9IlsiK2QoUSh0KSwvXlN5bWJvbFwoKFteKV0qKVwpLiokLywiJDEiKSsiXSIpO2kmJmkuZ2V0dGVyJiYodD0iZ2V0ICIrdCk7aSYmaS5zZXR0ZXImJih0PSJzZXQgIit0KTsoIW4oZSwibmFtZSIpfHxnJiZlLm5hbWUhPT10KSYmKG8/RShlLCJuYW1lIix7dmFsdWU6dCxjb25maWd1cmFibGU6ITB9KTplLm5hbWU9dCk7cCYmaSYmbihpLCJhcml0eSIpJiZlLmxlbmd0aCE9PWkuYXJpdHkmJkUoZSwibGVuZ3RoIix7dmFsdWU6aS5hcml0eX0pO3RyeXtpJiZuKGksImNvbnN0cnVjdG9yIikmJmkuY29uc3RydWN0b3I/byYmRShlLCJwcm90b3R5cGUiLHt3cml0YWJsZTohMX0pOmUucHJvdG90eXBlJiYoZS5wcm90b3R5cGU9dm9pZCAwKX1jYXRjaChlKXt9dmFyIGE9aChlKTtuKGEsInNvdXJjZSIpfHwoYS5zb3VyY2U9ZihtLCJzdHJpbmciPT10eXBlb2YgdD90OiIiKSk7cmV0dXJuIGV9O0Z1bmN0aW9uLnByb3RvdHlwZS50b1N0cmluZz15KChmdW5jdGlvbiB0b1N0cmluZygpe3JldHVybiBzKHRoaXMpJiZDKHRoaXMpLnNvdXJjZXx8Yyh0aGlzKX0pLCJ0b1N0cmluZyIpfSw3NDE6ZT0+e3ZhciB0PU1hdGguY2VpbCxpPU1hdGguZmxvb3I7ZS5leHBvcnRzPU1hdGgudHJ1bmN8fGZ1bmN0aW9uIHRydW5jKGUpe3ZhciBhPStlO3JldHVybihhPjA/aTp0KShhKX19LDYwNDM6KGUsdCxpKT0+e3ZhciBhPWkoOTMwNikscj1UeXBlRXJyb3IsUHJvbWlzZUNhcGFiaWxpdHk9ZnVuY3Rpb24oZSl7dmFyIHQsaTt0aGlzLnByb21pc2U9bmV3IGUoKGZ1bmN0aW9uKGUsYSl7aWYodm9pZCAwIT09dHx8dm9pZCAwIT09aSl0aHJvdyBuZXcgcigiQmFkIFByb21pc2UgY29uc3RydWN0b3IiKTt0PWU7aT1hfSkpO3RoaXMucmVzb2x2ZT1hKHQpO3RoaXMucmVqZWN0PWEoaSl9O2UuZXhwb3J0cy5mPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgUHJvbWlzZUNhcGFiaWxpdHkoZSl9fSwyNjAzOihlLHQsaSk9Pnt2YXIgYT1pKDY1NSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PWU/YXJndW1lbnRzLmxlbmd0aDwyPyIiOnQ6YShlKX19LDIzNjA6KGUsdCxpKT0+e3ZhciBhLHI9aSg4NTUxKSxzPWkoNjgwMSksbj1pKDg3MjcpLG89aSg0MjEpLGc9aSgzOTcpLGM9aSg0MDU1KSxsPWkoNjExOSksaD0icHJvdG90eXBlIixDPSJzY3JpcHQiLFE9bCgiSUVfUFJPVE8iKSxFbXB0eUNvbnN0cnVjdG9yPWZ1bmN0aW9uKCl7fSxzY3JpcHRUYWc9ZnVuY3Rpb24oZSl7cmV0dXJuIjwiK0MrIj4iK2UrIjwvIitDKyI+In0sTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWD1mdW5jdGlvbihlKXtlLndyaXRlKHNjcmlwdFRhZygiIikpO2UuY2xvc2UoKTt2YXIgdD1lLnBhcmVudFdpbmRvdy5PYmplY3Q7ZT1udWxsO3JldHVybiB0fSxOdWxsUHJvdG9PYmplY3Q9ZnVuY3Rpb24oKXt0cnl7YT1uZXcgQWN0aXZlWE9iamVjdCgiaHRtbGZpbGUiKX1jYXRjaChlKXt9TnVsbFByb3RvT2JqZWN0PSJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQ/ZG9jdW1lbnQuZG9tYWluJiZhP051bGxQcm90b09iamVjdFZpYUFjdGl2ZVgoYSk6ZnVuY3Rpb24oKXt2YXIgZSx0PWMoImlmcmFtZSIpLGk9ImphdmEiK0MrIjoiO3Quc3R5bGUuZGlzcGxheT0ibm9uZSI7Zy5hcHBlbmRDaGlsZCh0KTt0LnNyYz1TdHJpbmcoaSk7KGU9dC5jb250ZW50V2luZG93LmRvY3VtZW50KS5vcGVuKCk7ZS53cml0ZShzY3JpcHRUYWcoImRvY3VtZW50LkY9T2JqZWN0IikpO2UuY2xvc2UoKTtyZXR1cm4gZS5GfSgpOk51bGxQcm90b09iamVjdFZpYUFjdGl2ZVgoYSk7Zm9yKHZhciBlPW4ubGVuZ3RoO2UtLTspZGVsZXRlIE51bGxQcm90b09iamVjdFtoXVtuW2VdXTtyZXR1cm4gTnVsbFByb3RvT2JqZWN0KCl9O29bUV09ITA7ZS5leHBvcnRzPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uIGNyZWF0ZShlLHQpe3ZhciBpO2lmKG51bGwhPT1lKXtFbXB0eUNvbnN0cnVjdG9yW2hdPXIoZSk7aT1uZXcgRW1wdHlDb25zdHJ1Y3RvcjtFbXB0eUNvbnN0cnVjdG9yW2hdPW51bGw7aVtRXT1lfWVsc2UgaT1OdWxsUHJvdG9PYmplY3QoKTtyZXR1cm4gdm9pZCAwPT09dD9pOnMuZihpLHQpfX0sNjgwMTooZSx0LGkpPT57dmFyIGE9aSgzNzI0KSxyPWkoODY4Nikscz1pKDQ5MTMpLG49aSg4NTUxKSxvPWkoNTM5NyksZz1pKDEwNzIpO3QuZj1hJiYhcj9PYmplY3QuZGVmaW5lUHJvcGVydGllczpmdW5jdGlvbiBkZWZpbmVQcm9wZXJ0aWVzKGUsdCl7bihlKTtmb3IodmFyIGksYT1vKHQpLHI9Zyh0KSxjPXIubGVuZ3RoLGw9MDtjPmw7KXMuZihlLGk9cltsKytdLGFbaV0pO3JldHVybiBlfX0sNDkxMzooZSx0LGkpPT57dmFyIGE9aSgzNzI0KSxyPWkoNTkxNykscz1pKDg2ODYpLG49aSg4NTUxKSxvPWkoNjk2OSksZz1UeXBlRXJyb3IsYz1PYmplY3QuZGVmaW5lUHJvcGVydHksbD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLGg9ImVudW1lcmFibGUiLEM9ImNvbmZpZ3VyYWJsZSIsUT0id3JpdGFibGUiO3QuZj1hP3M/ZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoZSx0LGkpe24oZSk7dD1vKHQpO24oaSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUmJiJwcm90b3R5cGUiPT09dCYmInZhbHVlImluIGkmJlEgaW4gaSYmIWlbUV0pe3ZhciBhPWwoZSx0KTtpZihhJiZhW1FdKXtlW3RdPWkudmFsdWU7aT17Y29uZmlndXJhYmxlOkMgaW4gaT9pW0NdOmFbQ10sZW51bWVyYWJsZTpoIGluIGk/aVtoXTphW2hdLHdyaXRhYmxlOiExfX19cmV0dXJuIGMoZSx0LGkpfTpjOmZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KGUsdCxpKXtuKGUpO3Q9byh0KTtuKGkpO2lmKHIpdHJ5e3JldHVybiBjKGUsdCxpKX1jYXRjaChlKXt9aWYoImdldCJpbiBpfHwic2V0ImluIGkpdGhyb3cgbmV3IGcoIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIik7InZhbHVlImluIGkmJihlW3RdPWkudmFsdWUpO3JldHVybiBlfX0sNzM0NzooZSx0LGkpPT57dmFyIGE9aSgzNzI0KSxyPWkoOTU2NSkscz1pKDg3NzMpLG49aSg2OTgwKSxvPWkoNTM5NyksZz1pKDY5NjkpLGM9aSg5Mjk3KSxsPWkoNTkxNyksaD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO3QuZj1hP2g6ZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsdCl7ZT1vKGUpO3Q9Zyh0KTtpZihsKXRyeXtyZXR1cm4gaChlLHQpfWNhdGNoKGUpe31pZihjKGUsdCkpcmV0dXJuIG4oIXIocy5mLGUsdCksZVt0XSl9fSw4NDgwOihlLHQsaSk9Pnt2YXIgYT1pKDE4MjgpLHI9aSg4NzI3KS5jb25jYXQoImxlbmd0aCIsInByb3RvdHlwZSIpO3QuZj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc3x8ZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlOYW1lcyhlKXtyZXR1cm4gYShlLHIpfX0sMzcxNzooZSx0KT0+e3QuZj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzfSwyNzg3OihlLHQsaSk9Pnt2YXIgYT1pKDkyOTcpLHI9aSg0OTAxKSxzPWkoODk4MSksbj1pKDYxMTkpLG89aSgyMjExKSxnPW4oIklFX1BST1RPIiksYz1PYmplY3QsbD1jLnByb3RvdHlwZTtlLmV4cG9ydHM9bz9jLmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3ZhciB0PXMoZSk7aWYoYSh0LGcpKXJldHVybiB0W2ddO3ZhciBpPXQuY29uc3RydWN0b3I7cmV0dXJuIHIoaSkmJnQgaW5zdGFuY2VvZiBpP2kucHJvdG90eXBlOnQgaW5zdGFuY2VvZiBjP2w6bnVsbH19LDE2MjU6KGUsdCxpKT0+e3ZhciBhPWkoOTUwNCk7ZS5leHBvcnRzPWEoe30uaXNQcm90b3R5cGVPZil9LDE4Mjg6KGUsdCxpKT0+e3ZhciBhPWkoOTUwNCkscj1pKDkyOTcpLHM9aSg1Mzk3KSxuPWkoOTYxNykuaW5kZXhPZixvPWkoNDIxKSxnPWEoW10ucHVzaCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIGksYT1zKGUpLGM9MCxsPVtdO2ZvcihpIGluIGEpIXIobyxpKSYmcihhLGkpJiZnKGwsaSk7Zm9yKDt0Lmxlbmd0aD5jOylyKGEsaT10W2MrK10pJiYofm4obCxpKXx8ZyhsLGkpKTtyZXR1cm4gbH19LDEwNzI6KGUsdCxpKT0+e3ZhciBhPWkoMTgyOCkscj1pKDg3MjcpO2UuZXhwb3J0cz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24ga2V5cyhlKXtyZXR1cm4gYShlLHIpfX0sODc3MzooZSx0KT0+e3ZhciBpPXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLGE9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixyPWEmJiFpLmNhbGwoezE6Mn0sMSk7dC5mPXI/ZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoZSl7dmFyIHQ9YSh0aGlzLGUpO3JldHVybiEhdCYmdC5lbnVtZXJhYmxlfTppfSwyOTY3OihlLHQsaSk9Pnt2YXIgYT1pKDY3MDYpLHI9aSgzNCkscz1pKDc3NTApLG49aSgzNTA2KTtlLmV4cG9ydHM9T2JqZWN0LnNldFByb3RvdHlwZU9mfHwoIl9fcHJvdG9fXyJpbnt9P2Z1bmN0aW9uKCl7dmFyIGUsdD0hMSxpPXt9O3RyeXsoZT1hKE9iamVjdC5wcm90b3R5cGUsIl9fcHJvdG9fXyIsInNldCIpKShpLFtdKTt0PWkgaW5zdGFuY2VvZiBBcnJheX1jYXRjaChlKXt9cmV0dXJuIGZ1bmN0aW9uIHNldFByb3RvdHlwZU9mKGksYSl7cyhpKTtuKGEpO2lmKCFyKGkpKXJldHVybiBpO3Q/ZShpLGEpOmkuX19wcm90b19fPWE7cmV0dXJuIGl9fSgpOnZvaWQgMCl9LDQyNzA6KGUsdCxpKT0+e3ZhciBhPWkoOTU2NSkscj1pKDQ5MDEpLHM9aSgzNCksbj1UeXBlRXJyb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIGksbztpZigic3RyaW5nIj09PXQmJnIoaT1lLnRvU3RyaW5nKSYmIXMobz1hKGksZSkpKXJldHVybiBvO2lmKHIoaT1lLnZhbHVlT2YpJiYhcyhvPWEoaSxlKSkpcmV0dXJuIG87aWYoInN0cmluZyIhPT10JiZyKGk9ZS50b1N0cmluZykmJiFzKG89YShpLGUpKSlyZXR1cm4gbzt0aHJvdyBuZXcgbigiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlIil9fSw1MDMxOihlLHQsaSk9Pnt2YXIgYT1pKDc3NTEpLHI9aSg5NTA0KSxzPWkoODQ4MCksbj1pKDM3MTcpLG89aSg4NTUxKSxnPXIoW10uY29uY2F0KTtlLmV4cG9ydHM9YSgiUmVmbGVjdCIsIm93bktleXMiKXx8ZnVuY3Rpb24gb3duS2V5cyhlKXt2YXIgdD1zLmYobyhlKSksaT1uLmY7cmV0dXJuIGk/Zyh0LGkoZSkpOnR9fSwxMTAzOmU9PntlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dHJ5e3JldHVybntlcnJvcjohMSx2YWx1ZTplKCl9fWNhdGNoKGUpe3JldHVybntlcnJvcjohMCx2YWx1ZTplfX19fSw3OTc5OihlLHQsaSk9Pnt2YXIgYT1pKDg1NTEpO2UuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciBlPWEodGhpcyksdD0iIjtlLmhhc0luZGljZXMmJih0Kz0iZCIpO2UuZ2xvYmFsJiYodCs9ImciKTtlLmlnbm9yZUNhc2UmJih0Kz0iaSIpO2UubXVsdGlsaW5lJiYodCs9Im0iKTtlLmRvdEFsbCYmKHQrPSJzIik7ZS51bmljb2RlJiYodCs9InUiKTtlLnVuaWNvZGVTZXRzJiYodCs9InYiKTtlLnN0aWNreSYmKHQrPSJ5Iik7cmV0dXJuIHR9fSw3NzUwOihlLHQsaSk9Pnt2YXIgYT1pKDQxMTcpLHI9VHlwZUVycm9yO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZihhKGUpKXRocm93IG5ldyByKCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAiK2UpO3JldHVybiBlfX0sOTI4NjooZSx0LGkpPT57dmFyIGE9aSg0NDAyKSxyPWkoODQ2OSkscz1hLlNldCxuPWEuYWRkO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1uZXcgcztyKGUsKGZ1bmN0aW9uKGUpe24odCxlKX0pKTtyZXR1cm4gdH19LDM0NDA6KGUsdCxpKT0+e3ZhciBhPWkoNzA4MCkscj1pKDQ0MDIpLHM9aSg5Mjg2KSxuPWkoNTE3MCksbz1pKDM3ODkpLGc9aSg4NDY5KSxjPWkoNTA3KSxsPXIuaGFzLGg9ci5yZW1vdmU7ZS5leHBvcnRzPWZ1bmN0aW9uIGRpZmZlcmVuY2UoZSl7dmFyIHQ9YSh0aGlzKSxpPW8oZSkscj1zKHQpO24odCk8PWkuc2l6ZT9nKHQsKGZ1bmN0aW9uKGUpe2kuaW5jbHVkZXMoZSkmJmgocixlKX0pKTpjKGkuZ2V0SXRlcmF0b3IoKSwoZnVuY3Rpb24oZSl7bCh0LGUpJiZoKHIsZSl9KSk7cmV0dXJuIHJ9fSw0NDAyOihlLHQsaSk9Pnt2YXIgYT1pKDk1MDQpLHI9U2V0LnByb3RvdHlwZTtlLmV4cG9ydHM9e1NldCxhZGQ6YShyLmFkZCksaGFzOmEoci5oYXMpLHJlbW92ZTphKHIuZGVsZXRlKSxwcm90bzpyfX0sODc1MDooZSx0LGkpPT57dmFyIGE9aSg3MDgwKSxyPWkoNDQwMikscz1pKDUxNzApLG49aSgzNzg5KSxvPWkoODQ2OSksZz1pKDUwNyksYz1yLlNldCxsPXIuYWRkLGg9ci5oYXM7ZS5leHBvcnRzPWZ1bmN0aW9uIGludGVyc2VjdGlvbihlKXt2YXIgdD1hKHRoaXMpLGk9bihlKSxyPW5ldyBjO3ModCk+aS5zaXplP2coaS5nZXRJdGVyYXRvcigpLChmdW5jdGlvbihlKXtoKHQsZSkmJmwocixlKX0pKTpvKHQsKGZ1bmN0aW9uKGUpe2kuaW5jbHVkZXMoZSkmJmwocixlKX0pKTtyZXR1cm4gcn19LDQ0NDk6KGUsdCxpKT0+e3ZhciBhPWkoNzA4MCkscj1pKDQ0MDIpLmhhcyxzPWkoNTE3MCksbj1pKDM3ODkpLG89aSg4NDY5KSxnPWkoNTA3KSxjPWkoOTUzOSk7ZS5leHBvcnRzPWZ1bmN0aW9uIGlzRGlzam9pbnRGcm9tKGUpe3ZhciB0PWEodGhpcyksaT1uKGUpO2lmKHModCk8PWkuc2l6ZSlyZXR1cm4hMSE9PW8odCwoZnVuY3Rpb24oZSl7aWYoaS5pbmNsdWRlcyhlKSlyZXR1cm4hMX0pLCEwKTt2YXIgbD1pLmdldEl0ZXJhdG9yKCk7cmV0dXJuITEhPT1nKGwsKGZ1bmN0aW9uKGUpe2lmKHIodCxlKSlyZXR1cm4gYyhsLCJub3JtYWwiLCExKX0pKX19LDM4Mzg6KGUsdCxpKT0+e3ZhciBhPWkoNzA4MCkscj1pKDUxNzApLHM9aSg4NDY5KSxuPWkoMzc4OSk7ZS5leHBvcnRzPWZ1bmN0aW9uIGlzU3Vic2V0T2YoZSl7dmFyIHQ9YSh0aGlzKSxpPW4oZSk7cmV0dXJuIShyKHQpPmkuc2l6ZSkmJiExIT09cyh0LChmdW5jdGlvbihlKXtpZighaS5pbmNsdWRlcyhlKSlyZXR1cm4hMX0pLCEwKX19LDg1Mjc6KGUsdCxpKT0+e3ZhciBhPWkoNzA4MCkscj1pKDQ0MDIpLmhhcyxzPWkoNTE3MCksbj1pKDM3ODkpLG89aSg1MDcpLGc9aSg5NTM5KTtlLmV4cG9ydHM9ZnVuY3Rpb24gaXNTdXBlcnNldE9mKGUpe3ZhciB0PWEodGhpcyksaT1uKGUpO2lmKHModCk8aS5zaXplKXJldHVybiExO3ZhciBjPWkuZ2V0SXRlcmF0b3IoKTtyZXR1cm4hMSE9PW8oYywoZnVuY3Rpb24oZSl7aWYoIXIodCxlKSlyZXR1cm4gZyhjLCJub3JtYWwiLCExKX0pKX19LDg0Njk6KGUsdCxpKT0+e3ZhciBhPWkoOTUwNCkscj1pKDUwNykscz1pKDQ0MDIpLG49cy5TZXQsbz1zLnByb3RvLGc9YShvLmZvckVhY2gpLGM9YShvLmtleXMpLGw9YyhuZXcgbikubmV4dDtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LGkpe3JldHVybiBpP3Ioe2l0ZXJhdG9yOmMoZSksbmV4dDpsfSx0KTpnKGUsdCl9fSw0OTE2OihlLHQsaSk9Pnt2YXIgYT1pKDc3NTEpLGNyZWF0ZVNldExpa2U9ZnVuY3Rpb24oZSl7cmV0dXJue3NpemU6ZSxoYXM6ZnVuY3Rpb24oKXtyZXR1cm4hMX0sa2V5czpmdW5jdGlvbigpe3JldHVybntuZXh0OmZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6ITB9fX19fX07ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PWEoIlNldCIpO3RyeXsobmV3IHQpW2VdKGNyZWF0ZVNldExpa2UoMCkpO3RyeXsobmV3IHQpW2VdKGNyZWF0ZVNldExpa2UoLTEpKTtyZXR1cm4hMX1jYXRjaChlKXtyZXR1cm4hMH19Y2F0Y2goZSl7cmV0dXJuITF9fX0sNTE3MDooZSx0LGkpPT57dmFyIGE9aSg2NzA2KSxyPWkoNDQwMik7ZS5leHBvcnRzPWEoci5wcm90bywic2l6ZSIsImdldCIpfHxmdW5jdGlvbihlKXtyZXR1cm4gZS5zaXplfX0sMzY1MDooZSx0LGkpPT57dmFyIGE9aSg3MDgwKSxyPWkoNDQwMikscz1pKDkyODYpLG49aSgzNzg5KSxvPWkoNTA3KSxnPXIuYWRkLGM9ci5oYXMsbD1yLnJlbW92ZTtlLmV4cG9ydHM9ZnVuY3Rpb24gc3ltbWV0cmljRGlmZmVyZW5jZShlKXt2YXIgdD1hKHRoaXMpLGk9bihlKS5nZXRJdGVyYXRvcigpLHI9cyh0KTtvKGksKGZ1bmN0aW9uKGUpe2ModCxlKT9sKHIsZSk6ZyhyLGUpfSkpO3JldHVybiByfX0sNDIwNDooZSx0LGkpPT57dmFyIGE9aSg3MDgwKSxyPWkoNDQwMikuYWRkLHM9aSg5Mjg2KSxuPWkoMzc4OSksbz1pKDUwNyk7ZS5leHBvcnRzPWZ1bmN0aW9uIHVuaW9uKGUpe3ZhciB0PWEodGhpcyksaT1uKGUpLmdldEl0ZXJhdG9yKCksZz1zKHQpO28oaSwoZnVuY3Rpb24oZSl7cihnLGUpfSkpO3JldHVybiBnfX0sNjExOTooZSx0LGkpPT57dmFyIGE9aSg1NzQ1KSxyPWkoMzM5Mikscz1hKCJrZXlzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBzW2VdfHwoc1tlXT1yKGUpKX19LDc2Mjk6KGUsdCxpKT0+e3ZhciBhPWkoNjM5NSkscj1pKDQ1NzYpLHM9aSg5NDMzKSxuPSJfX2NvcmUtanNfc2hhcmVkX18iLG89ZS5leHBvcnRzPXJbbl18fHMobix7fSk7KG8udmVyc2lvbnN8fChvLnZlcnNpb25zPVtdKSkucHVzaCh7dmVyc2lvbjoiMy4zOS4wIixtb2RlOmE/InB1cmUiOiJnbG9iYWwiLGNvcHlyaWdodDoiwqkgMjAxNC0yMDI0IERlbmlzIFB1c2hrYXJldiAoemxvaXJvY2sucnUpIixsaWNlbnNlOiJodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9ibG9iL3YzLjM5LjAvTElDRU5TRSIsc291cmNlOiJodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcyJ9KX0sNTc0NTooZSx0LGkpPT57dmFyIGE9aSg3NjI5KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYVtlXXx8KGFbZV09dHx8e30pfX0sMTU0ODooZSx0LGkpPT57dmFyIGE9aSg0NTc2KSxyPWkoOTAzOSkscz1pKDk1MTkpLG49aSg0MjE1KSxvPWEuc3RydWN0dXJlZENsb25lO2UuZXhwb3J0cz0hIW8mJiFyKChmdW5jdGlvbigpe2lmKCJERU5PIj09PW4mJnM+OTJ8fCJOT0RFIj09PW4mJnM+OTR8fCJCUk9XU0VSIj09PW4mJnM+OTcpcmV0dXJuITE7dmFyIGU9bmV3IEFycmF5QnVmZmVyKDgpLHQ9byhlLHt0cmFuc2ZlcjpbZV19KTtyZXR1cm4gMCE9PWUuYnl0ZUxlbmd0aHx8OCE9PXQuYnl0ZUxlbmd0aH0pKX0sNDQ5NTooZSx0LGkpPT57dmFyIGE9aSg5NTE5KSxyPWkoOTAzOSkscz1pKDQ1NzYpLlN0cmluZztlLmV4cG9ydHM9ISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzJiYhcigoZnVuY3Rpb24oKXt2YXIgZT1TeW1ib2woInN5bWJvbCBkZXRlY3Rpb24iKTtyZXR1cm4hcyhlKXx8IShPYmplY3QoZSlpbnN0YW5jZW9mIFN5bWJvbCl8fCFTeW1ib2wuc2hhbSYmYSYmYTw0MX0pKX0sNTYxMDooZSx0LGkpPT57dmFyIGE9aSgxMjkxKSxyPU1hdGgubWF4LHM9TWF0aC5taW47ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIGk9YShlKTtyZXR1cm4gaTwwP3IoaSt0LDApOnMoaSx0KX19LDU4NTQ6KGUsdCxpKT0+e3ZhciBhPWkoMjc3Nykscj1UeXBlRXJyb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PWEoZSwibnVtYmVyIik7aWYoIm51bWJlciI9PXR5cGVvZiB0KXRocm93IG5ldyByKCJDYW4ndCBjb252ZXJ0IG51bWJlciB0byBiaWdpbnQiKTtyZXR1cm4gQmlnSW50KHQpfX0sNzY5NjooZSx0LGkpPT57dmFyIGE9aSgxMjkxKSxyPWkoODAxNCkscz1SYW5nZUVycm9yO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXJldHVybiAwO3ZhciB0PWEoZSksaT1yKHQpO2lmKHQhPT1pKXRocm93IG5ldyBzKCJXcm9uZyBsZW5ndGggb3IgaW5kZXgiKTtyZXR1cm4gaX19LDUzOTc6KGUsdCxpKT0+e3ZhciBhPWkoNzA1NSkscj1pKDc3NTApO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gYShyKGUpKX19LDEyOTE6KGUsdCxpKT0+e3ZhciBhPWkoNzQxKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9K2U7cmV0dXJuIHQhPXR8fDA9PT10PzA6YSh0KX19LDgwMTQ6KGUsdCxpKT0+e3ZhciBhPWkoMTI5MSkscj1NYXRoLm1pbjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9YShlKTtyZXR1cm4gdD4wP3IodCw5MDA3MTk5MjU0NzQwOTkxKTowfX0sODk4MTooZSx0LGkpPT57dmFyIGE9aSg3NzUwKSxyPU9iamVjdDtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHIoYShlKSl9fSwyNzc3OihlLHQsaSk9Pnt2YXIgYT1pKDk1NjUpLHI9aSgzNCkscz1pKDc1Nyksbj1pKDU5NjYpLG89aSg0MjcwKSxnPWkoODIyNyksYz1UeXBlRXJyb3IsbD1nKCJ0b1ByaW1pdGl2ZSIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKCFyKGUpfHxzKGUpKXJldHVybiBlO3ZhciBpLGc9bihlLGwpO2lmKGcpe3ZvaWQgMD09PXQmJih0PSJkZWZhdWx0Iik7aT1hKGcsZSx0KTtpZighcihpKXx8cyhpKSlyZXR1cm4gaTt0aHJvdyBuZXcgYygiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlIil9dm9pZCAwPT09dCYmKHQ9Im51bWJlciIpO3JldHVybiBvKGUsdCl9fSw2OTY5OihlLHQsaSk9Pnt2YXIgYT1pKDI3NzcpLHI9aSg3NTcpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1hKGUsInN0cmluZyIpO3JldHVybiByKHQpP3Q6dCsiIn19LDIxNDA6KGUsdCxpKT0+e3ZhciBhPXt9O2FbaSg4MjI3KSgidG9TdHJpbmdUYWciKV09InoiO2UuZXhwb3J0cz0iW29iamVjdCB6XSI9PT1TdHJpbmcoYSl9LDY1NTooZSx0LGkpPT57dmFyIGE9aSg2OTU1KSxyPVN0cmluZztlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoIlN5bWJvbCI9PT1hKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nIik7cmV0dXJuIHIoZSl9fSw2ODIzOmU9Pnt2YXIgdD1TdHJpbmc7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4gdChlKX1jYXRjaChlKXtyZXR1cm4iT2JqZWN0In19fSwzMzkyOihlLHQsaSk9Pnt2YXIgYT1pKDk1MDQpLHI9MCxzPU1hdGgucmFuZG9tKCksbj1hKDEuLnRvU3RyaW5nKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIlN5bWJvbCgiKyh2b2lkIDA9PT1lPyIiOmUpKyIpXyIrbigrK3IrcywzNil9fSw3MDQwOihlLHQsaSk9Pnt2YXIgYT1pKDQ0OTUpO2UuZXhwb3J0cz1hJiYhU3ltYm9sLnNoYW0mJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yfSw4Njg2OihlLHQsaSk9Pnt2YXIgYT1pKDM3MjQpLHI9aSg5MDM5KTtlLmV4cG9ydHM9YSYmcigoZnVuY3Rpb24oKXtyZXR1cm4gNDIhPT1PYmplY3QuZGVmaW5lUHJvcGVydHkoKGZ1bmN0aW9uKCl7fSksInByb3RvdHlwZSIse3ZhbHVlOjQyLHdyaXRhYmxlOiExfSkucHJvdG90eXBlfSkpfSwyODEyOmU9Pnt2YXIgdD1UeXBlRXJyb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsaSl7aWYoZTxpKXRocm93IG5ldyB0KCJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpO3JldHVybiBlfX0sODYyMjooZSx0LGkpPT57dmFyIGE9aSg0NTc2KSxyPWkoNDkwMSkscz1hLldlYWtNYXA7ZS5leHBvcnRzPXIocykmJi9uYXRpdmUgY29kZS8udGVzdChTdHJpbmcocykpfSw4MjI3OihlLHQsaSk9Pnt2YXIgYT1pKDQ1NzYpLHI9aSg1NzQ1KSxzPWkoOTI5Nyksbj1pKDMzOTIpLG89aSg0NDk1KSxnPWkoNzA0MCksYz1hLlN5bWJvbCxsPXIoIndrcyIpLGg9Zz9jLmZvcnx8YzpjJiZjLndpdGhvdXRTZXR0ZXJ8fG47ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3MobCxlKXx8KGxbZV09byYmcyhjLGUpP2NbZV06aCgiU3ltYm9sLiIrZSkpO3JldHVybiBsW2VdfX0sNjU3MzooZSx0LGkpPT57dmFyIGE9aSgzNzI0KSxyPWkoMjEwNikscz1pKDMyMzgpLG49QXJyYXlCdWZmZXIucHJvdG90eXBlO2EmJiEoImRldGFjaGVkImluIG4pJiZyKG4sImRldGFjaGVkIix7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbiBkZXRhY2hlZCgpe3JldHVybiBzKHRoaXMpfX0pfSw3OTM2OihlLHQsaSk9Pnt2YXIgYT1pKDY1MTgpLHI9aSg1NjM2KTtyJiZhKHt0YXJnZXQ6IkFycmF5QnVmZmVyIixwcm90bzohMH0se3RyYW5zZmVyVG9GaXhlZExlbmd0aDpmdW5jdGlvbiB0cmFuc2ZlclRvRml4ZWRMZW5ndGgoKXtyZXR1cm4gcih0aGlzLGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzBdOnZvaWQgMCwhMSl9fSl9LDgxMDA6KGUsdCxpKT0+e3ZhciBhPWkoNjUxOCkscj1pKDU2MzYpO3ImJmEoe3RhcmdldDoiQXJyYXlCdWZmZXIiLHByb3RvOiEwfSx7dHJhbnNmZXI6ZnVuY3Rpb24gdHJhbnNmZXIoKXtyZXR1cm4gcih0aGlzLGFyZ3VtZW50cy5sZW5ndGg/YXJndW1lbnRzWzBdOnZvaWQgMCwhMCl9fSl9LDQxMTQ6KGUsdCxpKT0+e3ZhciBhPWkoNjUxOCkscj1pKDg5ODEpLHM9aSg2MTk4KSxuPWkoNDUyNyksbz1pKDY4MzcpO2Eoe3RhcmdldDoiQXJyYXkiLHByb3RvOiEwLGFyaXR5OjEsZm9yY2VkOmkoOTAzOSkoKGZ1bmN0aW9uKCl7cmV0dXJuIDQyOTQ5NjcyOTchPT1bXS5wdXNoLmNhbGwoe2xlbmd0aDo0Mjk0OTY3Mjk2fSwxKX0pKXx8IWZ1bmN0aW9uKCl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShbXSwibGVuZ3RoIix7d3JpdGFibGU6ITF9KS5wdXNoKCl9Y2F0Y2goZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBUeXBlRXJyb3J9fSgpfSx7cHVzaDpmdW5jdGlvbiBwdXNoKGUpe3ZhciB0PXIodGhpcyksaT1zKHQpLGE9YXJndW1lbnRzLmxlbmd0aDtvKGkrYSk7Zm9yKHZhciBnPTA7ZzxhO2crKyl7dFtpXT1hcmd1bWVudHNbZ107aSsrfW4odCxpKTtyZXR1cm4gaX19KX0sODExMTooZSx0LGkpPT57dmFyIGE9aSg2NTE4KSxyPWkoNDU3Nikscz1pKDY3OSksbj1pKDg1NTEpLG89aSg0OTAxKSxnPWkoMjc4NyksYz1pKDIxMDYpLGw9aSg0NjU5KSxoPWkoOTAzOSksQz1pKDkyOTcpLFE9aSg4MjI3KSxFPWkoNzY1NykuSXRlcmF0b3JQcm90b3R5cGUsdT1pKDM3MjQpLGQ9aSg2Mzk1KSxmPSJjb25zdHJ1Y3RvciIscD0iSXRlcmF0b3IiLG09USgidG9TdHJpbmdUYWciKSx5PVR5cGVFcnJvcix3PXJbcF0sYj1kfHwhbyh3KXx8dy5wcm90b3R5cGUhPT1FfHwhaCgoZnVuY3Rpb24oKXt3KHt9KX0pKSxEPWZ1bmN0aW9uIEl0ZXJhdG9yKCl7cyh0aGlzLEUpO2lmKGcodGhpcyk9PT1FKXRocm93IG5ldyB5KCJBYnN0cmFjdCBjbGFzcyBJdGVyYXRvciBub3QgZGlyZWN0bHkgY29uc3RydWN0YWJsZSIpfSxkZWZpbmVJdGVyYXRvclByb3RvdHlwZUFjY2Vzc29yPWZ1bmN0aW9uKGUsdCl7dT9jKEUsZSx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0fSxzZXQ6ZnVuY3Rpb24odCl7bih0aGlzKTtpZih0aGlzPT09RSl0aHJvdyBuZXcgeSgiWW91IGNhbid0IHJlZGVmaW5lIHRoaXMgcHJvcGVydHkiKTtDKHRoaXMsZSk/dGhpc1tlXT10OmwodGhpcyxlLHQpfX0pOkVbZV09dH07QyhFLG0pfHxkZWZpbmVJdGVyYXRvclByb3RvdHlwZUFjY2Vzc29yKG0scCk7IWImJkMoRSxmKSYmRVtmXSE9PU9iamVjdHx8ZGVmaW5lSXRlcmF0b3JQcm90b3R5cGVBY2Nlc3NvcihmLEQpO0QucHJvdG90eXBlPUU7YSh7Z2xvYmFsOiEwLGNvbnN0cnVjdG9yOiEwLGZvcmNlZDpifSx7SXRlcmF0b3I6RH0pfSwxMTQ4OihlLHQsaSk9Pnt2YXIgYT1pKDY1MTgpLHI9aSgyNjUyKSxzPWkoOTMwNiksbj1pKDg1NTEpLG89aSgxNzY3KTthKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7ZXZlcnk6ZnVuY3Rpb24gZXZlcnkoZSl7bih0aGlzKTtzKGUpO3ZhciB0PW8odGhpcyksaT0wO3JldHVybiFyKHQsKGZ1bmN0aW9uKHQsYSl7aWYoIWUodCxpKyspKXJldHVybiBhKCl9KSx7SVNfUkVDT1JEOiEwLElOVEVSUlVQVEVEOiEwfSkuc3RvcHBlZH19KX0sMjQ4OTooZSx0LGkpPT57dmFyIGE9aSg2NTE4KSxyPWkoOTU2NSkscz1pKDkzMDYpLG49aSg4NTUxKSxvPWkoMTc2NyksZz1pKDk0NjIpLGM9aSg2MzE5KSxsPWkoNjM5NSksaD1nKChmdW5jdGlvbigpe2Zvcih2YXIgZSx0LGk9dGhpcy5pdGVyYXRvcixhPXRoaXMucHJlZGljYXRlLHM9dGhpcy5uZXh0Ozspe2U9bihyKHMsaSkpO2lmKHRoaXMuZG9uZT0hIWUuZG9uZSlyZXR1cm47dD1lLnZhbHVlO2lmKGMoaSxhLFt0LHRoaXMuY291bnRlcisrXSwhMCkpcmV0dXJuIHR9fSkpO2Eoe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOmx9LHtmaWx0ZXI6ZnVuY3Rpb24gZmlsdGVyKGUpe24odGhpcyk7cyhlKTtyZXR1cm4gbmV3IGgobyh0aGlzKSx7cHJlZGljYXRlOmV9KX19KX0sMTE2OihlLHQsaSk9Pnt2YXIgYT1pKDY1MTgpLHI9aSgyNjUyKSxzPWkoOTMwNiksbj1pKDg1NTEpLG89aSgxNzY3KTthKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7ZmluZDpmdW5jdGlvbiBmaW5kKGUpe24odGhpcyk7cyhlKTt2YXIgdD1vKHRoaXMpLGk9MDtyZXR1cm4gcih0LChmdW5jdGlvbih0LGEpe2lmKGUodCxpKyspKXJldHVybiBhKHQpfSkse0lTX1JFQ09SRDohMCxJTlRFUlJVUFRFRDohMH0pLnJlc3VsdH19KX0sNzU4ODooZSx0LGkpPT57dmFyIGE9aSg2NTE4KSxyPWkoMjY1Mikscz1pKDkzMDYpLG49aSg4NTUxKSxvPWkoMTc2Nyk7YSh7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se2ZvckVhY2g6ZnVuY3Rpb24gZm9yRWFjaChlKXtuKHRoaXMpO3MoZSk7dmFyIHQ9byh0aGlzKSxpPTA7cih0LChmdW5jdGlvbih0KXtlKHQsaSsrKX0pLHtJU19SRUNPUkQ6ITB9KX19KX0sMTcwMTooZSx0LGkpPT57dmFyIGE9aSg2NTE4KSxyPWkoNzEzKTthKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwLGZvcmNlZDppKDYzOTUpfSx7bWFwOnJ9KX0sODIzNzooZSx0LGkpPT57dmFyIGE9aSg2NTE4KSxyPWkoMjY1Mikscz1pKDkzMDYpLG49aSg4NTUxKSxvPWkoMTc2NyksZz1UeXBlRXJyb3I7YSh7dGFyZ2V0OiJJdGVyYXRvciIscHJvdG86ITAscmVhbDohMH0se3JlZHVjZTpmdW5jdGlvbiByZWR1Y2UoZSl7bih0aGlzKTtzKGUpO3ZhciB0PW8odGhpcyksaT1hcmd1bWVudHMubGVuZ3RoPDIsYT1pP3ZvaWQgMDphcmd1bWVudHNbMV0sYz0wO3IodCwoZnVuY3Rpb24odCl7aWYoaSl7aT0hMTthPXR9ZWxzZSBhPWUoYSx0LGMpO2MrK30pLHtJU19SRUNPUkQ6ITB9KTtpZihpKXRocm93IG5ldyBnKCJSZWR1Y2Ugb2YgZW1wdHkgaXRlcmF0b3Igd2l0aCBubyBpbml0aWFsIHZhbHVlIik7cmV0dXJuIGF9fSl9LDM1Nzk6KGUsdCxpKT0+e3ZhciBhPWkoNjUxOCkscj1pKDI2NTIpLHM9aSg5MzA2KSxuPWkoODU1MSksbz1pKDE3NjcpO2Eoe3RhcmdldDoiSXRlcmF0b3IiLHByb3RvOiEwLHJlYWw6ITB9LHtzb21lOmZ1bmN0aW9uIHNvbWUoZSl7bih0aGlzKTtzKGUpO3ZhciB0PW8odGhpcyksaT0wO3JldHVybiByKHQsKGZ1bmN0aW9uKHQsYSl7aWYoZSh0LGkrKykpcmV0dXJuIGEoKX0pLHtJU19SRUNPUkQ6ITAsSU5URVJSVVBURUQ6ITB9KS5zdG9wcGVkfX0pfSwxODA2OihlLHQsaSk9Pnt2YXIgYT1pKDY1MTgpLHI9aSg4NTUxKSxzPWkoMjY1Miksbj1pKDE3NjcpLG89W10ucHVzaDthKHt0YXJnZXQ6Ikl0ZXJhdG9yIixwcm90bzohMCxyZWFsOiEwfSx7dG9BcnJheTpmdW5jdGlvbiB0b0FycmF5KCl7dmFyIGU9W107cyhuKHIodGhpcykpLG8se3RoYXQ6ZSxJU19SRUNPUkQ6ITB9KTtyZXR1cm4gZX19KX0sMTY4OTooZSx0LGkpPT57dmFyIGE9aSg2NTE4KSxyPWkoNDU3Nikscz1pKDg3NDUpLG49aSg3NjgwKSxvPWkoNjA0MyksZz1pKDkzMDYpLGM9aSgxMTAzKSxsPXIuUHJvbWlzZSxoPSExO2Eoe3RhcmdldDoiUHJvbWlzZSIsc3RhdDohMCxmb3JjZWQ6IWx8fCFsLnRyeXx8YygoZnVuY3Rpb24oKXtsLnRyeSgoZnVuY3Rpb24oZSl7aD04PT09ZX0pLDgpfSkpLmVycm9yfHwhaH0se3RyeTpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjE/bihhcmd1bWVudHMsMSk6W10saT1vLmYodGhpcyksYT1jKChmdW5jdGlvbigpe3JldHVybiBzKGcoZSksdm9pZCAwLHQpfSkpOyhhLmVycm9yP2kucmVqZWN0OmkucmVzb2x2ZSkoYS52YWx1ZSk7cmV0dXJuIGkucHJvbWlzZX19KX0sNDYyODooZSx0LGkpPT57dmFyIGE9aSg2NTE4KSxyPWkoNjA0Myk7YSh7dGFyZ2V0OiJQcm9taXNlIixzdGF0OiEwfSx7d2l0aFJlc29sdmVyczpmdW5jdGlvbiB3aXRoUmVzb2x2ZXJzKCl7dmFyIGU9ci5mKHRoaXMpO3JldHVybntwcm9taXNlOmUucHJvbWlzZSxyZXNvbHZlOmUucmVzb2x2ZSxyZWplY3Q6ZS5yZWplY3R9fX0pfSw5NDc5OihlLHQsaSk9Pnt2YXIgYT1pKDQ1NzYpLHI9aSgzNzI0KSxzPWkoMjEwNiksbj1pKDc5NzkpLG89aSg5MDM5KSxnPWEuUmVnRXhwLGM9Zy5wcm90b3R5cGU7ciYmbygoZnVuY3Rpb24oKXt2YXIgZT0hMDt0cnl7ZygiLiIsImQiKX1jYXRjaCh0KXtlPSExfXZhciB0PXt9LGk9IiIsYT1lPyJkZ2ltc3kiOiJnaW1zeSIsYWRkR2V0dGVyPWZ1bmN0aW9uKGUsYSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsZSx7Z2V0OmZ1bmN0aW9uKCl7aSs9YTtyZXR1cm4hMH19KX0scj17ZG90QWxsOiJzIixnbG9iYWw6ImciLGlnbm9yZUNhc2U6ImkiLG11bHRpbGluZToibSIsc3RpY2t5OiJ5In07ZSYmKHIuaGFzSW5kaWNlcz0iZCIpO2Zvcih2YXIgcyBpbiByKWFkZEdldHRlcihzLHJbc10pO3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGMsImZsYWdzIikuZ2V0LmNhbGwodCkhPT1hfHxpIT09YX0pKSYmcyhjLCJmbGFncyIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6bn0pfSw3NjQyOihlLHQsaSk9Pnt2YXIgYT1pKDY1MTgpLHI9aSgzNDQwKTthKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6IWkoNDkxNikoImRpZmZlcmVuY2UiKX0se2RpZmZlcmVuY2U6cn0pfSw4MDA0OihlLHQsaSk9Pnt2YXIgYT1pKDY1MTgpLHI9aSg5MDM5KSxzPWkoODc1MCk7YSh7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiFpKDQ5MTYpKCJpbnRlcnNlY3Rpb24iKXx8cigoZnVuY3Rpb24oKXtyZXR1cm4iMywyIiE9PVN0cmluZyhBcnJheS5mcm9tKG5ldyBTZXQoWzEsMiwzXSkuaW50ZXJzZWN0aW9uKG5ldyBTZXQoWzMsMl0pKSkpfSkpfSx7aW50ZXJzZWN0aW9uOnN9KX0sMzg1MzooZSx0LGkpPT57dmFyIGE9aSg2NTE4KSxyPWkoNDQ0OSk7YSh7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiFpKDQ5MTYpKCJpc0Rpc2pvaW50RnJvbSIpfSx7aXNEaXNqb2ludEZyb206cn0pfSw1ODc2OihlLHQsaSk9Pnt2YXIgYT1pKDY1MTgpLHI9aSgzODM4KTthKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6IWkoNDkxNikoImlzU3Vic2V0T2YiKX0se2lzU3Vic2V0T2Y6cn0pfSwyNDc1OihlLHQsaSk9Pnt2YXIgYT1pKDY1MTgpLHI9aSg4NTI3KTthKHt0YXJnZXQ6IlNldCIscHJvdG86ITAscmVhbDohMCxmb3JjZWQ6IWkoNDkxNikoImlzU3VwZXJzZXRPZiIpfSx7aXNTdXBlcnNldE9mOnJ9KX0sNTAyNDooZSx0LGkpPT57dmFyIGE9aSg2NTE4KSxyPWkoMzY1MCk7YSh7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiFpKDQ5MTYpKCJzeW1tZXRyaWNEaWZmZXJlbmNlIil9LHtzeW1tZXRyaWNEaWZmZXJlbmNlOnJ9KX0sMTY5ODooZSx0LGkpPT57dmFyIGE9aSg2NTE4KSxyPWkoNDIwNCk7YSh7dGFyZ2V0OiJTZXQiLHByb3RvOiEwLHJlYWw6ITAsZm9yY2VkOiFpKDQ5MTYpKCJ1bmlvbiIpfSx7dW5pb246cn0pfSw3NDY3OihlLHQsaSk9Pnt2YXIgYT1pKDc2MjgpLHI9aSg0NjQ0KSxzPXIuYVR5cGVkQXJyYXksbj1yLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Qsbz1yLmdldFR5cGVkQXJyYXlDb25zdHJ1Y3RvcjtuKCJ0b1JldmVyc2VkIiwoZnVuY3Rpb24gdG9SZXZlcnNlZCgpe3JldHVybiBhKHModGhpcyksbyh0aGlzKSl9KSl9LDQ3MzI6KGUsdCxpKT0+e3ZhciBhPWkoNDY0NCkscj1pKDk1MDQpLHM9aSg5MzA2KSxuPWkoNTM3MCksbz1hLmFUeXBlZEFycmF5LGc9YS5nZXRUeXBlZEFycmF5Q29uc3RydWN0b3IsYz1hLmV4cG9ydFR5cGVkQXJyYXlNZXRob2QsbD1yKGEuVHlwZWRBcnJheVByb3RvdHlwZS5zb3J0KTtjKCJ0b1NvcnRlZCIsKGZ1bmN0aW9uIHRvU29ydGVkKGUpe3ZvaWQgMCE9PWUmJnMoZSk7dmFyIHQ9byh0aGlzKSxpPW4oZyh0KSx0KTtyZXR1cm4gbChpLGUpfSkpfSw5NTc3OihlLHQsaSk9Pnt2YXIgYT1pKDk5MjgpLHI9aSg0NjQ0KSxzPWkoMTEwOCksbj1pKDEyOTEpLG89aSg1ODU0KSxnPXIuYVR5cGVkQXJyYXksYz1yLmdldFR5cGVkQXJyYXlDb25zdHJ1Y3RvcixsPXIuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCxoPSEhZnVuY3Rpb24oKXt0cnl7bmV3IEludDhBcnJheSgxKS53aXRoKDIse3ZhbHVlT2Y6ZnVuY3Rpb24oKXt0aHJvdyA4fX0pfWNhdGNoKGUpe3JldHVybiA4PT09ZX19KCk7bCgid2l0aCIse3dpdGg6ZnVuY3Rpb24oZSx0KXt2YXIgaT1nKHRoaXMpLHI9bihlKSxsPXMoaSk/byh0KTordDtyZXR1cm4gYShpLGMoaSkscixsKX19LndpdGgsIWgpfSw4OTkyOihlLHQsaSk9PntpKDgxMTEpfSwzMjE1OihlLHQsaSk9PntpKDExNDgpfSw0NTIwOihlLHQsaSk9PntpKDI0ODkpfSwyNTc3OihlLHQsaSk9PntpKDExNil9LDM5NDk6KGUsdCxpKT0+e2koNzU4OCl9LDE0NTQ6KGUsdCxpKT0+e2koMTcwMSl9LDg4NzI6KGUsdCxpKT0+e2koODIzNyl9LDc1NTA6KGUsdCxpKT0+e2koMzU3OSl9LDE3OTU6KGUsdCxpKT0+e2koMTgwNil9LDUyNDc6KGUsdCxpKT0+e2koMTY4OSl9LDQ5Nzk6KGUsdCxpKT0+e3ZhciBhPWkoNjUxOCkscj1pKDQ1NzYpLHM9aSg3NzUxKSxuPWkoNjk4MCksbz1pKDQ5MTMpLmYsZz1pKDkyOTcpLGM9aSg2NzkpLGw9aSgzMTY3KSxoPWkoMjYwMyksQz1pKDUwMDIpLFE9aSg4NTc0KSxFPWkoMzcyNCksdT1pKDYzOTUpLGQ9IkRPTUV4Y2VwdGlvbiIsZj1zKCJFcnJvciIpLHA9cyhkKSxtPWZ1bmN0aW9uIERPTUV4Y2VwdGlvbigpe2ModGhpcyx5KTt2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9aChlPDE/dm9pZCAwOmFyZ3VtZW50c1swXSksaT1oKGU8Mj92b2lkIDA6YXJndW1lbnRzWzFdLCJFcnJvciIpLGE9bmV3IHAodCxpKSxyPW5ldyBmKHQpO3IubmFtZT1kO28oYSwic3RhY2siLG4oMSxRKHIuc3RhY2ssMSkpKTtsKGEsdGhpcyxtKTtyZXR1cm4gYX0seT1tLnByb3RvdHlwZT1wLnByb3RvdHlwZSx3PSJzdGFjayJpbiBuZXcgZihkKSxiPSJzdGFjayJpbiBuZXcgcCgxLDIpLEQ9cCYmRSYmT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihyLGQpLFM9ISghRHx8RC53cml0YWJsZSYmRC5jb25maWd1cmFibGUpLGs9dyYmIVMmJiFiO2Eoe2dsb2JhbDohMCxjb25zdHJ1Y3RvcjohMCxmb3JjZWQ6dXx8a30se0RPTUV4Y2VwdGlvbjprP206cH0pO3ZhciBSPXMoZCksTj1SLnByb3RvdHlwZTtpZihOLmNvbnN0cnVjdG9yIT09Uil7dXx8byhOLCJjb25zdHJ1Y3RvciIsbigxLFIpKTtmb3IodmFyIEcgaW4gQylpZihnKEMsRykpe3ZhciBNPUNbR10sVT1NLnM7ZyhSLFUpfHxvKFIsVSxuKDYsTS5jKSl9fX0sMzYxMTooZSx0LGkpPT57dmFyIGE9aSg2NTE4KSxyPWkoNDU3Nikscz1pKDIxMDYpLG49aSgzNzI0KSxvPVR5cGVFcnJvcixnPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSxjPXIuc2VsZiE9PXI7dHJ5e2lmKG4pe3ZhciBsPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iociwic2VsZiIpOyFjJiZsJiZsLmdldCYmbC5lbnVtZXJhYmxlfHxzKHIsInNlbGYiLHtnZXQ6ZnVuY3Rpb24gc2VsZigpe3JldHVybiByfSxzZXQ6ZnVuY3Rpb24gc2VsZihlKXtpZih0aGlzIT09cil0aHJvdyBuZXcgbygiSWxsZWdhbCBpbnZvY2F0aW9uIik7ZyhyLCJzZWxmIix7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMH0pfSxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMH0pfWVsc2UgYSh7Z2xvYmFsOiEwLHNpbXBsZTohMCxmb3JjZWQ6Y30se3NlbGY6cn0pfWNhdGNoKGUpe319LDQ2MDM6KGUsdCxpKT0+e3ZhciBhPWkoNjg0MCkscj1pKDk1MDQpLHM9aSg2NTUpLG49aSgyODEyKSxvPVVSTFNlYXJjaFBhcmFtcyxnPW8ucHJvdG90eXBlLGM9cihnLmFwcGVuZCksbD1yKGcuZGVsZXRlKSxoPXIoZy5mb3JFYWNoKSxDPXIoW10ucHVzaCksUT1uZXcgbygiYT0xJmE9MiZiPTMiKTtRLmRlbGV0ZSgiYSIsMSk7US5kZWxldGUoImIiLHZvaWQgMCk7USsiIiE9ImE9MiImJmEoZywiZGVsZXRlIiwoZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aCxpPXQ8Mj92b2lkIDA6YXJndW1lbnRzWzFdO2lmKHQmJnZvaWQgMD09PWkpcmV0dXJuIGwodGhpcyxlKTt2YXIgYT1bXTtoKHRoaXMsKGZ1bmN0aW9uKGUsdCl7QyhhLHtrZXk6dCx2YWx1ZTplfSl9KSk7bih0LDEpO2Zvcih2YXIgcixvPXMoZSksZz1zKGkpLFE9MCxFPTAsdT0hMSxkPWEubGVuZ3RoO1E8ZDspe3I9YVtRKytdO2lmKHV8fHIua2V5PT09byl7dT0hMDtsKHRoaXMsci5rZXkpfWVsc2UgRSsrfWZvcig7RTxkOykocj1hW0UrK10pLmtleT09PW8mJnIudmFsdWU9PT1nfHxjKHRoaXMsci5rZXksci52YWx1ZSl9KSx7ZW51bWVyYWJsZTohMCx1bnNhZmU6ITB9KX0sNzU2NjooZSx0LGkpPT57dmFyIGE9aSg2ODQwKSxyPWkoOTUwNCkscz1pKDY1NSksbj1pKDI4MTIpLG89VVJMU2VhcmNoUGFyYW1zLGc9by5wcm90b3R5cGUsYz1yKGcuZ2V0QWxsKSxsPXIoZy5oYXMpLGg9bmV3IG8oImE9MSIpOyFoLmhhcygiYSIsMikmJmguaGFzKCJhIix2b2lkIDApfHxhKGcsImhhcyIsKGZ1bmN0aW9uIGhhcyhlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoLGk9dDwyP3ZvaWQgMDphcmd1bWVudHNbMV07aWYodCYmdm9pZCAwPT09aSlyZXR1cm4gbCh0aGlzLGUpO3ZhciBhPWModGhpcyxlKTtuKHQsMSk7Zm9yKHZhciByPXMoaSksbz0wO288YS5sZW5ndGg7KWlmKGFbbysrXT09PXIpcmV0dXJuITA7cmV0dXJuITF9KSx7ZW51bWVyYWJsZTohMCx1bnNhZmU6ITB9KX0sODcyMTooZSx0LGkpPT57dmFyIGE9aSgzNzI0KSxyPWkoOTUwNCkscz1pKDIxMDYpLG49VVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZSxvPXIobi5mb3JFYWNoKTthJiYhKCJzaXplImluIG4pJiZzKG4sInNpemUiLHtnZXQ6ZnVuY3Rpb24gc2l6ZSgpe3ZhciBlPTA7byh0aGlzLChmdW5jdGlvbigpe2UrK30pKTtyZXR1cm4gZX0sY29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITB9KX19LHQ9e307ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhpKXt2YXIgYT10W2ldO2lmKHZvaWQgMCE9PWEpcmV0dXJuIGEuZXhwb3J0czt2YXIgcj10W2ldPXtleHBvcnRzOnt9fTtlW2ldLmNhbGwoci5leHBvcnRzLHIsci5leHBvcnRzLF9fd2VicGFja19yZXF1aXJlX18pO3JldHVybiByLmV4cG9ydHN9X193ZWJwYWNrX3JlcXVpcmVfXy5kPShlLHQpPT57Zm9yKHZhciBpIGluIHQpX193ZWJwYWNrX3JlcXVpcmVfXy5vKHQsaSkmJiFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZSxpKSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsaSx7ZW51bWVyYWJsZTohMCxnZXQ6dFtpXX0pfTtfX3dlYnBhY2tfcmVxdWlyZV9fLm89KGUsdCk9Pk9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpO3ZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gZ2xvYmFsVGhpcy5wZGZqc1dvcmtlciA9IHt9O19fd2VicGFja19yZXF1aXJlX18uZChfX3dlYnBhY2tfZXhwb3J0c19fLHtXb3JrZXJNZXNzYWdlSGFuZGxlcjooKT0+V29ya2VyTWVzc2FnZUhhbmRsZXJ9KTtfX3dlYnBhY2tfcmVxdWlyZV9fKDQxMTQpLF9fd2VicGFja19yZXF1aXJlX18oNjU3MyksX193ZWJwYWNrX3JlcXVpcmVfXyg4MTAwKSxfX3dlYnBhY2tfcmVxdWlyZV9fKDc5MzYpLF9fd2VicGFja19yZXF1aXJlX18oNDYyOCksX193ZWJwYWNrX3JlcXVpcmVfXyg3NjQyKSxfX3dlYnBhY2tfcmVxdWlyZV9fKDgwMDQpLF9fd2VicGFja19yZXF1aXJlX18oMzg1MyksX193ZWJwYWNrX3JlcXVpcmVfXyg1ODc2KSxfX3dlYnBhY2tfcmVxdWlyZV9fKDI0NzUpLF9fd2VicGFja19yZXF1aXJlX18oNTAyNCksX193ZWJwYWNrX3JlcXVpcmVfXygxNjk4KSxfX3dlYnBhY2tfcmVxdWlyZV9fKDc0NjcpLF9fd2VicGFja19yZXF1aXJlX18oNDczMiksX193ZWJwYWNrX3JlcXVpcmVfXyg5NTc3KSxfX3dlYnBhY2tfcmVxdWlyZV9fKDg5OTIpLF9fd2VicGFja19yZXF1aXJlX18oMTQ1NCksX193ZWJwYWNrX3JlcXVpcmVfXyg3NTUwKSxfX3dlYnBhY2tfcmVxdWlyZV9fKDM2MTEpLF9fd2VicGFja19yZXF1aXJlX18oNTI0NyksX193ZWJwYWNrX3JlcXVpcmVfXyg0OTc5KSxfX3dlYnBhY2tfcmVxdWlyZV9fKDQ2MDMpLF9fd2VicGFja19yZXF1aXJlX18oNzU2NiksX193ZWJwYWNrX3JlcXVpcmVfXyg4NzIxKTtjb25zdCBpPSEoIm9iamVjdCIhPXR5cGVvZiBwcm9jZXNzfHxwcm9jZXNzKyIiIT0iW29iamVjdCBwcm9jZXNzXSJ8fHByb2Nlc3MudmVyc2lvbnMubnd8fHByb2Nlc3MudmVyc2lvbnMuZWxlY3Ryb24mJnByb2Nlc3MudHlwZSYmImJyb3dzZXIiIT09cHJvY2Vzcy50eXBlKSxhPVsxLDAsMCwxLDAsMF0scj1bLjAwMSwwLDAsLjAwMSwwLDBdLHM9MS4zNSxuPS4zNSxvPS4yNTkyNTkyNTkyNTkyNTkyNCxnPTEsYz0yLGw9NCxoPTgsQz0xNixRPTY0LEU9MTI4LHU9MjU2LGQ9InBkZmpzX2ludGVybmFsX2VkaXRvcl8iLGY9MyxwPTksbT0xMyx5PTE1LHc9e1BSSU5UOjQsTU9ESUZZX0NPTlRFTlRTOjgsQ09QWToxNixNT0RJRllfQU5OT1RBVElPTlM6MzIsRklMTF9JTlRFUkFDVElWRV9GT1JNUzoyNTYsQ09QWV9GT1JfQUNDRVNTSUJJTElUWTo1MTIsQVNTRU1CTEU6MTAyNCxQUklOVF9ISUdIX1FVQUxJVFk6MjA0OH0sYj0wLEQ9NCxTPTEsaz0yLFI9MyxOPTEsRz0yLE09MyxVPTQseD01LEw9NixIPTcsSj04LHY9OSxZPTEwLEs9MTEsVD0xMixxPTEzLE89MTQsVz0xNSxqPTE2LFg9MTcsVj0yMCxaPSJHcm91cCIsXz0iUiIsej0xLCQ9MixBQT00LGVBPTE2LHRBPTMyLGlBPTEyOCxhQT01MTIsckE9MSxzQT0yLG5BPTQwOTYsb0E9ODE5MixnQT0zMjc2OCxJQT02NTUzNixjQT0xMzEwNzIsbEE9MTA0ODU3NixoQT0yMDk3MTUyLENBPTgzODg2MDgsQkE9MTY3NzcyMTYsUUE9MSxFQT0yLHVBPTMsZEE9NCxmQT01LHBBPXtFOiJNb3VzZSBFbnRlciIsWDoiTW91c2UgRXhpdCIsRDoiTW91c2UgRG93biIsVToiTW91c2UgVXAiLEZvOiJGb2N1cyIsQmw6IkJsdXIiLFBPOiJQYWdlT3BlbiIsUEM6IlBhZ2VDbG9zZSIsUFY6IlBhZ2VWaXNpYmxlIixQSToiUGFnZUludmlzaWJsZSIsSzoiS2V5c3Ryb2tlIixGOiJGb3JtYXQiLFY6IlZhbGlkYXRlIixDOiJDYWxjdWxhdGUifSxtQT17V0M6IldpbGxDbG9zZSIsV1M6IldpbGxTYXZlIixEUzoiRGlkU2F2ZSIsV1A6IldpbGxQcmludCIsRFA6IkRpZFByaW50In0seUE9e086IlBhZ2VPcGVuIixDOiJQYWdlQ2xvc2UifSx3QT0xLGJBPTUsREE9MSxGQT0yLFNBPTMsa0E9NCxSQT01LE5BPTYsR0E9NyxNQT04LFVBPTkseEE9MTAsTEE9MTEsSEE9MTIsSkE9MTMsdkE9MTQsWUE9MTUsS0E9MTYsVEE9MTcscUE9MTgsT0E9MTksUEE9MjAsV0E9MjEsakE9MjIsWEE9MjMsVkE9MjQsWkE9MjUsX0E9MjYsekE9MjcsJEE9MjgsQWU9MjksZWU9MzAsdGU9MzEsaWU9MzIsYWU9MzMscmU9MzQsc2U9MzUsbmU9MzYsb2U9MzcsZ2U9MzgsSWU9MzksY2U9NDAsbGU9NDEsaGU9NDIsQ2U9NDMsQmU9NDQsUWU9NDUsRWU9NDYsdWU9NDcsZGU9NDgsZmU9NDkscGU9NTAsbWU9NTEseWU9NTIsd2U9NTMsYmU9NTQsRGU9NTUsRmU9NTYsU2U9NTcsa2U9NTgsUmU9NTksTmU9NjAsR2U9NjEsTWU9NjIsVWU9NjMseGU9NjQsTGU9NjUsSGU9NjYsSmU9NjcsdmU9NjgsWWU9NjksS2U9NzAsVGU9NzEscWU9NzIsT2U9NzMsUGU9NzQsV2U9NzUsamU9NzYsWGU9NzcsVmU9ODAsWmU9ODEsX2U9ODMsemU9ODQsJGU9ODUsQXQ9ODYsZXQ9ODcsdHQ9ODgsaXQ9ODksYXQ9OTAscnQ9OTEsc3Q9OTIsbnQ9OTMsb3Q9MSxndD0yO2xldCBJdD13QTtmdW5jdGlvbiBnZXRWZXJib3NpdHlMZXZlbCgpe3JldHVybiBJdH1mdW5jdGlvbiBpbmZvKGUpe0l0Pj1iQSYmY29uc29sZS5sb2coYEluZm86ICR7ZX1gKX1mdW5jdGlvbiB3YXJuKGUpe0l0Pj13QSYmY29uc29sZS5sb2coYFdhcm5pbmc6ICR7ZX1gKX1mdW5jdGlvbiB1bnJlYWNoYWJsZShlKXt0aHJvdyBuZXcgRXJyb3IoZSl9ZnVuY3Rpb24gYXNzZXJ0KGUsdCl7ZXx8dW5yZWFjaGFibGUodCl9ZnVuY3Rpb24gY3JlYXRlVmFsaWRBYnNvbHV0ZVVybChlLHQ9bnVsbCxpPW51bGwpe2lmKCFlKXJldHVybiBudWxsO3RyeXtpZihpJiYic3RyaW5nIj09dHlwZW9mIGUpe2lmKGkuYWRkRGVmYXVsdFByb3RvY29sJiZlLnN0YXJ0c1dpdGgoInd3dy4iKSl7Y29uc3QgdD1lLm1hdGNoKC9cLi9nKTt0Py5sZW5ndGg+PTImJihlPWBodHRwOi8vJHtlfWApfWlmKGkudHJ5Q29udmVydEVuY29kaW5nKXRyeXtlPXN0cmluZ1RvVVRGOFN0cmluZyhlKX1jYXRjaHt9fWNvbnN0IGE9dD9uZXcgVVJMKGUsdCk6bmV3IFVSTChlKTtpZihmdW5jdGlvbiBfaXNWYWxpZFByb3RvY29sKGUpe3N3aXRjaChlPy5wcm90b2NvbCl7Y2FzZSJodHRwOiI6Y2FzZSJodHRwczoiOmNhc2UiZnRwOiI6Y2FzZSJtYWlsdG86IjpjYXNlInRlbDoiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fShhKSlyZXR1cm4gYX1jYXRjaHt9cmV0dXJuIG51bGx9ZnVuY3Rpb24gc2hhZG93KGUsdCxpLGE9ITEpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse3ZhbHVlOmksZW51bWVyYWJsZTohYSxjb25maWd1cmFibGU6ITAsd3JpdGFibGU6ITF9KTtyZXR1cm4gaX1jb25zdCBjdD1mdW5jdGlvbiBCYXNlRXhjZXB0aW9uQ2xvc3VyZSgpe2Z1bmN0aW9uIEJhc2VFeGNlcHRpb24oZSx0KXt0aGlzLm1lc3NhZ2U9ZTt0aGlzLm5hbWU9dH1CYXNlRXhjZXB0aW9uLnByb3RvdHlwZT1uZXcgRXJyb3I7QmFzZUV4Y2VwdGlvbi5jb25zdHJ1Y3Rvcj1CYXNlRXhjZXB0aW9uO3JldHVybiBCYXNlRXhjZXB0aW9ufSgpO2NsYXNzIFBhc3N3b3JkRXhjZXB0aW9uIGV4dGVuZHMgY3R7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihlLCJQYXNzd29yZEV4Y2VwdGlvbiIpO3RoaXMuY29kZT10fX1jbGFzcyBVbmtub3duRXJyb3JFeGNlcHRpb24gZXh0ZW5kcyBjdHtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsIlVua25vd25FcnJvckV4Y2VwdGlvbiIpO3RoaXMuZGV0YWlscz10fX1jbGFzcyBJbnZhbGlkUERGRXhjZXB0aW9uIGV4dGVuZHMgY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwiSW52YWxpZFBERkV4Y2VwdGlvbiIpfX1jbGFzcyBNaXNzaW5nUERGRXhjZXB0aW9uIGV4dGVuZHMgY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwiTWlzc2luZ1BERkV4Y2VwdGlvbiIpfX1jbGFzcyBVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24gZXh0ZW5kcyBjdHtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsIlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbiIpO3RoaXMuc3RhdHVzPXR9fWNsYXNzIEZvcm1hdEVycm9yIGV4dGVuZHMgY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwiRm9ybWF0RXJyb3IiKX19Y2xhc3MgQWJvcnRFeGNlcHRpb24gZXh0ZW5kcyBjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJBYm9ydEV4Y2VwdGlvbiIpfX1mdW5jdGlvbiBieXRlc1RvU3RyaW5nKGUpeyJvYmplY3QiPT10eXBlb2YgZSYmdm9pZCAwIT09ZT8ubGVuZ3RofHx1bnJlYWNoYWJsZSgiSW52YWxpZCBhcmd1bWVudCBmb3IgYnl0ZXNUb1N0cmluZyIpO2NvbnN0IHQ9ZS5sZW5ndGgsaT04MTkyO2lmKHQ8aSlyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGUpO2NvbnN0IGE9W107Zm9yKGxldCByPTA7cjx0O3IrPWkpe2NvbnN0IHM9TWF0aC5taW4ocitpLHQpLG49ZS5zdWJhcnJheShyLHMpO2EucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsbikpfXJldHVybiBhLmpvaW4oIiIpfWZ1bmN0aW9uIHN0cmluZ1RvQnl0ZXMoZSl7InN0cmluZyIhPXR5cGVvZiBlJiZ1bnJlYWNoYWJsZSgiSW52YWxpZCBhcmd1bWVudCBmb3Igc3RyaW5nVG9CeXRlcyIpO2NvbnN0IHQ9ZS5sZW5ndGgsaT1uZXcgVWludDhBcnJheSh0KTtmb3IobGV0IGE9MDthPHQ7KythKWlbYV09MjU1JmUuY2hhckNvZGVBdChhKTtyZXR1cm4gaX1mdW5jdGlvbiBzdHJpbmczMihlKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShlPj4yNCYyNTUsZT4+MTYmMjU1LGU+PjgmMjU1LDI1NSZlKX1mdW5jdGlvbiBvYmplY3RTaXplKGUpe3JldHVybiBPYmplY3Qua2V5cyhlKS5sZW5ndGh9Y2xhc3MgRmVhdHVyZVRlc3R7c3RhdGljIGdldCBpc0xpdHRsZUVuZGlhbigpe3JldHVybiBzaGFkb3codGhpcywiaXNMaXR0bGVFbmRpYW4iLGZ1bmN0aW9uIGlzTGl0dGxlRW5kaWFuKCl7Y29uc3QgZT1uZXcgVWludDhBcnJheSg0KTtlWzBdPTE7cmV0dXJuIDE9PT1uZXcgVWludDMyQXJyYXkoZS5idWZmZXIsMCwxKVswXX0oKSl9c3RhdGljIGdldCBpc0V2YWxTdXBwb3J0ZWQoKXtyZXR1cm4gc2hhZG93KHRoaXMsImlzRXZhbFN1cHBvcnRlZCIsZnVuY3Rpb24gaXNFdmFsU3VwcG9ydGVkKCl7dHJ5e25ldyBGdW5jdGlvbigiIik7cmV0dXJuITB9Y2F0Y2h7cmV0dXJuITF9fSgpKX1zdGF0aWMgZ2V0IGlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCIsInVuZGVmaW5lZCIhPXR5cGVvZiBPZmZzY3JlZW5DYW52YXMpfXN0YXRpYyBnZXQgaXNJbWFnZURlY29kZXJTdXBwb3J0ZWQoKXtyZXR1cm4gc2hhZG93KHRoaXMsImlzSW1hZ2VEZWNvZGVyU3VwcG9ydGVkIiwidW5kZWZpbmVkIiE9dHlwZW9mIEltYWdlRGVjb2Rlcil9c3RhdGljIGdldCBwbGF0Zm9ybSgpe3JldHVybiJ1bmRlZmluZWQiIT10eXBlb2YgbmF2aWdhdG9yJiYic3RyaW5nIj09dHlwZW9mIG5hdmlnYXRvcj8ucGxhdGZvcm0/c2hhZG93KHRoaXMsInBsYXRmb3JtIix7aXNNYWM6bmF2aWdhdG9yLnBsYXRmb3JtLmluY2x1ZGVzKCJNYWMiKSxpc1dpbmRvd3M6bmF2aWdhdG9yLnBsYXRmb3JtLmluY2x1ZGVzKCJXaW4iKSxpc0ZpcmVmb3g6InN0cmluZyI9PXR5cGVvZiBuYXZpZ2F0b3I/LnVzZXJBZ2VudCYmbmF2aWdhdG9yLnVzZXJBZ2VudC5pbmNsdWRlcygiRmlyZWZveCIpfSk6c2hhZG93KHRoaXMsInBsYXRmb3JtIix7aXNNYWM6ITEsaXNXaW5kb3dzOiExLGlzRmlyZWZveDohMX0pfXN0YXRpYyBnZXQgaXNDU1NSb3VuZFN1cHBvcnRlZCgpe3JldHVybiBzaGFkb3codGhpcywiaXNDU1NSb3VuZFN1cHBvcnRlZCIsZ2xvYmFsVGhpcy5DU1M/LnN1cHBvcnRzPy4oIndpZHRoOiByb3VuZCgxLjVweCwgMXB4KSIpKX19Y29uc3QgbHQ9QXJyYXkuZnJvbShBcnJheSgyNTYpLmtleXMoKSwoZT0+ZS50b1N0cmluZygxNikucGFkU3RhcnQoMiwiMCIpKSk7Y2xhc3MgVXRpbHtzdGF0aWMgbWFrZUhleENvbG9yKGUsdCxpKXtyZXR1cm5gIyR7bHRbZV19JHtsdFt0XX0ke2x0W2ldfWB9c3RhdGljIHNjYWxlTWluTWF4KGUsdCl7bGV0IGk7aWYoZVswXSl7aWYoZVswXTwwKXtpPXRbMF07dFswXT10WzJdO3RbMl09aX10WzBdKj1lWzBdO3RbMl0qPWVbMF07aWYoZVszXTwwKXtpPXRbMV07dFsxXT10WzNdO3RbM109aX10WzFdKj1lWzNdO3RbM10qPWVbM119ZWxzZXtpPXRbMF07dFswXT10WzFdO3RbMV09aTtpPXRbMl07dFsyXT10WzNdO3RbM109aTtpZihlWzFdPDApe2k9dFsxXTt0WzFdPXRbM107dFszXT1pfXRbMV0qPWVbMV07dFszXSo9ZVsxXTtpZihlWzJdPDApe2k9dFswXTt0WzBdPXRbMl07dFsyXT1pfXRbMF0qPWVbMl07dFsyXSo9ZVsyXX10WzBdKz1lWzRdO3RbMV0rPWVbNV07dFsyXSs9ZVs0XTt0WzNdKz1lWzVdfXN0YXRpYyB0cmFuc2Zvcm0oZSx0KXtyZXR1cm5bZVswXSp0WzBdK2VbMl0qdFsxXSxlWzFdKnRbMF0rZVszXSp0WzFdLGVbMF0qdFsyXStlWzJdKnRbM10sZVsxXSp0WzJdK2VbM10qdFszXSxlWzBdKnRbNF0rZVsyXSp0WzVdK2VbNF0sZVsxXSp0WzRdK2VbM10qdFs1XStlWzVdXX1zdGF0aWMgYXBwbHlUcmFuc2Zvcm0oZSx0KXtyZXR1cm5bZVswXSp0WzBdK2VbMV0qdFsyXSt0WzRdLGVbMF0qdFsxXStlWzFdKnRbM10rdFs1XV19c3RhdGljIGFwcGx5SW52ZXJzZVRyYW5zZm9ybShlLHQpe2NvbnN0IGk9dFswXSp0WzNdLXRbMV0qdFsyXTtyZXR1cm5bKGVbMF0qdFszXS1lWzFdKnRbMl0rdFsyXSp0WzVdLXRbNF0qdFszXSkvaSwoLWVbMF0qdFsxXStlWzFdKnRbMF0rdFs0XSp0WzFdLXRbNV0qdFswXSkvaV19c3RhdGljIGdldEF4aWFsQWxpZ25lZEJvdW5kaW5nQm94KGUsdCl7Y29uc3QgaT10aGlzLmFwcGx5VHJhbnNmb3JtKGUsdCksYT10aGlzLmFwcGx5VHJhbnNmb3JtKGUuc2xpY2UoMiw0KSx0KSxyPXRoaXMuYXBwbHlUcmFuc2Zvcm0oW2VbMF0sZVszXV0sdCkscz10aGlzLmFwcGx5VHJhbnNmb3JtKFtlWzJdLGVbMV1dLHQpO3JldHVybltNYXRoLm1pbihpWzBdLGFbMF0sclswXSxzWzBdKSxNYXRoLm1pbihpWzFdLGFbMV0sclsxXSxzWzFdKSxNYXRoLm1heChpWzBdLGFbMF0sclswXSxzWzBdKSxNYXRoLm1heChpWzFdLGFbMV0sclsxXSxzWzFdKV19c3RhdGljIGludmVyc2VUcmFuc2Zvcm0oZSl7Y29uc3QgdD1lWzBdKmVbM10tZVsxXSplWzJdO3JldHVybltlWzNdL3QsLWVbMV0vdCwtZVsyXS90LGVbMF0vdCwoZVsyXSplWzVdLWVbNF0qZVszXSkvdCwoZVs0XSplWzFdLWVbNV0qZVswXSkvdF19c3RhdGljIHNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKGUpe2NvbnN0IHQ9W2VbMF0sZVsyXSxlWzFdLGVbM11dLGk9ZVswXSp0WzBdK2VbMV0qdFsyXSxhPWVbMF0qdFsxXStlWzFdKnRbM10scj1lWzJdKnRbMF0rZVszXSp0WzJdLHM9ZVsyXSp0WzFdK2VbM10qdFszXSxuPShpK3MpLzIsbz1NYXRoLnNxcnQoKGkrcykqKjItNCooaSpzLXIqYSkpLzIsZz1uK298fDEsYz1uLW98fDE7cmV0dXJuW01hdGguc3FydChnKSxNYXRoLnNxcnQoYyldfXN0YXRpYyBub3JtYWxpemVSZWN0KGUpe2NvbnN0IHQ9ZS5zbGljZSgwKTtpZihlWzBdPmVbMl0pe3RbMF09ZVsyXTt0WzJdPWVbMF19aWYoZVsxXT5lWzNdKXt0WzFdPWVbM107dFszXT1lWzFdfXJldHVybiB0fXN0YXRpYyBpbnRlcnNlY3QoZSx0KXtjb25zdCBpPU1hdGgubWF4KE1hdGgubWluKGVbMF0sZVsyXSksTWF0aC5taW4odFswXSx0WzJdKSksYT1NYXRoLm1pbihNYXRoLm1heChlWzBdLGVbMl0pLE1hdGgubWF4KHRbMF0sdFsyXSkpO2lmKGk+YSlyZXR1cm4gbnVsbDtjb25zdCByPU1hdGgubWF4KE1hdGgubWluKGVbMV0sZVszXSksTWF0aC5taW4odFsxXSx0WzNdKSkscz1NYXRoLm1pbihNYXRoLm1heChlWzFdLGVbM10pLE1hdGgubWF4KHRbMV0sdFszXSkpO3JldHVybiByPnM/bnVsbDpbaSxyLGEsc119c3RhdGljI0EoZSx0LGksYSxyLHMsbixvLGcsYyl7aWYoZzw9MHx8Zz49MSlyZXR1cm47Y29uc3QgbD0xLWcsaD1nKmcsQz1oKmcsUT1sKihsKihsKmUrMypnKnQpKzMqaCppKStDKmEsRT1sKihsKihsKnIrMypnKnMpKzMqaCpuKStDKm87Y1swXT1NYXRoLm1pbihjWzBdLFEpO2NbMV09TWF0aC5taW4oY1sxXSxFKTtjWzJdPU1hdGgubWF4KGNbMl0sUSk7Y1szXT1NYXRoLm1heChjWzNdLEUpfXN0YXRpYyNlKGUsdCxpLGEscixzLG4sbyxnLGMsbCxoKXtpZihNYXRoLmFicyhnKTwxZS0xMil7TWF0aC5hYnMoYyk+PTFlLTEyJiZ0aGlzLiNBKGUsdCxpLGEscixzLG4sbywtbC9jLGgpO3JldHVybn1jb25zdCBDPWMqKjItNCpsKmc7aWYoQzwwKXJldHVybjtjb25zdCBRPU1hdGguc3FydChDKSxFPTIqZzt0aGlzLiNBKGUsdCxpLGEscixzLG4sbywoLWMrUSkvRSxoKTt0aGlzLiNBKGUsdCxpLGEscixzLG4sbywoLWMtUSkvRSxoKX1zdGF0aWMgYmV6aWVyQm91bmRpbmdCb3goZSx0LGksYSxyLHMsbixvLGcpe2lmKGcpe2dbMF09TWF0aC5taW4oZ1swXSxlLG4pO2dbMV09TWF0aC5taW4oZ1sxXSx0LG8pO2dbMl09TWF0aC5tYXgoZ1syXSxlLG4pO2dbM109TWF0aC5tYXgoZ1szXSx0LG8pfWVsc2UgZz1bTWF0aC5taW4oZSxuKSxNYXRoLm1pbih0LG8pLE1hdGgubWF4KGUsbiksTWF0aC5tYXgodCxvKV07dGhpcy4jZShlLGkscixuLHQsYSxzLG8sMyooMyooaS1yKS1lK24pLDYqKGUtMippK3IpLDMqKGktZSksZyk7dGhpcy4jZShlLGkscixuLHQsYSxzLG8sMyooMyooYS1zKS10K28pLDYqKHQtMiphK3MpLDMqKGEtdCksZyk7cmV0dXJuIGd9fWNvbnN0IGh0PVswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3MjgsNzExLDcxMCw3MjksNzMzLDczMSw3MzAsNzMyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDgyMjYsODIyNCw4MjI1LDgyMzAsODIxMiw4MjExLDQwMiw4MjYwLDgyNDksODI1MCw4NzIyLDgyNDAsODIyMiw4MjIwLDgyMjEsODIxNiw4MjE3LDgyMTgsODQ4Miw2NDI1Nyw2NDI1OCwzMjEsMzM4LDM1MiwzNzYsMzgxLDMwNSwzMjIsMzM5LDM1MywzODIsMCw4MzY0XTtmdW5jdGlvbiBzdHJpbmdUb1BERlN0cmluZyhlKXtpZihlWzBdPj0iw68iKXtsZXQgdDtpZigiw74iPT09ZVswXSYmIsO/Ij09PWVbMV0pe3Q9InV0Zi0xNmJlIjtlLmxlbmd0aCUyPT0xJiYoZT1lLnNsaWNlKDAsLTEpKX1lbHNlIGlmKCLDvyI9PT1lWzBdJiYiw74iPT09ZVsxXSl7dD0idXRmLTE2bGUiO2UubGVuZ3RoJTI9PTEmJihlPWUuc2xpY2UoMCwtMSkpfWVsc2Uiw68iPT09ZVswXSYmIsK7Ij09PWVbMV0mJiLCvyI9PT1lWzJdJiYodD0idXRmLTgiKTtpZih0KXRyeXtjb25zdCBpPW5ldyBUZXh0RGVjb2Rlcih0LHtmYXRhbDohMH0pLGE9c3RyaW5nVG9CeXRlcyhlKSxyPWkuZGVjb2RlKGEpO3JldHVybiByLmluY2x1ZGVzKCIbIik/ci5yZXBsYWNlQWxsKC9ceDFiW15ceDFiXSooPzpceDFifCQpL2csIiIpOnJ9Y2F0Y2goZSl7d2Fybihgc3RyaW5nVG9QREZTdHJpbmc6ICIke2V9Ii5gKX19Y29uc3QgdD1bXTtmb3IobGV0IGk9MCxhPWUubGVuZ3RoO2k8YTtpKyspe2NvbnN0IHI9ZS5jaGFyQ29kZUF0KGkpO2lmKDI3PT09cil7Zm9yKDsrK2k8YSYmMjchPT1lLmNoYXJDb2RlQXQoaSk7KTtjb250aW51ZX1jb25zdCBzPWh0W3JdO3QucHVzaChzP1N0cmluZy5mcm9tQ2hhckNvZGUocyk6ZS5jaGFyQXQoaSkpfXJldHVybiB0LmpvaW4oIiIpfWZ1bmN0aW9uIHN0cmluZ1RvVVRGOFN0cmluZyhlKXtyZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShlKSl9ZnVuY3Rpb24gdXRmOFN0cmluZ1RvU3RyaW5nKGUpe3JldHVybiB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoZSkpfWZ1bmN0aW9uIGlzQXJyYXlFcXVhbChlLHQpe2lmKGUubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBpPTAsYT1lLmxlbmd0aDtpPGE7aSsrKWlmKGVbaV0hPT10W2ldKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGdldE1vZGlmaWNhdGlvbkRhdGUoZT1uZXcgRGF0ZSl7cmV0dXJuW2UuZ2V0VVRDRnVsbFllYXIoKS50b1N0cmluZygpLChlLmdldFVUQ01vbnRoKCkrMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIiksZS5nZXRVVENEYXRlKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCIwIiksZS5nZXRVVENIb3VycygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpLGUuZ2V0VVRDTWludXRlcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpLGUuZ2V0VVRDU2Vjb25kcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwiMCIpXS5qb2luKCIiKX1sZXQgQ3Q9bnVsbCxCdD1udWxsO2Z1bmN0aW9uIHRvSGV4VXRpbChlKXtyZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUudG9IZXg/ZS50b0hleCgpOkFycmF5LmZyb20oZSwoZT0+bHRbZV0pKS5qb2luKCIiKX1fX3dlYnBhY2tfcmVxdWlyZV9fKDMyMTUpO2NvbnN0IFF0PVN5bWJvbCgiQ0lSQ1VMQVJfUkVGIiksRXQ9U3ltYm9sKCJFT0YiKTtsZXQgdXQ9T2JqZWN0LmNyZWF0ZShudWxsKSxkdD1PYmplY3QuY3JlYXRlKG51bGwpLGZ0PU9iamVjdC5jcmVhdGUobnVsbCk7Y2xhc3MgTmFtZXtjb25zdHJ1Y3RvcihlKXt0aGlzLm5hbWU9ZX1zdGF0aWMgZ2V0KGUpe3JldHVybiBkdFtlXXx8PW5ldyBOYW1lKGUpfX1jbGFzcyBDbWR7Y29uc3RydWN0b3IoZSl7dGhpcy5jbWQ9ZX1zdGF0aWMgZ2V0KGUpe3JldHVybiB1dFtlXXx8PW5ldyBDbWQoZSl9fWNvbnN0IHB0PWZ1bmN0aW9uIG5vblNlcmlhbGl6YWJsZUNsb3N1cmUoKXtyZXR1cm4gcHR9O2NsYXNzIERpY3R7Y29uc3RydWN0b3IoZT1udWxsKXt0aGlzLl9tYXA9bmV3IE1hcDt0aGlzLnhyZWY9ZTt0aGlzLm9iaklkPW51bGw7dGhpcy5zdXBwcmVzc0VuY3J5cHRpb249ITE7dGhpcy5fX25vblNlcmlhbGl6YWJsZV9fPXB0fWFzc2lnblhyZWYoZSl7dGhpcy54cmVmPWV9Z2V0IHNpemUoKXtyZXR1cm4gdGhpcy5fbWFwLnNpemV9Z2V0KGUsdCxpKXtsZXQgYT10aGlzLl9tYXAuZ2V0KGUpO2lmKHZvaWQgMD09PWEmJnZvaWQgMCE9PXQpe2E9dGhpcy5fbWFwLmdldCh0KTt2b2lkIDA9PT1hJiZ2b2lkIDAhPT1pJiYoYT10aGlzLl9tYXAuZ2V0KGkpKX1yZXR1cm4gYSBpbnN0YW5jZW9mIFJlZiYmdGhpcy54cmVmP3RoaXMueHJlZi5mZXRjaChhLHRoaXMuc3VwcHJlc3NFbmNyeXB0aW9uKTphfWFzeW5jIGdldEFzeW5jKGUsdCxpKXtsZXQgYT10aGlzLl9tYXAuZ2V0KGUpO2lmKHZvaWQgMD09PWEmJnZvaWQgMCE9PXQpe2E9dGhpcy5fbWFwLmdldCh0KTt2b2lkIDA9PT1hJiZ2b2lkIDAhPT1pJiYoYT10aGlzLl9tYXAuZ2V0KGkpKX1yZXR1cm4gYSBpbnN0YW5jZW9mIFJlZiYmdGhpcy54cmVmP3RoaXMueHJlZi5mZXRjaEFzeW5jKGEsdGhpcy5zdXBwcmVzc0VuY3J5cHRpb24pOmF9Z2V0QXJyYXkoZSx0LGkpe2xldCBhPXRoaXMuX21hcC5nZXQoZSk7aWYodm9pZCAwPT09YSYmdm9pZCAwIT09dCl7YT10aGlzLl9tYXAuZ2V0KHQpO3ZvaWQgMD09PWEmJnZvaWQgMCE9PWkmJihhPXRoaXMuX21hcC5nZXQoaSkpfWEgaW5zdGFuY2VvZiBSZWYmJnRoaXMueHJlZiYmKGE9dGhpcy54cmVmLmZldGNoKGEsdGhpcy5zdXBwcmVzc0VuY3J5cHRpb24pKTtpZihBcnJheS5pc0FycmF5KGEpKXthPWEuc2xpY2UoKTtmb3IobGV0IGU9MCx0PWEubGVuZ3RoO2U8dDtlKyspYVtlXWluc3RhbmNlb2YgUmVmJiZ0aGlzLnhyZWYmJihhW2VdPXRoaXMueHJlZi5mZXRjaChhW2VdLHRoaXMuc3VwcHJlc3NFbmNyeXB0aW9uKSl9cmV0dXJuIGF9Z2V0UmF3KGUpe3JldHVybiB0aGlzLl9tYXAuZ2V0KGUpfWdldEtleXMoKXtyZXR1cm5bLi4udGhpcy5fbWFwLmtleXMoKV19Z2V0UmF3VmFsdWVzKCl7cmV0dXJuWy4uLnRoaXMuX21hcC52YWx1ZXMoKV19c2V0KGUsdCl7dGhpcy5fbWFwLnNldChlLHQpfWhhcyhlKXtyZXR1cm4gdGhpcy5fbWFwLmhhcyhlKX0qW1N5bWJvbC5pdGVyYXRvcl0oKXtmb3IoY29uc3RbZSx0XW9mIHRoaXMuX21hcCl5aWVsZFtlLHQgaW5zdGFuY2VvZiBSZWYmJnRoaXMueHJlZj90aGlzLnhyZWYuZmV0Y2godCx0aGlzLnN1cHByZXNzRW5jcnlwdGlvbik6dF19c3RhdGljIGdldCBlbXB0eSgpe2NvbnN0IGU9bmV3IERpY3QobnVsbCk7ZS5zZXQ9KGUsdCk9Pnt1bnJlYWNoYWJsZSgiU2hvdWxkIG5vdCBjYWxsIGBzZXRgIG9uIHRoZSBlbXB0eSBkaWN0aW9uYXJ5LiIpfTtyZXR1cm4gc2hhZG93KHRoaXMsImVtcHR5IixlKX1zdGF0aWMgbWVyZ2Uoe3hyZWY6ZSxkaWN0QXJyYXk6dCxtZXJnZVN1YkRpY3RzOmk9ITF9KXtjb25zdCBhPW5ldyBEaWN0KGUpLHI9bmV3IE1hcDtmb3IoY29uc3QgZSBvZiB0KWlmKGUgaW5zdGFuY2VvZiBEaWN0KWZvcihjb25zdFt0LGFdb2YgZS5fbWFwKXtsZXQgZT1yLmdldCh0KTtpZih2b2lkIDA9PT1lKXtlPVtdO3Iuc2V0KHQsZSl9ZWxzZSBpZighKGkmJmEgaW5zdGFuY2VvZiBEaWN0KSljb250aW51ZTtlLnB1c2goYSl9Zm9yKGNvbnN0W3QsaV1vZiByKXtpZigxPT09aS5sZW5ndGh8fCEoaVswXWluc3RhbmNlb2YgRGljdCkpe2EuX21hcC5zZXQodCxpWzBdKTtjb250aW51ZX1jb25zdCByPW5ldyBEaWN0KGUpO2Zvcihjb25zdCBlIG9mIGkpZm9yKGNvbnN0W3QsaV1vZiBlLl9tYXApci5fbWFwLmhhcyh0KXx8ci5fbWFwLnNldCh0LGkpO3Iuc2l6ZT4wJiZhLl9tYXAuc2V0KHQscil9ci5jbGVhcigpO3JldHVybiBhLnNpemU+MD9hOkRpY3QuZW1wdHl9Y2xvbmUoKXtjb25zdCBlPW5ldyBEaWN0KHRoaXMueHJlZik7Zm9yKGNvbnN0IHQgb2YgdGhpcy5nZXRLZXlzKCkpZS5zZXQodCx0aGlzLmdldFJhdyh0KSk7cmV0dXJuIGV9ZGVsZXRlKGUpe2RlbGV0ZSB0aGlzLl9tYXBbZV19fWNsYXNzIFJlZntjb25zdHJ1Y3RvcihlLHQpe3RoaXMubnVtPWU7dGhpcy5nZW49dH10b1N0cmluZygpe3JldHVybiAwPT09dGhpcy5nZW4/YCR7dGhpcy5udW19UmA6YCR7dGhpcy5udW19UiR7dGhpcy5nZW59YH1zdGF0aWMgZnJvbVN0cmluZyhlKXtjb25zdCB0PWZ0W2VdO2lmKHQpcmV0dXJuIHQ7Y29uc3QgaT0vXihcZCspUihcZCopJC8uZXhlYyhlKTtyZXR1cm4gaSYmIjAiIT09aVsxXT9mdFtlXT1uZXcgUmVmKHBhcnNlSW50KGlbMV0pLGlbMl0/cGFyc2VJbnQoaVsyXSk6MCk6bnVsbH1zdGF0aWMgZ2V0KGUsdCl7Y29uc3QgaT0wPT09dD9gJHtlfVJgOmAke2V9UiR7dH1gO3JldHVybiBmdFtpXXx8PW5ldyBSZWYoZSx0KX19Y2xhc3MgUmVmU2V0e2NvbnN0cnVjdG9yKGU9bnVsbCl7dGhpcy5fc2V0PW5ldyBTZXQoZT8uX3NldCl9aGFzKGUpe3JldHVybiB0aGlzLl9zZXQuaGFzKGUudG9TdHJpbmcoKSl9cHV0KGUpe3RoaXMuX3NldC5hZGQoZS50b1N0cmluZygpKX1yZW1vdmUoZSl7dGhpcy5fc2V0LmRlbGV0ZShlLnRvU3RyaW5nKCkpfVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIHRoaXMuX3NldC52YWx1ZXMoKX1jbGVhcigpe3RoaXMuX3NldC5jbGVhcigpfX1jbGFzcyBSZWZTZXRDYWNoZXtjb25zdHJ1Y3Rvcigpe3RoaXMuX21hcD1uZXcgTWFwfWdldCBzaXplKCl7cmV0dXJuIHRoaXMuX21hcC5zaXplfWdldChlKXtyZXR1cm4gdGhpcy5fbWFwLmdldChlLnRvU3RyaW5nKCkpfWhhcyhlKXtyZXR1cm4gdGhpcy5fbWFwLmhhcyhlLnRvU3RyaW5nKCkpfXB1dChlLHQpe3RoaXMuX21hcC5zZXQoZS50b1N0cmluZygpLHQpfXB1dEFsaWFzKGUsdCl7dGhpcy5fbWFwLnNldChlLnRvU3RyaW5nKCksdGhpcy5nZXQodCkpfVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIHRoaXMuX21hcC52YWx1ZXMoKX1jbGVhcigpe3RoaXMuX21hcC5jbGVhcigpfSp2YWx1ZXMoKXt5aWVsZCp0aGlzLl9tYXAudmFsdWVzKCl9Kml0ZW1zKCl7Zm9yKGNvbnN0W2UsdF1vZiB0aGlzLl9tYXApeWllbGRbUmVmLmZyb21TdHJpbmcoZSksdF19fWZ1bmN0aW9uIGlzTmFtZShlLHQpe3JldHVybiBlIGluc3RhbmNlb2YgTmFtZSYmKHZvaWQgMD09PXR8fGUubmFtZT09PXQpfWZ1bmN0aW9uIGlzQ21kKGUsdCl7cmV0dXJuIGUgaW5zdGFuY2VvZiBDbWQmJih2b2lkIDA9PT10fHxlLmNtZD09PXQpfWZ1bmN0aW9uIGlzRGljdChlLHQpe3JldHVybiBlIGluc3RhbmNlb2YgRGljdCYmKHZvaWQgMD09PXR8fGlzTmFtZShlLmdldCgiVHlwZSIpLHQpKX1mdW5jdGlvbiBpc1JlZnNFcXVhbChlLHQpe3JldHVybiBlLm51bT09PXQubnVtJiZlLmdlbj09PXQuZ2VufWNsYXNzIEJhc2VTdHJlYW17Z2V0IGxlbmd0aCgpe3VucmVhY2hhYmxlKCJBYnN0cmFjdCBnZXR0ZXIgYGxlbmd0aGAgYWNjZXNzZWQiKX1nZXQgaXNFbXB0eSgpe3VucmVhY2hhYmxlKCJBYnN0cmFjdCBnZXR0ZXIgYGlzRW1wdHlgIGFjY2Vzc2VkIil9Z2V0IGlzRGF0YUxvYWRlZCgpe3JldHVybiBzaGFkb3codGhpcywiaXNEYXRhTG9hZGVkIiwhMCl9Z2V0Qnl0ZSgpe3VucmVhY2hhYmxlKCJBYnN0cmFjdCBtZXRob2QgYGdldEJ5dGVgIGNhbGxlZCIpfWdldEJ5dGVzKGUpe3VucmVhY2hhYmxlKCJBYnN0cmFjdCBtZXRob2QgYGdldEJ5dGVzYCBjYWxsZWQiKX1hc3luYyBnZXRJbWFnZURhdGEoZSx0KXtyZXR1cm4gdGhpcy5nZXRCeXRlcyhlLHQpfWFzeW5jIGFzeW5jR2V0Qnl0ZXMoKXt1bnJlYWNoYWJsZSgiQWJzdHJhY3QgbWV0aG9kIGBhc3luY0dldEJ5dGVzYCBjYWxsZWQiKX1nZXQgaXNBc3luYygpe3JldHVybiExfWdldCBjYW5Bc3luY0RlY29kZUltYWdlRnJvbUJ1ZmZlcigpe3JldHVybiExfWFzeW5jIGdldFRyYW5zZmVyYWJsZUltYWdlKCl7cmV0dXJuIG51bGx9cGVla0J5dGUoKXtjb25zdCBlPXRoaXMuZ2V0Qnl0ZSgpOy0xIT09ZSYmdGhpcy5wb3MtLTtyZXR1cm4gZX1wZWVrQnl0ZXMoZSl7Y29uc3QgdD10aGlzLmdldEJ5dGVzKGUpO3RoaXMucG9zLT10Lmxlbmd0aDtyZXR1cm4gdH1nZXRVaW50MTYoKXtjb25zdCBlPXRoaXMuZ2V0Qnl0ZSgpLHQ9dGhpcy5nZXRCeXRlKCk7cmV0dXJuLTE9PT1lfHwtMT09PXQ/LTE6KGU8PDgpK3R9Z2V0SW50MzIoKXtyZXR1cm4odGhpcy5nZXRCeXRlKCk8PDI0KSsodGhpcy5nZXRCeXRlKCk8PDE2KSsodGhpcy5nZXRCeXRlKCk8PDgpK3RoaXMuZ2V0Qnl0ZSgpfWdldEJ5dGVSYW5nZShlLHQpe3VucmVhY2hhYmxlKCJBYnN0cmFjdCBtZXRob2QgYGdldEJ5dGVSYW5nZWAgY2FsbGVkIil9Z2V0U3RyaW5nKGUpe3JldHVybiBieXRlc1RvU3RyaW5nKHRoaXMuZ2V0Qnl0ZXMoZSkpfXNraXAoZSl7dGhpcy5wb3MrPWV8fDF9cmVzZXQoKXt1bnJlYWNoYWJsZSgiQWJzdHJhY3QgbWV0aG9kIGByZXNldGAgY2FsbGVkIil9bW92ZVN0YXJ0KCl7dW5yZWFjaGFibGUoIkFic3RyYWN0IG1ldGhvZCBgbW92ZVN0YXJ0YCBjYWxsZWQiKX1tYWtlU3ViU3RyZWFtKGUsdCxpPW51bGwpe3VucmVhY2hhYmxlKCJBYnN0cmFjdCBtZXRob2QgYG1ha2VTdWJTdHJlYW1gIGNhbGxlZCIpfWdldEJhc2VTdHJlYW1zKCl7cmV0dXJuIG51bGx9fWNvbnN0IG10PS9eWzEtOV1cLlxkJC8seXQ9MioqMzEtMTtmdW5jdGlvbiBnZXRMb29rdXBUYWJsZUZhY3RvcnkoZSl7bGV0IHQ7cmV0dXJuIGZ1bmN0aW9uKCl7aWYoZSl7dD1PYmplY3QuY3JlYXRlKG51bGwpO2UodCk7ZT1udWxsfXJldHVybiB0fX1jbGFzcyBNaXNzaW5nRGF0YUV4Y2VwdGlvbiBleHRlbmRzIGN0e2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoYE1pc3NpbmcgZGF0YSBbJHtlfSwgJHt0fSlgLCJNaXNzaW5nRGF0YUV4Y2VwdGlvbiIpO3RoaXMuYmVnaW49ZTt0aGlzLmVuZD10fX1jbGFzcyBQYXJzZXJFT0ZFeGNlcHRpb24gZXh0ZW5kcyBjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJQYXJzZXJFT0ZFeGNlcHRpb24iKX19Y2xhc3MgWFJlZkVudHJ5RXhjZXB0aW9uIGV4dGVuZHMgY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwiWFJlZkVudHJ5RXhjZXB0aW9uIil9fWNsYXNzIFhSZWZQYXJzZUV4Y2VwdGlvbiBleHRlbmRzIGN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsIlhSZWZQYXJzZUV4Y2VwdGlvbiIpfX1mdW5jdGlvbiBhcnJheUJ1ZmZlcnNUb0J5dGVzKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7aWYoMD09PXQpcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO2lmKDE9PT10KXJldHVybiBuZXcgVWludDhBcnJheShlWzBdKTtsZXQgaT0wO2ZvcihsZXQgYT0wO2E8dDthKyspaSs9ZVthXS5ieXRlTGVuZ3RoO2NvbnN0IGE9bmV3IFVpbnQ4QXJyYXkoaSk7bGV0IHI9MDtmb3IobGV0IGk9MDtpPHQ7aSsrKXtjb25zdCB0PW5ldyBVaW50OEFycmF5KGVbaV0pO2Euc2V0KHQscik7cis9dC5ieXRlTGVuZ3RofXJldHVybiBhfWZ1bmN0aW9uIGdldEluaGVyaXRhYmxlUHJvcGVydHkoe2RpY3Q6ZSxrZXk6dCxnZXRBcnJheTppPSExLHN0b3BXaGVuRm91bmQ6YT0hMH0pe2xldCByO2NvbnN0IHM9bmV3IFJlZlNldDtmb3IoO2UgaW5zdGFuY2VvZiBEaWN0JiYoIWUub2JqSWR8fCFzLmhhcyhlLm9iaklkKSk7KXtlLm9iaklkJiZzLnB1dChlLm9iaklkKTtjb25zdCBuPWk/ZS5nZXRBcnJheSh0KTplLmdldCh0KTtpZih2b2lkIDAhPT1uKXtpZihhKXJldHVybiBuOyhyfHw9W10pLnB1c2gobil9ZT1lLmdldCgiUGFyZW50Iil9cmV0dXJuIHJ9Y29uc3Qgd3Q9WyIiLCJDIiwiQ0MiLCJDQ0MiLCJDRCIsIkQiLCJEQyIsIkRDQyIsIkRDQ0MiLCJDTSIsIiIsIlgiLCJYWCIsIlhYWCIsIlhMIiwiTCIsIkxYIiwiTFhYIiwiTFhYWCIsIlhDIiwiIiwiSSIsIklJIiwiSUlJIiwiSVYiLCJWIiwiVkkiLCJWSUkiLCJWSUlJIiwiSVgiXTtmdW5jdGlvbiB0b1JvbWFuTnVtZXJhbHMoZSx0PSExKXthc3NlcnQoTnVtYmVyLmlzSW50ZWdlcihlKSYmZT4wLCJUaGUgbnVtYmVyIHNob3VsZCBiZSBhIHBvc2l0aXZlIGludGVnZXIuIik7Y29uc3QgaT0iTSIucmVwZWF0KGUvMWUzfDApK3d0W2UlMWUzLzEwMHwwXSt3dFsxMCsoZSUxMDAvMTB8MCldK3d0WzIwK2UlMTBdO3JldHVybiB0P2kudG9Mb3dlckNhc2UoKTppfWZ1bmN0aW9uIGxvZzIoZSl7cmV0dXJuIGU+MD9NYXRoLmNlaWwoTWF0aC5sb2cyKGUpKTowfWZ1bmN0aW9uIHJlYWRJbnQ4KGUsdCl7cmV0dXJuIGVbdF08PDI0Pj4yNH1mdW5jdGlvbiByZWFkVWludDE2KGUsdCl7cmV0dXJuIGVbdF08PDh8ZVt0KzFdfWZ1bmN0aW9uIHJlYWRVaW50MzIoZSx0KXtyZXR1cm4oZVt0XTw8MjR8ZVt0KzFdPDwxNnxlW3QrMl08PDh8ZVt0KzNdKT4+PjB9ZnVuY3Rpb24gaXNXaGl0ZVNwYWNlKGUpe3JldHVybiAzMj09PWV8fDk9PT1lfHwxMz09PWV8fDEwPT09ZX1mdW5jdGlvbiBpc051bWJlckFycmF5KGUsdCl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/KG51bGw9PT10fHxlLmxlbmd0aD09PXQpJiZlLmV2ZXJ5KChlPT4ibnVtYmVyIj09dHlwZW9mIGUpKTpBcnJheUJ1ZmZlci5pc1ZpZXcoZSkmJigwPT09ZS5sZW5ndGh8fCJudW1iZXIiPT10eXBlb2YgZVswXSkmJihudWxsPT09dHx8ZS5sZW5ndGg9PT10KX1mdW5jdGlvbiBsb29rdXBNYXRyaXgoZSx0KXtyZXR1cm4gaXNOdW1iZXJBcnJheShlLDYpP2U6dH1mdW5jdGlvbiBsb29rdXBSZWN0KGUsdCl7cmV0dXJuIGlzTnVtYmVyQXJyYXkoZSw0KT9lOnR9ZnVuY3Rpb24gbG9va3VwTm9ybWFsUmVjdChlLHQpe3JldHVybiBpc051bWJlckFycmF5KGUsNCk/VXRpbC5ub3JtYWxpemVSZWN0KGUpOnR9ZnVuY3Rpb24gcGFyc2VYRkFQYXRoKGUpe2NvbnN0IHQ9LyguKylcWyhcZCspXF0kLztyZXR1cm4gZS5zcGxpdCgiLiIpLm1hcCgoZT0+e2NvbnN0IGk9ZS5tYXRjaCh0KTtyZXR1cm4gaT97bmFtZTppWzFdLHBvczpwYXJzZUludChpWzJdLDEwKX06e25hbWU6ZSxwb3M6MH19KSl9ZnVuY3Rpb24gZXNjYXBlUERGTmFtZShlKXtjb25zdCB0PVtdO2xldCBpPTA7Zm9yKGxldCBhPTAscj1lLmxlbmd0aDthPHI7YSsrKXtjb25zdCByPWUuY2hhckNvZGVBdChhKTtpZihyPDMzfHxyPjEyNnx8MzU9PT1yfHw0MD09PXJ8fDQxPT09cnx8NjA9PT1yfHw2Mj09PXJ8fDkxPT09cnx8OTM9PT1yfHwxMjM9PT1yfHwxMjU9PT1yfHw0Nz09PXJ8fDM3PT09cil7aTxhJiZ0LnB1c2goZS5zdWJzdHJpbmcoaSxhKSk7dC5wdXNoKGAjJHtyLnRvU3RyaW5nKDE2KX1gKTtpPWErMX19aWYoMD09PXQubGVuZ3RoKXJldHVybiBlO2k8ZS5sZW5ndGgmJnQucHVzaChlLnN1YnN0cmluZyhpLGUubGVuZ3RoKSk7cmV0dXJuIHQuam9pbigiIil9ZnVuY3Rpb24gZXNjYXBlU3RyaW5nKGUpe3JldHVybiBlLnJlcGxhY2VBbGwoLyhbKClcXFxuXHJdKS9nLChlPT4iXG4iPT09ZT8iXFxuIjoiXHIiPT09ZT8iXFxyIjpgXFwke2V9YCkpfWZ1bmN0aW9uIF9jb2xsZWN0SlMoZSx0LGksYSl7aWYoIWUpcmV0dXJuO2xldCByPW51bGw7aWYoZSBpbnN0YW5jZW9mIFJlZil7aWYoYS5oYXMoZSkpcmV0dXJuO3I9ZTthLnB1dChyKTtlPXQuZmV0Y2goZSl9aWYoQXJyYXkuaXNBcnJheShlKSlmb3IoY29uc3QgciBvZiBlKV9jb2xsZWN0SlMocix0LGksYSk7ZWxzZSBpZihlIGluc3RhbmNlb2YgRGljdCl7aWYoaXNOYW1lKGUuZ2V0KCJTIiksIkphdmFTY3JpcHQiKSl7Y29uc3QgdD1lLmdldCgiSlMiKTtsZXQgYTt0IGluc3RhbmNlb2YgQmFzZVN0cmVhbT9hPXQuZ2V0U3RyaW5nKCk6InN0cmluZyI9PXR5cGVvZiB0JiYoYT10KTthJiY9c3RyaW5nVG9QREZTdHJpbmcoYSkucmVwbGFjZUFsbCgiXDAiLCIiKTthJiZpLnB1c2goYSl9X2NvbGxlY3RKUyhlLmdldFJhdygiTmV4dCIpLHQsaSxhKX1yJiZhLnJlbW92ZShyKX1mdW5jdGlvbiBjb2xsZWN0QWN0aW9ucyhlLHQsaSl7Y29uc3QgYT1PYmplY3QuY3JlYXRlKG51bGwpLHI9Z2V0SW5oZXJpdGFibGVQcm9wZXJ0eSh7ZGljdDp0LGtleToiQUEiLHN0b3BXaGVuRm91bmQ6ITF9KTtpZihyKWZvcihsZXQgdD1yLmxlbmd0aC0xO3Q+PTA7dC0tKXtjb25zdCBzPXJbdF07aWYocyBpbnN0YW5jZW9mIERpY3QpZm9yKGNvbnN0IHQgb2Ygcy5nZXRLZXlzKCkpe2NvbnN0IHI9aVt0XTtpZighciljb250aW51ZTtjb25zdCBuPVtdO19jb2xsZWN0SlMocy5nZXRSYXcodCksZSxuLG5ldyBSZWZTZXQpO24ubGVuZ3RoPjAmJihhW3JdPW4pfX1pZih0LmhhcygiQSIpKXtjb25zdCBpPVtdO19jb2xsZWN0SlModC5nZXQoIkEiKSxlLGksbmV3IFJlZlNldCk7aS5sZW5ndGg+MCYmKGEuQWN0aW9uPWkpfXJldHVybiBvYmplY3RTaXplKGEpPjA/YTpudWxsfWNvbnN0IGJ0PXs2MDoiJmx0OyIsNjI6IiZndDsiLDM4OiImYW1wOyIsMzQ6IiZxdW90OyIsMzk6IiZhcG9zOyJ9O2Z1bmN0aW9uKmNvZGVQb2ludEl0ZXIoZSl7Zm9yKGxldCB0PTAsaT1lLmxlbmd0aDt0PGk7dCsrKXtjb25zdCBpPWUuY29kZVBvaW50QXQodCk7aT41NTI5NSYmKGk8NTczNDR8fGk+NjU1MzMpJiZ0Kys7eWllbGQgaX19ZnVuY3Rpb24gZW5jb2RlVG9YbWxTdHJpbmcoZSl7Y29uc3QgdD1bXTtsZXQgaT0wO2ZvcihsZXQgYT0wLHI9ZS5sZW5ndGg7YTxyO2ErKyl7Y29uc3Qgcj1lLmNvZGVQb2ludEF0KGEpO2lmKDMyPD1yJiZyPD0xMjYpe2NvbnN0IHM9YnRbcl07aWYocyl7aTxhJiZ0LnB1c2goZS5zdWJzdHJpbmcoaSxhKSk7dC5wdXNoKHMpO2k9YSsxfX1lbHNle2k8YSYmdC5wdXNoKGUuc3Vic3RyaW5nKGksYSkpO3QucHVzaChgJiN4JHtyLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpfTtgKTtyPjU1Mjk1JiYocjw1NzM0NHx8cj42NTUzMykmJmErKztpPWErMX19aWYoMD09PXQubGVuZ3RoKXJldHVybiBlO2k8ZS5sZW5ndGgmJnQucHVzaChlLnN1YnN0cmluZyhpLGUubGVuZ3RoKSk7cmV0dXJuIHQuam9pbigiIil9ZnVuY3Rpb24gdmFsaWRhdGVGb250TmFtZShlLHQ9ITEpe2NvbnN0IGk9L14oInwnKS4qKCJ8JykkLy5leGVjKGUpO2lmKGkmJmlbMV09PT1pWzJdKXtpZihuZXcgUmVnRXhwKGBbXlxcXFxdJHtpWzFdfWApLnRlc3QoZS5zbGljZSgxLC0xKSkpe3QmJndhcm4oYEZvbnRGYW1pbHkgY29udGFpbnMgdW5lc2NhcGVkICR7aVsxXX06ICR7ZX0uYCk7cmV0dXJuITF9fWVsc2UgZm9yKGNvbnN0IGkgb2YgZS5zcGxpdCgvWyBcdF0rLykpaWYoL14oXGR8KC0oXGR8LSkpKS8udGVzdChpKXx8IS9eW1x3LVxcXSskLy50ZXN0KGkpKXt0JiZ3YXJuKGBGb250RmFtaWx5IGNvbnRhaW5zIGludmFsaWQgPGN1c3RvbS1pZGVudD46ICR7ZX0uYCk7cmV0dXJuITF9cmV0dXJuITB9ZnVuY3Rpb24gdmFsaWRhdGVDU1NGb250KGUpe2NvbnN0IHQ9bmV3IFNldChbIjEwMCIsIjIwMCIsIjMwMCIsIjQwMCIsIjUwMCIsIjYwMCIsIjcwMCIsIjgwMCIsIjkwMCIsIjEwMDAiLCJub3JtYWwiLCJib2xkIiwiYm9sZGVyIiwibGlnaHRlciJdKSx7Zm9udEZhbWlseTppLGZvbnRXZWlnaHQ6YSxpdGFsaWNBbmdsZTpyfT1lO2lmKCF2YWxpZGF0ZUZvbnROYW1lKGksITApKXJldHVybiExO2NvbnN0IHM9YT9hLnRvU3RyaW5nKCk6IiI7ZS5mb250V2VpZ2h0PXQuaGFzKHMpP3M6IjQwMCI7Y29uc3Qgbj1wYXJzZUZsb2F0KHIpO2UuaXRhbGljQW5nbGU9aXNOYU4obil8fG48LTkwfHxuPjkwPyIxNCI6ci50b1N0cmluZygpO3JldHVybiEwfWZ1bmN0aW9uIHJlY292ZXJKc1VSTChlKXtjb25zdCB0PW5ldyBSZWdFeHAoIl5cXHMqKCIrWyJhcHAubGF1bmNoVVJMIiwid2luZG93Lm9wZW4iLCJ4ZmEuaG9zdC5nb3RvVVJMIl0uam9pbigifCIpLnJlcGxhY2VBbGwoIi4iLCJcXC4iKSsiKVxcKCg/Oid8XCIpKFteJ1wiXSopKD86J3xcIikoPzosXFxzKihcXHcrKVxcKXxcXCkpIiwiaSIpLmV4ZWMoZSk7cmV0dXJuIHQ/LlsyXT97dXJsOnRbMl0sbmV3V2luZG93OiJhcHAubGF1bmNoVVJMIj09PXRbMV0mJiJ0cnVlIj09PXRbM119Om51bGx9ZnVuY3Rpb24gbnVtYmVyVG9TdHJpbmcoZSl7aWYoTnVtYmVyLmlzSW50ZWdlcihlKSlyZXR1cm4gZS50b1N0cmluZygpO2NvbnN0IHQ9TWF0aC5yb3VuZCgxMDAqZSk7cmV0dXJuIHQlMTAwPT0wPyh0LzEwMCkudG9TdHJpbmcoKTp0JTEwPT0wP2UudG9GaXhlZCgxKTplLnRvRml4ZWQoMil9ZnVuY3Rpb24gZ2V0TmV3QW5ub3RhdGlvbnNNYXAoZSl7aWYoIWUpcmV0dXJuIG51bGw7Y29uc3QgdD1uZXcgTWFwO2Zvcihjb25zdFtpLGFdb2YgZSl7aWYoIWkuc3RhcnRzV2l0aChkKSljb250aW51ZTtsZXQgZT10LmdldChhLnBhZ2VJbmRleCk7aWYoIWUpe2U9W107dC5zZXQoYS5wYWdlSW5kZXgsZSl9ZS5wdXNoKGEpfXJldHVybiB0LnNpemU+MD90Om51bGx9ZnVuY3Rpb24gc3RyaW5nVG9Bc2NpaU9yVVRGMTZCRShlKXtyZXR1cm4gZnVuY3Rpb24gaXNBc2NpaShlKXtyZXR1cm4vXltceDAwLVx4N0ZdKiQvLnRlc3QoZSl9KGUpP2U6c3RyaW5nVG9VVEYxNlN0cmluZyhlLCEwKX1mdW5jdGlvbiBzdHJpbmdUb1VURjE2SGV4U3RyaW5nKGUpe2NvbnN0IHQ9W107Zm9yKGxldCBpPTAsYT1lLmxlbmd0aDtpPGE7aSsrKXtjb25zdCBhPWUuY2hhckNvZGVBdChpKTt0LnB1c2gobHRbYT4+OCYyNTVdLGx0WzI1NSZhXSl9cmV0dXJuIHQuam9pbigiIil9ZnVuY3Rpb24gc3RyaW5nVG9VVEYxNlN0cmluZyhlLHQ9ITEpe2NvbnN0IGk9W107dCYmaS5wdXNoKCLDvsO/Iik7Zm9yKGxldCB0PTAsYT1lLmxlbmd0aDt0PGE7dCsrKXtjb25zdCBhPWUuY2hhckNvZGVBdCh0KTtpLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShhPj44JjI1NSksU3RyaW5nLmZyb21DaGFyQ29kZSgyNTUmYSkpfXJldHVybiBpLmpvaW4oIiIpfWZ1bmN0aW9uIGdldFJvdGF0aW9uTWF0cml4KGUsdCxpKXtzd2l0Y2goZSl7Y2FzZSA5MDpyZXR1cm5bMCwxLC0xLDAsdCwwXTtjYXNlIDE4MDpyZXR1cm5bLTEsMCwwLC0xLHQsaV07Y2FzZSAyNzA6cmV0dXJuWzAsLTEsMSwwLDAsaV07ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgcm90YXRpb24iKX19ZnVuY3Rpb24gZ2V0U2l6ZUluQnl0ZXMoZSl7cmV0dXJuIE1hdGguY2VpbChNYXRoLmNlaWwoTWF0aC5sb2cyKDErZSkpLzgpfWNsYXNzIFN0cmVhbSBleHRlbmRzIEJhc2VTdHJlYW17Y29uc3RydWN0b3IoZSx0LGksYSl7c3VwZXIoKTt0aGlzLmJ5dGVzPWUgaW5zdGFuY2VvZiBVaW50OEFycmF5P2U6bmV3IFVpbnQ4QXJyYXkoZSk7dGhpcy5zdGFydD10fHwwO3RoaXMucG9zPXRoaXMuc3RhcnQ7dGhpcy5lbmQ9dCtpfHx0aGlzLmJ5dGVzLmxlbmd0aDt0aGlzLmRpY3Q9YX1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuZW5kLXRoaXMuc3RhcnR9Z2V0IGlzRW1wdHkoKXtyZXR1cm4gMD09PXRoaXMubGVuZ3RofWdldEJ5dGUoKXtyZXR1cm4gdGhpcy5wb3M+PXRoaXMuZW5kPy0xOnRoaXMuYnl0ZXNbdGhpcy5wb3MrK119Z2V0Qnl0ZXMoZSl7Y29uc3QgdD10aGlzLmJ5dGVzLGk9dGhpcy5wb3MsYT10aGlzLmVuZDtpZighZSlyZXR1cm4gdC5zdWJhcnJheShpLGEpO2xldCByPWkrZTtyPmEmJihyPWEpO3RoaXMucG9zPXI7cmV0dXJuIHQuc3ViYXJyYXkoaSxyKX1nZXRCeXRlUmFuZ2UoZSx0KXtlPDAmJihlPTApO3Q+dGhpcy5lbmQmJih0PXRoaXMuZW5kKTtyZXR1cm4gdGhpcy5ieXRlcy5zdWJhcnJheShlLHQpfXJlc2V0KCl7dGhpcy5wb3M9dGhpcy5zdGFydH1tb3ZlU3RhcnQoKXt0aGlzLnN0YXJ0PXRoaXMucG9zfW1ha2VTdWJTdHJlYW0oZSx0LGk9bnVsbCl7cmV0dXJuIG5ldyBTdHJlYW0odGhpcy5ieXRlcy5idWZmZXIsZSx0LGkpfX1jbGFzcyBTdHJpbmdTdHJlYW0gZXh0ZW5kcyBTdHJlYW17Y29uc3RydWN0b3IoZSl7c3VwZXIoc3RyaW5nVG9CeXRlcyhlKSl9fWNsYXNzIE51bGxTdHJlYW0gZXh0ZW5kcyBTdHJlYW17Y29uc3RydWN0b3IoKXtzdXBlcihuZXcgVWludDhBcnJheSgwKSl9fWNsYXNzIENodW5rZWRTdHJlYW0gZXh0ZW5kcyBTdHJlYW17Y29uc3RydWN0b3IoZSx0LGkpe3N1cGVyKG5ldyBVaW50OEFycmF5KGUpLDAsZSxudWxsKTt0aGlzLmNodW5rU2l6ZT10O3RoaXMuX2xvYWRlZENodW5rcz1uZXcgU2V0O3RoaXMubnVtQ2h1bmtzPU1hdGguY2VpbChlL3QpO3RoaXMubWFuYWdlcj1pO3RoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoPTA7dGhpcy5sYXN0U3VjY2Vzc2Z1bEVuc3VyZUJ5dGVDaHVuaz0tMX1nZXRNaXNzaW5nQ2h1bmtzKCl7Y29uc3QgZT1bXTtmb3IobGV0IHQ9MCxpPXRoaXMubnVtQ2h1bmtzO3Q8aTsrK3QpdGhpcy5fbG9hZGVkQ2h1bmtzLmhhcyh0KXx8ZS5wdXNoKHQpO3JldHVybiBlfWdldCBudW1DaHVua3NMb2FkZWQoKXtyZXR1cm4gdGhpcy5fbG9hZGVkQ2h1bmtzLnNpemV9Z2V0IGlzRGF0YUxvYWRlZCgpe3JldHVybiB0aGlzLm51bUNodW5rc0xvYWRlZD09PXRoaXMubnVtQ2h1bmtzfW9uUmVjZWl2ZURhdGEoZSx0KXtjb25zdCBpPXRoaXMuY2h1bmtTaXplO2lmKGUlaSE9MCl0aHJvdyBuZXcgRXJyb3IoYEJhZCBiZWdpbiBvZmZzZXQ6ICR7ZX1gKTtjb25zdCBhPWUrdC5ieXRlTGVuZ3RoO2lmKGElaSE9MCYmYSE9PXRoaXMuYnl0ZXMubGVuZ3RoKXRocm93IG5ldyBFcnJvcihgQmFkIGVuZCBvZmZzZXQ6ICR7YX1gKTt0aGlzLmJ5dGVzLnNldChuZXcgVWludDhBcnJheSh0KSxlKTtjb25zdCByPU1hdGguZmxvb3IoZS9pKSxzPU1hdGguZmxvb3IoKGEtMSkvaSkrMTtmb3IobGV0IGU9cjtlPHM7KytlKXRoaXMuX2xvYWRlZENodW5rcy5hZGQoZSl9b25SZWNlaXZlUHJvZ3Jlc3NpdmVEYXRhKGUpe2xldCB0PXRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoO2NvbnN0IGk9TWF0aC5mbG9vcih0L3RoaXMuY2h1bmtTaXplKTt0aGlzLmJ5dGVzLnNldChuZXcgVWludDhBcnJheShlKSx0KTt0Kz1lLmJ5dGVMZW5ndGg7dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGg9dDtjb25zdCBhPXQ+PXRoaXMuZW5kP3RoaXMubnVtQ2h1bmtzOk1hdGguZmxvb3IodC90aGlzLmNodW5rU2l6ZSk7Zm9yKGxldCBlPWk7ZTxhOysrZSl0aGlzLl9sb2FkZWRDaHVua3MuYWRkKGUpfWVuc3VyZUJ5dGUoZSl7aWYoZTx0aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aClyZXR1cm47Y29uc3QgdD1NYXRoLmZsb29yKGUvdGhpcy5jaHVua1NpemUpO2lmKCEodD50aGlzLm51bUNodW5rcykmJnQhPT10aGlzLmxhc3RTdWNjZXNzZnVsRW5zdXJlQnl0ZUNodW5rKXtpZighdGhpcy5fbG9hZGVkQ2h1bmtzLmhhcyh0KSl0aHJvdyBuZXcgTWlzc2luZ0RhdGFFeGNlcHRpb24oZSxlKzEpO3RoaXMubGFzdFN1Y2Nlc3NmdWxFbnN1cmVCeXRlQ2h1bms9dH19ZW5zdXJlUmFuZ2UoZSx0KXtpZihlPj10KXJldHVybjtpZih0PD10aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aClyZXR1cm47Y29uc3QgaT1NYXRoLmZsb29yKGUvdGhpcy5jaHVua1NpemUpO2lmKGk+dGhpcy5udW1DaHVua3MpcmV0dXJuO2NvbnN0IGE9TWF0aC5taW4oTWF0aC5mbG9vcigodC0xKS90aGlzLmNodW5rU2l6ZSkrMSx0aGlzLm51bUNodW5rcyk7Zm9yKGxldCByPWk7cjxhOysrcilpZighdGhpcy5fbG9hZGVkQ2h1bmtzLmhhcyhyKSl0aHJvdyBuZXcgTWlzc2luZ0RhdGFFeGNlcHRpb24oZSx0KX1uZXh0RW1wdHlDaHVuayhlKXtjb25zdCB0PXRoaXMubnVtQ2h1bmtzO2ZvcihsZXQgaT0wO2k8dDsrK2kpe2NvbnN0IGE9KGUraSkldDtpZighdGhpcy5fbG9hZGVkQ2h1bmtzLmhhcyhhKSlyZXR1cm4gYX1yZXR1cm4gbnVsbH1oYXNDaHVuayhlKXtyZXR1cm4gdGhpcy5fbG9hZGVkQ2h1bmtzLmhhcyhlKX1nZXRCeXRlKCl7Y29uc3QgZT10aGlzLnBvcztpZihlPj10aGlzLmVuZClyZXR1cm4tMTtlPj10aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aCYmdGhpcy5lbnN1cmVCeXRlKGUpO3JldHVybiB0aGlzLmJ5dGVzW3RoaXMucG9zKytdfWdldEJ5dGVzKGUpe2NvbnN0IHQ9dGhpcy5ieXRlcyxpPXRoaXMucG9zLGE9dGhpcy5lbmQ7aWYoIWUpe2E+dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgmJnRoaXMuZW5zdXJlUmFuZ2UoaSxhKTtyZXR1cm4gdC5zdWJhcnJheShpLGEpfWxldCByPWkrZTtyPmEmJihyPWEpO3I+dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgmJnRoaXMuZW5zdXJlUmFuZ2UoaSxyKTt0aGlzLnBvcz1yO3JldHVybiB0LnN1YmFycmF5KGkscil9Z2V0Qnl0ZVJhbmdlKGUsdCl7ZTwwJiYoZT0wKTt0PnRoaXMuZW5kJiYodD10aGlzLmVuZCk7dD50aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aCYmdGhpcy5lbnN1cmVSYW5nZShlLHQpO3JldHVybiB0aGlzLmJ5dGVzLnN1YmFycmF5KGUsdCl9bWFrZVN1YlN0cmVhbShlLHQsaT1udWxsKXt0P2UrdD50aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aCYmdGhpcy5lbnN1cmVSYW5nZShlLGUrdCk6ZT49dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGgmJnRoaXMuZW5zdXJlQnl0ZShlKTtmdW5jdGlvbiBDaHVua2VkU3RyZWFtU3Vic3RyZWFtKCl7fUNodW5rZWRTdHJlYW1TdWJzdHJlYW0ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodGhpcyk7Q2h1bmtlZFN0cmVhbVN1YnN0cmVhbS5wcm90b3R5cGUuZ2V0TWlzc2luZ0NodW5rcz1mdW5jdGlvbigpe2NvbnN0IGU9dGhpcy5jaHVua1NpemUsdD1NYXRoLmZsb29yKHRoaXMuc3RhcnQvZSksaT1NYXRoLmZsb29yKCh0aGlzLmVuZC0xKS9lKSsxLGE9W107Zm9yKGxldCBlPXQ7ZTxpOysrZSl0aGlzLl9sb2FkZWRDaHVua3MuaGFzKGUpfHxhLnB1c2goZSk7cmV0dXJuIGF9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShDaHVua2VkU3RyZWFtU3Vic3RyZWFtLnByb3RvdHlwZSwiaXNEYXRhTG9hZGVkIix7Z2V0KCl7cmV0dXJuIHRoaXMubnVtQ2h1bmtzTG9hZGVkPT09dGhpcy5udW1DaHVua3N8fDA9PT10aGlzLmdldE1pc3NpbmdDaHVua3MoKS5sZW5ndGh9LGNvbmZpZ3VyYWJsZTohMH0pO2NvbnN0IGE9bmV3IENodW5rZWRTdHJlYW1TdWJzdHJlYW07YS5wb3M9YS5zdGFydD1lO2EuZW5kPWUrdHx8dGhpcy5lbmQ7YS5kaWN0PWk7cmV0dXJuIGF9Z2V0QmFzZVN0cmVhbXMoKXtyZXR1cm5bdGhpc119fWNsYXNzIENodW5rZWRTdHJlYW1NYW5hZ2Vye2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5sZW5ndGg9dC5sZW5ndGg7dGhpcy5jaHVua1NpemU9dC5yYW5nZUNodW5rU2l6ZTt0aGlzLnN0cmVhbT1uZXcgQ2h1bmtlZFN0cmVhbSh0aGlzLmxlbmd0aCx0aGlzLmNodW5rU2l6ZSx0aGlzKTt0aGlzLnBkZk5ldHdvcmtTdHJlYW09ZTt0aGlzLmRpc2FibGVBdXRvRmV0Y2g9dC5kaXNhYmxlQXV0b0ZldGNoO3RoaXMubXNnSGFuZGxlcj10Lm1zZ0hhbmRsZXI7dGhpcy5jdXJyUmVxdWVzdElkPTA7dGhpcy5fY2h1bmtzTmVlZGVkQnlSZXF1ZXN0PW5ldyBNYXA7dGhpcy5fcmVxdWVzdHNCeUNodW5rPW5ldyBNYXA7dGhpcy5fcHJvbWlzZXNCeVJlcXVlc3Q9bmV3IE1hcDt0aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aD0wO3RoaXMuYWJvcnRlZD0hMTt0aGlzLl9sb2FkZWRTdHJlYW1DYXBhYmlsaXR5PVByb21pc2Uud2l0aFJlc29sdmVycygpfXNlbmRSZXF1ZXN0KGUsdCl7Y29uc3QgaT10aGlzLnBkZk5ldHdvcmtTdHJlYW0uZ2V0UmFuZ2VSZWFkZXIoZSx0KTtpLmlzU3RyZWFtaW5nU3VwcG9ydGVkfHwoaS5vblByb2dyZXNzPXRoaXMub25Qcm9ncmVzcy5iaW5kKHRoaXMpKTtsZXQgYT1bXSxyPTA7cmV0dXJuIG5ldyBQcm9taXNlKCgoZSx0KT0+e2NvbnN0IHJlYWRDaHVuaz0oe3ZhbHVlOnMsZG9uZTpufSk9Pnt0cnl7aWYobil7Y29uc3QgdD1hcnJheUJ1ZmZlcnNUb0J5dGVzKGEpO2E9bnVsbDtlKHQpO3JldHVybn1yKz1zLmJ5dGVMZW5ndGg7aS5pc1N0cmVhbWluZ1N1cHBvcnRlZCYmdGhpcy5vblByb2dyZXNzKHtsb2FkZWQ6cn0pO2EucHVzaChzKTtpLnJlYWQoKS50aGVuKHJlYWRDaHVuayx0KX1jYXRjaChlKXt0KGUpfX07aS5yZWFkKCkudGhlbihyZWFkQ2h1bmssdCl9KSkudGhlbigodD0+e3RoaXMuYWJvcnRlZHx8dGhpcy5vblJlY2VpdmVEYXRhKHtjaHVuazp0LGJlZ2luOmV9KX0pKX1yZXF1ZXN0QWxsQ2h1bmtzKGU9ITEpe2lmKCFlKXtjb25zdCBlPXRoaXMuc3RyZWFtLmdldE1pc3NpbmdDaHVua3MoKTt0aGlzLl9yZXF1ZXN0Q2h1bmtzKGUpfXJldHVybiB0aGlzLl9sb2FkZWRTdHJlYW1DYXBhYmlsaXR5LnByb21pc2V9X3JlcXVlc3RDaHVua3MoZSl7Y29uc3QgdD10aGlzLmN1cnJSZXF1ZXN0SWQrKyxpPW5ldyBTZXQ7dGhpcy5fY2h1bmtzTmVlZGVkQnlSZXF1ZXN0LnNldCh0LGkpO2Zvcihjb25zdCB0IG9mIGUpdGhpcy5zdHJlYW0uaGFzQ2h1bmsodCl8fGkuYWRkKHQpO2lmKDA9PT1pLnNpemUpcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO2NvbnN0IGE9UHJvbWlzZS53aXRoUmVzb2x2ZXJzKCk7dGhpcy5fcHJvbWlzZXNCeVJlcXVlc3Quc2V0KHQsYSk7Y29uc3Qgcj1bXTtmb3IoY29uc3QgZSBvZiBpKXtsZXQgaT10aGlzLl9yZXF1ZXN0c0J5Q2h1bmsuZ2V0KGUpO2lmKCFpKXtpPVtdO3RoaXMuX3JlcXVlc3RzQnlDaHVuay5zZXQoZSxpKTtyLnB1c2goZSl9aS5wdXNoKHQpfWlmKHIubGVuZ3RoPjApe2NvbnN0IGU9dGhpcy5ncm91cENodW5rcyhyKTtmb3IoY29uc3QgdCBvZiBlKXtjb25zdCBlPXQuYmVnaW5DaHVuayp0aGlzLmNodW5rU2l6ZSxpPU1hdGgubWluKHQuZW5kQ2h1bmsqdGhpcy5jaHVua1NpemUsdGhpcy5sZW5ndGgpO3RoaXMuc2VuZFJlcXVlc3QoZSxpKS5jYXRjaChhLnJlamVjdCl9fXJldHVybiBhLnByb21pc2UuY2F0Y2goKGU9PntpZighdGhpcy5hYm9ydGVkKXRocm93IGV9KSl9Z2V0U3RyZWFtKCl7cmV0dXJuIHRoaXMuc3RyZWFtfXJlcXVlc3RSYW5nZShlLHQpe3Q9TWF0aC5taW4odCx0aGlzLmxlbmd0aCk7Y29uc3QgaT10aGlzLmdldEJlZ2luQ2h1bmsoZSksYT10aGlzLmdldEVuZENodW5rKHQpLHI9W107Zm9yKGxldCBlPWk7ZTxhOysrZSlyLnB1c2goZSk7cmV0dXJuIHRoaXMuX3JlcXVlc3RDaHVua3Mocil9cmVxdWVzdFJhbmdlcyhlPVtdKXtjb25zdCB0PVtdO2Zvcihjb25zdCBpIG9mIGUpe2NvbnN0IGU9dGhpcy5nZXRCZWdpbkNodW5rKGkuYmVnaW4pLGE9dGhpcy5nZXRFbmRDaHVuayhpLmVuZCk7Zm9yKGxldCBpPWU7aTxhOysraSl0LmluY2x1ZGVzKGkpfHx0LnB1c2goaSl9dC5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiBlLXR9KSk7cmV0dXJuIHRoaXMuX3JlcXVlc3RDaHVua3ModCl9Z3JvdXBDaHVua3MoZSl7Y29uc3QgdD1bXTtsZXQgaT0tMSxhPS0xO2ZvcihsZXQgcj0wLHM9ZS5sZW5ndGg7cjxzOysrcil7Y29uc3Qgcz1lW3JdO2k8MCYmKGk9cyk7aWYoYT49MCYmYSsxIT09cyl7dC5wdXNoKHtiZWdpbkNodW5rOmksZW5kQ2h1bms6YSsxfSk7aT1zfXIrMT09PWUubGVuZ3RoJiZ0LnB1c2goe2JlZ2luQ2h1bms6aSxlbmRDaHVuazpzKzF9KTthPXN9cmV0dXJuIHR9b25Qcm9ncmVzcyhlKXt0aGlzLm1zZ0hhbmRsZXIuc2VuZCgiRG9jUHJvZ3Jlc3MiLHtsb2FkZWQ6dGhpcy5zdHJlYW0ubnVtQ2h1bmtzTG9hZGVkKnRoaXMuY2h1bmtTaXplK2UubG9hZGVkLHRvdGFsOnRoaXMubGVuZ3RofSl9b25SZWNlaXZlRGF0YShlKXtjb25zdCB0PWUuY2h1bmssaT12b2lkIDA9PT1lLmJlZ2luLGE9aT90aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aDplLmJlZ2luLHI9YSt0LmJ5dGVMZW5ndGgscz1NYXRoLmZsb29yKGEvdGhpcy5jaHVua1NpemUpLG49cjx0aGlzLmxlbmd0aD9NYXRoLmZsb29yKHIvdGhpcy5jaHVua1NpemUpOk1hdGguY2VpbChyL3RoaXMuY2h1bmtTaXplKTtpZihpKXt0aGlzLnN0cmVhbS5vblJlY2VpdmVQcm9ncmVzc2l2ZURhdGEodCk7dGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGg9cn1lbHNlIHRoaXMuc3RyZWFtLm9uUmVjZWl2ZURhdGEoYSx0KTt0aGlzLnN0cmVhbS5pc0RhdGFMb2FkZWQmJnRoaXMuX2xvYWRlZFN0cmVhbUNhcGFiaWxpdHkucmVzb2x2ZSh0aGlzLnN0cmVhbSk7Y29uc3Qgbz1bXTtmb3IobGV0IGU9cztlPG47KytlKXtjb25zdCB0PXRoaXMuX3JlcXVlc3RzQnlDaHVuay5nZXQoZSk7aWYodCl7dGhpcy5fcmVxdWVzdHNCeUNodW5rLmRlbGV0ZShlKTtmb3IoY29uc3QgaSBvZiB0KXtjb25zdCB0PXRoaXMuX2NodW5rc05lZWRlZEJ5UmVxdWVzdC5nZXQoaSk7dC5oYXMoZSkmJnQuZGVsZXRlKGUpO3Quc2l6ZT4wfHxvLnB1c2goaSl9fX1pZighdGhpcy5kaXNhYmxlQXV0b0ZldGNoJiYwPT09dGhpcy5fcmVxdWVzdHNCeUNodW5rLnNpemUpe2xldCBlO2lmKDE9PT10aGlzLnN0cmVhbS5udW1DaHVua3NMb2FkZWQpe2NvbnN0IHQ9dGhpcy5zdHJlYW0ubnVtQ2h1bmtzLTE7dGhpcy5zdHJlYW0uaGFzQ2h1bmsodCl8fChlPXQpfWVsc2UgZT10aGlzLnN0cmVhbS5uZXh0RW1wdHlDaHVuayhuKTtOdW1iZXIuaXNJbnRlZ2VyKGUpJiZ0aGlzLl9yZXF1ZXN0Q2h1bmtzKFtlXSl9Zm9yKGNvbnN0IGUgb2Ygbyl7Y29uc3QgdD10aGlzLl9wcm9taXNlc0J5UmVxdWVzdC5nZXQoZSk7dGhpcy5fcHJvbWlzZXNCeVJlcXVlc3QuZGVsZXRlKGUpO3QucmVzb2x2ZSgpfXRoaXMubXNnSGFuZGxlci5zZW5kKCJEb2NQcm9ncmVzcyIse2xvYWRlZDp0aGlzLnN0cmVhbS5udW1DaHVua3NMb2FkZWQqdGhpcy5jaHVua1NpemUsdG90YWw6dGhpcy5sZW5ndGh9KX1vbkVycm9yKGUpe3RoaXMuX2xvYWRlZFN0cmVhbUNhcGFiaWxpdHkucmVqZWN0KGUpfWdldEJlZ2luQ2h1bmsoZSl7cmV0dXJuIE1hdGguZmxvb3IoZS90aGlzLmNodW5rU2l6ZSl9Z2V0RW5kQ2h1bmsoZSl7cmV0dXJuIE1hdGguZmxvb3IoKGUtMSkvdGhpcy5jaHVua1NpemUpKzF9YWJvcnQoZSl7dGhpcy5hYm9ydGVkPSEwO3RoaXMucGRmTmV0d29ya1N0cmVhbT8uY2FuY2VsQWxsUmVxdWVzdHMoZSk7Zm9yKGNvbnN0IHQgb2YgdGhpcy5fcHJvbWlzZXNCeVJlcXVlc3QudmFsdWVzKCkpdC5yZWplY3QoZSl9fV9fd2VicGFja19yZXF1aXJlX18oNDUyMCksX193ZWJwYWNrX3JlcXVpcmVfXyg5NDc5KSxfX3dlYnBhY2tfcmVxdWlyZV9fKDI1NzcpLF9fd2VicGFja19yZXF1aXJlX18oODg3Mik7Y2xhc3MgQ29sb3JTcGFjZXtjb25zdHJ1Y3RvcihlLHQpe3RoaXMubmFtZT1lO3RoaXMubnVtQ29tcHM9dH1nZXRSZ2IoZSx0KXtjb25zdCBpPW5ldyBVaW50OENsYW1wZWRBcnJheSgzKTt0aGlzLmdldFJnYkl0ZW0oZSx0LGksMCk7cmV0dXJuIGl9Z2V0UmdiSXRlbShlLHQsaSxhKXt1bnJlYWNoYWJsZSgiU2hvdWxkIG5vdCBjYWxsIENvbG9yU3BhY2UuZ2V0UmdiSXRlbSIpfWdldFJnYkJ1ZmZlcihlLHQsaSxhLHIscyxuKXt1bnJlYWNoYWJsZSgiU2hvdWxkIG5vdCBjYWxsIENvbG9yU3BhY2UuZ2V0UmdiQnVmZmVyIil9Z2V0T3V0cHV0TGVuZ3RoKGUsdCl7dW5yZWFjaGFibGUoIlNob3VsZCBub3QgY2FsbCBDb2xvclNwYWNlLmdldE91dHB1dExlbmd0aCIpfWlzUGFzc3Rocm91Z2goZSl7cmV0dXJuITF9aXNEZWZhdWx0RGVjb2RlKGUsdCl7cmV0dXJuIENvbG9yU3BhY2UuaXNEZWZhdWx0RGVjb2RlKGUsdGhpcy5udW1Db21wcyl9ZmlsbFJnYihlLHQsaSxhLHIscyxuLG8sZyl7Y29uc3QgYz10Kmk7bGV0IGw9bnVsbDtjb25zdCBoPTE8PG4sQz1pIT09cnx8dCE9PWE7aWYodGhpcy5pc1Bhc3N0aHJvdWdoKG4pKWw9bztlbHNlIGlmKDE9PT10aGlzLm51bUNvbXBzJiZjPmgmJiJEZXZpY2VHcmF5IiE9PXRoaXMubmFtZSYmIkRldmljZVJHQiIhPT10aGlzLm5hbWUpe2NvbnN0IHQ9bjw9OD9uZXcgVWludDhBcnJheShoKTpuZXcgVWludDE2QXJyYXkoaCk7Zm9yKGxldCBlPTA7ZTxoO2UrKyl0W2VdPWU7Y29uc3QgaT1uZXcgVWludDhDbGFtcGVkQXJyYXkoMypoKTt0aGlzLmdldFJnYkJ1ZmZlcih0LDAsaCxpLDAsbiwwKTtpZihDKXtsPW5ldyBVaW50OEFycmF5KDMqYyk7bGV0IGU9MDtmb3IobGV0IHQ9MDt0PGM7Kyt0KXtjb25zdCBhPTMqb1t0XTtsW2UrK109aVthXTtsW2UrK109aVthKzFdO2xbZSsrXT1pW2ErMl19fWVsc2V7bGV0IHQ9MDtmb3IobGV0IGE9MDthPGM7KythKXtjb25zdCByPTMqb1thXTtlW3QrK109aVtyXTtlW3QrK109aVtyKzFdO2VbdCsrXT1pW3IrMl07dCs9Z319fWVsc2UgaWYoQyl7bD1uZXcgVWludDhDbGFtcGVkQXJyYXkoMypjKTt0aGlzLmdldFJnYkJ1ZmZlcihvLDAsYyxsLDAsbiwwKX1lbHNlIHRoaXMuZ2V0UmdiQnVmZmVyKG8sMCxhKnMsZSwwLG4sZyk7aWYobClpZihDKSFmdW5jdGlvbiByZXNpemVSZ2JJbWFnZShlLHQsaSxhLHIscyxuKXtuPTEhPT1uPzA6bjtjb25zdCBvPWkvcixnPWEvcztsZXQgYyxsPTA7Y29uc3QgaD1uZXcgVWludDE2QXJyYXkociksQz0zKmk7Zm9yKGxldCBlPTA7ZTxyO2UrKyloW2VdPTMqTWF0aC5mbG9vcihlKm8pO2ZvcihsZXQgaT0wO2k8cztpKyspe2NvbnN0IGE9TWF0aC5mbG9vcihpKmcpKkM7Zm9yKGxldCBpPTA7aTxyO2krKyl7Yz1hK2hbaV07dFtsKytdPWVbYysrXTt0W2wrK109ZVtjKytdO3RbbCsrXT1lW2MrK107bCs9bn19fShsLGUsdCxpLGEscixnKTtlbHNle2xldCB0PTAsaT0wO2ZvcihsZXQgcj0wLG49YSpzO3I8bjtyKyspe2VbdCsrXT1sW2krK107ZVt0KytdPWxbaSsrXTtlW3QrK109bFtpKytdO3QrPWd9fX1nZXQgdXNlc1plcm9Ub09uZVJhbmdlKCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJ1c2VzWmVyb1RvT25lUmFuZ2UiLCEwKX1zdGF0aWMgX2NhY2hlKGUsdCxpLGEpe2lmKCFpKXRocm93IG5ldyBFcnJvcignQ29sb3JTcGFjZS5fY2FjaGUgLSBleHBlY3RlZCAibG9jYWxDb2xvclNwYWNlQ2FjaGUiIGFyZ3VtZW50LicpO2lmKCFhKXRocm93IG5ldyBFcnJvcignQ29sb3JTcGFjZS5fY2FjaGUgLSBleHBlY3RlZCAicGFyc2VkQ29sb3JTcGFjZSIgYXJndW1lbnQuJyk7bGV0IHIscztpZihlIGluc3RhbmNlb2YgUmVmKXtzPWU7ZT10LmZldGNoKGUpfWUgaW5zdGFuY2VvZiBOYW1lJiYocj1lLm5hbWUpOyhyfHxzKSYmaS5zZXQocixzLGEpfXN0YXRpYyBnZXRDYWNoZWQoZSx0LGkpe2lmKCFpKXRocm93IG5ldyBFcnJvcignQ29sb3JTcGFjZS5nZXRDYWNoZWQgLSBleHBlY3RlZCAibG9jYWxDb2xvclNwYWNlQ2FjaGUiIGFyZ3VtZW50LicpO2lmKGUgaW5zdGFuY2VvZiBSZWYpe2NvbnN0IGE9aS5nZXRCeVJlZihlKTtpZihhKXJldHVybiBhO3RyeXtlPXQuZmV0Y2goZSl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIE1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGV9fWlmKGUgaW5zdGFuY2VvZiBOYW1lKXtjb25zdCB0PWkuZ2V0QnlOYW1lKGUubmFtZSk7aWYodClyZXR1cm4gdH1yZXR1cm4gbnVsbH1zdGF0aWMgYXN5bmMgcGFyc2VBc3luYyh7Y3M6ZSx4cmVmOnQscmVzb3VyY2VzOmk9bnVsbCxwZGZGdW5jdGlvbkZhY3Rvcnk6YSxsb2NhbENvbG9yU3BhY2VDYWNoZTpyfSl7Y29uc3Qgcz10aGlzLl9wYXJzZShlLHQsaSxhKTt0aGlzLl9jYWNoZShlLHQscixzKTtyZXR1cm4gc31zdGF0aWMgcGFyc2Uoe2NzOmUseHJlZjp0LHJlc291cmNlczppPW51bGwscGRmRnVuY3Rpb25GYWN0b3J5OmEsbG9jYWxDb2xvclNwYWNlQ2FjaGU6cn0pe2NvbnN0IHM9dGhpcy5nZXRDYWNoZWQoZSx0LHIpO2lmKHMpcmV0dXJuIHM7Y29uc3Qgbj10aGlzLl9wYXJzZShlLHQsaSxhKTt0aGlzLl9jYWNoZShlLHQscixuKTtyZXR1cm4gbn1zdGF0aWMgX3BhcnNlKGUsdCxpPW51bGwsYSl7aWYoKGU9dC5mZXRjaElmUmVmKGUpKWluc3RhbmNlb2YgTmFtZSlzd2l0Y2goZS5uYW1lKXtjYXNlIkciOmNhc2UiRGV2aWNlR3JheSI6cmV0dXJuIHRoaXMuc2luZ2xldG9ucy5ncmF5O2Nhc2UiUkdCIjpjYXNlIkRldmljZVJHQiI6cmV0dXJuIHRoaXMuc2luZ2xldG9ucy5yZ2I7Y2FzZSJEZXZpY2VSR0JBIjpyZXR1cm4gdGhpcy5zaW5nbGV0b25zLnJnYmE7Y2FzZSJDTVlLIjpjYXNlIkRldmljZUNNWUsiOnJldHVybiB0aGlzLnNpbmdsZXRvbnMuY215aztjYXNlIlBhdHRlcm4iOnJldHVybiBuZXcgUGF0dGVybkNTKG51bGwpO2RlZmF1bHQ6aWYoaSBpbnN0YW5jZW9mIERpY3Qpe2NvbnN0IHI9aS5nZXQoIkNvbG9yU3BhY2UiKTtpZihyIGluc3RhbmNlb2YgRGljdCl7Y29uc3Qgcz1yLmdldChlLm5hbWUpO2lmKHMpe2lmKHMgaW5zdGFuY2VvZiBOYW1lKXJldHVybiB0aGlzLl9wYXJzZShzLHQsaSxhKTtlPXM7YnJlYWt9fX13YXJuKGBVbnJlY29nbml6ZWQgQ29sb3JTcGFjZTogJHtlLm5hbWV9YCk7cmV0dXJuIHRoaXMuc2luZ2xldG9ucy5ncmF5fWlmKEFycmF5LmlzQXJyYXkoZSkpe2NvbnN0IHI9dC5mZXRjaElmUmVmKGVbMF0pLm5hbWU7bGV0IHMsbixvLGcsYyxsO3N3aXRjaChyKXtjYXNlIkciOmNhc2UiRGV2aWNlR3JheSI6cmV0dXJuIHRoaXMuc2luZ2xldG9ucy5ncmF5O2Nhc2UiUkdCIjpjYXNlIkRldmljZVJHQiI6cmV0dXJuIHRoaXMuc2luZ2xldG9ucy5yZ2I7Y2FzZSJDTVlLIjpjYXNlIkRldmljZUNNWUsiOnJldHVybiB0aGlzLnNpbmdsZXRvbnMuY215aztjYXNlIkNhbEdyYXkiOnM9dC5mZXRjaElmUmVmKGVbMV0pO2c9cy5nZXRBcnJheSgiV2hpdGVQb2ludCIpO2M9cy5nZXRBcnJheSgiQmxhY2tQb2ludCIpO2w9cy5nZXQoIkdhbW1hIik7cmV0dXJuIG5ldyBDYWxHcmF5Q1MoZyxjLGwpO2Nhc2UiQ2FsUkdCIjpzPXQuZmV0Y2hJZlJlZihlWzFdKTtnPXMuZ2V0QXJyYXkoIldoaXRlUG9pbnQiKTtjPXMuZ2V0QXJyYXkoIkJsYWNrUG9pbnQiKTtsPXMuZ2V0QXJyYXkoIkdhbW1hIik7Y29uc3QgaD1zLmdldEFycmF5KCJNYXRyaXgiKTtyZXR1cm4gbmV3IENhbFJHQkNTKGcsYyxsLGgpO2Nhc2UiSUNDQmFzZWQiOmNvbnN0IEM9dC5mZXRjaElmUmVmKGVbMV0pLmRpY3Q7bj1DLmdldCgiTiIpO2NvbnN0IFE9Qy5nZXQoIkFsdGVybmF0ZSIpO2lmKFEpe2NvbnN0IGU9dGhpcy5fcGFyc2UoUSx0LGksYSk7aWYoZS5udW1Db21wcz09PW4pcmV0dXJuIGU7d2FybigiSUNDQmFzZWQgY29sb3Igc3BhY2U6IElnbm9yaW5nIGluY29ycmVjdCAvQWx0ZXJuYXRlIGVudHJ5LiIpfWlmKDE9PT1uKXJldHVybiB0aGlzLnNpbmdsZXRvbnMuZ3JheTtpZigzPT09bilyZXR1cm4gdGhpcy5zaW5nbGV0b25zLnJnYjtpZig0PT09bilyZXR1cm4gdGhpcy5zaW5nbGV0b25zLmNteWs7YnJlYWs7Y2FzZSJQYXR0ZXJuIjpvPWVbMV18fG51bGw7byYmKG89dGhpcy5fcGFyc2Uobyx0LGksYSkpO3JldHVybiBuZXcgUGF0dGVybkNTKG8pO2Nhc2UiSSI6Y2FzZSJJbmRleGVkIjpvPXRoaXMuX3BhcnNlKGVbMV0sdCxpLGEpO2NvbnN0IEU9TWF0aC5tYXgoMCxNYXRoLm1pbih0LmZldGNoSWZSZWYoZVsyXSksMjU1KSksdT10LmZldGNoSWZSZWYoZVszXSk7cmV0dXJuIG5ldyBJbmRleGVkQ1MobyxFLHUpO2Nhc2UiU2VwYXJhdGlvbiI6Y2FzZSJEZXZpY2VOIjpjb25zdCBkPXQuZmV0Y2hJZlJlZihlWzFdKTtuPUFycmF5LmlzQXJyYXkoZCk/ZC5sZW5ndGg6MTtvPXRoaXMuX3BhcnNlKGVbMl0sdCxpLGEpO2NvbnN0IGY9YS5jcmVhdGUoZVszXSk7cmV0dXJuIG5ldyBBbHRlcm5hdGVDUyhuLG8sZik7Y2FzZSJMYWIiOnM9dC5mZXRjaElmUmVmKGVbMV0pO2c9cy5nZXRBcnJheSgiV2hpdGVQb2ludCIpO2M9cy5nZXRBcnJheSgiQmxhY2tQb2ludCIpO2NvbnN0IHA9cy5nZXRBcnJheSgiUmFuZ2UiKTtyZXR1cm4gbmV3IExhYkNTKGcsYyxwKTtkZWZhdWx0Ondhcm4oYFVuaW1wbGVtZW50ZWQgQ29sb3JTcGFjZSBvYmplY3Q6ICR7cn1gKTtyZXR1cm4gdGhpcy5zaW5nbGV0b25zLmdyYXl9fXdhcm4oYFVucmVjb2duaXplZCBDb2xvclNwYWNlIG9iamVjdDogJHtlfWApO3JldHVybiB0aGlzLnNpbmdsZXRvbnMuZ3JheX1zdGF0aWMgaXNEZWZhdWx0RGVjb2RlKGUsdCl7aWYoIUFycmF5LmlzQXJyYXkoZSkpcmV0dXJuITA7aWYoMip0IT09ZS5sZW5ndGgpe3dhcm4oIlRoZSBkZWNvZGUgbWFwIGlzIG5vdCB0aGUgY29ycmVjdCBsZW5ndGgiKTtyZXR1cm4hMH1mb3IobGV0IHQ9MCxpPWUubGVuZ3RoO3Q8aTt0Kz0yKWlmKDAhPT1lW3RdfHwxIT09ZVt0KzFdKXJldHVybiExO3JldHVybiEwfXN0YXRpYyBnZXQgc2luZ2xldG9ucygpe3JldHVybiBzaGFkb3codGhpcywic2luZ2xldG9ucyIse2dldCBncmF5KCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJncmF5IixuZXcgRGV2aWNlR3JheUNTKX0sZ2V0IHJnYigpe3JldHVybiBzaGFkb3codGhpcywicmdiIixuZXcgRGV2aWNlUmdiQ1MpfSxnZXQgcmdiYSgpe3JldHVybiBzaGFkb3codGhpcywicmdiYSIsbmV3IERldmljZVJnYmFDUyl9LGdldCBjbXlrKCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJjbXlrIixuZXcgRGV2aWNlQ215a0NTKX19KX19Y2xhc3MgQWx0ZXJuYXRlQ1MgZXh0ZW5kcyBDb2xvclNwYWNle2NvbnN0cnVjdG9yKGUsdCxpKXtzdXBlcigiQWx0ZXJuYXRlIixlKTt0aGlzLmJhc2U9dDt0aGlzLnRpbnRGbj1pO3RoaXMudG1wQnVmPW5ldyBGbG9hdDMyQXJyYXkodC5udW1Db21wcyl9Z2V0UmdiSXRlbShlLHQsaSxhKXtjb25zdCByPXRoaXMudG1wQnVmO3RoaXMudGludEZuKGUsdCxyLDApO3RoaXMuYmFzZS5nZXRSZ2JJdGVtKHIsMCxpLGEpfWdldFJnYkJ1ZmZlcihlLHQsaSxhLHIscyxuKXtjb25zdCBvPXRoaXMudGludEZuLGc9dGhpcy5iYXNlLGM9MS8oKDE8PHMpLTEpLGw9Zy5udW1Db21wcyxoPWcudXNlc1plcm9Ub09uZVJhbmdlLEM9KGcuaXNQYXNzdGhyb3VnaCg4KXx8IWgpJiYwPT09bjtsZXQgUT1DP3I6MDtjb25zdCBFPUM/YTpuZXcgVWludDhDbGFtcGVkQXJyYXkobCppKSx1PXRoaXMubnVtQ29tcHMsZD1uZXcgRmxvYXQzMkFycmF5KHUpLGY9bmV3IEZsb2F0MzJBcnJheShsKTtsZXQgcCxtO2ZvcihwPTA7cDxpO3ArKyl7Zm9yKG09MDttPHU7bSsrKWRbbV09ZVt0KytdKmM7byhkLDAsZiwwKTtpZihoKWZvcihtPTA7bTxsO20rKylFW1ErK109MjU1KmZbbV07ZWxzZXtnLmdldFJnYkl0ZW0oZiwwLEUsUSk7USs9bH19Q3x8Zy5nZXRSZ2JCdWZmZXIoRSwwLGksYSxyLDgsbil9Z2V0T3V0cHV0TGVuZ3RoKGUsdCl7cmV0dXJuIHRoaXMuYmFzZS5nZXRPdXRwdXRMZW5ndGgoZSp0aGlzLmJhc2UubnVtQ29tcHMvdGhpcy5udW1Db21wcyx0KX19Y2xhc3MgUGF0dGVybkNTIGV4dGVuZHMgQ29sb3JTcGFjZXtjb25zdHJ1Y3RvcihlKXtzdXBlcigiUGF0dGVybiIsbnVsbCk7dGhpcy5iYXNlPWV9aXNEZWZhdWx0RGVjb2RlKGUsdCl7dW5yZWFjaGFibGUoIlNob3VsZCBub3QgY2FsbCBQYXR0ZXJuQ1MuaXNEZWZhdWx0RGVjb2RlIil9fWNsYXNzIEluZGV4ZWRDUyBleHRlbmRzIENvbG9yU3BhY2V7Y29uc3RydWN0b3IoZSx0LGkpe3N1cGVyKCJJbmRleGVkIiwxKTt0aGlzLmJhc2U9ZTtjb25zdCBhPWUubnVtQ29tcHMqKHQrMSk7dGhpcy5sb29rdXA9bmV3IFVpbnQ4QXJyYXkoYSk7aWYoaSBpbnN0YW5jZW9mIEJhc2VTdHJlYW0pe2NvbnN0IGU9aS5nZXRCeXRlcyhhKTt0aGlzLmxvb2t1cC5zZXQoZSl9ZWxzZXtpZigic3RyaW5nIiE9dHlwZW9mIGkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKGBJbmRleGVkQ1MgLSB1bnJlY29nbml6ZWQgbG9va3VwIHRhYmxlOiAke2l9YCk7Zm9yKGxldCBlPTA7ZTxhOysrZSl0aGlzLmxvb2t1cFtlXT0yNTUmaS5jaGFyQ29kZUF0KGUpfX1nZXRSZ2JJdGVtKGUsdCxpLGEpe2NvbnN0IHI9dGhpcy5iYXNlLm51bUNvbXBzLHM9ZVt0XSpyO3RoaXMuYmFzZS5nZXRSZ2JCdWZmZXIodGhpcy5sb29rdXAscywxLGksYSw4LDApfWdldFJnYkJ1ZmZlcihlLHQsaSxhLHIscyxuKXtjb25zdCBvPXRoaXMuYmFzZSxnPW8ubnVtQ29tcHMsYz1vLmdldE91dHB1dExlbmd0aChnLG4pLGw9dGhpcy5sb29rdXA7Zm9yKGxldCBzPTA7czxpOysrcyl7Y29uc3QgaT1lW3QrK10qZztvLmdldFJnYkJ1ZmZlcihsLGksMSxhLHIsOCxuKTtyKz1jfX1nZXRPdXRwdXRMZW5ndGgoZSx0KXtyZXR1cm4gdGhpcy5iYXNlLmdldE91dHB1dExlbmd0aChlKnRoaXMuYmFzZS5udW1Db21wcyx0KX1pc0RlZmF1bHREZWNvZGUoZSx0KXtpZighQXJyYXkuaXNBcnJheShlKSlyZXR1cm4hMDtpZigyIT09ZS5sZW5ndGgpe3dhcm4oIkRlY29kZSBtYXAgbGVuZ3RoIGlzIG5vdCBjb3JyZWN0Iik7cmV0dXJuITB9aWYoIU51bWJlci5pc0ludGVnZXIodCl8fHQ8MSl7d2FybigiQml0cyBwZXIgY29tcG9uZW50IGlzIG5vdCBjb3JyZWN0Iik7cmV0dXJuITB9cmV0dXJuIDA9PT1lWzBdJiZlWzFdPT09KDE8PHQpLTF9fWNsYXNzIERldmljZUdyYXlDUyBleHRlbmRzIENvbG9yU3BhY2V7Y29uc3RydWN0b3IoKXtzdXBlcigiRGV2aWNlR3JheSIsMSl9Z2V0UmdiSXRlbShlLHQsaSxhKXtjb25zdCByPTI1NSplW3RdO2lbYV09aVthKzFdPWlbYSsyXT1yfWdldFJnYkJ1ZmZlcihlLHQsaSxhLHIscyxuKXtjb25zdCBvPTI1NS8oKDE8PHMpLTEpO2xldCBnPXQsYz1yO2ZvcihsZXQgdD0wO3Q8aTsrK3Qpe2NvbnN0IHQ9byplW2crK107YVtjKytdPXQ7YVtjKytdPXQ7YVtjKytdPXQ7Yys9bn19Z2V0T3V0cHV0TGVuZ3RoKGUsdCl7cmV0dXJuIGUqKDMrdCl9fWNsYXNzIERldmljZVJnYkNTIGV4dGVuZHMgQ29sb3JTcGFjZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCJEZXZpY2VSR0IiLDMpfWdldFJnYkl0ZW0oZSx0LGksYSl7aVthXT0yNTUqZVt0XTtpW2ErMV09MjU1KmVbdCsxXTtpW2ErMl09MjU1KmVbdCsyXX1nZXRSZ2JCdWZmZXIoZSx0LGksYSxyLHMsbil7aWYoOD09PXMmJjA9PT1uKXthLnNldChlLnN1YmFycmF5KHQsdCszKmkpLHIpO3JldHVybn1jb25zdCBvPTI1NS8oKDE8PHMpLTEpO2xldCBnPXQsYz1yO2ZvcihsZXQgdD0wO3Q8aTsrK3Qpe2FbYysrXT1vKmVbZysrXTthW2MrK109byplW2crK107YVtjKytdPW8qZVtnKytdO2MrPW59fWdldE91dHB1dExlbmd0aChlLHQpe3JldHVybiBlKigzK3QpLzN8MH1pc1Bhc3N0aHJvdWdoKGUpe3JldHVybiA4PT09ZX19Y2xhc3MgRGV2aWNlUmdiYUNTIGV4dGVuZHMgQ29sb3JTcGFjZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCJEZXZpY2VSR0JBIiw0KX1nZXRPdXRwdXRMZW5ndGgoZSx0KXtyZXR1cm4gNCplfWlzUGFzc3Rocm91Z2goZSl7cmV0dXJuIDg9PT1lfWZpbGxSZ2IoZSx0LGksYSxyLHMsbixvLGcpe2khPT1yfHx0IT09YT9mdW5jdGlvbiByZXNpemVSZ2JhSW1hZ2UoZSx0LGksYSxyLHMsbil7Y29uc3Qgbz1pL3IsZz1hL3M7bGV0IGM9MDtjb25zdCBsPW5ldyBVaW50MTZBcnJheShyKTtpZigxPT09bil7Zm9yKGxldCBlPTA7ZTxyO2UrKylsW2VdPU1hdGguZmxvb3IoZSpvKTtjb25zdCBhPW5ldyBVaW50MzJBcnJheShlLmJ1ZmZlciksbj1uZXcgVWludDMyQXJyYXkodC5idWZmZXIpLGg9RmVhdHVyZVRlc3QuaXNMaXR0bGVFbmRpYW4/MTY3NzcyMTU6NDI5NDk2NzA0MDtmb3IobGV0IGU9MDtlPHM7ZSsrKXtjb25zdCB0PWEuc3ViYXJyYXkoTWF0aC5mbG9vcihlKmcpKmkpO2ZvcihsZXQgZT0wO2U8cjtlKyspbltjKytdfD10W2xbZV1dJmh9fWVsc2V7Y29uc3QgYT00LG49aSphO2ZvcihsZXQgZT0wO2U8cjtlKyspbFtlXT1NYXRoLmZsb29yKGUqbykqYTtmb3IobGV0IGk9MDtpPHM7aSsrKXtjb25zdCBhPWUuc3ViYXJyYXkoTWF0aC5mbG9vcihpKmcpKm4pO2ZvcihsZXQgZT0wO2U8cjtlKyspe2NvbnN0IGk9bFtlXTt0W2MrK109YVtpXTt0W2MrK109YVtpKzFdO3RbYysrXT1hW2krMl19fX19KG8sZSx0LGksYSxyLGcpOmZ1bmN0aW9uIGNvcHlSZ2JhSW1hZ2UoZSx0LGkpe2lmKDE9PT1pKXtjb25zdCBpPW5ldyBVaW50MzJBcnJheShlLmJ1ZmZlciksYT1uZXcgVWludDMyQXJyYXkodC5idWZmZXIpLHI9RmVhdHVyZVRlc3QuaXNMaXR0bGVFbmRpYW4/MTY3NzcyMTU6NDI5NDk2NzA0MDtmb3IobGV0IGU9MCx0PWkubGVuZ3RoO2U8dDtlKyspYVtlXXw9aVtlXSZyfWVsc2V7bGV0IGk9MDtmb3IobGV0IGE9MCxyPWUubGVuZ3RoO2E8cjthKz00KXt0W2krK109ZVthXTt0W2krK109ZVthKzFdO3RbaSsrXT1lW2ErMl19fX0obyxlLGcpfX1jbGFzcyBEZXZpY2VDbXlrQ1MgZXh0ZW5kcyBDb2xvclNwYWNle2NvbnN0cnVjdG9yKCl7c3VwZXIoIkRldmljZUNNWUsiLDQpfSN0KGUsdCxpLGEscil7Y29uc3Qgcz1lW3RdKmksbj1lW3QrMV0qaSxvPWVbdCsyXSppLGc9ZVt0KzNdKmk7YVtyXT0yNTUrcyooLTQuMzg3MzMyMzg0NjA5OTg4KnMrNTQuNDg2MTUxOTQxODkxNzYqbisxOC44MjI5MDUwMjE2NTMwMipvKzIxMi4yNTY2MjQ1MTYzOTU4NSpnLTI4NS4yMzMxMDI2MTM3MDA0KStuKigxLjcxNDk3NjM0NzczNjIxMzQqbi01LjYwOTY3MzY5MDQwNDczMTUqbystMTcuODczODcwODYxNDE1NDQ0KmctNS40OTcwMDY0MjcxOTYzNjYpK28qKC0yLjUyMTczNDAxMzE2ODMwMzMqby0yMS4yNDg5MjMzMzczNTMwNzMqZysxNy41MTE5MjcwODQxODEzKStnKigtMjEuODYxMjIxNDc0NjM2MDUqZy0xODkuNDgxODA4MzU5MjI3NDcpO2FbcisxXT0yNTUrcyooOC44NDEwNDE0MjIwMzYxNDkqcys2MC4xMTgwMjcwNDU1OTczNjYqbis2Ljg3MTQyNTU5MjA0OTAwNypvKzMxLjE1OTEwMDEzMDA1NTkyMipnLTc5LjI5NzA4NDQ4MTY1NDgpK24qKC0xNS4zMTAzNjEzMDY5Njc4MTcqbisxNy41NzUyNTEyNjExMDk0ODIqbysxMzEuMzUyNTA5MTI0OTM5NzYqZy0xOTAuOTQ1MzMwMjU4ODk1MSkrbyooNC40NDQzMzkxMDI4NTI3Mzkqbys5Ljg2MzI4NjE0OTM0MDUqZy0yNC44Njc0MTU4MjU1NTg3OCkrZyooLTIwLjczNzMyNTQ3MTE4MTAzNCpnLTE4Ny44MDQ1MzcwOTcxOTU3OCk7YVtyKzJdPTI1NStzKiguODg0MjUyMjQzMDAwMzI5NipzKzguMDc4Njc3NTAzMTEyOTI4Km4rMzAuODk5NzgzMDk3MDM3Mjkqby0uMjM4ODMyMzg2ODkxNzg5MzQqZy0xNC4xODM1NzY3OTk2NzMyODYpK24qKDEwLjQ5NTkzMjczNDMyMDcyKm4rNjMuMDIzNzg0OTQ3NTQwNTIqbys1MC42MDY5NTc2NTYzNjA3MzQqZy0xMTIuMjM4ODQyNTM3MTkyNDgpK28qKC4wMzI5NjA0MTExNDg3MzIxNypvKzExNS42MDM4NDQ0OTY0NjY0MSpnLTE5My41ODIwOTM1Njg2MTUwNSkrZyooLTIyLjMzODE2ODA3MzA5ODg2KmctMTgwLjEyNjEzOTc0NzA4MzY3KX1nZXRSZ2JJdGVtKGUsdCxpLGEpe3RoaXMuI3QoZSx0LDEsaSxhKX1nZXRSZ2JCdWZmZXIoZSx0LGksYSxyLHMsbil7Y29uc3Qgbz0xLygoMTw8cyktMSk7Zm9yKGxldCBzPTA7czxpO3MrKyl7dGhpcy4jdChlLHQsbyxhLHIpO3QrPTQ7cis9MytufX1nZXRPdXRwdXRMZW5ndGgoZSx0KXtyZXR1cm4gZS80KigzK3QpfDB9fWNsYXNzIENhbEdyYXlDUyBleHRlbmRzIENvbG9yU3BhY2V7Y29uc3RydWN0b3IoZSx0LGkpe3N1cGVyKCJDYWxHcmF5IiwxKTtpZighZSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIldoaXRlUG9pbnQgbWlzc2luZyAtIHJlcXVpcmVkIGZvciBjb2xvciBzcGFjZSBDYWxHcmF5Iik7W3RoaXMuWFcsdGhpcy5ZVyx0aGlzLlpXXT1lO1t0aGlzLlhCLHRoaXMuWUIsdGhpcy5aQl09dHx8WzAsMCwwXTt0aGlzLkc9aXx8MTtpZih0aGlzLlhXPDB8fHRoaXMuWlc8MHx8MSE9PXRoaXMuWVcpdGhyb3cgbmV3IEZvcm1hdEVycm9yKGBJbnZhbGlkIFdoaXRlUG9pbnQgY29tcG9uZW50cyBmb3IgJHt0aGlzLm5hbWV9LCBubyBmYWxsYmFjayBhdmFpbGFibGVgKTtpZih0aGlzLlhCPDB8fHRoaXMuWUI8MHx8dGhpcy5aQjwwKXtpbmZvKGBJbnZhbGlkIEJsYWNrUG9pbnQgZm9yICR7dGhpcy5uYW1lfSwgZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQuYCk7dGhpcy5YQj10aGlzLllCPXRoaXMuWkI9MH0wPT09dGhpcy5YQiYmMD09PXRoaXMuWUImJjA9PT10aGlzLlpCfHx3YXJuKGAke3RoaXMubmFtZX0sIEJsYWNrUG9pbnQ6IFhCOiAke3RoaXMuWEJ9LCBZQjogJHt0aGlzLllCfSwgWkI6ICR7dGhpcy5aQn0sIG9ubHkgZGVmYXVsdCB2YWx1ZXMgYXJlIHN1cHBvcnRlZC5gKTtpZih0aGlzLkc8MSl7aW5mbyhgSW52YWxpZCBHYW1tYTogJHt0aGlzLkd9IGZvciAke3RoaXMubmFtZX0sIGZhbGxpbmcgYmFjayB0byBkZWZhdWx0LmApO3RoaXMuRz0xfX0jdChlLHQsaSxhLHIpe2NvbnN0IHM9KGVbdF0qcikqKnRoaXMuRyxuPXRoaXMuWVcqcyxvPU1hdGgubWF4KDI5NS44Km4qKi4zMzMzMzMzMzMzMzMzMzMzLTQwLjgsMCk7aVthXT1vO2lbYSsxXT1vO2lbYSsyXT1vfWdldFJnYkl0ZW0oZSx0LGksYSl7dGhpcy4jdChlLHQsaSxhLDEpfWdldFJnYkJ1ZmZlcihlLHQsaSxhLHIscyxuKXtjb25zdCBvPTEvKCgxPDxzKS0xKTtmb3IobGV0IHM9MDtzPGk7KytzKXt0aGlzLiN0KGUsdCxhLHIsbyk7dCs9MTtyKz0zK259fWdldE91dHB1dExlbmd0aChlLHQpe3JldHVybiBlKigzK3QpfX1jbGFzcyBDYWxSR0JDUyBleHRlbmRzIENvbG9yU3BhY2V7c3RhdGljI2k9bmV3IEZsb2F0MzJBcnJheShbLjg5NTEsLjI2NjQsLS4xNjE0LC0uNzUwMiwxLjcxMzUsLjAzNjcsLjAzODksLS4wNjg1LDEuMDI5Nl0pO3N0YXRpYyNhPW5ldyBGbG9hdDMyQXJyYXkoWy45ODY5OTI5LC0uMTQ3MDU0MywuMTU5OTYyNywuNDMyMzA1MywuNTE4MzYwMywuMDQ5MjkxMiwtLjAwODUyODcsLjA0MDA0MjgsLjk2ODQ4NjddKTtzdGF0aWMjcj1uZXcgRmxvYXQzMkFycmF5KFszLjI0MDQ1NDIsLTEuNTM3MTM4NSwtLjQ5ODUzMTQsLS45NjkyNjYsMS44NzYwMTA4LC4wNDE1NTYsLjA1NTY0MzQsLS4yMDQwMjU5LDEuMDU3MjI1Ml0pO3N0YXRpYyNzPW5ldyBGbG9hdDMyQXJyYXkoWzEsMSwxXSk7c3RhdGljI249bmV3IEZsb2F0MzJBcnJheSgzKTtzdGF0aWMjbz1uZXcgRmxvYXQzMkFycmF5KDMpO3N0YXRpYyNnPW5ldyBGbG9hdDMyQXJyYXkoMyk7c3RhdGljI0k9KDI0LzExNikqKjMvODtjb25zdHJ1Y3RvcihlLHQsaSxhKXtzdXBlcigiQ2FsUkdCIiwzKTtpZighZSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIldoaXRlUG9pbnQgbWlzc2luZyAtIHJlcXVpcmVkIGZvciBjb2xvciBzcGFjZSBDYWxSR0IiKTtjb25zdFtyLHMsbl09dGhpcy53aGl0ZVBvaW50PWUsW28sZyxjXT10aGlzLmJsYWNrUG9pbnQ9dHx8bmV3IEZsb2F0MzJBcnJheSgzKTtbdGhpcy5HUix0aGlzLkdHLHRoaXMuR0JdPWl8fG5ldyBGbG9hdDMyQXJyYXkoWzEsMSwxXSk7W3RoaXMuTVhBLHRoaXMuTVlBLHRoaXMuTVpBLHRoaXMuTVhCLHRoaXMuTVlCLHRoaXMuTVpCLHRoaXMuTVhDLHRoaXMuTVlDLHRoaXMuTVpDXT1hfHxuZXcgRmxvYXQzMkFycmF5KFsxLDAsMCwwLDEsMCwwLDAsMV0pO2lmKHI8MHx8bjwwfHwxIT09cyl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYEludmFsaWQgV2hpdGVQb2ludCBjb21wb25lbnRzIGZvciAke3RoaXMubmFtZX0sIG5vIGZhbGxiYWNrIGF2YWlsYWJsZWApO2lmKG88MHx8ZzwwfHxjPDApe2luZm8oYEludmFsaWQgQmxhY2tQb2ludCBmb3IgJHt0aGlzLm5hbWV9IFske299LCAke2d9LCAke2N9XSwgZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQuYCk7dGhpcy5ibGFja1BvaW50PW5ldyBGbG9hdDMyQXJyYXkoMyl9aWYodGhpcy5HUjwwfHx0aGlzLkdHPDB8fHRoaXMuR0I8MCl7aW5mbyhgSW52YWxpZCBHYW1tYSBbJHt0aGlzLkdSfSwgJHt0aGlzLkdHfSwgJHt0aGlzLkdCfV0gZm9yICR7dGhpcy5uYW1lfSwgZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQuYCk7dGhpcy5HUj10aGlzLkdHPXRoaXMuR0I9MX19I2MoZSx0LGkpe2lbMF09ZVswXSp0WzBdK2VbMV0qdFsxXStlWzJdKnRbMl07aVsxXT1lWzNdKnRbMF0rZVs0XSp0WzFdK2VbNV0qdFsyXTtpWzJdPWVbNl0qdFswXStlWzddKnRbMV0rZVs4XSp0WzJdfSNsKGUsdCxpKXtpWzBdPTEqdFswXS9lWzBdO2lbMV09MSp0WzFdL2VbMV07aVsyXT0xKnRbMl0vZVsyXX0jaChlLHQsaSl7aVswXT0uOTUwNDcqdFswXS9lWzBdO2lbMV09MSp0WzFdL2VbMV07aVsyXT0xLjA4ODgzKnRbMl0vZVsyXX0jQyhlKXtyZXR1cm4gZTw9LjAwMzEzMDg/dGhpcy4jQigwLDEsMTIuOTIqZSk6ZT49Ljk5NTU0NTI1PzE6dGhpcy4jQigwLDEsMS4wNTUqZSoqKDEvMi40KS0uMDU1KX0jQihlLHQsaSl7cmV0dXJuIE1hdGgubWF4KGUsTWF0aC5taW4odCxpKSl9I1EoZSl7cmV0dXJuIGU8MD8tdGhpcy4jUSgtZSk6ZT44PygoZSsxNikvMTE2KSoqMzplKkNhbFJHQkNTLiNJfSNFKGUsdCxpKXtpZigwPT09ZVswXSYmMD09PWVbMV0mJjA9PT1lWzJdKXtpWzBdPXRbMF07aVsxXT10WzFdO2lbMl09dFsyXTtyZXR1cm59Y29uc3QgYT10aGlzLiNRKDApLHI9KDEtYSkvKDEtdGhpcy4jUShlWzBdKSkscz0xLXIsbj0oMS1hKS8oMS10aGlzLiNRKGVbMV0pKSxvPTEtbixnPSgxLWEpLygxLXRoaXMuI1EoZVsyXSkpLGM9MS1nO2lbMF09dFswXSpyK3M7aVsxXT10WzFdKm4rbztpWzJdPXRbMl0qZytjfSN1KGUsdCxpKXtpZigxPT09ZVswXSYmMT09PWVbMl0pe2lbMF09dFswXTtpWzFdPXRbMV07aVsyXT10WzJdO3JldHVybn1jb25zdCBhPWk7dGhpcy4jYyhDYWxSR0JDUy4jaSx0LGEpO2NvbnN0IHI9Q2FsUkdCQ1MuI247dGhpcy4jbChlLGEscik7dGhpcy4jYyhDYWxSR0JDUy4jYSxyLGkpfSNkKGUsdCxpKXtjb25zdCBhPWk7dGhpcy4jYyhDYWxSR0JDUy4jaSx0LGEpO2NvbnN0IHI9Q2FsUkdCQ1MuI247dGhpcy4jaChlLGEscik7dGhpcy4jYyhDYWxSR0JDUy4jYSxyLGkpfSN0KGUsdCxpLGEscil7Y29uc3Qgcz10aGlzLiNCKDAsMSxlW3RdKnIpLG49dGhpcy4jQigwLDEsZVt0KzFdKnIpLG89dGhpcy4jQigwLDEsZVt0KzJdKnIpLGc9MT09PXM/MTpzKip0aGlzLkdSLGM9MT09PW4/MTpuKip0aGlzLkdHLGw9MT09PW8/MTpvKip0aGlzLkdCLGg9dGhpcy5NWEEqZyt0aGlzLk1YQipjK3RoaXMuTVhDKmwsQz10aGlzLk1ZQSpnK3RoaXMuTVlCKmMrdGhpcy5NWUMqbCxRPXRoaXMuTVpBKmcrdGhpcy5NWkIqYyt0aGlzLk1aQypsLEU9Q2FsUkdCQ1MuI287RVswXT1oO0VbMV09QztFWzJdPVE7Y29uc3QgdT1DYWxSR0JDUy4jZzt0aGlzLiN1KHRoaXMud2hpdGVQb2ludCxFLHUpO2NvbnN0IGQ9Q2FsUkdCQ1MuI287dGhpcy4jRSh0aGlzLmJsYWNrUG9pbnQsdSxkKTtjb25zdCBmPUNhbFJHQkNTLiNnO3RoaXMuI2QoQ2FsUkdCQ1MuI3MsZCxmKTtjb25zdCBwPUNhbFJHQkNTLiNvO3RoaXMuI2MoQ2FsUkdCQ1MuI3IsZixwKTtpW2FdPTI1NSp0aGlzLiNDKHBbMF0pO2lbYSsxXT0yNTUqdGhpcy4jQyhwWzFdKTtpW2ErMl09MjU1KnRoaXMuI0MocFsyXSl9Z2V0UmdiSXRlbShlLHQsaSxhKXt0aGlzLiN0KGUsdCxpLGEsMSl9Z2V0UmdiQnVmZmVyKGUsdCxpLGEscixzLG4pe2NvbnN0IG89MS8oKDE8PHMpLTEpO2ZvcihsZXQgcz0wO3M8aTsrK3Mpe3RoaXMuI3QoZSx0LGEscixvKTt0Kz0zO3IrPTMrbn19Z2V0T3V0cHV0TGVuZ3RoKGUsdCl7cmV0dXJuIGUqKDMrdCkvM3wwfX1jbGFzcyBMYWJDUyBleHRlbmRzIENvbG9yU3BhY2V7Y29uc3RydWN0b3IoZSx0LGkpe3N1cGVyKCJMYWIiLDMpO2lmKCFlKXRocm93IG5ldyBGb3JtYXRFcnJvcigiV2hpdGVQb2ludCBtaXNzaW5nIC0gcmVxdWlyZWQgZm9yIGNvbG9yIHNwYWNlIExhYiIpO1t0aGlzLlhXLHRoaXMuWVcsdGhpcy5aV109ZTtbdGhpcy5hbWluLHRoaXMuYW1heCx0aGlzLmJtaW4sdGhpcy5ibWF4XT1pfHxbLTEwMCwxMDAsLTEwMCwxMDBdO1t0aGlzLlhCLHRoaXMuWUIsdGhpcy5aQl09dHx8WzAsMCwwXTtpZih0aGlzLlhXPDB8fHRoaXMuWlc8MHx8MSE9PXRoaXMuWVcpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJJbnZhbGlkIFdoaXRlUG9pbnQgY29tcG9uZW50cywgbm8gZmFsbGJhY2sgYXZhaWxhYmxlIik7aWYodGhpcy5YQjwwfHx0aGlzLllCPDB8fHRoaXMuWkI8MCl7aW5mbygiSW52YWxpZCBCbGFja1BvaW50LCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdCIpO3RoaXMuWEI9dGhpcy5ZQj10aGlzLlpCPTB9aWYodGhpcy5hbWluPnRoaXMuYW1heHx8dGhpcy5ibWluPnRoaXMuYm1heCl7aW5mbygiSW52YWxpZCBSYW5nZSwgZmFsbGluZyBiYWNrIHRvIGRlZmF1bHRzIik7dGhpcy5hbWluPS0xMDA7dGhpcy5hbWF4PTEwMDt0aGlzLmJtaW49LTEwMDt0aGlzLmJtYXg9MTAwfX0jZihlKXtyZXR1cm4gZT49Ni8yOT9lKiozOjEwOC84NDEqKGUtNC8yOSl9I3AoZSx0LGksYSl7cmV0dXJuIGkrZSooYS1pKS90fSN0KGUsdCxpLGEscil7bGV0IHM9ZVt0XSxuPWVbdCsxXSxvPWVbdCsyXTtpZighMSE9PWkpe3M9dGhpcy4jcChzLGksMCwxMDApO249dGhpcy4jcChuLGksdGhpcy5hbWluLHRoaXMuYW1heCk7bz10aGlzLiNwKG8saSx0aGlzLmJtaW4sdGhpcy5ibWF4KX1uPnRoaXMuYW1heD9uPXRoaXMuYW1heDpuPHRoaXMuYW1pbiYmKG49dGhpcy5hbWluKTtvPnRoaXMuYm1heD9vPXRoaXMuYm1heDpvPHRoaXMuYm1pbiYmKG89dGhpcy5ibWluKTtjb25zdCBnPShzKzE2KS8xMTYsYz1nK24vNTAwLGw9Zy1vLzIwMCxoPXRoaXMuWFcqdGhpcy4jZihjKSxDPXRoaXMuWVcqdGhpcy4jZihnKSxRPXRoaXMuWlcqdGhpcy4jZihsKTtsZXQgRSx1LGQ7aWYodGhpcy5aVzwxKXtFPTMuMTMzOSpoKy0xLjYxNypDKy0uNDkwNipRO3U9LS45Nzg1KmgrMS45MTYqQysuMDMzMypRO2Q9LjA3MipoKy0uMjI5KkMrMS40MDU3KlF9ZWxzZXtFPTMuMjQwNipoKy0xLjUzNzIqQystLjQ5ODYqUTt1PS0uOTY4OSpoKzEuODc1OCpDKy4wNDE1KlE7ZD0uMDU1NypoKy0uMjA0KkMrMS4wNTcqUX1hW3JdPTI1NSpNYXRoLnNxcnQoRSk7YVtyKzFdPTI1NSpNYXRoLnNxcnQodSk7YVtyKzJdPTI1NSpNYXRoLnNxcnQoZCl9Z2V0UmdiSXRlbShlLHQsaSxhKXt0aGlzLiN0KGUsdCwhMSxpLGEpfWdldFJnYkJ1ZmZlcihlLHQsaSxhLHIscyxuKXtjb25zdCBvPSgxPDxzKS0xO2ZvcihsZXQgcz0wO3M8aTtzKyspe3RoaXMuI3QoZSx0LG8sYSxyKTt0Kz0zO3IrPTMrbn19Z2V0T3V0cHV0TGVuZ3RoKGUsdCl7cmV0dXJuIGUqKDMrdCkvM3wwfWlzRGVmYXVsdERlY29kZShlLHQpe3JldHVybiEwfWdldCB1c2VzWmVyb1RvT25lUmFuZ2UoKXtyZXR1cm4gc2hhZG93KHRoaXMsInVzZXNaZXJvVG9PbmVSYW5nZSIsITEpfX1fX3dlYnBhY2tfcmVxdWlyZV9fKDM5NDkpO2Z1bmN0aW9uIGhleFRvSW50KGUsdCl7bGV0IGk9MDtmb3IobGV0IGE9MDthPD10O2ErKylpPWk8PDh8ZVthXTtyZXR1cm4gaT4+PjB9ZnVuY3Rpb24gaGV4VG9TdHIoZSx0KXtyZXR1cm4gMT09PXQ/U3RyaW5nLmZyb21DaGFyQ29kZShlWzBdLGVbMV0pOjM9PT10P1N0cmluZy5mcm9tQ2hhckNvZGUoZVswXSxlWzFdLGVbMl0sZVszXSk6U3RyaW5nLmZyb21DaGFyQ29kZSguLi5lLnN1YmFycmF5KDAsdCsxKSl9ZnVuY3Rpb24gYWRkSGV4KGUsdCxpKXtsZXQgYT0wO2ZvcihsZXQgcj1pO3I+PTA7ci0tKXthKz1lW3JdK3Rbcl07ZVtyXT0yNTUmYTthPj49OH19ZnVuY3Rpb24gaW5jSGV4KGUsdCl7bGV0IGk9MTtmb3IobGV0IGE9dDthPj0wJiZpPjA7YS0tKXtpKz1lW2FdO2VbYV09MjU1Jmk7aT4+PTh9fWNvbnN0IER0PTE2O2NsYXNzIEJpbmFyeUNNYXBTdHJlYW17Y29uc3RydWN0b3IoZSl7dGhpcy5idWZmZXI9ZTt0aGlzLnBvcz0wO3RoaXMuZW5kPWUubGVuZ3RoO3RoaXMudG1wQnVmPW5ldyBVaW50OEFycmF5KDE5KX1yZWFkQnl0ZSgpe3JldHVybiB0aGlzLnBvcz49dGhpcy5lbmQ/LTE6dGhpcy5idWZmZXJbdGhpcy5wb3MrK119cmVhZE51bWJlcigpe2xldCBlLHQ9MDtkb3tjb25zdCBpPXRoaXMucmVhZEJ5dGUoKTtpZihpPDApdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJ1bmV4cGVjdGVkIEVPRiBpbiBiY21hcCIpO2U9ISgxMjgmaSk7dD10PDw3fDEyNyZpfXdoaWxlKCFlKTtyZXR1cm4gdH1yZWFkU2lnbmVkKCl7Y29uc3QgZT10aGlzLnJlYWROdW1iZXIoKTtyZXR1cm4gMSZlP34oZT4+PjEpOmU+Pj4xfXJlYWRIZXgoZSx0KXtlLnNldCh0aGlzLmJ1ZmZlci5zdWJhcnJheSh0aGlzLnBvcyx0aGlzLnBvcyt0KzEpKTt0aGlzLnBvcys9dCsxfXJlYWRIZXhOdW1iZXIoZSx0KXtsZXQgaTtjb25zdCBhPXRoaXMudG1wQnVmO2xldCByPTA7ZG97Y29uc3QgZT10aGlzLnJlYWRCeXRlKCk7aWYoZTwwKXRocm93IG5ldyBGb3JtYXRFcnJvcigidW5leHBlY3RlZCBFT0YgaW4gYmNtYXAiKTtpPSEoMTI4JmUpO2FbcisrXT0xMjcmZX13aGlsZSghaSk7bGV0IHM9dCxuPTAsbz0wO2Zvcig7cz49MDspe2Zvcig7bzw4JiZhLmxlbmd0aD4wOyl7bnw9YVstLXJdPDxvO28rPTd9ZVtzXT0yNTUmbjtzLS07bj4+PTg7by09OH19cmVhZEhleFNpZ25lZChlLHQpe3RoaXMucmVhZEhleE51bWJlcihlLHQpO2NvbnN0IGk9MSZlW3RdPzI1NTowO2xldCBhPTA7Zm9yKGxldCByPTA7cjw9dDtyKyspe2E9KDEmYSk8PDh8ZVtyXTtlW3JdPWE+PjFeaX19cmVhZFN0cmluZygpe2NvbnN0IGU9dGhpcy5yZWFkTnVtYmVyKCksdD1uZXcgQXJyYXkoZSk7Zm9yKGxldCBpPTA7aTxlO2krKyl0W2ldPXRoaXMucmVhZE51bWJlcigpO3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKC4uLnQpfX1jbGFzcyBCaW5hcnlDTWFwUmVhZGVye2FzeW5jIHByb2Nlc3MoZSx0LGkpe2NvbnN0IGE9bmV3IEJpbmFyeUNNYXBTdHJlYW0oZSkscj1hLnJlYWRCeXRlKCk7dC52ZXJ0aWNhbD0hISgxJnIpO2xldCBzPW51bGw7Y29uc3Qgbj1uZXcgVWludDhBcnJheShEdCksbz1uZXcgVWludDhBcnJheShEdCksZz1uZXcgVWludDhBcnJheShEdCksYz1uZXcgVWludDhBcnJheShEdCksbD1uZXcgVWludDhBcnJheShEdCk7bGV0IGgsQztmb3IoOyhDPWEucmVhZEJ5dGUoKSk+PTA7KXtjb25zdCBlPUM+PjU7aWYoNz09PWUpe3N3aXRjaCgzMSZDKXtjYXNlIDA6YS5yZWFkU3RyaW5nKCk7YnJlYWs7Y2FzZSAxOnM9YS5yZWFkU3RyaW5nKCl9Y29udGludWV9Y29uc3QgaT0hISgxNiZDKSxyPTE1JkM7aWYocisxPkR0KXRocm93IG5ldyBFcnJvcigiQmluYXJ5Q01hcFJlYWRlci5wcm9jZXNzOiBJbnZhbGlkIGRhdGFTaXplLiIpO2NvbnN0IFE9MSxFPWEucmVhZE51bWJlcigpO3N3aXRjaChlKXtjYXNlIDA6YS5yZWFkSGV4KG4scik7YS5yZWFkSGV4TnVtYmVyKG8scik7YWRkSGV4KG8sbixyKTt0LmFkZENvZGVzcGFjZVJhbmdlKHIrMSxoZXhUb0ludChuLHIpLGhleFRvSW50KG8scikpO2ZvcihsZXQgZT0xO2U8RTtlKyspe2luY0hleChvLHIpO2EucmVhZEhleE51bWJlcihuLHIpO2FkZEhleChuLG8scik7YS5yZWFkSGV4TnVtYmVyKG8scik7YWRkSGV4KG8sbixyKTt0LmFkZENvZGVzcGFjZVJhbmdlKHIrMSxoZXhUb0ludChuLHIpLGhleFRvSW50KG8scikpfWJyZWFrO2Nhc2UgMTphLnJlYWRIZXgobixyKTthLnJlYWRIZXhOdW1iZXIobyxyKTthZGRIZXgobyxuLHIpO2EucmVhZE51bWJlcigpO2ZvcihsZXQgZT0xO2U8RTtlKyspe2luY0hleChvLHIpO2EucmVhZEhleE51bWJlcihuLHIpO2FkZEhleChuLG8scik7YS5yZWFkSGV4TnVtYmVyKG8scik7YWRkSGV4KG8sbixyKTthLnJlYWROdW1iZXIoKX1icmVhaztjYXNlIDI6YS5yZWFkSGV4KGcscik7aD1hLnJlYWROdW1iZXIoKTt0Lm1hcE9uZShoZXhUb0ludChnLHIpLGgpO2ZvcihsZXQgZT0xO2U8RTtlKyspe2luY0hleChnLHIpO2lmKCFpKXthLnJlYWRIZXhOdW1iZXIobCxyKTthZGRIZXgoZyxsLHIpfWg9YS5yZWFkU2lnbmVkKCkrKGgrMSk7dC5tYXBPbmUoaGV4VG9JbnQoZyxyKSxoKX1icmVhaztjYXNlIDM6YS5yZWFkSGV4KG4scik7YS5yZWFkSGV4TnVtYmVyKG8scik7YWRkSGV4KG8sbixyKTtoPWEucmVhZE51bWJlcigpO3QubWFwQ2lkUmFuZ2UoaGV4VG9JbnQobixyKSxoZXhUb0ludChvLHIpLGgpO2ZvcihsZXQgZT0xO2U8RTtlKyspe2luY0hleChvLHIpO2lmKGkpbi5zZXQobyk7ZWxzZXthLnJlYWRIZXhOdW1iZXIobixyKTthZGRIZXgobixvLHIpfWEucmVhZEhleE51bWJlcihvLHIpO2FkZEhleChvLG4scik7aD1hLnJlYWROdW1iZXIoKTt0Lm1hcENpZFJhbmdlKGhleFRvSW50KG4sciksaGV4VG9JbnQobyxyKSxoKX1icmVhaztjYXNlIDQ6YS5yZWFkSGV4KGcsUSk7YS5yZWFkSGV4KGMscik7dC5tYXBPbmUoaGV4VG9JbnQoZyxRKSxoZXhUb1N0cihjLHIpKTtmb3IobGV0IGU9MTtlPEU7ZSsrKXtpbmNIZXgoZyxRKTtpZighaSl7YS5yZWFkSGV4TnVtYmVyKGwsUSk7YWRkSGV4KGcsbCxRKX1pbmNIZXgoYyxyKTthLnJlYWRIZXhTaWduZWQobCxyKTthZGRIZXgoYyxsLHIpO3QubWFwT25lKGhleFRvSW50KGcsUSksaGV4VG9TdHIoYyxyKSl9YnJlYWs7Y2FzZSA1OmEucmVhZEhleChuLFEpO2EucmVhZEhleE51bWJlcihvLFEpO2FkZEhleChvLG4sUSk7YS5yZWFkSGV4KGMscik7dC5tYXBCZlJhbmdlKGhleFRvSW50KG4sUSksaGV4VG9JbnQobyxRKSxoZXhUb1N0cihjLHIpKTtmb3IobGV0IGU9MTtlPEU7ZSsrKXtpbmNIZXgobyxRKTtpZihpKW4uc2V0KG8pO2Vsc2V7YS5yZWFkSGV4TnVtYmVyKG4sUSk7YWRkSGV4KG4sbyxRKX1hLnJlYWRIZXhOdW1iZXIobyxRKTthZGRIZXgobyxuLFEpO2EucmVhZEhleChjLHIpO3QubWFwQmZSYW5nZShoZXhUb0ludChuLFEpLGhleFRvSW50KG8sUSksaGV4VG9TdHIoYyxyKSl9YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoYEJpbmFyeUNNYXBSZWFkZXIucHJvY2VzcyAtIHVua25vd24gdHlwZTogJHtlfWApfX1yZXR1cm4gcz9pKHMpOnR9fWNvbnN0IEZ0PW5ldyBVaW50OEFycmF5KDApO2NsYXNzIERlY29kZVN0cmVhbSBleHRlbmRzIEJhc2VTdHJlYW17Y29uc3RydWN0b3IoZSl7c3VwZXIoKTt0aGlzLl9yYXdNaW5CdWZmZXJMZW5ndGg9ZXx8MDt0aGlzLnBvcz0wO3RoaXMuYnVmZmVyTGVuZ3RoPTA7dGhpcy5lb2Y9ITE7dGhpcy5idWZmZXI9RnQ7dGhpcy5taW5CdWZmZXJMZW5ndGg9NTEyO2lmKGUpZm9yKDt0aGlzLm1pbkJ1ZmZlckxlbmd0aDxlOyl0aGlzLm1pbkJ1ZmZlckxlbmd0aCo9Mn1nZXQgaXNFbXB0eSgpe2Zvcig7IXRoaXMuZW9mJiYwPT09dGhpcy5idWZmZXJMZW5ndGg7KXRoaXMucmVhZEJsb2NrKCk7cmV0dXJuIDA9PT10aGlzLmJ1ZmZlckxlbmd0aH1lbnN1cmVCdWZmZXIoZSl7Y29uc3QgdD10aGlzLmJ1ZmZlcjtpZihlPD10LmJ5dGVMZW5ndGgpcmV0dXJuIHQ7bGV0IGk9dGhpcy5taW5CdWZmZXJMZW5ndGg7Zm9yKDtpPGU7KWkqPTI7Y29uc3QgYT1uZXcgVWludDhBcnJheShpKTthLnNldCh0KTtyZXR1cm4gdGhpcy5idWZmZXI9YX1nZXRCeXRlKCl7Y29uc3QgZT10aGlzLnBvcztmb3IoO3RoaXMuYnVmZmVyTGVuZ3RoPD1lOyl7aWYodGhpcy5lb2YpcmV0dXJuLTE7dGhpcy5yZWFkQmxvY2soKX1yZXR1cm4gdGhpcy5idWZmZXJbdGhpcy5wb3MrK119Z2V0Qnl0ZXMoZSx0PW51bGwpe2NvbnN0IGk9dGhpcy5wb3M7bGV0IGE7aWYoZSl7dGhpcy5lbnN1cmVCdWZmZXIoaStlKTthPWkrZTtmb3IoOyF0aGlzLmVvZiYmdGhpcy5idWZmZXJMZW5ndGg8YTspdGhpcy5yZWFkQmxvY2sodCk7Y29uc3Qgcj10aGlzLmJ1ZmZlckxlbmd0aDthPnImJihhPXIpfWVsc2V7Zm9yKDshdGhpcy5lb2Y7KXRoaXMucmVhZEJsb2NrKHQpO2E9dGhpcy5idWZmZXJMZW5ndGh9dGhpcy5wb3M9YTtyZXR1cm4gdGhpcy5idWZmZXIuc3ViYXJyYXkoaSxhKX1hc3luYyBnZXRJbWFnZURhdGEoZSx0PW51bGwpe2lmKCF0aGlzLmNhbkFzeW5jRGVjb2RlSW1hZ2VGcm9tQnVmZmVyKXJldHVybiB0aGlzLmdldEJ5dGVzKGUsdCk7Y29uc3QgaT1hd2FpdCB0aGlzLnN0cmVhbS5hc3luY0dldEJ5dGVzKCk7cmV0dXJuIHRoaXMuZGVjb2RlSW1hZ2UoaSx0KX1yZXNldCgpe3RoaXMucG9zPTB9bWFrZVN1YlN0cmVhbShlLHQsaT1udWxsKXtpZih2b2lkIDA9PT10KWZvcig7IXRoaXMuZW9mOyl0aGlzLnJlYWRCbG9jaygpO2Vsc2V7Y29uc3QgaT1lK3Q7Zm9yKDt0aGlzLmJ1ZmZlckxlbmd0aDw9aSYmIXRoaXMuZW9mOyl0aGlzLnJlYWRCbG9jaygpfXJldHVybiBuZXcgU3RyZWFtKHRoaXMuYnVmZmVyLGUsdCxpKX1nZXRCYXNlU3RyZWFtcygpe3JldHVybiB0aGlzLnN0cj90aGlzLnN0ci5nZXRCYXNlU3RyZWFtcygpOm51bGx9fWNsYXNzIFN0cmVhbXNTZXF1ZW5jZVN0cmVhbSBleHRlbmRzIERlY29kZVN0cmVhbXtjb25zdHJ1Y3RvcihlLHQ9bnVsbCl7ZT1lLmZpbHRlcigoZT0+ZSBpbnN0YW5jZW9mIEJhc2VTdHJlYW0pKTtsZXQgaT0wO2Zvcihjb25zdCB0IG9mIGUpaSs9dCBpbnN0YW5jZW9mIERlY29kZVN0cmVhbT90Ll9yYXdNaW5CdWZmZXJMZW5ndGg6dC5sZW5ndGg7c3VwZXIoaSk7dGhpcy5zdHJlYW1zPWU7dGhpcy5fb25FcnJvcj10fXJlYWRCbG9jaygpe2NvbnN0IGU9dGhpcy5zdHJlYW1zO2lmKDA9PT1lLmxlbmd0aCl7dGhpcy5lb2Y9ITA7cmV0dXJufWNvbnN0IHQ9ZS5zaGlmdCgpO2xldCBpO3RyeXtpPXQuZ2V0Qnl0ZXMoKX1jYXRjaChlKXtpZih0aGlzLl9vbkVycm9yKXt0aGlzLl9vbkVycm9yKGUsdC5kaWN0Py5vYmpJZCk7cmV0dXJufXRocm93IGV9Y29uc3QgYT10aGlzLmJ1ZmZlckxlbmd0aCxyPWEraS5sZW5ndGg7dGhpcy5lbnN1cmVCdWZmZXIocikuc2V0KGksYSk7dGhpcy5idWZmZXJMZW5ndGg9cn1nZXRCYXNlU3RyZWFtcygpe2NvbnN0IGU9W107Zm9yKGNvbnN0IHQgb2YgdGhpcy5zdHJlYW1zKXtjb25zdCBpPXQuZ2V0QmFzZVN0cmVhbXMoKTtpJiZlLnB1c2goLi4uaSl9cmV0dXJuIGUubGVuZ3RoPjA/ZTpudWxsfX1jbGFzcyBBc2NpaTg1U3RyZWFtIGV4dGVuZHMgRGVjb2RlU3RyZWFte2NvbnN0cnVjdG9yKGUsdCl7dCYmKHQqPS44KTtzdXBlcih0KTt0aGlzLnN0cj1lO3RoaXMuZGljdD1lLmRpY3Q7dGhpcy5pbnB1dD1uZXcgVWludDhBcnJheSg1KX1yZWFkQmxvY2soKXtjb25zdCBlPXRoaXMuc3RyO2xldCB0PWUuZ2V0Qnl0ZSgpO2Zvcig7aXNXaGl0ZVNwYWNlKHQpOyl0PWUuZ2V0Qnl0ZSgpO2lmKC0xPT09dHx8MTI2PT09dCl7dGhpcy5lb2Y9ITA7cmV0dXJufWNvbnN0IGk9dGhpcy5idWZmZXJMZW5ndGg7bGV0IGEscjtpZigxMjI9PT10KXthPXRoaXMuZW5zdXJlQnVmZmVyKGkrNCk7Zm9yKHI9MDtyPDQ7KytyKWFbaStyXT0wO3RoaXMuYnVmZmVyTGVuZ3RoKz00fWVsc2V7Y29uc3Qgcz10aGlzLmlucHV0O3NbMF09dDtmb3Iocj0xO3I8NTsrK3Ipe3Q9ZS5nZXRCeXRlKCk7Zm9yKDtpc1doaXRlU3BhY2UodCk7KXQ9ZS5nZXRCeXRlKCk7c1tyXT10O2lmKC0xPT09dHx8MTI2PT09dClicmVha31hPXRoaXMuZW5zdXJlQnVmZmVyKGkrci0xKTt0aGlzLmJ1ZmZlckxlbmd0aCs9ci0xO2lmKHI8NSl7Zm9yKDtyPDU7KytyKXNbcl09MTE3O3RoaXMuZW9mPSEwfWxldCBuPTA7Zm9yKHI9MDtyPDU7KytyKW49ODUqbisoc1tyXS0zMyk7Zm9yKHI9MztyPj0wOy0tcil7YVtpK3JdPTI1NSZuO24+Pj04fX19fWNsYXNzIEFzY2lpSGV4U3RyZWFtIGV4dGVuZHMgRGVjb2RlU3RyZWFte2NvbnN0cnVjdG9yKGUsdCl7dCYmKHQqPS41KTtzdXBlcih0KTt0aGlzLnN0cj1lO3RoaXMuZGljdD1lLmRpY3Q7dGhpcy5maXJzdERpZ2l0PS0xfXJlYWRCbG9jaygpe2NvbnN0IGU9dGhpcy5zdHIuZ2V0Qnl0ZXMoOGUzKTtpZighZS5sZW5ndGgpe3RoaXMuZW9mPSEwO3JldHVybn1jb25zdCB0PWUubGVuZ3RoKzE+PjEsaT10aGlzLmVuc3VyZUJ1ZmZlcih0aGlzLmJ1ZmZlckxlbmd0aCt0KTtsZXQgYT10aGlzLmJ1ZmZlckxlbmd0aCxyPXRoaXMuZmlyc3REaWdpdDtmb3IoY29uc3QgdCBvZiBlKXtsZXQgZTtpZih0Pj00OCYmdDw9NTcpZT0xNSZ0O2Vsc2V7aWYoISh0Pj02NSYmdDw9NzB8fHQ+PTk3JiZ0PD0xMDIpKXtpZig2Mj09PXQpe3RoaXMuZW9mPSEwO2JyZWFrfWNvbnRpbnVlfWU9OSsoMTUmdCl9aWYocjwwKXI9ZTtlbHNle2lbYSsrXT1yPDw0fGU7cj0tMX19aWYocj49MCYmdGhpcy5lb2Ype2lbYSsrXT1yPDw0O3I9LTF9dGhpcy5maXJzdERpZ2l0PXI7dGhpcy5idWZmZXJMZW5ndGg9YX19Y29uc3QgU3Q9LTEsa3Q9W1stMSwtMV0sWy0xLC0xXSxbNyw4XSxbNyw3XSxbNiw2XSxbNiw2XSxbNiw1XSxbNiw1XSxbNCwwXSxbNCwwXSxbNCwwXSxbNCwwXSxbNCwwXSxbNCwwXSxbNCwwXSxbNCwwXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMywxXSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMyw0XSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMywzXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXSxbMSwyXV0sUnQ9W1stMSwtMV0sWzEyLC0yXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWzExLDE3OTJdLFsxMSwxNzkyXSxbMTIsMTk4NF0sWzEyLDIwNDhdLFsxMiwyMTEyXSxbMTIsMjE3Nl0sWzEyLDIyNDBdLFsxMiwyMzA0XSxbMTEsMTg1Nl0sWzExLDE4NTZdLFsxMSwxOTIwXSxbMTEsMTkyMF0sWzEyLDIzNjhdLFsxMiwyNDMyXSxbMTIsMjQ5Nl0sWzEyLDI1NjBdXSxOdD1bWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbOCwyOV0sWzgsMjldLFs4LDMwXSxbOCwzMF0sWzgsNDVdLFs4LDQ1XSxbOCw0Nl0sWzgsNDZdLFs3LDIyXSxbNywyMl0sWzcsMjJdLFs3LDIyXSxbNywyM10sWzcsMjNdLFs3LDIzXSxbNywyM10sWzgsNDddLFs4LDQ3XSxbOCw0OF0sWzgsNDhdLFs2LDEzXSxbNiwxM10sWzYsMTNdLFs2LDEzXSxbNiwxM10sWzYsMTNdLFs2LDEzXSxbNiwxM10sWzcsMjBdLFs3LDIwXSxbNywyMF0sWzcsMjBdLFs4LDMzXSxbOCwzM10sWzgsMzRdLFs4LDM0XSxbOCwzNV0sWzgsMzVdLFs4LDM2XSxbOCwzNl0sWzgsMzddLFs4LDM3XSxbOCwzOF0sWzgsMzhdLFs3LDE5XSxbNywxOV0sWzcsMTldLFs3LDE5XSxbOCwzMV0sWzgsMzFdLFs4LDMyXSxbOCwzMl0sWzYsMV0sWzYsMV0sWzYsMV0sWzYsMV0sWzYsMV0sWzYsMV0sWzYsMV0sWzYsMV0sWzYsMTJdLFs2LDEyXSxbNiwxMl0sWzYsMTJdLFs2LDEyXSxbNiwxMl0sWzYsMTJdLFs2LDEyXSxbOCw1M10sWzgsNTNdLFs4LDU0XSxbOCw1NF0sWzcsMjZdLFs3LDI2XSxbNywyNl0sWzcsMjZdLFs4LDM5XSxbOCwzOV0sWzgsNDBdLFs4LDQwXSxbOCw0MV0sWzgsNDFdLFs4LDQyXSxbOCw0Ml0sWzgsNDNdLFs4LDQzXSxbOCw0NF0sWzgsNDRdLFs3LDIxXSxbNywyMV0sWzcsMjFdLFs3LDIxXSxbNywyOF0sWzcsMjhdLFs3LDI4XSxbNywyOF0sWzgsNjFdLFs4LDYxXSxbOCw2Ml0sWzgsNjJdLFs4LDYzXSxbOCw2M10sWzgsMF0sWzgsMF0sWzgsMzIwXSxbOCwzMjBdLFs4LDM4NF0sWzgsMzg0XSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs3LDI3XSxbNywyN10sWzcsMjddLFs3LDI3XSxbOCw1OV0sWzgsNTldLFs4LDYwXSxbOCw2MF0sWzksMTQ3Ml0sWzksMTUzNl0sWzksMTYwMF0sWzksMTcyOF0sWzcsMThdLFs3LDE4XSxbNywxOF0sWzcsMThdLFs3LDI0XSxbNywyNF0sWzcsMjRdLFs3LDI0XSxbOCw0OV0sWzgsNDldLFs4LDUwXSxbOCw1MF0sWzgsNTFdLFs4LDUxXSxbOCw1Ml0sWzgsNTJdLFs3LDI1XSxbNywyNV0sWzcsMjVdLFs3LDI1XSxbOCw1NV0sWzgsNTVdLFs4LDU2XSxbOCw1Nl0sWzgsNTddLFs4LDU3XSxbOCw1OF0sWzgsNThdLFs2LDE5Ml0sWzYsMTkyXSxbNiwxOTJdLFs2LDE5Ml0sWzYsMTkyXSxbNiwxOTJdLFs2LDE5Ml0sWzYsMTkyXSxbNiwxNjY0XSxbNiwxNjY0XSxbNiwxNjY0XSxbNiwxNjY0XSxbNiwxNjY0XSxbNiwxNjY0XSxbNiwxNjY0XSxbNiwxNjY0XSxbOCw0NDhdLFs4LDQ0OF0sWzgsNTEyXSxbOCw1MTJdLFs5LDcwNF0sWzksNzY4XSxbOCw2NDBdLFs4LDY0MF0sWzgsNTc2XSxbOCw1NzZdLFs5LDgzMl0sWzksODk2XSxbOSw5NjBdLFs5LDEwMjRdLFs5LDEwODhdLFs5LDExNTJdLFs5LDEyMTZdLFs5LDEyODBdLFs5LDEzNDRdLFs5LDE0MDhdLFs3LDI1Nl0sWzcsMjU2XSxbNywyNTZdLFs3LDI1Nl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNiwxNl0sWzYsMTZdLFs2LDE2XSxbNiwxNl0sWzYsMTZdLFs2LDE2XSxbNiwxNl0sWzYsMTZdLFs2LDE3XSxbNiwxN10sWzYsMTddLFs2LDE3XSxbNiwxN10sWzYsMTddLFs2LDE3XSxbNiwxN10sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzYsMTRdLFs2LDE0XSxbNiwxNF0sWzYsMTRdLFs2LDE0XSxbNiwxNF0sWzYsMTRdLFs2LDE0XSxbNiwxNV0sWzYsMTVdLFs2LDE1XSxbNiwxNV0sWzYsMTVdLFs2LDE1XSxbNiwxNV0sWzYsMTVdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XV0sR3Q9W1stMSwtMV0sWy0xLC0xXSxbMTIsLTJdLFsxMiwtMl0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbMTEsMTc5Ml0sWzExLDE3OTJdLFsxMSwxNzkyXSxbMTEsMTc5Ml0sWzEyLDE5ODRdLFsxMiwxOTg0XSxbMTIsMjA0OF0sWzEyLDIwNDhdLFsxMiwyMTEyXSxbMTIsMjExMl0sWzEyLDIxNzZdLFsxMiwyMTc2XSxbMTIsMjI0MF0sWzEyLDIyNDBdLFsxMiwyMzA0XSxbMTIsMjMwNF0sWzExLDE4NTZdLFsxMSwxODU2XSxbMTEsMTg1Nl0sWzExLDE4NTZdLFsxMSwxOTIwXSxbMTEsMTkyMF0sWzExLDE5MjBdLFsxMSwxOTIwXSxbMTIsMjM2OF0sWzEyLDIzNjhdLFsxMiwyNDMyXSxbMTIsMjQzMl0sWzEyLDI0OTZdLFsxMiwyNDk2XSxbMTIsMjU2MF0sWzEyLDI1NjBdLFsxMCwxOF0sWzEwLDE4XSxbMTAsMThdLFsxMCwxOF0sWzEwLDE4XSxbMTAsMThdLFsxMCwxOF0sWzEwLDE4XSxbMTIsNTJdLFsxMiw1Ml0sWzEzLDY0MF0sWzEzLDcwNF0sWzEzLDc2OF0sWzEzLDgzMl0sWzEyLDU1XSxbMTIsNTVdLFsxMiw1Nl0sWzEyLDU2XSxbMTMsMTI4MF0sWzEzLDEzNDRdLFsxMywxNDA4XSxbMTMsMTQ3Ml0sWzEyLDU5XSxbMTIsNTldLFsxMiw2MF0sWzEyLDYwXSxbMTMsMTUzNl0sWzEzLDE2MDBdLFsxMSwyNF0sWzExLDI0XSxbMTEsMjRdLFsxMSwyNF0sWzExLDI1XSxbMTEsMjVdLFsxMSwyNV0sWzExLDI1XSxbMTMsMTY2NF0sWzEzLDE3MjhdLFsxMiwzMjBdLFsxMiwzMjBdLFsxMiwzODRdLFsxMiwzODRdLFsxMiw0NDhdLFsxMiw0NDhdLFsxMyw1MTJdLFsxMyw1NzZdLFsxMiw1M10sWzEyLDUzXSxbMTIsNTRdLFsxMiw1NF0sWzEzLDg5Nl0sWzEzLDk2MF0sWzEzLDEwMjRdLFsxMywxMDg4XSxbMTMsMTE1Ml0sWzEzLDEyMTZdLFsxMCw2NF0sWzEwLDY0XSxbMTAsNjRdLFsxMCw2NF0sWzEwLDY0XSxbMTAsNjRdLFsxMCw2NF0sWzEwLDY0XV0sTXQ9W1s4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbMTEsMjNdLFsxMSwyM10sWzEyLDUwXSxbMTIsNTFdLFsxMiw0NF0sWzEyLDQ1XSxbMTIsNDZdLFsxMiw0N10sWzEyLDU3XSxbMTIsNThdLFsxMiw2MV0sWzEyLDI1Nl0sWzEwLDE2XSxbMTAsMTZdLFsxMCwxNl0sWzEwLDE2XSxbMTAsMTddLFsxMCwxN10sWzEwLDE3XSxbMTAsMTddLFsxMiw0OF0sWzEyLDQ5XSxbMTIsNjJdLFsxMiw2M10sWzEyLDMwXSxbMTIsMzFdLFsxMiwzMl0sWzEyLDMzXSxbMTIsNDBdLFsxMiw0MV0sWzExLDIyXSxbMTEsMjJdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzksMTVdLFs5LDE1XSxbOSwxNV0sWzksMTVdLFs5LDE1XSxbOSwxNV0sWzksMTVdLFs5LDE1XSxbMTIsMTI4XSxbMTIsMTkyXSxbMTIsMjZdLFsxMiwyN10sWzEyLDI4XSxbMTIsMjldLFsxMSwxOV0sWzExLDE5XSxbMTEsMjBdLFsxMSwyMF0sWzEyLDM0XSxbMTIsMzVdLFsxMiwzNl0sWzEyLDM3XSxbMTIsMzhdLFsxMiwzOV0sWzExLDIxXSxbMTEsMjFdLFsxMiw0Ml0sWzEyLDQzXSxbMTAsMF0sWzEwLDBdLFsxMCwwXSxbMTAsMF0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXV0sVXQ9W1stMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWzYsOV0sWzYsOF0sWzUsN10sWzUsN10sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl1dO2NsYXNzIENDSVRURmF4RGVjb2Rlcntjb25zdHJ1Y3RvcihlLHQ9e30pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlPy5uZXh0KXRocm93IG5ldyBFcnJvcignQ0NJVFRGYXhEZWNvZGVyIC0gaW52YWxpZCAic291cmNlIiBwYXJhbWV0ZXIuJyk7dGhpcy5zb3VyY2U9ZTt0aGlzLmVvZj0hMTt0aGlzLmVuY29kaW5nPXQuS3x8MDt0aGlzLmVvbGluZT10LkVuZE9mTGluZXx8ITE7dGhpcy5ieXRlQWxpZ249dC5FbmNvZGVkQnl0ZUFsaWdufHwhMTt0aGlzLmNvbHVtbnM9dC5Db2x1bW5zfHwxNzI4O3RoaXMucm93cz10LlJvd3N8fDA7dGhpcy5lb2Jsb2NrPXQuRW5kT2ZCbG9jaz8/ITA7dGhpcy5ibGFjaz10LkJsYWNrSXMxfHwhMTt0aGlzLmNvZGluZ0xpbmU9bmV3IFVpbnQzMkFycmF5KHRoaXMuY29sdW1ucysxKTt0aGlzLnJlZkxpbmU9bmV3IFVpbnQzMkFycmF5KHRoaXMuY29sdW1ucysyKTt0aGlzLmNvZGluZ0xpbmVbMF09dGhpcy5jb2x1bW5zO3RoaXMuY29kaW5nUG9zPTA7dGhpcy5yb3c9MDt0aGlzLm5leHRMaW5lMkQ9dGhpcy5lbmNvZGluZzwwO3RoaXMuaW5wdXRCaXRzPTA7dGhpcy5pbnB1dEJ1Zj0wO3RoaXMub3V0cHV0Qml0cz0wO3RoaXMucm93c0RvbmU9ITE7bGV0IGk7Zm9yKDswPT09KGk9dGhpcy5fbG9va0JpdHMoMTIpKTspdGhpcy5fZWF0Qml0cygxKTsxPT09aSYmdGhpcy5fZWF0Qml0cygxMik7aWYodGhpcy5lbmNvZGluZz4wKXt0aGlzLm5leHRMaW5lMkQ9IXRoaXMuX2xvb2tCaXRzKDEpO3RoaXMuX2VhdEJpdHMoMSl9fXJlYWROZXh0Q2hhcigpe2lmKHRoaXMuZW9mKXJldHVybi0xO2NvbnN0IGU9dGhpcy5yZWZMaW5lLHQ9dGhpcy5jb2RpbmdMaW5lLGk9dGhpcy5jb2x1bW5zO2xldCBhLHIscyxuLG87aWYoMD09PXRoaXMub3V0cHV0Qml0cyl7dGhpcy5yb3dzRG9uZSYmKHRoaXMuZW9mPSEwKTtpZih0aGlzLmVvZilyZXR1cm4tMTt0aGlzLmVycj0hMTtsZXQgcyxvLGc7aWYodGhpcy5uZXh0TGluZTJEKXtmb3Iobj0wO3Rbbl08aTsrK24pZVtuXT10W25dO2VbbisrXT1pO2Vbbl09aTt0WzBdPTA7dGhpcy5jb2RpbmdQb3M9MDthPTA7cj0wO2Zvcig7dFt0aGlzLmNvZGluZ1Bvc108aTspe3M9dGhpcy5fZ2V0VHdvRGltQ29kZSgpO3N3aXRjaChzKXtjYXNlIDA6dGhpcy5fYWRkUGl4ZWxzKGVbYSsxXSxyKTtlW2ErMV08aSYmKGErPTIpO2JyZWFrO2Nhc2UgMTpzPW89MDtpZihyKXtkb3tzKz1nPXRoaXMuX2dldEJsYWNrQ29kZSgpfXdoaWxlKGc+PTY0KTtkb3tvKz1nPXRoaXMuX2dldFdoaXRlQ29kZSgpfXdoaWxlKGc+PTY0KX1lbHNle2Rve3MrPWc9dGhpcy5fZ2V0V2hpdGVDb2RlKCl9d2hpbGUoZz49NjQpO2Rve28rPWc9dGhpcy5fZ2V0QmxhY2tDb2RlKCl9d2hpbGUoZz49NjQpfXRoaXMuX2FkZFBpeGVscyh0W3RoaXMuY29kaW5nUG9zXStzLHIpO3RbdGhpcy5jb2RpbmdQb3NdPGkmJnRoaXMuX2FkZFBpeGVscyh0W3RoaXMuY29kaW5nUG9zXStvLDFecik7Zm9yKDtlW2FdPD10W3RoaXMuY29kaW5nUG9zXSYmZVthXTxpOylhKz0yO2JyZWFrO2Nhc2UgNzp0aGlzLl9hZGRQaXhlbHMoZVthXSszLHIpO3JePTE7aWYodFt0aGlzLmNvZGluZ1Bvc108aSl7KythO2Zvcig7ZVthXTw9dFt0aGlzLmNvZGluZ1Bvc10mJmVbYV08aTspYSs9Mn1icmVhaztjYXNlIDU6dGhpcy5fYWRkUGl4ZWxzKGVbYV0rMixyKTtyXj0xO2lmKHRbdGhpcy5jb2RpbmdQb3NdPGkpeysrYTtmb3IoO2VbYV08PXRbdGhpcy5jb2RpbmdQb3NdJiZlW2FdPGk7KWErPTJ9YnJlYWs7Y2FzZSAzOnRoaXMuX2FkZFBpeGVscyhlW2FdKzEscik7cl49MTtpZih0W3RoaXMuY29kaW5nUG9zXTxpKXsrK2E7Zm9yKDtlW2FdPD10W3RoaXMuY29kaW5nUG9zXSYmZVthXTxpOylhKz0yfWJyZWFrO2Nhc2UgMjp0aGlzLl9hZGRQaXhlbHMoZVthXSxyKTtyXj0xO2lmKHRbdGhpcy5jb2RpbmdQb3NdPGkpeysrYTtmb3IoO2VbYV08PXRbdGhpcy5jb2RpbmdQb3NdJiZlW2FdPGk7KWErPTJ9YnJlYWs7Y2FzZSA4OnRoaXMuX2FkZFBpeGVsc05lZyhlW2FdLTMscik7cl49MTtpZih0W3RoaXMuY29kaW5nUG9zXTxpKXthPjA/LS1hOisrYTtmb3IoO2VbYV08PXRbdGhpcy5jb2RpbmdQb3NdJiZlW2FdPGk7KWErPTJ9YnJlYWs7Y2FzZSA2OnRoaXMuX2FkZFBpeGVsc05lZyhlW2FdLTIscik7cl49MTtpZih0W3RoaXMuY29kaW5nUG9zXTxpKXthPjA/LS1hOisrYTtmb3IoO2VbYV08PXRbdGhpcy5jb2RpbmdQb3NdJiZlW2FdPGk7KWErPTJ9YnJlYWs7Y2FzZSA0OnRoaXMuX2FkZFBpeGVsc05lZyhlW2FdLTEscik7cl49MTtpZih0W3RoaXMuY29kaW5nUG9zXTxpKXthPjA/LS1hOisrYTtmb3IoO2VbYV08PXRbdGhpcy5jb2RpbmdQb3NdJiZlW2FdPGk7KWErPTJ9YnJlYWs7Y2FzZSBTdDp0aGlzLl9hZGRQaXhlbHMoaSwwKTt0aGlzLmVvZj0hMDticmVhaztkZWZhdWx0OmluZm8oImJhZCAyZCBjb2RlIik7dGhpcy5fYWRkUGl4ZWxzKGksMCk7dGhpcy5lcnI9ITB9fX1lbHNle3RbMF09MDt0aGlzLmNvZGluZ1Bvcz0wO3I9MDtmb3IoO3RbdGhpcy5jb2RpbmdQb3NdPGk7KXtzPTA7aWYocilkb3tzKz1nPXRoaXMuX2dldEJsYWNrQ29kZSgpfXdoaWxlKGc+PTY0KTtlbHNlIGRve3MrPWc9dGhpcy5fZ2V0V2hpdGVDb2RlKCl9d2hpbGUoZz49NjQpO3RoaXMuX2FkZFBpeGVscyh0W3RoaXMuY29kaW5nUG9zXStzLHIpO3JePTF9fWxldCBjPSExO3RoaXMuYnl0ZUFsaWduJiYodGhpcy5pbnB1dEJpdHMmPS04KTtpZih0aGlzLmVvYmxvY2t8fHRoaXMucm93IT09dGhpcy5yb3dzLTEpe3M9dGhpcy5fbG9va0JpdHMoMTIpO2lmKHRoaXMuZW9saW5lKWZvcig7cyE9PVN0JiYxIT09czspe3RoaXMuX2VhdEJpdHMoMSk7cz10aGlzLl9sb29rQml0cygxMil9ZWxzZSBmb3IoOzA9PT1zOyl7dGhpcy5fZWF0Qml0cygxKTtzPXRoaXMuX2xvb2tCaXRzKDEyKX1pZigxPT09cyl7dGhpcy5fZWF0Qml0cygxMik7Yz0hMH1lbHNlIHM9PT1TdCYmKHRoaXMuZW9mPSEwKX1lbHNlIHRoaXMucm93c0RvbmU9ITA7aWYoIXRoaXMuZW9mJiZ0aGlzLmVuY29kaW5nPjAmJiF0aGlzLnJvd3NEb25lKXt0aGlzLm5leHRMaW5lMkQ9IXRoaXMuX2xvb2tCaXRzKDEpO3RoaXMuX2VhdEJpdHMoMSl9aWYodGhpcy5lb2Jsb2NrJiZjJiZ0aGlzLmJ5dGVBbGlnbil7cz10aGlzLl9sb29rQml0cygxMik7aWYoMT09PXMpe3RoaXMuX2VhdEJpdHMoMTIpO2lmKHRoaXMuZW5jb2Rpbmc+MCl7dGhpcy5fbG9va0JpdHMoMSk7dGhpcy5fZWF0Qml0cygxKX1pZih0aGlzLmVuY29kaW5nPj0wKWZvcihuPTA7bjw0Oysrbil7cz10aGlzLl9sb29rQml0cygxMik7MSE9PXMmJmluZm8oImJhZCBydGMgY29kZTogIitzKTt0aGlzLl9lYXRCaXRzKDEyKTtpZih0aGlzLmVuY29kaW5nPjApe3RoaXMuX2xvb2tCaXRzKDEpO3RoaXMuX2VhdEJpdHMoMSl9fXRoaXMuZW9mPSEwfX1lbHNlIGlmKHRoaXMuZXJyJiZ0aGlzLmVvbGluZSl7Zm9yKDs7KXtzPXRoaXMuX2xvb2tCaXRzKDEzKTtpZihzPT09U3Qpe3RoaXMuZW9mPSEwO3JldHVybi0xfWlmKHM+PjE9PTEpYnJlYWs7dGhpcy5fZWF0Qml0cygxKX10aGlzLl9lYXRCaXRzKDEyKTtpZih0aGlzLmVuY29kaW5nPjApe3RoaXMuX2VhdEJpdHMoMSk7dGhpcy5uZXh0TGluZTJEPSEoMSZzKX19dGhpcy5vdXRwdXRCaXRzPXRbMF0+MD90W3RoaXMuY29kaW5nUG9zPTBdOnRbdGhpcy5jb2RpbmdQb3M9MV07dGhpcy5yb3crK31pZih0aGlzLm91dHB1dEJpdHM+PTgpe289MSZ0aGlzLmNvZGluZ1Bvcz8wOjI1NTt0aGlzLm91dHB1dEJpdHMtPTg7aWYoMD09PXRoaXMub3V0cHV0Qml0cyYmdFt0aGlzLmNvZGluZ1Bvc108aSl7dGhpcy5jb2RpbmdQb3MrKzt0aGlzLm91dHB1dEJpdHM9dFt0aGlzLmNvZGluZ1Bvc10tdFt0aGlzLmNvZGluZ1Bvcy0xXX19ZWxzZXtzPTg7bz0wO2Rve2lmKCJudW1iZXIiIT10eXBlb2YgdGhpcy5vdXRwdXRCaXRzKXRocm93IG5ldyBGb3JtYXRFcnJvcignSW52YWxpZCAvQ0NJVFRGYXhEZWNvZGUgZGF0YSwgIm91dHB1dEJpdHMiIG11c3QgYmUgYSBudW1iZXIuJyk7aWYodGhpcy5vdXRwdXRCaXRzPnMpe288PD1zOzEmdGhpcy5jb2RpbmdQb3N8fChvfD0yNTU+Pjgtcyk7dGhpcy5vdXRwdXRCaXRzLT1zO3M9MH1lbHNle288PD10aGlzLm91dHB1dEJpdHM7MSZ0aGlzLmNvZGluZ1Bvc3x8KG98PTI1NT4+OC10aGlzLm91dHB1dEJpdHMpO3MtPXRoaXMub3V0cHV0Qml0czt0aGlzLm91dHB1dEJpdHM9MDtpZih0W3RoaXMuY29kaW5nUG9zXTxpKXt0aGlzLmNvZGluZ1BvcysrO3RoaXMub3V0cHV0Qml0cz10W3RoaXMuY29kaW5nUG9zXS10W3RoaXMuY29kaW5nUG9zLTFdfWVsc2UgaWYocz4wKXtvPDw9cztzPTB9fX13aGlsZShzKX10aGlzLmJsYWNrJiYob149MjU1KTtyZXR1cm4gb31fYWRkUGl4ZWxzKGUsdCl7Y29uc3QgaT10aGlzLmNvZGluZ0xpbmU7bGV0IGE9dGhpcy5jb2RpbmdQb3M7aWYoZT5pW2FdKXtpZihlPnRoaXMuY29sdW1ucyl7aW5mbygicm93IGlzIHdyb25nIGxlbmd0aCIpO3RoaXMuZXJyPSEwO2U9dGhpcy5jb2x1bW5zfTEmYV50JiYrK2E7aVthXT1lfXRoaXMuY29kaW5nUG9zPWF9X2FkZFBpeGVsc05lZyhlLHQpe2NvbnN0IGk9dGhpcy5jb2RpbmdMaW5lO2xldCBhPXRoaXMuY29kaW5nUG9zO2lmKGU+aVthXSl7aWYoZT50aGlzLmNvbHVtbnMpe2luZm8oInJvdyBpcyB3cm9uZyBsZW5ndGgiKTt0aGlzLmVycj0hMDtlPXRoaXMuY29sdW1uc30xJmFedCYmKythO2lbYV09ZX1lbHNlIGlmKGU8aVthXSl7aWYoZTwwKXtpbmZvKCJpbnZhbGlkIGNvZGUiKTt0aGlzLmVycj0hMDtlPTB9Zm9yKDthPjAmJmU8aVthLTFdOyktLWE7aVthXT1lfXRoaXMuY29kaW5nUG9zPWF9X2ZpbmRUYWJsZUNvZGUoZSx0LGksYSl7Y29uc3Qgcj1hfHwwO2ZvcihsZXQgYT1lO2E8PXQ7KythKXtsZXQgZT10aGlzLl9sb29rQml0cyhhKTtpZihlPT09U3QpcmV0dXJuWyEwLDEsITFdO2E8dCYmKGU8PD10LWEpO2lmKCFyfHxlPj1yKXtjb25zdCB0PWlbZS1yXTtpZih0WzBdPT09YSl7dGhpcy5fZWF0Qml0cyhhKTtyZXR1cm5bITAsdFsxXSwhMF19fX1yZXR1cm5bITEsMCwhMV19X2dldFR3b0RpbUNvZGUoKXtsZXQgZSx0PTA7aWYodGhpcy5lb2Jsb2NrKXt0PXRoaXMuX2xvb2tCaXRzKDcpO2U9a3RbdF07aWYoZT8uWzBdPjApe3RoaXMuX2VhdEJpdHMoZVswXSk7cmV0dXJuIGVbMV19fWVsc2V7Y29uc3QgZT10aGlzLl9maW5kVGFibGVDb2RlKDEsNyxrdCk7aWYoZVswXSYmZVsyXSlyZXR1cm4gZVsxXX1pbmZvKCJCYWQgdHdvIGRpbSBjb2RlIik7cmV0dXJuIFN0fV9nZXRXaGl0ZUNvZGUoKXtsZXQgZSx0PTA7aWYodGhpcy5lb2Jsb2NrKXt0PXRoaXMuX2xvb2tCaXRzKDEyKTtpZih0PT09U3QpcmV0dXJuIDE7ZT10Pj41P050W3Q+PjNdOlJ0W3RdO2lmKGVbMF0+MCl7dGhpcy5fZWF0Qml0cyhlWzBdKTtyZXR1cm4gZVsxXX19ZWxzZXtsZXQgZT10aGlzLl9maW5kVGFibGVDb2RlKDEsOSxOdCk7aWYoZVswXSlyZXR1cm4gZVsxXTtlPXRoaXMuX2ZpbmRUYWJsZUNvZGUoMTEsMTIsUnQpO2lmKGVbMF0pcmV0dXJuIGVbMV19aW5mbygiYmFkIHdoaXRlIGNvZGUiKTt0aGlzLl9lYXRCaXRzKDEpO3JldHVybiAxfV9nZXRCbGFja0NvZGUoKXtsZXQgZSx0O2lmKHRoaXMuZW9ibG9jayl7ZT10aGlzLl9sb29rQml0cygxMyk7aWYoZT09PVN0KXJldHVybiAxO3Q9ZT4+Nz8hKGU+PjkpJiZlPj43P010WyhlPj4xKS02NF06VXRbZT4+N106R3RbZV07aWYodFswXT4wKXt0aGlzLl9lYXRCaXRzKHRbMF0pO3JldHVybiB0WzFdfX1lbHNle2xldCBlPXRoaXMuX2ZpbmRUYWJsZUNvZGUoMiw2LFV0KTtpZihlWzBdKXJldHVybiBlWzFdO2U9dGhpcy5fZmluZFRhYmxlQ29kZSg3LDEyLE10LDY0KTtpZihlWzBdKXJldHVybiBlWzFdO2U9dGhpcy5fZmluZFRhYmxlQ29kZSgxMCwxMyxHdCk7aWYoZVswXSlyZXR1cm4gZVsxXX1pbmZvKCJiYWQgYmxhY2sgY29kZSIpO3RoaXMuX2VhdEJpdHMoMSk7cmV0dXJuIDF9X2xvb2tCaXRzKGUpe2xldCB0O2Zvcig7dGhpcy5pbnB1dEJpdHM8ZTspe2lmKC0xPT09KHQ9dGhpcy5zb3VyY2UubmV4dCgpKSlyZXR1cm4gMD09PXRoaXMuaW5wdXRCaXRzP1N0OnRoaXMuaW5wdXRCdWY8PGUtdGhpcy5pbnB1dEJpdHMmNjU1MzU+PjE2LWU7dGhpcy5pbnB1dEJ1Zj10aGlzLmlucHV0QnVmPDw4fHQ7dGhpcy5pbnB1dEJpdHMrPTh9cmV0dXJuIHRoaXMuaW5wdXRCdWY+PnRoaXMuaW5wdXRCaXRzLWUmNjU1MzU+PjE2LWV9X2VhdEJpdHMoZSl7KHRoaXMuaW5wdXRCaXRzLT1lKTwwJiYodGhpcy5pbnB1dEJpdHM9MCl9fWNsYXNzIENDSVRURmF4U3RyZWFtIGV4dGVuZHMgRGVjb2RlU3RyZWFte2NvbnN0cnVjdG9yKGUsdCxpKXtzdXBlcih0KTt0aGlzLnN0cj1lO3RoaXMuZGljdD1lLmRpY3Q7aSBpbnN0YW5jZW9mIERpY3R8fChpPURpY3QuZW1wdHkpO2NvbnN0IGE9e25leHQ6KCk9PmUuZ2V0Qnl0ZSgpfTt0aGlzLmNjaXR0RmF4RGVjb2Rlcj1uZXcgQ0NJVFRGYXhEZWNvZGVyKGEse0s6aS5nZXQoIksiKSxFbmRPZkxpbmU6aS5nZXQoIkVuZE9mTGluZSIpLEVuY29kZWRCeXRlQWxpZ246aS5nZXQoIkVuY29kZWRCeXRlQWxpZ24iKSxDb2x1bW5zOmkuZ2V0KCJDb2x1bW5zIiksUm93czppLmdldCgiUm93cyIpLEVuZE9mQmxvY2s6aS5nZXQoIkVuZE9mQmxvY2siKSxCbGFja0lzMTppLmdldCgiQmxhY2tJczEiKX0pfXJlYWRCbG9jaygpe2Zvcig7IXRoaXMuZW9mOyl7Y29uc3QgZT10aGlzLmNjaXR0RmF4RGVjb2Rlci5yZWFkTmV4dENoYXIoKTtpZigtMT09PWUpe3RoaXMuZW9mPSEwO3JldHVybn10aGlzLmVuc3VyZUJ1ZmZlcih0aGlzLmJ1ZmZlckxlbmd0aCsxKTt0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlckxlbmd0aCsrXT1lfX19Y29uc3QgeHQ9bmV3IEludDMyQXJyYXkoWzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdKSxMdD1uZXcgSW50MzJBcnJheShbMyw0LDUsNiw3LDgsOSwxMCw2NTU0Nyw2NTU0OSw2NTU1MSw2NTU1MywxMzEwOTEsMTMxMDk1LDEzMTA5OSwxMzExMDMsMTk2NjQzLDE5NjY1MSwxOTY2NTksMTk2NjY3LDI2MjIxMSwyNjIyMjcsMjYyMjQzLDI2MjI1OSwzMjc4MTEsMzI3ODQzLDMyNzg3NSwzMjc5MDcsMjU4LDI1OCwyNThdKSxIdD1uZXcgSW50MzJBcnJheShbMSwyLDMsNCw2NTU0MSw2NTU0MywxMzEwODEsMTMxMDg1LDE5NjYyNSwxOTY2MzMsMjYyMTc3LDI2MjE5MywzMjc3NDUsMzI3Nzc3LDM5MzM0NSwzOTM0MDksNDU5MDA5LDQ1OTEzNyw1MjQ4MDEsNTI1MDU3LDU5MDg0OSw1OTEzNjEsNjU3NDA5LDY1ODQzMyw3MjQ5OTMsNzI3MDQxLDc5NDYyNSw3OTg3MjEsODY4MzUzLDg3NjU0NV0pLEp0PVtuZXcgSW50MzJBcnJheShbNDU5MDA4LDUyNDM2OCw1MjQzMDQsNTI0NTY4LDQ1OTAyNCw1MjQ0MDAsNTI0MzM2LDU5MDAxNiw0NTkwMTYsNTI0Mzg0LDUyNDMyMCw1ODk5ODQsNTI0Mjg4LDUyNDQxNiw1MjQzNTIsNTkwMDQ4LDQ1OTAxMiw1MjQzNzYsNTI0MzEyLDU4OTk2OCw0NTkwMjgsNTI0NDA4LDUyNDM0NCw1OTAwMzIsNDU5MDIwLDUyNDM5Miw1MjQzMjgsNTllNCw1MjQyOTYsNTI0NDI0LDUyNDM2MCw1OTAwNjQsNDU5MDEwLDUyNDM3Miw1MjQzMDgsNTI0NTcyLDQ1OTAyNiw1MjQ0MDQsNTI0MzQwLDU5MDAyNCw0NTkwMTgsNTI0Mzg4LDUyNDMyNCw1ODk5OTIsNTI0MjkyLDUyNDQyMCw1MjQzNTYsNTkwMDU2LDQ1OTAxNCw1MjQzODAsNTI0MzE2LDU4OTk3Niw0NTkwMzAsNTI0NDEyLDUyNDM0OCw1OTAwNDAsNDU5MDIyLDUyNDM5Niw1MjQzMzIsNTkwMDA4LDUyNDMwMCw1MjQ0MjgsNTI0MzY0LDU5MDA3Miw0NTkwMDksNTI0MzcwLDUyNDMwNiw1MjQ1NzAsNDU5MDI1LDUyNDQwMiw1MjQzMzgsNTkwMDIwLDQ1OTAxNyw1MjQzODYsNTI0MzIyLDU4OTk4OCw1MjQyOTAsNTI0NDE4LDUyNDM1NCw1OTAwNTIsNDU5MDEzLDUyNDM3OCw1MjQzMTQsNTg5OTcyLDQ1OTAyOSw1MjQ0MTAsNTI0MzQ2LDU5MDAzNiw0NTkwMjEsNTI0Mzk0LDUyNDMzMCw1OTAwMDQsNTI0Mjk4LDUyNDQyNiw1MjQzNjIsNTkwMDY4LDQ1OTAxMSw1MjQzNzQsNTI0MzEwLDUyNDU3NCw0NTkwMjcsNTI0NDA2LDUyNDM0Miw1OTAwMjgsNDU5MDE5LDUyNDM5MCw1MjQzMjYsNTg5OTk2LDUyNDI5NCw1MjQ0MjIsNTI0MzU4LDU5MDA2MCw0NTkwMTUsNTI0MzgyLDUyNDMxOCw1ODk5ODAsNDU5MDMxLDUyNDQxNCw1MjQzNTAsNTkwMDQ0LDQ1OTAyMyw1MjQzOTgsNTI0MzM0LDU5MDAxMiw1MjQzMDIsNTI0NDMwLDUyNDM2Niw1OTAwNzYsNDU5MDA4LDUyNDM2OSw1MjQzMDUsNTI0NTY5LDQ1OTAyNCw1MjQ0MDEsNTI0MzM3LDU5MDAxOCw0NTkwMTYsNTI0Mzg1LDUyNDMyMSw1ODk5ODYsNTI0Mjg5LDUyNDQxNyw1MjQzNTMsNTkwMDUwLDQ1OTAxMiw1MjQzNzcsNTI0MzEzLDU4OTk3MCw0NTkwMjgsNTI0NDA5LDUyNDM0NSw1OTAwMzQsNDU5MDIwLDUyNDM5Myw1MjQzMjksNTkwMDAyLDUyNDI5Nyw1MjQ0MjUsNTI0MzYxLDU5MDA2Niw0NTkwMTAsNTI0MzczLDUyNDMwOSw1MjQ1NzMsNDU5MDI2LDUyNDQwNSw1MjQzNDEsNTkwMDI2LDQ1OTAxOCw1MjQzODksNTI0MzI1LDU4OTk5NCw1MjQyOTMsNTI0NDIxLDUyNDM1Nyw1OTAwNTgsNDU5MDE0LDUyNDM4MSw1MjQzMTcsNTg5OTc4LDQ1OTAzMCw1MjQ0MTMsNTI0MzQ5LDU5MDA0Miw0NTkwMjIsNTI0Mzk3LDUyNDMzMyw1OTAwMTAsNTI0MzAxLDUyNDQyOSw1MjQzNjUsNTkwMDc0LDQ1OTAwOSw1MjQzNzEsNTI0MzA3LDUyNDU3MSw0NTkwMjUsNTI0NDAzLDUyNDMzOSw1OTAwMjIsNDU5MDE3LDUyNDM4Nyw1MjQzMjMsNTg5OTkwLDUyNDI5MSw1MjQ0MTksNTI0MzU1LDU5MDA1NCw0NTkwMTMsNTI0Mzc5LDUyNDMxNSw1ODk5NzQsNDU5MDI5LDUyNDQxMSw1MjQzNDcsNTkwMDM4LDQ1OTAyMSw1MjQzOTUsNTI0MzMxLDU5MDAwNiw1MjQyOTksNTI0NDI3LDUyNDM2Myw1OTAwNzAsNDU5MDExLDUyNDM3NSw1MjQzMTEsNTI0NTc1LDQ1OTAyNyw1MjQ0MDcsNTI0MzQzLDU5MDAzMCw0NTkwMTksNTI0MzkxLDUyNDMyNyw1ODk5OTgsNTI0Mjk1LDUyNDQyMyw1MjQzNTksNTkwMDYyLDQ1OTAxNSw1MjQzODMsNTI0MzE5LDU4OTk4Miw0NTkwMzEsNTI0NDE1LDUyNDM1MSw1OTAwNDYsNDU5MDIzLDUyNDM5OSw1MjQzMzUsNTkwMDE0LDUyNDMwMyw1MjQ0MzEsNTI0MzY3LDU5MDA3OCw0NTkwMDgsNTI0MzY4LDUyNDMwNCw1MjQ1NjgsNDU5MDI0LDUyNDQwMCw1MjQzMzYsNTkwMDE3LDQ1OTAxNiw1MjQzODQsNTI0MzIwLDU4OTk4NSw1MjQyODgsNTI0NDE2LDUyNDM1Miw1OTAwNDksNDU5MDEyLDUyNDM3Niw1MjQzMTIsNTg5OTY5LDQ1OTAyOCw1MjQ0MDgsNTI0MzQ0LDU5MDAzMyw0NTkwMjAsNTI0MzkyLDUyNDMyOCw1OTAwMDEsNTI0Mjk2LDUyNDQyNCw1MjQzNjAsNTkwMDY1LDQ1OTAxMCw1MjQzNzIsNTI0MzA4LDUyNDU3Miw0NTkwMjYsNTI0NDA0LDUyNDM0MCw1OTAwMjUsNDU5MDE4LDUyNDM4OCw1MjQzMjQsNTg5OTkzLDUyNDI5Miw1MjQ0MjAsNTI0MzU2LDU5MDA1Nyw0NTkwMTQsNTI0MzgwLDUyNDMxNiw1ODk5NzcsNDU5MDMwLDUyNDQxMiw1MjQzNDgsNTkwMDQxLDQ1OTAyMiw1MjQzOTYsNTI0MzMyLDU5MDAwOSw1MjQzMDAsNTI0NDI4LDUyNDM2NCw1OTAwNzMsNDU5MDA5LDUyNDM3MCw1MjQzMDYsNTI0NTcwLDQ1OTAyNSw1MjQ0MDIsNTI0MzM4LDU5MDAyMSw0NTkwMTcsNTI0Mzg2LDUyNDMyMiw1ODk5ODksNTI0MjkwLDUyNDQxOCw1MjQzNTQsNTkwMDUzLDQ1OTAxMyw1MjQzNzgsNTI0MzE0LDU4OTk3Myw0NTkwMjksNTI0NDEwLDUyNDM0Niw1OTAwMzcsNDU5MDIxLDUyNDM5NCw1MjQzMzAsNTkwMDA1LDUyNDI5OCw1MjQ0MjYsNTI0MzYyLDU5MDA2OSw0NTkwMTEsNTI0Mzc0LDUyNDMxMCw1MjQ1NzQsNDU5MDI3LDUyNDQwNiw1MjQzNDIsNTkwMDI5LDQ1OTAxOSw1MjQzOTAsNTI0MzI2LDU4OTk5Nyw1MjQyOTQsNTI0NDIyLDUyNDM1OCw1OTAwNjEsNDU5MDE1LDUyNDM4Miw1MjQzMTgsNTg5OTgxLDQ1OTAzMSw1MjQ0MTQsNTI0MzUwLDU5MDA0NSw0NTkwMjMsNTI0Mzk4LDUyNDMzNCw1OTAwMTMsNTI0MzAyLDUyNDQzMCw1MjQzNjYsNTkwMDc3LDQ1OTAwOCw1MjQzNjksNTI0MzA1LDUyNDU2OSw0NTkwMjQsNTI0NDAxLDUyNDMzNyw1OTAwMTksNDU5MDE2LDUyNDM4NSw1MjQzMjEsNTg5OTg3LDUyNDI4OSw1MjQ0MTcsNTI0MzUzLDU5MDA1MSw0NTkwMTIsNTI0Mzc3LDUyNDMxMyw1ODk5NzEsNDU5MDI4LDUyNDQwOSw1MjQzNDUsNTkwMDM1LDQ1OTAyMCw1MjQzOTMsNTI0MzI5LDU5MDAwMyw1MjQyOTcsNTI0NDI1LDUyNDM2MSw1OTAwNjcsNDU5MDEwLDUyNDM3Myw1MjQzMDksNTI0NTczLDQ1OTAyNiw1MjQ0MDUsNTI0MzQxLDU5MDAyNyw0NTkwMTgsNTI0Mzg5LDUyNDMyNSw1ODk5OTUsNTI0MjkzLDUyNDQyMSw1MjQzNTcsNTkwMDU5LDQ1OTAxNCw1MjQzODEsNTI0MzE3LDU4OTk3OSw0NTkwMzAsNTI0NDEzLDUyNDM0OSw1OTAwNDMsNDU5MDIyLDUyNDM5Nyw1MjQzMzMsNTkwMDExLDUyNDMwMSw1MjQ0MjksNTI0MzY1LDU5MDA3NSw0NTkwMDksNTI0MzcxLDUyNDMwNyw1MjQ1NzEsNDU5MDI1LDUyNDQwMyw1MjQzMzksNTkwMDIzLDQ1OTAxNyw1MjQzODcsNTI0MzIzLDU4OTk5MSw1MjQyOTEsNTI0NDE5LDUyNDM1NSw1OTAwNTUsNDU5MDEzLDUyNDM3OSw1MjQzMTUsNTg5OTc1LDQ1OTAyOSw1MjQ0MTEsNTI0MzQ3LDU5MDAzOSw0NTkwMjEsNTI0Mzk1LDUyNDMzMSw1OTAwMDcsNTI0Mjk5LDUyNDQyNyw1MjQzNjMsNTkwMDcxLDQ1OTAxMSw1MjQzNzUsNTI0MzExLDUyNDU3NSw0NTkwMjcsNTI0NDA3LDUyNDM0Myw1OTAwMzEsNDU5MDE5LDUyNDM5MSw1MjQzMjcsNTg5OTk5LDUyNDI5NSw1MjQ0MjMsNTI0MzU5LDU5MDA2Myw0NTkwMTUsNTI0MzgzLDUyNDMxOSw1ODk5ODMsNDU5MDMxLDUyNDQxNSw1MjQzNTEsNTkwMDQ3LDQ1OTAyMyw1MjQzOTksNTI0MzM1LDU5MDAxNSw1MjQzMDMsNTI0NDMxLDUyNDM2Nyw1OTAwNzldKSw5XSx2dD1bbmV3IEludDMyQXJyYXkoWzMyNzY4MCwzMjc2OTYsMzI3Njg4LDMyNzcwNCwzMjc2ODQsMzI3NzAwLDMyNzY5MiwzMjc3MDgsMzI3NjgyLDMyNzY5OCwzMjc2OTAsMzI3NzA2LDMyNzY4NiwzMjc3MDIsMzI3Njk0LDAsMzI3NjgxLDMyNzY5NywzMjc2ODksMzI3NzA1LDMyNzY4NSwzMjc3MDEsMzI3NjkzLDMyNzcwOSwzMjc2ODMsMzI3Njk5LDMyNzY5MSwzMjc3MDcsMzI3Njg3LDMyNzcwMywzMjc2OTUsMF0pLDVdO2NsYXNzIEZsYXRlU3RyZWFtIGV4dGVuZHMgRGVjb2RlU3RyZWFte2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIodCk7dGhpcy5zdHI9ZTt0aGlzLmRpY3Q9ZS5kaWN0O2NvbnN0IGk9ZS5nZXRCeXRlKCksYT1lLmdldEJ5dGUoKTtpZigtMT09PWl8fC0xPT09YSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYEludmFsaWQgaGVhZGVyIGluIGZsYXRlIHN0cmVhbTogJHtpfSwgJHthfWApO2lmKDghPSgxNSZpKSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYFVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIGluIGZsYXRlIHN0cmVhbTogJHtpfSwgJHthfWApO2lmKCgoaTw8OCkrYSklMzEhPTApdGhyb3cgbmV3IEZvcm1hdEVycm9yKGBCYWQgRkNIRUNLIGluIGZsYXRlIHN0cmVhbTogJHtpfSwgJHthfWApO2lmKDMyJmEpdGhyb3cgbmV3IEZvcm1hdEVycm9yKGBGRElDVCBiaXQgc2V0IGluIGZsYXRlIHN0cmVhbTogJHtpfSwgJHthfWApO3RoaXMuY29kZVNpemU9MDt0aGlzLmNvZGVCdWY9MH1hc3luYyBnZXRJbWFnZURhdGEoZSx0KXtjb25zdCBpPWF3YWl0IHRoaXMuYXN5bmNHZXRCeXRlcygpO3JldHVybiBpPy5zdWJhcnJheSgwLGUpfHx0aGlzLmdldEJ5dGVzKGUpfWFzeW5jIGFzeW5jR2V0Qnl0ZXMoKXt0aGlzLnN0ci5yZXNldCgpO2NvbnN0IGU9dGhpcy5zdHIuZ2V0Qnl0ZXMoKTt0cnl7Y29uc3R7cmVhZGFibGU6dCx3cml0YWJsZTppfT1uZXcgRGVjb21wcmVzc2lvblN0cmVhbSgiZGVmbGF0ZSIpLGE9aS5nZXRXcml0ZXIoKTthd2FpdCBhLnJlYWR5O2Eud3JpdGUoZSkudGhlbigoYXN5bmMoKT0+e2F3YWl0IGEucmVhZHk7YXdhaXQgYS5jbG9zZSgpfSkpLmNhdGNoKCgoKT0+e30pKTtjb25zdCByPVtdO2xldCBzPTA7Zm9yIGF3YWl0KGNvbnN0IGUgb2YgdCl7ci5wdXNoKGUpO3MrPWUuYnl0ZUxlbmd0aH1jb25zdCBuPW5ldyBVaW50OEFycmF5KHMpO2xldCBvPTA7Zm9yKGNvbnN0IGUgb2Ygcil7bi5zZXQoZSxvKTtvKz1lLmJ5dGVMZW5ndGh9cmV0dXJuIG59Y2F0Y2h7dGhpcy5zdHI9bmV3IFN0cmVhbShlLDIsZS5sZW5ndGgsdGhpcy5zdHIuZGljdCk7dGhpcy5yZXNldCgpO3JldHVybiBudWxsfX1nZXQgaXNBc3luYygpe3JldHVybiEwfWdldEJpdHMoZSl7Y29uc3QgdD10aGlzLnN0cjtsZXQgaSxhPXRoaXMuY29kZVNpemUscj10aGlzLmNvZGVCdWY7Zm9yKDthPGU7KXtpZigtMT09PShpPXQuZ2V0Qnl0ZSgpKSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkJhZCBlbmNvZGluZyBpbiBmbGF0ZSBzdHJlYW0iKTtyfD1pPDxhO2ErPTh9aT1yJigxPDxlKS0xO3RoaXMuY29kZUJ1Zj1yPj5lO3RoaXMuY29kZVNpemU9YS09ZTtyZXR1cm4gaX1nZXRDb2RlKGUpe2NvbnN0IHQ9dGhpcy5zdHIsaT1lWzBdLGE9ZVsxXTtsZXQgcixzPXRoaXMuY29kZVNpemUsbj10aGlzLmNvZGVCdWY7Zm9yKDtzPGEmJi0xIT09KHI9dC5nZXRCeXRlKCkpOyl7bnw9cjw8cztzKz04fWNvbnN0IG89aVtuJigxPDxhKS0xXSxnPW8+PjE2LGM9NjU1MzUmbztpZihnPDF8fHM8Zyl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkJhZCBlbmNvZGluZyBpbiBmbGF0ZSBzdHJlYW0iKTt0aGlzLmNvZGVCdWY9bj4+Zzt0aGlzLmNvZGVTaXplPXMtZztyZXR1cm4gY31nZW5lcmF0ZUh1ZmZtYW5UYWJsZShlKXtjb25zdCB0PWUubGVuZ3RoO2xldCBpLGE9MDtmb3IoaT0wO2k8dDsrK2kpZVtpXT5hJiYoYT1lW2ldKTtjb25zdCByPTE8PGEscz1uZXcgSW50MzJBcnJheShyKTtmb3IobGV0IG49MSxvPTAsZz0yO248PWE7KytuLG88PD0xLGc8PD0xKWZvcihsZXQgYT0wO2E8dDsrK2EpaWYoZVthXT09PW4pe2xldCBlPTAsdD1vO2ZvcihpPTA7aTxuOysraSl7ZT1lPDwxfDEmdDt0Pj49MX1mb3IoaT1lO2k8cjtpKz1nKXNbaV09bjw8MTZ8YTsrK299cmV0dXJuW3MsYV19I20oZSl7aW5mbyhlKTt0aGlzLmVvZj0hMH1yZWFkQmxvY2soKXtsZXQgZSx0LGk7Y29uc3QgYT10aGlzLnN0cjt0cnl7dD10aGlzLmdldEJpdHMoMyl9Y2F0Y2goZSl7dGhpcy4jbShlLm1lc3NhZ2UpO3JldHVybn0xJnQmJih0aGlzLmVvZj0hMCk7dD4+PTE7aWYoMD09PXQpe2xldCB0O2lmKC0xPT09KHQ9YS5nZXRCeXRlKCkpKXt0aGlzLiNtKCJCYWQgYmxvY2sgaGVhZGVyIGluIGZsYXRlIHN0cmVhbSIpO3JldHVybn1sZXQgaT10O2lmKC0xPT09KHQ9YS5nZXRCeXRlKCkpKXt0aGlzLiNtKCJCYWQgYmxvY2sgaGVhZGVyIGluIGZsYXRlIHN0cmVhbSIpO3JldHVybn1pfD10PDw4O2lmKC0xPT09KHQ9YS5nZXRCeXRlKCkpKXt0aGlzLiNtKCJCYWQgYmxvY2sgaGVhZGVyIGluIGZsYXRlIHN0cmVhbSIpO3JldHVybn1sZXQgcj10O2lmKC0xPT09KHQ9YS5nZXRCeXRlKCkpKXt0aGlzLiNtKCJCYWQgYmxvY2sgaGVhZGVyIGluIGZsYXRlIHN0cmVhbSIpO3JldHVybn1yfD10PDw4O2lmKHIhPT0oNjU1MzUmfmkpJiYoMCE9PWl8fDAhPT1yKSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkJhZCB1bmNvbXByZXNzZWQgYmxvY2sgbGVuZ3RoIGluIGZsYXRlIHN0cmVhbSIpO3RoaXMuY29kZUJ1Zj0wO3RoaXMuY29kZVNpemU9MDtjb25zdCBzPXRoaXMuYnVmZmVyTGVuZ3RoLG49cytpO2U9dGhpcy5lbnN1cmVCdWZmZXIobik7dGhpcy5idWZmZXJMZW5ndGg9bjtpZigwPT09aSktMT09PWEucGVla0J5dGUoKSYmKHRoaXMuZW9mPSEwKTtlbHNle2NvbnN0IHQ9YS5nZXRCeXRlcyhpKTtlLnNldCh0LHMpO3QubGVuZ3RoPGkmJih0aGlzLmVvZj0hMCl9cmV0dXJufWxldCByLHM7aWYoMT09PXQpe3I9SnQ7cz12dH1lbHNle2lmKDIhPT10KXRocm93IG5ldyBGb3JtYXRFcnJvcigiVW5rbm93biBibG9jayB0eXBlIGluIGZsYXRlIHN0cmVhbSIpO3tjb25zdCBlPXRoaXMuZ2V0Qml0cyg1KSsyNTcsdD10aGlzLmdldEJpdHMoNSkrMSxhPXRoaXMuZ2V0Qml0cyg0KSs0LG49bmV3IFVpbnQ4QXJyYXkoeHQubGVuZ3RoKTtsZXQgbztmb3Iobz0wO288YTsrK28pblt4dFtvXV09dGhpcy5nZXRCaXRzKDMpO2NvbnN0IGc9dGhpcy5nZW5lcmF0ZUh1ZmZtYW5UYWJsZShuKTtpPTA7bz0wO2NvbnN0IGM9ZSt0LGw9bmV3IFVpbnQ4QXJyYXkoYyk7bGV0IGgsQyxRO2Zvcig7bzxjOyl7Y29uc3QgZT10aGlzLmdldENvZGUoZyk7aWYoMTY9PT1lKXtoPTI7Qz0zO1E9aX1lbHNlIGlmKDE3PT09ZSl7aD0zO0M9MztRPWk9MH1lbHNle2lmKDE4IT09ZSl7bFtvKytdPWk9ZTtjb250aW51ZX1oPTc7Qz0xMTtRPWk9MH1sZXQgdD10aGlzLmdldEJpdHMoaCkrQztmb3IoO3QtLSA+MDspbFtvKytdPVF9cj10aGlzLmdlbmVyYXRlSHVmZm1hblRhYmxlKGwuc3ViYXJyYXkoMCxlKSk7cz10aGlzLmdlbmVyYXRlSHVmZm1hblRhYmxlKGwuc3ViYXJyYXkoZSxjKSl9fWU9dGhpcy5idWZmZXI7bGV0IG49ZT9lLmxlbmd0aDowLG89dGhpcy5idWZmZXJMZW5ndGg7Zm9yKDs7KXtsZXQgdD10aGlzLmdldENvZGUocik7aWYodDwyNTYpe2lmKG8rMT49bil7ZT10aGlzLmVuc3VyZUJ1ZmZlcihvKzEpO249ZS5sZW5ndGh9ZVtvKytdPXQ7Y29udGludWV9aWYoMjU2PT09dCl7dGhpcy5idWZmZXJMZW5ndGg9bztyZXR1cm59dC09MjU3O3Q9THRbdF07bGV0IGE9dD4+MTY7YT4wJiYoYT10aGlzLmdldEJpdHMoYSkpO2k9KDY1NTM1JnQpK2E7dD10aGlzLmdldENvZGUocyk7dD1IdFt0XTthPXQ+PjE2O2E+MCYmKGE9dGhpcy5nZXRCaXRzKGEpKTtjb25zdCBnPSg2NTUzNSZ0KSthO2lmKG8raT49bil7ZT10aGlzLmVuc3VyZUJ1ZmZlcihvK2kpO249ZS5sZW5ndGh9Zm9yKGxldCB0PTA7dDxpOysrdCwrK28pZVtvXT1lW28tZ119fX1jb25zdCBZdD1be3FlOjIyMDE3LG5tcHM6MSxubHBzOjEsc3dpdGNoRmxhZzoxfSx7cWU6MTMzMTMsbm1wczoyLG5scHM6Nixzd2l0Y2hGbGFnOjB9LHtxZTo2MTQ1LG5tcHM6MyxubHBzOjksc3dpdGNoRmxhZzowfSx7cWU6Mjc1MyxubXBzOjQsbmxwczoxMixzd2l0Y2hGbGFnOjB9LHtxZToxMzEzLG5tcHM6NSxubHBzOjI5LHN3aXRjaEZsYWc6MH0se3FlOjU0NSxubXBzOjM4LG5scHM6MzMsc3dpdGNoRmxhZzowfSx7cWU6MjIwMTcsbm1wczo3LG5scHM6Nixzd2l0Y2hGbGFnOjF9LHtxZToyMTUwNSxubXBzOjgsbmxwczoxNCxzd2l0Y2hGbGFnOjB9LHtxZToxODQzMyxubXBzOjksbmxwczoxNCxzd2l0Y2hGbGFnOjB9LHtxZToxNDMzNyxubXBzOjEwLG5scHM6MTQsc3dpdGNoRmxhZzowfSx7cWU6MTIyODksbm1wczoxMSxubHBzOjE3LHN3aXRjaEZsYWc6MH0se3FlOjkyMTcsbm1wczoxMixubHBzOjE4LHN3aXRjaEZsYWc6MH0se3FlOjcxNjksbm1wczoxMyxubHBzOjIwLHN3aXRjaEZsYWc6MH0se3FlOjU2MzMsbm1wczoyOSxubHBzOjIxLHN3aXRjaEZsYWc6MH0se3FlOjIyMDE3LG5tcHM6MTUsbmxwczoxNCxzd2l0Y2hGbGFnOjF9LHtxZToyMTUwNSxubXBzOjE2LG5scHM6MTQsc3dpdGNoRmxhZzowfSx7cWU6MjA3Mzcsbm1wczoxNyxubHBzOjE1LHN3aXRjaEZsYWc6MH0se3FlOjE4NDMzLG5tcHM6MTgsbmxwczoxNixzd2l0Y2hGbGFnOjB9LHtxZToxNDMzNyxubXBzOjE5LG5scHM6MTcsc3dpdGNoRmxhZzowfSx7cWU6MTMzMTMsbm1wczoyMCxubHBzOjE4LHN3aXRjaEZsYWc6MH0se3FlOjEyMjg5LG5tcHM6MjEsbmxwczoxOSxzd2l0Y2hGbGFnOjB9LHtxZToxMDI0MSxubXBzOjIyLG5scHM6MTksc3dpdGNoRmxhZzowfSx7cWU6OTIxNyxubXBzOjIzLG5scHM6MjAsc3dpdGNoRmxhZzowfSx7cWU6ODcwNSxubXBzOjI0LG5scHM6MjEsc3dpdGNoRmxhZzowfSx7cWU6NzE2OSxubXBzOjI1LG5scHM6MjIsc3dpdGNoRmxhZzowfSx7cWU6NjE0NSxubXBzOjI2LG5scHM6MjMsc3dpdGNoRmxhZzowfSx7cWU6NTYzMyxubXBzOjI3LG5scHM6MjQsc3dpdGNoRmxhZzowfSx7cWU6NTEyMSxubXBzOjI4LG5scHM6MjUsc3dpdGNoRmxhZzowfSx7cWU6NDYwOSxubXBzOjI5LG5scHM6MjYsc3dpdGNoRmxhZzowfSx7cWU6NDM1MyxubXBzOjMwLG5scHM6Mjcsc3dpdGNoRmxhZzowfSx7cWU6Mjc1MyxubXBzOjMxLG5scHM6Mjgsc3dpdGNoRmxhZzowfSx7cWU6MjQ5NyxubXBzOjMyLG5scHM6Mjksc3dpdGNoRmxhZzowfSx7cWU6MjIwOSxubXBzOjMzLG5scHM6MzAsc3dpdGNoRmxhZzowfSx7cWU6MTMxMyxubXBzOjM0LG5scHM6MzEsc3dpdGNoRmxhZzowfSx7cWU6MTA4OSxubXBzOjM1LG5scHM6MzIsc3dpdGNoRmxhZzowfSx7cWU6NjczLG5tcHM6MzYsbmxwczozMyxzd2l0Y2hGbGFnOjB9LHtxZTo1NDUsbm1wczozNyxubHBzOjM0LHN3aXRjaEZsYWc6MH0se3FlOjMyMSxubXBzOjM4LG5scHM6MzUsc3dpdGNoRmxhZzowfSx7cWU6MjczLG5tcHM6MzksbmxwczozNixzd2l0Y2hGbGFnOjB9LHtxZToxMzMsbm1wczo0MCxubHBzOjM3LHN3aXRjaEZsYWc6MH0se3FlOjczLG5tcHM6NDEsbmxwczozOCxzd2l0Y2hGbGFnOjB9LHtxZTozNyxubXBzOjQyLG5scHM6Mzksc3dpdGNoRmxhZzowfSx7cWU6MjEsbm1wczo0MyxubHBzOjQwLHN3aXRjaEZsYWc6MH0se3FlOjksbm1wczo0NCxubHBzOjQxLHN3aXRjaEZsYWc6MH0se3FlOjUsbm1wczo0NSxubHBzOjQyLHN3aXRjaEZsYWc6MH0se3FlOjEsbm1wczo0NSxubHBzOjQzLHN3aXRjaEZsYWc6MH0se3FlOjIyMDE3LG5tcHM6NDYsbmxwczo0Nixzd2l0Y2hGbGFnOjB9XTtjbGFzcyBBcml0aG1ldGljRGVjb2Rlcntjb25zdHJ1Y3RvcihlLHQsaSl7dGhpcy5kYXRhPWU7dGhpcy5icD10O3RoaXMuZGF0YUVuZD1pO3RoaXMuY2hpZ2g9ZVt0XTt0aGlzLmNsb3c9MDt0aGlzLmJ5dGVJbigpO3RoaXMuY2hpZ2g9dGhpcy5jaGlnaDw8NyY2NTUzNXx0aGlzLmNsb3c+PjkmMTI3O3RoaXMuY2xvdz10aGlzLmNsb3c8PDcmNjU1MzU7dGhpcy5jdC09Nzt0aGlzLmE9MzI3Njh9Ynl0ZUluKCl7Y29uc3QgZT10aGlzLmRhdGE7bGV0IHQ9dGhpcy5icDtpZigyNTU9PT1lW3RdKWlmKGVbdCsxXT4xNDMpe3RoaXMuY2xvdys9NjUyODA7dGhpcy5jdD04fWVsc2V7dCsrO3RoaXMuY2xvdys9ZVt0XTw8OTt0aGlzLmN0PTc7dGhpcy5icD10fWVsc2V7dCsrO3RoaXMuY2xvdys9dDx0aGlzLmRhdGFFbmQ/ZVt0XTw8ODo2NTI4MDt0aGlzLmN0PTg7dGhpcy5icD10fWlmKHRoaXMuY2xvdz42NTUzNSl7dGhpcy5jaGlnaCs9dGhpcy5jbG93Pj4xNjt0aGlzLmNsb3cmPTY1NTM1fX1yZWFkQml0KGUsdCl7bGV0IGk9ZVt0XT4+MSxhPTEmZVt0XTtjb25zdCByPVl0W2ldLHM9ci5xZTtsZXQgbixvPXRoaXMuYS1zO2lmKHRoaXMuY2hpZ2g8cylpZihvPHMpe289cztuPWE7aT1yLm5tcHN9ZWxzZXtvPXM7bj0xXmE7MT09PXIuc3dpdGNoRmxhZyYmKGE9bik7aT1yLm5scHN9ZWxzZXt0aGlzLmNoaWdoLT1zO2lmKDMyNzY4Jm8pe3RoaXMuYT1vO3JldHVybiBhfWlmKG88cyl7bj0xXmE7MT09PXIuc3dpdGNoRmxhZyYmKGE9bik7aT1yLm5scHN9ZWxzZXtuPWE7aT1yLm5tcHN9fWRvezA9PT10aGlzLmN0JiZ0aGlzLmJ5dGVJbigpO288PD0xO3RoaXMuY2hpZ2g9dGhpcy5jaGlnaDw8MSY2NTUzNXx0aGlzLmNsb3c+PjE1JjE7dGhpcy5jbG93PXRoaXMuY2xvdzw8MSY2NTUzNTt0aGlzLmN0LS19d2hpbGUoISgzMjc2OCZvKSk7dGhpcy5hPW87ZVt0XT1pPDwxfGE7cmV0dXJuIG59fWNsYXNzIEpiaWcyRXJyb3IgZXh0ZW5kcyBjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJKYmlnMkVycm9yIil9fWNsYXNzIENvbnRleHRDYWNoZXtnZXRDb250ZXh0cyhlKXtyZXR1cm4gZSBpbiB0aGlzP3RoaXNbZV06dGhpc1tlXT1uZXcgSW50OEFycmF5KDY1NTM2KX19Y2xhc3MgRGVjb2RpbmdDb250ZXh0e2NvbnN0cnVjdG9yKGUsdCxpKXt0aGlzLmRhdGE9ZTt0aGlzLnN0YXJ0PXQ7dGhpcy5lbmQ9aX1nZXQgZGVjb2Rlcigpe3JldHVybiBzaGFkb3codGhpcywiZGVjb2RlciIsbmV3IEFyaXRobWV0aWNEZWNvZGVyKHRoaXMuZGF0YSx0aGlzLnN0YXJ0LHRoaXMuZW5kKSl9Z2V0IGNvbnRleHRDYWNoZSgpe3JldHVybiBzaGFkb3codGhpcywiY29udGV4dENhY2hlIixuZXcgQ29udGV4dENhY2hlKX19ZnVuY3Rpb24gZGVjb2RlSW50ZWdlcihlLHQsaSl7Y29uc3QgYT1lLmdldENvbnRleHRzKHQpO2xldCByPTE7ZnVuY3Rpb24gcmVhZEJpdHMoZSl7bGV0IHQ9MDtmb3IobGV0IHM9MDtzPGU7cysrKXtjb25zdCBlPWkucmVhZEJpdChhLHIpO3I9cjwyNTY/cjw8MXxlOjUxMSYocjw8MXxlKXwyNTY7dD10PDwxfGV9cmV0dXJuIHQ+Pj4wfWNvbnN0IHM9cmVhZEJpdHMoMSksbj1yZWFkQml0cygxKT9yZWFkQml0cygxKT9yZWFkQml0cygxKT9yZWFkQml0cygxKT9yZWFkQml0cygxKT9yZWFkQml0cygzMikrNDQzNjpyZWFkQml0cygxMikrMzQwOnJlYWRCaXRzKDgpKzg0OnJlYWRCaXRzKDYpKzIwOnJlYWRCaXRzKDQpKzQ6cmVhZEJpdHMoMik7bGV0IG87MD09PXM/bz1uOm4+MCYmKG89LW4pO3JldHVybiBvPj0tMjE0NzQ4MzY0OCYmbzw9eXQ/bzpudWxsfWZ1bmN0aW9uIGRlY29kZUlBSUQoZSx0LGkpe2NvbnN0IGE9ZS5nZXRDb250ZXh0cygiSUFJRCIpO2xldCByPTE7Zm9yKGxldCBlPTA7ZTxpO2UrKyl7cj1yPDwxfHQucmVhZEJpdChhLHIpfXJldHVybiBpPDMxP3ImKDE8PGkpLTE6MjE0NzQ4MzY0NyZyfWNvbnN0IEt0PVsiU3ltYm9sRGljdGlvbmFyeSIsbnVsbCxudWxsLG51bGwsIkludGVybWVkaWF0ZVRleHRSZWdpb24iLG51bGwsIkltbWVkaWF0ZVRleHRSZWdpb24iLCJJbW1lZGlhdGVMb3NzbGVzc1RleHRSZWdpb24iLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwiUGF0dGVybkRpY3Rpb25hcnkiLG51bGwsbnVsbCxudWxsLCJJbnRlcm1lZGlhdGVIYWxmdG9uZVJlZ2lvbiIsbnVsbCwiSW1tZWRpYXRlSGFsZnRvbmVSZWdpb24iLCJJbW1lZGlhdGVMb3NzbGVzc0hhbGZ0b25lUmVnaW9uIixudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwiSW50ZXJtZWRpYXRlR2VuZXJpY1JlZ2lvbiIsbnVsbCwiSW1tZWRpYXRlR2VuZXJpY1JlZ2lvbiIsIkltbWVkaWF0ZUxvc3NsZXNzR2VuZXJpY1JlZ2lvbiIsIkludGVybWVkaWF0ZUdlbmVyaWNSZWZpbmVtZW50UmVnaW9uIixudWxsLCJJbW1lZGlhdGVHZW5lcmljUmVmaW5lbWVudFJlZ2lvbiIsIkltbWVkaWF0ZUxvc3NsZXNzR2VuZXJpY1JlZmluZW1lbnRSZWdpb24iLG51bGwsbnVsbCxudWxsLG51bGwsIlBhZ2VJbmZvcm1hdGlvbiIsIkVuZE9mUGFnZSIsIkVuZE9mU3RyaXBlIiwiRW5kT2ZGaWxlIiwiUHJvZmlsZXMiLCJUYWJsZXMiLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCwiRXh0ZW5zaW9uIl0sVHQ9W1t7eDotMSx5Oi0yfSx7eDowLHk6LTJ9LHt4OjEseTotMn0se3g6LTIseTotMX0se3g6LTEseTotMX0se3g6MCx5Oi0xfSx7eDoxLHk6LTF9LHt4OjIseTotMX0se3g6LTQseTowfSx7eDotMyx5OjB9LHt4Oi0yLHk6MH0se3g6LTEseTowfV0sW3t4Oi0xLHk6LTJ9LHt4OjAseTotMn0se3g6MSx5Oi0yfSx7eDoyLHk6LTJ9LHt4Oi0yLHk6LTF9LHt4Oi0xLHk6LTF9LHt4OjAseTotMX0se3g6MSx5Oi0xfSx7eDoyLHk6LTF9LHt4Oi0zLHk6MH0se3g6LTIseTowfSx7eDotMSx5OjB9XSxbe3g6LTEseTotMn0se3g6MCx5Oi0yfSx7eDoxLHk6LTJ9LHt4Oi0yLHk6LTF9LHt4Oi0xLHk6LTF9LHt4OjAseTotMX0se3g6MSx5Oi0xfSx7eDotMix5OjB9LHt4Oi0xLHk6MH1dLFt7eDotMyx5Oi0xfSx7eDotMix5Oi0xfSx7eDotMSx5Oi0xfSx7eDowLHk6LTF9LHt4OjEseTotMX0se3g6LTQseTowfSx7eDotMyx5OjB9LHt4Oi0yLHk6MH0se3g6LTEseTowfV1dLHF0PVt7Y29kaW5nOlt7eDowLHk6LTF9LHt4OjEseTotMX0se3g6LTEseTowfV0scmVmZXJlbmNlOlt7eDowLHk6LTF9LHt4OjEseTotMX0se3g6LTEseTowfSx7eDowLHk6MH0se3g6MSx5OjB9LHt4Oi0xLHk6MX0se3g6MCx5OjF9LHt4OjEseToxfV19LHtjb2Rpbmc6W3t4Oi0xLHk6LTF9LHt4OjAseTotMX0se3g6MSx5Oi0xfSx7eDotMSx5OjB9XSxyZWZlcmVuY2U6W3t4OjAseTotMX0se3g6LTEseTowfSx7eDowLHk6MH0se3g6MSx5OjB9LHt4OjAseToxfSx7eDoxLHk6MX1dfV0sT3Q9WzM5NzE3LDE5NDEsMjI5LDQwNV0sUHQ9WzMyLDhdO2Z1bmN0aW9uIGRlY29kZUJpdG1hcChlLHQsaSxhLHIscyxuLG8pe2lmKGUpe3JldHVybiBkZWNvZGVNTVJCaXRtYXAobmV3IFJlYWRlcihvLmRhdGEsby5zdGFydCxvLmVuZCksdCxpLCExKX1pZigwPT09YSYmIXMmJiFyJiY0PT09bi5sZW5ndGgmJjM9PT1uWzBdLngmJi0xPT09blswXS55JiYtMz09PW5bMV0ueCYmLTE9PT1uWzFdLnkmJjI9PT1uWzJdLngmJi0yPT09blsyXS55JiYtMj09PW5bM10ueCYmLTI9PT1uWzNdLnkpcmV0dXJuIGZ1bmN0aW9uIGRlY29kZUJpdG1hcFRlbXBsYXRlMChlLHQsaSl7Y29uc3QgYT1pLmRlY29kZXIscj1pLmNvbnRleHRDYWNoZS5nZXRDb250ZXh0cygiR0IiKSxzPVtdO2xldCBuLG8sZyxjLGwsaCxDO2ZvcihvPTA7bzx0O28rKyl7bD1zW29dPW5ldyBVaW50OEFycmF5KGUpO2g9bzwxP2w6c1tvLTFdO0M9bzwyP2w6c1tvLTJdO249Q1swXTw8MTN8Q1sxXTw8MTJ8Q1syXTw8MTF8aFswXTw8N3xoWzFdPDw2fGhbMl08PDV8aFszXTw8NDtmb3IoZz0wO2c8ZTtnKyspe2xbZ109Yz1hLnJlYWRCaXQocixuKTtuPSgzMTczNSZuKTw8MXwoZyszPGU/Q1tnKzNdPDwxMTowKXwoZys0PGU/aFtnKzRdPDw0OjApfGN9fXJldHVybiBzfSh0LGksbyk7Y29uc3QgZz0hIXMsYz1UdFthXS5jb25jYXQobik7Yy5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiBlLnktdC55fHxlLngtdC54fSkpO2NvbnN0IGw9Yy5sZW5ndGgsaD1uZXcgSW50OEFycmF5KGwpLEM9bmV3IEludDhBcnJheShsKSxRPVtdO2xldCBFLHUsZD0wLGY9MCxwPTAsbT0wO2Zvcih1PTA7dTxsO3UrKyl7aFt1XT1jW3VdLng7Q1t1XT1jW3VdLnk7Zj1NYXRoLm1pbihmLGNbdV0ueCk7cD1NYXRoLm1heChwLGNbdV0ueCk7bT1NYXRoLm1pbihtLGNbdV0ueSk7dTxsLTEmJmNbdV0ueT09PWNbdSsxXS55JiZjW3VdLng9PT1jW3UrMV0ueC0xP2R8PTE8PGwtMS11OlEucHVzaCh1KX1jb25zdCB5PVEubGVuZ3RoLHc9bmV3IEludDhBcnJheSh5KSxiPW5ldyBJbnQ4QXJyYXkoeSksRD1uZXcgVWludDE2QXJyYXkoeSk7Zm9yKEU9MDtFPHk7RSsrKXt1PVFbRV07d1tFXT1jW3VdLng7YltFXT1jW3VdLnk7RFtFXT0xPDxsLTEtdX1jb25zdCBTPS1mLGs9LW0sUj10LXAsTj1PdFthXTtsZXQgRz1uZXcgVWludDhBcnJheSh0KTtjb25zdCBNPVtdLFU9by5kZWNvZGVyLHg9by5jb250ZXh0Q2FjaGUuZ2V0Q29udGV4dHMoIkdCIik7bGV0IEwsSCxKLHYsWSxLPTAsVD0wO2ZvcihsZXQgZT0wO2U8aTtlKyspe2lmKHIpe0tePVUucmVhZEJpdCh4LE4pO2lmKEspe00ucHVzaChHKTtjb250aW51ZX19Rz1uZXcgVWludDhBcnJheShHKTtNLnB1c2goRyk7Zm9yKEw9MDtMPHQ7TCsrKXtpZihnJiZzW2VdW0xdKXtHW0xdPTA7Y29udGludWV9aWYoTD49UyYmTDxSJiZlPj1rKXtUPVQ8PDEmZDtmb3IodT0wO3U8eTt1Kyspe0g9ZStiW3VdO0o9TCt3W3VdO3Y9TVtIXVtKXTtpZih2KXt2PURbdV07VHw9dn19fWVsc2V7VD0wO1k9bC0xO2Zvcih1PTA7dTxsO3UrKyxZLS0pe0o9TCtoW3VdO2lmKEo+PTAmJko8dCl7SD1lK0NbdV07aWYoSD49MCl7dj1NW0hdW0pdO3YmJihUfD12PDxZKX19fX1jb25zdCBpPVUucmVhZEJpdCh4LFQpO0dbTF09aX19cmV0dXJuIE19ZnVuY3Rpb24gZGVjb2RlUmVmaW5lbWVudChlLHQsaSxhLHIscyxuLG8sZyl7bGV0IGM9cXRbaV0uY29kaW5nOzA9PT1pJiYoYz1jLmNvbmNhdChbb1swXV0pKTtjb25zdCBsPWMubGVuZ3RoLGg9bmV3IEludDMyQXJyYXkobCksQz1uZXcgSW50MzJBcnJheShsKTtsZXQgUTtmb3IoUT0wO1E8bDtRKyspe2hbUV09Y1tRXS54O0NbUV09Y1tRXS55fWxldCBFPXF0W2ldLnJlZmVyZW5jZTswPT09aSYmKEU9RS5jb25jYXQoW29bMV1dKSk7Y29uc3QgdT1FLmxlbmd0aCxkPW5ldyBJbnQzMkFycmF5KHUpLGY9bmV3IEludDMyQXJyYXkodSk7Zm9yKFE9MDtRPHU7USsrKXtkW1FdPUVbUV0ueDtmW1FdPUVbUV0ueX1jb25zdCBwPWFbMF0ubGVuZ3RoLG09YS5sZW5ndGgseT1QdFtpXSx3PVtdLGI9Zy5kZWNvZGVyLEQ9Zy5jb250ZXh0Q2FjaGUuZ2V0Q29udGV4dHMoIkdSIik7bGV0IFM9MDtmb3IobGV0IGk9MDtpPHQ7aSsrKXtpZihuKXtTXj1iLnJlYWRCaXQoRCx5KTtpZihTKXRocm93IG5ldyBKYmlnMkVycm9yKCJwcmVkaWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQiKX1jb25zdCB0PW5ldyBVaW50OEFycmF5KGUpO3cucHVzaCh0KTtmb3IobGV0IG49MDtuPGU7bisrKXtsZXQgbyxnLGM9MDtmb3IoUT0wO1E8bDtRKyspe289aStDW1FdO2c9bitoW1FdO288MHx8ZzwwfHxnPj1lP2M8PD0xOmM9Yzw8MXx3W29dW2ddfWZvcihRPTA7UTx1O1ErKyl7bz1pK2ZbUV0tcztnPW4rZFtRXS1yO288MHx8bz49bXx8ZzwwfHxnPj1wP2M8PD0xOmM9Yzw8MXxhW29dW2ddfWNvbnN0IEU9Yi5yZWFkQml0KEQsYyk7dFtuXT1FfX1yZXR1cm4gd31mdW5jdGlvbiBkZWNvZGVUZXh0UmVnaW9uKGUsdCxpLGEscixzLG4sbyxnLGMsbCxoLEMsUSxFLHUsZCxmLHApe2lmKGUmJnQpdGhyb3cgbmV3IEpiaWcyRXJyb3IoInJlZmluZW1lbnQgd2l0aCBIdWZmbWFuIGlzIG5vdCBzdXBwb3J0ZWQiKTtjb25zdCBtPVtdO2xldCB5LHc7Zm9yKHk9MDt5PGE7eSsrKXt3PW5ldyBVaW50OEFycmF5KGkpO2lmKHIpZm9yKGxldCBlPTA7ZTxpO2UrKyl3W2VdPXI7bS5wdXNoKHcpfWNvbnN0IGI9ZC5kZWNvZGVyLEQ9ZC5jb250ZXh0Q2FjaGU7bGV0IFM9ZT8tUS50YWJsZURlbHRhVC5kZWNvZGUocCk6LWRlY29kZUludGVnZXIoRCwiSUFEVCIsYiksaz0wO3k9MDtmb3IoO3k8czspe1MrPWU/US50YWJsZURlbHRhVC5kZWNvZGUocCk6ZGVjb2RlSW50ZWdlcihELCJJQURUIixiKTtrKz1lP1EudGFibGVGaXJzdFMuZGVjb2RlKHApOmRlY29kZUludGVnZXIoRCwiSUFGUyIsYik7bGV0IGE9aztmb3IoOzspe2xldCByPTA7bj4xJiYocj1lP3AucmVhZEJpdHMoZik6ZGVjb2RlSW50ZWdlcihELCJJQUlUIixiKSk7Y29uc3Qgcz1uKlMrcixrPWU/US5zeW1ib2xJRFRhYmxlLmRlY29kZShwKTpkZWNvZGVJQUlEKEQsYixnKSxSPXQmJihlP3AucmVhZEJpdCgpOmRlY29kZUludGVnZXIoRCwiSUFSSSIsYikpO2xldCBOPW9ba10sRz1OWzBdLmxlbmd0aCxNPU4ubGVuZ3RoO2lmKFIpe2NvbnN0IGU9ZGVjb2RlSW50ZWdlcihELCJJQVJEVyIsYiksdD1kZWNvZGVJbnRlZ2VyKEQsIklBUkRIIixiKTtHKz1lO00rPXQ7Tj1kZWNvZGVSZWZpbmVtZW50KEcsTSxFLE4sKGU+PjEpK2RlY29kZUludGVnZXIoRCwiSUFSRFgiLGIpLCh0Pj4xKStkZWNvZGVJbnRlZ2VyKEQsIklBUkRZIixiKSwhMSx1LGQpfWxldCBVPTA7Yz8xJmg/VT1NLTE6YSs9TS0xOmg+MT9hKz1HLTE6VT1HLTE7Y29uc3QgeD1zLSgxJmg/MDpNLTEpLEw9YS0oMiZoP0ctMTowKTtsZXQgSCxKLHY7aWYoYylmb3IoSD0wO0g8TTtIKyspe3c9bVtMK0hdO2lmKCF3KWNvbnRpbnVlO3Y9TltIXTtjb25zdCBlPU1hdGgubWluKGkteCxHKTtzd2l0Y2goQyl7Y2FzZSAwOmZvcihKPTA7SjxlO0orKyl3W3grSl18PXZbSl07YnJlYWs7Y2FzZSAyOmZvcihKPTA7SjxlO0orKyl3W3grSl1ePXZbSl07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgSmJpZzJFcnJvcihgb3BlcmF0b3IgJHtDfSBpcyBub3Qgc3VwcG9ydGVkYCl9fWVsc2UgZm9yKEo9MDtKPE07SisrKXt3PW1beCtKXTtpZih3KXt2PU5bSl07c3dpdGNoKEMpe2Nhc2UgMDpmb3IoSD0wO0g8RztIKyspd1tMK0hdfD12W0hdO2JyZWFrO2Nhc2UgMjpmb3IoSD0wO0g8RztIKyspd1tMK0hdXj12W0hdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEpiaWcyRXJyb3IoYG9wZXJhdG9yICR7Q30gaXMgbm90IHN1cHBvcnRlZGApfX19eSsrO2NvbnN0IFk9ZT9RLnRhYmxlRGVsdGFTLmRlY29kZShwKTpkZWNvZGVJbnRlZ2VyKEQsIklBRFMiLGIpO2lmKG51bGw9PT1ZKWJyZWFrO2ErPVUrWStsfX1yZXR1cm4gbX1mdW5jdGlvbiByZWFkU2VnbWVudEhlYWRlcihlLHQpe2NvbnN0IGk9e307aS5udW1iZXI9cmVhZFVpbnQzMihlLHQpO2NvbnN0IGE9ZVt0KzRdLHI9NjMmYTtpZighS3Rbcl0pdGhyb3cgbmV3IEpiaWcyRXJyb3IoImludmFsaWQgc2VnbWVudCB0eXBlOiAiK3IpO2kudHlwZT1yO2kudHlwZU5hbWU9S3Rbcl07aS5kZWZlcnJlZE5vblJldGFpbj0hISgxMjgmYSk7Y29uc3Qgcz0hISg2NCZhKSxuPWVbdCs1XTtsZXQgbz1uPj41Jjc7Y29uc3QgZz1bMzEmbl07bGV0IGM9dCs2O2lmKDc9PT1uKXtvPTUzNjg3MDkxMSZyZWFkVWludDMyKGUsYy0xKTtjKz0zO2xldCB0PW8rNz4+MztnWzBdPWVbYysrXTtmb3IoOy0tdD4wOylnLnB1c2goZVtjKytdKX1lbHNlIGlmKDU9PT1ufHw2PT09bil0aHJvdyBuZXcgSmJpZzJFcnJvcigiaW52YWxpZCByZWZlcnJlZC10byBmbGFncyIpO2kucmV0YWluQml0cz1nO2xldCBsPTQ7aS5udW1iZXI8PTI1Nj9sPTE6aS5udW1iZXI8PTY1NTM2JiYobD0yKTtjb25zdCBoPVtdO2xldCBDLFE7Zm9yKEM9MDtDPG87QysrKXtsZXQgdDt0PTE9PT1sP2VbY106Mj09PWw/cmVhZFVpbnQxNihlLGMpOnJlYWRVaW50MzIoZSxjKTtoLnB1c2godCk7Yys9bH1pLnJlZmVycmVkVG89aDtpZihzKXtpLnBhZ2VBc3NvY2lhdGlvbj1yZWFkVWludDMyKGUsYyk7Yys9NH1lbHNlIGkucGFnZUFzc29jaWF0aW9uPWVbYysrXTtpLmxlbmd0aD1yZWFkVWludDMyKGUsYyk7Yys9NDtpZig0Mjk0OTY3Mjk1PT09aS5sZW5ndGgpe2lmKDM4IT09cil0aHJvdyBuZXcgSmJpZzJFcnJvcigiaW52YWxpZCB1bmtub3duIHNlZ21lbnQgbGVuZ3RoIik7e2NvbnN0IHQ9cmVhZFJlZ2lvblNlZ21lbnRJbmZvcm1hdGlvbihlLGMpLGE9ISEoMSZlW2MrV3RdKSxyPTYscz1uZXcgVWludDhBcnJheShyKTtpZighYSl7c1swXT0yNTU7c1sxXT0xNzJ9c1syXT10LmhlaWdodD4+PjI0JjI1NTtzWzNdPXQuaGVpZ2h0Pj4xNiYyNTU7c1s0XT10LmhlaWdodD4+OCYyNTU7c1s1XT0yNTUmdC5oZWlnaHQ7Zm9yKEM9YyxRPWUubGVuZ3RoO0M8UTtDKyspe2xldCB0PTA7Zm9yKDt0PHImJnNbdF09PT1lW0MrdF07KXQrKztpZih0PT09cil7aS5sZW5ndGg9QytyO2JyZWFrfX1pZig0Mjk0OTY3Mjk1PT09aS5sZW5ndGgpdGhyb3cgbmV3IEpiaWcyRXJyb3IoInNlZ21lbnQgZW5kIHdhcyBub3QgZm91bmQiKX19aS5oZWFkZXJFbmQ9YztyZXR1cm4gaX1mdW5jdGlvbiByZWFkU2VnbWVudHMoZSx0LGksYSl7Y29uc3Qgcj1bXTtsZXQgcz1pO2Zvcig7czxhOyl7Y29uc3QgaT1yZWFkU2VnbWVudEhlYWRlcih0LHMpO3M9aS5oZWFkZXJFbmQ7Y29uc3QgYT17aGVhZGVyOmksZGF0YTp0fTtpZighZS5yYW5kb21BY2Nlc3Mpe2Euc3RhcnQ9cztzKz1pLmxlbmd0aDthLmVuZD1zfXIucHVzaChhKTtpZig1MT09PWkudHlwZSlicmVha31pZihlLnJhbmRvbUFjY2Vzcylmb3IobGV0IGU9MCx0PXIubGVuZ3RoO2U8dDtlKyspe3JbZV0uc3RhcnQ9cztzKz1yW2VdLmhlYWRlci5sZW5ndGg7cltlXS5lbmQ9c31yZXR1cm4gcn1mdW5jdGlvbiByZWFkUmVnaW9uU2VnbWVudEluZm9ybWF0aW9uKGUsdCl7cmV0dXJue3dpZHRoOnJlYWRVaW50MzIoZSx0KSxoZWlnaHQ6cmVhZFVpbnQzMihlLHQrNCkseDpyZWFkVWludDMyKGUsdCs4KSx5OnJlYWRVaW50MzIoZSx0KzEyKSxjb21iaW5hdGlvbk9wZXJhdG9yOjcmZVt0KzE2XX19Y29uc3QgV3Q9MTc7ZnVuY3Rpb24gcHJvY2Vzc1NlZ21lbnQoZSx0KXtjb25zdCBpPWUuaGVhZGVyLGE9ZS5kYXRhLHI9ZS5lbmQ7bGV0IHMsbixvLGcsYz1lLnN0YXJ0O3N3aXRjaChpLnR5cGUpe2Nhc2UgMDpjb25zdCBlPXt9LHQ9cmVhZFVpbnQxNihhLGMpO2UuaHVmZm1hbj0hISgxJnQpO2UucmVmaW5lbWVudD0hISgyJnQpO2UuaHVmZm1hbkRIU2VsZWN0b3I9dD4+MiYzO2UuaHVmZm1hbkRXU2VsZWN0b3I9dD4+NCYzO2UuYml0bWFwU2l6ZVNlbGVjdG9yPXQ+PjYmMTtlLmFnZ3JlZ2F0aW9uSW5zdGFuY2VzU2VsZWN0b3I9dD4+NyYxO2UuYml0bWFwQ29kaW5nQ29udGV4dFVzZWQ9ISEoMjU2JnQpO2UuYml0bWFwQ29kaW5nQ29udGV4dFJldGFpbmVkPSEhKDUxMiZ0KTtlLnRlbXBsYXRlPXQ+PjEwJjM7ZS5yZWZpbmVtZW50VGVtcGxhdGU9dD4+MTImMTtjKz0yO2lmKCFlLmh1ZmZtYW4pe2c9MD09PWUudGVtcGxhdGU/NDoxO249W107Zm9yKG89MDtvPGc7bysrKXtuLnB1c2goe3g6cmVhZEludDgoYSxjKSx5OnJlYWRJbnQ4KGEsYysxKX0pO2MrPTJ9ZS5hdD1ufWlmKGUucmVmaW5lbWVudCYmIWUucmVmaW5lbWVudFRlbXBsYXRlKXtuPVtdO2ZvcihvPTA7bzwyO28rKyl7bi5wdXNoKHt4OnJlYWRJbnQ4KGEsYykseTpyZWFkSW50OChhLGMrMSl9KTtjKz0yfWUucmVmaW5lbWVudEF0PW59ZS5udW1iZXJPZkV4cG9ydGVkU3ltYm9scz1yZWFkVWludDMyKGEsYyk7Yys9NDtlLm51bWJlck9mTmV3U3ltYm9scz1yZWFkVWludDMyKGEsYyk7Yys9NDtzPVtlLGkubnVtYmVyLGkucmVmZXJyZWRUbyxhLGMscl07YnJlYWs7Y2FzZSA2OmNhc2UgNzpjb25zdCBsPXt9O2wuaW5mbz1yZWFkUmVnaW9uU2VnbWVudEluZm9ybWF0aW9uKGEsYyk7Yys9V3Q7Y29uc3QgaD1yZWFkVWludDE2KGEsYyk7Yys9MjtsLmh1ZmZtYW49ISEoMSZoKTtsLnJlZmluZW1lbnQ9ISEoMiZoKTtsLmxvZ1N0cmlwU2l6ZT1oPj4yJjM7bC5zdHJpcFNpemU9MTw8bC5sb2dTdHJpcFNpemU7bC5yZWZlcmVuY2VDb3JuZXI9aD4+NCYzO2wudHJhbnNwb3NlZD0hISg2NCZoKTtsLmNvbWJpbmF0aW9uT3BlcmF0b3I9aD4+NyYzO2wuZGVmYXVsdFBpeGVsVmFsdWU9aD4+OSYxO2wuZHNPZmZzZXQ9aDw8MTc+PjI3O2wucmVmaW5lbWVudFRlbXBsYXRlPWg+PjE1JjE7aWYobC5odWZmbWFuKXtjb25zdCBlPXJlYWRVaW50MTYoYSxjKTtjKz0yO2wuaHVmZm1hbkZTPTMmZTtsLmh1ZmZtYW5EUz1lPj4yJjM7bC5odWZmbWFuRFQ9ZT4+NCYzO2wuaHVmZm1hblJlZmluZW1lbnREVz1lPj42JjM7bC5odWZmbWFuUmVmaW5lbWVudERIPWU+PjgmMztsLmh1ZmZtYW5SZWZpbmVtZW50RFg9ZT4+MTAmMztsLmh1ZmZtYW5SZWZpbmVtZW50RFk9ZT4+MTImMztsLmh1ZmZtYW5SZWZpbmVtZW50U2l6ZVNlbGVjdG9yPSEhKDE2Mzg0JmUpfWlmKGwucmVmaW5lbWVudCYmIWwucmVmaW5lbWVudFRlbXBsYXRlKXtuPVtdO2ZvcihvPTA7bzwyO28rKyl7bi5wdXNoKHt4OnJlYWRJbnQ4KGEsYykseTpyZWFkSW50OChhLGMrMSl9KTtjKz0yfWwucmVmaW5lbWVudEF0PW59bC5udW1iZXJPZlN5bWJvbEluc3RhbmNlcz1yZWFkVWludDMyKGEsYyk7Yys9NDtzPVtsLGkucmVmZXJyZWRUbyxhLGMscl07YnJlYWs7Y2FzZSAxNjpjb25zdCBDPXt9LFE9YVtjKytdO0MubW1yPSEhKDEmUSk7Qy50ZW1wbGF0ZT1RPj4xJjM7Qy5wYXR0ZXJuV2lkdGg9YVtjKytdO0MucGF0dGVybkhlaWdodD1hW2MrK107Qy5tYXhQYXR0ZXJuSW5kZXg9cmVhZFVpbnQzMihhLGMpO2MrPTQ7cz1bQyxpLm51bWJlcixhLGMscl07YnJlYWs7Y2FzZSAyMjpjYXNlIDIzOmNvbnN0IEU9e307RS5pbmZvPXJlYWRSZWdpb25TZWdtZW50SW5mb3JtYXRpb24oYSxjKTtjKz1XdDtjb25zdCB1PWFbYysrXTtFLm1tcj0hISgxJnUpO0UudGVtcGxhdGU9dT4+MSYzO0UuZW5hYmxlU2tpcD0hISg4JnUpO0UuY29tYmluYXRpb25PcGVyYXRvcj11Pj40Jjc7RS5kZWZhdWx0UGl4ZWxWYWx1ZT11Pj43JjE7RS5ncmlkV2lkdGg9cmVhZFVpbnQzMihhLGMpO2MrPTQ7RS5ncmlkSGVpZ2h0PXJlYWRVaW50MzIoYSxjKTtjKz00O0UuZ3JpZE9mZnNldFg9NDI5NDk2NzI5NSZyZWFkVWludDMyKGEsYyk7Yys9NDtFLmdyaWRPZmZzZXRZPTQyOTQ5NjcyOTUmcmVhZFVpbnQzMihhLGMpO2MrPTQ7RS5ncmlkVmVjdG9yWD1yZWFkVWludDE2KGEsYyk7Yys9MjtFLmdyaWRWZWN0b3JZPXJlYWRVaW50MTYoYSxjKTtjKz0yO3M9W0UsaS5yZWZlcnJlZFRvLGEsYyxyXTticmVhaztjYXNlIDM4OmNhc2UgMzk6Y29uc3QgZD17fTtkLmluZm89cmVhZFJlZ2lvblNlZ21lbnRJbmZvcm1hdGlvbihhLGMpO2MrPVd0O2NvbnN0IGY9YVtjKytdO2QubW1yPSEhKDEmZik7ZC50ZW1wbGF0ZT1mPj4xJjM7ZC5wcmVkaWN0aW9uPSEhKDgmZik7aWYoIWQubW1yKXtnPTA9PT1kLnRlbXBsYXRlPzQ6MTtuPVtdO2ZvcihvPTA7bzxnO28rKyl7bi5wdXNoKHt4OnJlYWRJbnQ4KGEsYykseTpyZWFkSW50OChhLGMrMSl9KTtjKz0yfWQuYXQ9bn1zPVtkLGEsYyxyXTticmVhaztjYXNlIDQ4OmNvbnN0IHA9e3dpZHRoOnJlYWRVaW50MzIoYSxjKSxoZWlnaHQ6cmVhZFVpbnQzMihhLGMrNCkscmVzb2x1dGlvblg6cmVhZFVpbnQzMihhLGMrOCkscmVzb2x1dGlvblk6cmVhZFVpbnQzMihhLGMrMTIpfTs0Mjk0OTY3Mjk1PT09cC5oZWlnaHQmJmRlbGV0ZSBwLmhlaWdodDtjb25zdCBtPWFbYysxNl07cmVhZFVpbnQxNihhLGMrMTcpO3AubG9zc2xlc3M9ISEoMSZtKTtwLnJlZmluZW1lbnQ9ISEoMiZtKTtwLmRlZmF1bHRQaXhlbFZhbHVlPW0+PjImMTtwLmNvbWJpbmF0aW9uT3BlcmF0b3I9bT4+MyYzO3AucmVxdWlyZXNCdWZmZXI9ISEoMzImbSk7cC5jb21iaW5hdGlvbk9wZXJhdG9yT3ZlcnJpZGU9ISEoNjQmbSk7cz1bcF07YnJlYWs7Y2FzZSA0OTpjYXNlIDUwOmNhc2UgNTE6Y2FzZSA2MjpicmVhaztjYXNlIDUzOnM9W2kubnVtYmVyLGEsYyxyXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBKYmlnMkVycm9yKGBzZWdtZW50IHR5cGUgJHtpLnR5cGVOYW1lfSgke2kudHlwZX0pIGlzIG5vdCBpbXBsZW1lbnRlZGApfWNvbnN0IGw9Im9uIitpLnR5cGVOYW1lO2wgaW4gdCYmdFtsXS5hcHBseSh0LHMpfWZ1bmN0aW9uIHByb2Nlc3NTZWdtZW50cyhlLHQpe2ZvcihsZXQgaT0wLGE9ZS5sZW5ndGg7aTxhO2krKylwcm9jZXNzU2VnbWVudChlW2ldLHQpfWNsYXNzIFNpbXBsZVNlZ21lbnRWaXNpdG9ye29uUGFnZUluZm9ybWF0aW9uKGUpe3RoaXMuY3VycmVudFBhZ2VJbmZvPWU7Y29uc3QgdD1lLndpZHRoKzc+PjMsaT1uZXcgVWludDhDbGFtcGVkQXJyYXkodCplLmhlaWdodCk7ZS5kZWZhdWx0UGl4ZWxWYWx1ZSYmaS5maWxsKDI1NSk7dGhpcy5idWZmZXI9aX1kcmF3Qml0bWFwKGUsdCl7Y29uc3QgaT10aGlzLmN1cnJlbnRQYWdlSW5mbyxhPWUud2lkdGgscj1lLmhlaWdodCxzPWkud2lkdGgrNz4+MyxuPWkuY29tYmluYXRpb25PcGVyYXRvck92ZXJyaWRlP2UuY29tYmluYXRpb25PcGVyYXRvcjppLmNvbWJpbmF0aW9uT3BlcmF0b3Isbz10aGlzLmJ1ZmZlcixnPTEyOD4+KDcmZS54KTtsZXQgYyxsLGgsQyxRPWUueSpzKyhlLng+PjMpO3N3aXRjaChuKXtjYXNlIDA6Zm9yKGM9MDtjPHI7YysrKXtoPWc7Qz1RO2ZvcihsPTA7bDxhO2wrKyl7dFtjXVtsXSYmKG9bQ118PWgpO2g+Pj0xO2lmKCFoKXtoPTEyODtDKyt9fVErPXN9YnJlYWs7Y2FzZSAyOmZvcihjPTA7YzxyO2MrKyl7aD1nO0M9UTtmb3IobD0wO2w8YTtsKyspe3RbY11bbF0mJihvW0NdXj1oKTtoPj49MTtpZighaCl7aD0xMjg7QysrfX1RKz1zfWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEpiaWcyRXJyb3IoYG9wZXJhdG9yICR7bn0gaXMgbm90IHN1cHBvcnRlZGApfX1vbkltbWVkaWF0ZUdlbmVyaWNSZWdpb24oZSx0LGksYSl7Y29uc3Qgcj1lLmluZm8scz1uZXcgRGVjb2RpbmdDb250ZXh0KHQsaSxhKSxuPWRlY29kZUJpdG1hcChlLm1tcixyLndpZHRoLHIuaGVpZ2h0LGUudGVtcGxhdGUsZS5wcmVkaWN0aW9uLG51bGwsZS5hdCxzKTt0aGlzLmRyYXdCaXRtYXAocixuKX1vbkltbWVkaWF0ZUxvc3NsZXNzR2VuZXJpY1JlZ2lvbigpe3RoaXMub25JbW1lZGlhdGVHZW5lcmljUmVnaW9uKC4uLmFyZ3VtZW50cyl9b25TeW1ib2xEaWN0aW9uYXJ5KGUsdCxpLGEscixzKXtsZXQgbixvO2lmKGUuaHVmZm1hbil7bj1mdW5jdGlvbiBnZXRTeW1ib2xEaWN0aW9uYXJ5SHVmZm1hblRhYmxlcyhlLHQsaSl7bGV0IGEscixzLG4sbz0wO3N3aXRjaChlLmh1ZmZtYW5ESFNlbGVjdG9yKXtjYXNlIDA6Y2FzZSAxOmE9Z2V0U3RhbmRhcmRUYWJsZShlLmh1ZmZtYW5ESFNlbGVjdG9yKzQpO2JyZWFrO2Nhc2UgMzphPWdldEN1c3RvbUh1ZmZtYW5UYWJsZShvLHQsaSk7bysrO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEpiaWcyRXJyb3IoImludmFsaWQgSHVmZm1hbiBESCBzZWxlY3RvciIpfXN3aXRjaChlLmh1ZmZtYW5EV1NlbGVjdG9yKXtjYXNlIDA6Y2FzZSAxOnI9Z2V0U3RhbmRhcmRUYWJsZShlLmh1ZmZtYW5EV1NlbGVjdG9yKzIpO2JyZWFrO2Nhc2UgMzpyPWdldEN1c3RvbUh1ZmZtYW5UYWJsZShvLHQsaSk7bysrO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEpiaWcyRXJyb3IoImludmFsaWQgSHVmZm1hbiBEVyBzZWxlY3RvciIpfWlmKGUuYml0bWFwU2l6ZVNlbGVjdG9yKXtzPWdldEN1c3RvbUh1ZmZtYW5UYWJsZShvLHQsaSk7bysrfWVsc2Ugcz1nZXRTdGFuZGFyZFRhYmxlKDEpO249ZS5hZ2dyZWdhdGlvbkluc3RhbmNlc1NlbGVjdG9yP2dldEN1c3RvbUh1ZmZtYW5UYWJsZShvLHQsaSk6Z2V0U3RhbmRhcmRUYWJsZSgxKTtyZXR1cm57dGFibGVEZWx0YUhlaWdodDphLHRhYmxlRGVsdGFXaWR0aDpyLHRhYmxlQml0bWFwU2l6ZTpzLHRhYmxlQWdncmVnYXRlSW5zdGFuY2VzOm59fShlLGksdGhpcy5jdXN0b21UYWJsZXMpO289bmV3IFJlYWRlcihhLHIscyl9bGV0IGc9dGhpcy5zeW1ib2xzO2d8fCh0aGlzLnN5bWJvbHM9Zz17fSk7Y29uc3QgYz1bXTtmb3IoY29uc3QgZSBvZiBpKXtjb25zdCB0PWdbZV07dCYmYy5wdXNoKC4uLnQpfWNvbnN0IGw9bmV3IERlY29kaW5nQ29udGV4dChhLHIscyk7Z1t0XT1mdW5jdGlvbiBkZWNvZGVTeW1ib2xEaWN0aW9uYXJ5KGUsdCxpLGEscixzLG4sbyxnLGMsbCxoKXtpZihlJiZ0KXRocm93IG5ldyBKYmlnMkVycm9yKCJzeW1ib2wgcmVmaW5lbWVudCB3aXRoIEh1ZmZtYW4gaXMgbm90IHN1cHBvcnRlZCIpO2NvbnN0IEM9W107bGV0IFE9MCxFPWxvZzIoaS5sZW5ndGgrYSk7Y29uc3QgdT1sLmRlY29kZXIsZD1sLmNvbnRleHRDYWNoZTtsZXQgZixwO2lmKGUpe2Y9Z2V0U3RhbmRhcmRUYWJsZSgxKTtwPVtdO0U9TWF0aC5tYXgoRSwxKX1mb3IoO0MubGVuZ3RoPGE7KXtRKz1lP3MudGFibGVEZWx0YUhlaWdodC5kZWNvZGUoaCk6ZGVjb2RlSW50ZWdlcihkLCJJQURIIix1KTtsZXQgYT0wLHI9MDtjb25zdCBmPWU/cC5sZW5ndGg6MDtmb3IoOzspe2NvbnN0IGY9ZT9zLnRhYmxlRGVsdGFXaWR0aC5kZWNvZGUoaCk6ZGVjb2RlSW50ZWdlcihkLCJJQURXIix1KTtpZihudWxsPT09ZilicmVhazthKz1mO3IrPWE7bGV0IG07aWYodCl7Y29uc3Qgcj1kZWNvZGVJbnRlZ2VyKGQsIklBQUkiLHUpO2lmKHI+MSltPWRlY29kZVRleHRSZWdpb24oZSx0LGEsUSwwLHIsMSxpLmNvbmNhdChDKSxFLDAsMCwxLDAscyxnLGMsbCwwLGgpO2Vsc2V7Y29uc3QgZT1kZWNvZGVJQUlEKGQsdSxFKSx0PWRlY29kZUludGVnZXIoZCwiSUFSRFgiLHUpLHI9ZGVjb2RlSW50ZWdlcihkLCJJQVJEWSIsdSk7bT1kZWNvZGVSZWZpbmVtZW50KGEsUSxnLGU8aS5sZW5ndGg/aVtlXTpDW2UtaS5sZW5ndGhdLHQsciwhMSxjLGwpfUMucHVzaChtKX1lbHNlIGlmKGUpcC5wdXNoKGEpO2Vsc2V7bT1kZWNvZGVCaXRtYXAoITEsYSxRLG4sITEsbnVsbCxvLGwpO0MucHVzaChtKX19aWYoZSYmIXQpe2NvbnN0IGU9cy50YWJsZUJpdG1hcFNpemUuZGVjb2RlKGgpO2guYnl0ZUFsaWduKCk7bGV0IHQ7aWYoMD09PWUpdD1yZWFkVW5jb21wcmVzc2VkQml0bWFwKGgscixRKTtlbHNle2NvbnN0IGk9aC5lbmQsYT1oLnBvc2l0aW9uK2U7aC5lbmQ9YTt0PWRlY29kZU1NUkJpdG1hcChoLHIsUSwhMSk7aC5lbmQ9aTtoLnBvc2l0aW9uPWF9Y29uc3QgaT1wLmxlbmd0aDtpZihmPT09aS0xKUMucHVzaCh0KTtlbHNle2xldCBlLGEscixzLG4sbz0wO2ZvcihlPWY7ZTxpO2UrKyl7cz1wW2VdO3I9bytzO249W107Zm9yKGE9MDthPFE7YSsrKW4ucHVzaCh0W2FdLnN1YmFycmF5KG8scikpO0MucHVzaChuKTtvPXJ9fX19Y29uc3QgbT1bXSx5PVtdO2xldCB3LGIsRD0hMTtjb25zdCBTPWkubGVuZ3RoK2E7Zm9yKDt5Lmxlbmd0aDxTOyl7bGV0IHQ9ZT9mLmRlY29kZShoKTpkZWNvZGVJbnRlZ2VyKGQsIklBRVgiLHUpO2Zvcig7dC0tOyl5LnB1c2goRCk7RD0hRH1mb3Iodz0wLGI9aS5sZW5ndGg7dzxiO3crKyl5W3ddJiZtLnB1c2goaVt3XSk7Zm9yKGxldCBlPTA7ZTxhO3crKyxlKyspeVt3XSYmbS5wdXNoKENbZV0pO3JldHVybiBtfShlLmh1ZmZtYW4sZS5yZWZpbmVtZW50LGMsZS5udW1iZXJPZk5ld1N5bWJvbHMsZS5udW1iZXJPZkV4cG9ydGVkU3ltYm9scyxuLGUudGVtcGxhdGUsZS5hdCxlLnJlZmluZW1lbnRUZW1wbGF0ZSxlLnJlZmluZW1lbnRBdCxsLG8pfW9uSW1tZWRpYXRlVGV4dFJlZ2lvbihlLHQsaSxhLHIpe2NvbnN0IHM9ZS5pbmZvO2xldCBuLG87Y29uc3QgZz10aGlzLnN5bWJvbHMsYz1bXTtmb3IoY29uc3QgZSBvZiB0KXtjb25zdCB0PWdbZV07dCYmYy5wdXNoKC4uLnQpfWNvbnN0IGw9bG9nMihjLmxlbmd0aCk7aWYoZS5odWZmbWFuKXtvPW5ldyBSZWFkZXIoaSxhLHIpO249ZnVuY3Rpb24gZ2V0VGV4dFJlZ2lvbkh1ZmZtYW5UYWJsZXMoZSx0LGksYSxyKXtjb25zdCBzPVtdO2ZvcihsZXQgZT0wO2U8PTM0O2UrKyl7Y29uc3QgdD1yLnJlYWRCaXRzKDQpO3MucHVzaChuZXcgSHVmZm1hbkxpbmUoW2UsdCwwLDBdKSl9Y29uc3Qgbj1uZXcgSHVmZm1hblRhYmxlKHMsITEpO3MubGVuZ3RoPTA7Zm9yKGxldCBlPTA7ZTxhOyl7Y29uc3QgdD1uLmRlY29kZShyKTtpZih0Pj0zMil7bGV0IGksYSxuO3N3aXRjaCh0KXtjYXNlIDMyOmlmKDA9PT1lKXRocm93IG5ldyBKYmlnMkVycm9yKCJubyBwcmV2aW91cyB2YWx1ZSBpbiBzeW1ib2wgSUQgdGFibGUiKTthPXIucmVhZEJpdHMoMikrMztpPXNbZS0xXS5wcmVmaXhMZW5ndGg7YnJlYWs7Y2FzZSAzMzphPXIucmVhZEJpdHMoMykrMztpPTA7YnJlYWs7Y2FzZSAzNDphPXIucmVhZEJpdHMoNykrMTE7aT0wO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEpiaWcyRXJyb3IoImludmFsaWQgY29kZSBsZW5ndGggaW4gc3ltYm9sIElEIHRhYmxlIil9Zm9yKG49MDtuPGE7bisrKXtzLnB1c2gobmV3IEh1ZmZtYW5MaW5lKFtlLGksMCwwXSkpO2UrK319ZWxzZXtzLnB1c2gobmV3IEh1ZmZtYW5MaW5lKFtlLHQsMCwwXSkpO2UrK319ci5ieXRlQWxpZ24oKTtjb25zdCBvPW5ldyBIdWZmbWFuVGFibGUocywhMSk7bGV0IGcsYyxsLGg9MDtzd2l0Y2goZS5odWZmbWFuRlMpe2Nhc2UgMDpjYXNlIDE6Zz1nZXRTdGFuZGFyZFRhYmxlKGUuaHVmZm1hbkZTKzYpO2JyZWFrO2Nhc2UgMzpnPWdldEN1c3RvbUh1ZmZtYW5UYWJsZShoLHQsaSk7aCsrO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEpiaWcyRXJyb3IoImludmFsaWQgSHVmZm1hbiBGUyBzZWxlY3RvciIpfXN3aXRjaChlLmh1ZmZtYW5EUyl7Y2FzZSAwOmNhc2UgMTpjYXNlIDI6Yz1nZXRTdGFuZGFyZFRhYmxlKGUuaHVmZm1hbkRTKzgpO2JyZWFrO2Nhc2UgMzpjPWdldEN1c3RvbUh1ZmZtYW5UYWJsZShoLHQsaSk7aCsrO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEpiaWcyRXJyb3IoImludmFsaWQgSHVmZm1hbiBEUyBzZWxlY3RvciIpfXN3aXRjaChlLmh1ZmZtYW5EVCl7Y2FzZSAwOmNhc2UgMTpjYXNlIDI6bD1nZXRTdGFuZGFyZFRhYmxlKGUuaHVmZm1hbkRUKzExKTticmVhaztjYXNlIDM6bD1nZXRDdXN0b21IdWZmbWFuVGFibGUoaCx0LGkpO2grKzticmVhaztkZWZhdWx0OnRocm93IG5ldyBKYmlnMkVycm9yKCJpbnZhbGlkIEh1ZmZtYW4gRFQgc2VsZWN0b3IiKX1pZihlLnJlZmluZW1lbnQpdGhyb3cgbmV3IEpiaWcyRXJyb3IoInJlZmluZW1lbnQgd2l0aCBIdWZmbWFuIGlzIG5vdCBzdXBwb3J0ZWQiKTtyZXR1cm57c3ltYm9sSURUYWJsZTpvLHRhYmxlRmlyc3RTOmcsdGFibGVEZWx0YVM6Yyx0YWJsZURlbHRhVDpsfX0oZSx0LHRoaXMuY3VzdG9tVGFibGVzLGMubGVuZ3RoLG8pfWNvbnN0IGg9bmV3IERlY29kaW5nQ29udGV4dChpLGEsciksQz1kZWNvZGVUZXh0UmVnaW9uKGUuaHVmZm1hbixlLnJlZmluZW1lbnQscy53aWR0aCxzLmhlaWdodCxlLmRlZmF1bHRQaXhlbFZhbHVlLGUubnVtYmVyT2ZTeW1ib2xJbnN0YW5jZXMsZS5zdHJpcFNpemUsYyxsLGUudHJhbnNwb3NlZCxlLmRzT2Zmc2V0LGUucmVmZXJlbmNlQ29ybmVyLGUuY29tYmluYXRpb25PcGVyYXRvcixuLGUucmVmaW5lbWVudFRlbXBsYXRlLGUucmVmaW5lbWVudEF0LGgsZS5sb2dTdHJpcFNpemUsbyk7dGhpcy5kcmF3Qml0bWFwKHMsQyl9b25JbW1lZGlhdGVMb3NzbGVzc1RleHRSZWdpb24oKXt0aGlzLm9uSW1tZWRpYXRlVGV4dFJlZ2lvbiguLi5hcmd1bWVudHMpfW9uUGF0dGVybkRpY3Rpb25hcnkoZSx0LGksYSxyKXtsZXQgcz10aGlzLnBhdHRlcm5zO3N8fCh0aGlzLnBhdHRlcm5zPXM9e30pO2NvbnN0IG49bmV3IERlY29kaW5nQ29udGV4dChpLGEscik7c1t0XT1mdW5jdGlvbiBkZWNvZGVQYXR0ZXJuRGljdGlvbmFyeShlLHQsaSxhLHIscyl7Y29uc3Qgbj1bXTtpZighZSl7bi5wdXNoKHt4Oi10LHk6MH0pOzA9PT1yJiZuLnB1c2goe3g6LTMseTotMX0se3g6Mix5Oi0yfSx7eDotMix5Oi0yfSl9Y29uc3Qgbz1kZWNvZGVCaXRtYXAoZSwoYSsxKSp0LGksciwhMSxudWxsLG4scyksZz1bXTtmb3IobGV0IGU9MDtlPD1hO2UrKyl7Y29uc3QgYT1bXSxyPXQqZSxzPXIrdDtmb3IobGV0IGU9MDtlPGk7ZSsrKWEucHVzaChvW2VdLnN1YmFycmF5KHIscykpO2cucHVzaChhKX1yZXR1cm4gZ30oZS5tbXIsZS5wYXR0ZXJuV2lkdGgsZS5wYXR0ZXJuSGVpZ2h0LGUubWF4UGF0dGVybkluZGV4LGUudGVtcGxhdGUsbil9b25JbW1lZGlhdGVIYWxmdG9uZVJlZ2lvbihlLHQsaSxhLHIpe2NvbnN0IHM9dGhpcy5wYXR0ZXJuc1t0WzBdXSxuPWUuaW5mbyxvPW5ldyBEZWNvZGluZ0NvbnRleHQoaSxhLHIpLGc9ZnVuY3Rpb24gZGVjb2RlSGFsZnRvbmVSZWdpb24oZSx0LGksYSxyLHMsbixvLGcsYyxsLGgsQyxRLEUpe2lmKG4pdGhyb3cgbmV3IEpiaWcyRXJyb3IoInNraXAgaXMgbm90IHN1cHBvcnRlZCIpO2lmKDAhPT1vKXRocm93IG5ldyBKYmlnMkVycm9yKGBvcGVyYXRvciAiJHtvfSIgaXMgbm90IHN1cHBvcnRlZCBpbiBoYWxmdG9uZSByZWdpb25gKTtjb25zdCB1PVtdO2xldCBkLGYscDtmb3IoZD0wO2Q8cjtkKyspe3A9bmV3IFVpbnQ4QXJyYXkoYSk7aWYocylmb3IoZj0wO2Y8YTtmKyspcFtmXT1zO3UucHVzaChwKX1jb25zdCBtPXQubGVuZ3RoLHk9dFswXSx3PXlbMF0ubGVuZ3RoLGI9eS5sZW5ndGgsRD1sb2cyKG0pLFM9W107aWYoIWUpe1MucHVzaCh7eDppPD0xPzM6Mix5Oi0xfSk7MD09PWkmJlMucHVzaCh7eDotMyx5Oi0xfSx7eDoyLHk6LTJ9LHt4Oi0yLHk6LTJ9KX1jb25zdCBrPVtdO2xldCBSLE4sRyxNLFUseCxMLEgsSix2LFk7ZSYmKFI9bmV3IFJlYWRlcihFLmRhdGEsRS5zdGFydCxFLmVuZCkpO2ZvcihkPUQtMTtkPj0wO2QtLSl7Tj1lP2RlY29kZU1NUkJpdG1hcChSLGcsYywhMCk6ZGVjb2RlQml0bWFwKCExLGcsYyxpLCExLG51bGwsUyxFKTtrW2RdPU59Zm9yKEc9MDtHPGM7RysrKWZvcihNPTA7TTxnO00rKyl7VT0wO3g9MDtmb3IoZj1ELTE7Zj49MDtmLS0pe1VePWtbZl1bR11bTV07eHw9VTw8Zn1MPXRbeF07SD1sK0cqUStNKkM+Pjg7Sj1oK0cqQy1NKlE+Pjg7aWYoSD49MCYmSCt3PD1hJiZKPj0wJiZKK2I8PXIpZm9yKGQ9MDtkPGI7ZCsrKXtZPXVbSitkXTt2PUxbZF07Zm9yKGY9MDtmPHc7ZisrKVlbSCtmXXw9dltmXX1lbHNle2xldCBlLHQ7Zm9yKGQ9MDtkPGI7ZCsrKXt0PUorZDtpZighKHQ8MHx8dD49cikpe1k9dVt0XTt2PUxbZF07Zm9yKGY9MDtmPHc7ZisrKXtlPUgrZjtlPj0wJiZlPGEmJihZW2VdfD12W2ZdKX19fX19cmV0dXJuIHV9KGUubW1yLHMsZS50ZW1wbGF0ZSxuLndpZHRoLG4uaGVpZ2h0LGUuZGVmYXVsdFBpeGVsVmFsdWUsZS5lbmFibGVTa2lwLGUuY29tYmluYXRpb25PcGVyYXRvcixlLmdyaWRXaWR0aCxlLmdyaWRIZWlnaHQsZS5ncmlkT2Zmc2V0WCxlLmdyaWRPZmZzZXRZLGUuZ3JpZFZlY3RvclgsZS5ncmlkVmVjdG9yWSxvKTt0aGlzLmRyYXdCaXRtYXAobixnKX1vbkltbWVkaWF0ZUxvc3NsZXNzSGFsZnRvbmVSZWdpb24oKXt0aGlzLm9uSW1tZWRpYXRlSGFsZnRvbmVSZWdpb24oLi4uYXJndW1lbnRzKX1vblRhYmxlcyhlLHQsaSxhKXtsZXQgcj10aGlzLmN1c3RvbVRhYmxlcztyfHwodGhpcy5jdXN0b21UYWJsZXM9cj17fSk7cltlXT1mdW5jdGlvbiBkZWNvZGVUYWJsZXNTZWdtZW50KGUsdCxpKXtjb25zdCBhPWVbdF0scj00Mjk0OTY3Mjk1JnJlYWRVaW50MzIoZSx0KzEpLHM9NDI5NDk2NzI5NSZyZWFkVWludDMyKGUsdCs1KSxuPW5ldyBSZWFkZXIoZSx0KzksaSksbz0xKyhhPj4xJjcpLGc9MSsoYT4+NCY3KSxjPVtdO2xldCBsLGgsQz1yO2Rve2w9bi5yZWFkQml0cyhvKTtoPW4ucmVhZEJpdHMoZyk7Yy5wdXNoKG5ldyBIdWZmbWFuTGluZShbQyxsLGgsMF0pKTtDKz0xPDxofXdoaWxlKEM8cyk7bD1uLnJlYWRCaXRzKG8pO2MucHVzaChuZXcgSHVmZm1hbkxpbmUoW3ItMSxsLDMyLDAsImxvd2VyIl0pKTtsPW4ucmVhZEJpdHMobyk7Yy5wdXNoKG5ldyBIdWZmbWFuTGluZShbcyxsLDMyLDBdKSk7aWYoMSZhKXtsPW4ucmVhZEJpdHMobyk7Yy5wdXNoKG5ldyBIdWZmbWFuTGluZShbbCwwXSkpfXJldHVybiBuZXcgSHVmZm1hblRhYmxlKGMsITEpfSh0LGksYSl9fWNsYXNzIEh1ZmZtYW5MaW5le2NvbnN0cnVjdG9yKGUpe2lmKDI9PT1lLmxlbmd0aCl7dGhpcy5pc09PQj0hMDt0aGlzLnJhbmdlTG93PTA7dGhpcy5wcmVmaXhMZW5ndGg9ZVswXTt0aGlzLnJhbmdlTGVuZ3RoPTA7dGhpcy5wcmVmaXhDb2RlPWVbMV07dGhpcy5pc0xvd2VyUmFuZ2U9ITF9ZWxzZXt0aGlzLmlzT09CPSExO3RoaXMucmFuZ2VMb3c9ZVswXTt0aGlzLnByZWZpeExlbmd0aD1lWzFdO3RoaXMucmFuZ2VMZW5ndGg9ZVsyXTt0aGlzLnByZWZpeENvZGU9ZVszXTt0aGlzLmlzTG93ZXJSYW5nZT0ibG93ZXIiPT09ZVs0XX19fWNsYXNzIEh1ZmZtYW5UcmVlTm9kZXtjb25zdHJ1Y3RvcihlKXt0aGlzLmNoaWxkcmVuPVtdO2lmKGUpe3RoaXMuaXNMZWFmPSEwO3RoaXMucmFuZ2VMZW5ndGg9ZS5yYW5nZUxlbmd0aDt0aGlzLnJhbmdlTG93PWUucmFuZ2VMb3c7dGhpcy5pc0xvd2VyUmFuZ2U9ZS5pc0xvd2VyUmFuZ2U7dGhpcy5pc09PQj1lLmlzT09CfWVsc2UgdGhpcy5pc0xlYWY9ITF9YnVpbGRUcmVlKGUsdCl7Y29uc3QgaT1lLnByZWZpeENvZGU+PnQmMTtpZih0PD0wKXRoaXMuY2hpbGRyZW5baV09bmV3IEh1ZmZtYW5UcmVlTm9kZShlKTtlbHNle2xldCBhPXRoaXMuY2hpbGRyZW5baV07YXx8KHRoaXMuY2hpbGRyZW5baV09YT1uZXcgSHVmZm1hblRyZWVOb2RlKG51bGwpKTthLmJ1aWxkVHJlZShlLHQtMSl9fWRlY29kZU5vZGUoZSl7aWYodGhpcy5pc0xlYWYpe2lmKHRoaXMuaXNPT0IpcmV0dXJuIG51bGw7Y29uc3QgdD1lLnJlYWRCaXRzKHRoaXMucmFuZ2VMZW5ndGgpO3JldHVybiB0aGlzLnJhbmdlTG93Kyh0aGlzLmlzTG93ZXJSYW5nZT8tdDp0KX1jb25zdCB0PXRoaXMuY2hpbGRyZW5bZS5yZWFkQml0KCldO2lmKCF0KXRocm93IG5ldyBKYmlnMkVycm9yKCJpbnZhbGlkIEh1ZmZtYW4gZGF0YSIpO3JldHVybiB0LmRlY29kZU5vZGUoZSl9fWNsYXNzIEh1ZmZtYW5UYWJsZXtjb25zdHJ1Y3RvcihlLHQpe3R8fHRoaXMuYXNzaWduUHJlZml4Q29kZXMoZSk7dGhpcy5yb290Tm9kZT1uZXcgSHVmZm1hblRyZWVOb2RlKG51bGwpO2ZvcihsZXQgdD0wLGk9ZS5sZW5ndGg7dDxpO3QrKyl7Y29uc3QgaT1lW3RdO2kucHJlZml4TGVuZ3RoPjAmJnRoaXMucm9vdE5vZGUuYnVpbGRUcmVlKGksaS5wcmVmaXhMZW5ndGgtMSl9fWRlY29kZShlKXtyZXR1cm4gdGhpcy5yb290Tm9kZS5kZWNvZGVOb2RlKGUpfWFzc2lnblByZWZpeENvZGVzKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7bGV0IGk9MDtmb3IobGV0IGE9MDthPHQ7YSsrKWk9TWF0aC5tYXgoaSxlW2FdLnByZWZpeExlbmd0aCk7Y29uc3QgYT1uZXcgVWludDMyQXJyYXkoaSsxKTtmb3IobGV0IGk9MDtpPHQ7aSsrKWFbZVtpXS5wcmVmaXhMZW5ndGhdKys7bGV0IHIscyxuLG89MSxnPTA7YVswXT0wO2Zvcig7bzw9aTspe2c9ZythW28tMV08PDE7cj1nO3M9MDtmb3IoO3M8dDspe249ZVtzXTtpZihuLnByZWZpeExlbmd0aD09PW8pe24ucHJlZml4Q29kZT1yO3IrK31zKyt9bysrfX19Y29uc3QganQ9e307ZnVuY3Rpb24gZ2V0U3RhbmRhcmRUYWJsZShlKXtsZXQgdCxpPWp0W2VdO2lmKGkpcmV0dXJuIGk7c3dpdGNoKGUpe2Nhc2UgMTp0PVtbMCwxLDQsMF0sWzE2LDIsOCwyXSxbMjcyLDMsMTYsNl0sWzY1ODA4LDMsMzIsN11dO2JyZWFrO2Nhc2UgMjp0PVtbMCwxLDAsMF0sWzEsMiwwLDJdLFsyLDMsMCw2XSxbMyw0LDMsMTRdLFsxMSw1LDYsMzBdLFs3NSw2LDMyLDYyXSxbNiw2M11dO2JyZWFrO2Nhc2UgMzp0PVtbLTI1Niw4LDgsMjU0XSxbMCwxLDAsMF0sWzEsMiwwLDJdLFsyLDMsMCw2XSxbMyw0LDMsMTRdLFsxMSw1LDYsMzBdLFstMjU3LDgsMzIsMjU1LCJsb3dlciJdLFs3NSw3LDMyLDEyNl0sWzYsNjJdXTticmVhaztjYXNlIDQ6dD1bWzEsMSwwLDBdLFsyLDIsMCwyXSxbMywzLDAsNl0sWzQsNCwzLDE0XSxbMTIsNSw2LDMwXSxbNzYsNSwzMiwzMV1dO2JyZWFrO2Nhc2UgNTp0PVtbLTI1NSw3LDgsMTI2XSxbMSwxLDAsMF0sWzIsMiwwLDJdLFszLDMsMCw2XSxbNCw0LDMsMTRdLFsxMiw1LDYsMzBdLFstMjU2LDcsMzIsMTI3LCJsb3dlciJdLFs3Niw2LDMyLDYyXV07YnJlYWs7Y2FzZSA2OnQ9W1stMjA0OCw1LDEwLDI4XSxbLTEwMjQsNCw5LDhdLFstNTEyLDQsOCw5XSxbLTI1Niw0LDcsMTBdLFstMTI4LDUsNiwyOV0sWy02NCw1LDUsMzBdLFstMzIsNCw1LDExXSxbMCwyLDcsMF0sWzEyOCwzLDcsMl0sWzI1NiwzLDgsM10sWzUxMiw0LDksMTJdLFsxMDI0LDQsMTAsMTNdLFstMjA0OSw2LDMyLDYyLCJsb3dlciJdLFsyMDQ4LDYsMzIsNjNdXTticmVhaztjYXNlIDc6dD1bWy0xMDI0LDQsOSw4XSxbLTUxMiwzLDgsMF0sWy0yNTYsNCw3LDldLFstMTI4LDUsNiwyNl0sWy02NCw1LDUsMjddLFstMzIsNCw1LDEwXSxbMCw0LDUsMTFdLFszMiw1LDUsMjhdLFs2NCw1LDYsMjldLFsxMjgsNCw3LDEyXSxbMjU2LDMsOCwxXSxbNTEyLDMsOSwyXSxbMTAyNCwzLDEwLDNdLFstMTAyNSw1LDMyLDMwLCJsb3dlciJdLFsyMDQ4LDUsMzIsMzFdXTticmVhaztjYXNlIDg6dD1bWy0xNSw4LDMsMjUyXSxbLTcsOSwxLDUwOF0sWy01LDgsMSwyNTNdLFstMyw5LDAsNTA5XSxbLTIsNywwLDEyNF0sWy0xLDQsMCwxMF0sWzAsMiwxLDBdLFsyLDUsMCwyNl0sWzMsNiwwLDU4XSxbNCwzLDQsNF0sWzIwLDYsMSw1OV0sWzIyLDQsNCwxMV0sWzM4LDQsNSwxMl0sWzcwLDUsNiwyN10sWzEzNCw1LDcsMjhdLFsyNjIsNiw3LDYwXSxbMzkwLDcsOCwxMjVdLFs2NDYsNiwxMCw2MV0sWy0xNiw5LDMyLDUxMCwibG93ZXIiXSxbMTY3MCw5LDMyLDUxMV0sWzIsMV1dO2JyZWFrO2Nhc2UgOTp0PVtbLTMxLDgsNCwyNTJdLFstMTUsOSwyLDUwOF0sWy0xMSw4LDIsMjUzXSxbLTcsOSwxLDUwOV0sWy01LDcsMSwxMjRdLFstMyw0LDEsMTBdLFstMSwzLDEsMl0sWzEsMywxLDNdLFszLDUsMSwyNl0sWzUsNiwxLDU4XSxbNywzLDUsNF0sWzM5LDYsMiw1OV0sWzQzLDQsNSwxMV0sWzc1LDQsNiwxMl0sWzEzOSw1LDcsMjddLFsyNjcsNSw4LDI4XSxbNTIzLDYsOCw2MF0sWzc3OSw3LDksMTI1XSxbMTI5MSw2LDExLDYxXSxbLTMyLDksMzIsNTEwLCJsb3dlciJdLFszMzM5LDksMzIsNTExXSxbMiwwXV07YnJlYWs7Y2FzZSAxMDp0PVtbLTIxLDcsNCwxMjJdLFstNSw4LDAsMjUyXSxbLTQsNywwLDEyM10sWy0zLDUsMCwyNF0sWy0yLDIsMiwwXSxbMiw1LDAsMjVdLFszLDYsMCw1NF0sWzQsNywwLDEyNF0sWzUsOCwwLDI1M10sWzYsMiw2LDFdLFs3MCw1LDUsMjZdLFsxMDIsNiw1LDU1XSxbMTM0LDYsNiw1Nl0sWzE5OCw2LDcsNTddLFszMjYsNiw4LDU4XSxbNTgyLDYsOSw1OV0sWzEwOTQsNiwxMCw2MF0sWzIxMTgsNywxMSwxMjVdLFstMjIsOCwzMiwyNTQsImxvd2VyIl0sWzQxNjYsOCwzMiwyNTVdLFsyLDJdXTticmVhaztjYXNlIDExOnQ9W1sxLDEsMCwwXSxbMiwyLDEsMl0sWzQsNCwwLDEyXSxbNSw0LDEsMTNdLFs3LDUsMSwyOF0sWzksNSwyLDI5XSxbMTMsNiwyLDYwXSxbMTcsNywyLDEyMl0sWzIxLDcsMywxMjNdLFsyOSw3LDQsMTI0XSxbNDUsNyw1LDEyNV0sWzc3LDcsNiwxMjZdLFsxNDEsNywzMiwxMjddXTticmVhaztjYXNlIDEyOnQ9W1sxLDEsMCwwXSxbMiwyLDAsMl0sWzMsMywxLDZdLFs1LDUsMCwyOF0sWzYsNSwxLDI5XSxbOCw2LDEsNjBdLFsxMCw3LDAsMTIyXSxbMTEsNywxLDEyM10sWzEzLDcsMiwxMjRdLFsxNyw3LDMsMTI1XSxbMjUsNyw0LDEyNl0sWzQxLDgsNSwyNTRdLFs3Myw4LDMyLDI1NV1dO2JyZWFrO2Nhc2UgMTM6dD1bWzEsMSwwLDBdLFsyLDMsMCw0XSxbMyw0LDAsMTJdLFs0LDUsMCwyOF0sWzUsNCwxLDEzXSxbNywzLDMsNV0sWzE1LDYsMSw1OF0sWzE3LDYsMiw1OV0sWzIxLDYsMyw2MF0sWzI5LDYsNCw2MV0sWzQ1LDYsNSw2Ml0sWzc3LDcsNiwxMjZdLFsxNDEsNywzMiwxMjddXTticmVhaztjYXNlIDE0OnQ9W1stMiwzLDAsNF0sWy0xLDMsMCw1XSxbMCwxLDAsMF0sWzEsMywwLDZdLFsyLDMsMCw3XV07YnJlYWs7Y2FzZSAxNTp0PVtbLTI0LDcsNCwxMjRdLFstOCw2LDIsNjBdLFstNCw1LDEsMjhdLFstMiw0LDAsMTJdLFstMSwzLDAsNF0sWzAsMSwwLDBdLFsxLDMsMCw1XSxbMiw0LDAsMTNdLFszLDUsMSwyOV0sWzUsNiwyLDYxXSxbOSw3LDQsMTI1XSxbLTI1LDcsMzIsMTI2LCJsb3dlciJdLFsyNSw3LDMyLDEyN11dO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEpiaWcyRXJyb3IoYHN0YW5kYXJkIHRhYmxlIEIuJHtlfSBkb2VzIG5vdCBleGlzdGApfWZvcihsZXQgZT0wLGk9dC5sZW5ndGg7ZTxpO2UrKyl0W2VdPW5ldyBIdWZmbWFuTGluZSh0W2VdKTtpPW5ldyBIdWZmbWFuVGFibGUodCwhMCk7anRbZV09aTtyZXR1cm4gaX1jbGFzcyBSZWFkZXJ7Y29uc3RydWN0b3IoZSx0LGkpe3RoaXMuZGF0YT1lO3RoaXMuc3RhcnQ9dDt0aGlzLmVuZD1pO3RoaXMucG9zaXRpb249dDt0aGlzLnNoaWZ0PS0xO3RoaXMuY3VycmVudEJ5dGU9MH1yZWFkQml0KCl7aWYodGhpcy5zaGlmdDwwKXtpZih0aGlzLnBvc2l0aW9uPj10aGlzLmVuZCl0aHJvdyBuZXcgSmJpZzJFcnJvcigiZW5kIG9mIGRhdGEgd2hpbGUgcmVhZGluZyBiaXQiKTt0aGlzLmN1cnJlbnRCeXRlPXRoaXMuZGF0YVt0aGlzLnBvc2l0aW9uKytdO3RoaXMuc2hpZnQ9N31jb25zdCBlPXRoaXMuY3VycmVudEJ5dGU+PnRoaXMuc2hpZnQmMTt0aGlzLnNoaWZ0LS07cmV0dXJuIGV9cmVhZEJpdHMoZSl7bGV0IHQsaT0wO2Zvcih0PWUtMTt0Pj0wO3QtLSlpfD10aGlzLnJlYWRCaXQoKTw8dDtyZXR1cm4gaX1ieXRlQWxpZ24oKXt0aGlzLnNoaWZ0PS0xfW5leHQoKXtyZXR1cm4gdGhpcy5wb3NpdGlvbj49dGhpcy5lbmQ/LTE6dGhpcy5kYXRhW3RoaXMucG9zaXRpb24rK119fWZ1bmN0aW9uIGdldEN1c3RvbUh1ZmZtYW5UYWJsZShlLHQsaSl7bGV0IGE9MDtmb3IobGV0IHI9MCxzPXQubGVuZ3RoO3I8cztyKyspe2NvbnN0IHM9aVt0W3JdXTtpZihzKXtpZihlPT09YSlyZXR1cm4gczthKyt9fXRocm93IG5ldyBKYmlnMkVycm9yKCJjYW4ndCBmaW5kIGN1c3RvbSBIdWZmbWFuIHRhYmxlIil9ZnVuY3Rpb24gcmVhZFVuY29tcHJlc3NlZEJpdG1hcChlLHQsaSl7Y29uc3QgYT1bXTtmb3IobGV0IHI9MDtyPGk7cisrKXtjb25zdCBpPW5ldyBVaW50OEFycmF5KHQpO2EucHVzaChpKTtmb3IobGV0IGE9MDthPHQ7YSsrKWlbYV09ZS5yZWFkQml0KCk7ZS5ieXRlQWxpZ24oKX1yZXR1cm4gYX1mdW5jdGlvbiBkZWNvZGVNTVJCaXRtYXAoZSx0LGksYSl7Y29uc3Qgcj1uZXcgQ0NJVFRGYXhEZWNvZGVyKGUse0s6LTEsQ29sdW1uczp0LFJvd3M6aSxCbGFja0lzMTohMCxFbmRPZkJsb2NrOmF9KSxzPVtdO2xldCBuLG89ITE7Zm9yKGxldCBlPTA7ZTxpO2UrKyl7Y29uc3QgZT1uZXcgVWludDhBcnJheSh0KTtzLnB1c2goZSk7bGV0IGk9LTE7Zm9yKGxldCBhPTA7YTx0O2ErKyl7aWYoaTwwKXtuPXIucmVhZE5leHRDaGFyKCk7aWYoLTE9PT1uKXtuPTA7bz0hMH1pPTd9ZVthXT1uPj5pJjE7aS0tfX1pZihhJiYhbyl7Y29uc3QgZT01O2ZvcihsZXQgdD0wO3Q8ZSYmLTEhPT1yLnJlYWROZXh0Q2hhcigpO3QrKyk7fXJldHVybiBzfWNsYXNzIEpiaWcySW1hZ2V7cGFyc2VDaHVua3MoZSl7cmV0dXJuIGZ1bmN0aW9uIHBhcnNlSmJpZzJDaHVua3MoZSl7Y29uc3QgdD1uZXcgU2ltcGxlU2VnbWVudFZpc2l0b3I7Zm9yKGxldCBpPTAsYT1lLmxlbmd0aDtpPGE7aSsrKXtjb25zdCBhPWVbaV07cHJvY2Vzc1NlZ21lbnRzKHJlYWRTZWdtZW50cyh7fSxhLmRhdGEsYS5zdGFydCxhLmVuZCksdCl9cmV0dXJuIHQuYnVmZmVyfShlKX1wYXJzZShlKXt0aHJvdyBuZXcgRXJyb3IoIk5vdCBpbXBsZW1lbnRlZDogSmJpZzJJbWFnZS5wYXJzZSIpfX1jbGFzcyBKYmlnMlN0cmVhbSBleHRlbmRzIERlY29kZVN0cmVhbXtjb25zdHJ1Y3RvcihlLHQsaSl7c3VwZXIodCk7dGhpcy5zdHJlYW09ZTt0aGlzLmRpY3Q9ZS5kaWN0O3RoaXMubWF5YmVMZW5ndGg9dDt0aGlzLnBhcmFtcz1pfWdldCBieXRlcygpe3JldHVybiBzaGFkb3codGhpcywiYnl0ZXMiLHRoaXMuc3RyZWFtLmdldEJ5dGVzKHRoaXMubWF5YmVMZW5ndGgpKX1lbnN1cmVCdWZmZXIoZSl7fXJlYWRCbG9jaygpe3RoaXMuZGVjb2RlSW1hZ2UoKX1kZWNvZGVJbWFnZShlKXtpZih0aGlzLmVvZilyZXR1cm4gdGhpcy5idWZmZXI7ZXx8PXRoaXMuYnl0ZXM7Y29uc3QgdD1uZXcgSmJpZzJJbWFnZSxpPVtdO2lmKHRoaXMucGFyYW1zIGluc3RhbmNlb2YgRGljdCl7Y29uc3QgZT10aGlzLnBhcmFtcy5nZXQoIkpCSUcyR2xvYmFscyIpO2lmKGUgaW5zdGFuY2VvZiBCYXNlU3RyZWFtKXtjb25zdCB0PWUuZ2V0Qnl0ZXMoKTtpLnB1c2goe2RhdGE6dCxzdGFydDowLGVuZDp0Lmxlbmd0aH0pfX1pLnB1c2goe2RhdGE6ZSxzdGFydDowLGVuZDplLmxlbmd0aH0pO2NvbnN0IGE9dC5wYXJzZUNodW5rcyhpKSxyPWEubGVuZ3RoO2ZvcihsZXQgZT0wO2U8cjtlKyspYVtlXV49MjU1O3RoaXMuYnVmZmVyPWE7dGhpcy5idWZmZXJMZW5ndGg9cjt0aGlzLmVvZj0hMDtyZXR1cm4gdGhpcy5idWZmZXJ9Z2V0IGNhbkFzeW5jRGVjb2RlSW1hZ2VGcm9tQnVmZmVyKCl7cmV0dXJuIHRoaXMuc3RyZWFtLmlzQXN5bmN9fWZ1bmN0aW9uIGNvbnZlcnRUb1JHQkEoZSl7c3dpdGNoKGUua2luZCl7Y2FzZSBTOnJldHVybiBjb252ZXJ0QmxhY2tBbmRXaGl0ZVRvUkdCQShlKTtjYXNlIGs6cmV0dXJuIGZ1bmN0aW9uIGNvbnZlcnRSR0JUb1JHQkEoe3NyYzplLHNyY1Bvczp0PTAsZGVzdDppLGRlc3RQb3M6YT0wLHdpZHRoOnIsaGVpZ2h0OnN9KXtsZXQgbj0wO2NvbnN0IG89cipzKjMsZz1vPj4yLGM9bmV3IFVpbnQzMkFycmF5KGUuYnVmZmVyLHQsZyk7aWYoRmVhdHVyZVRlc3QuaXNMaXR0bGVFbmRpYW4pe2Zvcig7bjxnLTI7bis9MyxhKz00KXtjb25zdCBlPWNbbl0sdD1jW24rMV0scj1jW24rMl07aVthXT00Mjc4MTkwMDgwfGU7aVthKzFdPWU+Pj4yNHx0PDw4fDQyNzgxOTAwODA7aVthKzJdPXQ+Pj4xNnxyPDwxNnw0Mjc4MTkwMDgwO2lbYSszXT1yPj4+OHw0Mjc4MTkwMDgwfWZvcihsZXQgcj00Km4scz10K287cjxzO3IrPTMpaVthKytdPWVbcl18ZVtyKzFdPDw4fGVbcisyXTw8MTZ8NDI3ODE5MDA4MH1lbHNle2Zvcig7bjxnLTI7bis9MyxhKz00KXtjb25zdCBlPWNbbl0sdD1jW24rMV0scj1jW24rMl07aVthXT0yNTV8ZTtpW2ErMV09ZTw8MjR8dD4+Pjh8MjU1O2lbYSsyXT10PDwxNnxyPj4+MTZ8MjU1O2lbYSszXT1yPDw4fDI1NX1mb3IobGV0IHI9NCpuLHM9dCtvO3I8cztyKz0zKWlbYSsrXT1lW3JdPDwyNHxlW3IrMV08PDE2fGVbcisyXTw8OHwyNTV9cmV0dXJue3NyY1Bvczp0K28sZGVzdFBvczphfX0oZSl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gY29udmVydEJsYWNrQW5kV2hpdGVUb1JHQkEoe3NyYzplLHNyY1Bvczp0PTAsZGVzdDppLHdpZHRoOmEsaGVpZ2h0OnIsbm9uQmxhY2tDb2xvcjpzPTQyOTQ5NjcyOTUsaW52ZXJzZURlY29kZTpuPSExfSl7Y29uc3Qgbz1GZWF0dXJlVGVzdC5pc0xpdHRsZUVuZGlhbj80Mjc4MTkwMDgwOjI1NSxbZyxjXT1uP1tzLG9dOltvLHNdLGw9YT4+MyxoPTcmYSxDPWUubGVuZ3RoO2k9bmV3IFVpbnQzMkFycmF5KGkuYnVmZmVyKTtsZXQgUT0wO2ZvcihsZXQgYT0wO2E8cjthKyspe2Zvcihjb25zdCBhPXQrbDt0PGE7dCsrKXtjb25zdCBhPXQ8Qz9lW3RdOjI1NTtpW1ErK109MTI4JmE/YzpnO2lbUSsrXT02NCZhP2M6ZztpW1ErK109MzImYT9jOmc7aVtRKytdPTE2JmE/YzpnO2lbUSsrXT04JmE/YzpnO2lbUSsrXT00JmE/YzpnO2lbUSsrXT0yJmE/YzpnO2lbUSsrXT0xJmE/YzpnfWlmKDA9PT1oKWNvbnRpbnVlO2NvbnN0IGE9dDxDP2VbdCsrXToyNTU7Zm9yKGxldCBlPTA7ZTxoO2UrKylpW1ErK109YSYxPDw3LWU/YzpnfXJldHVybntzcmNQb3M6dCxkZXN0UG9zOlF9fWNsYXNzIEpwZWdFcnJvciBleHRlbmRzIGN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsIkpwZWdFcnJvciIpfX1jbGFzcyBETkxNYXJrZXJFcnJvciBleHRlbmRzIGN0e2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSwiRE5MTWFya2VyRXJyb3IiKTt0aGlzLnNjYW5MaW5lcz10fX1jbGFzcyBFT0lNYXJrZXJFcnJvciBleHRlbmRzIGN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsIkVPSU1hcmtlckVycm9yIil9fWNvbnN0IFh0PW5ldyBVaW50OEFycmF5KFswLDEsOCwxNiw5LDIsMywxMCwxNywyNCwzMiwyNSwxOCwxMSw0LDUsMTIsMTksMjYsMzMsNDAsNDgsNDEsMzQsMjcsMjAsMTMsNiw3LDE0LDIxLDI4LDM1LDQyLDQ5LDU2LDU3LDUwLDQzLDM2LDI5LDIyLDE1LDIzLDMwLDM3LDQ0LDUxLDU4LDU5LDUyLDQ1LDM4LDMxLDM5LDQ2LDUzLDYwLDYxLDU0LDQ3LDU1LDYyLDYzXSksVnQ9NDAxNyxadD03OTksX3Q9MzQwNix6dD0yMjc2LCR0PTE1NjcsQWk9Mzc4NCxlaT01NzkzLHRpPTI4OTY7ZnVuY3Rpb24gYnVpbGRIdWZmbWFuVGFibGUoZSx0KXtsZXQgaSxhLHI9MCxzPTE2O2Zvcig7cz4wJiYhZVtzLTFdOylzLS07Y29uc3Qgbj1be2NoaWxkcmVuOltdLGluZGV4OjB9XTtsZXQgbyxnPW5bMF07Zm9yKGk9MDtpPHM7aSsrKXtmb3IoYT0wO2E8ZVtpXTthKyspe2c9bi5wb3AoKTtnLmNoaWxkcmVuW2cuaW5kZXhdPXRbcl07Zm9yKDtnLmluZGV4PjA7KWc9bi5wb3AoKTtnLmluZGV4Kys7bi5wdXNoKGcpO2Zvcig7bi5sZW5ndGg8PWk7KXtuLnB1c2gobz17Y2hpbGRyZW46W10saW5kZXg6MH0pO2cuY2hpbGRyZW5bZy5pbmRleF09by5jaGlsZHJlbjtnPW99cisrfWlmKGkrMTxzKXtuLnB1c2gobz17Y2hpbGRyZW46W10saW5kZXg6MH0pO2cuY2hpbGRyZW5bZy5pbmRleF09by5jaGlsZHJlbjtnPW99fXJldHVybiBuWzBdLmNoaWxkcmVufWZ1bmN0aW9uIGdldEJsb2NrQnVmZmVyT2Zmc2V0KGUsdCxpKXtyZXR1cm4gNjQqKChlLmJsb2Nrc1BlckxpbmUrMSkqdCtpKX1mdW5jdGlvbiBkZWNvZGVTY2FuKGUsdCxpLGEscixzLG4sbyxnLGM9ITEpe2NvbnN0IGw9aS5tY3VzUGVyTGluZSxoPWkucHJvZ3Jlc3NpdmUsQz10O2xldCBRPTAsRT0wO2Z1bmN0aW9uIHJlYWRCaXQoKXtpZihFPjApe0UtLTtyZXR1cm4gUT4+RSYxfVE9ZVt0KytdO2lmKDI1NT09PVEpe2NvbnN0IGE9ZVt0KytdO2lmKGEpe2lmKDIyMD09PWEmJmMpe2NvbnN0IGE9cmVhZFVpbnQxNihlLHQrPTIpO3QrPTI7aWYoYT4wJiZhIT09aS5zY2FuTGluZXMpdGhyb3cgbmV3IEROTE1hcmtlckVycm9yKCJGb3VuZCBETkwgbWFya2VyICgweEZGREMpIHdoaWxlIHBhcnNpbmcgc2NhbiBkYXRhIixhKX1lbHNlIGlmKDIxNz09PWEpe2lmKGMpe2NvbnN0IGU9cCooOD09PWkucHJlY2lzaW9uPzg6MCk7aWYoZT4wJiZNYXRoLnJvdW5kKGkuc2NhbkxpbmVzL2UpPj01KXRocm93IG5ldyBETkxNYXJrZXJFcnJvcigiRm91bmQgRU9JIG1hcmtlciAoMHhGRkQ5KSB3aGlsZSBwYXJzaW5nIHNjYW4gZGF0YSwgcG9zc2libHkgY2F1c2VkIGJ5IGluY29ycmVjdCBgc2NhbkxpbmVzYCBwYXJhbWV0ZXIiLGUpfXRocm93IG5ldyBFT0lNYXJrZXJFcnJvcigiRm91bmQgRU9JIG1hcmtlciAoMHhGRkQ5KSB3aGlsZSBwYXJzaW5nIHNjYW4gZGF0YSIpfXRocm93IG5ldyBKcGVnRXJyb3IoYHVuZXhwZWN0ZWQgbWFya2VyICR7KFE8PDh8YSkudG9TdHJpbmcoMTYpfWApfX1FPTc7cmV0dXJuIFE+Pj43fWZ1bmN0aW9uIGRlY29kZUh1ZmZtYW4oZSl7bGV0IHQ9ZTtmb3IoOzspe3Q9dFtyZWFkQml0KCldO3N3aXRjaCh0eXBlb2YgdCl7Y2FzZSJudW1iZXIiOnJldHVybiB0O2Nhc2Uib2JqZWN0Ijpjb250aW51ZX10aHJvdyBuZXcgSnBlZ0Vycm9yKCJpbnZhbGlkIGh1ZmZtYW4gc2VxdWVuY2UiKX19ZnVuY3Rpb24gcmVjZWl2ZShlKXtsZXQgdD0wO2Zvcig7ZT4wOyl7dD10PDwxfHJlYWRCaXQoKTtlLS19cmV0dXJuIHR9ZnVuY3Rpb24gcmVjZWl2ZUFuZEV4dGVuZChlKXtpZigxPT09ZSlyZXR1cm4gMT09PXJlYWRCaXQoKT8xOi0xO2NvbnN0IHQ9cmVjZWl2ZShlKTtyZXR1cm4gdD49MTw8ZS0xP3Q6dCsoLTE8PGUpKzF9bGV0IHU9MDtsZXQgZCxmPTA7bGV0IHA9MDtmdW5jdGlvbiBkZWNvZGVNY3UoZSx0LGksYSxyKXtjb25zdCBzPWklbDtwPShpL2x8MCkqZS52K2E7Y29uc3Qgbj1zKmUuaCtyO3QoZSxnZXRCbG9ja0J1ZmZlck9mZnNldChlLHAsbikpfWZ1bmN0aW9uIGRlY29kZUJsb2NrKGUsdCxpKXtwPWkvZS5ibG9ja3NQZXJMaW5lfDA7Y29uc3QgYT1pJWUuYmxvY2tzUGVyTGluZTt0KGUsZ2V0QmxvY2tCdWZmZXJPZmZzZXQoZSxwLGEpKX1jb25zdCBtPWEubGVuZ3RoO2xldCB5LHcsYixELFMsaztrPWg/MD09PXM/MD09PW8/ZnVuY3Rpb24gZGVjb2RlRENGaXJzdChlLHQpe2NvbnN0IGk9ZGVjb2RlSHVmZm1hbihlLmh1ZmZtYW5UYWJsZURDKSxhPTA9PT1pPzA6cmVjZWl2ZUFuZEV4dGVuZChpKTw8ZztlLmJsb2NrRGF0YVt0XT1lLnByZWQrPWF9OmZ1bmN0aW9uIGRlY29kZURDU3VjY2Vzc2l2ZShlLHQpe2UuYmxvY2tEYXRhW3RdfD1yZWFkQml0KCk8PGd9OjA9PT1vP2Z1bmN0aW9uIGRlY29kZUFDRmlyc3QoZSx0KXtpZih1PjApe3UtLTtyZXR1cm59bGV0IGk9cztjb25zdCBhPW47Zm9yKDtpPD1hOyl7Y29uc3QgYT1kZWNvZGVIdWZmbWFuKGUuaHVmZm1hblRhYmxlQUMpLHI9MTUmYSxzPWE+PjQ7aWYoMD09PXIpe2lmKHM8MTUpe3U9cmVjZWl2ZShzKSsoMTw8cyktMTticmVha31pKz0xNjtjb250aW51ZX1pKz1zO2NvbnN0IG49WHRbaV07ZS5ibG9ja0RhdGFbdCtuXT1yZWNlaXZlQW5kRXh0ZW5kKHIpKigxPDxnKTtpKyt9fTpmdW5jdGlvbiBkZWNvZGVBQ1N1Y2Nlc3NpdmUoZSx0KXtsZXQgaT1zO2NvbnN0IGE9bjtsZXQgcixvLGM9MDtmb3IoO2k8PWE7KXtjb25zdCBhPXQrWHRbaV0scz1lLmJsb2NrRGF0YVthXTwwPy0xOjE7c3dpdGNoKGYpe2Nhc2UgMDpvPWRlY29kZUh1ZmZtYW4oZS5odWZmbWFuVGFibGVBQyk7cj0xNSZvO2M9bz4+NDtpZigwPT09cilpZihjPDE1KXt1PXJlY2VpdmUoYykrKDE8PGMpO2Y9NH1lbHNle2M9MTY7Zj0xfWVsc2V7aWYoMSE9PXIpdGhyb3cgbmV3IEpwZWdFcnJvcigiaW52YWxpZCBBQ24gZW5jb2RpbmciKTtkPXJlY2VpdmVBbmRFeHRlbmQocik7Zj1jPzI6M31jb250aW51ZTtjYXNlIDE6Y2FzZSAyOmlmKGUuYmxvY2tEYXRhW2FdKWUuYmxvY2tEYXRhW2FdKz1zKihyZWFkQml0KCk8PGcpO2Vsc2V7Yy0tOzA9PT1jJiYoZj0yPT09Zj8zOjApfWJyZWFrO2Nhc2UgMzppZihlLmJsb2NrRGF0YVthXSllLmJsb2NrRGF0YVthXSs9cyoocmVhZEJpdCgpPDxnKTtlbHNle2UuYmxvY2tEYXRhW2FdPWQ8PGc7Zj0wfWJyZWFrO2Nhc2UgNDplLmJsb2NrRGF0YVthXSYmKGUuYmxvY2tEYXRhW2FdKz1zKihyZWFkQml0KCk8PGcpKX1pKyt9aWYoND09PWYpe3UtLTswPT09dSYmKGY9MCl9fTpmdW5jdGlvbiBkZWNvZGVCYXNlbGluZShlLHQpe2NvbnN0IGk9ZGVjb2RlSHVmZm1hbihlLmh1ZmZtYW5UYWJsZURDKSxhPTA9PT1pPzA6cmVjZWl2ZUFuZEV4dGVuZChpKTtlLmJsb2NrRGF0YVt0XT1lLnByZWQrPWE7bGV0IHI9MTtmb3IoO3I8NjQ7KXtjb25zdCBpPWRlY29kZUh1ZmZtYW4oZS5odWZmbWFuVGFibGVBQyksYT0xNSZpLHM9aT4+NDtpZigwPT09YSl7aWYoczwxNSlicmVhaztyKz0xNjtjb250aW51ZX1yKz1zO2NvbnN0IG49WHRbcl07ZS5ibG9ja0RhdGFbdCtuXT1yZWNlaXZlQW5kRXh0ZW5kKGEpO3IrK319O2xldCBSLE49MDtjb25zdCBHPTE9PT1tP2FbMF0uYmxvY2tzUGVyTGluZSphWzBdLmJsb2Nrc1BlckNvbHVtbjpsKmkubWN1c1BlckNvbHVtbjtsZXQgTSxVO2Zvcig7Tjw9Rzspe2NvbnN0IGk9cj9NYXRoLm1pbihHLU4scik6RztpZihpPjApe2Zvcih3PTA7dzxtO3crKylhW3ddLnByZWQ9MDt1PTA7aWYoMT09PW0pe3k9YVswXTtmb3IoUz0wO1M8aTtTKyspe2RlY29kZUJsb2NrKHksayxOKTtOKyt9fWVsc2UgZm9yKFM9MDtTPGk7UysrKXtmb3Iodz0wO3c8bTt3Kyspe3k9YVt3XTtNPXkuaDtVPXkudjtmb3IoYj0wO2I8VTtiKyspZm9yKEQ9MDtEPE07RCsrKWRlY29kZU1jdSh5LGssTixiLEQpfU4rK319RT0wO1I9ZmluZE5leHRGaWxlTWFya2VyKGUsdCk7aWYoIVIpYnJlYWs7aWYoUi5pbnZhbGlkKXt3YXJuKGBkZWNvZGVTY2FuIC0gJHtpPjA/InVuZXhwZWN0ZWQiOiJleGNlc3NpdmUifSBNQ1UgZGF0YSwgY3VycmVudCBtYXJrZXIgaXM6ICR7Ui5pbnZhbGlkfWApO3Q9Ui5vZmZzZXR9aWYoIShSLm1hcmtlcj49NjU0ODgmJlIubWFya2VyPD02NTQ5NSkpYnJlYWs7dCs9Mn1yZXR1cm4gdC1DfWZ1bmN0aW9uIHF1YW50aXplQW5kSW52ZXJzZShlLHQsaSl7Y29uc3QgYT1lLnF1YW50aXphdGlvblRhYmxlLHI9ZS5ibG9ja0RhdGE7bGV0IHMsbixvLGcsYyxsLGgsQyxRLEUsdSxkLGYscCxtLHksdztpZighYSl0aHJvdyBuZXcgSnBlZ0Vycm9yKCJtaXNzaW5nIHJlcXVpcmVkIFF1YW50aXphdGlvbiBUYWJsZS4iKTtmb3IobGV0IGU9MDtlPDY0O2UrPTgpe1E9clt0K2VdO0U9clt0K2UrMV07dT1yW3QrZSsyXTtkPXJbdCtlKzNdO2Y9clt0K2UrNF07cD1yW3QrZSs1XTttPXJbdCtlKzZdO3k9clt0K2UrN107USo9YVtlXTtpZihFfHV8ZHxmfHB8bXx5KXtFKj1hW2UrMV07dSo9YVtlKzJdO2QqPWFbZSszXTtmKj1hW2UrNF07cCo9YVtlKzVdO20qPWFbZSs2XTt5Kj1hW2UrN107cz1laSpRKzEyOD4+ODtuPWVpKmYrMTI4Pj44O289dTtnPW07Yz10aSooRS15KSsxMjg+Pjg7Qz10aSooRSt5KSsxMjg+Pjg7bD1kPDw0O2g9cDw8NDtzPXMrbisxPj4xO249cy1uO3c9bypBaStnKiR0KzEyOD4+ODtvPW8qJHQtZypBaSsxMjg+Pjg7Zz13O2M9YytoKzE+PjE7aD1jLWg7Qz1DK2wrMT4+MTtsPUMtbDtzPXMrZysxPj4xO2c9cy1nO249bitvKzE+PjE7bz1uLW87dz1jKnp0K0MqX3QrMjA0OD4+MTI7Yz1jKl90LUMqenQrMjA0OD4+MTI7Qz13O3c9bCpadCtoKlZ0KzIwNDg+PjEyO2w9bCpWdC1oKlp0KzIwNDg+PjEyO2g9dztpW2VdPXMrQztpW2UrN109cy1DO2lbZSsxXT1uK2g7aVtlKzZdPW4taDtpW2UrMl09bytsO2lbZSs1XT1vLWw7aVtlKzNdPWcrYztpW2UrNF09Zy1jfWVsc2V7dz1laSpRKzUxMj4+MTA7aVtlXT13O2lbZSsxXT13O2lbZSsyXT13O2lbZSszXT13O2lbZSs0XT13O2lbZSs1XT13O2lbZSs2XT13O2lbZSs3XT13fX1mb3IobGV0IGU9MDtlPDg7KytlKXtRPWlbZV07RT1pW2UrOF07dT1pW2UrMTZdO2Q9aVtlKzI0XTtmPWlbZSszMl07cD1pW2UrNDBdO209aVtlKzQ4XTt5PWlbZSs1Nl07aWYoRXx1fGR8ZnxwfG18eSl7cz1laSpRKzIwNDg+PjEyO249ZWkqZisyMDQ4Pj4xMjtvPXU7Zz1tO2M9dGkqKEUteSkrMjA0OD4+MTI7Qz10aSooRSt5KSsyMDQ4Pj4xMjtsPWQ7aD1wO3M9NDExMisocytuKzE+PjEpO249cy1uO3c9bypBaStnKiR0KzIwNDg+PjEyO289byokdC1nKkFpKzIwNDg+PjEyO2c9dztjPWMraCsxPj4xO2g9Yy1oO0M9QytsKzE+PjE7bD1DLWw7cz1zK2crMT4+MTtnPXMtZztuPW4rbysxPj4xO289bi1vO3c9Yyp6dCtDKl90KzIwNDg+PjEyO2M9YypfdC1DKnp0KzIwNDg+PjEyO0M9dzt3PWwqWnQraCpWdCsyMDQ4Pj4xMjtsPWwqVnQtaCpadCsyMDQ4Pj4xMjtoPXc7UT1zK0M7eT1zLUM7RT1uK2g7bT1uLWg7dT1vK2w7cD1vLWw7ZD1nK2M7Zj1nLWM7UTwxNj9RPTA6UT49NDA4MD9RPTI1NTpRPj49NDtFPDE2P0U9MDpFPj00MDgwP0U9MjU1OkU+Pj00O3U8MTY/dT0wOnU+PTQwODA/dT0yNTU6dT4+PTQ7ZDwxNj9kPTA6ZD49NDA4MD9kPTI1NTpkPj49NDtmPDE2P2Y9MDpmPj00MDgwP2Y9MjU1OmY+Pj00O3A8MTY/cD0wOnA+PTQwODA/cD0yNTU6cD4+PTQ7bTwxNj9tPTA6bT49NDA4MD9tPTI1NTptPj49NDt5PDE2P3k9MDp5Pj00MDgwP3k9MjU1Onk+Pj00O3JbdCtlXT1RO3JbdCtlKzhdPUU7clt0K2UrMTZdPXU7clt0K2UrMjRdPWQ7clt0K2UrMzJdPWY7clt0K2UrNDBdPXA7clt0K2UrNDhdPW07clt0K2UrNTZdPXl9ZWxzZXt3PWVpKlErODE5Mj4+MTQ7dz13PC0yMDQwPzA6dz49MjAyND8yNTU6dysyMDU2Pj40O3JbdCtlXT13O3JbdCtlKzhdPXc7clt0K2UrMTZdPXc7clt0K2UrMjRdPXc7clt0K2UrMzJdPXc7clt0K2UrNDBdPXc7clt0K2UrNDhdPXc7clt0K2UrNTZdPXd9fX1mdW5jdGlvbiBidWlsZENvbXBvbmVudERhdGEoZSx0KXtjb25zdCBpPXQuYmxvY2tzUGVyTGluZSxhPXQuYmxvY2tzUGVyQ29sdW1uLHI9bmV3IEludDE2QXJyYXkoNjQpO2ZvcihsZXQgZT0wO2U8YTtlKyspZm9yKGxldCBhPTA7YTxpO2ErKyl7cXVhbnRpemVBbmRJbnZlcnNlKHQsZ2V0QmxvY2tCdWZmZXJPZmZzZXQodCxlLGEpLHIpfXJldHVybiB0LmJsb2NrRGF0YX1mdW5jdGlvbiBmaW5kTmV4dEZpbGVNYXJrZXIoZSx0LGk9dCl7Y29uc3QgYT1lLmxlbmd0aC0xO2xldCByPWk8dD9pOnQ7aWYodD49YSlyZXR1cm4gbnVsbDtjb25zdCBzPXJlYWRVaW50MTYoZSx0KTtpZihzPj02NTQ3MiYmczw9NjU1MzQpcmV0dXJue2ludmFsaWQ6bnVsbCxtYXJrZXI6cyxvZmZzZXQ6dH07bGV0IG49cmVhZFVpbnQxNihlLHIpO2Zvcig7IShuPj02NTQ3MiYmbjw9NjU1MzQpOyl7aWYoKytyPj1hKXJldHVybiBudWxsO249cmVhZFVpbnQxNihlLHIpfXJldHVybntpbnZhbGlkOnMudG9TdHJpbmcoMTYpLG1hcmtlcjpuLG9mZnNldDpyfX1mdW5jdGlvbiBwcmVwYXJlQ29tcG9uZW50cyhlKXtjb25zdCB0PU1hdGguY2VpbChlLnNhbXBsZXNQZXJMaW5lLzgvZS5tYXhIKSxpPU1hdGguY2VpbChlLnNjYW5MaW5lcy84L2UubWF4Vik7Zm9yKGNvbnN0IGEgb2YgZS5jb21wb25lbnRzKXtjb25zdCByPU1hdGguY2VpbChNYXRoLmNlaWwoZS5zYW1wbGVzUGVyTGluZS84KSphLmgvZS5tYXhIKSxzPU1hdGguY2VpbChNYXRoLmNlaWwoZS5zY2FuTGluZXMvOCkqYS52L2UubWF4Viksbj10KmEuaCxvPTY0KihpKmEudikqKG4rMSk7YS5ibG9ja0RhdGE9bmV3IEludDE2QXJyYXkobyk7YS5ibG9ja3NQZXJMaW5lPXI7YS5ibG9ja3NQZXJDb2x1bW49c31lLm1jdXNQZXJMaW5lPXQ7ZS5tY3VzUGVyQ29sdW1uPWl9ZnVuY3Rpb24gcmVhZERhdGFCbG9jayhlLHQpe2NvbnN0IGk9cmVhZFVpbnQxNihlLHQpO2xldCBhPSh0Kz0yKStpLTI7Y29uc3Qgcj1maW5kTmV4dEZpbGVNYXJrZXIoZSxhLHQpO2lmKHI/LmludmFsaWQpe3dhcm4oInJlYWREYXRhQmxvY2sgLSBpbmNvcnJlY3QgbGVuZ3RoLCBjdXJyZW50IG1hcmtlciBpczogIityLmludmFsaWQpO2E9ci5vZmZzZXR9Y29uc3Qgcz1lLnN1YmFycmF5KHQsYSk7cmV0dXJue2FwcERhdGE6cyxuZXdPZmZzZXQ6dCs9cy5sZW5ndGh9fWZ1bmN0aW9uIHNraXBEYXRhKGUsdCl7Y29uc3QgaT1yZWFkVWludDE2KGUsdCksYT0odCs9MikraS0yLHI9ZmluZE5leHRGaWxlTWFya2VyKGUsYSx0KTtyZXR1cm4gcj8uaW52YWxpZD9yLm9mZnNldDphfWNsYXNzIEpwZWdJbWFnZXtjb25zdHJ1Y3Rvcih7ZGVjb2RlVHJhbnNmb3JtOmU9bnVsbCxjb2xvclRyYW5zZm9ybTp0PS0xfT17fSl7dGhpcy5fZGVjb2RlVHJhbnNmb3JtPWU7dGhpcy5fY29sb3JUcmFuc2Zvcm09dH1zdGF0aWMgY2FuVXNlSW1hZ2VEZWNvZGVyKGUsdD0tMSl7bGV0IGk9MCxhPW51bGwscj1yZWFkVWludDE2KGUsaSk7aSs9MjtpZig2NTQ5NiE9PXIpdGhyb3cgbmV3IEpwZWdFcnJvcigiU09JIG5vdCBmb3VuZCIpO3I9cmVhZFVpbnQxNihlLGkpO2krPTI7QTpmb3IoOzY1NDk3IT09cjspe3N3aXRjaChyKXtjYXNlIDY1NDcyOmNhc2UgNjU0NzM6Y2FzZSA2NTQ3NDphPWVbaSs3XTticmVhayBBO2Nhc2UgNjU1MzU6MjU1IT09ZVtpXSYmaS0tfWk9c2tpcERhdGEoZSxpKTtyPXJlYWRVaW50MTYoZSxpKTtpKz0yfXJldHVybiA0IT09YSYmKDMhPT1hfHwwIT09dCl9cGFyc2UoZSx7ZG5sU2NhbkxpbmVzOnQ9bnVsbH09e30pe2xldCBpLGEscj0wLHM9bnVsbCxuPW51bGwsbz0wO2NvbnN0IGc9W10sYz1bXSxsPVtdO2xldCBoPXJlYWRVaW50MTYoZSxyKTtyKz0yO2lmKDY1NDk2IT09aCl0aHJvdyBuZXcgSnBlZ0Vycm9yKCJTT0kgbm90IGZvdW5kIik7aD1yZWFkVWludDE2KGUscik7cis9MjtBOmZvcig7NjU0OTchPT1oOyl7bGV0IEMsUSxFO3N3aXRjaChoKXtjYXNlIDY1NTA0OmNhc2UgNjU1MDU6Y2FzZSA2NTUwNjpjYXNlIDY1NTA3OmNhc2UgNjU1MDg6Y2FzZSA2NTUwOTpjYXNlIDY1NTEwOmNhc2UgNjU1MTE6Y2FzZSA2NTUxMjpjYXNlIDY1NTEzOmNhc2UgNjU1MTQ6Y2FzZSA2NTUxNTpjYXNlIDY1NTE2OmNhc2UgNjU1MTc6Y2FzZSA2NTUxODpjYXNlIDY1NTE5OmNhc2UgNjU1MzQ6Y29uc3R7YXBwRGF0YTp1LG5ld09mZnNldDpkfT1yZWFkRGF0YUJsb2NrKGUscik7cj1kOzY1NTA0PT09aCYmNzQ9PT11WzBdJiY3MD09PXVbMV0mJjczPT09dVsyXSYmNzA9PT11WzNdJiYwPT09dVs0XSYmKHM9e3ZlcnNpb246e21ham9yOnVbNV0sbWlub3I6dVs2XX0sZGVuc2l0eVVuaXRzOnVbN10seERlbnNpdHk6dVs4XTw8OHx1WzldLHlEZW5zaXR5OnVbMTBdPDw4fHVbMTFdLHRodW1iV2lkdGg6dVsxMl0sdGh1bWJIZWlnaHQ6dVsxM10sdGh1bWJEYXRhOnUuc3ViYXJyYXkoMTQsMTQrMyp1WzEyXSp1WzEzXSl9KTs2NTUxOD09PWgmJjY1PT09dVswXSYmMTAwPT09dVsxXSYmMTExPT09dVsyXSYmOTg9PT11WzNdJiYxMDE9PT11WzRdJiYobj17dmVyc2lvbjp1WzVdPDw4fHVbNl0sZmxhZ3MwOnVbN108PDh8dVs4XSxmbGFnczE6dVs5XTw8OHx1WzEwXSx0cmFuc2Zvcm1Db2RlOnVbMTFdfSk7YnJlYWs7Y2FzZSA2NTQ5OTpjb25zdCBmPXJlYWRVaW50MTYoZSxyKTtyKz0yO2NvbnN0IHA9ZityLTI7bGV0IG07Zm9yKDtyPHA7KXtjb25zdCB0PWVbcisrXSxpPW5ldyBVaW50MTZBcnJheSg2NCk7aWYodD4+NCl7aWYodD4+NCE9MSl0aHJvdyBuZXcgSnBlZ0Vycm9yKCJEUVQgLSBpbnZhbGlkIHRhYmxlIHNwZWMiKTtmb3IoUT0wO1E8NjQ7USsrKXttPVh0W1FdO2lbbV09cmVhZFVpbnQxNihlLHIpO3IrPTJ9fWVsc2UgZm9yKFE9MDtRPDY0O1ErKyl7bT1YdFtRXTtpW21dPWVbcisrXX1nWzE1JnRdPWl9YnJlYWs7Y2FzZSA2NTQ3MjpjYXNlIDY1NDczOmNhc2UgNjU0NzQ6aWYoaSl0aHJvdyBuZXcgSnBlZ0Vycm9yKCJPbmx5IHNpbmdsZSBmcmFtZSBKUEVHcyBzdXBwb3J0ZWQiKTtyKz0yO2k9e307aS5leHRlbmRlZD02NTQ3Mz09PWg7aS5wcm9ncmVzc2l2ZT02NTQ3ND09PWg7aS5wcmVjaXNpb249ZVtyKytdO2NvbnN0IHk9cmVhZFVpbnQxNihlLHIpO3IrPTI7aS5zY2FuTGluZXM9dHx8eTtpLnNhbXBsZXNQZXJMaW5lPXJlYWRVaW50MTYoZSxyKTtyKz0yO2kuY29tcG9uZW50cz1bXTtpLmNvbXBvbmVudElkcz17fTtjb25zdCB3PWVbcisrXTtsZXQgYj0wLEQ9MDtmb3IoQz0wO0M8dztDKyspe2NvbnN0IHQ9ZVtyXSxhPWVbcisxXT4+NCxzPTE1JmVbcisxXTtiPGEmJihiPWEpO0Q8cyYmKEQ9cyk7Y29uc3Qgbj1lW3IrMl07RT1pLmNvbXBvbmVudHMucHVzaCh7aDphLHY6cyxxdWFudGl6YXRpb25JZDpuLHF1YW50aXphdGlvblRhYmxlOm51bGx9KTtpLmNvbXBvbmVudElkc1t0XT1FLTE7cis9M31pLm1heEg9YjtpLm1heFY9RDtwcmVwYXJlQ29tcG9uZW50cyhpKTticmVhaztjYXNlIDY1NDc2OmNvbnN0IFM9cmVhZFVpbnQxNihlLHIpO3IrPTI7Zm9yKEM9MjtDPFM7KXtjb25zdCB0PWVbcisrXSxpPW5ldyBVaW50OEFycmF5KDE2KTtsZXQgYT0wO2ZvcihRPTA7UTwxNjtRKysscisrKWErPWlbUV09ZVtyXTtjb25zdCBzPW5ldyBVaW50OEFycmF5KGEpO2ZvcihRPTA7UTxhO1ErKyxyKyspc1tRXT1lW3JdO0MrPTE3K2E7KHQ+PjQ/YzpsKVsxNSZ0XT1idWlsZEh1ZmZtYW5UYWJsZShpLHMpfWJyZWFrO2Nhc2UgNjU1MDE6cis9MjthPXJlYWRVaW50MTYoZSxyKTtyKz0yO2JyZWFrO2Nhc2UgNjU0OTg6Y29uc3Qgaz0xPT0rK28mJiF0O3IrPTI7Y29uc3QgUj1lW3IrK10sTj1bXTtmb3IoQz0wO0M8UjtDKyspe2NvbnN0IHQ9ZVtyKytdLGE9aS5jb21wb25lbnRJZHNbdF0scz1pLmNvbXBvbmVudHNbYV07cy5pbmRleD10O2NvbnN0IG49ZVtyKytdO3MuaHVmZm1hblRhYmxlREM9bFtuPj40XTtzLmh1ZmZtYW5UYWJsZUFDPWNbMTUmbl07Ti5wdXNoKHMpfWNvbnN0IEc9ZVtyKytdLE09ZVtyKytdLFU9ZVtyKytdO3RyeXtyKz1kZWNvZGVTY2FuKGUscixpLE4sYSxHLE0sVT4+NCwxNSZVLGspfWNhdGNoKHQpe2lmKHQgaW5zdGFuY2VvZiBETkxNYXJrZXJFcnJvcil7d2FybihgJHt0Lm1lc3NhZ2V9IC0tIGF0dGVtcHRpbmcgdG8gcmUtcGFyc2UgdGhlIEpQRUcgaW1hZ2UuYCk7cmV0dXJuIHRoaXMucGFyc2UoZSx7ZG5sU2NhbkxpbmVzOnQuc2NhbkxpbmVzfSl9aWYodCBpbnN0YW5jZW9mIEVPSU1hcmtlckVycm9yKXt3YXJuKGAke3QubWVzc2FnZX0gLS0gaWdub3JpbmcgdGhlIHJlc3Qgb2YgdGhlIGltYWdlIGRhdGEuYCk7YnJlYWsgQX10aHJvdyB0fWJyZWFrO2Nhc2UgNjU1MDA6cis9NDticmVhaztjYXNlIDY1NTM1OjI1NSE9PWVbcl0mJnItLTticmVhaztkZWZhdWx0OmNvbnN0IHg9ZmluZE5leHRGaWxlTWFya2VyKGUsci0yLHItMyk7aWYoeD8uaW52YWxpZCl7d2FybigiSnBlZ0ltYWdlLnBhcnNlIC0gdW5leHBlY3RlZCBkYXRhLCBjdXJyZW50IG1hcmtlciBpczogIit4LmludmFsaWQpO3I9eC5vZmZzZXQ7YnJlYWt9aWYoIXh8fHI+PWUubGVuZ3RoLTEpe3dhcm4oIkpwZWdJbWFnZS5wYXJzZSAtIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUgaW1hZ2UgZGF0YSB3aXRob3V0IGZpbmRpbmcgYW4gRU9JIG1hcmtlciAoMHhGRkQ5KS4iKTticmVhayBBfXRocm93IG5ldyBKcGVnRXJyb3IoIkpwZWdJbWFnZS5wYXJzZSAtIHVua25vd24gbWFya2VyOiAiK2gudG9TdHJpbmcoMTYpKX1oPXJlYWRVaW50MTYoZSxyKTtyKz0yfWlmKCFpKXRocm93IG5ldyBKcGVnRXJyb3IoIkpwZWdJbWFnZS5wYXJzZSAtIG5vIGZyYW1lIGRhdGEgZm91bmQuIik7dGhpcy53aWR0aD1pLnNhbXBsZXNQZXJMaW5lO3RoaXMuaGVpZ2h0PWkuc2NhbkxpbmVzO3RoaXMuamZpZj1zO3RoaXMuYWRvYmU9bjt0aGlzLmNvbXBvbmVudHM9W107Zm9yKGNvbnN0IGUgb2YgaS5jb21wb25lbnRzKXtjb25zdCB0PWdbZS5xdWFudGl6YXRpb25JZF07dCYmKGUucXVhbnRpemF0aW9uVGFibGU9dCk7dGhpcy5jb21wb25lbnRzLnB1c2goe2luZGV4OmUuaW5kZXgsb3V0cHV0OmJ1aWxkQ29tcG9uZW50RGF0YSgwLGUpLHNjYWxlWDplLmgvaS5tYXhILHNjYWxlWTplLnYvaS5tYXhWLGJsb2Nrc1BlckxpbmU6ZS5ibG9ja3NQZXJMaW5lLGJsb2Nrc1BlckNvbHVtbjplLmJsb2Nrc1BlckNvbHVtbn0pfXRoaXMubnVtQ29tcG9uZW50cz10aGlzLmNvbXBvbmVudHMubGVuZ3RofV9nZXRMaW5lYXJpemVkQmxvY2tEYXRhKGUsdCxpPSExKXtjb25zdCBhPXRoaXMud2lkdGgvZSxyPXRoaXMuaGVpZ2h0L3Q7bGV0IHMsbixvLGcsYyxsLGgsQyxRLEUsdSxkPTA7Y29uc3QgZj10aGlzLmNvbXBvbmVudHMubGVuZ3RoLHA9ZSp0KmYsbT1uZXcgVWludDhDbGFtcGVkQXJyYXkocCkseT1uZXcgVWludDMyQXJyYXkoZSksdz00Mjk0OTY3Mjg4O2xldCBiO2ZvcihoPTA7aDxmO2grKyl7cz10aGlzLmNvbXBvbmVudHNbaF07bj1zLnNjYWxlWCphO289cy5zY2FsZVkqcjtkPWg7dT1zLm91dHB1dDtnPXMuYmxvY2tzUGVyTGluZSsxPDwzO2lmKG4hPT1iKXtmb3IoYz0wO2M8ZTtjKyspe0M9MHxjKm47eVtjXT0oQyZ3KTw8M3w3JkN9Yj1ufWZvcihsPTA7bDx0O2wrKyl7Qz0wfGwqbztFPWcqKEMmdyl8KDcmQyk8PDM7Zm9yKGM9MDtjPGU7YysrKXttW2RdPXVbRSt5W2NdXTtkKz1mfX19bGV0IEQ9dGhpcy5fZGVjb2RlVHJhbnNmb3JtO2l8fDQhPT1mfHxEfHwoRD1uZXcgSW50MzJBcnJheShbLTI1NiwyNTUsLTI1NiwyNTUsLTI1NiwyNTUsLTI1NiwyNTVdKSk7aWYoRClmb3IoaD0wO2g8cDspZm9yKEM9MCxRPTA7QzxmO0MrKyxoKyssUSs9MiltW2hdPShtW2hdKkRbUV0+PjgpK0RbUSsxXTtyZXR1cm4gbX1nZXQgX2lzQ29sb3JDb252ZXJzaW9uTmVlZGVkKCl7cmV0dXJuIHRoaXMuYWRvYmU/ISF0aGlzLmFkb2JlLnRyYW5zZm9ybUNvZGU6Mz09PXRoaXMubnVtQ29tcG9uZW50cz8wIT09dGhpcy5fY29sb3JUcmFuc2Zvcm0mJig4MiE9PXRoaXMuY29tcG9uZW50c1swXS5pbmRleHx8NzEhPT10aGlzLmNvbXBvbmVudHNbMV0uaW5kZXh8fDY2IT09dGhpcy5jb21wb25lbnRzWzJdLmluZGV4KToxPT09dGhpcy5fY29sb3JUcmFuc2Zvcm19X2NvbnZlcnRZY2NUb1JnYihlKXtsZXQgdCxpLGE7Zm9yKGxldCByPTAscz1lLmxlbmd0aDtyPHM7cis9Myl7dD1lW3JdO2k9ZVtyKzFdO2E9ZVtyKzJdO2Vbcl09dC0xNzkuNDU2KzEuNDAyKmE7ZVtyKzFdPXQrMTM1LjQ1OS0uMzQ0KmktLjcxNCphO2VbcisyXT10LTIyNi44MTYrMS43NzIqaX1yZXR1cm4gZX1fY29udmVydFljY1RvUmdiYShlLHQpe2ZvcihsZXQgaT0wLGE9MCxyPWUubGVuZ3RoO2k8cjtpKz0zLGErPTQpe2NvbnN0IHI9ZVtpXSxzPWVbaSsxXSxuPWVbaSsyXTt0W2FdPXItMTc5LjQ1NisxLjQwMipuO3RbYSsxXT1yKzEzNS40NTktLjM0NCpzLS43MTQqbjt0W2ErMl09ci0yMjYuODE2KzEuNzcyKnM7dFthKzNdPTI1NX1yZXR1cm4gdH1fY29udmVydFljY2tUb1JnYihlKXtsZXQgdCxpLGEscixzPTA7Zm9yKGxldCBuPTAsbz1lLmxlbmd0aDtuPG87bis9NCl7dD1lW25dO2k9ZVtuKzFdO2E9ZVtuKzJdO3I9ZVtuKzNdO2VbcysrXT1pKigtNjYwNjM1NjY5NDIwMzY0ZS0xOSppKy4wMDA0MzcxMzA0NzU5MjYyMzIqYS01NDA4MDYxMDA2NDU5OWUtMTgqdCsuMDAwNDg0NDk3OTcxMjAyODEqci0uMTU0MzYyMTUxODcxMTI2KS0xMjIuNjcxOTU0MDY4OTQrYSooLS4wMDA5NTc5NjQzNzg0NDU3NzMqYSsuMDAwODE3MDc2OTExMzQ2NjI1KnQtLjAwNDc3MjcxNDA1NDA4NzQ3KnIrMS41MzM4MDI1MzIyMTczNCkrdCooLjAwMDk2MTI1MDE4NDEzMDY4OCp0LS4wMDI2NjI1NzMzMjI4MzkzMypyKy40ODM1NzA4ODQ1MTI2NSkrciooLS4wMDAzMzYxOTcxNzc2MTgzOTQqcisuNDg0NzkxNTYxNDkwNzc2KTtlW3MrK109MTA3LjI2ODAzOTM5NzcyNCtpKigyMTk5MjcxMDQ1MjU3NDFlLTE5KmktLjAwMDY0MDk5MjAxODI5Nzk0NSphKy4wMDA2NTkzOTcwMDEyNDU1NzcqdCsuMDAwNDI2MTA1NjUyOTM4ODM3KnItLjE3NjQ5MTc5MjQ2Mjg3NSkrYSooLS4wMDA3NzgyNjk5NDE1MTM2ODMqYSsuMDAxMzA4NzIyNjE0MDgyNzUqdCsuMDAwNzcwNDgyNjMxODAxMTMyKnItLjE1MTA1MTQ5Mjc3NTU2MikrdCooLjAwMTI2OTM1MzY4MTE0ODQzKnQtLjAwMjY1MDkwMTg5MDEwODk4KnIrLjI1ODAyOTEwMjA2ODQ1KStyKigtLjAwMDMxODkxMzExNzU4ODMyOCpyLS4yMTM3NDI0MDAzMjM2NjUpO2VbcysrXT1pKigtLjAwMDU3MDExNTE5Njk3MzY3NyppLTI2MzQwOTA1MTAwNDU4OWUtMTkqYSsuMDAyMDc0MTA4ODExNTAxMip0LS4wMDI4ODI2MDIzNjg1MzQ0MipyKy44MTQyNzI5NjgzNTkyOTUpLTIwLjgxMDAxMjU0Njk0NythKigtMTUzNDk2MDU3NDQwOTc1ZS0xOSphLS4wMDAxMzI2ODkwNDM5NjE0NDYqdCsuMDAwNTYwODMzNjkxMjQyODEyKnItLjE5NTE1MjAyNzUzNDA0OSkrdCooLjAwMTc0NDE4MTMyOTI3NTgyKnQtLjAwMjU1MjQzMzIxNDM5MzQ3KnIrLjExNjkzNTAyMDQ2NTE0NSkrciooLS4wMDAzNDM1MzE5OTY1MTA1NTUqcisuMjQxNjUyNjAyMzI0MDcpfXJldHVybiBlLnN1YmFycmF5KDAscyl9X2NvbnZlcnRZY2NrVG9SZ2JhKGUpe2ZvcihsZXQgdD0wLGk9ZS5sZW5ndGg7dDxpO3QrPTQpe2NvbnN0IGk9ZVt0XSxhPWVbdCsxXSxyPWVbdCsyXSxzPWVbdCszXTtlW3RdPWEqKC02NjA2MzU2Njk0MjAzNjRlLTE5KmErLjAwMDQzNzEzMDQ3NTkyNjIzMipyLTU0MDgwNjEwMDY0NTk5ZS0xOCppKy4wMDA0ODQ0OTc5NzEyMDI4MSpzLS4xNTQzNjIxNTE4NzExMjYpLTEyMi42NzE5NTQwNjg5NCtyKigtLjAwMDk1Nzk2NDM3ODQ0NTc3MypyKy4wMDA4MTcwNzY5MTEzNDY2MjUqaS0uMDA0NzcyNzE0MDU0MDg3NDcqcysxLjUzMzgwMjUzMjIxNzM0KStpKiguMDAwOTYxMjUwMTg0MTMwNjg4KmktLjAwMjY2MjU3MzMyMjgzOTMzKnMrLjQ4MzU3MDg4NDUxMjY1KStzKigtLjAwMDMzNjE5NzE3NzYxODM5NCpzKy40ODQ3OTE1NjE0OTA3NzYpO2VbdCsxXT0xMDcuMjY4MDM5Mzk3NzI0K2EqKDIxOTkyNzEwNDUyNTc0MWUtMTkqYS0uMDAwNjQwOTkyMDE4Mjk3OTQ1KnIrLjAwMDY1OTM5NzAwMTI0NTU3NyppKy4wMDA0MjYxMDU2NTI5Mzg4Mzcqcy0uMTc2NDkxNzkyNDYyODc1KStyKigtLjAwMDc3ODI2OTk0MTUxMzY4MypyKy4wMDEzMDg3MjI2MTQwODI3NSppKy4wMDA3NzA0ODI2MzE4MDExMzIqcy0uMTUxMDUxNDkyNzc1NTYyKStpKiguMDAxMjY5MzUzNjgxMTQ4NDMqaS0uMDAyNjUwOTAxODkwMTA4OTgqcysuMjU4MDI5MTAyMDY4NDUpK3MqKC0uMDAwMzE4OTEzMTE3NTg4MzI4KnMtLjIxMzc0MjQwMDMyMzY2NSk7ZVt0KzJdPWEqKC0uMDAwNTcwMTE1MTk2OTczNjc3KmEtMjYzNDA5MDUxMDA0NTg5ZS0xOSpyKy4wMDIwNzQxMDg4MTE1MDEyKmktLjAwMjg4MjYwMjM2ODUzNDQyKnMrLjgxNDI3Mjk2ODM1OTI5NSktMjAuODEwMDEyNTQ2OTQ3K3IqKC0xNTM0OTYwNTc0NDA5NzVlLTE5KnItLjAwMDEzMjY4OTA0Mzk2MTQ0NippKy4wMDA1NjA4MzM2OTEyNDI4MTIqcy0uMTk1MTUyMDI3NTM0MDQ5KStpKiguMDAxNzQ0MTgxMzI5Mjc1ODIqaS0uMDAyNTUyNDMzMjE0MzkzNDcqcysuMTE2OTM1MDIwNDY1MTQ1KStzKigtLjAwMDM0MzUzMTk5NjUxMDU1NSpzKy4yNDE2NTI2MDIzMjQwNyk7ZVt0KzNdPTI1NX1yZXR1cm4gZX1fY29udmVydFljY2tUb0NteWsoZSl7bGV0IHQsaSxhO2ZvcihsZXQgcj0wLHM9ZS5sZW5ndGg7cjxzO3IrPTQpe3Q9ZVtyXTtpPWVbcisxXTthPWVbcisyXTtlW3JdPTQzNC40NTYtdC0xLjQwMiphO2VbcisxXT0xMTkuNTQxLXQrLjM0NCppKy43MTQqYTtlW3IrMl09NDgxLjgxNi10LTEuNzcyKml9cmV0dXJuIGV9X2NvbnZlcnRDbXlrVG9SZ2IoZSl7bGV0IHQsaSxhLHIscz0wO2ZvcihsZXQgbj0wLG89ZS5sZW5ndGg7bjxvO24rPTQpe3Q9ZVtuXTtpPWVbbisxXTthPWVbbisyXTtyPWVbbiszXTtlW3MrK109MjU1K3QqKC02NzQ3MTQ3MDczNjAyNDQxZS0yMCp0Ky4wMDA4Mzc5MjYyMTIxMDEzNzI3KmkrLjAwMDI4OTQ3MTgxODg2NDMyOTQqYSsuMDAzMjY0MjMxMDU3NTM3ODA2KnItMS4xMTg1NjExODY3MjAzOTM3KStpKigyNjM3NDEwNzYxNjA4OTQwNWUtMjEqaS04NjI2OTQ5MTU4NjM4NTcyZS0yMCphLS4wMDAyNzQ4NzY5MDY3NDk5NDkxKnItLjAyMTU1Njg4Nzk0OTc4OTY3KSthKigtMzg3ODA5OTIxMjg2OTM2M2UtMjAqYS0uMDAwMzI2NzgwODI3OTQ4NTI4NipyKy4wNjg2NzQyMjM4NTk1MzQ1KS1yKiguMDAwMzM2MTk3MTc3NjE4MzkzNypyKy43NDMwNjU5MTUxMzQyMjU0KTtlW3MrK109MjU1K3QqKC4wMDAxMzU5NjM3MjgxMzU4ODg0OCp0Ky4wMDA5MjQ1MzcxMzI1NzM1ODUqaSsuMDAwMTA1NjczNTk2MTg2ODM1OTMqYSsuMDAwNDc5MTg2NDY4NzQzNjUxMipyLS4zMTA5Njg5NTg3NTE1ODc1KStpKigtLjAwMDIzNTQ1MzQ2MTA4MzcwMzQ0KmkrLjAwMDI3MDI4NDUyNTM1MzQ3MTQqYSsuMDAyMDIwMDMwODk3NzMwNzE1NipyLS43NDg4MDUyMTY3MDE1NDk0KSthKig2ODM0ODE1OTk4MjM1NjYyZS0yMCphKy4wMDAxNTE2ODQ1MjM2MzQ2MDk3MypyLS4wOTc1MTkyNzc3NDcyODkzMyktciooLjAwMDMxODkxMzExNzU4ODMyODEqcisuNzM2NDg4MzgwNzczMzE2OCk7ZVtzKytdPTI1NSt0KigxMzU5ODY1MDQxMTM4NTMwN2UtMjEqdCsuMDAwMTI0MjM5NTYxNzU0OTA4NTEqaSsuMDAwNDc1MTk4NTA5NzU4MzU4OSphLTM2NzI5MzE3NDc2NjMwNDIyZS0yMipyLS4wNTU2MjE4Njk4MDI2NDAzNCkraSooLjAwMDE2MTQxMzgwNTk4NzI0Njc2KmkrLjAwMDk2OTIyMzkxMzA3MjUxODYqYSsuMDAwNzc4MjY5MjQ1MDAzNjI1MypyLS40NDAxNTIzMjM2NzUyNjQ2MykrYSooNS4wNjg4ODI5MTQwNjg3NjllLTcqYSsuMDAxNzc3ODM2OTAxMTM3NTA3MSpyLS43NTkxNDU0NjQ5NzQ5NjA5KS1yKiguMDAwMzQzNTMxOTk2NTEwNTU1MypyKy43MDYzNzcwMTg2MTYwMTQ0KX1yZXR1cm4gZS5zdWJhcnJheSgwLHMpfV9jb252ZXJ0Q215a1RvUmdiYShlKXtmb3IobGV0IHQ9MCxpPWUubGVuZ3RoO3Q8aTt0Kz00KXtjb25zdCBpPWVbdF0sYT1lW3QrMV0scj1lW3QrMl0scz1lW3QrM107ZVt0XT0yNTUraSooLTY3NDcxNDcwNzM2MDI0NDFlLTIwKmkrLjAwMDgzNzkyNjIxMjEwMTM3MjcqYSsuMDAwMjg5NDcxODE4ODY0MzI5NCpyKy4wMDMyNjQyMzEwNTc1Mzc4MDYqcy0xLjExODU2MTE4NjcyMDM5MzcpK2EqKDI2Mzc0MTA3NjE2MDg5NDA1ZS0yMSphLTg2MjY5NDkxNTg2Mzg1NzJlLTIwKnItLjAwMDI3NDg3NjkwNjc0OTk0OTEqcy0uMDIxNTU2ODg3OTQ5Nzg5NjcpK3IqKC0zODc4MDk5MjEyODY5MzYzZS0yMCpyLS4wMDAzMjY3ODA4Mjc5NDg1Mjg2KnMrLjA2ODY3NDIyMzg1OTUzNDUpLXMqKC4wMDAzMzYxOTcxNzc2MTgzOTM3KnMrLjc0MzA2NTkxNTEzNDIyNTQpO2VbdCsxXT0yNTUraSooLjAwMDEzNTk2MzcyODEzNTg4ODQ4KmkrLjAwMDkyNDUzNzEzMjU3MzU4NSphKy4wMDAxMDU2NzM1OTYxODY4MzU5MypyKy4wMDA0NzkxODY0Njg3NDM2NTEyKnMtLjMxMDk2ODk1ODc1MTU4NzUpK2EqKC0uMDAwMjM1NDUzNDYxMDgzNzAzNDQqYSsuMDAwMjcwMjg0NTI1MzUzNDcxNCpyKy4wMDIwMjAwMzA4OTc3MzA3MTU2KnMtLjc0ODgwNTIxNjcwMTU0OTQpK3IqKDY4MzQ4MTU5OTgyMzU2NjJlLTIwKnIrLjAwMDE1MTY4NDUyMzYzNDYwOTczKnMtLjA5NzUxOTI3Nzc0NzI4OTMzKS1zKiguMDAwMzE4OTEzMTE3NTg4MzI4MSpzKy43MzY0ODgzODA3NzMzMTY4KTtlW3QrMl09MjU1K2kqKDEzNTk4NjUwNDExMzg1MzA3ZS0yMSppKy4wMDAxMjQyMzk1NjE3NTQ5MDg1MSphKy4wMDA0NzUxOTg1MDk3NTgzNTg5KnItMzY3MjkzMTc0NzY2MzA0MjJlLTIyKnMtLjA1NTYyMTg2OTgwMjY0MDM0KSthKiguMDAwMTYxNDEzODA1OTg3MjQ2NzYqYSsuMDAwOTY5MjIzOTEzMDcyNTE4NipyKy4wMDA3NzgyNjkyNDUwMDM2MjUzKnMtLjQ0MDE1MjMyMzY3NTI2NDYzKStyKig1LjA2ODg4MjkxNDA2ODc2OWUtNypyKy4wMDE3Nzc4MzY5MDExMzc1MDcxKnMtLjc1OTE0NTQ2NDk3NDk2MDkpLXMqKC4wMDAzNDM1MzE5OTY1MTA1NTUzKnMrLjcwNjM3NzAxODYxNjAxNDQpO2VbdCszXT0yNTV9cmV0dXJuIGV9Z2V0RGF0YSh7d2lkdGg6ZSxoZWlnaHQ6dCxmb3JjZVJHQkE6aT0hMSxmb3JjZVJHQjphPSExLGlzU291cmNlUERGOnI9ITF9KXtpZih0aGlzLm51bUNvbXBvbmVudHM+NCl0aHJvdyBuZXcgSnBlZ0Vycm9yKCJVbnN1cHBvcnRlZCBjb2xvciBtb2RlIik7Y29uc3Qgcz10aGlzLl9nZXRMaW5lYXJpemVkQmxvY2tEYXRhKGUsdCxyKTtpZigxPT09dGhpcy5udW1Db21wb25lbnRzJiYoaXx8YSkpe2NvbnN0IGU9cy5sZW5ndGgqKGk/NDozKSx0PW5ldyBVaW50OENsYW1wZWRBcnJheShlKTtsZXQgYT0wO2lmKGkpIWZ1bmN0aW9uIGdyYXlUb1JHQkEoZSx0KXtpZihGZWF0dXJlVGVzdC5pc0xpdHRsZUVuZGlhbilmb3IobGV0IGk9MCxhPWUubGVuZ3RoO2k8YTtpKyspdFtpXT02NTc5MyplW2ldfDQyNzgxOTAwODA7ZWxzZSBmb3IobGV0IGk9MCxhPWUubGVuZ3RoO2k8YTtpKyspdFtpXT0xNjg0MzAwOCplW2ldfDI1NX0ocyxuZXcgVWludDMyQXJyYXkodC5idWZmZXIpKTtlbHNlIGZvcihjb25zdCBlIG9mIHMpe3RbYSsrXT1lO3RbYSsrXT1lO3RbYSsrXT1lfXJldHVybiB0fWlmKDM9PT10aGlzLm51bUNvbXBvbmVudHMmJnRoaXMuX2lzQ29sb3JDb252ZXJzaW9uTmVlZGVkKXtpZihpKXtjb25zdCBlPW5ldyBVaW50OENsYW1wZWRBcnJheShzLmxlbmd0aC8zKjQpO3JldHVybiB0aGlzLl9jb252ZXJ0WWNjVG9SZ2JhKHMsZSl9cmV0dXJuIHRoaXMuX2NvbnZlcnRZY2NUb1JnYihzKX1pZig0PT09dGhpcy5udW1Db21wb25lbnRzKXtpZih0aGlzLl9pc0NvbG9yQ29udmVyc2lvbk5lZWRlZClyZXR1cm4gaT90aGlzLl9jb252ZXJ0WWNja1RvUmdiYShzKTphP3RoaXMuX2NvbnZlcnRZY2NrVG9SZ2Iocyk6dGhpcy5fY29udmVydFljY2tUb0NteWsocyk7aWYoaSlyZXR1cm4gdGhpcy5fY29udmVydENteWtUb1JnYmEocyk7aWYoYSlyZXR1cm4gdGhpcy5fY29udmVydENteWtUb1JnYihzKX1yZXR1cm4gc319Y2xhc3MgSnBlZ1N0cmVhbSBleHRlbmRzIERlY29kZVN0cmVhbXtzdGF0aWMjeT1GZWF0dXJlVGVzdC5pc0ltYWdlRGVjb2RlclN1cHBvcnRlZDtjb25zdHJ1Y3RvcihlLHQsaSl7c3VwZXIodCk7dGhpcy5zdHJlYW09ZTt0aGlzLmRpY3Q9ZS5kaWN0O3RoaXMubWF5YmVMZW5ndGg9dDt0aGlzLnBhcmFtcz1pfXN0YXRpYyBnZXQgY2FuVXNlSW1hZ2VEZWNvZGVyKCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJjYW5Vc2VJbWFnZURlY29kZXIiLHRoaXMuI3k/SW1hZ2VEZWNvZGVyLmlzVHlwZVN1cHBvcnRlZCgiaW1hZ2UvanBlZyIpOlByb21pc2UucmVzb2x2ZSghMSkpfXN0YXRpYyBzZXRPcHRpb25zKHtpc0ltYWdlRGVjb2RlclN1cHBvcnRlZDplPSExfSl7dGhpcy4jeT1lfWdldCBieXRlcygpe3JldHVybiBzaGFkb3codGhpcywiYnl0ZXMiLHRoaXMuc3RyZWFtLmdldEJ5dGVzKHRoaXMubWF5YmVMZW5ndGgpKX1lbnN1cmVCdWZmZXIoZSl7fXJlYWRCbG9jaygpe3RoaXMuZGVjb2RlSW1hZ2UoKX1nZXQganBlZ09wdGlvbnMoKXtjb25zdCBlPXtkZWNvZGVUcmFuc2Zvcm06dm9pZCAwLGNvbG9yVHJhbnNmb3JtOnZvaWQgMH0sdD10aGlzLmRpY3QuZ2V0QXJyYXkoIkQiLCJEZWNvZGUiKTtpZigodGhpcy5mb3JjZVJHQkF8fHRoaXMuZm9yY2VSR0IpJiZBcnJheS5pc0FycmF5KHQpKXtjb25zdCBpPXRoaXMuZGljdC5nZXQoIkJQQyIsIkJpdHNQZXJDb21wb25lbnQiKXx8OCxhPXQubGVuZ3RoLHI9bmV3IEludDMyQXJyYXkoYSk7bGV0IHM9ITE7Y29uc3Qgbj0oMTw8aSktMTtmb3IobGV0IGU9MDtlPGE7ZSs9Mil7cltlXT0yNTYqKHRbZSsxXS10W2VdKXwwO3JbZSsxXT10W2VdKm58MDsyNTY9PT1yW2VdJiYwPT09cltlKzFdfHwocz0hMCl9cyYmKGUuZGVjb2RlVHJhbnNmb3JtPXIpfWlmKHRoaXMucGFyYW1zIGluc3RhbmNlb2YgRGljdCl7Y29uc3QgdD10aGlzLnBhcmFtcy5nZXQoIkNvbG9yVHJhbnNmb3JtIik7TnVtYmVyLmlzSW50ZWdlcih0KSYmKGUuY29sb3JUcmFuc2Zvcm09dCl9cmV0dXJuIHNoYWRvdyh0aGlzLCJqcGVnT3B0aW9ucyIsZSl9I3coZSl7Zm9yKGxldCB0PTAsaT1lLmxlbmd0aC0xO3Q8aTt0KyspaWYoMjU1PT09ZVt0XSYmMjE2PT09ZVt0KzFdKXt0PjAmJihlPWUuc3ViYXJyYXkodCkpO2JyZWFrfXJldHVybiBlfWRlY29kZUltYWdlKGUpe2lmKHRoaXMuZW9mKXJldHVybiB0aGlzLmJ1ZmZlcjtlPXRoaXMuI3coZXx8dGhpcy5ieXRlcyk7Y29uc3QgdD1uZXcgSnBlZ0ltYWdlKHRoaXMuanBlZ09wdGlvbnMpO3QucGFyc2UoZSk7Y29uc3QgaT10LmdldERhdGEoe3dpZHRoOnRoaXMuZHJhd1dpZHRoLGhlaWdodDp0aGlzLmRyYXdIZWlnaHQsZm9yY2VSR0JBOnRoaXMuZm9yY2VSR0JBLGZvcmNlUkdCOnRoaXMuZm9yY2VSR0IsaXNTb3VyY2VQREY6ITB9KTt0aGlzLmJ1ZmZlcj1pO3RoaXMuYnVmZmVyTGVuZ3RoPWkubGVuZ3RoO3RoaXMuZW9mPSEwO3JldHVybiB0aGlzLmJ1ZmZlcn1nZXQgY2FuQXN5bmNEZWNvZGVJbWFnZUZyb21CdWZmZXIoKXtyZXR1cm4gdGhpcy5zdHJlYW0uaXNBc3luY31hc3luYyBnZXRUcmFuc2ZlcmFibGVJbWFnZSgpe2lmKCFhd2FpdCBKcGVnU3RyZWFtLmNhblVzZUltYWdlRGVjb2RlcilyZXR1cm4gbnVsbDtjb25zdCBlPXRoaXMuanBlZ09wdGlvbnM7aWYoZS5kZWNvZGVUcmFuc2Zvcm0pcmV0dXJuIG51bGw7bGV0IHQ7dHJ5e2NvbnN0IGk9dGhpcy5jYW5Bc3luY0RlY29kZUltYWdlRnJvbUJ1ZmZlciYmYXdhaXQgdGhpcy5zdHJlYW0uYXN5bmNHZXRCeXRlcygpfHx0aGlzLmJ5dGVzO2lmKCFpKXJldHVybiBudWxsO2NvbnN0IGE9dGhpcy4jdyhpKTtpZighSnBlZ0ltYWdlLmNhblVzZUltYWdlRGVjb2RlcihhLGUuY29sb3JUcmFuc2Zvcm0pKXJldHVybiBudWxsO3Q9bmV3IEltYWdlRGVjb2Rlcih7ZGF0YTphLHR5cGU6ImltYWdlL2pwZWciLHByZWZlckFuaW1hdGlvbjohMX0pO3JldHVybihhd2FpdCB0LmRlY29kZSgpKS5pbWFnZX1jYXRjaChlKXt3YXJuKGBnZXRUcmFuc2ZlcmFibGVJbWFnZSAtIGZhaWxlZDogIiR7ZX0iLmApO3JldHVybiBudWxsfWZpbmFsbHl7dD8uY2xvc2UoKX19fXZhciBpaSxhaT0oaWk9InVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudD9kb2N1bWVudC5jdXJyZW50U2NyaXB0Py5zcmM6dm9pZCAwLGZ1bmN0aW9uKGU9e30pe3ZhciB0LGksYT1lO25ldyBQcm9taXNlKCgoZSxhKT0+e3Q9ZTtpPWF9KSk7YS5kZWNvZGU9ZnVuY3Rpb24oZSx7bnVtQ29tcG9uZW50czp0PTQsaXNJbmRleGVkQ29sb3JtYXA6aT0hMSxzbWFza0luRGF0YTpyPSExfSl7Y29uc3Qgcz1lLmxlbmd0aCxuPWEuX21hbGxvYyhzKTthLkhFQVBVOC5zZXQoZSxuKTtjb25zdCBvPWEuX2pwMl9kZWNvZGUobixzLHQ+MD90OjAsISFpLCEhcik7YS5fZnJlZShuKTtpZihvKXtjb25zdHtlcnJvck1lc3NhZ2VzOmV9PWE7aWYoZSl7ZGVsZXRlIGEuZXJyb3JNZXNzYWdlcztyZXR1cm4gZX1yZXR1cm4iVW5rbm93biBlcnJvciJ9Y29uc3R7aW1hZ2VEYXRhOmd9PWE7YS5pbWFnZURhdGE9bnVsbDtyZXR1cm4gZ307dmFyIHI9T2JqZWN0LmFzc2lnbih7fSxhKSxzPSIuL3RoaXMucHJvZ3JhbSIscXVpdF89KGUsdCk9Pnt0aHJvdyB0fSxuPSIiOyJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQmJmRvY3VtZW50LmN1cnJlbnRTY3JpcHQmJihuPWRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjKTtpaSYmKG49aWkpO249bi5zdGFydHNXaXRoKCJibG9iOiIpPyIiOm4uc3Vic3RyKDAsbi5yZXBsYWNlKC9bPyNdLiovLCIiKS5sYXN0SW5kZXhPZigiLyIpKzEpO3ZhciBvPWEucHJpbnR8fGNvbnNvbGUubG9nLmJpbmQoY29uc29sZSksZz1hLnByaW50RXJyfHxjb25zb2xlLmVycm9yLmJpbmQoY29uc29sZSk7T2JqZWN0LmFzc2lnbihhLHIpO3I9bnVsbDthLmFyZ3VtZW50cyYmYS5hcmd1bWVudHM7YS50aGlzUHJvZ3JhbSYmKHM9YS50aGlzUHJvZ3JhbSk7dmFyIGMsbD1hLndhc21CaW5hcnk7ZnVuY3Rpb24gdHJ5UGFyc2VBc0RhdGFVUkkoZSl7aWYoaXNEYXRhVVJJKGUpKXJldHVybiBmdW5jdGlvbiBpbnRBcnJheUZyb21CYXNlNjQoZSl7Zm9yKHZhciB0PWF0b2IoZSksaT1uZXcgVWludDhBcnJheSh0Lmxlbmd0aCksYT0wO2E8dC5sZW5ndGg7KythKWlbYV09dC5jaGFyQ29kZUF0KGEpO3JldHVybiBpfShlLnNsaWNlKEQubGVuZ3RoKSl9dmFyIGgsQyxRLEUsdT0hMTtmdW5jdGlvbiB1cGRhdGVNZW1vcnlWaWV3cygpe3ZhciBlPWMuYnVmZmVyO2EuSEVBUDg9Qz1uZXcgSW50OEFycmF5KGUpO2EuSEVBUDE2PW5ldyBJbnQxNkFycmF5KGUpO2EuSEVBUFU4PVE9bmV3IFVpbnQ4QXJyYXkoZSk7YS5IRUFQVTE2PW5ldyBVaW50MTZBcnJheShlKTthLkhFQVAzMj1uZXcgSW50MzJBcnJheShlKTthLkhFQVBVMzI9RT1uZXcgVWludDMyQXJyYXkoZSk7YS5IRUFQRjMyPW5ldyBGbG9hdDMyQXJyYXkoZSk7YS5IRUFQRjY0PW5ldyBGbG9hdDY0QXJyYXkoZSl9dmFyIGQsZj1bXSxwPVtdLG09W10seT0wLHc9bnVsbCxiPW51bGwsRD0iZGF0YTphcHBsaWNhdGlvbi9vY3RldC1zdHJlYW07YmFzZTY0LCIsaXNEYXRhVVJJPWU9PmUuc3RhcnRzV2l0aChEKTtmdW5jdGlvbiBpbnN0YW50aWF0ZVN5bmMoZSx0KXt2YXIgaSxhPWZ1bmN0aW9uIGdldEJpbmFyeVN5bmMoZSl7aWYoZT09ZCYmbClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkobCk7dmFyIHQ9dHJ5UGFyc2VBc0RhdGFVUkkoZSk7aWYodClyZXR1cm4gdDt0aHJvdydzeW5jIGZldGNoaW5nIG9mIHRoZSB3YXNtIGZhaWxlZDogeW91IGNhbiBwcmVsb2FkIGl0IHRvIE1vZHVsZVsid2FzbUJpbmFyeSJdIG1hbnVhbGx5LCBvciBlbWNjLnB5IHdpbGwgZG8gdGhhdCBmb3IgeW91IHdoZW4gZ2VuZXJhdGluZyBIVE1MIChidXQgbm90IEpTKSd9KGUpO2k9bmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShhKTtyZXR1cm5bbmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKGksdCksaV19Y2xhc3MgRXhpdFN0YXR1c3tuYW1lPSJFeGl0U3RhdHVzIjtjb25zdHJ1Y3RvcihlKXt0aGlzLm1lc3NhZ2U9YFByb2dyYW0gdGVybWluYXRlZCB3aXRoIGV4aXQoJHtlfSlgO3RoaXMuc3RhdHVzPWV9fXZhciBTLGNhbGxSdW50aW1lQ2FsbGJhY2tzPWU9Pntmb3IoO2UubGVuZ3RoPjA7KWUuc2hpZnQoKShhKX0saz1hLm5vRXhpdFJ1bnRpbWV8fCEwLFI9MCxOPXt9LGhhbmRsZUV4Y2VwdGlvbj1lPT57aWYoZSBpbnN0YW5jZW9mIEV4aXRTdGF0dXN8fCJ1bndpbmQiPT1lKXJldHVybiBoO3F1aXRfKDAsZSl9LGtlZXBSdW50aW1lQWxpdmU9KCk9Pmt8fFI+MCxfcHJvY19leGl0PWU9PntoPWU7aWYoIWtlZXBSdW50aW1lQWxpdmUoKSl7YS5vbkV4aXQ/LihlKTt1PSEwfXF1aXRfKDAsbmV3IEV4aXRTdGF0dXMoZSkpfSxfZXhpdD0oZSx0KT0+e2g9ZTtfcHJvY19leGl0KGUpfSxjYWxsVXNlckNhbGxiYWNrPWU9PntpZighdSl0cnl7ZSgpOygoKT0+e2lmKCFrZWVwUnVudGltZUFsaXZlKCkpdHJ5e19leGl0KGgpfWNhdGNoKGUpe2hhbmRsZUV4Y2VwdGlvbihlKX19KSgpfWNhdGNoKGUpe2hhbmRsZUV4Y2VwdGlvbihlKX19LGdyb3dNZW1vcnk9ZT0+e3ZhciB0PShlLWMuYnVmZmVyLmJ5dGVMZW5ndGgrNjU1MzUpLzY1NTM2fDA7dHJ5e2MuZ3Jvdyh0KTt1cGRhdGVNZW1vcnlWaWV3cygpO3JldHVybiAxfWNhdGNoKGUpe319LEc9e30sZ2V0RW52U3RyaW5ncz0oKT0+e2lmKCFnZXRFbnZTdHJpbmdzLnN0cmluZ3Mpe3ZhciBlPXtVU0VSOiJ3ZWJfdXNlciIsTE9HTkFNRToid2ViX3VzZXIiLFBBVEg6Ii8iLFBXRDoiLyIsSE9NRToiL2hvbWUvd2ViX3VzZXIiLExBTkc6KCJvYmplY3QiPT10eXBlb2YgbmF2aWdhdG9yJiZuYXZpZ2F0b3IubGFuZ3VhZ2VzJiZuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdfHwiQyIpLnJlcGxhY2UoIi0iLCJfIikrIi5VVEYtOCIsXzpzfHwiLi90aGlzLnByb2dyYW0ifTtmb3IodmFyIHQgaW4gRyl2b2lkIDA9PT1HW3RdP2RlbGV0ZSBlW3RdOmVbdF09R1t0XTt2YXIgaT1bXTtmb3IodmFyIHQgaW4gZSlpLnB1c2goYCR7dH09JHtlW3RdfWApO2dldEVudlN0cmluZ3Muc3RyaW5ncz1pfXJldHVybiBnZXRFbnZTdHJpbmdzLnN0cmluZ3N9LE09W251bGwsW10sW11dLFU9InVuZGVmaW5lZCIhPXR5cGVvZiBUZXh0RGVjb2Rlcj9uZXcgVGV4dERlY29kZXI6dm9pZCAwLFVURjhBcnJheVRvU3RyaW5nPShlLHQ9MCxpPU5hTik9Pntmb3IodmFyIGE9dCtpLHI9dDtlW3JdJiYhKHI+PWEpOykrK3I7aWYoci10PjE2JiZlLmJ1ZmZlciYmVSlyZXR1cm4gVS5kZWNvZGUoZS5zdWJhcnJheSh0LHIpKTtmb3IodmFyIHM9IiI7dDxyOyl7dmFyIG49ZVt0KytdO2lmKDEyOCZuKXt2YXIgbz02MyZlW3QrK107aWYoMTkyIT0oMjI0Jm4pKXt2YXIgZz02MyZlW3QrK107aWYoKG49MjI0PT0oMjQwJm4pPygxNSZuKTw8MTJ8bzw8NnxnOig3Jm4pPDwxOHxvPDwxMnxnPDw2fDYzJmVbdCsrXSk8NjU1MzYpcys9U3RyaW5nLmZyb21DaGFyQ29kZShuKTtlbHNle3ZhciBjPW4tNjU1MzY7cys9U3RyaW5nLmZyb21DaGFyQ29kZSg1NTI5NnxjPj4xMCw1NjMyMHwxMDIzJmMpfX1lbHNlIHMrPVN0cmluZy5mcm9tQ2hhckNvZGUoKDMxJm4pPDw2fG8pfWVsc2Ugcys9U3RyaW5nLmZyb21DaGFyQ29kZShuKX1yZXR1cm4gc30scHJpbnRDaGFyPShlLHQpPT57dmFyIGk9TVtlXTtpZigwPT09dHx8MTA9PT10KXsoMT09PWU/bzpnKShVVEY4QXJyYXlUb1N0cmluZyhpKSk7aS5sZW5ndGg9MH1lbHNlIGkucHVzaCh0KX0sVVRGOFRvU3RyaW5nPShlLHQpPT5lP1VURjhBcnJheVRvU3RyaW5nKFEsZSx0KToiIix4PXttOigpPT5mdW5jdGlvbiBhYm9ydChlKXthLm9uQWJvcnQ/LihlKTtnKGU9IkFib3J0ZWQoIitlKyIpIik7dT0hMDtlKz0iLiBCdWlsZCB3aXRoIC1zQVNTRVJUSU9OUyBmb3IgbW9yZSBpbmZvLiI7dmFyIHQ9bmV3IFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvcihlKTtpKHQpO3Rocm93IHR9KCIiKSxjOihlLHQsaSk9PlEuY29weVdpdGhpbihlLHQsdCtpKSxsOigpPT57az0hMTtSPTB9LG46KGUsdCk9PntpZihOW2VdKXtjbGVhclRpbWVvdXQoTltlXS5pZCk7ZGVsZXRlIE5bZV19aWYoIXQpcmV0dXJuIDA7dmFyIGk9c2V0VGltZW91dCgoKCk9PntkZWxldGUgTltlXTtjYWxsVXNlckNhbGxiYWNrKCgoKT0+SChlLHBlcmZvcm1hbmNlLm5vdygpKSkpfSksdCk7TltlXT17aWQ6aSx0aW1lb3V0X21zOnR9O3JldHVybiAwfSxnOmZ1bmN0aW9uIF9jb3B5X3BpeGVsc18xKGUsdCl7ZT4+PTI7Y29uc3QgaT1hLmltYWdlRGF0YT1uZXcgVWludDhDbGFtcGVkQXJyYXkodCkscj1hLkhFQVAzMi5zdWJhcnJheShlLGUrdCk7aS5zZXQocil9LGY6ZnVuY3Rpb24gX2NvcHlfcGl4ZWxzXzMoZSx0LGkscil7ZT4+PTI7dD4+PTI7aT4+PTI7Y29uc3Qgcz1hLmltYWdlRGF0YT1uZXcgVWludDhDbGFtcGVkQXJyYXkoMypyKSxuPWEuSEVBUDMyLnN1YmFycmF5KGUsZStyKSxvPWEuSEVBUDMyLnN1YmFycmF5KHQsdCtyKSxnPWEuSEVBUDMyLnN1YmFycmF5KGksaStyKTtmb3IobGV0IGU9MDtlPHI7ZSsrKXtzWzMqZV09bltlXTtzWzMqZSsxXT1vW2VdO3NbMyplKzJdPWdbZV19fSxlOmZ1bmN0aW9uIF9jb3B5X3BpeGVsc180KGUsdCxpLHIscyl7ZT4+PTI7dD4+PTI7aT4+PTI7cj4+PTI7Y29uc3Qgbj1hLmltYWdlRGF0YT1uZXcgVWludDhDbGFtcGVkQXJyYXkoNCpzKSxvPWEuSEVBUDMyLnN1YmFycmF5KGUsZStzKSxnPWEuSEVBUDMyLnN1YmFycmF5KHQsdCtzKSxjPWEuSEVBUDMyLnN1YmFycmF5KGksaStzKSxsPWEuSEVBUDMyLnN1YmFycmF5KHIscitzKTtmb3IobGV0IGU9MDtlPHM7ZSsrKXtuWzQqZV09b1tlXTtuWzQqZSsxXT1nW2VdO25bNCplKzJdPWNbZV07bls0KmUrM109bFtlXX19LG86ZT0+e3ZhciB0LGksYT1RLmxlbmd0aCxyPTIxNDc0ODM2NDg7aWYoKGU+Pj49MCk+cilyZXR1cm4hMTtmb3IodmFyIHM9MTtzPD00O3MqPTIpe3ZhciBuPWEqKDErLjIvcyk7bj1NYXRoLm1pbihuLGUrMTAwNjYzMjk2KTt2YXIgbz1NYXRoLm1pbihyLCh0PU1hdGgubWF4KGUsbiksaT02NTUzNixNYXRoLmNlaWwodC9pKSppKSk7aWYoZ3Jvd01lbW9yeShvKSlyZXR1cm4hMH1yZXR1cm4hMX0scDooZSx0KT0+e3ZhciBpPTA7Z2V0RW52U3RyaW5ncygpLmZvckVhY2goKChhLHIpPT57dmFyIHM9dCtpO0VbZSs0KnI+PjJdPXM7KChlLHQpPT57Zm9yKHZhciBpPTA7aTxlLmxlbmd0aDsrK2kpQ1t0KytdPWUuY2hhckNvZGVBdChpKTtDW3RdPTB9KShhLHMpO2krPWEubGVuZ3RoKzF9KSk7cmV0dXJuIDB9LHE6KGUsdCk9Pnt2YXIgaT1nZXRFbnZTdHJpbmdzKCk7RVtlPj4yXT1pLmxlbmd0aDt2YXIgYT0wO2kuZm9yRWFjaCgoZT0+YSs9ZS5sZW5ndGgrMSkpO0VbdD4+Ml09YTtyZXR1cm4gMH0scjplPT41MixqOmZ1bmN0aW9uIF9mZF9zZWVrKGUsdCxpLGEscil7cmV0dXJuIDcwfSxiOihlLHQsaSxhKT0+e2Zvcih2YXIgcj0wLHM9MDtzPGk7cysrKXt2YXIgbj1FW3Q+PjJdLG89RVt0KzQ+PjJdO3QrPTg7Zm9yKHZhciBnPTA7ZzxvO2crKylwcmludENoYXIoZSxRW24rZ10pO3IrPW99RVthPj4yXT1yO3JldHVybiAwfSxzOmZ1bmN0aW9uIF9ncmF5X3RvX3JnYmEoZSx0KXtlPj49Mjtjb25zdCBpPWEuaW1hZ2VEYXRhPW5ldyBVaW50OENsYW1wZWRBcnJheSg0KnQpLHI9YS5IRUFQMzIuc3ViYXJyYXkoZSxlK3QpO2ZvcihsZXQgZT0wO2U8dDtlKyspe2lbNCplXT1pWzQqZSsxXT1pWzQqZSsyXT1yW2VdO2lbNCplKzNdPTI1NX19LGk6ZnVuY3Rpb24gX2dyYXlhX3RvX3JnYmEoZSx0LGkpe2U+Pj0yO3Q+Pj0yO2NvbnN0IHI9YS5pbWFnZURhdGE9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDQqaSkscz1hLkhFQVAzMi5zdWJhcnJheShlLGUraSksbj1hLkhFQVAzMi5zdWJhcnJheSh0LHQraSk7Zm9yKGxldCBlPTA7ZTxpO2UrKyl7cls0KmVdPXJbNCplKzFdPXJbNCplKzJdPXNbZV07cls0KmUrM109bltlXX19LGQ6ZnVuY3Rpb24gX2pzUHJpbnRXYXJuaW5nKGUpe2NvbnN0IHQ9VVRGOFRvU3RyaW5nKGUpOyhhLndhcm58fGNvbnNvbGUud2FybikoYE9wZW5KUEVHOiAke3R9YCl9LGs6X3Byb2NfZXhpdCxoOmZ1bmN0aW9uIF9yZ2JfdG9fcmdiYShlLHQsaSxyKXtlPj49Mjt0Pj49MjtpPj49Mjtjb25zdCBzPWEuaW1hZ2VEYXRhPW5ldyBVaW50OENsYW1wZWRBcnJheSg0KnIpLG49YS5IRUFQMzIuc3ViYXJyYXkoZSxlK3IpLG89YS5IRUFQMzIuc3ViYXJyYXkodCx0K3IpLGc9YS5IRUFQMzIuc3ViYXJyYXkoaSxpK3IpO2ZvcihsZXQgZT0wO2U8cjtlKyspe3NbNCplXT1uW2VdO3NbNCplKzFdPW9bZV07c1s0KmUrMl09Z1tlXTtzWzQqZSszXT0yNTV9fSxhOmZ1bmN0aW9uIF9zdG9yZUVycm9yTWVzc2FnZShlKXtjb25zdCB0PVVURjhUb1N0cmluZyhlKTthLmVycm9yTWVzc2FnZXM/YS5lcnJvck1lc3NhZ2VzKz0iXG4iK3Q6YS5lcnJvck1lc3NhZ2VzPXR9fSxMPWZ1bmN0aW9uIGNyZWF0ZVdhc20oKXtmdW5jdGlvbiByZWNlaXZlSW5zdGFuY2UoZSx0KXtMPWUuZXhwb3J0cztjPUwudDt1cGRhdGVNZW1vcnlWaWV3cygpOyFmdW5jdGlvbiBhZGRPbkluaXQoZSl7cC51bnNoaWZ0KGUpfShMLnUpOyFmdW5jdGlvbiByZW1vdmVSdW5EZXBlbmRlbmN5KGUpe3ktLTthLm1vbml0b3JSdW5EZXBlbmRlbmNpZXM/Lih5KTtpZigwPT15KXtpZihudWxsIT09dyl7Y2xlYXJJbnRlcnZhbCh3KTt3PW51bGx9aWYoYil7dmFyIHQ9YjtiPW51bGw7dCgpfX19KCk7cmV0dXJuIEx9IWZ1bmN0aW9uIGFkZFJ1bkRlcGVuZGVuY3koZSl7eSsrO2EubW9uaXRvclJ1bkRlcGVuZGVuY2llcz8uKHkpfSgpO3ZhciBlPWZ1bmN0aW9uIGdldFdhc21JbXBvcnRzKCl7cmV0dXJue2E6eH19KCk7aWYoYS5pbnN0YW50aWF0ZVdhc20pdHJ5e3JldHVybiBhLmluc3RhbnRpYXRlV2FzbShlLHJlY2VpdmVJbnN0YW5jZSl9Y2F0Y2goZSl7ZyhgTW9kdWxlLmluc3RhbnRpYXRlV2FzbSBjYWxsYmFjayBmYWlsZWQgd2l0aCBlcnJvcjogJHtlfWApO2koZSl9ZD8/PSJkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsQUdGemJRRUFBQUFCMlFFY1lBTi9mMzhCZjJBRWYzOS9md0YvWUFGL0FHQUNmMzhBWUFGL0FYOWdBMzkvZndCZ0FuOS9BWDlnQkg5L2YzOEFZQU4vZm44QmZtQUZmMzkvZjM4QmYyQUFBR0FDZm44QmYyQURmMzUvQVg5Z0FuNS9BWDVnQlg5L2YzOS9BR0FIZjM5L2YzOS9md0YvWUFsL2YzOS9mMzkvZjM4QmYyQUxmMzkvZjM5L2YzOS9mMzhCZjJBR2YzOS9mMzkvQVg5Z0FBRi9ZQVovZjM5L2YzOEFZQVovZkg5L2YzOEJmMkFDZjN3QmYyQUlmMzkvZjM5L2YzOEFZQWgvZjM5L2YzOS9md0YvWUFkL2YzOS9mMzkvQUdBQ2ZIOEJmR0FDZjN3QUFuTVRBV0VCWVFBQ0FXRUJZZ0FCQVdFQll3QUZBV0VCWkFBQ0FXRUJaUUFPQVdFQlpnQUhBV0VCWndBREFXRUJhQUFIQVdFQmFRQUZBV0VCYWdBSkFXRUJhd0FDQVdFQmJBQUtBV0VCYlFBS0FXRUJiZ0FXQVdFQmJ3QUVBV0VCY0FBR0FXRUJjUUFHQVdFQmNnQUVBV0VCY3dBREE4MEJ5d0VIQWdVQUJnUUFCUVlFQVFVRURnVVhCZ0lDQWdJQUJoQUdFUVFDQ3d3U0FnVUNCQWNFQWhNREZBTUNBZ1lDR0FNSEJRQUFCQU1CQ2drSkF3QUpCZ0VFQkFVRkV3OEJBUU1BQXdZQ0VBUVVHUUlIQmdNSEJ3RUJBZ0FFQ2dZYUJ3UUVEdzREQmdRQUJBSUNBZ0FHQmdBQkFRRUJBUUVCQVFBQUFBQUFCZ01DQWdJREF3TURBd29LQWdJYkFBTVZDQVFFQUFnREF3a0VDQXNOQUFnQUFRRUJBUUVCQVFFQkRBQUVCQVVKRHdFU0VRRUFBQVlEQXdFRkJRVUZCUVVGQlFFTkFRRUJBUUVCQVFFQkN3UUZBWEFCY25JRkJ3RUJnZ0tBZ0FJR0NBRi9BVUhRNEFVTEJ5QUhBWFFDQUFGMUFFb0JkZ0NwQVFGM0FCUUJlQUVBQVhrQXFBRUJlZ0NkQVFuUkFRRUFRUUVMY1ZyZEFkTUJnUUdCQVRDNUFhNEJxZ0dZQVpjQmxnR1ZBWlFCa3dHU0FaRUJXNDRCalFHTUFZc0JLNG9CaVFHSUFZY0JoZ0dGQVlRQmd3R0NBZHdCMndIYUFka0IyQUhYQVVuV0FkVUJTVW5VQWRJQjBRSFFBYzhCemdITkFjd0J5d0hLQWNRQnVBRzNBYllCdFFHMEFiTUJzZ0d4QWJBQnJ3R3RBYXdCcXdGU1UxVmJVWkFCWEVCWmp3RllUazlYTVN5OEFic0J2UUhGQWNrQnhnSEFBYm9CdmdHL0FjY0J5QUY5d1FIQ0FjTUJXcWNCcGdHZUFhQUJud0dhQWFNQnBBR2xBYUlCb1FHYkFad0JDc210RHNzQmdnSUJBMzhqQUVHUUJHc2lCQ1FBQWtBZ0FFVU5BQUpBQWtBQ1FBSkFJQUZCQVdzT0JBQUJCQUlFQ3lBQVFReHFJUUVNQWdzZ0FFRVFhaUVCSUFCQkJHb2hBQXdCQ3lBQVFSUnFJUUVnQUVFSWFpRUFDeUFCS0FJQUlnVkZEUUFnQWtVTkFDQUFLQUlBSVFZZ0JFRUFRWUFFRUJraUFTQUROZ0tNQkNNQVFhQUJheUlBSkFBZ0FDQUJOZ0tVQVNBQVFmOEROZ0tZQVNBQVFRQkJrQUVRR1NJQVFYODJBa3dnQUVIbkFEWUNKQ0FBUVg4MkFsQWdBQ0FBUVo4QmFqWUNMQ0FBSUFCQmxBRnFOZ0pVSUFGQkFEb0FBQ0FBSUFJZ0EwSG9BRUhwQUJCMUlBQkJvQUZxSkFBZ0FVRUFPZ0QvQXlBQklBWWdCUkVEQUFzZ0JFR1FCR29rQUF2UUFnRUZmeUFBQkVBZ0FFRUVheUlES0FJQUlnUWhBU0FESVFJZ0FFRUlheWdDQUNJQUlBQkJmbkVpQUVjRVFDQUNJQUJySWdJb0FnUWlBU0FDS0FJSUlnVTJBZ2dnQlNBQk5nSUVJQUFnQkdvaEFRc2dBeUFFYWlJQUtBSUFJZ01nQUNBRGFrRUVheWdDQUVjRVFDQUFLQUlFSWdRZ0FDZ0NDQ0lBTmdJSUlBQWdCRFlDQkNBQklBTnFJUUVMSUFJZ0FUWUNBQ0FDSUFGQmZIRnFRUVJySUFGQkFYSTJBZ0FnQWdKL0lBSW9BZ0JCQ0dzaUFFSC9BRTBFUUNBQVFRTjJRUUZyREFFTElBQm5JUU1nQUVFZElBTnJka0VFY3lBRFFRSjBhMEh1QUdvZ0FFSC9IMDBOQUJwQlB5QUFRUjRnQTJ0MlFRSnpJQU5CQVhSclFjY0FhaUlBSUFCQlAwOGJDeUlCUVFSMElnQkI0TTBCYWpZQ0JDQUNJQUJCNk0wQmFpSUFLQUlBTmdJSUlBQWdBallDQUNBQ0tBSUlJQUkyQWdSQjZOVUJRZWpWQVNrREFFSUJJQUd0aG9RM0F3QUxDOGtDQVFSL0lBRkJBRFlDQUFKQUlBSkZEUUFnQVNBQ2FpRURBa0FnQWtFUVNRUkFJQUFoQVF3QkN3SkFJQUVnQUNBQ2FrOE5BQ0FBSUFOUERRQWdBQ0VCREFFTElBTkJFR3NoQmlBQUlBSkJjSEVpQldvaEFTQURJQVZySVFNRFFDQUdJQVJySUFBZ0JHcjlBQUFBL1F3QUFBQUFBQUFBQUFBQUFBQUFBQUFBL1EwUERnME1Dd29KQ0FjR0JRUURBZ0VBL1FzQUFDQUVRUkJxSWdRZ0JVY05BQXNnQWlBRlJnMEJDd0pBSUFKQkEzRWlCa1VFUUNBRklRUU1BUXRCQUNFQUlBVWhCQU5BSUFOQkFXc2lBeUFCTFFBQU9nQUFJQVJCQVdvaEJDQUJRUUZxSVFFZ0FFRUJhaUlBSUFaSERRQUxDeUFGSUFKclFYeExEUUFEUUNBRFFRRnJJQUV0QUFBNkFBQWdBMEVDYXlBQkxRQUJPZ0FBSUFOQkEyc2dBUzBBQWpvQUFDQURRUVJySWdNZ0FTMEFBem9BQUNBQlFRUnFJUUVnQkVFRWFpSUVJQUpIRFFBTEN3dUNCQUVEZnlBQ1FZQUVUd1JBSUFBZ0FTQUNFQUlnQUE4TElBQWdBbW9oQXdKQUlBQWdBWE5CQTNGRkJFQUNRQ0FBUVFOeFJRUkFJQUFoQWd3QkN5QUNSUVJBSUFBaEFnd0JDeUFBSVFJRFFDQUNJQUV0QUFBNkFBQWdBVUVCYWlFQklBSkJBV29pQWtFRGNVVU5BU0FDSUFOSkRRQUxDeUFEUVh4eElRUUNRQ0FEUWNBQVNRMEFJQUlnQkVGQWFpSUZTdzBBQTBBZ0FpQUJLQUlBTmdJQUlBSWdBU2dDQkRZQ0JDQUNJQUVvQWdnMkFnZ2dBaUFCS0FJTU5nSU1JQUlnQVNnQ0VEWUNFQ0FDSUFFb0FoUTJBaFFnQWlBQktBSVlOZ0lZSUFJZ0FTZ0NIRFlDSENBQ0lBRW9BaUEyQWlBZ0FpQUJLQUlrTmdJa0lBSWdBU2dDS0RZQ0tDQUNJQUVvQWl3MkFpd2dBaUFCS0FJd05nSXdJQUlnQVNnQ05EWUNOQ0FDSUFFb0FqZzJBamdnQWlBQktBSThOZ0k4SUFGQlFHc2hBU0FDUVVCcklnSWdCVTBOQUFzTElBSWdCRThOQVFOQUlBSWdBU2dDQURZQ0FDQUJRUVJxSVFFZ0FrRUVhaUlDSUFSSkRRQUxEQUVMSUFOQkJFa0VRQ0FBSVFJTUFRc2dBMEVFYXlJRUlBQkpCRUFnQUNFQ0RBRUxJQUFoQWdOQUlBSWdBUzBBQURvQUFDQUNJQUV0QUFFNkFBRWdBaUFCTFFBQ09nQUNJQUlnQVMwQUF6b0FBeUFCUVFScUlRRWdBa0VFYWlJQ0lBUk5EUUFMQ3lBQ0lBTkpCRUFEUUNBQ0lBRXRBQUE2QUFBZ0FVRUJhaUVCSUFKQkFXb2lBaUFEUncwQUN3c2dBQXN3QVFGL0FrQWdBRVVOQUNBQlJRMEFRUWdnQUNBQmJDSUJFQ2tpQUFSQUlBQkJBQ0FCRUJrYUN5QUFJUUlMSUFJTEVRQWdBRVVFUUVFQUR3dEJDQ0FBRUNrTDhnSUNBbjhCZmdKQUlBSkZEUUFnQUNBQk9nQUFJQUFnQW1vaUEwRUJheUFCT2dBQUlBSkJBMGtOQUNBQUlBRTZBQUlnQUNBQk9nQUJJQU5CQTJzZ0FUb0FBQ0FEUVFKcklBRTZBQUFnQWtFSFNRMEFJQUFnQVRvQUF5QURRUVJySUFFNkFBQWdBa0VKU1EwQUlBQkJBQ0FBYTBFRGNTSUVhaUlESUFGQi93RnhRWUdDaEFoc0lnRTJBZ0FnQXlBQ0lBUnJRWHh4SWdScUlnSkJCR3NnQVRZQ0FDQUVRUWxKRFFBZ0F5QUJOZ0lJSUFNZ0FUWUNCQ0FDUVFocklBRTJBZ0FnQWtFTWF5QUJOZ0lBSUFSQkdVa05BQ0FESUFFMkFoZ2dBeUFCTmdJVUlBTWdBVFlDRUNBRElBRTJBZ3dnQWtFUWF5QUJOZ0lBSUFKQkZHc2dBVFlDQUNBQ1FSaHJJQUUyQWdBZ0FrRWNheUFCTmdJQUlBUWdBMEVFY1VFWWNpSUVheUlDUVNCSkRRQWdBYTFDZ1lDQWdCQitJUVVnQXlBRWFpRUJBMEFnQVNBRk53TVlJQUVnQlRjREVDQUJJQVUzQXdnZ0FTQUZOd01BSUFGQklHb2hBU0FDUVNCcklnSkJIMHNOQUFzTElBQUxKd0VCZnlNQVFSQnJJZ01rQUNBRElBSTJBZ3dnQUNBQklBSkJBRUVBRUhVZ0EwRVFhaVFBQytnRkFRbC9JQUZGQkVCQkFBOExBbjhnQUVVRVFFRUlJQUVRS1F3QkN5QUJSUVJBSUFBUUZFRUFEQUVMQWtBZ0FVRkhTdzBBSUFBQ2YwRUlJQUZCQTJwQmZIRWdBVUVJVFJzaUIwRUlhaUVCQWtBQ2Z3SkFJQUJCQkdzaUNpSUVLQUlBSWdVZ0JHb2lBaWdDQUNJSklBSWdDV29pQ0VFRWF5Z0NBRWNFUUNBSUlBRWdCR29pQTBFUWFrOEVRQ0FDS0FJRUlnVWdBaWdDQ0NJQ05nSUlJQUlnQlRZQ0JDQURJQWdnQTJzaUFqWUNBQ0FESUFKQmZIRnFRUVJySUFKQkFYSTJBZ0FnQXdKL0lBTW9BZ0JCQ0dzaUFrSC9BRTBFUUNBQ1FRTjJRUUZyREFFTElBSkJIU0FDWnlJRmEzWkJCSE1nQlVFQ2RHdEI3Z0JxSUFKQi94OU5EUUFhUVQ4Z0FrRWVJQVZyZGtFQ2N5QUZRUUYwYTBISEFHb2lBaUFDUVQ5UEd3c2lBa0VFZENJRlFlRE5BV28yQWdRZ0F5QUZRZWpOQVdvaUJTZ0NBRFlDQ0NBRklBTTJBZ0FnQXlnQ0NDQUROZ0lFUWVqVkFVSG8xUUVwQXdCQ0FTQUNyWWFFTndNQUlBUWdBVFlDQUF3RUN5QURJQWhMRFFFZ0FpZ0NCQ0lCSUFJb0FnZ2lBellDQ0NBRElBRTJBZ1FnQkNBRklBbHFJZ0UyQWdBTUF3c2dCU0FCUVJCcVR3UkFJQVFnQVRZQ0FDQUVJQUZCZkhGcVFRUnJJQUUyQWdBZ0FTQUVhaUlESUFVZ0FXc2lBVFlDQUNBRElBRkJmSEZxUVFScklBRkJBWEkyQWdBZ0F3Si9JQU1vQWdCQkNHc2lBVUgvQUUwRVFDQUJRUU4yUVFGckRBRUxJQUZCSFNBQlp5SUVhM1pCQkhNZ0JFRUNkR3RCN2dCcUlBRkIveDlORFFBYVFUOGdBVUVlSUFScmRrRUNjeUFFUVFGMGEwSEhBR29pQVNBQlFUOVBHd3NpQVVFRWRDSUVRZUROQVdvMkFnUWdBeUFFUWVqTkFXb2lCQ2dDQURZQ0NDQUVJQU0yQWdBZ0F5Z0NDQ0FETmdJRVFlalZBVUhvMVFFcEF3QkNBU0FCcllhRU53TUFRUUVNQkF0QkFTQUJJQVZORFFFYUMwRUFDd3dCQ3lBRUlBRkJmSEZxUVFScklBRTJBZ0JCQVFzTkFScEJDQ0FIRUNraUFVVU5BQ0FCSUFBZ0J5QUtLQUlBUVFocklnWWdCaUFIU3hzUUZob2dBQkFVSUFFaEJnc2dCZ3NMTXdFQmZ5TUFRUkJySWdFa0FDQUFCSDhnQVVFTWFrRVFJQUFRZVNFQVFRQWdBU2dDRENBQUd3VkJBQXNnQVVFUWFpUUFDN3dFQVFWL0lBSWdBQ2dDTUNJRlRRUkFJQUVnQUNnQ0pDQUNFQllhSUFBZ0FDZ0NKQ0FDYWpZQ0pDQUFJQUFvQWpBZ0FtczJBakFnQUNBQUtRTTRJQUt0ZkRjRE9DQUNEd3NnQUMwQVJFRUVjUVJBSUFFZ0FDZ0NKQ0FGRUJZYUlBQW9BakFoQVNBQVFRQTJBakFnQUNBQklBQW9BaVJxTmdJa0lBQWdBQ2tET0NBQnJYdzNBemdnQlVGL0lBVWJEd3NDUUNBRkJFQWdBU0FBS0FJa0lBVVFGaUVFSUFBZ0FDZ0NJQ0lITmdJa0lBQW9BakFoQVNBQVFRQTJBakFnQUNBQUtRTTRJQUd0ZkRjRE9DQUNJQUZySVFJZ0FTQUVhaUVCREFFTElBQWdBQ2dDSUNJSE5nSWtDd0pBQWtBRFFBSkFJQUFvQWdBaEJDQUFLQUlRSVFZQ1FDQUFLQUpBSWdnZ0Frc0VRQ0FBSUFjZ0NDQUVJQVlSQUFBaUJqWUNNQ0FHUVg5R0JFQU1CZ3NnQWlBR1RRMENJQUVnQUNnQ0pDQUdFQllhSUFBZ0FDZ0NJQ0lITmdJa0lBQW9BakFoQkF3QkN5QUFJQUVnQWlBRUlBWVJBQUFpQkRZQ01DQUVRWDlHQkVBTUJRc2dBaUFFVFEwRElBQWdBQ2dDSUNJSE5nSWtJQVFoQmdzZ0FFRUFOZ0l3SUFBZ0FDa0RPQ0FFclh3M0F6Z2dBU0FFYWlFQklBSWdCR3NoQWlBRklBWnFJUVVNQVFzTElBRWdBQ2dDSkNBQ0VCWWFJQUFnQUNnQ0pDQUNhallDSkNBQUlBQW9BakFnQW1zMkFqQWdBQ0FBS1FNNElBS3RmRGNET0NBQ0lBVnFEd3NnQUVFQU5nSXdJQUFnQUNnQ0lEWUNKQ0FBSUFBcEF6Z2dCSzE4TndNNElBUWdCV29QQ3lBRFFRUkI2ZmtBUVFBUUV5QUFRUUEyQWpBZ0FDQUFLQUpFUVFSeU5nSkVJQVZCZnlBRkd3c1hBQ0FBTFFBQVFTQnhSUVJBSUFFZ0FpQUFFRVlhQ3d1REJ3SUxmd0YrSUFBb0FoQWlCMEVnVHdSQUlBQXBBd2luRHdzQ1FDQUFLQUlZSWdKQkJFNEVRQ0FBS0FJQUlnRW9BZ0FoQkNBQUlBSkJCR3NpQlRZQ0dDQUFJQUZCQkdvMkFnQU1BUXRCZjBFQUlBQW9BaHdiSVFRZ0FrRUFUQVJBSUFJaEJRd0JDeUFDUVFGeElBQW9BZ0FoQVFKQUlBSkJBVVlFUUNBQklRWU1BUXNnQWtIKy8vLy9CM0VoQ2dOQUlBQWdBVUVCYWpZQ0FDQUJMUUFBSVFrZ0FDQUJRUUpxSWdZMkFnQWdBQ0FDUVFGck5nSVlJQUV0QUFFaEFTQUFJQUpCQW1zaUFqWUNHQ0FFUWY4QklBTjBRWDl6Y1NBSklBTjBja0dBL2dNZ0EzUkJmM054SUFFZ0EwRUljblJ5SVFRZ0EwRVFhaUVESUFZaEFTQUZRUUpxSWdVZ0NrY05BQXNMUVFBaEJVVU5BQ0FBSUFaQkFXbzJBZ0FnQmkwQUFDRUJJQUFnQWtFQmF6WUNHQ0FFUWY4QklBTjBRWDl6Y1NBQklBTjBjaUVFQ3lBQUtBSVVJUUVnQUNBRVFSaDJJZ3BCL3dGR05nSVVJQUJCQjBFSUlBRWJJZ0ZCQjBFSUlBUkIvd0Z4SWdaQi93RkdHMm9pQWtFSFFRZ2dCRUVJZGtIL0FYRWlBMEgvQVVZYmFpSUpRUWRCQ0NBRVFSQjJRZjhCY1NJRVFmOEJSaHNnQjJwcUlnZzJBaEFnQUNBQUtRTUlJQU1nQVhRZ0JDQUNkSElnQ2lBSmRISWdCbkt0SUFldGhvUWlERGNEQ0NBSVFSOU5CRUFDUUNBRlFRUk9CRUFnQUNnQ0FDSUJLQUlBSVFJZ0FDQUZRUVJyTmdJWUlBQWdBVUVFYWpZQ0FBd0JDMEVBSVFOQmYwRUFJQUFvQWh3YklRSWdCVUVBVEEwQUlBVkJBWEVnQUNnQ0FDRUJBa0FnQlVFQlJnUkFJQUVoQkF3QkN5QUZRZjcvLy84SGNTRUpRUUFoQmdOQUlBQWdBVUVCYWpZQ0FDQUJMUUFBSVFzZ0FDQUJRUUpxSWdRMkFnQWdBQ0FGUVFGck5nSVlJQUV0QUFFaEFTQUFJQVZCQW1zaUJUWUNHQ0FDUWY4QklBTjBRWDl6Y1NBTElBTjBja0dBL2dNZ0EzUkJmM054SUFFZ0EwRUljblJ5SVFJZ0EwRVFhaUVESUFRaEFTQUdRUUpxSWdZZ0NVY05BQXNMUlEwQUlBQWdCRUVCYWpZQ0FDQUVMUUFBSVFFZ0FDQUZRUUZyTmdJWUlBSkIvd0VnQTNSQmYzTnhJQUVnQTNSeUlRSUxJQUFnQWtFWWRpSUJRZjhCUmpZQ0ZDQUFRUWRCQ0NBS1FmOEJSaHNpQkVFSFFRZ2dBa0gvQVhFaUJrSC9BVVliYWlJRlFRZEJDQ0FDUVFoMlFmOEJjU0lEUWY4QlJodHFJZ2RCQjBFSUlBSkJFSFpCL3dGeElnSkIvd0ZHR3lBSWFtbzJBaEFnQUNBRElBUjBJQUlnQlhSeUlBRWdCM1J5SUFaeXJTQUlyWVlnRElRaUREY0RDQXNnREtjTGF3RUJmeU1BUVlBQ2F5SUZKQUFDUUNBQ0lBTk1EUUFnQkVHQXdBUnhEUUFnQlNBQklBSWdBMnNpQTBHQUFpQURRWUFDU1NJQkd4QVpHaUFCUlFSQUEwQWdBQ0FGUVlBQ0VCNGdBMEdBQW1zaUEwSC9BVXNOQUFzTElBQWdCU0FERUI0TElBVkJnQUpxSkFBTE1RQWdBUUovSUFJb0FreEJBRWdFUUNBQUlBRWdBaEJHREFFTElBQWdBU0FDRUVZTElnQkdCRUFQQ3lBQUlBRnVHZ3NYQUNBQUlBRWdBaUFESUFRZ0JTQUdJQWRCQVJBcUdndWhBUUVFZnlBQlFRQk1CRUJCQUE4TElBQW9BZ3doQWlBQUtBSVFJUU1EUUNBQklRVUNRQ0FERFFBZ0FDQUNRUWgwUVlEK0EzRWlBallDRENBQVFRZEJDQ0FDUVlEK0EwWWJJZ00yQWhBZ0FDZ0NDQ0lCSUFBb0FnUlBEUUFnQUNBQlFRRnFOZ0lJSUFBZ0FpQUJMUUFBY2lJQ05nSU1DeUFBSUFOQkFXc2lBellDRUNBQ0lBTjJRUUZ4SUFWQkFXc2lBWFFnQkhJaEJDQUZRUUZMRFFBTElBUUxIZ0FnQUNnQ0RBUkFJQUJCQURZQ0tBTkFJQUFvQWhoQkFFb05BQXNMQzJvQkEzOGdBQVJBSUFBb0FoZ2lBUVJBSUFBb0FoQWlBZ1IvUVFBaEFRTkFJQUFvQWhnZ0FVRTBiR29vQWl3aUF3UkFJQU1RRkNBQUtBSVFJUUlMSUFGQkFXb2lBU0FDU1EwQUN5QUFLQUlZQlNBQkN4QVVDeUFBS0FJY0lnRUVRQ0FCRUJRTElBQVFGQXNMa2hVQkQzOENRQUpBSUFBb0FneEZCRUJCQVNFUElBQW9BZ1JCQUVvTkFTQUFLQUlJUVFGS0RRRU1BZ3RCQVNFTklBQW9BZ2hCQUVvTkFDQUFLQUlFUVFKSURRRUxJQUFvQWdBaUNDQU5RUVYwYWlFRUFrQWdBQ2dDRUNJSElBQW9BaFFpQ2s4TkFDQUVJQWRCQm5ScUlRRUNRQ0FLSUFkclFRTnhJZ1pGQkVBZ0J5RUNEQUVMSUFjaEFnTkFJQUVnQWYwQUJBRDlERmgyblQ5WWRwMC9XSGFkUDFoMm5ULzk1Z0g5Q3dRQUlBRWdBZjBBQkJEOURGaDJuVDlZZHAwL1dIYWRQMWgyblQvOTVnSDlDd1FRSUFGQlFHc2hBU0FDUVFGcUlRSWdBMEVCYWlJRElBWkhEUUFMQ3lBSElBcHJRWHhMRFFBRFFDQUJJQUg5QUFRQS9ReFlkcDAvV0hhZFAxaDJuVDlZZHAwLy9lWUIvUXNFQUNBQklBSDlBQVFRL1F4WWRwMC9XSGFkUDFoMm5UOVlkcDAvL2VZQi9Rc0VFQ0FCSUFIOUFBUkEvUXhZZHAwL1dIYWRQMWgyblQ5WWRwMC8vZVlCL1FzRVFDQUJJQUg5QUFSUS9ReFlkcDAvV0hhZFAxaDJuVDlZZHAwLy9lWUIvUXNFVUNBQklBSDlBQVNBQWYwTVdIYWRQMWgyblQ5WWRwMC9XSGFkUC8zbUFmMExCSUFCSUFFZ0FmMEFCSkFCL1F4WWRwMC9XSGFkUDFoMm5UOVlkcDAvL2VZQi9Rc0VrQUVnQVNBQi9RQUV3QUg5REZoMm5UOVlkcDAvV0hhZFAxaDJuVC85NWdIOUN3VEFBU0FCSUFIOUFBVFFBZjBNV0hhZFAxaDJuVDlZZHAwL1dIYWRQLzNtQWYwTEJOQUJJQUZCZ0FKcUlRRWdBa0VFYWlJQ0lBcEhEUUFMQ3lBSUlBOUJCWFJxSVFVQ1FDQUFLQUlZSWdZZ0FDZ0NIQ0lMVHcwQUlBVWdCa0VHZEdvaEFRSkFJQXNnQm10QkEzRWlDRVVFUUNBR0lRSU1BUXRCQUNFRElBWWhBZ05BSUFFZ0FmMEFCQUQ5REFBWTBEOEFHTkEvQUJqUVB3QVkwRC85NWdIOUN3UUFJQUVnQWYwQUJCRDlEQUFZMEQ4QUdOQS9BQmpRUHdBWTBELzk1Z0g5Q3dRUUlBRkJRR3NoQVNBQ1FRRnFJUUlnQTBFQmFpSURJQWhIRFFBTEN5QUdJQXRyUVh4TERRQURRQ0FCSUFIOUFBUUEvUXdBR05BL0FCalFQd0FZMEQ4QUdOQS8vZVlCL1FzRUFDQUJJQUg5QUFRUS9Rd0FHTkEvQUJqUVB3QVkwRDhBR05BLy9lWUIvUXNFRUNBQklBSDlBQVJBL1F3QUdOQS9BQmpRUHdBWTBEOEFHTkEvL2VZQi9Rc0VRQ0FCSUFIOUFBUlEvUXdBR05BL0FCalFQd0FZMEQ4QUdOQS8vZVlCL1FzRVVDQUJJQUg5QUFTQUFmME1BQmpRUHdBWTBEOEFHTkEvQUJqUVAvM21BZjBMQklBQklBRWdBZjBBQkpBQi9Rd0FHTkEvQUJqUVB3QVkwRDhBR05BLy9lWUIvUXNFa0FFZ0FTQUIvUUFFd0FIOURBQVkwRDhBR05BL0FCalFQd0FZMEQvOTVnSDlDd1RBQVNBQklBSDlBQVRRQWYwTUFCalFQd0FZMEQ4QUdOQS9BQmpRUC8zbUFmMExCTkFCSUFGQmdBSnFJUUVnQWtFRWFpSUNJQXRIRFFBTEN5QUtJQUFvQWdnaUNTQUFLQUlFSWc0Z0RXc2lBQ0FBSUFsS0d5SUlJQWdnQ2tzYklRd2dCRUVnYWlFQkFuOGdCMFVFUUNBTVJRUkFRUUFoQXlBQkRBSUxJQVFnQlAwQUJBQWdCZjBBQkFBZ0JQMEFCQ0Q5NUFIOURGVVQ0ejVWRStNK1ZSUGpQbFVUNHo3OTVnSDk1UUg5Q3dRQUlBUWdCUDBBQkJBZ0JmMEFCQkFnQlAwQUJERDk1QUg5REZVVDR6NVZFK00rVlJQalBsVVQ0ejc5NWdIOTVRSDlDd1FRUVFFaEF5QUVRZUFBYWd3QkN5QUJJQWNpQTBFR2RHb0xJUUlnQXlBTVNRUkFBMEFnQWtFZ2F5SUFJQUQ5QUFRQUlBSkJRR3I5QUFRQUlBTDlBQVFBL2VRQi9ReFZFK00rVlJQalBsVVQ0ejVWRStNKy9lWUIvZVVCL1FzRUFDQUNRUkJySWdBZ0FQMEFCQUFnQWtFd2EvMEFCQUFnQXYwQUJCRDk1QUg5REZVVDR6NVZFK00rVlJQalBsVVQ0ejc5NWdIOTVRSDlDd1FBSUFKQlFHc2hBaUFEUVFGcUlnTWdERWNOQUFzTElBZ2dDazhpRFVVRVFDQUNRU0JySWdBZ0FQMEFCQUFnQWtGQWF2MEFCQUQ5REZVVFl6OVZFMk0vVlJOalAxVVRZei85NWdIOTVRSDlDd1FBSUFKQkVHc2lBQ0FBL1FBRUFDQUNRVEJyL1FBRUFQME1WUk5qUDFVVFl6OVZFMk0vVlJOalAvM21BZjNsQWYwTEJBQUxJQXNnRGlBSklBOXJJZ0FnQUNBT1Noc2lEaUFMSUE1Skd5RUpJQVZCSUdvaEFpQUpBbjhnQmtVRVFDQUpSUVJBSUFJaEEwRUFEQUlMSUFVZ0JmMEFCQUFnQlAwQUJBQWdCZjBBQkNEOTVBSDlESFlHWWo5MkJtSS9kZ1ppUDNZR1lqLzk1Z0g5NVFIOUN3UUFJQVVnQmYwQUJCQWdCUDBBQkJBZ0JmMEFCREQ5NUFIOURIWUdZajkyQm1JL2RnWmlQM1lHWWovOTVnSDk1UUg5Q3dRUUlBVkI0QUJxSVFOQkFRd0JDeUFDSUFaQkJuUnFJUU1nQmdzaUFFc0VRQU5BSUFOQklHc2lDQ0FJL1FBRUFDQURRVUJxL1FBRUFDQUQvUUFFQVAza0FmME1kZ1ppUDNZR1lqOTJCbUkvZGdaaVAvM21BZjNsQWYwTEJBQWdBMEVRYXlJSUlBajlBQVFBSUFOQk1HdjlBQVFBSUFQOUFBUVEvZVFCL1F4MkJtSS9kZ1ppUDNZR1lqOTJCbUkvL2VZQi9lVUIvUXNFQUNBRFFVQnJJUU1nQUVFQmFpSUFJQWxIRFFBTEN5QUxJQTVOSWdoRkJFQWdBMEVnYXlJQUlBRDlBQVFBSUFOQlFHcjlBQVFBL1F4MkJ1SS9kZ2JpUDNZRzRqOTJCdUkvL2VZQi9lVUIvUXNFQUNBRFFSQnJJZ0FnQVAwQUJBQWdBMEV3YS8wQUJBRDlESFlHNGo5MkJ1SS9kZ2JpUDNZRzRqLzk1Z0g5NVFIOUN3UUFDd0pBSUFkRkJFQWdERVVFUUVFQUlRY01BZ3NnQkNBRS9RQUVBQ0FGL1FBRUFDQUUvUUFFSVAza0FmME1yZ0ZaUGE0QldUMnVBVms5cmdGWlBmM21BZjNrQWYwTEJBQWdCQ0FFL1FBRUVDQUYvUUFFRUNBRS9RQUVNUDNrQWYwTXJnRlpQYTRCV1QydUFWazlyZ0ZaUGYzbUFmM2tBZjBMQkJBZ0JFSGdBR29oQVVFQklRY01BUXNnQVNBSFFRWjBhaUVCQ3lBSElBeEpCRUFEUUNBQlFTQnJJZ0FnQVAwQUJBQWdBVUZBYXYwQUJBQWdBZjBBQkFEOTVBSDlESzRCV1QydUFWazlyZ0ZaUGE0QldUMzk1Z0g5NUFIOUN3UUFJQUZCRUdzaUFDQUEvUUFFQUNBQlFUQnIvUUFFQUNBQi9RQUVFUDNrQWYwTXJnRlpQYTRCV1QydUFWazlyZ0ZaUGYzbUFmM2tBZjBMQkFBZ0FVRkFheUVCSUFkQkFXb2lCeUFNUncwQUN3c2dEVVVFUUNBQlFTQnJJZ0FnQVAwQUJBQWdBVUZBYXYwQUJBRDlESzRCMlQydUFkazlyZ0haUGE0QjJUMzk1Z0g5NUFIOUN3UUFJQUZCRUdzaUFDQUEvUUFFQUNBQlFUQnIvUUFFQVAwTXJnSFpQYTRCMlQydUFkazlyZ0haUGYzbUFmM2tBZjBMQkFBTEFrQWdCa1VFUUNBSlJRUkFRUUFoQmd3Q0N5QUZJQVg5QUFRQUlBVDlBQVFBSUFYOUFBUWcvZVFCL1F4ekJzcy9jd2JMUDNNR3l6OXpCc3MvL2VZQi9lUUIvUXNFQUNBRklBWDlBQVFRSUFUOUFBUVFJQVg5QUFRdy9lUUIvUXh6QnNzL2N3YkxQM01HeXo5ekJzcy8vZVlCL2VRQi9Rc0VFQ0FGUWVBQWFpRUNRUUVoQmd3QkN5QUNJQVpCQm5ScUlRSUxJQVlnQ1VrRVFBTkFJQUpCSUdzaUFDQUEvUUFFQUNBQ1FVQnEvUUFFQUNBQy9RQUVBUDNrQWYwTWN3YkxQM01HeXo5ekJzcy9jd2JMUC8zbUFmM2tBZjBMQkFBZ0FrRVFheUlBSUFEOUFBUUFJQUpCTUd2OUFBUUFJQUw5QUFRUS9lUUIvUXh6QnNzL2N3YkxQM01HeXo5ekJzcy8vZVlCL2VRQi9Rc0VBQ0FDUVVCcklRSWdCa0VCYWlJR0lBbEhEUUFMQ3lBSURRQWdBa0VnYXlJQUlBRDlBQVFBSUFKQlFHcjlBQVFBL1F4ekJrdEFjd1pMUUhNR1MwQnpCa3RBL2VZQi9lUUIvUXNFQUNBQ1FSQnJJZ0FnQVAwQUJBQWdBa0V3YS8wQUJBRDlESE1HUzBCekJrdEFjd1pMUUhNR1MwRDk1Z0g5NUFIOUN3UUFDd3RkQVFSL0lBQUVRQ0FBS0FJVUlnRWdBQ2dDRUNJQ2JBUkFBMEFnQUNnQ0dDQURRUUowYWlnQ0FDSUVCRUFnQkJBVUlBQW9BaEFoQWlBQUtBSVVJUUVMSUFOQkFXb2lBeUFCSUFKc1NRMEFDd3NnQUNnQ0dCQVVJQUFRRkFzTGhRRUJBbjhDUUFKQUlBQW9BZ1FpQXlBQUtBSUFJZ1JIQkVBZ0FDZ0NDQ0VEREFFTElBQWdBMEVLYWlJRU5nSUVJQUFvQWdnZ0JFRUNkQkFiSWdORkRRRWdBQ0FETmdJSUlBQW9BZ0FoQkFzZ0F5QUVRUUowYWlBQk5nSUFJQUFnQkVFQmFqWUNBRUVCRHdzZ0FDZ0NDQkFVSUFCQ0FEY0NBQ0FDUVFGQnhpOUJBQkFUUVFBTGt3UUNCbjhDZmdKQUFrQURRQ0FBSUFCQkFXdHhEUUVnQVVGSFN3MEJJQUJCQ0NBQVFRaExJZ2NiSVFCQjZOVUJLUU1BSWdnQ2YwRUlJQUZCQTJwQmZIRWdBVUVJVFJzaUFVSC9BRTBFUUNBQlFRTjJRUUZyREFFTElBRm5JUU1nQVVFZElBTnJka0VFY3lBRFFRSjBhMEh1QUdvZ0FVSC9IMDBOQUJwQlB5QUJRUjRnQTJ0MlFRSnpJQU5CQVhSclFjY0FhaUlESUFOQlAwOGJDeUlEcllnaUNVSUFVZ1JBQTBBZ0NTQUplaUlJaUNFSkFuNGdBeUFJcDJvaUEwRUVkQ0lFUWVqTkFXb29BZ0FpQWlBRVFlRE5BV29pQlVjRVFDQUNJQUFnQVJCRklnUU5CaUFDS0FJRUlnUWdBaWdDQ0NJR05nSUlJQVlnQkRZQ0JDQUNJQVUyQWdnZ0FpQUZLQUlFTmdJRUlBVWdBallDQkNBQ0tBSUVJQUkyQWdnZ0EwRUJhaUVESUFsQ0FZZ01BUXRCNk5VQlFlalZBU2tEQUVKK0lBT3RpWU0zQXdBZ0NVSUJoUXNpQ1VJQVVnMEFDMEhvMVFFcEF3QWhDQXRCUHlBSWVhZHJJUVVDUUNBSVVBUkFRUUFoQWd3QkN5QUZRUVIwSWdSQjZNMEJhaWdDQUNFQ0lBaENnSUNBZ0FSVURRQkI0d0FoQXlBQ0lBUkI0TTBCYWlJR1JnMEFBMEFnQTBVTkFTQUNJQUFnQVJCRklnUU5CQ0FEUVFGcklRTWdBaWdDQ0NJQ0lBWkhEUUFMQ3lBQklBQkJNR3BCTUNBSEcyb1FlZzBBQ3lBQ1JRMEFJQUlnQlVFRWRFSGd6UUZxSWdOR0RRQURRQ0FDSUFBZ0FSQkZJZ1FOQWlBQ0tBSUlJZ0lnQTBjTkFBc0xRUUFoQkFzZ0JBdVdJd0luZndON0FrQWdBeUFBS0FJQUlnbExEUUFnQVNBRFR3MEFJQUVnQ1U4TkFDQUVJQUFvQWdRaUNVc05BQ0FDSUFSUERRQWdBaUFKVHcwQUlBVkJIR3NoSnlBQUtBSUlJaGxCQW5RaEVTQUhRUUowSVE4Z0JrRUNkQ0VmSUFWQkJHc2hLQ0FDSUFBb0FneHVJUjRnR1NBWklBRWdHVzRpS1d3Z0FXdHFJU29nQmtFSVJ5RWpJQUloSFFOQUlBQW9BZ3dpQ1NFS0lBSWdIVVlFUUNBSklBSWdDWEJySVFvTElBb2dCQ0FkYXlJTUlBb2dERWtiSWhOQmZIRWhHeUFUUVFOeElSWWdFMEY0Y1NFcklCTkJCM0VoSkNBVFFRRnJJUm9nR1NBSlFRSjBJQXBCQW5SclFRUnFiQ0VnSUFaQkFrWWdFMEVCUm5FaExDQUpJQXBySUJsc0lTVWdKeUFQSUIwZ0Ftc2lER3dpQ1dvaEppQUpJQ2hxSVMwZ0JTQUphaUV1SUFVZ0J5QU1iRUVDZEdvaEhDQXBJU0VnQVNFWUEwQWdLaUFaSUFFZ0dFWWJJZ3dnQXlBWWF5SUpJQWtnREVzYklSQWdHU0FNYXlFSklDRkJBblFpRFNBQUtBSVlJQUFvQWhBZ0hteEJBblJxYWlnQ0FDRVNBa0FDUUNBSUJFQUNRQUpBQWtBQ1FBSkFJQklFUUNBU0lDVkJBblJxSUFsQkFuUnFJUW9nR0NBQmF5RU5JQVpCQVVZTkJDQWNJQVlnRFd4QkFuUnFJUXNnRUVFQlJnMERJQ3dOQWlBakRRRWdFRUVIVFEwQklCTkZEUWdnSmlBTklCOXNhaUFRUVFWMGFpRVZJQklnSUNBUVFRSjBhaUFNUVFKMGEyb2hJaUFRUVh4eElRMUJBQ0VTREFVTElBWkJBVWNFUUNBVFJRMElJQkJCZkhFaERTQVFRUU54SVF3Z0hDQVlJQUZySUFac1FRSjBhaUVMUVFBaEVpQVFRUUZyUVFOSklSUURRQUpBSUJCRkRRQkJBQ0VKUVFBaENrRUFJUTRnRkVVRVFBTkFJQXNnQmlBS2JFRUNkR3BCQURZQ0FDQUxJQXBCQVhJZ0JteEJBblJxUVFBMkFnQWdDeUFLUVFKeUlBWnNRUUowYWtFQU5nSUFJQXNnQ2tFRGNpQUdiRUVDZEdwQkFEWUNBQ0FLUVFScUlRb2dEa0VFYWlJT0lBMUhEUUFMQ3lBTVJRMEFBMEFnQ3lBR0lBcHNRUUowYWtFQU5nSUFJQXBCQVdvaENpQUpRUUZxSWdrZ0RFY05BQXNMSUFzZ0Qyb2hDeUFUSUJKQkFXb2lFa2NOQUFzTUNBc2dFMFVOQnlBUVFRSjBJUXdnSENBWUlBRnJRUUowYWlFTFFRQWhDU0FhUVFkUEJFQURRQ0FMUVFBZ0RCQVpJQTlxUVFBZ0RCQVpJQTlxUVFBZ0RCQVpJQTlxUVFBZ0RCQVpJQTlxUVFBZ0RCQVpJQTlxUVFBZ0RCQVpJQTlxUVFBZ0RCQVpJQTlxUVFBZ0RCQVpJQTlxSVFzZ0NVRUlhaUlKSUN0SERRQUxDMEVBSVFrZ0pFVU5Cd05BSUF0QkFDQU1FQmtnRDJvaEN5QUpRUUZxSWdrZ0pFY05BQXNNQndzZ0UwVU5CaUFRUVh4eElSUWdFRUVEY1NFU1FRQWhEU0FRUVFGclFRTkpJUmNNQlF0QkFDRUpJQkJCZkhFaURnUkFBMEFnQ3lBSlFRTjBhaUFLSUFsQkFuUnFLQUlBTmdJQUlBc2dDVUVCY2lJVVFRTjBhaUFLSUJSQkFuUnFLQUlBTmdJQUlBc2dDVUVDY2lJVVFRTjBhaUFLSUJSQkFuUnFLQUlBTmdJQUlBc2dDVUVEY2lJVVFRTjBhaUFLSUJSQkFuUnFLQUlBTmdJQUlBbEJCR29pQ1NBT1NRMEFDd3NnQ1NBUVR3MEZBa0FnRUNBSmF5SVVRUTlORFFBZ0xpQU5JQjlzSWcxcUlBbEJBM1JxSUJJZ0lHb2lEaUFRSUF4clFRSjBha2tFUUNBT0lBa2dER3RCQW5ScUlBMGdMV29nRUVFRGRHcEpEUUVMSUFvZ0NVRUNkR29oRFNBSi9SSDlEQUFBQUFBQkFBQUFBZ0FBQUFNQUFBRDlyZ0VoTUNBSklCUkJmSEVpREdvaENVRUFJUTREUUNBTElEQkJBLzJyQVNJeC9Sc0FhaUFOSUE1QkFuUnEvUUFDQUNJeS9Wb0NBQUFnQ3lBeC9Sc0JhaUF5L1ZvQ0FBRWdDeUF4L1JzQ2FpQXkvVm9DQUFJZ0N5QXgvUnNEYWlBeS9Wb0NBQU1nTVAwTUJBQUFBQVFBQUFBRUFBQUFCQUFBQVAydUFTRXdJQTVCQkdvaURpQU1SdzBBQ3lBTUlCUkdEUVlMUVFBaERDQUpJUTRnRUNBSmEwRURjU0lOQkVBRFFDQUxJQTVCQTNScUlBb2dEa0VDZEdvb0FnQTJBZ0FnRGtFQmFpRU9JQXhCQVdvaURDQU5SdzBBQ3dzZ0NTQVFhMEY4U3cwRkEwQWdDeUFPUVFOMGFpQUtJQTVCQW5ScUtBSUFOZ0lBSUFzZ0RrRUJhaUlKUVFOMGFpQUtJQWxCQW5ScUtBSUFOZ0lBSUFzZ0RrRUNhaUlKUVFOMGFpQUtJQWxCQW5ScUtBSUFOZ0lBSUFzZ0RrRURhaUlKUVFOMGFpQUtJQWxCQW5ScUtBSUFOZ0lBSUE1QkJHb2lEaUFRUncwQUN3d0ZDeUFUUlEwRVFRQWhDU0FhUVFOUEJFQURRQ0FMSUFvb0FnQTJBZ0FnQ3lBUGFpSU1JQW9nRVdvaURTZ0NBRFlDQUNBTUlBOXFJZ3dnRFNBUmFpSU5LQUlBTmdJQUlBd2dEMm9pRENBTklCRnFJZzBvQWdBMkFnQWdEU0FSYWlFS0lBd2dEMm9oQ3lBSlFRUnFJZ2tnRzBjTkFBc0xRUUFoQ1NBV1JRMEVBMEFnQ3lBS0tBSUFOZ0lBSUFvZ0VXb2hDaUFMSUE5cUlRc2dDVUVCYWlJSklCWkhEUUFMREFRTElCd2dEVUVDZEdvaEN5QVFRUVJIQkVBZ0UwVU5CQ0FRUVFKMElRbEJBQ0VPSUJwQkEwOEVRQU5BSUFzZ0NpQUpFQllnQ2lBUmFpSU5JQkZxSWdzZ0VXb2lFaUFSYWlFS0lBOXFJQTBnQ1JBV0lBOXFJQXNnQ1JBV0lBOXFJQklnQ1JBV0lBOXFJUXNnRGtFRWFpSU9JQnRIRFFBTEMwRUFJUTRnRmtVTkJBTkFJQXNnQ2lBSkVCWWdDaUFSYWlFS0lBOXFJUXNnRGtFQmFpSU9JQlpIRFFBTERBUUxJQk5GRFFOQkFDRUpJQnBCQTA4RVFBTkFJQXNnQ3YwQUFnRDlDd0lBSUFzZ0Qyb2lEQ0FLSUJGcUlnMzlBQUlBL1FzQ0FDQU1JQTlxSWd3Z0RTQVJhaUlOL1FBQ0FQMExBZ0FnRENBUGFpSU1JQTBnRVdvaURmMEFBZ0Q5Q3dJQUlBMGdFV29oQ2lBTUlBOXFJUXNnQ1VFRWFpSUpJQnRIRFFBTEMwRUFJUWtnRmtVTkF3TkFJQXNnQ3YwQUFnRDlDd0lBSUFvZ0VXb2hDaUFMSUE5cUlRc2dDVUVCYWlJSklCWkhEUUFMREFNTEEwQkJBQ0VKSUEwRVFBTkFJQXNnQ1VFRmRHb2dDaUFKUVFKMGFpZ0NBRFlDQUNBTElBbEJBWElpREVFRmRHb2dDaUFNUVFKMGFpZ0NBRFlDQUNBTElBbEJBbklpREVFRmRHb2dDaUFNUVFKMGFpZ0NBRFlDQUNBTElBbEJBM0lpREVFRmRHb2dDaUFNUVFKMGFpZ0NBRFlDQUNBSlFRUnFJZ2tnRFVrTkFBc0xBa0FnQ1NBUVR3MEFBa0FDUUNBUUlBbHJJaFJCQjAwTkFDQUxJQWxCQlhScUlDSWdFU0FTYkdwSkJFQWdDaUFKUVFKMGFpQVZJQThnRW14cVNRMEJDeUFKL1JIOURBQUFBQUFCQUFBQUFnQUFBQU1BQUFEOXJnRWhNQ0FKSUJSQmZIRWlGMm9oREVFQUlRNERRQ0FMSURCQkJmMnJBU0l4L1JzQWFpQUtJQWtnRG1wQkFuUnEvUUFDQUNJeS9Wb0NBQUFnQ3lBeC9Sc0JhaUF5L1ZvQ0FBRWdDeUF4L1JzQ2FpQXkvVm9DQUFJZ0N5QXgvUnNEYWlBeS9Wb0NBQU1nTVAwTUJBQUFBQVFBQUFBRUFBQUFCQUFBQVAydUFTRXdJQTVCQkdvaURpQVhSdzBBQ3lBVUlCZEhEUUVNQWdzZ0NTRU1DMEVBSVE0Z0VDQU1JZ2xyUVFOeEloUUVRQU5BSUFzZ0NVRUZkR29nQ2lBSlFRSjBhaWdDQURZQ0FDQUpRUUZxSVFrZ0RrRUJhaUlPSUJSSERRQUxDeUFNSUJCclFYeExEUUFEUUNBTElBbEJCWFJxSUFvZ0NVRUNkR29vQWdBMkFnQWdDeUFKUVFGcUlneEJCWFJxSUFvZ0RFRUNkR29vQWdBMkFnQWdDeUFKUVFKcUlneEJCWFJxSUFvZ0RFRUNkR29vQWdBMkFnQWdDeUFKUVFOcUlneEJCWFJxSUFvZ0RFRUNkR29vQWdBMkFnQWdDVUVFYWlJSklCQkhEUUFMQ3lBS0lCRnFJUW9nQ3lBUGFpRUxJQk1nRWtFQmFpSVNSdzBBQ3d3Q0N5QVNSUVJBUVFFZ0FDZ0NDQ0FBS0FJTWJFRUNkQkFYSWhKRkJFQkJBQThMSUFBb0FoZ2dBQ2dDRUNBZWJFRUNkR29nRFdvZ0VqWUNBQXNnRWlBbFFRSjBhaUFKUVFKMGFpRUxJQmdnQVdzaENRSkFJQVpCQVVjRVFDQWNJQVlnQ1d4QkFuUnFJUW9nRUVFQlJ3UkFBa0FnSXcwQUlCQkJCMDBOQUNBVFJRMEZJQ1lnQ1NBZmJHb2dFRUVGZEdvaElpQWdJQkJCQW5ScUlBeEJBblJySVM4Z0VFRjhjU0VVUVFBaERBTkFRUUFoQ1NBVUJFQURRQ0FMSUFsQkFuUnFJQW9nQ1VFRmRHb29BZ0EyQWdBZ0N5QUpRUUZ5SWcxQkFuUnFJQW9nRFVFRmRHb29BZ0EyQWdBZ0N5QUpRUUp5SWcxQkFuUnFJQW9nRFVFRmRHb29BZ0EyQWdBZ0N5QUpRUU55SWcxQkFuUnFJQW9nRFVFRmRHb29BZ0EyQWdBZ0NVRUVhaUlKSUJSSkRRQUxDd0pBSUFrZ0VFOE5BQUpBQWtBZ0VDQUpheUlYUVFkTkRRQWdDeUFKUVFKMGFpQWlJQXdnRDJ4cVNRUkFJQW9nQ1VFRmRHb2dFaUF2SUF3Z0VXeHFha2tOQVFzZ0NmMFIvUXdBQUFBQUFRQUFBQUlBQUFBREFBQUEvYTRCSVRBZ0NTQVhRWHh4SWhWcUlRMUJBQ0VPQTBBZ0N5QUpJQTVxUVFKMGFpQUtJREJCQmYyckFTSXgvUnNEYWlBS0lESDlHd0pxSUFvZ01mMGJBV29nQ2lBeC9Sc0FhdjFjQWdEOVZnSUFBZjFXQWdBQy9WWUNBQVA5Q3dJQUlERDlEQVFBQUFBRUFBQUFCQUFBQUFRQUFBRDlyZ0VoTUNBT1FRUnFJZzRnRlVjTkFBc2dGU0FYUncwQkRBSUxJQWtoRFF0QkFDRU9JQkFnRFNJSmEwRURjU0lYQkVBRFFDQUxJQWxCQW5ScUlBb2dDVUVGZEdvb0FnQTJBZ0FnQ1VFQmFpRUpJQTVCQVdvaURpQVhSdzBBQ3dzZ0RTQVFhMEY4U3cwQUEwQWdDeUFKUVFKMGFpQUtJQWxCQlhScUtBSUFOZ0lBSUFzZ0NVRUJhaUlOUVFKMGFpQUtJQTFCQlhScUtBSUFOZ0lBSUFzZ0NVRUNhaUlOUVFKMGFpQUtJQTFCQlhScUtBSUFOZ0lBSUFzZ0NVRURhaUlOUVFKMGFpQUtJQTFCQlhScUtBSUFOZ0lBSUFsQkJHb2lDU0FRUncwQUN3c2dDeUFSYWlFTElBb2dEMm9oQ2lBVElBeEJBV29pREVjTkFBc01CUXNnRTBVTkJDQVFRWHh4SVJRZ0VFRURjU0VTUVFBaERTQVFRUUZyUVFOSklSY01BZ3NnRTBVTkEwRUFJUWtnR2tFRFR3UkFBMEFnQ3lBS0tBSUFOZ0lBSUFzZ0VXb2lEQ0FLSUE5cUlnMG9BZ0EyQWdBZ0RDQVJhaUlNSUEwZ0Qyb2lEU2dDQURZQ0FDQU1JQkZxSWd3Z0RTQVBhaUlOS0FJQU5nSUFJQXdnRVdvaEN5QU5JQTlxSVFvZ0NVRUVhaUlKSUJ0SERRQUxDMEVBSVFrZ0ZrVU5Bd05BSUFzZ0NpZ0NBRFlDQUNBTElCRnFJUXNnQ2lBUGFpRUtJQWxCQVdvaUNTQVdSdzBBQ3d3REN5QWNJQWxCQW5ScUlRb2dFRUVFUndSQUlCTkZEUU1nRUVFQ2RDRUpRUUFoRGlBYVFRTlBCRUFEUUNBTElBb2dDUkFXSUFvZ0Qyb2lEU0FQYWlJTElBOXFJaElnRDJvaENpQVJhaUFOSUFrUUZpQVJhaUFMSUFrUUZpQVJhaUFTSUFrUUZpQVJhaUVMSUE1QkJHb2lEaUFiUncwQUN3dEJBQ0VPSUJaRkRRTURRQ0FMSUFvZ0NSQVdJQW9nRDJvaENpQVJhaUVMSUE1QkFXb2lEaUFXUncwQUN3d0RDeUFUUlEwQ1FRQWhDU0FhUVFOUEJFQURRQ0FMSUFyOUFBSUEvUXNDQUNBTElCRnFJZ3dnQ2lBUGFpSU4vUUFDQVAwTEFnQWdEQ0FSYWlJTUlBMGdEMm9pRGYwQUFnRDlDd0lBSUF3Z0VXb2lEQ0FOSUE5cUlnMzlBQUlBL1FzQ0FDQU5JQTlxSVFvZ0RDQVJhaUVMSUFsQkJHb2lDU0FiUncwQUN3dEJBQ0VKSUJaRkRRSURRQ0FMSUFyOUFBSUEvUXNDQUNBS0lBOXFJUW9nQ3lBUmFpRUxJQWxCQVdvaUNTQVdSdzBBQ3d3Q0N3TkFBa0FnRUVVTkFFRUFJUTVCQUNFSlFRQWhEQ0FYUlFSQUEwQWdDeUFKUVFKMGFpQUtJQVlnQ1d4QkFuUnFLQUlBTmdJQUlBc2dDVUVCY2lJVlFRSjBhaUFLSUFZZ0ZXeEJBblJxS0FJQU5nSUFJQXNnQ1VFQ2NpSVZRUUowYWlBS0lBWWdGV3hCQW5ScUtBSUFOZ0lBSUFzZ0NVRURjaUlWUVFKMGFpQUtJQVlnRld4QkFuUnFLQUlBTmdJQUlBbEJCR29oQ1NBTVFRUnFJZ3dnRkVjTkFBc0xJQkpGRFFBRFFDQUxJQWxCQW5ScUlBb2dCaUFKYkVFQ2RHb29BZ0EyQWdBZ0NVRUJhaUVKSUE1QkFXb2lEaUFTUncwQUN3c2dDeUFSYWlFTElBb2dEMm9oQ2lBVElBMUJBV29pRFVjTkFBc01BUXNEUUFKQUlCQkZEUUJCQUNFT1FRQWhDVUVBSVF3Z0YwVUVRQU5BSUFzZ0JpQUpiRUVDZEdvZ0NpQUpRUUowYWlnQ0FEWUNBQ0FMSUFsQkFYSWlGU0FHYkVFQ2RHb2dDaUFWUVFKMGFpZ0NBRFlDQUNBTElBbEJBbklpRlNBR2JFRUNkR29nQ2lBVlFRSjBhaWdDQURZQ0FDQUxJQWxCQTNJaUZTQUdiRUVDZEdvZ0NpQVZRUUowYWlnQ0FEWUNBQ0FKUVFScUlRa2dERUVFYWlJTUlCUkhEUUFMQ3lBU1JRMEFBMEFnQ3lBR0lBbHNRUUowYWlBS0lBbEJBblJxS0FJQU5nSUFJQWxCQVdvaENTQU9RUUZxSWc0Z0VrY05BQXNMSUFvZ0VXb2hDaUFMSUE5cUlRc2dEVUVCYWlJTklCTkhEUUFMQ3lBaFFRRnFJU0VnRUNBWWFpSVlJQU5KRFFBTElCNUJBV29oSGlBVElCMXFJaDBnQkVrTkFBc0xRUUVMR1FFQ2ZpQUFLUU1BSWdJZ0FTa0RBQ0lEVlNBQ0lBTlRhd3UwTmdVbmZ3OStBWHNCZlFGOEl3QkIwQUJySWc4a0FDQVBRWkQvQXpZQ0tDQUFLQUtFQVNBQUtBS0FBV3doR0FKL0FrQUNRQUpBSUFBb0FnZ2lDMEVJUndSQVFRQWdDMEdBQWtjTkJCb2dEMEhaL3dNMkFpZ01BUXNnQUMwQVhFRUJjUTBBSUJoQmZIRWhEU0FQUWMwQWFpRW9JQTlCekFCcUlTa2dEMEhJQUdvaE1FR1Evd01oQ3dKQUFrQURRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdBQ2dDVkNJTVJRMEFJQXdnQUNnQ1VDSU9UUTBBSUFBb0FsZ2dEa0VEZEdvcEF3QWhNaUFBSUE1QkFXbzJBbEFnQ1NBeUlBb1FNRVVFUUNBS1FRRkJteXBCQUJBVFFRQU1Ed3NnQ1NBQUtBSVFRUUlnQ2hBZFFRSkhCRUFnQ2tFQlFZTVRRUUFRRTBFQURBOExJQUFvQWhBZ0QwRW9ha0VDRUJVZ0R5Z0NLRUdRL3dOR0RRRWdDa0VCUWNRZlFRQVFFMEVBREE0TElBdEJrLzhEUmcwQkN3TkFJQWtwQXdnaU1sQUVma0lBQlNBeUlBa3BBemg5QzFBRVFDQUFRY0FBTmdJSURBSUxJQWtnQUNnQ0VFRUNJQW9RSFVFQ1J3UkFJQXBCQVVHREUwRUFFQk5CQUF3T0N5QUFLQUlRSUE5QkpHcEJBaEFWSUE4b0FpUkJBVTBFUUNBS1FRRkIreTVCQUJBVFFRQU1EZ3NDUUNBUEtBSW9RWUNCQWtjTkFDQUpLUU1JSWpKUUJINUNBQVVnTWlBSktRTTRmUXRDQUZJTkFDQUFRY0FBTmdJSURBSUxBa0FnQUNnQ0NDSVRRUkJ4UlFSQUlBOG9BaVFoQ3d3QkN5QVBLQUlrSVFzZ0FDZ0NHQ0lPUlEwQUlBdEJBbW9pRENBT1N3UkFJQXBCQVVHTndRQkJBQkFUUVFBTUR3c2dBQ0FPSUF4ck5nSVlDeUFQSUF0QkFtc2lFRFlDSkVHZ3dnRWhEQ0FQS0FJb0lRNERRQ0FNSWdzb0FnQWlHd1JBSUF0QkRHb2hEQ0FPSUJ0SERRRUxDeUFMS0FJRUlCTnhSUVJBSUFwQkFVSHdLVUVBRUJOQkFBd09Dd0pBSUFBb0FoUWdFRThFUUNBQUtBSVFJUXdNQVFzZ0NTa0RDQ0l5VUFSK1FnQUZJRElnQ1NrRE9IMExJQkN0VXdSQUlBcEJBVUdBTFVFQUVCTkJBQXdQQ3lBQUtBSVFJQThvQWlRUUd5SU1SUVJBSUFBb0FoQVFGQ0FBUWdBM0F4QWdDa0VCUWNnbVFRQVFFMEVBREE4TElBQWdERFlDRUNBQUlBOG9BaVFpRURZQ0ZBc2dDU0FNSUJBZ0NoQWRJZ3dnRHlnQ0pFY0VRQ0FLUVFGQmd4TkJBQkFUUVFBTURnc2dDeWdDQ0NJTFJRUkFJQXBCQVVHbzJ3QkJBQkFUUVFBTURnc2dBQ0FBS0FJUUlBd2dDaUFMRVFFQVJRUkFJQThnRHlnQ0tEWUNJQ0FLUVFGQjR1d0FJQTlCSUdvUUUwRUFEQTRMSUFrcEF6Z2hNaUFQS0FJa0lSSWdBQ2dDNEFFaUV5Z0NLQ0lRSUFBb0F1UUJJZ3hCS0d3aURtb2lGU2dDRkNJZVFRRnFJaHdnRlNnQ0hDSUxTd1JBSUJVQ2Z5QUxzME1BQU1oQ2tpSkNRd0FBZ0U5ZElFSkRBQUFBQUdCeEJFQWdRcWtNQVF0QkFBc2lDellDSENBVktBSVlJQXRCR0d3UUd5RUxJQk1vQWlnaUVDQU9haUVWSUF0RkRRTWdGU0FMTmdJWUlCVW9BaFFpSGtFQmFpRWNDeUFPSUJCcUloTW9BaGdnSGtFWWJHb2lDeUFTUVFScU5nSVFJQXNnTXFjZ0VtdEJCR3NpRHF3M0F3Z2dDeUFiT3dFQUlCTWdIRFlDRkFKQUlCdEJrUDhEUncwQUFrQWdFeWdDRUNJTVJRMEFJQk1vQWd3aUN5QVRLQUlFVHcwQUlBd2dDMEVZYkdvZ0RxMDNBd0FMSUFrcEF6aW5JQThvQWlSclFRUnJyU0l5SUFBcEF6QlhEUUFnQUNBeU53TXdDeUFBTFFCY1FRUnhCRUFnQ1NBQU5RSVlJQW9nQ1NnQ0tCRUlBQ0FBTlFJWVVnUkFJQXBCQVVHREUwRUFFQk5CQUF3UEN5QVBRWlAvQXpZQ0tBd0NDeUFKSUFBb0FoQkJBaUFLRUIxQkFrY0VRQ0FLUVFGQmd4TkJBQkFUUVFBTURnc2dBQ2dDRUNBUFFTaHFRUUlRRlNBUEtBSW9RWlAvQTBjTkFBc0xBa0FnQ1NrRENDSXlVQVIrUWdBRklESWdDU2tET0gwTFVBUkFJQUFvQWdoQndBQkdEUUVMSUFBdEFGd2lDMEVFY1VVRVFDQUFLQUxrQVVHTUxHd2hEQ0FBS0FLMEFRSkFBa0FnQUNnQ09BUkFJQWtwQXdnaU1sQUVma0lBQlNBeUlBa3BBemg5QzZjaEVBd0JDeUFBS0FJWUloQkJBa2tOQVFzZ0FDQVFRUUpySWhBMkFoZ0xJQXhxSVJZZ0VFVU5BeUFKS1FNSUlqSlFCSDVDQUFVZ01pQUpLUU00ZlFzZ0VLMVRCRUFnQUNnQzBBRUVRQ0FLUVFGQnJTMUJBQkFUUVFBTUR3c2dDa0VDUWEwdFFRQVFFd3NnQUNnQ0dDSU9RWDVQQkVBZ0NrRUJRYU1MUVFBUUUwRUFEQTRMQWtBZ0ZpZ0MzQ3NpREFSQUlCWW9BdUFySWd0QmZTQU9hMHNFUUNBS1FRRkJsZ2xCQUJBVFFRQU1FQXNnRENBTElBNXFRUUpxRUJzaUN3UkFJQllnQ3pZQzNDc01CZ3NnRmlnQzNDc1FGQ0FXUVFBMkF0d3JEQUVMSUJZZ0RrRUNhaEFZSWdzMkF0d3JJQXNOQkFzZ0NrRUJRZnN2UVFBUUUwRUFEQTBMSUFCQkNEWUNDQ0FBSUF0QitnRnhPZ0JjREFNTElBOG9BaWdoQ3d3RUN5QVZLQUlZRUJRZ0V5Z0NLQ0FNUVNoc2FpSUFRUUEyQWh3Z0FFSUFOd0lVSUFwQkFVSHlIVUVBRUJOQkFBd0tDeUFBS0FMZ0FTSWJLQUlvSWhVZ0FDZ0M1QUVpRTBFb2JDSVNhaUlNS0FJUUlBd29BZ3hCR0d4cUlnc2dDU2tET0NJelFnSjlJakkzQXdnZ0N5QXpJQUExQWhoOE53TVFJQUFvQWhnaERnSkFJQXdvQWhRaUhrRUJhaUljSUF3b0Fod2lDMDBFUUNBTUtBSVlJUXdNQVFzZ0RBSi9JQXV6UXdBQXlFS1NJa0pEQUFDQVQxMGdRa01BQUFBQVlIRUVRQ0JDcVF3QkMwRUFDeUlMTmdJY0lBd29BaGdnQzBFWWJCQWJJUXdnR3lnQ0tDSVZJQkpxSVFzZ0RFVU5CU0FMSUF3MkFoZ2dDeWdDRkNJZVFRRnFJUndMSUF3Z0hrRVliR29pQ3lBT1FRSnFOZ0lRSUFzZ01zUTNBd2dnQzBHVC93TTdBUUFnRWlBVmFpQWNOZ0lVSUFBQ2Z5QVFCRUJCQ0NBSklCWW9BdHdySUJZb0F1QXJhaUFBS0FJWUlBb1FIU0lRSUFBb0FoaEdEUUVhUWNBQUlCQkJmMGNOQVJvZ0NrRUJRWU1UUVFBUUUwRUFEQXNMUVFBaEVFSEFBRUVJSUFBb0FoZ2JDellDQ0NBV0lCWW9BdUFySUJCcU5nTGdLd0pBSUFBdEFGeEJBWEVOQUNBQUtBSXNJZ3RCQUVnTkFDQUFLQUxrQVNJTUlBdEhEUUFnQUNnQ1RBMEFJQWtvQWh4QkFrWU5BQ0FBS0FLMEFTQU1RWXdzYkdvaUN5Z0MyQ3NpRGlBQUtBTGdBU2dDS0NBTVFTaHNhaUlNS0FJRVJ3MEFJQTRnQ3lnQzFDdEJBV29pQzAwTkFBSkFJQXdvQWhBZ0MwRVliR29wQXdBaU1pQUpLUU00VVEwQUlBa2dNaUFLRURBTkFDQUtRUUZCbXlwQkFCQVRRUUFNQ3dzZ0NTQUFLQUlRUVFJZ0NoQWRRUUpIQkVBZ0NrRUJRWU1UUVFBUUUwRUFEQXNMSUFBb0FoQWdEMEVvYWtFQ0VCVWdEeWdDS0VHUS93TkdEUUlnQ2tFQlFjUWZRUUFRRTBFQURBb0xJQUF0QUZ3aUMwRUpjVUVCUncwQUlBQWdDMEVJY2pvQVhDQUFLQUswQVNBQUtBTGtBU0lPUVl3c2JHb29BdGdyUVFGR0RRQWdDU2dDSEVFQ1JnMEFJQWtwQXpnaU1rSi9VUTBBQWtBRFFFRUJJUXdnQ1NBUFFjWUFhaUlMUVFJZ0NoQWRRUUpIRFFFZ0N5QVBRVUJyUVFJUUZTQVBLQUpBUVpEL0EwY05BVUdERXlFUUlBa2dDMEVDSUFvUUhVRUNSdzBKSUFzZ0QwRThha0VDRUJVZ0R5Z0NQRUVLUndSQVFmc3VJUkFNQ2dzZ0QwRUlOZ0k4SUFrZ0QwSEdBR3BCQ0NBS0VCMGlDeUFQS0FJOFJ3MEpJQXRCQ0VjRVFFR3FIeUVRREFvTElBOUJ4Z0JxSUE5Qk9HcEJBaEFWSURBZ0QwRTBha0VFRUJVZ0tTQVBRVEJxUVFFUUZTQW9JQTlCTEdwQkFSQVZJQTRnRHlnQ09FY0VRQ0FQS0FJMElndEJEa2tOQWlBUElBdEJER3NpQ3pZQ05DQUpJQXV0SUFvZ0NTZ0NLQkVJQUNBUE5RSTBVUTBCREFJTEN5QVBLQUl3SUE4b0FpeEhJUXdMSUFrZ01pQUtJQWtvQWl3UkRBQkZEUWdnREEwQUlBQWdBQzBBWEVIdUFYRkJFSEk2QUZ3Q1FDQVlSUTBBSUFBb0FyUUJJUlpCQUNFTElCaEJCRThFUUFOQUlCWWdDMEdNTEd4cUloNG9BdGdySWh6OUVTQVdJQXRCQVhKQmpDeHNhaUliS0FMWUt5SVYvUndCSUJZZ0MwRUNja0dNTEd4cUloSW9BdGdySWhQOUhBSWdGaUFMUVFOeVFZd3NiR29pRGlnQzJDc2lEUDBjQS8wTUFBQUFBQUFBQUFBQUFBQUFBQUFBQVAwNElrSDlHd0JCQVhFRVFDQWVRZGdyYWlBY1FRRnFOZ0lBQ3lCQi9Sc0JRUUZ4QkVBZ0cwSFlLMm9nRlVFQmFqWUNBQXNnUWYwYkFrRUJjUVJBSUJKQjJDdHFJQk5CQVdvMkFnQUxJRUg5R3dOQkFYRUVRQ0FPUWRncmFpQU1RUUZxTmdJQUN5QUxRUVJxSWdzZ0RVY05BQXNnR0NBTklndEdEUUVMQTBBZ0ZpQUxRWXdzYkdvaURpZ0MyQ3NpREFSQUlBNUIyQ3RxSUF4QkFXbzJBZ0FMSUF0QkFXb2lDeUFZUncwQUN3c2dDa0VDUWFiR0FFRUFFQk1MSUFBdEFGeEJBWEVOQUNBSklBQW9BaEJCQWlBS0VCMUJBa2NFUUFKQUlBQW9BdVFCUVFGcUlCaEhEUUFnR0VVTkFDQUFLQUswQVNFTlFRQWhDd05BSUEwZ0MwR01MR3hxSWdrb0F0UXJSUVJBSUFrb0F0Z3JSUTBJQ3lBTFFRRnFJZ3NnR0VjTkFBc0xJQXBCQVVHREUwRUFFQk5CQUF3SkN5QUFLQUlRSUE5QktHcEJBaEFWQ3lBUEtBSW9JUXNnQUMwQVhFRUJjUTBBSUF0QjJmOERSdzBCQ3dzZ0MwSFovd05IRFFJZ0FDZ0NDRUdBQWtZTkFpQUFRWUFDTmdJSUlBQkJBRFlDNUFFTUFnc2dDeWdDR0JBVUlCc29BaWdnRTBFb2JHb2lBRUVBTmdJY0lBQkNBRGNDRkNBS1FRRkI4aDFCQUJBVFFRQU1CQXNnRHlBTE5nSVFJQXBCQkVIWDFRQWdEMEVRYWhBVElBQWdDellDNUFFZ0QwSFovd00yQWlnZ0FFR0FBallDQ0FzZ0FDZ0M1QUVoQ3lBQUtBSzBBU0VKQWtBQ1FDQUFMUUJjUVFGeERRQUNRQUpBSUFzZ0dFOE5BQ0FKSUF0QmpDeHNhaUVRQTBBZ0VDZ0MzQ3NOQVNBQUlBdEJBV29pQ3pZQzVBRWdFRUdNTEdvaEVDQUxJQmhIRFFBTERBRUxJQXNnR0VjTkFRc2dDRUVBTmdJQURBRUxBa0FDUUNBS1FRRWdDU0FMUVl3c2JHb2lFaWdDdENnRWYwR1FOUVVnRWkwQWlDeEJBbkZGRFFJQ1FDQVNLQUtvS0NJT1JRUkFRUUFoREF3QkN5QVNLQUtzS0NFSlFRQWhERUVBSVFzZ0RrRUVUd1JBSUE1QmZIRWhDLzBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0ZCUVFBaEVBTkFJQWtnRUVFRGRHb2lEVUVjYWlBTlFSUnFJQTFCREdvZ0RmMWNBZ1Q5VmdJQUFmMVdBZ0FDL1ZZQ0FBTWdRZjJ1QVNGQklCQkJCR29pRUNBTFJ3MEFDeUJCSUVFZ1FmME5DQWtLQ3d3TkRnOEFBUUlEQUFFQ0EvMnVBU0pCSUVFZ1FmME5CQVVHQndBQkFnTUFBUUlEQUFFQ0EvMnVBZjBiQUNFTUlBc2dEa1lOQVFzRFFDQUpJQXRCQTNScUtBSUVJQXhxSVF3Z0MwRUJhaUlMSUE1SERRQUxDeUFTSUF3UUdDSUpOZ0swS0NBSkRRRkJoQjhMUVFBUUV5QUtRUUZCMWo1QkFCQVRRUUFNQlFzZ0VpQU1OZ0s4S0NBU0tBS3NLQ0VKSUJJb0FxZ29JZ3dFUUVFQUlSQkJBQ0VMQTBBZ0NTQUxRUU4wSWhOcUlnNG9BZ0FpRFFSQUlCSW9BclFvSUJCcUlBMGdEaWdDQkJBV0dpQVNLQUtzS0NBVGFpSUpLQUlFSUFrb0FnQVFGQ0FTS0FLc0tDSUpJQk5xUWdBM0FnQWdFR29oRUNBU0tBS29LQ0VNQ3lBTFFRRnFJZ3NnREVrTkFBc0xJQkpCQURZQ3FDZ2dDUkFVSUJKQkFEWUNyQ2dnRWlBU0tBSzBLRFlDc0NnZ0VpQVNLQUs4S0RZQ3VDZ0xBbjhnQUNnQzZBRWlDeWdDSENJaUtBSk1JQUFvQXVRQklnbEJqQ3hzYWlnQzBDc2hHaUFMS0FJWUloTW9BaGdoSXlBTEtBSVVLQUlBSWgwZ0lpZ0NCQ0FpS0FJTUlnc2dDU0FKSUNJb0FoZ2lDVzRpRFNBSmJHdHNhaUlPSUJNb0FnQWlDU0FKSUE1Skd5SU1OZ0lBSUIxQmZ5QUxJQTVxSWdrZ0NTQU9TUnNpQ3lBVEtBSUlJZ2tnQ1NBTFN4c2lDVFlDQ0FKQUlBa2dERW9nREVFQVRuRkZCRUFnQ2tFQlFmVXpRUUFRRXd3QkN5QWRLQUlVSVJFZ0hTQWlLQUlJSUEwZ0lpZ0NFQ0lMYkdvaURDQVRLQUlFSWdrZ0NTQU1TUnNpRFRZQ0JDQWRRWDhnQ3lBTWFpSUpJQWtnREVrYklnc2dFeWdDRENJSklBa2dDMHNiSWdrMkFnd2dDU0FOU2lBTlFRQk9jVVVFUUNBS1FRRkJ6ek5CQUJBVERBRUxBa0FnR2lnQ0JBUkFJQjBvQWhBTkFVRUJEQU1MSUFwQkFVSEpLVUVBRUJNTUFRc0NRQUpBQTBBZ0kwRUFOZ0lrSUJFZ0l6UUNBQ0kyUWdGOUlqSWdIVFFDQUh3Z05uOCtBZ0FnRVNBak5BSUVJalZDQVgwaU15QWROQUlFZkNBMWZ6NENCQ0FSSURJZ0hUUUNDSHdnTm44K0FnZ2dIVFFDRENFeUlCRWdNVFlDRUNBUklESWdNM3dnTlg4K0Fnd2dFU0FhS0FJRUlnczJBaFFnRVVFQklBc2dJaWdDVUNJSmF5QUpJQXRMR3pZQ0dDQVJLQUkwRUJRZ0VVRUFOZ0pFSUJIOURBQUFBQUFBQUFBQUFBQUFBQUFBQUFEOUN3STBJQXRCbUFGc0lRMENRQ0FSS0FJY0lnbEZCRUFnRVNBTkVCZ2lDVFlDSENBSlJRMEZJQkVnRFRZQ0lDQUpRUUFnRFJBWkdnd0JDeUFOSUJFb0FpQk5EUUFnQ1NBTkVCc2lDMFVFUUNBS1FRRkI3UmRCQUJBVElCRW9BaHdRRkNBUlFnQTNBaHdNQlFzZ0VTQUxOZ0ljSUFzZ0VTZ0NJQ0lKYWtFQUlBMGdDV3NRR1JvZ0VTQU5OZ0lnQ3lBUktBSVVJZ3NFUUNBYVFiQUhhaUV3SUJwQnJBWnFJUjRnR2tFY2FpRXFJQkVvQWh3aEdVRUFJU1FEUUNBWlFuOGdDMEVCYXlJSnJTSTBoa0ovaFNJeklCRTBBZ0I4SURTSHB5SVZOZ0lBSUJrZ015QVJOQUlFZkNBMGg2Y2lFallDQkNBWklETWdFVFFDQ0h3Z05JY2lNcWNpRXpZQ0NDQVpJRE1nRVRRQ0RId2dOSWNpTmFjaURqWUNEQ0F5eEVJQklCNGdKRUVDZENJTmFpZ0NBQ0lmclNJeWhueENBWDBnTW9lbklCOTBJZ3hCQUVnTkJDQTF4RUovSUEwZ01Hb29BZ0FpSUswaU1vWkNmNFY4SURLSHB5QWdkQ0lOUVFCSURRUWdHU0FOUVg4Z0lIUWdFbkVpSzJzZ0lIVkJBQ0FPSUJKSEd5SU5OZ0lVSUJrZ0RFRi9JQjkwSUJWeElpeHJJQjkxUVFBZ0V5QVZSeHNpRERZQ0VBSkFJQXhGRFFBZ0RLMGdEYTErUWlDSVVBMEFEQVFMSUF3Z0RXd2lMVUhuekprelR3MERJQzFCS0d3aElTQVpJQ1FFZnlBZ1FRRnJJU0FnSDBFQmF5RWZJQ3VzUWdGOFFnR0lweUVySUN5c1FnRjhRZ0dJcHlFc1FRTUZRUUVMTmdJWUlCbEJIR29oRkNBclFRRWdJSFJxSVJ3Z0xFRUJJQjkwYWlFYlFnRWdDNjBpTjRZaE9FSi9JQm9vQWd3aUN5QWdJQXNnSUVrYklpV3RJajJHUW4rRklUNUNmeUFhS0FJSUlnc2dIeUFMSUI5Skd5SW1yU0kvaGtKL2hTRkFRUUFoRUFOQUFuNGdKRVVFUUNBeklCRTBBZ1I4SURTSElUa2dNeUFSTkFJQWZDQTBoeUU2UVFBaEN5QXpJakloT3lBMERBRUxJRGdnRUVFQmFpSUxRUUYyclNBMGhrSi9oWHdpT3lBUk5BSUVmQ0EzaHlFNUlEZ2dDMEVCY2EwZ05JWkNmNFY4SWpJZ0VUUUNBSHdnTjRjaE9pQTNDeUU4SUJFMEFnZ2hOaUFSTkFJTUlUVWdGQ0E1UGdJRUlCUWdPajRDQUNBVUlBczJBaEFnRkNBMUlEdDhJRHlIUGdJTUlCUWdNaUEyZkNBOGh6NENDRUVBSVEwQ1FDQWFLQUlVUlEwQUlBdEZEUUJCQWtFQklBdEJBMFliSVEwTFJBQUFBQUFBQVBBL0lVTUNRQ0FqS0FJWUlBMXFJQ29vQWdBaURXc2lDMEdBQ0U0RVFFUUFBQUFBQUFEZ2Z5RkRJQXRCL3c5SkJFQWdDMEgvQjJzaEN3d0NDMFFBQUFBQUFBRHdmeUZEUWYwWElBc2dDMEg5RjA4YlFmNFBheUVMREFFTElBdEJnWGhLRFFCRUFBQUFBQUFBWUFNaFF5QUxRYmh3U3dSQUlBdEJ5UWRxSVFzTUFRdEVBQUFBQUFBQUFBQWhRMEh3YUNBTElBdEI4R2hORzBHU0Qyb2hDd3NnRkNBcUtBSUV0MFFBQUFBQUFBQkFQNkpFQUFBQUFBQUE4RCtnSUVNZ0MwSC9CMnF0UWpTR3Y2S2l0amdDSUNBVUlBMGdHaWdDcEFacVFRRnJOZ0ljSUJRb0FoUWhDd0pBQWtBQ1FDQXRSUTBBSUFzTkFDQVVJQ0VRR0NJTE5nSVVJQXRGQkVBZ0NrRUJRWUVXUVFBUUV3d0tDeUFMUVFBZ0lSQVpHaUFVSUNFMkFoZ01BUXNnSVNBVUtBSVlTd1JBSUFzZ0lSQWJJZzFGQkVBZ0NrRUJRWUVXUVFBUUV5QVVLQUlVRUJRZ0ZFSUFOd0lVREFvTElCUWdEVFlDRkNBTklCUW9BaGdpQzJwQkFDQWhJQXRyRUJrYUlCUWdJVFlDR0FzZ0xVVU5BUXNnRkNnQ0ZDRUxRUUFoTGdOQUlBc2dMaUF1SUJrb0FoQWlEVzRpRXlBTmJHc2dIM1FpRGlBc2FpSU1JQlFvQWdBaURTQU1JQTFLR3lJVk5nSUFJQXNnRXlBZ2RDSVNJQ3RxSWd3Z0ZDZ0NCQ0lOSUF3Z0RVb2JJaE0yQWdRZ0N5QU9JQnRxSWd3Z0ZDZ0NDQ0lOSUF3Z0RVZ2JJZzQyQWdnZ0N5QVNJQnhxSWd3Z0ZDZ0NEQ0lOSUF3Z0RVZ2JJZzAyQWd3Z0N5QkFJQTZzZkNBL2g2Y2dGU0FtZFNJb2F5QW1kQ0FtZFNJTU5nSVFJQXNnUGlBTnJId2dQWWVuSUJNZ0pYVWlLV3NnSlhRZ0pYVWlEVFlDRkNBTUlBMXNJaSt0UXNRQWZrSWdpRUlBVWdSQUlBcEJBVUhTRmtFQUVCTU1DUXNnTDBIRUFHd2hEZ0pBQWtBQ1FDQUxLQUlZSWcwTkFDQXZSUTBBSUFzZ0RoQVlJZzAyQWhnZ0RVVU5DeUFOUVFBZ0RoQVpHZ3dCQ3lBT0lBc29BaHhORFFFZ0RTQU9FQnNpREVVRVFDQUxLQUlZRUJRZ0MwSUFOd0lZSUFwQkFVSFFFMEVBRUJNTUN3c2dDeUFNTmdJWUlBd2dDeWdDSENJTmFrRUFJQTRnRFdzUUdSb0xJQXNnRGpZQ0hBc2dDeWdDRkNFT0lBc29BaEFoRENBTEFuOGdDeWdDSUNJTlJRUkFJQXdnRGlBS0VHd01BUXNnRFNBTUlBNGdDaEJxQ3pZQ0lDQUxLQUlVSVE0Z0N5Z0NFQ0VNSUFzQ2Z5QUxLQUlrSWcxRkJFQWdEQ0FPSUFvUWJBd0JDeUFOSUF3Z0RpQUtFR29MTmdJa0lDOEVRQ0FwUVFGcUlSSWdLRUVCYWlFVFFRQWhKd05BSUNjZ0N5Z0NFQ0lPYmlFWUFrQWdDeWdDR0NBblFjUUFiR29pRnlnQ0FDSVZCRUFnRnlnQ09DRU1JQmNvQWdRaERTQVhLQUl3SVJZZ0Z5Z0NQQkFVSUJmOURBQUFBQUFBQUFBQUFBQUFBQUFBQUFEOUN3SW9JQmRCUUd0QkFEWUNBQ0FYUWdBM0FqZ2dGLzBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBUDBMQWhnZ0YvME1BQUFBQUFBQUFBQUFBQUFBQUFBQUFQMExBZ2dnRnlBVk5nSUFJQmNnRmpZQ01DQVdCRUFnRlVFQUlCWkJHR3dRR1JvTElCY2dERFlDT0NBWElBMDJBZ1FNQVFzZ0YwRUtRUmdRRnlJTk5nSUFJQTFGRFFzZ0YwRUtOZ0l3Q3lBWElDY2dEaUFZYkdzaURpQW9haUFtZENJTUlBc29BZ0FpRFNBTUlBMUtHellDQ0NBWElCZ2dLV29nSlhRaURDQUxLQUlFSWcwZ0RDQU5TaHMyQWd3Z0Z5QU9JQk5xSUNaMElnd2dDeWdDQ0NJTklBd2dEVWdiTmdJUUlCY2dFaUFZYWlBbGRDSU1JQXNvQWd3aURTQU1JQTFJR3pZQ0ZDQW5RUUZxSWljZ0wwY05BQXNMSUF0QktHb2hDeUF1UVFGcUlpNGdMVWNOQUFzTElDcEJDR29oS2lBVVFTUnFJUlFnRUVFQmFpSVFJQmtvQWhoSkRRQUxJQmxCbUFGcUlSa2dDU0VMSUNSQkFXb2lKQ0FSS0FJVVNRMEFDd3NnSTBFMGFpRWpJQkZCekFCcUlSRWdHa0c0Q0dvaEdpQXhRUUZxSWpFZ0hTZ0NFRWtOQUF0QkFRd0RDeUFLUVFGQmdSZEJBQkFUREFFTElBcEJBVUdnRWtFQUVCTUxRUUFMUlFSQUlBcEJBVUd2SEVFQUVCTkJBQXdFQ3lBQUtBTGtBU0VKSUE4Z0FDZ0NnQUVnQUNnQ2hBRnNOZ0lFSUE4Z0NVRUJhallDQUNBS1FRUkJqTndBSUE4UUV5QUJJQUFvQXVRQk5nSUFJQWhCQVRZQ0FDQUNCRUFnQWlBQUtBTG9BVUVBRUYwaUFUWUNBRUVBSUFGQmYwWU5CQm9MSUFNZ0FDZ0M2QUVvQWhRb0FnQWlBU2dDQURZQ0FDQUVJQUVvQWdRMkFnQWdCU0FCS0FJSU5nSUFJQVlnQVNnQ0REWUNBQ0FISUFFb0FoQTJBZ0FnQUNBQUtBSUlRWUFCY2pZQ0NBdEJBUXdDQ3lBS1FRRWdFRUVBRUJNTElBcEJBVUhSSEVFQUVCTkJBQXNnRDBIUUFHb2tBQXZ1RUFJTWZ3SitBa0FnQUNnQ0lDSUNEUUFDUUNBQUtBSVFJZ2xCQlVvRVFDQUpJUUlNQVFzQ1FBSkFJQUFvQWhRaUJrRUZUZ1JBSUFBb0FnQWlBU2dDQUNFQ0lBQWdBVUVFYWpZQ0FDQUdRUVJySVFjTUFRc2dCa0VBVEFSQVFYOGhBZ3dDQ3lBQUtBSUFJUUVDZnlBR1FRRkdCRUJCZnlFRlFRQU1BUXRCZnlFRklBWkJBV3NpQkVFQmNRSkFJQVpCQWtZRVFFRUFJUUlnQmlFRURBRUxJQVJCZm5FaEMwRUFJUUlnQVNFRElBWWhCQU5BSUFBZ0EwRUJhallDQUNBRExRQUFJUXdnQUNBRFFRSnFJZ0UyQWdBZ0FDQUVRUUZyTmdJVUlBTXRBQUVoQXlBQUlBUkJBbXNpQkRZQ0ZDQUZRZjhCSUFKMFFYOXpjU0FNSUFKMGNrR0EvZ01nQW5SQmYzTnhJQU1nQWtFSWNuUnlJUVVnQWtFUWFpRUNJQUVoQXlBSVFRSnFJZ2dnQzBjTkFBc0xCRUFnQUNBQlFRRnFJZ00yQWdBZ0FTMEFBQ0VCSUFBZ0JFRUJhellDRkNBRlFmOEJJQUowUVg5emNTQUJJQUowY2lFRklBTWhBUXNnQmtFRGRFRUlhd3NoQWlBQUlBRkJBV28yQWdBZ0JVSC9BU0FDZEVGL2MzRWdBUzBBQUVFUGNpQUNkSEloQWdzZ0FDQUhOZ0lVQ3lBQUtBSVlJUUVnQUNBQ1FSaDJJZ1JCL3dGR05nSVlJQUFnQ1NBQ1FSQjJRZjhCY1NJRFFmOEJSaUlHSUFKQkNIWkIvd0Z4SWdWQi93RkdJZ2NnQVNBQ1FmOEJjU0lJUWY4QlJpSUthbXBxSWdGclFTQnFJZ0kyQWhBZ0FDQUFLUU1JSUFoQkIwRUlJQW9iZENBRmNrRUhRUWdnQnh0MElBTnlRUWRCQ0NBR0czUWdCSEt0SUFFZ0NXdEJJR3F0aG9RM0F3Z2dBa0VHVGcwQVFRQWhBZ3dCQ3lBQUtBSWNJZ0ZCQW5SQjRLRUJhaWdDQUNFREFuNGdBQ2tEQ0NJTlFnQlRCRUJCRENBQlFRRnFJQUZCQzA0YklRUWdBa0VCYXlFQ1FYOGdBM1JCZjNOQkFYUWhBVUlCREFFTElBRkJBV3RCQUNBQlFRRktHeUVFSUExQlB5QURhNjJJcDBGL0lBTjBRWDl6Y1VFQmRFRUJjaUVCSUFJZ0EwRUJhaUlEYXlFQ0lBT3RDeUVPSUFBZ0FqWUNFQ0FBSUFRMkFod2dBQ0FOSUE2R053TUlJQUFnQWF3Z0FDa0RLRUpBZzRRM0F5Z2dBa0VHU0FSQVFRRWhBZ3dCQ3lBQUtBSWNJZ0ZCQW5SQjRLRUJhaWdDQUNFREFuNGdBQ2tEQ0NJTlFnQlRCRUJCRENBQlFRRnFJQUZCQzA0YklRUWdBa0VCYXlFQ1FYOGdBM1JCZjNOQkFYUWhBVUlCREFFTElBRkJBV3RCQUNBQlFRRktHeUVFSUExQlB5QURhNjJJcDBGL0lBTjBRWDl6Y1VFQmRFRUJjaUVCSUFJZ0EwRUJhaUlEYXlFQ0lBT3RDeUVPSUFBZ0FqWUNFQ0FBSUFRMkFod2dBQ0FOSUE2R053TUlJQUFnQUNrREtFTC9RSU1nQWF4Q0I0YUVOd01vSUFKQkJrZ0VRRUVDSVFJTUFRc2dBQ2dDSENJQlFRSjBRZUNoQVdvb0FnQWhBd0orSUFBcEF3Z2lEVUlBVXdSQVFRd2dBVUVCYWlBQlFRdE9HeUVFSUFKQkFXc2hBa0YvSUFOMFFYOXpRUUYwSVFGQ0FRd0JDeUFCUVFGclFRQWdBVUVCU2hzaEJDQU5RVDhnQTJ1dGlLZEJmeUFEZEVGL2MzRkJBWFJCQVhJaEFTQUNJQU5CQVdvaUEyc2hBaUFEclFzaERpQUFJQUkyQWhBZ0FDQUVOZ0ljSUFBZ0RTQU9oamNEQ0NBQUlBQXBBeWhDLy85QWd5QUJyRUlPaG9RM0F5Z2dBa0VHU0FSQVFRTWhBZ3dCQ3lBQUtBSWNJZ0ZCQW5SQjRLRUJhaWdDQUNFREFuNGdBQ2tEQ0NJTlFnQlRCRUJCRENBQlFRRnFJQUZCQzA0YklRUWdBa0VCYXlFQ1FYOGdBM1JCZjNOQkFYUWhBVUlCREFFTElBRkJBV3RCQUNBQlFRRktHeUVFSUExQlB5QURhNjJJcDBGL0lBTjBRWDl6Y1VFQmRFRUJjaUVCSUFJZ0EwRUJhaUlEYXlFQ0lBT3RDeUVPSUFBZ0FqWUNFQ0FBSUFRMkFod2dBQ0FOSUE2R053TUlJQUFnQUNrREtFTC8vLzlBZ3lBQnJFSVZob1EzQXlnZ0FrRUdTQVJBUVFRaEFnd0JDeUFBS0FJY0lnRkJBblJCNEtFQmFpZ0NBQ0VEQW40Z0FDa0RDQ0lOUWdCVEJFQkJEQ0FCUVFGcUlBRkJDMDRiSVFRZ0FrRUJheUVDUVg4Z0EzUkJmM05CQVhRaEFVSUJEQUVMSUFGQkFXdEJBQ0FCUVFGS0d5RUVJQTFCUHlBRGE2MklwMEYvSUFOMFFYOXpjVUVCZEVFQmNpRUJJQUlnQTBFQmFpSURheUVDSUFPdEN5RU9JQUFnQWpZQ0VDQUFJQVEyQWh3Z0FDQU5JQTZHTndNSUlBQWdBQ2tES0VMLy8vLy9RSU1nQWF4Q0hJYUVOd01vSUFKQkJrZ0VRRUVGSVFJTUFRc2dBQ2dDSENJQlFRSjBRZUNoQVdvb0FnQWhCQUovSUFBcEF3Z2lEVUlBVXdSQUlBSkJBV3NoQTBGL0lBUjBRWDl6UVFGMElRVkNBU0VPUVF3Z0FVRUJhaUFCUVF0T0d3d0JDeUFOUVQ4Z0JHdXRpS2RCZnlBRWRFRi9jM0ZCQVhSQkFYSWhCU0FDSUFSQkFXb2lCR3NoQXlBRXJTRU9JQUZCQVd0QkFDQUJRUUZLR3dzaEFTQUFJQU0yQWhBZ0FDQUJOZ0ljSUFBZ0RTQU9oamNEQ0NBQUlBQXBBeWhDLy8vLy8vOUFneUFGclVJamhvUTNBeWhCQmlFQ0lBTkJCa2dOQUNBQUtBSWNJZ0ZCQW5SQjRLRUJhaWdDQUNFRUFuOGdBQ2tEQ0NJTlFnQlRCRUFnQTBFQmF5RUNRWDhnQkhSQmYzTkJBWFFoQlVJQklRNUJEQ0FCUVFGcUlBRkJDMDRiREFFTElBMUJQeUFFYTYySXAwRi9JQVIwUVg5emNVRUJkRUVCY2lFRklBTWdCRUVCYWlJRWF5RUNJQVN0SVE0Z0FVRUJhMEVBSUFGQkFVb2JDeUVCSUFBZ0FqWUNFQ0FBSUFFMkFod2dBQ0FOSUE2R053TUlJQUFnQUNrREtFTC8vLy8vLy85QWd5QUZyVUlxaG9RM0F5Z2dBa0VHU0FSQVFRY2hBZ3dCQ3lBQUtBSWNJZ0ZCQW5SQjRLRUJhaWdDQUNFREFuNGdBQ2tEQ0NJTlFnQlRCRUJCRENBQlFRRnFJQUZCQzA0YklRUWdBa0VCYXlFQ1FYOGdBM1JCZjNOQkFYUWhBVUlCREFFTElBRkJBV3RCQUNBQlFRRktHeUVFSUExQlB5QURhNjJJcDBGL0lBTjBRWDl6Y1VFQmRFRUJjaUVCSUFJZ0EwRUJhaUlEYXlFQ0lBT3RDeUVPSUFBZ0FqWUNFQ0FBSUFRMkFod2dBQ0FOSUE2R053TUlJQUFnQUNrREtFTC8vLy8vLy8vL1FJTWdBYTFDTVlhRU53TW9RUWdoQWdzZ0FDQUNRUUZyTmdJZ0lBQWdBQ2tES0NJT1FnZUlOd01vSUE2blFmOEFjUXNpQVFGL0lBQUVRQ0FBS0FJTUlnRUVRQ0FCRUJRZ0FFRUFOZ0lNQ3lBQUVCUUxDNElCQWdGK0EzOENRQ0FBUW9DQWdJQVFWQVJBSUFBaEFnd0JDd05BSUFGQkFXc2lBU0FBUWdxQUlnSkM5Z0YrSUFCOHAwRXdjam9BQUNBQVF2Ly8vLytmQVZZZ0FpRUFEUUFMQ3lBQ1FnQlNCRUFnQXFjaEF3TkFJQUZCQVdzaUFTQURRUXB1SWdSQjlnRnNJQU5xUVRCeU9nQUFJQU5CQ1VzZ0JDRUREUUFMQ3lBQkMwOEJBWDhnQUVFQU5nSXdJQUFnQUNnQ0lEWUNKQ0FCSUFBb0FnQWdBQ2dDSEJFTEFDQUFLQUpFSVFKRkJFQWdBQ0FDUVFSeU5nSkVRUUFQQ3lBQUlBRTNBemdnQUNBQ1FYdHhOZ0pFUVFFTDN0NEJCSEIvQm5zSWZnRjlJd0JCRUdzaVRDUUFBa0FnQUMwQUNFR0FBWEZGRFFBZ0FTQUFLQUxrQVVjTkFDQUFLQUswQVNBQlFZd3NiR29pVFNnQzNDc2lGMFVFUUNCTkVEUU1BUXNnQUNnQzRBRWFJQUFvQXVnQklSc2dBQ2dDWkNJSFJRUkFJQUFvQW1BaEJ3c2dCeWdDQUNFR0lBY29BZ1FoQ3lBSEtBSUlJUWtnQnlnQ0RDRVBJQUFvQWp3aEJ5QUFLQUpBSVE0Z1RTZ0M0Q3NoQ0NNQVFSQnJJajhrQUNBYklBRTJBaVFnR3lnQ0hDZ0NUQ0VNSUJ0QkFUWUNRQ0FiSUE4MkFqd2dHeUFKTmdJNElCc2dDellDTkNBYklBWTJBakFnR3lBTUlBRkJqQ3hzYWpZQ0lDQWJLQUpFRUJSQkFDRUxJQnRCQURZQ1JBSkFJQWNFUUVFRUlCc29BaGdvQWhBUUZ5SUxSUVJBREFJTElBZEJCRThFUUNBSFFYeHhJUWxCQUNFQkEwQWdDeUFPSUNKQkFuUnFJZ1lvQWdCQkFuUnFRUUUyQWdBZ0N5QUdLQUlFUVFKMGFrRUJOZ0lBSUFzZ0JpZ0NDRUVDZEdwQkFUWUNBQ0FMSUFZb0FneEJBblJxUVFFMkFnQWdJa0VFYWlFaUlBRkJCR29pQVNBSlJ3MEFDd3NnQjBFRGNTSUJCRUFEUUNBTElBNGdJa0VDZEdvb0FnQkJBblJxUVFFMkFnQWdJa0VCYWlFaUlCbEJBV29pR1NBQlJ3MEFDd3NnR3lBTE5nSkVDd0pBQWtBZ0d5Z0NHQ0lHS0FJUUlnNUZEUUJCQUNFaUFrQURRQUpBSUFzRVFDQUxJQ0pCQW5ScUtBSUFSUTBCQ3lBR0tBSVlJQ0pCTkd4cUlnRTFBZ1FpZkVJQmZTS0FBU0FiTlFJOGZDQjhnQ0dCQVNBQk5RSUFJbjFDQVgwaWZpQWJOUUk0ZkNCOWdDR0NBU0NBQVNBYk5RSTBmQ0I4Z0NGOElCc29BaFFvQWdBb0FoUWdJa0hNQUd4cUlnRW9BaFFnQVNnQ0dHc2lCMEVmU3cwQUFrQWdmaUFiTlFJd2ZDQjlnS2NpQ1NBQktBSUFheUlQUVFBZ0NTQVBUeHNnQjNZTkFDQjhweUlKSUFFb0FnUnJJZzlCQUNBSklBOVBHeUFIZGcwQUlBRW9BZ2dpQ1NDQ0FhZHJJZzlCQUNBSklBOVBHeUFIZGcwQUlBRW9BZ3dpQVNDQkFhZHJJZ2xCQUNBQklBbFBHeUFIZGtVTkFRc2dHMEVBTmdKQURBSUxJQ0pCQVdvaUlpQU9SdzBBQ3lBYktBSkFSUTBBUVFBaEdRTkFJQnNvQWhRb0FnQW9BaFFnR1VITUFHeHFJZ0VvQWh3Z0FTZ0NHRUdZQVd4cUlnZEJsQUZyS0FJQUlRWWdCMEdNQVdzb0FnQWhDeUFIUVpnQmF5Z0NBQ0VPSUFkQmtBRnJLQUlBSVFrQ1FDQWJLQUpFSWdjRVFDQUhJQmxCQW5ScUtBSUFSUTBCQ3lBTElBWnJJUWNnQ1NBT2F5RU9Ba0FnQmlBTFJnMEFJQWV0SUE2dGZrSWdpRkFOQUVFQUlTSWdCVUVCUVlFWFFRQVFFd3dHQ3lBSElBNXNJZ2RCZ0lDQWdBUlBCRUJCQUNFaUlBVkJBVUdCRjBFQUVCTU1CZ3NnQVNBSFFRSjBJZ2MyQWl3Q1FBSkFBa0FnQVNnQ0pDSUdCRUFnQnlBQktBSXdUUTBFSUFFb0FpZ05BUXNnQVNBSEVCd2lCellDSkNBSFFRRWdBU2dDTENJSEcwVU5BU0FCUVFFMkFpZ2dBU0FITmdJd0RBTUxJQVlRRkNBQklBRW9BaXdRSENJSE5nSWtJQWNOQVNBQlFRQTJBakFnQVVJQU53SW9DMEVBSVNJZ0JVRUJRWUVYUVFBUUV3d0dDeUFCUVFFMkFpZ2dBU0FCS0FJc05nSXdDeUFaUVFGcUloa2dHeWdDR0NJR0tBSVFTUTBBQ3d3QkN5QUdLQUlZSVJrZ0d5Z0NGQ2dDQUNnQ0ZDRU5RUUFoQVFOQUFrQWdDd1JBSUFzZ0FVRUNkR29vQWdCRkRRRUxJQTBnQVVITUFHeHFJZ2NnQnlnQ0FDSUpJQmtnQVVFMGJHb2lEelVDQUNKOFFnRjlJb0FCSUJzMUFqQjhJSHlBcHlJTUlBa2dERXNiSWdrMkFqZ2dCeUFIS0FJRUlnd2dEelVDQkNKOVFnRjlJb0VCSUJzMUFqUjhJSDJBcHlJUElBd2dEMHNiSWc4MkFqd2dCeUFIS0FJSUlnd2dnQUVnR3pVQ09Id2dmSUNuSWdvZ0NpQU1TeHNpRERZQ1FDQUhJQWNvQWd3aUNpQ0JBU0FiTlFJOGZDQjlnS2NpRlNBS0lCVkpHeUlLTmdKRUlBa2dERXNOQXlBS0lBOUpEUU1nQnlnQ0ZDSVZSUTBBSUFxdFFnRjlJWUVCSUF5dFFnRjlJWDRnRDYxQ0FYMGhnZ0VnQ2ExQ0FYMGhnd0VnRmEwaGZ5QUhLQUljSVFsQ0FDRjlBMEFnQ1NCOXB5SVBRWmdCYkdvaUIwSUJJQlVnRDBGL2MycXRJbnlHSW9BQklJRUJmQ0I4aUQ0Q2xBRWdCeUIrSUlBQmZDQjhpRDRDa0FFZ0J5Q0FBU0NDQVh3Z2ZJZytBb3dCSUFjZ2dBRWdnd0Y4SUh5SVBnS0lBU0I5UWdGOEluMGdmMUlOQUFzTElBRkJBV29pQVNBT1J3MEFDd3RCQUNFaUlEOUJBRFlDQ0NBYktBSWNJUUZCQVVFSUVCY2lJd1JBSUNNZ0FUWUNCQ0FqSUFZMkFnQUxJQ05GRFFFZ0d5Z0NKQ0VVSUJzb0FoUW9BZ0FoSHlNQVFaQUJheUlRSkFBZ0ZFR01MR3dpQVNBaktBSUVJZ2tvQWt4cUloNG9BcVFESVM0Q2Z5QWpLQUlBSWlnaEZTQUZJVE5CQUNFT0l3QkJJR3NpRFNRQUlBRWdDU2dDVEdvaUdDZ0NwQU1oSFFKQUlCVW9BaEFpRmtHUUJHd1FHQ0lQUlEwQUFrQWdGa0VDZEJBWUlndEZCRUFnRHlFTERBRUxBa0FDUUFKL0lBa29Ba3dnRkVHTUxHeHFJZ29vQXFRRElobEJBV29pQVVId0FSQVhJZ2NFUUFKQUlBRUVRQ0FWS0FJUUlRd2dCeUVCQTBBZ0FTQXpOZ0xzQVNBQklBeEJFQkFYSWdZMkFzZ0JJQVpGRFFJZ0FTQVZLQUlRSWhvMkFzUUJRUUFoQmtFQUlRd2dHZ1JBQTBBZ0FTZ0N5QUVnQmtFRWRHb2lEQ0FLS0FMUUt5QUdRYmdJYkdvaUdpZ0NCRUVRRUJjaUpqWUNEQ0FtUlEwRUlBd2dHaWdDQkRZQ0NDQUdRUUZxSWdZZ0ZTZ0NFQ0lNU1EwQUN3c2dBVUh3QVdvaEFTQVRJQmxHSUJOQkFXb2hFMFVOQUFzTElBY01BZ3NnQnlnQ0JDSUJCRUFnQVJBVUlBZEJBRFlDQkFzZ0J5RUJRUUFoQ2dOQUlBRW9Bc2dCSWdZRVFFRUFJUXdnQVNnQ3hBRWlFd1IvQTBBZ0JpZ0NEQ0lhQkVBZ0doQVVJQVpCQURZQ0RDQUJLQUxFQVNFVEN5QUdRUkJxSVFZZ0RFRUJhaUlNSUJOSkRRQUxJQUVvQXNnQkJTQUdDeEFVSUFGQkFEWUN5QUVMSUFGQjhBRnFJUUVnQ2lBWlJpQUtRUUZxSVFwRkRRQUxJQWNRRkF0QkFBc2lCd1JBSUJaRkRRSkJBQ0VLSUE4aEJpQVdRUU5ORFFFZ0JpQVdRWHh4SWdwQmtBUnNhaUVHSUE4aEFRTkFJQXNnRVVFQ2RHb2dBZjBSL1F3QUFBQUFFQUlBQUNBRUFBQXdCZ0FBL2E0Qi9Rc0NBQ0FCUWNBUWFpRUJJQkZCQkdvaUVTQUtSdzBBQ3lBS0lCWkhEUUVNQWdzZ0R4QVVEQUlMQTBBZ0N5QUtRUUowYWlBR05nSUFJQVpCa0FScUlRWWdDa0VCYWlJS0lCWkhEUUFMQ3lBTElSbEJBQ0VUSUFrb0Frd2dGRUdNTEd4cUtBTFFLeUVCSUJVb0FoZ2hDaUFOSUFrb0FnUWdDU2dDRENBVUlCUWdDU2dDR0NJR2JpSUxJQVpzYTJ4cUlnWWdGU2dDQUNJTUlBWWdERXNiTmdJVUlBMUJmeUFHSUFrb0FneHFJZ3dnQmlBTVN4c2lCaUFWS0FJSUlnd2dCaUFNU1JzMkFoQWdEU0FKS0FJSUlBa29BaEFnQzJ4cUlnWWdGU2dDQkNJTElBWWdDMHNiTmdJTUlBMUJmeUFHSUFrb0FoQnFJZ3NnQmlBTFN4c2lCaUFWS0FJTUlnc2dCaUFMU1JzMkFnZ2dEVUVBTmdJWUlBMUJBRFlDSENBTlFmLy8vLzhITmdJRUlBMUIvLy8vL3djMkFnQWdGU2dDRUFSQUEwQWdHUVIvSUJrZ0UwRUNkR29vQWdBRlFRQUxJUXNnQ2pVQ0JDSjhRZ0Y5SW9BQklBMDFBZ2g4SUh5QUlZRUJJQW8xQWdBaWZVSUJmU0orSUEwMUFoQjhJSDJBSVlJQklJQUJJQTAxQWd4OElIeUFJWHdnZmlBTk5RSVVmQ0I5Z0NGOUlBRW9BZ1FpQ1NBTktBSWNTd1JBSUEwZ0NUWUNIQ0FCS0FJRUlRa0xJQWtFUUNBQlFiQUhhaUVhSUFGQnJBWnFJU1lnZ1FGQy8vLy8vdytEUWdGOUlZQUJJSUlCUXYvLy8vOFBnMElCZlNHQkFTQjhRdi8vLy84UGcwSUJmU0YrSUgxQy8vLy8vdytEUWdGOUlZSUJRUUFoRkFOQUlCb2dGRUVDZENJTWFpZ0NBQ0VHSUF3Z0ptb29BZ0FoREVFQUlSRWdDd1JBSUFzZ0JqWUNCQ0FMSUF3MkFnQWdDMEVJYWlFUkN3SkFJQXdnQ1VFQmF5SUphaUlMUVI5TERRQWdDaWdDQUNJa1FYOGdDM1pMRFFBZ0RTQU5LQUlFSWl3Z0pDQUxkQ0lMSUFzZ0xFc2JOZ0lFQ3dKQUlBWWdDV29pQzBFZlN3MEFJQW9vQWdRaUpFRi9JQXQyU3cwQUlBMGdEU2dDQUNJc0lDUWdDM1FpQ3lBTElDeExHellDQUF0QkFDRUxRZ0VnQ2EwaWZJWWlmU0NBQVh3Z2ZJZ2lnd0ZDLy8vLy93K0RRZ0VnQnEwaWY0WjhRZ0Y5SUgrSXB5QjlJSDU4SUh5SXB5SWtJQVoyYTBGL0lBWjJjVUVBSUNRZ2d3R25SeHNoQmlCOUlJRUJmQ0I4aUNLREFVTC8vLy8vRDROQ0FTQU1yU0ovaG54Q0FYMGdmNGluSUgwZ2dnRjhJSHlJcHlJa0lBeDJhMEYvSUF4MmNVRUFJQ1FnZ3dHblJ4c2hEQ0FSQkVBZ0VTQUdOZ0lFSUJFZ0REWUNBQ0FSUVFocUlRc0xJQVlnREd3aUJpQU5LQUlZU3dSQUlBMGdCallDR0FzZ0ZFRUJhaUlVSUFFb0FnUkpEUUFMQ3lBS1FUUnFJUW9nQVVHNENHb2hBU0FUUVFGcUloTWdGU2dDRUVrTkFBc0xJQjFCQVdvaEppQU5LQUljSVJNZ0RTZ0NHQ0VVSUFkQkFEWUNCQUpBSUJnb0FnaEJBV29pQWEwZ0V5QVVJQlpzSWlSc0locXRma0lnaUZBRVFDQUhJQUVnR213aUFUWUNDQ0FISUFGQkFoQVhJZ0UyQWdRZ0FRMEJDeUFQRUJRZ0dSQVVJQWNvQWdRaUFRUkFJQUVRRkNBSFFRQTJBZ1FMSUNaRkJFQWdCeUVMREFJTFFRQWhDeUFISVFFRFFDQUJLQUxJQVNJS0JFQkJBQ0VHSUFFb0FzUUJJaEVFZndOQUlBb29BZ3dpQ1FSQUlBa1FGQ0FLUVFBMkFnd2dBU2dDeEFFaEVRc2dDa0VRYWlFS0lBWkJBV29pQmlBUlNRMEFDeUFCS0FMSUFRVWdDZ3NRRkNBQlFRQTJBc2dCQ3lBQlFmQUJhaUVCSUFzZ0hVWWdDMEVCYWlFTFJRMEFDeUFISVFzTUFRc2dGU2dDR0NFTUlBY2dEU2dDRkNJc05nTE1BU0FISUEwb0Fnd2lMVFlDMEFFZ0J5QU5LQUlRSWlBMkF0UUJJQWNnRFNnQ0NDSTROZ0xZQVNBSElCbzJBZ3dnQnlBa05nSVFJQWNnRkRZQ0ZFRUJJUlVnQjBFQk5nSVlJQllFUUNBSEtBTElBU0VCUVFBaENTQU1JUXNEUUNBWklBbEJBblJxS0FJQUlRb2dBU0FMS0FJQU5nSUFJQUVnQ3lnQ0JEWUNCQUpBSUFFb0FnZ2lEa1VOQUNBQktBSU1JUVlnRGtFQlJ3UkFJQTVCZm5FaFBFRUFJUkVEUUNBR0lBb29BZ0EyQWdBZ0JpQUtLQUlFTmdJRUlBWWdDaWdDQ0RZQ0NDQUdJQW9vQWd3MkFnd2dCaUFLS0FJUU5nSVFJQVlnQ2lnQ0ZEWUNGQ0FHSUFvb0FoZzJBaGdnQmlBS0tBSWNOZ0ljSUFaQklHb2hCaUFLUVNCcUlRb2dFVUVDYWlJUklEeEhEUUFMQ3lBT1FRRnhSUTBBSUFZZ0NpZ0NBRFlDQUNBR0lBb29BZ1EyQWdRZ0JpQUtLQUlJTmdJSUlBWWdDaWdDRERZQ0RBc2dDMEUwYWlFTElBRkJFR29oQVNBSlFRRnFJZ2tnRmtjTkFBc0xJQ1pCQVVzRVFDQUhJUTREUUNBT0lEZzJBc2dESUE0Z0lEWUN4QU1nRGlBdE5nTEFBeUFPSUN3MkFyd0RJQTVCQVRZQ2lBSWdEaUFVTmdLRUFpQU9JQ1EyQW9BQ0lBNGdHallDL0FFZ0ZnUkFJQTRvQXJnRElRRkJBQ0VKSUF3aEN3TkFJQmtnQ1VFQ2RHb29BZ0FoQ2lBQklBc29BZ0EyQWdBZ0FTQUxLQUlFTmdJRUFrQWdBU2dDQ0NJbVJRMEFJQUVvQWd3aEJpQW1RUUZIQkVBZ0prRitjU0U4UVFBaEVRTkFJQVlnQ2lnQ0FEWUNBQ0FHSUFvb0FnUTJBZ1FnQmlBS0tBSUlOZ0lJSUFZZ0NpZ0NERFlDRENBR0lBb29BaEEyQWhBZ0JpQUtLQUlVTmdJVUlBWWdDaWdDR0RZQ0dDQUdJQW9vQWh3MkFod2dCa0VnYWlFR0lBcEJJR29oQ2lBUlFRSnFJaEVnUEVjTkFBc0xJQ1pCQVhGRkRRQWdCaUFLS0FJQU5nSUFJQVlnQ2lnQ0JEWUNCQ0FHSUFvb0FnZzJBZ2dnQmlBS0tBSU1OZ0lNQ3lBTFFUUnFJUXNnQVVFUWFpRUJJQWxCQVdvaUNTQVdSdzBBQ3dzZ0RpQU9LUUlFTndMMEFTQVZJQjFISUE1QjhBRnFJUTRnRlVFQmFpRVZEUUFMQ3lBUEVCUWdHUkFVSUJnb0FxUURJUXNDUUNBWUxRQ0lMRUVFY1FSQUlBdEJmMFlOQVNBWVFhZ0RhaUVHSUJnb0FnZ2hBVUVBSVJFZ0J5RUtBMEFnQmlnQ0pDRU9JQXBCQVRZQ0xDQUtJQTQyQWxRZ0NpQUdLQUlBTmdJd0lBWW9BZ1FoRGlBS1FnQTNBa1FnQ2lBT05nSTBJQW9nQmlnQ0REWUNQQ0FLSUFZb0FoQTJBa0FnQmlnQ0NDRU9JQW9nRkRZQ1RDQUtJQTRnQVNBQklBNUxHellDT0NBR1FaUUJhaUVHSUFwQjhBRnFJUW9nQ3lBUlJpQVJRUUZxSVJGRkRRQUxEQUVMSUF0QmYwWU5BQ0FZS0FJSUlRWWdHQ2dDQkNFT0lBY2hDaUFMQkVBZ0MwRUJha0YrY1NFSlFRQWhBUU5BSUFwQ0FEY0NSQ0FLUVFBMkFqUWdDa0lCTndJc0lBb2dEallDVkNBS0lCTTJBandnQ2lBT05nTEVBaUFLSUJRMkFrd2dDaUFHTmdJNElBcENBRGNDdEFJZ0NrRUFOZ0trQWlBS1FnRTNBcHdDSUFvZ0V6WUNyQUlnQ2lBR05nS29BaUFLSUJRMkFyd0NJQW9nQ2lnQ3hBRTJBa0FnQ2lBS0tBSzBBellDc0FJZ0NrSGdBMm9oQ2lBQlFRSnFJZ0VnQ1VjTkFBc0xJQXRCQVhFTkFDQUtRZ0EzQWtRZ0NrRUFOZ0kwSUFwQ0FUY0NMQ0FLSUE0MkFsUWdDaUFUTmdJOElBb2dGRFlDVENBS0lBWTJBamdnQ2lBS0tBTEVBVFlDUUFzZ0J5RU9EQUVMSUFzUUZBc2dEVUVnYWlRQUFrQWdEa1VOQUNBdVFRRnFJU1lnRnlFWklBNGhGUUpBQWtBRFFDQVZLQUpVUVg5R0RRSWdLQ2dDRUVFQ2RCQVlJZ0ZGRFFJZ0FVRUJJQ2dvQWhCQkFuUVFHU0VhSUJVUVlBUkFBMEFnSHlnQ0ZDRUpBa0FDUUNBVktBSW9JQjRvQWd4UERRQWdGU2dDSUNJQklBa2dGU2dDSEVITUFHeHFJZ2NvQWhoUERRQWdCeWdDSENBQlFaZ0JiR29pQnlnQ0dFVU5BQ0FIUVJ4cUlRWkJBQ0VOQWtBRFFDQWJJQlVvQWh3Z0ZTZ0NJQ0FHSUExQkpHeHFJZ0VvQWhBZ0FTZ0NGQ0FWS0FJa1FTaHNhaUlCS0FJQUlBRW9BZ1FnQVNnQ0NDQUJLQUlNRUVGRkJFQWdEVUVCYWlJTklBY29BaGhKRFFFTUFnc0xJQm9nRlNnQ0hFRUNkR3BCQURZQ0FDQVFRUUEyQW9nQklDTW9BZ1FnSHlnQ0ZDQWVJQlVnRUVHTUFXb2dHU0FRUVlnQmFpQUlJRE1RWDBVTkJpQVZLQUlnSVEwZ0ZTZ0NIQ0VQSUJBb0FvZ0JJUkVnRUNnQ2pBRUVRQ0FRUVFBMkFvZ0JJQjhvQWhRZ0QwSE1BR3hxS0FJY0lBMUJtQUZzYWlJZEtBSVlJZ2tFZnlBSUlCRnJJUVlnQ0NBWmFpRWtJQjFCSEdvaEQwRUFJUXBCQUNFWUlCRWdHV29pTGlFVUEwQUNRQ0FQS0FJSUlBOG9BZ0JHRFFBZ0R5Z0NEQ0FQS0FJRVJnMEFJQThvQWhRZ0ZTZ0NKRUVvYkdvaUFTZ0NGQ0FCS0FJUWJDSXNSUTBBSUFFb0FoZ2hDVUVBSVJNRFFDQUpLQUlrSWdzRVFBSi9Ba0FnR0VVRVFDQUpLQUpBUlEwQkN5QUpRUUEyQWpSQkFTRU5RY0FBREFFTElBa29BZ0FoRFFKQUlBa2dDU2dDS0NJQkJIOGdEU0FCUVJoc2FpSU5RUlJyS0FJQUlBMUJER3NvQWdCSEJFQWdEVUVZYXlFTkRBSUxJQUZCQVdvRlFRRUxOZ0lvQ3dKL0FrQWdEU2dDRkNJQklCUkJmM05MRFFBZ0RVRVVhaUVNQTBBZ0FTQVVhaUFrU3cwQklBa29BZ1FoRmlBSktBSTBJaGdnQ1NnQ09FY0VmeUFMQlNBV0lCaEJBWFJCQVhJaUFVRURkQkFiSWhaRkJFQWdNMEVCUVlBSVFRQVFFd3dTQ3lBSklBRTJBamdnQ1NBV05nSUVJQWtvQWpRaEdDQU1LQUlBSVFFZ0NTZ0NKQXNoQnlBV0lCaEJBM1JxSWdzZ0FUWUNCQ0FMSUJRMkFnQWdDU0FZUVFGcU5nSTBJQTBnRFNnQ0FDQUJhallDQUNBTklBMG9BaEFpRENBTktBSUVhaUlXTmdJRUlBa2dCeUFNYXlJTE5nSWtJQTBnRmpZQ0NDQUJJQlJxSVJSQkFDQUhJQXhHRFFJYUlBa2dDU2dDS0VFQmFqWUNLQ0FOUVN4cUlRd2dEU2dDTENFQklBMUJHR29oRFNBQklCUkJmM05ORFFBTEN5QVZLQUljSVFjZ0ZTZ0NJQ0VMSUJVb0FpUWhEQ0FqS0FJRUtBSm9CRUFnRUNBSE5nSjRJQkFnQ3pZQ2RDQVFJQW8yQW5BZ0VDQU1OZ0pzSUJBZ0V6WUNhQ0FRSUFZMkFtUWdFQ0FCTmdKZ0lETkJBVUhBOGdBZ0VFSGdBR29RRXd3UEN5QVFJQWMyQWxnZ0VDQUxOZ0pVSUJBZ0NqWUNVQ0FRSUF3MkFrd2dFQ0FUTmdKSUlCQWdCallDUkNBUUlBRTJBa0FnTTBFQ1FjRHlBQ0FRUVVCckVCTWdDVUVBTmdJMElBbEJBVFlDUUVFQkN5RVlJQWtvQWlnaERVRXNDeUFKYWlBTk5nSUFDeUFKUWNRQWFpRUpJQk5CQVdvaUV5QXNSdzBBQ3lBZEtBSVlJUWtMSUE5QkpHb2hEeUFLUVFGcUlnb2dDVWtOQUFzZ0ZTZ0NJQ0VOSUJVb0Fod2hEeUFHSUJRZ0xtc2dHQnNGUVFBTElCRnFJUkVMSUNnb0FoZ2dEMEUwYkdvaUFTQU5JQUVvQWlRaUFTQUJJQTFKR3pZQ0pBd0NDeUFmS0FJVUlRa0xJQkJCQURZQ2lBRWdJeWdDQkNBSklCNGdGU0FRUVl3QmFpQVpJQkJCaUFGcUlBZ2dNeEJmUlEwRUlCVW9BaHdoRHlBUUtBS0lBU0VSSUJBb0Fvd0JSUTBBSUI4b0FoUWdEMEhNQUd4cUtBSWNJQlVvQWlBaUdFR1lBV3hxSWdFb0FoZ2lKRVVOQUNBSUlCRnJJUVlnQVVFY2FpRVdJQlVvQWlRaERFRUFJUTFCQUNFZEFrQUNRQU5BQWtBZ0ZpZ0NDQ0FXS0FJQVJnMEFJQllvQWd3Z0ZpZ0NCRVlOQUNBV0tBSVVJQXhCS0d4cUlnRW9BaFFnQVNnQ0VHd2lMa1VOQUNBQktBSVlJUXRCQUNFS0EwQWdDeWdDSkNJQkJFQWdDeWdDQUNFSkFrQWdDeUFMS0FJb0loTUVmeUFKSUJOQkdHeHFJZ2xCRkdzb0FnQWdDVUVNYXlnQ0FFY0VRQ0FKUVJocklRa01BZ3NnRTBFQmFnVkJBUXNpRXpZQ0tBc2dDU2dDRkNJVUlBMXFJZzBnRkVrTkJTQUdJQTFKRFFVRFFBSkFJQWtnQ1NnQ0VDSVVJQWtvQWdScU5nSUVJQUVnRkdzaEJ5QUJJQlJHRFFBZ0N5QVRRUUZxSWhNMkFpZ2dDU2dDTENJVUlBMXFJZzBnRkVrTkJpQUpRUmhxSVFrZ0J5RUJJQVlnRFU4TkFRd0dDd3NnQ3lBSE5nSWtDeUFMUWNRQWFpRUxJQXBCQVdvaUNpQXVSdzBBQ3dzZ0ZrRWthaUVXSUIxQkFXb2lIU0FrUncwQUN5QU5JQkZxSVJFTUFnc2dDeUFITmdJa0N5QWpLQUlFS0FKb1JRUkFJQkFnRHpZQ0dDQVFJQmcyQWhRZ0VDQWROZ0lRSUJBZ0REWUNEQ0FRSUFvMkFnZ2dFQ0FHTmdJRUlCQWdGRFlDQUNBelFRSkI2L0VBSUJBUUV5QVZLQUljSVE4Z0JpQVJhaUVSREFFTElCQWdEellDT0NBUUlCZzJBalFnRUNBZE5nSXdJQkFnRERZQ0xDQVFJQW8yQWlnZ0VDQUdOZ0lrSUJBZ0ZEWUNJQ0F6UVFGQjYvRUFJQkJCSUdvUUV3d0VDd0pBSUJvZ0QwRUNkR29vQWdCRkRRQWdLQ2dDR0NBUFFUUnNhaUlCS0FJa0RRQWdBU0FmS0FJVUlBOUJ6QUJzYWlnQ0dFRUJhellDSkFzZ0NDQVJheUVJSUJFZ0dXb2hHU0FWRUdBTkFBc0xJQm9RRkNBVlFmQUJhaUVWSUJ4QkFXb2lIQ0FlS0FLa0EwME5BQXNnRGlBbUVFSWdQeUFaSUJkck5nSUlRUUVNQXdzZ0RpQW1FRUlnR2hBVURBRUxJQTRnSmhCQ0MwRUFDeUFRUVpBQmFpUUFJQ01RTWtVTkFTQWJLQUlnS0FMUUt5RWlJQnNvQWhRb0FnQWlFQ2dDRkNFT0lEOUJBVFlDREVFQUlSbEJBQ0VNSUJzb0FpQWlBU2dDRENBQktBSUlSZ1JBSUNJb0FoQkJCSFpCQVhFaERBc0NRQ0FRS0FJUUlncEZEUUFEUUFKQUlCc29Ba1FpQVFSQUlBRWdHVUVDZEdvb0FnQkZEUUVMSUQ5QkRHb2hGRUVBSVFvQ1FDQU9LQUlZSWdGRkRRQWdHeWdDTENFUkEwQWdEaWdDSENBS1FaZ0JiR29pRHlnQ0dDSUxCRUFnRDBFY2FpRVRJQThvQWhRaEFTQVBLQUlRSVJWQkFDRVhBMEFnQVNBVmJBUkFJQk1nRjBFa2JHb2hEVUVBSVFrRFFDQWJJQTRvQWhBZ0NpQU5LQUlRSUEwb0FoUWdDVUVvYkdvaUJ5Z0NBQ0FIS0FJRUlBY29BZ2dnQnlnQ0RCQkJJUVlnQnlnQ0ZDSUxJQWNvQWhBaUNHd2hBUUpBSUFZRVFDQUJSUTBCUVFBaENBTkFBa0FnR3lBT0tBSVFJQW9nRFNnQ0VDQUhLQUlZSUFoQnhBQnNhaUlHS0FJSUlBWW9BZ3dnQmlnQ0VDQUdLQUlVRUVGRkJFQWdCaWdDUENJQlJRMEJJQUVRRkNBR1FRQTJBandNQVFzZ0d5Z0NRRVVFUUNBR0tBSThEUUVnQmlnQ0VDQUdLQUlJUmcwQklBWW9BaFFnQmlnQ0RFWU5BUXRCQVVFc0VCY2lBVVVFUUNBL1FRQTJBZ3dNQ2dzZ0d5Z0NRQ0VMSUFGQkFEWUNKQ0FCSUJRMkFod2dBU0FpTmdJVUlBRWdEallDRUNBQklBMDJBZ3dnQVNBR05nSUlJQUVnQ2pZQ0JDQUJJQXMyQWdBZ0FTQU1OZ0lvSUFFZ016WUNJQ0FCSUJFb0FnUkJBVW8yQWhnZ0VVRU9JQUVRTXlBL0tBSU1SUTBKQ3lBSVFRRnFJZ2dnQnlnQ0ZDQUhLQUlRYkVrTkFBc01BUXNnQVVVTkFFRUFJUlVEUUNBSEtBSVlJQlZCeEFCc2FpSUJLQUk4SWdZRVFDQUdFQlFnQVVFQU5nSThJQWNvQWhRaEN5QUhLQUlRSVFnTElCVkJBV29pRlNBSUlBdHNTUTBBQ3dzZ0NVRUJhaUlKSUE4b0FoUWlBU0FQS0FJUUloVnNTUTBBQ3lBUEtBSVlJUXNMSUJkQkFXb2lGeUFMU1EwQUN5QU9LQUlZSVFFTElBcEJBV29pQ2lBQlNRMEFDd3NnUHlnQ0RFVU5BaUFRS0FJUUlRb0xJQ0pCdUFocUlTSWdEa0hNQUdvaERpQVpRUUZxSWhrZ0Nra05BQXNMUVFBaElpQWJLQUlzRUNRZ1B5Z0NERVVOQVFKQUlCc29Ba0FOQUNBYktBSVlJaGtvQWhCRkRRQkJBQ0VPQTBBZ0d5Z0NGQ2dDQUNnQ0ZDQU9RY3dBYkdvaUFTZ0NIQ0FaS0FJWUlBNUJOR3hxS0FJa1FaZ0JiR29pQnlnQ2lBRWhCaUFIS0FLUUFTRUlJQWNvQW93QklRc2dCeWdDbEFFaEJ5QUJLQUkwRUJRZ0FVRUFOZ0kwQWtBZ0d5Z0NSQ0lKQkVBZ0NTQU9RUUowYWlnQ0FFVU5BUXNnQmlBSVJnMEFJQWNnQzBZTkFDQUhJQXRySWdldElBZ2dCbXNpQnExK1FpQ0lRZ0JTQkVBZ00wRUJRWUVYUVFBUUV3d0ZDeUFHSUFkc0lnZEJnSUNBZ0FSUEJFQWdNMEVCUVlFWFFRQVFFd3dGQ3lBQklBZEJBblFRSENJQk5nSTBJQUVOQUNBelFRRkJnUmRCQUJBVERBUUxJQTVCQVdvaURpQWJLQUlZSWhrb0FoQkpEUUFMQ3lBYktBSWdJUmtnR3lnQ0ZDZ0NBQ0lWS0FJUUJFQWdGU2dDRkNFT0lCa29BdEFySVJrZ0d5Z0NHQ2dDR0NFS1FRQWhDd05BQWtBZ0d5Z0NSQ0lCQkVBZ0FTQUxRUUowYWlnQ0FFVU5BUXNnQ2lnQ0pFRUJhaUVCSUJrb0FoUkJBVVlFUUNBQklSNUJBQ0VJUVFBaEJ2ME1BQUFBQUFBQUFBQUFBQUFBQUFBQUFDRjJJd0JCSUdzaUp5UUFBa0FDUUNBYktBSkFCRUJCQVNFSElBRkJBVVlOQWlBT0tBSWNJZ1lnRGlnQ0dFR1lBV3hxSWdGQmtBRnJLQUlBSWc4Z0FVR1lBV3NvQWdBaUVVWU5BaUFHS0FJRUlSUWdCaWdDRENFV0lBWW9BZ0FoR0NBR0tBSUlJUjBnR3lnQ0xDSVhLQUlFSVJBZ0hrRUJheUlOSVF3Z0JpRUhBa0FnRFVFRVR3UkFJQTFCQTNFaERDQUhJQTFCZkhFaUNVR1lBV3hxSVFkQkFDRUJBMEFnZGlBR0lBRkJtQUZzYWlJSVFlZ0VhaUFJUWRBRGFpQUlRYmdDYWlBSS9Wd0NvQUg5VmdJQUFmMVdBZ0FDL1ZZQ0FBTWdDRUhnQkdvZ0NFSElBMm9nQ0VHd0Ftb2dDUDFjQXBnQi9WWUNBQUg5VmdJQUF2MVdBZ0FEL2JFQi9ia0JJQWhCN0FScUlBaEIxQU5xSUFoQnZBSnFJQWo5WEFLa0FmMVdBZ0FCL1ZZQ0FBTDlWZ0lBQXlBSVFlUUVhaUFJUWN3RGFpQUlRYlFDYWlBSS9Wd0NuQUg5VmdJQUFmMVdBZ0FDL1ZZQ0FBUDlzUUg5dVFFaGRpQUJRUVJxSWdFZ0NVY05BQXNnZGlCMklIYjlEUWdKQ2dzTURRNFBBQUVDQXdBQkFnUDl1UUVpZGlCMklIYjlEUVFGQmdjQUFRSURBQUVDQXdBQkFnUDl1UUg5R3dBaENDQUpJQTFHRFFFTEEwQWdDQ0FIS0FLZ0FTQUhLQUtZQVdzaUFTQUJJQWhKR3lJQklBY29BcVFCSUFjb0Fwd0JheUlJSUFFZ0NFc2JJUWdnQjBHWUFXb2hCeUFNUVFGcklnd05BQXNMUVFBaEJ5QUlRZi8vL3o5TERRSWdKeUFJUVFWMEloTVFOeUlNTmdJUUlBeEZEUUlnSnlBTU5nSUFJQTBFUUNBUElCRnJJUkVnRmlBVWF5RUpJQjBnR0dzaEFRTkFJQTRvQWlRaEZDQW5JQWtpRHpZQ0NDQW5JQUVpQnpZQ0dDQUdLQUtjQVNFSUlBWW9BcVFCSVFrZ0JpZ0NvQUVoQVNBbklBWW9BcGdCSWhaQkFtODJBaHdnSnlBQklCWnJJZ0VnQjJzMkFoUUNRQ0FRUVFKSUloMUZJQWtnQ0dzaUNVRUJTM0ZGQkVCQkFDRUlJQWxGRFFFRFFDQW5RUkJxSUJRZ0NDQVJiRUVDZEdvUVppQUlRUUZxSWdnZ0NVY05BQXNNQVFzZ0NTQVFJQWtnRUVrYkloWkJBV3NoSXlBSklCWnVJUmhCQUNFSEEwQkJKQkFZSWdoRkRRVWdKLzBBQWhBaGRpQUlJQlEyQWhnZ0NDQVJOZ0lVSUFnZ0FUWUNFQ0FJSUhiOUN3SUFJQWdnQnlBWWJEWUNIQ0FISUNOR0lSOGdDQ0FKSUFkQkFXb2lCeUFZYkNBZkd6WUNJQ0FJSUJNUU55SWZOZ0lBSUI5RkJFQkJBQ0VISUJjUUpDQUlFQlFnREJBVURBY0xJQmRCQ2lBSUVETWdCeUFXUncwQUN5QVhFQ1FMSUNjZ0NTQVBhellDQkNBbklBWW9BcHdCUVFKdk5nSU1Ba0FnSFVVZ0FVRUJTM0ZGQkVCQkNDRUhRUUFoQ0NBQlFRaFBCRUFEUUNBbklCUWdDRUVDZEdvZ0VVRUlFRFlnQnlJSVFRaHFJZ2NnQVUwTkFBc0xJQUVnQ0UwTkFTQW5JQlFnQ0VFQ2RHb2dFU0FCSUFockVEWU1BUXNnQVNBUUlBRWdFRWtiSWc5QkFXc2hHQ0FCSUE5dUlSWkJBQ0VIQTBCQkpCQVlJZ2hGRFFVZ0ovMEFBZ0FoZGlBSUlCUTJBaGdnQ0NBUk5nSVVJQWdnQ1RZQ0VDQUlJSGI5Q3dJQUlBZ2dCeUFXYkRZQ0hDQUhJQmhHSVIwZ0NDQUJJQWRCQVdvaUJ5QVdiQ0FkR3pZQ0lDQUlJQk1RTnlJZE5nSUFJQjFGQkVCQkFDRUhJQmNRSkNBSUVCUWdEQkFVREFjTElCZEJDeUFJRURNZ0J5QVBSdzBBQ3lBWEVDUUxJQVpCbUFGcUlRWWdEVUVCYXlJTkRRQUxDMEVCSVFjZ0RCQVVEQUlMUVFFaEJ5QU9LQUljSWdrZ0hrR1lBV3hxSWl0Qm1BRnJJbDBvQWdBZ0swR1FBV3NvQWdCR0RRRWdLMEdVQVdzaVhpZ0NBQ0FyUVl3QmF5Z0NBRVlOQVNBSktBSUVJUmNnQ1NnQ0RDRU5JQWtvQWdBaEVDQUpLQUlJSVJFZ0RpZ0NSQ0VvSUE0b0FrQWhHaUFPS0FJOElTWWdEaWdDT0NFdUlBNGdIaEJsSWpsRkJFQkJBQ0VIREFJTEFrQUNRQ0FlUVFGSEJFQUNRQUpBSUI1QkFXc2lEMEVFU1FSQUlBOGhBU0FKSVFjTUFRc2dEMEVEY1NFQklBa2dEMEY4Y1NJTVFaZ0JiR29oQndOQUlIWWdDU0FHUVpnQmJHb2lDRUhvQkdvZ0NFSFFBMm9nQ0VHNEFtb2dDUDFjQXFBQi9WWUNBQUg5VmdJQUF2MVdBZ0FESUFoQjRBUnFJQWhCeUFOcUlBaEJzQUpxSUFqOVhBS1lBZjFXQWdBQi9WWUNBQUw5VmdJQUEvMnhBZjI1QVNBSVFld0VhaUFJUWRRRGFpQUlRYndDYWlBSS9Wd0NwQUg5VmdJQUFmMVdBZ0FDL1ZZQ0FBTWdDRUhrQkdvZ0NFSE1BMm9nQ0VHMEFtb2dDUDFjQXB3Qi9WWUNBQUg5VmdJQUF2MVdBZ0FEL2JFQi9ia0JJWFlnQmtFRWFpSUdJQXhIRFFBTElIWWdkaUIyL1EwSUNRb0xEQTBPRHdBQkFnTUFBUUlEL2JrQkluWWdkaUIyL1EwRUJRWUhBQUVDQXdBQkFnTUFBUUlEL2JrQi9Sc0FJUWdnRENBUFJnMEJDd05BSUFnZ0J5Z0NvQUVnQnlnQ21BRnJJZ1lnQmlBSVNSc2lCaUFIS0FLa0FTQUhLQUtjQVdzaUNDQUdJQWhMR3lFSUlBZEJtQUZxSVFjZ0FVRUJheUlCRFFBTEN5QUlRWUNBZ0lBQlR3MENJQWhCQkhRUU55SVNSUTBDQWtBZ0hrVU5BQ0FOSUJkcklSWWdFU0FRYXlFVElCSkJCR3NoT2lBU1FSeHFJVTRnRWtFWWFpRTRJQkpCRkdvaFBDQVNRUXhySVVFZ0VrRU1haUVwSUJKQkNHb2hKU0FTUVJCcklVSWdFa0VJYXlGQUlCSkJCR29oSVNBb3JTRjhJQnF0SVgwZ0pxMGhnQUVnTHEwaGdRRkJBU0ZEQTBBZ0NTZ0NuQUVpQVVFQ2J5RTNJQWtvQXBnQklnZEJBbThoUGlBSktBS2tBU0FCYXlJa0lCWnJJUzhnQ1NnQ29BRWdCMnNpTENBVGF5RXhJQzRpQmlFSElDWWlIU0VVSUJvaUFTRXdJQ2dpQ0NFUkFrQWdEaWdDRkNJUElFTkdEUUFnRHlCRGF5RVBRUUFoRkVFQUlRY2dCZ1JBUW44Z0Q2MGlmb1pDZjRVZ2dRRjhJSDZJcHlFSEN5QW1CRUJDZnlBUHJTSitoa0ovaFNDQUFYd2dmb2luSVJRTFFRQWhDRUVBSVFFZ0dnUkFRbjhnRDYwaWZvWkNmNFVnZlh3Z2ZvaW5JUUVMSUNnRVFFSi9JQSt0SW42R1FuK0ZJSHg4SUg2SXB5RUlDMEVBSVRCQkFDRUdRUUVnRDBFQmEzUWlEQ0F1U1FSQUlDNGdER3V0UW44Z0Q2MGlmb1pDZjRWOElINklweUVHQ3lBTUlCcEpCRUFnR2lBTWE2MUNmeUFQclNKK2hrSi9oWHdnZm9pbklUQUxRUUFoRVVFQUlSMGdEQ0FtU1FSQUlDWWdER3V0UW44Z0Q2MGlmb1pDZjRWOElINklweUVkQ3lBTUlDaFBEUUFnS0NBTWE2MUNmeUFQclNKK2hrSi9oWHdnZm9pbklSRUxRWDhnTUNBSktBSzBBU0lQYXlJTVFRQWdEQ0F3VFJzaURFRUNhaUlYSUF3Z0Ywc2JJZ3dnTVNBTUlERkpHeUkxUVg4Z0FTQUpLQUxZQVNJdGF5SU1RUUFnQVNBTVR4c2lBVUVDYWlJTUlBRWdERXNiSWdFZ0V5QUJJQk5KR3lJMklENGJRUUYwSWdFZ05pQTFJRDRiUVFGMFFRRnlJZ3dnQVNBTVN4c2lSaUFzU1NFWUlBWWdEMnNpQVVFQUlBRWdCazBiSWdGQkFtc2lCa0VBSUFFZ0JrOGJJaEFnQnlBdGF5SUJRUUFnQVNBSFRSc2lBVUVDYXlJR1FRQWdBU0FHVHhzaURTQStHMEVCZENJR0lBMGdFQ0ErRzBFQmRFRUJjaUlQU1NFZ0lCUWdDU2dDdUFFaUkyc2lERUVBSUF3Z0ZFMGJJZ3hCQW1zaUYwRUFJQXdnRjA4Yklnd2hIQ0FkSUFrb0F0d0JJaFJySWhkQkFDQVhJQjFOR3lJWFFRSnJJaDFCQUNBWElCMVBHeUlYSVNwQmZ5QUlJQ05ySWgxQkFDQUlJQjFQR3lJSVFRSnFJaDBnQ0NBZFN4c2lDQ0FXSUFnZ0Zra2JJaU1oTWtGL0lCRWdGR3NpQ0VFQUlBZ2dFVTBiSWdoQkFtb2lFU0FJSUJGTEd5SUlJQzhnQ0NBdlNSc2lIeUU3SURjRVFDQU1JU29nSHlFeUlDTWhPeUFYSVJ3TElFWWdMQ0FZR3lGSElBWWdEeUFnR3lFUElCWWdIMm9oVHlBV0lCZHFJVkFnSkFSQUlCSWdEVUVEZEdvaVJFRUVhaUE2SURGQkEzUWlCbW9pVVNBTklERklJZ2diSVZJZ05TQVRRUUZySUJNZ05Vb2JJU0JCQUNFWUlCTkJBVW9nTVVFQVNuSWhVeUFoSUQ1QkFuUWlFV3NnRUVFRGRHb2hWQ0FSSUVScUlWVWdEU0EySURFZ01TQTJTaHNpRVNBSElDMGdCeUF0U1J0cVFRSWdBU0FCUVFKUEcyb2dCMEYvYzJvaVNFRjhjU0pGYWlFMElBMUJBV29pRkNCRmFpRTlJQk1nTldvaFZpQVFJQk5xSVZjZ0RmMFIvUXdBQUFBQUFRQUFBQUlBQUFBREFBQUEvYTRCSVhrZ0VpQVBRUUowYWlGWUlFQWdFMEVEZENJQmFpRkpJQUVnT21vaFNpQUdJRUJxSVVzZ0UwVWdNVUVCUm5FaFdTQVNJRWRCQW5RaUFXb2hXaUFCSURwcUlWc2dGUDBSL1F3QUFBQUFBUUFBQUFJQUFBQURBQUFBL2E0QklYb2dPaUFOSURFZ0NCdEJBM1JxSVZ3RFFBSkFBa0FnR0NBalNTQU1JQmhOY1EwQUlCZ2dUMGtnR0NCUVQzRU5BQ0FZUVFGcUlTME1BUXNnTENCR1N3UkFJRnRCQURZQ0FDQmFRUUEyQWdBTElEa2dEU0FZSURZZ0dFRUJhaUl0SUZWQkFrRUFFQ0lnT1NCWElCZ2dWaUF0SUZSQkFrRUFFQ0lDUUFKQUFrQWdQa1VFUUNCVFJRMERJQTBnTms0TkFnSkFBa0FnRFVFQVNnUkFJRndvQWdBaEJ3d0JDeUFoS0FJQUlnY2hBU0FOUVFCSURRRUxJQWNoQVNCU0tBSUFJUWNMSUVRZ1JDZ0NBQ0FCSUFkcVFRSnFRUUoxYXpZQ0FDQVVJZ2NnRVU0TkFVRUFJUWNnRkNFQklBMGhDQ0I2SVhZZ2VTRjRJRWhCQTBzRVFBTkFJQklnZGtFQi9hc0JJbmY5R3dCQkFuUnFJZ0VnRWlCMy9Sc0RRUUowYWlJR0lCSWdkLzBiQWtFQ2RHb2lDQ0FTSUhmOUd3RkJBblJxSWgwZ0FmMWNBZ0Q5VmdJQUFmMVdBZ0FDL1ZZQ0FBTWdFaUI0UVFIOXF3SDlEQUVBQUFBQkFBQUFBUUFBQUFFQUFBRDlVQ0o3L1JzRFFRSjBhaUFTSUh2OUd3SkJBblJxSUJJZ2UvMGJBVUVDZEdvZ0VpQjcvUnNBUVFKMGF2MWNBZ0Q5VmdJQUFmMVdBZ0FDL1ZZQ0FBTWdFaUIzL1F3QkFBQUFBUUFBQUFFQUFBQUJBQUFBL1ZBaWQvMGJBMEVDZEdvZ0VpQjMvUnNDUVFKMGFpQVNJSGY5R3dGQkFuUnFJQklnZC8wYkFFRUNkR3I5WEFJQS9WWUNBQUg5VmdJQUF2MVdBZ0FEL2E0Qi9Rd0NBQUFBQWdBQUFBSUFBQUFDQUFBQS9hNEJRUUw5ckFIOXNRRWlkLzFhQWdBQUlCMGdkLzFhQWdBQklBZ2dkLzFhQWdBQ0lBWWdkLzFhQWdBRElIajlEQVFBQUFBRUFBQUFCQUFBQUFRQUFBRDlyZ0VoZUNCMi9Rd0VBQUFBQkFBQUFBUUFBQUFFQUFBQS9hNEJJWFlnQjBFRWFpSUhJRVZIRFFBTElEMGhBU0EwSVFnZ0VTRUhJRVVnU0VZTkFnc0RRQ0FTSUFGQkEzUnFJZ2NnQnlnQ0FDQVNJQWhCQTNScUtBSUVJQWNvQWdScVFRSnFRUUoxYXpZQ0FDQUJJZ2hCQVdvaUFTQVJSdzBBQ3lBUklRY01BUXNDUUNCWlJRUkFJQTBpQnlBMlRnMEJBMEFnRWlBSFFRTjBhaUlCS0FJRUlRWWdBU0FHQW44Q1FDQUhRUUJPQkVBZ0FTQkxJQWNnTVVnYktBSUFJVEFnQjBFQmFpRUJEQUVMSUJJb0FnQWhNRUVBSVFFZ0VpQUhRUUZxSWdjTkFSb0xJQUVnTVU0RVFDQUJJUWNnU3d3QkN5QVNJQUVpQjBFRGRHb0xLQUlBSURCcVFRSnFRUUoxYXpZQ0JDQUhJRFpJRFFBTERBRUxJQklnRWlnQ0FFRUNiVFlDQUF3REN5QVFJZ2NnTlU0TkFnTkFJQklnQjBFRGRDSUJhaUlHS0FJQUlRZ0NmeUFIUVFCSUJFQWdJU2dDQUNFZElDRU1BUXNnRWlBSFFRTjBha0VFYWlCS0lBY2dFMGdiS0FJQUlSMGdJU0FIUlEwQUdpQktJQWNnRTBvTkFCb2dBU0E2YWdzaEFTQUdJQUVvQWdBZ0hXcEJBWFVnQ0dvMkFnQWdCMEVCYWlJSElEVkhEUUFMREFJTElBY2dOazROQUFOQUlCSWdCMEVEZEdvaUFTQUJLQUlBQW44Q1FDQUhRUUJLQkVBZ09pQUhJREVnQnlBeFNCdEJBM1JxS0FJQUlRZ01BUXNnSVNnQ0FDRUlJQ0VnQjBFQVNBMEJHZ3NnVVNBSElERk9EUUFhSUJJZ0IwRURkR3BCQkdvTEtBSUFJQWhxUVFKcVFRSjFhellDQUNBSFFRRnFJZ2NnTmtjTkFBc0xJQkFnTlU0TkFDQWdJQkFpQVNJSFNnUkFBMEFnRWlBSFFRTjBhaUlCSUFFb0FnUWdFaUFIUVFGcUlnZEJBM1JxS0FJQUlBRW9BZ0JxUVFGMWFqWUNCQ0FISUNCSERRQUxJQ0FoQVFzZ0FTQTFUZzBBQTBBQ2Z3SkFJQUVpQjBFQVRnUkFJQklnQVVFRGRHb2dTU0FCSUJOSUd5Z0NBQ0VHSUFGQkFXb2hDQXdCQ3lBU0tBSUFJUVpCQUNFSUlCSWdCMEVCYWlJQkRRRWFDeUFJSUJOT0JFQWdDQ0VCSUVrTUFRc2dFaUFJSWdGQkEzUnFDeUVJSUJJZ0IwRURkR29pQnlBSEtBSUVJQWdvQWdBZ0JtcEJBWFZxTmdJRUlBRWdOVWdOQUFzTElEa2dEeUFZSUVjZ0xTQllRUUZCQUVFQUVDcEZEUVlMSUMwaUdDQWtSdzBBQ3dzZ0NVR1lBV29oQ1NBeVFRRjBJZ0VnTzBFQmRFRUJjaUlISUFFZ0Iwc2JJZ0VnSkNBQklDUkpHeUUrSUNrZ0RFRUZkQ0lCUVJCeUlnWnFJRG9nTDBFRmRDSUlhaUFNSUM5SUlnY2JJVVFnQmlBbGFpQUlJRUJxSUFjYklVVWdCaUFoYWlBSUlFRnFJQWNiSVVZZ0JpQVNhaUFJSUVKcUlBY2JJVWdnSHlBV1FRRnJJQllnSDBvYklRMGdMMEVBU2lJUUlCWkJBVXB5SVVrZ0FTQVNhaUlkSURkQkJIUnFJVW9nS1NBV1FRTjBJZ1pCQ0dzaU1rRUFJQlpCQUV3YlFRSjBJZ2hxSVVzZ0NDQWxhaUZSSUFnZ0lXb2hVaUFJSUJKcUlWTWdLVUVBSUM5QkEzUWlDRUVJYXlJN0lCQWJRUUowSWhCcUlWUWdFQ0FsYWlGVklCQWdJV29oVmlBUUlCSnFJVmNnRWtFRUlEZEJBblJyUVFKMGFpQVhRUVYwYWlGWUlDTWdMeUFqSUM5SUd5RVFJQXhCQVdvaEZDQVNJQnhCQVhRaUVTQXFRUUYwUVFGeUloTWdFU0FUU1JzaVdVRUVkR29oV2lBQklDbHFJVFFnQVNBbGFpRWNJQUVnSVdvaExTQXBJQlpCQlhRaUFXb2hXeUFHUVFGcklUMGdBU0FsYWlGY0lBWkJBbXNoTVNBQklDRnFJVjhnQmtFRGF5RTFJQUVnRW1vaFlDQUdRUVJySVRZZ0NFRUZheUZoSUFoQkJtc2hZaUFJUVFkcklXTWdGa1VnTDBFQlJuRWhaQ0FwSURKQkFuUWlBV29oWmlBQklDVnFJV2NnQVNBaGFpRm9JQUVnRW1vaGFTQXBJQWhCQkdzaWFrRUNkQ0lCYWlGcklBRWdKV29oYkNBQklDRnFJVzBnQVNBU2FpRnVJRG9nRENBdklBY2JRUVYwSWdGcUlXOGdBU0JBYWlFVElBRWdRV29oR0NBQklFSnFJWEFnS1NBN1FRSjBJZ0ZxSVhFZ0FTQWxhaUZ5SUFFZ0lXb2hjeUFCSUJKcUlYUURRQUpBQWtBQ2Z3SkFJQThpRVNCSFNRUkFJRGtnRHlBTVFRUWdSeUFQYXlJQklBRkJCRThiSUE5cUlnOGdJeUJLUVFGQkNCQWlJRGtnRVNCUUlBOGdUeUJZUVFGQkNCQWlJRGRGQkVBZ1NVVU5CU0FNSUNOT0RRUUNmeUFNUVFCS0JFQWdjQ2dDQUNFSElCTWhCaUFZSVFnZ2J3d0JDeUFTS0FJUUlRY2dERUVBU0EwRElEZ2hCaUE4SVFnZ1Rnc2dIU0FkS0FJQUlBY2dTQ2dDQUdwQkFtcEJBblZyTmdJQUlDMGdMU2dDQUNBSUtBSUFJRVlvQWdCcVFRSnFRUUoxYXpZQ0FDQWNJQndvQWdBZ0JpZ0NBQ0JGS0FJQWFrRUNha0VDZFdzMkFnQWdSQ2dDQUNFSEtBSUFEQU1MSUdRRVFDQVNJQklvQWdCQkFtMDJBZ0FnRWlBU0tBSUVRUUp0TmdJRUlDVWdKU2dDQUVFQ2JUWUNBQ0FwSUNrb0FnQkJBbTAyQWdBTUJRc2dJeUFNSWdkS0JFQURRQ0FIUVFOMElRWUNRQUpBSUFkQkFFZ0VRQ0FIUVg5R0RRRWdFaUFHUVFKMGFpSUJJQUg5QUFJUUlCTDlBQUlBUVFIOXF3SDlEQUlBQUFBQ0FBQUFBZ0FBQUFJQUFBRDlyZ0ZCQXYyc0FmMnhBZjBMQWhBTUFnc2dFaUFHUVFKMGFpSUJLQUlRSVFnZ0x5QUhRUUZxSWlCTUJFQWdBU0FJSUJJZ0JpQTdJQWNnTDBnaUNCdEJBblJxS0FJQUlIUW9BZ0JxUVFKcVFRSjFhellDRUNBQklBRW9BaFFnRWlBR1FRRnlJR01nQ0J0QkFuUnFLQUlBSUhNb0FnQnFRUUpxUVFKMWF6WUNGQ0FCSUFFb0FoZ2dFaUFHUVFKeUlHSWdDQnRCQW5ScUtBSUFJSElvQWdCcVFRSnFRUUoxYXpZQ0dDQUJJQUVvQWh3Z0VpQUdRUU55SUdFZ0NCdEJBblJxS0FJQUlIRW9BZ0JxUVFKcVFRSjFhellDSEF3Q0N5QUJJQUZCRkdvZ0NQMFIvVllDQUFFZ0FVRVlhdjFkQWdEOURRQUJBZ01FQlFZSEVCRVNFeFFWRmhjZ0FmMEFBZ0FnRWlBZ1FRVjBhdjBBQWdEOXJnSDlEQUlBQUFBQ0FBQUFBZ0FBQUFJQUFBRDlyZ0ZCQXYyc0FmMnhBZjBMQWhBTUFRc2dRaUJDS0FJQUlCSW9BZ0FnVnlnQ0FHcEJBbXBCQW5Wck5nSUFJRUVnUVNnQ0FDQVNLQUlFSUZZb0FnQnFRUUpxUVFKMWF6WUNBQ0JBSUVBb0FnQWdKU2dDQUNCVktBSUFha0VDYWtFQ2RXczJBZ0FnT2lBNktBSUFJQ2tvQWdBZ1ZDZ0NBR3BCQW1wQkFuVnJOZ0lBQ3lBSFFRRnFJZ2NnSTBjTkFBc0xJQjhnRnlJSFRBMEVBMEFnQjBFRGRDRUdBa0FnQjBFQVNBUkFJQklnQmtFQ2RHb2lBU0FTL1FBQ0VFRUIvYXNCUVFIOXJBRWdBZjBBQWdEOXJnSDlDd0lBREFFTElBY0VRQ0FTSUFaQkFuUWlDR29pQVNBQktBSUFJR0FnQVNBSElCWktJaUFiUVJCcktBSUFJQklnQmtFRWNpQTJJQWNnRmtnaUtodEJBblJxS0FJQWFrRUJkV28yQWdBZ0FTQUJLQUlFSUY4Z0NDQWhhaUFnRzBFUWF5Z0NBQ0FTSUFaQkJYSWdOU0FxRzBFQ2RHb29BZ0JxUVFGMWFqWUNCQ0FCSUFFb0FnZ2dYQ0FJSUNWcUlDQWJRUkJyS0FJQUlCSWdCa0VHY2lBeElDb2JRUUowYWlnQ0FHcEJBWFZxTmdJSUlBRWdBU2dDRENCYklBZ2dLV29nSUJ0QkVHc29BZ0FnRWlBR1FRZHlJRDBnS2h0QkFuUnFLQUlBYWtFQmRXbzJBZ3dNQVFzZ0VpQVNLQUlBSUJJb0FoQWdFa0VFSURZZ0J5QVdTQ0lCRzBFQ2RHb29BZ0JxUVFGMWFqWUNBQ0FTSUJJb0FnUWdFaWdDRkNBU1FRVWdOU0FCRzBFQ2RHb29BZ0JxUVFGMWFqWUNCQ0FsSUNVb0FnQWdFaWdDR0NBU1FRWWdNU0FCRzBFQ2RHb29BZ0JxUVFGMWFqWUNBQ0FwSUNrb0FnQWdFaWdDSENBU1FRY2dQU0FCRzBFQ2RHb29BZ0JxUVFGMWFqWUNBQXNnQjBFQmFpSUhJQjlIRFFBTERBUUxJQ3doRXlBa0lSWWdRMEVCYWlKRElCNUhEUVVNQmdzZ0hTQWRLQUlBSUFkQkFYUkJBbXBCQW5Wck5nSUFJQzBnTFNnQ0FDQThLQUlBUVFGMFFRSnFRUUoxYXpZQ0FDQWNJQndvQWdBZ09DZ0NBRUVCZEVFQ2FrRUNkV3MyQWdBZ1RpZ0NBQ0lIQ3lFQklEUWdOQ2dDQUNBQklBZHFRUUpxUVFKMWF6WUNBQ0FNSVFZZ0VDQVVJZ0VpQjBvRVFBTkFJQklnQVVFRmRHb2lCeUFIL1FBQ0FDQVNJQVpCQlhScS9RQUNFQ0FIL1FBQ0VQMnVBZjBNQWdBQUFBSUFBQUFDQUFBQUFnQUFBUDJ1QVVFQy9hd0IvYkVCL1FzQ0FDQUJJZ1pCQVdvaUFTQVFSdzBBQ3lBUUlRY0xJQWNnSTA0TkFBTkFJQWRCQTNRaUJrRUVjaUVnSUFjZ0wwZ2hDQUovSUFkQkFFd0VRQ0FTS0FJUUlTb2dCMEVBVGdSQUlCSWdCa0VDZENJd2FpSUJJQUVvQWdBZ0tpQVNJQ0FnYWlBSUcwRUNkQ0lCYWlnQ0FHcEJBbXBCQW5Wck5nSUFJQ0VnTUdvaUNDQUlLQUlBSUJJb0FoUWdBU0FoYWlnQ0FHcEJBbXBCQW5Wck5nSUFJQ1VnTUdvaUNDQUlLQUlBSUJJb0FoZ2dBU0FsYWlnQ0FHcEJBbXBCQW5Wck5nSUFJQklvQWh3Z0FTQXBhaWdDQUdwQkFtb01BZ3NnRWlBR1FRSjBJZ0ZxSWdnZ0NDZ0NBQ0FxUVFGMFFRSnFRUUoxYXpZQ0FDQUJJQ0ZxSWdnZ0NDZ0NBQ0FTS0FJVVFRRjBRUUpxUVFKMWF6WUNBQ0FCSUNWcUlnRWdBU2dDQUNBU0tBSVlRUUYwUVFKcVFRSjFhellDQUNBU0tBSWNRUUYwUVFKcURBRUxJQklnQnlBdklBZ2JRUU4wUVFSclFRSjBJZ0ZxS0FJQUlTb2dDRVVFUUNBU0lBWkJBblFpQ0dvaUlDQWdLQUlBSUNvZ2JpZ0NBR3BCQW1wQkFuVnJOZ0lBSUFnZ0lXb2lJQ0FnS0FJQUlBRWdJV29vQWdBZ2JTZ0NBR3BCQW1wQkFuVnJOZ0lBSUFnZ0pXb2lDQ0FJS0FJQUlBRWdKV29vQWdBZ2JDZ0NBR3BCQW1wQkFuVnJOZ0lBSUFFZ0tXb29BZ0FnYXlnQ0FHcEJBbW9NQVFzZ0VpQUdRUUowSWpCcUlnZ2dDQ2dDQUNBcUlCSWdJRUVDZENJSWFpZ0NBR3BCQW1wQkFuVnJOZ0lBSUNFZ01Hb2lJQ0FnS0FJQUlBRWdJV29vQWdBZ0NDQWhhaWdDQUdwQkFtcEJBblZyTmdJQUlDVWdNR29pSUNBZ0tBSUFJQUVnSldvb0FnQWdDQ0FsYWlnQ0FHcEJBbXBCQW5Wck5nSUFJQUVnS1dvb0FnQWdDQ0FwYWlnQ0FHcEJBbW9MSVFFZ0tTQUdRUUowYWlJR0lBWW9BZ0FnQVVFQ2RXczJBZ0FnQjBFQmFpSUhJQ05IRFFBTEN5QVhJQjlPRFFBZ0RTQVhJZ0VpQjBvRVFBTkFJQklnQVVFRmRHb2lCeUFIL1FBQ0lDQUgvUUFDQVAydUFVRUIvYXdCSUFmOUFBSVEvYTRCL1FzQ0VDQUJRUUZxSWdFZ0RVY05BQXNnRFNFSEN5QUhJQjlPRFFBRFFDQXBJQWRCQTNRaUFVRUVjaUlHUVFKMGFpSXFBbjhnQjBFQVNBUkFJQklvQWdBaEFTQUhRWDlIQkVBZ0VpQUdRUUowSWdacUlnZ2dDQ2dDQUNBQmFqWUNBQ0FHSUNGcUlnRWdBU2dDQUNBaEtBSUFhallDQUNBR0lDVnFJZ0VnQVNnQ0FDQWxLQUlBYWpZQ0FDQXBLQUlBREFJTElCSWdCa0VDZENJR2FpSUlJQWdvQWdBZ1V5Z0NBQ0FCYWtFQmRXbzJBZ0FnQmlBaGFpSUJJQUVvQWdBZ1VpZ0NBQ0FoS0FJQWFrRUJkV28yQWdBZ0JpQWxhaUlCSUFFb0FnQWdVU2dDQUNBbEtBSUFha0VCZFdvMkFnQWdTeWdDQUNBcEtBSUFha0VCZFF3QkN5QVNJQUVnTWlBSElCWklHMEVDZEdvaUFTZ0NBQ0VJSUJZZ0IwRUJhaUl3VEFSQUlCSWdCa0VDZENJR2FpSWdJQ0FvQWdBZ2FTZ0NBQ0FJYWtFQmRXbzJBZ0FnQmlBaGFpSUlJQWdvQWdBZ2FDZ0NBQ0FCS0FJRWFrRUJkV28yQWdBZ0JpQWxhaUlHSUFZb0FnQWdaeWdDQUNBQktBSUlha0VCZFdvMkFnQWdaaWdDQUNBQktBSU1ha0VCZFF3QkN5QVNJQVpCQW5RaUlHb2lCaUFHS0FJQUlBZ2dFaUF3UVFWMGFpSUdLQUlBYWtFQmRXbzJBZ0FnSUNBaGFpSUlJQWdvQWdBZ0JpZ0NCQ0FCS0FJRWFrRUJkV28yQWdBZ0lDQWxhaUlJSUFnb0FnQWdCaWdDQ0NBQktBSUlha0VCZFdvMkFnQWdCaWdDRENBQktBSU1ha0VCZFFzZ0tpZ0NBR28yQWdBZ0IwRUJhaUlISUI5SERRQUxDeUE1SUJFZ1dTQVBJRDRnV2tFQlFRUkJBQkFxRFFBTEN3d0NDeUFTRUJSQkFTRUhDeUE1SUN0QkVHc29BZ0FpQVNCZEtBSUFJZ1pySUN0QkRHc29BZ0FnWGlnQ0FDSUlheUFyUVFocktBSUFJZ2tnQm1zZ0swRUVheWdDQUNBSWF5QU9LQUkwUVFFZ0NTQUJheEFpSURrUUp3d0RDeUE1RUNjZ0VoQVVRUUFoQnd3Q0N5QTVFQ2RCQUNFSERBRUxRUUFoQnlBWEVDUWdEQkFVQ3lBblFTQnFKQUFnQncwQkRBVUxJQUVoQjBFQUlRejlEQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWhkaU1BUVVCcUloNGtBQUpBQW44Q1FDQWJLQUpBQkVBZ0RpZ0NIQ0lYSUE0b0FoaEJtQUZzYWlJQlFaZ0JheWdDQUNFWUlBRkJrQUZyS0FJQUlSMGdGeWdDQkNFTklCY29BZ3dnRnlnQ0FDRVJJQmNvQWdnaEZFRUJJUVlnR3lnQ0xDSWpLQUlFSVNZZ0IwRUJSZzBEUVFBaENDQUhRUUZySWc4aENTQVhJUUVDUUNBUFFRUlBCRUFnRDBFRGNTRUpJQUVnRDBGOGNTSU1RWmdCYkdvaEFVRUFJUVlEUUNCMklCY2dCa0dZQVd4cUlnZEI2QVJxSUFkQjBBTnFJQWRCdUFKcUlBZjlYQUtnQWYxV0FnQUIvVllDQUFMOVZnSUFBeUFIUWVBRWFpQUhRY2dEYWlBSFFiQUNhaUFIL1Z3Q21BSDlWZ0lBQWYxV0FnQUMvVllDQUFQOXNRSDl1UUVnQjBIc0JHb2dCMEhVQTJvZ0IwRzhBbW9nQi8xY0FxUUIvVllDQUFIOVZnSUFBdjFXQWdBRElBZEI1QVJxSUFkQnpBTnFJQWRCdEFKcUlBZjlYQUtjQWYxV0FnQUIvVllDQUFMOVZnSUFBLzJ4QWYyNUFTRjJJQVpCQkdvaUJpQU1SdzBBQ3lCMklIWWdkdjBOQ0FrS0N3d05EZzhBQVFJREFBRUNBLzI1QVNKMklIWWdkdjBOQkFVR0J3QUJBZ01BQVFJREFBRUNBLzI1QWYwYkFDRUlJQXdnRDBZTkFRc0RRQ0FJSUFFb0FxQUJJQUVvQXBnQmF5SUhJQWNnQ0VrYklnY2dBU2dDcEFFZ0FTZ0NuQUZySWdZZ0JpQUhTUnNoQ0NBQlFaZ0JhaUVCSUFsQkFXc2lDUTBBQ3d0QkFDRUdJQWhCLy8vL1Awc05BeUFlSUFoQkJYUWlSeEFjSWdFMkFpQWdBVVVOQXlBZUlBRTJBZ0FnRDBVRVFFRUJJUVlnQVJBVURBUUxJQTFySVEwZ0ZDQVJheUVNUVFJZ0prRUJkaUlCSUFGQkFrMGJJVVFnRGlnQ0pDSUhJQjFCSEd3aVhTQVlRUnhzSWw1cmFpRWtJQWNnSFVFWWJDSlJJQmhCR0d3aVVtdHFJUzRnQnlBZFFSUnNJbE1nR0VFVWJDSlVhMm9oTENBSElCMUJCSFFpVlNBWVFRUjBJbFpyYWlFdElBY2dIVUVNYkNKWElCaEJER3dpV0d0cUlTQWdCeUFkUVFOMElsa2dHRUVEZENKYWEyb2hPQ0FkSUJockloRkJCWFFoUlNBUlFRZHNJVTRnRVVFR2JDRkdJQkZCQld3aFR5QVJRUU5zSVZBZ0VVRUJkQ0ZJSUFjZ0VVRUNkQ0pBYWlFOElCSDlFU0Y2QTBBZ0hpQU5OZ0lJSUI0Z0RDSUJOZ0lvSUJjb0Fwd0JJUjhnRnlnQ3BBRWhLQ0FYS0FLZ0FTRXFJQmNvQXBnQklSb2dIa0VBTmdJNElCNGdBVFlDTkNBZVFRQTJBakFnSGlBYVFRSnZJaHcyQWl3Z0hpQXFJQnBySWd3Z0FXc2lGRFlDUENBZUlCUTJBaVFDUUNBbVFRSklJbHRGSUNnZ0gyc2lEVUVQUzNGRkJFQkJBQ0VHSUFjaENDQU5RUWhKRFFFZ0xDQUhJRkVnS2tFQ2RDSUJhaUJTSUJwQkFuUWlDV3ByYWlJK1NTQXVJQWNnQVNCVGFpQUpJRlJxYTJvaVFVbHhJQ1FnUVVrZ0xDQUhJQUVnWFdvZ0NTQmVhbXRxSWtKSmNYSWhYQ0E4SUFjZ0FTQlphaUFKSUZwcWEyb2lTVWtnT0NBSElCMGdLbW9nR0NBYWFtdEJBblJxSWtwSmNTQWdJRXBKSUR3Z0J5QUJJRmRxSUFrZ1dHcHJhaUpMU1hGeUlWOGdMU0JCU1NBc0lBY2dBU0JWYWlBSklGWnFhMm9pUTBseElDMGdQa2tnTGlCRFNYRnlJQzBnUWtrZ0pDQkRTWEZ5SVdBZ0xpQkNTU0FrSUQ1SmNTRmhJRGdnUzBrZ0lDQkpTWEVoWWlBSElBRWdDV3RxSVRJZ0RFRjhjU0VKSUI0b0FpQWlGRUVNYWlFN0lCUkJDR29oTkNBVVFRUnFJVDBnRkVFY2FpRVNJQlJCR0dvaElTQVVRUlJxSVNVZ0ZFRVFhaUVwSUJRZ0RFRUZkR29pRmtFUWF5RW5JQlpCRkdzaEx5QVdRUmhySVRFZ0ZrRWNheUU1SUJaQkJHc2hPaUFXUVFocklUVWdGa0VNYXlFMlFRQWhIQ0FNUWF3QlNTRmpJQXhCTEVraFpBTkFJQVloRUNBZVFTQnFJZ0VnQ0NBUlFRZ1FReUFCRUNZQ1FDQU1SUTBBSUJ3Z1JXd2hCa0VBSVFFQ1FBSkFJR01OQUNCaUlBZ2dPVWtnRkNBR0lESnFJamRKY1NBZ0lESkpJQWdnQmlCTGFpSVRTWEVnQ0NBR0lFcHFJaXRKSURJZ1BFdHhJQWdnQmlCSmFpSXdTU0F5SURoTGNYSnljaUFJSURGSklEY2dQVXR4Y2lBSUlDOUpJRFFnTjBseGNpQUlJQ2RKSURjZ08wdHhjaUJmY2lBVUlDdEpJQVlnUEdvaU55QTVTWEZ5SUNzZ1BVc2dNU0EzUzNGeUlDc2dORXNnTHlBM1MzRnlJQ3NnTzBzZ0p5QTNTM0Z5Y2cwQUlCUWdNRWtnQmlBNGFpSXJJRGxKY1EwQUlDc2dNVWtnTUNBOVMzRU5BQ0FySUM5SklEQWdORXR4RFFBZ01DQTdTeUFuSUN0TGNRMEFJQVlnSUdvaUt5QTVTU0FUSUJSTGNRMEFJQ3NnTVVrZ0V5QTlTM0VOQUNBcklDOUpJQk1nTkV0eERRQWdFeUE3U3lBbklDdExjUTBBQTBBZ0NDQUJRUUowYWlBVUlBRkJCWFJxSWhOQjRBQnFJQk5CUUdzZ0UwRWdhaUFUL1Z3Q0FQMVdBZ0FCL1ZZQ0FBTDlWZ0lBQS8wTEFnQWdDQ0FCSUJGcVFRSjBhaUFUUWVRQWFpQVRRY1FBYWlBVFFTUnFJQlA5WEFJRS9WWUNBQUg5VmdJQUF2MVdBZ0FEL1FzQ0FDQUlJQUVnU0dwQkFuUnFJQk5CNkFCcUlCTkJ5QUJxSUJOQktHb2dFLzFjQWdqOVZnSUFBZjFXQWdBQy9WWUNBQVA5Q3dJQUlBZ2dBU0JRYWtFQ2RHb2dFMEhzQUdvZ0UwSE1BR29nRTBFc2FpQVQvVndDRFAxV0FnQUIvVllDQUFMOVZnSUFBLzBMQWdBZ0FVRUVhaUlCSUFsSERRQUxJQWtpQVNBTVJnMEJDd05BSUFnZ0FVRUNkR29nRkNBQlFRVjBhaUlUS2dJQU9BSUFJQWdnQVNBUmFrRUNkR29nRXlvQ0JEZ0NBQ0FJSUFFZ1NHcEJBblJxSUJNcUFnZzRBZ0FnQ0NBQklGQnFRUUowYWlBVEtnSU1PQUlBSUFGQkFXb2lBU0FNUncwQUN3dEJBQ0VCQWtBZ1pBMEFJR0VnQmlBc2FpSVRJRFpKSUNrZ0JpQkJhaUlyU1hFZ1lDQUdJQzFxSWpBZ05ra2dLU0FHSUVOcUlqZEpjWElnSlNBM1NTQXdJRFZKY1hJZ0lTQTNTU0F3SURwSmNYSWdFaUEzU1NBV0lEQkxjWElnWEhKeUlDVWdLMGtnRXlBMVNYRnlJQ0VnSzBrZ0V5QTZTWEZ5SUJJZ0swa2dFeUFXU1hGeWNnMEFJQVlnTG1vaUV5QTJTU0FwSUFZZ1Btb2lLMGx4RFFBZ0pTQXJTU0FUSURWSmNRMEFJQ0VnSzBrZ0V5QTZTWEVOQUNBU0lDdEpJQk1nRmtseERRQWdCaUFrYWlJVElEWkpJQ2tnQmlCQ2FpSUdTWEVOQUNBVElEVkpJQVlnSlV0eERRQWdFeUE2U1NBR0lDRkxjUTBBSUJNZ0Zra2dCaUFTUzNFTkFBTkFJQWdnQVNCQWFrRUNkR29nRkNBQlFRVjBhaUlHUWZBQWFpQUdRZEFBYWlBR1FUQnFJQWI5WEFJUS9WWUNBQUg5VmdJQUF2MVdBZ0FEL1FzQ0FDQUlJQUVnVDJwQkFuUnFJQVpCOUFCcUlBWkIxQUJxSUFaQk5Hb2dCdjFjQWhUOVZnSUFBZjFXQWdBQy9WWUNBQVA5Q3dJQUlBZ2dBU0JHYWtFQ2RHb2dCa0g0QUdvZ0JrSFlBR29nQmtFNGFpQUcvVndDR1AxV0FnQUIvVllDQUFMOVZnSUFBLzBMQWdBZ0NDQUJJRTVxUVFKMGFpQUdRZndBYWlBR1Fkd0FhaUFHUVR4cUlBYjlYQUljL1ZZQ0FBSDlWZ0lBQXYxV0FnQUQvUXNDQUNBQlFRUnFJZ0VnQ1VjTkFBc2dDU0lCSUF4R0RRRUxBMEFnQ0NBQklFQnFRUUowYWlBVUlBRkJCWFJxSWdZcUFoQTRBZ0FnQ0NBQklFOXFRUUowYWlBR0tnSVVPQUlBSUFnZ0FTQkdha0VDZEdvZ0Jpb0NHRGdDQUNBSUlBRWdUbXBCQW5ScUlBWXFBaHc0QWdBZ0FVRUJhaUlCSUF4SERRQUxDeUFjUVFGcUlSd2dFRUVJYWlFR0lBZ2dSV29oQ0NBUVFROXFJQTFKRFFBTERBRUxJQTBnRFVFRGRpSUdJQ1lnQmlBbVNSc2lFMjVCZUhFaEZpQU5RWGh4SVFaQkFDRUpJQWNoQ0FOQVFUQVFHQ0lRUlEwRUlCQWdSeEFjSWpJMkFnQWdNa1VFUUNBakVDUWdFQkFVUVFBTUJnc2dFQ0FJTmdJb0lCQWdFVFlDSkNBUUlBdzJBaUFnRUNBVU5nSWNJQkJCQURZQ0dDQVFJQUUyQWhRZ0VFRUFOZ0lRSUJBZ0hEWUNEQ0FRSUFFMkFnZ2dFQ0FVTmdJRUlCQWdCaUFKSUJac2F5QVdJQWxCQVdvaUNTQVRSaHNpTWpZQ0xDQWpRUXdnRUJBeklBZ2dFU0F5YkVFQ2RHb2hDQ0FKSUJOSERRQUxJQ01RSkFzQ1FDQUdJQTFQRFFBZ0hrRWdhaUlCSUFnZ0VTQU5JQVpySWhRUVF5QUJFQ1lnREVVTkFDQWVLQUlnSWhZZ0trRUZkQ0FvUVFKMGFpQUdJQjlxUVFKMElCcEJCWFJxYTJwQklHc2hHaUFVUVh4eElSQWdRQ0FvSUFaQmYzTnFJQjlyYkNFcVFRQWhDUU5BSUJZZ0NVRUZkR29oSEVFQUlRRUNRQUpBSUJSQkJFa05BQ0FhSUFnZ0NVRUNkQ0lCYWlJR0lBZ2dBU0FxYW1vaUV5QUdJQk5KRzBzRVFFRUFJUUVnRmlBR0lCTWdCaUFUU3h0QkJHcEpEUUVMSUFuOUVTRjMvUXdBQUFBQUFRQUFBQUlBQUFBREFBQUFJWFpCQUNFQkEwQWdDQ0IySUhyOXRRRWdkLzJ1QVNKNC9Sc0FRUUowYWlBY0lBRkJBblJxL1FBQ0FDSjUvUjhBT0FJQUlBZ2dlUDBiQVVFQ2RHb2dlZjBmQVRnQ0FDQUlJSGo5R3dKQkFuUnFJSG45SHdJNEFnQWdDQ0I0L1JzRFFRSjBhaUI1L1I4RE9BSUFJSGI5REFRQUFBQUVBQUFBQkFBQUFBUUFBQUQ5cmdFaGRpQUJRUVJxSWdFZ0VFY05BQXNnRUNJQklCUkdEUUVMQTBBZ0NDQUJJQkZzSUFscVFRSjBhaUFjSUFGQkFuUnFLZ0lBT0FJQUlBRkJBV29pQVNBVVJ3MEFDd3NnQ1VFQmFpSUpJQXhIRFFBTEN5QWVJQTBnSGlnQ0NDSVFheUlUTmdJRUlCY29BcHdCSVFFZ0hpQVROZ0ljSUI3OURBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZ0FVRUNieUlxL1J3QUlCRDlIQUlpZHYwTEFnd0NRQ0JiUlNBTVFROUxjVVVFUUNBSElRRWdERUVJU1EwQklBMUJmbkVoT3lBTlFRRnhJVFFnRTBGK2NTRTlJQk5CQVhFaEVpQVFRWDV4SVNFZ0VFRUJjU0VsSUNnZ0gwRi9jMm9oTWlBZUtBSUFJaFFnS2tFRmRDSUdhaUVXSUJRZ0JtdEJJR29oSENBUUlCRnNRUUowSVNrZ0RDRUpBMEJCQUNFSVFRQWhCZ0pBQWtBQ1FDQVFEZ0lDQVFBTEEwQWdGaUFJUVFaMGFpSWFJQUVnQ0NBUmJFRUNkR29pSi8wQUFnRDlDd0lBSUJvZ0ovMEFBaEQ5Q3dJUUlCWWdDRUVCY2lJYVFRWjBhaUluSUFFZ0VTQWFiRUVDZEdvaUd2MEFBaEQ5Q3dJUUlDY2dHdjBBQWdEOUN3SUFJQWhCQW1vaENDQUdRUUpxSWdZZ0lVY05BQXNMSUNWRkRRQWdGaUFJUVFaMGFpSUdJQUVnQ0NBUmJFRUNkR29pQ1AwQUFnRDlDd0lBSUFZZ0NQMEFBaEQ5Q3dJUUN3SkFJQTBnRUVZTkFDQUJJQ2xxSVJwQkFDRUlRUUFoQmlBUUlESkhCRUFEUUNBY0lBaEJCblJxSWljZ0dpQUlJQkZzUVFKMGFpSXYvUUFDQVAwTEFnQWdKeUF2L1FBQ0VQMExBaEFnSENBSVFRRnlJaWRCQm5ScUlpOGdHaUFSSUNkc1FRSjBhaUluL1FBQ0VQMExBaEFnTHlBbi9RQUNBUDBMQWdBZ0NFRUNhaUVJSUFaQkFtb2lCaUE5UncwQUN3c2dFa1VOQUNBY0lBaEJCblJxSWdZZ0dpQUlJQkZzUVFKMGFpSUkvUUFDQVAwTEFnQWdCaUFJL1FBQ0VQMExBaEFMSUI0UUpnSkFJQTFGRFFCQkFDRUlRUUFoQmlBeUJFQURRQ0FCSUFnZ0VXeEJBblJxSWhvZ0ZDQUlRUVYwYWlJbi9RQUNBUDBMQWdBZ0dpQW4vUUFDRVAwTEFoQWdBU0FJUVFGeUlob2dFV3hCQW5ScUlpY2dGQ0FhUVFWMGFpSWEvUUFDRVAwTEFoQWdKeUFhL1FBQ0FQMExBZ0FnQ0VFQ2FpRUlJQVpCQW1vaUJpQTdSdzBBQ3dzZ05FVU5BQ0FCSUFnZ0VXeEJBblJxSWdZZ0ZDQUlRUVYwYWlJSS9RQUNBUDBMQWdBZ0JpQUkvUUFDRVAwTEFoQUxJQUZCSUdvaEFTQUpRUWhySWdsQkIwc05BQXNNQVF0QkFTQU1RUU4ySWdFZ1JDQUJJRVJKR3lJSklBbEJBVTBiSVJZZ0RDQUpia0Y0Y1NFVUlBeEJlSEVoSEVFQUlRWWdCeUVCQTBCQk1CQVlJZ2hGRFFRZ0NDQkhFQndpR2pZQ0FDQWFSUVJBSUNNUUpDQUlFQlJCQUF3R0N5QUlJQUUyQWlnZ0NDQVJOZ0lrSUFnZ0RUWUNJQ0FJSUJNMkFod2dDQ0IyL1FzQ0RDQUlJQkEyQWdnZ0NDQVROZ0lFSUFnZ0hDQUdJQlJzYXlBVUlBWkJBV29pQmlBSlJoc2lHallDTENBalFRMGdDQkF6SUFFZ0drRUNkR29oQVNBR0lCWkhEUUFMSUNNUUpBc0NRQ0FNUVFkeElnWkZEUUFnS2tFRmRDRWFJQjRvQWdBaENRSkFJQkJGRFFBZ0NTQWFhaUVVSUFaQkFuUWhGa0VBSVFnZ0VFRUJSd1JBSUJCQmZuRWhLa0VBSVJ3RFFDQVVJQWhCQm5ScUlBRWdDQ0FSYkVFQ2RHb2dGaEFXR2lBVUlBaEJBWElpTWtFR2RHb2dBU0FSSURKc1FRSjBhaUFXRUJZYUlBaEJBbW9oQ0NBY1FRSnFJaHdnS2tjTkFBc0xJQkJCQVhGRkRRQWdGQ0FJUVFaMGFpQUJJQWdnRVd4QkFuUnFJQllRRmhvTEFrQWdEU0FRUmcwQUlBa2dHbXRCSUdvaEZpQUJJQkFnRVd4QkFuUnFJUndnQmtFQ2RDRWFRUUFoQ0NBUUlDZ2dIMEYvYzJwSEJFQWdFMEYrY1NFUVFRQWhGQU5BSUJZZ0NFRUdkR29nSENBSUlCRnNRUUowYWlBYUVCWWFJQllnQ0VFQmNpSXFRUVowYWlBY0lCRWdLbXhCQW5ScUlCb1FGaG9nQ0VFQ2FpRUlJQlJCQW1vaUZDQVFSdzBBQ3dzZ0UwRUJjVVVOQUNBV0lBaEJCblJxSUJ3Z0NDQVJiRUVDZEdvZ0doQVdHZ3NnSGhBbUlBMUZEUUFnQmtFQ2RDRVFRUUFoQ0NBZlFRRnFJQ2hIQkVBZ0RVRitjU0VVUVFBaEJnTkFJQUVnQ0NBUmJFRUNkR29nQ1NBSVFRVjBhaUFRRUJZYUlBRWdDRUVCY2lJVElCRnNRUUowYWlBSklCTkJCWFJxSUJBUUZob2dDRUVDYWlFSUlBWkJBbW9pQmlBVVJ3MEFDd3NnRFVFQmNVVU5BQ0FCSUFnZ0VXeEJBblJxSUFrZ0NFRUZkR29nRUJBV0dnc2dGMEdZQVdvaEZ5QVBRUUZySWc4TkFBdEJBUXdDQzBFQklRWWdEaWdDSENJWElBZEJtQUZzYWlJYVFaZ0JheUk4S0FJQUlCcEJrQUZyS0FJQVJnMENJQnBCbEFGcklpb29BZ0FnR2tHTUFXc29BZ0JHRFFJZ0Z5Z0NCQ0VOSUJjb0Fnd2hFQ0FYS0FJQUlSRWdGeWdDQ0NFWUlBNG9Ba1FoRkNBT0tBSkFJUk1nRGlnQ1BDRVdJQTRvQWpnaEhTQU9JQWNRWlNJb1JRUkFRUUFoQmd3REN5QUhRUUZHQkVBZ0tDQWFRUkJyS0FJQUlnRWdQQ2dDQUNJSGF5QWFRUXhyS0FJQUlDb29BZ0FpQ0dzZ0drRUlheWdDQUNJSklBZHJJQnBCQkdzb0FnQWdDR3NnRGlnQ05FRUJJQWtnQVdzUUlpQW9FQ2NNQXd0QkFDRUlBa0FDUUNBSFFRRnJJZ2xCQkVrRVFDQUpJUVlnRnlFQkRBRUxJQWxCQTNFaEJpQVhJQWxCZkhFaUQwR1lBV3hxSVFFRFFDQjJJQmNnREVHWUFXeHFJZ2hCNkFScUlBaEIwQU5xSUFoQnVBSnFJQWo5WEFLZ0FmMVdBZ0FCL1ZZQ0FBTDlWZ0lBQXlBSVFlQUVhaUFJUWNnRGFpQUlRYkFDYWlBSS9Wd0NtQUg5VmdJQUFmMVdBZ0FDL1ZZQ0FBUDlzUUg5dVFFZ0NFSHNCR29nQ0VIVUEyb2dDRUc4QW1vZ0NQMWNBcVFCL1ZZQ0FBSDlWZ0lBQXYxV0FnQURJQWhCNUFScUlBaEJ6QU5xSUFoQnRBSnFJQWo5WEFLY0FmMVdBZ0FCL1ZZQ0FBTDlWZ0lBQS8yeEFmMjVBU0YySUF4QkJHb2lEQ0FQUncwQUN5QjJJSFlnZHYwTkNBa0tDd3dORGc4QUFRSURBQUVDQS8yNUFTSjJJSFlnZHYwTkJBVUdCd0FCQWdNQUFRSURBQUVDQS8yNUFmMGJBQ0VJSUFrZ0QwWU5BUXNEUUNBSUlBRW9BcUFCSUFFb0FwZ0JheUlKSUFnZ0NVc2JJZ2dnQVNnQ3BBRWdBU2dDbkFGcklna2dDQ0FKU3hzaENDQUJRWmdCYWlFQklBWkJBV3NpQmcwQUN3c0NRQ0FJUVlDQWdNQUFUdzBBSUI0Z0NFRUZkQkFjSWlZMkFpQWdKa1VOQUNBZUlDWTJBZ0FDUUNBSEJFQWdFQ0FOYXlFTklCZ2dFV3NoQ0NBbVFTQnFJVElnQjYwaGZTQVVyU0dBQVNBVHJTR0JBU0FXclNGK0lCMnRJWUlCSUE0b0FoUWlQYTBoZ3dGQ0FTRjhBMEFnSGlBTk5nSUlJQjRnQ0RZQ0tDQVhLQUtrQVNFSElCY29BcUFCSVFZZ0Z5Z0NuQUVoQVNBZUlCY29BcGdCSWdsQkFtOGlKRFlDTENBZUlBRkJBbThpT3pZQ0RDQWVJQVlnQ1dzaUl5QUlheUl1TmdJa0lCNGdCeUFCYXlJUUlBMXJJalEyQWdRZ0hTSVBJUWtnRmlJQklRd2dFeUlHSVJ3Z0ZDSUhJUkVDUUNCOElJTUJVUTBBSUQwZ2ZLZHJJUmhCQUNFTVFRQWhDU0FQQkVCQ2Z5QVlyU0ovaGtKL2hTQ0NBWHdnZjRpbklRa0xJQllFUUVKL0lCaXRJbitHUW4rRklINThJSCtJcHlFTUMwRUFJUWRCQUNFR0lCTUVRRUovSUJpdEluK0dRbitGSUlFQmZDQi9pS2NoQmdzZ0ZBUkFRbjhnR0swaWY0WkNmNFVnZ0FGOElIK0lweUVIQzBFQUlSeEJBQ0VQUVFFZ0dFRUJhM1FpSHlBZFNRUkFJQjBnSDJ1dFFuOGdHSzBpZjRaQ2Y0VjhJSCtJcHlFUEN5QVRJQjlMQkVBZ0V5QWZhNjFDZnlBWXJTSi9oa0ovaFh3Z2Y0aW5JUndMUVFBaEVVRUFJUUVnRmlBZlN3UkFJQllnSDJ1dFFuOGdHSzBpZjRaQ2Y0VjhJSCtJcHlFQkN5QVVJQjlORFFBZ0ZDQWZhNjFDZnlBWXJTSi9oa0ovaFh3Z2Y0aW5JUkVMUVg4Z0hDQVhLQUswQVNJWWF5SWZRUUFnSENBZlR4c2lIMEVFYWlJY0lCd2dIMGtiSWg4Z0xpQWZJQzVKR3lJZ1FYOGdCaUFYS0FMWUFTSWZheUljUVFBZ0JpQWNUeHNpQmtFRWFpSWNJQVlnSEVzYklnWWdDQ0FHSUFoSkd5STRJQ1FiUVFGMElnWWdPQ0FnSUNRYlFRRjBRUUZ5SWh3Z0JpQWNTeHNpSENBalNTRXVJQThnR0dzaUJrRUFJQVlnRDAwYklnWkJCR3NpRDBFQUlBWWdEMDhiSWl3Z0NTQWZheUlHUVFBZ0JpQUpUUnNpQmtFRWF5SUpRUUFnQmlBSlR4c2lMU0FrRzBFQmRDSVNJQzBnTENBa0cwRUJkRUVCY2lJaFNTRWxJQXdnRnlnQ3VBRWlDV3NpQmtFQUlBWWdERTBiSWdaQkJHc2lEMEVBSUFZZ0QwOGJJZ1loRHlBQklCY29BdHdCSWd4ckloaEJBQ0FCSUJoUEd5SUJRUVJySWhoQkFDQUJJQmhQR3lJQklSOUJmeUFISUFscklnbEJBQ0FISUFsUEd5SUhRUVJxSWdrZ0J5QUpTeHNpQnlBTklBY2dEVWtiSWdraEIwRi9JQkVnREdzaURFRUFJQXdnRVUwYklneEJCR29pRVNBTUlCRkxHeUlNSURRZ0RDQTBTUnNpR0NFUklEc0VRQ0FCSVE4Z0JpRWZJQWtoRVNBWUlRY0xJQndnSXlBdUd5RXVJQklnSVNBbEd5RWNJQjRnSURZQ1BDQWVJQ3cyQWpnZ0hpQTROZ0kwSUI0Z0xUWUNNQUpBSUJCQkNFa0VRRUVISVFoQkFDRU1EQUVMSURJZ0pFRUZkQ0lNYXlBc1FRWjBhaUUwSUF3Z0ptb2dMVUVHZEdvaEVpQUlJQ0JxSVNBZ0NDQXNhaUVzSUEwZ0dHb2hJU0FCSUExcUlTVWdKaUFjUVFWMGFpRXBRUUFoREFOQUFrQUNRQ0FKSUF4TElBeEJCM0lpQ0NBR1QzRU5BQ0FNSUNGSklBZ2dKVTl4RFFBZ0RFRUlhaUVNREFFTFFRZ2dFQ0FNYXlJSUlBaEJDRThiSVNkQkFDRUlBMEFnS0NBdElBZ2dER29pSkNBNElDUkJBV29pTHlBU0lBaEJBblFpTVdwQkVFRUFFQ0lnS0NBc0lDUWdJQ0F2SURFZ05HcEJFRUVBRUNJZ0NFRUJhaUlJSUNkSERRQUxJQjVCSUdvUUppQW9JQndnRENBdUlBeEJDR29pRENBcFFRaEJBVUVBRUNwRkRRVUxJQXhCQjNJaUNDQVFTUTBBQ3dzQ1FDQU1JQkJQRFFBZ0JpQUlUU0FKSUF4TGNVVUVRQ0FNSUEwZ0dHcFBEUUVnQ0NBQklBMXFTUTBCQ3lBZVFTQnFJUWhCQUNFa0lCQWdER3NpTFFSQUEwQWdLQ0FJS0FJUUlpQWdEQ0FrYWlJc0lBZ29BaFFnTEVFQmFpSTRJQ1JCQW5RaU5DQUlLQUlBSUFnb0FneEJCWFJxSUNCQkJuUnFha0VRUVFBUUlpQW9JQWdvQWhnaUlDQUlLQUlJSWhKcUlDd2dDQ2dDSENBU2FpQTRJQWdvQWdBZ0NDZ0NERUVGZEdzZ0lFRUdkR29nTkdwQklHcEJFRUVBRUNJZ0pFRUJhaUlrSUMxSERRQUxDeUFJRUNZZ0tDQWNJQXdnTGlBUUlDWWdIRUVGZEdwQkNFRUJRUUFRS2tVTkF3c2dIaUFZTmdJY0lCNGdBVFlDR0NBZUlBazJBaFFnSGlBR05nSVFJQndnTGtrRVFDQUhRUUYwSWdjZ0VVRUJkRUVCY2lJSUlBY2dDRXNiSWdjZ0VDQUhJQkJKR3lFSElESWdPMEVGZENJSWF5QUJRUVowYWlFTUlBZ2dKbW9nQmtFR2RHb2hDQ0FOSUJocUlSRWdBU0FOYWlFTklDWWdEMEVCZENJQklCOUJBWFJCQVhJaUR5QUJJQTlKR3lJUFFRVjBhaUVZQTBBZ0tDQWNJQVpCQ0NBdUlCeHJJZ0VnQVVFSVR4c2dIR29pQVNBSklBaEJBVUVRRUNJZ0tDQWNJQTBnQVNBUklBeEJBVUVRRUNJZ0hoQW1JQ2dnSENBUElBRWdCeUFZUVFGQkNFRUFFQ3BGRFFRZ0hFRUlhaUljSUM1SkRRQUxDeUFYUVpnQmFpRVhJQ01oQ0NBUUlRMGdmRUlCZkNKOElIMVNEUUFMQzBFQklRWWdLQ0FhUVJCcktBSUFJZ0VnUENnQ0FDSUhheUFhUVF4cktBSUFJQ29vQWdBaUNHc2dHa0VJYXlnQ0FDSUpJQWRySUJwQkJHc29BZ0FnQ0dzZ0RpZ0NORUVCSUFrZ0FXc1FJaUFvRUNjZ0poQVVEQVFMSUNnUUp5QW1FQlJCQUNFR0RBTUxJQ2dRSjBFQUlRWU1BZ3NnSXhBa1FRQUxJUVlnSGlnQ0lCQVVDeUFlUVVCckpBQWdCZzBBREFRTElCbEJ1QWhxSVJrZ0NrRTBhaUVLSUE1QnpBQnFJUTRnQzBFQmFpSUxJQlVvQWhCSkRRQUxJQnNvQWlBaEdTQWJLQUlVS0FJQUlSVUxBa0FnR1NnQ0VDSU9SUTBBSUJzb0FrUU5BQ0FWS0FJVUlnb29BaHdoQVFKQUFrQUNRQUpBQWtBZ0d5Z0NRQ0lHQkVBZ0ZTZ0NFQ0lMUVFOSkRRSUNRQ0FLS0FJWUlnY2dDaWdDWkVZRVFDQUhJQW9vQXJBQlJnMEJDeUF6UVFGQnhNNEFRUUFRRXd3SkN3SkFJQnNvQWhnb0FoZ2lDQ2dDSkNJSklBZ29BbGhIRFFBZ0NTQUlLQUtNQVVjTkFDQUJJQWRCbUFGc0lnaHFJZ0ZCakFGcktBSUFJQUZCbEFGcktBSUFheUFCUVpBQmF5Z0NBQ0FCUVpnQmF5Z0NBR3RzSWdFZ0NpZ0NhQ0FJYWlJSFFZd0JheWdDQUNBSFFaUUJheWdDQUdzZ0IwR1FBV3NvQWdBZ0IwR1lBV3NvQWdCcmJFY05BQ0FLS0FLMEFTQUlhaUlIUVl3QmF5Z0NBQ0FIUVpRQmF5Z0NBR3NnQjBHUUFXc29BZ0FnQjBHWUFXc29BZ0JyYkNBQlJnMENDeUF6UVFGQnhNNEFRUUFRRXd3SUN5QVZLQUlRSWd0QkEwa05BUUpBSUJzb0FoZ29BaGdpQnlnQ0pDSUlJQWNvQWxoSERRQWdDQ0FIS0FLTUFTSUpSdzBBSUFFZ0NFR1lBV3dpQjJvaUFTZ0NsQUVnQVNnQ2pBRnJJQUVvQXBBQklBRW9Bb2dCYTJ3aUFTQUhJQW9vQW1ocUlnY29BcFFCSUFjb0Fvd0JheUFIS0FLUUFTQUhLQUtJQVd0c1J3MEFJQW9vQXJRQklBbEJtQUZzYWlJSEtBS1VBU0FIS0FLTUFXc2dCeWdDa0FFZ0J5Z0NpQUZyYkNBQlJnMEJDeUF6UVFGQnhNNEFRUUFRRXd3SEN5QU9RUUpHQkVBZ0dTZ0M2Q3RGRFFVZ0MwRUNkQkFZSWd0RkRRY2dGU2dDRUNJSlJRMEVJQnNvQWtBRVFFRUFJUlVnQ1VFTFRRMERJQXBCSkdvaUNDQUxJQWxCQW5ScVNRUi9JQW9nQ1VITUFHeHFRU1JySUF0TEJVRUFDdzBESUFwQmlBSnFJUThnQ2tHOEFXb2hEQ0FLUWZBQWFpRVhJQW9nQ1VGOGNTSUdRY3dBYkdvaENrRUFJUTREUUNBTElBNUJBblJxSUE4Z0RrSE1BR3dpQjJvZ0J5QU1haUFISUJkcUlBY2dDR3I5WEFJQS9WWUNBQUg5VmdJQUF2MVdBZ0FEL1FzQ0FDQU9RUVJxSWc0Z0JrY05BQXNnQmlBSlJ3MEVEQVVMUVFBaEZRSkFJQWxCREVrRVFFRUFJUVlNQVFzZ0NrRTBhaUVJQWtBZ0N5QUtJQWxCekFCc2FrRVVhMDhOQUNBSUlBc2dDVUVDZEdwUERRQkJBQ0VHREFFTElBcEJtQUpxSVE4Z0NrSE1BV29oRENBS1FZQUJhaUVYSUFvZ0NVRjhjU0lHUWN3QWJHb2hDa0VBSVE0RFFDQUxJQTVCQW5ScUlBOGdEa0hNQUd3aUIyb2dCeUFNYWlBSElCZHFJQWNnQ0dyOVhBSUEvVllDQUFIOVZnSUFBdjFXQWdBRC9Rc0NBQ0FPUVFScUlnNGdCa2NOQUFzZ0JpQUpSZzBGQ3dKQUlBbEJBM0VpQjBVRVFDQUdJUTRNQVFzZ0JpRU9BMEFnQ3lBT1FRSjBhaUFLS0FJME5nSUFJQTVCQVdvaERpQUtRY3dBYWlFS0lCVkJBV29pRlNBSFJ3MEFDd3NnQmlBSmEwRjhTdzBFSUF0QkRHb2hCaUFMUVFocUlRZ2dDMEVFYWlFUEEwQWdDeUFPUVFKMElnZHFJQW9vQWpRMkFnQWdCeUFQYWlBS0tBS0FBVFlDQUNBSElBaHFJQW9vQXN3Qk5nSUFJQVlnQjJvZ0NpZ0NtQUkyQWdBZ0NrR3dBbW9oQ2lBT1FRUnFJZzRnQ1VjTkFBc01CQXNnR1NnQzBDc29BaFJCQVVZRVFDQUdCRUFnQ2lnQ0pDQUtLQUp3SUFvb0Fyd0JJQUVRYUF3R0N5QUtLQUkwSUFvb0FvQUJJQW9vQXN3QklBRVFhQXdGQ3lBR0JFQWdDaWdDSkNBS0tBSndJQW9vQXJ3QklBRVFad3dGQ3lBS0tBSTBJQW9vQW9BQklBb29Bc3dCSUFFUVp3d0VDeUEvSUFzMkFnQWdNMEVCUVlIUEFDQS9FQk1NQXd0QkFDRUdDd0pBSUFsQkEzRWlCMFVFUUNBR0lRNE1BUXNnQmlFT0EwQWdDeUFPUVFKMGFpQUtLQUlrTmdJQUlBNUJBV29oRGlBS1Fjd0FhaUVLSUJWQkFXb2lGU0FIUncwQUN3c2dCaUFKYTBGOFN3MEFJQXRCREdvaEJpQUxRUWhxSVFnZ0MwRUVhaUVQQTBBZ0N5QU9RUUowSWdkcUlBb29BaVEyQWdBZ0J5QVBhaUFLS0FKd05nSUFJQWNnQ0dvZ0NpZ0N2QUUyQWdBZ0JpQUhhaUFLS0FLSUFqWUNBQ0FLUWJBQ2FpRUtJQTVCQkdvaURpQUpSdzBBQ3dzZ0d5Z0NHQ2dDR0NnQ0lCb0NmeUFaS0FMb0t5RUhRUUFoRjBFQUlBbEJBM1FRR0NJT1JRMEFHZ0pBSUFGRkRRQWdDVVVOQUNBT0lBbEJBblJxSVJFZ0NVRjhjU0VOSUFsQkEzRWhHU0FKUVFGcklSQURRRUVBSVJWQkFDRUlJQkJCQTA4RVFBTkFJQTRnRlVFQ2RDSUdhaUFHSUF0cUtBSUFLZ0lBT0FJQUlBNGdCa0VFY2lJUGFpQUxJQTlxS0FJQUtnSUFPQUlBSUE0Z0JrRUljaUlQYWlBTElBOXFLQUlBS2dJQU9BSUFJQTRnQmtFTWNpSUdhaUFHSUF0cUtBSUFLZ0lBT0FJQUlCVkJCR29oRlNBSVFRUnFJZ2dnRFVjTkFBc0xRUUFoQ2lBWkJFQURRQ0FPSUJWQkFuUWlCbW9nQmlBTGFpZ0NBQ29DQURnQ0FDQVZRUUZxSVJVZ0NrRUJhaUlLSUJsSERRQUxDMEVBSVFZZ0J5RVZBMEFnRVNBR1FRSjBJaFJxSWdoQkFEWUNBRU1BQUFBQUlZUUJRUUFoQ2tFQUlROGdFRUVDU3dSQUEwQWdDQ0FWS2dJQUlBNGdDa0VDZEdvaURDb0NBSlFnaEFHU0lvUUJPQUlBSUFnZ0ZTb0NCQ0FNS2dJRWxDQ0VBWklpaEFFNEFnQWdDQ0FWS2dJSUlBd3FBZ2lVSUlRQmtpS0VBVGdDQUNBSUlCVXFBZ3dnRENvQ0RKUWdoQUdTSW9RQk9BSUFJQXBCQkdvaENpQVZRUkJxSVJVZ0QwRUVhaUlQSUExSERRQUxDMEVBSVF3Z0dRUkFBMEFnQ0NBVktnSUFJQTRnQ2tFQ2RHb3FBZ0NVSUlRQmtpS0VBVGdDQUNBS1FRRnFJUW9nRlVFRWFpRVZJQXhCQVdvaURDQVpSdzBBQ3dzZ0N5QVVhaUlJSUFnb0FnQWlDRUVFYWpZQ0FDQUlJSVFCT0FJQUlBWkJBV29pQmlBSlJ3MEFDeUFYUVFGcUloY2dBVWNOQUFzTElBNFFGRUVCQ3lBTEVCUkZEUUlMSUJzb0FoUW9BZ0FpRUNnQ0VFVUVRRUVCSVNJTUFnc2dHeWdDSUNnQzBDc2lGVUc0Q0dvaEZDQVZRYlFJYWlFVElCc29Ba1FoRVNBUUtBSVVJUWNnR3lnQ0dDZ0NHQ0VJUVFBaEZ3TkFBa0FnRVFSQUlCRWdGMEVDZEdvb0FnQkZEUUVMSUFjb0Fod2lBU0FJS0FJa1FaZ0JiR29oQ3dKL0lCc29Ba0JGQkVBZ0N5Z0NsQUVnQ3lnQ2pBRnJJUVlnQ3lnQ2tBRWdDeWdDaUFGcklRRkJBQ0VKUVRRTUFRc2dBU0FIS0FJWVFaZ0JiR29pQmtHUUFXc29BZ0FnQ3lnQ0NDQUxLQUlBYXlJQklBWkJtQUZyS0FJQWFtc2hDU0FMS0FJTUlBc29BZ1JySVFaQkpBc2hEeUFJS0FJWUlRc0NmeUFJS0FJZ0JFQkJBU0FMUVFGcmRDSUxRUUZySVE1QkFDQUxhd3dCQzBGL0lBdDBRWDl6SVE1QkFBc2hEU0FCUlEwQUlBWkZEUUFnQnlBUGFpZ0NBQ0VpSUJVb0FoUkJBVVlFUUNBVUlCZEJ1QWhzSWd0cUlSWWdDeUFUYWlFWUlBRkJBWEVoTXlBQlFRSjBJUjBnQVVGOGNTSVBRUUowSVNNZ0R2MFJJWGdnRGYwUklYWkJBQ0VNSUFGQkJFa2hId05BQWtBQ1FBSkFJQjhOQUNBWUlCMGdJbXBKSUJZZ0lrdHhEUUFnSWlBamFpRVpJQlg5Q1FLMENDRjVRUUFoQ3dOQUlDSWdDMEVDZEdvaUNpQjJJSGtnQ3YwQUFnRDlyZ0VpZWlCNC9iWUJJSG9nZHYwNS9WTDlDd0lBSUF0QkJHb2lDeUFQUncwQUN5QVBJZ3NnQVVZTkFnd0JDeUFpSVJsQkFDRUxDeUFMUVFGeUlRb2dNd1JBSUJrZ0RTQVZLQUswQ0NBWktBSUFhaUlMSUE0Z0N5QU9TQnNnQ3lBTlNCczJBZ0FnR1VFRWFpRVpJQW9oQ3dzZ0FTQUtSZzBBQTBBZ0dTQU5JQlVvQXJRSUlCa29BZ0JxSWdvZ0RpQUtJQTVJR3lBS0lBMUlHellDQUNBWklBMGdGU2dDdEFnZ0dTZ0NCR29pQ2lBT0lBb2dEa2diSUFvZ0RVZ2JOZ0lFSUJsQkNHb2hHU0FMUVFKcUlnc2dBVWNOQUFzTElCa2dDVUVDZEdvaElpQU1RUUZxSWd3Z0JrY05BQXNNQVFzZ0RxMGhmQ0FOckNHQUFVRUFJUXdEUUVFQUlRc0RRQ0FpQW44Z0RpQWlLZ0lBSW9RQlF3QUFBRTllRFFBYUlBMGdoQUZEQUFBQXoxME5BQm9nRFNBVk5BSzBDQUovSUlRQmtDS0VBWXREQUFBQVQxMEVRQ0NFQWFnTUFRdEJnSUNBZ0hnTHJId2lmU0I4SUh3Z2ZWVWJweUI5SUlBQlV4c0xOZ0lBSUNKQkJHb2hJaUFMUVFGcUlnc2dBVWNOQUFzZ0lpQUpRUUowYWlFaUlBeEJBV29pRENBR1J3MEFDd3NnQjBITUFHb2hCeUFWUWJnSWFpRVZJQWhCTkdvaENFRUJJU0lnRjBFQmFpSVhJQkFvQWhCSkRRQUxEQUVMUVFBaElpQUZRUUZCaHhwQkFCQVRDeUEvUVJCcUpBQWdJa1VFUUNCTkVEUWdBQ0FBS0FJSVFZQ0FBbkkyQWdnZ0JVRUJRWmJaQUVFQUVCTU1BUXNDUUNBQ1JRMEFBbjhnQWlFSFFRQWhCZ0pBSUFBb0F1Z0JJZ3BCQVJCZElnRkJmMFlOQUNBQklBTkxEUUJCQVNBS0tBSVlJZ0VvQWhCRkRRRWFJQUVvQWhnaER5QUtLQUlVS0FJQUtBSVVJUmNEUUNBUEtBSVlJZ0ZCQjNFaEFpQUJRUU4ySVFNZ0Z5Z0NIQ0lHSUE4b0FpUkJtQUZzYWlFQkFuOGdDaWdDUUFSQUlBWWdGeWdDR0VHWUFXeHFJZ1pCa0FGcktBSUFJQUVvQWdnZ0FTZ0NBR3NpQ0NBR1FaZ0JheWdDQUdwcklRd2dBU2dDRENBQktBSUVheUVPUVNRTUFRc2dBU2dDbEFFZ0FTZ0NqQUZySVE0Z0FTZ0NrQUVnQVNnQ2lBRnJJUWhCQUNFTVFUUUxJQmRxS0FJQUlRRUNRQUpBQWtBQ1FBSkFRUVFnQXlBQ1FRQkhhaUlDSUFKQkEwWWJRUUZyRGdRQkFnUUFCQXNnRGtVTkF5QUlJQXhxSVFZZ0NFRUNkQ0VDSUE1QkJFOEVRQ0FPUVh4eElRdEJBQ0VJQTBBZ0J5QUJJQUlRRmlFSElBRWdCa0VDZENJRGFpSUpJQU5xSWd3Z0Eyb2lGU0FEYWlFQklBSWdCMm9nQ1NBQ0VCWWdBbW9nRENBQ0VCWWdBbW9nRlNBQ0VCWWdBbW9oQnlBSVFRUnFJZ2dnQzBjTkFBc0xRUUFoQ0NBT1FRTnhJZ05GRFFNRFFDQUhJQUVnQWhBV0lRY2dBU0FHUVFKMGFpRUJJQUlnQjJvaEJ5QUlRUUZxSWdnZ0EwY05BQXNNQXdzZ0RrVWdDRVZ5SVFJZ0R5Z0NJRVVOQVNBQ0RRSWdDRUVDZENFVklBaEJmSEVpQTBFQ2RDRVpRUUFoQ1FOQUFrQUNRQUpBSUFoQkJFa05BQ0FCSUFjZ0NHcEpJQUVnRldvZ0IwdHhEUUFnQXlBSGFpQUJJQmxxSVFaQkFDRUxBMEFnQnlBTGFpQUJJQXRCQW5ScS9RQUNBUDBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBUDBOQUFRSURBQUFBQUFBQUFBQUFBQUFBUDFhQUFBQUlBdEJCR29pQ3lBRFJ3MEFDeUVISUFNaUFpQUlSZzBDREFFTElBRWhCa0VBSVFJTFFRQWhDeUFJSUFJaUFXdEJCM0VpRFFSQUEwQWdCeUFHS0FJQU9nQUFJQUZCQVdvaEFTQUhRUUZxSVFjZ0JrRUVhaUVHSUF0QkFXb2lDeUFOUncwQUN3c2dBaUFJYTBGNFN3MEFBMEFnQnlBR0tBSUFPZ0FBSUFjZ0JpZ0NCRG9BQVNBSElBWW9BZ2c2QUFJZ0J5QUdLQUlNT2dBRElBY2dCaWdDRURvQUJDQUhJQVlvQWhRNkFBVWdCeUFHS0FJWU9nQUdJQWNnQmlnQ0hEb0FCeUFIUVFocUlRY2dCa0VnYWlFR0lBRkJDR29pQVNBSVJ3MEFDd3NnQmlBTVFRSjBhaUVCSUFsQkFXb2lDU0FPUncwQUN3d0NDeUFPUlNBSVJYSWhBaUFQS0FJZ0JFQWdBZzBDSUFoQkFuUWhGU0FJUVFGMElSa2dDRUY4Y1NJRFFRSjBJUTBnQTBFQmRDRVFRUUFoQ1FOQUFrQUNRQUpBSUFoQkJFa05BQ0FCSUFjZ0dXcEpJQUVnRldvZ0IwdHhEUUFnQVNBTmFpRUdJQWNnRUdwQkFDRUxBMEFnQnlBTFFRRjBhaUFCSUF0QkFuUnEvUUFDQVAwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQVAwTkFBRUVCUWdKREEwQUFRQUJBQUVBQWYxYkFRQUFJQXRCQkdvaUN5QURSdzBBQ3lFSElBTWlBaUFJUmcwQ0RBRUxJQUVoQmtFQUlRSUxRUUFoQ3lBSUlBSWlBV3RCQjNFaUVRUkFBMEFnQnlBR0tBSUFPd0VBSUFGQkFXb2hBU0FIUVFKcUlRY2dCa0VFYWlFR0lBdEJBV29pQ3lBUlJ3MEFDd3NnQWlBSWEwRjRTdzBBQTBBZ0J5QUdLQUlBT3dFQUlBY2dCaWdDQkRzQkFpQUhJQVlvQWdnN0FRUWdCeUFHS0FJTU93RUdJQWNnQmlnQ0VEc0JDQ0FISUFZb0FoUTdBUW9nQnlBR0tBSVlPd0VNSUFjZ0JpZ0NIRHNCRGlBSFFSQnFJUWNnQmtFZ2FpRUdJQUZCQ0dvaUFTQUlSdzBBQ3dzZ0JpQU1RUUowYWlFQklBbEJBV29pQ1NBT1J3MEFDd3dDQ3lBQ0RRRWdDRUVDZENFVklBaEJBWFFoR1NBSVFYeHhJZ05CQW5RaERTQURRUUYwSVJCQkFDRUpBMEFDUUFKQUFrQWdDRUVFU1EwQUlBRWdCeUFaYWtrZ0FTQVZhaUFIUzNFTkFDQUJJQTFxSVFZZ0J5QVFha0VBSVFzRFFDQUhJQXRCQVhScUlBRWdDMEVDZEdyOUFBSUEvUXdBQUFBQUFBQUFBQUFBQUFBQUFBQUEvUTBBQVFRRkNBa01EUUFCQUFFQUFRQUIvVnNCQUFBZ0MwRUVhaUlMSUFOSERRQUxJUWNnQXlJQ0lBaEdEUUlNQVFzZ0FTRUdRUUFoQWd0QkFDRUxJQWdnQWlJQmEwRUhjU0lSQkVBRFFDQUhJQVlvQWdBN0FRQWdBVUVCYWlFQklBZEJBbW9oQnlBR1FRUnFJUVlnQzBFQmFpSUxJQkZIRFFBTEN5QUNJQWhyUVhoTERRQURRQ0FISUFZb0FnQTdBUUFnQnlBR0tBSUVPd0VDSUFjZ0JpZ0NDRHNCQkNBSElBWW9BZ3c3QVFZZ0J5QUdLQUlRT3dFSUlBY2dCaWdDRkRzQkNpQUhJQVlvQWhnN0FRd2dCeUFHS0FJY093RU9JQWRCRUdvaEJ5QUdRU0JxSVFZZ0FVRUlhaUlCSUFoSERRQUxDeUFHSUF4QkFuUnFJUUVnQ1VFQmFpSUpJQTVIRFFBTERBRUxJQUlOQUNBSVFRSjBJUlVnQ0VGOGNTSURRUUowSVJsQkFDRUpBMEFDUUFKQUFrQWdDRUVFU1EwQUlBRWdCeUFJYWtrZ0FTQVZhaUFIUzNFTkFDQURJQWRxSUFFZ0dXb2hCa0VBSVFzRFFDQUhJQXRxSUFFZ0MwRUNkR3I5QUFJQS9Rd0FBQUFBQUFBQUFBQUFBQUFBQUFBQS9RMEFCQWdNQUFBQUFBQUFBQUFBQUFBQS9Wb0FBQUFnQzBFRWFpSUxJQU5IRFFBTElRY2dBeUlDSUFoR0RRSU1BUXNnQVNFR1FRQWhBZ3RCQUNFTElBZ2dBaUlCYTBFSGNTSU5CRUFEUUNBSElBWW9BZ0E2QUFBZ0FVRUJhaUVCSUFkQkFXb2hCeUFHUVFScUlRWWdDMEVCYWlJTElBMUhEUUFMQ3lBQ0lBaHJRWGhMRFFBRFFDQUhJQVlvQWdBNkFBQWdCeUFHS0FJRU9nQUJJQWNnQmlnQ0NEb0FBaUFISUFZb0FndzZBQU1nQnlBR0tBSVFPZ0FFSUFjZ0JpZ0NGRG9BQlNBSElBWW9BaGc2QUFZZ0J5QUdLQUljT2dBSElBZEJDR29oQnlBR1FTQnFJUVlnQVVFSWFpSUJJQWhIRFFBTEN5QUdJQXhCQW5ScUlRRWdDVUVCYWlJSklBNUhEUUFMQ3lBWFFjd0FhaUVYSUE5Qk5Hb2hEMEVCSVFZZ2RVRUJhaUoxSUFvb0FoZ29BaEJKRFFBTEN5QUdDMFVOQVNCTktBTGNLeUlCUlEwQUlBRVFGQ0JOUWdBM0F0d3JDeUFBSUFBdEFGeEIvZ0Z4T2dCY0lBQWdBQ2dDQ0VIL2ZuRTJBZ2hCQVNGbElBUXBBd2dpZkZBRWZrSUFCU0I4SUFRcEF6aDlDMUFnQUNnQ0NDSUJRY0FBUm5FTkFDQUJRWUFDUmcwQUlBUWdURUVLYWtFQ0lBVVFIVUVDUndSQUlBVkJBVUVDSUFBb0F0QUJHMEdERTBFQUVCTWdBQ2dDMEFGRklXVU1BUXNnVEVFS2FpQk1RUXhxUVFJUUZTQk1LQUlNSWdGQmtQOERSZzBBSUFGQjJmOERSZ1JBSUFCQmdBSTJBZ2dnQUVFQU5nTGtBUXdCQ3lBRUtRTUlJbnhRQkg1Q0FBVWdmQ0FFS1FNNGZRdFFCRUFnQUVIQUFEWUNDQ0FGUVFKQnZzRUFRUUFRRXd3QkMwRUFJV1VnQlVFQlFjM0FBRUVBRUJNTElFeEJFR29rQUNCbEN3c0FJQUFFUUNBQUVCUUxDN1FCQVFGL0lBQW9BZ3hGQkVBZ0FpQUFLQUlrSUFFUkF3QVBDd0pBUVFnUUdDSURSUTBBSUFNZ0FqWUNCQ0FESUFFMkFnQkJDQkFZSWdGRkJFQWdBeEFVRHdzZ0FTQUROZ0lBSUFBZ0FDZ0NCRUhrQUd3aUFqWUNLQU5BSUFBb0FoZ2dBa29OQUFzZ0FTQUFLQUlVTmdJRUlBQWdBVFlDRkNBQUlBQW9BaGhCQVdvMkFoZ2dBQ2dDSENJQlJRMEFJQUVvQWdCQkFEWUNDQ0FBSUFFb0FnUTJBaHdnQUNBQUtBSWdRUUZyTmdJZ0lBRVFGQXNMK2dJQkJIOENRQ0FBUlEwQUlBQW9BcXdvSWdFRVFDQUFLQUtvS0NJQ0JFQkJBQ0VCQTBBZ0FDZ0NyQ2dnQVVFRGRHb29BZ0FpQXdSQUlBTVFGQ0FBS0FLb0tDRUNDeUFCUVFGcUlnRWdBa2tOQUFzZ0FDZ0NyQ2doQVFzZ0FFRUFOZ0tvS0NBQkVCUWdBRUVBTmdLc0tBc2dBQ2dDdENnaUFRUkFJQUVRRkNBQVFRQTJBclFvQ3lBQUtBTFFLeUlCQkVBZ0FSQVVJQUJCQURZQzBDc0xJQUFvQXV3cklnRUVRQ0FCRUJRZ0FFRUFOZ0xzS3dzZ0FDZ0M2Q3NpQVFSQUlBRVFGQ0FBUVFBMkF1Z3JDeUFBS0FMOEt5SUJCRUFnQVJBVUlBQkJBRFlDaEN3Z0FFSUFOd0w4S3dzZ0FDZ0M4Q3NpQVFSQUlBQW9BdlFySWdNRWYwRUFJUUlEUUNBQktBSU1JZ1FFUUNBRUVCUWdBVUVBTmdJTUlBQW9BdlFySVFNTElBRkJGR29oQVNBQ1FRRnFJZ0lnQTBrTkFBc2dBQ2dDOENzRklBRUxFQlFnQUVFQU5nTHdLd3NnQUNnQzVDc2lBUVJBSUFFUUZDQUFRUUEyQXVRckN5QUFLQUxjS3lJQlJRMEFJQUVRRkNBQVFnQTNBdHdyQ3d1d0J3SUxmd0YrSUFBb0FoQWlDRUVnVHdSQUlBQXBBd2luRHdzQ1FDQUFLQUlVSWdOQkJFNEVRQ0FBS0FJQUlnSkJBMnNvQWdBaEFTQUFJQU5CQkdzaUF6WUNGQ0FBSUFKQkJHczJBZ0FNQVFzZ0EwRUFUQVJBREFFTElBTkJBWEVnQUNnQ0FDRUNBa0FnQTBFQlJnUkFRUmdoQkF3QkN5QURRZjcvLy84SGNTRUpRUmdoQkFOQUlBQWdBa0VCYXlJR05nSUFJQUl0QUFBZ0FDQUNRUUpySWdJMkFnQWdBQ0FEUVFGck5nSVVJQVl0QUFBaEJpQUFJQU5CQW1zaUF6WUNGQ0FFZENBQmNpQUdJQVJCQ0d0MGNpRUJJQVJCRUdzaEJDQUZRUUpxSWdVZ0NVY05BQXNMQkVBZ0FDQUNRUUZyTmdJQUlBSXRBQUFnQUNBRFFRRnJOZ0lVSUFSMElBRnlJUUVMUVFBaEF3c2dBQ2dDR0NFQ0lBQWdBVUgvQVhFaUNVR1BBVXMyQWhnZ0FFRUhRUWdnQVVHQWdJRDRCM0ZCZ0lDQStBZEdHMEVJSUFJYklnSkJDRUVIUVFnZ0FVR0FnUHdEY1VHQWdQd0RSaHNnQVVILy8vLy9lRTBiYWlJRVFRaEJCMEVJSUFGQmdQNEJjVUdBL2dGR0d5QUJRUkIyUWY4QmNTSUZRWThCVFJ0cUlnWkJDRUVIUVFnZ0FVSC9BSEZCL3dCR0d5QUJRUWgyUWY4QmNTSUhRWThCVFJzZ0NHcHFJZ28yQWhBZ0FDQUFLUU1JSUFVZ0FuUWdBVUVZZG5JZ0J5QUVkSElnQ1NBR2RIS3RJQWl0aG9RaUREY0RDQ0FLUVI5TkJFQUNRQ0FEUVFST0JFQWdBQ2dDQUNJQ1FRTnJLQUlBSVFFZ0FDQURRUVJyTmdJVUlBQWdBa0VFYXpZQ0FBd0JDeUFEUVFCTUJFQkJBQ0VCREFFTElBTkJBWEVnQUNnQ0FDRUNBa0FnQTBFQlJnUkFRUmdoQkVFQUlRRU1BUXNnQTBIKy8vLy9CM0VoQmtFWUlRUkJBQ0VCUVFBaEJRTkFJQUFnQWtFQmF5SUhOZ0lBSUFJdEFBQWdBQ0FDUVFKcklnSTJBZ0FnQUNBRFFRRnJOZ0lVSUFjdEFBQWhCeUFBSUFOQkFtc2lBellDRkNBRWRDQUJjaUFISUFSQkNHdDBjaUVCSUFSQkVHc2hCQ0FGUVFKcUlnVWdCa2NOQUFzTFJRMEFJQUFnQWtFQmF6WUNBQ0FDTFFBQUlBQWdBMEVCYXpZQ0ZDQUVkQ0FCY2lFQkN5QUFJQUZCL3dGeElnSkJqd0ZMTmdJWUlBQkJDRUVIUVFnZ0FVR0FnSUQ0QjNGQmdJQ0ErQWRHR3lBSlFZOEJUUnNpQTBFSVFRZEJDQ0FCUVlDQS9BTnhRWUNBL0FOR0d5QUJRZi8vLy85NFRSdHFJZ1JCQ0VFSFFRZ2dBVUdBL2dGeFFZRCtBVVliSUFGQkVIWkIvd0Z4SWdWQmp3Rk5HMm9pQ0VFSVFRZEJDQ0FCUWY4QWNVSC9BRVliSUFGQkNIWkIvd0Z4SWdsQmp3Rk5HeUFLYW1vMkFoQWdBQ0FGSUFOMElBRkJHSFp5SUFrZ0JIUnlJQUlnQ0hSeXJTQUtyWVlnRElRaUREY0RDQXNnREtjTHdSUUNHMzhHZXlBQUtBSUlJZ29nQUNnQ0JHb2hDQUpBSUFBb0FneEZCRUFnQ0VFQ1NBMEJJQU5CQUV3TkFTQUFLQUlBSWdVZ0NFRUVheUlHUVFGMklneEJBblFpQ1NBQklBcEJBblJxSWdjZ0EwRUNkQ0lFYW1wQkJHcEpJQVVnREVFRGRHcEJDR29pQUNBSFFRUnFTM0VnQlNBQklBUnFJQWxxUVFScVNTQUJRUVJxSUFCSmNYSWhFaUFJUVFSSkloUWdBa0VCUjNJaEZTQUNRUUZHSUFaQkJVdHhJUllnQ0VIOC8vLy9CM0VoRXlBSVFRRnhJUmNnQ2tFQmFpRVBJQWhCQTNFaEVTQUJJQVZySVJnZ0JTQUlRUUowYWlFWklBVWdDRUVCYXlJQVFRSjBhaUVhSUF4QkFXb2lHMEY4Y1NJUVFRRjBJUXNnQWlBS2JFRUNkQ0VjSUFCQkFYWWdBbXhCQW5RaEhRTkFJQUVvQWdBZ0FTQWNhaWdDQUNJSlFRRnFRUUYxYXlFSEFrQWdGQVJBSUFraEJFRUFJUVlNQVF0QkFDRUdBa0FDZjBFQUlCWkZEUUFhUVFBZ0VnMEFHaUFKL1JFaElDQUgvUkVoSC8wTUFBQUFBQUlBQUFBRUFBQUFCZ0FBQUNFalFRQWhBQU5BSUFFZ0FFRUNkR3I5QUFJRUlTSWdBU0FBSUE5cVFRSjBhdjBBQWdBaElTQUZJQUJCQTNScUlnUWdILzFhQWdBRElBUkJDR29nSWlBaElDQWdJZjBOREEwT0R4QVJFaE1VRlJZWEdCa2FHeUlpL2E0Qi9Rd0NBQUFBQWdBQUFBSUFBQUFDQUFBQS9hNEJRUUw5ckFIOXNRRWlJUDFhQWdBQUlBUkJFR29nSVAxYUFnQUJJQVJCR0dvZ0lQMWFBZ0FDSUFVZ0kvME1BUUFBQUFFQUFBQUJBQUFBQVFBQUFQMVFJaVQ5R3dCQkFuUnFJQ0FnSHlBZy9RME1EUTRQRUJFU0V4UVZGaGNZR1JvYi9hNEJRUUg5ckFFZ0l2MnVBU0lmL1ZvQ0FBQWdCU0FrL1JzQlFRSjBhaUFmL1ZvQ0FBRWdCU0FrL1JzQ1FRSjBhaUFmL1ZvQ0FBSWdCU0FrL1JzRFFRSjBhaUFmL1ZvQ0FBTWdJLzBNQ0FBQUFBZ0FBQUFJQUFBQUNBQUFBUDJ1QVNFaklDQWhIeUFoSVNBZ0FFRUVhaUlBSUJCSERRQUxJQ0Q5R3dNaEJDQWYvUnNESVFjZ0VDQWJSZzBCSUFzaEJpQUVJUWtnRUFzaEFBTkFJQUVnQUVFQmFpSUtJQUpzUVFKMGFpZ0NBQ0VlSUFFZ0FDQVBhaUFDYkVFQ2RHb29BZ0FoQkNBRklBWkJBblJxSWc0Z0J6WUNBQ0FPSUFjZ0hpQUVJQWxxUVFKcVFRSjFheUlIYWtFQmRTQUphallDQkNBR1FRSnFJUVlnQUNBTVJ5QUVJUWtnQ2lFQURRQUxEQUVMSUFzaEJnc2dCU0FHUVFKMGFpQUhOZ0lBUVh3aEFDQVhCSDhnR2lBQklCMXFLQUlBSUFSQkFXcEJBWFZySWdBMkFnQWdBQ0FIYWtFQmRTRUhRWGdGUVh3TElCbHFJQVFnQjJvMkFnQkJBQ0VHUVFBaEFFRUFJUVFDUUNBVklCZ2dEVUVDZEdwQkVFbHlSUVJBQTBBZ0FTQUFRUUowSWdScUlBUWdCV3I5QUFJQS9Rc0NBQ0FBUVFScUlnQWdFMGNOQUFzZ0V5SUVJQWhHRFFFTElBUWhBQ0FSQkVBRFFDQUJJQUFnQW14QkFuUnFJQVVnQUVFQ2RHb29BZ0EyQWdBZ0FFRUJhaUVBSUFaQkFXb2lCaUFSUncwQUN3c2dCQ0FJYTBGOFN3MEFBMEFnQVNBQUlBSnNRUUowYWlBRklBQkJBblJxS0FJQU5nSUFJQUVnQUVFQmFpSUVJQUpzUVFKMGFpQUZJQVJCQW5ScUtBSUFOZ0lBSUFFZ0FFRUNhaUlFSUFKc1FRSjBhaUFGSUFSQkFuUnFLQUlBTmdJQUlBRWdBRUVEYWlJRUlBSnNRUUowYWlBRklBUkJBblJxS0FJQU5nSUFJQUJCQkdvaUFDQUlSdzBBQ3dzZ0FVRUVhaUVCSUExQkFXb2lEU0FEUncwQUN3d0JDd0pBQWtBQ1FDQUlRUUZyRGdJQUFRSUxJQU5CQUV3TkFrRUFJUUlDUUNBRFFRUkpCRUFnQVNFQURBRUxJQUVnQTBIOC8vLy9CM0VpQWtFQ2RHb2hBQU5BSUFFZ0JrRUNkR29pQkNBRS9RQUNBQ0lmL1JzQVFRSnQvUkVnSC8wYkFVRUNiZjBjQVNBZi9Sc0NRUUp0L1J3Q0lCLzlHd05CQW0zOUhBUDlDd0lBSUFaQkJHb2lCaUFDUncwQUN5QUNJQU5HRFFNTEEwQWdBQ0FBS0FJQVFRSnROZ0lBSUFCQkJHb2hBQ0FDUVFGcUlnSWdBMGNOQUFzTUFnc2dBMEVBVEEwQklBQW9BZ0FoQ1NBQ0lBcHNRUUowSVFjRFFDQUpJQUVvQWdBZ0FTQUhhaUlFS0FJQVFRRnFRUUYxYXlJQU5nSUVJQWtnQUNBRUtBSUFhaUlBTmdJQUlBRWdBRFlDQUNBQklBSkJBblJxSUFrb0FnUTJBZ0FnQVVFRWFpRUJJQVpCQVdvaUJpQURSdzBBQ3d3QkN5QUlRUU5JRFFBZ0EwRUFUQTBBSUFBb0FnQWlCU0FJSUFoQkFYRWlGRVVpQm10QkJHc2lDVUVCZGlJTFFRSjBJZ2NnQVNBRFFRSjBJZ0JxYWtrZ0JTQUxRUU4wYWtFTWFpSUVJQUZCQkdwTGNTQUZRUVJxSUFBZ0FTQUtRUUowYWlJQWFpQUhha0VJYWtrZ0FFRUlhaUFFU1hGeUlSVWdBa0VCUnlBSVFRUkpjaUVXSUFKQkFVWWdDVUVGUzNFaEZ5QUlRZnovLy84SGNTRVFJQWhCQTNFaEVTQUJJQVZySVJnZ0JTQUlRUUowYWtFRWF5RVpJQVVnQ0VFQ2F5SUFRUUowYWlFYUlBdEJBV29pRWtGOGNTSU1RUUZ5SVJNZ0RFRUJkRUVCY2lFTElBSWdDbXhCQW5RaEd5QUFJQVpyUVFKSklSd2dDRUVCZGtFQmF5QUNiRUVDZENFZEEwQWdCU0FCS0FJQUlBRWdHMm9pRHlBQ1FRSjBhaWdDQUNJSklBOG9BZ0FpQUdwQkFtcEJBblZySWdjZ0FHbzJBZ0JCQVNFRUFrQWdIQVJBSUFraEJnd0JDd0pBQW45QkFTQVhSUTBBR2tFQklCVU5BQm9nQ2YwUklSOGdCLzBSSVNCQkFDRUFBMEFnQlNBQVFRTjBhaUlISUFFZ0FFRUNkQ0lFYXYwQUFnUWdIeUFFSUE5cS9RQUNDQ0lmL1EwTURRNFBFQkVTRXhRVkZoY1lHUm9iSWlJZ0gvMnVBZjBNQWdBQUFBSUFBQUFDQUFBQUFnQUFBUDJ1QVVFQy9hd0IvYkVCSWlFZ0lTQWdJQ0g5RFF3TkRnOFFFUklURkJVV0Z4Z1pHaHY5cmdGQkFmMnNBU0FpL2E0QklpTDlEUVFGQmdjWUdSb2JDQWtLQ3h3ZEhoLzlDd0lVSUFjZ0lDQWkvUTBNRFE0UEVCRVNFd0FCQWdNVUZSWVhJQ0g5RFFBQkFnTUVCUVlIRUJFU0V3d05EZy85Q3dJRUlDRWhJQ0FBUVFScUlnQWdERWNOQUFzZ0gvMGJBeUVHSUNEOUd3TWhCeUFNSUJKR0RRRWdDeUVFSUFZaENTQVRDeUVBQTBBZ0FTQUFJQUpzUVFKMGFpZ0NBQ0VlSUE4Z0FFRUJhaUlLSUFKc1FRSjBhaWdDQUNFR0lBVWdCRUVDZEdvaURpQUhOZ0lBSUE0Z0J5QWVJQVlnQ1dwQkFtcEJBblZySWdkcVFRRjFJQWxxTmdJRUlBUkJBbW9oQkNBQUlCSkhJQW9oQUNBR0lRa05BQXNNQVFzZ0N5RUVDeUFZSUExQkFuUnFJUWtnQlNBRVFRSjBhaUFITmdJQUFrQWdGRVVFUUNBYUlBRWdIV29vQWdBZ0JrRUJha0VCZFdzaUFDQUhha0VCZFNBR2FqWUNBQXdCQ3lBR0lBZHFJUUFMSUJrZ0FEWUNBRUVBSVFaQkFDRUFRUUFoQkFKQUlCWWdDVUVRU1hKRkJFQURRQ0FCSUFCQkFuUWlCR29nQkNBRmF2MEFBZ0Q5Q3dJQUlBQkJCR29pQUNBUVJ3MEFDeUFRSWdRZ0NFWU5BUXNnQkNFQUlCRUVRQU5BSUFFZ0FDQUNiRUVDZEdvZ0JTQUFRUUowYWlnQ0FEWUNBQ0FBUVFGcUlRQWdCa0VCYWlJR0lCRkhEUUFMQ3lBRUlBaHJRWHhMRFFBRFFDQUJJQUFnQW14QkFuUnFJQVVnQUVFQ2RHb29BZ0EyQWdBZ0FTQUFRUUZxSWdRZ0FteEJBblJxSUFVZ0JFRUNkR29vQWdBMkFnQWdBU0FBUVFKcUlnUWdBbXhCQW5ScUlBVWdCRUVDZEdvb0FnQTJBZ0FnQVNBQVFRTnFJZ1FnQW14QkFuUnFJQVVnQkVFQ2RHb29BZ0EyQWdBZ0FFRUVhaUlBSUFoSERRQUxDeUFCUVFScUlRRWdEVUVCYWlJTklBTkhEUUFMQ3dzekFRRi9Jd0JCRUdzaUFTUUFJQUFFZnlBQlFReHFRU0FnQUJCNUlRQkJBQ0FCS0FJTUlBQWJCVUVBQ3lBQlFSQnFKQUFMR3dFQmZ5QUFCRUFnQUNnQ0NDSUJCRUFnQVJBVUN5QUFFQlFMQ3pFQkFuOUJBVUVNRUJjaUFBUkFJQUJCQ2pZQ0JDQUFRUXBCQkJBWElnRTJBZ2dnQVFSQUlBQVBDeUFBRUJRTFFRQUxTQUVDZndKL0lBRkJIMDBFUUNBQUtBSUFJUUlnQUVFRWFnd0JDeUFCUVNCcklRRWdBQXNvQWdBaEF5QUFJQUlnQVhRMkFnQWdBQ0FESUFGMElBSkJJQ0FCYTNaeU5nSUVDNjhDQVFaL0l3QkI4QUZySWdZa0FDQUdJQUkyQXV3QklBWWdBVFlDNkFFZ0JpQUFOZ0lBSUFSRklRa0NRQUpBQWtBQ1FDQUJRUUZIQkVBZ0FDRUhRUUVoQ0F3QkN5QUFJUWRCQVNFSUlBSU5BQ0FBSVFRTUFRc0RRQ0FISUFVZ0EwRUNkR29pQ2lnQ0FHc2lCQ0FBRUN0QkFFd0VRQ0FISVFRTUFnc2dDVUYvY3lFTFFRRWhDUUpBSUFzZ0EwRUNTSEpCQVhGRkJFQWdDa0VJYXlnQ0FDRUtJQWRCQ0dzaUN5QUVFQ3RCQUU0TkFTQUxJQXBySUFRUUswRUFUZzBCQ3lBR0lBaEJBblJxSUFRMkFnQWdCa0hvQVdvZ0FTQUNFSGNpQVJBOElBaEJBV29oQ0NBQklBTnFJUU1nQmlnQzdBRWhBaUFFSVFjZ0JpZ0M2QUVpQVVFQlJ3MEJJQUlOQVF3REN3c2dCeUVFREFFTElBbEZEUUVMSUFZZ0NCQjJJQVFnQXlBRkVFUUxJQVpCOEFGcUpBQUxTd0VDZnlBQUtBSUVJUUlnQUFKL0lBRkJIMDBFUUNBQUtBSUFJUU1nQWd3QkN5QUJRU0JySVFFZ0FpRURRUUFMSWdJZ0FYWTJBZ1FnQUNBQ1FTQWdBV3QwSUFNZ0FYWnlOZ0lBQ3k4QkFYOGdBQVJBSUFBb0FnUWlBUVJBSUFBb0FnQWdBUkVDQUFzZ0FDZ0NJQkFVSUFCQkFEWUNJQ0FBRUJRTEN5b0FJQUFFUUNBQUtBSXdJQUJCRkVFUUlBQW9Ba3diYWlnQ0FCRUNBQ0FBUVFBMkFqQWdBQkFVQ3d1R0F3SUZmd3ArSXdCQklHc2lBeVFBQWtBZ0FDZ0NFQ0lGUlFSQVFRRWhBZ3dCQ3dKQUlBQTBBZ0FpQjBJQVV3MEFJQUEwQWdRaUNFSUFVdzBBSUFBMEFnZ2lDVUlBVXcwQUlBQTBBZ3dpQ2tJQVV3MEFJQUFvQWhnaEFDQUhRZ0Y5SVF3Z0NFSUJmU0VOSUFsQ0FYMGhDU0FLUWdGOUlRb0RRQ0FBSUF3Z0FDZ0NBQ0lDclNJSGZDQUhnQ0lMUGdJUUlBQWdEU0FBS0FJRUlnYXRJZ2Q4SUFlQUlnNCtBaFJDQVNBQU5RSW9JZ2VHSWc5Q0FYMGlDQ0FKSUFLc0loQjhJQkIveEh3Z0I0ZW5JQWdnQzhSOElBZUhwMnNpQWtFQVNBUkFJQU1nQWpZQ0JDQURJQVEyQWdBZ0FVRUJRYUhwQUNBREVCTkJBQ0VDREFNTElBQWdBallDQ0NBSUlBb2dCcXdpQzN3Z0MzL0VmQ0FIaDZjZ0RzUWdEM3hDQVgwZ0I0ZW5heUlDUVFCSUJFQWdBeUFDTmdJVUlBTWdCRFlDRUNBQlFRRkI1dWtBSUFOQkVHb1FFMEVBSVFJTUF3c2dBQ0FDTmdJTUlBQkJOR29oQUVFQklRSWdCRUVCYWlJRUlBVkhEUUFMREFFTElBRkJBVUdiTkVFQUVCTUxJQU5CSUdva0FDQUNDLzBHQVFaL0lBQUVRQUpBSUFBb0FnQUVRQ0FBS0FJTUlnRUVRQ0FCRURRZ0FDZ0NEQkFVSUFCQkFEWUNEQXNnQUNnQ0VDSUJCRUFnQVJBVUlBQkNBRGNERUFzZ0FDZ0NRQkFVSUFCQ0FEY0NQQ0FBS0FKSUVCUWdBRUVBTmdKSUlBQW9BbGdRRkNBQVFRQTJBbGdNQVFzZ0FDZ0NMQ0lCQkVBZ0FSQVVJQUJCQURZQ0xBc2dBQ2dDSUNJQkJFQWdBUkFVSUFCQ0FEY0RJQXNnQUNnQ05DSUJSUTBBSUFFUUZDQUFRZ0EzQWpRTElBQW9BdWdCRUY0Z0FDZ0N0QUVpQVFSQUlBQW9Bb0FCSUFBb0FvUUJiQ0lEQkg4RFFDQUJFRFFnQVVHTUxHb2hBU0FDUVFGcUlnSWdBMGNOQUFzZ0FDZ0N0QUVGSUFFTEVCUWdBRUVBTmdLMEFRc2dBQ2dDakFFaUFRUkFJQUFvQW9nQklnSUVRRUVBSVFFRFFDQUFLQUtNQVNBQlFRTjBhaWdDQUNJREJFQWdBeEFVSUFBb0FvZ0JJUUlMSUFGQkFXb2lBU0FDU1EwQUN5QUFLQUtNQVNFQkN5QUFRUUEyQW9nQklBRVFGQ0FBUVFBMkFvd0JDeUFBS0FLZ0FSQVVJQUJCQURZQ2tBRWdBRUVBTmdLZ0FTQUFLQUo4RUJRZ0FFRUFOZ0o4SUFBdEFOUUJRUUp4UlFSQUlBQW9Bc0FCRUJRTElBQkI2QUJxUVFCQjhBQVFHUm9nQUNnQzJBRVFPQ0FBUVFBMkF0Z0JJQUFvQXR3QkVEZ2dBRUVBTmdMWUFTQUFLQUxnQVNJQkJFQWdBU2dDSENJQ0JFQWdBaEFVSUFGQkFEWUNIQXNnQVNnQ0tDSUNCRUFnQVNnQ0pBUkFBMEFnQWlBRlFTaHNJZ05xS0FJa0lnUUVRQ0FFRUJRZ0FTZ0NLQ0lDSUFOcVFRQTJBaVFMSUFJZ0Eyb29BaEFpQkFSQUlBUVFGQ0FCS0FJb0lnSWdBMnBCQURZQ0VBc2dBaUFEYWlnQ0dDSUVCRUFnQkJBVUlBRW9BaWdpQWlBRGFrRUFOZ0lZQ3lBRlFRRnFJZ1VnQVNnQ0pFa05BQXNMSUFJUUZDQUJRUUEyQWlnTElBRVFGQXNnQUVFQU5nTGdBU0FBS0FKZ0VDVWdBRUVBTmdKZ0lBQW9BbVFRSlNBQVFRQTJBbVFnQUNnQzdBRWlBd1JBQWtBZ0F5Z0NDRVVOQUNBREtBSU1CRUFnQTBFQU5nSW9BMEFnQXlnQ0dFRUFTZzBBQ3dzZ0EwRUJOZ0lRSUFNb0FnQVFGQ0FES0FJY0lnSkZEUUFEUUNBQ0tBSUVJUUVnQWhBVUlBTWdBVFlDSENBQklnSU5BQXNMSUFNb0FpUWlBZ1JBSUFJb0FnUWlCVUVBU2dSQVFRQWhBUU5BSUFJb0FnQWdBVUVNYkdvaUJDZ0NDQ0lHQkVBZ0JDZ0NCQ0FHRVFJQUlBSW9BZ1FoQlFzZ0FVRUJhaUlCSUFWSURRQUxDeUFDS0FJQUVCUWdBaEFVQ3lBREVCUUxJQUJCQURZQzdBRWdBQkFVQ3d2bUF3SUlmd1IrSUFBb0FoUW9BZ0FvQWhRZ0FVSE1BR3hxSWdrb0Fnd2lDQ0FBS0FJWUtBSVlJQUZCTkd4cUlnbzFBZ1FpRUVJQmZTSVNJQUExQWp4OElCQ0FweUlMSUFnZ0Mwa2JJUXdnQ1NnQ0NDSUlJQW8xQWdBaUVVSUJmU0lUSUFBMUFqaDhJQkdBcHlJS0lBZ2dDa2tiSVFvZ0NTZ0NCQ0lJSUJJZ0FEVUNOSHdnRUlDbklnc2dDQ0FMU3hzaEN5QUpLQUlBSWdnZ0V5QUFOUUl3ZkNBUmdLY2lEU0FJSUExTEd5RU5RUUFoQ0NBQUtBSWdLQUxRS3lBQlFiZ0liR29vQWhRaERnSkFJQWtvQWhSQkFDQUNhMEYvSUFJYmFpSUNSUVJBSUFvaEFDQU5JUWdnQ3lFQkRBRUxJQU5CQVhFZ0FrRUJheUlQZENJSklBMUpCRUFnRFNBSmE2MUNmeUFDclNJUWhrSi9oWHdnRUlpbklRZ0xRUUFoQUVFQUlRRWdBMEVCZGlBUGRDSURJQXRKQkVBZ0N5QURhNjFDZnlBQ3JTSVFoa0ovaFh3Z0VJaW5JUUVMSUFrZ0Nra0VRQ0FLSUFscnJVSi9JQUt0SWhDR1FuK0ZmQ0FRaUtjaEFBc2dBeUFNVHdSQVFRQWhEQXdCQ3lBTUlBTnJyVUovSUFLdEloQ0dRbitGZkNBUWlLY2hEQXNnQkVGL0lBQkJBa0VESUE1QkFVWWJJZ0pxSWdNZ0FDQURTeHRKSUFWQmZ5QUNJQXhxSWdBZ0FDQU1TUnRKY1NBR0lBZ2dBbXNpQUVFQUlBQWdDRTBiUzNFZ0J5QUJJQUpySWdCQkFDQUFJQUZORzB0eEM2SUJBUVovSUFBRVFDQUFLQUlFSWdJRVFDQUNFQlFnQUVFQU5nSUVDeUFCQkVBZ0FDRUNBMEFnQWlnQ3lBRWlBd1JBUVFBaEJTQUNLQUxFQVNJRUJIOERRQ0FES0FJTUlnWUVRQ0FHRUJRZ0EwRUFOZ0lNSUFJb0FzUUJJUVFMSUFOQkVHb2hBeUFGUVFGcUlnVWdCRWtOQUFzZ0FpZ0N5QUVGSUFNTEVCUWdBa0VBTmdMSUFRc2dBa0h3QVdvaEFpQUhRUUZxSWdjZ0FVY05BQXNMSUFBUUZBc0x3QmdDRzM4RGV5QUNRUWRzSVE4Z0FrRUdiQ0VRSUFKQkJXd2hFU0FDUVFKMElRd2dBa0VEYkNFU0lBSkJBWFFoRXlBQUtBSUFJZ29nQUNnQ0RDSVpRUVYwSWdScUlRWWdDaUFFYXlBQUtBSVFJUVVnQUNnQ0hDRUxJQUFvQWhRaEJ5QUFLQUlJSVEwQ1FBSkFBa0FDUUFKQUFrQUNRQ0FEUVFoSkRRQWdBVUVQY1EwQUlBWkJEM0ZGRFFFTElBVWdCMDhOQlFKQUFrQWdBMEVCYXc0Q0FBRURDeUFISUFWcklnaEJGMDBOQlNBQklBVkJBblJxSVFrZ0dVRUZkQ0lFSUFvZ0JVRUdkR3BxSUFFZ0IwRUNkR3BKQkVBZ0NTQUtJQWRCQm5ScUlBUnFRVHhyU1EwR0N5QUYvUkg5REFBQUFBQUJBQUFBQWdBQUFBTUFBQUQ5cmdFaElDQUZJQWhCZkhFaURtb2hCVUVBSVFRRFFDQUdJQ0JCQnYyckFTSWYvUnNBYWlBSklBUkJBblJxL1FBQ0FDSWgvUjhBT0FJQUlBWWdILzBiQVdvZ0lmMGZBVGdDQUNBR0lCLzlHd0pxSUNIOUh3STRBZ0FnQmlBZi9Sc0RhaUFoL1I4RE9BSUFJQ0Q5REFRQUFBQUVBQUFBQkFBQUFBUUFBQUQ5cmdFaElDQUVRUVJxSWdRZ0RrY05BQXNnQ0NBT1J3MEZEQVlMSUFFZ0FrRUNkR29oQ0NBSElBVnJJZzVCRzAwTkFpQVpRUVYwSWdRZ0NpQUZRUVowYW1vaUNTQUJJQUlnQjJwQkFuUnFTU0FLSUFkQkJuUnFJQVJxUVRocklnUWdBU0FDSUFWcVFRSjBha3R4RFFJZ0NTQUJJQWRCQW5ScVNTQUJJQVZCQW5ScUlBUkpjUTBDSUFYOUVmME1BQUFBQUFFQUFBQUNBQUFBQXdBQUFQMnVBU0VnSUFVZ0RrRjhjU0lVYWlFRVFRQWhDUU5BSUFZZ0lFRUcvYXNCSWgvOUd3QnFJaFVnQVNBRklBbHFRUUowSWhacS9RQUNBQ0loL1I4QU9BSUFJQVlnSC8wYkFXb2lGeUFoL1I4Qk9BSUFJQVlnSC8wYkFtb2lHQ0FoL1I4Q09BSUFJQVlnSC8wYkEyb2lHaUFoL1I4RE9BSUFJQlVnQ0NBV2F2MEFBZ0FpSC8wZkFEZ0NCQ0FYSUIvOUh3RTRBZ1FnR0NBZi9SOENPQUlFSUJvZ0gvMGZBemdDQkNBZy9Rd0VBQUFBQkFBQUFBUUFBQUFFQUFBQS9hNEJJU0FnQ1VFRWFpSUpJQlJIRFFBTElBNGdGRWNOQXd3RkN5QUZJQWRQRFFRZ0FTQVBRUUowYWlFSklBRWdFRUVDZEdvaERpQUJJQkZCQW5ScUlSUWdBU0FNUVFKMGFpRVZJQUVnRWtFQ2RHb2hGaUFCSUJOQkFuUnFJUmNnQVNBQ1FRSjBhaUVZQTBBZ0JpQUZRUVowYWlJRUlBRWdCVUVDZENJSWFpb0NBRGdDQUNBRUlBZ2dHR29xQWdBNEFnUWdCQ0FJSUJkcUtnSUFPQUlJSUFRZ0NDQVdhaW9DQURnQ0RDQUVJQWdnRldvcUFnQTRBaEFnQkNBSUlCUnFLZ0lBT0FJVUlBUWdDQ0FPYWlvQ0FEZ0NHQ0FFSUFnZ0NXb3FBZ0E0QWh3Z0JVRUJhaUlGSUFkSERRQUxEQVFMSUFFZ0QwRUNkR29oQ1NBQklCQkJBblJxSVE0Z0FTQVJRUUowYWlFVUlBRWdERUVDZEdvaEZTQUJJQkpCQW5ScUlSWWdBU0FUUVFKMGFpRVhJQUVnQWtFQ2RHb2hHQ0FEUVFOR0lSb2dBMEVFUmlFY0lBTkJCVVloSFNBRFFRZEdJUjREUUNBR0lBVkJCblJxSWdRZ0FTQUZRUUowSWdocUtnSUFPQUlBSUFRZ0NDQVlhaW9DQURnQ0JDQUVJQWdnRjJvcUFnQTRBZ2dDUUNBYURRQWdCQ0FJSUJacUtnSUFPQUlNSUJ3TkFDQUVJQWdnRldvcUFnQTRBaEFnSFEwQUlBUWdDQ0FVYWlvQ0FEZ0NGQ0FEUVFaR0RRQWdCQ0FJSUE1cUtnSUFPQUlZSUI0TkFDQUVJQWdnQ1dvcUFnQTRBaHdMSUFWQkFXb2lCU0FIUncwQUN3d0RDeUFGSVFRTElBUkJBV29oQlNBSElBUnJRUUZ4QkVBZ0JpQUVRUVowYWlJSklBRWdCRUVDZENJRWFpb0NBRGdDQUNBSklBUWdDR29xQWdBNEFnUWdCU0VFQ3lBRklBZEdEUUVEUUNBR0lBUkJCblJxSWdVZ0FTQUVRUUowSWdscUtnSUFPQUlBSUFVZ0NDQUphaW9DQURnQ0JDQUdJQVJCQVdvaUJVRUdkR29pQ1NBQklBVkJBblFpQldvcUFnQTRBZ0FnQ1NBRklBaHFLZ0lBT0FJRUlBUkJBbW9pQkNBSFJ3MEFDd3dCQ3lBSElBVWlCR3RCQTNFaUNRUkFRUUFoQ0FOQUlBWWdCRUVHZEdvZ0FTQUVRUUowYWlvQ0FEZ0NBQ0FFUVFGcUlRUWdDRUVCYWlJSUlBbEhEUUFMQ3lBRklBZHJRWHhMRFFBRFFDQUdJQVJCQm5ScUlBRWdCRUVDZEdvcUFnQTRBZ0FnQmlBRVFRRnFJZ1ZCQm5ScUlBRWdCVUVDZEdvcUFnQTRBZ0FnQmlBRVFRSnFJZ1ZCQm5ScUlBRWdCVUVDZEdvcUFnQTRBZ0FnQmlBRVFRTnFJZ1ZCQm5ScUlBRWdCVUVDZEdvcUFnQTRBZ0FnQkVFRWFpSUVJQWRIRFFBTEMwRWdhaUVISUFFZ0RVRUNkR29oQmlBQUtBSVlJUVVDUUFKQUFrQUNRQ0FEUVFoSkRRQWdCa0VQY1EwQUlBZEJEM0ZGRFFFTElBVWdDMDhOQWdKQUFrQUNRQ0FEUVFGckRnSUFBUUlMSUFzZ0JXc2lBRUViVFEwRElBb2dCVUVHZEVFZ2NpQVpRUVYwSWdKcmFpQUJJQXNnRFdwQkFuUnFTUVJBSUFFZ0JTQU5ha0VDZEdvZ0MwRUdkQ0FDYXlBS2FrRWNhMGtOQkFzZ0JpQUZRUUowYWlFQ0lBWDlFZjBNQUFBQUFBRUFBQUFDQUFBQUF3QUFBUDJ1QVNFZ0lBVWdBRUY4Y1NJQmFpRUZRUUFoQkFOQUlBY2dJRUVHL2FzQkloLzlHd0JxSUFJZ0JFRUNkR3I5QUFJQUlpSDlId0E0QWdBZ0J5QWYvUnNCYWlBaC9SOEJPQUlBSUFjZ0gvMGJBbW9nSWYwZkFqZ0NBQ0FISUIvOUd3TnFJQ0g5SHdNNEFnQWdJUDBNQkFBQUFBUUFBQUFFQUFBQUJBQUFBUDJ1QVNFZ0lBUkJCR29pQkNBQlJ3MEFDeUFBSUFGSERRTU1CQXNnQmlBQ1FRSjBhaUVEQWtBZ0N5QUZheUlBUVNSSkJFQWdCU0VFREFFTElBb2dCVUVHZEVFZ2NpQVpRUVYwSWdScmFpSUlJQUVnQWlBTElBMXFJZ0pxUVFKMGFra2dDMEVHZENBRWF5QUtha0VZYXlJRUlBRWdEVUVDZEdvZ0JVRUNkR29pQ2lBTWFrdHhCRUFnQlNFRURBRUxJQWdnQVNBQ1FRSjBha2tnQkNBS1MzRUVRQ0FGSVFRTUFRc2dCZjBSL1F3QUFBQUFBUUFBQUFJQUFBQURBQUFBL2E0QklTQWdCU0FBUVh4eElnSnFJUVJCQUNFQkEwQWdCeUFnUVFiOXF3RWlILzBiQUdvaUNpQUdJQUVnQldwQkFuUWlDR3I5QUFJQUlpSDlId0E0QWdBZ0J5QWYvUnNCYWlJTUlDSDlId0U0QWdBZ0J5QWYvUnNDYWlJTklDSDlId0k0QWdBZ0J5QWYvUnNEYWlJUElDSDlId000QWdBZ0NpQURJQWhxL1FBQ0FDSWYvUjhBT0FJRUlBd2dILzBmQVRnQ0JDQU5JQi85SHdJNEFnUWdEeUFmL1I4RE9BSUVJQ0Q5REFRQUFBQUVBQUFBQkFBQUFBUUFBQUQ5cmdFaElDQUJRUVJxSWdFZ0FrY05BQXNnQUNBQ1JnMEVDeUFFUVFGcUlRQWdDeUFFYTBFQmNRUkFJQWNnQkVFR2RHb2lBU0FHSUFSQkFuUWlBbW9xQWdBNEFnQWdBU0FDSUFOcUtnSUFPQUlFSUFBaEJBc2dBQ0FMUmcwREEwQWdCeUFFUVFaMGFpSUFJQVlnQkVFQ2RDSUJhaW9DQURnQ0FDQUFJQUVnQTJvcUFnQTRBZ1FnQnlBRVFRRnFJZ0JCQm5ScUlnRWdCaUFBUVFKMElnQnFLZ0lBT0FJQUlBRWdBQ0FEYWlvQ0FEZ0NCQ0FFUVFKcUlnUWdDMGNOQUFzTUF3c2dCaUFQUVFKMGFpRUVJQVlnRUVFQ2RHb2hDaUFHSUJGQkFuUnFJUWdnQmlBTVFRSjBhaUVNSUFZZ0VrRUNkR29oRFNBR0lCTkJBblJxSVE4Z0JpQUNRUUowYWlFQ0lBTkJBMFloRUNBRFFRUkdJUkVnQTBFRlJpRVNJQU5CQjBZaEV3TkFJQWNnQlVFR2RHb2lBQ0FHSUFWQkFuUWlBV29xQWdBNEFnQWdBQ0FCSUFKcUtnSUFPQUlFSUFBZ0FTQVBhaW9DQURnQ0NBSkFJQkFOQUNBQUlBRWdEV29xQWdBNEFnd2dFUTBBSUFBZ0FTQU1haW9DQURnQ0VDQVNEUUFnQUNBQklBaHFLZ0lBT0FJVUlBTkJCa1lOQUNBQUlBRWdDbW9xQWdBNEFoZ2dFdzBBSUFBZ0FTQUVhaW9DQURnQ0hBc2dCVUVCYWlJRklBdEhEUUFMREFJTElBVWdDMDhOQVNBR0lBOUJBblJxSVFNZ0JpQVFRUUowYWlFRUlBWWdFVUVDZEdvaENpQUdJQXhCQW5ScUlRZ2dCaUFTUVFKMGFpRU1JQVlnRTBFQ2RHb2hEU0FHSUFKQkFuUnFJUUlEUUNBSElBVkJCblJxSWdBZ0JpQUZRUUowSWdGcUtnSUFPQUlBSUFBZ0FTQUNhaW9DQURnQ0JDQUFJQUVnRFdvcUFnQTRBZ2dnQUNBQklBeHFLZ0lBT0FJTUlBQWdBU0FJYWlvQ0FEZ0NFQ0FBSUFFZ0Ntb3FBZ0E0QWhRZ0FDQUJJQVJxS2dJQU9BSVlJQUFnQVNBRGFpb0NBRGdDSENBRlFRRnFJZ1VnQzBjTkFBc01BUXNnQ3lBRklnUnJRUU54SWdBRVFFRUFJUWdEUUNBSElBUkJCblJxSUFZZ0JFRUNkR29xQWdBNEFnQWdCRUVCYWlFRUlBaEJBV29pQ0NBQVJ3MEFDd3NnQlNBTGEwRjhTdzBBQTBBZ0J5QUVRUVowYWlBR0lBUkJBblJxS2dJQU9BSUFJQWNnQkVFQmFpSUFRUVowYWlBR0lBQkJBblJxS2dJQU9BSUFJQWNnQkVFQ2FpSUFRUVowYWlBR0lBQkJBblJxS2dJQU9BSUFJQWNnQkVFRGFpSUFRUVowYWlBR0lBQkJBblJxS2dJQU9BSUFJQVJCQkdvaUJDQUxSdzBBQ3dzTG5BRUJCWDhqQUVId0FXc2lCQ1FBSUFRZ0FEWUNBRUVCSVFVQ1FDQUJRUUpJRFFBZ0FDRURBMEFnQUNBRFFRaHJJZ01nQWlBQlFRSnJJZ2RCQW5ScUtBSUFheUlHRUN0QkFFNEVRQ0FBSUFNUUswRUFUZzBDQ3lBRUlBVkJBblJxSUFZZ0F5QUdJQU1RSzBFQVRpSUdHeUlETmdJQUlBVkJBV29oQlNBQlFRRnJJQWNnQmhzaUFVRUJTZzBBQ3dzZ0JDQUZFSFlnQkVId0FXb2tBQXVkQXdFRWZ5QUJJQUJCQkdvaUJHcEJBV3RCQUNBQmEzRWlCU0FDYWlBQUlBQW9BZ0FpQVdwQkJHdE5CSDhnQUNnQ0JDSURJQUFvQWdnaUJqWUNDQ0FHSUFNMkFnUWdCQ0FGUndSQUlBQWdBRUVFYXlnQ0FFRitjV3NpQXlBRklBUnJJZ1FnQXlnQ0FHb2lCVFlDQUNBRElBVkJmSEZxUVFScklBVTJBZ0FnQUNBRWFpSUFJQUVnQkdzaUFUWUNBQXNDZnlBQklBSkJHR3BQQkVBZ0FDQUNhaUlFSUFFZ0FtdEJDR3NpQVRZQ0NDQUVRUWhxSWdVZ0FVRjhjV3BCQkdzZ0FVRUJjallDQUNBRUFuOGdCQ2dDQ0VFSWF5SUJRZjhBVFFSQUlBRkJBM1pCQVdzTUFRc2dBV2NoQXlBQlFSMGdBMnQyUVFSeklBTkJBblJyUWU0QWFpQUJRZjhmVFEwQUdrRS9JQUZCSGlBRGEzWkJBbk1nQTBFQmRHdEJ4d0JxSWdFZ0FVRS9UeHNMSWdOQkJIUWlBVUhnelFGcU5nSU1JQVFnQVVIb3pRRnFJZ0VvQWdBMkFoQWdBU0FGTmdJQUlBUW9BaEFnQlRZQ0JFSG8xUUZCNk5VQktRTUFRZ0VnQTYyR2hEY0RBQ0FBSUFKQkNHb2lBVFlDQUNBQUlBRkJmSEZxREFFTElBQWdBV29MUVFScklBRTJBZ0FnQUVFRWFnVkJBQXNMd2dFQkEzOENRQ0FDS0FJUUlnTUVmeUFEQlNBQ0VFY05BU0FDS0FJUUN5QUNLQUlVSWdScklBRkpCRUFnQWlBQUlBRWdBaWdDSkJFQUFBOExBa0FDUUNBQ0tBSlFRUUJJRFFBZ0FVVU5BQ0FCSVFNRFFDQUFJQU5xSWdWQkFXc3RBQUJCQ2tjRVFDQURRUUZySWdNTkFRd0NDd3NnQWlBQUlBTWdBaWdDSkJFQUFDSUVJQU5KRFFJZ0FTQURheUVCSUFJb0FoUWhCQXdCQ3lBQUlRVkJBQ0VEQ3lBRUlBVWdBUkFXR2lBQ0lBSW9BaFFnQVdvMkFoUWdBU0FEYWlFRUN5QUVDMWtCQVg4Z0FDQUFLQUpJSWdGQkFXc2dBWEkyQWtnZ0FDZ0NBQ0lCUVFoeEJFQWdBQ0FCUVNCeU5nSUFRWDhQQ3lBQVFnQTNBZ1FnQUNBQUtBSXNJZ0UyQWh3Z0FDQUJOZ0lVSUFBZ0FTQUFLQUl3YWpZQ0VFRUFDOHdDQVFSL0lBRWdBUDBBQWdEOUN3SUFJQUVvQWhnaUFnUkFJQUVvQWhBaUF3Ui9RUUFoQWdOQUlBRW9BaGdnQWtFMGJHb29BaXdpQkFSQUlBUVFGQ0FCS0FJUUlRTUxJQUpCQVdvaUFpQURTUTBBQ3lBQktBSVlCU0FDQ3hBVUlBRkJBRFlDR0FzZ0FTQUFLQUlRSWdJMkFoQWdBU0FDUVRSc0VCZ2lBallDR0NBQ0JFQWdBU2dDRUFSQVFRQWhBd05BSUFJZ0EwRTBiQ0lGYWlJQ0lBQW9BaGdnQldvaUJQMEFBZ0Q5Q3dJQUlBSWdCQ2dDTURZQ01DQUNJQVQ5QUFJZy9Rc0NJQ0FDSUFUOUFBSVEvUXNDRUNBQktBSVlJZ0lnQldwQkFEWUNMQ0FEUVFGcUlnTWdBU2dDRUVrTkFBc0xJQUVnQUNnQ0ZEWUNGQ0FCSUFBb0FpQWlBallDSUNBQ0JFQWdBU0FDRUJnaUFqWUNIQ0FDUlFSQUlBRkNBRGNDSEE4TElBSWdBQ2dDSENBQUtBSWdFQllhRHdzZ0FVRUFOZ0ljRHdzZ0FVRUFOZ0lRSUFGQkFEWUNHQXNFQUVFQkM4WUJBUU4vQTBBZ0FFRUVkQ0lCUWVUTkFXb2dBVUhnelFGcUlnSTJBZ0FnQVVIb3pRRnFJQUkyQWdBZ0FFRUJhaUlBUWNBQVJ3MEFDMEV3RUhvYUl3QkJFR3NpQUNRQUFrQWdBRUVNYWlBQVFRaHFFQkFOQUVIdzFRRkJDQ0FBS0FJTVFRSjBRUVJxRUNraUFUWUNBQ0FCUlEwQVFRZ2dBQ2dDQ0JBcElnRUVRRUh3MVFFb0FnQWlBaUFBS0FJTVFRSjBha0VBTmdJQUlBSWdBUkFQUlEwQkMwSHcxUUZCQURZQ0FBc2dBRUVRYWlRQVFZeldBVUVxTmdJQVFkVFdBVUdZMXdFMkFnQUxrZ1lDQkg4RGV5TUFRUkJySWdZa0FBSi9JQUFvQWdoQkVFWUVRQ0FBS0FLMEFTQUFLQUxrQVVHTUxHeHFEQUVMSUFBb0Fnd0xJUUFDUUNBREtBSUFJZ1ZGQkVCQkFDRUNJQVJCQVVHdEZFRUFFQk1NQVFzZ0FDZ0MwQ3NnQXlBRlFRRnJOZ0lBSUFJZ0JrRU1ha0VCRUJVZ0FVRzRDR3hxSWdjZ0JpZ0NEQ0lBUVFWMk5nS2tCaUFISUFCQkgzRWlBVFlDR0NBQ1FRRnFJUUFnQXdKL0FuOENRQUovQWtBQ1FDQUJEZ0lBQXdFTElBTW9BZ0FNQVFzZ0F5Z0NBRUVCZGdzaUJVSGlBRThFZnlBR1F1R0FnSUNRRERjQ0JDQUdJQVUyQWdBZ0JFRUNRWlA5QUNBR0VCTWdCeWdDR0FVZ0FRc0VRQ0FGSWdFTkFVRUFEQUlMSUFVRVFDQUhRUnhxSVFGQkFDRUNBMEFnQUNBR1FReHFRUUVRRlNBQ1FlQUFUUVJBSUFZb0Fnd2hCQ0FCSUFKQkEzUnFJZ2hCQURZQ0JDQUlJQVJCQTNZMkFnQUxJQUJCQVdvaEFDQUNRUUZxSWdJZ0JVY05BQXNMSUFVZ0F5Z0NBQ0lBU3dSQVFRQWhBZ3dFQ3lBQUlBVnJEQUlMSUFkQkhHb2hCRUVBSVFJRFFDQUFJQVpCREdwQkFoQVZJQUpCNEFCTkJFQWdCQ0FDUVFOMGFpSUZJQVlvQWd3aUNFSC9EM0UyQWdRZ0JTQUlRUXQyTmdJQUN5QUFRUUpxSVFBZ0FrRUJhaUlDSUFGSERRQUxJQUZCQVhRTElRQWdBQ0FES0FJQUlnRkxCRUJCQUNFQ0RBSUxJQUVnQUdzTE5nSUFRUUVoQWlBSEtBSVlRUUZIRFFBZ0IwRWNhaUVFSUFmOUNRSWNJUXNnQnlnQ0lDRUQvUXdCQUFBQUFnQUFBQU1BQUFBRUFBQUFJUXBCQUNFQkEwQWdCQ0FCUVFOMGFpSUFRUmhxSUFzZ0N2ME0vLy8vLy8vLy8vLy8vLy8vLy8vLy8vMnVBU0lKL1JzQVFRTnUvUkVnQ2YwYkFVRURidjBjQVNBSi9Sc0NRUU51L1J3Q0lBbjlHd05CQTI3OUhBUDlzUUg5REFBQUFBQUFBQUFBQUFBQUFBQUFBQUQ5dUFFaUNmMWFBZ0FDSUFCQkVHb2dDZjFhQWdBQklBQkJDR29nQ2YxYUFnQUFJQVFnQVVFRWFpSUJRUU4wYWlJRklBbjlXZ0lBQXlBQUlBTTJBaHdnQUNBRE5nSVVJQUFnQXpZQ0RDQUZJQU0yQWdRZ0N2ME1CQUFBQUFRQUFBQUVBQUFBQkFBQUFQMnVBU0VLSUFGQjRBQkhEUUFMQ3lBR1FSQnFKQUFnQWd1RUJ3RUdmeU1BUVNCcklnWWtBQUovSUFBb0FnaEJFRVlFUUNBQUtBSzBBU0FBS0FMa0FVR01MR3hxREFFTElBQW9BZ3dMSVFVQ1FDQURLQUlBUVFSTkJFQkJBQ0VBSUFSQkFVR0tGRUVBRUJNTUFRc2dBaUFGS0FMUUt5QUJRYmdJYkdvaUJTSUpRUVJxUVFFUUZTQUZJQVVvQWdSQkFXb2lCellDQkNBSFFTSlBCRUFnQmtFaE5nSUVJQVlnQnpZQ0FDQUVRUUZCcmpzZ0JoQVRRUUFoQUF3QkN5QUhJQUFvQXJnQklnaE5CRUFnQmlBSE5nSVlJQVlnQ0RZQ0ZDQUdJQUUyQWhBZ0JFRUJRWUtBQVNBR1FSQnFFQk1nQUNBQUtBSUlRWUNBQW5JMkFnaEJBQ0VBREFFTElBSkJBV29nQlVFSWFrRUJFQlVnQlNBRktBSUlRUUpxTmdJSUlBSkJBbW9nQlVFTWFrRUJFQlVnQlNBRktBSU1RUUpxSWdBMkFnd0NRQUpBSUFVb0FnZ2lBVUVLU3cwQUlBQkJDa3NOQUNBQUlBRnFRUTFKRFFFTFFRQWhBQ0FFUVFGQnR5cEJBQkFUREFFTElBSkJBMm9nQlVFUWFrRUJFQlVnQlMwQUVFR0FBWEVFUUVFQUlRQWdCRUVCUWY4eVFRQVFFd3dCQ3lBQ1FRUnFJQVZCRkdwQkFSQVZJQVVvQWhSQkFrOEVRRUVBSVFBZ0JFRUJRYjR5UVFBUUV3d0JDeUFESUFNb0FnQkJCV3NpQnpZQ0FFRUJJUUFnQlNnQ0JDRUJBa0FnQlMwQUFFRUJjVVVFUUNBQlJRMENJQVZCc0FkcUlRSWdCVUdzQm1vaEJFRUFJUVVnQVVFRFRRMEJJQUZCZkhFaEJVRUFJUU1EUUNBRUlBTkJBblFpQjJyOURBOEFBQUFQQUFBQUR3QUFBQThBQUFEOUN3SUFJQUlnQjJyOURBOEFBQUFQQUFBQUR3QUFBQThBQUFEOUN3SUFJQU5CQkdvaUF5QUZSdzBBQ3lBQklBVkhEUUVNQWdzZ0FTQUhUUVJBQWtBZ0FVVUVRRUVBSVFFTUFRc2dBa0VGYWlBR1FSeHFRUUVRRlNBRklBWW9BaHdpQUVFRWRqWUNzQWNnQlNBQVFROXhOZ0tzQmlBRktBSUVJZ0ZCQWs4RVFDQUZRYkFIYWlFSElBVkJyQVpxSVFnZ0FrRUdhaUVBUVFFaEJRTkFJQUFnQmtFY2FrRUJFQlVDUUNBR0tBSWNJZ0ZCRUU4RVFDQUJRUTl4SWdJTkFRdEJBQ0VBSUFSQkFVSGtMa0VBRUJNTUJnc2dDQ0FGUVFKMElncHFJQUkyQWdBZ0J5QUthaUFCUVFSMk5nSUFJQUJCQVdvaEFDQUZRUUZxSWdVZ0NTZ0NCQ0lCU1EwQUN3c2dBeWdDQUNFSEN5QURJQWNnQVdzMkFnQkJBU0VBREFJTFFRQWhBQ0FFUVFGQmloUkJBQkFUREFFTEEwQWdCQ0FGUVFKMElnQnFRUTgyQWdBZ0FDQUNha0VQTmdJQVFRRWhBQ0FGUVFGcUlnVWdBVWtOQUFzTElBWkJJR29rQUNBQUMxSUFJQUVnQUMwQUFEb0FCeUFCSUFBdEFBRTZBQVlnQVNBQUxRQUNPZ0FGSUFFZ0FDMEFBem9BQkNBQklBQXRBQVE2QUFNZ0FTQUFMUUFGT2dBQ0lBRWdBQzBBQmpvQUFTQUJJQUF0QUFjNkFBQUxrZ0VCQkg4Z0FDQUJOZ0s0QVFKQUlBQW9BbUFpQTBVTkFDQURLQUlZSWdaRkRRQWdBQ2dDRENJRVJRMEFJQVFvQXRBclJRMEFJQU1vQWhBaUJFVUVRRUVCRHd0QkFDRURBMEFnQUNnQ0RDZ0MwQ3NnQTBHNENHeHFLQUlFSUFGTkJFQWdBa0VCUWJUSEFFRUFFQk5CQUE4TElBWWdBMEUwYkdvZ0FUWUNLRUVCSVFVZ0EwRUJhaUlESUFSSERRQUxDeUFGQzZVSEFnbC9DSDRqQUVFUWF5SUxKQUFDUUNBQ1JRUkFJQU5CQVVISTJnQkJBQkFUREFFTElBSW9BaEFpQ1NBQUtBSmdJZ2NvQWhCSkJFQWdBMEVCUWFYU0FFRUFFQk1NQVFzZ0FDZ0NnQUVpQlNBQUtBS0VBV3dpQmlBRVRRUkFJQXNnQkRZQ0FDQUxJQVpCQVdzMkFnUWdBMEVCUWNYL0FDQUxFQk5CQUNFRkRBRUxJQUlnQUNnQ2JDQUVJQVVnQkNBRmJpSUdiR3NpQ0NBQUtBSjBiR29pQlRZQ0FDQUNJQVVnQnlnQ0FDSUhJQVVnQjBzYklnYzJBZ0FnQWlBQUtBSnNJQUFvQW5RZ0NFRUJhbXhxSWdVMkFnZ2dBaUFGSUFBb0FtQW9BZ2dpQ0NBRklBaEpHeUlJTmdJSUlBSWdBQ2dDY0NBQUtBSjRJQVpzYWlJRk5nSUVJQUlnQlNBQUtBSmdLQUlFSWdvZ0JTQUtTeHNpQ2pZQ0JDQUNJQUFvQW5BZ0FDZ0NlQ0FHUVFGcWJHb2lCVFlDRENBQ0lBVWdBQ2dDWUNnQ0RDSUdJQVVnQmtrYklnVTJBZ3dnQUNnQ1lDSU1LQUlRSWdZRVFDQUZyRUlCZlNFUklBaXNRZ0Y5SVJJZ0NxMUNBWDBoRXlBSHJVSUJmU0VVSUF3b0FoZ2hDQ0FDS0FJWUlRVkJBQ0VIQTBBZ0JTQUlJQWRCTkd4cUtBSW9JZ28yQWlnZ0JTQVVJQVVvQWdBaURLMGlEbndnRG9BaUZUNENFQ0FGSUJNZ0JTZ0NCQ0lOclNJT2ZDQU9nQ0lRUGdJVUlBVkNmeUFLclNJT2hpSVBJQkRFZlNBT2g2Y2dEeUFSSUEyc0loQjhJQkIveEgwZ0RvZW5hellDRENBRklBOGdGY1I5SUE2SHB5QVBJQklnREt3aUQzd2dEMy9FZlNBT2g2ZHJOZ0lJSUFWQk5Hb2hCU0FIUVFGcUlnY2dCa2NOQUFzTElBWWdDVWtFUUNBQ0tBSVlJUVVEUUNBRklBWkJOR3dpQjJvb0Fpd1FGQ0FDS0FJWUlnVWdCMnBCQURZQ0xDQUdRUUZxSWdZZ0FpZ0NFRWtOQUFzZ0FpQUFLQUpnS0FJUU5nSVFDeUFBS0FKa0lnVUVRQ0FGRUNVTElBQkJBVUVrRUJjaUJqWUNaRUVBSVFVZ0JrVU5BQ0FDSUFZUVNDQUFJQVEyQWl3Z0FDZ0MyQUZCR0NBREVDaEZEUUFnQUNnQzJBRWlDU2dDQUNFRUlBa29BZ2doQmdKQUlBUUVRRUVCSVFVZ0JFRUJjU0VJSUFSQkFVWUVmMEVBQlNBRVFYNXhJUVJCQUNFSEEwQUNmMEVBSUFWRkRRQWFRUUFnQUNBQklBTWdCaWdDQUJFQUFFVU5BQm9nQUNBQklBTWdCaWdDQkJFQUFFRUFSd3NoQlNBR1FRaHFJUVlnQjBFQ2FpSUhJQVJIRFFBTElBVkZDeUVFUVFBZ0JTQUlHeUVGQWtBZ0NFVU5BQ0FFRFFBZ0FDQUJJQU1nQmlnQ0FCRUFBRUVBUnlFRkN5QUpRUUEyQWdBZ0JRMEJJQUFvQW1BUUpVRUFJUVVnQUVFQU5nSmdEQUlMSUFsQkFEWUNBQXNnQUNBQ0VGQWhCUXNnQzBFUWFpUUFJQVVMOGdNQkJYOENRQUpBSUFBb0Fqd2lBa1VFUUNBQktBSVFEUUZCQVE4TElBSkJOR3dRR0NJRlJRMEJJQUVvQWhBRVFDQUJLQUlZSVFJRFFDQUNJQU5CTkd3aUJHb29BaXdRRkNBQktBSVlJZ0lnQkdwQkFEWUNMQ0FEUVFGcUlnTWdBU2dDRUNJRVNRMEFDd3NnQVNBQUtBSThCSDhnQUNnQ1pDZ0NHQ0VEUVFBaEFnTkFJQVVnQWtFMGJHb2lCQ0FESUFBb0FrQWdBa0VDZEdvb0FnQkJOR3dpQm1vaUEvMEFBZ0Q5Q3dJQUlBUWdBeWdDTURZQ01DQUVJQVA5QUFJZy9Rc0NJQ0FFSUFQOUFBSVEvUXNDRUNBRUlBQW9BbVFvQWhnaUF5QUdhaUlHS0FJa05nSWtJQVFnQmlnQ0xEWUNMQ0FHUVFBMkFpd2dBa0VCYWlJQ0lBQW9BandpQmtrTkFBc2dBU2dDRUFVZ0JBc0VmeUFBS0FKa0tBSVlJUUpCQUNFREEwQWdBaUFEUVRSc0lnUnFLQUlzRUJRZ0FDZ0NaQ2dDR0NJQ0lBUnFRUUEyQWl3Z0EwRUJhaUlESUFFb0FoQkpEUUFMSUFBb0Fqd0ZJQVlMTmdJUUlBRW9BaGdRRkNBQklBVTJBaGhCQVE4TElBRW9BaGdoQkNBQUtBSmtLQUlZSVFOQkFDRUNBMEFnQkNBQ1FUUnNJZ1ZxSWdRZ0F5QUZhaWdDSkRZQ0pDQUVLQUlzRUJRZ0FTZ0NHQ0lFSUFWcUlBQW9BbVFvQWhnaUF5QUZhaUlGS0FJc05nSXNJQVZCQURZQ0xDQUNRUUZxSWdJZ0FTZ0NFRWtOQUF0QkFROExJQUFvQW1BUUpTQUFRUUEyQW1CQkFBdkZCQUVJZndKQUlBSkZEUUFDUUNBQUtBSzRBU0lGUlEwQUlBQW9BbUFpQkVVTkFDQUVLQUlRUlEwQUlBUW9BaGdvQWlnZ0JVY05BQ0FDS0FJUUlnaEZEUUFnQWlnQ0dDSUdLQUlvRFFBZ0JpZ0NMQTBBUVFBaEJDQUlRUWhQQkVBZ0NFRjRjU0VKQTBBZ0JpQUVRVFJzYWlBRk5nSW9JQVlnQkVFQmNrRTBiR29nQlRZQ0tDQUdJQVJCQW5KQk5HeHFJQVUyQWlnZ0JpQUVRUU55UVRSc2FpQUZOZ0lvSUFZZ0JFRUVja0UwYkdvZ0JUWUNLQ0FHSUFSQkJYSkJOR3hxSUFVMkFpZ2dCaUFFUVFaeVFUUnNhaUFGTmdJb0lBWWdCRUVIY2tFMGJHb2dCVFlDS0NBRVFRaHFJUVFnQ2tFSWFpSUtJQWxIRFFBTEN5QUlRUWR4SWdnRVFBTkFJQVlnQkVFMGJHb2dCVFlDS0NBRVFRRnFJUVFnQzBFQmFpSUxJQWhIRFFBTEN5QUNJQU1RUHcwQVFRQVBDeUFBS0FKa0lnVkZCRUFnQUVFQlFTUVFGeUlGTmdKa0lBVkZEUUVMSUFJZ0JSQklJQUFvQXRnQlFSWWdBeEFvUlEwQUlBQW9BdGdCSWdZb0FnQWhCQ0FHS0FJSUlRVUNRQ0FFQkVCQkFTRUhJQVJCQVhFaENDQUVRUUZHQkg5QkFBVWdCRUYrY1NFSlFRQWhCQU5BQW45QkFDQUhSUTBBR2tFQUlBQWdBU0FESUFVb0FnQVJBQUJGRFFBYUlBQWdBU0FESUFVb0FnUVJBQUJCQUVjTElRY2dCVUVJYWlFRklBUkJBbW9pQkNBSlJ3MEFDeUFIUlFzaEJFRUFJQWNnQ0JzaEJ3SkFJQWhGRFFBZ0JBMEFJQUFnQVNBRElBVW9BZ0FSQUFCQkFFY2hCd3NnQmtFQU5nSUFJQWNOQVNBQUtBSmdFQ1VnQUVFQU5nSmdRUUFQQ3lBR1FRQTJBZ0FMSUFBZ0FoQlFJUWNMSUFjTCtBUUJCbjhDUUVFQlFUQVFGeUlDQkg4Z0FpQUFLQUxnQVNJQi9RQURBUDBMQXdBZ0FpQUJLUU1RTndNUUlBSWdBU2dDR0NJQk5nSVlJQUlnQVVFWWJCQVlJZ0UyQWh3Z0FVVUVRQ0FDRUJSQkFBOExBa0FnQUNnQzRBRW9BaHdpQXdSQUlBRWdBeUFDS0FJWVFSaHNFQllhREFFTElBRVFGQ0FDUVFBMkFod0xJQUlnQUNnQzRBRW9BaVFpQVRZQ0pDQUNJQUZCS0JBWElnRTJBaWdnQVVVRVFDQUNLQUljRUJRZ0FoQVVRUUFQQ3dKQUlBQW9BdUFCS0FJb0JFQWdBaWdDSkVVTkFRTkFJQUVnQlVFb2JDSURhaUFBS0FMZ0FTZ0NLQ0FEYWlnQ0ZDSUJOZ0lVSUFGQkdHd1FHQ0VCSUFJb0FpZ2lCQ0FEYWlJR0lBRTJBaGdnQVVVRVFDQUZCSDlCQUNFQkEwQWdBaWdDS0NBQlFTaHNhaWdDR0JBVUlBRkJBV29pQVNBRlJ3MEFDeUFDS0FJb0JTQUVDeEFVREFVTEFrQWdBQ2dDNEFFb0FpZ2dBMm9vQWhnaUJBUkFJQUVnQkNBR0tBSVVRUmhzRUJZYUlBSW9BaWdoQVF3QkN5QUJFQlFnQWlnQ0tDSUJJQU5xUVFBMkFoZ0xJQUVnQTJvZ0FDZ0M0QUVvQWlnZ0Eyb29BZ1FpQVRZQ0JDQUJRUmhzRUJnaEFTQUNLQUlvSWdRZ0Eyb2lCaUFCTmdJUUlBRkZCRUFnQlFSL1FRQWhBUU5BSUFGQktHd2lBQ0FDS0FJb2FpZ0NHQkFVSUFJb0FpZ2dBR29vQWhBUUZDQUJRUUZxSWdFZ0JVY05BQXNnQWlnQ0tBVWdCQXNRRkF3RkN3SkFJQUFvQXVBQktBSW9JQU5xS0FJUUlnUUVRQ0FCSUFRZ0JpZ0NCRUVZYkJBV0dpQUNLQUlvSVFFTUFRc2dBUkFVSUFJb0FpZ2lBU0FEYWtFQU5nSVFDeUFCSUFOcVFnQTNBaUFnQlVFQmFpSUZJQUlvQWlSSkRRQUxEQUVMSUFFUUZDQUNRUUEyQWlnTElBSUZRUUFMRHdzZ0FpZ0NIQkFVSUFJUUZFRUFDNkFHQVE1L0l3QkJFR3NpQ0NRQUlBQW9BbUFvQWhBaERTQUlRUUZCT0JBWElnRTJBZ3dDUUNBQlJRMEFJQUVnQUNnQ1lDZ0NFQ0lKTmdJWUlBRWdBUDBBQW16OUN3SUFJQUVnQUNnQ2dBRTJBaEFnQUNnQ2hBRWhBeUFCUVFBMkFqUWdBU0FETmdJVUlBRWdBQ2dDRENJTUtBSUFOZ0lnSUFFZ0RDZ0NCRFlDSkNBQklBd29BZ2cyQWlnZ0FTQU1LQUlRTmdJc0lBRWdDVUc0Q0JBWElnQTJBakFnQUFSQUlBMEVRQU5BSUE1QnVBaHNJZ0FnRENnQzBDdHFJZ1FvQWdRaEFpQUJLQUl3SUFCcUlnVWdCUDBBQWdEOUN3SUVJQVVnQkNnQ0VEWUNGQ0FGSUFRb0FoUTJBaGdnQWtFZ1RRUkFJQVZCdEFkcUlBUkJzQWRxSUFJUUZob2dCVUd3Qm1vZ0JFR3NCbW9nQkNnQ0JCQVdHZ3NnQlNBRUtBSVlJZ0EyQWh3Z0JTQUVLQUtrQmpZQ3FBWkJBU0VHQWtBZ0FFRUJSd1JBSUFRb0FnUkJBMndpQUVFRGEwSGZBRXNOQVNBQVFRSnJJUVlMSUFWQnBBTnFJUWtnQlVFZ2FpRUtJQVJCSEdvaEMwRUFJUUFDUUNBR1FRaEpEUUFnQkNBR1FRTjBha0VjYWlBS1N3UkFJQXNnQlNBR1FRSjBha0drQTJwSkRRRUxJQVpCZkhFaEFFRUFJUU1EUUNBS0lBTkJBblFpQW1vZ0N5QURRUU4wYWlJSFFSeHFJQWRCRkdvZ0IwRU1haUFIL1Z3Q0JQMVdBZ0FCL1ZZQ0FBTDlWZ0lBQS8wTEFnQWdBaUFKYWlBSFFSaHFJQWRCRUdvZ0IwRUlhaUFIL1Z3Q0FQMVdBZ0FCL1ZZQ0FBTDlWZ0lBQS8wTEFnQWdBMEVFYWlJRElBQkhEUUFMSUFBZ0JrWU5BUXNnQUVFQmNpRUNJQVpCQVhFRVFDQUtJQUJCQW5RaUEyb2dDeUFBUVFOMGFpSUFLQUlFTmdJQUlBTWdDV29nQUNnQ0FEWUNBQ0FDSVFBTElBSWdCa1lOQUFOQUlBb2dBRUVDZENJRGFpQUxJQUJCQTNScUlnSW9BZ1EyQWdBZ0F5QUphaUFDS0FJQU5nSUFJQW9nQUVFQmFpSUNRUUowSWdOcUlBc2dBa0VEZEdvaUFpZ0NCRFlDQUNBRElBbHFJQUlvQWdBMkFnQWdBRUVDYWlJQUlBWkhEUUFMQ3lBRklBUW9BcWdHTmdLc0JpQU9RUUZxSWc0Z0RVY05BQXNMSUFFaEFnd0JDeUFJUVF4cUJFQWdDQ2dDRENJQktBSXdJZ0FFZnlBQUVCUWdDQ2dDREFVZ0FRc1FGQ0FJUVFBMkFnd0xDeUFJUVJCcUpBQWdBZ3Y1QkFFSWZ5TUFRWUFDYXlJREpBQWdBQVJBUWVrTlFSRWdBaEFoSUFNZ0FDZ0NBRFlDOEFFZ0FrR0hFaUFEUWZBQmFoQWFJQU1nQUNnQ0JEWUM0QUVnQWtHVUVpQURRZUFCYWhBYUlBTWdBQ2dDQ0RZQzBBRWdBa0czT0NBRFFkQUJhaEFhSUFNZ0FDZ0NFRFlDd0FFZ0FrSHFFU0FEUWNBQmFoQWFJQUZCQUVvRVFBTkFJQUFvQXRBcklRUWdBeUFITmdLd0FTQUNRWThPSUFOQnNBRnFFQm9nQXlBRUlBZEJ1QWhzYWlJRUtBSUFOZ0tnQVNBQ1FZWVNJQU5Cb0FGcUVCb2dBeUFFS0FJRU5nS1FBU0FDUWFrNUlBTkJrQUZxRUJvZ0F5QUVLQUlJTmdLQUFTQUNRZFUzSUFOQmdBRnFFQm9nQXlBRUtBSU1OZ0p3SUFKQjVUY2dBMEh3QUdvUUdpQURJQVFvQWhBMkFtQWdBa0gxRVNBRFFlQUFhaEFhSUFNZ0JDZ0NGRFlDVUNBQ1FlczVJQU5CMEFCcUVCcEIrZ3RCRnlBQ0VDRWdCQ2dDQkFSQUlBUkJzQWRxSVFZZ0JFR3NCbW9oQ0VFQUlRVURRQ0FJSUFWQkFuUWlDV29vQWdBaENpQURJQVlnQ1dvb0FnQTJBa1FnQXlBS05nSkFJQUpCK0F3Z0EwRkFheEFhSUFWQkFXb2lCU0FFS0FJRVNRMEFDd3NnQWhCN0lBTWdCQ2dDR0RZQ01DQUNRZlUzSUFOQk1Hb1FHaUFESUFRb0FxUUdOZ0lnSUFKQnBqZ2dBMEVnYWhBYVFRRWhCa0dTREVFVUlBSVFJUUpBSUFRb0FoaEJBVWNFUUNBRUtBSUVJZ1ZCQUV3TkFTQUZRUU5zUVFKcklRWUxJQVJCSEdvaENFRUFJUVVEUUNBRElBZ2dCVUVEZEdvcEFnQkNJSWszQXhBZ0FrSDREQ0FEUVJCcUVCb2dCVUVCYWlJRklBWkhEUUFMQ3lBQ0VIc2dBeUFFS0FLb0JqWUNBQ0FDUVpVNElBTVFHa0dHRFVFRklBSVFJU0FIUVFGcUlnY2dBVWNOQUFzTFFZY05RUVFnQWhBaEN5QURRWUFDYWlRQUMrc0pBd2wvQVg0QmV5TUFRYkFCYXlJRkpBQUNRQ0FCUVlBRGNRUkFRWkl1UVFzZ0FoQWhEQUVMQWtBZ0FVRUJjVVVOQUNBQUtBSmdJZ1pGRFFBakFFSFFBR3NpQXlRQVFkc05RUTBnQWhBaElBTkJBRG9BVHlBRFFRazZBRTRnQXlBR0tRSUFOd0pFSUFNZ0EwSE9BR29pQkRZQ1FDQUNRYnM2SUFOQlFHc1FHaUFESUFZcEFnZzNBalFnQXlBRU5nSXdJQUpCcWpvZ0EwRXdhaEFhSUFNZ0JpZ0NFRFlDSkNBRElBUTJBaUFnQWtISU9DQURRU0JxRUJvQ1FDQUdLQUlZUlEwQUlBWW9BaEJGRFFBRFFDQURJQU5CemdCcUlnczJBaEFnQXlBSU5nSVVJQUpCK3cwZ0EwRVFhaEFhSUFZb0FoZ2dDRUUwYkdvaENTTUFRVEJySWdRa0FDQUVRUWs3QUM0Z0JFRUpPZ0F0SUFRZ0NTa0NBRGNDSkNBRUlBUkJMV29pQ2pZQ0lDQUNRWVE0SUFSQklHb1FHaUFFSUFrb0FoZzJBaFFnQkNBS05nSVFJQUpCK2prZ0JFRVFhaEFhSUFRZ0NTZ0NJRFlDQkNBRUlBbzJBZ0FnQWtIZk9TQUVFQm9nQkVFd2FpUUFJQU1nQ3pZQ0FDQUNRWUVOSUFNUUdpQUlRUUZxSWdnZ0JpZ0NFRWtOQUFzTFFZa05RUUlnQWhBaElBTkIwQUJxSkFBTEFrQWdBVUVDY1VVTkFDQUFLQUpnUlEwQVFlWU9RU1FnQWhBaElBVWdBQ2tDYkRjRG9BRWdBa0hVRWlBRlFhQUJhaEFhSUFVZ0FDa0NkRGNEa0FFZ0FrR3lFaUFGUVpBQmFoQWFJQVVnQUNrRGdBRTNBNEFCSUFKQnhCSWdCVUdBQVdvUUdpQUFLQUlNSUFBb0FtQW9BaEFnQWhCVVFZa05RUUlnQWhBaEN3SkFJQUZCQ0hGRkRRQWdBQ2dDWUVVTkFDQUFLQUtBQVNBQUtBS0VBV3dpQkVVTkFDQUFLQUswQVNFREEwQWdBeUFBS0FKZ0tBSVFJQUlRVkNBRFFZd3NhaUVESUFkQkFXb2lCeUFFUncwQUN3c2dBVUVRY1VVTkFDQUFLQUxnQVNFQVFjQU9RU1VnQWhBaElBVWdBUDBBQXdEOUN3UndJQUpCdlN3Z0JVSHdBR29RR2tHdURrRVJJQUlRSVFKQUlBQW9BaHhGRFFBZ0FDZ0NHRVVOQUVFQUlRTURRQ0FBS0FJY0lBTkJHR3hxSWdFdkFRQWhCQ0FCS1FNSUlRd2dCU0FCS0FJUU5nSmdJQVVnRERjRFdDQUZJQVEyQWxBZ0FrSEFPU0FGUWRBQWFoQWFJQU5CQVdvaUF5QUFLQUlZU1EwQUN3dEJodzFCQkNBQ0VDRUNRQ0FBS0FJb0lnUkZEUUFnQUNnQ0pDSUdSUTBBUVFBaEIwRUFJUU1EUUFKQUlBUWdBMEVvYkdvaUFTZ0NCQ0lJUlEwQUlBRW9BaEFpQVVVTkFDQUJLUU1BUWdCWERRQWdBU2tEQ0VJQVVnMEFRZm9LRUhnTkFnc2dCeUFJYWlFSElBTkJBV29pQXlBR1J3MEFDeUFIUlEwQVFaME9RUkFnQWhBaElBQW9BaVFFUUNBQUtBSW9JUUZCQUNFSEEwQWdCU0FCSUFkQktHd2lCR29vQWdRaUJqWUNSQ0FGSUFjMkFrQWdBa0dHT2lBRlFVQnJFQm9nQUNnQ0tDRUJBa0FnQmtVTkFFRUFJUU1nQVNBRWFpZ0NFRVVOQUFOQUlBQW9BaWdnQkdvb0FoQWdBMEVZYkdvaUFmMEFBd0FoRFNBRklBRXBBeEEzQXpnZ0JTQU4vUXNES0NBRklBTTJBaUFnQWtHVjFRQWdCVUVnYWhBYUlBTkJBV29pQXlBR1J3MEFDeUFBS0FJb0lRRUxBa0FnQVNBRWFpSUdLQUlZUlEwQVFRQWhBeUFHS0FJVVJRMEFBMEFnQVNBRWFpZ0NHQ0FEUVJoc2FpSUJMd0VBSVFZZ0FTa0RDQ0VNSUFVZ0FTZ0NFRFlDRUNBRklBdzNBd2dnQlNBR05nSUFJQUpCd0RrZ0JSQWFJQU5CQVdvaUF5QUFLQUlvSWdFZ0JHb29BaFJKRFFBTEN5QUhRUUZxSWdjZ0FDZ0NKRWtOQUFzTFFZY05RUVFnQWhBaEMwR0pEVUVDSUFJUUlRc2dCVUd3QVdva0FBdVJBZ0VEZndKQVFRRkJnQUlRRnlJQkJIOGdBVUVCTmdJQUlBRkJBVFlDMEFFZ0FTQUJMUURVQVVFR2Nqb0ExQUVnQVVFQlFZd3NFQmNpQURZQ0RDQUFSUTBCSUFGQkFVSG9CeEFYSWdBMkFoQWdBRVVOQVNBQlFnQTNBekFnQVVGL05nSXNJQUZCNkFjMkFoUUNRRUVCUVRBUUZ5SUFCRUFnQUVFQU5nSVlJQUJCNUFBMkFpQWdBRUhrQUVFWUVCY2lBallDSENBQ0RRRWdBQkFVQ3lBQlFRQTJBdUFCREFJTElBQkJBRFlDS0NBQklBQTJBdUFCSUFFUU9TSUFOZ0xjQVNBQVJRMEJJQUVRT1NJQU5nTFlBU0FBUlEwQkFrQkI1Z29RZUVVTkFBc2dBVUVBRUhNaUFEWUM3QUVnQUVVRVFDQUJRUUFRY3lJQU5nTHNBU0FBUlEwQ0N5QUJCVUVBQ3c4TElBRVFRRUVBQzVBSkFnbC9BWDRqQUVIUUFXc2lCeVFBSUFBb0FtQWhDUUpBQWtBQ1FDQUFLQUtBQVVFQlJ3MEFJQUFvQW9RQlFRRkhEUUFnQUNnQ3RBRW9BdHdyRFFFTElBQW9BZ2hCQ0VZTkFDQUdRUUZCMGRJQVFRQVFFd3dCQ3dKQUlBRW9BaEFpREVVTkFDQUFLQUs0QVNFS0lBRW9BaGdoQ3lBTVFRaFBCRUFnREVGNGNTRVBBMEFnQ3lBSVFUUnNhaUFLTmdJb0lBc2dDRUVCY2tFMGJHb2dDallDS0NBTElBaEJBbkpCTkd4cUlBbzJBaWdnQ3lBSVFRTnlRVFJzYWlBS05nSW9JQXNnQ0VFRWNrRTBiR29nQ2pZQ0tDQUxJQWhCQlhKQk5HeHFJQW8yQWlnZ0N5QUlRUVp5UVRSc2FpQUtOZ0lvSUFzZ0NFRUhja0UwYkdvZ0NqWUNLQ0FJUVFocUlRZ2dEa0VJYWlJT0lBOUhEUUFMQ3lBTVFRZHhJZ3hGRFFBRFFDQUxJQWhCTkd4cUlBbzJBaWdnQ0VFQmFpRUlJQTFCQVdvaURTQU1SdzBBQ3dzZ0FpQURjaUFFY2lBRmNrVUVRQ0FHUVFSQm96RkJBQkFUSUFCQ0FEY0NIQ0FBSUFBcEFvQUJOd0lrSUFFZ0NmMEFBZ0Q5Q3dJQUlBRWdCaEEvSVFnTUFRc2dBa0VBU0FSQUlBY2dBallDQUNBR1FRRkJsZUlBSUFjUUUwRUFJUWdNQVFzZ0NTZ0NDQ0lJSUFKSkJFQWdCeUFJTmdJVUlBY2dBallDRUNBR1FRRkI2ZVVBSUFkQkVHb1FFMEVBSVFnTUFRc0NRQ0FKS0FJQUlnZ2dBa3NFUUNBSElBZzJBc1FCSUFjZ0FqWUN3QUVnQmtFQ1Fjbm9BQ0FIUWNBQmFoQVRJQUJCQURZQ0hDQUpLQUlBSVFJTUFRc2dBQ0FDSUFBb0FteHJJQUFvQW5SdU5nSWNDeUFCSUFJMkFnQWdBMEVBU0FSQUlBY2dBellDSUNBR1FRRkIxZUVBSUFkQklHb1FFMEVBSVFnTUFRc2dDU2dDRENJQ0lBTkpCRUFnQnlBQ05nSTBJQWNnQXpZQ01DQUdRUUZCdk9RQUlBZEJNR29RRTBFQUlRZ01BUXNDUUNBSktBSUVJZ0lnQTBzRVFDQUhJQUkyQXJRQklBY2dBellDc0FFZ0JrRUNRWnJuQUNBSFFiQUJhaEFUSUFCQkFEWUNJQ0FKS0FJRUlRTU1BUXNnQUNBRElBQW9BbkJySUFBb0FuaHVOZ0lnQ3lBQklBTTJBZ1JCQUNFSUlBUkJBRXdFUUNBSElBUTJBa0FnQmtFQlFaUGhBQ0FIUVVCckVCTU1BUXNnQ1NnQ0FDSUNJQVJMQkVBZ0J5QUNOZ0pVSUFjZ0JEWUNVQ0FHUVFGQjhPY0FJQWRCMEFCcUVCTU1BUXNDUUNBSktBSUlJZ0lnQkVrRVFDQUhJQUkyQXFRQklBY2dCRFlDb0FFZ0JrRUNRWkhsQUNBSFFhQUJhaEFUSUFBZ0FDZ0NnQUUyQWlRZ0NTZ0NDQ0VFREFFTElBQWdBRFVDZENJUUlBUWdBQ2dDYkd1dGZFSUJmU0FRZ0Q0Q0pBc2dBU0FFTmdJSUlBVkJBRXdFUUNBSElBVTJBbUFnQmtFQlFkRGdBQ0FIUWVBQWFoQVREQUVMSUFrb0FnUWlBaUFGU3dSQUlBY2dBallDZENBSElBVTJBbkFnQmtFQlFjRG1BQ0FIUWZBQWFoQVREQUVMQWtBZ0NTZ0NEQ0lDSUFWSkJFQWdCeUFDTmdLVUFTQUhJQVUyQXBBQklBWkJBa0hqNHdBZ0IwR1FBV29RRXlBQUlBQW9Bb1FCTmdJb0lBa29BZ3doQlF3QkN5QUFJQUExQW5naUVDQUZJQUFvQW5CcnJYeENBWDBnRUlBK0FpZ0xJQUVnQlRZQ0RDQUFJQUF0QUZ4QkFuSTZBRndnQVNBR0VEOUZCRUFNQVFzZ0J5QUIvUUFDQVAwTEJJQUJJQVpCQkVIcE9pQUhRWUFCYWhBVFFRRWhDQXNnQjBIUUFXb2tBQ0FJQzVFQ0FRWi9Jd0JCSUdzaUJTUUFBbjhnQUNnQ1lDSUVSUVJBSUFOQkFVR1Q2d0JCQUJBVFFRQU1BUXRCQUVFRUlBUW9BaEFRRnlJRVJRMEFHaUFCQkVBZ0FDZ0NZQ0VJQTBBQ1FBSkFJQUlnQmtFQ2RHb29BZ0FpQnlBSUtBSVFUd1JBSUFVZ0J6WUNFQ0FEUVFGQjVoSWdCVUVRYWhBVERBRUxJQVFnQjBFQ2RHb2lDU2dDQUVVTkFTQUZJQWMyQWdBZ0EwRUJRZm9hSUFVUUV3c2dCQkFVUVFBTUF3c2dDVUVCTmdJQUlBWkJBV29pQmlBQlJ3MEFDd3NnQkJBVUlBQW9Ba0FRRkFKQUlBRUVRQ0FBSUFGQkFuUWlCQkFZSWdNMkFrQWdBMFVFUUNBQVFRQTJBanhCQUF3REN5QURJQUlnQkJBV0dnd0JDeUFBUVFBMkFrQUxJQUFnQVRZQ1BFRUJDeUFGUVNCcUpBQUxtZ1FCQjM4Z0FVRUJRU1FRRnlJRU5nSmdBa0FDUUNBRVJRMEFBa0FnQVNnQzNBRkJFaUFERUNnRVFDQUJLQUxjQVVFVElBTVFLQTBCQ3d3Q0N5QUJLQUxjQVNJSEtBSUFJUVVnQnlnQ0NDRUdBa0FnQlFSQVFRRWhCQ0FGUVFGeElRZ2dCVUVCUmdSL1FRQUZJQVZCZm5FaEJRTkFBbjlCQUNBRVJRMEFHa0VBSUFFZ0FDQURJQVlvQWdBUkFBQkZEUUFhSUFFZ0FDQURJQVlvQWdRUkFBQkJBRWNMSVFRZ0JrRUlhaUVHSUFsQkFtb2lDU0FGUncwQUN5QUVSUXNoQlVFQUlBUWdDQnNoQkFKQUlBaEZEUUFnQlEwQUlBRWdBQ0FESUFZb0FnQVJBQUJCQUVjaEJBc2dCMEVBTmdJQUlBUU5BUXdEQ3lBSFFRQTJBZ0FMQWtBZ0FTZ0MyQUZCRkNBREVDZ0VRQ0FCS0FMWUFVRVZJQU1RS0EwQkN3d0NDeUFCS0FMWUFTSUhLQUlBSVFVZ0J5Z0NDQ0VHQWtBZ0JRUkFRUUVoQkNBRlFRRnhJUWdnQlVFQlJnUi9RUUFGSUFWQmZuRWhCVUVBSVFrRFFBSi9RUUFnQkVVTkFCcEJBQ0FCSUFBZ0F5QUdLQUlBRVFBQVJRMEFHaUFCSUFBZ0F5QUdLQUlFRVFBQVFRQkhDeUVFSUFaQkNHb2hCaUFKUVFKcUlna2dCVWNOQUFzZ0JFVUxJUVZCQUNBRUlBZ2JJUVFDUUNBSVJRMEFJQVVOQUNBQklBQWdBeUFHS0FJQUVRQUFRUUJISVFRTElBZEJBRFlDQUNBRURRRU1Bd3NnQjBFQU5nSUFDeUFDUVFGQkpCQVhJZ0EyQWdBZ0FFVU5BQ0FCS0FKZ0lBQVFTRUVCSVFvTElBb1BDeUFCS0FKZ0VDVWdBVUVBTmdKZ1FRQUxBZ0FMQkFCQkFRczBBQUpBSUFCRkRRQWdBVVVOQUNBQUlBRW9BZ1EyQXJ3QklBQWdBU2dDQURZQ3VBRWdBQ0FCS0FLNFFFRUNjVFlDK0FFTEM3UUZBUWgvSUFBb0FoZ2lCQ2dDRUNJSlJRUkFRUUFQQ3lBRUtBSVlJUVVnQUNnQ0ZDZ0NBQ2dDRkNFRUFrQUNRQ0FCUlFSQVFRQWhBUU5BSUFVb0FoZ2hBaUFFS0FJY0lBUW9BaGhCbUFGc2FpSUFRWXdCYXlnQ0FDSUhJQUJCbEFGcktBSUFJZ2hySVFNZ0FFR1FBV3NvQWdBZ0FFR1lBV3NvQWdCcklRQUNRQ0FISUFoR0RRQWdBSzBnQTYxK1FpQ0lVQTBBREFRTElBQWdBMndoQXdKQVFRUWdBa0VEZGlBQ1FRZHhRUUJIYWlJQUlBQkJBMFliSWdKRkRRQWdBcTBnQTYxK1FpQ0lVQTBBREFRTFFYOGhBQ0FDSUFOc0lnSWdBVUYvYzBzTkFpQUVRY3dBYWlFRUlBVkJOR29oQlNBQklBSnFJZ0VoQUNBR1FRRnFJZ1lnQ1VjTkFBc01BUXRCQUNFQklBQW9Ba0JGQkVBRFFDQUZLQUlZSVFJZ0JDZ0NIQ0FFS0FJWVFaZ0JiR29pQUVFRWF5Z0NBQ0lISUFCQkRHc29BZ0FpQ0dzaEF5QUFRUWhyS0FJQUlBQkJFR3NvQWdCcklRQUNRQ0FISUFoR0RRQWdBSzBnQTYxK1FpQ0lVQTBBREFRTElBQWdBMndoQXdKQVFRUWdBa0VEZGlBQ1FRZHhRUUJIYWlJQUlBQkJBMFliSWdKRkRRQWdBcTBnQTYxK1FpQ0lVQTBBREFRTFFYOGhBQ0FDSUFOc0lnSWdBVUYvYzBzTkFpQUVRY3dBYWlFRUlBVkJOR29oQlNBQklBSnFJZ0VoQUNBR1FRRnFJZ1lnQ1VjTkFBc01BUXNEUUNBRktBSVlJUUlnQkNnQ0hDQUVLQUlZUVpnQmJHb2lBRUdNQVdzb0FnQWlCeUFBUVpRQmF5Z0NBQ0lJYXlFRElBQkJrQUZyS0FJQUlBQkJtQUZyS0FJQWF5RUFBa0FnQnlBSVJnMEFJQUN0SUFPdGZrSWdpRkFOQUF3REN5QUFJQU5zSVFNQ1FFRUVJQUpCQTNZZ0FrRUhjVUVBUjJvaUFDQUFRUU5HR3lJQ1JRMEFJQUt0SUFPdGZrSWdpRkFOQUF3REMwRi9JUUFnQWlBRGJDSUNJQUZCZjNOTERRRWdCRUhNQUdvaEJDQUZRVFJxSVFVZ0FTQUNhaUlCSVFBZ0JrRUJhaUlHSUFsSERRQUxDeUFBRHd0QmZ3dmFCQUVMZnlBQUJFQWdBQ2dDRkNJQkJFQWdBU2dDQUNJRkJFQWdCU2dDRkNFRElBVW9BaEFFZjBFUVFSRWdBQzBBS0VFQmNSc2hDQU5BSUFNb0Fod2lBZ1JBSUFNb0FpQWlBVUdZQVc0aENrRUFJUWtnQVVHWUFVOEVmd05BSUFJb0FqQWlBUVJBSUFJb0FqUWlCa0VvYmlFSFFRQWhCQ0FHUVNoUEJIOERRQ0FCS0FJZ0VDNGdBVUVBTmdJZ0lBRW9BaVFRTGlBQlFRQTJBaVFnQVNBSUVRSUFJQUZCS0dvaEFTQUVRUUZxSWdRZ0IwY05BQXNnQWlnQ01BVWdBUXNRRkNBQ1FRQTJBakFMSUFJb0FsUWlBUVJBSUFJb0FsZ2lCa0VvYmlFSFFRQWhCQ0FHUVNoUEJIOERRQ0FCS0FJZ0VDNGdBVUVBTmdJZ0lBRW9BaVFRTGlBQlFRQTJBaVFnQVNBSUVRSUFJQUZCS0dvaEFTQUVRUUZxSWdRZ0IwY05BQXNnQWlnQ1ZBVWdBUXNRRkNBQ1FRQTJBbFFMSUFJb0FuZ2lBUVJBSUFJb0Fud2lCa0VvYmlFSFFRQWhCQ0FHUVNoUEJIOERRQ0FCS0FJZ0VDNGdBVUVBTmdJZ0lBRW9BaVFRTGlBQlFRQTJBaVFnQVNBSUVRSUFJQUZCS0dvaEFTQUVRUUZxSWdRZ0IwY05BQXNnQWlnQ2VBVWdBUXNRRkNBQ1FRQTJBbmdMSUFKQm1BRnFJUUlnQ1VFQmFpSUpJQXBIRFFBTElBTW9BaHdGSUFJTEVCUWdBMEVBTmdJY0N3SkFJQU1vQWloRkRRQWdBeWdDSkNJQlJRMEFJQUVRRkNBRC9Rd0FBQUFBQUFBQUFBQUFBQUFBQUFBQS9Rc0NKQXNnQXlnQ05CQVVJQU5CekFCcUlRTWdDMEVCYWlJTElBVW9BaEJKRFFBTElBVW9BaFFGSUFNTEVCUWdCVUVBTmdJVUlBQW9BaFFvQWdBUUZDQUFLQUlVSWdGQkFEWUNBQXNnQVJBVUlBQkJBRFlDRkFzZ0FDZ0NSQkFVSUFBUUZBc0wyUk1CRVg4akFFRWdheUlQSkFBZ0R5QUZOZ0lZSUFFZ0F5Z0NIRUhNQUd4cUtBSWNJQU1vQWlCQm1BRnNhaUVRQWtBQ1FDQURLQUlvRFFBZ0VDZ0NHRVVOQUNBUVFSeHFJUWtEUUFKQUlBa29BZ2dnQ1NnQ0FFY0VmeUFKS0FJTUlBa29BZ1JHQlVFQkN3MEFJQU1vQWlRaUFTQUpLQUlZUVNodVR3UkFJQWhCQVVIdkZVRUFFQk1NQkFzZ0NTZ0NGQ0FCUVNoc2FpSUJLQUlnRUdzZ0FTZ0NKQkJySUFFb0FoUWdBU2dDRUd3aURFVU5BQ0FCS0FJWUlRRWdERUVJVHdSQUlBeEJlSEVoQzBFQUlRb0RRQ0FCUWdBM0FvUUVJQUZDQURjQ3dBTWdBVUlBTndMOEFpQUJRZ0EzQXJnQ0lBRkNBRGNDOUFFZ0FVSUFOd0t3QVNBQlFnQTNBbXdnQVVJQU53SW9JQUZCb0FScUlRRWdDa0VJYWlJS0lBdEhEUUFMQzBFQUlRb2dERUVIY1NJTVJRMEFBMEFnQVVJQU53SW9JQUZCeEFCcUlRRWdDa0VCYWlJS0lBeEhEUUFMQ3lBSlFTUnFJUWtnRFVFQmFpSU5JQkFvQWhoSkRRQUxDeUFGSVF3Q1FDQUNMUUFBUVFKeFJRMEFJQWRCQlUwRVFDQUlRUUpCdnlCQkFCQVREQUVMQWtBZ0JTMEFBRUgvQVVZRVFDQUZMUUFCUVpFQlJnMEJDeUFJUVFKQjZTQkJBQkFUREFFTElBOGdCVUVHYWlJTU5nSVlDMEVVRUJnaUMwVU5BQUovSUFBdEFHeEJBWEVFUUNBQVFTaHFJUkVnQUNnQ0tDRU1JQUJCTEdvTUFRc2dBaTBBaUN4QkFuRUVRQ0FDUWJBb2FpRVJJQUlvQXJBb0lRd2dBa0c4S0dvTUFRc2dEeUFGSUFkcUlBeHJOZ0ljSUE5QkdHb2hFU0FQUVJ4cUN5SVNLQUlBSVFBZ0MwSUFOd0lNSUFzZ0REWUNDQ0FMSUF3MkFnQWdDeUFBSUF4cU5nSUVJQXRCQVJBalJRUkFJQXNRYlJvZ0N5Z0NDQ0FMS0FJQWF5QUxFRElnREdvaEFDQVJLQUlBSVFFZ0VpQVNLQUlBSWdNZ0FpMEFBRUVFY1FSL0lBTWdBR3NnQVdwQkFVMEVRQ0FJUVFGQm9TSkJBQkFUREFNTEFrQWdBQzBBQUVIL0FVWUVRQ0FBTFFBQlFaSUJSZzBCQ3lBSVFRRkJqQ0pCQUJBVERBTUxJQUJCQW1vRklBQUxJQUZySWdCck5nSUFJQkVnQUNBQmFqWUNBQ0FFUVFBMkFnQWdCaUFQS0FJWUlBVnJOZ0lBUVFFaEZ3d0JDeUFRS0FJWUJFQWdFRUVjYWlFSEEwQWdBeWdDSkNFQUlBY29BaFFoQVFKQUlBY29BZ2dnQnlnQ0FFY0VmeUFIS0FJTUlBY29BZ1JHQlVFQkN3MEFJQUVnQUVFb2JHb2lGQ2dDRkNBVUtBSVFiQ0lZUlEwQUlCUW9BaGdoQ1VFQUlSVURRQUpBQW44Z0NTZ0NLRVVFUUNBTElCUW9BaUFnRlNBREtBSW9RUUZxRUdrTUFRc2dDMEVCRUNNTFJRUkFJQWxCQURZQ0pBd0JDeUFKS0FJb1JRUkFRUUFoQVFOQUlBRWlBRUVCYWlFQklBc2dGQ2dDSkNBVklBQVFhVVVOQUFzZ0J5Z0NIQ0VCSUFsQkF6WUNJQ0FKSUFFMkFoZ2dDU0FCSUFCclFRRnFOZ0ljQ3lBSkFuOUJBU0FMUVFFUUkwVU5BQnBCQWlBTFFRRVFJMFVOQUJvZ0MwRUNFQ01pQUVFRFJ3UkFJQUJCQTJvTUFRc2dDMEVGRUNNaUFFRWZSd1JBSUFCQkJtb01BUXNnQzBFSEVDTkJKV29MTmdJa1FRQWhBUU5BSUFFaUFFRUJhaUVCSUF0QkFSQWpEUUFMSUFrZ0NTZ0NJQ0FBYWpZQ0lBSkFBa0FDZnlBSktBSW9JZ0JGQkVBZ0FpZ0MwQ3NnQXlnQ0hFRzRDR3hxS0FJUUlRQWdDU2dDTUVVRVFDQUpLQUlBUWZBQkVCc2lBVVVOQkNBSklBRTJBZ0FnQVNBSktBSXdRUmhzYWtFQVFmQUJFQmthSUFsQkNqWUNNQXNnQ1NnQ0FDSUtJZ0g5REFBQUFBQUFBQUFBQUFBQUFBQUFBQUQ5Q3dJQUlBRkNBRGNDRUVFQlFRcEI3UUFnQUVFQmNSc2dBRUVFY1JzaEFVRUFEQUVMSUFrb0FnQWlBU0FBUVFGcklnMUJHR3hxSWdvb0FnUWdDaWdDREVjTkFTQUNLQUxRS3lBREtBSWNRYmdJYkdvb0FoQWhEU0FKS0FJd0lnb2dBRUVCYWtrRWZ5QUJJQXBCQ21vaUNrRVliQkFiSWdGRkRRTWdDU0FCTmdJQUlBRWdDU2dDTUVFWWJHcEJBRUh3QVJBWkdpQUpJQW8yQWpBZ0NTZ0NBQVVnQVFzZ0FFRVliR29pQ2lJQi9Rd0FBQUFBQUFBQUFBQUFBQUFBQUFBQS9Rc0NBQ0FCUWdBM0FoQUNmMEVCSUExQkJIRU5BQnBCN1FBZ0RVRUJjVVVOQUJwQkFrRUNRUUVnQ2tFTWF5Z0NBQ0lCUVFwR0d5QUJRUUZHR3dzaEFTQUFDeUVOSUFvZ0FUWUNEQXNnQ1NnQ0pDRUFJQUlvQXRBcklBTW9BaHhCdUFoc2FpMEFFRUhBQUhFRVFBTkFJQTFCR0d3aURpQUpLQUlBYWlBQVFRRWdEUnNpRXpZQ0VDQUpLQUlnSVJaQkFDRUtJQUFoQVNBVFFRSlBCRUFEUUNBS1FRRnFJUW9nQVVFRFN5QUJRUUYySVFFTkFBc0xJQW9nRm1vaUFVRWhUd1JBSUE4Z0FUWUNFQ0FJUVFGQml2a0FJQTlCRUdvUUV3d0RDeUFMSUFFUUl5RUtJQWtvQWdBaUFTQU9haUlPSUFvMkFoUWdBQ0FPS0FJUWF5SUFRUUJNRFFNZ0FpZ0MwQ3NnQXlnQ0hFRzRDR3hxS0FJUUlRb2dDU2dDTUNJT0lBMUJBbXBKQkVBZ0FTQU9RUXBxSWc1QkdHd1FHeUlCUlEwRElBa2dBVFlDQUNBQklBa29BakJCR0d4cVFRQkI4QUVRR1JvZ0NTQU9OZ0l3SUFrb0FnQWhBUXNnQVNBTlFRRnFJZzFCR0d4cUlnSDlEQUFBQUFBQUFBQUFBQUFBQUFBQUFBRDlDd0lBSUFGQ0FEY0NFQ0FLUVFSeEJFQWdBVUVCTmdJTURBRUxJQXBCQVhFRVFDQUJRUUpCQWtFQklBRkJER3NvQWdBaUFVRUtSaHNnQVVFQlJoczJBZ3dGSUFGQjdRQTJBZ3dMREFBTEFBc0RRQ0FOUVJoc0lnNGdDU2dDQUdvaUFTQUJLQUlNSUFFb0FnUnJJZ0VnQUNBQUlBRktHeUlCTmdJUUlBa29BaUFoRTBFQUlRb2dBVUVDVHdSQUEwQWdDa0VCYWlFS0lBRkJBMHNnQVVFQmRpRUJEUUFMQ3lBS0lCTnFJZ0ZCSVU4RVFDQVBJQUUyQWdBZ0NFRUJRWXI1QUNBUEVCTU1BZ3NnQ3lBQkVDTWhDaUFKS0FJQUlnRWdEbW9pRGlBS05nSVVJQUFnRGlnQ0VHc2lBRUVBVEEwQ0lBSW9BdEFySUFNb0FoeEJ1QWhzYWlnQ0VDRUtJQWtvQWpBaURpQU5RUUpxU1FSQUlBRWdEa0VLYWlJT1FSaHNFQnNpQVVVTkFpQUpJQUUyQWdBZ0FTQUpLQUl3UVJoc2FrRUFRZkFCRUJrYUlBa2dEallDTUNBSktBSUFJUUVMSUFFZ0RVRUJhaUlOUVJoc2FpSUIvUXdBQUFBQUFBQUFBQUFBQUFBQUFBQUEvUXNDQUNBQlFnQTNBaEFnQ2tFRWNRUkFJQUZCQVRZQ0RBd0JDeUFLUVFGeEJFQWdBVUVDUVFKQkFTQUJRUXhyS0FJQUlnRkJDa1liSUFGQkFVWWJOZ0lNQlNBQlFlMEFOZ0lNQ3d3QUN3QUxJQXNRTWd3RkN5QUpRY1FBYWlFSklCVkJBV29pRlNBWVJ3MEFDd3NnQjBFa2FpRUhJQmxCQVdvaUdTQVFLQUlZU1EwQUN3c2dDeEJ0UlFSQUlBc1FNZ3dCQ3lBTEtBSUlJQXNvQWdCcklBc1FNaUFNYWlFQklCRW9BZ0FoQUNBQ0xRQUFRUVJ4QkVBZ0VpZ0NBQ0FCYXlBQWFrRUJUUVJBSUFoQkFVR2hJa0VBRUJNTUFnc0NRQ0FCTFFBQVFmOEJSZ1JBSUFFdEFBRkJrZ0ZHRFFFTElBaEJBVUdNSWtFQUVCTU1BZ3NnQVVFQ2FpRUJDeUFBSUFGR0RRQWdFaUFTS0FJQUlBQWdBV3RxTmdJQUlCRWdBVFlDQUVFQklSY2dCRUVCTmdJQUlBWWdEeWdDR0NBRmF6WUNBQXNnRDBFZ2FpUUFJQmNMbHlRQ0ZIOE9mZ0pBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FnQUNnQ1ZBNEZBQUVDQXdRS0N3SkFJQUFvQWpRaUJpQUFLQUxFQVNJQlNRUkFJQUFvQWtBaUJ5QUJRUUZxU1EwQkN5QUFLQUxzQVVFQlFZYkNBRUVBRUJNTURBc2dBQ2dDTEVVRVFDQUFLQUlrSVFKQkFDRUJEQVVMSUFCQkFEWUNMQ0FBS0FKRUlRTkJBU0VCREFRTEFrQWdBQ2dDTkNJR0lBQW9Bc1FCSWdGSkJFQWdBQ2dDUUNJSElBRkJBV3BKRFFFTElBQW9BdXdCUVFGQnM4SUFRUUFRRXd3TEN5QUFLQUlzUlFSQUlBQW9BaVFoQkVFQUlRRU1DQXNnQUVFQU5nSXNJQUFvQWpBaEEwRUJJUUVNQndzQ1FDQUFLQUkwSWdRZ0FDZ0N4QUVpQ2trRVFDQUFLQUpBSWc0Z0NrRUJha2tOQVFzZ0FDZ0M3QUZCQVVHNnd3QkJBQkFUREFvTElBQW9BaXhGQkVBZ0FDZ0NLQ0VMREFZTElBQkNBRGNDNUFFZ0FFRUFOZ0lzSUFBb0FzZ0JJUXdEUUNBTUlBZEJCSFJxSWdVb0FnZ2lEd1JBSUFVb0Fnd2hFa0VBSVFFRFFBSkFJQThnQVVGL2Myb2lFQ0FTSUFGQkJIUnFJaEVvQWdCcUlnbEJIMHNOQUNBRktBSUFJaE5CZnlBSmRrc05BQ0FBSUFJZ0V5QUpkQ0lKSUFJZ0NVa2JJQWtnQWhzaUFqWUM1QUVMQWtBZ0VTZ0NCQ0FRYWlJSlFSOUxEUUFnQlNnQ0JDSVFRWDhnQ1haTERRQWdBQ0FESUJBZ0NYUWlDU0FESUFsSkd5QUpJQU1iSWdNMkF1Z0JDeUFCUVFGcUlnRWdEMGNOQUFzTElBZEJBV29pQnlBS1J3MEFDeUFDUlEwSElBTkZEUWNnQUMwQUFFVUVRQ0FBSUFBb0F0QUJOZ0pzSUFBZ0FDZ0N6QUUyQW1RZ0FDQUFLQUxZQVRZQ2NDQUFJQUFvQXRRQk5nSm9DeUFBS0FJd0lRVkJBU0VCREFVTEFrQWdBQ2dDTkNJRklBQW9Bc1FCSWdsSkJFQWdBQ2dDUUNJU0lBbEJBV3BKRFFFTElBQW9BdXdCUVFGQmpjTUFRUUFRRXd3SkN5QUFLQUlzUlFSQUlBQW9Bc2dCSWcwZ0FDZ0NIQ0lFUVFSMGFpRUxJQUFvQWlnaENBd0VDeUFBUWdBM0F1UUJJQUJCQURZQ0xDQUFLQUxJQVNFTkEwQWdEU0FHUVFSMGFpSUtLQUlJSWc0RVFDQUtLQUlNSVJCQkFDRUJBMEFDUUNBT0lBRkJmM05xSWhFZ0VDQUJRUVIwYWlJVEtBSUFhaUlNUVI5TERRQWdDaWdDQUNJVVFYOGdESFpMRFFBZ0FDQUNJQlFnREhRaURDQUNJQXhKR3lBTUlBSWJJZ0kyQXVRQkN3SkFJQk1vQWdRZ0VXb2lERUVmU3cwQUlBb29BZ1FpRVVGL0lBeDJTdzBBSUFBZ0F5QVJJQXgwSWd3Z0F5QU1TUnNnRENBREd5SUROZ0xvQVFzZ0FVRUJhaUlCSUE1SERRQUxDeUFHUVFGcUlnWWdDVWNOQUFzZ0FrVU5CaUFEUlEwR0FrQWdBQzBBQUFSQUlBQW9BbXdoQmd3QkN5QUFJQUFvQXRBQklnWTJBbXdnQUNBQUtBTE1BVFlDWkNBQUlBQW9BdGdCTmdKd0lBQWdBQ2dDMUFFMkFtZ0xRUUVoQVF3REN3SkFJQUFvQWpRaUJpQUFLQUxFQVNJQlNRUkFJQUFvQWtBaUR5QUJRUUZxU1EwQkN5QUFLQUxzQVVFQlFlRENBRUVBRUJNTUJnc2dBQ2dDTEVVRVFDQUFLQUxJQVNBQUtBSWNJZ1pCQkhScUlRVWdBQ2dDS0NFSFFRQWhBUXdDQ3lBQUlBWTJBaHdnQUVFQU5nSXNRUUVoQVF3QkN3TkFBbjhDUUNBQlJRUkFJQUpCQVdvaEFnd0JDeUFBSUFNMkFpZ2dBQ2dDT0NBRFRRMEpJQUFvQWpBaEJFRUFEQUVMUVFFTElRRURRQUpBQWtBQ1FBSkFJQUZGQkVBZ0FDQUVOZ0lnSUFRZ0FDZ0NQRThOQVNBQUlBWTJBaHdnQmlFQlFRQWhCUXdFQ3lBQUlBSTJBaVFnQUNnQ1RDQUNUUVJBSUFBb0Fod2hBVUVCSVFVTUJBc2dBQ2dDRUNBQUtBSWdiQ0FBS0FJTUlBQW9BaWhzYWlBQUtBSVVJQUFvQWh4c2FpQUFLQUlZSUFKc2FpSUJJQUFvQWdoUEJFQU1EQXNnQUNnQ0JDQUJRUUYwYWlJQkx3RUFEUUVNRFFzZ0FDZ0NLRUVCYWlFRERBRUxRUUFoQVF3REMwRUJJUUVNQWdzRFFBSkFBa0FDUUNBRlJRUkFJQUVnQjA4TkFTQUFLQUlnSWdVZ0FDZ0N5QUVnQVVFRWRHb2lEU2dDQ0U4TkF5QUFMUUFBUlFSQUlBQWdEU2dDRENBRlFRUjBhaUlCS0FJTUlBRW9BZ2hzTmdKTUN5QUFLQUpJSVFKQkFTRUJEQVVMSUFBZ0FVRUJhaUlCTmdJY0RBRUxJQUFvQWlCQkFXb2hCRUVBSVFFTUF3dEJBQ0VGREFFTFFRRWhCUXdBQ3dBTEFBc0FDd05BQW44Q1FDQUJSUVJBSUFBZ0IwRUJhaUlITmdJb0RBRUxJQVlnRDA4TkNDQUFRZ0EzQXVRQklBQW9Bc2dCSUFaQkJIUnFJZ1VvQWdnaUMwVU5DQ0FGS0FJTUlRcEJBQ0VDUVFBaEJFRUFJUUVEUUFKQUlBc2dBVUYvYzJvaUNTQUtJQUZCQkhScUlnNG9BZ0JxSWdoQkgwc05BQ0FGS0FJQUlneEJmeUFJZGtzTkFDQUFJQVFnRENBSWRDSUlJQVFnQ0VrYklBZ2dCQnNpQkRZQzVBRUxBa0FnRGlnQ0JDQUphaUlJUVI5TERRQWdCU2dDQkNJSlFYOGdDSFpMRFFBZ0FDQUNJQWtnQ0hRaUNDQUNJQWhKR3lBSUlBSWJJZ0kyQXVnQkN5QUJRUUZxSWdFZ0MwY05BQXNnQkVVTkJpQUNSUTBHQWtBZ0FDMEFBQVJBSUFBb0Ftd2hBZ3dCQ3lBQUlBQW9BdEFCSWdJMkFtd2dBQ0FBS0FMTUFUWUNaQ0FBSUFBb0F0Z0JOZ0p3SUFBZ0FDZ0MxQUUyQW1nTFFRQU1BUXRCQVFzaEFRTkFBa0FDUUFKQUFrQWdBVVVFUUNBQUlBSTJBdUFCSUFJZ0FDZ0NjRThOQVNBQUtBSmtJUTFCQUNFQkRBUUxJQUFvQWpnZ0IwMEVRQ0FBS0FJZ0lRTkJBU0VCREFRTElBQW9BaEFnQUNnQ0lHd2dBQ2dDRENBSGJHb2dBQ2dDRkNBR2JHb2dBQ2dDR0NBQUtBSWtiR29pQVNBQUtBSUlUd1JBREFzTElBQW9BZ1FnQVVFQmRHb2lBUzhCQUEwQkRBd0xJQUFnQmtFQmFpSUdOZ0ljREFFTFFRQWhBUXdEQzBFQklRRU1BZ3NEUUFKQUFrQUNRQ0FBQW44Z0FVVUVRQ0FBSUEwMkF0d0JJQTBnQUNnQ2FFOE5BaUFBS0FJd0RBRUxJQU5CQVdvTElnTTJBaUFnQUNnQ1BDSUJJQVVvQWdnaUJDQUJJQVJKR3lBRFN3UkFJQVVvQWdBaUFTQUJyU0llSUFRZ0EwRi9jMm9pQ0swaUZvWWlGeUFXaUtkSERRTWdCU2dDQkNJRVFuOGdGb2luY1NBRVJ3MERJQVN0SWhVZ0ZvWWlHRUlCZlNJWklBQTFBdGdCZkNBWWdDRWZJQmtnQUNnQzBBRWlDYTE4SUJpQUlSb2dGMElCZlNJYklBQTFBdFFCZkNBWGdDRWdJQnNnQUNnQ3pBRWlEcTE4SUJlQUlSd2dBVUovSUFVb0Fnd2dBMEVFZEdvaUN5Z0NBQ0lLSUFocXJTSWRpS2R4SUFGSERRTWdCQ0FWSUFzb0FnUWlBU0FJYXEwaUZZWWlJU0FWaUtkSERRTWdBQ2dDNEFFaUJLMGlJaUFoZ2tJQVVnUkFJQVFnQ1VjTkJFSi9JQldHUW4rRklCcEMvLy8vL3crRElCYUdnMUFOQkFzZ0FDZ0MzQUVpQkswaUZTQWVJQjJHZ2tJQVVnUkFJQVFnRGtjTkJFSi9JQjJHUW4rRklCeEMvLy8vL3crRElCYUdnMUFOQkFzZ0N5Z0NDQ0lFUlEwRElBc29BZ3hGRFFNZ0hLY2lDeUFncDBZTkF5QWFweUlJSUIrblJnMERJQUFnQUNnQ1JDSUhOZ0lvSUFBZ0ZTQWJmQ0FYZ0tjZ0NuWWdDeUFLZG1zZ0dTQWlmQ0FZZ0tjZ0FYWWdDQ0FCZG1zZ0JHeHFOZ0lrUVFFaEFRd0ZDeUFBS0FMY0FTSUJJQUFvQXVRQklnUnFJQUVnQkhCcklRME1BUXNnQUNnQzRBRWlBU0FBS0FMb0FTSUVhaUFCSUFSd2F5RUNRUUFoQVF3REMwRUFJUUVNQVF0QkFTRUJEQUFMQUFzQUN3QUxBMEFDZndKQUlBRkZCRUFnQUNBSVFRRnFJZ2cyQWlnTUFRc2dBQ0FHTmdMZ0FTQUFLQUp3SUFaTkRRY2dBQ2dDWkNFUFFRQU1BUXRCQVFzaEFRTkFBa0FDUUFKQUFrQWdBVVVFUUNBQUlBODJBdHdCSUE4Z0FDZ0NhRThOQVNBQUlBVTJBaHdnQlNFRVFRQWhBUXdFQ3lBQUtBSTRJQWhOQkVBZ0FDZ0NJQ0VIUVFFaEFRd0VDeUFBS0FJUUlBQW9BaUJzSUFBb0Fnd2dDR3hxSUFBb0FoUWdCR3hxSUFBb0FoZ2dBQ2dDSkd4cUlnRWdBQ2dDQ0U4RVFBd0tDeUFBS0FJRUlBRkJBWFJxSWdFdkFRQU5BUXdMQ3lBQUtBTGdBU0lCSUFBb0F1Z0JJZ1pxSUFFZ0JuQnJJUVlNQVF0QkFDRUJEQU1MUVFFaEFRd0NDd05BQWtBQ1FBSkFBa0FnQVVVRVFDQUVJQkpQRFFJZ0FDQUFLQUl3SWdjMkFpQWdEU0FFUVFSMGFpRUxEQUVMSUFBZ0IwRUJhaUlITmdJZ0N5QUFLQUk4SWdFZ0N5Z0NDQ0lDSUFFZ0Fra2JJQWRMQkVBZ0N5Z0NBQ0lCSUFHdEloNGdBaUFIUVg5emFpSUtyU0lXaGlJWElCYUlwMGNOQXlBTEtBSUVJZ0pDZnlBV2lLZHhJQUpIRFFNZ0FxMGlGU0FXaGlJWVFnRjlJaGtnQURVQzJBRjhJQmlBSVI4Z0dTQUFLQUxRQVNJT3JYd2dHSUFoR2lBWFFnRjlJaHNnQURVQzFBRjhJQmVBSVNBZ0d5QUFLQUxNQVNJTXJYd2dGNEFoSENBQlFuOGdDeWdDRENBSFFRUjBhaUlES0FJQUlna2dDbXF0SWgySXAzRWdBVWNOQXlBQ0lCVWdBeWdDQkNJQklBcHFyU0lWaGlJaElCV0lwMGNOQXlBQUtBTGdBU0lDclNJaUlDR0NRZ0JTQkVBZ0FpQU9SdzBFUW44Z0ZZWkNmNFVnR2tMLy8vLy9ENE1nRm9hRFVBMEVDeUFBS0FMY0FTSUNyU0lWSUI0Z0hZYUNRZ0JTQkVBZ0FpQU1SdzBFUW44Z0hZWkNmNFVnSEVMLy8vLy9ENE1nRm9hRFVBMEVDeUFES0FJSUlnSkZEUU1nQXlnQ0RFVU5BeUFjcHlJRElDQ25SZzBESUJxbklnb2dINmRHRFFNZ0FDQUFLQUpFSWdnMkFpZ2dBQ0FWSUJ0OElCZUFweUFKZGlBRElBbDJheUFaSUNKOElCaUFweUFCZGlBS0lBRjJheUFDYkdvMkFpUkJBU0VCREFVTElBQWdCRUVCYWlJRU5nSWNEQUVMSUFBb0F0d0JJZ0VnQUNnQzVBRWlBbW9nQVNBQ2NHc2hEMEVBSVFFTUF3dEJBQ0VCREFFTFFRRWhBUXdBQ3dBTEFBc0FDd05BQW44Q1FDQUJSUVJBSUFBZ0MwRUJhaUlMTmdJb0RBRUxJQUFnQlRZQ0lDQUFLQUk4SUFWTkRRWWdBQ2dDYkNFSVFRQU1BUXRCQVFzaEFRTkFBa0FDUUFKQUFrQWdBVVVFUUNBQUlBZzJBdUFCSUFnZ0FDZ0NjRThOQVNBQUtBSmtJUTFCQUNFQkRBUUxJQUFvQWpnZ0MwMEVRQ0FBS0FJY0lRWkJBU0VCREFRTElBQW9BaEFnQUNnQ0lHd2dBQ2dDRENBTGJHb2dBQ2dDRkNBQUtBSWNiR29nQUNnQ0dDQUFLQUlrYkdvaUFTQUFLQUlJVHdSQURBa0xJQUFvQWdRZ0FVRUJkR29pQVM4QkFBMEJEQW9MSUFBb0FpQkJBV29oQlF3QkMwRUFJUUVNQXd0QkFTRUJEQUlMQTBBQ1FBSkFBa0FDUUNBQlJRUkFJQUFnRFRZQzNBRWdEU0FBS0FKb1R3MENJQUFnQkRZQ0hDQUVJUVlNQVFzZ0FDQUdRUUZxSWdZMkFod0xJQVlnRGtrRVFDQUFLQUlnSWdjZ0FDZ0N5QUVnQmtFRWRHb2lBU2dDQ0NJRFR3MERJQUVvQWdBaUFpQUNyU0llSUFNZ0IwRi9jMm9pQ3EwaUZvWWlGeUFXaUtkSERRTWdBU2dDQkNJRFFuOGdGb2luY1NBRFJ3MERJQU90SWhVZ0ZvWWlHRUlCZlNJWklBQTFBdGdCZkNBWWdDRWZJQmtnQUNnQzBBRWlENjE4SUJpQUlSb2dGMElCZlNJYklBQTFBdFFCZkNBWGdDRWdJQnNnQUNnQ3pBRWlDYTE4SUJlQUlSd2dBa0ovSUFFb0Fnd2dCMEVFZEdvaUFTZ0NBQ0lISUFwcXJTSWRpS2R4SUFKSERRTWdBeUFWSUFFb0FnUWlBaUFLYXEwaUZZWWlJU0FWaUtkSERRTWdBQ2dDNEFFaUE2MGlJaUFoZ2tJQVVnUkFJQU1nRDBjTkJFSi9JQldHUW4rRklCcEMvLy8vL3crRElCYUdnMUFOQkFzZ0FDZ0MzQUVpQTYwaUZTQWVJQjJHZ2tJQVVnUkFJQU1nQ1VjTkJFSi9JQjJHUW4rRklCeEMvLy8vL3crRElCYUdnMUFOQkFzZ0FTZ0NDQ0lEUlEwRElBRW9BZ3hGRFFNZ0hLY2lBU0FncDBZTkF5QWFweUlLSUIrblJnMERJQUFnQUNnQ1JDSUxOZ0lvSUFBZ0ZTQWJmQ0FYZ0tjZ0IzWWdBU0FIZG1zZ0dTQWlmQ0FZZ0tjZ0FuWWdDaUFDZG1zZ0EyeHFOZ0lrUVFFaEFRd0ZDeUFBS0FMY0FTSUJJQUFvQXVRQklnSnFJQUVnQW5CcklRME1BUXNnQUNnQzRBRWlBU0FBS0FMb0FTSUNhaUFCSUFKd2F5RUlRUUFoQVF3REMwRUFJUUVNQVF0QkFTRUJEQUFMQUFzQUN3QUxBMEFDZndKQUlBRkZCRUFnQkVFQmFpRUVEQUVMSUFBZ0F6WUNJQ0FBS0FJOElBTk5EUVVnQUNnQ1JDRUNRUUFNQVF0QkFRc2hBUU5BQWtBQ1FBSkFBa0FnQVVVRVFDQUFJQUkyQWlnZ0FpQUFLQUk0VHcwQklBQWdCallDSENBR0lRRkJBQ0VGREFRTElBQWdCRFlDSkNBQUtBSk1JQVJOQkVBZ0FDZ0NIQ0VCUVFFaEJRd0VDeUFBS0FJUUlBQW9BaUJzSUFBb0Fnd2dBQ2dDS0d4cUlBQW9BaFFnQUNnQ0hHeHFJQUFvQWhnZ0JHeHFJZ0VnQUNnQ0NFOEVRQXdJQ3lBQUtBSUVJQUZCQVhScUlnRXZBUUFOQVF3SkN5QUFLQUlnUVFGcUlRTU1BUXRCQUNFQkRBTUxRUUVoQVF3Q0N3TkFBa0FDUUFKQUlBVkZCRUFnQVNBSFR3MEJJQUFvQWlBaUJTQUFLQUxJQVNBQlFRUjBhaUlOS0FJSVR3MERJQUF0QUFCRkJFQWdBQ0FOS0FJTUlBVkJCSFJxSWdFb0Fnd2dBU2dDQ0d3MkFrd0xJQUFvQWtnaEJFRUJJUUVNQlFzZ0FDQUJRUUZxSWdFMkFod01BUXNnQUNnQ0tFRUJhaUVDUVFBaEFRd0RDMEVBSVFVTUFRdEJBU0VGREFBTEFBc0FDd0FMUVFBUEN5QUFLQUxzQVVFQlFab0tRUUFRRXd0QkFBOExJQUZCQVRzQkFFRUJDNVlMQVFwL0FrQWdBU2dDQUNBRVFRTnNJZ3gySWdaQmtJQ0FBWEVOQUNBQUlBQkJIR29pRGlBQUtBSnNJQVpCN3dOeGFpMEFBRUVDZEdvaUNqWUNhQ0FBSUFBb0FnUWdDaWdDQUNJSktBSUFJZ2hySWdZMkFnUUNRQ0FJSUFBb0FnQWlCMEVRZGtzRVFDQUpLQUlFSVFzZ0FDQUlOZ0lFSUFvZ0NVRUlRUXdnQmlBSVNTSUdHMm9vQWdBMkFnQWdDeUFMUlNBR0d5RUpJQUFvQWdnaEJnTkFBa0FnQmcwQUlBQW9BaEFpQmtFQmFpRUxJQVl0QUFFaENpQUdMUUFBUWY4QlJnUkFJQXBCa0FGUEJFQWdBQ0FBS0FJTVFRRnFOZ0lNSUFkQmdQNERhaUVIUVFnaEJnd0NDeUFBSUFzMkFoQWdCeUFLUVFsMGFpRUhRUWNoQmd3QkN5QUFJQXMyQWhCQkNDRUdJQWNnQ2tFSWRHb2hCd3NnQUNBR1FRRnJJZ1kyQWdnZ0FDQUhRUUYwSWdjMkFnQWdBQ0FJUVFGMElnZzJBZ1FnQ0VHQWdBSkpEUUFMSUFnaEJnd0JDeUFBSUFjZ0NFRVFkR3NpQnpZQ0FDQUdRWUNBQW5GRkJFQWdDU2dDQkNFTElBb2dDVUVNUVFnZ0JpQUlTU0lJRzJvb0FnQTJBZ0FnQzBVZ0N5QUlHeUVKSUFBb0FnZ2hDQU5BQWtBZ0NBMEFJQUFvQWhBaUNFRUJhaUVMSUFndEFBRWhDaUFJTFFBQVFmOEJSZ1JBSUFwQmtBRlBCRUFnQUNBQUtBSU1RUUZxTmdJTUlBZEJnUDREYWlFSFFRZ2hDQXdDQ3lBQUlBczJBaEFnQnlBS1FRbDBhaUVIUVFjaENBd0JDeUFBSUFzMkFoQkJDQ0VJSUFjZ0NrRUlkR29oQndzZ0FDQUlRUUZySWdnMkFnZ2dBQ0FIUVFGMElnYzJBZ0FnQUNBR1FRRjBJZ1kyQWdRZ0JrR0FnQUpKRFFBTERBRUxJQWtvQWdRaENRc2dDVVVOQUNBQUlBNGdBU2dDQkNBTVFSRnFka0VFY1NBQlFRUnJJZzBvQWdBZ0RFRVRhblpCQVhFZ0FTZ0NBQ0lJSUF4QkVHcDJRY0FBY1NBSUlBeDJRYW9CY1hJZ0NDQU1RUXhxUVE0Z0JCdDJRUkJ4Y25KeUlnOUJrTDRCYWkwQUFFRUNkR29pQ3pZQ2FDQUFJQVlnQ3lnQ0FDSUtLQUlBSWdocklnWTJBZ1FDUUNBSUlBZEJFSFpMQkVBZ0NpZ0NCQ0VKSUFBZ0NEWUNCQ0FMSUFwQkNFRU1JQVlnQ0VraUJodHFLQUlBTmdJQUlBa2dDVVVnQmhzaENpQUFLQUlJSVFZRFFBSkFJQVlOQUNBQUtBSVFJZ1pCQVdvaEN5QUdMUUFCSVFrZ0JpMEFBRUgvQVVZRVFDQUpRWkFCVHdSQUlBQWdBQ2dDREVFQmFqWUNEQ0FIUVlEK0Eyb2hCMEVJSVFZTUFnc2dBQ0FMTmdJUUlBY2dDVUVKZEdvaEIwRUhJUVlNQVFzZ0FDQUxOZ0lRUVFnaEJpQUhJQWxCQ0hScUlRY0xJQUFnQmtFQmF5SUdOZ0lJSUFBZ0IwRUJkQ0lITmdJQUlBQWdDRUVCZENJSU5nSUVJQWhCZ0lBQ1NRMEFDd3dCQ3lBQUlBY2dDRUVRZEdzaUNUWUNBQ0FHUVlDQUFuRkZCRUFnQ2lnQ0JDRUhJQXNnQ2tFTVFRZ2dCaUFJU1NJSUcyb29BZ0EyQWdBZ0IwVWdCeUFJR3lFS0lBQW9BZ2doQndOQUFrQWdCdzBBSUFBb0FoQWlCMEVCYWlFTElBY3RBQUVoQ0NBSExRQUFRZjhCUmdSQUlBaEJrQUZQQkVBZ0FDQUFLQUlNUVFGcU5nSU1JQWxCZ1A0RGFpRUpRUWdoQnd3Q0N5QUFJQXMyQWhBZ0NTQUlRUWwwYWlFSlFRY2hCd3dCQ3lBQUlBczJBaEJCQ0NFSElBa2dDRUVJZEdvaENRc2dBQ0FIUVFGcklnYzJBZ2dnQUNBSlFRRjBJZ2syQWdBZ0FDQUdRUUYwSWdZMkFnUWdCa0dBZ0FKSkRRQUxEQUVMSUFvb0FnUWhDZ3NnQWlBRFFRQWdBMnNnQ2lBUFFaREFBV290QUFBaUFrWWJOZ0lBSUEwZ0RTZ0NBRUVnSUF4MGNqWUNBQ0FCSUFFb0FnQWdBaUFLY3lJRFFSTjBRUkJ5SUF4MGNqWUNBQ0FCSUFFb0FnUkJDQ0FNZEhJMkFnUWdCQ0FGY2tVRVFDQUJRWDRnQUNnQ2ZHdEJBblJxSWdJZ0FpZ0NCRUdBZ0FKeU5nSUVJQUlnQWlnQ0FDQURRUjkwY2tHQWdBUnlOZ0lBSUFKQkJHc2lBaUFDS0FJQVFZQ0FDSEkyQWdBTElBUkJBMGNOQUNBQklBQW9BbnhCQW5ScUlnQkJCR29nQUNnQ0JFRUVjallDQUNBQUlBQW9BZ3hCQVhJMkFnd2dBQ0FBS0FJSUlBTkJFblJ5UVFKeU5nSUlDd3V1Q3dFSmZ3SkFJQUVvQWdBZ0JFRURiQ0lOZGlJSFFaQ0FnQUZ4RFFBZ0IwSHZBM0VpQjBVTkFDQUFJQUJCSEdvaURpQUFLQUpzSUFkcUxRQUFRUUowYWlJTE5nSm9JQUFnQUNnQ0JDQUxLQUlBSWdvb0FnQWlDV3NpQnpZQ0JBSkFJQWtnQUNnQ0FDSUlRUkIyU3dSQUlBb29BZ1FoRENBQUlBazJBZ1FnQ3lBS1FRaEJEQ0FISUFsSklnY2JhaWdDQURZQ0FDQU1JQXhGSUFjYklRb2dBQ2dDQ0NFSEEwQUNRQ0FIRFFBZ0FDZ0NFQ0lIUVFGcUlRd2dCeTBBQVNFTElBY3RBQUJCL3dGR0JFQWdDMEdRQVU4RVFDQUFJQUFvQWd4QkFXbzJBZ3dnQ0VHQS9nTnFJUWhCQ0NFSERBSUxJQUFnRERZQ0VDQUlJQXRCQ1hScUlRaEJCeUVIREFFTElBQWdERFlDRUVFSUlRY2dDQ0FMUVFoMGFpRUlDeUFBSUFkQkFXc2lCellDQ0NBQUlBaEJBWFFpQ0RZQ0FDQUFJQWxCQVhRaUNUWUNCQ0FKUVlDQUFra05BQXNnQ1NFSERBRUxJQUFnQ0NBSlFSQjBheUlJTmdJQUlBZEJnSUFDY1VVRVFDQUtLQUlFSVF3Z0N5QUtRUXhCQ0NBSElBbEpJZ2tiYWlnQ0FEWUNBQ0FNUlNBTUlBa2JJUW9nQUNnQ0NDRUpBMEFDUUNBSkRRQWdBQ2dDRUNJSlFRRnFJUXdnQ1MwQUFTRUxJQWt0QUFCQi93RkdCRUFnQzBHUUFVOEVRQ0FBSUFBb0FneEJBV28yQWd3Z0NFR0EvZ05xSVFoQkNDRUpEQUlMSUFBZ0REWUNFQ0FJSUF0QkNYUnFJUWhCQnlFSkRBRUxJQUFnRERZQ0VFRUlJUWtnQ0NBTFFRaDBhaUVJQ3lBQUlBbEJBV3NpQ1RZQ0NDQUFJQWhCQVhRaUNEWUNBQ0FBSUFkQkFYUWlCellDQkNBSFFZQ0FBa2tOQUFzTUFRc2dDaWdDQkNFS0N3SkFJQXBGRFFBZ0FDQU9JQUVvQWdRZ0RVRVJhblpCQkhFZ0FVRUVheUlQS0FJQUlBMUJFMnAyUVFGeElBRW9BZ0FpQ1NBTlFSQnFka0hBQUhFZ0NTQU5ka0dxQVhGeUlBa2dEVUVNYWtFT0lBUWJka0VRY1hKeWNpSUtRWkMrQVdvdEFBQkJBblJxSWd3MkFtZ2dBQ0FISUF3b0FnQWlDeWdDQUNJSmF5SUhOZ0lFSUFwQmtNQUJhaTBBQUNFT0FrQWdDU0FJUVJCMlN3UkFJQXNvQWdRaENpQUFJQWsyQWdRZ0RDQUxRUWhCRENBSElBbEpJZ2NiYWlnQ0FEWUNBQ0FLSUFwRklBY2JJUXNnQUNnQ0NDRUhBMEFDUUNBSERRQWdBQ2dDRUNJSFFRRnFJUXdnQnkwQUFTRUtJQWN0QUFCQi93RkdCRUFnQ2tHUUFVOEVRQ0FBSUFBb0FneEJBV28yQWd3Z0NFR0EvZ05xSVFoQkNDRUhEQUlMSUFBZ0REWUNFQ0FJSUFwQkNYUnFJUWhCQnlFSERBRUxJQUFnRERZQ0VFRUlJUWNnQ0NBS1FRaDBhaUVJQ3lBQUlBZEJBV3NpQnpZQ0NDQUFJQWhCQVhRaUNEWUNBQ0FBSUFsQkFYUWlDVFlDQkNBSlFZQ0FBa2tOQUFzTUFRc2dBQ0FJSUFsQkVIUnJJZ28yQWdBZ0IwR0FnQUp4UlFSQUlBc29BZ1FoQ0NBTUlBdEJERUVJSUFjZ0NVa2lDUnRxS0FJQU5nSUFJQWhGSUFnZ0NSc2hDeUFBS0FJSUlRZ0RRQUpBSUFnTkFDQUFLQUlRSWdoQkFXb2hEQ0FJTFFBQklRa2dDQzBBQUVIL0FVWUVRQ0FKUVpBQlR3UkFJQUFnQUNnQ0RFRUJhallDRENBS1FZRCtBMm9oQ2tFSUlRZ01BZ3NnQUNBTU5nSVFJQW9nQ1VFSmRHb2hDa0VISVFnTUFRc2dBQ0FNTmdJUVFRZ2hDQ0FLSUFsQkNIUnFJUW9MSUFBZ0NFRUJheUlJTmdJSUlBQWdDa0VCZENJS05nSUFJQUFnQjBFQmRDSUhOZ0lFSUFkQmdJQUNTUTBBQ3d3QkN5QUxLQUlFSVFzTElBSWdBMEVBSUFOcklBc2dEa1liTmdJQUlBOGdEeWdDQUVFZ0lBMTBjallDQUNBQklBRW9BZ0FnQ3lBT2N5SUNRUk4wUVJCeUlBMTBjallDQUNBQklBRW9BZ1JCQ0NBTmRISTJBZ1FnQkNBR2NrVUVRQ0FCSUFWQkFuUnJJZ0FnQUNnQ0JFR0FnQUp5TmdJRUlBQWdBQ2dDQUNBQ1FSOTBja0dBZ0FSeU5nSUFJQUJCQkdzaUFDQUFLQUlBUVlDQUNISTJBZ0FMSUFSQkEwY05BQ0FCSUFWQkFuUnFJZ0FnQUNnQ0JFRUJjallDQkNBQUlBQW9BZ0FnQWtFU2RISkJBbkkyQWdBZ0FFRUVheUlBSUFBb0FnQkJCSEkyQWdBTElBRWdBU2dDQUVHQWdJQUJJQTEwY2pZQ0FBc0xyUUVBSUFCQnNLSUJOZ0prSUFCQnNLSUJOZ0pnSUFCQnNLSUJOZ0pjSUFCQnNLSUJOZ0pZSUFCQnNLSUJOZ0pVSUFCQnNLSUJOZ0pRSUFCQnNLSUJOZ0pNSUFCQnNLSUJOZ0pJSUFCQnNLSUJOZ0pFSUFCQnNLSUJOZ0pBSUFCQnNLSUJOZ0k4SUFCQnNLSUJOZ0k0SUFCQnNLSUJOZ0kwSUFCQnNLSUJOZ0l3SUFCQnNLSUJOZ0lzSUFCQnNLSUJOZ0lvSUFCQnNLSUJOZ0lrSUFCQnNLSUJOZ0lnSUFCQnNLSUJOZ0ljQy9RRkFnbC9BWDRnQUNBQk5nSUFJQUQ5REFBQUFBQUFBQUFBQUFBQUFBQUFBQUQ5Q3dNSUlBQWdBellDSENBQUlBSkJBV3NpQmpZQ0dDQUJRUU54SVFvQ2Z5QUNRUUJNQkVBZ0FTRUVJQU1NQVFzZ0FDQUJRUUZxSWdRMkFnQWdBUzBBQUFzaEFVRUlJUWdnQUVFSU5nSVFJQUFnQVVIL0FVWWlDVFlDRkNBQUlBR3RJZzAzQXdnQ1FDQUtRUU5HRFFBZ0FDQUNRUUpySWdzMkFoZ2dBQUovSUFKQkFrZ0VRQ0FFSVFVZ0F3d0JDeUFBSUFSQkFXb2lCVFlDQUNBRUxRQUFDeUlFUWY4QlJpSUpOZ0lVSUFCQkQwRVFJQUZCL3dGR0d5SUlOZ0lRSUFBZ0JFRUlkQ0FCY3EwaURUY0RDQ0FLUVFKR0JFQWdCU0VFSUFZaEFpQUxJUVlNQVFzZ0FDQUNRUU5ySWd3MkFoZ2dBQUovSUFKQkEwZ0VRQ0FGSVFjZ0F3d0JDeUFBSUFWQkFXb2lCellDQUNBRkxRQUFDeUlCUWY4QlJpSUpOZ0lVSUFCQkIwRUlJQVJCL3dGR0d5QUlhaUlGTmdJUUlBQWdBYTBnQ0syR0lBMkVJZzAzQXdnZ0NrRUJSZ1JBSUFjaEJDQUZJUWdnQ3lFQ0lBd2hCZ3dCQ3lBQUlBSkJCR3NpQmpZQ0dDQUFBbjhnQWtFRVNBUkFJQWNoQkNBRERBRUxJQUFnQjBFQmFpSUVOZ0lBSUFjdEFBQUxJZ0pCL3dGR0lnazJBaFFnQUVFSFFRZ2dBVUgvQVVZYklBVnFJZ2cyQWhBZ0FDQUNyU0FGcllZZ0RZUWlEVGNEQ0NBTUlRSUxBa0FnQWtFRlRnUkFJQVFvQWdBaEF5QUFJQUpCQldzMkFoZ2dBQ0FFUVFScU5nSUFEQUVMUVFBaEFVRi9RUUFnQXhzaEF5QUNRUUpJRFFBRFFDQUFJQVJCQVdvaUFqWUNBQ0FFTFFBQUlRUWdBQ0FHUVFGcklnVTJBaGdnQTBIL0FTQUJkRUYvYzNFZ0JDQUJkSEloQXlBQlFRaHFJUUVnQmtFQlN5QUNJUVFnQlNFR0RRQUxDeUFBSUFOQkdIWWlBVUgvQVVZMkFoUWdBRUVIUVFnZ0NSc2lBa0VIUVFnZ0EwSC9BWEVpQkVIL0FVWWJhaUlHUVFkQkNDQURRUWgyUWY4QmNTSUZRZjhCUmh0cUlnZEJCMEVJSUFOQkVIWkIvd0Z4SWdOQi93RkdHeUFJYW1vMkFoQWdBQ0FGSUFKMElBTWdCblJ5SUFFZ0IzUnlJQVJ5clNBSXJZWWdEWVEzQXdnTHR3VUNFbjhDZmdKL0lBQW9BaHdnQVVHWUFXeHFJZ0pCa0FGcktBSUFJQUpCbUFGcktBSUFheUlESVFVZ0FrR01BV3NvQWdBZ0FrR1VBV3NvQWdCcklnSWhCa0hBQUNBRElBTkJ3QUJQR3lFRFFjQUFJQUlnQWtIQUFFOGJJUVFDUUNBRlJRMEFJQVpGRFFBZ0EwVU5BQ0FFUlEwQUlBTkJmeUFFYmtFQ2Rrc05BRUVCUVJ3UUZ5SUNJQVEyQWd3Z0FpQUROZ0lJSUFJZ0JqWUNCQ0FDSUFVMkFnQWdBaUFFclNJVUlBYXRmRUlCZlNBVWdDSVVweUlFTmdJVUlBSWdBNjBpRlNBRnJYeENBWDBnRllBaUZhY2lBellDRUFKQUlCUkMvLy8vL3crRElCVkMvLy8vL3crRGZrSWdpS2NOQUNBQ1FRUWdBeUFFYkJBWElnTTJBaGdnQTBVTkFDQUNEQUlMSUFJUUZBdEJBQXNpQ1VVRVFFRUFEd3NDUUNBQkJFQURRQ0FPUVpnQmJDSVBJQUFvQWh4cUlnVW9BaGdpQWdSQUlBVkJIR29oRUNBRktBSVVJUU1nQlNnQ0VDRUVRUUFoQ2dOQUlBTWdCR3dFUUNBUUlBcEJKR3hxSVFaQkFDRUxBMEFnQmlnQ0ZDQUxRU2hzYWlJSUtBSVVJZ0lnQ0NnQ0VDSUhiQVJBUVFBaEJBTkFJQWdvQWhnZ0JFSEVBR3hxSWdNb0Fqd2lFUVJBSUFNb0Fnd2hCeUFES0FJVUlSSWdBeWdDRUNFTUlBTW9BZ2dpRXlBR0tBSUFheUVESUFZb0FoQWlEVUVCY1FSQUlBQW9BaHdnRDJvaUFrR1FBV3NvQWdBZ0Eyb2dBa0dZQVdzb0FnQnJJUU1MSUFjZ0JpZ0NCR3NoQWlBTlFRSnhCRUFnQWlBQUtBSWNJQTlxSWcxQmpBRnJLQUlBYWlBTlFaUUJheWdDQUdzaEFnc2dDU0FESUFJZ0F5QU1JQk5ySWd4cUlCSWdCMnNnQW1vZ0VVRUJJQXhCQUJBcVJRMEpJQWdvQWhBaEJ5QUlLQUlVSVFJTElBUkJBV29pQkNBQ0lBZHNTUTBBQ3lBRktBSVFJUVFnQlNnQ0ZDRURDeUFMUVFGcUlnc2dBeUFFYkVrTkFBc2dCU2dDR0NFQ0N5QUtRUUZxSWdvZ0Fra05BQXNMSUE1QkFXb2lEaUFCUncwQUN3c2dDUThMSUFrUUowRUFDOGdNQWc1L0Juc2dBQ2dDQ0NJTElBQW9BZ1JxSVFjQ1FDQUFLQUlNUlFSQUlBZEJBa2dOQVNBQktBSUFJQUVnQzBFQ2RHb2lEU2dDQUNJRVFRRnFRUUYxYXlFRElBQW9BZ0FoQmdKQUlBZEJCRWtFUUNBRUlRSU1BUXNnQjBFRWF5SUFRUUYySWdsQkFXb2hEQUpBSUFCQkZra0VRRUVCSVFBTUFRc2dCaUFCSUF0QkFuUnFJZ1VnQ1VFQ2RDSUNha0VJYWtrZ0JpQUpRUU4wYWtFSWFpSUFJQVZCQkdwTGNRUkFRUUVoQUF3QkN5QUdJQUVnQW1wQkNHcEpJQUZCQkdvZ0FFbHhCRUJCQVNFQURBRUxJQXhCL1AvLy93ZHhJZ1ZCQVhJaEFDQUZRUUYwSVFnZ0JQMFJJUkFnQS8wUklSSDlEQUFBQUFBQ0FBQUFCQUFBQUFZQUFBQWhGRUVBSVFJRFFDQUJJQUpCQW5SQkJISWlBMnI5QUFJQUlSTWdBeUFOYXYwQUFnQWhFaUFHSUFKQkEzUnFJZ01nRWYxYUFnQURJQU5CQ0dvZ0V5QVNJQkFnRXYwTkRBME9EeEFSRWhNVUZSWVhHQmthR3lJVC9hNEIvUXdDQUFBQUFnQUFBQUlBQUFBQ0FBQUEvYTRCUVFMOXJBSDlzUUVpRVAxYUFnQUFJQU5CRUdvZ0VQMWFBZ0FCSUFOQkdHb2dFUDFhQWdBQ0lBWWdGUDBNQVFBQUFBRUFBQUFCQUFBQUFRQUFBUDFRSWhYOUd3QkJBblJxSUJBZ0VTQVEvUTBNRFE0UEVCRVNFeFFWRmhjWUdSb2IvYTRCUVFIOXJBRWdFLzJ1QVNJUi9Wb0NBQUFnQmlBVi9Sc0JRUUowYWlBUi9Wb0NBQUVnQmlBVi9Sc0NRUUowYWlBUi9Wb0NBQUlnQmlBVi9Sc0RRUUowYWlBUi9Wb0NBQU1nRlAwTUNBQUFBQWdBQUFBSUFBQUFDQUFBQVAydUFTRVVJQkFoRVNBU0lSQWdBa0VFYWlJQ0lBVkhEUUFMSUJEOUd3TWhBaUFSL1JzRElRTWdCU0FNUmcwQklBSWhCQXNEUUNBQklBQkJBblFpQW1vb0FnQWhDU0FDSUExcUtBSUFJUUlnQmlBSVFRSjBhaUlGSUFNMkFnQWdCU0FESUFrZ0FpQUVha0VDYWtFQ2RXc2lBMnBCQVhVZ0JHbzJBZ1FnQ0VFQ2FpRUlJQUFnREVjZ0FpRUVJQUJCQVdvaEFBMEFDd3NnQmlBSVFRSjBhaUFETmdJQVFYd2hBQ0FIUVFGeEJIOGdCaUFIUVFGcklnQkJBblJxSUFFZ0FFRUJkR29vQWdBZ0FrRUJha0VCZFdzaUFEWUNBQ0FBSUFOcVFRRjFJUU5CZUFWQmZBc2dCaUFIUVFKMElnQnFhaUFDSUFOcU5nSUFJQUVnQmlBQUVCWWFEd3NDUUFKQUFrQWdCMEVCYXc0Q0FBRUNDeUFCSUFFb0FnQkJBbTAyQWdBUEN5QUFLQUlBSWdRZ0FTZ0NBQ0FCSUF0QkFuUnFJZ01vQWdCQkFXcEJBWFZySWdBMkFnUWdCQ0FBSUFNb0FnQnFOZ0lBSUFFZ0JDa0NBRGNDQUE4TElBZEJBMGdOQUNBQUtBSUFJZ29nQVNnQ0FDQUJJQXRCQW5ScUlnNG9BZ1FpQkNBT0tBSUFJZ0JxUVFKcVFRSjFheUlESUFCcU5nSUFRUUVoQ0FKQUlBZEJBbXNpQmlBSFFRRnhJZ3hGSWdCclFRSkpCRUFnQkNFQ0RBRUxJQWNnQUd0QkJHc2lBRUVCZGlJQ1FRRnFJUThDUUFKQUlBQkJGa2tOQUNBS1FRUnFJZ1VnQVNBQ1FRSjBJZ0JxUVFocVNTQUtJQUpCQTNScVFReHFJZ0lnQVVFRWFrdHhEUUFnQlNBQUlBRWdDMEVDZEdvaUFHcEJER3BKSUFCQkNHb2dBa2x4RFFBZ0QwRjhjU0lGUVFGeUlRQWdCVUVCZEVFQmNpRUlJQVQ5RVNFUklBUDlFU0VRUVFBaEFnTkFJQW9nQWtFRGRHb2lCQ0FCSUFKQkFuUWlBMnI5QUFJRUlCRWdBeUFPYXYwQUFnZ2lFZjBOREEwT0R4QVJFaE1VRlJZWEdCa2FHeUlUSUJIOXJnSDlEQUlBQUFBQ0FBQUFBZ0FBQUFJQUFBRDlyZ0ZCQXYyc0FmMnhBU0lTSUJJZ0VDQVMvUTBNRFE0UEVCRVNFeFFWRmhjWUdSb2IvYTRCUVFIOXJBRWdFLzJ1QVNJVC9RMEVCUVlIR0JrYUd3Z0pDZ3NjSFI0Zi9Rc0NGQ0FFSUJBZ0UvME5EQTBPRHhBUkVoTUFBUUlERkJVV0Z5QVMvUTBBQVFJREJBVUdCeEFSRWhNTURRNFAvUXNDQkNBU0lSQWdBa0VFYWlJQ0lBVkhEUUFMSUJIOUd3TWhBaUFRL1JzRElRTWdCU0FQUmcwQ0lBSWhCQXdCQzBFQklRQUxBMEFnQVNBQVFRSjBhaWdDQUNFTklBNGdBRUVCYWlJRlFRSjBhaWdDQUNFQ0lBb2dDRUVDZEdvaUNTQUROZ0lBSUFrZ0F5QU5JQUlnQkdwQkFtcEJBblZySWdOcVFRRjFJQVJxTmdJRUlBaEJBbW9oQ0NBQUlBOUhJQUloQkNBRklRQU5BQXNMSUFvZ0NFRUNkR29nQXpZQ0FBSkFJQXhGQkVBZ0NpQUdRUUowYWlBQklBZEJBWFJxUVFScktBSUFJQUpCQVdwQkFYVnJJZ0FnQTJwQkFYVWdBbW8yQWdBTUFRc2dBaUFEYWlFQUN5QUtJQWRCQW5RaUEycEJCR3NnQURZQ0FDQUJJQW9nQXhBV0dnc0xvQWNEQTMwRGV3Si9JQU5CQ0U4RVFDQURRUU4ySVFzRFFDQUIvUUFFQUNFSElBQWdBUDBBQkFBaUNDQUMvUUFFQUNJSi9ReThkTE0vdkhTelA3eDBzeis4ZExNLy9lWUIvZVFCL1FzRUFDQUJJQWdnQi8wTXp6R3dQczh4c0Q3UE1iQSt6ekd3UHYzbUFmM2xBU0FKL1F6aDBUWS80ZEUyUCtIUk5qL2gwVFkvL2VZQi9lVUIvUXNFQUNBQ0lBZ2dCLzBNNWREaVArWFE0ai9sME9JLzVkRGlQLzNtQWYza0FmMExCQUFnQWYwQUJCQWhCeUFBSUFEOUFBUVFJZ2dnQXYwQUJCQWlDZjBNdkhTelA3eDBzeis4ZExNL3ZIU3pQLzNtQWYza0FmMExCQkFnQVNBSUlBZjlETTh4c0Q3UE1iQSt6ekd3UHM4eHNENzk1Z0g5NVFFZ0NmME00ZEUyUCtIUk5qL2gwVFkvNGRFMlAvM21BZjNsQWYwTEJCQWdBaUFJSUFmOURPWFE0ai9sME9JLzVkRGlQK1hRNGovOTVnSDk1QUg5Q3dRUUlBSkJJR29oQWlBQlFTQnFJUUVnQUVFZ2FpRUFJQXBCQVdvaUNpQUxSdzBBQ3dzQ1FDQURRUWR4SWdORkRRQWdBU29DQUNFRUlBQWdBaW9DQUNJR1E3eDBzeitVSUFBcUFnQWlCWkk0QWdBZ0FTQUZJQVJEenpHd3ZwU1NJQVpENGRFMnY1U1NPQUlBSUFJZ0JTQUVRK1hRNGorVWtqZ0NBQ0FEUVFGR0RRQWdBU29DQkNFRUlBQWdBaW9DQkNJR1E3eDBzeitVSUFBcUFnUWlCWkk0QWdRZ0FTQUZJQVJEenpHd3ZwU1NJQVpENGRFMnY1U1NPQUlFSUFJZ0JTQUVRK1hRNGorVWtqZ0NCQ0FEUVFKR0RRQWdBU29DQ0NFRUlBQWdBaW9DQ0NJR1E3eDBzeitVSUFBcUFnZ2lCWkk0QWdnZ0FTQUZJQVJEenpHd3ZwU1NJQVpENGRFMnY1U1NPQUlJSUFJZ0JTQUVRK1hRNGorVWtqZ0NDQ0FEUVFOR0RRQWdBU29DRENFRUlBQWdBaW9DRENJR1E3eDBzeitVSUFBcUFnd2lCWkk0QWd3Z0FTQUZJQVJEenpHd3ZwU1NJQVpENGRFMnY1U1NPQUlNSUFJZ0JTQUVRK1hRNGorVWtqZ0NEQ0FEUVFSR0RRQWdBU29DRUNFRUlBQWdBaW9DRUNJR1E3eDBzeitVSUFBcUFoQWlCWkk0QWhBZ0FTQUZJQVJEenpHd3ZwU1NJQVpENGRFMnY1U1NPQUlRSUFJZ0JTQUVRK1hRNGorVWtqZ0NFQ0FEUVFWR0RRQWdBU29DRkNFRUlBQWdBaW9DRkNJR1E3eDBzeitVSUFBcUFoUWlCWkk0QWhRZ0FTQUZJQVJEenpHd3ZwU1NJQVpENGRFMnY1U1NPQUlVSUFJZ0JTQUVRK1hRNGorVWtqZ0NGQ0FEUVFaR0RRQWdBU29DR0NFRUlBQWdBaW9DR0NJR1E3eDBzeitVSUFBcUFoZ2lCWkk0QWhnZ0FTQUZJQVJEenpHd3ZwU1NJQVpENGRFMnY1U1NPQUlZSUFJZ0JTQUVRK1hRNGorVWtqZ0NHQXNMNEFFQ0JuOERld0pBSUFORkRRQWdBMEVFVHdSQUlBTkJmSEVoQmdOQUlBQWdCRUVDZENJRmFpSUhJQWY5QUFJQUlBSWdCV29pQi8wQUFnQWlDeUFCSUFWcUlnWDlBQUlBSWd6OXJnRkJBdjJzQWYyeEFTSUtJQXY5cmdIOUN3SUFJQVVnQ3YwTEFnQWdCeUFLSUF6OXJnSDlDd0lBSUFSQkJHb2lCQ0FHUncwQUN5QURJQVpHRFFFTEEwQWdBQ0FHUVFKMElnUnFJZ1VnQlNnQ0FDQUNJQVJxSWdVb0FnQWlCeUFCSUFScUlnZ29BZ0FpQ1dwQkFuVnJJZ1FnQjJvMkFnQWdDQ0FFTmdJQUlBVWdCQ0FKYWpZQ0FDQUdRUUZxSWdZZ0EwY05BQXNMQzlrQkFRTi9Jd0JCZ0FGcklnWWtBQ0FHSVFVQ1FDQUJLQUlNSUFKQkJIUnFJZ0lvQWdBaUJFVUVRQ0FDSVFFTUFRc0RRQ0FGSUFJMkFnQWdCVUVFYWlFRklBUWlBU0lDS0FJQUlnUU5BQXNMUVFBaEJBTkFJQUVvQWdnaUFpQUVTQVJBSUFFZ0JEWUNDQ0FFSVFJTEFrQWdBaUFEVGcwQUEwQWdBaUFCS0FJRVRnMEJBa0FnQUVFQkVDTUVRQ0FCSUFJMkFnUU1BUXNnQWtFQmFpRUNDeUFDSUFOSURRQUxDeUFCSUFJMkFnZ2dCU0FHUndSQUlBVkJCR3NpQlNnQ0FDRUJJQUloQkF3QkN3c2dBU2dDQkNBR1FZQUJhaVFBSUFOSUM4UUpBZzkvQTNzakFFR0FBbXNpQ1NRQUFrQWdBRVVFUUVFQUlRQU1BUXNDUUNBQklBQW9BZ0JHQkVBZ0FDZ0NCQ0FDUmcwQkN5QUFJQUkyQWdRZ0FDQUJOZ0lBSUFrZ0FqWUNBQ0FKSUFFMkFvQUJJQUloQkNBQklRWURRQ0FKSUFnaUQwRUJhaUlJUVFKMElncHFJQVJCQVdwQkFtMGlCellDQUNBSlFZQUJhaUFLYWlBR1FRRnFRUUp0SWdvMkFnQWdCU0FFSUFac0lneHFJUVVnQnlFRUlBb2hCaUFNUVFGTERRQUxJQUFnQlRZQ0NBSkFBa0FDUUNBRlJRUkFJQUFvQWd3aUFVVU5BU0FCRUJRZ0FFRUFOZ0lNREFFTElBVkJCSFFpQlNBQUtBSVFUUTBDSUFBb0Fnd2dCUkFiSWdJTkFTQURRUUZCampKQkFCQVRJQUFvQWd3aUFVVU5BQ0FCRUJRZ0FFRUFOZ0lNQ3lBQUVCUkJBQ0VBREFNTElBQWdBallDRENBQ0lBQW9BaEFpQVdwQkFDQUZJQUZyRUJrYUlBQWdCVFlDRUNBQUtBSUVJUUlnQUNnQ0FDRUJDeUFBS0FJTUlRWWdEd1JBSUFZZ0FTQUNiRUVFZEdvaUJDRUZBMEFDUUNBSklCQkJBblFpQVdvb0FnQWlDMEVBVEEwQUlBdEJBV3NoRFFKQUFrQWdDVUdBQVdvZ0FXb29BZ0FpQjBFQVRBUkFJQXRCQVhFaENrRUFJUWdnQzBFQlJ3MEJJQVVoQVF3Q0N5QUhRUUlnQnlBSFFRSk9HMnRCQVdwQkFYWWlBaUFIUVlHQWdJQjRiRUgvLy8vL0IycEJBWFlpQVNBQklBSkxHeUlDUVFGcUlnRWdBVUVEY1NJQlFRUWdBUnRySWc1QkJIUWhFU0FPUVFWMElSSWdCeUFPUVFGMGF5RU1JQUpCQTBzZ0IzRWhDRUVBSVFFZ0JTRUNBMEFnQ0FSL0lBUWdFV29nQmlBU2FrRUFJUVVEUUNBRy9SRWlGUDBNQUFBQUFDQUFBQUJBQUFBQVlBQUFBUDJ1QVNJVi9Sc0FJQVQ5RWYwTUFBQUFBQkFBQUFBZ0FBQUFNQUFBQVAydUFTSVQvVm9DQUFBZ0ZmMGJBU0FUL1ZvQ0FBRWdGZjBiQWlBVC9Wb0NBQUlnRmYwYkF5QVQvVm9DQUFNZ0ZQME1FQUFBQURBQUFBQlFBQUFBY0FBQUFQMnVBU0lVL1JzQUlCUDlXZ0lBQUNBVS9Sc0JJQlA5V2dJQUFTQVUvUnNDSUJQOVdnSUFBaUFVL1JzRElCUDlXZ0lBQXlBRVFVQnJJUVFnQmtHQUFXb2hCaUFGUVFScUlnVWdEa2NOQUFzaEJpRUVJQXdGSUFjTElRVURRQUpBSUFZZ0JEWUNBQ0FGUVFGR0JFQWdCa0VRYWlFR0lBUkJFR29oQkF3QkN5QUdJQVEyQWhBZ0JFRVFhaUVFSUFaQklHb2hCaUFGUVFKS0lBVkJBbXNoQlEwQkN3c2dCQ0FDSUFkQkJIUnFJQUVnQVNBTlJuSkJBWEVpQXhzaEJTQUVJQUlnQXhzaEJDQUZJUUlnQVVFQmFpSUJJQXRIRFFBTERBSUxJQXRCL3YvLy93ZHhJUU5CQUNFQ0EwQWdDQ0FOUmlFQklBaEJBbW9oQ0NBRUlBVWdBUnNpQkNFRklBUWhBU0FDUVFKcUlnSWdBMGNOQUFzTElBcEZCRUFnQkNFRkRBRUxJQVFnQVNBSFFRUjBhaUFJSUFnZ0RVWnlRUUZ4SWdJYklRVWdCQ0FCSUFJYklRUUxJQkJCQVdvaUVDQVBSdzBBQ3dzZ0JrRUFOZ0lBQ3lBQUtBSUlJZ0pGRFFBZ0FDZ0NEQ0VFSUFKQkJFOEVRQ0FDUVh4eElRRkJBQ0VHQTBBZ0JFRUFOZ0k4SUFSQzV3YzNBalFnQkVFQU5nSXNJQVJDNXdjM0FpUWdCRUVBTmdJY0lBUkM1d2MzQWhRZ0JFRUFOZ0lNSUFSQzV3YzNBZ1FnQkVGQWF5RUVJQVpCQkdvaUJpQUJSdzBBQ3dzZ0FrRURjU0lCUlEwQVFRQWhCZ05BSUFSQkFEWUNEQ0FFUXVjSE53SUVJQVJCRUdvaEJDQUdRUUZxSWdZZ0FVY05BQXNMSUFsQmdBSnFKQUFnQUF1eEFRRURmd0pBSUFCRkRRQWdBQ2dDQ0NJQlJRMEFJQUFvQWd3aEFDQUJRUVJQQkVBZ0FVRjhjU0VEQTBBZ0FFRUFOZ0k4SUFCQzV3YzNBalFnQUVFQU5nSXNJQUJDNXdjM0FpUWdBRUVBTmdJY0lBQkM1d2MzQWhRZ0FFRUFOZ0lNSUFCQzV3YzNBZ1FnQUVGQWF5RUFJQUpCQkdvaUFpQURSdzBBQ3dzZ0FVRURjU0lCUlEwQVFRQWhBZ05BSUFCQkFEWUNEQ0FBUXVjSE53SUVJQUJCRUdvaEFDQUNRUUZxSWdJZ0FVY05BQXNMQzhrSUFoSi9BM3NqQUVHQUFtc2lDU1FBQW45QkFVRVVFQmNpQjBVRVFDQUNRUUZCNkRGQkFCQVRRUUFNQVFzZ0J5QUJOZ0lFSUFjZ0FEWUNBQ0FKSUFFMkFnQWdDU0FBTmdLQUFRTkFJQWtnQmlJUFFRRnFJZ1pCQW5RaUJXb2dBVUVCYWtFQ2JTSUROZ0lBSUFsQmdBRnFJQVZxSUFCQkFXcEJBbTBpQlRZQ0FDQUVJQUFnQVd3aUNHb2hCQ0FESVFFZ0JTRUFJQWhCQVVzTkFBc2dCeUFFTmdJSUlBUkZCRUFnQnhBVVFRQU1BUXNnQnlBRVFSQVFGeUlETmdJTUlBTkZCRUFnQWtFQlFjY2JRUUFRRXlBSEVCUkJBQXdCQ3lBSElBY29BZ2dpREVFRWREWUNFQ0FESVFFZ0R3UkFJQU1nQnlnQ0JDQUhLQUlBYkVFRWRHb2lBQ0VHQTBBQ1FDQUpJQkJCQW5RaUFtb29BZ0FpQzBFQVRBMEFJQXRCQVdzaERRSkFJQWxCZ0FGcUlBSnFLQUlBSWdoQkFFd0VRRUVBSVFRZ0MwRUJSd1JBSUF0Qi92Ly8vd2R4SVFWQkFDRUNBMEFnQkNBTlJpRUtJQVJCQW1vaEJDQUdJQUFnQ2hzaUFDRUdJQUpCQW1vaUFpQUZSdzBBQ3dzZ0MwRUJjUTBCSUFBaEJnd0NDeUFJUVFJZ0NDQUlRUUpPRzJ0QkFXcEJBWFlpQWlBSVFZR0FnSUI0YkVILy8vLy9CMnBCQVhZaUJTQUNJQVZKR3lJQ1FRRnFJZ1VnQlVFRGNTSUZRUVFnQlJ0cklnNUJCWFFoRVNBT1FRUjBJUklnQ0NBT1FRRjBheUVUSUFKQkEwc2dDSEVoRkVFQUlRb2dBQ0VDQTBBQ2Z5QVVSUVJBSUFZaEFDQUlEQUVMSUFFZ0VXb2dCaUFTYWlFQVFRQWhCQU5BSUFIOUVTSVgvUXdBQUFBQUlBQUFBRUFBQUFCZ0FBQUEvYTRCSWhYOUd3QWdCdjBSL1F3QUFBQUFFQUFBQUNBQUFBQXdBQUFBL2E0QkloYjlXZ0lBQUNBVi9Sc0JJQmI5V2dJQUFTQVYvUnNDSUJiOVdnSUFBaUFWL1JzRElCYjlXZ0lBQXlBWC9Rd1FBQUFBTUFBQUFGQUFBQUJ3QUFBQS9hNEJJaFg5R3dBZ0Z2MWFBZ0FBSUJYOUd3RWdGdjFhQWdBQklCWDlHd0lnRnYxYUFnQUNJQlg5R3dNZ0Z2MWFBZ0FESUFGQmdBRnFJUUVnQmtGQWF5RUdJQVJCQkdvaUJDQU9SdzBBQ3lFQklCTUxJUVFEUUFKQUlBRWdBRFlDQUNBRVFRRkdCRUFnQVVFUWFpRUJJQUJCRUdvaEFBd0JDeUFCSUFBMkFoQWdBRUVRYWlFQUlBRkJJR29oQVNBRVFRSktJQVJCQW1zaEJBMEJDd3NnQUNBQ0lBb2dDaUFOUm5KQkFYRWlCUnNoQmlBQUlBSWdDRUVFZEdvZ0JSc2lBQ0VDSUFwQkFXb2lDaUFMUncwQUN3d0JDeUFHSUFBZ0NFRUVkR29nQkNBRUlBMUdja0VCY1NJRkd5QUdJQUFnQlJzaEJpRUFDeUFRUVFGcUloQWdEMGNOQUFzTElBRkJBRFlDQUFKQUlBeEZEUUFnREVFRVR3UkFJQXhCZkhFaEFFRUFJUUVEUUNBRFFRQTJBandnQTBMbkJ6Y0NOQ0FEUVFBMkFpd2dBMExuQnpjQ0pDQURRUUEyQWh3Z0EwTG5CemNDRkNBRFFRQTJBZ3dnQTBMbkJ6Y0NCQ0FEUVVCcklRTWdBVUVFYWlJQklBQkhEUUFMQ3lBTVFRTnhJZ0JGRFFCQkFDRUJBMEFnQTBFQU5nSU1JQU5DNXdjM0FnUWdBMEVRYWlFRElBRkJBV29pQVNBQVJ3MEFDd3NnQndzZ0NVR0FBbW9rQUF0VEFRRi9BbjhnQUMwQURFSC9BVVlFUUNBQVFvRCtnNER3QURjQ0RFRUFJQUFvQWdnaUFTQUFLQUlFVHcwQkdpQUFJQUZCQVdvMkFnZ2dBQ0FCTFFBQVFZRCtBM0kyQWd3TElBQkJBRFlDRUVFQkN3c0ZBQkFNQUF1QkFnQUNRQ0FCUWY4QVRRMEFBa0JCMU5ZQktBSUFLQUlBUlFSQUlBRkJnSDl4UVlDL0EwWU5BZ3dCQ3lBQlFmOFBUUVJBSUFBZ0FVRS9jVUdBQVhJNkFBRWdBQ0FCUVFaMlFjQUJjam9BQUVFQ0R3c2dBVUdBUUhGQmdNQURSeUFCUVlDd0EwOXhSUVJBSUFBZ0FVRS9jVUdBQVhJNkFBSWdBQ0FCUVF4MlFlQUJjam9BQUNBQUlBRkJCblpCUDNGQmdBRnlPZ0FCUVFNUEN5QUJRWUNBQkd0Qi8vOC9UUVJBSUFBZ0FVRS9jVUdBQVhJNkFBTWdBQ0FCUVJKMlFmQUJjam9BQUNBQUlBRkJCblpCUDNGQmdBRnlPZ0FDSUFBZ0FVRU1ka0UvY1VHQUFYSTZBQUZCQkE4TEMwSFV6UUZCR1RZQ0FFRi9Ed3NnQUNBQk9nQUFRUUVMZmdJQmZ3RitJQUM5SWdOQ05JaW5RZjhQY1NJQ1FmOFBSd1I4SUFKRkJFQWdBU0FBUkFBQUFBQUFBQUFBWVFSL1FRQUZJQUJFQUFBQUFBQUE4RU9pSUFFUWNDRUFJQUVvQWdCQlFHb0xOZ0lBSUFBUEN5QUJJQUpCL2dkck5nSUFJQU5DLy8vLy8vLy8vNGVBZjROQ2dJQ0FnSUNBZ1BBL2hMOEZJQUFMQzd3Q0FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FnQVVFSmF3NFNBQWdKQ2dnSkFRSURCQW9KQ2dvSUNRVUdCd3NnQWlBQ0tBSUFJZ0ZCQkdvMkFnQWdBQ0FCS0FJQU5nSUFEd3NnQWlBQ0tBSUFJZ0ZCQkdvMkFnQWdBQ0FCTWdFQU53TUFEd3NnQWlBQ0tBSUFJZ0ZCQkdvMkFnQWdBQ0FCTXdFQU53TUFEd3NnQWlBQ0tBSUFJZ0ZCQkdvMkFnQWdBQ0FCTUFBQU53TUFEd3NnQWlBQ0tBSUFJZ0ZCQkdvMkFnQWdBQ0FCTVFBQU53TUFEd3NnQWlBQ0tBSUFRUWRxUVhoeElnRkJDR28yQWdBZ0FDQUJLd01BT1FNQUR3c2dBQ0FDSUFNUkF3QUxEd3NnQWlBQ0tBSUFJZ0ZCQkdvMkFnQWdBQ0FCTkFJQU53TUFEd3NnQWlBQ0tBSUFJZ0ZCQkdvMkFnQWdBQ0FCTlFJQU53TUFEd3NnQWlBQ0tBSUFRUWRxUVhoeElnRkJDR28yQWdBZ0FDQUJLUU1BTndNQUMyOEJCWDhnQUNnQ0FDSURMQUFBUVRCcklnRkJDVXNFUUVFQUR3c0RRRUYvSVFRZ0FrSE1tYlBtQUUwRVFFRi9JQUVnQWtFS2JDSUZhaUFCSUFWQi8vLy8vd2R6U3hzaEJBc2dBQ0FEUVFGcUlnVTJBZ0FnQXl3QUFTQUVJUUlnQlNFRFFUQnJJZ0ZCQ2trTkFBc2dBZ3RKQVFGL0FrQkJBVUVzRUJjaUFRUkFJQUZCQURZQ0VBSkFJQUJCQUV3RVFDQUJRUUZCQ0JBWElnQTJBaVFnQUVVTkFRd0RDeUFCUVFBMkFnd0xJQUVRRkF0QkFDRUJDeUFCQzY0VUFoSi9BbjRqQUVGQWFpSUlKQUFnQ0NBQk5nSThJQWhCSjJvaEZ5QUlRU2hxSVJJQ1FBSkFBa0FDUUFOQVFRQWhCd05BSUFFaERTQUhJQTVCLy8vLy93ZHpTZzBDSUFjZ0Rtb2hEZ0pBQWtBQ1FBSkFJQUVpQnkwQUFDSU1CRUFEUUFKQUFrQWdERUgvQVhFaUFVVUVRQ0FISVFFTUFRc2dBVUVsUncwQklBY2hEQU5BSUF3dEFBRkJKVWNFUUNBTUlRRU1BZ3NnQjBFQmFpRUhJQXd0QUFJZ0RFRUNhaUlCSVF4QkpVWU5BQXNMSUFjZ0RXc2lCeUFPUWYvLy8vOEhjeUlZU2cwSklBQUVRQ0FBSUEwZ0J4QWVDeUFIRFFjZ0NDQUJOZ0k4SUFGQkFXb2hCMEYvSVJFQ1FDQUJMQUFCUVRCcklndEJDVXNOQUNBQkxRQUNRU1JIRFFBZ0FVRURhaUVIUVFFaEV5QUxJUkVMSUFnZ0J6WUNQRUVBSVFrQ1FDQUhMQUFBSWd4QklHc2lBVUVmU3dSQUlBY2hDd3dCQ3lBSElRdEJBU0FCZENJQlFZblJCSEZGRFFBRFFDQUlJQWRCQVdvaUN6WUNQQ0FCSUFseUlRa2dCeXdBQVNJTVFTQnJJZ0ZCSUU4TkFTQUxJUWRCQVNBQmRDSUJRWW5SQkhFTkFBc0xBa0FnREVFcVJnUkFBbjhDUUNBTExBQUJRVEJySWdGQkNVc05BQ0FMTFFBQ1FTUkhEUUFDZnlBQVJRUkFJQVFnQVVFQ2RHcEJDallDQUVFQURBRUxJQU1nQVVFRGRHb29BZ0FMSVJBZ0MwRURhaUVCUVFFTUFRc2dFdzBHSUF0QkFXb2hBU0FBUlFSQUlBZ2dBVFlDUEVFQUlSTkJBQ0VRREFNTElBSWdBaWdDQUNJSFFRUnFOZ0lBSUFjb0FnQWhFRUVBQ3lFVElBZ2dBVFlDUENBUVFRQk9EUUZCQUNBUWF5RVFJQWxCZ01BQWNpRUpEQUVMSUFoQlBHb1FjaUlRUVFCSURRb2dDQ2dDUENFQkMwRUFJUWRCZnlFS0FuOUJBQ0FCTFFBQVFTNUhEUUFhSUFFdEFBRkJLa1lFUUFKL0FrQWdBU3dBQWtFd2F5SUxRUWxMRFFBZ0FTMEFBMEVrUncwQUlBRkJCR29oQVFKL0lBQkZCRUFnQkNBTFFRSjBha0VLTmdJQVFRQU1BUXNnQXlBTFFRTjBhaWdDQUFzTUFRc2dFdzBHSUFGQkFtb2hBVUVBSUFCRkRRQWFJQUlnQWlnQ0FDSUxRUVJxTmdJQUlBc29BZ0FMSVFvZ0NDQUJOZ0k4SUFwQkFFNE1BUXNnQ0NBQlFRRnFOZ0k4SUFoQlBHb1FjaUVLSUFnb0Fqd2hBVUVCQ3lFVUEwQWdCeUVWUVJ3aEN5QUJJZzhzQUFBaUIwSDdBR3RCUmtrTkN5QUJRUUZxSVFFZ0J5QVZRVHBzYWtIL3hBRnFMUUFBSWdkQkFXdEIvd0Z4UVFoSkRRQUxJQWdnQVRZQ1BBSkFJQWRCRzBjRVFDQUhSUTBNSUJGQkFFNEVRQ0FBUlFSQUlBUWdFVUVDZEdvZ0J6WUNBQXdNQ3lBSUlBTWdFVUVEZEdvcEF3QTNBekFNQWdzZ0FFVU5DQ0FJUVRCcUlBY2dBaUFHRUhFTUFRc2dFVUVBVGcwTFFRQWhCeUFBUlEwSUN5QUFMUUFBUVNCeERRc2dDVUgvLzN0eElnd2dDU0FKUVlEQUFIRWJJUWxCQUNFUlFiQUlJUllnRWlFTEFrQUNRQUovQWtBQ1FBSkFBa0FDUUFKQUFuOENRQUpBQWtBQ1FBSkFBa0FDUUNBUExRQUFJZ2ZBSWc5QlUzRWdEeUFIUVE5eFFRTkdHeUFQSUJVYklnZEIyQUJyRGlFRUZoWVdGaFlXRmhZUUZna0dFQkFRRmdZV0ZoWVdBZ1VERmhZS0ZnRVdGZ1FBQ3dKQUlBZEJ3UUJyRGdjUUZnc1dFQkFRQUFzZ0IwSFRBRVlOQ3d3VkN5QUlLUU13SVJwQnNBZ01CUXRCQUNFSEFrQUNRQUpBQWtBQ1FBSkFBa0FnRlE0SUFBRUNBd1FjQlFZY0N5QUlLQUl3SUE0MkFnQU1Hd3NnQ0NnQ01DQU9OZ0lBREJvTElBZ29BakFnRHF3M0F3QU1HUXNnQ0NnQ01DQU9Pd0VBREJnTElBZ29BakFnRGpvQUFBd1hDeUFJS0FJd0lBNDJBZ0FNRmdzZ0NDZ0NNQ0FPckRjREFBd1ZDMEVJSUFvZ0NrRUlUUnNoQ2lBSlFRaHlJUWxCK0FBaEJ3c2dFaUVCSUFncEF6QWlHaUlaUWdCU0JFQWdCMEVnY1NFTUEwQWdBVUVCYXlJQklCbW5RUTl4UVpESkFXb3RBQUFnREhJNkFBQWdHVUlQVmlBWlFnU0lJUmtOQUFzTElBRWhEU0FhVUEwRElBbEJDSEZGRFFNZ0IwRUVka0d3Q0dvaEZrRUNJUkVNQXdzZ0VpRUJJQWdwQXpBaUdpSVpRZ0JTQkVBRFFDQUJRUUZySWdFZ0dhZEJCM0ZCTUhJNkFBQWdHVUlIVmlBWlFnT0lJUmtOQUFzTElBRWhEU0FKUVFoeFJRMENJQW9nRWlBQmF5SUJRUUZxSUFFZ0NrZ2JJUW9NQWdzZ0NDa0RNQ0lhUWdCVEJFQWdDRUlBSUJwOUlobzNBekJCQVNFUlFiQUlEQUVMSUFsQmdCQnhCRUJCQVNFUlFiRUlEQUVMUWJJSVFiQUlJQWxCQVhFaUVSc0xJUllnR2lBU0VDOGhEUXNnRkNBS1FRQkljUTBSSUFsQi8vOTdjU0FKSUJRYklRa0NRQ0FhUWdCU0RRQWdDZzBBSUJJaERVRUFJUW9NRGdzZ0NpQWFVQ0FTSUExcmFpSUJJQUVnQ2tnYklRb01EUXNnQ0MwQU1DRUhEQXNMQW45Qi8vLy8vd2NnQ2lBS1FmLy8vLzhIVHhzaUJ5SUpRUUJISVFzQ1FBSkFBa0FnQ0NnQ01DSUJRZkVNSUFFYklnMGlEMEVEY1VVTkFDQUpSUTBBQTBBZ0R5MEFBRVVOQWlBSlFRRnJJZ2xCQUVjaEN5QVBRUUZxSWc5QkEzRkZEUUVnQ1EwQUN3c2dDMFVOQVFKQUlBOHRBQUJGRFFBZ0NVRUVTUTBBQTBCQmdJS0VDQ0FQS0FJQUlnRnJJQUZ5UVlDQmdvUjRjVUdBZ1lLRWVFY05BaUFQUVFScUlROGdDVUVFYXlJSlFRTkxEUUFMQ3lBSlJRMEJDd05BSUE4Z0R5MEFBRVVOQWhvZ0QwRUJhaUVQSUFsQkFXc2lDUTBBQ3d0QkFBc2lBU0FOYXlBSElBRWJJZ0VnRFdvaEN5QUtRUUJPQkVBZ0RDRUpJQUVoQ2d3TUN5QU1JUWtnQVNFS0lBc3RBQUFORHd3TEN5QUlLUU13SWhsQ0FGSU5BVUVBSVFjTUNRc2dDZ1JBSUFnb0FqQU1BZ3RCQUNFSElBQkJJQ0FRUVFBZ0NSQWdEQUlMSUFoQkFEWUNEQ0FJSUJrK0FnZ2dDQ0FJUVFocUlnYzJBakJCZnlFS0lBY0xJUXhCQUNFSEEwQUNRQ0FNS0FJQUlnMUZEUUFnQ0VFRWFpQU5FRzhpRFVFQVNBMFBJQTBnQ2lBSGEwc05BQ0FNUVFScUlRd2dCeUFOYWlJSElBcEpEUUVMQzBFOUlRc2dCMEVBU0EwTUlBQkJJQ0FRSUFjZ0NSQWdJQWRGQkVCQkFDRUhEQUVMUVFBaEN5QUlLQUl3SVF3RFFDQU1LQUlBSWcxRkRRRWdDRUVFYWlJS0lBMFFieUlOSUF0cUlnc2dCMHNOQVNBQUlBb2dEUkFlSUF4QkJHb2hEQ0FISUF0TERRQUxDeUFBUVNBZ0VDQUhJQWxCZ01BQWN4QWdJQkFnQnlBSElCQklHeUVIREFnTElCUWdDa0VBU0hFTkNVRTlJUXNnQUNBSUt3TXdJQkFnQ2lBSklBY2dCUkVWQUNJSFFRQk9EUWNNQ2dzZ0J5MEFBU0VNSUFkQkFXb2hCd3dBQ3dBTElBQU5DU0FUUlEwRFFRRWhCd05BSUFRZ0IwRUNkR29vQWdBaUFBUkFJQU1nQjBFRGRHb2dBQ0FDSUFZUWNVRUJJUTRnQjBFQmFpSUhRUXBIRFFFTUN3c0xJQWRCQ2s4RVFFRUJJUTRNQ2dzRFFDQUVJQWRCQW5ScUtBSUFEUUZCQVNFT0lBZEJBV29pQjBFS1J3MEFDd3dKQzBFY0lRc01CZ3NnQ0NBSE9nQW5RUUVoQ2lBWElRMGdEQ0VKQ3lBS0lBc2dEV3NpRENBS0lBeEtHeUlCSUJGQi8vLy8vd2R6U2cwRFFUMGhDeUFRSUFFZ0VXb2lDaUFLSUJCSUd5SUhJQmhLRFFRZ0FFRWdJQWNnQ2lBSkVDQWdBQ0FXSUJFUUhpQUFRVEFnQnlBS0lBbEJnSUFFY3hBZ0lBQkJNQ0FCSUF4QkFCQWdJQUFnRFNBTUVCNGdBRUVnSUFjZ0NpQUpRWURBQUhNUUlDQUlLQUk4SVFFTUFRc0xDMEVBSVE0TUF3dEJQU0VMQzBIVXpRRWdDellDQUF0QmZ5RU9DeUFJUVVCckpBQWdEZ3VrQWdFRGZ5TUFRZEFCYXlJRkpBQWdCU0FDTmdMTUFTQUZRYUFCYWlJQ1FRQkJLQkFaR2lBRklBVW9Bc3dCTmdMSUFRSkFRUUFnQVNBRlFjZ0JhaUFGUWRBQWFpQUNJQU1nQkJCMFFRQklEUUFnQUNnQ1RFRUFTQ0FBSUFBb0FnQWlCMEZmY1RZQ0FBSi9Ba0FDUUNBQUtBSXdSUVJBSUFCQjBBQTJBakFnQUVFQU5nSWNJQUJDQURjREVDQUFLQUlzSVFZZ0FDQUZOZ0lzREFFTElBQW9BaEFOQVF0QmZ5QUFFRWNOQVJvTElBQWdBU0FGUWNnQmFpQUZRZEFBYWlBRlFhQUJhaUFESUFRUWRBc2hBU0FHQkg4Z0FFRUFRUUFnQUNnQ0pCRUFBQm9nQUVFQU5nSXdJQUFnQmpZQ0xDQUFRUUEyQWh3Z0FDZ0NGQm9nQUVJQU53TVFRUUFGSUFFTEdpQUFJQUFvQWdBZ0IwRWdjWEkyQWdBTkFBc2dCVUhRQVdva0FBdVZBUUVHZjBFSUlRSWpBRUdBQW1zaUJTUUFJQUZCQWs0RVFDQUFJQUZCQW5ScUlnY2dCVFlDQUFOQUlBY29BZ0FnQUNnQ0FFR0FBaUFDSUFKQmdBSlBHeUlFRUJZYVFRQWhBd05BSUFBZ0EwRUNkR29pQmlnQ0FDQUFJQU5CQVdvaUEwRUNkR29vQWdBZ0JCQVdHaUFHSUFZb0FnQWdCR28yQWdBZ0FTQURSdzBBQ3lBQ0lBUnJJZ0lOQUFzTElBVkJnQUpxSkFBTEtRQWdBRUVCYXlJQWFFRUFJQUFiSWdBRWZ5QUFCU0FCYUVFQUlBRWJJZ0JCSUhKQkFDQUFHd3NMblFNQkNYOENRQ0FBSWdGQkEzRUVRQU5BSUFFdEFBQWlBa1VOQWlBQ1FUMUdEUUlnQVVFQmFpSUJRUU54RFFBTEN3SkFBa0JCZ0lLRUNDQUJLQUlBSWdOcklBTnlRWUNCZ29SNGNVR0FnWUtFZUVjTkFBTkFRWUNDaEFnZ0EwRzkrdlRwQTNNaUFtc2dBbkpCZ0lHQ2hIaHhRWUNCZ29SNFJ3MEJJQUVvQWdRaEF5QUJRUVJxSWdJaEFTQURRWUNDaEFnZ0EydHlRWUNCZ29SNGNVR0FnWUtFZUVZTkFBc01BUXNnQVNFQ0N3TkFJQUlpQVMwQUFDSURSUTBCSUFGQkFXb2hBaUFEUVQxSERRQUxDeUFBSUFGR0JFQkJBQThMQWtBZ0FDQUJJQUJySWdacUxRQUFEUUJCOE5VQktBSUFJZ1ZGRFFBZ0JTZ0NBQ0lCUlEwQUEwQUNRQUovSUFBaEF5QUJJUUpCQUNBR0lnZEZEUUFhSUFNdEFBQWlCQVIvQWtBRFFDQUVJQUl0QUFBaUNFY05BU0FJUlEwQklBZEJBV3NpQjBVTkFTQUNRUUZxSVFJZ0F5MEFBU0VFSUFOQkFXb2hBeUFFRFFBTFFRQWhCQXNnQkFWQkFBc2dBaTBBQUdzTFJRUkFJQUVnQm1vaUFTMEFBRUU5UmcwQkN5QUZLQUlFSVFFZ0JVRUVhaUVGSUFFTkFRd0NDd3NnQVVFQmFpRUpDeUFKQ3ljQkFYOUJIQ0VESUFGQkEzRUVmMEVjQlNBQUlBRWdBaEFwSWdBMkFnQkJBRUV3SUFBYkN3djlBd0VGZndKL1FhakxBU2dDQUNJQ0lBQkJCMnBCZUhFaUFVRUhha0Y0Y1NJRGFpRUFBa0FnQTBFQUlBQWdBazBiUlFSQUlBQS9BRUVRZEUwTkFTQUFFQTROQVF0QjFNMEJRVEEyQWdCQmZ3d0JDMEdveXdFZ0FEWUNBQ0FDQ3lJQ1FYOUhCRUFnQVNBQ2FpSUFRUVJyUVJBMkFnQWdBRUVRYXlJRFFSQTJBZ0FDUUFKL1FlRFZBU2dDQUNJQkJIOGdBU2dDQ0FWQkFBc2dBa1lFUUNBQ0lBSkJCR3NvQWdCQmZuRnJJZ1JCQkdzb0FnQWhCU0FCSUFBMkFnZ2dCQ0FGUVg1eGF5SUFJQUFvQWdCcVFRUnJMUUFBUVFGeEJFQWdBQ2dDQkNJQklBQW9BZ2dpQkRZQ0NDQUVJQUUyQWdRZ0FDQURJQUJySWdFMkFnQU1Bd3NnQWtFUWF3d0JDeUFDUVJBMkFnQWdBaUFBTmdJSUlBSWdBVFlDQkNBQ1FSQTJBZ3hCNE5VQklBSTJBZ0FnQWtFUWFnc2lBQ0FESUFCcklnRTJBZ0FMSUFBZ0FVRjhjV3BCQkdzZ0FVRUJjallDQUNBQUFuOGdBQ2dDQUVFSWF5SUJRZjhBVFFSQUlBRkJBM1pCQVdzTUFRc2dBVUVkSUFGbklnTnJka0VFY3lBRFFRSjBhMEh1QUdvZ0FVSC9IMDBOQUJwQlB5QUJRUjRnQTJ0MlFRSnpJQU5CQVhSclFjY0FhaUlCSUFGQlAwOGJDeUlCUVFSMElnTkI0TTBCYWpZQ0JDQUFJQU5CNk0wQmFpSURLQUlBTmdJSUlBTWdBRFlDQUNBQUtBSUlJQUEyQWdSQjZOVUJRZWpWQVNrREFFSUJJQUd0aG9RM0F3QUxJQUpCZjBjTHZRRUJBbjhDUUNBQUtBSk1JZ0ZCQUU0RVFDQUJSUTBCUVl6V0FTZ0NBQ0FCUWYvLy8vOERjVWNOQVFzQ1FDQUFLQUpRUVFwR0RRQWdBQ2dDRkNJQklBQW9BaEJHRFFBZ0FDQUJRUUZxTmdJVUlBRkJDam9BQUE4TElBQVFmQThMSUFCQnpBQnFJZ0VnQVNnQ0FDSUNRZi8vLy84RElBSWJOZ0lBQWtBQ1FDQUFLQUpRUVFwR0RRQWdBQ2dDRkNJQ0lBQW9BaEJHRFFBZ0FDQUNRUUZxTmdJVUlBSkJDam9BQUF3QkN5QUFFSHdMSUFFb0FnQWFJQUZCQURZQ0FBdDhBUUovSXdCQkVHc2lBU1FBSUFGQkNqb0FEd0pBQWtBZ0FDZ0NFQ0lDQkg4Z0FnVWdBQkJIRFFJZ0FDZ0NFQXNnQUNnQ0ZDSUNSZzBBSUFBb0FsQkJDa1lOQUNBQUlBSkJBV28yQWhRZ0FrRUtPZ0FBREFFTElBQWdBVUVQYWtFQklBQW9BaVFSQUFCQkFVY05BQ0FCTFFBUEdnc2dBVUVRYWlRQUM3QUNBUUovSUFBRVFDQUFLQUlBRUVBZ0FFRUFOZ0lBSUFBb0FrZ2lBUVJBSUFFUUZDQUFRUUEyQWtnTElBQW9Ba1FpQVFSQUlBRVFGQ0FBUVFBMkFrUUxJQUFvQW13aUFRUkFJQUVRRkNBQVFRQTJBbXdMSUFBb0FuUWlBUVJBSUFFb0FnQWlBZ1JBSUFJUUZDQUFLQUowSWdGQkFEWUNBQXNnQVJBVUlBQkJBRFlDZEFzZ0FDZ0NlQ0lCQkVBZ0FTZ0NEQ0lDQkVBZ0FoQVVJQUFvQW5naUFVRUFOZ0lNQ3lBQktBSUVJZ0lFUUNBQ0VCUWdBQ2dDZUNJQlFRQTJBZ1FMSUFFb0FnZ2lBZ1JBSUFJUUZDQUFLQUo0SWdGQkFEWUNDQXNnQVNnQ0FDSUNCRUFnQWhBVUlBQW9BbmdpQVVFQU5nSUFDeUFCRUJRZ0FFRUFOZ0o0Q3lBQUtBSUVJZ0VFUUNBQkVEZ2dBRUVBTmdJRUN5QUFLQUlJSWdFRVFDQUJFRGdnQUVFQU5nSUlDeUFBRUJRTEM0c2FBaDUvQlhzakFFSHdBV3NpQ0NRQVFRRWhEZ0pBSUFBb0FnQW9BandOQUNBQUtBS0FBUTBBQWtBQ1FDQUFLQUowSWdsRkJFQWdBQ2dDZUNFRkRBRUxJQUVvQWhBaEJpQUpMd0VFSVFRQ1FDQUFLQUo0SWdWRkRRQWdCU2dDREVVTkFDQUZMUUFTSVFZTEFrQWdCQVJBSUFrb0FnQWhDUU5BSUFrZ0EwRUdiR29pQ2k4QkFDSUhJQVpQQkVBZ0NDQUdOZ0swQVNBSUlBYzJBckFCSUFKQkFVSHU2Z0FnQ0VHd0FXb1FFMEVBSVE0TUJnc0NRQ0FLTHdFRUlncEZEUUFnQ2tILy93TkdEUUFnQ2tFQmF5SUtJQVpKRFFBZ0NDQUdOZ0trQVNBSUlBbzJBcUFCSUFKQkFVSHU2Z0FnQ0VHZ0FXb1FFMEVBSVE0TUJnc2dBMEVCYWlJRElBUkhEUUFMREFFTElBWU5BZ3dCQ3dOQUlBWkJBV3NoQmtFQUlRTURRQ0FKSUFOQkJteHFMd0VBSUFaSEJFQWdBMEVCYWlJRElBUkhEUUVNQkFzTElBWU5BQXNMQWtBZ0JVVU5BQ0FGS0FJTUlncEZEUUFDUUFKQUlBVXRBQklpQlFSQVFRQWhBMEVCSVFjRFFDQUJLQUlRSWdRZ0NpQURRUUowYWk4QkFDSUdUUVJBSUFnZ0JEWUNsQUVnQ0NBR05nS1FBU0FDUVFGQjd1b0FJQWhCa0FGcUVCTkJBQ0VIQ3lBRFFRRnFJZ01nQlVjTkFBc2dCVUVFRUJjaUJFVU5BVUVBSVFNRFFBSkFJQW9nQTBFQ2RHb2lCaTBBQWlJSlFRSlBCRUFnQ0NBSk5nSkVJQWdnQXpZQ1FDQUNRUUZCbWQ0QUlBaEJRR3NRRTBFQUlRY01BUXNnQlNBR0xRQURJZ1pOQkVBZ0NDQUdOZ0tBQVNBQ1FRRkI0ZDBBSUFoQmdBRnFFQk5CQUNFSERBRUxJQVFnQmtFQ2RHb2hDd0pBSUFsQkFVY2lEQTBBSUFzb0FnQkZEUUFnQ0NBR05nSlFJQUpCQVVIaTJRQWdDRUhRQUdvUUUwRUFJUWNNQVFzQ1FDQUpEUUFnQmtVTkFDQUlJQVkyQW1RZ0NDQUROZ0pnSUFKQkFVSFkzQUFnQ0VIZ0FHb1FFMEVBSVFjTUFRc0NRQ0FNRFFBZ0F5QUdSZzBBSUFnZ0JqWUNlQ0FJSUFNMkFuUWdDQ0FETmdKd0lBSkJBVUg4M0FBZ0NFSHdBR29RRTBFQUlRY01BUXNnQzBFQk5nSUFDeUFEUVFGcUlnTWdCVWNOQUFzZ0IwVWhCMEVBSVFNRFFBSkFBa0FnQkNBRFFRSjBJZ1pxS0FJQVJRUkFJQVlnQ21vdEFBSU5BUXNnQTBFQmFpSURJQVZIRFFJZ0IwRUJjUTBCSUFFb0FoQkJBVWNOQlVFQUlRTURRQ0FFSUFOQkFuUnFLQUlBQkVBZ0JTQURRUUZxSWdOSERRRU1Cd3NMUVFBaENTQUNRUUpCZ01nQVFRQVFFMEVBSVFNZ0JVRUVUd1JBSUFWQi9BRnhJUWRCQUNFR0EwQWdDaUFEUVFKMGFpSUxJQU02QUFNZ0MwRUJPZ0FDSUFvZ0EwRUJjaUlMUVFKMGFpSU1JQXM2QUFNZ0RFRUJPZ0FDSUFvZ0EwRUNjaUlMUVFKMGFpSU1JQXM2QUFNZ0RFRUJPZ0FDSUFvZ0EwRURjaUlMUVFKMGFpSU1JQXM2QUFNZ0RFRUJPZ0FDSUFOQkJHb2hBeUFHUVFScUlnWWdCMGNOQUFzTElBVkJBM0VpQlVVTkJRTkFJQW9nQTBFQ2RHb2lCaUFET2dBRElBWkJBVG9BQWlBRFFRRnFJUU1nQ1VFQmFpSUpJQVZIRFFBTERBVUxJQWdnQXpZQ01FRUJJUWNnQWtFQlFialdBQ0FJUVRCcUVCTWdBMEVCYWlJRElBVkhEUUVMQ3lBRUVCUkJBQ0VPREFVTElBVkJCQkFYSWdRTkFRdEJBQ0VPSUFKQkFVSFkzd0JCQUJBVERBTUxJQVFRRkFzQ1FDQUFLQUo0SWdWRkRRQWdCU2dDRENJUFJRUkFJQVVvQWdRUUZDQUFLQUo0S0FJSUVCUWdBQ2dDZUNnQ0FCQVVJQUFvQW5naUJTZ0NEQ0lFQkg4Z0JCQVVJQUFvQW5nRklBVUxFQlFnQUVFQU5nSjREQUVMSUFFb0FoZ2hEUUpBQWtBZ0JTMEFFaUlMQkVBZ0JTZ0NBQ0VVSUFVb0FnUWhCaUFGS0FJSUlRcEJBQ0VEQWtBRFFDQU5JQThnQTBFQ2RHb3ZBUUJCTkd4cUtBSXNCRUFnQ3lBRFFRRnFJZ05IRFFFTUFnc0xJQWdnQXpZQ0lDQUNRUUZCa093QUlBaEJJR29RRTBFQUlRNE1CZ3NnQzBFMGJCQVlJZ2xGRFFGQkFDRURBMEFnRHlBRFFRSjBhaUlGTHdFQUlRY2dDU0FGTFFBQ0JIOGdCUzBBQXdVZ0F3dEJOR3hxSWdRZ0RTQUhRVFJzYWlJRi9RQUNBUDBMQWdBZ0JDQUZLQUl3TmdJd0lBUWdCZjBBQWlEOUN3SWdJQVFnQmYwQUFoRDlDd0lRSUFrZ0EwRTBiR29pQkNBRktBSUlJQVVvQWd4c1FRSjBFQndpQlRZQ0xDQUZSUVJBSUFNRVFDQURRZi8vQTNFaEFBTkFJQUJCTkd3Z0NXcEJDR3NvQWdBUUZDQUFRUUZySWdBTkFBc0xJQWtRRkVFQUlRNGdBa0VCUWR6ckFFRUFFQk1NQndzZ0JDQURJQXBxTFFBQU5nSVlJQVFnQXlBR2FpMEFBRFlDSUNBRFFRRnFJZ01nQzBjTkFBc2dBQ2dDZUM4QkVDSVFRUUZySVJJRFFDQUpJQk5CTkd4cUlnVW9BZ3dnQlNnQ0NHd2hCQ0FOSUE4Z0UwRUNkR29pQmk4QkFFRTBiR29vQWl3aENnSkFJQVl0QUFKRkJFQWdCRVVOQVNBRktBSXNJUU5CQUNFSFFRQWhCUUpBSUFSQkJFa05BQ0FESUFwclFSQkpEUUFnQkVGOGNTRUZRUUFoQmdOQUlBTWdCa0VDZENJTWFpQUtJQXhxL1FBQ0FQMExBZ0FnQmtFRWFpSUdJQVZIRFFBTElBUWdCVVlOQWdzZ0JTRUdJQVJCQTNFaURBUkFBMEFnQXlBR1FRSjBJaEZxSUFvZ0VXb29BZ0EyQWdBZ0JrRUJhaUVHSUFkQkFXb2lCeUFNUncwQUN3c2dCU0FFYTBGOFN3MEJBMEFnQXlBR1FRSjBJZ1ZxSUFVZ0Ntb29BZ0EyQWdBZ0F5QUZRUVJxSWdkcUlBY2dDbW9vQWdBMkFnQWdBeUFGUVFocUlnZHFJQWNnQ21vb0FnQTJBZ0FnQXlBRlFReHFJZ1ZxSUFVZ0Ntb29BZ0EyQWdBZ0JrRUVhaUlHSUFSSERRQUxEQUVMSUFSRkRRQWdGQ0FHTFFBRElnWkJBblJxSVFVZ0NTQUdRVFJzYWlnQ0xDRURRUUFoQmlBRVFRRkhCRUFnQkVGK2NTRVZRUUFoREFOQUlBTWdCa0VDZENJSGFpQUZJQWNnQ21vb0FnQWlFU0FTSUJBZ0VVb2JRUUFnRVVFQVRoc2dDMnhCQW5ScUtBSUFOZ0lBSUFNZ0IwRUVjaUlIYWlBRklBY2dDbW9vQWdBaUJ5QVNJQWNnRUVnYlFRQWdCMEVBVGhzZ0MyeEJBblJxS0FJQU5nSUFJQVpCQW1vaEJpQU1RUUpxSWd3Z0ZVY05BQXNMSUFSQkFYRkZEUUFnQXlBR1FRSjBJZ1JxSUFVZ0JDQUthaWdDQUNJRUlCSWdCQ0FRU0J0QkFDQUVRUUJPR3lBTGJFRUNkR29vQWdBMkFnQUxJQk5CQVdvaUV5QUxSdzBBQ3d3Q0N5QUxRVFJzRUJnaUNRMEJDMEVBSVE0Z0FrRUJRZHpyQUVFQUVCTU1Bd3NnQVNnQ0VDSUZCRUJCQUNFREEwQWdEU0FEUVRSc2FpZ0NMQ0lFQkVBZ0JCQVVDeUFEUVFGcUlnTWdCVWNOQUFzTElBMFFGQ0FCSUFzMkFoQWdBU0FKTmdJWUN5QUFLQUowSWdORkRRRWdBeWdDQUNFSElBTXZBUVFpQ3dSQUlBZEJLbW9oRWlBSFFTUnFJUk1nQjBFZWFpRVJJQWRCR0dvaEZDQUhRUkpxSVJVZ0IwRU1haUVXSUFkQkJtb2hGeUFMUVFKcklSaEJBQ0VEUVFFaEJRTkFBa0FnQVNnQ0VDSUVJQWNnQTBFR2JHb2lEUzhCQUNJR1RRUkFJQWdnQkRZQ0ZDQUlJQVkyQWhBZ0FrRUNRWUU1SUFoQkVHb1FFd3dCQ3lBTkx3RUVJZ2xCQVdwQi8vOERjVUVCVFFSQUlBRW9BaGdnQmtFMGJHb2dEUzhCQWpzQk1Bd0JDeUFKUVFGcklncEIvLzhEY1NJUElBUlBCRUFnQ0NBRU5nSUVJQWdnRHpZQ0FDQUNRUUpCMkRnZ0NCQVREQUVMQWtBZ0JpQVBSZzBBSUEwdkFRSU5BQ0FJSUFFb0FoZ2lDU0FHUVRSc2FpSUVLQUl3TmdMb0FTQUlJQVQ5QUFJZy9Rc0QyQUVnQ0NBRS9RQUNFUDBMQThnQklBZ2dCUDBBQWdEOUN3TzRBU0FFSUFrZ0QwRTBiQ0lNYWlJSktRSUlOd0lJSUFRZ0NTa0NFRGNDRUNBRUlBa3BBaGczQWhnZ0JDQUpLUUlnTndJZ0lBUWdDU2tDS0RjQ0tDQUVJQWtvQWpBMkFqQWdCQ0FKS1FJQU53SUFJQUVvQWhnZ0RHb2lCQ0FJL1FBRHVBSDlDd0lBSUFRZ0NQMEFBOWdCL1FzQ0lDQUVJQWo5QUFQSUFmMExBaEFnQkNBSUtBTG9BVFlDTUNBRFFRRnFJQXRQRFFBZ0JTRUpJQmdnQTJ0Qi8vOERjU0lFUVFkUEJFQWdCU0FFUVFGcUlobEIrUDhIY1NJUWFpRUpJQXI5RUNFa0lBYjlFQ0VqUVFBaERBTkFJQ01nSkNBSElBVWdER3BCQm13aUJHb2lHaThCQVAwUUlBUWdGMm9pR3k4QkFQMGFBU0FFSUJacUlod3ZBUUQ5R2dJZ0JDQVZhaUlkTHdFQS9Sb0RJQVFnRkdvaUhpOEJBUDBhQkNBRUlCRnFJaDh2QVFEOUdnVWdCQ0FUYWlJZ0x3RUEvUm9HSUFRZ0Vtb2lCQzhCQVAwYUJ5SWhJQ1A5TGlBaElDVDlMU0lsL1U1QkQvMkxBVUVQL1l3Qi9WSWhJaUFoSUNQOUxTQWwvVkFpSWYwWkFFRUJjUVJBSUJvZ0l2MVpBUUFBQ3lBaC9Sa0JRUUZ4QkVBZ0d5QWkvVmtCQUFFTElDSDlHUUpCQVhFRVFDQWNJQ0w5V1FFQUFnc2dJZjBaQTBFQmNRUkFJQjBnSXYxWkFRQURDeUFoL1JrRVFRRnhCRUFnSGlBaS9Wa0JBQVFMSUNIOUdRVkJBWEVFUUNBZklDTDlXUUVBQlFzZ0lmMFpCa0VCY1FSQUlDQWdJdjFaQVFBR0N5QWgvUmtIUVFGeEJFQWdCQ0FpL1ZrQkFBY0xJQXhCQ0dvaURDQVFSdzBBQ3lBUUlCbEdEUUVMQTBBZ0NpRUVBa0FnQmlBSElBbEJCbXhxSWd3dkFRQWlFRWNFUUNBR0lRUWdEeUFRUncwQkN5QU1JQVE3QVFBTElBc2dDVUVCYWlJSlFmLy9BM0ZIRFFBTEN5QUJLQUlZSUFaQk5HeHFJQTB2QVFJN0FUQUxJQVZCQVdvaEJTQURRUUZxSWdNZ0MwY05BQXNnQUNnQ2RDSURLQUlBSVFjTElBY0VmeUFIRUJRZ0FDZ0NkQVVnQXdzUUZDQUFRUUEyQW5RTUFRdEJBQ0VPSUFKQkFVSDJ5UUJCQUJBVEN5QUlRZkFCYWlRQUlBNEw1UUVCQlg4akFFRWdheUlFSkFBQ2Z3SkFJQUFvQWp3aUF3UkFRUUVoQlFOQUlBQW9BbVFvQWhnZ0FDZ0NRQ0FDUVFKMGFpZ0NBQ0lHUVRSc2FpZ0NMRVVFUUNBRUlBWTJBaEFnQVVFQ1FZODdJQVJCRUdvUUUwRUFJUVVnQUNnQ1BDRURDeUFDUVFGcUlnSWdBMGtOQUFzTUFRdEJBU0VGUVFFZ0FDZ0NaQ0lES0FJUVJRMEJHZ05BSUFNb0FoZ2dBa0UwYkdvb0FpeEZCRUFnQkNBQ05nSUFJQUZCQWtHUE95QUVFQk5CQUNFRklBQW9BbVFoQXdzZ0FrRUJhaUlDSUFNb0FoQkpEUUFMQzBFQklBVU5BQm9nQVVFQlFhd1dRUUFRRTBFQUN5QUVRU0JxSkFBTCtnWUNFMzhDZmlBQUtBSVlJaEFvQWhCRkJFQkJBUThMSUJBb0FoZ2hEU0FBS0FJVUtBSUFLQUlVSVFzRFFDQUJJQTBvQWlRaUFqWUNKQ0FMS0FJY0lnWWdBa0dZQVd4cUlRTUNRQUpBQW44Z0FDZ0NRQ0lSQkVBZ0JpQUxLQUlZUVpnQmJHb2lBa0dRQVdzb0FnQWdBa0dZQVdzb0FnQnJJUXdnQTBFTWFpRUdJQU5CQkdvaEJDQURLQUlJSVFJZ0F5Z0NBQ0VGUVNRTUFRc2dBMEdVQVdvaEJpQURRWXdCYWlFRUlBTW9BcEFCSWdJZ0F5Z0NpQUVpQldzaERFRTBDeUFMYWlnQ0FDSVNSUTBBSUFRb0FnQWhCeUFHS0FJQUlRa2dBaUFGYXlFR0lBRW9BZ2dpQTBKL0lBRTFBaWdpRllaQ2Y0VWlGaUFCTlFJUWZDQVZpS2NpQ0dvaEJBSi9JQVVnQ0VzRVFDQUZJQWhySVE1QkFDRUlRUUFnQWlBRVRRMEJHaUFHSUFRZ0JXc2lCbXNNQVFzZ0NDQUZheUVJSUFJZ0JFMEVRQ0FHSUFocklRWkJBQ0VPUVFBTUFRdEJBQ0VPSUFNaEJpQUNJQVJyQ3lBSklBZHJJUUlnQVNnQ0RDSUVJQllnQVRVQ0ZId2dGWWluSWdwcUlRVUNmeUFISUFwTEJFQWdCeUFLYXlFUFFRQWhDa0VBSUFVZ0NVOE5BUm9nQWlBRklBZHJJZ0pyREFFTElBb2dCMnNoQ2lBRklBbFBCRUFnQWlBS2F5RUNRUUFoRDBFQURBRUxRUUFoRHlBRUlRSWdDU0FGYXdzaEIwRUFJUVVnQ0VFQVNBMEJJQXBCQUVnTkFVRUFTQTBCSUFkQkFFZ05BU0FHUVFCSURRRWdBa0VBU0EwQklBTWdEMndnRG1vaEJ5QUtJQXhzSUFocUlRa0NRQUpBQWtBZ0FTZ0NMQ0lJRFFBZ0NRMEFJQWNOQUNBRElBeEhEUUFnQXlBR1J3MEFJQUlnQkVjTkFTQUJJQXRCSkVFMElCRWJhaUlDS0FJQU5nSXNJQUpCQURZQ0FBd0RDeUFJRFFFTElBUkZEUUlnQkswZ0E2MStRaUNJcHcwQ0lBTWdCR3dpQTBILy8vLy9BMHNOQWlBQklBTkJBblFRSENJRE5nSXNJQU5GRFFJZ0JpQUJLQUlJSWdSR0lBRW9BZ3dpQlNBQ1JuRU5BQ0FEUVFBZ0JDQUZiRUVDZEJBWkdnc2dBa1VOQUNBQ1FRRnhJQVpCQW5RaEJpQUJLQUlzSUFkQkFuUnFJUVFnRWlBSlFRSjBhaUVGSUFKQkFVY0VRQ0FDUWY3Ly8vOEhjU0VIUVFBaEFnTkFJQVFnQlNBR0VCWWdCU0FNUVFKMElnbHFJZ2dnQ1dvaEJTQUJLQUlJUVFKMGFpQUlJQVlRRmlBQktBSUlRUUowYWlFRUlBSkJBbW9pQWlBSFJ3MEFDd3RGRFFBZ0JDQUZJQVlRRmhvTElBdEJ6QUJxSVFzZ0RVRTBhaUVOSUFGQk5Hb2hBVUVCSVFVZ0ZFRUJhaUlVSUJBb0FoQkpEUUVMQ3lBRkN3UUFRWDhMZ0JRQ0NYOEtmaU1BUWFBQmF5SUZKQUFDUUNBQ1FTTk5CRUJCQUNFQ0lBTkJBVUdxTDBFQUVCTU1BUXNnQWtFa2F5SUNJQUpCQTI0aUNVRURiRWNFUUVFQUlRSWdBMEVCUWFvdlFRQVFFd3dCQ3lBQUtBSmdJUVlnQVNBRlFad0JhaUlDUVFJUUZTQUFJQVVvQXB3Qk93Rm9JQUZCQW1vZ0JrRUlha0VFRUJVZ0FVRUdhaUFHUVF4cVFRUVFGU0FCUVFwcUlBWkJCQkFWSUFGQkRtb2dCa0VFYWtFRUVCVWdBVUVTYWlBQVFmUUFha0VFRUJVZ0FVRVdhaUFBUWZnQWFrRUVFQlVnQVVFYWFpQUFRZXdBYWtFRUVCVWdBVUVlYWlBQVFmQUFha0VFRUJVZ0FVRWlhaUFDUVFJUUZRSkFBa0FDUUNBRktBS2NBU0lDUVlDQUFVMEVRQ0FHSUFJMkFoQWdBaUFKUndSQUlBVWdDVFlDaEFFZ0JTQUNOZ0tBQVNBRFFRRkIzL1FBSUFWQmdBRnFFQk5CQUNFQ0RBVUxJQVlvQWdRaUFpQUdLQUlNSWdkSklBWW9BZ2dpQ3lBR0tBSUFJZ1JMY1VVRVFDQUZJQWV0SUFLdGZUY0RlQ0FGSUF1dElBU3RmVGNEY0NBRFFRRkJxZkVBSUFWQjhBQnFFQk5CQUNFQ0RBVUxJQUFvQW5RaUNFRUFJQUFvQW5naUNodEZCRUFnQlNBS05nSUVJQVVnQ0RZQ0FDQURRUUZCMGZVQUlBVVFFMEVBSVFJTUJRc0NRQUpBSUFBb0Ftd2lEQ0FFU3cwQVFYOGdDQ0FNYWlJSUlBZ2dERWtiSUFSTkRRQWdBQ2dDY0NJSUlBSkxEUUJCZnlBSUlBcHFJZ29nQ0NBS1N4c2dBa3NOQVF0QkFDRUNJQU5CQVVIREZVRUFFQk1NQlFzQ1FDQUFLQUw0QVEwQUlBQW9BdkFCSWdoRkRRQWdBQ2dDOUFFaUNrVU5BQ0FMSUFScklnUWdDRVlnQnlBQ2F5SUNJQXBHY1EwQUlBVWdBallDYkNBRklBUTJBbWdnQlNBS05nSmtJQVVnQ0RZQ1lDQURRUUZCa2UwQUlBVkI0QUJxRUJOQkFDRUNEQVVMSUFZZ0NVRTBFQmNpQkRZQ0dDQUVSUTBCQWtBZ0JpZ0NFRVVOQUNBQlFTUnFJQVZCbUFGcUlnSkJBUkFWSUFRZ0JTZ0NtQUVpQ1VFSGRpSUtOZ0lnSUFRZ0NVSC9BSEZCQVdvaUREWUNHQ0FBS0FMNEFTRUxJQUZCSldvZ0FrRUJFQlVnQkNBRktBS1lBVFlDQUNBQlFTWnFJQUpCQVJBVklBUWdCU2dDbUFFaUJ6WUNCRUVBSVFJZ0JDZ0NBQ0lJUVlBQ2EwR0Jma2tFUUVFQUlRa01CUXRCQUNFSklBZEJnQUpyUVlGK1NRMEVJQVFvQWhnaUIwRWZTdzBESUFSQkFEWUNKQ0FFSUFBb0FyZ0JOZ0lvUVFFaENTQUdLQUlRUVFGTkRRQkJBQ0FLSUFzYklRcEJBQ0FNSUFzYklRc2dBVUVuYWlFQkEwQWdBU0FGUVpnQmFrRUJFQlVnQkNBRktBS1lBU0lJUVFkMklnYzJBbFFnQkNBSVFmOEFjVUVCYWlJSU5nSk1Ba0FnQUNnQytBRU5BQ0FBTFFEVUFVRUVjUTBBSUFnZ0MwWWdCeUFLUm5FTkFDQUZJQWMyQWxRZ0JTQUlOZ0pRSUFVZ0NUWUNUQ0FGSUFvMkFrZ2dCU0FMTmdKRUlBVWdDVFlDUUNBRFFRSkJsZk1BSUFWQlFHc1FFd3NnQVVFQmFpQUZRWmdCYWlJSFFRRVFGU0FFSUFVb0FwZ0JOZ0kwSUFGQkFtb2dCMEVCRUJVZ0JDQUZLQUtZQVNJSE5nSTRJQVFvQWpRaUNFR0FBbXRCZ1g1SkRRVWdCMEdBQW10QmdINU5EUVVnQkNnQ1RDSUhRU0JQRFFRZ0FVRURhaUVCSUFSQkFEWUNXQ0FFSUFBb0FyZ0JOZ0pjSUFSQk5Hb2hCQ0FKUVFGcUlna2dCaWdDRUVrTkFBc0xRUUFoQWlBQUtBSjBJZ2RGRFFRZ0FDZ0NlQ0lMUlEwRUlBQWdCNjBpRFVJQmZTSVBJQVlvQWdnZ0FDZ0NiQ0lJYTYxOElBMkFweUlCTmdLQUFTQUFJQXV0SWc1Q0FYMGlFQ0FHS0FJTUlBQW9BbkFpQ211dGZDQU9nS2NpQkRZQ2hBRUNRQUpBSUFGRkRRQWdCRVVOQUVILy93TWdCRzRnQVU4TkFRc2dCU0FFTmdJVUlBVWdBVFlDRUNBRFFRRkJnKzRBSUFWQkVHb1FFd3dGQ3lBQklBUnNJUWtDUUNBQUxRQmNRUUp4QkVBZ0FDQUFLQUljSUFocklBZHVOZ0ljSUFBZ0FDZ0NJQ0FLYXlBTGJqWUNJQ0FBSUE4Z0FDZ0NKQ0FJYTYxOElBMkFQZ0lrSUFBZ0VDQUFLQUlvSUFwcnJYd2dEb0ErQWlnTUFRc2dBQ0FFTmdJb0lBQWdBVFlDSkNBQVFnQTNBaHdMSUFBZ0NVR01MQkFYSWdFMkFyUUJJQUZGQkVBZ0EwRUJRYm9lUVFBUUV3d0ZDeUFHS0FJUVFiZ0lFQmNoQVNBQUtBSU1JQUUyQXRBcklBQW9BZ3dvQXRBclJRUkFJQU5CQVVHNkhrRUFFQk1NQlF0QkNrRVVFQmNoQVNBQUtBSU1JQUUyQXZBcklBQW9BZ3dpQVNnQzhDdEZCRUFnQTBFQlFib2VRUUFRRXd3RkN5QUJRUW8yQXZnclFRcEJGQkFYSVFFZ0FDZ0NEQ0FCTmdMOEt5QUFLQUlNSWdFb0F2d3JSUVJBSUFOQkFVRzZIa0VBRUJNTUJRc2dBVUVLTmdLRUxBSkFJQVlvQWhBaUIwVU5BQ0FHS0FJWUlRdEJBQ0VCSUFkQkFVY0VRQ0FIUVg1eElRaEJBQ0VFQTBBZ0N5QUJRVFJzYWlJS0tBSWdSUVJBSUFBb0Fnd29BdEFySUFGQnVBaHNha0VCSUFvb0FoaEJBV3QwTmdLMENBc2dDeUFCUVFGeUlncEJOR3hxSWd3b0FpQkZCRUFnQUNnQ0RDZ0MwQ3NnQ2tHNENHeHFRUUVnRENnQ0dFRUJhM1EyQXJRSUN5QUJRUUpxSVFFZ0JFRUNhaUlFSUFoSERRQUxDeUFIUVFGeFJRMEFJQXNnQVVFMGJHb2lCQ2dDSUEwQUlBQW9BZ3dvQXRBcklBRkJ1QWhzYWtFQklBUW9BaGhCQVd0ME5nSzBDQXNnQ1FSQUlBQW9BclFCSVFGQkFDRUVBMEFnQVNBR0tBSVFRYmdJRUJjaUJ6WUMwQ3NnQjBVRVFDQURRUUZCdWg1QkFCQVREQWNMSUFGQmpDeHFJUUVnQkVFQmFpSUVJQWxKRFFBTEN3Si9JQUFvQXVBQklBQW9Bb1FCSUFBb0FvQUJiQ0lCTmdJa0lBRkJLQkFYSVFFZ0FDZ0M0QUVpQXlBQk5nSW9RUUFnQVVVTkFCcEJBU0FES0FJa1JRMEFHa0VBSVFNRFFBSkFRUUFoQkNBQklBTkJLR3dpQjJvaUFVRUFOZ0lVSUFGQjVBQTJBaHhCNUFCQkdCQVhJUWtnQnlBQUtBTGdBU0lMS0FJb0lnRnFJQWsyQWhnZ0NVVU5BRUVCSVFRZ0EwRUJhaUlESUFzb0FpUkpEUUVMQ3lBRUMwVU5CQ0FBUVFRMkFnZ2dCaWdDRUNJREJFQkJmeUFBS0FKd0lnRWdBQ2dDZUNJQ0lBQW9Bb1FCUVFGcmJHb2lCQ0FDYWlJQ0lBSWdCRWtiSWdJZ0JpZ0NEQ0lFSUFJZ0JFa2JyVUlCZlNFUVFYOGdBQ2dDYkNJQ0lBQW9BblFpQkNBQUtBS0FBVUVCYTJ4cUlnQWdCR29pQkNBQUlBUkxHeUlBSUFZb0FnZ2lCQ0FBSUFSSkc2MUNBWDBoRVNBQklBWW9BZ1FpQUNBQUlBRkpHNjFDQVgwaEVpQUNJQVlvQWdBaUFDQUFJQUpKRzYxQ0FYMGhFeUFHS0FJWUlRQkJBQ0VCQTBBZ0FDQVNJQUExQWdRaURYd2dEWUFpRkQ0Q0ZDQUFJQk1nQURVQ0FDSU9mQ0FPZ0NJVlBnSVFJQUJDZnlBQU5RSW9JZytHUW4rRkloWWdEU0FRZkNBTmdDQVVmVUwvLy8vL0Q0TjhJQStJUGdJTUlBQWdEaUFSZkNBT2dDQVZmVUwvLy8vL0Q0TWdGbndnRDRnK0FnZ2dBRUUwYWlFQUlBRkJBV29pQVNBRFJ3MEFDd3RCQVNFQ0RBUUxJQVVnQWpZQ2tBRWdBMEVCUWRjOUlBVkJrQUZxRUJOQkFDRUNEQU1MUVFBaEFpQUdRUUEyQWhBZ0EwRUJRYm9lUVFBUUV3d0NDeUFGSUFjMkFqUWdCU0FKTmdJd0lBTkJBVUdGK0FBZ0JVRXdhaEFUREFFTElBVWdCellDS0NBRklBZzJBaVFnQlNBSk5nSWdJQU5CQVVIZjd3QWdCVUVnYWhBVEN5QUZRYUFCYWlRQUlBSUxtZ01CQm44akFFRVFheUlHSkFBQ2Z5QUNJQUpCQVVFQ0lBQW9BbUFvQWhBaUNFR0JBa2tiSWdkQkFYUkJCV29pQkc0aUJTQUViRVlnQWlBRVQzRkZCRUFnQTBFQlFmNGpRUUFRRTBFQURBRUxBbjhnQUNnQ0NFRVFSZ1JBSUFBb0FyUUJJQUFvQXVRQlFZd3NiR29NQVFzZ0FDZ0NEQXNoQkVFQUlRQWdCQzBBaUN3aUFrRUVjUVJBSUFRb0FxUURRUUZxSVFBTElBQWdCV29pQlVFZ1R3UkFJQVlnQlRZQ0FDQURRUUZCd0R3Z0JoQVRRUUFNQVFzZ0JDQUNRUVJ5T2dDSUxDQUFJQVZKQkVBZ0JDQUFRWlFCYkdwQnFBTnFJUUlEUUNBQklBSkJBUkFWSUFGQkFXb2lBU0FDUVFScUlBY1FGU0FCSUFkcUlnRWdBa0VJYWtFQ0VCVWdBaUFDS0FJSUlnTWdCQ2dDQ0NJSklBTWdDVWtiTmdJSUlBRkJBbW9nQWtFTWFrRUJFQlVnQVVFRGFpSUJJQUpCRUdvZ0J4QVZJQUVnQjJvaUFTQUdRUXhxUVFFUUZTQUNJQVlvQWd3MkFpUWdBaUFDS0FJUUlnTWdDQ0FESUFoSkd6WUNFQ0FDUVpRQmFpRUNJQUZCQVdvaEFTQUFRUUZxSWdBZ0JVY05BQXNMSUFRZ0JVRUJhellDcEFOQkFRc2dCa0VRYWlRQUMrZ0JBUU4vSXdCQkVHc2lCQ1FBQW44Q1FDQUJJQVJCQ0dvQ2Z5QUFLQUpnS0FJUVFZQUNUUVJBSUFJRVFFRi9JUVZCQVF3Q0N5QURRUUZCc2lSQkFCQVRRUUFNQXdzZ0FrRUJUUTBCUVg0aEJVRUNDeUlHRUJVZ0JDQUNJQVZxTmdJTUlBUW9BZ2dpQWlBQUtBSmdLQUlRSWdWUEJFQWdCQ0FGTmdJRUlBUWdBallDQUNBRFFRRkIrenNnQkJBVFFRQU1BZ3NnQUNBQ0lBRWdCbW9nQkVFTWFpQURFRXRGQkVBZ0EwRUJRYklrUVFBUUUwRUFEQUlMUVFFZ0JDZ0NERVVOQVJvZ0EwRUJRYklrUVFBUUUwRUFEQUVMSUFOQkFVR3lKRUVBRUJOQkFBc2dCRUVRYWlRQUM5VUJBUU4vSXdCQkVHc2lCQ1FBSUFRZ0FqWUNEQUpBQWtBZ0FFRUFJQUVnQkVFTWFpQURFRXRGRFFBZ0JDZ0NEQTBBQW44Z0FDZ0NDRUVRUmdSQUlBQW9BclFCSUFBb0F1UUJRWXdzYkdvTUFRc2dBQ2dDREF0QkFTRUZJQUFvQW1Bb0FoQkJBa2tOQVNnQzBDc2lBa0VjYWlFR1FRRWhBU0FDSVFNRFFDQURJQUlvQWhnMkF0QUlJQU1nQWlnQ3BBWTJBdHdPSUFOQjFBaHFJQVpCaUFZUUZob2dBMEc0Q0dvaEF5QUJRUUZxSWdFZ0FDZ0NZQ2dDRUVrTkFBc01BUXNnQTBFQlFjb2pRUUFRRXdzZ0JFRVFhaVFBSUFVTDFnRUJBMzhqQUVFUWF5SUVKQUFDUUNBQ1FRRkJBaUFBS0FKZ0tBSVFJZ0pCZ1FKSkd5SUZRUUpxUndSQVFRQWhBQ0FEUVFGQm1DRkJBQkFUREFFTEFuOGdBQ2dDQ0VFUVJnUkFJQUFvQXJRQklBQW9BdVFCUVl3c2JHb01BUXNnQUNnQ0RBc2hCaUFCSUFSQkRHb2dCUkFWUVFFaEFDQUJJQVZxSWdVZ0JFRUlha0VCRUJVZ0FpQUVLQUlNSWdGTkJFQWdCQ0FDTmdJRUlBUWdBVFlDQUNBRFFRRkJwdlFBSUFRUUUwRUFJUUFNQVFzZ0JVRUJhaUFHS0FMUUt5QUJRYmdJYkdwQnFBWnFRUUVRRlFzZ0JFRVFhaVFBSUFBTGhBSUJCWDhqQUVFUWF5SUVKQUFDZnlBQUtBSUlRUkJHQkVBZ0FDZ0N0QUVnQUNnQzVBRkJqQ3hzYWd3QkN5QUFLQUlNQ3lFR0FrQkJBVUVDSUFBb0FtQWlCeWdDRUVHQkFra2JJZ1VnQWs4RVFFRUFJUUlnQTBFQlFaZ2tRUUFRRXd3QkN5QUVJQUlnQlVGL2MybzJBZ3dnQVNBRVFRaHFJQVVRRlNBRUtBSUlJZ2dnQnlnQ0VFOEVRRUVBSVFJZ0EwRUJRYzd0QUVFQUVCTU1BUXRCQVNFQ0lBRWdCV29pQVNBR0tBTFFLeUFJUWJnSWJHcEJBUkFWSUFBZ0JDZ0NDQ0FCUVFGcUlBUkJER29nQXhCTVJRUkFRUUFoQWlBRFFRRkJtQ1JCQUJBVERBRUxJQVFvQWd4RkRRQkJBQ0VDSUFOQkFVR1lKRUVBRUJNTElBUkJFR29rQUNBQ0M2d0dBUWQvSXdCQkVHc2lCaVFBSUFZZ0FqWUNEQ0FBS0FKZ0lRa0NmeUFBS0FJSVFSQkdCRUFnQUNnQ3RBRWdBQ2dDNUFGQmpDeHNhZ3dCQ3lBQUtBSU1DeUlFSUFRdEFJZ3NRUUZ5T2dDSUxBSkFJQUpCQkUwRVFDQURRUUZCc0NOQkFCQVREQUVMSUFFZ0JFRUJFQlVnQkNnQ0FFRUlUd1JBSUFOQkFVR09JMEVBRUJNTUFRc2dBVUVCYWlBR1FRaHFRUUVRRlNBRUlBWW9BZ2dpQWpZQ0JDQUNRUVZPQkVBZ0EwRUJRZVVpUVFBUUV5QUVRWDgyQWdRTElBRkJBbW9nQkVFSWFrRUNFQlVnQkNnQ0NDSUhRWUNBQkd0QmdJQjhUUVJBSUFZZ0J6WUNBQ0FEUVFGQmlqOGdCaEFUREFFTElBUWdBQ2dDdkFFaUFpQUhJQUliTmdJTUlBRkJCR29nQkVFUWFrRUJFQlVnQkNnQ0VFRUNUd1JBSUFOQkFVSDdLa0VBRUJNTUFRc2dBVUVGYWlFQ0lBWWdCaWdDREVFRmF6WUNEQUpBSUFrb0FoQWlCMFVOQUNBRUtBSUFRUUZ4SVFnZ0JDZ0MwQ3NoQkVFQUlRa2dCMEVJVHdSQUlBZEJlSEVoQVFOQUlBUWdCVUc0Q0d4cUlBZzJBZ0FnQkNBRlFRRnlRYmdJYkdvZ0NEWUNBQ0FFSUFWQkFuSkJ1QWhzYWlBSU5nSUFJQVFnQlVFRGNrRzRDR3hxSUFnMkFnQWdCQ0FGUVFSeVFiZ0liR29nQ0RZQ0FDQUVJQVZCQlhKQnVBaHNhaUFJTmdJQUlBUWdCVUVHY2tHNENHeHFJQWcyQWdBZ0JDQUZRUWR5UWJnSWJHb2dDRFlDQUNBRlFRaHFJUVVnQ2tFSWFpSUtJQUZIRFFBTEN5QUhRUWR4SWdGRkRRQURRQ0FFSUFWQnVBaHNhaUFJTmdJQUlBVkJBV29oQlNBSlFRRnFJZ2tnQVVjTkFBc0xRUUFoQlNBQVFRQWdBaUFHUVF4cUlBTVFURVVFUUNBRFFRRkJzQ05CQUJBVERBRUxJQVlvQWd3RVFDQURRUUZCc0NOQkFCQVREQUVMQW44Z0FDZ0NDRUVRUmdSQUlBQW9BclFCSUFBb0F1UUJRWXdzYkdvTUFRc2dBQ2dDREFzaEFTQUFLQUpnS0FJUVFRSlBCRUFnQVNnQzBDc2lBU2dDQkVFQ2RDRUhJQUZCc0FkcUlRb2dBVUdzQm1vaEEwRUJJUWtnQVNFQ0EwQWdBaUFCL1FBQ0JQMExBcndJSUFJZ0FTZ0NGRFlDekFnZ0FrSGtEbW9nQXlBSEVCWWFJQUpCNkE5cUlBb2dCeEFXR2lBQ1FiZ0lhaUVDSUFsQkFXb2lDU0FBS0FKZ0tBSVFTUTBBQ3d0QkFTRUZDeUFHUVJCcUpBQWdCUXZyQ2dFR2Z5TUFRWUFCYXlJRkpBQWdCVUVBTmdKNEFrQWdBa0VJUndSQUlBTkJBVUdxSDBFQUVCTWdBMEVCUWFvZlFRQVFFd3dCQ3lBQklBQkI1QUZxUVFJUUZTQUJRUUpxSUFWQi9BQnFRUVFRRlNBQlFRWnFJQVZCOUFCcVFRRVFGU0FCUVFkcUlBVkIrQUJxUVFFUUZTQUFLQUxrQVNJQklBQW9Bb0FCSWdnZ0FDZ0NoQUZzVHdSQUlBVWdBVFlDY0NBRFFRRkIvandnQlVId0FHb1FFd3dCQ3lBQUtBSzBBU0FCUVl3c2JHb2hBaUFCSUFodUlRY2dCU2dDZENFRUFrQWdBQ2dDTENJR1FRQk9JQUVnQmtkeERRQWdBaWdDMUN0QkFXb2lCaUFFUmcwQUlBVWdCallDYUNBRklBUTJBbVFnQlNBQk5nSmdJQU5CQVVHV1BTQUZRZUFBYWhBVFFRQWhCQXdCQ3lBQ0lBUTJBdFFyQWtBZ0JTZ0NmQ0lFUVFGclFReE5CSDhnQkVFTVJ3MEJJQVZCRERZQ1FDQURRUUpCczl3QUlBVkJRR3NRRXlBRktBSjhCU0FFQzBVRVFDQURRUVJCb3RNQVFRQVFFeUFBUVFFMkFqZ0xBa0FDUUFKQUFrQWdBaWdDMkNzaUJnUkFJQVVvQW5RaUJDQUdTUTBCSUFVZ0JqWUNOQ0FGSUFRMkFqQWdBMEVCUWZrbklBVkJNR29RRXlBQVFRRTJBamhCQUNFRURBWUxJQVVvQW5naUJBMEJEQU1MSUFVb0FuZ2lCRVVOQVFzZ0JTQUVJQUF0QUZ4QkJIWkJBWEZxSWdZMkFuZ2dCU2dDZENJRUlBSW9BdGdySWdsQkFXdExCRUFnQlNBSk5nSVVJQVVnQkRZQ0VDQURRUUZCbGljZ0JVRVFhaEFUSUFCQkFUWUNPRUVBSVFRTUJBc2dCQ0FHVHdSQUlBVWdCallDSkNBRklBUTJBaUFnQTBFQlFkMG9JQVZCSUdvUUV5QUFRUUUyQWpoQkFDRUVEQVFMSUFJZ0JqWUMyQ3NMSUFZZ0JTZ0NkRUVCYWtjTkFDQUFJQUF0QUZ4QkFYSTZBRndMSUFVb0Fud2hBaUFBUVJBMkFnZ2dBRUVBSUFKQkRHc2dBQ2dDT0JzMkFoZ0NRQ0FBS0FJc0lnSkJmMFlFUUVFRUlRUUNRQ0FCSUFjZ0NHeHJJZ0VnQUNnQ0hFa05BQ0FCSUFBb0FpUlBEUUFnQnlBQUtBSWdTUTBBSUFjZ0FDZ0NLRTlCQW5RaEJBc2dBQ0FBTFFCY1Fmc0JjU0FFY2pvQVhDQUFLQUxrQVNFQkRBRUxJQUFnQUMwQVhFSDdBWEVnQUNnQzVBRWlBU0FDUjBFQ2RISTZBRndMSUFBb0F1QUJLQUlvSUFGQktHeHFJZ0lnQVRZQ0FDQUNJQVVvQW5RMkFnd2dCU2dDZUNFRUlBQW9Ba3hGQkVBZ0FpZ0NCQ0FFVHdSQVFRRWhCQXdEQ3lBRklBRTJBZ0FnQTBFQ1FhY01JQVVRRXlBQVFRRTJBa3dnQlNnQ2VDRUVDeUFBS0FMa0FTRUJJQUFvQXVBQktBSW9JUUlnQkFSQUlBSWdBVUVvYkdvaUFTQUVOZ0lFSUFFZ0JTZ0NlQ0lDTmdJSUlBRW9BaEFpQVVVRVFDQUNRUmdRRnlFQklBQW9BdUFCS0FJb0lBQW9BdVFCUVNoc2FpQUJOZ0lRSUFFRVFFRUJJUVFNQkF0QkFDRUVJQU5CQVVIK05VRUFFQk1NQXdzZ0FTQUNRUmhzRUJzaEFTQUFLQUxnQVNnQ0tDQUFLQUxrQVVFb2JHb2hBaUFCUlFSQUlBSW9BaEFRRkVFQUlRUWdBQ2dDNEFFb0FpZ2dBQ2dDNUFGQktHeHFRUUEyQWhBZ0EwRUJRZjQxUVFBUUV3d0RDeUFDSUFFMkFoQkJBU0VFREFJTEFrQWdBaUFCUVNoc2FpSUVLQUlRSWdZTkFDQUVRUW8yQWdoQkNrRVlFQmNoQmlBQUtBTGdBU2dDS0NJQ0lBQW9BdVFCSWdGQktHeHFJQVkyQWhBZ0JnMEFRUUFoQkNBQ0lBRkJLR3hxUVFBMkFnZ2dBMEVCUWY0MVFRQVFFd3dDQ3lBRktBSjBJZ2NnQWlBQlFTaHNhaUlCS0FJSVNRUkFRUUVoQkF3Q0MwRUJJUVFnQVNBSFFRRnFJZ0UyQWdnZ0JpQUJRUmhzRUJzaEFTQUFLQUxnQVNnQ0tDQUFLQUxrQVVFb2JHb2hBaUFCUlFSQUlBSW9BaEFRRkVFQUlRUWdBQ2dDNEFFb0FpZ2dBQ2dDNUFGQktHeHFJZ0JCQURZQ0NDQUFRUUEyQWhBZ0EwRUJRZjQxUVFBUUV3d0NDeUFDSUFFMkFoQU1BUXNnQlNBRU5nSlFJQU5CQVVIQTNnQWdCVUhRQUdvUUUwRUFJUVFMSUFWQmdBRnFKQUFnQkF2YUJnRUlmeU1BUWRBQWF5SURKQUFnQTBFQk5nSk1JQUFvQWl3aENRSkFBa0FnQUNnQzRBRW9BaWdpQkVVTkFDQUVLQUlRUlEwQUFrQWdCQ0FKUVNoc2FpSUVLQUlFUlFSQUlBRWdBQ2tETUVJQ2ZDQUNFREFOQVNBQ1FRRkJteXBCQUJBVERBTUxJQUVnQkNnQ0VDa0RBQ0FDRURCRkJFQWdBa0VCUVpzcVFRQVFFd3dEQ3lBQklBQW9BaEJCQWlBQ0VCMUJBa2NFUUNBQ1FRRkJneE5CQUJBVERBTUxJQUFvQWhBZ0EwSElBR3BCQWhBVklBTW9Ba2hCa1A4RFJnMEFJQUpCQVVIRUgwRUFFQk1NQWdzZ0FDZ0NDRUdBQWtjTkFDQUFRUWcyQWdnTEFrQWdBQ2dDaEFFZ0FDZ0NnQUZzSWdkRkRRQWdBQ2dDdEFFaEJVRUFJUVFnQjBFSVR3UkFJQWRCZUhFaENBTkFJQVVnQkVHTUxHeHFRWDgyQXRRcklBVWdCRUVCY2tHTUxHeHFRWDgyQXRRcklBVWdCRUVDY2tHTUxHeHFRWDgyQXRRcklBVWdCRUVEY2tHTUxHeHFRWDgyQXRRcklBVWdCRUVFY2tHTUxHeHFRWDgyQXRRcklBVWdCRUVGY2tHTUxHeHFRWDgyQXRRcklBVWdCRUVHY2tHTUxHeHFRWDgyQXRRcklBVWdCRUVIY2tHTUxHeHFRWDgyQXRRcklBUkJDR29oQkNBS1FRaHFJZ29nQ0VjTkFBc0xJQWRCQjNFaUIwVU5BQU5BSUFVZ0JFR01MR3hxUVg4MkF0UXJJQVJCQVdvaEJDQUdRUUZxSWdZZ0IwY05BQXNMUVFBaEJpQUFJQU5CeUFCcVFRQWdBMEhFQUdvZ0EwRkFheUFEUVR4cUlBTkJPR29nQTBFMGFpQURRY3dBYWlBQklBSVFMRVVOQUNBSlFRRnFJUWNEUUFKQUlBTW9Ba3hGRFFBZ0FDQURLQUpJSWdSQkFFRUFJQUVnQWhBeFJRMENJQUFvQW9BQklRZ2dBQ2dDaEFFaENpQURJQVJCQVdvaUJUWUNJQ0FESUFnZ0NtdzJBaVFnQWtFRVFlN2JBQ0FEUVNCcUVCTWdBQ2dDNkFFZ0FDZ0NaQ2dDR0JDQUFVVU5BaUFBS0FLMEFTQUVRWXdzYkdvaUJpZ0MzQ3NpQ0FSQUlBZ1FGQ0FHUWdBM0F0d3JDeUFESUFVMkFoQWdBa0VFUWJTQkFTQURRUkJxRUJNZ0JDQUpSZ1JBSUFFZ0FDZ0M0QUVwQXdoQ0Fud2dBaEF3RFFGQkFDRUdJQUpCQVVHYktrRUFFQk1NQXdzZ0F5QUhOZ0lFSUFNZ0JUWUNBQ0FDUVFKQnErb0FJQU1RRTBFQUlRWWdBQ0FEUWNnQWFrRUFJQU5CeEFCcUlBTkJRR3NnQTBFOGFpQURRVGhxSUFOQk5Hb2dBMEhNQUdvZ0FTQUNFQ3dOQVF3Q0N3c2dBQ0FDRUg4aEJnc2dBMEhRQUdva0FDQUdDNFlVQXc1L0FuNEJleU1BUWRBQWF5SUpKQUFnQ1VFQk5nSk1Ba0FDUUNBQUtBS0FBVUVCUncwQUlBQW9Bb1FCUVFGSERRQWdBQ2dDYkEwQUlBQW9BbkFOQUNBQUtBSmtJZ01vQWdBTkFDQURLQUlFRFFBZ0F5Z0NDQ0FBS0FKMFJ3MEFJQU1vQWd3Z0FDZ0NlRWNOQUVFQUlRTWdBQ0FKUWNnQWFrRUFJQWxCeEFCcUlBbEJRR3NnQ1VFOGFpQUpRVGhxSUFsQk5Hb2dDVUhNQUdvZ0FTQUNFQ3hGRFFFQ1FBSkFJQWtvQWt4RkRRQWdBQ0FKS0FKSVFRQkJBQ0FCSUFJUU1VVU5BQ0FBS0FKa0lnRW9BaEFOQVVFQklRTU1Bd3NnQWtFQlFhUEVBRUVBRUJNTUFnc2dBU2dDR0NFRkEwQWdCU0FFUVRSc0lnRnFLQUlzRUJRZ0FDZ0NaQ0lDS0FJWUlnVWdBV29pQXlBQUtBTG9BU0lIS0FJVUtBSUFLQUlVSUFSQnpBQnNhaUlHS0FJa05nSXNJQU1nQnlnQ0dDZ0NHQ0FCYWlnQ0pEWUNKQ0FHUVFBMkFpUkJBU0VESUFSQkFXb2lCQ0FDS0FJUVNRMEFDd3dCQ3lBQVFnQTNBMUFnQUNnQ1dCQVVJQUJCQURZQ1dBSkFBa0FnQUNnQ0hBMEFJQUFvQWlBTkFDQUFLQUlrSUFBb0FvQUJSdzBBUWdJaEVTQUFLQUlvSUFBb0FvUUJSZzBCQzBJQ0lSRWdBQ2dDVEEwQUlBRW9BaHhCQWtZTkFDQUFLQUtBQVNJTklBQW9Bb1FCYkNJREJINGdBMEVCY1NFRUlBQW9BdUFCS0FJb0lRY0NRQ0FEUVFGR0JFQkJBQ0VEUWdBaEVRd0JDeUFEUVg1eElRWkJBQ0VEUWdBaEVRTkFJQWNnQTBFb2JHb2lDQ2dDQkNJS0JFQWdDQ2dDRUNBS1FSaHNha0VJYXlrREFDSVNJQkVnRVNBU1V4c2hFUXNnQnlBRFFRRnlRU2hzYWlJSUtBSUVJZ29FUUNBSUtBSVFJQXBCR0d4cVFRaHJLUU1BSWhJZ0VTQVJJQkpUR3lFUkN5QURRUUpxSVFNZ0JVRUNhaUlGSUFaSERRQUxDd0pBSUFSRkRRQWdCeUFEUVNoc2FpSURLQUlFSWdWRkRRQWdBeWdDRUNBRlFSaHNha0VJYXlrREFDSVNJQkVnRVNBU1V4c2hFUXNnRVVJQ2ZBVkNBZ3NoRVVFQUlRUUNRQ0FBS0FJZ0lnWWdBQ2dDS0NJT1R3MEFJQUFvQWlRaUNDQUFLQUljSWdWTkRRQWdCU0FJSUFWcklncEJmSEVpQzJvaEJ5QUFLQUxnQVNnQ0tDRVBJQXBCQkVraEVBTkFJQThnQmlBTmJFRW9iR29oREFKQUFrQWdFQVJBSUFVaEF3d0JDLzBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0FFL1J3QUlSTkJBQ0VFQTBBZ0RDQUVJQVZxUVNoc2FpSURRZndBYWlBRFFkUUFhaUFEUVN4cUlBTkJCR3I5WEFJQS9WWUNBQUg5VmdJQUF2MVdBZ0FESUJQOXJnRWhFeUFFUVFScUlnUWdDMGNOQUFzZ0V5QVRJQlA5RFFnSkNnc01EUTRQQUFFQ0F3QUJBZ1A5cmdFaUV5QVRJQlA5RFFRRkJnY0FBUUlEQUFFQ0F3QUJBZ1A5cmdIOUd3QWhCQ0FISVFNZ0NpQUxSZzBCQ3dOQUlBd2dBMEVvYkdvb0FnUWdCR29oQkNBRFFRRnFJZ01nQ0VjTkFBc0xJQVpCQVdvaUJpQU9SdzBBQ3dzZ0FDQUVRUU4wRUJnaUJ6WUNXQ0FFUlEwQUlBZEZEUUJCQUNFRUFrQWdBQ2dDSUNJR0lBQW9BaWdpQTA4TkFDQUFLQUlrSWdVZ0FDZ0NIRTBOQUFOQUlBVWdBQ2dDSENJSFN3UkFJQUFvQXVBQktBSW9JQUFvQW9BQklBWnNRU2hzYWlFTkEwQWdEU0FIUVNoc2FpSUlLQUlFSWdNRVFDQURRUU54SVFvZ0NDZ0NFQ0VGUVFBaEN3SkFJQU5CQkVrRVFFRUFJUU1NQVFzZ0EwRjhjU0VPUVFBaEEwRUFJUXdEUUNBRVFRTjBJZ2dnQUNnQ1dHb2dCU0FEUVJoc2Fpa0RBRGNEQUNBQUtBSllJQWhxSUFVZ0EwRUJja0VZYkdvcEF3QTNBd2dnQUNnQ1dDQUlhaUFGSUFOQkFuSkJHR3hxS1FNQU53TVFJQUFvQWxnZ0NHb2dCU0FEUVFOeVFSaHNhaWtEQURjREdDQURRUVJxSVFNZ0JFRUVhaUVFSUF4QkJHb2lEQ0FPUncwQUN3c2dDZ1JBQTBBZ0FDZ0NXQ0FFUVFOMGFpQUZJQU5CR0d4cUtRTUFOd01BSUFOQkFXb2hBeUFFUVFGcUlRUWdDMEVCYWlJTElBcEhEUUFMQ3lBQUtBSWtJUVVMSUFkQkFXb2lCeUFGU1EwQUN5QUFLQUlvSVFNTElBWkJBV29pQmlBRFNRMEFDeUFBS0FKWUlRY0xJQUFnQkRZQ1ZDTUFRZEFCYXlJR0pBQWdCa0lCTndNSUFrQWdCRUVEZENJS1JRMEFJQVpCQ0RZQ0VDQUdRUWcyQWhSQkNDSUZJUVJCQWlFSUEwQWdCa0VRYWlBSVFRSjBhaUFGSWdNZ0JFRUlhbW9pQlRZQ0FDQUlRUUZxSVFnZ0F5RUVJQVVnQ2trTkFBc0NmeUFISUFwcVFRaHJJZ01nQjAwRVFFRUJJUWhCQVNFRlFRQU1BUXRCQVNFSVFRRWhCUU5BQW44Z0NFRURjVUVEUmdSQUlBY2dCU0FHUVJCcUVFUWdCa0VJYWtFQ0VEd2dCVUVDYWd3QkN3SkFJQVpCRUdvaUJDQUZRUUZySWdwQkFuUnFLQUlBSUFNZ0IydFBCRUFnQnlBSUlBWW9BZ3dnQlVFQUlBUVFPd3dCQ3lBSElBVWdCa0VRYWhCRUN5QUZRUUZHQkVBZ0JrRUlha0VCRURwQkFBd0JDeUFHUVFocUlBb1FPa0VCQ3lFRklBWWdCaWdDQ0VFQmNpSUlOZ0lJSUFkQkNHb2lCeUFEU1EwQUN5QUdLQUlNQ3lFRElBY2dDQ0FESUFWQkFDQUdRUkJxRURzZ0JpZ0NEQ0VFSUFZb0FnZ2hDQUpBSUFWQkFVY05BQ0FJUVFGSERRQWdCRVVOQVFzRFFBSi9JQVZCQVV3RVFDQUdRUWhxSUFnZ0JCQjNJZ01RUENBRElBVnFEQUVMSUFaQkNHb2lBMEVDRURvZ0JpQUdLQUlJUVFkek5nSUlJQU5CQVJBOElBZEJDR3NpQ2lBR1FSQnFJZ1FnQlVFQ2F5SUlRUUowYWlnQ0FHc2dCaWdDQ0NBR0tBSU1JQVZCQVd0QkFTQUVFRHNnQTBFQkVEb2dCaUFHS0FJSVFRRnlJZ00yQWdnZ0NpQURJQVlvQWd3Z0NFRUJJQVFRT3lBSUN5RUZJQWRCQ0dzaEJ5QUdLQUlNSVFRZ0JpZ0NDQ0VJSUFWQkFVY05BQ0FJUVFGSERRQWdCQTBBQ3dzZ0JrSFFBV29rQUFzZ0FDZ0NnQUVoQTBFQUlRVUNRQU5BQW44Q1FDQURRUUZIRFFBZ0FDZ0NoQUZCQVVjTkFDQUFLQUswQVNnQzNDdEZEUUFnQ1VFQU5nSklJQUJCQURZQzVBRWdBQ0FBS0FJSVFZQUJjallDQ0VFQURBRUxRUUFoQXlBQUlBbEJ5QUJxUVFBZ0NVSEVBR29nQ1VGQWF5QUpRVHhxSUFsQk9Hb2dDVUUwYWlBSlFjd0FhaUFCSUFJUUxFVU5BeUFKS0FKTVJRMENJQWtvQWtnTElnWkJBV29oQXlBQUlBWkJBRUVBSUFFZ0FoQXhJQUFvQW9BQklBQW9Bb1FCYkNFSFJRUkFJQWtnQnpZQ0JDQUpJQU0yQWdBZ0FrRUJRY3c2SUFrUUUwRUFJUU1NQXdzZ0NTQUhOZ0lrSUFrZ0F6WUNJQ0FDUVFSQjd0c0FJQWxCSUdvUUV5QUFLQUxvQVNBQUtBSmtLQUlZRUlBQlJRUkFRUUFoQXd3REN3SkFBa0FnQUNnQ2dBRkJBVWNOQUNBQUtBS0VBVUVCUncwQUlBQW9BbVFpQnlnQ0FDQUFLQUpnSWdRb0FnQkhEUUVnQnlnQ0JDQUVLQUlFUncwQklBY29BZ2dnQkNnQ0NFY05BU0FIS0FJTUlBUW9BZ3hIRFFFTElBQW9BclFCSUFaQmpDeHNhaUlIS0FMY0t5SUVSUTBBSUFRUUZDQUhRZ0EzQXR3ckN5QUpJQU0yQWhBZ0FrRUVRYlNCQVNBSlFSQnFFQk1nQVNrRENDSVNVQVIrUWdBRklCSWdBU2tET0gwTFVBUkFJQUFvQWdoQndBQkdEUUlMSUFWQkFXb2lCU0FBS0FLQUFTSURJQUFvQW9RQmJFWU5BU0FBS0FKVUlnZEZEUUFnQUNnQ1VDQUhSdzBBQ3lBQklCRWdBaUFCS0FJc0VRd0FHZ3NnQUNBQ0VIOGhBd3NnQ1VIUUFHb2tBQ0FEQzdjR0FReC9JQUFvQW1BaENRSkFJQUFvQW9BQklBQW9Bb1FCYkNJTUJFQWdDU2dDRUNJQlFiZ0liQ0VOSUFFZ0FXeEJBblFoQ2lBQUtBSU1JUVFnQUNnQ3RBRWhBd05BSUFNb0F0QXJJUXNnQXlBRVFZd3NFQllpQVVFQU5nTG9LeUFCUVg4MkF0UXJJQUZCQURZQ3NDZ2dBVUVBTmdLRUxDQUJRUUEyQXZBcklBRkNBRGNDK0NzZ0FTQUxOZ0xRS3lBQklBRXRBSWdzUWZ3QmNUb0FpQ3dnQkNnQzZDc0VRQ0FCSUFvUUdDSUROZ0xvS3lBRFJRUkFRUUFQQ3lBRElBUW9BdWdySUFvUUZob0xJQUVnQkNnQytDdEJGR3dpQlJBWUlnTTJBdkFyUVFBaENDQURSUTBDSUFNZ0JDZ0M4Q3NnQlJBV0dpQUVLQUwwS3lJR0JFQWdCQ2dDOENzaEF5QUJLQUx3S3lFRlFRQWhCd05BSUFNb0Fnd0VRQ0FGSUFNb0FoQVFHQ0lHTmdJTUlBWkZCRUJCQUE4TElBWWdBeWdDRENBREtBSVFFQllhSUFRb0F2UXJJUVlMSUFFZ0FTZ0MrQ3RCQVdvMkF2Z3JJQVZCRkdvaEJTQURRUlJxSVFNZ0IwRUJhaUlISUFaSkRRQUxDeUFCSUFRb0FvUXNRUlJzSWdVUUdDSUROZ0w4S3lBRFJRMENJQU1nQkNnQy9Dc2dCUkFXR2lBQklBUW9Bb1FzSWdnMkFvUXNJQWdFUUNBRUtBTDhLeUVESUFFb0F2d3JJUVZCQUNFSEEwQWdBeWdDQ0NJR0JFQWdCU0FCS0FMd0t5QUdJQVFvQXZBcmEybzJBZ2dMSUFNb0Fnd2lCZ1JBSUFVZ0FTZ0M4Q3NnQmlBRUtBTHdLMnRxTmdJTUN5QUZRUlJxSVFVZ0EwRVVhaUVESUFkQkFXb2lCeUFJUncwQUN3c2dDeUFFS0FMUUt5QU5FQllhSUFGQmpDeHFJUU1nRGtFQmFpSU9JQXhIRFFBTEMwRUJJUWdnQUFKL1FRQkJBVUhJQUJBWElnRkZEUUFhSUFFZ0FTMEFLRUgrQVhGQkFYSTZBQ2dnQVVFQlFRUVFGeUlFTmdJVUlBRWdCQTBBR2lBQkVCUkJBQXNpQVRZQzZBRWdBVVVFUUVFQUR3c2dBQ2dDN0FFaEJVRUFJUVFnQVNBQVFlZ0FhallDSENBQklBazJBaGhCQVVIUUJoQVhJUU1nQVNnQ0ZDQUROZ0lBQWtBZ0EwVU5BQ0FKS0FJUVFjd0FFQmNoQXlBQktBSVVLQUlBSWdjZ0F6WUNGQ0FEUlEwQUlBY2dDU2dDRURZQ0VDQUFLQUs4QVNFRUlBRWdCVFlDTENBQklBUTJBZ0JCQVNFRUN5QUVEUUFnQUNnQzZBRVFYa0VBSVFnZ0FFRUFOZ0xvQVNBQ1FRRkJyeHhCQUJBVEN5QUlDNVFYQXd0L0FYNEJmU01BUVRCcklnb2tBQ0FBUVFFMkFnZ0Nmd0pBQWtBZ0FTQUtRU2hxSWdOQkFpQUNFQjFCQWtjTkFDQURJQXBCTEdwQkFoQVZJQW9vQWl4QnovNERSdzBBSUFCQkFqWUNDQ0FBS0FMZ0FTQUJLUU00UWdKOUlnNDNBd0FnQ2lBT053TVFJQUpCQkVHODR3QWdDa0VRYWhBVElBQW9BdUFCSWdjcEF3QWhEaUFIS0FJWUlnVkJBV29pQXlBSEtBSWdJZ1JOQkVBZ0J5Z0NIQ0VFREFJTElBY0NmeUFFczBNQUFNaENraUlQUXdBQWdFOWRJQTlEQUFBQUFHQnhCRUFnRDZrTUFRdEJBQXNpQXpZQ0lDQUhLQUljSUFOQkdHd1FHeUlFQkVBZ0J5QUVOZ0ljSUFjb0FoZ2lCVUVCYWlFRERBSUxJQWNvQWh3UUZDQUhRUUEyQWlBZ0IwSUFOd01ZSUFKQkFVR1dIa0VBRUJNTElBSkJBVUdEK2dCQkFCQVRRUUFNQVFzZ0JDQUZRUmhzYWlJRVFRSTJBaEFnQkNBT3hEY0RDQ0FFUWMvK0F6c0JBQ0FISUFNMkFoZ2dBU0FBS0FJUVFRSWdBaEFkUVFKSEJFQWdBa0VCUVlNVFFRQVFFMEVBREFFTElBQW9BaEFnQ2tFb2FrRUNFQlVDUUFKQUlBb29BaWdpQkVHUS93TkhCRUFEUUVHZ3dnRWhCU0FFUWYvOUEwMEVRQ0FLSUFRMkFnQWdBa0VCUWJjUklBb1FFMEVBREFVTEEwQWdCU0lES0FJQUlnY0VRQ0FEUVF4cUlRVWdCQ0FIUncwQkN3c0NRQUpBSUFjTkFFRUNJUVlnQWtFQ1FlSWRRUUFRRTBHREV5RUZBa0FDUUNBQklBQW9BaEJCQWlBQ0VCMUJBa2NOQUFOQUlBQW9BaEFnQ2tFc2FrRUNFQlZCb01JQklRY2dDaWdDTENJRVFZRCtBMDhFUUFOQUlBY2lBeWdDQUNJSUJFQWdBMEVNYWlFSElBUWdDRWNOQVFzTElBTW9BZ1FnQUNnQ0NIRkZCRUJCOENraEJRd0RDeUFJQkVBZ0NFR1Evd05HQkVBZ0NrR1Evd00yQWlnTUJ3c2dBU2tET0NFT0lBQW9BdUFCSWdjb0FoZ2lBMEVCYWlJRUlBY29BaUFpQlUwRVFDQUhLQUljSVFVTUJRc2dCd0ovSUFXelF3QUF5RUtTSWc5REFBQ0FUMTBnRDBNQUFBQUFZSEVFUUNBUHFRd0JDMEVBQ3lJRE5nSWdJQWNvQWh3Z0EwRVliQkFiSWdVRVFDQUhJQVUyQWh3Z0J5Z0NHQ0lEUVFGcUlRUU1CUXNnQnlnQ0hCQVVJQWRCQURZQ0lDQUhRZ0EzQXhoQmxoNGhCUXdEQ3lBR1FRSnFJUVlMSUFFZ0FDZ0NFRUVDSUFJUUhVRUNSZzBBQ3dzZ0FrRUJJQVZCQUJBVElBSkJBVUhTekFCQkFCQVRRUUFNQndzZ0JTQURRUmhzYWlJRElBWTJBaEFnQXlBT3B5QUdhNnczQXdnZ0EwRUFPd0VBSUFjZ0JEWUNHQ0FLSUFnMkFpaEJvTUlCSVFRRFFDQUVJZ01vQWdBaUIwVU5BU0FEUVF4cUlRUWdCeUFJUncwQUN3c2dBeWdDQkNBQUtBSUljVVVFUUNBQ1FRRkI4Q2xCQUJBVFFRQU1CZ3NnQVNBQUtBSVFRUUlnQWhBZFFRSkhCRUFnQWtFQlFZTVRRUUFRRTBFQURBWUxJQUFvQWhBZ0NrRWtha0VDRUJVZ0NpZ0NKQ0lFUVFGTkJFQWdBa0VCUVpVdlFRQVFFMEVBREFZTElBb2dCRUVDYXlJRk5nSWtJQUFvQWhBaEJDQUFLQUlVSUFWSkJFQWdCQ0FGRUJzaUJFVUVRQ0FBS0FJUUVCUWdBRUlBTndNUUlBSkJBVUhJSmtFQUVCTkJBQXdIQ3lBQUlBUTJBaEFnQUNBS0tBSWtJZ1UyQWhRTElBRWdCQ0FGSUFJUUhTSUVJQW9vQWlSSEJFQWdBa0VCUVlNVFFRQVFFMEVBREFZTElBQWdBQ2dDRUNBRUlBSWdBeWdDQ0JFQkFFVUVRQ0FDUVFGQmxSTkJBQkFUUVFBTUJnc2dBU2tET0NFT0lBb29BaVFoQ0FKQUlBQW9BdUFCSWdNb0FoZ2lCa0VCYWlJRklBTW9BaUFpQkUwRVFDQURLQUljSVFRTUFRc2dBd0ovSUFTelF3QUF5RUtTSWc5REFBQ0FUMTBnRDBNQUFBQUFZSEVFUUNBUHFRd0JDMEVBQ3lJRU5nSWdJQU1vQWh3Z0JFRVliQkFiSWdSRkRRVWdBeUFFTmdJY0lBTW9BaGdpQmtFQmFpRUZDeUFFSUFaQkdHeHFJZ1FnQ0VFRWFqWUNFQ0FFSUE2bklBaHJRUVJyckRjRENDQUVJQWM3QVFBZ0F5QUZOZ0lZSUFFZ0FDZ0NFRUVDSUFJUUhVRUNSd1JBSUFKQkFVR0RFMEVBRUJOQkFBd0dDMEVCSUF3Z0IwSGMvZ05HR3lFTVFRRWdDU0FIUWRMK0EwWWJJUWxCQVNBTElBZEIwZjREUmhzaEN5QUFLQUlRSUFwQktHcEJBaEFWSUFvb0FpZ2lCRUdRL3dOSERRRUxDeUFMRFFFTElBSkJBVUdNSlVFQUVCTkJBQXdDQ3lBSlJRUkFJQUpCQVVHNkpVRUFFQk5CQUF3Q0N5QU1SUVJBSUFKQkFVSG9KVUVBRUJOQkFBd0NDMEVBSVFOQkFDRUZRUUFoQ1NNQVFSQnJJZ2NrQUVFQklRd0NRQ0FBTFFEVUFVRUJjVVVOQUFKQUlBQW9Bb2dCSWdaRkRRQUNRQU5BSUFBb0Fvd0JJQWxCQTNScUlnUW9BZ0FpQ3dSQUlBTWdCQ2dDQkNJSWF5SUVRUUFnQXlBRVR4c2hCQ0FESUFoSkJFQWdDQ0FEYXlFR0lBTWdDMm9oQ0FOQUlBWkJCRWtFUUVHQ0xDRUREQVVMSUFnZ0IwRU1ha0VFRUJVZ0J5Z0NEQ0lEUVg5eklBVkpCRUJCNkNzaEF3d0ZDeUFESUFaQkJHc2lDMnNnQkNBRElBdExJZzBiSVFRZ0F5QUZhaUVGSUFzZ0Eyc2hCaUFJUVFBZ0F5QU5HMnBCQkdvaENDQURJQXRKRFFBTElBQW9Bb2dCSVFZTElBUWhBd3NnQ1VFQmFpSUpJQVpKRFFBTElBTkZEUUZCQUNFTUlBSkJBVUhXRjBFQUVCTU1BZ3RCQUNFTUlBSkJBU0FEUVFBUUV3d0JDeUFBSUFVUUdDSUROZ0tnQVNBRFJRUkFRUUFoRENBQ1FRRkJ6Q0ZCQUJBVERBRUxJQUFnQlRZQ2xBRWdBQ2dDakFFaEJnSkFJQUFvQW9nQklnZ0VRRUVBSVFWQkFDRURRUUFoQkFOQUlBWWdCRUVEZENJTGFpSU5LQUlBSWdrRVFDQUFLQUtnQVNBRGFpRUlBbjhnRFNnQ0JDSUdJQVZOQkVBZ0NDQUpJQVlRRmhvZ0F5QUdhaUVESUFVZ0Jtc01BUXNnQ0NBSklBVVFGaG9nQXlBRmFpRURJQVlnQldzaEJpQUZJQWxxSVFVRFFDQUdRUVJKRFFVZ0JTQUhRUWhxUVFRUUZTQUZRUVJxSVFVZ0FDZ0NvQUVnQTJvaENTQUdRUVJySWdZZ0J5Z0NDQ0lJU1FSQUlBa2dCU0FHRUJZYUlBTWdCbW9oQXlBSEtBSUlJQVpyREFJTElBa2dCU0FJRUJZYUlBY29BZ2dpQ1NBRGFpRURJQVVnQ1dvaEJTQUdJQWxySWdZTkFBdEJBQXNoQlNBQUtBS01BU0FMYWlnQ0FCQVVJQUFvQW93QklnWWdDMnBDQURjQ0FDQUFLQUtJQVNFSUN5QUVRUUZxSWdRZ0NFa05BQXNnQUNnQ2xBRWhCU0FBS0FLZ0FTRURDeUFBSUFVMkFxZ0JJQUFnQXpZQ2tBRWdBRUVBTmdLSUFTQUdFQlFnQUVFQU5nS01BUXdCQzBFQUlRd2dBa0VCUVlJc1FRQVFFd3NnQjBFUWFpUUFJQXhGQkVBZ0FrRUJRZkErUVFBUUUwRUFEQUlMSUFKQkJFSEYyd0JCQUJBVElBQW9BdUFCSUFFcEF6aEMvdi8vL3c5OFF2Ly8vLzhQZ3pjRENFRUFJUUZCQUNFR0l3QkJFR3NpQnlRQUFrQWdBQ2dDUkNJRVJRUkFJQUJCQVRZQ1RBd0JDeUFBS0FKTURRQWdBQ2dDU0NFRElBQW9BdUFCSWd3b0FpZ2hCU0FFUVFGSEJFQWdCRUYrY1NFSUEwQWdCU0FESUFGQkEzUnFJZ3N2QVFBaURVRW9iR29pQ1NBTk5nSUFJQWtnQ1NnQ0NFRUJhallDQ0NBRklBc3ZBUWdpQzBFb2JHb2lDU0FMTmdJQUlBa2dDU2dDQ0VFQmFqWUNDQ0FCUVFKcUlRRWdCa0VDYWlJR0lBaEhEUUFMQ3lBRVFRRnhCRUFnQlNBRElBRkJBM1JxTHdFQUlnWkJLR3hxSWdFZ0JqWUNBQ0FCSUFFb0FnaEJBV28yQWdnTEFrQWdEQ2dDSkNJR0JFQkJBQ0VCQTBBZ0JTQUJRU2hzYWlnQ0NFVUVRQ0FISUFFMkFnQWdBa0VCUWJQSUFDQUhFQk1NQXdzZ0FVRUJhaUlCSUFaSERRQUxDeUFNS1FNSUlRNUJBQ0VGQTBBQ1FDQUFLQUxnQVNnQ0tDQURJQVZCQTNRaURHb3ZBUUJCS0d4cUlnRW9BaEFpQmtVRVFDQUJJQUVvQWdoQkdCQVhJZ1kyQWhBZ0JrVU5BU0FBS0FKRUlRUWdBQ2dDU0NFREN5QUdJQUVvQWdRaUNVRVliR29pQmlBT053TUFJQVlnRGlBRElBeHFOUUlFZkNJT053TVFJQUVnQ1VFQmFqWUNCQ0FGUVFGcUlnVWdCRWtOQVF3REN3c2dBa0VCUWIwMVFRQVFFd3NnQUVFQk5nSk1JQUFvQWtSRkRRQWdBQ2dDNEFFb0FpZ2hBMEVBSVFFRFFDQURJQUFvQWtnZ0FVRURkR292QVFCQktHd2lBbW9pQTBFQU5nSUlJQU1vQWhBUUZDQUFLQUxnQVNnQ0tDSURJQUpxUVFBMkFoQWdBVUVCYWlJQklBQW9Ba1JKRFFBTEN5QUhRUkJxSkFBZ0FFRUlOZ0lJUVFFTUFRc2dBeWdDSEJBVUlBTkJBRFlDSUNBRFFnQTNBeGdnQWtFQlFaWWVRUUFRRTBFQUN5QUtRVEJxSkFBTEhBQWdBQ2dDQ0VVZ0FDZ0MyQUZCQUVjZ0FDZ0MzQUZCQUVkeGNRc0VBRUVBQ3lRQUFrQWdBRVVOQUNBQUlBRTJBdEFCSUFGRkRRQWdBQ0FBTFFCY1FRaHlPZ0JjQ3d1UEFRRUVmeUFBS0FJWUlnRUVRQ0FBS0FJY0lnTkJORzRoQkNBRFFUUlBCSDlCQUNFREEwQWdBU2dDQUNJQ0JFQWdBa0VCYXhBVUlBRkJBRFlDQUFzZ0FTZ0NCQ0lDQkVBZ0FoQVVJQUZCQURZQ0JBc2dBU2dDQ0NJQ0JFQWdBaEFVSUFGQkFEWUNDQXNnQVVFMGFpRUJJQU5CQVdvaUF5QUVSdzBBQ3lBQUtBSVlCU0FCQ3hBVUlBQkJBRFlDR0FzTGlBRUJCSDhnQUNnQ0dDSUJCRUFnQUNnQ0hDSUNRY1FBYmlFRUlBSkJ4QUJQQkg5QkFDRUNBMEFnQVNnQ0FDSURCRUFnQXhBVUlBRkJBRFlDQUFzZ0FTZ0NCQ0lEQkVBZ0F4QVVJQUZCQURZQ0JBc2dBU2dDUEJBVUlBRkJBRFlDUENBQlFjUUFhaUVCSUFKQkFXb2lBaUFFUncwQUN5QUFLQUlZQlNBQkN4QVVJQUJCQURZQ0dBc0xQd0VCZnlBQUJFQWdBQ2dDZENJQkJFQWdBUkFVSUFCQkFEWUNkQXNnQUNnQ2VDSUJCRUFnQVJBVUlBQkJBRFlDZUFzZ0FDZ0NsQUVRRkNBQUVCUUxDOFNaQlFSRmZ3SjdCSDRCZlNNQVFlQUFheUltSkFBZ0FDZ0NDQ0VhQWtBQ1FBSkFBa0FnQUNnQ0FFVUVRQ0FhSUJvb0FoQWdHaWdDQ0dzZ0dpZ0NGQ0FhS0FJTWEyeEJBblFpQmhBY0lnVTJBandnQlVVRVFDQUFLQUlrR2lBQUtBSWdRUUZCc2o1QkFCQVRJQUFvQWlRYUlBQkJIR29oQlF3REN5QUZRUUFnQmhBWkdnd0JDeUFhS0FJOElnVkZEUUFnQlJBVUlCcEJBRFlDUEFzZ0FDZ0NFQ0l5S0FJY0lESW9BaGhCbUFGc2FpSUZRWmdCYXlnQ0FDRTJJQVZCa0FGcktBSUFJVGNnQUNnQ0ZDRXZJQUFvQWd3aE1DQUFLQUlFSVRnZ0FDZ0NIQ2dDQUVVTkFpQUFRUnhxSVFVQ1FBSi9RUUFnQVNnQ0JDSUhRUUJNRFFBYUlBRW9BZ0FoQ0VFQUlRWUNRQU5BSUFnZ0JrRU1iR29pQkNnQ0FFVU5BU0FHUVFGcUlnWWdCMGNOQUF0QkFBd0JDeUFFS0FJRUN5SUREUUJCQVVHY0FSQVhJZ05GQkVBZ0FDZ0NJRUVCUVlReFFRQVFFd3dDQ3lBRFFRQTJBb3dCQW45QkFDRUdRUUFnQVNnQ0JDSUhRZi8vLy84SFJnMEFHaUFCS0FJQUlRZ2dCMEVBU2dSQUEwQWdDQ0FHUVF4c2FpSUVLQUlBUlFSQUlBUW9BZ2dpQndSL0lBUW9BZ1FnQnhFQ0FDQUJLQUlBQlNBSUN5QUdRUXhzYWlJQlFRODJBZ2dnQVNBRE5nSUVRUUVNQXdzZ0JrRUJhaUlHSUFkSERRQUxDMEVBSUFnZ0IwRU1iRUVNYWhBYklnWkZEUUFhSUFFZ0JqWUNBQ0FHSUFFb0FnUWlCMEVNYkdvaUJrRVBOZ0lJSUFZZ0F6WUNCQ0FHUVFBMkFnQWdBU0FIUVFGcU5nSUVRUUVMRFFBZ0FDZ0NJRUVCUWUzQUFFRUFFQk1nQXlnQ2RDSUJCRUFnQVJBVUlBTkJBRFlDZEFzZ0F5Z0NlQ0lCQkVBZ0FSQVVJQU5CQURZQ2VBc2dBeWdDbEFFUUZDQURFQlFNQVFzZ0F5QUFLQUlZTmdLUUFTQUFLQUlvSVNzZ0FDZ0NKQ0VpSUFBb0FpQWhIU0F2S0FLb0JpRVRJREFvQWhBaEFRSkFBa0FnTHlnQ0VDSVhRY0FBY1FSQUlCY2hDaU1BUWJBQ2F5SVFKQUFDUUNBVEJFQWdJZ1JBSUIxQkFVSHVHRUVBRUJNTUFnc2dIVUVCUWU0WVFRQVFFd3dCQ3lBREtBSjBJUUlDUUFKQUlCb29BaFFnR2lnQ0RHc2lCaUFhS0FJUUlCb29BZ2hySWdsc0lnRWdBeWdDaEFGTEJFQWdBaEFVSUFNZ0FVRUNkQ0lURUJ3aUFqWUNkQ0FDUlFSQVFRQWhBZ3dFQ3lBRElBRTJBb1FCREFFTElBSkZEUUVnQVVFQ2RDRVRDeUFDUVFBZ0V4QVpHZ3NnQXlnQ2VDRUNBa0FnQXlnQ2lBRkJ6eFJMRFFBZ0FoQVVJQU5Cd05JQUVCd2lBallDZUNBQ0RRQkJBQ0VDREFFTElBTkIwQlEyQW9nQklBSkJBRUhBMGdBUUdSb2dBeUFHTmdLQUFTQURJQWsyQW53Z0dpZ0NHQ0lFUlFSQVFRRWhBZ3dCQ3lBYUtBSWNJUTFCQVNFQ0FrQUNRQUpBQWtBQ1FDQWFLQUkwSWdFRVFDQWFLQUlFSVFoQkFDRUNRUUFoQ1FKQUlBRkJCRThFUUNBQlFYeHhJUWxCQUNFSEEwQWdDQ0FIUVFOMGFpSUdRUnhxSUFaQkZHb2dCa0VNYWlBRy9Wd0NCUDFXQWdBQi9WWUNBQUw5VmdJQUF5QkgvYTRCSVVjZ0IwRUVhaUlISUFsSERRQUxJRWNnUnlCSC9RMElDUW9MREEwT0R3QUJBZ01BQVFJRC9hNEJJa2NnUnlCSC9RMEVCUVlIQUFFQ0F3QUJBZ01BQVFJRC9hNEIvUnNBSVFJZ0FTQUpSZzBCQ3dOQUlBZ2dDVUVEZEdvb0FnUWdBbW9oQWlBSlFRRnFJZ2tnQVVjTkFBc0xJQUZCQVVZRVFDQURLQUtRQVVVTkJRc2dBaUFES0FLWUFVME5BU0FES0FLVUFTQUNFQnNpRXcwQ1FRQWhBZ3dHQ3lBREtBS1FBVVVOQlFzZ0F5Z0NsQUVpRXcwQlFRQWhBZ3dFQ3lBRElBSTJBcGdCSUFNZ0V6WUNsQUVMSUJvb0FqUkZCRUJCQUNFQ0RBSUxJQm9vQWdRaEIwRUFJUUpCQUNFSkEwQWdBaUFUYWlBSElBbEJBM1FpQVdvaUJpZ0NBQ0FHS0FJRUVCWWFJQm9vQWdRaUJ5QUJhaWdDQkNBQ2FpRUNJQWxCQVdvaUNTQWFLQUkwU1EwQUN3d0JDeUFhS0FJRUtBSUFJUk1MUVFBaENVRUFJUWNDZjBFQUlCb29BaWdpQVVVTkFCb2dHaWdDQUNJR0tBSUlJUWRCQUNBQlFRRkdEUUFhSUFZb0FpQUxJUUVnQkNBTmF3SkFJQUVnQjJvaUIwVUVRRUVBSVFSQkFDRUlEQUVMUVFFaENTQWFLQUlBSWdFb0FnQWhCRUVBSVFnZ0IwRUJSZ1JBUVFBaENRd0JDeUFCS0FJWUlRZ0xRUUZxSVJZZ0F5Z0NkQ0VMSUFNb0FuZ2hEaUFhS0FJTUlSVWdHaWdDRkNFUElCb29BZ2doR1NBYUtBSVFJU3NDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FnQ1VVTkFDQUlEUUFnSWtVTkFTQWRRUUpCa2RRQVFRQVFFMEVCSVFjTUFnc2dCMEVFU1EwQklDSUVRQ0FRSUFjMkFuQWdIVUVCUWRIS0FDQVFRZkFBYWhBVERBZ0xJQkFnQnpZQ1lDQWRRUUZCMGNvQUlCQkI0QUJxRUJOQkFDRUNEQWdMSUIxQkFrR1IxQUJCQUJBVElCb29BaGdpQ1VFZVN3MEJRUUVoR3lBSklCWlBEUU1NQlFzZ0dpZ0NHQ0lCSWdsQkhrME5BU0FpUlEwQUlCQWdBVFlDSUNBZFFRRkI2ZDhBSUJCQklHb1FFd3dGQ3lBUUlBazJBZ0FnSFVFQlFlbmZBQ0FRRUJOQkFDRUNEQVVMSUFrZ0Zra05BU0FIUVFKSkJFQWdCeUViREFFTElBa2dGa2NFUUNBSElSc01BUXRCQVNFYlFkRE5BUzBBQUEwQUlDSkZCRUJCME0wQlFRRTZBQUFnRUNBSE5nSkFJQjFCQWtHVzBBQWdFRUZBYXhBVERBRUxRZEROQVMwQUFFVUVRRUhRelFGQkFUb0FBQ0FRSUFjMkFsQWdIVUVDUVpiUUFDQVFRZEFBYWhBVEN3c0NRQUpBSUFSQkFra05BQ0FDSUFSSkRRQWdCQ0FJYWlBQ1RRMEJDeUFpQkVCQkFDRUNJQjFCQVVHWHlnQkJBQkFUREFVTFFRQWhBaUFkUVFGQmw4b0FRUUFRRXd3RUN3SkFBa0FnQkNBVGFpSVlRUUZyTFFBQUlnRkJCSFFnR0VFQ2F5MEFBRUVQY1hJaUJrRUNTUTBBSUFGQi93RkdEUUFnQkNBR1RnMEJDeUFpQkVCQkFDRUNJQjFCQVVHazl3QkJBQkFUREFVTFFRQWhBaUFkUVFGQnBQY0FRUUFRRXd3RUN5QWFLQUljSVNRQ2Z5QVFRUUEyQXBBQ0lCQkJBRFlDbUFJZ0VFSUFOd09JQWlBUVFnQTNBNmdDSUJCQ0FEY0NuQUlnRUNBR1FRRnJJZ2MyQXBRQ0lCQWdCQ0FUYWlBR2F5SUpOZ0tBQWlBSk1RQUFJVWxCQ0NFQklCQkJDRFlDa0FJZ0VDQUpRUUZxSWdJMkFvQUNJQkFnQmtFQ2F5SU5OZ0tVQWlBUUlFbENENFFnU1NBSFFRRkdHeUpKTndPSUFpQVFJRWxDL3dGUk5nS1lBZ0pBSUFsQkEzRWlCMEVEUmcwQUFrQWdTVUwvQVZJTkFDQUNMUUFBUVk4QlRRMEFRUUFNQWd0Qy93RWhTaUFHUVFOUEJFQWdBakVBQUNGS0N5QVFJQVpCQTJzaUZ6WUNsQUlnRUVFUFFSQWdTVUwvQVZFaUZCc2lBVFlDa0FJZ0VDQUNJQVpCQWt0cUlnazJBb0FDSUJBZ1NrSVBoQ0JLSUExQkFVWWJJa3BDL3dGUk5nS1lBaUFRSUVsQ0IwSUlJQlFiaGlCS2hDSkpOd09JQWlBSFFRSkdEUUJDL3dFaFN3SkFJRXBDL3dGU0RRQWdDUzBBQUVHUEFVME5BRUVBREFJTElBWkJCRThFUUNBSk1RQUFJVXNMSUJBZ0JrRUVheUlDTmdLVUFpQVFJQWtnQmtFRFMyb2lDVFlDZ0FJZ0VDQkxRZytFSUVzZ0YwRUJSaHNpUzBML0FWRTJBcGdDSUJBZ0FVRUhRUWdnU2tML0FWRWlEUnRxSWdFMkFwQUNJQkFnU1VJSFFnZ2dEUnVHSUV1RUlrazNBNGdDSUFkQkFVWU5BQUpBSUV0Qy93RlNEUUFnQ1MwQUFFR1BBVTBOQUVFQURBSUxRdjhCSVVvZ0JrRUZUd1JBSUFreEFBQWhTZ3NnRUNBR1FRVnJOZ0tVQWlBUUlBa2dCa0VFUzJvMkFvQUNJQkFnU2tJUGhDQktJQUpCQVVZYklrcEMvd0ZSTmdLWUFpQVFJQUZCQjBFSUlFdEMvd0ZSSWdrYmFpSUJOZ0tRQWlBUUlFbENCMElJSUFrYmhpQktoQ0pKTndPSUFnc2dFQ0JKUWNBQUlBRnJyWVkzQTRnQ1FRRUxSUVJBSUNJRVFFRUFJUUlnSFVFQlFhblpBRUVBRUJNTUJRdEJBQ0VDSUIxQkFVR3AyUUJCQUJBVERBUUxJQ3NnR1dzaEVpQVFJQVlpRFVFQ2F5SU1OZ0wwQVNBUUlBUWdFMm9pRVVFRGF5SUdOZ0xnQVNBUUlCRkJBbXN0QUFBaUFVR1BBVXNpQnpZQytBRWdFQ0FCUVFSMnJTSkpOd1BvQVNBUVFRTkJCQ0JKUWdlRFFnZFJHeUlVTmdMd0FTQUdRUU54UVFGcUlnRWdEQ0FCSUF4Skd5RVhBa0FDUUNBTVJRUkFRUUFoQWlBUUlBd2dGMnMyQXZRQkRBRUxJQkFnRVVFRWF5SUJOZ0xnQVNBUUlBWXRBQUFpQWtHUEFVc2lDVFlDK0FFZ0VDQUNyU0pLUXY4Qmd5QVVyWVlnU1lRaVNUY0Q2QUVnRUVFSFFRZ2dTa0wvQUlOQy93QlJHMEVJSUFjYklCUnFJaFEyQXZBQkFrQWdGMEVDU1FSQUlBa2hCd3dCQ3lBUUlCRkJCV3NpQ1RZQzRBRWdFQ0FCTFFBQUlnWkJqd0ZMSWdjMkF2Z0JJQkFnQnEwaVNrTC9BWU1nRksyR0lFbUVJa2szQStnQklCQkJDRUVIUVFnZ1NrTC9BSU5DL3dCUkd5QUNRWThCVFJzZ0ZHb2lGRFlDOEFFZ0YwRUNSZ1JBSUFFaEJpQUpJUUVNQVFzZ0VDQVJRUVpySWdJMkF1QUJJQkFnQ1MwQUFDSUJJaUZCandGTElnYzJBdmdCSUJBZ0FhMGlTa0wvQVlNZ0ZLMkdJRW1FSWtrM0ErZ0JJQkJCQ0VFSFFRZ2dTa0wvQUlOQy93QlJHeUFHUVk4QlRSc2dGR29pRkRZQzhBRWdGMEVEUmdSQUlBa2hCaUFDSVFFTUFRc2dFQ0FSUVFkcklnRTJBdUFCSUJBZ0FpMEFBQ0lHUVk4QlN5SUhOZ0w0QVNBUUlBYXRJa3BDL3dHRElCU3RoaUJKaENKSk53UG9BU0FRUVFoQkIwRUlJRXBDL3dDRFF2OEFVUnNnSVVHUEFVMGJJQlJxSWhRMkF2QUJJQUloQmdzZ0VDQU1JQmRySWdrMkF2UUJJQlJCSUVzTkFTQUpRUVJPQkVBZ0JrRUVheWdDQUNFQ0lCQWdCa0VGYXpZQzRBRWdFQ0FKUVFSck5nTDBBUXdCQ3lBSlFRQk1CRUJCQUNFQ0RBRUxJQWxCQVhFQ1FDQVhJQTFCQTJ0R0JFQkJHQ0VYUVFBaEFnd0JDeUFKUWY3Ly8vOEhjU0VoUVJnaEYwRUFJUUlnQVNFR1FRQWhEQU5BSUJBZ0JrRUJheUlnTmdMZ0FTQUdMUUFBSUJBZ0JrRUNheUlCTmdMZ0FTQVFJQWxCQVdzMkF2UUJJQ0F0QUFBaEJpQVFJQWxCQW1zaUNUWUM5QUVnRjNRZ0FuSWdCaUFYUVFocmRISWhBaUFYUVJCcklSY2dBU0VHSUF4QkFtb2lEQ0FoUncwQUN3dEZEUUFnRUNBQlFRRnJOZ0xnQVNBQkxRQUFJQkFnQ1VFQmF6WUM5QUVnRjNRZ0FuSWhBZ3NnRUNBQ1FmOEJjU0lCUVk4QlN6WUMrQUVnRUVFSFFRZ2dBa0dBZ0lENEIzRkJnSUNBK0FkR0cwRUlJQWNiSWdaQkNFRUhRUWdnQWtHQWdQd0RjVUdBZ1B3RFJoc2dBa0gvLy8vL2VFMGJhaUlKUVFoQkIwRUlJQUpCZ1A0QmNVR0EvZ0ZHR3lBQ1FSQjJRZjhCY1NJSFFZOEJUUnRxSWhkQkNFRUhRUWdnQWtIL0FIRkIvd0JHR3lBQ1FRaDJRZjhCY1NJTVFZOEJUUnNnRkdwcU5nTHdBU0FRSUFjZ0JuUWdBa0VZZG5JZ0RDQUpkSElnQVNBWGRIS3RJQlN0aGlCSmhEY0Q2QUVMSUJCQndBRnFJQk1nQkNBTmEwSC9BUkJrQW45QkFDQWJRUUpKRFFBYUlCQkJvQUZxSUJnZ0NFRUFFR1JCQUNBYlFRSkdEUUFhUWdBaFNVSUFJVXNnRUVFQk5nS1lBU0FRUVFBMkFwQUJJQkJDQURjRGlBRWdFQ0FJUVFGcklnRTJBcFFCSUJBZ0JDQVRhaUFJYWlJR1FRRnJJZ2syQW9BQklBbEJBM0VoRndKQUlBaEJBRXdFUUNBSklRWU1BUXNnRUNBR1FRSnJJZ1kyQW9BQklBa3hBQUFoU1FzZ0VDQkpOd09JQVNBUUlFbENqd0ZXSWhNMkFwZ0JJQkJCQjBFSUlFbEMvd0NEUXY4QVVSc2lEVFlDa0FFQ1FDQVhSUTBBSUJBZ0NFRUNheUlITmdLVUFRSkFJQWhCQWtnRVFDQUdJUUlNQVFzZ0VDQUdRUUZySWdJMkFvQUJJQVl4QUFBaFN3c2dFQ0JMUW84QlZpSVROZ0tZQVNBUUlFc2dEYTJHSUVtRUlrbzNBNGdCSUJCQkNFRUhRUWdnUzBML0FJTkMvd0JSR3lCSlFvOEJXQnNnRFdvaURUWUNrQUVnRjBFQlJnUkFJQUloQmlCS0lVa2dBU0VJSUFjaEFRd0JDeUFRSUFoQkEyc2lCRFlDbEFFQ1FDQUlRUU5JQkVBZ0FpRUpEQUVMSUJBZ0FrRUJheUlKTmdLQUFTQUNNUUFBSVV3TElCQWdURUtQQVZZaUV6WUNtQUVnRUNCTUlBMnRoaUJLaENKSk53T0lBU0FRUVFoQkIwRUlJRXhDL3dDRFF2OEFVUnNnUzBLUEFWZ2JJQTFxSWcwMkFwQUJJQmRCQWtZRVFDQUpJUVlnQnlFSUlBUWhBUXdCQ3lBUUlBaEJCR3NpQVRZQ2xBRkNBQ0ZMQWtBZ0NFRUVTQVJBSUFraEJnd0JDeUFRSUFsQkFXc2lCallDZ0FFZ0NURUFBQ0ZMQ3lBUUlFdENqd0ZXSWhNMkFwZ0JJQkFnU3lBTnJZWWdTWVFpU1RjRGlBRWdFRUVJUVFkQkNDQkxRdjhBZzBML0FGRWJJRXhDandGWUd5QU5haUlOTmdLUUFTQUVJUWdMSUExQklFMEVRQUpBSUFoQkJVNEVRQ0FHUVFOcktBSUFJUUlnRUNBSVFRVnJOZ0tVQVNBUUlBWkJCR3MyQW9BQkRBRUxRUUFoQWlBSVFRSklEUUJCR0NFSUEwQWdFQ0FHUVFGcklnazJBb0FCSUFZdEFBQWdFQ0FCUVFGcklnYzJBcFFCSUFoMElBSnlJUUlnQVVFQlN5QUpJUVlnQ0VFSWF5RUlJQWNoQVEwQUN3c2dFQ0FDUWY4QmNTSUJRWThCU3pZQ21BRWdFRUVIUVFnZ0FrR0FnSUQ0QjNGQmdJQ0ErQWRHRzBFSUlCTWJJZ1pCQ0VFSFFRZ2dBa0dBZ1B3RGNVR0FnUHdEUmhzZ0FrSC8vLy8vZUUwYmFpSUpRUWhCQjBFSUlBSkJnUDRCY1VHQS9nRkdHeUFDUVJCMlFmOEJjU0lIUVk4QlRSdHFJZ2hCQ0VFSFFRZ2dBa0gvQUhGQi93QkdHeUFDUVFoMlFmOEJjU0lFUVk4QlRSc2dEV3BxTmdLUUFTQVFJQWNnQm5RZ0FrRVlkbklnQkNBSmRISWdBU0FJZEhLdElBMnRoaUJKaERjRGlBRUxRUUVMSVRNZ0R5QVZheUVoSUJaQkFXb2hMQ0FPUVFBNkFNQVFJQTVCd0JCcUlSWWdFRUdBQW1vUUxTRUVJQkpCQUVvRVFDQWtRUUZySVJFZ0RpRUdJQlloQjBFQUlSTWdDeUVCUVFBaEZ3TkFJQmNoRFNBVFFRaDBJQkJCNEFGcUVEVkIvd0J4UVFGMGNrSGdnUUZxTHdFQUlRa0NRQ0FURFFBZ0NVRUFJQVJCQW1zaUFrRi9SaHNoQ1NBRVFRRktCRUFnQWlFRURBRUxJQkJCZ0FKcUVDMGhCQXNnRUNrRDZBRWdFQ2dDOEFFZ0JpQUdLQUlBSUFsQkJIWWlGVUVEY1NBSlFRSjJRVEJ4Y2lBamRISWlGRFlDQUNBSlFRVjJRUWR4SUFsQkVIRWlEMEVFZG5JaEV5QUpRUWR4SWdKcklSY2dBcTJJSWttbklRaEJBQ0VDSUJJZ0RVRUNja29FUUNBVFFRaDBJQWhCL3dCeFFRRjBja0hnZ1FGcUx3RUFJUUlDUUNBVERRQWdBa0VBSUFSQkFtc2lDRUYvUmhzaEFpQUVRUUZLQkVBZ0NDRUVEQUVMSUJCQmdBSnFFQzBoQkFzZ0FrRUVka0VCY1NBQ1FRVjJRUWR4Y2lFVElCY2dBa0VIY1NJSWF5RVhJRWtnQ0sySUlrbW5JUWdMSUFZZ0FrRUNkRUdBQm5FZ0FrRXdjWElnSTBFRWFuUWdGSEkyQWdBQ1FDQUNRUUoyUVFKeElBbEJBM1pCQVhGeUloUkJBMGNOQUVFRVFRTWdCRUVDYXlJTVFYOUdHeUVVSUFSQkFVb0VRQ0FNSVFRTUFRc2dFRUdBQW1vUUxTRUVDd0ovSUJSRkJFQWdFRUtCZ0lDQUVEY0NlRUVBREFFTElCUkJBazBFUUNBUVFRRWdDRUVIY1VHVW9nRnFMUUFBSWd4QkJYWkJmeUFNUVFKMlFRZHhJaGgwUVg5eklBZ2dERUVEY1NJSWRuRnFRUUZxSWd3Z0ZFRUJSaUlVR3pZQ2ZDQVFJQXhCQVNBVUd6WUNlQ0FJSUJocURBRUxJQWdnQ0VFSGNVR1VvZ0ZxTFFBQUlneEJBM0VpR0hZaENDQVVRUU5HQkVBZ0RFRUZka0VCYWlFVUlCaEJBMFlFUUNBUUlBaEJBWEZCQW5JMkFud2dFQ0FVUVg4Z0RFRUNka0VIY1NJTWRFRi9jeUFJUVFGMmNXbzJBbmdnREVFRWFnd0NDeUFRSUJRZ0NDQUlRUWR4UVpTaUFXb3RBQUFpQ0VFRGNTSWdkaUlsUVg4Z0RFRUNka0VIY1NJTWRFRi9jM0ZxTmdKNElCQkJmeUFJUVFKMlFRZHhJaFIwUVg5eklDVWdESFp4SUFoQkJYWnFRUUZxTmdKOElBd2dHR29nSUdvZ0ZHb01BUXNnRUNBSUlBaEJCM0ZCbEtJQmFpMEFBQ0lJUVFOeElpQjJJaVZCZnlBTVFRSjJRUWR4SWhSMFFYOXpjU0FNUVFWMmFrRURhallDZUNBUVFYOGdDRUVDZGtFSGNTSU1kRUYvY3lBbElCUjJjU0FJUVFWMmFrRURhallDZkNBWUlDQnFJQlJxSUF4cUN5RUlBa0FnTENBUUtBSjRJaFJQQkVBZ0VDZ0NmQ0lNSUN4TkRRRUxJQ0lFUUVFQUlRSWdIVUVCUWVmNkFFRUFFQk1NQnd0QkFDRUNJQjFCQVVIbitnQkJBQkFUREFZTElCQWdGeUFJYXpZQzhBRWdFQ0JKSUFpdGlEY0Q2QUVnQWtId0FYRWdGVUVQY1hKQi93RkIvd0VnRFVFRWFpSVhJQkpyUVFGMGRpQVNJQmRPR3lJSUlBaEIxUUJ4SUNGQkFVb2JJZ2hCZjNOeEJFQWdJZ1JBUVFBaEFpQWRRUUZCL2Q0QVFRQVFFd3dIQzBFQUlRSWdIVUVCUWYzZUFFRUFFQk1NQmdzQ1FBSkFJQThFUUNBUVFjQUJhaEFmSVJVZ0VDQVFLQUxRQVNBVUlBbEJFM1JCSDNWcUloaHJOZ0xRQVNBUUlCQXBBOGdCSUJpdGlEY0R5QUVnRlVGL0lCaDBRWDl6Y1NBSlFRaDJRUUZ4SUJoMGNrRUJja0VDYWlBUmRDQVZRUjkwY2lFWURBRUxRUUFoR0NBSVFRRnhSUTBCQ3lBQklCZzJBZ0FMQWtBZ0NVRWdjUVJBSUJCQndBRnFFQjhoRlNBUUlCQW9BdEFCSUJRZ0NVRVNkRUVmZFdvaUdHczJBdEFCSUJBZ0VDa0R5QUVnR0sySU53UElBU0FCSUJKQkFuUnFJQlZCZnlBWWRFRi9jM0VnQ1VFSmRrRUJjU0FZZEhKQkFYSWlHRUVDYWlBUmRDQVZRUjkwY2pZQ0FDQUhRU0FnR0dkckloZ2dCeTBBQUVIL0FIRWlGU0FWSUJoSkcwR0FBWEk2QUFBTUFRc2dDRUVDY1VVTkFDQUJJQkpCQW5ScVFRQTJBZ0FMSUFGQkJHb2hGUUpBQWtBZ0NVSEFBSEVFUUNBUVFjQUJhaEFmSVE4Z0VDQVFLQUxRQVNBVUlBbEJFWFJCSDNWcUloaHJOZ0xRQVNBUUlCQXBBOGdCSUJpdGlEY0R5QUVnRDBGL0lCaDBRWDl6Y1NBSlFRcDJRUUZ4SUJoMGNrRUJja0VDYWlBUmRDQVBRUjkwY2lFWURBRUxRUUFoR0NBSVFRUnhSUTBCQ3lBVklCZzJBZ0FMSUFkQkFEb0FBUUpBSUFsQmdBRnhCRUFnRUVIQUFXb1FIeUVZSUJBZ0VDZ0MwQUVnRkNBSlFSQjBRUjkxYWlJVWF6WUMwQUVnRUNBUUtRUElBU0FVcllnM0E4Z0JJQlVnRWtFQ2RHb2dHRUYvSUJSMFFYOXpjU0FKUVF0MlFRRnhJQlIwY2tFQmNpSUpRUUpxSUJGMElCaEJIM1J5TmdJQUlBZEJvSDhnQ1dkck9nQUJEQUVMSUFoQkNIRkZEUUFnRlNBU1FRSjBha0VBTmdJQUN5QUJRUWhxSVFrQ1FBSkFJQUpCRUhFRVFDQVFRY0FCYWhBZklSZ2dFQ0FRS0FMUUFTQU1JQUpCRTNSQkgzVnFJaFJyTmdMUUFTQVFJQkFwQThnQklCU3RpRGNEeUFFZ0dFRi9JQlIwUVg5emNTQUNRUWgyUVFGeElCUjBja0VCY2tFQ2FpQVJkQ0FZUVI5MGNpRVVEQUVMUVFBaEZDQUlRUkJ4UlEwQkN5QUpJQlEyQWdBTEFrQWdBa0VnY1FSQUlCQkJ3QUZxRUI4aEdDQVFJQkFvQXRBQklBd2dBa0VTZEVFZmRXb2lGR3MyQXRBQklCQWdFQ2tEeUFFZ0ZLMklOd1BJQVNBSklCSkJBblJxSUJoQmZ5QVVkRUYvYzNFZ0FrRUpka0VCY1NBVWRISkJBWElpQ1VFQ2FpQVJkQ0FZUVI5MGNqWUNBQ0FIUVNBZ0NXZHJJZ2tnQnkwQUFVSC9BSEVpRkNBSklCUkxHMEdBQVhJNkFBRU1BUXNnQ0VFZ2NVVU5BQ0FKSUJKQkFuUnFRUUEyQWdBTElBRkJER29oQ1FKQUFrQWdBa0hBQUhFRVFDQVFRY0FCYWhBZklSZ2dFQ0FRS0FMUUFTQU1JQUpCRVhSQkgzVnFJaFJyTmdMUUFTQVFJQkFwQThnQklCU3RpRGNEeUFFZ0dFRi9JQlIwUVg5emNTQUNRUXAyUVFGeElCUjBja0VCY2tFQ2FpQVJkQ0FZUVI5MGNpRVVEQUVMUVFBaEZDQUlRY0FBY1VVTkFRc2dDU0FVTmdJQUN5QUhRUUpxSWdkQkFEb0FBQUpBSUFKQmdBRnhCRUFnRUVIQUFXb1FIeUVVSUJBZ0VDZ0MwQUVnRENBQ1FSQjBRUjkxYWlJSWF6WUMwQUVnRUNBUUtRUElBU0FJcllnM0E4Z0JJQWtnRWtFQ2RHb2dGRUYvSUFoMFFYOXpjU0FDUVF0MlFRRnhJQWgwY2tFQmNpSUpRUUpxSUJGMElCUkJIM1J5TmdJQUlBZEJvSDhnQ1dkck9nQUFEQUVMSUFoQmdBRkpEUUFnQ1NBU1FRSjBha0VBTmdJQUN5QWpRUkJ6SVNNZ0JpQU5RUVJ4YWlFR0lBRkJFR29oQVNBU0lCZEtEUUFMQ3lBS1FRaHhJVGtnRGtHd0RHb2hLQ0FPUWFBSWFpRXBJQTVCa0FScUlTVWdJVUVEVGdSQUlCSkJER3doTVNBU1FRTjBJVG9nSkVFQmF5RWdRUU1nSkVFQ2F5SUJkQ0V0UVFFZ0FYUWhMaUFTUVFkcVFRRjJRZnovLy84SGNVRUVhaUU5SUNzZ0dVRi9jMm9pQVVFRGRpSUdRUUowSWo1QkJHb2hPeUFHUVFGcUlqOUIvUC8vL3dOeEloOUJBblFoUENBZlFRTjBJUlVnQVVFWVNTRkFRUUloREFOQUlBd2hFU0FXTFFBQUlSZ2dGa0VBT2dBQUlDTkJiM0ZCQW5NaEl3SkFJQkpCQUV3RVFDQU1RUUpxSVF3TUFRc2dKU0FPSUJGQkJIRWJJUk1nRVVFQ2FpRU1JQXNnRVNBU2JFRUNkR29oQjBFQUlSUWdGaUVCUVFBaEZ3TkFJQmNoRFNBQkxRQUJRUVYyUVFSeElCUWdHRUgvQVhFaUdFRUhkbkp5SWdaQkNIUWdFRUhnQVdvUU5VSC9BSEZCQVhSeVFlQ1JBV292QVFBaENRSkFJQVlOQUNBSlFRQWdCRUVDYXlJR1FYOUdHeUVKSUFSQkFVb0VRQ0FHSVFRTUFRc2dFRUdBQW1vUUxTRUVDeUFRS1FQb0FTQVFLQUx3QVNBVElCTW9BZ0FnQ1VFRWRrRURjU0FKUVFKMlFUQnhjaUFqZEhJaUNEWUNBQ0FKUWNBQWNTSWNRUVYySUFsQmdBRnhJaXBCQm5aeUlSUWdDVUVIY1NJR2F5RUtJQWF0aUNKSnB5RVhRUUFoQWlBU0lBMUJBbkpLQkVBZ0ZDQUJMUUFDUVFWMlFRUnhJQUV0QUFGQkIzWnljaUlHUVFoMElCZEIvd0J4UVFGMGNrSGdrUUZxTHdFQUlRSUNRQ0FHRFFBZ0FrRUFJQVJCQW1zaUJrRi9SaHNoQWlBRVFRRktCRUFnQmlFRURBRUxJQkJCZ0FKcUVDMGhCQXNnQ2lBQ1FRZHhJZ1pySVFvZ0FrRUZkaUFDUVFaMmNrRUNjU0VVSUVrZ0JxMklJa21uSVJjTElCTWdBa0VDZEVHQUJuRWdBa0V3Y1hJZ0kwRUVhblFnQ0hJMkFnQkJBU0VJUVFFaEJnSkFBa0FDUUNBQ1FRSjJRUUp4SUFsQkEzWkJBWEZ5SWc4T0JBSUFBQUVBQzBFQklCZEJCM0ZCbEtJQmFpMEFBQ0lHUVFWMlFYOGdCa0VDZGtFSGNTSWVkRUYvY3lBWElBWkJBM0VpRjNaeGFrRUJhaUlHSUE5QkFVWWlEeHNoQ0NBR1FRRWdEeHNoQmlBWElCNXFJUThNQVFzZ0Z5QVhRUWR4UVpTaUFXb3RBQUFpQmtFRGNTSVhkaUllUVFkeFFaU2lBV290QUFBaUNFRURjU0luSUJkcUlBWkJBblpCQjNFaUYyb2dDRUVDZGtFSGNTSTBhaUVQSUI0Z0ozWWlIa0YvSUJkMFFYOXpjU0FHUVFWMmFrRUJhaUVHUVg4Z05IUkJmM01nSGlBWGRuRWdDRUVGZG1wQkFXb2hDQXNnRUNBS0lBOXJOZ0x3QVNBUUlFa2dENjJJTndQb0FTQUpRZkFCY1NJWElCZEJBV3R4QkVBZ0JpQVlRZjhBY1NJS0lBRXRBQUZCL3dCeEloZ2dDaUFZU3hzaUNrRUNheUlZUVFBZ0NpQVlUeHRxSVFZTElBSkI4QUZ4SWdvZ0NrRUJhM0VFUUNBSUlBRXRBQUZCL3dCeEloZ2dBUzBBQWtIL0FIRWlEeUFQSUJoSkd5SVlRUUpyUVFBZ0dFRUNTeHRxSVFnTElBWWdMRTBnQ0NBc1RYRkZCRUFnSWdSQVFRQWhBaUFkUVFGQnkvc0FRUUFRRXd3SkMwRUFJUUlnSFVFQlFjdjdBRUVBRUJNTUNBc2dBUzBBQWlFWUlBRkJBRHNBQVNBS0lCZEJCSFp5UWY4QlFmOEJJQTFCQkdvaUZ5QVNhMEVCZEhZZ0VpQVhUaHNpQ2tIVkFIRWdDaUFNSUNGS0d5SVBRWDl6Y1FSQUlDSUVRRUVBSVFJZ0hVRUJRZjNlQUVFQUVCTU1DUXRCQUNFQ0lCMUJBVUg5M2dCQkFCQVREQWdMQWtBQ1FDQUpRUkJ4QkVBZ0VFSEFBV29RSHlFZUlCQWdFQ2dDMEFFZ0JpQUpRUk4wUVI5MWFpSUthellDMEFFZ0VDQVFLUVBJQVNBS3JZZzNBOGdCSUI1QmZ5QUtkRUYvYzNFZ0NVRUlka0VCY1NBS2RISkJBWEpCQW1vZ0lIUWdIa0VmZEhJaENnd0JDMEVBSVFvZ0QwRUJjVVVOQVFzZ0J5QUtOZ0lBQ3dKQUlBbEJJSEVFUUNBUVFjQUJhaEFmSVI0Z0VDQVFLQUxRQVNBR0lBbEJFblJCSDNWcUlncHJOZ0xRQVNBUUlCQXBBOGdCSUFxdGlEY0R5QUVnQnlBU1FRSjBhaUFlUVg4Z0NuUkJmM054SUFsQkNYWkJBWEVnQ25SeVFRRnlJZ3BCQW1vZ0lIUWdIa0VmZEhJMkFnQWdBVUVnSUFwbmF5SUtJQUV0QUFCQi93QnhJaDRnQ2lBZVN4dEJnQUZ5T2dBQURBRUxJQTlCQW5GRkRRQWdCeUFTUVFKMGFrRUFOZ0lBQ3lBSFFRUnFJUW9DUUFKQUlCd0VRQ0FRUWNBQmFoQWZJUndnRUNBUUtBTFFBU0FHSUFsQkVYUkJIM1ZxSWg1ck5nTFFBU0FRSUJBcEE4Z0JJQjZ0aURjRHlBRWdIRUYvSUI1MFFYOXpjU0FKUVFwMlFRRnhJQjUwY2tFQmNrRUNhaUFnZENBY1FSOTBjaUVlREFFTFFRQWhIaUFQUVFSeFJRMEJDeUFLSUI0MkFnQUxBa0FnS2dSQUlCQkJ3QUZxRUI4aEhpQVFJQkFvQXRBQklBWWdDVUVRZEVFZmRXb2lCbXMyQXRBQklCQWdFQ2tEeUFFZ0JxMklOd1BJQVNBS0lCSkJBblJxSUI1QmZ5QUdkRUYvYzNFZ0NVRUxka0VCY1NBR2RISkJBWElpQmtFQ2FpQWdkQ0FlUVI5MGNqWUNBQ0FCUWFCL0lBWm5hem9BQVF3QkN5QVBRUWh4UlEwQUlBb2dFa0VDZEdwQkFEWUNBQXNnQjBFSWFpRUpBa0FDUUNBQ1FSQnhCRUFnRUVIQUFXb1FIeUVLSUJBZ0VDZ0MwQUVnQ0NBQ1FSTjBRUjkxYWlJR2F6WUMwQUVnRUNBUUtRUElBU0FHcllnM0E4Z0JJQXBCZnlBR2RFRi9jM0VnQWtFSWRrRUJjU0FHZEhKQkFYSkJBbW9nSUhRZ0NrRWZkSEloQmd3QkMwRUFJUVlnRDBFUWNVVU5BUXNnQ1NBR05nSUFDd0pBSUFKQklIRUVRQ0FRUWNBQmFoQWZJUW9nRUNBUUtBTFFBU0FJSUFKQkVuUkJIM1ZxSWdack5nTFFBU0FRSUJBcEE4Z0JJQWF0aURjRHlBRWdDU0FTUVFKMGFpQUtRWDhnQm5SQmYzTnhJQUpCQ1haQkFYRWdCblJ5UVFGeUlnWkJBbW9nSUhRZ0NrRWZkSEkyQWdBZ0FVRWdJQVpuYXlJR0lBRXRBQUZCL3dCeElna2dCaUFKU3h0QmdBRnlPZ0FCREFFTElBOUJJSEZGRFFBZ0NTQVNRUUowYWtFQU5nSUFDeUFIUVF4cUlRa0NRQUpBSUFKQndBQnhCRUFnRUVIQUFXb1FIeUVLSUJBZ0VDZ0MwQUVnQ0NBQ1FSRjBRUjkxYWlJR2F6WUMwQUVnRUNBUUtRUElBU0FHcllnM0E4Z0JJQXBCZnlBR2RFRi9jM0VnQWtFS2RrRUJjU0FHZEhKQkFYSkJBbW9nSUhRZ0NrRWZkSEloQmd3QkMwRUFJUVlnRDBIQUFIRkZEUUVMSUFrZ0JqWUNBQXNnQVVFQ2FpRUJBa0FnQWtHQUFYRUVRQ0FRUWNBQmFoQWZJUW9nRUNBUUtBTFFBU0FJSUFKQkVIUkJIM1ZxSWdack5nTFFBU0FRSUJBcEE4Z0JJQWF0aURjRHlBRWdDU0FTUVFKMGFpQUtRWDhnQm5SQmYzTnhJQUpCQzNaQkFYRWdCblJ5UVFGeUlnWkJBbW9nSUhRZ0NrRWZkSEkyQWdBZ0FVR2dmeUFHWjJzNkFBQU1BUXNnRDBHQUFVa05BQ0FKSUJKQkFuUnFRUUEyQWdBTElDTkJFSE1oSXlBVElBMUJCSEZxSVJNZ0IwRVFhaUVISUJJZ0Ywb05BQXNMQWtBZ0cwRUNTUTBBSUJGQkFuRkZEUUFnREVFRWNTRUdBa0FDZndKQUFrQWdNd1JBSUE0Z0pTQUdHeUVOUVFBaER5QVNRUUJNRFFFZ0N5QVJRUUpySUJKc1FRSjBhaUVYQTBBZ0VFR0FBV29RTlNFQ1FRQWhDU0FOS0FJQUlnY0VRQ0FYSUE5QkFuUnFJUWxCQUNFSVFROGhBUU5BQWtBZ0FTQUhjVVVOQUNBQlFaR2l4SWdCY1NJVElBZHhCRUFnQ1NBSktBSUFJQUpCZjNOQkFYRWdJSFJ6SUM1eU5nSUFJQUpCQVhZaEFnc2dFMEVCZENBSGNRUkFJQWtnRWtFQ2RHb2lDaUFLS0FJQUlBSkJmM05CQVhFZ0lIUnpJQzV5TmdJQUlBSkJBWFloQWdzZ0UwRUNkQ0FIY1FSQUlBa2dPbW9pQ2lBS0tBSUFJQUpCZjNOQkFYRWdJSFJ6SUM1eU5nSUFJQUpCQVhZaEFnc2dFMEVEZENBSGNVVU5BQ0FKSURGcUloTWdFeWdDQUNBQ1FYOXpRUUZ4SUNCMGN5QXVjallDQUNBQ1FRRjJJUUlMSUFsQkJHb2hDU0FCUVFSMElRRWdDRUVCYWlJSVFRaEhEUUFMSUFkcElRa0xJQTFCQkdvaERTQVFJQkFvQXBBQklBbHJOZ0tRQVNBUUlCQXBBNGdCSUFtdGlEY0RpQUVnRDBFSWFpSVBJQkpJRFFBTEN5QXBJQ2dnQmhzaENpQU9JQ1VnQmhzaERTQUdSU0VQSUJKQkFFd05BMEVBSVFZZ1FBMEJJQW9nRFNBN2Fra2dEU0FLSUR0cUlnSkpjUTBCUVFBZ0NpSUpJQTBpQVNBK2FrRUlha2tnQVVFRWFpQUNTWEVOQWhvZ0FTQThhaUVCSUFrZ1BHb2hDZjBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0ZIUVFBaEFnTkFJQW9nQWtFQ2RDSUdhaUlISUFZZ0RXb2lCdjBBQWdBaVNFRUUvYTBCSUVoQkJQMnJBU0JISUVqOURRd05EZzhRRVJJVEZCVVdGeGdaR2h0QkhQMnRBZjFRL1ZBZ1NQMVFJa2Y5Q3dJQUlBY2dSeUFHL1FBQ0JFRWMvYXNCL1ZBaVIwRUIvYTBCL1F4M2QzZDNkM2QzZDNkM2QzZDNkM2QzL1U0Z1IwRUIvYXNCL1F6dTd1N3U3dTd1N3U3dTd1N3U3dTd1L1U3OVVDQkgvVkFnU1AxUC9Rc0NBQ0JJSVVjZ0FrRUVhaUlDSUI5SERRQUxJQjhnUDBZTkF5QVZJUVlnUi8wYkF3d0NDeUFHUlNFUElDa2dLQ0FHR3lFS0RBSUxJQW9oQ1NBTklRRkJBQXNoQWdOQUlBSkJISFloQnlBSklBRW9BZ0FpQWtFRWRpQUhJQUpCQkhSeWNpQUNjaUlITmdJQUlBa2dCeUFCS0FJRVFSeDBjaUlIUVFGMlFmZnUzYnNIY1NBSFFRRjBRZTdkdS9kK2NYSWdCM0lnQWtGL2MzRTJBZ0FnQ1VFRWFpRUpJQUZCQkdvaEFTQUdRUWhxSWdZZ0VrZ05BQXNMSUJGQkJra05BRUVBSVFoQkFDRVRJQTBoQ1NBcElDZ2dEeHNpSENFQ0lBNGdKU0FQR3lJWUlRRWdFa0VBU2dSQUEwQWdDVUVFYWlFSElBSW9BZ0FoRnlBSktBSUFJUVlnQWlBNUJIOGdGd1VnQmtFRWRDQVRRUngyY2lBR1FRUjJjaUFIS0FJQVFSeDBjaUFHY2tFRGRFR0lrYUxFZUhFZ0YzSUxJQUVvQWdCQmYzTnhOZ0lBSUFGQkJHb2hBU0FDUVFScUlRSWdCaUVUSUFjaENTQUlRUWhxSWdnZ0VrZ05BQXNnQ3lBUlFRWnJJQkpzUVFKMGFpRkJRUUFoSGlBWUlSTURRRUVBSVFjZ0hDZ0NBQ0lCQkVBZ0hrRUVjaUZDSUJJZ0htc2hRMEVBSVFKQkFDRVVBMEFnQWlBUVFhQUJhaEFmSVFJQ1FDQVVRUVJxSUVNZ0ZDQkNhaUFTU0JzaU5DQVVUQVJBUVFBaENRd0JDeUFUS0FJQVFYOXpJU29nUVNBVUlCNXlRUUowYWlFUFFRQWhDVUVQSUJRaUNFRUNkQ0pFZENJWElRWURRQUpBSUFFZ0JuRkZEUUFnQmtHUm9zU0lBWEVpSnlBQmNRUkFJQUpCQVhFRVFDQUhJQ2R5SVFkQk1pQUlRUUowZENBcWNTQUJjaUVCQ3lBQ1FRRjJJUUlnQ1VFQmFpRUpDeUFCSUNkQkFYUWlOWEVFUUNBQ1FRRnhCRUFnQnlBMWNpRUhJQUZCOUFBZ0NFRUNkSFFnS25GeUlRRUxJQUpCQVhZaEFpQUpRUUZxSVFrTElBRWdKMEVDZENJMWNRUkFJQUpCQVhFRVFDQUhJRFZ5SVFjZ0FVSG9BU0FJUVFKMGRDQXFjWEloQVFzZ0FrRUJkaUVDSUFsQkFXb2hDUXNnQVNBblFRTjBJaWR4UlEwQUlBSkJBWEVFUUNBSElDZHlJUWNnQVVIQUFTQUlRUUowZENBcWNYSWhBUXNnQ1VFQmFpRUpJQUpCQVhZaEFnc2dCa0VFZENFR0lBaEJBV29pQ0NBMFNBMEFDeUFISUVSMlFmLy9BM0ZGRFFBRFFBSkFJQWNnRjNGRkRRQWdGMEdSb3NTSUFYRWlCaUFIY1FSQUlBOGdEeWdDQUNBQ1FSOTBjaUF0Y2pZQ0FDQUNRUUYySVFJZ0NVRUJhaUVKQ3lBR1FRRjBJQWR4QkVBZ0R5QVNRUUowYWlJSUlBZ29BZ0FnQWtFZmRISWdMWEkyQWdBZ0FrRUJkaUVDSUFsQkFXb2hDUXNnQmtFQ2RDQUhjUVJBSUE4Z09tb2lDQ0FJS0FJQUlBSkJIM1J5SUMxeU5nSUFJQUpCQVhZaEFpQUpRUUZxSVFrTElBWkJBM1FnQjNGRkRRQWdEeUF4YWlJR0lBWW9BZ0FnQWtFZmRISWdMWEkyQWdBZ0NVRUJhaUVKSUFKQkFYWWhBZ3NnRjBFRWRDRVhJQTlCQkdvaER5QVVRUUZxSWhRZ05FZ05BQXNMSUJBZ0VDZ0NzQUVnQ1dzMkFyQUJJQkFnRUNrRHFBRWdDYTJJTndPb0FVRUJJUUpCQkNFVVFRRnhSUTBBQ3lBY0lCd29BZ1FnQjBFYmRrRU9jU0FIUVIxMmNpQUhRUngyY2lBVEtBSUVRWDl6Y1hJMkFnUUxJQk1vQWdBZ0IzSWlCa0VEZGtHUm9zU0lBWEVpQVVFRWRpQUJRUVIwY2lBQmNpRUpJQjRFUUNBS1FRUnJJZ0lnQWlnQ0FDQU5RUVJyS0FJQVFYOXpJQUZCSEhSeGNqWUNBQXNnQ2lBS0tBSUFJQWtnRFNnQ0FFRi9jM0Z5TmdJQUlBb2dDaWdDQkNBTktBSUVRWDl6SUFaQkgzWnhjallDQkNBY1FRUnFJUndnRTBFRWFpRVRJQXBCQkdvaENpQU5RUVJxSVEwZ0hrRUlhaUllSUJKSURRQUxDeUFZUVFBZ1BSQVpHZ3NnRENBaFNBMEFDd3NDUUNBYlFRSkpEUUFDUUNBaFFRTnhRUUZySWhkQkFra2dNM0VFUUNBU1FRQk1EUUZCQVNBa1FRSnJkQ0VISUFzZ0lVSDgvLzhIY1NBU2JFRUNkR29oQ2lBbElBNGdJVUVFY1JzaEJDQVNRUXhzSVJzZ0VrRURkQ0VXSUNSQkFXc2hEVUVBSVJRRFFDQVFRWUFCYWhBMUlRSkJBQ0VKSUFRb0FnQWlCZ1JBSUFvZ0ZFRUNkR29oQ1VFUElRRkJBQ0VJQTBBQ1FDQUJJQVp4UlEwQUlBRkJrYUxFaUFGeEloTWdCbkVFUUNBSklBa29BZ0FnQWtGL2MwRUJjU0FOZEhNZ0IzSTJBZ0FnQWtFQmRpRUNDeUFUUVFGMElBWnhCRUFnQ1NBU1FRSjBhaUlkSUIwb0FnQWdBa0YvYzBFQmNTQU5kSE1nQjNJMkFnQWdBa0VCZGlFQ0N5QVRRUUowSUFaeEJFQWdDU0FXYWlJZElCMG9BZ0FnQWtGL2MwRUJjU0FOZEhNZ0IzSTJBZ0FnQWtFQmRpRUNDeUFUUVFOMElBWnhSUTBBSUFrZ0cyb2lFeUFUS0FJQUlBSkJmM05CQVhFZ0RYUnpJQWR5TmdJQUlBSkJBWFloQWdzZ0NVRUVhaUVKSUFGQkJIUWhBU0FJUVFGcUlnaEJDRWNOQUFzZ0Jta2hDUXNnQkVFRWFpRUVJQkFnRUNnQ2tBRWdDV3MyQXBBQklCQWdFQ2tEaUFFZ0NhMklOd09JQVNBVVFRaHFJaFFnRWtnTkFBc0xJQmRCQVVzTkFDQVNRUUJNRFFBZ0pTQU9JQ0ZCQkhFaUFSc2hCeUFvSUNrZ0FSc2hDRUVBSVFZQ2Z3SkFJQ3NnR1VGL2Myb2lBVUU0U1EwQUlBZ2dCeUFCUVFGMlFmei8vLzhIY1NJSlFRUnFJZ0pxU1NBSElBSWdDR29pQWtseERRQWdDQ0FISUFscVFRaHFTU0FIUVFScUlBSkpjUTBBSUFGQkEzWkJBV29pRFVIOC8vLy9BM0VpQkVFRGRDRUdJQWNnQkVFQ2RDSUphaUVCSUFnZ0NXb2hDZjBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0ZIUVFBaEFnTkFJQWdnQWtFQ2RDSVRhaUlYSUFjZ0Uyb2lFLzBBQWdBaVNFRUUvYTBCSUVoQkJQMnJBU0JISUVqOURRd05EZzhRRVJJVEZCVVdGeGdaR2h0QkhQMnRBZjFRL1ZBZ1NQMVFJa2Y5Q3dJQUlCY2dSeUFUL1FBQ0JFRWMvYXNCL1ZBaVIwRUIvYTBCL1F4M2QzZDNkM2QzZDNkM2QzZDNkM2QzL1U0Z1IwRUIvYXNCL1F6dTd1N3U3dTd1N3U3dTd1N3U3dTd1L1U3OVVDQkgvVkFnU1AxUC9Rc0NBQ0JJSVVjZ0FrRUVhaUlDSUFSSERRQUxJQVFnRFVZTkFpQkgvUnNEREFFTElBZ2hDU0FISVFGQkFBc2hBZ05BSUFKQkhIWWhCeUFKSUFFb0FnQWlBa0VFZGlBSElBSkJCSFJ5Y2lBQ2NpSUhOZ0lBSUFrZ0J5QUJLQUlFUVJ4MGNpSUhRUUYyUWZmdTNic0hjU0FIUVFGMFFlN2R1L2QrY1hJZ0IzSWdBa0YvYzNFMkFnQWdDVUVFYWlFSklBRkJCR29oQVNBR1FRaHFJZ1lnRWtnTkFBc0xJQ0VnSVVFQmFrRURjV3RCQTJ0QkFDQWhRUVpLR3lJRUlDRk9EUUFnRWtFTWJDRXNJQkpCQTNRaExVRURJQ1JCQW10MElTQWdLeUFaUVg5emFpSUJRUU4ySWdaQkFuUWlHVUVFYWlFZElBWkJBV29pSkVIOC8vLy9BM0VpSWtFQ2RDRVJJQ0pCQTNRaEV5QUJRUmhKSVNzZ0FVRVhTeUV1QTBBQ1FBSkFBa0FDUUFKL0FrQWdJU0FFYXlJQlFRRnJJZ1pCQTA4RVFFRi9JUlFnQVVFRlNBMEZJQkpCQUV3TkJpQWxJQTRnQkVFRWNTSUJHeUVOSUNnZ0tTQUJHeUVJSURrRVFFRUFJUUVnTGtVTkJDQU5JQWdnSFdwSklBMGdIV29nQ0V0eERRUWdEU0FSYWlFSklBZ2dFV29oQWdOQUlBZ2dBVUVDZENJR2FpSUhJQWY5QUFJQUlBWWdEV3I5QUFJQS9VLzlDd0lBSUFGQkJHb2lBU0FpUncwQUN5QVRJUUVnSWlBa1JnMEdEQVVMSUE0Z0pTQUJHeUVYUVFBaEJpQXJEUUVnQ0NBWElCMXFTU0FYSUFnZ0hXb2lBVWx4RFFFZ0NDQVhJQmxxUVFocVNTQVhRUVJxSUFGSmNRMEJJQWdnRFNBZGFra2dBU0FOUzNFTkFTQU5JQkZxSVFjZ0NDQVJhaUVKSUJFZ0Yyb2hBdjBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0ZIUVFBaEFRTkFJQWdnQVVFQ2RDSUdhaUlLSUFZZ0Yyb2lHLzBBQWdBaVNFRUUvYTBCSUVoQkJQMnJBU0JISUVqOURRd05EZzhRRVJJVEZCVVdGeGdaR2h0QkhQMnRBZjFRL1ZBZ0cvMEFBZ1JCSFAyckFmMVFJRWo5VUVFRC9hc0IvUXlJaUlpSWlJaUlpSWlJaUlpSWlJaUkvVTRnQ3YwQUFnRDlVQ0FHSUExcS9RQUNBUDFQL1FzQ0FDQklJVWNnQVVFRWFpSUJJQ0pIRFFBTElDSWdKRVlOQlNBVElRWWdSLzBiQXd3Q0N5QUdRUUowUVp5aUFXb29BZ0FoRkF3RUN5QVhJUUlnQ0NFSklBMGhCMEVBQ3lFQkEwQWdBVUVjZGlFSUlBa2dDU2dDQUNBQ0tBSUFJZ0ZCQkhZZ0NDQUJRUVIwY25JZ0FpZ0NCRUVjZEhJZ0FYSkJBM1JCaUpHaXhIaHhjaUFIS0FJQVFYOXpjVFlDQUNBSFFRUnFJUWNnQ1VFRWFpRUpJQUpCQkdvaEFpQUdRUWhxSWdZZ0VrZ05BQXNNQWdzZ0NDRUNJQTBoQ1FzRFFDQUNJQUlvQWdBZ0NTZ0NBRUYvYzNFMkFnQWdDVUVFYWlFSklBSkJCR29oQWlBQlFRaHFJZ0VnRWtnTkFBc0xJQkpCQUV3TkFDQWxJQTRnQkVFRWNTSUJHeUVNSUNnZ0tTQUJHeUVZSUE0Z0pTQUJHeUVWSUNrZ0tDQUJHeUVLSUFzZ0JDQVNiRUVDZEdvaEtrRUFJUnNEUUVFQUlRY2dHQ2dDQUNBVWNTSUJCRUFnRzBFRWNpRW5JQklnRzJzaEgwRUFJUUpCQUNFTkEwQWdBaUFRUWFBQmFoQWZJUUlDUUNBTlFRUnFJQjhnRFNBbmFpQVNTQnNpSENBTlRBUkFRUUFoQ1F3QkN5QVVJQXdvQWdCQmYzTnhJU01nS2lBTklCdHlRUUowYWlFV1FRQWhDVUVQSUEwaUNFRUNkQ0l6ZENJUElRWURRQUpBSUFFZ0JuRkZEUUFnQmtHUm9zU0lBWEVpSGlBQmNRUkFJQUpCQVhFRVFDQUhJQjV5SVFkQk1pQUlRUUowZENBamNTQUJjaUVCQ3lBQ1FRRjJJUUlnQ1VFQmFpRUpDeUFCSUI1QkFYUWlNWEVFUUNBQ1FRRnhCRUFnQnlBeGNpRUhJQUZCOUFBZ0NFRUNkSFFnSTNGeUlRRUxJQUpCQVhZaEFpQUpRUUZxSVFrTElBRWdIa0VDZENJeGNRUkFJQUpCQVhFRVFDQUhJREZ5SVFjZ0FVSG9BU0FJUVFKMGRDQWpjWEloQVFzZ0FrRUJkaUVDSUFsQkFXb2hDUXNnQVNBZVFRTjBJaDV4UlEwQUlBSkJBWEVFUUNBSElCNXlJUWNnQVVIQUFTQUlRUUowZENBamNYSWhBUXNnQ1VFQmFpRUpJQUpCQVhZaEFnc2dCa0VFZENFR0lBaEJBV29pQ0NBY1NBMEFDeUFISUROMlFmLy9BM0ZGRFFBRFFBSkFJQWNnRDNGRkRRQWdEMEdSb3NTSUFYRWlCaUFIY1FSQUlCWWdGaWdDQUNBQ1FSOTBjaUFnY2pZQ0FDQUNRUUYySVFJZ0NVRUJhaUVKQ3lBR1FRRjBJQWR4QkVBZ0ZpQVNRUUowYWlJSUlBZ29BZ0FnQWtFZmRISWdJSEkyQWdBZ0FrRUJkaUVDSUFsQkFXb2hDUXNnQmtFQ2RDQUhjUVJBSUJZZ0xXb2lDQ0FJS0FJQUlBSkJIM1J5SUNCeU5nSUFJQUpCQVhZaEFpQUpRUUZxSVFrTElBWkJBM1FnQjNGRkRRQWdGaUFzYWlJR0lBWW9BZ0FnQWtFZmRISWdJSEkyQWdBZ0NVRUJhaUVKSUFKQkFYWWhBZ3NnRDBFRWRDRVBJQlpCQkdvaEZpQU5RUUZxSWcwZ0hFZ05BQXNMSUJBZ0VDZ0NzQUVnQ1dzMkFyQUJJQkFnRUNrRHFBRWdDYTJJTndPb0FVRUJJUUpCQkNFTlFRRnhSUTBBQ3lBWUlCZ29BZ1FnQjBFYmRrRU9jU0FIUVIxMmNpQUhRUngyY2lBTUtBSUVRWDl6Y1hJMkFnUUxJQXdvQWdBZ0IzSWlCa0VEZGtHUm9zU0lBWEVpQVVFRWRpQUJRUVIwY2lBQmNpRUpJQnNFUUNBS1FRUnJJZ0lnQWlnQ0FDQVZRUVJyS0FJQVFYOXpJQUZCSEhSeGNqWUNBQXNnQ2lBS0tBSUFJQWtnRlNnQ0FFRi9jM0Z5TmdJQUlBb2dDaWdDQkNBVktBSUVRWDl6SUFaQkgzWnhjallDQkNBWVFRUnFJUmdnREVFRWFpRU1JQXBCQkdvaENpQVZRUVJxSVJVZ0cwRUlhaUliSUJKSURRQUxDeUFFUVFScUlnUWdJVWdOQUFzTFFRRWhBaUFoUVFCTURRTWdFa0VBVEEwRElCSkIvUC8vL3dkeElnWkJBblFoQnlBU1FRUkpJUVJCQUNFSUEwQWdDeUFJSUJKc1FRSjBhaUVCQWtBQ1FDQUVCRUFnQVNFQ1FRQWhDUXdCQ3lBQklBZHFJUUpCQUNFSkEwQWdBU0FKUVFKMGFpSU5JQTM5QUFJQUlrZjlEUC8vLzMvLy8vOS8vLy8vZi8vLy8zLzlUaUpJL2FFQklFZ2dSLzBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBUDA1L1ZMOUN3SUFJQWxCQkdvaUNTQUdSdzBBQ3lBR0lna2dFa1lOQVFzRFFDQUNRUUFnQWlnQ0FDSUJRZi8vLy84SGNTSU5heUFOSUFGQkFFZ2JOZ0lBSUFKQkJHb2hBaUFKUVFGcUlna2dFa2NOQUFzTFFRRWhBaUFJUVFGcUlnZ2dJVWNOQUFzTUF3c2dJa1VOQUNBUUlCb29BaGcyQWpRZ0VDQVdOZ0l3SUIxQkFVR3h5d0FnRUVFd2FoQVREQUVMSUJBZ0NUWUNGQ0FRSUJZMkFoQWdIVUVCUWJITEFDQVFRUkJxRUJOQkFDRUNEQUVMUVFBaEFnc2dFRUd3QW1va0FDQUNEUUVNQXdzZ0F5QUJRUWwwUVpDdUFXbzJBbXdDZjBFQUlRY2dBeWdDZENFQkFrQUNRQ0FhS0FJUUlCb29BZ2hySWdvZ0dpZ0NGQ0FhS0FJTWF5SU5iQ0lHSUFNb0FvUUJTd1JBSUFFUUZDQURJQVpCQW5RUUhDSUJOZ0owUVFBZ0FVVU5BeG9nQXlBR05nS0VBUXdCQ3lBQlJRMEJDeUFCUVFBZ0JrRUNkQkFaR2dzZ0F5Z0NlQ0VCQWtBZ0NrRUNhaUlJSUExQkEycEJBbllpRmtFQ2Ftd2lCaUFES0FLSUFVMEVRQ0FHUVFKMElSc01BUXNnQVJBVUlBTWdCa0VDZENJYkVCd2lBVFlDZUNBQkRRQkJBQXdCQ3lBRElBWTJBb2dCSUFGQkFDQWJFQmthQWtBZ0NFVU5BQ0FES0FKNElnUWhBUUpBSUFoQkJFOEVRQ0FFSUFoQmZIRWlCMEVDZEdvaEFVRUFJUnNEUUNBRUlCdEJBblJxL1F3QUFDQkpBQUFnU1FBQUlFa0FBQ0JKL1FzQ0FDQWJRUVJxSWhzZ0IwY05BQXNnQnlBSVJnMEJDd05BSUFGQmdJQ0F5UVEyQWdBZ0FVRUVhaUVCSUFkQkFXb2lCeUFJUncwQUN3c2dCQ0FXUVFGcUlBaHNRUUowYWlFR1FRQWhCd0pBQWtBZ0NFRUVTUVJBSUFZaEFRd0JDeUFHSUFoQmZIRWlCMEVDZEdvaEFVRUFJUnNEUUNBR0lCdEJBblJxL1F3QUFDQkpBQUFnU1FBQUlFa0FBQ0JKL1FzQ0FDQWJRUVJxSWhzZ0IwY05BQXNnQnlBSVJnMEJDd05BSUFGQmdJQ0F5UVEyQWdBZ0FVRUVhaUVCSUFkQkFXb2lCeUFJUncwQUN3c2dEVUVEY1NJQlJRMEFRWUNBZ01nRVFZQ0FnTUFFUVlDQWdJQUVJQUZCQWtZYklBRkJBVVliSVJRZ0JDQUlJQlpzUVFKMGFpRUdRUUFoQndKQUlBaEJCRWtFUUNBR0lRRU1BUXNnQmlBSVFYeHhJZ2RCQW5ScUlRRWdGUDBSSVVoQkFDRWJBMEFnQmlBYlFRSjBhaUJJL1FzQ0FDQWJRUVJxSWhzZ0IwY05BQXNnQnlBSVJnMEJDd05BSUFFZ0ZEWUNBQ0FCUVFScUlRRWdCMEVCYWlJSElBaEhEUUFMQ3lBRElBMDJBb0FCSUFNZ0NqWUNmRUVCQzBVTkFpQWFLQUljSUJOcUlodEJIMDRFUUNBaVJRMENJQ1lnR3pZQ0VDQWRRUUpCNThNQUlDWkJFR29RRXd3REN5QURFR01nQTBId3JRRTJBbVFnQTBHUW93RTJBbUFnQTBHd293RTJBaHdnR2lnQ1FBMEFBa0FDUUNBYUtBSTBJZ2RCQVUwRVFDQUhRUUZIRFFFZ0F5Z0NrQUZGRFFFTElCb29BZ1FoQVVFQUlRWUNRQ0FIUVFSUEJFQWdCMEY4Y1NFQ0EwQWdBU0FKUVFOMGFpSUdRUnhxSUFaQkZHb2dCa0VNYWlBRy9Wd0NCUDFXQWdBQi9WWUNBQUw5VmdJQUF5QkgvYTRCSVVjZ0NVRUVhaUlKSUFKSERRQUxJRWNnUnlCSC9RMElDUW9MREEwT0R3QUJBZ01BQVFJRC9hNEJJa2NnUnlCSC9RMEVCUVlIQUFFQ0F3QUJBZ01BQVFJRC9hNEIvUnNBSVFZZ0FpQUhSZzBCQ3dOQUlBRWdBa0VEZEdvb0FnUWdCbW9oQmlBQ1FRRnFJZ0lnQjBjTkFBc0xJQU1vQXBRQklSQWdCa0VDYWlJSklBTW9BcGdCU3dSQUlCQWdDUkFiSWdGRkRRVWdBeUFCTmdLVUFTQUJJQVpxUVFBN0FBQWdBeUFKTmdLWUFTQURLQUtVQVNFUUlCb29BalJGRFFJZ0dpZ0NCQ0VCQzBFQUlRSkJBQ0VHQTBBZ0FpQVFhaUFCSUFaQkEzUWlCV29pQVNnQ0FDQUJLQUlFRUJZYUlCb29BZ1FpQVNBRmFpZ0NCQ0FDYWlFQ0lBWkJBV29pQmlBYUtBSTBTUTBBQ3d3QkN5QUhRUUZIRFFFZ0dpZ0NCQ2dDQUNFUUN5QWFLQUk4SWdFRVFDQURLQUowSVN3Z0F5QUJOZ0owQ3lBYUtBSXNCRUFnRjBFQ2NTRXRJQmRCQ0hFaEpTQURRUnhxSVJnZ0YwRUJjVVVoTGtFQ0lTRURRQ0FRSUI1cUlRRWdHaWdDQUNBb1FSaHNhaUlnS0FJQUlRVUNRQ0F1SUJzZ0dpZ0NIRUVFYTBvZ0lVRUJTM0p5SWlORkJFQWdBeUFCTmdJVUlBTWdBU0FGYWlJRk5nSVlJQU1nQlM4QUFEc0JjQ0FGUWY4Qk9nQUFJQU1vQWhoQi93RTZBQUVnQTBFQU5nSUlJQU5CQURZQ0FDQURJQUUyQWhBTUFRc2dBeUFCTmdJVUlBTWdBU0FGYWlJR05nSVlJQU1nQmk4QUFEc0JjQ0FHUWY4Qk9nQUFJQU1vQWhoQi93RTZBQUVnQXlBRFFSeHFOZ0pvSUFNZ0FUWUNFQ0FEUVFBMkFnd2dBeUFGQkg4Z0FTMEFBRUVRZEFWQmdJRDhCd3NpQlRZQ0FFRUJJUWtnQVVFQmFpRUNJQUV0QUFFaEJnSi9JQUV0QUFCQi93RkdCRUFnQmtHUUFVOEVRQ0FEUVFFMkFnd2dCVUdBL2dOeURBSUxJQU1nQWpZQ0VFRUFJUWtnQmtFSmRDQUZhZ3dCQ3lBRElBSTJBaEFnQmtFSWRDQUZjZ3NoQVNBRElBazJBZ2dnQTBHQWdBSTJBZ1FnQXlBQlFRZDBOZ0lBQ3lBZ0tBSUFJU29DUUNBYlFRQk1EUUFnSUNnQ0NFVU5BRUVBSVNrZ0xVRUFSeUFqY1NFbkEwQUNRQUpBQWtBQ1FBSkFJQ0ZCQVdzT0FnRUNBQXNnSTBVRVFFRUJJQnQwSWdGQkFYWWdBWEloQkNBREtBSjhJaFpCQW5RaURTQURLQUo0YWtFTWFpRUJJQU1vQW5RaEJrRUFJUk1nQXlnQ2dBRWlCVUVFVHdSQUlCWkZEUVVnRmtFTWJDRUhJQlpCQTNRaENrRUFJQVJySVFJRFFFRUFJUVVEUUFKQUlBRWlDU2dDQUNJQlJRMEFBa0FnQVVHUWdJQUJjUTBBSUFGQjd3TnhSUTBBSUFNb0FnQWhBUUpBSUFNb0FnZ2lDQTBBSUFGQi93RkdJUlFnQXlnQ0VDSUlMUUFBSVFFQ1FDQVVSUVJBSUFNZ0FUWUNBQ0FESUFoQkFXbzJBaEFNQVFzZ0FVR1BBVTBFUUNBRElBRTJBZ0FnQXlBSVFRRnFOZ0lRUVFjaENBd0NDMEgvQVNFQklBTkIvd0UyQWdBTFFRZ2hDQXNnQXlBSVFRRnJJZ2cyQWdnQ1FDQUJJQWgyUVFGeFJRMEFBa0FnQ0EwQUlBRkIvd0ZHSVJRZ0F5Z0NFQ0lJTFFBQUlRRUNRQ0FVUlFSQUlBTWdBVFlDQUNBRElBaEJBV28yQWhBTUFRc2dBVUdQQVUwRVFDQURJQUUyQWdBZ0F5QUlRUUZxTmdJUVFRY2hDQXdDQzBIL0FTRUJJQU5CL3dFMkFnQUxRUWdoQ0FzZ0F5QUlRUUZySWdnMkFnZ2dCaUFDSUFRZ0FTQUlka0VCY1NJSUd6WUNBQ0FES0FKOElRRWdDVUVFYXlJVUlCUW9BZ0JCSUhJMkFnQWdDU0FKS0FJRVFRaHlOZ0lFSUFrZ0NTZ0NBQ0FJUVJOMGNrRVFjallDQUNBbERRQWdDVUYrSUFGclFRSjBhaUlCSUFFb0FnUkJnSUFDY2pZQ0JDQUJJQUVvQWdBZ0NFRWZkSEpCZ0lBRWNqWUNBQ0FCUVFScklnRWdBU2dDQUVHQWdBaHlOZ0lBQ3lBSklBa29BZ0JCZ0lDQUFYSWlBVFlDQUFzQ1FDQUJRWUNCZ0FoeERRQWdBVUg0SG5GRkRRQWdBeWdDQUNFQkFrQWdBeWdDQ0NJSURRQWdBVUgvQVVZaEZDQURLQUlRSWdndEFBQWhBUUpBSUJSRkJFQWdBeUFCTmdJQUlBTWdDRUVCYWpZQ0VBd0JDeUFCUVk4QlRRUkFJQU1nQVRZQ0FDQURJQWhCQVdvMkFoQkJCeUVJREFJTFFmOEJJUUVnQTBIL0FUWUNBQXRCQ0NFSUN5QURJQWhCQVdzaUNEWUNDQ0FKQW44Z0FTQUlka0VCY1VVRVFDQUpLQUlBREFFTEFrQWdDQTBBSUFGQi93RkdJUlFnQXlnQ0VDSUlMUUFBSVFFQ1FDQVVSUVJBSUFNZ0FUWUNBQ0FESUFoQkFXbzJBaEFNQVFzZ0FVR1BBVTBFUUNBRElBRTJBZ0FnQXlBSVFRRnFOZ0lRUVFjaENBd0NDMEgvQVNFQklBTkIvd0UyQWdBTFFRZ2hDQXNnQXlBSVFRRnJJZ2cyQWdnZ0JpQU5haUFDSUFRZ0FTQUlka0VCY1NJQkd6WUNBQ0FKUVFScklnZ2dDQ2dDQUVHQUFuSTJBZ0FnQ1NBSktBSUVRY0FBY2pZQ0JDQUpLQUlBSUFGQkZuUnlRWUFCY2d0QmdJQ0FDSElpQVRZQ0FBc0NRQ0FCUVlDSWdNQUFjUTBBSUFGQndQY0JjVVVOQUNBREtBSUFJUUVDUUNBREtBSUlJZ2dOQUNBQlFmOEJSaUVVSUFNb0FoQWlDQzBBQUNFQkFrQWdGRVVFUUNBRElBRTJBZ0FnQXlBSVFRRnFOZ0lRREFFTElBRkJqd0ZOQkVBZ0F5QUJOZ0lBSUFNZ0NFRUJhallDRUVFSElRZ01BZ3RCL3dFaEFTQURRZjhCTmdJQUMwRUlJUWdMSUFNZ0NFRUJheUlJTmdJSUlBa0NmeUFCSUFoMlFRRnhSUVJBSUFrb0FnQU1BUXNDUUNBSURRQWdBVUgvQVVZaEZDQURLQUlRSWdndEFBQWhBUUpBSUJSRkJFQWdBeUFCTmdJQUlBTWdDRUVCYWpZQ0VBd0JDeUFCUVk4QlRRUkFJQU1nQVRZQ0FDQURJQWhCQVdvMkFoQkJCeUVJREFJTFFmOEJJUUVnQTBIL0FUWUNBQXRCQ0NFSUN5QURJQWhCQVdzaUNEWUNDQ0FHSUFwcUlBSWdCQ0FCSUFoMlFRRnhJZ0ViTmdJQUlBbEJCR3NpQ0NBSUtBSUFRWUFRY2pZQ0FDQUpJQWtvQWdSQmdBUnlOZ0lFSUFrb0FnQWdBVUVaZEhKQmdBaHlDMEdBZ0lEQUFISWlBVFlDQUFzZ0FVR0F3SUNBQkhFTkFDQUJRWUM4RDNGRkRRQWdBeWdDQUNFQkFrQWdBeWdDQ0NJSURRQWdBVUgvQVVZaEZDQURLQUlRSWdndEFBQWhBUUpBSUJSRkJFQWdBeUFCTmdJQUlBTWdDRUVCYWpZQ0VBd0JDeUFCUVk4QlRRUkFJQU1nQVRZQ0FDQURJQWhCQVdvMkFoQkJCeUVJREFJTFFmOEJJUUVnQTBIL0FUWUNBQXRCQ0NFSUN5QURJQWhCQVdzaUNEWUNDQ0FCSUFoMlFRRnhCRUFDUUNBSURRQWdBVUgvQVVZaEZDQURLQUlRSWdndEFBQWhBUUpBSUJSRkJFQWdBeUFCTmdJQUlBTWdDRUVCYWpZQ0VBd0JDeUFCUVk4QlRRUkFJQU1nQVRZQ0FDQURJQWhCQVdvMkFoQkJCeUVJREFJTFFmOEJJUUVnQTBIL0FUWUNBQXRCQ0NFSUN5QURJQWhCQVdzaUNEWUNDQ0FHSUFkcUlBSWdCQ0FCSUFoMlFRRnhJZ2diTmdJQUlBTW9BbndoQVNBSlFRUnJJaFFnRkNnQ0FFR0FnQUZ5TmdJQUlBa2dDU2dDQkVHQUlISTJBZ1FnQ1NBSktBSUFJQWhCSEhSeVFZREFBSEkyQWdBZ0NTQUJRUUowYWlJQklBRW9BZ1JCQkhJMkFnUWdBU0FCS0FJTVFRRnlOZ0lNSUFFZ0FTZ0NDQ0FJUVJKMGNrRUNjallDQ0FzZ0NTQUpLQUlBUVlDQWdJQUVjallDQUFzZ0JrRUVhaUVHSUFsQkJHb2hBU0FGUVFGcUlnVWdGa2NOQUFzZ0JpQUhhaUVHSUFsQkRHb2hBU0FUUVFScUloTWdBeWdDZ0FFaUJVRjhjVWtOQUFzTElBVWdFMDBOQXlBV1JRMERRUUFoQ2tFQUlBUnJJUTRnQlNFSUEwQUNRQ0FJSUJOR0JFQWdFeUVJREFFTElBRkJCR3NoRkNBQktBSUFJUTFCQUNFQ0EwQUNRQ0FOSUFKQkEyd2lDWFlpQjBHUWdJQUJjUTBBSUFkQjd3TnhSUTBBSUFNb0FnQWhCUUpBSUFNb0FnZ2lCdzBBSUFWQi93RkhJUWdnQXlnQ0VDSUhMUUFBSVFVQ1FDQUlSUVJBSUFWQmtBRlBCRUJCL3dFaEJTQURRZjhCTmdJQURBSUxJQU1nQlRZQ0FDQURJQWRCQVdvMkFoQkJCeUVIREFJTElBTWdCVFlDQUNBRElBZEJBV28yQWhBTFFRZ2hCd3NnQXlBSFFRRnJJZ2MyQWdnQ1FDQUZJQWQyUVFGeFJRMEFJQVlnQWlBV2JFRUNkR29DUUNBSERRQWdCVUgvQVVjaERTQURLQUlRSWdjdEFBQWhCUUpBSUExRkJFQWdCVUdRQVU4RVFFSC9BU0VGSUFOQi93RTJBZ0FNQWdzZ0F5QUZOZ0lBSUFNZ0IwRUJhallDRUVFSElRY01BZ3NnQXlBRk5nSUFJQU1nQjBFQmFqWUNFQXRCQ0NFSEN5QURJQWRCQVdzaUJ6WUNDQ0FPSUFRZ0JTQUhka0VCY1NJSEd6WUNBQ0FES0FKOElRZ2dGQ0FVS0FJQVFTQWdDWFJ5TmdJQUlBRWdBU2dDQUNBSFFSTjBRUkJ5SUFsMGNqWUNBQ0FCSUFFb0FnUkJDQ0FKZEhJMkFnUWdBaUFsY2tVRVFDQUJRWDRnQ0d0QkFuUnFJZ1VnQlNnQ0JFR0FnQUp5TmdJRUlBVWdCU2dDQUNBSFFSOTBja0dBZ0FSeU5nSUFJQVZCQkdzaUJTQUZLQUlBUVlDQUNISTJBZ0FMSUFKQkEwY05BQ0FCSUFoQkFuUnFJZ1VnQlNnQ0JFRUVjallDQkNBRklBVW9BZ3hCQVhJMkFnd2dCU0FGS0FJSUlBZEJFblJ5UVFKeU5nSUlDeUFCSUFFb0FnQkJnSUNBQVNBSmRISWlEVFlDQUNBREtBS0FBU0VGQ3lBRklRZ2dBa0VCYWlJQ0lBVWdFMnRKRFFBTEN5QUdRUVJxSVFZZ0FVRUVhaUVCSUFwQkFXb2lDaUFXUncwQUN3d0RDMEVBSVFsQkFDRVdRUUFoQ2dKQUFrQUNRQUpBSUFNb0Fud2lCRUhBQUVjTkFDQURLQUtBQVVIQUFFY05BRUVBUVFFZ0czUWlBVUVCZGlBQmNpSVRheUVVSUFOQkhHb2hCQ0FES0FKNFFZd0NhaUVHSUFNb0FnZ2hDQ0FES0FJRUlRVWdBeWdDQUNFSElBTW9BbWdoRFNBREtBSjBJUUVnRjBFSWNRMEJBMEJCQUNFS0EwQWdBU0VDSUFZaUNTZ0NBQ0lHQkVBQ1FDQUdRWkNBZ0FGeERRQWdCa0h2QTNFaUFVVU5BQ0FGSUFRZ0F5Z0NiQ0FCYWkwQUFFRUNkR29pRFNnQ0FDSU9LQUlBSWdGcklRVUNmeUFCSUFkQkVIWkxCRUFnRGlnQ0JDRU1JQTBnRGtFSVFRd2dBU0FGU3lJTEcyb29BZ0EyQWdBRFFBSkFJQWdOQUNBREtBSVFJZ2hCQVdvaERpQUlMUUFCSVFVZ0NDMEFBRUgvQVVZRVFDQUZRWkFCVHdSQUlBTWdBeWdDREVFQmFqWUNEQ0FIUVlEK0Eyb2hCMEVJSVFnTUFnc2dBeUFPTmdJUUlBVkJDWFFnQjJvaEIwRUhJUWdNQVFzZ0F5QU9OZ0lRUVFnaENDQUZRUWgwSUFkcUlRY0xJQWhCQVdzaENDQUhRUUYwSVFjZ0FVRUJkQ0lCUVlDQUFra05BQXNnQVNFRklBd2dERVVnQ3hzTUFRc2dCeUFCUVJCMGF5RUhJQVZCZ0lBQ2NVVUVRQ0FPS0FJRUlRd2dEU0FPUVF4QkNDQUJJQVZMSWdzYmFpZ0NBRFlDQUFOQUFrQWdDQTBBSUFNb0FoQWlDRUVCYWlFT0lBZ3RBQUVoQVNBSUxRQUFRZjhCUmdSQUlBRkJrQUZQQkVBZ0F5QURLQUlNUVFGcU5nSU1JQWRCZ1A0RGFpRUhRUWdoQ0F3Q0N5QURJQTQyQWhBZ0FVRUpkQ0FIYWlFSFFRY2hDQXdCQ3lBRElBNDJBaEJCQ0NFSUlBRkJDSFFnQjJvaEJ3c2dDRUVCYXlFSUlBZEJBWFFoQnlBRlFRRjBJZ1ZCZ0lBQ1NRMEFDeUFNUlNBTUlBc2JEQUVMSUE0b0FnUUxCSDhnQlNBRUlBa29BZ1JCRVhaQkJIRWdDVUVFYXlJTUtBSUFRUk4yUVFGeElBWkJEblpCRUhFZ0JrRVFka0hBQUhFZ0JrR3FBWEZ5Y25KeUlndEJrTDRCYWkwQUFFRUNkR29pRFNnQ0FDSU9LQUlBSWdGcklRVWdDMEdRd0FGcUxRQUFJUXNnQWlBVElCUWdDd0ovSUFFZ0IwRVFka3NFUUNBT0tBSUVJUkVnRFNBT1FRaEJEQ0FCSUFWTEloVWJhaWdDQURZQ0FBTkFBa0FnQ0EwQUlBTW9BaEFpQ0VFQmFpRU9JQWd0QUFFaEJTQUlMUUFBUWY4QlJnUkFJQVZCa0FGUEJFQWdBeUFES0FJTVFRRnFOZ0lNSUFkQmdQNERhaUVIUVFnaENBd0NDeUFESUE0MkFoQWdCVUVKZENBSGFpRUhRUWNoQ0F3QkN5QURJQTQyQWhCQkNDRUlJQVZCQ0hRZ0Iyb2hCd3NnQ0VFQmF5RUlJQWRCQVhRaEJ5QUJRUUYwSWdGQmdJQUNTUTBBQ3lBQklRVWdFU0FSUlNBVkd3d0JDeUFISUFGQkVIUnJJUWNnQlVHQWdBSnhSUVJBSUE0b0FnUWhFU0FOSUE1QkRFRUlJQUVnQlVzaUZSdHFLQUlBTmdJQUEwQUNRQ0FJRFFBZ0F5Z0NFQ0lJUVFGcUlRNGdDQzBBQVNFQklBZ3RBQUJCL3dGR0JFQWdBVUdRQVU4RVFDQURJQU1vQWd4QkFXbzJBZ3dnQjBHQS9nTnFJUWRCQ0NFSURBSUxJQU1nRGpZQ0VDQUJRUWwwSUFkcUlRZEJCeUVJREFFTElBTWdEallDRUVFSUlRZ2dBVUVJZENBSGFpRUhDeUFJUVFGcklRZ2dCMEVCZENFSElBVkJBWFFpQlVHQWdBSkpEUUFMSUJGRklCRWdGUnNNQVFzZ0RpZ0NCQXNpQVVZYk5nSUFJQXdnRENnQ0FFRWdjallDQUNBSklBa29BZ1JCQ0hJMkFnUWdDVUdNQW1zaURpQU9LQUlBUVlDQUNISTJBZ0FnQ1VHRUFtc2lEaUFPS0FJQVFZQ0FBbkkyQWdBZ0NVR0lBbXNpRGlBT0tBSUFJQUVnQzNNaUFVRWZkSEpCZ0lBRWNqWUNBQ0FHSUFGQkUzUnlRUkJ5QlNBR0MwR0FnSUFCY2lFR0N3SkFJQVpCZ0lHQUNIRU5BQ0FHUWZnZWNVVU5BQ0FGSUFRZ0F5Z0NiQ0FHUVFOMklndEI3d054YWkwQUFFRUNkR29pRFNnQ0FDSU9LQUlBSWdGcklRVUNmeUFCSUFkQkVIWkxCRUFnRGlnQ0JDRU1JQTBnRGtFSVFRd2dBU0FGU3lJUkcyb29BZ0EyQWdBRFFBSkFJQWdOQUNBREtBSVFJZ2hCQVdvaERpQUlMUUFCSVFVZ0NDMEFBRUgvQVVZRVFDQUZRWkFCVHdSQUlBTWdBeWdDREVFQmFqWUNEQ0FIUVlEK0Eyb2hCMEVJSVFnTUFnc2dBeUFPTmdJUUlBVkJDWFFnQjJvaEIwRUhJUWdNQVFzZ0F5QU9OZ0lRUVFnaENDQUZRUWgwSUFkcUlRY0xJQWhCQVdzaENDQUhRUUYwSVFjZ0FVRUJkQ0lCUVlDQUFra05BQXNnQVNFRklBd2dERVVnRVJzTUFRc2dCeUFCUVJCMGF5RUhJQVZCZ0lBQ2NVVUVRQ0FPS0FJRUlRd2dEU0FPUVF4QkNDQUJJQVZMSWhFYmFpZ0NBRFlDQUFOQUFrQWdDQTBBSUFNb0FoQWlDRUVCYWlFT0lBZ3RBQUVoQVNBSUxRQUFRZjhCUmdSQUlBRkJrQUZQQkVBZ0F5QURLQUlNUVFGcU5nSU1JQWRCZ1A0RGFpRUhRUWdoQ0F3Q0N5QURJQTQyQWhBZ0FVRUpkQ0FIYWlFSFFRY2hDQXdCQ3lBRElBNDJBaEJCQ0NFSUlBRkJDSFFnQjJvaEJ3c2dDRUVCYXlFSUlBZEJBWFFoQnlBRlFRRjBJZ1ZCZ0lBQ1NRMEFDeUFNUlNBTUlCRWJEQUVMSUE0b0FnUUxCSDhnQlNBRUlBa29BZ1JCRkhaQkJIRWdDVUVFYXlJTUtBSUFRUloyUVFGeElBWkJEM1pCRUhFZ0JrRVRka0hBQUhFZ0MwR3FBWEZ5Y25KeUlndEJrTDRCYWkwQUFFRUNkR29pRFNnQ0FDSU9LQUlBSWdGcklRVWdDMEdRd0FGcUxRQUFJUXNnQWlBVElCUWdDd0ovSUFFZ0IwRVFka3NFUUNBT0tBSUVJUkVnRFNBT1FRaEJEQ0FCSUFWTEloVWJhaWdDQURZQ0FBTkFBa0FnQ0EwQUlBTW9BaEFpQ0VFQmFpRU9JQWd0QUFFaEJTQUlMUUFBUWY4QlJnUkFJQVZCa0FGUEJFQWdBeUFES0FJTVFRRnFOZ0lNSUFkQmdQNERhaUVIUVFnaENBd0NDeUFESUE0MkFoQWdCVUVKZENBSGFpRUhRUWNoQ0F3QkN5QURJQTQyQWhCQkNDRUlJQVZCQ0hRZ0Iyb2hCd3NnQ0VFQmF5RUlJQWRCQVhRaEJ5QUJRUUYwSWdGQmdJQUNTUTBBQ3lBQklRVWdFU0FSUlNBVkd3d0JDeUFISUFGQkVIUnJJUWNnQlVHQWdBSnhSUVJBSUE0b0FnUWhFU0FOSUE1QkRFRUlJQUVnQlVzaUZSdHFLQUlBTmdJQUEwQUNRQ0FJRFFBZ0F5Z0NFQ0lJUVFGcUlRNGdDQzBBQVNFQklBZ3RBQUJCL3dGR0JFQWdBVUdRQVU4RVFDQURJQU1vQWd4QkFXbzJBZ3dnQjBHQS9nTnFJUWRCQ0NFSURBSUxJQU1nRGpZQ0VDQUJRUWwwSUFkcUlRZEJCeUVJREFFTElBTWdEallDRUVFSUlRZ2dBVUVJZENBSGFpRUhDeUFJUVFGcklRZ2dCMEVCZENFSElBVkJBWFFpQlVHQWdBSkpEUUFMSUJGRklCRWdGUnNNQVFzZ0RpZ0NCQXNpQVVZYk5nS0FBaUFNSUF3b0FnQkJnQUp5TmdJQUlBa2dDU2dDQkVIQUFISTJBZ1FnQmlBQklBdHpRUlowY2tHQUFYSUZJQVlMUVlDQWdBaHlJUVlMQWtBZ0JrR0FpSURBQUhFTkFDQUdRY0QzQVhGRkRRQWdCU0FFSUFNb0Ftd2dCa0VHZGlJTFFlOERjV290QUFCQkFuUnFJZzBvQWdBaURpZ0NBQ0lCYXlFRkFuOGdBU0FIUVJCMlN3UkFJQTRvQWdRaERDQU5JQTVCQ0VFTUlBRWdCVXNpRVJ0cUtBSUFOZ0lBQTBBQ1FDQUlEUUFnQXlnQ0VDSUlRUUZxSVE0Z0NDMEFBU0VGSUFndEFBQkIvd0ZHQkVBZ0JVR1FBVThFUUNBRElBTW9BZ3hCQVdvMkFnd2dCMEdBL2dOcUlRZEJDQ0VJREFJTElBTWdEallDRUNBRlFRbDBJQWRxSVFkQkJ5RUlEQUVMSUFNZ0RqWUNFRUVJSVFnZ0JVRUlkQ0FIYWlFSEN5QUlRUUZySVFnZ0IwRUJkQ0VISUFGQkFYUWlBVUdBZ0FKSkRRQUxJQUVoQlNBTUlBeEZJQkViREFFTElBY2dBVUVRZEdzaEJ5QUZRWUNBQW5GRkJFQWdEaWdDQkNFTUlBMGdEa0VNUVFnZ0FTQUZTeUlSRzJvb0FnQTJBZ0FEUUFKQUlBZ05BQ0FES0FJUUlnaEJBV29oRGlBSUxRQUJJUUVnQ0MwQUFFSC9BVVlFUUNBQlFaQUJUd1JBSUFNZ0F5Z0NERUVCYWpZQ0RDQUhRWUQrQTJvaEIwRUlJUWdNQWdzZ0F5QU9OZ0lRSUFGQkNYUWdCMm9oQjBFSElRZ01BUXNnQXlBT05nSVFRUWdoQ0NBQlFRaDBJQWRxSVFjTElBaEJBV3NoQ0NBSFFRRjBJUWNnQlVFQmRDSUZRWUNBQWtrTkFBc2dERVVnRENBUkd3d0JDeUFPS0FJRUN3Ui9JQVVnQkNBSktBSUVRUmQyUVFSeElBbEJCR3NpRENnQ0FFRVpka0VCY1NBR1FSSjJRUkJ4SUFaQkZuWkJ3QUJ4SUF0QnFnRnhjbkp5Y2lJTFFaQytBV290QUFCQkFuUnFJZzBvQWdBaURpZ0NBQ0lCYXlFRklBdEJrTUFCYWkwQUFDRUxJQUlnRXlBVUlBc0NmeUFCSUFkQkVIWkxCRUFnRGlnQ0JDRVJJQTBnRGtFSVFRd2dBU0FGU3lJVkcyb29BZ0EyQWdBRFFBSkFJQWdOQUNBREtBSVFJZ2hCQVdvaERpQUlMUUFCSVFVZ0NDMEFBRUgvQVVZRVFDQUZRWkFCVHdSQUlBTWdBeWdDREVFQmFqWUNEQ0FIUVlEK0Eyb2hCMEVJSVFnTUFnc2dBeUFPTmdJUUlBVkJDWFFnQjJvaEIwRUhJUWdNQVFzZ0F5QU9OZ0lRUVFnaENDQUZRUWgwSUFkcUlRY0xJQWhCQVdzaENDQUhRUUYwSVFjZ0FVRUJkQ0lCUVlDQUFra05BQXNnQVNFRklCRWdFVVVnRlJzTUFRc2dCeUFCUVJCMGF5RUhJQVZCZ0lBQ2NVVUVRQ0FPS0FJRUlSRWdEU0FPUVF4QkNDQUJJQVZMSWhVYmFpZ0NBRFlDQUFOQUFrQWdDQTBBSUFNb0FoQWlDRUVCYWlFT0lBZ3RBQUVoQVNBSUxRQUFRZjhCUmdSQUlBRkJrQUZQQkVBZ0F5QURLQUlNUVFGcU5nSU1JQWRCZ1A0RGFpRUhRUWdoQ0F3Q0N5QURJQTQyQWhBZ0FVRUpkQ0FIYWlFSFFRY2hDQXdCQ3lBRElBNDJBaEJCQ0NFSUlBRkJDSFFnQjJvaEJ3c2dDRUVCYXlFSUlBZEJBWFFoQnlBRlFRRjBJZ1ZCZ0lBQ1NRMEFDeUFSUlNBUklCVWJEQUVMSUE0b0FnUUxJZ0ZHR3pZQ2dBUWdEQ0FNS0FJQVFZQVFjallDQUNBSklBa29BZ1JCZ0FSeU5nSUVJQVlnQVNBTGMwRVpkSEpCZ0FoeUJTQUdDMEdBZ0lEQUFISWhCZ3NDUUNBR1FZREFnSUFFY1EwQUlBWkJnTHdQY1VVTkFDQUZJQVFnQXlnQ2JDQUdRUWwySWd0Qjd3TnhhaTBBQUVFQ2RHb2lEU2dDQUNJT0tBSUFJZ0ZySVFVQ2Z5QUJJQWRCRUhaTEJFQWdEaWdDQkNFTUlBMGdEa0VJUVF3Z0FTQUZTeUlSRzJvb0FnQTJBZ0FEUUFKQUlBZ05BQ0FES0FJUUlnaEJBV29oRGlBSUxRQUJJUVVnQ0MwQUFFSC9BVVlFUUNBRlFaQUJUd1JBSUFNZ0F5Z0NERUVCYWpZQ0RDQUhRWUQrQTJvaEIwRUlJUWdNQWdzZ0F5QU9OZ0lRSUFWQkNYUWdCMm9oQjBFSElRZ01BUXNnQXlBT05nSVFRUWdoQ0NBRlFRaDBJQWRxSVFjTElBaEJBV3NoQ0NBSFFRRjBJUWNnQVVFQmRDSUJRWUNBQWtrTkFBc2dBU0VGSUF3Z0RFVWdFUnNNQVFzZ0J5QUJRUkIwYXlFSElBVkJnSUFDY1VVRVFDQU9LQUlFSVF3Z0RTQU9RUXhCQ0NBQklBVkxJaEViYWlnQ0FEWUNBQU5BQWtBZ0NBMEFJQU1vQWhBaUNFRUJhaUVPSUFndEFBRWhBU0FJTFFBQVFmOEJSZ1JBSUFGQmtBRlBCRUFnQXlBREtBSU1RUUZxTmdJTUlBZEJnUDREYWlFSFFRZ2hDQXdDQ3lBRElBNDJBaEFnQVVFSmRDQUhhaUVIUVFjaENBd0JDeUFESUE0MkFoQkJDQ0VJSUFGQkNIUWdCMm9oQndzZ0NFRUJheUVJSUFkQkFYUWhCeUFGUVFGMElnVkJnSUFDU1EwQUN5QU1SU0FNSUJFYkRBRUxJQTRvQWdRTEJIOGdCU0FFSUFrb0FnUkJHblpCQkhFZ0NVRUVheUlNS0FJQVFSeDJRUUZ4SUFaQkZYWkJFSEVnQmtFWmRrSEFBSEVnQzBHcUFYRnljbkp5SWd0QmtMNEJhaTBBQUVFQ2RHb2lEU2dDQUNJT0tBSUFJZ0ZySVFVZ0MwR1F3QUZxTFFBQUlRc2dBaUFUSUJRZ0N3Si9JQUVnQjBFUWRrc0VRQ0FPS0FJRUlSRWdEU0FPUVFoQkRDQUJJQVZMSWhVYmFpZ0NBRFlDQUFOQUFrQWdDQTBBSUFNb0FoQWlDRUVCYWlFT0lBZ3RBQUVoQlNBSUxRQUFRZjhCUmdSQUlBVkJrQUZQQkVBZ0F5QURLQUlNUVFGcU5nSU1JQWRCZ1A0RGFpRUhRUWdoQ0F3Q0N5QURJQTQyQWhBZ0JVRUpkQ0FIYWlFSFFRY2hDQXdCQ3lBRElBNDJBaEJCQ0NFSUlBVkJDSFFnQjJvaEJ3c2dDRUVCYXlFSUlBZEJBWFFoQnlBQlFRRjBJZ0ZCZ0lBQ1NRMEFDeUFCSVFVZ0VTQVJSU0FWR3d3QkN5QUhJQUZCRUhScklRY2dCVUdBZ0FKeFJRUkFJQTRvQWdRaEVTQU5JQTVCREVFSUlBRWdCVXNpRlJ0cUtBSUFOZ0lBQTBBQ1FDQUlEUUFnQXlnQ0VDSUlRUUZxSVE0Z0NDMEFBU0VCSUFndEFBQkIvd0ZHQkVBZ0FVR1FBVThFUUNBRElBTW9BZ3hCQVdvMkFnd2dCMEdBL2dOcUlRZEJDQ0VJREFJTElBTWdEallDRUNBQlFRbDBJQWRxSVFkQkJ5RUlEQUVMSUFNZ0RqWUNFRUVJSVFnZ0FVRUlkQ0FIYWlFSEN5QUlRUUZySVFnZ0IwRUJkQ0VISUFWQkFYUWlCVUdBZ0FKSkRRQUxJQkZGSUJFZ0ZSc01BUXNnRGlnQ0JBc2lBVVliTmdLQUJpQU1JQXdvQWdCQmdJQUJjallDQUNBSklBa29BZ1JCZ0NCeU5nSUVJQWtnQ1NnQ2hBSkJCSEkyQW9RQ0lBa2dDU2dDakFKQkFYSTJBb3dDSUFrZ0NTZ0NpQUlnQVNBTGN5SUJRUkowY2tFQ2NqWUNpQUlnQmlBQlFSeDBja0dBd0FCeUJTQUdDMEdBZ0lDQUJISWhCZ3NnQ1NBR05nSUFDeUFKUVFScUlRWWdBa0VFYWlFQklBcEJBV29pQ2tIQUFFY05BQXNnQ1VFTWFpRUdJQUpCaEFacUlRRWdGa0U4U1NBV1FRUnFJUllOQUFzTUFndEJBU0FiZENJQlFRRjJJQUZ5SVJZZ0F5Z0NlQ0lDSUFSQkFuUnFRUXhxSVFZZ0F5Z0NnQUVoQVNBREtBSUlJUWdnQXlnQ0JDRUZJQU1vQWdBaEJ5QURLQUpvSVEwZ0F5Z0NkQ0VUQWtBZ0YwRUljUVJBQWtBZ0FVRUVTUTBBSUFRRVFDQUVRUXhzSVJFZ0JFRURkQ0VrUVFBZ0Ztc2hDeUFEUVJ4cUlSUURRRUVBSVE0RFFDQUdJZ0lvQWdBaUJnUkFBa0FnQmtHUWdJQUJjUTBBSUFaQjd3TnhJZ0ZGRFFBZ0JTQVVJQU1vQW13Z0FXb3RBQUJCQW5ScUlnMG9BZ0FpRENnQ0FDSUJheUVGQW44Z0FTQUhRUkIyVFFSQUlBY2dBVUVRZEdzaEJ5QUZRWUNBQW5FRVFDQU1LQUlFREFJTElBd29BZ1FoRlNBTklBeEJERUVJSUFFZ0JVc2lFaHRxS0FJQU5nSUFBMEFDUUNBSURRQWdBeWdDRUNJSVFRRnFJUXdnQ0MwQUFTRUJJQWd0QUFCQi93RkhCRUFnQXlBTU5nSVFRUWdoQ0NBQlFRaDBJQWRxSVFjTUFRc2dBVUdQQVUwRVFDQURJQXcyQWhBZ0FVRUpkQ0FIYWlFSFFRY2hDQXdCQ3lBRElBTW9BZ3hCQVdvMkFnd2dCMEdBL2dOcUlRZEJDQ0VJQ3lBSVFRRnJJUWdnQjBFQmRDRUhJQVZCQVhRaUJVR0FnQUpKRFFBTElCVkZJQlVnRWhzTUFRc2dEQ2dDQkNFVklBMGdERUVJUVF3Z0FTQUZTeUlTRzJvb0FnQTJBZ0FEUUFKQUlBZ05BQ0FES0FJUUlnaEJBV29oRENBSUxRQUJJUVVnQ0MwQUFFSC9BVWNFUUNBRElBdzJBaEJCQ0NFSUlBVkJDSFFnQjJvaEJ3d0JDeUFGUVk4QlRRUkFJQU1nRERZQ0VDQUZRUWwwSUFkcUlRZEJCeUVJREFFTElBTWdBeWdDREVFQmFqWUNEQ0FIUVlEK0Eyb2hCMEVJSVFnTElBaEJBV3NoQ0NBSFFRRjBJUWNnQVVFQmRDSUJRWUNBQWtrTkFBc2dBU0VGSUJVZ0ZVVWdFaHNMQkg4Z0JTQVVJQUlvQWdSQkVYWkJCSEVnQWtFRWF5SVZLQUlBUVJOMlFRRnhJQVpCRG5aQkVIRWdCa0VRZGtIQUFIRWdCa0dxQVhGeWNuSnlJaEpCa0w0QmFpMEFBRUVDZEdvaURTZ0NBQ0lNS0FJQUlnRnJJUVVnRWtHUXdBRnFMUUFBSVJJZ0V5QVdJQXNnRWdKL0lBRWdCMEVRZGswRVFDQUhJQUZCRUhScklRY2dCVUdBZ0FKeEJFQWdEQ2dDQkF3Q0N5QU1LQUlFSVE4Z0RTQU1RUXhCQ0NBQklBVkxJaHdiYWlnQ0FEWUNBQU5BQWtBZ0NBMEFJQU1vQWhBaUNFRUJhaUVNSUFndEFBRWhBU0FJTFFBQVFmOEJSd1JBSUFNZ0REWUNFRUVJSVFnZ0FVRUlkQ0FIYWlFSERBRUxJQUZCandGTkJFQWdBeUFNTmdJUUlBRkJDWFFnQjJvaEIwRUhJUWdNQVFzZ0F5QURLQUlNUVFGcU5nSU1JQWRCZ1A0RGFpRUhRUWdoQ0FzZ0NFRUJheUVJSUFkQkFYUWhCeUFGUVFGMElnVkJnSUFDU1EwQUN5QVBSU0FQSUJ3YkRBRUxJQXdvQWdRaER5QU5JQXhCQ0VFTUlBRWdCVXNpSEJ0cUtBSUFOZ0lBQTBBQ1FDQUlEUUFnQXlnQ0VDSUlRUUZxSVF3Z0NDMEFBU0VGSUFndEFBQkIvd0ZIQkVBZ0F5QU1OZ0lRUVFnaENDQUZRUWgwSUFkcUlRY01BUXNnQlVHUEFVMEVRQ0FESUF3MkFoQWdCVUVKZENBSGFpRUhRUWNoQ0F3QkN5QURJQU1vQWd4QkFXbzJBZ3dnQjBHQS9nTnFJUWRCQ0NFSUN5QUlRUUZySVFnZ0IwRUJkQ0VISUFGQkFYUWlBVUdBZ0FKSkRRQUxJQUVoQlNBUElBOUZJQndiQ3lJQlJoczJBZ0FnRlNBVktBSUFRU0J5TmdJQUlBSWdBaWdDQkVFSWNqWUNCQ0FHSUFFZ0VuTkJFM1J5UVJCeUJTQUdDMEdBZ0lBQmNpRUdDd0pBSUFaQmdJR0FDSEVOQUNBR1FmZ2VjVVVOQUNBRklCUWdBeWdDYkNBR1FRTjJJaEpCN3dOeGFpMEFBRUVDZEdvaURTZ0NBQ0lNS0FJQUlnRnJJUVVDZnlBQklBZEJFSFpOQkVBZ0J5QUJRUkIwYXlFSElBVkJnSUFDY1FSQUlBd29BZ1FNQWdzZ0RDZ0NCQ0VWSUEwZ0RFRU1RUWdnQVNBRlN5SVBHMm9vQWdBMkFnQURRQUpBSUFnTkFDQURLQUlRSWdoQkFXb2hEQ0FJTFFBQklRRWdDQzBBQUVIL0FVY0VRQ0FESUF3MkFoQkJDQ0VJSUFGQkNIUWdCMm9oQnd3QkN5QUJRWThCVFFSQUlBTWdERFlDRUNBQlFRbDBJQWRxSVFkQkJ5RUlEQUVMSUFNZ0F5Z0NERUVCYWpZQ0RDQUhRWUQrQTJvaEIwRUlJUWdMSUFoQkFXc2hDQ0FIUVFGMElRY2dCVUVCZENJRlFZQ0FBa2tOQUFzZ0ZVVWdGU0FQR3d3QkN5QU1LQUlFSVJVZ0RTQU1RUWhCRENBQklBVkxJZzhiYWlnQ0FEWUNBQU5BQWtBZ0NBMEFJQU1vQWhBaUNFRUJhaUVNSUFndEFBRWhCU0FJTFFBQVFmOEJSd1JBSUFNZ0REWUNFRUVJSVFnZ0JVRUlkQ0FIYWlFSERBRUxJQVZCandGTkJFQWdBeUFNTmdJUUlBVkJDWFFnQjJvaEIwRUhJUWdNQVFzZ0F5QURLQUlNUVFGcU5nSU1JQWRCZ1A0RGFpRUhRUWdoQ0FzZ0NFRUJheUVJSUFkQkFYUWhCeUFCUVFGMElnRkJnSUFDU1EwQUN5QUJJUVVnRlNBVlJTQVBHd3NFZnlBRklCUWdBaWdDQkVFVWRrRUVjU0FDUVFSckloVW9BZ0JCRm5aQkFYRWdCa0VQZGtFUWNTQUdRUk4yUWNBQWNTQVNRYW9CY1hKeWNuSWlFa0dRdmdGcUxRQUFRUUowYWlJTktBSUFJZ3dvQWdBaUFXc2hCU0FTUVpEQUFXb3RBQUFoRWlBVElBUkJBblJxSUJZZ0N5QVNBbjhnQVNBSFFSQjJUUVJBSUFjZ0FVRVFkR3NoQnlBRlFZQ0FBbkVFUUNBTUtBSUVEQUlMSUF3b0FnUWhEeUFOSUF4QkRFRUlJQUVnQlVzaUhCdHFLQUlBTmdJQUEwQUNRQ0FJRFFBZ0F5Z0NFQ0lJUVFGcUlRd2dDQzBBQVNFQklBZ3RBQUJCL3dGSEJFQWdBeUFNTmdJUVFRZ2hDQ0FCUVFoMElBZHFJUWNNQVFzZ0FVR1BBVTBFUUNBRElBdzJBaEFnQVVFSmRDQUhhaUVIUVFjaENBd0JDeUFESUFNb0FneEJBV28yQWd3Z0IwR0EvZ05xSVFkQkNDRUlDeUFJUVFGcklRZ2dCMEVCZENFSElBVkJBWFFpQlVHQWdBSkpEUUFMSUE5RklBOGdIQnNNQVFzZ0RDZ0NCQ0VQSUEwZ0RFRUlRUXdnQVNBRlN5SWNHMm9vQWdBMkFnQURRQUpBSUFnTkFDQURLQUlRSWdoQkFXb2hEQ0FJTFFBQklRVWdDQzBBQUVIL0FVY0VRQ0FESUF3MkFoQkJDQ0VJSUFWQkNIUWdCMm9oQnd3QkN5QUZRWThCVFFSQUlBTWdERFlDRUNBRlFRbDBJQWRxSVFkQkJ5RUlEQUVMSUFNZ0F5Z0NERUVCYWpZQ0RDQUhRWUQrQTJvaEIwRUlJUWdMSUFoQkFXc2hDQ0FIUVFGMElRY2dBVUVCZENJQlFZQ0FBa2tOQUFzZ0FTRUZJQThnRDBVZ0hCc0xJZ0ZHR3pZQ0FDQVZJQlVvQWdCQmdBSnlOZ0lBSUFJZ0FpZ0NCRUhBQUhJMkFnUWdCaUFCSUJKelFSWjBja0dBQVhJRklBWUxRWUNBZ0FoeUlRWUxBa0FnQmtHQWlJREFBSEVOQUNBR1FjRDNBWEZGRFFBZ0JTQVVJQU1vQW13Z0JrRUdkaUlTUWU4RGNXb3RBQUJCQW5ScUlnMG9BZ0FpRENnQ0FDSUJheUVGQW44Z0FTQUhRUkIyVFFSQUlBY2dBVUVRZEdzaEJ5QUZRWUNBQW5FRVFDQU1LQUlFREFJTElBd29BZ1FoRlNBTklBeEJERUVJSUFFZ0JVc2lEeHRxS0FJQU5nSUFBMEFDUUNBSURRQWdBeWdDRUNJSVFRRnFJUXdnQ0MwQUFTRUJJQWd0QUFCQi93RkhCRUFnQXlBTU5nSVFRUWdoQ0NBQlFRaDBJQWRxSVFjTUFRc2dBVUdQQVUwRVFDQURJQXcyQWhBZ0FVRUpkQ0FIYWlFSFFRY2hDQXdCQ3lBRElBTW9BZ3hCQVdvMkFnd2dCMEdBL2dOcUlRZEJDQ0VJQ3lBSVFRRnJJUWdnQjBFQmRDRUhJQVZCQVhRaUJVR0FnQUpKRFFBTElCVkZJQlVnRHhzTUFRc2dEQ2dDQkNFVklBMGdERUVJUVF3Z0FTQUZTeUlQRzJvb0FnQTJBZ0FEUUFKQUlBZ05BQ0FES0FJUUlnaEJBV29oRENBSUxRQUJJUVVnQ0MwQUFFSC9BVWNFUUNBRElBdzJBaEJCQ0NFSUlBVkJDSFFnQjJvaEJ3d0JDeUFGUVk4QlRRUkFJQU1nRERZQ0VDQUZRUWwwSUFkcUlRZEJCeUVJREFFTElBTWdBeWdDREVFQmFqWUNEQ0FIUVlEK0Eyb2hCMEVJSVFnTElBaEJBV3NoQ0NBSFFRRjBJUWNnQVVFQmRDSUJRWUNBQWtrTkFBc2dBU0VGSUJVZ0ZVVWdEeHNMQkg4Z0JTQVVJQUlvQWdSQkYzWkJCSEVnQWtFRWF5SVZLQUlBUVJsMlFRRnhJQVpCRW5aQkVIRWdCa0VXZGtIQUFIRWdFa0dxQVhGeWNuSnlJaEpCa0w0QmFpMEFBRUVDZEdvaURTZ0NBQ0lNS0FJQUlnRnJJUVVnRWtHUXdBRnFMUUFBSVJJZ0V5QWthaUFXSUFzZ0VnSi9JQUVnQjBFUWRrMEVRQ0FISUFGQkVIUnJJUWNnQlVHQWdBSnhCRUFnRENnQ0JBd0NDeUFNS0FJRUlROGdEU0FNUVF4QkNDQUJJQVZMSWh3YmFpZ0NBRFlDQUFOQUFrQWdDQTBBSUFNb0FoQWlDRUVCYWlFTUlBZ3RBQUVoQVNBSUxRQUFRZjhCUndSQUlBTWdERFlDRUVFSUlRZ2dBVUVJZENBSGFpRUhEQUVMSUFGQmp3Rk5CRUFnQXlBTU5nSVFJQUZCQ1hRZ0Iyb2hCMEVISVFnTUFRc2dBeUFES0FJTVFRRnFOZ0lNSUFkQmdQNERhaUVIUVFnaENBc2dDRUVCYXlFSUlBZEJBWFFoQnlBRlFRRjBJZ1ZCZ0lBQ1NRMEFDeUFQUlNBUElCd2JEQUVMSUF3b0FnUWhEeUFOSUF4QkNFRU1JQUVnQlVzaUhCdHFLQUlBTmdJQUEwQUNRQ0FJRFFBZ0F5Z0NFQ0lJUVFGcUlRd2dDQzBBQVNFRklBZ3RBQUJCL3dGSEJFQWdBeUFNTmdJUVFRZ2hDQ0FGUVFoMElBZHFJUWNNQVFzZ0JVR1BBVTBFUUNBRElBdzJBaEFnQlVFSmRDQUhhaUVIUVFjaENBd0JDeUFESUFNb0FneEJBV28yQWd3Z0IwR0EvZ05xSVFkQkNDRUlDeUFJUVFGcklRZ2dCMEVCZENFSElBRkJBWFFpQVVHQWdBSkpEUUFMSUFFaEJTQVBJQTlGSUJ3YkN5SUJSaHMyQWdBZ0ZTQVZLQUlBUVlBUWNqWUNBQ0FDSUFJb0FnUkJnQVJ5TmdJRUlBWWdBU0FTYzBFWmRISkJnQWh5QlNBR0MwR0FnSURBQUhJaEJnc0NRQ0FHUVlEQWdJQUVjUTBBSUFaQmdMd1BjVVVOQUNBRklCUWdBeWdDYkNBR1FRbDJJaEpCN3dOeGFpMEFBRUVDZEdvaURTZ0NBQ0lNS0FJQUlnRnJJUVVDZnlBQklBZEJFSFpOQkVBZ0J5QUJRUkIwYXlFSElBVkJnSUFDY1FSQUlBd29BZ1FNQWdzZ0RDZ0NCQ0VWSUEwZ0RFRU1RUWdnQVNBRlN5SVBHMm9vQWdBMkFnQURRQUpBSUFnTkFDQURLQUlRSWdoQkFXb2hEQ0FJTFFBQklRRWdDQzBBQUVIL0FVY0VRQ0FESUF3MkFoQkJDQ0VJSUFGQkNIUWdCMm9oQnd3QkN5QUJRWThCVFFSQUlBTWdERFlDRUNBQlFRbDBJQWRxSVFkQkJ5RUlEQUVMSUFNZ0F5Z0NERUVCYWpZQ0RDQUhRWUQrQTJvaEIwRUlJUWdMSUFoQkFXc2hDQ0FIUVFGMElRY2dCVUVCZENJRlFZQ0FBa2tOQUFzZ0ZVVWdGU0FQR3d3QkN5QU1LQUlFSVJVZ0RTQU1RUWhCRENBQklBVkxJZzhiYWlnQ0FEWUNBQU5BQWtBZ0NBMEFJQU1vQWhBaUNFRUJhaUVNSUFndEFBRWhCU0FJTFFBQVFmOEJSd1JBSUFNZ0REWUNFRUVJSVFnZ0JVRUlkQ0FIYWlFSERBRUxJQVZCandGTkJFQWdBeUFNTmdJUUlBVkJDWFFnQjJvaEIwRUhJUWdNQVFzZ0F5QURLQUlNUVFGcU5nSU1JQWRCZ1A0RGFpRUhRUWdoQ0FzZ0NFRUJheUVJSUFkQkFYUWhCeUFCUVFGMElnRkJnSUFDU1EwQUN5QUJJUVVnRlNBVlJTQVBHd3NFZnlBRklCUWdBaWdDQkVFYWRrRUVjU0FDUVFSckloVW9BZ0JCSEhaQkFYRWdCa0VWZGtFUWNTQUdRUmwyUWNBQWNTQVNRYW9CY1hKeWNuSWlFa0dRdmdGcUxRQUFRUUowYWlJTktBSUFJZ3dvQWdBaUFXc2hCU0FTUVpEQUFXb3RBQUFoRWlBUklCTnFJQllnQ3lBU0FuOGdBU0FIUVJCMlRRUkFJQWNnQVVFUWRHc2hCeUFGUVlDQUFuRUVRQ0FNS0FJRURBSUxJQXdvQWdRaER5QU5JQXhCREVFSUlBRWdCVXNpSEJ0cUtBSUFOZ0lBQTBBQ1FDQUlEUUFnQXlnQ0VDSUlRUUZxSVF3Z0NDMEFBU0VCSUFndEFBQkIvd0ZIQkVBZ0F5QU1OZ0lRUVFnaENDQUJRUWgwSUFkcUlRY01BUXNnQVVHUEFVMEVRQ0FESUF3MkFoQWdBVUVKZENBSGFpRUhRUWNoQ0F3QkN5QURJQU1vQWd4QkFXbzJBZ3dnQjBHQS9nTnFJUWRCQ0NFSUN5QUlRUUZySVFnZ0IwRUJkQ0VISUFWQkFYUWlCVUdBZ0FKSkRRQUxJQTlGSUE4Z0hCc01BUXNnRENnQ0JDRVBJQTBnREVFSVFRd2dBU0FGU3lJY0cyb29BZ0EyQWdBRFFBSkFJQWdOQUNBREtBSVFJZ2hCQVdvaERDQUlMUUFCSVFVZ0NDMEFBRUgvQVVjRVFDQURJQXcyQWhCQkNDRUlJQVZCQ0hRZ0Iyb2hCd3dCQ3lBRlFZOEJUUVJBSUFNZ0REWUNFQ0FGUVFsMElBZHFJUWRCQnlFSURBRUxJQU1nQXlnQ0RFRUJhallDRENBSFFZRCtBMm9oQjBFSUlRZ0xJQWhCQVdzaENDQUhRUUYwSVFjZ0FVRUJkQ0lCUVlDQUFra05BQXNnQVNFRklBOGdEMFVnSEJzTElneEdHellDQUNBVklCVW9BZ0JCZ0lBQmNqWUNBQ0FDSUFJb0FnUkJnQ0J5TmdJRUlBTW9BbnhCQW5RZ0Ftb2lBU0FCS0FJRVFRUnlOZ0lFSUFFZ0FTZ0NERUVCY2pZQ0RDQUJJQUVvQWdnZ0RDQVNjeUlCUVJKMGNrRUNjallDQ0NBR0lBRkJISFJ5UVlEQUFISUZJQVlMUVlDQWdJQUVjaUVHQ3lBQ0lBWTJBZ0FMSUFKQkJHb2hCaUFUUVFScUlSTWdEa0VCYWlJT0lBUkhEUUFMSUFKQkRHb2hCaUFSSUJOcUlSTWdDVUVFYWlJSklBTW9Bb0FCSWdGQmZIRkpEUUFMREFFTFFRUWdBVUY4Y1NJR0lBWkJCRTBiUVFGcklnWkJmSEZCQkdvaENTQUNJQVpCQVhSQmVIRnFRUlJxSVFZTElBTWdDRFlDQ0NBRElBVTJBZ1FnQXlBSE5nSUFJQU1nRFRZQ2FDQUVSUTBCSUFFZ0NVME5BUU5BSUFFZ0NVWkJBQ0VJSUFraEFVVUVRQU5BSUFNZ0JpQVRJQVFnQ0d4QkFuUnFJQllnQ0NBREtBSjhRUUpxUVFFUVlpQUlRUUZxSWdnZ0F5Z0NnQUVpQVNBSmEwa05BQXNMSUFaQkJHb2hCaUFUUVFScUlSTWdDa0VCYWlJS0lBUkhEUUFMREFFTEFrQWdBVUVFU1EwQUlBUUVRQ0FFUVF4c0lSRWdCRUVEZENFa1FRQWdGbXNoQ3lBRFFSeHFJUlFEUUVFQUlRNERRQ0FHSWdJb0FnQWlCZ1JBQWtBZ0JrR1FnSUFCY1EwQUlBWkI3d054SWdGRkRRQWdCU0FVSUFNb0Ftd2dBV290QUFCQkFuUnFJZzBvQWdBaURDZ0NBQ0lCYXlFRkFuOGdBU0FIUVJCMlRRUkFJQWNnQVVFUWRHc2hCeUFGUVlDQUFuRUVRQ0FNS0FJRURBSUxJQXdvQWdRaEZTQU5JQXhCREVFSUlBRWdCVXNpRWh0cUtBSUFOZ0lBQTBBQ1FDQUlEUUFnQXlnQ0VDSUlRUUZxSVF3Z0NDMEFBU0VCSUFndEFBQkIvd0ZIQkVBZ0F5QU1OZ0lRUVFnaENDQUJRUWgwSUFkcUlRY01BUXNnQVVHUEFVMEVRQ0FESUF3MkFoQWdBVUVKZENBSGFpRUhRUWNoQ0F3QkN5QURJQU1vQWd4QkFXbzJBZ3dnQjBHQS9nTnFJUWRCQ0NFSUN5QUlRUUZySVFnZ0IwRUJkQ0VISUFWQkFYUWlCVUdBZ0FKSkRRQUxJQlZGSUJVZ0Voc01BUXNnRENnQ0JDRVZJQTBnREVFSVFRd2dBU0FGU3lJU0cyb29BZ0EyQWdBRFFBSkFJQWdOQUNBREtBSVFJZ2hCQVdvaERDQUlMUUFCSVFVZ0NDMEFBRUgvQVVjRVFDQURJQXcyQWhCQkNDRUlJQVZCQ0hRZ0Iyb2hCd3dCQ3lBRlFZOEJUUVJBSUFNZ0REWUNFQ0FGUVFsMElBZHFJUWRCQnlFSURBRUxJQU1nQXlnQ0RFRUJhallDRENBSFFZRCtBMm9oQjBFSUlRZ0xJQWhCQVdzaENDQUhRUUYwSVFjZ0FVRUJkQ0lCUVlDQUFra05BQXNnQVNFRklCVWdGVVVnRWhzTEJIOGdCU0FVSUFJb0FnUkJFWFpCQkhFZ0FrRUVheUlWS0FJQVFSTjJRUUZ4SUFaQkRuWkJFSEVnQmtFUWRrSEFBSEVnQmtHcUFYRnljbkp5SWhKQmtMNEJhaTBBQUVFQ2RHb2lEU2dDQUNJTUtBSUFJZ0ZySVFVZ0VrR1F3QUZxTFFBQUlSSWdFeUFXSUFzZ0VnSi9JQUVnQjBFUWRrMEVRQ0FISUFGQkVIUnJJUWNnQlVHQWdBSnhCRUFnRENnQ0JBd0NDeUFNS0FJRUlROGdEU0FNUVF4QkNDQUJJQVZMSWh3YmFpZ0NBRFlDQUFOQUFrQWdDQTBBSUFNb0FoQWlDRUVCYWlFTUlBZ3RBQUVoQVNBSUxRQUFRZjhCUndSQUlBTWdERFlDRUVFSUlRZ2dBVUVJZENBSGFpRUhEQUVMSUFGQmp3Rk5CRUFnQXlBTU5nSVFJQUZCQ1hRZ0Iyb2hCMEVISVFnTUFRc2dBeUFES0FJTVFRRnFOZ0lNSUFkQmdQNERhaUVIUVFnaENBc2dDRUVCYXlFSUlBZEJBWFFoQnlBRlFRRjBJZ1ZCZ0lBQ1NRMEFDeUFQUlNBUElCd2JEQUVMSUF3b0FnUWhEeUFOSUF4QkNFRU1JQUVnQlVzaUhCdHFLQUlBTmdJQUEwQUNRQ0FJRFFBZ0F5Z0NFQ0lJUVFGcUlRd2dDQzBBQVNFRklBZ3RBQUJCL3dGSEJFQWdBeUFNTmdJUVFRZ2hDQ0FGUVFoMElBZHFJUWNNQVFzZ0JVR1BBVTBFUUNBRElBdzJBaEFnQlVFSmRDQUhhaUVIUVFjaENBd0JDeUFESUFNb0FneEJBV28yQWd3Z0IwR0EvZ05xSVFkQkNDRUlDeUFJUVFGcklRZ2dCMEVCZENFSElBRkJBWFFpQVVHQWdBSkpEUUFMSUFFaEJTQVBJQTlGSUJ3YkN5SU1SaHMyQWdBZ0ZTQVZLQUlBUVNCeU5nSUFJQUlnQWlnQ0JFRUljallDQkNBQ1FYNGdBeWdDZkd0QkFuUnFJZ0VnQVNnQ0JFR0FnQUp5TmdJRUlBRWdBU2dDQUNBTUlCSnpJZ3hCSDNSeVFZQ0FCSEkyQWdBZ0FVRUVheUlCSUFFb0FnQkJnSUFJY2pZQ0FDQUdJQXhCRTNSeVFSQnlCU0FHQzBHQWdJQUJjaUVHQ3dKQUlBWkJnSUdBQ0hFTkFDQUdRZmdlY1VVTkFDQUZJQlFnQXlnQ2JDQUdRUU4ySWhKQjd3TnhhaTBBQUVFQ2RHb2lEU2dDQUNJTUtBSUFJZ0ZySVFVQ2Z5QUJJQWRCRUhaTkJFQWdCeUFCUVJCMGF5RUhJQVZCZ0lBQ2NRUkFJQXdvQWdRTUFnc2dEQ2dDQkNFVklBMGdERUVNUVFnZ0FTQUZTeUlQRzJvb0FnQTJBZ0FEUUFKQUlBZ05BQ0FES0FJUUlnaEJBV29oRENBSUxRQUJJUUVnQ0MwQUFFSC9BVWNFUUNBRElBdzJBaEJCQ0NFSUlBRkJDSFFnQjJvaEJ3d0JDeUFCUVk4QlRRUkFJQU1nRERZQ0VDQUJRUWwwSUFkcUlRZEJCeUVJREFFTElBTWdBeWdDREVFQmFqWUNEQ0FIUVlEK0Eyb2hCMEVJSVFnTElBaEJBV3NoQ0NBSFFRRjBJUWNnQlVFQmRDSUZRWUNBQWtrTkFBc2dGVVVnRlNBUEd3d0JDeUFNS0FJRUlSVWdEU0FNUVFoQkRDQUJJQVZMSWc4YmFpZ0NBRFlDQUFOQUFrQWdDQTBBSUFNb0FoQWlDRUVCYWlFTUlBZ3RBQUVoQlNBSUxRQUFRZjhCUndSQUlBTWdERFlDRUVFSUlRZ2dCVUVJZENBSGFpRUhEQUVMSUFWQmp3Rk5CRUFnQXlBTU5nSVFJQVZCQ1hRZ0Iyb2hCMEVISVFnTUFRc2dBeUFES0FJTVFRRnFOZ0lNSUFkQmdQNERhaUVIUVFnaENBc2dDRUVCYXlFSUlBZEJBWFFoQnlBQlFRRjBJZ0ZCZ0lBQ1NRMEFDeUFCSVFVZ0ZTQVZSU0FQR3dzRWZ5QUZJQlFnQWlnQ0JFRVVka0VFY1NBQ1FRUnJJaFVvQWdCQkZuWkJBWEVnQmtFUGRrRVFjU0FHUVJOMlFjQUFjU0FTUWFvQmNYSnljbklpRWtHUXZnRnFMUUFBUVFKMGFpSU5LQUlBSWd3b0FnQWlBV3NoQlNBU1FaREFBV290QUFBaEVpQVRJQVJCQW5ScUlCWWdDeUFTQW44Z0FTQUhRUkIyVFFSQUlBY2dBVUVRZEdzaEJ5QUZRWUNBQW5FRVFDQU1LQUlFREFJTElBd29BZ1FoRHlBTklBeEJERUVJSUFFZ0JVc2lIQnRxS0FJQU5nSUFBMEFDUUNBSURRQWdBeWdDRUNJSVFRRnFJUXdnQ0MwQUFTRUJJQWd0QUFCQi93RkhCRUFnQXlBTU5nSVFRUWdoQ0NBQlFRaDBJQWRxSVFjTUFRc2dBVUdQQVUwRVFDQURJQXcyQWhBZ0FVRUpkQ0FIYWlFSFFRY2hDQXdCQ3lBRElBTW9BZ3hCQVdvMkFnd2dCMEdBL2dOcUlRZEJDQ0VJQ3lBSVFRRnJJUWdnQjBFQmRDRUhJQVZCQVhRaUJVR0FnQUpKRFFBTElBOUZJQThnSEJzTUFRc2dEQ2dDQkNFUElBMGdERUVJUVF3Z0FTQUZTeUljRzJvb0FnQTJBZ0FEUUFKQUlBZ05BQ0FES0FJUUlnaEJBV29oRENBSUxRQUJJUVVnQ0MwQUFFSC9BVWNFUUNBRElBdzJBaEJCQ0NFSUlBVkJDSFFnQjJvaEJ3d0JDeUFGUVk4QlRRUkFJQU1nRERZQ0VDQUZRUWwwSUFkcUlRZEJCeUVJREFFTElBTWdBeWdDREVFQmFqWUNEQ0FIUVlEK0Eyb2hCMEVJSVFnTElBaEJBV3NoQ0NBSFFRRjBJUWNnQVVFQmRDSUJRWUNBQWtrTkFBc2dBU0VGSUE4Z0QwVWdIQnNMSWdGR0d6WUNBQ0FWSUJVb0FnQkJnQUp5TmdJQUlBSWdBaWdDQkVIQUFISTJBZ1FnQmlBQklCSnpRUlowY2tHQUFYSUZJQVlMUVlDQWdBaHlJUVlMQWtBZ0JrR0FpSURBQUhFTkFDQUdRY0QzQVhGRkRRQWdCU0FVSUFNb0Ftd2dCa0VHZGlJU1FlOERjV290QUFCQkFuUnFJZzBvQWdBaURDZ0NBQ0lCYXlFRkFuOGdBU0FIUVJCMlRRUkFJQWNnQVVFUWRHc2hCeUFGUVlDQUFuRUVRQ0FNS0FJRURBSUxJQXdvQWdRaEZTQU5JQXhCREVFSUlBRWdCVXNpRHh0cUtBSUFOZ0lBQTBBQ1FDQUlEUUFnQXlnQ0VDSUlRUUZxSVF3Z0NDMEFBU0VCSUFndEFBQkIvd0ZIQkVBZ0F5QU1OZ0lRUVFnaENDQUJRUWgwSUFkcUlRY01BUXNnQVVHUEFVMEVRQ0FESUF3MkFoQWdBVUVKZENBSGFpRUhRUWNoQ0F3QkN5QURJQU1vQWd4QkFXbzJBZ3dnQjBHQS9nTnFJUWRCQ0NFSUN5QUlRUUZySVFnZ0IwRUJkQ0VISUFWQkFYUWlCVUdBZ0FKSkRRQUxJQlZGSUJVZ0R4c01BUXNnRENnQ0JDRVZJQTBnREVFSVFRd2dBU0FGU3lJUEcyb29BZ0EyQWdBRFFBSkFJQWdOQUNBREtBSVFJZ2hCQVdvaERDQUlMUUFCSVFVZ0NDMEFBRUgvQVVjRVFDQURJQXcyQWhCQkNDRUlJQVZCQ0hRZ0Iyb2hCd3dCQ3lBRlFZOEJUUVJBSUFNZ0REWUNFQ0FGUVFsMElBZHFJUWRCQnlFSURBRUxJQU1nQXlnQ0RFRUJhallDRENBSFFZRCtBMm9oQjBFSUlRZ0xJQWhCQVdzaENDQUhRUUYwSVFjZ0FVRUJkQ0lCUVlDQUFra05BQXNnQVNFRklCVWdGVVVnRHhzTEJIOGdCU0FVSUFJb0FnUkJGM1pCQkhFZ0FrRUVheUlWS0FJQVFSbDJRUUZ4SUFaQkVuWkJFSEVnQmtFV2RrSEFBSEVnRWtHcUFYRnljbkp5SWhKQmtMNEJhaTBBQUVFQ2RHb2lEU2dDQUNJTUtBSUFJZ0ZySVFVZ0VrR1F3QUZxTFFBQUlSSWdFeUFrYWlBV0lBc2dFZ0ovSUFFZ0IwRVFkazBFUUNBSElBRkJFSFJySVFjZ0JVR0FnQUp4QkVBZ0RDZ0NCQXdDQ3lBTUtBSUVJUThnRFNBTVFReEJDQ0FCSUFWTElod2JhaWdDQURZQ0FBTkFBa0FnQ0EwQUlBTW9BaEFpQ0VFQmFpRU1JQWd0QUFFaEFTQUlMUUFBUWY4QlJ3UkFJQU1nRERZQ0VFRUlJUWdnQVVFSWRDQUhhaUVIREFFTElBRkJqd0ZOQkVBZ0F5QU1OZ0lRSUFGQkNYUWdCMm9oQjBFSElRZ01BUXNnQXlBREtBSU1RUUZxTmdJTUlBZEJnUDREYWlFSFFRZ2hDQXNnQ0VFQmF5RUlJQWRCQVhRaEJ5QUZRUUYwSWdWQmdJQUNTUTBBQ3lBUFJTQVBJQndiREFFTElBd29BZ1FoRHlBTklBeEJDRUVNSUFFZ0JVc2lIQnRxS0FJQU5nSUFBMEFDUUNBSURRQWdBeWdDRUNJSVFRRnFJUXdnQ0MwQUFTRUZJQWd0QUFCQi93RkhCRUFnQXlBTU5nSVFRUWdoQ0NBRlFRaDBJQWRxSVFjTUFRc2dCVUdQQVUwRVFDQURJQXcyQWhBZ0JVRUpkQ0FIYWlFSFFRY2hDQXdCQ3lBRElBTW9BZ3hCQVdvMkFnd2dCMEdBL2dOcUlRZEJDQ0VJQ3lBSVFRRnJJUWdnQjBFQmRDRUhJQUZCQVhRaUFVR0FnQUpKRFFBTElBRWhCU0FQSUE5RklCd2JDeUlCUmhzMkFnQWdGU0FWS0FJQVFZQVFjallDQUNBQ0lBSW9BZ1JCZ0FSeU5nSUVJQVlnQVNBU2MwRVpkSEpCZ0FoeUJTQUdDMEdBZ0lEQUFISWhCZ3NDUUNBR1FZREFnSUFFY1EwQUlBWkJnTHdQY1VVTkFDQUZJQlFnQXlnQ2JDQUdRUWwySWhKQjd3TnhhaTBBQUVFQ2RHb2lEU2dDQUNJTUtBSUFJZ0ZySVFVQ2Z5QUJJQWRCRUhaTkJFQWdCeUFCUVJCMGF5RUhJQVZCZ0lBQ2NRUkFJQXdvQWdRTUFnc2dEQ2dDQkNFVklBMGdERUVNUVFnZ0FTQUZTeUlQRzJvb0FnQTJBZ0FEUUFKQUlBZ05BQ0FES0FJUUlnaEJBV29oRENBSUxRQUJJUUVnQ0MwQUFFSC9BVWNFUUNBRElBdzJBaEJCQ0NFSUlBRkJDSFFnQjJvaEJ3d0JDeUFCUVk4QlRRUkFJQU1nRERZQ0VDQUJRUWwwSUFkcUlRZEJCeUVJREFFTElBTWdBeWdDREVFQmFqWUNEQ0FIUVlEK0Eyb2hCMEVJSVFnTElBaEJBV3NoQ0NBSFFRRjBJUWNnQlVFQmRDSUZRWUNBQWtrTkFBc2dGVVVnRlNBUEd3d0JDeUFNS0FJRUlSVWdEU0FNUVFoQkRDQUJJQVZMSWc4YmFpZ0NBRFlDQUFOQUFrQWdDQTBBSUFNb0FoQWlDRUVCYWlFTUlBZ3RBQUVoQlNBSUxRQUFRZjhCUndSQUlBTWdERFlDRUVFSUlRZ2dCVUVJZENBSGFpRUhEQUVMSUFWQmp3Rk5CRUFnQXlBTU5nSVFJQVZCQ1hRZ0Iyb2hCMEVISVFnTUFRc2dBeUFES0FJTVFRRnFOZ0lNSUFkQmdQNERhaUVIUVFnaENBc2dDRUVCYXlFSUlBZEJBWFFoQnlBQlFRRjBJZ0ZCZ0lBQ1NRMEFDeUFCSVFVZ0ZTQVZSU0FQR3dzRWZ5QUZJQlFnQWlnQ0JFRWFka0VFY1NBQ1FRUnJJaFVvQWdCQkhIWkJBWEVnQmtFVmRrRVFjU0FHUVJsMlFjQUFjU0FTUWFvQmNYSnljbklpRWtHUXZnRnFMUUFBUVFKMGFpSU5LQUlBSWd3b0FnQWlBV3NoQlNBU1FaREFBV290QUFBaEVpQVJJQk5xSUJZZ0N5QVNBbjhnQVNBSFFSQjJUUVJBSUFjZ0FVRVFkR3NoQnlBRlFZQ0FBbkVFUUNBTUtBSUVEQUlMSUF3b0FnUWhEeUFOSUF4QkRFRUlJQUVnQlVzaUhCdHFLQUlBTmdJQUEwQUNRQ0FJRFFBZ0F5Z0NFQ0lJUVFGcUlRd2dDQzBBQVNFQklBZ3RBQUJCL3dGSEJFQWdBeUFNTmdJUVFRZ2hDQ0FCUVFoMElBZHFJUWNNQVFzZ0FVR1BBVTBFUUNBRElBdzJBaEFnQVVFSmRDQUhhaUVIUVFjaENBd0JDeUFESUFNb0FneEJBV28yQWd3Z0IwR0EvZ05xSVFkQkNDRUlDeUFJUVFGcklRZ2dCMEVCZENFSElBVkJBWFFpQlVHQWdBSkpEUUFMSUE5RklBOGdIQnNNQVFzZ0RDZ0NCQ0VQSUEwZ0RFRUlRUXdnQVNBRlN5SWNHMm9vQWdBMkFnQURRQUpBSUFnTkFDQURLQUlRSWdoQkFXb2hEQ0FJTFFBQklRVWdDQzBBQUVIL0FVY0VRQ0FESUF3MkFoQkJDQ0VJSUFWQkNIUWdCMm9oQnd3QkN5QUZRWThCVFFSQUlBTWdERFlDRUNBRlFRbDBJQWRxSVFkQkJ5RUlEQUVMSUFNZ0F5Z0NERUVCYWpZQ0RDQUhRWUQrQTJvaEIwRUlJUWdMSUFoQkFXc2hDQ0FIUVFGMElRY2dBVUVCZENJQlFZQ0FBa2tOQUFzZ0FTRUZJQThnRDBVZ0hCc0xJZ3hHR3pZQ0FDQVZJQlVvQWdCQmdJQUJjallDQUNBQ0lBSW9BZ1JCZ0NCeU5nSUVJQU1vQW54QkFuUWdBbW9pQVNBQktBSUVRUVJ5TmdJRUlBRWdBU2dDREVFQmNqWUNEQ0FCSUFFb0FnZ2dEQ0FTY3lJQlFSSjBja0VDY2pZQ0NDQUdJQUZCSEhSeVFZREFBSElGSUFZTFFZQ0FnSUFFY2lFR0N5QUNJQVkyQWdBTElBSkJCR29oQmlBVFFRUnFJUk1nRGtFQmFpSU9JQVJIRFFBTElBSkJER29oQmlBUklCTnFJUk1nQ1VFRWFpSUpJQU1vQW9BQklnRkJmSEZKRFFBTERBRUxRUVFnQVVGOGNTSUdJQVpCQkUwYlFRRnJJZ1pCZkhGQkJHb2hDU0FDSUFaQkFYUkJlSEZxUVJScUlRWUxJQU1nQ0RZQ0NDQURJQVUyQWdRZ0F5QUhOZ0lBSUFNZ0RUWUNhQ0FFUlEwQUlBRWdDVTBOQUFOQUlBRWdDVVpCQUNFSUlBa2hBVVVFUUFOQUlBTWdCaUFUSUFRZ0NHeEJBblJxSUJZZ0NDQURLQUo4UVFKcVFRQVFZaUFJUVFGcUlnZ2dBeWdDZ0FFaUFTQUphMGtOQUFzTElBWkJCR29oQmlBVFFRUnFJUk1nQ2tFQmFpSUtJQVJIRFFBTEN3d0NDd05BUVFBaENnTkFJQUVoQWlBR0lna29BZ0FpQmdSQUFrQWdCa0dRZ0lBQmNRMEFJQVpCN3dOeElnRkZEUUFnQlNBRUlBTW9BbXdnQVdvdEFBQkJBblJxSWcwb0FnQWlEaWdDQUNJQmF5RUZBbjhnQVNBSFFSQjJTd1JBSUE0b0FnUWhEQ0FOSUE1QkNFRU1JQUVnQlVzaUN4dHFLQUlBTmdJQUEwQUNRQ0FJRFFBZ0F5Z0NFQ0lJUVFGcUlRNGdDQzBBQVNFRklBZ3RBQUJCL3dGR0JFQWdCVUdRQVU4RVFDQURJQU1vQWd4QkFXbzJBZ3dnQjBHQS9nTnFJUWRCQ0NFSURBSUxJQU1nRGpZQ0VDQUZRUWwwSUFkcUlRZEJCeUVJREFFTElBTWdEallDRUVFSUlRZ2dCVUVJZENBSGFpRUhDeUFJUVFGcklRZ2dCMEVCZENFSElBRkJBWFFpQVVHQWdBSkpEUUFMSUFFaEJTQU1JQXhGSUFzYkRBRUxJQWNnQVVFUWRHc2hCeUFGUVlDQUFuRkZCRUFnRGlnQ0JDRU1JQTBnRGtFTVFRZ2dBU0FGU3lJTEcyb29BZ0EyQWdBRFFBSkFJQWdOQUNBREtBSVFJZ2hCQVdvaERpQUlMUUFCSVFFZ0NDMEFBRUgvQVVZRVFDQUJRWkFCVHdSQUlBTWdBeWdDREVFQmFqWUNEQ0FIUVlEK0Eyb2hCMEVJSVFnTUFnc2dBeUFPTmdJUUlBRkJDWFFnQjJvaEIwRUhJUWdNQVFzZ0F5QU9OZ0lRUVFnaENDQUJRUWgwSUFkcUlRY0xJQWhCQVdzaENDQUhRUUYwSVFjZ0JVRUJkQ0lGUVlDQUFra05BQXNnREVVZ0RDQUxHd3dCQ3lBT0tBSUVDd1IvSUFVZ0JDQUpLQUlFUVJGMlFRUnhJQWxCQkdzaURDZ0NBRUVUZGtFQmNTQUdRUTUyUVJCeElBWkJFSFpCd0FCeElBWkJxZ0Z4Y25KeWNpSUxRWkMrQVdvdEFBQkJBblJxSWcwb0FnQWlEaWdDQUNJQmF5RUZJQXRCa01BQmFpMEFBQ0VMSUFJZ0V5QVVJQXNDZnlBQklBZEJFSFpMQkVBZ0RpZ0NCQ0VSSUEwZ0RrRUlRUXdnQVNBRlN5SVZHMm9vQWdBMkFnQURRQUpBSUFnTkFDQURLQUlRSWdoQkFXb2hEaUFJTFFBQklRVWdDQzBBQUVIL0FVWUVRQ0FGUVpBQlR3UkFJQU1nQXlnQ0RFRUJhallDRENBSFFZRCtBMm9oQjBFSUlRZ01BZ3NnQXlBT05nSVFJQVZCQ1hRZ0Iyb2hCMEVISVFnTUFRc2dBeUFPTmdJUVFRZ2hDQ0FGUVFoMElBZHFJUWNMSUFoQkFXc2hDQ0FIUVFGMElRY2dBVUVCZENJQlFZQ0FBa2tOQUFzZ0FTRUZJQkVnRVVVZ0ZSc01BUXNnQnlBQlFSQjBheUVISUFWQmdJQUNjVVVFUUNBT0tBSUVJUkVnRFNBT1FReEJDQ0FCSUFWTEloVWJhaWdDQURZQ0FBTkFBa0FnQ0EwQUlBTW9BaEFpQ0VFQmFpRU9JQWd0QUFFaEFTQUlMUUFBUWY4QlJnUkFJQUZCa0FGUEJFQWdBeUFES0FJTVFRRnFOZ0lNSUFkQmdQNERhaUVIUVFnaENBd0NDeUFESUE0MkFoQWdBVUVKZENBSGFpRUhRUWNoQ0F3QkN5QURJQTQyQWhCQkNDRUlJQUZCQ0hRZ0Iyb2hCd3NnQ0VFQmF5RUlJQWRCQVhRaEJ5QUZRUUYwSWdWQmdJQUNTUTBBQ3lBUlJTQVJJQlViREFFTElBNG9BZ1FMSWdGR0d6WUNBQ0FNSUF3b0FnQkJJSEkyQWdBZ0NTQUpLQUlFUVFoeU5nSUVJQVlnQVNBTGMwRVRkSEpCRUhJRklBWUxRWUNBZ0FGeUlRWUxBa0FnQmtHQWdZQUljUTBBSUFaQitCNXhSUTBBSUFVZ0JDQURLQUpzSUFaQkEzWWlDMEh2QTNGcUxRQUFRUUowYWlJTktBSUFJZzRvQWdBaUFXc2hCUUovSUFFZ0IwRVFka3NFUUNBT0tBSUVJUXdnRFNBT1FRaEJEQ0FCSUFWTEloRWJhaWdDQURZQ0FBTkFBa0FnQ0EwQUlBTW9BaEFpQ0VFQmFpRU9JQWd0QUFFaEJTQUlMUUFBUWY4QlJnUkFJQVZCa0FGUEJFQWdBeUFES0FJTVFRRnFOZ0lNSUFkQmdQNERhaUVIUVFnaENBd0NDeUFESUE0MkFoQWdCVUVKZENBSGFpRUhRUWNoQ0F3QkN5QURJQTQyQWhCQkNDRUlJQVZCQ0hRZ0Iyb2hCd3NnQ0VFQmF5RUlJQWRCQVhRaEJ5QUJRUUYwSWdGQmdJQUNTUTBBQ3lBQklRVWdEQ0FNUlNBUkd3d0JDeUFISUFGQkVIUnJJUWNnQlVHQWdBSnhSUVJBSUE0b0FnUWhEQ0FOSUE1QkRFRUlJQUVnQlVzaUVSdHFLQUlBTmdJQUEwQUNRQ0FJRFFBZ0F5Z0NFQ0lJUVFGcUlRNGdDQzBBQVNFQklBZ3RBQUJCL3dGR0JFQWdBVUdRQVU4RVFDQURJQU1vQWd4QkFXbzJBZ3dnQjBHQS9nTnFJUWRCQ0NFSURBSUxJQU1nRGpZQ0VDQUJRUWwwSUFkcUlRZEJCeUVJREFFTElBTWdEallDRUVFSUlRZ2dBVUVJZENBSGFpRUhDeUFJUVFGcklRZ2dCMEVCZENFSElBVkJBWFFpQlVHQWdBSkpEUUFMSUF4RklBd2dFUnNNQVFzZ0RpZ0NCQXNFZnlBRklBUWdDU2dDQkVFVWRrRUVjU0FKUVFScklnd29BZ0JCRm5aQkFYRWdCa0VQZGtFUWNTQUdRUk4yUWNBQWNTQUxRYW9CY1hKeWNuSWlDMEdRdmdGcUxRQUFRUUowYWlJTktBSUFJZzRvQWdBaUFXc2hCU0FMUVpEQUFXb3RBQUFoQ3lBQ0lCTWdGQ0FMQW44Z0FTQUhRUkIyU3dSQUlBNG9BZ1FoRVNBTklBNUJDRUVNSUFFZ0JVc2lGUnRxS0FJQU5nSUFBMEFDUUNBSURRQWdBeWdDRUNJSVFRRnFJUTRnQ0MwQUFTRUZJQWd0QUFCQi93RkdCRUFnQlVHUUFVOEVRQ0FESUFNb0FneEJBV28yQWd3Z0IwR0EvZ05xSVFkQkNDRUlEQUlMSUFNZ0RqWUNFQ0FGUVFsMElBZHFJUWRCQnlFSURBRUxJQU1nRGpZQ0VFRUlJUWdnQlVFSWRDQUhhaUVIQ3lBSVFRRnJJUWdnQjBFQmRDRUhJQUZCQVhRaUFVR0FnQUpKRFFBTElBRWhCU0FSSUJGRklCVWJEQUVMSUFjZ0FVRVFkR3NoQnlBRlFZQ0FBbkZGQkVBZ0RpZ0NCQ0VSSUEwZ0RrRU1RUWdnQVNBRlN5SVZHMm9vQWdBMkFnQURRQUpBSUFnTkFDQURLQUlRSWdoQkFXb2hEaUFJTFFBQklRRWdDQzBBQUVIL0FVWUVRQ0FCUVpBQlR3UkFJQU1nQXlnQ0RFRUJhallDRENBSFFZRCtBMm9oQjBFSUlRZ01BZ3NnQXlBT05nSVFJQUZCQ1hRZ0Iyb2hCMEVISVFnTUFRc2dBeUFPTmdJUVFRZ2hDQ0FCUVFoMElBZHFJUWNMSUFoQkFXc2hDQ0FIUVFGMElRY2dCVUVCZENJRlFZQ0FBa2tOQUFzZ0VVVWdFU0FWR3d3QkN5QU9LQUlFQ3lJQlJoczJBb0FDSUF3Z0RDZ0NBRUdBQW5JMkFnQWdDU0FKS0FJRVFjQUFjallDQkNBR0lBRWdDM05CRm5SeVFZQUJjZ1VnQmd0QmdJQ0FDSEloQmdzQ1FDQUdRWUNJZ01BQWNRMEFJQVpCd1BjQmNVVU5BQ0FGSUFRZ0F5Z0NiQ0FHUVFaMklndEI3d054YWkwQUFFRUNkR29pRFNnQ0FDSU9LQUlBSWdGcklRVUNmeUFCSUFkQkVIWkxCRUFnRGlnQ0JDRU1JQTBnRGtFSVFRd2dBU0FGU3lJUkcyb29BZ0EyQWdBRFFBSkFJQWdOQUNBREtBSVFJZ2hCQVdvaERpQUlMUUFCSVFVZ0NDMEFBRUgvQVVZRVFDQUZRWkFCVHdSQUlBTWdBeWdDREVFQmFqWUNEQ0FIUVlEK0Eyb2hCMEVJSVFnTUFnc2dBeUFPTmdJUUlBVkJDWFFnQjJvaEIwRUhJUWdNQVFzZ0F5QU9OZ0lRUVFnaENDQUZRUWgwSUFkcUlRY0xJQWhCQVdzaENDQUhRUUYwSVFjZ0FVRUJkQ0lCUVlDQUFra05BQXNnQVNFRklBd2dERVVnRVJzTUFRc2dCeUFCUVJCMGF5RUhJQVZCZ0lBQ2NVVUVRQ0FPS0FJRUlRd2dEU0FPUVF4QkNDQUJJQVZMSWhFYmFpZ0NBRFlDQUFOQUFrQWdDQTBBSUFNb0FoQWlDRUVCYWlFT0lBZ3RBQUVoQVNBSUxRQUFRZjhCUmdSQUlBRkJrQUZQQkVBZ0F5QURLQUlNUVFGcU5nSU1JQWRCZ1A0RGFpRUhRUWdoQ0F3Q0N5QURJQTQyQWhBZ0FVRUpkQ0FIYWlFSFFRY2hDQXdCQ3lBRElBNDJBaEJCQ0NFSUlBRkJDSFFnQjJvaEJ3c2dDRUVCYXlFSUlBZEJBWFFoQnlBRlFRRjBJZ1ZCZ0lBQ1NRMEFDeUFNUlNBTUlCRWJEQUVMSUE0b0FnUUxCSDhnQlNBRUlBa29BZ1JCRjNaQkJIRWdDVUVFYXlJTUtBSUFRUmwyUVFGeElBWkJFblpCRUhFZ0JrRVdka0hBQUhFZ0MwR3FBWEZ5Y25KeUlndEJrTDRCYWkwQUFFRUNkR29pRFNnQ0FDSU9LQUlBSWdGcklRVWdDMEdRd0FGcUxRQUFJUXNnQWlBVElCUWdDd0ovSUFFZ0IwRVFka3NFUUNBT0tBSUVJUkVnRFNBT1FRaEJEQ0FCSUFWTEloVWJhaWdDQURZQ0FBTkFBa0FnQ0EwQUlBTW9BaEFpQ0VFQmFpRU9JQWd0QUFFaEJTQUlMUUFBUWY4QlJnUkFJQVZCa0FGUEJFQWdBeUFES0FJTVFRRnFOZ0lNSUFkQmdQNERhaUVIUVFnaENBd0NDeUFESUE0MkFoQWdCVUVKZENBSGFpRUhRUWNoQ0F3QkN5QURJQTQyQWhCQkNDRUlJQVZCQ0hRZ0Iyb2hCd3NnQ0VFQmF5RUlJQWRCQVhRaEJ5QUJRUUYwSWdGQmdJQUNTUTBBQ3lBQklRVWdFU0FSUlNBVkd3d0JDeUFISUFGQkVIUnJJUWNnQlVHQWdBSnhSUVJBSUE0b0FnUWhFU0FOSUE1QkRFRUlJQUVnQlVzaUZSdHFLQUlBTmdJQUEwQUNRQ0FJRFFBZ0F5Z0NFQ0lJUVFGcUlRNGdDQzBBQVNFQklBZ3RBQUJCL3dGR0JFQWdBVUdRQVU4RVFDQURJQU1vQWd4QkFXbzJBZ3dnQjBHQS9nTnFJUWRCQ0NFSURBSUxJQU1nRGpZQ0VDQUJRUWwwSUFkcUlRZEJCeUVJREFFTElBTWdEallDRUVFSUlRZ2dBVUVJZENBSGFpRUhDeUFJUVFGcklRZ2dCMEVCZENFSElBVkJBWFFpQlVHQWdBSkpEUUFMSUJGRklCRWdGUnNNQVFzZ0RpZ0NCQXNpQVVZYk5nS0FCQ0FNSUF3b0FnQkJnQkJ5TmdJQUlBa2dDU2dDQkVHQUJISTJBZ1FnQmlBQklBdHpRUmwwY2tHQUNISUZJQVlMUVlDQWdNQUFjaUVHQ3dKQUlBWkJnTUNBZ0FSeERRQWdCa0dBdkE5eFJRMEFJQVVnQkNBREtBSnNJQVpCQ1hZaUMwSHZBM0ZxTFFBQVFRSjBhaUlOS0FJQUlnNG9BZ0FpQVdzaEJRSi9JQUVnQjBFUWRrc0VRQ0FPS0FJRUlRd2dEU0FPUVFoQkRDQUJJQVZMSWhFYmFpZ0NBRFlDQUFOQUFrQWdDQTBBSUFNb0FoQWlDRUVCYWlFT0lBZ3RBQUVoQlNBSUxRQUFRZjhCUmdSQUlBVkJrQUZQQkVBZ0F5QURLQUlNUVFGcU5nSU1JQWRCZ1A0RGFpRUhRUWdoQ0F3Q0N5QURJQTQyQWhBZ0JVRUpkQ0FIYWlFSFFRY2hDQXdCQ3lBRElBNDJBaEJCQ0NFSUlBVkJDSFFnQjJvaEJ3c2dDRUVCYXlFSUlBZEJBWFFoQnlBQlFRRjBJZ0ZCZ0lBQ1NRMEFDeUFCSVFVZ0RDQU1SU0FSR3d3QkN5QUhJQUZCRUhScklRY2dCVUdBZ0FKeFJRUkFJQTRvQWdRaERDQU5JQTVCREVFSUlBRWdCVXNpRVJ0cUtBSUFOZ0lBQTBBQ1FDQUlEUUFnQXlnQ0VDSUlRUUZxSVE0Z0NDMEFBU0VCSUFndEFBQkIvd0ZHQkVBZ0FVR1FBVThFUUNBRElBTW9BZ3hCQVdvMkFnd2dCMEdBL2dOcUlRZEJDQ0VJREFJTElBTWdEallDRUNBQlFRbDBJQWRxSVFkQkJ5RUlEQUVMSUFNZ0RqWUNFRUVJSVFnZ0FVRUlkQ0FIYWlFSEN5QUlRUUZySVFnZ0IwRUJkQ0VISUFWQkFYUWlCVUdBZ0FKSkRRQUxJQXhGSUF3Z0VSc01BUXNnRGlnQ0JBc0VmeUFGSUFRZ0NTZ0NCRUVhZGtFRWNTQUpRUVJySWd3b0FnQkJISFpCQVhFZ0JrRVZka0VRY1NBR1FSbDJRY0FBY1NBTFFhb0JjWEp5Y25JaUMwR1F2Z0ZxTFFBQVFRSjBhaUlOS0FJQUlnNG9BZ0FpQVdzaEJTQUxRWkRBQVdvdEFBQWhDeUFDSUJNZ0ZDQUxBbjhnQVNBSFFSQjJTd1JBSUE0b0FnUWhFU0FOSUE1QkNFRU1JQUVnQlVzaUZSdHFLQUlBTmdJQUEwQUNRQ0FJRFFBZ0F5Z0NFQ0lJUVFGcUlRNGdDQzBBQVNFRklBZ3RBQUJCL3dGR0JFQWdCVUdRQVU4RVFDQURJQU1vQWd4QkFXbzJBZ3dnQjBHQS9nTnFJUWRCQ0NFSURBSUxJQU1nRGpZQ0VDQUZRUWwwSUFkcUlRZEJCeUVJREFFTElBTWdEallDRUVFSUlRZ2dCVUVJZENBSGFpRUhDeUFJUVFGcklRZ2dCMEVCZENFSElBRkJBWFFpQVVHQWdBSkpEUUFMSUFFaEJTQVJJQkZGSUJVYkRBRUxJQWNnQVVFUWRHc2hCeUFGUVlDQUFuRkZCRUFnRGlnQ0JDRVJJQTBnRGtFTVFRZ2dBU0FGU3lJVkcyb29BZ0EyQWdBRFFBSkFJQWdOQUNBREtBSVFJZ2hCQVdvaERpQUlMUUFCSVFFZ0NDMEFBRUgvQVVZRVFDQUJRWkFCVHdSQUlBTWdBeWdDREVFQmFqWUNEQ0FIUVlEK0Eyb2hCMEVJSVFnTUFnc2dBeUFPTmdJUUlBRkJDWFFnQjJvaEIwRUhJUWdNQVFzZ0F5QU9OZ0lRUVFnaENDQUJRUWgwSUFkcUlRY0xJQWhCQVdzaENDQUhRUUYwSVFjZ0JVRUJkQ0lGUVlDQUFra05BQXNnRVVVZ0VTQVZHd3dCQ3lBT0tBSUVDeUlCUmhzMkFvQUdJQXdnRENnQ0FFR0FnQUZ5TmdJQUlBa2dDU2dDQkVHQUlISTJBZ1FnQ1NBSktBS0VBa0VFY2pZQ2hBSWdDU0FKS0FLTUFrRUJjallDakFJZ0NTQUpLQUtJQWlBQklBdHpJZ0ZCRW5SeVFRSnlOZ0tJQWlBR0lBRkJISFJ5UVlEQUFISUZJQVlMUVlDQWdJQUVjaUVHQ3lBSklBWTJBZ0FMSUFsQkJHb2hCaUFDUVFScUlRRWdDa0VCYWlJS1FjQUFSdzBBQ3lBSlFReHFJUVlnQWtHRUJtb2hBU0FXUVR4SklCWkJCR29oRmcwQUN3c2dBeUFJTmdJSUlBTWdCVFlDQkNBRElBYzJBZ0FnQXlBTk5nSm9Dd3dDQ3lBalJRUkFRUUVnRzNSQkFYWWhCeUFES0FKOElnUkJBblFpQ2lBREtBSjRha0VNYWlFQklBTW9BblFoQmtFQUlRMGdBeWdDZ0FFaUJVRUVUd1JBSUFSRkRRUWdCRUVNYkNFVElBUkJBM1FoRmtFQUlBZHJJUUlEUUVFQUlRVURRQUpBSUFFaUNTZ0NBQ0lCUlEwQUlBRkJrSUNBQVhGQkVFWUVRQ0FES0FJQUlRRUNRQ0FES0FJSUlnZ05BQ0FCUWY4QlJpRVVJQU1vQWhBaUNDMEFBQ0VCQWtBZ0ZFVUVRQ0FESUFFMkFnQWdBeUFJUVFGcU5nSVFEQUVMSUFGQmp3Rk5CRUFnQXlBQk5nSUFJQU1nQ0VFQmFqWUNFRUVISVFnTUFndEIvd0VoQVNBRFFmOEJOZ0lBQzBFSUlRZ0xJQU1nQ0VFQmF5SUlOZ0lJSUFZZ0FpQUhJQUVnQ0haQkFYRWdCaWdDQUNJQlFSOTJSaHNnQVdvMkFnQWdDU0FKS0FJQVFZQ0F3QUJ5SWdFMkFnQUxJQUZCZ0lHQUNIRkJnQUZHQkVBZ0F5Z0NBQ0VCQWtBZ0F5Z0NDQ0lJRFFBZ0FVSC9BVVloRkNBREtBSVFJZ2d0QUFBaEFRSkFJQlJGQkVBZ0F5QUJOZ0lBSUFNZ0NFRUJhallDRUF3QkN5QUJRWThCVFFSQUlBTWdBVFlDQUNBRElBaEJBV28yQWhCQkJ5RUlEQUlMUWY4QklRRWdBMEgvQVRZQ0FBdEJDQ0VJQ3lBRElBaEJBV3NpQ0RZQ0NDQUdJQXBxSWhRZ0FpQUhJQUVnQ0haQkFYRWdGQ2dDQUNJQlFSOTJSaHNnQVdvMkFnQWdDU0FKS0FJQVFZQ0FnQVJ5SWdFMkFnQUxJQUZCZ0lpQXdBQnhRWUFJUmdSQUlBTW9BZ0FoQVFKQUlBTW9BZ2dpQ0EwQUlBRkIvd0ZHSVJRZ0F5Z0NFQ0lJTFFBQUlRRUNRQ0FVUlFSQUlBTWdBVFlDQUNBRElBaEJBV28yQWhBTUFRc2dBVUdQQVUwRVFDQURJQUUyQWdBZ0F5QUlRUUZxTmdJUVFRY2hDQXdDQzBIL0FTRUJJQU5CL3dFMkFnQUxRUWdoQ0FzZ0F5QUlRUUZySWdnMkFnZ2dCaUFXYWlJVUlBSWdCeUFCSUFoMlFRRnhJQlFvQWdBaUFVRWZka1liSUFGcU5nSUFJQWtnQ1NnQ0FFR0FnSUFnY2lJQk5nSUFDeUFCUVlEQWdJQUVjVUdBd0FCSERRQWdBeWdDQUNFQkFrQWdBeWdDQ0NJSURRQWdBVUgvQVVZaEZDQURLQUlRSWdndEFBQWhBUUpBSUJSRkJFQWdBeUFCTmdJQUlBTWdDRUVCYWpZQ0VBd0JDeUFCUVk4QlRRUkFJQU1nQVRZQ0FDQURJQWhCQVdvMkFoQkJCeUVJREFJTFFmOEJJUUVnQTBIL0FUWUNBQXRCQ0NFSUN5QURJQWhCQVdzaUNEWUNDQ0FHSUJOcUloUWdBaUFISUFFZ0NIWkJBWEVnRkNnQ0FDSUJRUjkyUmhzZ0FXbzJBZ0FnQ1NBSktBSUFRWUNBZ0lBQ2NqWUNBQXNnQmtFRWFpRUdJQWxCQkdvaEFTQUZRUUZxSWdVZ0JFY05BQXNnQmlBVGFpRUdJQWxCREdvaEFTQU5RUVJxSWcwZ0F5Z0NnQUVpQlVGOGNVa05BQXNMSUFVZ0RVME5BaUFFUlEwQ1FRQWhDa0VBSUFkcklSWWdCU0VKQTBBQ1FDQUpJQTFHQkVBZ0RTRUpEQUVMSUFFb0FnQWhDRUVBSVFJRFFFR1FnSUFCSUFKQkEyd2lDWFFnQ0hGQkVDQUpkRVlFUUNBR0lBSWdCR3hCQW5ScUlRZ2dBeWdDQUNFRkFrQWdBeWdDQ0NJVERRQWdCVUgvQVVjaEZDQURLQUlRSWhNdEFBQWhCUUpBSUJSRkJFQWdCVUdRQVU4RVFFSC9BU0VGSUFOQi93RTJBZ0FNQWdzZ0F5QUZOZ0lBSUFNZ0UwRUJhallDRUVFSElSTU1BZ3NnQXlBRk5nSUFJQU1nRTBFQmFqWUNFQXRCQ0NFVEN5QURJQk5CQVdzaUV6WUNDQ0FJSUJZZ0J5QUZJQk4yUVFGeElBZ29BZ0FpQlVFZmRrWWJJQVZxTmdJQUlBRWdBU2dDQUVHQWdNQUFJQWwwY2lJSU5nSUFJQU1vQW9BQklRVUxJQVVoQ1NBQ1FRRnFJZ0lnQlNBTmEwa05BQXNMSUFaQkJHb2hCaUFCUVFScUlRRWdDa0VCYWlJS0lBUkhEUUFMREFJTElBTW9BbmdoQ0NBREtBSjBJUWtnQXlnQ2dBRWhCUUpBSUFNb0Fud2lGa0hBQUVjTkFDQUZRY0FBUncwQUlBaEJqQUpxSVFWQkFDRVdRUUJCQVNBYmRFRUJkaUlLYXlFVUlBTW9BZ2doQWlBREtBSUVJUVlnQXlnQ0FDRUJJQU1vQW1naERRTkFRUUFoRXdOQUlBa2hCeUFGSWdnb0FnQWlDUVJBSUFVZ0NVR1FnSUFCY1VFUVJnUkFJQVlnR0VFUVFROUJEaUFKUWU4RGNSc2dDVUdBZ01BQWNSdEJBblJxSWcwb0FnQWlCQ2dDQUNJRmF5RUdBbjhnQlNBQlFSQjJTd1JBSUFRb0FnUWhEaUFOSUFSQkNFRU1JQVVnQmtzaURCdHFLQUlBTmdJQUEwQUNRQ0FDRFFBZ0F5Z0NFQ0lDUVFGcUlRUWdBaTBBQVNFR0lBSXRBQUJCL3dGR0JFQWdCa0dRQVU4RVFDQURJQU1vQWd4QkFXbzJBZ3dnQVVHQS9nTnFJUUZCQ0NFQ0RBSUxJQU1nQkRZQ0VDQUdRUWwwSUFGcUlRRkJCeUVDREFFTElBTWdCRFlDRUVFSUlRSWdCa0VJZENBQmFpRUJDeUFDUVFGcklRSWdBVUVCZENFQklBVkJBWFFpQlVHQWdBSkpEUUFMSUFVaEJpQU9JQTVGSUF3YkRBRUxJQUVnQlVFUWRHc2hBU0FHUVlDQUFuRkZCRUFnQkNnQ0JDRU9JQTBnQkVFTVFRZ2dCU0FHU3lJTUcyb29BZ0EyQWdBRFFBSkFJQUlOQUNBREtBSVFJZ0pCQVdvaEJDQUNMUUFCSVFVZ0FpMEFBRUgvQVVZRVFDQUZRWkFCVHdSQUlBTWdBeWdDREVFQmFqWUNEQ0FCUVlEK0Eyb2hBVUVJSVFJTUFnc2dBeUFFTmdJUUlBVkJDWFFnQVdvaEFVRUhJUUlNQVFzZ0F5QUVOZ0lRUVFnaEFpQUZRUWgwSUFGcUlRRUxJQUpCQVdzaEFpQUJRUUYwSVFFZ0JrRUJkQ0lHUVlDQUFra05BQXNnRGtVZ0RpQU1Hd3dCQ3lBRUtBSUVDeUVGSUFjZ0ZDQUtJQVVnQnlnQ0FDSUVRUjkyUmhzZ0JHbzJBZ0FnQ1VHQWdNQUFjaUVKQ3lBSlFZQ0JnQWh4UVlBQlJnUkFJQVlnR0VFUVFROUJEaUFKUWZnZWNSc2dDVUdBZ0lBRWNSdEJBblJxSWcwb0FnQWlCQ2dDQUNJRmF5RUdBbjhnQlNBQlFSQjJTd1JBSUFRb0FnUWhEaUFOSUFSQkNFRU1JQVVnQmtzaURCdHFLQUlBTmdJQUEwQUNRQ0FDRFFBZ0F5Z0NFQ0lDUVFGcUlRUWdBaTBBQVNFR0lBSXRBQUJCL3dGR0JFQWdCa0dRQVU4RVFDQURJQU1vQWd4QkFXbzJBZ3dnQVVHQS9nTnFJUUZCQ0NFQ0RBSUxJQU1nQkRZQ0VDQUdRUWwwSUFGcUlRRkJCeUVDREFFTElBTWdCRFlDRUVFSUlRSWdCa0VJZENBQmFpRUJDeUFDUVFGcklRSWdBVUVCZENFQklBVkJBWFFpQlVHQWdBSkpEUUFMSUFVaEJpQU9JQTVGSUF3YkRBRUxJQUVnQlVFUWRHc2hBU0FHUVlDQUFuRkZCRUFnQkNnQ0JDRU9JQTBnQkVFTVFRZ2dCU0FHU3lJTUcyb29BZ0EyQWdBRFFBSkFJQUlOQUNBREtBSVFJZ0pCQVdvaEJDQUNMUUFCSVFVZ0FpMEFBRUgvQVVZRVFDQUZRWkFCVHdSQUlBTWdBeWdDREVFQmFqWUNEQ0FCUVlEK0Eyb2hBVUVJSVFJTUFnc2dBeUFFTmdJUUlBVkJDWFFnQVdvaEFVRUhJUUlNQVFzZ0F5QUVOZ0lRUVFnaEFpQUZRUWgwSUFGcUlRRUxJQUpCQVdzaEFpQUJRUUYwSVFFZ0JrRUJkQ0lHUVlDQUFra05BQXNnRGtVZ0RpQU1Hd3dCQ3lBRUtBSUVDeUVGSUFjZ0ZDQUtJQVVnQnlnQ2dBSWlCRUVmZGtZYklBUnFOZ0tBQWlBSlFZQ0FnQVJ5SVFrTElBbEJnSWlBd0FCeFFZQUlSZ1JBSUFZZ0dFRVFRUTlCRGlBSlFjRDNBWEViSUFsQmdJQ0FJSEViUVFKMGFpSU5LQUlBSWdRb0FnQWlCV3NoQmdKL0lBVWdBVUVRZGtzRVFDQUVLQUlFSVE0Z0RTQUVRUWhCRENBRklBWkxJZ3diYWlnQ0FEWUNBQU5BQWtBZ0FnMEFJQU1vQWhBaUFrRUJhaUVFSUFJdEFBRWhCaUFDTFFBQVFmOEJSZ1JBSUFaQmtBRlBCRUFnQXlBREtBSU1RUUZxTmdJTUlBRkJnUDREYWlFQlFRZ2hBZ3dDQ3lBRElBUTJBaEFnQmtFSmRDQUJhaUVCUVFjaEFnd0JDeUFESUFRMkFoQkJDQ0VDSUFaQkNIUWdBV29oQVFzZ0FrRUJheUVDSUFGQkFYUWhBU0FGUVFGMElnVkJnSUFDU1EwQUN5QUZJUVlnRGlBT1JTQU1Hd3dCQ3lBQklBVkJFSFJySVFFZ0JrR0FnQUp4UlFSQUlBUW9BZ1FoRGlBTklBUkJERUVJSUFVZ0Jrc2lEQnRxS0FJQU5nSUFBMEFDUUNBQ0RRQWdBeWdDRUNJQ1FRRnFJUVFnQWkwQUFTRUZJQUl0QUFCQi93RkdCRUFnQlVHUUFVOEVRQ0FESUFNb0FneEJBV28yQWd3Z0FVR0EvZ05xSVFGQkNDRUNEQUlMSUFNZ0JEWUNFQ0FGUVFsMElBRnFJUUZCQnlFQ0RBRUxJQU1nQkRZQ0VFRUlJUUlnQlVFSWRDQUJhaUVCQ3lBQ1FRRnJJUUlnQVVFQmRDRUJJQVpCQVhRaUJrR0FnQUpKRFFBTElBNUZJQTRnREJzTUFRc2dCQ2dDQkFzaEJTQUhJQlFnQ2lBRklBY29Bb0FFSWdSQkgzWkdHeUFFYWpZQ2dBUWdDVUdBZ0lBZ2NpRUpDeUFKUVlEQWdJQUVjVUdBd0FCR0JIOGdCaUFZUVJCQkQwRU9JQWxCZ0x3UGNSc2dDVUdBZ0lDQUFuRWJRUUowYWlJTktBSUFJZ1FvQWdBaUJXc2hCZ0ovSUFVZ0FVRVFka3NFUUNBRUtBSUVJUTRnRFNBRVFRaEJEQ0FGSUFaTElnd2JhaWdDQURZQ0FBTkFBa0FnQWcwQUlBTW9BaEFpQWtFQmFpRUVJQUl0QUFFaEJpQUNMUUFBUWY4QlJnUkFJQVpCa0FGUEJFQWdBeUFES0FJTVFRRnFOZ0lNSUFGQmdQNERhaUVCUVFnaEFnd0NDeUFESUFRMkFoQWdCa0VKZENBQmFpRUJRUWNoQWd3QkN5QURJQVEyQWhCQkNDRUNJQVpCQ0hRZ0FXb2hBUXNnQWtFQmF5RUNJQUZCQVhRaEFTQUZRUUYwSWdWQmdJQUNTUTBBQ3lBRklRWWdEaUFPUlNBTUd3d0JDeUFCSUFWQkVIUnJJUUVnQmtHQWdBSnhSUVJBSUFRb0FnUWhEaUFOSUFSQkRFRUlJQVVnQmtzaURCdHFLQUlBTmdJQUEwQUNRQ0FDRFFBZ0F5Z0NFQ0lDUVFGcUlRUWdBaTBBQVNFRklBSXRBQUJCL3dGR0JFQWdCVUdRQVU4RVFDQURJQU1vQWd4QkFXbzJBZ3dnQVVHQS9nTnFJUUZCQ0NFQ0RBSUxJQU1nQkRZQ0VDQUZRUWwwSUFGcUlRRkJCeUVDREFFTElBTWdCRFlDRUVFSUlRSWdCVUVJZENBQmFpRUJDeUFDUVFGcklRSWdBVUVCZENFQklBWkJBWFFpQmtHQWdBSkpEUUFMSUE1RklBNGdEQnNNQVFzZ0JDZ0NCQXNoQlNBSElCUWdDaUFGSUFjb0FvQUdJZ1JCSDNaR0d5QUVhallDZ0FZZ0NVR0FnSUNBQW5JRklBa0xOZ0lBQ3lBSVFRUnFJUVVnQjBFRWFpRUpJQk5CQVdvaUUwSEFBRWNOQUFzZ0NFRU1haUVGSUFkQmhBWnFJUWtnRmtFOFNTQVdRUVJxSVJZTkFBc2dBeUFDTmdJSUlBTWdCallDQkNBRElBRTJBZ0FnQXlBTk5nSm9EQUlMUVFFZ0czUkJBWFloRkNBSUlCWkJBblFpRVdwQkRHb2hCeUFES0FJSUlRSWdBeWdDQkNFR0lBTW9BZ0FoQVNBREtBSm9JUTFCQUNFRUFrQWdCVUVFU1EwQUlCWUVRQ0FXUVF4c0lRd2dGa0VEZENFVlFRQWdGR3NoRGdOQVFRQWhFd05BSUFjaUNpZ0NBQ0lJQkVBZ0J5QUlRWkNBZ0FGeFFSQkdCRUFnQmlBWVFSQkJEMEVPSUFoQjd3TnhHeUFJUVlDQXdBQnhHMEVDZEdvaURTZ0NBQ0lIS0FJQUlnVnJJUVlDZnlBRklBRkJFSFpOQkVBZ0FTQUZRUkIwYXlFQklBWkJnSUFDY1FSQUlBY29BZ1FNQWdzZ0J5Z0NCQ0VMSUEwZ0IwRU1RUWdnQlNBR1N5SVNHMm9vQWdBMkFnQURRQUpBSUFJTkFDQURLQUlRSWdKQkFXb2hCeUFDTFFBQklRVWdBaTBBQUVIL0FVY0VRQ0FESUFjMkFoQkJDQ0VDSUFWQkNIUWdBV29oQVF3QkN5QUZRWThCVFFSQUlBTWdCellDRUNBRlFRbDBJQUZxSVFGQkJ5RUNEQUVMSUFNZ0F5Z0NERUVCYWpZQ0RDQUJRWUQrQTJvaEFVRUlJUUlMSUFKQkFXc2hBaUFCUVFGMElRRWdCa0VCZENJR1FZQ0FBa2tOQUFzZ0MwVWdDeUFTR3d3QkN5QUhLQUlFSVFzZ0RTQUhRUWhCRENBRklBWkxJaEliYWlnQ0FEWUNBQU5BQWtBZ0FnMEFJQU1vQWhBaUFrRUJhaUVISUFJdEFBRWhCaUFDTFFBQVFmOEJSd1JBSUFNZ0J6WUNFRUVJSVFJZ0JrRUlkQ0FCYWlFQkRBRUxJQVpCandGTkJFQWdBeUFITmdJUUlBWkJDWFFnQVdvaEFVRUhJUUlNQVFzZ0F5QURLQUlNUVFGcU5nSU1JQUZCZ1A0RGFpRUJRUWdoQWdzZ0FrRUJheUVDSUFGQkFYUWhBU0FGUVFGMElnVkJnSUFDU1EwQUN5QUZJUVlnQ3lBTFJTQVNHd3NoQlNBSklBNGdGQ0FGSUFrb0FnQWlCMEVmZGtZYklBZHFOZ0lBSUFoQmdJREFBSEloQ0FzZ0NFR0FnWUFJY1VHQUFVWUVRQ0FHSUJoQkVFRVBRUTRnQ0VINEhuRWJJQWhCZ0lDQUJIRWJRUUowYWlJTktBSUFJZ2NvQWdBaUJXc2hCZ0ovSUFVZ0FVRVFkazBFUUNBQklBVkJFSFJySVFFZ0JrR0FnQUp4QkVBZ0J5Z0NCQXdDQ3lBSEtBSUVJUXNnRFNBSFFReEJDQ0FGSUFaTEloSWJhaWdDQURZQ0FBTkFBa0FnQWcwQUlBTW9BaEFpQWtFQmFpRUhJQUl0QUFFaEJTQUNMUUFBUWY4QlJ3UkFJQU1nQnpZQ0VFRUlJUUlnQlVFSWRDQUJhaUVCREFFTElBVkJqd0ZOQkVBZ0F5QUhOZ0lRSUFWQkNYUWdBV29oQVVFSElRSU1BUXNnQXlBREtBSU1RUUZxTmdJTUlBRkJnUDREYWlFQlFRZ2hBZ3NnQWtFQmF5RUNJQUZCQVhRaEFTQUdRUUYwSWdaQmdJQUNTUTBBQ3lBTFJTQUxJQkliREFFTElBY29BZ1FoQ3lBTklBZEJDRUVNSUFVZ0Jrc2lFaHRxS0FJQU5nSUFBMEFDUUNBQ0RRQWdBeWdDRUNJQ1FRRnFJUWNnQWkwQUFTRUdJQUl0QUFCQi93RkhCRUFnQXlBSE5nSVFRUWdoQWlBR1FRaDBJQUZxSVFFTUFRc2dCa0dQQVUwRVFDQURJQWMyQWhBZ0JrRUpkQ0FCYWlFQlFRY2hBZ3dCQ3lBRElBTW9BZ3hCQVdvMkFnd2dBVUdBL2dOcUlRRkJDQ0VDQ3lBQ1FRRnJJUUlnQVVFQmRDRUJJQVZCQVhRaUJVR0FnQUpKRFFBTElBVWhCaUFMSUF0RklCSWJDeUVGSUFrZ0VXb2lCeUFPSUJRZ0JTQUhLQUlBSWdkQkgzWkdHeUFIYWpZQ0FDQUlRWUNBZ0FSeUlRZ0xJQWhCZ0lpQXdBQnhRWUFJUmdSQUlBWWdHRUVRUVE5QkRpQUlRY0QzQVhFYklBaEJnSUNBSUhFYlFRSjBhaUlOS0FJQUlnY29BZ0FpQldzaEJnSi9JQVVnQVVFUWRrMEVRQ0FCSUFWQkVIUnJJUUVnQmtHQWdBSnhCRUFnQnlnQ0JBd0NDeUFIS0FJRUlRc2dEU0FIUVF4QkNDQUZJQVpMSWhJYmFpZ0NBRFlDQUFOQUFrQWdBZzBBSUFNb0FoQWlBa0VCYWlFSElBSXRBQUVoQlNBQ0xRQUFRZjhCUndSQUlBTWdCellDRUVFSUlRSWdCVUVJZENBQmFpRUJEQUVMSUFWQmp3Rk5CRUFnQXlBSE5nSVFJQVZCQ1hRZ0FXb2hBVUVISVFJTUFRc2dBeUFES0FJTVFRRnFOZ0lNSUFGQmdQNERhaUVCUVFnaEFnc2dBa0VCYXlFQ0lBRkJBWFFoQVNBR1FRRjBJZ1pCZ0lBQ1NRMEFDeUFMUlNBTElCSWJEQUVMSUFjb0FnUWhDeUFOSUFkQkNFRU1JQVVnQmtzaUVodHFLQUlBTmdJQUEwQUNRQ0FDRFFBZ0F5Z0NFQ0lDUVFGcUlRY2dBaTBBQVNFR0lBSXRBQUJCL3dGSEJFQWdBeUFITmdJUVFRZ2hBaUFHUVFoMElBRnFJUUVNQVFzZ0JrR1BBVTBFUUNBRElBYzJBaEFnQmtFSmRDQUJhaUVCUVFjaEFnd0JDeUFESUFNb0FneEJBV28yQWd3Z0FVR0EvZ05xSVFGQkNDRUNDeUFDUVFGcklRSWdBVUVCZENFQklBVkJBWFFpQlVHQWdBSkpEUUFMSUFVaEJpQUxJQXRGSUJJYkN5RUZJQWtnRldvaUJ5QU9JQlFnQlNBSEtBSUFJZ2RCSDNaR0d5QUhhallDQUNBSVFZQ0FnQ0J5SVFnTElBaEJnTUNBZ0FSeFFZREFBRVlFZnlBR0lCaEJFRUVQUVE0Z0NFR0F2QTl4R3lBSVFZQ0FnSUFDY1J0QkFuUnFJZzBvQWdBaUJ5Z0NBQ0lGYXlFR0FuOGdCU0FCUVJCMlRRUkFJQUVnQlVFUWRHc2hBU0FHUVlDQUFuRUVRQ0FIS0FJRURBSUxJQWNvQWdRaEN5QU5JQWRCREVFSUlBVWdCa3NpRWh0cUtBSUFOZ0lBQTBBQ1FDQUNEUUFnQXlnQ0VDSUNRUUZxSVFjZ0FpMEFBU0VGSUFJdEFBQkIvd0ZIQkVBZ0F5QUhOZ0lRUVFnaEFpQUZRUWgwSUFGcUlRRU1BUXNnQlVHUEFVMEVRQ0FESUFjMkFoQWdCVUVKZENBQmFpRUJRUWNoQWd3QkN5QURJQU1vQWd4QkFXbzJBZ3dnQVVHQS9nTnFJUUZCQ0NFQ0N5QUNRUUZySVFJZ0FVRUJkQ0VCSUFaQkFYUWlCa0dBZ0FKSkRRQUxJQXRGSUFzZ0Voc01BUXNnQnlnQ0JDRUxJQTBnQjBFSVFRd2dCU0FHU3lJU0cyb29BZ0EyQWdBRFFBSkFJQUlOQUNBREtBSVFJZ0pCQVdvaEJ5QUNMUUFCSVFZZ0FpMEFBRUgvQVVjRVFDQURJQWMyQWhCQkNDRUNJQVpCQ0hRZ0FXb2hBUXdCQ3lBR1FZOEJUUVJBSUFNZ0J6WUNFQ0FHUVFsMElBRnFJUUZCQnlFQ0RBRUxJQU1nQXlnQ0RFRUJhallDRENBQlFZRCtBMm9oQVVFSUlRSUxJQUpCQVdzaEFpQUJRUUYwSVFFZ0JVRUJkQ0lGUVlDQUFra05BQXNnQlNFR0lBc2dDMFVnRWhzTElRVWdDU0FNYWlJSElBNGdGQ0FGSUFjb0FnQWlCMEVmZGtZYklBZHFOZ0lBSUFoQmdJQ0FnQUp5QlNBSUN6WUNBQXNnQ2tFRWFpRUhJQWxCQkdvaENTQVRRUUZxSWhNZ0ZrY05BQXNnQ2tFTWFpRUhJQWtnREdvaENTQUVRUVJxSWdRZ0F5Z0NnQUVpQlVGOGNVa05BQXNNQVF0QkJDQUZRWHh4SWdjZ0IwRUVUUnRCQVdzaUIwRjhjVUVFYWlFRUlBZ2dCMEVCZEVGNGNXcEJGR29oQndzZ0F5QUNOZ0lJSUFNZ0JqWUNCQ0FESUFFMkFnQWdBeUFOTmdKb0lCWkZEUUVnQkNBRlR3MEJRUUFoQ2tFQUlCUnJJUXNnQlNFQkEwQUNRQ0FCSUFSR0JFQWdCQ0VCREFFTElBY29BZ0FoQWtFQUlRZ0RRRUdRZ0lBQklBaEJBMndpRFhRZ0FuRkJFQ0FOZEVZRVFDQUpJQWdnRm14QkFuUnFJUTRnQXlBWVFSQkJEMEVPSUFJZ0RYWWlBVUh2QTNFYklBRkJnSURBQUhFYlFRSjBhaUlUTmdKb0lBTWdBeWdDQkNBVEtBSUFJZ0lvQWdBaUFXc2lCVFlDQkFKL0lBRWdBeWdDQUNJR1FSQjJTd1JBSUFJb0FnUWhEQ0FESUFFMkFnUWdFeUFDUVFoQkRDQUJJQVZMSWhFYmFpZ0NBRFlDQUNBREtBSUlJUUlEUUFKQUlBSU5BQ0FES0FJUUlnSkJBV29oRXlBQ0xRQUJJUVVnQWkwQUFFSC9BVVlFUUNBRlFaQUJUd1JBSUFNZ0F5Z0NERUVCYWpZQ0RDQUdRWUQrQTJvaEJrRUlJUUlNQWdzZ0F5QVROZ0lRSUFWQkNYUWdCbW9oQmtFSElRSU1BUXNnQXlBVE5nSVFRUWdoQWlBRlFRaDBJQVpxSVFZTElBTWdBa0VCYXlJQ05nSUlJQU1nQmtFQmRDSUdOZ0lBSUFNZ0FVRUJkQ0lCTmdJRUlBRkJnSUFDU1EwQUN5QU1JQXhGSUJFYkRBRUxJQU1nQmlBQlFSQjBheUlHTmdJQUlBVkJnSUFDY1VVRVFDQUNLQUlFSVF3Z0V5QUNRUXhCQ0NBQklBVkxJaEViYWlnQ0FEWUNBQ0FES0FJSUlRSURRQUpBSUFJTkFDQURLQUlRSWdKQkFXb2hFeUFDTFFBQklRRWdBaTBBQUVIL0FVWUVRQ0FCUVpBQlR3UkFJQU1nQXlnQ0RFRUJhallDRENBR1FZRCtBMm9oQmtFSUlRSU1BZ3NnQXlBVE5nSVFJQUZCQ1hRZ0Jtb2hCa0VISVFJTUFRc2dBeUFUTmdJUVFRZ2hBaUFCUVFoMElBWnFJUVlMSUFNZ0FrRUJheUlDTmdJSUlBTWdCa0VCZENJR05nSUFJQU1nQlVFQmRDSUZOZ0lFSUFWQmdJQUNTUTBBQ3lBTVJTQU1JQkViREFFTElBSW9BZ1FMSVFFZ0RpQUxJQlFnQVNBT0tBSUFJZ1ZCSDNaR0d5QUZhallDQUNBSElBY29BZ0JCZ0lEQUFDQU5kSElpQWpZQ0FDQURLQUtBQVNFRkN5QUlRUUZxSWdnZ0JTSUJJQVJyU1EwQUN3c2dCMEVFYWlFSElBbEJCR29oQ1NBS1FRRnFJZ29nRmtjTkFBc01BUXRCQUNFUlFRQWhGQUpBQWtBQ1FBSkFJQU1vQW53aUZrSEFBRWNOQUNBREtBS0FBVUhBQUVjTkFFRUFRUUVnRzNRaUFVRUJkaUFCY2lJT2F5RU1JQU5CNUFCcUlRY2dBMEhnQUdvaENDQURRUnhxSVJZZ0F5Z0NlRUdNQW1vaEJpQURLQUlJSVFRZ0F5Z0NCQ0VCSUFNb0FnQWhBaUFES0FKb0lRa2dBeWdDZENFRklCZEJDSEVOQVFOQVFRQWhGUU5BSUFVaEV3SkFBa0FDZnlBR0lnMG9BZ0FpQmtVRVFDQUJJQWdvQWdBaUJTZ0NBQ0lHYXlFQkFuOGdCaUFDUVJCMlN3UkFJQVVvQWdRaENTQUlJQVZCQ0VFTUlBRWdCa2tpQ2h0cUtBSUFOZ0lBQTBBQ1FDQUVEUUFnQXlnQ0VDSUZRUUZxSVFRZ0JTMEFBU0VCSUFVdEFBQkIvd0ZHQkVBZ0FVR1FBVThFUUNBRElBTW9BZ3hCQVdvMkFnd2dBa0dBL2dOcUlRSkJDQ0VFREFJTElBTWdCRFlDRUNBQlFRbDBJQUpxSVFKQkJ5RUVEQUVMSUFNZ0JEWUNFRUVJSVFRZ0FVRUlkQ0FDYWlFQ0N5QUVRUUZySVFRZ0FrRUJkQ0VDSUFaQkFYUWlCa0dBZ0FKSkRRQUxJQVloQVNBSklBbEZJQW9iREFFTElBSWdCa0VRZEdzaEFpQUJRWUNBQW5GRkJFQWdCU2dDQkNFSklBZ2dCVUVNUVFnZ0FTQUdTU0lLRzJvb0FnQTJBZ0FEUUFKQUlBUU5BQ0FES0FJUUlnWkJBV29oQkNBR0xRQUJJUVVnQmkwQUFFSC9BVVlFUUNBRlFaQUJUd1JBSUFNZ0F5Z0NERUVCYWpZQ0RDQUNRWUQrQTJvaEFrRUlJUVFNQWdzZ0F5QUVOZ0lRSUFWQkNYUWdBbW9oQWtFSElRUU1BUXNnQXlBRU5nSVFRUWdoQkNBRlFRaDBJQUpxSVFJTElBUkJBV3NoQkNBQ1FRRjBJUUlnQVVFQmRDSUJRWUNBQWtrTkFBc2dDVVVnQ1NBS0d3d0JDeUFGS0FJRUMwVUVRQ0FJSVFrTUJBc2dBU0FIS0FJQUlnVW9BZ0FpQm1zaEFRSi9JQVlnQWtFUWRrc0VRQ0FGS0FJRUlRa2dCeUFGUVFoQkRDQUJJQVpKSWdzYmFpZ0NBQ0lGTmdJQUEwQUNRQ0FFRFFBZ0F5Z0NFQ0lFUVFGcUlRb2dCQzBBQVNFQklBUXRBQUJCL3dGR0JFQWdBVUdRQVU4RVFDQURJQU1vQWd4QkFXbzJBZ3dnQWtHQS9nTnFJUUpCQ0NFRURBSUxJQU1nQ2pZQ0VDQUJRUWwwSUFKcUlRSkJCeUVFREFFTElBTWdDallDRUVFSUlRUWdBVUVJZENBQ2FpRUNDeUFFUVFGcklRUWdBa0VCZENFQ0lBWkJBWFFpQmtHQWdBSkpEUUFMSUFZaEFTQUpJQWxGSUFzYkRBRUxJQUlnQmtFUWRHc2hBaUFCUVlDQUFuRkZCRUFnQlNnQ0JDRUpJQWNnQlVFTVFRZ2dBU0FHU1NJTEcyb29BZ0FpQlRZQ0FBTkFBa0FnQkEwQUlBTW9BaEFpQkVFQmFpRUtJQVF0QUFFaEJpQUVMUUFBUWY4QlJnUkFJQVpCa0FGUEJFQWdBeUFES0FJTVFRRnFOZ0lNSUFKQmdQNERhaUVDUVFnaEJBd0NDeUFESUFvMkFoQWdCa0VKZENBQ2FpRUNRUWNoQkF3QkN5QURJQW8yQWhCQkNDRUVJQVpCQ0hRZ0Ftb2hBZ3NnQkVFQmF5RUVJQUpCQVhRaEFpQUJRUUYwSWdGQmdJQUNTUTBBQ3lBSlJTQUpJQXNiREFFTElBVW9BZ1FMSVFvZ0FTQUZLQUlBSWdacklRRUNmeUFHSUFKQkVIWkxCRUFnQlNnQ0JDRUpJQWNnQlVFSVFRd2dBU0FHU1NJTEcyb29BZ0EyQWdBRFFBSkFJQVFOQUNBREtBSVFJZ1ZCQVdvaEJDQUZMUUFCSVFFZ0JTMEFBRUgvQVVZRVFDQUJRWkFCVHdSQUlBTWdBeWdDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFRTUFnc2dBeUFFTmdJUUlBRkJDWFFnQW1vaEFrRUhJUVFNQVFzZ0F5QUVOZ0lRUVFnaEJDQUJRUWgwSUFKcUlRSUxJQVJCQVdzaEJDQUNRUUYwSVFJZ0JrRUJkQ0lHUVlDQUFra05BQXNnQmlFQklBa2dDVVVnQ3hzTUFRc2dBaUFHUVJCMGF5RUNJQUZCZ0lBQ2NVVUVRQ0FGS0FJRUlRa2dCeUFGUVF4QkNDQUJJQVpKSWdzYmFpZ0NBRFlDQUFOQUFrQWdCQTBBSUFNb0FoQWlCa0VCYWlFRUlBWXRBQUVoQlNBR0xRQUFRZjhCUmdSQUlBVkJrQUZQQkVBZ0F5QURLQUlNUVFGcU5nSU1JQUpCZ1A0RGFpRUNRUWdoQkF3Q0N5QURJQVEyQWhBZ0JVRUpkQ0FDYWlFQ1FRY2hCQXdCQ3lBRElBUTJBaEJCQ0NFRUlBVkJDSFFnQW1vaEFnc2dCRUVCYXlFRUlBSkJBWFFoQWlBQlFRRjBJZ0ZCZ0lBQ1NRMEFDeUFKUlNBSklBc2JEQUVMSUFVb0FnUUxJUVZCQUNFR0lBY2hDUUpBQWtBQ1FBSi9Ba0FDUUNBRklBcEJBWFJ5RGdRQUFRTUZDQXNnQVNBV0lBMG9BZ1JCRVhaQkJIRWdEVUVFYXlJSktBSUFRUk4yUVFGeGNpSVJRWkMrQVdvdEFBQkJBblJxSWdvb0FnQWlCU2dDQUNJR2F5RUJBbjhnQmlBQ1FSQjJTd1JBSUFVb0FnUWhDeUFLSUFWQkNFRU1JQUVnQmtraUNodHFLQUlBTmdJQUEwQUNRQ0FFRFFBZ0F5Z0NFQ0lGUVFGcUlRUWdCUzBBQVNFQklBVXRBQUJCL3dGR0JFQWdBVUdRQVU4RVFDQURJQU1vQWd4QkFXbzJBZ3dnQWtHQS9nTnFJUUpCQ0NFRURBSUxJQU1nQkRZQ0VDQUJRUWwwSUFKcUlRSkJCeUVFREFFTElBTWdCRFlDRUVFSUlRUWdBVUVJZENBQ2FpRUNDeUFFUVFGcklRUWdBa0VCZENFQ0lBWkJBWFFpQmtHQWdBSkpEUUFMSUFZaEFTQUxJQXRGSUFvYkRBRUxJQUlnQmtFUWRHc2hBaUFCUVlDQUFuRkZCRUFnQlNnQ0JDRUxJQW9nQlVFTVFRZ2dBU0FHU1NJS0cyb29BZ0EyQWdBRFFBSkFJQVFOQUNBREtBSVFJZ1pCQVdvaEJDQUdMUUFCSVFVZ0JpMEFBRUgvQVVZRVFDQUZRWkFCVHdSQUlBTWdBeWdDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFRTUFnc2dBeUFFTmdJUUlBVkJDWFFnQW1vaEFrRUhJUVFNQVFzZ0F5QUVOZ0lRUVFnaEJDQUZRUWgwSUFKcUlRSUxJQVJCQVdzaEJDQUNRUUYwSVFJZ0FVRUJkQ0lCUVlDQUFra05BQXNnQzBVZ0N5QUtHd3dCQ3lBRktBSUVDeUVGSUJNZ0RpQU1JQVVnRVVHUXdBRnFMUUFBSWdaR0d6WUNBQ0FKSUFrb0FnQkJJSEkyQWdBZ0RTQU5LQUlFUVFoeU5nSUVJQTFCakFKcklna2dDU2dDQUVHQWdBaHlOZ0lBSUExQmhBSnJJZ2tnQ1NnQ0FFR0FnQUp5TmdJQUlBMUJpQUpySWdrZ0NTZ0NBQ0FGSUFaeklnVkJIM1J5UVlDQUJISTJBZ0FnQlVFVGRDQUJJQllnQXlnQ2JDMEFBa0VDZEdvaUNTZ0NBQ0lGS0FJQUlnWnJJUUVDZnlBR0lBSkJFSFpMQkVBZ0JTZ0NCQ0VLSUFrZ0JVRUlRUXdnQVNBR1NTSVJHMm9vQWdBMkFnQURRQUpBSUFRTkFDQURLQUlRSWdWQkFXb2hDU0FGTFFBQklRRWdCUzBBQUVIL0FVWUVRQ0FCUVpBQlR3UkFJQU1nQXlnQ0RFRUJhallDRENBQ1FZRCtBMm9oQWtFSUlRUU1BZ3NnQXlBSk5nSVFJQUZCQ1hRZ0Ftb2hBa0VISVFRTUFRc2dBeUFKTmdJUVFRZ2hCQ0FCUVFoMElBSnFJUUlMSUFSQkFXc2hCQ0FDUVFGMElRSWdCa0VCZENJR1FZQ0FBa2tOQUFzZ0JpRUJJQW9nQ2tVZ0VSc01BUXNnQWlBR1FSQjBheUVDSUFGQmdJQUNjVVVFUUNBRktBSUVJUW9nQ1NBRlFReEJDQ0FCSUFaSkloRWJhaWdDQURZQ0FBTkFBa0FnQkEwQUlBTW9BaEFpQmtFQmFpRUpJQVl0QUFFaEJTQUdMUUFBUWY4QlJnUkFJQVZCa0FGUEJFQWdBeUFES0FJTVFRRnFOZ0lNSUFKQmdQNERhaUVDUVFnaEJBd0NDeUFESUFrMkFoQWdCVUVKZENBQ2FpRUNRUWNoQkF3QkN5QURJQWsyQWhCQkNDRUVJQVZCQ0hRZ0Ftb2hBZ3NnQkVFQmF5RUVJQUpCQVhRaEFpQUJRUUYwSWdGQmdJQUNTUTBBQ3lBS1JTQUtJQkViREFFTElBVW9BZ1FMSVFWQkVISWlCaUFGUlEwQkdnc2dBU0FXSUEwb0FnUkJGSFpCQkhFZ0RVRUVheUlLS0FJQVFSWjJRUUZ4SUFaQkQzWkJFSEVnQmtFVGRrSEFBSEVnQmtFRGRrR3FBWEZ5Y25KeUloSkJrTDRCYWkwQUFFRUNkR29pQ3lnQ0FDSUpLQUlBSWdWcklRRUNmeUFGSUFKQkVIWkxCRUFnQ1NnQ0JDRVJJQXNnQ1VFSVFRd2dBU0FGU1NJTEcyb29BZ0EyQWdBRFFBSkFJQVFOQUNBREtBSVFJZ2xCQVdvaEJDQUpMUUFCSVFFZ0NTMEFBRUgvQVVZRVFDQUJRWkFCVHdSQUlBTWdBeWdDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFRTUFnc2dBeUFFTmdJUUlBRkJDWFFnQW1vaEFrRUhJUVFNQVFzZ0F5QUVOZ0lRUVFnaEJDQUJRUWgwSUFKcUlRSUxJQVJCQVdzaEJDQUNRUUYwSVFJZ0JVRUJkQ0lGUVlDQUFra05BQXNnQlNFQklCRWdFVVVnQ3hzTUFRc2dBaUFGUVJCMGF5RUNJQUZCZ0lBQ2NVVUVRQ0FKS0FJRUlSRWdDeUFKUVF4QkNDQUJJQVZKSWdzYmFpZ0NBRFlDQUFOQUFrQWdCQTBBSUFNb0FoQWlDVUVCYWlFRUlBa3RBQUVoQlNBSkxRQUFRZjhCUmdSQUlBVkJrQUZQQkVBZ0F5QURLQUlNUVFGcU5nSU1JQUpCZ1A0RGFpRUNRUWdoQkF3Q0N5QURJQVEyQWhBZ0JVRUpkQ0FDYWlFQ1FRY2hCQXdCQ3lBRElBUTJBaEJCQ0NFRUlBVkJDSFFnQW1vaEFnc2dCRUVCYXlFRUlBSkJBWFFoQWlBQlFRRjBJZ0ZCZ0lBQ1NRMEFDeUFSUlNBUklBc2JEQUVMSUFrb0FnUUxJUVVnRXlBT0lBd2dCU0FTUVpEQUFXb3RBQUFpQ1VZYk5nS0FBaUFLSUFvb0FnQkJnQUp5TmdJQUlBMGdEU2dDQkVIQUFISTJBZ1FnQmlBRklBbHpRUlowY2tHQUFYSUxJUVlnQVNBV0lBTW9BbXdnQmtFR2RrSHZBM0ZxTFFBQVFRSjBhaUlLS0FJQUlna29BZ0FpQldzaEFRSi9JQVVnQWtFUWRrc0VRQ0FKS0FJRUlRc2dDaUFKUVFoQkRDQUJJQVZKSWdvYmFpZ0NBRFlDQUFOQUFrQWdCQTBBSUFNb0FoQWlDVUVCYWlFRUlBa3RBQUVoQVNBSkxRQUFRZjhCUmdSQUlBRkJrQUZQQkVBZ0F5QURLQUlNUVFGcU5nSU1JQUpCZ1A0RGFpRUNRUWdoQkF3Q0N5QURJQVEyQWhBZ0FVRUpkQ0FDYWlFQ1FRY2hCQXdCQ3lBRElBUTJBaEJCQ0NFRUlBRkJDSFFnQW1vaEFnc2dCRUVCYXlFRUlBSkJBWFFoQWlBRlFRRjBJZ1ZCZ0lBQ1NRMEFDeUFGSVFFZ0N5QUxSU0FLR3d3QkN5QUNJQVZCRUhScklRSWdBVUdBZ0FKeFJRUkFJQWtvQWdRaEN5QUtJQWxCREVFSUlBRWdCVWtpQ2h0cUtBSUFOZ0lBQTBBQ1FDQUVEUUFnQXlnQ0VDSUpRUUZxSVFRZ0NTMEFBU0VGSUFrdEFBQkIvd0ZHQkVBZ0JVR1FBVThFUUNBRElBTW9BZ3hCQVdvMkFnd2dBa0dBL2dOcUlRSkJDQ0VFREFJTElBTWdCRFlDRUNBRlFRbDBJQUpxSVFKQkJ5RUVEQUVMSUFNZ0JEWUNFRUVJSVFRZ0JVRUlkQ0FDYWlFQ0N5QUVRUUZySVFRZ0FrRUJkQ0VDSUFGQkFYUWlBVUdBZ0FKSkRRQUxJQXRGSUFzZ0Noc01BUXNnQ1NnQ0JBdEZEUUVMSUFFZ0ZpQU5LQUlFUVJkMlFRUnhJQTFCQkdzaUNpZ0NBRUVaZGtFQmNTQUdRUkoyUVJCeElBWkJGblpCd0FCeElBWkJCblpCcWdGeGNuSnljaUlTUVpDK0FXb3RBQUJCQW5ScUlnc29BZ0FpQ1NnQ0FDSUZheUVCQW44Z0JTQUNRUkIyU3dSQUlBa29BZ1FoRVNBTElBbEJDRUVNSUFFZ0JVa2lDeHRxS0FJQU5nSUFBMEFDUUNBRURRQWdBeWdDRUNJSlFRRnFJUVFnQ1MwQUFTRUJJQWt0QUFCQi93RkdCRUFnQVVHUUFVOEVRQ0FESUFNb0FneEJBV28yQWd3Z0FrR0EvZ05xSVFKQkNDRUVEQUlMSUFNZ0JEWUNFQ0FCUVFsMElBSnFJUUpCQnlFRURBRUxJQU1nQkRZQ0VFRUlJUVFnQVVFSWRDQUNhaUVDQ3lBRVFRRnJJUVFnQWtFQmRDRUNJQVZCQVhRaUJVR0FnQUpKRFFBTElBVWhBU0FSSUJGRklBc2JEQUVMSUFJZ0JVRVFkR3NoQWlBQlFZQ0FBbkZGQkVBZ0NTZ0NCQ0VSSUFzZ0NVRU1RUWdnQVNBRlNTSUxHMm9vQWdBMkFnQURRQUpBSUFRTkFDQURLQUlRSWdsQkFXb2hCQ0FKTFFBQklRVWdDUzBBQUVIL0FVWUVRQ0FGUVpBQlR3UkFJQU1nQXlnQ0RFRUJhallDRENBQ1FZRCtBMm9oQWtFSUlRUU1BZ3NnQXlBRU5nSVFJQVZCQ1hRZ0Ftb2hBa0VISVFRTUFRc2dBeUFFTmdJUVFRZ2hCQ0FGUVFoMElBSnFJUUlMSUFSQkFXc2hCQ0FDUVFGMElRSWdBVUVCZENJQlFZQ0FBa2tOQUFzZ0VVVWdFU0FMR3d3QkN5QUpLQUlFQ3lFRklCTWdEaUFNSUFVZ0VrR1F3QUZxTFFBQUlnbEdHellDZ0FRZ0NpQUtLQUlBUVlBUWNqWUNBQ0FOSUEwb0FnUkJnQVJ5TmdJRUlBWWdCU0FKYzBFWmRISkJnQWh5SVFZTElBRWdGaUFES0FKc0lBWkJDWFpCN3dOeGFpMEFBRUVDZEdvaUNTZ0NBQ0lLS0FJQUlnVnJJUUVDZnlBRklBSkJFSFpMQkVBZ0NpZ0NCQ0VMSUFrZ0NrRUlRUXdnQVNBRlNTSVJHMm9vQWdBMkFnQURRQUpBSUFRTkFDQURLQUlRSWdSQkFXb2hDaUFFTFFBQklRRWdCQzBBQUVIL0FVWUVRQ0FCUVpBQlR3UkFJQU1nQXlnQ0RFRUJhallDRENBQ1FZRCtBMm9oQWtFSUlRUU1BZ3NnQXlBS05nSVFJQUZCQ1hRZ0Ftb2hBa0VISVFRTUFRc2dBeUFLTmdJUVFRZ2hCQ0FCUVFoMElBSnFJUUlMSUFSQkFXc2hCQ0FDUVFGMElRSWdCVUVCZENJRlFZQ0FBa2tOQUFzZ0JTRUJJQXNnQzBVZ0VSc01BUXNnQWlBRlFSQjBheUVDSUFGQmdJQUNjVVVFUUNBS0tBSUVJUXNnQ1NBS1FReEJDQ0FCSUFWSkloRWJhaWdDQURZQ0FBTkFBa0FnQkEwQUlBTW9BaEFpQkVFQmFpRUtJQVF0QUFFaEJTQUVMUUFBUWY4QlJnUkFJQVZCa0FGUEJFQWdBeUFES0FJTVFRRnFOZ0lNSUFKQmdQNERhaUVDUVFnaEJBd0NDeUFESUFvMkFoQWdCVUVKZENBQ2FpRUNRUWNoQkF3QkN5QURJQW8yQWhCQkNDRUVJQVZCQ0hRZ0Ftb2hBZ3NnQkVFQmF5RUVJQUpCQVhRaEFpQUJRUUYwSWdGQmdJQUNTUTBBQ3lBTFJTQUxJQkViREFFTElBb29BZ1FMUlEwREN5QUJJQllnRFNnQ0JFRWFka0VFY1NBTlFRUnJJaEVvQWdCQkhIWkJBWEVnQmtFVmRrRVFjU0FHUVJsMlFjQUFjU0FHUVFsMlFhb0JjWEp5Y25JaUMwR1F2Z0ZxTFFBQVFRSjBhaUlKS0FJQUlnb29BZ0FpQldzTUFRc0NRQ0FHUVpDQWdBRnhEUUFnQVNBV0lBTW9BbXdnQmtIdkEzRnFMUUFBUVFKMGFpSUpLQUlBSWdvb0FnQWlCV3NoQVFKL0lBVWdBa0VRZGtzRVFDQUtLQUlFSVFzZ0NTQUtRUWhCRENBQklBVkpJaEViYWlnQ0FEWUNBQU5BQWtBZ0JBMEFJQU1vQWhBaUJFRUJhaUVLSUFRdEFBRWhBU0FFTFFBQVFmOEJSZ1JBSUFGQmtBRlBCRUFnQXlBREtBSU1RUUZxTmdJTUlBSkJnUDREYWlFQ1FRZ2hCQXdDQ3lBRElBbzJBaEFnQVVFSmRDQUNhaUVDUVFjaEJBd0JDeUFESUFvMkFoQkJDQ0VFSUFGQkNIUWdBbW9oQWdzZ0JFRUJheUVFSUFKQkFYUWhBaUFGUVFGMElnVkJnSUFDU1EwQUN5QUZJUUVnQ3lBTFJTQVJHd3dCQ3lBQ0lBVkJFSFJySVFJZ0FVR0FnQUp4UlFSQUlBb29BZ1FoQ3lBSklBcEJERUVJSUFFZ0JVa2lFUnRxS0FJQU5nSUFBMEFDUUNBRURRQWdBeWdDRUNJRVFRRnFJUW9nQkMwQUFTRUZJQVF0QUFCQi93RkdCRUFnQlVHUUFVOEVRQ0FESUFNb0FneEJBV28yQWd3Z0FrR0EvZ05xSVFKQkNDRUVEQUlMSUFNZ0NqWUNFQ0FGUVFsMElBSnFJUUpCQnlFRURBRUxJQU1nQ2pZQ0VFRUlJUVFnQlVFSWRDQUNhaUVDQ3lBRVFRRnJJUVFnQWtFQmRDRUNJQUZCQVhRaUFVR0FnQUpKRFFBTElBdEZJQXNnRVJzTUFRc2dDaWdDQkF0RkRRQWdBU0FXSUEwb0FnUkJFWFpCQkhFZ0RVRUVheUlMS0FJQVFSTjJRUUZ4SUFaQkRuWkJFSEVnQmtFUWRrSEFBSEVnQmtHcUFYRnljbkp5SWhKQmtMNEJhaTBBQUVFQ2RHb2lDU2dDQUNJS0tBSUFJZ1ZySVFFQ2Z5QUZJQUpCRUhaTEJFQWdDaWdDQkNFUklBa2dDa0VJUVF3Z0FTQUZTU0lQRzJvb0FnQTJBZ0FEUUFKQUlBUU5BQ0FES0FJUUlnUkJBV29oQ2lBRUxRQUJJUUVnQkMwQUFFSC9BVVlFUUNBQlFaQUJUd1JBSUFNZ0F5Z0NERUVCYWpZQ0RDQUNRWUQrQTJvaEFrRUlJUVFNQWdzZ0F5QUtOZ0lRSUFGQkNYUWdBbW9oQWtFSElRUU1BUXNnQXlBS05nSVFRUWdoQkNBQlFRaDBJQUpxSVFJTElBUkJBV3NoQkNBQ1FRRjBJUUlnQlVFQmRDSUZRWUNBQWtrTkFBc2dCU0VCSUJFZ0VVVWdEeHNNQVFzZ0FpQUZRUkIwYXlFQ0lBRkJnSUFDY1VVRVFDQUtLQUlFSVJFZ0NTQUtRUXhCQ0NBQklBVkpJZzhiYWlnQ0FEWUNBQU5BQWtBZ0JBMEFJQU1vQWhBaUJFRUJhaUVLSUFRdEFBRWhCU0FFTFFBQVFmOEJSZ1JBSUFWQmtBRlBCRUFnQXlBREtBSU1RUUZxTmdJTUlBSkJnUDREYWlFQ1FRZ2hCQXdDQ3lBRElBbzJBaEFnQlVFSmRDQUNhaUVDUVFjaEJBd0JDeUFESUFvMkFoQkJDQ0VFSUFWQkNIUWdBbW9oQWdzZ0JFRUJheUVFSUFKQkFYUWhBaUFCUVFGMElnRkJnSUFDU1EwQUN5QVJSU0FSSUE4YkRBRUxJQW9vQWdRTElRVWdFeUFPSUF3Z0JTQVNRWkRBQVdvdEFBQWlDa1liTmdJQUlBc2dDeWdDQUVFZ2NqWUNBQ0FOSUEwb0FnUkJDSEkyQWdRZ0RVR01BbXNpQ3lBTEtBSUFRWUNBQ0hJMkFnQWdEVUdFQW1zaUN5QUxLQUlBUVlDQUFuSTJBZ0FnRFVHSUFtc2lDeUFMS0FJQUlBVWdDbk1pQlVFZmRISkJnSUFFY2pZQ0FDQUdJQVZCRTNSeVFSQnlJUVlMQWtBZ0JrR0FnWUFJY1EwQUlBRWdGaUFES0FKc0lBWkJBM1lpRVVIdkEzRnFMUUFBUVFKMGFpSUpLQUlBSWdvb0FnQWlCV3NoQVFKL0lBVWdBa0VRZGtzRVFDQUtLQUlFSVFzZ0NTQUtRUWhCRENBQklBVkpJaEliYWlnQ0FEWUNBQU5BQWtBZ0JBMEFJQU1vQWhBaUJFRUJhaUVLSUFRdEFBRWhBU0FFTFFBQVFmOEJSZ1JBSUFGQmtBRlBCRUFnQXlBREtBSU1RUUZxTmdJTUlBSkJnUDREYWlFQ1FRZ2hCQXdDQ3lBRElBbzJBaEFnQVVFSmRDQUNhaUVDUVFjaEJBd0JDeUFESUFvMkFoQkJDQ0VFSUFGQkNIUWdBbW9oQWdzZ0JFRUJheUVFSUFKQkFYUWhBaUFGUVFGMElnVkJnSUFDU1EwQUN5QUZJUUVnQ3lBTFJTQVNHd3dCQ3lBQ0lBVkJFSFJySVFJZ0FVR0FnQUp4UlFSQUlBb29BZ1FoQ3lBSklBcEJERUVJSUFFZ0JVa2lFaHRxS0FJQU5nSUFBMEFDUUNBRURRQWdBeWdDRUNJRVFRRnFJUW9nQkMwQUFTRUZJQVF0QUFCQi93RkdCRUFnQlVHUUFVOEVRQ0FESUFNb0FneEJBV28yQWd3Z0FrR0EvZ05xSVFKQkNDRUVEQUlMSUFNZ0NqWUNFQ0FGUVFsMElBSnFJUUpCQnlFRURBRUxJQU1nQ2pZQ0VFRUlJUVFnQlVFSWRDQUNhaUVDQ3lBRVFRRnJJUVFnQWtFQmRDRUNJQUZCQVhRaUFVR0FnQUpKRFFBTElBdEZJQXNnRWhzTUFRc2dDaWdDQkF0RkRRQWdBU0FXSUEwb0FnUkJGSFpCQkhFZ0RVRUVheUlMS0FJQVFSWjJRUUZ4SUFaQkQzWkJFSEVnQmtFVGRrSEFBSEVnRVVHcUFYRnljbkp5SWhKQmtMNEJhaTBBQUVFQ2RHb2lDU2dDQUNJS0tBSUFJZ1ZySVFFQ2Z5QUZJQUpCRUhaTEJFQWdDaWdDQkNFUklBa2dDa0VJUVF3Z0FTQUZTU0lQRzJvb0FnQTJBZ0FEUUFKQUlBUU5BQ0FES0FJUUlnUkJBV29oQ2lBRUxRQUJJUUVnQkMwQUFFSC9BVVlFUUNBQlFaQUJUd1JBSUFNZ0F5Z0NERUVCYWpZQ0RDQUNRWUQrQTJvaEFrRUlJUVFNQWdzZ0F5QUtOZ0lRSUFGQkNYUWdBbW9oQWtFSElRUU1BUXNnQXlBS05nSVFRUWdoQkNBQlFRaDBJQUpxSVFJTElBUkJBV3NoQkNBQ1FRRjBJUUlnQlVFQmRDSUZRWUNBQWtrTkFBc2dCU0VCSUJFZ0VVVWdEeHNNQVFzZ0FpQUZRUkIwYXlFQ0lBRkJnSUFDY1VVRVFDQUtLQUlFSVJFZ0NTQUtRUXhCQ0NBQklBVkpJZzhiYWlnQ0FEWUNBQU5BQWtBZ0JBMEFJQU1vQWhBaUJFRUJhaUVLSUFRdEFBRWhCU0FFTFFBQVFmOEJSZ1JBSUFWQmtBRlBCRUFnQXlBREtBSU1RUUZxTmdJTUlBSkJnUDREYWlFQ1FRZ2hCQXdDQ3lBRElBbzJBaEFnQlVFSmRDQUNhaUVDUVFjaEJBd0JDeUFESUFvMkFoQkJDQ0VFSUFWQkNIUWdBbW9oQWdzZ0JFRUJheUVFSUFKQkFYUWhBaUFCUVFGMElnRkJnSUFDU1EwQUN5QVJSU0FSSUE4YkRBRUxJQW9vQWdRTElRVWdFeUFPSUF3Z0JTQVNRWkRBQVdvdEFBQWlDa1liTmdLQUFpQUxJQXNvQWdCQmdBSnlOZ0lBSUEwZ0RTZ0NCRUhBQUhJMkFnUWdCaUFGSUFwelFSWjBja0dBQVhJaEJnc0NRQ0FHUVlDSWdNQUFjUTBBSUFFZ0ZpQURLQUpzSUFaQkJuWWlFVUh2QTNGcUxRQUFRUUowYWlJSktBSUFJZ29vQWdBaUJXc2hBUUovSUFVZ0FrRVFka3NFUUNBS0tBSUVJUXNnQ1NBS1FRaEJEQ0FCSUFWSkloSWJhaWdDQURZQ0FBTkFBa0FnQkEwQUlBTW9BaEFpQkVFQmFpRUtJQVF0QUFFaEFTQUVMUUFBUWY4QlJnUkFJQUZCa0FGUEJFQWdBeUFES0FJTVFRRnFOZ0lNSUFKQmdQNERhaUVDUVFnaEJBd0NDeUFESUFvMkFoQWdBVUVKZENBQ2FpRUNRUWNoQkF3QkN5QURJQW8yQWhCQkNDRUVJQUZCQ0hRZ0Ftb2hBZ3NnQkVFQmF5RUVJQUpCQVhRaEFpQUZRUUYwSWdWQmdJQUNTUTBBQ3lBRklRRWdDeUFMUlNBU0d3d0JDeUFDSUFWQkVIUnJJUUlnQVVHQWdBSnhSUVJBSUFvb0FnUWhDeUFKSUFwQkRFRUlJQUVnQlVraUVodHFLQUlBTmdJQUEwQUNRQ0FFRFFBZ0F5Z0NFQ0lFUVFGcUlRb2dCQzBBQVNFRklBUXRBQUJCL3dGR0JFQWdCVUdRQVU4RVFDQURJQU1vQWd4QkFXbzJBZ3dnQWtHQS9nTnFJUUpCQ0NFRURBSUxJQU1nQ2pZQ0VDQUZRUWwwSUFKcUlRSkJCeUVFREFFTElBTWdDallDRUVFSUlRUWdCVUVJZENBQ2FpRUNDeUFFUVFGcklRUWdBa0VCZENFQ0lBRkJBWFFpQVVHQWdBSkpEUUFMSUF0RklBc2dFaHNNQVFzZ0NpZ0NCQXRGRFFBZ0FTQVdJQTBvQWdSQkYzWkJCSEVnRFVFRWF5SUxLQUlBUVJsMlFRRnhJQVpCRW5aQkVIRWdCa0VXZGtIQUFIRWdFVUdxQVhGeWNuSnlJaEpCa0w0QmFpMEFBRUVDZEdvaUNTZ0NBQ0lLS0FJQUlnVnJJUUVDZnlBRklBSkJFSFpMQkVBZ0NpZ0NCQ0VSSUFrZ0NrRUlRUXdnQVNBRlNTSVBHMm9vQWdBMkFnQURRQUpBSUFRTkFDQURLQUlRSWdSQkFXb2hDaUFFTFFBQklRRWdCQzBBQUVIL0FVWUVRQ0FCUVpBQlR3UkFJQU1nQXlnQ0RFRUJhallDRENBQ1FZRCtBMm9oQWtFSUlRUU1BZ3NnQXlBS05nSVFJQUZCQ1hRZ0Ftb2hBa0VISVFRTUFRc2dBeUFLTmdJUVFRZ2hCQ0FCUVFoMElBSnFJUUlMSUFSQkFXc2hCQ0FDUVFGMElRSWdCVUVCZENJRlFZQ0FBa2tOQUFzZ0JTRUJJQkVnRVVVZ0R4c01BUXNnQWlBRlFSQjBheUVDSUFGQmdJQUNjVVVFUUNBS0tBSUVJUkVnQ1NBS1FReEJDQ0FCSUFWSklnOGJhaWdDQURZQ0FBTkFBa0FnQkEwQUlBTW9BaEFpQkVFQmFpRUtJQVF0QUFFaEJTQUVMUUFBUWY4QlJnUkFJQVZCa0FGUEJFQWdBeUFES0FJTVFRRnFOZ0lNSUFKQmdQNERhaUVDUVFnaEJBd0NDeUFESUFvMkFoQWdCVUVKZENBQ2FpRUNRUWNoQkF3QkN5QURJQW8yQWhCQkNDRUVJQVZCQ0hRZ0Ftb2hBZ3NnQkVFQmF5RUVJQUpCQVhRaEFpQUJRUUYwSWdGQmdJQUNTUTBBQ3lBUlJTQVJJQThiREFFTElBb29BZ1FMSVFVZ0V5QU9JQXdnQlNBU1FaREFBV290QUFBaUNrWWJOZ0tBQkNBTElBc29BZ0JCZ0JCeU5nSUFJQTBnRFNnQ0JFR0FCSEkyQWdRZ0JpQUZJQXB6UVJsMGNrR0FDSEloQmdzZ0JrR0F3SUNBQkhFTkFTQUJJQllnQXlnQ2JDQUdRUWwySWhKQjd3TnhhaTBBQUVFQ2RHb2lDU2dDQUNJS0tBSUFJZ1ZySVFFQ2Z5QUZJQUpCRUhaTEJFQWdDaWdDQkNFTElBa2dDa0VJUVF3Z0FTQUZTU0lSRzJvb0FnQTJBZ0FEUUFKQUlBUU5BQ0FES0FJUUlnUkJBV29oQ2lBRUxRQUJJUUVnQkMwQUFFSC9BVVlFUUNBQlFaQUJUd1JBSUFNZ0F5Z0NERUVCYWpZQ0RDQUNRWUQrQTJvaEFrRUlJUVFNQWdzZ0F5QUtOZ0lRSUFGQkNYUWdBbW9oQWtFSElRUU1BUXNnQXlBS05nSVFRUWdoQkNBQlFRaDBJQUpxSVFJTElBUkJBV3NoQkNBQ1FRRjBJUUlnQlVFQmRDSUZRWUNBQWtrTkFBc2dCU0VCSUFzZ0MwVWdFUnNNQVFzZ0FpQUZRUkIwYXlFQ0lBRkJnSUFDY1VVRVFDQUtLQUlFSVFzZ0NTQUtRUXhCQ0NBQklBVkpJaEViYWlnQ0FEWUNBQU5BQWtBZ0JBMEFJQU1vQWhBaUJFRUJhaUVLSUFRdEFBRWhCU0FFTFFBQVFmOEJSZ1JBSUFWQmtBRlBCRUFnQXlBREtBSU1RUUZxTmdJTUlBSkJnUDREYWlFQ1FRZ2hCQXdDQ3lBRElBbzJBaEFnQlVFSmRDQUNhaUVDUVFjaEJBd0JDeUFESUFvMkFoQkJDQ0VFSUFWQkNIUWdBbW9oQWdzZ0JFRUJheUVFSUFKQkFYUWhBaUFCUVFGMElnRkJnSUFDU1EwQUN5QUxSU0FMSUJFYkRBRUxJQW9vQWdRTFJRMEJJQUVnRmlBTktBSUVRUnAyUVFSeElBMUJCR3NpRVNnQ0FFRWNka0VCY1NBR1FSVjJRUkJ4SUFaQkdYWkJ3QUJ4SUJKQnFnRnhjbkp5Y2lJTFFaQytBV290QUFCQkFuUnFJZ2tvQWdBaUNpZ0NBQ0lGYXdzaEFRSi9JQVVnQWtFUWRrc0VRQ0FLS0FJRUlSSWdDU0FLUVFoQkRDQUJJQVZKSWc4YmFpZ0NBRFlDQUFOQUFrQWdCQTBBSUFNb0FoQWlCRUVCYWlFS0lBUXRBQUVoQVNBRUxRQUFRZjhCUmdSQUlBRkJrQUZQQkVBZ0F5QURLQUlNUVFGcU5nSU1JQUpCZ1A0RGFpRUNRUWdoQkF3Q0N5QURJQW8yQWhBZ0FVRUpkQ0FDYWlFQ1FRY2hCQXdCQ3lBRElBbzJBaEJCQ0NFRUlBRkJDSFFnQW1vaEFnc2dCRUVCYXlFRUlBSkJBWFFoQWlBRlFRRjBJZ1ZCZ0lBQ1NRMEFDeUFGSVFFZ0VpQVNSU0FQR3d3QkN5QUNJQVZCRUhScklRSWdBVUdBZ0FKeFJRUkFJQW9vQWdRaEVpQUpJQXBCREVFSUlBRWdCVWtpRHh0cUtBSUFOZ0lBQTBBQ1FDQUVEUUFnQXlnQ0VDSUVRUUZxSVFvZ0JDMEFBU0VGSUFRdEFBQkIvd0ZHQkVBZ0JVR1FBVThFUUNBRElBTW9BZ3hCQVdvMkFnd2dBa0dBL2dOcUlRSkJDQ0VFREFJTElBTWdDallDRUNBRlFRbDBJQUpxSVFKQkJ5RUVEQUVMSUFNZ0NqWUNFRUVJSVFRZ0JVRUlkQ0FDYWlFQ0N5QUVRUUZySVFRZ0FrRUJkQ0VDSUFGQkFYUWlBVUdBZ0FKSkRRQUxJQkpGSUJJZ0R4c01BUXNnQ2lnQ0JBc2hCU0FUSUE0Z0RDQUZJQXRCa01BQmFpMEFBQ0lLUmhzMkFvQUdJQkVnRVNnQ0FFR0FnQUZ5TmdJQUlBMGdEU2dDQkVHQUlISTJBZ1FnQlNBS2N5SUZRUngwSUFaeUlBMGdEU2dDaEFKQkJISTJBb1FDSUEwZ0RTZ0NqQUpCQVhJMkFvd0NJQTBnRFNnQ2lBSWdCVUVTZEhKQkFuSTJBb2dDUVlEQUFISWhCZ3NnRFNBR1FmLy8vN1o3Y1RZQ0FBc2dEVUVFYWlFR0lCTkJCR29oQlNBVlFRRnFJaFZCd0FCSERRQUxJQTFCREdvaEJpQVRRWVFHYWlFRklCUkJQRWtnRkVFRWFpRVVEUUFMREFJTFFRRWdHM1FpQVVFQmRpQUJjaUVPSUFNb0FuZ2lCeUFXUVFKMGFrRU1haUVGSUFNb0FvQUJJUVlnQXlnQ0NDRUVJQU1vQWdRaEFTQURLQUlBSVFJZ0F5Z0NhQ0VKSUFNb0FuUWhFeUFYUVFoeEJFQUNRQ0FHUVFSSkRRQWdGZ1JBSUFOQjVBQnFJUWdnQTBIZ0FHb2hEU0FXUVF4c0lTUWdGa0VEZENFY1FRQWdEbXNoRlNBRFFSeHFJUXdEUUVFQUlSSURRQUpBQWtBQ2Z5QUZJZ2NvQWdBaUJRUkFBa0FnQlVHUWdJQUJjUTBBSUFFZ0RDQURLQUpzSUFWQjd3TnhhaTBBQUVFQ2RHb2lDU2dDQUNJS0tBSUFJZ1pySVFFQ2Z5QUdJQUpCRUhaTkJFQWdBaUFHUVJCMGF5RUNJQUZCZ0lBQ2NRUkFJQW9vQWdRTUFnc2dDaWdDQkNFTElBa2dDa0VNUVFnZ0FTQUdTU0lQRzJvb0FnQTJBZ0FEUUFKQUlBUU5BQ0FES0FJUUlnUkJBV29oQ2lBRUxRQUJJUVlnQkMwQUFFSC9BVWNFUUNBRElBbzJBaEJCQ0NFRUlBWkJDSFFnQW1vaEFnd0JDeUFHUVk4QlRRUkFJQU1nQ2pZQ0VDQUdRUWwwSUFKcUlRSkJCeUVFREFFTElBTWdBeWdDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFRTElBUkJBV3NoQkNBQ1FRRjBJUUlnQVVFQmRDSUJRWUNBQWtrTkFBc2dDMFVnQ3lBUEd3d0JDeUFLS0FJRUlRc2dDU0FLUVFoQkRDQUJJQVpKSWc4YmFpZ0NBRFlDQUFOQUFrQWdCQTBBSUFNb0FoQWlCRUVCYWlFS0lBUXRBQUVoQVNBRUxRQUFRZjhCUndSQUlBTWdDallDRUVFSUlRUWdBVUVJZENBQ2FpRUNEQUVMSUFGQmp3Rk5CRUFnQXlBS05nSVFJQUZCQ1hRZ0Ftb2hBa0VISVFRTUFRc2dBeUFES0FJTVFRRnFOZ0lNSUFKQmdQNERhaUVDUVFnaEJBc2dCRUVCYXlFRUlBSkJBWFFoQWlBR1FRRjBJZ1pCZ0lBQ1NRMEFDeUFHSVFFZ0N5QUxSU0FQR3d0RkRRQWdBU0FNSUFjb0FnUkJFWFpCQkhFZ0IwRUVheUlMS0FJQVFSTjJRUUZ4SUFWQkRuWkJFSEVnQlVFUWRrSEFBSEVnQlVHcUFYRnljbkp5SWhsQmtMNEJhaTBBQUVFQ2RHb2lDU2dDQUNJS0tBSUFJZ1pySVFFQ2Z5QUdJQUpCRUhaTkJFQWdBaUFHUVJCMGF5RUNJQUZCZ0lBQ2NRUkFJQW9vQWdRTUFnc2dDaWdDQkNFUElBa2dDa0VNUVFnZ0FTQUdTU0lmRzJvb0FnQTJBZ0FEUUFKQUlBUU5BQ0FES0FJUUlnUkJBV29oQ2lBRUxRQUJJUVlnQkMwQUFFSC9BVWNFUUNBRElBbzJBaEJCQ0NFRUlBWkJDSFFnQW1vaEFnd0JDeUFHUVk4QlRRUkFJQU1nQ2pZQ0VDQUdRUWwwSUFKcUlRSkJCeUVFREFFTElBTWdBeWdDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFRTElBUkJBV3NoQkNBQ1FRRjBJUUlnQVVFQmRDSUJRWUNBQWtrTkFBc2dEMFVnRHlBZkd3d0JDeUFLS0FJRUlROGdDU0FLUVFoQkRDQUJJQVpKSWg4YmFpZ0NBRFlDQUFOQUFrQWdCQTBBSUFNb0FoQWlCRUVCYWlFS0lBUXRBQUVoQVNBRUxRQUFRZjhCUndSQUlBTWdDallDRUVFSUlRUWdBVUVJZENBQ2FpRUNEQUVMSUFGQmp3Rk5CRUFnQXlBS05nSVFJQUZCQ1hRZ0Ftb2hBa0VISVFRTUFRc2dBeUFES0FJTVFRRnFOZ0lNSUFKQmdQNERhaUVDUVFnaEJBc2dCRUVCYXlFRUlBSkJBWFFoQWlBR1FRRjBJZ1pCZ0lBQ1NRMEFDeUFHSVFFZ0R5QVBSU0FmR3dzaEJpQVRJQTRnRlNBR0lCbEJrTUFCYWkwQUFDSUtSaHMyQWdBZ0N5QUxLQUlBUVNCeU5nSUFJQWNnQnlnQ0JFRUljallDQkNBRklBWWdDbk5CRTNSeVFSQnlJUVVMQWtBZ0JVR0FnWUFJY1EwQUlBRWdEQ0FES0FKc0lBVkJBM1lpRDBIdkEzRnFMUUFBUVFKMGFpSUpLQUlBSWdvb0FnQWlCbXNoQVFKL0lBWWdBa0VRZGswRVFDQUNJQVpCRUhScklRSWdBVUdBZ0FKeEJFQWdDaWdDQkF3Q0N5QUtLQUlFSVFzZ0NTQUtRUXhCQ0NBQklBWkpJaGtiYWlnQ0FEWUNBQU5BQWtBZ0JBMEFJQU1vQWhBaUJFRUJhaUVLSUFRdEFBRWhCaUFFTFFBQVFmOEJSd1JBSUFNZ0NqWUNFRUVJSVFRZ0JrRUlkQ0FDYWlFQ0RBRUxJQVpCandGTkJFQWdBeUFLTmdJUUlBWkJDWFFnQW1vaEFrRUhJUVFNQVFzZ0F5QURLQUlNUVFGcU5nSU1JQUpCZ1A0RGFpRUNRUWdoQkFzZ0JFRUJheUVFSUFKQkFYUWhBaUFCUVFGMElnRkJnSUFDU1EwQUN5QUxSU0FMSUJrYkRBRUxJQW9vQWdRaEN5QUpJQXBCQ0VFTUlBRWdCa2tpR1J0cUtBSUFOZ0lBQTBBQ1FDQUVEUUFnQXlnQ0VDSUVRUUZxSVFvZ0JDMEFBU0VCSUFRdEFBQkIvd0ZIQkVBZ0F5QUtOZ0lRUVFnaEJDQUJRUWgwSUFKcUlRSU1BUXNnQVVHUEFVMEVRQ0FESUFvMkFoQWdBVUVKZENBQ2FpRUNRUWNoQkF3QkN5QURJQU1vQWd4QkFXbzJBZ3dnQWtHQS9nTnFJUUpCQ0NFRUN5QUVRUUZySVFRZ0FrRUJkQ0VDSUFaQkFYUWlCa0dBZ0FKSkRRQUxJQVloQVNBTElBdEZJQmtiQzBVTkFDQUJJQXdnQnlnQ0JFRVVka0VFY1NBSFFRUnJJZ3NvQWdCQkZuWkJBWEVnQlVFUGRrRVFjU0FGUVJOMlFjQUFjU0FQUWFvQmNYSnljbklpR1VHUXZnRnFMUUFBUVFKMGFpSUpLQUlBSWdvb0FnQWlCbXNoQVFKL0lBWWdBa0VRZGswRVFDQUNJQVpCRUhScklRSWdBVUdBZ0FKeEJFQWdDaWdDQkF3Q0N5QUtLQUlFSVE4Z0NTQUtRUXhCQ0NBQklBWkpJaDhiYWlnQ0FEWUNBQU5BQWtBZ0JBMEFJQU1vQWhBaUJFRUJhaUVLSUFRdEFBRWhCaUFFTFFBQVFmOEJSd1JBSUFNZ0NqWUNFRUVJSVFRZ0JrRUlkQ0FDYWlFQ0RBRUxJQVpCandGTkJFQWdBeUFLTmdJUUlBWkJDWFFnQW1vaEFrRUhJUVFNQVFzZ0F5QURLQUlNUVFGcU5nSU1JQUpCZ1A0RGFpRUNRUWdoQkFzZ0JFRUJheUVFSUFKQkFYUWhBaUFCUVFGMElnRkJnSUFDU1EwQUN5QVBSU0FQSUI4YkRBRUxJQW9vQWdRaER5QUpJQXBCQ0VFTUlBRWdCa2tpSHh0cUtBSUFOZ0lBQTBBQ1FDQUVEUUFnQXlnQ0VDSUVRUUZxSVFvZ0JDMEFBU0VCSUFRdEFBQkIvd0ZIQkVBZ0F5QUtOZ0lRUVFnaEJDQUJRUWgwSUFKcUlRSU1BUXNnQVVHUEFVMEVRQ0FESUFvMkFoQWdBVUVKZENBQ2FpRUNRUWNoQkF3QkN5QURJQU1vQWd4QkFXbzJBZ3dnQWtHQS9nTnFJUUpCQ0NFRUN5QUVRUUZySVFRZ0FrRUJkQ0VDSUFaQkFYUWlCa0dBZ0FKSkRRQUxJQVloQVNBUElBOUZJQjhiQ3lFR0lCTWdGa0VDZEdvZ0RpQVZJQVlnR1VHUXdBRnFMUUFBSWdwR0d6WUNBQ0FMSUFzb0FnQkJnQUp5TmdJQUlBY2dCeWdDQkVIQUFISTJBZ1FnQlNBR0lBcHpRUlowY2tHQUFYSWhCUXNDUUNBRlFZQ0lnTUFBY1EwQUlBRWdEQ0FES0FKc0lBVkJCbllpRDBIdkEzRnFMUUFBUVFKMGFpSUpLQUlBSWdvb0FnQWlCbXNoQVFKL0lBWWdBa0VRZGswRVFDQUNJQVpCRUhScklRSWdBVUdBZ0FKeEJFQWdDaWdDQkF3Q0N5QUtLQUlFSVFzZ0NTQUtRUXhCQ0NBQklBWkpJaGtiYWlnQ0FEWUNBQU5BQWtBZ0JBMEFJQU1vQWhBaUJFRUJhaUVLSUFRdEFBRWhCaUFFTFFBQVFmOEJSd1JBSUFNZ0NqWUNFRUVJSVFRZ0JrRUlkQ0FDYWlFQ0RBRUxJQVpCandGTkJFQWdBeUFLTmdJUUlBWkJDWFFnQW1vaEFrRUhJUVFNQVFzZ0F5QURLQUlNUVFGcU5nSU1JQUpCZ1A0RGFpRUNRUWdoQkFzZ0JFRUJheUVFSUFKQkFYUWhBaUFCUVFGMElnRkJnSUFDU1EwQUN5QUxSU0FMSUJrYkRBRUxJQW9vQWdRaEN5QUpJQXBCQ0VFTUlBRWdCa2tpR1J0cUtBSUFOZ0lBQTBBQ1FDQUVEUUFnQXlnQ0VDSUVRUUZxSVFvZ0JDMEFBU0VCSUFRdEFBQkIvd0ZIQkVBZ0F5QUtOZ0lRUVFnaEJDQUJRUWgwSUFKcUlRSU1BUXNnQVVHUEFVMEVRQ0FESUFvMkFoQWdBVUVKZENBQ2FpRUNRUWNoQkF3QkN5QURJQU1vQWd4QkFXbzJBZ3dnQWtHQS9nTnFJUUpCQ0NFRUN5QUVRUUZySVFRZ0FrRUJkQ0VDSUFaQkFYUWlCa0dBZ0FKSkRRQUxJQVloQVNBTElBdEZJQmtiQzBVTkFDQUJJQXdnQnlnQ0JFRVhka0VFY1NBSFFRUnJJZ3NvQWdCQkdYWkJBWEVnQlVFU2RrRVFjU0FGUVJaMlFjQUFjU0FQUWFvQmNYSnljbklpR1VHUXZnRnFMUUFBUVFKMGFpSUpLQUlBSWdvb0FnQWlCbXNoQVFKL0lBWWdBa0VRZGswRVFDQUNJQVpCRUhScklRSWdBVUdBZ0FKeEJFQWdDaWdDQkF3Q0N5QUtLQUlFSVE4Z0NTQUtRUXhCQ0NBQklBWkpJaDhiYWlnQ0FEWUNBQU5BQWtBZ0JBMEFJQU1vQWhBaUJFRUJhaUVLSUFRdEFBRWhCaUFFTFFBQVFmOEJSd1JBSUFNZ0NqWUNFRUVJSVFRZ0JrRUlkQ0FDYWlFQ0RBRUxJQVpCandGTkJFQWdBeUFLTmdJUUlBWkJDWFFnQW1vaEFrRUhJUVFNQVFzZ0F5QURLQUlNUVFGcU5nSU1JQUpCZ1A0RGFpRUNRUWdoQkFzZ0JFRUJheUVFSUFKQkFYUWhBaUFCUVFGMElnRkJnSUFDU1EwQUN5QVBSU0FQSUI4YkRBRUxJQW9vQWdRaER5QUpJQXBCQ0VFTUlBRWdCa2tpSHh0cUtBSUFOZ0lBQTBBQ1FDQUVEUUFnQXlnQ0VDSUVRUUZxSVFvZ0JDMEFBU0VCSUFRdEFBQkIvd0ZIQkVBZ0F5QUtOZ0lRUVFnaEJDQUJRUWgwSUFKcUlRSU1BUXNnQVVHUEFVMEVRQ0FESUFvMkFoQWdBVUVKZENBQ2FpRUNRUWNoQkF3QkN5QURJQU1vQWd4QkFXbzJBZ3dnQWtHQS9nTnFJUUpCQ0NFRUN5QUVRUUZySVFRZ0FrRUJkQ0VDSUFaQkFYUWlCa0dBZ0FKSkRRQUxJQVloQVNBUElBOUZJQjhiQ3lFR0lCTWdIR29nRGlBVklBWWdHVUdRd0FGcUxRQUFJZ3BHR3pZQ0FDQUxJQXNvQWdCQmdCQnlOZ0lBSUFjZ0J5Z0NCRUdBQkhJMkFnUWdCU0FHSUFwelFSbDBja0dBQ0hJaEJRc2dCVUdBd0lDQUJIRU5BaUFCSUF3Z0F5Z0NiQ0FGUVFsMklnOUI3d054YWkwQUFFRUNkR29pQ1NnQ0FDSUtLQUlBSWdacklRRUNmeUFHSUFKQkVIWk5CRUFnQWlBR1FSQjBheUVDSUFGQmdJQUNjUVJBSUFvb0FnUU1BZ3NnQ2lnQ0JDRUxJQWtnQ2tFTVFRZ2dBU0FHU1NJWkcyb29BZ0EyQWdBRFFBSkFJQVFOQUNBREtBSVFJZ1JCQVdvaENpQUVMUUFCSVFZZ0JDMEFBRUgvQVVjRVFDQURJQW8yQWhCQkNDRUVJQVpCQ0hRZ0Ftb2hBZ3dCQ3lBR1FZOEJUUVJBSUFNZ0NqWUNFQ0FHUVFsMElBSnFJUUpCQnlFRURBRUxJQU1nQXlnQ0RFRUJhallDRENBQ1FZRCtBMm9oQWtFSUlRUUxJQVJCQVdzaEJDQUNRUUYwSVFJZ0FVRUJkQ0lCUVlDQUFra05BQXNnQzBVZ0N5QVpHd3dCQ3lBS0tBSUVJUXNnQ1NBS1FRaEJEQ0FCSUFaSkloa2JhaWdDQURZQ0FBTkFBa0FnQkEwQUlBTW9BaEFpQkVFQmFpRUtJQVF0QUFFaEFTQUVMUUFBUWY4QlJ3UkFJQU1nQ2pZQ0VFRUlJUVFnQVVFSWRDQUNhaUVDREFFTElBRkJqd0ZOQkVBZ0F5QUtOZ0lRSUFGQkNYUWdBbW9oQWtFSElRUU1BUXNnQXlBREtBSU1RUUZxTmdJTUlBSkJnUDREYWlFQ1FRZ2hCQXNnQkVFQmF5RUVJQUpCQVhRaEFpQUdRUUYwSWdaQmdJQUNTUTBBQ3lBR0lRRWdDeUFMUlNBWkd3dEZEUUlnQVNBTUlBY29BZ1JCR25aQkJIRWdCMEVFYXlJTEtBSUFRUngyUVFGeElBVkJGWFpCRUhFZ0JVRVpka0hBQUhFZ0QwR3FBWEZ5Y25KeUlnOUJrTDRCYWkwQUFFRUNkR29pQ1NnQ0FDSUtLQUlBSWdackRBRUxJQUVnRFNnQ0FDSUdLQUlBSWdWcklRRUNmeUFGSUFKQkVIWk5CRUFnQWlBRlFSQjBheUVDSUFGQmdJQUNjUVJBSUFZb0FnUU1BZ3NnQmlnQ0JDRUpJQTBnQmtFTVFRZ2dBU0FGU1NJS0cyb29BZ0EyQWdBRFFBSkFJQVFOQUNBREtBSVFJZ1pCQVdvaEJDQUdMUUFCSVFVZ0JpMEFBRUgvQVVjRVFDQURJQVEyQWhCQkNDRUVJQVZCQ0hRZ0Ftb2hBZ3dCQ3lBRlFZOEJUUVJBSUFNZ0JEWUNFQ0FGUVFsMElBSnFJUUpCQnlFRURBRUxJQU1nQXlnQ0RFRUJhallDRENBQ1FZRCtBMm9oQWtFSUlRUUxJQVJCQVdzaEJDQUNRUUYwSVFJZ0FVRUJkQ0lCUVlDQUFra05BQXNnQ1VVZ0NTQUtHd3dCQ3lBR0tBSUVJUWtnRFNBR1FRaEJEQ0FCSUFWSklnb2JhaWdDQURZQ0FBTkFBa0FnQkEwQUlBTW9BaEFpQmtFQmFpRUVJQVl0QUFFaEFTQUdMUUFBUWY4QlJ3UkFJQU1nQkRZQ0VFRUlJUVFnQVVFSWRDQUNhaUVDREFFTElBRkJqd0ZOQkVBZ0F5QUVOZ0lRSUFGQkNYUWdBbW9oQWtFSElRUU1BUXNnQXlBREtBSU1RUUZxTmdJTUlBSkJnUDREYWlFQ1FRZ2hCQXNnQkVFQmF5RUVJQUpCQVhRaEFpQUZRUUYwSWdWQmdJQUNTUTBBQ3lBRklRRWdDU0FKUlNBS0d3dEZCRUFnRFNFSkRBTUxJQUVnQ0NnQ0FDSUdLQUlBSWdWcklRRUNmeUFGSUFKQkVIWk5CRUFnQWlBRlFSQjBheUVDSUFGQmdJQUNjUVJBSUFZb0FnUU1BZ3NnQmlnQ0JDRUpJQWdnQmtFTVFRZ2dBU0FGU1NJTEcyb29BZ0FpQmpZQ0FBTkFBa0FnQkEwQUlBTW9BaEFpQkVFQmFpRUtJQVF0QUFFaEJTQUVMUUFBUWY4QlJ3UkFJQU1nQ2pZQ0VFRUlJUVFnQlVFSWRDQUNhaUVDREFFTElBVkJqd0ZOQkVBZ0F5QUtOZ0lRSUFWQkNYUWdBbW9oQWtFSElRUU1BUXNnQXlBREtBSU1RUUZxTmdJTUlBSkJnUDREYWlFQ1FRZ2hCQXNnQkVFQmF5RUVJQUpCQVhRaEFpQUJRUUYwSWdGQmdJQUNTUTBBQ3lBSlJTQUpJQXNiREFFTElBWW9BZ1FoQ1NBSUlBWkJDRUVNSUFFZ0JVa2lDeHRxS0FJQUlnWTJBZ0FEUUFKQUlBUU5BQ0FES0FJUUlnUkJBV29oQ2lBRUxRQUJJUUVnQkMwQUFFSC9BVWNFUUNBRElBbzJBaEJCQ0NFRUlBRkJDSFFnQW1vaEFnd0JDeUFCUVk4QlRRUkFJQU1nQ2pZQ0VDQUJRUWwwSUFKcUlRSkJCeUVFREFFTElBTWdBeWdDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFRTElBUkJBV3NoQkNBQ1FRRjBJUUlnQlVFQmRDSUZRWUNBQWtrTkFBc2dCU0VCSUFrZ0NVVWdDeHNMSVFvZ0FTQUdLQUlBSWdWcklRRUNmeUFGSUFKQkVIWk5CRUFnQWlBRlFSQjBheUVDSUFGQmdJQUNjUVJBSUFZb0FnUU1BZ3NnQmlnQ0JDRUpJQWdnQmtFTVFRZ2dBU0FGU1NJTEcyb29BZ0EyQWdBRFFBSkFJQVFOQUNBREtBSVFJZ1pCQVdvaEJDQUdMUUFCSVFVZ0JpMEFBRUgvQVVjRVFDQURJQVEyQWhCQkNDRUVJQVZCQ0hRZ0Ftb2hBZ3dCQ3lBRlFZOEJUUVJBSUFNZ0JEWUNFQ0FGUVFsMElBSnFJUUpCQnlFRURBRUxJQU1nQXlnQ0RFRUJhallDRENBQ1FZRCtBMm9oQWtFSUlRUUxJQVJCQVdzaEJDQUNRUUYwSVFJZ0FVRUJkQ0lCUVlDQUFra05BQXNnQ1VVZ0NTQUxHd3dCQ3lBR0tBSUVJUWtnQ0NBR1FRaEJEQ0FCSUFWSklnc2JhaWdDQURZQ0FBTkFBa0FnQkEwQUlBTW9BaEFpQmtFQmFpRUVJQVl0QUFFaEFTQUdMUUFBUWY4QlJ3UkFJQU1nQkRZQ0VFRUlJUVFnQVVFSWRDQUNhaUVDREFFTElBRkJqd0ZOQkVBZ0F5QUVOZ0lRSUFGQkNYUWdBbW9oQWtFSElRUU1BUXNnQXlBREtBSU1RUUZxTmdJTUlBSkJnUDREYWlFQ1FRZ2hCQXNnQkVFQmF5RUVJQUpCQVhRaEFpQUZRUUYwSWdWQmdJQUNTUTBBQ3lBRklRRWdDU0FKUlNBTEd3c2hCa0VBSVFVZ0NDRUpBa0FDUUFKQUFuOENRQUpBSUFZZ0NrRUJkSElPQkFBQkF3VUhDeUFCSUF3Z0J5Z0NCRUVSZGtFRWNTQUhRUVJySWdrb0FnQkJFM1pCQVhGeUlnOUJrTDRCYWkwQUFFRUNkR29pQ2lnQ0FDSUdLQUlBSWdWcklRRUNmeUFGSUFKQkVIWk5CRUFnQWlBRlFSQjBheUVDSUFGQmdJQUNjUVJBSUFZb0FnUU1BZ3NnQmlnQ0JDRUxJQW9nQmtFTVFRZ2dBU0FGU1NJS0cyb29BZ0EyQWdBRFFBSkFJQVFOQUNBREtBSVFJZ1pCQVdvaEJDQUdMUUFCSVFVZ0JpMEFBRUgvQVVjRVFDQURJQVEyQWhCQkNDRUVJQVZCQ0hRZ0Ftb2hBZ3dCQ3lBRlFZOEJUUVJBSUFNZ0JEWUNFQ0FGUVFsMElBSnFJUUpCQnlFRURBRUxJQU1nQXlnQ0RFRUJhallDRENBQ1FZRCtBMm9oQWtFSUlRUUxJQVJCQVdzaEJDQUNRUUYwSVFJZ0FVRUJkQ0lCUVlDQUFra05BQXNnQzBVZ0N5QUtHd3dCQ3lBR0tBSUVJUXNnQ2lBR1FRaEJEQ0FCSUFWSklnb2JhaWdDQURZQ0FBTkFBa0FnQkEwQUlBTW9BaEFpQmtFQmFpRUVJQVl0QUFFaEFTQUdMUUFBUWY4QlJ3UkFJQU1nQkRZQ0VFRUlJUVFnQVVFSWRDQUNhaUVDREFFTElBRkJqd0ZOQkVBZ0F5QUVOZ0lRSUFGQkNYUWdBbW9oQWtFSElRUU1BUXNnQXlBREtBSU1RUUZxTmdJTUlBSkJnUDREYWlFQ1FRZ2hCQXNnQkVFQmF5RUVJQUpCQVhRaEFpQUZRUUYwSWdWQmdJQUNTUTBBQ3lBRklRRWdDeUFMUlNBS0d3c2hCU0FUSUE0Z0ZTQUZJQTlCa01BQmFpMEFBQ0lHUmhzMkFnQWdDU0FKS0FJQVFTQnlOZ0lBSUFjZ0J5Z0NCRUVJY2pZQ0JDQUZJQVp6UVJOMElBRWdEQ0FES0FKc0xRQUNRUUowYWlJSktBSUFJZ1lvQWdBaUJXc2hBUUovSUFVZ0FrRVFkazBFUUNBQ0lBVkJFSFJySVFJZ0FVR0FnQUp4QkVBZ0JpZ0NCQXdDQ3lBR0tBSUVJUW9nQ1NBR1FReEJDQ0FCSUFWSklnOGJhaWdDQURZQ0FBTkFBa0FnQkEwQUlBTW9BaEFpQmtFQmFpRUpJQVl0QUFFaEJTQUdMUUFBUWY4QlJ3UkFJQU1nQ1RZQ0VFRUlJUVFnQlVFSWRDQUNhaUVDREFFTElBVkJqd0ZOQkVBZ0F5QUpOZ0lRSUFWQkNYUWdBbW9oQWtFSElRUU1BUXNnQXlBREtBSU1RUUZxTmdJTUlBSkJnUDREYWlFQ1FRZ2hCQXNnQkVFQmF5RUVJQUpCQVhRaEFpQUJRUUYwSWdGQmdJQUNTUTBBQ3lBS1JTQUtJQThiREFFTElBWW9BZ1FoQ2lBSklBWkJDRUVNSUFFZ0JVa2lEeHRxS0FJQU5nSUFBMEFDUUNBRURRQWdBeWdDRUNJR1FRRnFJUWtnQmkwQUFTRUJJQVl0QUFCQi93RkhCRUFnQXlBSk5nSVFRUWdoQkNBQlFRaDBJQUpxSVFJTUFRc2dBVUdQQVUwRVFDQURJQWsyQWhBZ0FVRUpkQ0FDYWlFQ1FRY2hCQXdCQ3lBRElBTW9BZ3hCQVdvMkFnd2dBa0dBL2dOcUlRSkJDQ0VFQ3lBRVFRRnJJUVFnQWtFQmRDRUNJQVZCQVhRaUJVR0FnQUpKRFFBTElBVWhBU0FLSUFwRklBOGJDeUVHUVJCeUlnVWdCa1VOQVJvTElBRWdEQ0FIS0FJRVFSUjJRUVJ4SUFkQkJHc2lDaWdDQUVFV2RrRUJjU0FGUVE5MlFSQnhJQVZCRTNaQndBQnhJQVZCQTNaQnFnRnhjbkp5Y2lJWlFaQytBV290QUFCQkFuUnFJZ3NvQWdBaUNTZ0NBQ0lHYXlFQkFuOGdCaUFDUVJCMlRRUkFJQUlnQmtFUWRHc2hBaUFCUVlDQUFuRUVRQ0FKS0FJRURBSUxJQWtvQWdRaER5QUxJQWxCREVFSUlBRWdCa2tpQ3h0cUtBSUFOZ0lBQTBBQ1FDQUVEUUFnQXlnQ0VDSUpRUUZxSVFRZ0NTMEFBU0VHSUFrdEFBQkIvd0ZIQkVBZ0F5QUVOZ0lRUVFnaEJDQUdRUWgwSUFKcUlRSU1BUXNnQmtHUEFVMEVRQ0FESUFRMkFoQWdCa0VKZENBQ2FpRUNRUWNoQkF3QkN5QURJQU1vQWd4QkFXbzJBZ3dnQWtHQS9nTnFJUUpCQ0NFRUN5QUVRUUZySVFRZ0FrRUJkQ0VDSUFGQkFYUWlBVUdBZ0FKSkRRQUxJQTlGSUE4Z0N4c01BUXNnQ1NnQ0JDRVBJQXNnQ1VFSVFRd2dBU0FHU1NJTEcyb29BZ0EyQWdBRFFBSkFJQVFOQUNBREtBSVFJZ2xCQVdvaEJDQUpMUUFCSVFFZ0NTMEFBRUgvQVVjRVFDQURJQVEyQWhCQkNDRUVJQUZCQ0hRZ0Ftb2hBZ3dCQ3lBQlFZOEJUUVJBSUFNZ0JEWUNFQ0FCUVFsMElBSnFJUUpCQnlFRURBRUxJQU1nQXlnQ0RFRUJhallDRENBQ1FZRCtBMm9oQWtFSUlRUUxJQVJCQVdzaEJDQUNRUUYwSVFJZ0JrRUJkQ0lHUVlDQUFra05BQXNnQmlFQklBOGdEMFVnQ3hzTElRWWdFeUFXUVFKMGFpQU9JQlVnQmlBWlFaREFBV290QUFBaUNVWWJOZ0lBSUFvZ0NpZ0NBRUdBQW5JMkFnQWdCeUFIS0FJRVFjQUFjallDQkNBRklBWWdDWE5CRm5SeVFZQUJjZ3NoQlNBQklBd2dBeWdDYkNBRlFRWjJRZThEY1dvdEFBQkJBblJxSWdvb0FnQWlDU2dDQUNJR2F5RUJBbjhnQmlBQ1FSQjJUUVJBSUFJZ0JrRVFkR3NoQWlBQlFZQ0FBbkVFUUNBSktBSUVEQUlMSUFrb0FnUWhDeUFLSUFsQkRFRUlJQUVnQmtraUNodHFLQUlBTmdJQUEwQUNRQ0FFRFFBZ0F5Z0NFQ0lKUVFGcUlRUWdDUzBBQVNFR0lBa3RBQUJCL3dGSEJFQWdBeUFFTmdJUVFRZ2hCQ0FHUVFoMElBSnFJUUlNQVFzZ0JrR1BBVTBFUUNBRElBUTJBaEFnQmtFSmRDQUNhaUVDUVFjaEJBd0JDeUFESUFNb0FneEJBV28yQWd3Z0FrR0EvZ05xSVFKQkNDRUVDeUFFUVFGcklRUWdBa0VCZENFQ0lBRkJBWFFpQVVHQWdBSkpEUUFMSUF0RklBc2dDaHNNQVFzZ0NTZ0NCQ0VMSUFvZ0NVRUlRUXdnQVNBR1NTSUtHMm9vQWdBMkFnQURRQUpBSUFRTkFDQURLQUlRSWdsQkFXb2hCQ0FKTFFBQklRRWdDUzBBQUVIL0FVY0VRQ0FESUFRMkFoQkJDQ0VFSUFGQkNIUWdBbW9oQWd3QkN5QUJRWThCVFFSQUlBTWdCRFlDRUNBQlFRbDBJQUpxSVFKQkJ5RUVEQUVMSUFNZ0F5Z0NERUVCYWpZQ0RDQUNRWUQrQTJvaEFrRUlJUVFMSUFSQkFXc2hCQ0FDUVFGMElRSWdCa0VCZENJR1FZQ0FBa2tOQUFzZ0JpRUJJQXNnQzBVZ0Noc0xSUTBCQ3lBQklBd2dCeWdDQkVFWGRrRUVjU0FIUVFScklnb29BZ0JCR1haQkFYRWdCVUVTZGtFUWNTQUZRUloyUWNBQWNTQUZRUVoyUWFvQmNYSnljbklpR1VHUXZnRnFMUUFBUVFKMGFpSUxLQUlBSWdrb0FnQWlCbXNoQVFKL0lBWWdBa0VRZGswRVFDQUNJQVpCRUhScklRSWdBVUdBZ0FKeEJFQWdDU2dDQkF3Q0N5QUpLQUlFSVE4Z0N5QUpRUXhCQ0NBQklBWkpJZ3NiYWlnQ0FEWUNBQU5BQWtBZ0JBMEFJQU1vQWhBaUNVRUJhaUVFSUFrdEFBRWhCaUFKTFFBQVFmOEJSd1JBSUFNZ0JEWUNFRUVJSVFRZ0JrRUlkQ0FDYWlFQ0RBRUxJQVpCandGTkJFQWdBeUFFTmdJUUlBWkJDWFFnQW1vaEFrRUhJUVFNQVFzZ0F5QURLQUlNUVFGcU5nSU1JQUpCZ1A0RGFpRUNRUWdoQkFzZ0JFRUJheUVFSUFKQkFYUWhBaUFCUVFGMElnRkJnSUFDU1EwQUN5QVBSU0FQSUFzYkRBRUxJQWtvQWdRaER5QUxJQWxCQ0VFTUlBRWdCa2tpQ3h0cUtBSUFOZ0lBQTBBQ1FDQUVEUUFnQXlnQ0VDSUpRUUZxSVFRZ0NTMEFBU0VCSUFrdEFBQkIvd0ZIQkVBZ0F5QUVOZ0lRUVFnaEJDQUJRUWgwSUFKcUlRSU1BUXNnQVVHUEFVMEVRQ0FESUFRMkFoQWdBVUVKZENBQ2FpRUNRUWNoQkF3QkN5QURJQU1vQWd4QkFXbzJBZ3dnQWtHQS9nTnFJUUpCQ0NFRUN5QUVRUUZySVFRZ0FrRUJkQ0VDSUFaQkFYUWlCa0dBZ0FKSkRRQUxJQVloQVNBUElBOUZJQXNiQ3lFR0lCTWdIR29nRGlBVklBWWdHVUdRd0FGcUxRQUFJZ2xHR3pZQ0FDQUtJQW9vQWdCQmdCQnlOZ0lBSUFjZ0J5Z0NCRUdBQkhJMkFnUWdCU0FHSUFselFSbDBja0dBQ0hJaEJRc2dBU0FNSUFNb0Ftd2dCVUVKZGtIdkEzRnFMUUFBUVFKMGFpSUpLQUlBSWdvb0FnQWlCbXNoQVFKL0lBWWdBa0VRZGswRVFDQUNJQVpCRUhScklRSWdBVUdBZ0FKeEJFQWdDaWdDQkF3Q0N5QUtLQUlFSVFzZ0NTQUtRUXhCQ0NBQklBWkpJZzhiYWlnQ0FEWUNBQU5BQWtBZ0JBMEFJQU1vQWhBaUJFRUJhaUVLSUFRdEFBRWhCaUFFTFFBQVFmOEJSd1JBSUFNZ0NqWUNFRUVJSVFRZ0JrRUlkQ0FDYWlFQ0RBRUxJQVpCandGTkJFQWdBeUFLTmdJUUlBWkJDWFFnQW1vaEFrRUhJUVFNQVFzZ0F5QURLQUlNUVFGcU5nSU1JQUpCZ1A0RGFpRUNRUWdoQkFzZ0JFRUJheUVFSUFKQkFYUWhBaUFCUVFGMElnRkJnSUFDU1EwQUN5QUxSU0FMSUE4YkRBRUxJQW9vQWdRaEN5QUpJQXBCQ0VFTUlBRWdCa2tpRHh0cUtBSUFOZ0lBQTBBQ1FDQUVEUUFnQXlnQ0VDSUVRUUZxSVFvZ0JDMEFBU0VCSUFRdEFBQkIvd0ZIQkVBZ0F5QUtOZ0lRUVFnaEJDQUJRUWgwSUFKcUlRSU1BUXNnQVVHUEFVMEVRQ0FESUFvMkFoQWdBVUVKZENBQ2FpRUNRUWNoQkF3QkN5QURJQU1vQWd4QkFXbzJBZ3dnQWtHQS9nTnFJUUpCQ0NFRUN5QUVRUUZySVFRZ0FrRUJkQ0VDSUFaQkFYUWlCa0dBZ0FKSkRRQUxJQVloQVNBTElBdEZJQThiQzBVTkFnc2dBU0FNSUFjb0FnUkJHblpCQkhFZ0IwRUVheUlMS0FJQVFSeDJRUUZ4SUFWQkZYWkJFSEVnQlVFWmRrSEFBSEVnQlVFSmRrR3FBWEZ5Y25KeUlnOUJrTDRCYWkwQUFFRUNkR29pQ1NnQ0FDSUtLQUlBSWdackN5RUJBbjhnQmlBQ1FSQjJUUVJBSUFJZ0JrRVFkR3NoQWlBQlFZQ0FBbkVFUUNBS0tBSUVEQUlMSUFvb0FnUWhHU0FKSUFwQkRFRUlJQUVnQmtraUh4dHFLQUlBTmdJQUEwQUNRQ0FFRFFBZ0F5Z0NFQ0lFUVFGcUlRb2dCQzBBQVNFR0lBUXRBQUJCL3dGSEJFQWdBeUFLTmdJUVFRZ2hCQ0FHUVFoMElBSnFJUUlNQVFzZ0JrR1BBVTBFUUNBRElBbzJBaEFnQmtFSmRDQUNhaUVDUVFjaEJBd0JDeUFESUFNb0FneEJBV28yQWd3Z0FrR0EvZ05xSVFKQkNDRUVDeUFFUVFGcklRUWdBa0VCZENFQ0lBRkJBWFFpQVVHQWdBSkpEUUFMSUJsRklCa2dIeHNNQVFzZ0NpZ0NCQ0VaSUFrZ0NrRUlRUXdnQVNBR1NTSWZHMm9vQWdBMkFnQURRQUpBSUFRTkFDQURLQUlRSWdSQkFXb2hDaUFFTFFBQklRRWdCQzBBQUVIL0FVY0VRQ0FESUFvMkFoQkJDQ0VFSUFGQkNIUWdBbW9oQWd3QkN5QUJRWThCVFFSQUlBTWdDallDRUNBQlFRbDBJQUpxSVFKQkJ5RUVEQUVMSUFNZ0F5Z0NERUVCYWpZQ0RDQUNRWUQrQTJvaEFrRUlJUVFMSUFSQkFXc2hCQ0FDUVFGMElRSWdCa0VCZENJR1FZQ0FBa2tOQUFzZ0JpRUJJQmtnR1VVZ0h4c0xJUVlnRXlBa2FpQU9JQlVnQmlBUFFaREFBV290QUFBaUNrWWJOZ0lBSUFzZ0N5Z0NBRUdBZ0FGeU5nSUFJQWNnQnlnQ0JFR0FJSEkyQWdRZ0JpQUtjeUlHUVJ4MElBVnlJQU1vQW54QkFuUWdCMm9pQlNBRktBSUVRUVJ5TmdJRUlBVWdCU2dDREVFQmNqWUNEQ0FGSUFVb0FnZ2dCa0VTZEhKQkFuSTJBZ2hCZ01BQWNpRUZDeUFISUFWQi8vLy90bnR4TmdJQUN5QUhRUVJxSVFVZ0UwRUVhaUVUSUJKQkFXb2lFaUFXUncwQUN5QUhRUXhxSVFVZ0V5QWthaUVUSUJSQkJHb2lGQ0FES0FLQUFTSUdRWHh4U1EwQUN3d0JDMEVFSUFaQmZIRWlCU0FGUVFSTkcwRUJheUlGUVh4eFFRUnFJUlFnQnlBRlFRRjBRWGh4YWtFVWFpRUZDeUFESUFRMkFnZ2dBeUFCTmdJRUlBTWdBallDQUNBRElBazJBbWdnRmtVTkF5QUdJQlJORFFNRFFFRUFJUVFnRkNBREtBS0FBVWNFUUFOQUlBTWdCU0FUSUFRZ0ZteEJBblJxSUE0Z0JFRUJFR0VnQkVFQmFpSUVJQU1vQW9BQklCUnJTUTBBQ3dzZ0JTQUZLQUlBUWYvLy83WjdjVFlDQUNBVFFRUnFJUk1nQlVFRWFpRUZJQkZCQVdvaUVTQVdSdzBBQ3d3REN3SkFJQVpCQkVrTkFDQVdCRUFnQTBIa0FHb2hDQ0FEUWVBQWFpRU5JQlpCREd3aEpDQVdRUU4wSVJ4QkFDQU9heUVWSUFOQkhHb2hEQU5BUVFBaEVnTkFBa0FDUUFKL0lBVWlCeWdDQUNJRkJFQUNRQ0FGUVpDQWdBRnhEUUFnQVNBTUlBTW9BbXdnQlVIdkEzRnFMUUFBUVFKMGFpSUpLQUlBSWdvb0FnQWlCbXNoQVFKL0lBWWdBa0VRZGswRVFDQUNJQVpCRUhScklRSWdBVUdBZ0FKeEJFQWdDaWdDQkF3Q0N5QUtLQUlFSVFzZ0NTQUtRUXhCQ0NBQklBWkpJZzhiYWlnQ0FEWUNBQU5BQWtBZ0JBMEFJQU1vQWhBaUJFRUJhaUVLSUFRdEFBRWhCaUFFTFFBQVFmOEJSd1JBSUFNZ0NqWUNFRUVJSVFRZ0JrRUlkQ0FDYWlFQ0RBRUxJQVpCandGTkJFQWdBeUFLTmdJUUlBWkJDWFFnQW1vaEFrRUhJUVFNQVFzZ0F5QURLQUlNUVFGcU5nSU1JQUpCZ1A0RGFpRUNRUWdoQkFzZ0JFRUJheUVFSUFKQkFYUWhBaUFCUVFGMElnRkJnSUFDU1EwQUN5QUxSU0FMSUE4YkRBRUxJQW9vQWdRaEN5QUpJQXBCQ0VFTUlBRWdCa2tpRHh0cUtBSUFOZ0lBQTBBQ1FDQUVEUUFnQXlnQ0VDSUVRUUZxSVFvZ0JDMEFBU0VCSUFRdEFBQkIvd0ZIQkVBZ0F5QUtOZ0lRUVFnaEJDQUJRUWgwSUFKcUlRSU1BUXNnQVVHUEFVMEVRQ0FESUFvMkFoQWdBVUVKZENBQ2FpRUNRUWNoQkF3QkN5QURJQU1vQWd4QkFXbzJBZ3dnQWtHQS9nTnFJUUpCQ0NFRUN5QUVRUUZySVFRZ0FrRUJkQ0VDSUFaQkFYUWlCa0dBZ0FKSkRRQUxJQVloQVNBTElBdEZJQThiQzBVTkFDQUJJQXdnQnlnQ0JFRVJka0VFY1NBSFFRUnJJZ3NvQWdCQkUzWkJBWEVnQlVFT2RrRVFjU0FGUVJCMlFjQUFjU0FGUWFvQmNYSnljbklpR1VHUXZnRnFMUUFBUVFKMGFpSUpLQUlBSWdvb0FnQWlCbXNoQVFKL0lBWWdBa0VRZGswRVFDQUNJQVpCRUhScklRSWdBVUdBZ0FKeEJFQWdDaWdDQkF3Q0N5QUtLQUlFSVE4Z0NTQUtRUXhCQ0NBQklBWkpJaDhiYWlnQ0FEWUNBQU5BQWtBZ0JBMEFJQU1vQWhBaUJFRUJhaUVLSUFRdEFBRWhCaUFFTFFBQVFmOEJSd1JBSUFNZ0NqWUNFRUVJSVFRZ0JrRUlkQ0FDYWlFQ0RBRUxJQVpCandGTkJFQWdBeUFLTmdJUUlBWkJDWFFnQW1vaEFrRUhJUVFNQVFzZ0F5QURLQUlNUVFGcU5nSU1JQUpCZ1A0RGFpRUNRUWdoQkFzZ0JFRUJheUVFSUFKQkFYUWhBaUFCUVFGMElnRkJnSUFDU1EwQUN5QVBSU0FQSUI4YkRBRUxJQW9vQWdRaER5QUpJQXBCQ0VFTUlBRWdCa2tpSHh0cUtBSUFOZ0lBQTBBQ1FDQUVEUUFnQXlnQ0VDSUVRUUZxSVFvZ0JDMEFBU0VCSUFRdEFBQkIvd0ZIQkVBZ0F5QUtOZ0lRUVFnaEJDQUJRUWgwSUFKcUlRSU1BUXNnQVVHUEFVMEVRQ0FESUFvMkFoQWdBVUVKZENBQ2FpRUNRUWNoQkF3QkN5QURJQU1vQWd4QkFXbzJBZ3dnQWtHQS9nTnFJUUpCQ0NFRUN5QUVRUUZySVFRZ0FrRUJkQ0VDSUFaQkFYUWlCa0dBZ0FKSkRRQUxJQVloQVNBUElBOUZJQjhiQ3lFS0lCTWdEaUFWSUFvZ0dVR1F3QUZxTFFBQUlnOUdHellDQUNBTElBc29BZ0JCSUhJMkFnQWdCeUFIS0FJRVFRaHlOZ0lFSUFkQmZpQURLQUo4YTBFQ2RHb2lCaUFHS0FJRVFZQ0FBbkkyQWdRZ0JpQUdLQUlBSUFvZ0QzTWlDa0VmZEhKQmdJQUVjallDQUNBR1FRUnJJZ1lnQmlnQ0FFR0FnQWh5TmdJQUlBVWdDa0VUZEhKQkVISWhCUXNDUUNBRlFZQ0JnQWh4RFFBZ0FTQU1JQU1vQW13Z0JVRURkaUlQUWU4RGNXb3RBQUJCQW5ScUlna29BZ0FpQ2lnQ0FDSUdheUVCQW44Z0JpQUNRUkIyVFFSQUlBSWdCa0VRZEdzaEFpQUJRWUNBQW5FRVFDQUtLQUlFREFJTElBb29BZ1FoQ3lBSklBcEJERUVJSUFFZ0Jra2lHUnRxS0FJQU5nSUFBMEFDUUNBRURRQWdBeWdDRUNJRVFRRnFJUW9nQkMwQUFTRUdJQVF0QUFCQi93RkhCRUFnQXlBS05nSVFRUWdoQkNBR1FRaDBJQUpxSVFJTUFRc2dCa0dQQVUwRVFDQURJQW8yQWhBZ0JrRUpkQ0FDYWlFQ1FRY2hCQXdCQ3lBRElBTW9BZ3hCQVdvMkFnd2dBa0dBL2dOcUlRSkJDQ0VFQ3lBRVFRRnJJUVFnQWtFQmRDRUNJQUZCQVhRaUFVR0FnQUpKRFFBTElBdEZJQXNnR1JzTUFRc2dDaWdDQkNFTElBa2dDa0VJUVF3Z0FTQUdTU0laRzJvb0FnQTJBZ0FEUUFKQUlBUU5BQ0FES0FJUUlnUkJBV29oQ2lBRUxRQUJJUUVnQkMwQUFFSC9BVWNFUUNBRElBbzJBaEJCQ0NFRUlBRkJDSFFnQW1vaEFnd0JDeUFCUVk4QlRRUkFJQU1nQ2pZQ0VDQUJRUWwwSUFKcUlRSkJCeUVFREFFTElBTWdBeWdDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFRTElBUkJBV3NoQkNBQ1FRRjBJUUlnQmtFQmRDSUdRWUNBQWtrTkFBc2dCaUVCSUFzZ0MwVWdHUnNMUlEwQUlBRWdEQ0FIS0FJRVFSUjJRUVJ4SUFkQkJHc2lDeWdDQUVFV2RrRUJjU0FGUVE5MlFSQnhJQVZCRTNaQndBQnhJQTlCcWdGeGNuSnljaUlaUVpDK0FXb3RBQUJCQW5ScUlna29BZ0FpQ2lnQ0FDSUdheUVCQW44Z0JpQUNRUkIyVFFSQUlBSWdCa0VRZEdzaEFpQUJRWUNBQW5FRVFDQUtLQUlFREFJTElBb29BZ1FoRHlBSklBcEJERUVJSUFFZ0Jra2lIeHRxS0FJQU5nSUFBMEFDUUNBRURRQWdBeWdDRUNJRVFRRnFJUW9nQkMwQUFTRUdJQVF0QUFCQi93RkhCRUFnQXlBS05nSVFRUWdoQkNBR1FRaDBJQUpxSVFJTUFRc2dCa0dQQVUwRVFDQURJQW8yQWhBZ0JrRUpkQ0FDYWlFQ1FRY2hCQXdCQ3lBRElBTW9BZ3hCQVdvMkFnd2dBa0dBL2dOcUlRSkJDQ0VFQ3lBRVFRRnJJUVFnQWtFQmRDRUNJQUZCQVhRaUFVR0FnQUpKRFFBTElBOUZJQThnSHhzTUFRc2dDaWdDQkNFUElBa2dDa0VJUVF3Z0FTQUdTU0lmRzJvb0FnQTJBZ0FEUUFKQUlBUU5BQ0FES0FJUUlnUkJBV29oQ2lBRUxRQUJJUUVnQkMwQUFFSC9BVWNFUUNBRElBbzJBaEJCQ0NFRUlBRkJDSFFnQW1vaEFnd0JDeUFCUVk4QlRRUkFJQU1nQ2pZQ0VDQUJRUWwwSUFKcUlRSkJCeUVFREFFTElBTWdBeWdDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFRTElBUkJBV3NoQkNBQ1FRRjBJUUlnQmtFQmRDSUdRWUNBQWtrTkFBc2dCaUVCSUE4Z0QwVWdIeHNMSVFZZ0V5QVdRUUowYWlBT0lCVWdCaUFaUVpEQUFXb3RBQUFpQ2tZYk5nSUFJQXNnQ3lnQ0FFR0FBbkkyQWdBZ0J5QUhLQUlFUWNBQWNqWUNCQ0FGSUFZZ0NuTkJGblJ5UVlBQmNpRUZDd0pBSUFWQmdJaUF3QUJ4RFFBZ0FTQU1JQU1vQW13Z0JVRUdkaUlQUWU4RGNXb3RBQUJCQW5ScUlna29BZ0FpQ2lnQ0FDSUdheUVCQW44Z0JpQUNRUkIyVFFSQUlBSWdCa0VRZEdzaEFpQUJRWUNBQW5FRVFDQUtLQUlFREFJTElBb29BZ1FoQ3lBSklBcEJERUVJSUFFZ0Jra2lHUnRxS0FJQU5nSUFBMEFDUUNBRURRQWdBeWdDRUNJRVFRRnFJUW9nQkMwQUFTRUdJQVF0QUFCQi93RkhCRUFnQXlBS05nSVFRUWdoQkNBR1FRaDBJQUpxSVFJTUFRc2dCa0dQQVUwRVFDQURJQW8yQWhBZ0JrRUpkQ0FDYWlFQ1FRY2hCQXdCQ3lBRElBTW9BZ3hCQVdvMkFnd2dBa0dBL2dOcUlRSkJDQ0VFQ3lBRVFRRnJJUVFnQWtFQmRDRUNJQUZCQVhRaUFVR0FnQUpKRFFBTElBdEZJQXNnR1JzTUFRc2dDaWdDQkNFTElBa2dDa0VJUVF3Z0FTQUdTU0laRzJvb0FnQTJBZ0FEUUFKQUlBUU5BQ0FES0FJUUlnUkJBV29oQ2lBRUxRQUJJUUVnQkMwQUFFSC9BVWNFUUNBRElBbzJBaEJCQ0NFRUlBRkJDSFFnQW1vaEFnd0JDeUFCUVk4QlRRUkFJQU1nQ2pZQ0VDQUJRUWwwSUFKcUlRSkJCeUVFREFFTElBTWdBeWdDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFRTElBUkJBV3NoQkNBQ1FRRjBJUUlnQmtFQmRDSUdRWUNBQWtrTkFBc2dCaUVCSUFzZ0MwVWdHUnNMUlEwQUlBRWdEQ0FIS0FJRVFSZDJRUVJ4SUFkQkJHc2lDeWdDQUVFWmRrRUJjU0FGUVJKMlFSQnhJQVZCRm5aQndBQnhJQTlCcWdGeGNuSnljaUlaUVpDK0FXb3RBQUJCQW5ScUlna29BZ0FpQ2lnQ0FDSUdheUVCQW44Z0JpQUNRUkIyVFFSQUlBSWdCa0VRZEdzaEFpQUJRWUNBQW5FRVFDQUtLQUlFREFJTElBb29BZ1FoRHlBSklBcEJERUVJSUFFZ0Jra2lIeHRxS0FJQU5nSUFBMEFDUUNBRURRQWdBeWdDRUNJRVFRRnFJUW9nQkMwQUFTRUdJQVF0QUFCQi93RkhCRUFnQXlBS05nSVFRUWdoQkNBR1FRaDBJQUpxSVFJTUFRc2dCa0dQQVUwRVFDQURJQW8yQWhBZ0JrRUpkQ0FDYWlFQ1FRY2hCQXdCQ3lBRElBTW9BZ3hCQVdvMkFnd2dBa0dBL2dOcUlRSkJDQ0VFQ3lBRVFRRnJJUVFnQWtFQmRDRUNJQUZCQVhRaUFVR0FnQUpKRFFBTElBOUZJQThnSHhzTUFRc2dDaWdDQkNFUElBa2dDa0VJUVF3Z0FTQUdTU0lmRzJvb0FnQTJBZ0FEUUFKQUlBUU5BQ0FES0FJUUlnUkJBV29oQ2lBRUxRQUJJUUVnQkMwQUFFSC9BVWNFUUNBRElBbzJBaEJCQ0NFRUlBRkJDSFFnQW1vaEFnd0JDeUFCUVk4QlRRUkFJQU1nQ2pZQ0VDQUJRUWwwSUFKcUlRSkJCeUVFREFFTElBTWdBeWdDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFRTElBUkJBV3NoQkNBQ1FRRjBJUUlnQmtFQmRDSUdRWUNBQWtrTkFBc2dCaUVCSUE4Z0QwVWdIeHNMSVFZZ0V5QWNhaUFPSUJVZ0JpQVpRWkRBQVdvdEFBQWlDa1liTmdJQUlBc2dDeWdDQUVHQUVISTJBZ0FnQnlBSEtBSUVRWUFFY2pZQ0JDQUZJQVlnQ25OQkdYUnlRWUFJY2lFRkN5QUZRWURBZ0lBRWNRMENJQUVnRENBREtBSnNJQVZCQ1hZaUQwSHZBM0ZxTFFBQVFRSjBhaUlKS0FJQUlnb29BZ0FpQm1zaEFRSi9JQVlnQWtFUWRrMEVRQ0FDSUFaQkVIUnJJUUlnQVVHQWdBSnhCRUFnQ2lnQ0JBd0NDeUFLS0FJRUlRc2dDU0FLUVF4QkNDQUJJQVpKSWhrYmFpZ0NBRFlDQUFOQUFrQWdCQTBBSUFNb0FoQWlCRUVCYWlFS0lBUXRBQUVoQmlBRUxRQUFRZjhCUndSQUlBTWdDallDRUVFSUlRUWdCa0VJZENBQ2FpRUNEQUVMSUFaQmp3Rk5CRUFnQXlBS05nSVFJQVpCQ1hRZ0Ftb2hBa0VISVFRTUFRc2dBeUFES0FJTVFRRnFOZ0lNSUFKQmdQNERhaUVDUVFnaEJBc2dCRUVCYXlFRUlBSkJBWFFoQWlBQlFRRjBJZ0ZCZ0lBQ1NRMEFDeUFMUlNBTElCa2JEQUVMSUFvb0FnUWhDeUFKSUFwQkNFRU1JQUVnQmtraUdSdHFLQUlBTmdJQUEwQUNRQ0FFRFFBZ0F5Z0NFQ0lFUVFGcUlRb2dCQzBBQVNFQklBUXRBQUJCL3dGSEJFQWdBeUFLTmdJUVFRZ2hCQ0FCUVFoMElBSnFJUUlNQVFzZ0FVR1BBVTBFUUNBRElBbzJBaEFnQVVFSmRDQUNhaUVDUVFjaEJBd0JDeUFESUFNb0FneEJBV28yQWd3Z0FrR0EvZ05xSVFKQkNDRUVDeUFFUVFGcklRUWdBa0VCZENFQ0lBWkJBWFFpQmtHQWdBSkpEUUFMSUFZaEFTQUxJQXRGSUJrYkMwVU5BaUFCSUF3Z0J5Z0NCRUVhZGtFRWNTQUhRUVJySWdzb0FnQkJISFpCQVhFZ0JVRVZka0VRY1NBRlFSbDJRY0FBY1NBUFFhb0JjWEp5Y25JaUQwR1F2Z0ZxTFFBQVFRSjBhaUlKS0FJQUlnb29BZ0FpQm1zTUFRc2dBU0FOS0FJQUlnWW9BZ0FpQldzaEFRSi9JQVVnQWtFUWRrMEVRQ0FDSUFWQkVIUnJJUUlnQVVHQWdBSnhCRUFnQmlnQ0JBd0NDeUFHS0FJRUlRa2dEU0FHUVF4QkNDQUJJQVZKSWdvYmFpZ0NBRFlDQUFOQUFrQWdCQTBBSUFNb0FoQWlCa0VCYWlFRUlBWXRBQUVoQlNBR0xRQUFRZjhCUndSQUlBTWdCRFlDRUVFSUlRUWdCVUVJZENBQ2FpRUNEQUVMSUFWQmp3Rk5CRUFnQXlBRU5nSVFJQVZCQ1hRZ0Ftb2hBa0VISVFRTUFRc2dBeUFES0FJTVFRRnFOZ0lNSUFKQmdQNERhaUVDUVFnaEJBc2dCRUVCYXlFRUlBSkJBWFFoQWlBQlFRRjBJZ0ZCZ0lBQ1NRMEFDeUFKUlNBSklBb2JEQUVMSUFZb0FnUWhDU0FOSUFaQkNFRU1JQUVnQlVraUNodHFLQUlBTmdJQUEwQUNRQ0FFRFFBZ0F5Z0NFQ0lHUVFGcUlRUWdCaTBBQVNFQklBWXRBQUJCL3dGSEJFQWdBeUFFTmdJUVFRZ2hCQ0FCUVFoMElBSnFJUUlNQVFzZ0FVR1BBVTBFUUNBRElBUTJBaEFnQVVFSmRDQUNhaUVDUVFjaEJBd0JDeUFESUFNb0FneEJBV28yQWd3Z0FrR0EvZ05xSVFKQkNDRUVDeUFFUVFGcklRUWdBa0VCZENFQ0lBVkJBWFFpQlVHQWdBSkpEUUFMSUFVaEFTQUpJQWxGSUFvYkMwVUVRQ0FOSVFrTUF3c2dBU0FJS0FJQUlnWW9BZ0FpQldzaEFRSi9JQVVnQWtFUWRrMEVRQ0FDSUFWQkVIUnJJUUlnQVVHQWdBSnhCRUFnQmlnQ0JBd0NDeUFHS0FJRUlRa2dDQ0FHUVF4QkNDQUJJQVZKSWdzYmFpZ0NBQ0lHTmdJQUEwQUNRQ0FFRFFBZ0F5Z0NFQ0lFUVFGcUlRb2dCQzBBQVNFRklBUXRBQUJCL3dGSEJFQWdBeUFLTmdJUVFRZ2hCQ0FGUVFoMElBSnFJUUlNQVFzZ0JVR1BBVTBFUUNBRElBbzJBaEFnQlVFSmRDQUNhaUVDUVFjaEJBd0JDeUFESUFNb0FneEJBV28yQWd3Z0FrR0EvZ05xSVFKQkNDRUVDeUFFUVFGcklRUWdBa0VCZENFQ0lBRkJBWFFpQVVHQWdBSkpEUUFMSUFsRklBa2dDeHNNQVFzZ0JpZ0NCQ0VKSUFnZ0JrRUlRUXdnQVNBRlNTSUxHMm9vQWdBaUJqWUNBQU5BQWtBZ0JBMEFJQU1vQWhBaUJFRUJhaUVLSUFRdEFBRWhBU0FFTFFBQVFmOEJSd1JBSUFNZ0NqWUNFRUVJSVFRZ0FVRUlkQ0FDYWlFQ0RBRUxJQUZCandGTkJFQWdBeUFLTmdJUUlBRkJDWFFnQW1vaEFrRUhJUVFNQVFzZ0F5QURLQUlNUVFGcU5nSU1JQUpCZ1A0RGFpRUNRUWdoQkFzZ0JFRUJheUVFSUFKQkFYUWhBaUFGUVFGMElnVkJnSUFDU1EwQUN5QUZJUUVnQ1NBSlJTQUxHd3NoQ2lBQklBWW9BZ0FpQldzaEFRSi9JQVVnQWtFUWRrMEVRQ0FDSUFWQkVIUnJJUUlnQVVHQWdBSnhCRUFnQmlnQ0JBd0NDeUFHS0FJRUlRa2dDQ0FHUVF4QkNDQUJJQVZKSWdzYmFpZ0NBRFlDQUFOQUFrQWdCQTBBSUFNb0FoQWlCa0VCYWlFRUlBWXRBQUVoQlNBR0xRQUFRZjhCUndSQUlBTWdCRFlDRUVFSUlRUWdCVUVJZENBQ2FpRUNEQUVMSUFWQmp3Rk5CRUFnQXlBRU5nSVFJQVZCQ1hRZ0Ftb2hBa0VISVFRTUFRc2dBeUFES0FJTVFRRnFOZ0lNSUFKQmdQNERhaUVDUVFnaEJBc2dCRUVCYXlFRUlBSkJBWFFoQWlBQlFRRjBJZ0ZCZ0lBQ1NRMEFDeUFKUlNBSklBc2JEQUVMSUFZb0FnUWhDU0FJSUFaQkNFRU1JQUVnQlVraUN4dHFLQUlBTmdJQUEwQUNRQ0FFRFFBZ0F5Z0NFQ0lHUVFGcUlRUWdCaTBBQVNFQklBWXRBQUJCL3dGSEJFQWdBeUFFTmdJUVFRZ2hCQ0FCUVFoMElBSnFJUUlNQVFzZ0FVR1BBVTBFUUNBRElBUTJBaEFnQVVFSmRDQUNhaUVDUVFjaEJBd0JDeUFESUFNb0FneEJBV28yQWd3Z0FrR0EvZ05xSVFKQkNDRUVDeUFFUVFGcklRUWdBa0VCZENFQ0lBVkJBWFFpQlVHQWdBSkpEUUFMSUFVaEFTQUpJQWxGSUFzYkN5RUdRUUFoQlNBSUlRa0NRQUpBQWtBQ2Z3SkFBa0FnQmlBS1FRRjBjZzRFQUFFREJRY0xJQUVnRENBSEtBSUVRUkYyUVFSeElBZEJCR3NpQ1NnQ0FFRVRka0VCY1hJaUQwR1F2Z0ZxTFFBQVFRSjBhaUlLS0FJQUlnWW9BZ0FpQldzaEFRSi9JQVVnQWtFUWRrMEVRQ0FDSUFWQkVIUnJJUUlnQVVHQWdBSnhCRUFnQmlnQ0JBd0NDeUFHS0FJRUlRc2dDaUFHUVF4QkNDQUJJQVZKSWdvYmFpZ0NBRFlDQUFOQUFrQWdCQTBBSUFNb0FoQWlCa0VCYWlFRUlBWXRBQUVoQlNBR0xRQUFRZjhCUndSQUlBTWdCRFlDRUVFSUlRUWdCVUVJZENBQ2FpRUNEQUVMSUFWQmp3Rk5CRUFnQXlBRU5nSVFJQVZCQ1hRZ0Ftb2hBa0VISVFRTUFRc2dBeUFES0FJTVFRRnFOZ0lNSUFKQmdQNERhaUVDUVFnaEJBc2dCRUVCYXlFRUlBSkJBWFFoQWlBQlFRRjBJZ0ZCZ0lBQ1NRMEFDeUFMUlNBTElBb2JEQUVMSUFZb0FnUWhDeUFLSUFaQkNFRU1JQUVnQlVraUNodHFLQUlBTmdJQUEwQUNRQ0FFRFFBZ0F5Z0NFQ0lHUVFGcUlRUWdCaTBBQVNFQklBWXRBQUJCL3dGSEJFQWdBeUFFTmdJUVFRZ2hCQ0FCUVFoMElBSnFJUUlNQVFzZ0FVR1BBVTBFUUNBRElBUTJBaEFnQVVFSmRDQUNhaUVDUVFjaEJBd0JDeUFESUFNb0FneEJBV28yQWd3Z0FrR0EvZ05xSVFKQkNDRUVDeUFFUVFGcklRUWdBa0VCZENFQ0lBVkJBWFFpQlVHQWdBSkpEUUFMSUFVaEFTQUxJQXRGSUFvYkN5RUdJQk1nRGlBVklBWWdEMEdRd0FGcUxRQUFJZ3BHR3pZQ0FDQUpJQWtvQWdCQklISTJBZ0FnQnlBSEtBSUVRUWh5TmdJRUlBZEJmaUFES0FKOGEwRUNkR29pQlNBRktBSUVRWUNBQW5JMkFnUWdCU0FGS0FJQUlBWWdDbk1pQmtFZmRISkJnSUFFY2pZQ0FDQUZRUVJySWdVZ0JTZ0NBRUdBZ0FoeU5nSUFJQVpCRTNRZ0FTQU1JQU1vQW13dEFBSkJBblJxSWdrb0FnQWlCaWdDQUNJRmF5RUJBbjhnQlNBQ1FSQjJUUVJBSUFJZ0JVRVFkR3NoQWlBQlFZQ0FBbkVFUUNBR0tBSUVEQUlMSUFZb0FnUWhDaUFKSUFaQkRFRUlJQUVnQlVraUR4dHFLQUlBTmdJQUEwQUNRQ0FFRFFBZ0F5Z0NFQ0lHUVFGcUlRa2dCaTBBQVNFRklBWXRBQUJCL3dGSEJFQWdBeUFKTmdJUVFRZ2hCQ0FGUVFoMElBSnFJUUlNQVFzZ0JVR1BBVTBFUUNBRElBazJBaEFnQlVFSmRDQUNhaUVDUVFjaEJBd0JDeUFESUFNb0FneEJBV28yQWd3Z0FrR0EvZ05xSVFKQkNDRUVDeUFFUVFGcklRUWdBa0VCZENFQ0lBRkJBWFFpQVVHQWdBSkpEUUFMSUFwRklBb2dEeHNNQVFzZ0JpZ0NCQ0VLSUFrZ0JrRUlRUXdnQVNBRlNTSVBHMm9vQWdBMkFnQURRQUpBSUFRTkFDQURLQUlRSWdaQkFXb2hDU0FHTFFBQklRRWdCaTBBQUVIL0FVY0VRQ0FESUFrMkFoQkJDQ0VFSUFGQkNIUWdBbW9oQWd3QkN5QUJRWThCVFFSQUlBTWdDVFlDRUNBQlFRbDBJQUpxSVFKQkJ5RUVEQUVMSUFNZ0F5Z0NERUVCYWpZQ0RDQUNRWUQrQTJvaEFrRUlJUVFMSUFSQkFXc2hCQ0FDUVFGMElRSWdCVUVCZENJRlFZQ0FBa2tOQUFzZ0JTRUJJQW9nQ2tVZ0R4c0xJUVpCRUhJaUJTQUdSUTBCR2dzZ0FTQU1JQWNvQWdSQkZIWkJCSEVnQjBFRWF5SUtLQUlBUVJaMlFRRnhJQVZCRDNaQkVIRWdCVUVUZGtIQUFIRWdCVUVEZGtHcUFYRnljbkp5SWhsQmtMNEJhaTBBQUVFQ2RHb2lDeWdDQUNJSktBSUFJZ1pySVFFQ2Z5QUdJQUpCRUhaTkJFQWdBaUFHUVJCMGF5RUNJQUZCZ0lBQ2NRUkFJQWtvQWdRTUFnc2dDU2dDQkNFUElBc2dDVUVNUVFnZ0FTQUdTU0lMRzJvb0FnQTJBZ0FEUUFKQUlBUU5BQ0FES0FJUUlnbEJBV29oQkNBSkxRQUJJUVlnQ1MwQUFFSC9BVWNFUUNBRElBUTJBaEJCQ0NFRUlBWkJDSFFnQW1vaEFnd0JDeUFHUVk4QlRRUkFJQU1nQkRZQ0VDQUdRUWwwSUFKcUlRSkJCeUVFREFFTElBTWdBeWdDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFRTElBUkJBV3NoQkNBQ1FRRjBJUUlnQVVFQmRDSUJRWUNBQWtrTkFBc2dEMFVnRHlBTEd3d0JDeUFKS0FJRUlROGdDeUFKUVFoQkRDQUJJQVpKSWdzYmFpZ0NBRFlDQUFOQUFrQWdCQTBBSUFNb0FoQWlDVUVCYWlFRUlBa3RBQUVoQVNBSkxRQUFRZjhCUndSQUlBTWdCRFlDRUVFSUlRUWdBVUVJZENBQ2FpRUNEQUVMSUFGQmp3Rk5CRUFnQXlBRU5nSVFJQUZCQ1hRZ0Ftb2hBa0VISVFRTUFRc2dBeUFES0FJTVFRRnFOZ0lNSUFKQmdQNERhaUVDUVFnaEJBc2dCRUVCYXlFRUlBSkJBWFFoQWlBR1FRRjBJZ1pCZ0lBQ1NRMEFDeUFHSVFFZ0R5QVBSU0FMR3dzaEJpQVRJQlpCQW5ScUlBNGdGU0FHSUJsQmtNQUJhaTBBQUNJSlJoczJBZ0FnQ2lBS0tBSUFRWUFDY2pZQ0FDQUhJQWNvQWdSQndBQnlOZ0lFSUFVZ0JpQUpjMEVXZEhKQmdBRnlDeUVGSUFFZ0RDQURLQUpzSUFWQkJuWkI3d054YWkwQUFFRUNkR29pQ2lnQ0FDSUpLQUlBSWdacklRRUNmeUFHSUFKQkVIWk5CRUFnQWlBR1FSQjBheUVDSUFGQmdJQUNjUVJBSUFrb0FnUU1BZ3NnQ1NnQ0JDRUxJQW9nQ1VFTVFRZ2dBU0FHU1NJS0cyb29BZ0EyQWdBRFFBSkFJQVFOQUNBREtBSVFJZ2xCQVdvaEJDQUpMUUFCSVFZZ0NTMEFBRUgvQVVjRVFDQURJQVEyQWhCQkNDRUVJQVpCQ0hRZ0Ftb2hBZ3dCQ3lBR1FZOEJUUVJBSUFNZ0JEWUNFQ0FHUVFsMElBSnFJUUpCQnlFRURBRUxJQU1nQXlnQ0RFRUJhallDRENBQ1FZRCtBMm9oQWtFSUlRUUxJQVJCQVdzaEJDQUNRUUYwSVFJZ0FVRUJkQ0lCUVlDQUFra05BQXNnQzBVZ0N5QUtHd3dCQ3lBSktBSUVJUXNnQ2lBSlFRaEJEQ0FCSUFaSklnb2JhaWdDQURZQ0FBTkFBa0FnQkEwQUlBTW9BaEFpQ1VFQmFpRUVJQWt0QUFFaEFTQUpMUUFBUWY4QlJ3UkFJQU1nQkRZQ0VFRUlJUVFnQVVFSWRDQUNhaUVDREFFTElBRkJqd0ZOQkVBZ0F5QUVOZ0lRSUFGQkNYUWdBbW9oQWtFSElRUU1BUXNnQXlBREtBSU1RUUZxTmdJTUlBSkJnUDREYWlFQ1FRZ2hCQXNnQkVFQmF5RUVJQUpCQVhRaEFpQUdRUUYwSWdaQmdJQUNTUTBBQ3lBR0lRRWdDeUFMUlNBS0d3dEZEUUVMSUFFZ0RDQUhLQUlFUVJkMlFRUnhJQWRCQkdzaUNpZ0NBRUVaZGtFQmNTQUZRUkoyUVJCeElBVkJGblpCd0FCeElBVkJCblpCcWdGeGNuSnljaUlaUVpDK0FXb3RBQUJCQW5ScUlnc29BZ0FpQ1NnQ0FDSUdheUVCQW44Z0JpQUNRUkIyVFFSQUlBSWdCa0VRZEdzaEFpQUJRWUNBQW5FRVFDQUpLQUlFREFJTElBa29BZ1FoRHlBTElBbEJERUVJSUFFZ0Jra2lDeHRxS0FJQU5nSUFBMEFDUUNBRURRQWdBeWdDRUNJSlFRRnFJUVFnQ1MwQUFTRUdJQWt0QUFCQi93RkhCRUFnQXlBRU5nSVFRUWdoQkNBR1FRaDBJQUpxSVFJTUFRc2dCa0dQQVUwRVFDQURJQVEyQWhBZ0JrRUpkQ0FDYWlFQ1FRY2hCQXdCQ3lBRElBTW9BZ3hCQVdvMkFnd2dBa0dBL2dOcUlRSkJDQ0VFQ3lBRVFRRnJJUVFnQWtFQmRDRUNJQUZCQVhRaUFVR0FnQUpKRFFBTElBOUZJQThnQ3hzTUFRc2dDU2dDQkNFUElBc2dDVUVJUVF3Z0FTQUdTU0lMRzJvb0FnQTJBZ0FEUUFKQUlBUU5BQ0FES0FJUUlnbEJBV29oQkNBSkxRQUJJUUVnQ1MwQUFFSC9BVWNFUUNBRElBUTJBaEJCQ0NFRUlBRkJDSFFnQW1vaEFnd0JDeUFCUVk4QlRRUkFJQU1nQkRZQ0VDQUJRUWwwSUFKcUlRSkJCeUVFREFFTElBTWdBeWdDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFRTElBUkJBV3NoQkNBQ1FRRjBJUUlnQmtFQmRDSUdRWUNBQWtrTkFBc2dCaUVCSUE4Z0QwVWdDeHNMSVFZZ0V5QWNhaUFPSUJVZ0JpQVpRWkRBQVdvdEFBQWlDVVliTmdJQUlBb2dDaWdDQUVHQUVISTJBZ0FnQnlBSEtBSUVRWUFFY2pZQ0JDQUZJQVlnQ1hOQkdYUnlRWUFJY2lFRkN5QUJJQXdnQXlnQ2JDQUZRUWwyUWU4RGNXb3RBQUJCQW5ScUlna29BZ0FpQ2lnQ0FDSUdheUVCQW44Z0JpQUNRUkIyVFFSQUlBSWdCa0VRZEdzaEFpQUJRWUNBQW5FRVFDQUtLQUlFREFJTElBb29BZ1FoQ3lBSklBcEJERUVJSUFFZ0Jra2lEeHRxS0FJQU5nSUFBMEFDUUNBRURRQWdBeWdDRUNJRVFRRnFJUW9nQkMwQUFTRUdJQVF0QUFCQi93RkhCRUFnQXlBS05nSVFRUWdoQkNBR1FRaDBJQUpxSVFJTUFRc2dCa0dQQVUwRVFDQURJQW8yQWhBZ0JrRUpkQ0FDYWlFQ1FRY2hCQXdCQ3lBRElBTW9BZ3hCQVdvMkFnd2dBa0dBL2dOcUlRSkJDQ0VFQ3lBRVFRRnJJUVFnQWtFQmRDRUNJQUZCQVhRaUFVR0FnQUpKRFFBTElBdEZJQXNnRHhzTUFRc2dDaWdDQkNFTElBa2dDa0VJUVF3Z0FTQUdTU0lQRzJvb0FnQTJBZ0FEUUFKQUlBUU5BQ0FES0FJUUlnUkJBV29oQ2lBRUxRQUJJUUVnQkMwQUFFSC9BVWNFUUNBRElBbzJBaEJCQ0NFRUlBRkJDSFFnQW1vaEFnd0JDeUFCUVk4QlRRUkFJQU1nQ2pZQ0VDQUJRUWwwSUFKcUlRSkJCeUVFREFFTElBTWdBeWdDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFRTElBUkJBV3NoQkNBQ1FRRjBJUUlnQmtFQmRDSUdRWUNBQWtrTkFBc2dCaUVCSUFzZ0MwVWdEeHNMUlEwQ0N5QUJJQXdnQnlnQ0JFRWFka0VFY1NBSFFRUnJJZ3NvQWdCQkhIWkJBWEVnQlVFVmRrRVFjU0FGUVJsMlFjQUFjU0FGUVFsMlFhb0JjWEp5Y25JaUQwR1F2Z0ZxTFFBQVFRSjBhaUlKS0FJQUlnb29BZ0FpQm1zTElRRUNmeUFHSUFKQkVIWk5CRUFnQWlBR1FSQjBheUVDSUFGQmdJQUNjUVJBSUFvb0FnUU1BZ3NnQ2lnQ0JDRVpJQWtnQ2tFTVFRZ2dBU0FHU1NJZkcyb29BZ0EyQWdBRFFBSkFJQVFOQUNBREtBSVFJZ1JCQVdvaENpQUVMUUFCSVFZZ0JDMEFBRUgvQVVjRVFDQURJQW8yQWhCQkNDRUVJQVpCQ0hRZ0Ftb2hBZ3dCQ3lBR1FZOEJUUVJBSUFNZ0NqWUNFQ0FHUVFsMElBSnFJUUpCQnlFRURBRUxJQU1nQXlnQ0RFRUJhallDRENBQ1FZRCtBMm9oQWtFSUlRUUxJQVJCQVdzaEJDQUNRUUYwSVFJZ0FVRUJkQ0lCUVlDQUFra05BQXNnR1VVZ0dTQWZHd3dCQ3lBS0tBSUVJUmtnQ1NBS1FRaEJEQ0FCSUFaSkloOGJhaWdDQURZQ0FBTkFBa0FnQkEwQUlBTW9BaEFpQkVFQmFpRUtJQVF0QUFFaEFTQUVMUUFBUWY4QlJ3UkFJQU1nQ2pZQ0VFRUlJUVFnQVVFSWRDQUNhaUVDREFFTElBRkJqd0ZOQkVBZ0F5QUtOZ0lRSUFGQkNYUWdBbW9oQWtFSElRUU1BUXNnQXlBREtBSU1RUUZxTmdJTUlBSkJnUDREYWlFQ1FRZ2hCQXNnQkVFQmF5RUVJQUpCQVhRaEFpQUdRUUYwSWdaQmdJQUNTUTBBQ3lBR0lRRWdHU0FaUlNBZkd3c2hCaUFUSUNScUlBNGdGU0FHSUE5QmtNQUJhaTBBQUNJS1JoczJBZ0FnQ3lBTEtBSUFRWUNBQVhJMkFnQWdCeUFIS0FJRVFZQWdjallDQkNBR0lBcHpJZ1pCSEhRZ0JYSWdBeWdDZkVFQ2RDQUhhaUlGSUFVb0FnUkJCSEkyQWdRZ0JTQUZLQUlNUVFGeU5nSU1JQVVnQlNnQ0NDQUdRUkowY2tFQ2NqWUNDRUdBd0FCeUlRVUxJQWNnQlVILy8vKzJlM0UyQWdBTElBZEJCR29oQlNBVFFRUnFJUk1nRWtFQmFpSVNJQlpIRFFBTElBZEJER29oQlNBVElDUnFJUk1nRkVFRWFpSVVJQU1vQW9BQklnWkJmSEZKRFFBTERBRUxRUVFnQmtGOGNTSUZJQVZCQkUwYlFRRnJJZ1ZCZkhGQkJHb2hGQ0FISUFWQkFYUkJlSEZxUVJScUlRVUxJQU1nQkRZQ0NDQURJQUUyQWdRZ0F5QUNOZ0lBSUFNZ0NUWUNhQ0FXUlEwQ0lBWWdGRTBOQWdOQVFRQWhCQ0FVSUFNb0FvQUJSd1JBQTBBZ0F5QUZJQk1nQkNBV2JFRUNkR29nRGlBRVFRQVFZU0FFUVFGcUlnUWdBeWdDZ0FFZ0ZHdEpEUUFMQ3lBRklBVW9BZ0JCLy8vL3RudHhOZ0lBSUJOQkJHb2hFeUFGUVFScUlRVWdFVUVCYWlJUklCWkhEUUFMREFJTEEwQkJBQ0VWQTBBZ0JTRVRBa0FDUUFKL0lBWWlEU2dDQUNJR1JRUkFJQUVnQ0NnQ0FDSUZLQUlBSWdacklRRUNmeUFHSUFKQkVIWkxCRUFnQlNnQ0JDRUpJQWdnQlVFSVFRd2dBU0FHU1NJS0cyb29BZ0EyQWdBRFFBSkFJQVFOQUNBREtBSVFJZ1ZCQVdvaEJDQUZMUUFCSVFFZ0JTMEFBRUgvQVVZRVFDQUJRWkFCVHdSQUlBTWdBeWdDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFRTUFnc2dBeUFFTmdJUUlBRkJDWFFnQW1vaEFrRUhJUVFNQVFzZ0F5QUVOZ0lRUVFnaEJDQUJRUWgwSUFKcUlRSUxJQVJCQVdzaEJDQUNRUUYwSVFJZ0JrRUJkQ0lHUVlDQUFra05BQXNnQmlFQklBa2dDVVVnQ2hzTUFRc2dBaUFHUVJCMGF5RUNJQUZCZ0lBQ2NVVUVRQ0FGS0FJRUlRa2dDQ0FGUVF4QkNDQUJJQVpKSWdvYmFpZ0NBRFlDQUFOQUFrQWdCQTBBSUFNb0FoQWlCa0VCYWlFRUlBWXRBQUVoQlNBR0xRQUFRZjhCUmdSQUlBVkJrQUZQQkVBZ0F5QURLQUlNUVFGcU5nSU1JQUpCZ1A0RGFpRUNRUWdoQkF3Q0N5QURJQVEyQWhBZ0JVRUpkQ0FDYWlFQ1FRY2hCQXdCQ3lBRElBUTJBaEJCQ0NFRUlBVkJDSFFnQW1vaEFnc2dCRUVCYXlFRUlBSkJBWFFoQWlBQlFRRjBJZ0ZCZ0lBQ1NRMEFDeUFKUlNBSklBb2JEQUVMSUFVb0FnUUxSUVJBSUFnaENRd0VDeUFCSUFjb0FnQWlCU2dDQUNJR2F5RUJBbjhnQmlBQ1FSQjJTd1JBSUFVb0FnUWhDU0FISUFWQkNFRU1JQUVnQmtraUN4dHFLQUlBSWdVMkFnQURRQUpBSUFRTkFDQURLQUlRSWdSQkFXb2hDaUFFTFFBQklRRWdCQzBBQUVIL0FVWUVRQ0FCUVpBQlR3UkFJQU1nQXlnQ0RFRUJhallDRENBQ1FZRCtBMm9oQWtFSUlRUU1BZ3NnQXlBS05nSVFJQUZCQ1hRZ0Ftb2hBa0VISVFRTUFRc2dBeUFLTmdJUVFRZ2hCQ0FCUVFoMElBSnFJUUlMSUFSQkFXc2hCQ0FDUVFGMElRSWdCa0VCZENJR1FZQ0FBa2tOQUFzZ0JpRUJJQWtnQ1VVZ0N4c01BUXNnQWlBR1FSQjBheUVDSUFGQmdJQUNjVVVFUUNBRktBSUVJUWtnQnlBRlFReEJDQ0FCSUFaSklnc2JhaWdDQUNJRk5nSUFBMEFDUUNBRURRQWdBeWdDRUNJRVFRRnFJUW9nQkMwQUFTRUdJQVF0QUFCQi93RkdCRUFnQmtHUUFVOEVRQ0FESUFNb0FneEJBV28yQWd3Z0FrR0EvZ05xSVFKQkNDRUVEQUlMSUFNZ0NqWUNFQ0FHUVFsMElBSnFJUUpCQnlFRURBRUxJQU1nQ2pZQ0VFRUlJUVFnQmtFSWRDQUNhaUVDQ3lBRVFRRnJJUVFnQWtFQmRDRUNJQUZCQVhRaUFVR0FnQUpKRFFBTElBbEZJQWtnQ3hzTUFRc2dCU2dDQkFzaENpQUJJQVVvQWdBaUJtc2hBUUovSUFZZ0FrRVFka3NFUUNBRktBSUVJUWtnQnlBRlFRaEJEQ0FCSUFaSklnc2JhaWdDQURZQ0FBTkFBa0FnQkEwQUlBTW9BaEFpQlVFQmFpRUVJQVV0QUFFaEFTQUZMUUFBUWY4QlJnUkFJQUZCa0FGUEJFQWdBeUFES0FJTVFRRnFOZ0lNSUFKQmdQNERhaUVDUVFnaEJBd0NDeUFESUFRMkFoQWdBVUVKZENBQ2FpRUNRUWNoQkF3QkN5QURJQVEyQWhCQkNDRUVJQUZCQ0hRZ0Ftb2hBZ3NnQkVFQmF5RUVJQUpCQVhRaEFpQUdRUUYwSWdaQmdJQUNTUTBBQ3lBR0lRRWdDU0FKUlNBTEd3d0JDeUFDSUFaQkVIUnJJUUlnQVVHQWdBSnhSUVJBSUFVb0FnUWhDU0FISUFWQkRFRUlJQUVnQmtraUN4dHFLQUlBTmdJQUEwQUNRQ0FFRFFBZ0F5Z0NFQ0lHUVFGcUlRUWdCaTBBQVNFRklBWXRBQUJCL3dGR0JFQWdCVUdRQVU4RVFDQURJQU1vQWd4QkFXbzJBZ3dnQWtHQS9nTnFJUUpCQ0NFRURBSUxJQU1nQkRZQ0VDQUZRUWwwSUFKcUlRSkJCeUVFREFFTElBTWdCRFlDRUVFSUlRUWdCVUVJZENBQ2FpRUNDeUFFUVFGcklRUWdBa0VCZENFQ0lBRkJBWFFpQVVHQWdBSkpEUUFMSUFsRklBa2dDeHNNQVFzZ0JTZ0NCQXNoQlVFQUlRWWdCeUVKQWtBQ1FBSkFBbjhDUUFKQUlBVWdDa0VCZEhJT0JBQUJBd1VJQ3lBQklCWWdEU2dDQkVFUmRrRUVjU0FOUVFScklna29BZ0JCRTNaQkFYRnlJaEZCa0w0QmFpMEFBRUVDZEdvaUNpZ0NBQ0lGS0FJQUlnWnJJUUVDZnlBR0lBSkJFSFpMQkVBZ0JTZ0NCQ0VMSUFvZ0JVRUlRUXdnQVNBR1NTSUtHMm9vQWdBMkFnQURRQUpBSUFRTkFDQURLQUlRSWdWQkFXb2hCQ0FGTFFBQklRRWdCUzBBQUVIL0FVWUVRQ0FCUVpBQlR3UkFJQU1nQXlnQ0RFRUJhallDRENBQ1FZRCtBMm9oQWtFSUlRUU1BZ3NnQXlBRU5nSVFJQUZCQ1hRZ0Ftb2hBa0VISVFRTUFRc2dBeUFFTmdJUVFRZ2hCQ0FCUVFoMElBSnFJUUlMSUFSQkFXc2hCQ0FDUVFGMElRSWdCa0VCZENJR1FZQ0FBa2tOQUFzZ0JpRUJJQXNnQzBVZ0Noc01BUXNnQWlBR1FSQjBheUVDSUFGQmdJQUNjVVVFUUNBRktBSUVJUXNnQ2lBRlFReEJDQ0FCSUFaSklnb2JhaWdDQURZQ0FBTkFBa0FnQkEwQUlBTW9BaEFpQmtFQmFpRUVJQVl0QUFFaEJTQUdMUUFBUWY4QlJnUkFJQVZCa0FGUEJFQWdBeUFES0FJTVFRRnFOZ0lNSUFKQmdQNERhaUVDUVFnaEJBd0NDeUFESUFRMkFoQWdCVUVKZENBQ2FpRUNRUWNoQkF3QkN5QURJQVEyQWhCQkNDRUVJQVZCQ0hRZ0Ftb2hBZ3NnQkVFQmF5RUVJQUpCQVhRaEFpQUJRUUYwSWdGQmdJQUNTUTBBQ3lBTFJTQUxJQW9iREFFTElBVW9BZ1FMSVFVZ0V5QU9JQXdnQlNBUlFaREFBV290QUFBaUJrWWJOZ0lBSUFrZ0NTZ0NBRUVnY2pZQ0FDQU5JQTBvQWdSQkNISTJBZ1FnQlNBR2MwRVRkQ0FCSUJZZ0F5Z0NiQzBBQWtFQ2RHb2lDU2dDQUNJRktBSUFJZ1pySVFFQ2Z5QUdJQUpCRUhaTEJFQWdCU2dDQkNFS0lBa2dCVUVJUVF3Z0FTQUdTU0lSRzJvb0FnQTJBZ0FEUUFKQUlBUU5BQ0FES0FJUUlnVkJBV29oQ1NBRkxRQUJJUUVnQlMwQUFFSC9BVVlFUUNBQlFaQUJUd1JBSUFNZ0F5Z0NERUVCYWpZQ0RDQUNRWUQrQTJvaEFrRUlJUVFNQWdzZ0F5QUpOZ0lRSUFGQkNYUWdBbW9oQWtFSElRUU1BUXNnQXlBSk5nSVFRUWdoQkNBQlFRaDBJQUpxSVFJTElBUkJBV3NoQkNBQ1FRRjBJUUlnQmtFQmRDSUdRWUNBQWtrTkFBc2dCaUVCSUFvZ0NrVWdFUnNNQVFzZ0FpQUdRUkIwYXlFQ0lBRkJnSUFDY1VVRVFDQUZLQUlFSVFvZ0NTQUZRUXhCQ0NBQklBWkpJaEViYWlnQ0FEWUNBQU5BQWtBZ0JBMEFJQU1vQWhBaUJrRUJhaUVKSUFZdEFBRWhCU0FHTFFBQVFmOEJSZ1JBSUFWQmtBRlBCRUFnQXlBREtBSU1RUUZxTmdJTUlBSkJnUDREYWlFQ1FRZ2hCQXdDQ3lBRElBazJBaEFnQlVFSmRDQUNhaUVDUVFjaEJBd0JDeUFESUFrMkFoQkJDQ0VFSUFWQkNIUWdBbW9oQWdzZ0JFRUJheUVFSUFKQkFYUWhBaUFCUVFGMElnRkJnSUFDU1EwQUN5QUtSU0FLSUJFYkRBRUxJQVVvQWdRTElRVkJFSElpQmlBRlJRMEJHZ3NnQVNBV0lBMG9BZ1JCRkhaQkJIRWdEVUVFYXlJS0tBSUFRUloyUVFGeElBWkJEM1pCRUhFZ0JrRVRka0hBQUhFZ0JrRURka0dxQVhGeWNuSnlJaEpCa0w0QmFpMEFBRUVDZEdvaUN5Z0NBQ0lKS0FJQUlnVnJJUUVDZnlBRklBSkJFSFpMQkVBZ0NTZ0NCQ0VSSUFzZ0NVRUlRUXdnQVNBRlNTSUxHMm9vQWdBMkFnQURRQUpBSUFRTkFDQURLQUlRSWdsQkFXb2hCQ0FKTFFBQklRRWdDUzBBQUVIL0FVWUVRQ0FCUVpBQlR3UkFJQU1nQXlnQ0RFRUJhallDRENBQ1FZRCtBMm9oQWtFSUlRUU1BZ3NnQXlBRU5nSVFJQUZCQ1hRZ0Ftb2hBa0VISVFRTUFRc2dBeUFFTmdJUVFRZ2hCQ0FCUVFoMElBSnFJUUlMSUFSQkFXc2hCQ0FDUVFGMElRSWdCVUVCZENJRlFZQ0FBa2tOQUFzZ0JTRUJJQkVnRVVVZ0N4c01BUXNnQWlBRlFSQjBheUVDSUFGQmdJQUNjVVVFUUNBSktBSUVJUkVnQ3lBSlFReEJDQ0FCSUFWSklnc2JhaWdDQURZQ0FBTkFBa0FnQkEwQUlBTW9BaEFpQ1VFQmFpRUVJQWt0QUFFaEJTQUpMUUFBUWY4QlJnUkFJQVZCa0FGUEJFQWdBeUFES0FJTVFRRnFOZ0lNSUFKQmdQNERhaUVDUVFnaEJBd0NDeUFESUFRMkFoQWdCVUVKZENBQ2FpRUNRUWNoQkF3QkN5QURJQVEyQWhCQkNDRUVJQVZCQ0hRZ0Ftb2hBZ3NnQkVFQmF5RUVJQUpCQVhRaEFpQUJRUUYwSWdGQmdJQUNTUTBBQ3lBUlJTQVJJQXNiREFFTElBa29BZ1FMSVFVZ0V5QU9JQXdnQlNBU1FaREFBV290QUFBaUNVWWJOZ0tBQWlBS0lBb29BZ0JCZ0FKeU5nSUFJQTBnRFNnQ0JFSEFBSEkyQWdRZ0JpQUZJQWx6UVJaMGNrR0FBWElMSVFZZ0FTQVdJQU1vQW13Z0JrRUdka0h2QTNGcUxRQUFRUUowYWlJS0tBSUFJZ2tvQWdBaUJXc2hBUUovSUFVZ0FrRVFka3NFUUNBSktBSUVJUXNnQ2lBSlFRaEJEQ0FCSUFWSklnb2JhaWdDQURZQ0FBTkFBa0FnQkEwQUlBTW9BaEFpQ1VFQmFpRUVJQWt0QUFFaEFTQUpMUUFBUWY4QlJnUkFJQUZCa0FGUEJFQWdBeUFES0FJTVFRRnFOZ0lNSUFKQmdQNERhaUVDUVFnaEJBd0NDeUFESUFRMkFoQWdBVUVKZENBQ2FpRUNRUWNoQkF3QkN5QURJQVEyQWhCQkNDRUVJQUZCQ0hRZ0Ftb2hBZ3NnQkVFQmF5RUVJQUpCQVhRaEFpQUZRUUYwSWdWQmdJQUNTUTBBQ3lBRklRRWdDeUFMUlNBS0d3d0JDeUFDSUFWQkVIUnJJUUlnQVVHQWdBSnhSUVJBSUFrb0FnUWhDeUFLSUFsQkRFRUlJQUVnQlVraUNodHFLQUlBTmdJQUEwQUNRQ0FFRFFBZ0F5Z0NFQ0lKUVFGcUlRUWdDUzBBQVNFRklBa3RBQUJCL3dGR0JFQWdCVUdRQVU4RVFDQURJQU1vQWd4QkFXbzJBZ3dnQWtHQS9nTnFJUUpCQ0NFRURBSUxJQU1nQkRZQ0VDQUZRUWwwSUFKcUlRSkJCeUVFREFFTElBTWdCRFlDRUVFSUlRUWdCVUVJZENBQ2FpRUNDeUFFUVFGcklRUWdBa0VCZENFQ0lBRkJBWFFpQVVHQWdBSkpEUUFMSUF0RklBc2dDaHNNQVFzZ0NTZ0NCQXRGRFFFTElBRWdGaUFOS0FJRVFSZDJRUVJ4SUExQkJHc2lDaWdDQUVFWmRrRUJjU0FHUVJKMlFSQnhJQVpCRm5aQndBQnhJQVpCQm5aQnFnRnhjbkp5Y2lJU1FaQytBV290QUFCQkFuUnFJZ3NvQWdBaUNTZ0NBQ0lGYXlFQkFuOGdCU0FDUVJCMlN3UkFJQWtvQWdRaEVTQUxJQWxCQ0VFTUlBRWdCVWtpQ3h0cUtBSUFOZ0lBQTBBQ1FDQUVEUUFnQXlnQ0VDSUpRUUZxSVFRZ0NTMEFBU0VCSUFrdEFBQkIvd0ZHQkVBZ0FVR1FBVThFUUNBRElBTW9BZ3hCQVdvMkFnd2dBa0dBL2dOcUlRSkJDQ0VFREFJTElBTWdCRFlDRUNBQlFRbDBJQUpxSVFKQkJ5RUVEQUVMSUFNZ0JEWUNFRUVJSVFRZ0FVRUlkQ0FDYWlFQ0N5QUVRUUZySVFRZ0FrRUJkQ0VDSUFWQkFYUWlCVUdBZ0FKSkRRQUxJQVVoQVNBUklCRkZJQXNiREFFTElBSWdCVUVRZEdzaEFpQUJRWUNBQW5GRkJFQWdDU2dDQkNFUklBc2dDVUVNUVFnZ0FTQUZTU0lMRzJvb0FnQTJBZ0FEUUFKQUlBUU5BQ0FES0FJUUlnbEJBV29oQkNBSkxRQUJJUVVnQ1MwQUFFSC9BVVlFUUNBRlFaQUJUd1JBSUFNZ0F5Z0NERUVCYWpZQ0RDQUNRWUQrQTJvaEFrRUlJUVFNQWdzZ0F5QUVOZ0lRSUFWQkNYUWdBbW9oQWtFSElRUU1BUXNnQXlBRU5nSVFRUWdoQkNBRlFRaDBJQUpxSVFJTElBUkJBV3NoQkNBQ1FRRjBJUUlnQVVFQmRDSUJRWUNBQWtrTkFBc2dFVVVnRVNBTEd3d0JDeUFKS0FJRUN5RUZJQk1nRGlBTUlBVWdFa0dRd0FGcUxRQUFJZ2xHR3pZQ2dBUWdDaUFLS0FJQVFZQVFjallDQUNBTklBMG9BZ1JCZ0FSeU5nSUVJQVlnQlNBSmMwRVpkSEpCZ0FoeUlRWUxJQUVnRmlBREtBSnNJQVpCQ1haQjd3TnhhaTBBQUVFQ2RHb2lDU2dDQUNJS0tBSUFJZ1ZySVFFQ2Z5QUZJQUpCRUhaTEJFQWdDaWdDQkNFTElBa2dDa0VJUVF3Z0FTQUZTU0lSRzJvb0FnQTJBZ0FEUUFKQUlBUU5BQ0FES0FJUUlnUkJBV29oQ2lBRUxRQUJJUUVnQkMwQUFFSC9BVVlFUUNBQlFaQUJUd1JBSUFNZ0F5Z0NERUVCYWpZQ0RDQUNRWUQrQTJvaEFrRUlJUVFNQWdzZ0F5QUtOZ0lRSUFGQkNYUWdBbW9oQWtFSElRUU1BUXNnQXlBS05nSVFRUWdoQkNBQlFRaDBJQUpxSVFJTElBUkJBV3NoQkNBQ1FRRjBJUUlnQlVFQmRDSUZRWUNBQWtrTkFBc2dCU0VCSUFzZ0MwVWdFUnNNQVFzZ0FpQUZRUkIwYXlFQ0lBRkJnSUFDY1VVRVFDQUtLQUlFSVFzZ0NTQUtRUXhCQ0NBQklBVkpJaEViYWlnQ0FEWUNBQU5BQWtBZ0JBMEFJQU1vQWhBaUJFRUJhaUVLSUFRdEFBRWhCU0FFTFFBQVFmOEJSZ1JBSUFWQmtBRlBCRUFnQXlBREtBSU1RUUZxTmdJTUlBSkJnUDREYWlFQ1FRZ2hCQXdDQ3lBRElBbzJBaEFnQlVFSmRDQUNhaUVDUVFjaEJBd0JDeUFESUFvMkFoQkJDQ0VFSUFWQkNIUWdBbW9oQWdzZ0JFRUJheUVFSUFKQkFYUWhBaUFCUVFGMElnRkJnSUFDU1EwQUN5QUxSU0FMSUJFYkRBRUxJQW9vQWdRTFJRMERDeUFCSUJZZ0RTZ0NCRUVhZGtFRWNTQU5RUVJySWhFb0FnQkJISFpCQVhFZ0JrRVZka0VRY1NBR1FSbDJRY0FBY1NBR1FRbDJRYW9CY1hKeWNuSWlDMEdRdmdGcUxRQUFRUUowYWlJSktBSUFJZ29vQWdBaUJXc01BUXNDUUNBR1FaQ0FnQUZ4RFFBZ0FTQVdJQU1vQW13Z0JrSHZBM0ZxTFFBQVFRSjBhaUlKS0FJQUlnb29BZ0FpQldzaEFRSi9JQVVnQWtFUWRrc0VRQ0FLS0FJRUlRc2dDU0FLUVFoQkRDQUJJQVZKSWhFYmFpZ0NBRFlDQUFOQUFrQWdCQTBBSUFNb0FoQWlCRUVCYWlFS0lBUXRBQUVoQVNBRUxRQUFRZjhCUmdSQUlBRkJrQUZQQkVBZ0F5QURLQUlNUVFGcU5nSU1JQUpCZ1A0RGFpRUNRUWdoQkF3Q0N5QURJQW8yQWhBZ0FVRUpkQ0FDYWlFQ1FRY2hCQXdCQ3lBRElBbzJBaEJCQ0NFRUlBRkJDSFFnQW1vaEFnc2dCRUVCYXlFRUlBSkJBWFFoQWlBRlFRRjBJZ1ZCZ0lBQ1NRMEFDeUFGSVFFZ0N5QUxSU0FSR3d3QkN5QUNJQVZCRUhScklRSWdBVUdBZ0FKeFJRUkFJQW9vQWdRaEN5QUpJQXBCREVFSUlBRWdCVWtpRVJ0cUtBSUFOZ0lBQTBBQ1FDQUVEUUFnQXlnQ0VDSUVRUUZxSVFvZ0JDMEFBU0VGSUFRdEFBQkIvd0ZHQkVBZ0JVR1FBVThFUUNBRElBTW9BZ3hCQVdvMkFnd2dBa0dBL2dOcUlRSkJDQ0VFREFJTElBTWdDallDRUNBRlFRbDBJQUpxSVFKQkJ5RUVEQUVMSUFNZ0NqWUNFRUVJSVFRZ0JVRUlkQ0FDYWlFQ0N5QUVRUUZySVFRZ0FrRUJkQ0VDSUFGQkFYUWlBVUdBZ0FKSkRRQUxJQXRGSUFzZ0VSc01BUXNnQ2lnQ0JBdEZEUUFnQVNBV0lBMG9BZ1JCRVhaQkJIRWdEVUVFYXlJTEtBSUFRUk4yUVFGeElBWkJEblpCRUhFZ0JrRVFka0hBQUhFZ0JrR3FBWEZ5Y25KeUloSkJrTDRCYWkwQUFFRUNkR29pQ1NnQ0FDSUtLQUlBSWdWcklRRUNmeUFGSUFKQkVIWkxCRUFnQ2lnQ0JDRVJJQWtnQ2tFSVFRd2dBU0FGU1NJUEcyb29BZ0EyQWdBRFFBSkFJQVFOQUNBREtBSVFJZ1JCQVdvaENpQUVMUUFCSVFFZ0JDMEFBRUgvQVVZRVFDQUJRWkFCVHdSQUlBTWdBeWdDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFRTUFnc2dBeUFLTmdJUUlBRkJDWFFnQW1vaEFrRUhJUVFNQVFzZ0F5QUtOZ0lRUVFnaEJDQUJRUWgwSUFKcUlRSUxJQVJCQVdzaEJDQUNRUUYwSVFJZ0JVRUJkQ0lGUVlDQUFra05BQXNnQlNFQklCRWdFVVVnRHhzTUFRc2dBaUFGUVJCMGF5RUNJQUZCZ0lBQ2NVVUVRQ0FLS0FJRUlSRWdDU0FLUVF4QkNDQUJJQVZKSWc4YmFpZ0NBRFlDQUFOQUFrQWdCQTBBSUFNb0FoQWlCRUVCYWlFS0lBUXRBQUVoQlNBRUxRQUFRZjhCUmdSQUlBVkJrQUZQQkVBZ0F5QURLQUlNUVFGcU5nSU1JQUpCZ1A0RGFpRUNRUWdoQkF3Q0N5QURJQW8yQWhBZ0JVRUpkQ0FDYWlFQ1FRY2hCQXdCQ3lBRElBbzJBaEJCQ0NFRUlBVkJDSFFnQW1vaEFnc2dCRUVCYXlFRUlBSkJBWFFoQWlBQlFRRjBJZ0ZCZ0lBQ1NRMEFDeUFSUlNBUklBOGJEQUVMSUFvb0FnUUxJUVVnRXlBT0lBd2dCU0FTUVpEQUFXb3RBQUFpQ2tZYk5nSUFJQXNnQ3lnQ0FFRWdjallDQUNBTklBMG9BZ1JCQ0hJMkFnUWdCaUFGSUFwelFSTjBja0VRY2lFR0N3SkFJQVpCZ0lHQUNIRU5BQ0FCSUJZZ0F5Z0NiQ0FHUVFOMkloRkI3d054YWkwQUFFRUNkR29pQ1NnQ0FDSUtLQUlBSWdWcklRRUNmeUFGSUFKQkVIWkxCRUFnQ2lnQ0JDRUxJQWtnQ2tFSVFRd2dBU0FGU1NJU0cyb29BZ0EyQWdBRFFBSkFJQVFOQUNBREtBSVFJZ1JCQVdvaENpQUVMUUFCSVFFZ0JDMEFBRUgvQVVZRVFDQUJRWkFCVHdSQUlBTWdBeWdDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFRTUFnc2dBeUFLTmdJUUlBRkJDWFFnQW1vaEFrRUhJUVFNQVFzZ0F5QUtOZ0lRUVFnaEJDQUJRUWgwSUFKcUlRSUxJQVJCQVdzaEJDQUNRUUYwSVFJZ0JVRUJkQ0lGUVlDQUFra05BQXNnQlNFQklBc2dDMFVnRWhzTUFRc2dBaUFGUVJCMGF5RUNJQUZCZ0lBQ2NVVUVRQ0FLS0FJRUlRc2dDU0FLUVF4QkNDQUJJQVZKSWhJYmFpZ0NBRFlDQUFOQUFrQWdCQTBBSUFNb0FoQWlCRUVCYWlFS0lBUXRBQUVoQlNBRUxRQUFRZjhCUmdSQUlBVkJrQUZQQkVBZ0F5QURLQUlNUVFGcU5nSU1JQUpCZ1A0RGFpRUNRUWdoQkF3Q0N5QURJQW8yQWhBZ0JVRUpkQ0FDYWlFQ1FRY2hCQXdCQ3lBRElBbzJBaEJCQ0NFRUlBVkJDSFFnQW1vaEFnc2dCRUVCYXlFRUlBSkJBWFFoQWlBQlFRRjBJZ0ZCZ0lBQ1NRMEFDeUFMUlNBTElCSWJEQUVMSUFvb0FnUUxSUTBBSUFFZ0ZpQU5LQUlFUVJSMlFRUnhJQTFCQkdzaUN5Z0NBRUVXZGtFQmNTQUdRUTkyUVJCeElBWkJFM1pCd0FCeElCRkJxZ0Z4Y25KeWNpSVNRWkMrQVdvdEFBQkJBblJxSWdrb0FnQWlDaWdDQUNJRmF5RUJBbjhnQlNBQ1FSQjJTd1JBSUFvb0FnUWhFU0FKSUFwQkNFRU1JQUVnQlVraUR4dHFLQUlBTmdJQUEwQUNRQ0FFRFFBZ0F5Z0NFQ0lFUVFGcUlRb2dCQzBBQVNFQklBUXRBQUJCL3dGR0JFQWdBVUdRQVU4RVFDQURJQU1vQWd4QkFXbzJBZ3dnQWtHQS9nTnFJUUpCQ0NFRURBSUxJQU1nQ2pZQ0VDQUJRUWwwSUFKcUlRSkJCeUVFREFFTElBTWdDallDRUVFSUlRUWdBVUVJZENBQ2FpRUNDeUFFUVFGcklRUWdBa0VCZENFQ0lBVkJBWFFpQlVHQWdBSkpEUUFMSUFVaEFTQVJJQkZGSUE4YkRBRUxJQUlnQlVFUWRHc2hBaUFCUVlDQUFuRkZCRUFnQ2lnQ0JDRVJJQWtnQ2tFTVFRZ2dBU0FGU1NJUEcyb29BZ0EyQWdBRFFBSkFJQVFOQUNBREtBSVFJZ1JCQVdvaENpQUVMUUFCSVFVZ0JDMEFBRUgvQVVZRVFDQUZRWkFCVHdSQUlBTWdBeWdDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFRTUFnc2dBeUFLTmdJUUlBVkJDWFFnQW1vaEFrRUhJUVFNQVFzZ0F5QUtOZ0lRUVFnaEJDQUZRUWgwSUFKcUlRSUxJQVJCQVdzaEJDQUNRUUYwSVFJZ0FVRUJkQ0lCUVlDQUFra05BQXNnRVVVZ0VTQVBHd3dCQ3lBS0tBSUVDeUVGSUJNZ0RpQU1JQVVnRWtHUXdBRnFMUUFBSWdwR0d6WUNnQUlnQ3lBTEtBSUFRWUFDY2pZQ0FDQU5JQTBvQWdSQndBQnlOZ0lFSUFZZ0JTQUtjMEVXZEhKQmdBRnlJUVlMQWtBZ0JrR0FpSURBQUhFTkFDQUJJQllnQXlnQ2JDQUdRUVoySWhGQjd3TnhhaTBBQUVFQ2RHb2lDU2dDQUNJS0tBSUFJZ1ZySVFFQ2Z5QUZJQUpCRUhaTEJFQWdDaWdDQkNFTElBa2dDa0VJUVF3Z0FTQUZTU0lTRzJvb0FnQTJBZ0FEUUFKQUlBUU5BQ0FES0FJUUlnUkJBV29oQ2lBRUxRQUJJUUVnQkMwQUFFSC9BVVlFUUNBQlFaQUJUd1JBSUFNZ0F5Z0NERUVCYWpZQ0RDQUNRWUQrQTJvaEFrRUlJUVFNQWdzZ0F5QUtOZ0lRSUFGQkNYUWdBbW9oQWtFSElRUU1BUXNnQXlBS05nSVFRUWdoQkNBQlFRaDBJQUpxSVFJTElBUkJBV3NoQkNBQ1FRRjBJUUlnQlVFQmRDSUZRWUNBQWtrTkFBc2dCU0VCSUFzZ0MwVWdFaHNNQVFzZ0FpQUZRUkIwYXlFQ0lBRkJnSUFDY1VVRVFDQUtLQUlFSVFzZ0NTQUtRUXhCQ0NBQklBVkpJaEliYWlnQ0FEWUNBQU5BQWtBZ0JBMEFJQU1vQWhBaUJFRUJhaUVLSUFRdEFBRWhCU0FFTFFBQVFmOEJSZ1JBSUFWQmtBRlBCRUFnQXlBREtBSU1RUUZxTmdJTUlBSkJnUDREYWlFQ1FRZ2hCQXdDQ3lBRElBbzJBaEFnQlVFSmRDQUNhaUVDUVFjaEJBd0JDeUFESUFvMkFoQkJDQ0VFSUFWQkNIUWdBbW9oQWdzZ0JFRUJheUVFSUFKQkFYUWhBaUFCUVFGMElnRkJnSUFDU1EwQUN5QUxSU0FMSUJJYkRBRUxJQW9vQWdRTFJRMEFJQUVnRmlBTktBSUVRUmQyUVFSeElBMUJCR3NpQ3lnQ0FFRVpka0VCY1NBR1FSSjJRUkJ4SUFaQkZuWkJ3QUJ4SUJGQnFnRnhjbkp5Y2lJU1FaQytBV290QUFCQkFuUnFJZ2tvQWdBaUNpZ0NBQ0lGYXlFQkFuOGdCU0FDUVJCMlN3UkFJQW9vQWdRaEVTQUpJQXBCQ0VFTUlBRWdCVWtpRHh0cUtBSUFOZ0lBQTBBQ1FDQUVEUUFnQXlnQ0VDSUVRUUZxSVFvZ0JDMEFBU0VCSUFRdEFBQkIvd0ZHQkVBZ0FVR1FBVThFUUNBRElBTW9BZ3hCQVdvMkFnd2dBa0dBL2dOcUlRSkJDQ0VFREFJTElBTWdDallDRUNBQlFRbDBJQUpxSVFKQkJ5RUVEQUVMSUFNZ0NqWUNFRUVJSVFRZ0FVRUlkQ0FDYWlFQ0N5QUVRUUZySVFRZ0FrRUJkQ0VDSUFWQkFYUWlCVUdBZ0FKSkRRQUxJQVVoQVNBUklCRkZJQThiREFFTElBSWdCVUVRZEdzaEFpQUJRWUNBQW5GRkJFQWdDaWdDQkNFUklBa2dDa0VNUVFnZ0FTQUZTU0lQRzJvb0FnQTJBZ0FEUUFKQUlBUU5BQ0FES0FJUUlnUkJBV29oQ2lBRUxRQUJJUVVnQkMwQUFFSC9BVVlFUUNBRlFaQUJUd1JBSUFNZ0F5Z0NERUVCYWpZQ0RDQUNRWUQrQTJvaEFrRUlJUVFNQWdzZ0F5QUtOZ0lRSUFWQkNYUWdBbW9oQWtFSElRUU1BUXNnQXlBS05nSVFRUWdoQkNBRlFRaDBJQUpxSVFJTElBUkJBV3NoQkNBQ1FRRjBJUUlnQVVFQmRDSUJRWUNBQWtrTkFBc2dFVVVnRVNBUEd3d0JDeUFLS0FJRUN5RUZJQk1nRGlBTUlBVWdFa0dRd0FGcUxRQUFJZ3BHR3pZQ2dBUWdDeUFMS0FJQVFZQVFjallDQUNBTklBMG9BZ1JCZ0FSeU5nSUVJQVlnQlNBS2MwRVpkSEpCZ0FoeUlRWUxJQVpCZ01DQWdBUnhEUUVnQVNBV0lBTW9BbXdnQmtFSmRpSVNRZThEY1dvdEFBQkJBblJxSWdrb0FnQWlDaWdDQUNJRmF5RUJBbjhnQlNBQ1FSQjJTd1JBSUFvb0FnUWhDeUFKSUFwQkNFRU1JQUVnQlVraUVSdHFLQUlBTmdJQUEwQUNRQ0FFRFFBZ0F5Z0NFQ0lFUVFGcUlRb2dCQzBBQVNFQklBUXRBQUJCL3dGR0JFQWdBVUdRQVU4RVFDQURJQU1vQWd4QkFXbzJBZ3dnQWtHQS9nTnFJUUpCQ0NFRURBSUxJQU1nQ2pZQ0VDQUJRUWwwSUFKcUlRSkJCeUVFREFFTElBTWdDallDRUVFSUlRUWdBVUVJZENBQ2FpRUNDeUFFUVFGcklRUWdBa0VCZENFQ0lBVkJBWFFpQlVHQWdBSkpEUUFMSUFVaEFTQUxJQXRGSUJFYkRBRUxJQUlnQlVFUWRHc2hBaUFCUVlDQUFuRkZCRUFnQ2lnQ0JDRUxJQWtnQ2tFTVFRZ2dBU0FGU1NJUkcyb29BZ0EyQWdBRFFBSkFJQVFOQUNBREtBSVFJZ1JCQVdvaENpQUVMUUFCSVFVZ0JDMEFBRUgvQVVZRVFDQUZRWkFCVHdSQUlBTWdBeWdDREVFQmFqWUNEQ0FDUVlEK0Eyb2hBa0VJSVFRTUFnc2dBeUFLTmdJUUlBVkJDWFFnQW1vaEFrRUhJUVFNQVFzZ0F5QUtOZ0lRUVFnaEJDQUZRUWgwSUFKcUlRSUxJQVJCQVdzaEJDQUNRUUYwSVFJZ0FVRUJkQ0lCUVlDQUFra05BQXNnQzBVZ0N5QVJHd3dCQ3lBS0tBSUVDMFVOQVNBQklCWWdEU2dDQkVFYWRrRUVjU0FOUVFSckloRW9BZ0JCSEhaQkFYRWdCa0VWZGtFUWNTQUdRUmwyUWNBQWNTQVNRYW9CY1hKeWNuSWlDMEdRdmdGcUxRQUFRUUowYWlJSktBSUFJZ29vQWdBaUJXc0xJUUVDZnlBRklBSkJFSFpMQkVBZ0NpZ0NCQ0VTSUFrZ0NrRUlRUXdnQVNBRlNTSVBHMm9vQWdBMkFnQURRQUpBSUFRTkFDQURLQUlRSWdSQkFXb2hDaUFFTFFBQklRRWdCQzBBQUVIL0FVWUVRQ0FCUVpBQlR3UkFJQU1nQXlnQ0RFRUJhallDRENBQ1FZRCtBMm9oQWtFSUlRUU1BZ3NnQXlBS05nSVFJQUZCQ1hRZ0Ftb2hBa0VISVFRTUFRc2dBeUFLTmdJUVFRZ2hCQ0FCUVFoMElBSnFJUUlMSUFSQkFXc2hCQ0FDUVFGMElRSWdCVUVCZENJRlFZQ0FBa2tOQUFzZ0JTRUJJQklnRWtVZ0R4c01BUXNnQWlBRlFSQjBheUVDSUFGQmdJQUNjVVVFUUNBS0tBSUVJUklnQ1NBS1FReEJDQ0FCSUFWSklnOGJhaWdDQURZQ0FBTkFBa0FnQkEwQUlBTW9BaEFpQkVFQmFpRUtJQVF0QUFFaEJTQUVMUUFBUWY4QlJnUkFJQVZCa0FGUEJFQWdBeUFES0FJTVFRRnFOZ0lNSUFKQmdQNERhaUVDUVFnaEJBd0NDeUFESUFvMkFoQWdCVUVKZENBQ2FpRUNRUWNoQkF3QkN5QURJQW8yQWhCQkNDRUVJQVZCQ0hRZ0Ftb2hBZ3NnQkVFQmF5RUVJQUpCQVhRaEFpQUJRUUYwSWdGQmdJQUNTUTBBQ3lBU1JTQVNJQThiREFFTElBb29BZ1FMSVFVZ0V5QU9JQXdnQlNBTFFaREFBV290QUFBaUNrWWJOZ0tBQmlBUklCRW9BZ0JCZ0lBQmNqWUNBQ0FOSUEwb0FnUkJnQ0J5TmdJRUlBVWdDbk1pQlVFY2RDQUdjaUFOSUEwb0FvUUNRUVJ5TmdLRUFpQU5JQTBvQW93Q1FRRnlOZ0tNQWlBTklBMG9Bb2dDSUFWQkVuUnlRUUp5TmdLSUFrR0F3QUJ5SVFZTElBMGdCa0gvLy8rMmUzRTJBZ0FMSUExQkJHb2hCaUFUUVFScUlRVWdGVUVCYWlJVlFjQUFSdzBBQ3lBTlFReHFJUVlnRTBHRUJtb2hCU0FVUVR4SklCUkJCR29oRkEwQUN3c2dBeUFFTmdJSUlBTWdBVFlDQkNBRElBSTJBZ0FnQXlBSk5nSm9Dd0pBSUJkQklIRkZEUUFnQXlBRFFlUUFhallDYUNBRElBTW9BZ1FnQXlnQ1pDSUdLQUlBSWdGcklnSTJBZ1FDUUNBQklBTW9BZ0FpQkVFUWRrc0VRQ0FESUFFMkFnUWdBeUFHUVFoQkRDQUJJQUpMRzJvb0FnQWlCallDWkNBREtBSUlJUUlEUUFKQUlBSU5BQ0FES0FJUUlnbEJBV29oQWlBSkxRQUJJUVVnQ1MwQUFFSC9BVVlFUUNBRlFaQUJUd1JBSUFNZ0F5Z0NERUVCYWpZQ0RDQUVRWUQrQTJvaEJFRUlJUUlNQWdzZ0F5QUNOZ0lRSUFWQkNYUWdCR29oQkVFSElRSU1BUXNnQXlBQ05nSVFRUWdoQWlBRlFRaDBJQVJxSVFRTElBTWdBa0VCYXlJQ05nSUlJQU1nQkVFQmRDSUVOZ0lBSUFNZ0FVRUJkQ0lCTmdJRUlBRkJnSUFDU1EwQUN5QUJJUUlNQVFzZ0F5QUVJQUZCRUhScklnUTJBZ0FnQWtHQWdBSnhEUUFnQXlBR1FReEJDQ0FCSUFKTEcyb29BZ0FpQmpZQ1pDQURLQUlJSVFFRFFBSkFJQUVOQUNBREtBSVFJZ0ZCQVdvaENTQUJMUUFCSVFVZ0FTMEFBRUgvQVVZRVFDQUZRWkFCVHdSQUlBTWdBeWdDREVFQmFqWUNEQ0FFUVlEK0Eyb2hCRUVJSVFFTUFnc2dBeUFKTmdJUUlBVkJDWFFnQkdvaEJFRUhJUUVNQVFzZ0F5QUpOZ0lRUVFnaEFTQUZRUWgwSUFScUlRUUxJQU1nQVVFQmF5SUJOZ0lJSUFNZ0JFRUJkQ0lFTmdJQUlBTWdBa0VCZENJQ05nSUVJQUpCZ0lBQ1NRMEFDd3NnQXlBQ0lBWW9BZ0FpQVdzaUFqWUNCQUpBSUFFZ0JFRVFka3NFUUNBRElBRTJBZ1FnQXlBR1FRaEJEQ0FCSUFKTEcyb29BZ0FpQmpZQ1pDQURLQUlJSVFJRFFBSkFJQUlOQUNBREtBSVFJZ2xCQVdvaEFpQUpMUUFCSVFVZ0NTMEFBRUgvQVVZRVFDQUZRWkFCVHdSQUlBTWdBeWdDREVFQmFqWUNEQ0FFUVlEK0Eyb2hCRUVJSVFJTUFnc2dBeUFDTmdJUUlBVkJDWFFnQkdvaEJFRUhJUUlNQVFzZ0F5QUNOZ0lRUVFnaEFpQUZRUWgwSUFScUlRUUxJQU1nQWtFQmF5SUNOZ0lJSUFNZ0JFRUJkQ0lFTmdJQUlBTWdBVUVCZENJQk5nSUVJQUZCZ0lBQ1NRMEFDeUFCSVFJTUFRc2dBeUFFSUFGQkVIUnJJZ1EyQWdBZ0FrR0FnQUp4RFFBZ0F5QUdRUXhCQ0NBQklBSkxHMm9vQWdBaUJqWUNaQ0FES0FJSUlRRURRQUpBSUFFTkFDQURLQUlRSWdGQkFXb2hDU0FCTFFBQklRVWdBUzBBQUVIL0FVWUVRQ0FGUVpBQlR3UkFJQU1nQXlnQ0RFRUJhallDRENBRVFZRCtBMm9oQkVFSUlRRU1BZ3NnQXlBSk5nSVFJQVZCQ1hRZ0JHb2hCRUVISVFFTUFRc2dBeUFKTmdJUVFRZ2hBU0FGUVFoMElBUnFJUVFMSUFNZ0FVRUJheUlCTmdJSUlBTWdCRUVCZENJRU5nSUFJQU1nQWtFQmRDSUNOZ0lFSUFKQmdJQUNTUTBBQ3dzZ0F5QUNJQVlvQWdBaUFXc2lBallDQkFKQUlBRWdCRUVRZGtzRVFDQURJQUUyQWdRZ0F5QUdRUWhCRENBQklBSkxHMm9vQWdBaUJqWUNaQ0FES0FJSUlRSURRQUpBSUFJTkFDQURLQUlRSWdsQkFXb2hBaUFKTFFBQklRVWdDUzBBQUVIL0FVWUVRQ0FGUVpBQlR3UkFJQU1nQXlnQ0RFRUJhallDRENBRVFZRCtBMm9oQkVFSUlRSU1BZ3NnQXlBQ05nSVFJQVZCQ1hRZ0JHb2hCRUVISVFJTUFRc2dBeUFDTmdJUVFRZ2hBaUFGUVFoMElBUnFJUVFMSUFNZ0FrRUJheUlDTmdJSUlBTWdCRUVCZENJRU5nSUFJQU1nQVVFQmRDSUJOZ0lFSUFGQmdJQUNTUTBBQ3lBQklRSU1BUXNnQXlBRUlBRkJFSFJySWdRMkFnQWdBa0dBZ0FKeERRQWdBeUFHUVF4QkNDQUJJQUpMRzJvb0FnQWlCallDWkNBREtBSUlJUUVEUUFKQUlBRU5BQ0FES0FJUUlnRkJBV29oQ1NBQkxRQUJJUVVnQVMwQUFFSC9BVVlFUUNBRlFaQUJUd1JBSUFNZ0F5Z0NERUVCYWpZQ0RDQUVRWUQrQTJvaEJFRUlJUUVNQWdzZ0F5QUpOZ0lRSUFWQkNYUWdCR29oQkVFSElRRU1BUXNnQXlBSk5nSVFRUWdoQVNBRlFRaDBJQVJxSVFRTElBTWdBVUVCYXlJQk5nSUlJQU1nQkVFQmRDSUVOZ0lBSUFNZ0FrRUJkQ0lDTmdJRUlBSkJnSUFDU1EwQUN3c2dBeUFDSUFZb0FnQWlBV3NpQWpZQ0JDQUJJQVJCRUhaTEJFQWdBeUFCTmdJRUlBTWdCa0VJUVF3Z0FTQUNTeHRxS0FJQU5nSmtJQU1vQWdnaEFnTkFBa0FnQWcwQUlBTW9BaEFpQmtFQmFpRUpJQVl0QUFFaEJTQUdMUUFBUWY4QlJnUkFJQVZCa0FGUEJFQWdBeUFES0FJTVFRRnFOZ0lNSUFSQmdQNERhaUVFUVFnaEFnd0NDeUFESUFrMkFoQWdCVUVKZENBRWFpRUVRUWNoQWd3QkN5QURJQWsyQWhCQkNDRUNJQVZCQ0hRZ0JHb2hCQXNnQXlBQ1FRRnJJZ0kyQWdnZ0F5QUVRUUYwSWdRMkFnQWdBeUFCUVFGMElnRTJBZ1FnQVVHQWdBSkpEUUFMREFFTElBTWdCQ0FCUVJCMGF5SUZOZ0lBSUFKQmdJQUNjUTBBSUFNZ0JrRU1RUWdnQVNBQ1N4dHFLQUlBTmdKa0lBTW9BZ2doQkFOQUFrQWdCQTBBSUFNb0FoQWlCa0VCYWlFSklBWXRBQUVoQVNBR0xRQUFRZjhCUmdSQUlBRkJrQUZQQkVBZ0F5QURLQUlNUVFGcU5nSU1JQVZCZ1A0RGFpRUZRUWdoQkF3Q0N5QURJQWsyQWhBZ0FVRUpkQ0FGYWlFRlFRY2hCQXdCQ3lBRElBazJBaEJCQ0NFRUlBRkJDSFFnQldvaEJRc2dBeUFFUVFGcklnUTJBZ2dnQXlBRlFRRjBJZ1UyQWdBZ0F5QUNRUUYwSWdJMkFnUWdBa0dBZ0FKSkRRQUxDd3NnSjBVTkFDQURFR01nQTBId3JRRTJBbVFnQTBHUW93RTJBbUFnQTBHd293RTJBaHdMUVFBZ0lVRUJhaUlCSUFGQkEwWWlBUnNoSVNBYklBRnJJUnNnS1VFQmFpSXBJQ0FvQWdoUERRRWdHMEVBU2cwQUN3c2dIaUFxYWlFZUlBTW9BaGdnQXk4QmNEc0FBQ0FvUVFGcUlpZ2dHaWdDTEVrTkFBc0xBa0FnSzBVTkFBSkFJQU1vQWhnaUFTQURLQUlRSWdWQkFtcExCRUFnSWtVTkFTQW1JQUVnQXlnQ0ZDSUdhellDT0NBbUlBVWdCbXMyQWpRZ0ppQUJJQVZyUVFKck5nSXdJQjFCQWtIZTlnQWdKa0V3YWhBVERBSUxJQU1vQWd3aUFVRURTUTBCSUNJRVFDQW1JQUUyQWxBZ0hVRUNRWjQzSUNaQjBBQnFFQk1NQWdzZ0ppQUJOZ0pBSUIxQkFrR2VOeUFtUVVCckVCTU1BUXNnSmlBQklBTW9BaFFpQm1zMkFpZ2dKaUFGSUFack5nSWtJQ1lnQVNBRmEwRUNhellDSUNBZFFRSkIzdllBSUNaQklHb1FFd3NnR2lnQ1BFVU5BQ0FESUN3MkFuUUxJREFvQWdRaEFTQWFLQUlNSUJvb0FnZ2dNQ2dDQUdzaEV5QXdLQUlRSWdaQkFYRUVRQ0F5S0FJY0lEaEJtQUZzYWlJSlFaQUJheWdDQUNBVGFpQUpRWmdCYXlnQ0FHc2hFd3NnQVdzaEJTQUdRUUp4QkVBZ01pZ0NIQ0E0UVpnQmJHb2lBVUdNQVdzb0FnQWdCV29nQVVHVUFXc29BZ0JySVFVTElCb29BandpQmlFQ0lBWkZCRUFnQXlnQ2RDRUNDeUFES0FLQUFTRU5JQU1vQW53aEJBSkFJQzhvQXFnR0lnbEZEUUFnRFVVZ0JFVnlJUUVnQ1VFZVRBUkFJQUVOQVVFQUlRZ0RRQ0FFSUFoc0lRTkJBQ0VCQTBBZ0FpQUJJQU5xUVFKMGFpSVhLQUlBSWdjZ0IwRWZkU0lLY3lBS2F5SUtJQWwyQkVBZ0YwRUFJQW9nTHlnQ3FBWjJJaGRySUJjZ0IwRUFTQnMyQWdBTElBRkJBV29pQVNBRVJ3MEFDeUFJUVFGcUlnZ2dEVWNOQUFzTUFRc2dBUTBBSUFKQkFDQUVJQTFzUVFKMEVCa2FDeUFHQkVBZ0JDQU5iQ0VHSUM4b0FoUkJBVVlFUUNBR1JRMEZRUUFoQVNBR1FRUlBCRUFnQmtGOGNTRUJRUUFoQXdOQUlBSWdBMEVDZEdvaUJTQUYvUUFDQUNKSC9Sc0FRUUp0L1JFZ1IvMGJBVUVDYmYwY0FTQkgvUnNDUVFKdC9Sd0NJRWY5R3dOQkFtMzlIQVA5Q3dJQUlBTkJCR29pQXlBQlJ3MEFDeUFCSUFaR0RRWUxBMEFnQWlBQlFRSjBhaUlGSUFVb0FnQkJBbTAyQWdBZ0FVRUJhaUlCSUFaSERRQUxEQVVMSUFaRkRRUWdNQ29DSUVNQUFBQS9sQ0ZOUVFBaEF3SkFJQVpCQkVrRVFDQUNJUUVNQVFzZ0FpQUdRWHh4SWdOQkFuUnFJUUVnVGYwVElVZEJBQ0VGQTBBZ0FpQUZRUUowYWlJSklFY2dDZjBBQWdEOStnSDk1Z0g5Q3dJQUlBVkJCR29pQlNBRFJ3MEFDeUFESUFaR0RRVUxBMEFnQVNCTklBRW9BZ0N5bERnQ0FDQUJRUVJxSVFFZ0EwRUJhaUlESUFaSERRQUxEQVFMSURjZ05tc2hGeUF2S0FJVVFRRkhEUUlnRFVVTkF5QXlLQUlrSWdZZ0JTQVhiQ0lGUVFKMGFpQVRRUUowYWlFSElBUkJmSEVpRzBFQmF5SUJRUVJ4SVJZZ055QUVJRFpxYTBFQ2RDRVVJQUZCQW5aQkFXcEIvdi8vL3dkeElSb2dCU0FUYWtFQ2RDQUdhaUFDYXlFZFFRQWhFeUFCUVFOSElRNERRRUVBSVFFQ1FDQWJSUTBBSUFRZ0Uyd2hCU0FISUJNZ0YyeEJBblJxSVFaQkFDRUpJQTRFUUFOQUlBWWdBVUVDZEdvZ0FpQUJJQVZxUVFKMGF2MEFBZ0FpUi8wYkFFRUNiZjBSSUVmOUd3RkJBbTM5SEFFZ1IvMGJBa0VDYmYwY0FpQkgvUnNEUVFKdC9Sd0QvUXNDQUNBR0lBRkJCSElpQ0VFQ2RHb2dBaUFGSUFocVFRSjBhdjBBQWdBaVIvMGJBRUVDYmYwUklFZjlHd0ZCQW0zOUhBRWdSLzBiQWtFQ2JmMGNBaUJIL1JzRFFRSnQvUndEL1FzQ0FDQUJRUWhxSVFFZ0NVRUNhaUlKSUJwSERRQUxDeUFXRFFBZ0JpQUJRUUowYWlBQ0lBRWdCV3BCQW5ScS9RQUNBQ0pIL1JzQVFRSnQvUkVnUi8wYkFVRUNiZjBjQVNCSC9Sc0NRUUp0L1J3Q0lFZjlHd05CQW0zOUhBUDlDd0lBSUFGQkJHb2hBUXNDUUNBQklBUlBEUUFnQkNBVGJDRUZJQWNnRXlBWGJFRUNkR29oQ1FKQUFrQWdCQ0FCYXlJSVFRUlBCRUFnSFNBVElCUnNha0VQU3cwQkN5QUJJUVlNQVFzZ0FTQUZhaUVpSUFFZ0NFRjhjU0lLYWlFR1FRQWhBd05BSUFrZ0FTQURha0VDZEdvZ0FpQURJQ0pxUVFKMGF2MEFBZ0FpUi8wYkFFRUNiZjBSSUVmOUd3RkJBbTM5SEFFZ1IvMGJBa0VDYmYwY0FpQkgvUnNEUVFKdC9Sd0QvUXNDQUNBRFFRUnFJZ01nQ2tjTkFBc2dDQ0FLUmcwQkN5QUdRUUZxSVFFZ0JDQUdhMEVCY1FSQUlBa2dCa0VDZEdvZ0FpQUZJQVpxUVFKMGFpZ0NBRUVDYlRZQ0FDQUJJUVlMSUFFZ0JFWU5BQ0FGUVFGcUlRRURRQ0FKSUFaQkFuUnFJZ2dnQWlBRklBWnFRUUowYWlnQ0FFRUNiVFlDQUNBSUlBSWdBU0FHYWtFQ2RHb29BZ0JCQW0wMkFnUWdCa0VDYWlJR0lBUkhEUUFMQ3lBVFFRRnFJaE1nRFVjTkFBc01Bd3NnSmlBYk5nSUFJQjFCQWtIbnd3QWdKaEFUQ3lBRktBSUFRUUEyQWdBTUFRc2dEVVVOQUNBRVJRMEFJRElvQWlRZ0JTQVhiRUVDZEdvZ0UwRUNkR29oQ1NBRVFYeHhJZ1ZCQW5RaEJpQXdLZ0lnUXdBQUFEK1VJazM5RXlGSFFRQWhDQ0FFUVFSSklSTURRQUpBQWtBZ0V3UkFJQUloQnlBSklRRkJBQ0VEREFFTElBWWdDV29oQVNBQ0lBWnFJUWRCQUNFREEwQWdDU0FEUVFKMElncHFJRWNnQWlBS2F2MEFBZ0Q5K2dIOTVnSDlDd0lBSUFOQkJHb2lBeUFGUncwQUN5QUhJUUlnQlNJRElBUkdEUUVMSUFjaEFnTkFJQUVnVFNBQ0tBSUFzcFE0QWdBZ0FVRUVhaUVCSUFKQkJHb2hBaUFEUVFGcUlnTWdCRWNOQUFzTElBa2dGMEVDZEdvaENTQUlRUUZxSWdnZ0RVY05BQXNMSUFBUUZDQW1RZUFBYWlRQUM5WUVBUWwvSUFBb0FpeEJDRThFUUNBQUtBSW9JUVZCQ0NFS0EwQWdBQ2dDREVFRmRDRUlJQUFvQWdBaEJDQUFLQUlrSVFNQ1FDQUFLQUlVSWdZZ0FDZ0NFQ0lCVFEwQUlBUWdDR29oQnlBQlFRRnFJUUlnQmlBQmEwRUJjUVJBSUFjZ0FVRUdkR29pQ1NBRklBRWdBMnhCQW5ScUlnSDlBQUlBL1FzQ0FDQUpJQUg5QUFJUS9Rc0NFQ0FDSVFFTElBSWdCa1lOQUFOQUlBY2dBVUVHZEdvaUFpQUZJQUVnQTJ4QkFuUnFJZ245QUFJQS9Rc0NBQ0FDSUFuOUFBSVEvUXNDRUNBSElBRkJBV29pQWtFR2RHb2lDU0FGSUFJZ0EyeEJBblJxSWdMOUFBSVEvUXNDRUNBSklBTDlBQUlBL1FzQ0FDQUJRUUpxSWdFZ0JrY05BQXNMQWtBZ0FDZ0NIQ0lHSUFBb0FoZ2lBVTBOQUNBRUlBaHJRU0JxSVFjZ0JTQUFLQUlJSUFOc1FRSjBhaUVJSUFGQkFXb2hBaUFHSUFGclFRRnhCRUFnQnlBQlFRWjBhaUlFSUFnZ0FTQURiRUVDZEdvaUFmMEFBZ0Q5Q3dJQUlBUWdBZjBBQWhEOUN3SVFJQUloQVFzZ0FpQUdSZzBBQTBBZ0J5QUJRUVowYWlJQ0lBZ2dBU0FEYkVFQ2RHb2lCUDBBQWdEOUN3SUFJQUlnQlAwQUFoRDlDd0lRSUFjZ0FVRUJhaUlDUVFaMGFpSUVJQWdnQWlBRGJFRUNkR29pQXYwQUFoRDlDd0lRSUFRZ0F2MEFBZ0Q5Q3dJQUlBRkJBbW9pQVNBR1J3MEFDd3NnQUJBbVFRQWhBU0FBS0FJZ0JFQURRQ0FGSUFBb0FpUWdBV3hCQW5ScUlnSWdBQ2dDQUNBQlFRVjBhaUlEL1FBQ0FQMExBZ0FnQWlBRC9RQUNFUDBMQWhBZ0FVRUJhaUlCSUFBb0FpQkpEUUFMQ3lBRlFTQnFJUVVnQ2tFSWFpSUtJQUFvQWl4TkRRQUxDeUFBS0FJQUVCUWdBQkFVQzYwTkFTTi9JQUFvQWl4QkNFOEVRQ0FBS0FJa0lncEJCWFFoRlNBS1FRZHNJUllnQ2tFR2JDRVhJQXBCQld3aEdDQUtRUU5zSVJrZ0NrRUJkQ0VhSUFBb0FpZ2lBU0FLUVJ4c2FpRWVJQUVnQ2tFWWJHb2hIeUFCSUFwQkZHeHFJU0FnQVNBS1FRUjBhaUVoSUFFZ0NrRU1iR29oSWlBQklBcEJBM1JxSVNNZ0FTQUtRUUowSWh0cUlTUkJDQ0VjQTBBZ0FDQUJJQUFvQWlSQkNCQkRJQUFRSmdKQUlBQW9BaUFpRFVVTkFDQVZJQjFzSVFnZ0FDZ0NBQ0VHUVFBaEJBSkFBa0FnRFVISEFVME5BQ0FCSUFnZ0pHb2lBeUFOUVFKMElnVnFJZ3RKSUFNZ0FTQUZhaUlIU1hFTkFDQUJJQWdnSTJvaUFpQUZhaUlNU1NBQ0lBZEpjUTBBSUFFZ0JTQUlJQ0pxSWdscUlnVkpJQWNnQ1V0eERRQWdCaUFIU1NBQklBWWdEVUVGZEdvaURrRWNheUlQU1hFTkFDQUJJQTVCR0dzaUVFa2dCa0VFYWlJUklBZEpjUTBBSUFFZ0RrRVVheUlTU1NBR1FRaHFJaE1nQjBseERRQWdCeUFHUVF4cUloUkxJQUVnRGtFUWF5SUhTWEVOQUNBRElBeEpJQUlnQzBseERRQWdBeUFGU1NBSklBdEpjUTBBSUFNZ0Qwa2dCaUFMU1hFTkFDQURJQkJKSUFzZ0VVdHhEUUFnQXlBU1NTQUxJQk5MY1EwQUlBTWdCMGtnQ3lBVVMzRU5BQ0FDSUFWSklBa2dERWx4RFFBZ0FpQVBTU0FHSUF4SmNRMEFJQUlnRUVrZ0RDQVJTM0VOQUNBQ0lCSkpJQXdnRTB0eERRQWdBaUFIU1NBTUlCUkxjUTBBSUFrZ0Qwa2dCU0FHUzNFTkFDQUpJQkJKSUFVZ0VVdHhEUUFnQ1NBU1NTQUZJQk5MY1EwQUlBY2dDVXNnQlNBVVMzRU5BQ0FOUVh4eElRUkJBQ0VEQTBBZ0FTQURRUUowYWlBR0lBTkJCWFJxSWdKQjRBQnFJQUpCUUdzZ0FrRWdhaUFDL1Z3Q0FQMVdBZ0FCL1ZZQ0FBTDlWZ0lBQS8wTEFnQWdBU0FESUFwcVFRSjBhaUFDUWVRQWFpQUNRY1FBYWlBQ1FTUnFJQUw5WEFJRS9WWUNBQUg5VmdJQUF2MVdBZ0FEL1FzQ0FDQUJJQU1nR21wQkFuUnFJQUpCNkFCcUlBSkJ5QUJxSUFKQktHb2dBdjFjQWdqOVZnSUFBZjFXQWdBQy9WWUNBQVA5Q3dJQUlBRWdBeUFaYWtFQ2RHb2dBa0hzQUdvZ0FrSE1BR29nQWtFc2FpQUMvVndDRFAxV0FnQUIvVllDQUFMOVZnSUFBLzBMQWdBZ0EwRUVhaUlESUFSSERRQUxJQVFnRFVZTkFRc0RRQ0FCSUFSQkFuUnFJQVlnQkVFRmRHb2lBeW9DQURnQ0FDQUJJQVFnQ21wQkFuUnFJQU1xQWdRNEFnQWdBU0FFSUJwcVFRSjBhaUFES2dJSU9BSUFJQUVnQkNBWmFrRUNkR29nQXlvQ0REZ0NBQ0FFUVFGcUlnUWdEVWNOQUFzTElBQW9BZ0FoQmtFQUlRUUNRQ0FOUVROTkRRQWdDQ0FoYWlJRElBZ2dJR29pQWlBTlFRSjBJZ1ZxSWd0SklBSWdBeUFGYWlJSFNYRU5BQ0FESUFnZ0gyb2lDU0FGYWlJTVNTQUhJQWxMY1EwQUlBTWdDQ0FlYWlJSUlBVnFJZ1ZKSUFjZ0NFdHhEUUFnQXlBR0lBMUJCWFJxSWc1QkRHc2lEMGtnQmtFUWFpSVFJQWRKY1EwQUlBTWdEa0VJYXlJUlNTQUdRUlJxSWhJZ0IwbHhEUUFnQXlBT1FRUnJJaE5KSUFaQkdHb2lGQ0FIU1hFTkFDQURJQTVKSUFaQkhHb2lBeUFIU1hFTkFDQUNJQXhKSUFrZ0MwbHhEUUFnQWlBRlNTQUlJQXRKY1EwQUlBSWdEMGtnQ3lBUVMzRU5BQ0FDSUJGSklBc2dFa3R4RFFBZ0FpQVRTU0FMSUJSTGNRMEFJQUlnRGtrZ0F5QUxTWEVOQUNBSUlBeEpJQVVnQ1V0eERRQWdDU0FQU1NBTUlCQkxjUTBBSUFrZ0VVa2dEQ0FTUzNFTkFDQUpJQk5KSUF3Z0ZFdHhEUUFnQ1NBT1NTQURJQXhKY1EwQUlBZ2dEMGtnQlNBUVMzRU5BQ0FJSUJGSklBVWdFa3R4RFFBZ0NDQVRTU0FGSUJSTGNRMEFJQWdnRGtrZ0F5QUZTWEVOQUNBTlFYeHhJUVJCQUNFREEwQWdBU0FESUJ0cVFRSjBhaUFHSUFOQkJYUnFJZ0pCOEFCcUlBSkIwQUJxSUFKQk1Hb2dBdjFjQWhEOVZnSUFBZjFXQWdBQy9WWUNBQVA5Q3dJQUlBRWdBeUFZYWtFQ2RHb2dBa0gwQUdvZ0FrSFVBR29nQWtFMGFpQUMvVndDRlAxV0FnQUIvVllDQUFMOVZnSUFBLzBMQWdBZ0FTQURJQmRxUVFKMGFpQUNRZmdBYWlBQ1FkZ0FhaUFDUVRocUlBTDlYQUlZL1ZZQ0FBSDlWZ0lBQXYxV0FnQUQvUXNDQUNBQklBTWdGbXBCQW5ScUlBSkIvQUJxSUFKQjNBQnFJQUpCUEdvZ0F2MWNBaHo5VmdJQUFmMVdBZ0FDL1ZZQ0FBUDlDd0lBSUFOQkJHb2lBeUFFUncwQUN5QUVJQTFHRFFFTEEwQWdBU0FFSUJ0cVFRSjBhaUFHSUFSQkJYUnFJZ01xQWhBNEFnQWdBU0FFSUJocVFRSjBhaUFES2dJVU9BSUFJQUVnQkNBWGFrRUNkR29nQXlvQ0dEZ0NBQ0FCSUFRZ0ZtcEJBblJxSUFNcUFodzRBZ0FnQkVFQmFpSUVJQTFIRFFBTEN5QWRRUUZxSVIwZ0FTQVZhaUVCSUJ4QkNHb2lIQ0FBS0FJc1RRMEFDd3NnQUNnQ0FCQVVJQUFRRkF0ekFRSi9JQUFvQWh3aUFVRUlhaUlESUFBb0FpQWlBazBFUUFOQUlBQWdBQ2dDR0NBQlFRSjBhaUFBS0FJVVFRZ1FOaUFESWdGQkNHb2lBeUFBS0FJZ0lnSk5EUUFMQ3lBQklBSkpCRUFnQUNBQUtBSVlJQUZCQW5ScUlBQW9BaFFnQWlBQmF4QTJDeUFBS0FJQUVCUWdBQkFVQzBRQUlBQW9BaHdpQVNBQUtBSWdTUVJBQTBBZ0FDQUFLQUlZSUFBb0FoUWdBV3hCQW5ScUVHWWdBVUVCYWlJQklBQW9BaUJKRFFBTEN5QUFLQUlBRUJRZ0FCQVVDd1VBRUc0QUN3WUFFSmtCQUFzTkFCQUxJQUJCZ0FGcUVBb0FDd1VBRUc0QUMyd0JBWDhnQUVRQUFBQUFBQUFBQUJBTkdnSkFRY2pmQVNnQ0FFRWJRUnBCRGlBQVFRRkdHeUFBUVFKR0d5SUFRUUZyZGtFQmNRUkFRY2pnQVVISTRBRW9BZ0JCQVNBQVFRRnJkSEkyQWdBTUFRc2dBRUVDZEVHZ3lRRnFLQUlBSWdJRVFDQUFJQUlSQWdBTEN3dW9BUUVGZnlBQUtBSlVJZ01vQWdBaEJTQURLQUlFSWdRZ0FDZ0NGQ0FBS0FJY0lnZHJJZ1lnQkNBR1NSc2lCZ1JBSUFVZ0J5QUdFQllhSUFNZ0F5Z0NBQ0FHYWlJRk5nSUFJQU1nQXlnQ0JDQUdheUlFTmdJRUN5QUVJQUlnQWlBRVN4c2lCQVJBSUFVZ0FTQUVFQllhSUFNZ0F5Z0NBQ0FFYWlJRk5nSUFJQU1nQXlnQ0JDQUVhellDQkFzZ0JVRUFPZ0FBSUFBZ0FDZ0NMQ0lCTmdJY0lBQWdBVFlDRkNBQ0M2WUZBZ1orQkg4Z0FTQUJLQUlBUVFkcVFYaHhJZ0ZCRUdvMkFnQWdBQ0FCS1FNQUlRSWdBU2tEQ0NFSEl3QkJJR3NpQ0NRQUlBZEMvLy8vLy8vL1A0TWhCQUorSUFkQ01JaEMvLzhCZ3lJRHB5SUtRWUg0QUd0Qi9ROU5CRUFnQkVJRWhpQUNRanlJaENFRElBcEJnUGdBYTYwaEJBSkFJQUpDLy8vLy8vLy8vLzhQZ3lJQ1FvR0FnSUNBZ0lDQUNGb0VRQ0FEUWdGOElRTU1BUXNnQWtLQWdJQ0FnSUNBZ0FoU0RRQWdBMElCZ3lBRGZDRURDMElBSUFNZ0EwTC8vLy8vLy8vL0IxWWlBQnNoQWlBQXJTQUVmQXdCQ3dKQUlBSWdCSVJRRFFBZ0EwTC8vd0ZTRFFBZ0JFSUVoaUFDUWp5SWhFS0FnSUNBZ0lDQUJJUWhBa0wvRHd3QkN5QUtRZjZIQVVzRVFFSUFJUUpDL3c4TUFRdEJnUGdBUVlINEFDQURVQ0lCR3lJQUlBcHJJZ2xCOEFCS0JFQkNBQ0VDUWdBTUFRc2dBaUVESUFRZ0JFS0FnSUNBZ0lEQUFJUWdBUnNpQlNFR0FrQkJnQUVnQ1dzaUFVSEFBSEVFUUNBQ0lBRkJRR3F0aGlFR1FnQWhBd3dCQ3lBQlJRMEFJQVlnQWEwaUJJWWdBMEhBQUNBQmE2MkloQ0VHSUFNZ0JJWWhBd3NnQ0NBRE53TVFJQWdnQmpjREdBSkFJQWxCd0FCeEJFQWdCU0FKUVVCcXJZZ2hBa0lBSVFVTUFRc2dDVVVOQUNBRlFjQUFJQWxycllZZ0FpQUpyU0lEaUlRaEFpQUZJQU9JSVFVTElBZ2dBamNEQUNBSUlBVTNBd2dnQ0NrRENFSUVoaUFJS1FNQUlnTkNQSWlFSVFJQ1FDQUFJQXBISUFncEF4QWdDQ2tER0lSQ0FGSnhyU0FEUXYvLy8vLy8vLy8vRDRPRUlnTkNnWUNBZ0lDQWdJQUlXZ1JBSUFKQ0FYd2hBZ3dCQ3lBRFFvQ0FnSUNBZ0lDQUNGSU5BQ0FDUWdHRElBSjhJUUlMSUFKQ2dJQ0FnSUNBZ0FpRklBSWdBa0wvLy8vLy8vLy9CMVlpQUJzaEFpQUFyUXNoQXlBSVFTQnFKQUFnQjBLQWdJQ0FnSUNBZ0lCL2d5QURRalNHaENBQ2hMODVBd0FMOUJjREVuOEJmQU4rSXdCQnNBUnJJZ3drQUNBTVFRQTJBaXdDUUNBQnZTSVpRZ0JUQkVCQkFTRVFRYm9JSVJRZ0Fab2lBYjBoR1F3QkN5QUVRWUFRY1FSQVFRRWhFRUc5Q0NFVURBRUxRY0FJUWJzSUlBUkJBWEVpRUJzaEZDQVFSU0VYQ3dKQUlCbENnSUNBZ0lDQWdQai9BSU5DZ0lDQWdJQ0FnUGovQUZFRVFDQUFRU0FnQWlBUVFRTnFJZ1lnQkVILy8zdHhFQ0FnQUNBVUlCQVFIaUFBUVpJSlFmWUtJQVZCSUhFaUF4dEIrd2xCbndzZ0F4c2dBU0FCWWh0QkF4QWVJQUJCSUNBQ0lBWWdCRUdBd0FCekVDQWdBaUFHSUFJZ0Jrb2JJUTBNQVFzZ0RFRVFhaUVSQWtBQ1FBSkFJQUVnREVFc2FoQndJZ0VnQWFBaUFVUUFBQUFBQUFBQUFHSUVRQ0FNSUF3b0Fpd2lCa0VCYXpZQ0xDQUZRU0J5SWhWQjRRQkhEUUVNQXdzZ0JVRWdjaUlWUWVFQVJnMENJQXdvQWl3aEN3d0JDeUFNSUFaQkhXc2lDellDTENBQlJBQUFBQUFBQUxCQm9pRUJDMEVHSUFNZ0EwRUFTQnNoQ2lBTVFUQnFRYUFDUVFBZ0MwRUFUaHRxSWc0aEJ3TkFJQWNDZnlBQlJBQUFBQUFBQVBCQll5QUJSQUFBQUFBQUFBQUFabkVFUUNBQnF3d0JDMEVBQ3lJRE5nSUFJQWRCQkdvaEJ5QUJJQU80b1VRQUFBQUFaYzNOUWFJaUFVUUFBQUFBQUFBQUFHSU5BQXNDUUNBTFFRQk1CRUFnQ3lFSklBY2hCaUFPSVFnTUFRc2dEaUVJSUFzaENRTkFRUjBnQ1NBSlFSMVBHeUVEQWtBZ0IwRUVheUlHSUFoSkRRQWdBNjBoRzBJQUlSa0RRQ0FHSUJsQy8vLy8vdytESUFZMUFnQWdHNFo4SWhwQ2dKVHIzQU9BSWhsQ2dPeVVvd3grSUJwOFBnSUFJQVpCQkdzaUJpQUlUdzBBQ3lBYVFvQ1U2OXdEVkEwQUlBaEJCR3NpQ0NBWlBnSUFDd05BSUFnZ0J5SUdTUVJBSUFaQkJHc2lCeWdDQUVVTkFRc0xJQXdnRENnQ0xDQURheUlKTmdJc0lBWWhCeUFKUVFCS0RRQUxDeUFKUVFCSUJFQWdDa0VaYWtFSmJrRUJhaUVTSUJWQjVnQkdJUk1EUUVFSlFRQWdDV3NpQXlBRFFRbFBHeUVOQWtBZ0JpQUlUUVJBSUFnb0FnQkZRUUowSVFjTUFRdEJnSlRyM0FNZ0RYWWhGa0YvSUExMFFYOXpJUTlCQUNFSklBZ2hCd05BSUFjZ0J5Z0NBQ0lESUExMklBbHFOZ0lBSUFNZ0QzRWdGbXdoQ1NBSFFRUnFJZ2NnQmtrTkFBc2dDQ2dDQUVWQkFuUWhCeUFKUlEwQUlBWWdDVFlDQUNBR1FRUnFJUVlMSUF3Z0RDZ0NMQ0FOYWlJSk5nSXNJQTRnQnlBSWFpSUlJQk1iSWdNZ0VrRUNkR29nQmlBR0lBTnJRUUoxSUJKS0d5RUdJQWxCQUVnTkFBc0xRUUFoQ1FKQUlBWWdDRTBOQUNBT0lBaHJRUUoxUVFsc0lRbEJDaUVISUFnb0FnQWlBMEVLU1EwQUEwQWdDVUVCYWlFSklBTWdCMEVLYkNJSFR3MEFDd3NnQ2lBSlFRQWdGVUhtQUVjYmF5QVZRZWNBUmlBS1FRQkhjV3NpQXlBR0lBNXJRUUoxUVFsc1FRbHJTQVJBSUF4Qk1HcEJoR0JCcEdJZ0MwRUFTQnRxSUFOQmdNZ0FhaUlMUVFsdElnTkJBblJxSVExQkNpRUhJQU5CZDJ3Z0Myb2lBMEVIVEFSQUEwQWdCMEVLYkNFSElBTkJBV29pQTBFSVJ3MEFDd3NDUUNBTktBSUFJZ3NnQ3lBSGJpSVNJQWRzSWc5R0lBMUJCR29pQXlBR1JuRU5BQ0FMSUE5cklRc0NRQ0FTUVFGeFJRUkFSQUFBQUFBQUFFQkRJUUVnQjBHQWxPdmNBMGNOQVNBSUlBMVBEUUVnRFVFRWF5MEFBRUVCY1VVTkFRdEVBUUFBQUFBQVFFTWhBUXRFQUFBQUFBQUE0RDlFQUFBQUFBQUE4RDlFQUFBQUFBQUErRDhnQXlBR1JodEVBQUFBQUFBQStEOGdDeUFIUVFGMklnTkdHeUFESUF0TEd5RVlBa0FnRncwQUlCUXRBQUJCTFVjTkFDQVltaUVZSUFHYUlRRUxJQTBnRHpZQ0FDQUJJQmlnSUFGaERRQWdEU0FISUE5cUlnTTJBZ0FnQTBHQWxPdmNBMDhFUUFOQUlBMUJBRFlDQUNBSUlBMUJCR3NpRFVzRVFDQUlRUVJySWdoQkFEWUNBQXNnRFNBTktBSUFRUUZxSWdNMkFnQWdBMEgvayt2Y0Ewc05BQXNMSUE0Z0NHdEJBblZCQ1d3aENVRUtJUWNnQ0NnQ0FDSURRUXBKRFFBRFFDQUpRUUZxSVFrZ0F5QUhRUXBzSWdkUERRQUxDeUFOUVFScUlnTWdCaUFESUFaSkd5RUdDd05BSUFZaUN5QUlUU0lIUlFSQUlBWkJCR3NpQmlnQ0FFVU5BUXNMQWtBZ0ZVSG5BRWNFUUNBRVFRaHhJUk1NQVFzZ0NVRi9jMEYvSUFwQkFTQUtHeUlHSUFsS0lBbEJlMHB4SWdNYklBWnFJUXBCZjBGK0lBTWJJQVZxSVFVZ0JFRUljU0lURFFCQmR5RUdBa0FnQncwQUlBdEJCR3NvQWdBaUQwVU5BRUVLSVFOQkFDRUdJQTlCQ25BTkFBTkFJQVlpQjBFQmFpRUdJQThnQTBFS2JDSURjRVVOQUFzZ0IwRi9jeUVHQ3lBTElBNXJRUUoxUVFsc0lRTWdCVUZmY1VIR0FFWUVRRUVBSVJNZ0NpQURJQVpxUVFscklnTkJBQ0FEUVFCS0d5SURJQU1nQ2tvYklRb01BUXRCQUNFVElBb2dBeUFKYWlBR2FrRUpheUlEUVFBZ0EwRUFTaHNpQXlBRElBcEtHeUVLQzBGL0lRMGdDa0g5Ly8vL0IwSCsvLy8vQnlBS0lCTnlJZzhiU2cwQklBb2dEMEVBUjJwQkFXb2hGZ0pBSUFWQlgzRWlCMEhHQUVZRVFDQUpJQlpCLy8vLy93ZHpTZzBESUFsQkFDQUpRUUJLR3lFR0RBRUxJQkVnQ1NBSlFSOTFJZ056SUFOcnJTQVJFQzhpQm10QkFVd0VRQU5BSUFaQkFXc2lCa0V3T2dBQUlCRWdCbXRCQWtnTkFBc0xJQVpCQW1zaUVpQUZPZ0FBSUFaQkFXdEJMVUVySUFsQkFFZ2JPZ0FBSUJFZ0Vtc2lCaUFXUWYvLy8vOEhjMG9OQWdzZ0JpQVdhaUlESUJCQi8vLy8vd2R6U2cwQklBQkJJQ0FDSUFNZ0VHb2lDU0FFRUNBZ0FDQVVJQkFRSGlBQVFUQWdBaUFKSUFSQmdJQUVjeEFnQWtBQ1FBSkFJQWRCeGdCR0JFQWdERUVRYWtFSmNpRUZJQTRnQ0NBSUlBNUxHeUlESVFnRFFDQUlOUUlBSUFVUUx5RUdBa0FnQXlBSVJ3UkFJQVlnREVFUWFrME5BUU5BSUFaQkFXc2lCa0V3T2dBQUlBWWdERUVRYWtzTkFBc01BUXNnQlNBR1J3MEFJQVpCQVdzaUJrRXdPZ0FBQ3lBQUlBWWdCU0FHYXhBZUlBaEJCR29pQ0NBT1RRMEFDeUFQQkVBZ0FFSHZERUVCRUI0TElBZ2dDMDhOQVNBS1FRQk1EUUVEUUNBSU5RSUFJQVVRTHlJR0lBeEJFR3BMQkVBRFFDQUdRUUZySWdaQk1Eb0FBQ0FHSUF4QkVHcExEUUFMQ3lBQUlBWkJDU0FLSUFwQkNVNGJFQjRnQ2tFSmF5RUdJQWhCQkdvaUNDQUxUdzBESUFwQkNVb2dCaUVLRFFBTERBSUxBa0FnQ2tFQVNBMEFJQXNnQ0VFRWFpQUlJQXRKR3lFRElBeEJFR3BCQ1hJaEN5QUlJUWNEUUNBTElBYzFBZ0FnQ3hBdklnWkdCRUFnQmtFQmF5SUdRVEE2QUFBTEFrQWdCeUFJUndSQUlBWWdERUVRYWswTkFRTkFJQVpCQVdzaUJrRXdPZ0FBSUFZZ0RFRVFha3NOQUFzTUFRc2dBQ0FHUVFFUUhpQUdRUUZxSVFZZ0NpQVRja1VOQUNBQVFlOE1RUUVRSGdzZ0FDQUdJQXNnQm1zaUJTQUtJQVVnQ2tnYkVCNGdDaUFGYXlFS0lBZEJCR29pQnlBRFR3MEJJQXBCQUU0TkFBc0xJQUJCTUNBS1FSSnFRUkpCQUJBZ0lBQWdFaUFSSUJKckVCNE1BZ3NnQ2lFR0N5QUFRVEFnQmtFSmFrRUpRUUFRSUFzZ0FFRWdJQUlnQ1NBRVFZREFBSE1RSUNBQ0lBa2dBaUFKU2hzaERRd0JDeUFVSUFWQkduUkJIM1ZCQ1hGcUlRa0NRQ0FEUVF0TERRQkJEQ0FEYXlFR1JBQUFBQUFBQURCQUlSZ0RRQ0FZUkFBQUFBQUFBREJBb2lFWUlBWkJBV3NpQmcwQUN5QUpMUUFBUVMxR0JFQWdHQ0FCbWlBWW9hQ2FJUUVNQVFzZ0FTQVlvQ0FZb1NFQkN5QVJJQXdvQWl3aUJ5QUhRUjkxSWdaeklBWnJyU0FSRUM4aUJrWUVRQ0FHUVFGcklnWkJNRG9BQUFzZ0VFRUNjaUVLSUFWQklIRWhDeUFHUVFKcklnNGdCVUVQYWpvQUFDQUdRUUZyUVMxQkt5QUhRUUJJR3pvQUFDQUVRUWh4UlNBRFFRQk1jU0VJSUF4QkVHb2hCd05BSUFjaUJRSi9JQUdaUkFBQUFBQUFBT0JCWXdSQUlBR3FEQUVMUVlDQWdJQjRDeUlHUVpESkFXb3RBQUFnQzNJNkFBQWdBU0FHdDZGRUFBQUFBQUFBTUVDaUlRRUNRQ0FGUVFGcUlnY2dERUVRYW10QkFVY05BQ0FCUkFBQUFBQUFBQUFBWVNBSWNRMEFJQVZCTGpvQUFTQUZRUUpxSVFjTElBRkVBQUFBQUFBQUFBQmlEUUFMUVg4aERTQURRZjMvLy84SElBb2dFU0FPYXlJSWFpSUdhMG9OQUNBQVFTQWdBaUFHSUFOQkFtb2dCeUFNUVJCcUlnVnJJZ2NnQjBFQ2F5QURTQnNnQnlBREd5SURhaUlHSUFRUUlDQUFJQWtnQ2hBZUlBQkJNQ0FDSUFZZ0JFR0FnQVJ6RUNBZ0FDQUZJQWNRSGlBQVFUQWdBeUFIYTBFQVFRQVFJQ0FBSUE0Z0NCQWVJQUJCSUNBQ0lBWWdCRUdBd0FCekVDQWdBaUFHSUFJZ0Jrb2JJUTBMSUF4QnNBUnFKQUFnRFFzRUFFSUFDd1FBUVFBTEhBQWdBQ2dDUEJBUklnQUVmMEhVelFFZ0FEWUNBRUYvQlVFQUN3dktBZ0VIZnlNQVFTQnJJZ01rQUNBRElBQW9BaHdpQkRZQ0VDQUFLQUlVSVFVZ0F5QUNOZ0ljSUFNZ0FUWUNHQ0FESUFVZ0JHc2lBVFlDRkNBQklBSnFJUVZCQWlFR0lBTkJFR29oQVFKL0EwQUNRQUpBQWtBZ0FDZ0NQQ0FCSUFZZ0EwRU1haEFCSWdRRWYwSFV6UUVnQkRZQ0FFRi9CVUVBQzBVRVFDQUZJQU1vQWd3aUIwWU5BU0FIUVFCT0RRSU1Bd3NnQlVGL1J3MENDeUFBSUFBb0Fpd2lBVFlDSENBQUlBRTJBaFFnQUNBQklBQW9BakJxTmdJUUlBSU1Bd3NnQVNBSElBRW9BZ1FpQ0VzaUNVRURkR29pQkNBSElBaEJBQ0FKRzJzaUNDQUVLQUlBYWpZQ0FDQUJRUXhCQkNBSkcyb2lBU0FCS0FJQUlBaHJOZ0lBSUFVZ0Iyc2hCU0FHSUFscklRWWdCQ0VCREFFTEN5QUFRUUEyQWh3Z0FFSUFOd01RSUFBZ0FDZ0NBRUVnY2pZQ0FFRUFJQVpCQWtZTkFCb2dBaUFCS0FJRWF3c2dBMEVnYWlRQUMxSUJBWDhnQUNnQ1BDTUFRUkJySWdBa0FDQUJweUFCUWlDSXB5QUNRZjhCY1NBQVFRaHFFQWtpQWdSL1FkVE5BU0FDTmdJQVFYOEZRUUFMSVFJZ0FDa0RDQ0VCSUFCQkVHb2tBRUovSUFFZ0Foc0xCZ0FnQUJBQUN3WUFJQUFRQXd2dmdRRUZBM3d5ZndoN0EzNEdmU01BUWVEQUFHc2lHaVFBSUJwQkFEWUNJRUVDSVE0Q1FBSkFJQUFvQWdBaUNFR05sSnpVQUVZTkFDQUlRZitmL1k4RlJ3UkFBa0FnQ0VHQWdJRGdBRWNOQUNBQUtBSUVRZXFnZ1lFQ1J3MEFJQUFvQWdoQmpaU2MxQUJHRFFJTFFjMElFQUJCQVNFT0RBSUxRUUFoRGdzQ2YwRUFRUUZCNEFBUUZ5SUlSUTBBR2lBSVFRRTJBa3dDUUFKQUFrQUNRQ0FPRGdNQUF3RURDeUFJUWNRQU5nSllJQWhCeFFBMkFsUWdDRUhHQURZQ1VDQUlRY2NBTmdJUUlBaEJ5QUEyQWdRZ0NFSEpBRFlDSENBSVFjb0FOZ0lZSUFoQnl3QTJBaFFnQ0VITUFEWUNBQ0FJUWMwQU5nSmNJQWhCemdBMkFpd2dDRUhQQURZQ0tDQUlRZEFBTmdJa0lBaEIwUUEyQWlBZ0NFSFNBRFlDRENBSVFkTUFOZ0lJSUFnUVZpSU5OZ0l3SUEwTkFRd0NDeUFJUWRRQU5nSllJQWhCMVFBMkFsUWdDRUhXQURZQ1VDQUlRZGNBTmdJUUlBaEIyQUEyQWdRZ0NFSFpBRFlDWENBSVFkb0FOZ0lzSUFoQjJ3QTJBaWdnQ0VIY0FEWUNKQ0FJUWQwQU5nSWdJQWhCM2dBMkFod2dDRUhmQURZQ0dDQUlRZUFBTmdJVUlBaEI0UUEyQWd3Z0NFSGlBRFlDQ0NBSVFlTUFOZ0lBSUFnQ2YwRUJRWWdCRUJjaURRUkFJQTBRVmlJVU5nSUFBa0FnRkVVTkFDQU4vUXdBQUFBQUFBQUFBQUFBQUFBQUFBQUEvUXNDYkNBTlFRQTZBSHdnRFJBNUloUTJBZ1FnRkVVTkFDQU5FRGtpRkRZQ0NDQVVSUTBBSUEwTUFnc2dEUkI5QzBFQUN5SU5OZ0l3SUExRkRRRUxJQWhCQVRZQ1NDQUlRUUUyQWtBZ0NFRUFOZ0k4SUFoQ0FEY0NOQ0FJUVFFMkFrUWdDQXdCQ3lBSUVCUkJBQXNpRFFSQUlBMUJBRFlDUENBTlFlUUFOZ0pJQ3lBTkJFQWdEVUVBTmdJNElBMUI1UUEyQWtRTElBMEVRQ0FOUVFBMkFqUWdEVUhtQURZQ1FBc2dHa0VrYWlJSUJFQWdDRUVBUWJqQUFCQVpJZ2hCQURZQ3VFQWdDRUovTndLSVFBc2dBd1JBSUJvZ0dpZ0MzRUJCQVhJMkF0eEFDeUFhSUFFMkFod2dHaUFBTmdJWUlCb2dBRFlDRkVFQklRNUJBQ0VCQWtBZ0drRVVhaUlJUlEwQVFRRkJ5QUFRRnlJQUJIOENmeUFBUVlDQXdBQTJBa0FnQUVHQWdNQUFFQmdpRkRZQ0lDQVVSUVJBSUFBUUZFRUFEQUVMSUFBZ0ZEWUNKQ0FBUVFJMkFod2dBRUVETmdJWUlBQkJCRFlDRkNBQVFRVTJBaEFnQUVFR05nSXNJQUJCQ0RZQ0tDQUFJQUFvQWtSQkFuSTJBa1FnQUFzRlFRQUxJZ0JGRFFBZ0FBUkFJQUJCQURZQ0JDQUFJQWcyQWdBTElBZzFBZ2doUWlBQUJFQWdBQ0JDTndNSUN3SkFJQUJGRFFBZ0FDMEFSRUVDY1VVTkFDQUFRY0FBTmdJUUN5QUFCRUFnQUVIQ0FEWUNHQXNnQUFSQUlBQkJ3d0EyQWh3TElBQWhBUXNnQVNFQUFuOGdHa0VrYWlFQkFrQWdEVVVOQUNBQlJRMEFJQTBvQWt4RkJFQWdEVUUwYWtFQlFZbk5BRUVBRUJOQkFBd0NDeUFOS0FJd0lBRWdEU2dDR0JFREFFRUJJUWtMSUFrTFJRUkFRZHdJRUFBZ0FCQTlJQTBRUGd3QkN3Si9JQnBCSUdvaEFVRUFJUWdDUUNBQVJRMEFJQTFGRFFBZ0RTZ0NURVVFUUNBTlFUUnFRUUZCMnMwQVFRQVFFMEVBREFJTElBQWdEU2dDTUNBQklBMUJOR29nRFNnQ0FCRUJBQ0VJQ3lBSUMwVUVRRUg0Q0JBQUlBQVFQU0FORUQ0Z0dpZ0NJQkFsREFFTElCb29BaUFoQVVFQUlRZ0NRQ0FOUlEwQUlBQkZEUUFnRFNnQ1RFVU5BQ0FOS0FJd0lBQWdBU0FOUVRScUlBMG9BZ1FSQVFBaENBc0NRQ0FJQkVCQkFDRUlBa0FnRFVVTkFDQUFSUTBBSUEwb0FreEZEUUFnRFNnQ01DQUFJQTFCTkdvZ0RTZ0NFQkVBQUNFSUN5QUlEUUVMUWY4SkVBQWdEUkErSUFBUVBTQWFLQUlnRUNVTUFRc2dBQkE5SUEwUVBpQWFLQUlnSWhRb0Fod2lBQVJBSUFBUUZDQWFLQUlnSWhSQ0FEY0NIQXNnRkNnQ0VDRWhBa0FDUUNBQ1JRUkFBa0FnQkVVTkFDQWhRUVJIRFFCQkFTRVpRUVFoSVF3REN3SkFBa0FnRkNnQ0ZDSUJRUU5HRFFBZ0lVRURSdzBBSUJRb0FoZ2lBQ2dDQUNBQUtBSUVSdzBCSUFBb0FqUkJBVVlOQVNBVVFRTTJBaFFNQXdzZ0lVRUNTdzBBSUJSQkFqWUNGQXdEQ3dKQUFrQWdBVUVEYXc0REF3RUFCQXNqQUVFUWF5SUpKQUFDUUFKQUFrQWdGQ2dDRUVFRVNRMEFJQlFvQWhnaUFDZ0NBQ0lCSUFBb0FqUkhEUUFnQVNBQUtBSm9SdzBBSUFFZ0FDZ0NuQUZIRFFBZ0FDZ0NCQ0lCSUFBb0FqaEhEUUFnQVNBQUtBSnNSdzBBSUFFZ0FDZ0NvQUZHRFFFTElBbEJuUWcyQWdRZ0NVRzRDallDQUVHd3l3RkJ6ajhnQ1JBYURBRUxBa0FnQUNnQ0RDQUFLQUlJYkNJTlJRUkFJQUFvQXNnQklRRU1BUXREQUFDQVAwRi9JQUFvQXJRQmRFRi9jN09WSVVWREFBQ0FQMEYvSUFBb0FvQUJkRUYvYzdPVklVZERBQUNBUDBGL0lBQW9Ba3gwUVg5enM1VWhTRU1BQUlBL1FYOGdBQ2dDR0hSQmYzT3psU0ZHSUFBb0FzZ0JJUUVnQUNnQ2xBRWhBaUFBS0FKZ0lRb2dBQ2dDTENFSVFRQWhBQUpBSUExQkNFa05BQ0FJSUFvZ0RVRUNkQ0lMYWlJUFNTQUtJQWdnQzJvaUZrbHhEUUFnQWlBV1NTQUlJQUlnQzJvaURFbHhEUUFnQVNBV1NTQUlJQUVnQzJvaUMwbHhEUUFnQ2lBTVNTQUNJQTlKY1EwQUlBRWdEMGtnQ2lBTFNYRU5BQ0FCSUF4SklBSWdDMGx4RFFBZ0RVRjhjU0VBSUVYOUV5RTZJRWY5RXlFN0lFajlFeUZBSUViOUV5RTlRUUFoQ3dOQUlBSWdDMEVDZENJUGFpSVcvUUFDQUNFK0lBb2dEMm9pRFAwQUFnQWhQeUFJSUE5cUloRDlEQUFBZ0Q4QUFJQS9BQUNBUHdBQWdEOGdQU0FRL1FBQ0FQMzZBZjNtQWYzbEFmME1BQUIvUXdBQWYwTUFBSDlEQUFCL1EvM21BZjBNQUFDQVB3QUFnRDhBQUlBL0FBQ0FQeUE2SUFFZ0QycjlBQUlBL2ZvQi9lWUIvZVVCSWp6OTVnSDkrQUg5Q3dJQUlBejlEQUFBZ0Q4QUFJQS9BQUNBUHdBQWdEOGdRQ0EvL2ZvQi9lWUIvZVVCL1F3QUFIOURBQUIvUXdBQWYwTUFBSDlEL2VZQklEejk1Z0g5K0FIOUN3SUFJQmI5REFBQWdEOEFBSUEvQUFDQVB3QUFnRDhnT3lBKy9mb0IvZVlCL2VVQi9Rd0FBSDlEQUFCL1F3QUFmME1BQUg5RC9lWUJJRHo5NWdIOStBSDlDd0lBSUF0QkJHb2lDeUFBUncwQUN5QUFJQTFHRFFFTEEwQUNmME1BQUlBL0lFWWdDQ0FBUVFKMElndHFJZzhvQWdDeWxKTkRBQUIvUTVSREFBQ0FQeUJGSUFFZ0Myb29BZ0N5bEpNaVNaUWlTb3REQUFBQVQxMEVRQ0JLcUF3QkMwR0FnSUNBZUFzaEZpQUNJQXRxSWd3b0FnQWhFQ0FLSUF0cUlnc29BZ0FoRGlBUElCWTJBZ0FnQ3dKL1F3QUFnRDhnU0NBT3NwU1RRd0FBZjBPVUlFbVVJa3FMUXdBQUFFOWRCRUFnU3FnTUFRdEJnSUNBZ0hnTE5nSUFJQXdDZjBNQUFJQS9JRWNnRUxLVWswTUFBSDlEbENCSmxDSkppME1BQUFCUFhRUkFJRW1vREFFTFFZQ0FnSUI0Q3pZQ0FDQUFRUUZxSWdBZ0RVY05BQXNMSUFFUUZDQVVLQUlZSWdCQkNEWUNnQUVnQUVFSU5nSk1JQUJCQ0RZQ0dDQUFRUUEyQXNnQklCUkJBVFlDRkNBVUlCUW9BaEJCQVdzaUFEWUNFQ0FBUVFSSkRRQkJBeUVBQTBBZ0ZDZ0NHQ0FBUVRSc2FpSUJJQUVvQW1RMkFqQWdBU0FCL1FBQ1ZQMExBaUFnQVNBQi9RQUNSUDBMQWhBZ0FTQUIvUUFDTlAwTEFnQWdBRUVCYWlJQUlCUW9BaEJKRFFBTEN5QUpRUkJxSkFBTUF3c2pBRUVRYXlJSkpBQUNRQUpBQWtBZ0ZDZ0NFRUVEU1EwQUlCUW9BaGdpQUNnQ0FDSUJJQUFvQWpSSERRQWdBU0FBS0FKb1J3MEFJQUFvQWdRaUFTQUFLQUk0UncwQUlBRWdBQ2dDYkVZTkFRc2dDVUhiQ0RZQ0JDQUpRYmdLTmdJQVFiRExBVUg0UHlBSkVCb01BUXNDUUNBQUtBSU1JQUFvQWdoc0lnSkZEUUJCZnlBQUtBSVlJZ3AwUVg5eklRRkJBRUVCSUFwQkFXdDBJZ29nQUNnQ2lBRWJJUTlCQUNBS0lBQW9BbFFiSVJZZ0FDZ0NsQUVoQ2lBQUtBSmdJUWdnQUNnQ0xDRU5RUUFoQUFKQUlBSkJCRWtOQUNBTklBZ2dBa0VDZENJTGFpSU1TU0FJSUFzZ0RXb2lFRWx4RFFBZ0NpQVFTU0FOSUFvZ0Myb2lDMGx4RFFBZ0NDQUxTU0FLSUF4SmNRMEFJQUpCZkhFaEFDQUIvUkVoUENBUC9SRWhQU0FXL1JFaFBrRUFJUXNEUUNBTklBdEJBblFpREdvaUVDQThJQW9nREdvaUR2MEFBZ0FnUGYyeEFmMzZBU0k2L1F4cGRMTS9hWFN6UDJsMHN6OXBkTE0vL2VZQklBZ2dER29pRFAwQUFnQWdQdjJ4QWYzNkFTSTcvUXl6V1JxNHMxa2F1TE5aR3JpeldScTQvZVlCSUJEOUFBSUEvZm9CSWtEOTVBSDk1QUg5REFBQUFEOEFBQUEvQUFBQVB3QUFBRC85NUFIOStBRWlQLzBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBUDI0QVNBOElELzlPZjFTL1FzQ0FDQU1JRHdnT3YwTUdkQTJ2eG5RTnI4WjBEYS9HZEEydi8zbUFTQkEvUXpWQ1lBLzFRbUFQOVVKZ0QvVkNZQS8vZVlCSUR2OURDY3hzTDRuTWJDK0p6R3d2aWN4c0w3OTVnSDk1QUg5NUFIOURBQUFBRDhBQUFBL0FBQUFQd0FBQUQvOTVBSDkrQUVpUC8wTUFBQUFBQUFBQUFBQUFBQUFBQUFBQVAyNEFTQThJRC85T2YxUy9Rc0NBQ0FPSUR3Z092ME12VGNHdDcwM0JyZTlOd2EzdlRjR3QvM21BU0JBL1F4bTlIOC9adlIvUDJiMGZ6OW05SDgvL2VZQklEdjlERFhTNGo4MTB1SS9OZExpUHpYUzRqLzk1Z0g5NUFIOTVBSDlEQUFBQUQ4QUFBQS9BQUFBUHdBQUFELzk1QUg5K0FFaU92ME1BQUFBQUFBQUFBQUFBQUFBQUFBQUFQMjRBU0E4SURyOU9mMVMvUXNDQUNBTFFRUnFJZ3NnQUVjTkFBc2dBQ0FDUmcwQkN3TkFBbjhnQ2lBQVFRSjBJZ3RxSWd3b0FnQWdEMnV5SWtWRGFYU3pQNVFnQ0NBTGFpSVFLQUlBSUJacnNpSkhRN05aR3JpVUlBc2dEV29pRGlnQ0FMSWlTSktTUXdBQUFEK1NJa2FMUXdBQUFFOWRCRUFnUnFnTUFRdEJnSUNBZ0hnTElRc2dEaUFCSUF0QkFDQUxRUUJLR3lBQklBdElHellDQUNBUUlBRUNmeUJGUXhuUU5yK1VJRWhEMVFtQVA1UWdSME1uTWJDK2xKS1NRd0FBQUQrU0lrYUxRd0FBQUU5ZEJFQWdScWdNQVF0QmdJQ0FnSGdMSWd0QkFDQUxRUUJLR3lBQklBdElHellDQUNBTUlBRUNmeUJGUTcwM0JyZVVJRWhEWnZSL1A1UWdSME0xMHVJL2xKS1NRd0FBQUQrU0lrV0xRd0FBQUU5ZEJFQWdSYWdNQVF0QmdJQ0FnSGdMSWd0QkFDQUxRUUJLR3lBQklBdElHellDQUNBQVFRRnFJZ0FnQWtjTkFBc0xJQlJCQVRZQ0ZBc2dDVUVRYWlRQURBSUxJQ0VnQWlBQ0lDRkxHeUVoUVFFaEdRd0JDd0pBQWtBQ2Z3SkFBa0FnRkNnQ0dDSUJLQUlBUVFGSERRQUNRQUpBSUFFb0FqUkJBV3NPQWdFQUFnc2dBU2dDYUVFQ1J3MEJBa0FnQVNnQ0JFRUJSdzBBSUFFb0FqaEJBa2NOQUNBQktBSnNRUUpIRFFBZ0ZDSVdLQUlZSWdBb0FoZ2hBU0FBS0FLVUFTRU9JQUFvQW1BaENpQUFLQUlzSVJBZ0FDZ0NQQ0VmSUFBb0FnZ2lDU0FBS0FJTUlnSnNRUUowSWdBUUhDRUlJQUFRSENFTklBQVFIQ0VVQWtBQ1FBSkFBa0FDUUFKQUlBaEZEUUFnRFVVTkFDQVVSUTBBUVg4Z0FYUkJmM01oREVFQklBRkJBV3QwSVJFZ0FpQVdLQUlFUVFGeElnQnJJU1lnRmlnQ0FFRUJjU0VkSUFCRkRRTWdDVVVOQXdKL1FRQWdFV3V5dXlJRlJHcThkSk1ZQk5ZL29pQUZSQXdDSzRjVzJlWS9vcUFpQnBsRUFBQUFBQUFBNEVGakJFQWdCcW9NQVF0QmdJQ0FnSGdMSVJNQ2Z5QUZSQ2N4Q0t3Y1d2dy9vaUlHbVVRQUFBQUFBQURnUVdNRVFDQUdxZ3dCQzBHQWdJQ0FlQXNoRlNBSlFRaEpBbjhnQlVRNzMwK05sMjcyUDZJaUJabEVBQUFBQUFBQTRFRmpCRUFnQmFvTUFRdEJnSUNBZ0hnTElSc05BU0FOSUFoclFSQkpEUUVnRkNBSWEwRVFTUTBCSUFnZ0VHdEJFRWtOQVNBVUlBMXJRUkJKRFFFZ0RTQVFhMEVRU1EwQklCUWdFR3RCRUVrTkFTQVVJQWxCZkhFaUQwRUNkQ0lDYWlFQUlBSWdDR29oQVNBVi9SRWhPeUFUL1JFaFFDQU0vUkVoUENBYi9SRWhQUU5BSUFnZ0YwRUNkQ0lMYXYwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUNBTElCQnEvUUFDQUNJNklEMzlyZ0VpUGlBOC9iWUJJRDc5REFBQUFBQUFBQUFBQUFBQUFBQUFBQUQ5T2YxUy9Rc0NBQ0FMSUExcS9Rd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUlEb2dRUDJ4QVNJK0lEejl0Z0VnUHYwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQVAwNS9WTDlDd0lBSUFzZ0ZHcjlEQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWdPaUE3L2E0Qklqb2dQUDIyQVNBNi9Rd0FBQUFBQUFBQUFBQUFBQUFBQUFBQS9UbjlVdjBMQWdBZ0YwRUVhaUlYSUE5SERRQUxJQUlnRUdvaEVDQUNJQTFxSVFJZ0NTQVBSZzBFREFJTElBZ1FGQ0FORUJRZ0ZCQVVEQVFMSUFnaEFTQU5JUUlnRkNFQUN3TkFJQUVnRUNnQ0FDSUxJQnRxSWhjZ0RDQU1JQmRLRzBFQUlCZEJBRTRiTmdJQUlBSWdDeUFUYXlJWElBd2dEQ0FYU2h0QkFDQVhRUUJPR3pZQ0FDQUFJQXNnRldvaUN5QU1JQXNnREVnYlFRQWdDMEVBVGhzMkFnQWdBRUVFYWlFQUlBSkJCR29oQWlBQlFRUnFJUUVnRUVFRWFpRVFJQTlCQVdvaUR5QUpSdzBBQ3d3QkN5QVVJUUFnRFNFQ0lBZ2hBUXNnQ1NBZGF5RWlBa0FnSmtGK2NTSW5CSDhDZjBFQUlCRnJzcnNpQlVScXZIU1RHQVRXUDZJZ0JVUU1BaXVIRnRubVA2S2dJZ2FaUkFBQUFBQUFBT0JCWXdSQUlBYXFEQUVMUVlDQWdJQjRDeUVlSUNKQmZuRWlLRUVCYXdKL0lBVkVKekVJckJ4YS9EK2lJZ2FaUkFBQUFBQUFBT0JCWXdSQUlBYXFEQUVMUVlDQWdJQjRDeUVnUVg1eEFuOGdCVVE3MzArTmwyNzJQNklpQlpsRUFBQUFBQUFBNEVGakJFQWdCYW9NQVF0QmdJQ0FnSGdMSVNNZ0owRUJheUVwUVFKcUlRc2dDVUVDZENFYkEwQWdBQ0FiYWlFWElBSWdHMm9oRlNBQklCdHFJUThnRUNBYmFpRVRJQjBFUUNBQklCQW9BZ0FpQ1NBamFpSVNJQXdnRENBU1NodEJBQ0FTUVFCT0d6WUNBQ0FDSUFrZ0htc2lFaUFNSUF3Z0Vrb2JRUUFnRWtFQVRoczJBZ0FnQUNBSklDQnFJZ2tnRENBSklBeElHMEVBSUFsQkFFNGJOZ0lBSUFvb0FnQWhHQ0FQQW44Z0RpZ0NBQ0FSYTdLN0lnVkVPOTlQalpkdTlqK2lJZ2FaUkFBQUFBQUFBT0JCWXdSQUlBYXFEQUVMUVlDQWdJQjRDeUFUS0FJQUlnbHFJaElnRENBTUlCSktHMEVBSUJKQkFFNGJOZ0lBSUJVZ0NRSi9JQmdnRVd1eXV5SUdSR3E4ZEpNWUJOWS9vaUFGUkF3Q0s0Y1cyZVkvb3FBaUJabEVBQUFBQUFBQTRFRmpCRUFnQmFvTUFRdEJnSUNBZ0hnTGF5SVNJQXdnRENBU1NodEJBQ0FTUVFCT0d6WUNBQ0FYQW44Z0JrUW5NUWlzSEZyOFA2SWlCWmxFQUFBQUFBQUE0RUZqQkVBZ0Jhb01BUXRCZ0lDQWdIZ0xJQWxxSWdrZ0RDQUpJQXhJRzBFQUlBbEJBRTRiTmdJQUlCZEJCR29oRnlBVlFRUnFJUlVnRDBFRWFpRVBJQk5CQkdvaEV5QUNRUVJxSVFJZ0VFRUVhaUVRSUFGQkJHb2hBU0FBUVFScUlRQUxRUUFoQ1NBb0JFQURRQ0FLS0FJQUlSd2dBUUovSUE0b0FnQWdFV3V5dXlJRlJEdmZUNDJYYnZZL29pSUdtVVFBQUFBQUFBRGdRV01FUUNBR3Fnd0JDMEdBZ0lDQWVBc2dFQ2dDQUNJU2FpSVlJQXdnRENBWVNodEJBQ0FZUVFCT0d6WUNBQ0FDSUJJQ2Z5QWNJQkZyc3JzaUJrUnF2SFNUR0FUV1A2SWdCVVFNQWl1SEZ0bm1QNktnSWdXWlJBQUFBQUFBQU9CQll3UkFJQVdxREFFTFFZQ0FnSUI0QzJzaUdDQU1JQXdnR0VvYlFRQWdHRUVBVGhzMkFnQWdBQUovSUFaRUp6RUlyQnhhL0QraUlnV1pSQUFBQUFBQUFPQkJZd1JBSUFXcURBRUxRWUNBZ0lCNEN5QVNhaUlTSUF3Z0RDQVNTaHRCQUNBU1FRQk9HellDQUNBS0tBSUFJUndnQVFKL0lBNG9BZ0FnRVd1eXV5SUZSRHZmVDQyWGJ2WS9vaUlHbVVRQUFBQUFBQURnUVdNRVFDQUdxZ3dCQzBHQWdJQ0FlQXNnRUNnQ0JDSVNhaUlZSUF3Z0RDQVlTaHRCQUNBWVFRQk9HellDQkNBQ0lCSUNmeUFjSUJGcnNyc2lCa1JxdkhTVEdBVFdQNklnQlVRTUFpdUhGdG5tUDZLZ0lnV1pSQUFBQUFBQUFPQkJZd1JBSUFXcURBRUxRWUNBZ0lCNEMyc2lHQ0FNSUF3Z0dFb2JRUUFnR0VFQVRoczJBZ1FnQUFKL0lBWkVKekVJckJ4YS9EK2lJZ1daUkFBQUFBQUFBT0JCWXdSQUlBV3FEQUVMUVlDQWdJQjRDeUFTYWlJU0lBd2dEQ0FTU2h0QkFDQVNRUUJPR3pZQ0JDQUtLQUlBSVJ3Z0R3Si9JQTRvQWdBZ0VXdXl1eUlGUkR2ZlQ0Mlhidlkvb2lJR21VUUFBQUFBQUFEZ1FXTUVRQ0FHcWd3QkMwR0FnSUNBZUFzZ0V5Z0NBQ0lTYWlJWUlBd2dEQ0FZU2h0QkFDQVlRUUJPR3pZQ0FDQVZJQklDZnlBY0lCRnJzcnNpQmtScXZIU1RHQVRXUDZJZ0JVUU1BaXVIRnRubVA2S2dJZ1daUkFBQUFBQUFBT0JCWXdSQUlBV3FEQUVMUVlDQWdJQjRDMnNpR0NBTUlBd2dHRW9iUVFBZ0dFRUFUaHMyQWdBZ0Z3Si9JQVpFSnpFSXJCeGEvRCtpSWdXWlJBQUFBQUFBQU9CQll3UkFJQVdxREFFTFFZQ0FnSUI0Q3lBU2FpSVNJQXdnRENBU1NodEJBQ0FTUVFCT0d6WUNBQ0FLS0FJQUlSd2dEd0ovSUE0b0FnQWdFV3V5dXlJRlJEdmZUNDJYYnZZL29pSUdtVVFBQUFBQUFBRGdRV01FUUNBR3Fnd0JDMEdBZ0lDQWVBc2dFeWdDQkNJU2FpSVlJQXdnRENBWVNodEJBQ0FZUVFCT0d6WUNCQ0FWSUJJQ2Z5QWNJQkZyc3JzaUJrUnF2SFNUR0FUV1A2SWdCVVFNQWl1SEZ0bm1QNktnSWdXWlJBQUFBQUFBQU9CQll3UkFJQVdxREFFTFFZQ0FnSUI0QzJzaUdDQU1JQXdnR0VvYlFRQWdHRUVBVGhzMkFnUWdGd0ovSUFaRUp6RUlyQnhhL0QraUlnV1pSQUFBQUFBQUFPQkJZd1JBSUFXcURBRUxRWUNBZ0lCNEN5QVNhaUlTSUF3Z0RDQVNTaHRCQUNBU1FRQk9HellDQkNBT1FRUnFJUTRnQ2tFRWFpRUtJQmRCQ0dvaEZ5QVZRUWhxSVJVZ0QwRUlhaUVQSUJOQkNHb2hFeUFBUVFocUlRQWdBa0VJYWlFQ0lBRkJDR29oQVNBUVFRaHFJUkFnQ1VFQ2FpSUpJQ2hKRFFBTElBc2hDUXNDUUNBSklDSlBEUUFnRUNnQ0FDRVNJQThDZnlBZklBbEJBWFlpR0VZRVFDQUJJQklnSTJvaUNTQU1JQWtnREVnYlFRQWdDVUVBVGhzMkFnQWdBaUFTSUI1cklna2dEQ0FKSUF4SUcwRUFJQWxCQUU0Yk5nSUFJQUFnRWlBZ2FpSUpJQXdnQ1NBTVNCdEJBQ0FKUVFCT0d6WUNBQ0FUS0FJQUlna2dIbXNpRHlBTUlBd2dEMG9iUVFBZ0QwRUFUaHNoRHlBSklDQnFJUk1nQ1NBamFpSUpJQXdnQ1NBTVNCdEJBQ0FKUVFCT0d3d0JDeUFLS0FJQUlROGdBUUovSUE0b0FnQWdFV3V5dXlJRlJEdmZUNDJYYnZZL29pSUdtVVFBQUFBQUFBRGdRV01FUUNBR3Fnd0JDMEdBZ0lDQWVBc2dFbW9pQ1NBTUlBa2dERWdiUVFBZ0NVRUFUaHMyQWdBZ0FpQVNBbjhnRHlBUmE3SzdJZ1pFYXJ4MGt4Z0UxaitpSUFWRURBSXJoeGJaNWoraW9DSUZtVVFBQUFBQUFBRGdRV01FUUNBRnFnd0JDMEdBZ0lDQWVBdHJJZ2tnRENBSklBeElHMEVBSUFsQkFFNGJOZ0lBSUFBQ2Z5QUdSQ2N4Q0t3Y1d2dy9vaUlGbVVRQUFBQUFBQURnUVdNRVFDQUZxZ3dCQzBHQWdJQ0FlQXNnRW1vaUNTQU1JQWtnREVnYlFRQWdDVUVBVGhzMkFnQWdFeWdDQUNJSkFuOGdDaWdDQUNBUmE3SzdJZ1ZFYXJ4MGt4Z0UxaitpSUE0b0FnQWdFV3V5dXlJR1JBd0NLNGNXMmVZL29xQWlCNWxFQUFBQUFBQUE0RUZqQkVBZ0I2b01BUXRCZ0lDQWdIZ0xheUlQSUF4SUlSTWdEeUFNSUJNYklSTWdEMEVBU0NFU0FuOGdCa1E3MzArTmwyNzJQNklpQnBsRUFBQUFBQUFBNEVGakJFQWdCcW9NQVF0QmdJQ0FnSGdMSUFscUlnOGdEQ0FNSUE5S0d5RWNJQTlCQUVnaEpFRUFJQk1nRWhzaER3Si9JQVZFSnpFSXJCeGEvRCtpSWdXWlJBQUFBQUFBQU9CQll3UkFJQVdxREFFTFFZQ0FnSUI0Q3lBSmFpRVRRUUFnSENBa0d3czJBZ0FnRlNBUE5nSUFJQmNnRXlBTUlBd2dFMG9iUVFBZ0UwRUFUaHMyQWdBZ0FFRUVhaUVBSUFKQkJHb2hBaUFCUVFScUlRRWdFRUVFYWlFUUlCZ2dIMDhOQUNBT1FRUnFJUTRnQ2tFRWFpRUtDeUFBSUJ0cUlRQWdBaUFiYWlFQ0lBRWdHMm9oQVNBUUlCdHFJUkFnSlVFQ2FpSWxJQ2RKRFFBTElDbEJmbkZCQW1vRlFRQUxJQ1pQRFFBZ0hRUkFJQUVDZjBFQUlCRnJzcnNpQlVRNzMwK05sMjcyUDZJaUJwbEVBQUFBQUFBQTRFRmpCRUFnQnFvTUFRdEJnSUNBZ0hnTElCQW9BZ0FpQ1dvaUN5QU1JQXNnREVnYlFRQWdDMEVBVGhzMkFnQWdBaUFKQW44Z0JVUnF2SFNUR0FUV1A2SWdCVVFNQWl1SEZ0bm1QNktnSWdhWlJBQUFBQUFBQU9CQll3UkFJQWFxREFFTFFZQ0FnSUI0QzJzaUN5QU1JQXNnREVnYlFRQWdDMEVBVGhzMkFnQWdBQUovSUFWRUp6RUlyQnhhL0QraUlnV1pSQUFBQUFBQUFPQkJZd1JBSUFXcURBRUxRWUNBZ0lCNEN5QUphaUlKSUF3Z0NTQU1TQnRCQUNBSlFRQk9HellDQUNBQ1FRUnFJUUlnRUVFRWFpRVFJQUZCQkdvaEFTQUFRUVJxSVFBTElDSWdJa0YrY1NJYkJIOGdHMEVCYXlJSlFYNXhBa0FDZjBFQUlCdEJEMGtOQUJwQkFDQUJJQUlnQ1VFQmRpSVZRUU4wUVFocUloTnFJZ2xKSUFJZ0FTQVRhaUlMU1hFTkFCcEJBQ0FBSUF0SklBRWdBQ0FUYWlJUFNYRU5BQnBCQUNBQklCQWdFMm9pRTBrZ0N5QVFTM0VOQUJwQkFDQUtJQXRKSUFFZ0NpQVZRUUowUVFScUloSnFJaGRKY1EwQUdrRUFJQXNnRGtzZ0FTQU9JQkpxSWd0SmNRMEFHa0VBSUFJZ0Qwa2dBQ0FKU1hFTkFCcEJBQ0FDSUJOSklBa2dFRXR4RFFBYVFRQWdBaUFYU1NBSklBcExjUTBBR2tFQUlBSWdDMGtnQ1NBT1MzRU5BQnBCQUNBQUlCTkpJQThnRUV0eERRQWFRUUFnQUNBWFNTQUtJQTlKY1EwQUdrRUFJQUFnQzBrZ0RpQVBTWEVOQUJvZ0NpQVZRUUZxSWlWQi9QLy8vd2R4SWhkQkFuUWlKbW9oQ1NBQUlCZEJBM1FpRW1vaEN5QUJJQkpxSVE4Z0RQMFJJVHdnRWYwUklVQkJBQ0VWQTBBZ0VDQVZRUU4wSWhOQkdISWlIV29pSnlBUUlCTkJFSElpSG1vaUtDQVFJQk5CQ0hJaUlHb2lHQ0FRSUJOcUlpbjlYQUlBL1ZZQ0FBSDlWZ0lBQXYxV0FnQURJVG9DZnlBT0lCVkJBblFpSEdyOUFBSUFJRUQ5c1FIOStnRWlPLzFmSWozOUREdmZUNDJYYnZZL085OVBqWmR1OWovOThnRWlQdjBoQVNJRm1VUUFBQUFBQUFEZ1FXTUVRQ0FGcWd3QkMwR0FnSUNBZUFzaEpDQUtJQnhxL1FBQ0FDRS9JQUVnRTJvaUhQME1BQUFBQUFBQUFBQUFBQUFBQUFBQUFDQTZBbjhnUHYwaEFDSUZtVVFBQUFBQUFBRGdRV01FUUNBRnFnd0JDMEdBZ0lDQWVBdjlFU0FrL1J3QkFuOGdPeUE3L1EwSUNRb0xEQTBPRHdBQkFnTUFBUUlEL1Y4aVB2ME1POTlQalpkdTlqODczMCtObDI3MlAvM3lBU0k3L1NFQUlnV1pSQUFBQUFBQUFPQkJZd1JBSUFXcURBRUxRWUNBZ0lCNEMvMGNBZ0ovSUR2OUlRRWlCWmxFQUFBQUFBQUE0RUZqQkVBZ0Jhb01BUXRCZ0lDQWdIZ0wvUndESWtIOXJnRWlPeUE4L2JZQklEdjlEQUFBQUFBQUFBQUFBQUFBQUFBQUFBRDlPZjFTSWp2OVdnSUFBQ0FCSUNCcUlpUWdPLzFhQWdBQklBRWdIbW9pTENBNy9Wb0NBQUlnQVNBZGFpSXRJRHY5V2dJQUF3Si9JRDhnUVAyeEFmMzZBU0k3L1Y4aVAvME1hcngwa3hnRTFqOXF2SFNUR0FUV1AvM3lBU0E5L1F3TUFpdUhGdG5tUHd3Q0s0Y1cyZVkvL2ZJQi9mQUJJajM5SVFFaUJabEVBQUFBQUFBQTRFRmpCRUFnQmFvTUFRdEJnSUNBZ0hnTElTb2dBaUFUYWlJdS9Rd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUlEb0NmeUE5L1NFQUlnV1pSQUFBQUFBQUFPQkJZd1JBSUFXcURBRUxRWUNBZ0lCNEMvMFJJQ3I5SEFFQ2Z5QTcvUXdBQUFBQUFBQUFBQUFBQUFBQUFBQUEvUTBJQ1FvTERBME9Ed0FCQWdNQUFRSUQvVjhpUGYwTWFyeDBreGdFMWo5cXZIU1RHQVRXUC8zeUFTQSsvUXdNQWl1SEZ0bm1Qd3dDSzRjVzJlWS8vZklCL2ZBQklqdjlJUUFpQlpsRUFBQUFBQUFBNEVGakJFQWdCYW9NQVF0QmdJQ0FnSGdML1J3Q0FuOGdPLzBoQVNJRm1VUUFBQUFBQUFEZ1FXTUVRQ0FGcWd3QkMwR0FnSUNBZUF2OUhBTWlQdjJ4QVNJN0lEejl0Z0VnTy8wTUFBQUFBQUFBQUFBQUFBQUFBQUFBQVAwNS9WSWlPLzFhQWdBQUlBSWdJR29pS2lBNy9Wb0NBQUVnQWlBZWFpSXZJRHY5V2dJQUFpQUNJQjFxSWpBZ08vMWFBZ0FEQW44Z1AvME1KekVJckJ4YS9EOG5NUWlzSEZyOFAvM3lBU0k3L1NFQklnV1pSQUFBQUFBQUFPQkJZd1JBSUFXcURBRUxRWUNBZ0lCNEN5RXJJQUFnRTJvaUUvME1BQUFBQUFBQUFBQUFBQUFBQUFBQUFDQTZBbjhnTy8waEFDSUZtVVFBQUFBQUFBRGdRV01FUUNBRnFnd0JDMEdBZ0lDQWVBdjlFU0FyL1J3QkFuOGdQZjBNSnpFSXJCeGEvRDhuTVFpc0hGcjhQLzN5QVNJNi9TRUFJZ1daUkFBQUFBQUFBT0JCWXdSQUlBV3FEQUVMUVlDQWdJQjRDLzBjQWdKL0lEcjlJUUVpQlpsRUFBQUFBQUFBNEVGakJFQWdCYW9NQVF0QmdJQ0FnSGdML1J3RElqMzlyZ0VpT2lBOC9iWUJJRHI5REFBQUFBQUFBQUFBQUFBQUFBQUFBQUQ5T2YxU0lqcjlXZ0lBQUNBQUlDQnFJaUFnT3YxYUFnQUJJQUFnSG1vaUhpQTYvVm9DQUFJZ0FDQWRhaUlkSURyOVdnSUFBeUFjL1F3QUFBQUFBQUFBQUFBQUFBQUFBQUFBSUNkQkJHb2dLRUVFYWlBWVFRUnFJQ245WEFJRS9WWUNBQUg5VmdJQUF2MVdBZ0FESWpzZ1FmMnVBU0k2SUR6OXRnRWdPdjBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBUDA1L1ZJaU92MWFBZ1FBSUNRZ092MWFBZ1FCSUN3Z092MWFBZ1FDSUMwZ092MWFBZ1FESUM3OURBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZ095QSsvYkVCSWpvZ1BQMjJBU0E2L1F3QUFBQUFBQUFBQUFBQUFBQUFBQUFBL1RuOVVpSTYvVm9DQkFBZ0tpQTYvVm9DQkFFZ0x5QTYvVm9DQkFJZ01DQTYvVm9DQkFNZ0UvME1BQUFBQUFBQUFBQUFBQUFBQUFBQUFDQTdJRDM5cmdFaU9pQTgvYllCSURyOURBQUFBQUFBQUFBQUFBQUFBQUFBQUFEOU9mMVNJanI5V2dJRUFDQWdJRHI5V2dJRUFTQWVJRHI5V2dJRUFpQWRJRHI5V2dJRUF5QVZRUVJxSWhVZ0YwY05BQXNnRGlBbWFpRU9JQkFnRW1vaEVDQUNJQkpxSVFJZ0Z5QWxSZ1JBSUE4aEFTQUxJUUFnQ1NFS0RBSUxJQThoQVNBTElRQWdDU0VLSUJkQkFYUUxJUThEUUNBS0tBSUFJUk1nQVFKL0lBNG9BZ0FnRVd1eXV5SUZSRHZmVDQyWGJ2WS9vaUlHbVVRQUFBQUFBQURnUVdNRVFDQUdxZ3dCQzBHQWdJQ0FlQXNnRUNnQ0FDSUphaUlMSUF3Z0N5QU1TQnRCQUNBTFFRQk9HellDQUNBQ0lBa0NmeUFUSUJGcnNyc2lCa1JxdkhTVEdBVFdQNklnQlVRTUFpdUhGdG5tUDZLZ0lnV1pSQUFBQUFBQUFPQkJZd1JBSUFXcURBRUxRWUNBZ0lCNEMyc2lDeUFNSUFzZ0RFZ2JRUUFnQzBFQVRoczJBZ0FnQUFKL0lBWkVKekVJckJ4YS9EK2lJZ1daUkFBQUFBQUFBT0JCWXdSQUlBV3FEQUVMUVlDQWdJQjRDeUFKYWlJSklBd2dDU0FNU0J0QkFDQUpRUUJPR3pZQ0FDQUtLQUlBSVJNZ0FRSi9JQTRvQWdBZ0VXdXl1eUlGUkR2ZlQ0Mlhidlkvb2lJR21VUUFBQUFBQUFEZ1FXTUVRQ0FHcWd3QkMwR0FnSUNBZUFzZ0VDZ0NCQ0lKYWlJTElBd2dDeUFNU0J0QkFDQUxRUUJPR3pZQ0JDQUNJQWtDZnlBVElCRnJzcnNpQmtScXZIU1RHQVRXUDZJZ0JVUU1BaXVIRnRubVA2S2dJZ1daUkFBQUFBQUFBT0JCWXdSQUlBV3FEQUVMUVlDQWdJQjRDMnNpQ3lBTUlBc2dERWdiUVFBZ0MwRUFUaHMyQWdRZ0FBSi9JQVpFSnpFSXJCeGEvRCtpSWdXWlJBQUFBQUFBQU9CQll3UkFJQVdxREFFTFFZQ0FnSUI0Q3lBSmFpSUpJQXdnQ1NBTVNCdEJBQ0FKUVFCT0d6WUNCQ0FPUVFScUlRNGdDa0VFYWlFS0lBQkJDR29oQUNBQ1FRaHFJUUlnQVVFSWFpRUJJQkJCQ0dvaEVDQVBRUUpxSWc4Z0cwa05BQXNMUVFKcUJVRUFDeUlMVFEwQUlCQW9BZ0FoQ1FKOElCOGdDMEVCZGtZRVFBSi9RUUFnRVd1eXV5SUZSRHZmVDQyWGJ2WS9vaUlHbVVRQUFBQUFBQURnUVdNRVFDQUdxZ3dCQzBHQWdJQ0FlQXNnQ1dvaUNpQU1JQW9nREVnYlFRQWdDa0VBVGhzaERpQUZEQUVMQW44Z0RpZ0NBQ0FSYTdLN0lnVkVPOTlQalpkdTlqK2lJZ2FaUkFBQUFBQUFBT0JCWXdSQUlBYXFEQUVMUVlDQWdJQjRDeUFKYWlJTElBd2dDeUFNU0J0QkFDQUxRUUJPR3lFT0lBb29BZ0FnRVd1eXV3c2hCaUFCSUE0MkFnQWdBaUFKQW44Z0JrUnF2SFNUR0FUV1A2SWdCVVFNQWl1SEZ0bm1QNktnSWdXWlJBQUFBQUFBQU9CQll3UkFJQVdxREFFTFFZQ0FnSUI0QzJzaUFTQU1JQUVnREVnYlFRQWdBVUVBVGhzMkFnQWdBQUovSUFaRUp6RUlyQnhhL0QraUlnV1pSQUFBQUFBQUFPQkJZd1JBSUFXcURBRUxRWUNBZ0lCNEN5QUphaUlBSUF3Z0FDQU1TQnRCQUNBQVFRQk9HellDQUFzZ0ZpZ0NHQ2dDTEJBVUlCWW9BaGdpQUNBSU5nSXNJQUFvQW1BUUZDQVdLQUlZSWdBZ0RUWUNZQ0FBS0FLVUFSQVVJQllvQWhnaUFDQVVOZ0tVQVNBQUlBRDlBQUlBSWp6OUN3Sm9JQUFnUFAwTEFqUWdGa0VCTmdJVUN3d0hDeUFCS0FJRVFRRkhEUUVnQVNnQ09FRUJSdzBCSUFFb0FteEJBVWNOQVNBQktBSVlJUUFnQVNnQ2xBRWhBaUFCS0FKZ0lRc2dBU2dDTENFT0lBRW9BandoSUNBQktBSUlJZ29nQVNnQ0RDSWpiRUVDZENJQkVCd2hEeUFCRUJ3aEZpQUJFQndoRENBUFJRMEZJQlpGRFFVZ0RFVU5CU0FqQkVBZ0NpQVVLQUlBUVFGeElpeHJJU1VDZjBFQVFRRWdBRUVCYTNRaUUydXl1eUlGUkdxOGRKTVlCTlkvb2lBRlJBd0NLNGNXMmVZL29xQWlCcGxFQUFBQUFBQUE0RUZqQkVBZ0Jxb01BUXRCZ0lDQWdIZ0xJU1pCZnlBQWRDQWxRWDV4SWlKQkFXc2lDa0VCZGlJQVFRRnFJU2NDZnlBRlJDY3hDS3djV3Z3L29pSUdtVVFBQUFBQUFBRGdRV01FUUNBR3Fnd0JDMEdBZ0lDQWVBc2hLQ0FLUVg1eElRb2dBRUVDZENFSUlBQkJBM1FoQUNBblFYeHhJUmRCZjNNaEVRSi9JQVZFTzk5UGpaZHU5aitpSWdXWlJBQUFBQUFBQU9CQll3UkFJQVdxREFFTFFZQ0FnSUI0Q3lFWUlBcEJBbW9oS1NBSVFRUnFJUndnQUVFSWFpRWJJQmRCQW5RaEpDQVhRUU4wSVJJZ0YwRUJkQ0VRSUJIOUVTRThJQlA5RVNGQUlDSkJCMGtoTFNBUElRb2dGaUVBSUF3aENBTkFJQ3dFUUNBS0lBNG9BZ0FpQVNBWWFpSU5JQkVnRFNBUlNCdEJBQ0FOUVFCT0d6WUNBQ0FBSUFFZ0ptc2lEU0FSSUEwZ0VVZ2JRUUFnRFVFQVRoczJBZ0FnQ0NBQklDaHFJZ0VnRVNBQklCRklHMEVBSUFGQkFFNGJOZ0lBSUFoQkJHb2hDQ0FLUVFScUlRb2dEa0VFYWlFT0lBQkJCR29oQUFzQ2Z3Si9JQ0pGQkVBZ0N5RUpJQWdoQVNBS0lRMUJBQXdCQzBFQUlSa0NRQUpBSUMwTkFDQUtJQUFnRzJvaUFVa2dBQ0FLSUJ0cUlnMUpjUTBBSUFnZ0RVa2dDaUFJSUJ0cUlnbEpjUTBBSUFvZ0RpQWJhaUlWU1NBTklBNUxjUTBBSUFzZ0RVa2dDaUFMSUJ4cUloOUpjUTBBSUFJZ0RVa2dDaUFDSUJ4cUlnMUpjUTBBSUFBZ0NVa2dBU0FJUzNFTkFDQUFJQlZKSUFFZ0RrdHhEUUFnQUNBZlNTQUJJQXRMY1EwQUlBQWdEVWtnQVNBQ1MzRU5BQ0FJSUJWSklBa2dEa3R4RFFBZ0NDQWZTU0FKSUF0TGNRMEFJQUlnQ1VrZ0NDQU5TWEVOQUNBTElDUnFJUWtnQ0NBU2FpRUJJQW9nRW1vaERRTkFJQTRnR1VFRGRDSVZRUmh5SWg5cUlpb2dEaUFWUVJCeUloMXFJaTRnRGlBVlFRaHlJaDVxSWk4Z0RpQVZhaUl3L1Z3Q0FQMVdBZ0FCL1ZZQ0FBTDlWZ0lBQXlFNkFuOGdBaUFaUVFKMElpdHEvUUFDQUNCQS9iRUIvZm9CSWp2OVh5STkvUXc3MzArTmwyNzJQenZmVDQyWGJ2WS8vZklCSWo3OUlRRWlCWmxFQUFBQUFBQUE0RUZqQkVBZ0Jhb01BUXRCZ0lDQWdIZ0xJVEVnQ3lBcmF2MEFBZ0FoUHlBS0lCVnFJaXY5REFBQUFBQUFBQUFBQUFBQUFBQUFBQUFnT2dKL0lENzlJUUFpQlpsRUFBQUFBQUFBNEVGakJFQWdCYW9NQVF0QmdJQ0FnSGdML1JFZ01mMGNBUUovSURzZ08vME5DQWtLQ3d3TkRnOEFBUUlEQUFFQ0EvMWZJajc5RER2ZlQ0MlhidlkvTzk5UGpaZHU5ai85OGdFaU8vMGhBQ0lGbVVRQUFBQUFBQURnUVdNRVFDQUZxZ3dCQzBHQWdJQ0FlQXY5SEFJQ2Z5QTcvU0VCSWdXWlJBQUFBQUFBQU9CQll3UkFJQVdxREFFTFFZQ0FnSUI0Qy8wY0F5SkIvYTRCSWpzZ1BQMjJBU0E3L1F3QUFBQUFBQUFBQUFBQUFBQUFBQUFBL1RuOVVpSTcvVm9DQUFBZ0NpQWVhaUl4SUR2OVdnSUFBU0FLSUIxcUlqTWdPLzFhQWdBQ0lBb2dIMm9pTkNBNy9Wb0NBQU1DZnlBL0lFRDlzUUg5K2dFaU8vMWZJai85REdxOGRKTVlCTlkvYXJ4MGt4Z0Uxai85OGdFZ1BmME1EQUlyaHhiWjVqOE1BaXVIRnRubVAvM3lBZjN3QVNJOS9TRUJJZ1daUkFBQUFBQUFBT0JCWXdSQUlBV3FEQUVMUVlDQWdJQjRDeUV5SUFBZ0ZXb2lOZjBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0E2QW44Z1BmMGhBQ0lGbVVRQUFBQUFBQURnUVdNRVFDQUZxZ3dCQzBHQWdJQ0FlQXY5RVNBeS9Sd0JBbjhnTy8wTUFBQUFBQUFBQUFBQUFBQUFBQUFBQVAwTkNBa0tDd3dORGc4QUFRSURBQUVDQS8xZklqMzlER3E4ZEpNWUJOWS9hcngwa3hnRTFqLzk4Z0VnUHYwTURBSXJoeGJaNWo4TUFpdUhGdG5tUC8zeUFmM3dBU0k3L1NFQUlnV1pSQUFBQUFBQUFPQkJZd1JBSUFXcURBRUxRWUNBZ0lCNEMvMGNBZ0ovSUR2OUlRRWlCWmxFQUFBQUFBQUE0RUZqQkVBZ0Jhb01BUXRCZ0lDQWdIZ0wvUndESWo3OXNRRWlPeUE4L2JZQklEdjlEQUFBQUFBQUFBQUFBQUFBQUFBQUFBRDlPZjFTSWp2OVdnSUFBQ0FBSUI1cUlqSWdPLzFhQWdBQklBQWdIV29pTmlBNy9Wb0NBQUlnQUNBZmFpSTNJRHY5V2dJQUF3Si9JRC85RENjeENLd2NXdncvSnpFSXJCeGEvRC85OGdFaU8vMGhBU0lGbVVRQUFBQUFBQURnUVdNRVFDQUZxZ3dCQzBHQWdJQ0FlQXNoT0NBSUlCVnFJaFg5REFBQUFBQUFBQUFBQUFBQUFBQUFBQUFnT2dKL0lEdjlJUUFpQlpsRUFBQUFBQUFBNEVGakJFQWdCYW9NQVF0QmdJQ0FnSGdML1JFZ09QMGNBUUovSUQzOURDY3hDS3djV3Z3L0p6RUlyQnhhL0QvOThnRWlPdjBoQUNJRm1VUUFBQUFBQUFEZ1FXTUVRQ0FGcWd3QkMwR0FnSUNBZUF2OUhBSUNmeUE2L1NFQklnV1pSQUFBQUFBQUFPQkJZd1JBSUFXcURBRUxRWUNBZ0lCNEMvMGNBeUk5L2E0Qklqb2dQUDIyQVNBNi9Rd0FBQUFBQUFBQUFBQUFBQUFBQUFBQS9UbjlVaUk2L1ZvQ0FBQWdDQ0FlYWlJZUlEcjlXZ0lBQVNBSUlCMXFJaDBnT3YxYUFnQUNJQWdnSDJvaUh5QTYvVm9DQUFNZ0svME1BQUFBQUFBQUFBQUFBQUFBQUFBQUFDQXFRUVJxSUM1QkJHb2dMMEVFYWlBdy9Wd0NCUDFXQWdBQi9WWUNBQUw5VmdJQUF5STdJRUg5cmdFaU9pQTgvYllCSURyOURBQUFBQUFBQUFBQUFBQUFBQUFBQUFEOU9mMVNJanI5V2dJRUFDQXhJRHI5V2dJRUFTQXpJRHI5V2dJRUFpQTBJRHI5V2dJRUF5QTEvUXdBQUFBQUFBQUFBQUFBQUFBQUFBQUFJRHNnUHYyeEFTSTZJRHo5dGdFZ092ME1BQUFBQUFBQUFBQUFBQUFBQUFBQUFQMDUvVklpT3YxYUFnUUFJRElnT3YxYUFnUUJJRFlnT3YxYUFnUUNJRGNnT3YxYUFnUURJQlg5REFBQUFBQUFBQUFBQUFBQUFBQUFBQUFnT3lBOS9hNEJJam9nUFAyMkFTQTYvUXdBQUFBQUFBQUFBQUFBQUFBQUFBQUEvVG45VWlJNi9Wb0NCQUFnSGlBNi9Wb0NCQUVnSFNBNi9Wb0NCQUlnSHlBNi9Wb0NCQU1nR1VFRWFpSVpJQmRIRFFBTElBSWdKR29oQWlBT0lCSnFJUTRnQUNBU2FpRUFJQkFoR1NBcElCY2dKMFlOQWhvTUFRc2dDaUVOSUFnaEFTQUxJUWtMQTBBZ0NTZ0NBQ0VMSUEwQ2Z5QUNLQUlBSUJOcnNyc2lCVVE3MzArTmwyNzJQNklpQnBsRUFBQUFBQUFBNEVGakJFQWdCcW9NQVF0QmdJQ0FnSGdMSUE0b0FnQWlDbW9pQ0NBUklBZ2dFVWdiUVFBZ0NFRUFUaHMyQWdBZ0FDQUtBbjhnQ3lBVGE3SzdJZ1pFYXJ4MGt4Z0UxaitpSUFWRURBSXJoeGJaNWoraW9DSUZtVVFBQUFBQUFBRGdRV01FUUNBRnFnd0JDMEdBZ0lDQWVBdHJJZ2dnRVNBSUlCRklHMEVBSUFoQkFFNGJOZ0lBSUFFQ2Z5QUdSQ2N4Q0t3Y1d2dy9vaUlGbVVRQUFBQUFBQURnUVdNRVFDQUZxZ3dCQzBHQWdJQ0FlQXNnQ21vaUNpQVJJQW9nRVVnYlFRQWdDa0VBVGhzMkFnQWdDU2dDQUNFTElBMENmeUFDS0FJQUlCTnJzcnNpQlVRNzMwK05sMjcyUDZJaUJwbEVBQUFBQUFBQTRFRmpCRUFnQnFvTUFRdEJnSUNBZ0hnTElBNG9BZ1FpQ21vaUNDQVJJQWdnRVVnYlFRQWdDRUVBVGhzMkFnUWdBQ0FLQW44Z0N5QVRhN0s3SWdaRWFyeDBreGdFMWoraUlBVkVEQUlyaHhiWjVqK2lvQ0lGbVVRQUFBQUFBQURnUVdNRVFDQUZxZ3dCQzBHQWdJQ0FlQXRySWdnZ0VTQUlJQkZJRzBFQUlBaEJBRTRiTmdJRUlBRUNmeUFHUkNjeENLd2NXdncvb2lJRm1VUUFBQUFBQUFEZ1FXTUVRQ0FGcWd3QkMwR0FnSUNBZUFzZ0Ntb2lDaUFSSUFvZ0VVZ2JRUUFnQ2tFQVRoczJBZ1FnQWtFRWFpRUNJQWxCQkdvaENTQUJRUWhxSVFFZ0FFRUlhaUVBSUExQkNHb2hEU0FPUVFocUlRNGdHVUVDYWlJWklDSkpEUUFMSUNrTElnZ2dKVThFUUNBQklRZ2dEU0VLSUFrTUFRc2dEaWdDQUNFS0FuOGdJQ0FJUVFGMklobEdCRUFnQ2lBbWF5SUlJQkVnQ0NBUlNCdEJBQ0FJUVFCT0d5RUxJQW9nR0dvaUNDQVJJQWdnRVVnYlFRQWdDRUVBVGhzaENDQW9EQUVMSUFvQ2Z5QUpLQUlBSUJOcnNyc2lCVVJxdkhTVEdBVFdQNklnQWlnQ0FDQVRhN0s3SWdaRURBSXJoeGJaNWoraW9DSUhtVVFBQUFBQUFBRGdRV01FUUNBSHFnd0JDMEdBZ0lDQWVBdHJJZ2dnRVVnaEN5QUlJQkVnQ3h0QkFDQUlRUUJPR3lFTEFuOGdCa1E3MzArTmwyNzJQNklpQnBsRUFBQUFBQUFBNEVGakJFQWdCcW9NQVF0QmdJQ0FnSGdMSUFwcUlnZ2dFU0FJSUJGSUcwRUFJQWhCQUU0YklRZ0NmeUFGUkNjeENLd2NXdncvb2lJRm1VUUFBQUFBQUFEZ1FXTUVRQ0FGcWd3QkMwR0FnSUNBZUFzTElSVWdEU0FJTmdJQUlBQWdDellDQUNBQklBb2dGV29pQ2lBUklBb2dFVWdiUVFBZ0NrRUFUaHMyQWdBZ0FVRUVhaUVJSUFCQkJHb2hBQ0FOUVFScUlRb2dEa0VFYWlFT0lBa2dHU0FnVHcwQUdpQUNRUVJxSVFJZ0NVRUVhZ3NoQ3lBNVFRRnFJamtnSTBjTkFBc0xJQlFvQWhnb0Fpd1FGQ0FVS0FJWUlnQWdEellDTENBQUtBSmdFQlFnRkNnQ0dDSUFJQlkyQW1BZ0FDZ0NsQUVRRkNBVUtBSVlJZ0FnRERZQ2xBRWdBQ0FBL1FBQ0FDSTgvUXNDYUNBQUlEejlDd0kwSUJSQkFUWUNGRUVBSVJrTUJnc2dBU2dDYUVFQlJ3MEFJQUVvQWdSQkFVY05BQ0FCS0FJNFFRRkhEUUFnQVNnQ2JFRUJSdzBBSUFFb0FoZ2hBaUFCS0FLVUFTRUpJQUVvQW1BaERpQUJLQUlzSVFBZ0FTZ0NEQ0FCS0FJSWJDSU1RUUowSWdFUUhDRUlJQUVRSENFUElBRVFIQ0VMQWtBZ0NFVU5BQ0FQUlEwQUlBdEZEUUFnREVVTkJFRi9JQUowUVg5eklSbEJBU0FDUVFGcmRDRVRJQXhCQ0VrTkFpQVBJQWhyUVJCSkRRSWdDeUFJYTBFUVNRMENJQWdnQUd0QkVFa05BaUFJSUE1clFSQkpEUUlnQ0NBSmEwRVFTUTBDSUFzZ0QydEJFRWtOQWlBUElBQnJRUkJKRFFJZ0R5QU9hMEVRU1EwQ0lBOGdDV3RCRUVrTkFpQUxJQUJyUVJCSkRRSWdDeUFPYTBFUVNRMENJQXNnQ1d0QkVFa05BaUFKSUF4QmZIRWlDa0VDZENJUWFpRU5JQXNnRUdvaEFTQUlJQkJxSVFJZ0dmMFJJVHdnRS8wUklUb0RRQUovSUFrZ0ZrRUNkQ0lSYXYwQUFnQWdPdjJ4QWYzNkFTSTcvVjhpUGYwTU85OVBqWmR1OWo4NzMwK05sMjcyUC8zeUFTSSsvU0VCSWdXWlJBQUFBQUFBQU9CQll3UkFJQVdxREFFTFFZQ0FnSUI0Q3lFVklBNGdFV3I5QUFJQUlUOGdDQ0FSYXYwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUNBQUlCRnEvUUFDQUNKQUFuOGdQdjBoQUNJRm1VUUFBQUFBQUFEZ1FXTUVRQ0FGcWd3QkMwR0FnSUNBZUF2OUVTQVYvUndCQW44Z095QTcvUTBJQ1FvTERBME9Ed0FCQWdNQUFRSUQvVjhpTy8wTU85OVBqWmR1OWo4NzMwK05sMjcyUC8zeUFTSSsvU0VBSWdXWlJBQUFBQUFBQU9CQll3UkFJQVdxREFFTFFZQ0FnSUI0Qy8wY0FnSi9JRDc5SVFFaUJabEVBQUFBQUFBQTRFRmpCRUFnQmFvTUFRdEJnSUNBZ0hnTC9Sd0QvYTRCSWo0Z1BQMjJBU0ErL1F3QUFBQUFBQUFBQUFBQUFBQUFBQUFBL1RuOVV2MExBZ0FDZnlBL0lEcjlzUUg5K2dFaVB2MWZJai85REdxOGRKTVlCTlkvYXJ4MGt4Z0Uxai85OGdFZ1BmME1EQUlyaHhiWjVqOE1BaXVIRnRubVAvM3lBZjN3QVNJOS9TRUJJZ1daUkFBQUFBQUFBT0JCWXdSQUlBV3FEQUVMUVlDQWdJQjRDeUVWSUE4Z0VXcjlEQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWdRQUovSUQzOUlRQWlCWmxFQUFBQUFBQUE0RUZqQkVBZ0Jhb01BUXRCZ0lDQWdIZ0wvUkVnRmYwY0FRSi9JRDc5REFBQUFBQUFBQUFBQUFBQUFBQUFBQUQ5RFFnSkNnc01EUTRQQUFFQ0F3QUJBZ1A5WHlJOS9ReHF2SFNUR0FUV1AycThkSk1ZQk5ZLy9mSUJJRHY5REF3Q0s0Y1cyZVkvREFJcmh4Ylo1ai85OGdIOThBRWlPLzBoQUNJRm1VUUFBQUFBQUFEZ1FXTUVRQ0FGcWd3QkMwR0FnSUNBZUF2OUhBSUNmeUE3L1NFQklnV1pSQUFBQUFBQUFPQkJZd1JBSUFXcURBRUxRWUNBZ0lCNEMvMGNBLzJ4QVNJN0lEejl0Z0VnTy8wTUFBQUFBQUFBQUFBQUFBQUFBQUFBQVAwNS9WTDlDd0lBQW44Z1AvME1KekVJckJ4YS9EOG5NUWlzSEZyOFAvM3lBU0k3L1NFQklnV1pSQUFBQUFBQUFPQkJZd1JBSUFXcURBRUxRWUNBZ0lCNEN5RVZJQXNnRVdyOURBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZ1FBSi9JRHY5SVFBaUJabEVBQUFBQUFBQTRFRmpCRUFnQmFvTUFRdEJnSUNBZ0hnTC9SRWdGZjBjQVFKL0lEMzlEQ2N4Q0t3Y1d2dy9KekVJckJ4YS9ELzk4Z0VpTy8waEFDSUZtVVFBQUFBQUFBRGdRV01FUUNBRnFnd0JDMEdBZ0lDQWVBdjlIQUlDZnlBNy9TRUJJZ1daUkFBQUFBQUFBT0JCWXdSQUlBV3FEQUVMUVlDQWdJQjRDLzBjQS8ydUFTSTdJRHo5dGdFZ08vME1BQUFBQUFBQUFBQUFBQUFBQUFBQUFQMDUvVkw5Q3dJQUlCWkJCR29pRmlBS1J3MEFDeUFLSUF4R0RRUWdEaUFRYWlFT0lBQWdFR29oQUNBUElCQnFEQU1MSUFnUUZDQVBFQlFnQ3hBVURBVUxJQnBCendNMkFnUWdHa0c0Q2pZQ0FFR3d5d0ZCbzhBQUlCb1FHZ3dFQ3lBSUlRSWdDeUVCSUFraERTQVBDeUVKQTBBZ0RpZ0NBQ0VSSUFJQ2Z5QU5LQUlBSUJOcnNyc2lCVVE3MzArTmwyNzJQNklpQnBsRUFBQUFBQUFBNEVGakJFQWdCcW9NQVF0QmdJQ0FnSGdMSUFBb0FnQWlGbW9pRUNBWklCQWdHVWdiUVFBZ0VFRUFUaHMyQWdBZ0NTQVdBbjhnRVNBVGE3SzdJZ1pFYXJ4MGt4Z0UxaitpSUFWRURBSXJoeGJaNWoraW9DSUZtVVFBQUFBQUFBRGdRV01FUUNBRnFnd0JDMEdBZ0lDQWVBdHJJaEFnR1NBUUlCbElHMEVBSUJCQkFFNGJOZ0lBSUFFQ2Z5QUdSQ2N4Q0t3Y1d2dy9vaUlGbVVRQUFBQUFBQURnUVdNRVFDQUZxZ3dCQzBHQWdJQ0FlQXNnRm1vaUZpQVpJQllnR1VnYlFRQWdGa0VBVGhzMkFnQWdBVUVFYWlFQklBbEJCR29oQ1NBQ1FRUnFJUUlnRFVFRWFpRU5JQTVCQkdvaERpQUFRUVJxSVFBZ0NrRUJhaUlLSUF4SERRQUxDeUFVS0FJWUtBSXNFQlFnRkNnQ0dDSUFJQWcyQWl3Z0FDZ0NZQkFVSUJRb0FoZ2lBQ0FQTmdKZ0lBQW9BcFFCRUJRZ0ZDZ0NHQ0FMTmdLVUFTQVVRUUUyQWhSQkFDRVpEQUVMSUE4UUZDQVdFQlFnREJBVUN5QWFLQUlnSVFBQ1FDQUREUUFnSVVVTkFDQUFLQUlZSVJSQkFDRVdBMEFnRkNBV1FUUnNhaUlES0FJWUlnSkJDRWNFUUFKQUlBSkJCMDBFUUNBREtBSU1JQU1vQWdoc0lRRWdBeWdDTENFSUlBTW9BaUFFUUNBQlJRMENRUUVnQWtFQmEzU3RJVUpCQUNFS0lBRkJCRThFUUNBQlFYeHhJUW9nUXYwU0lUeEJBQ0VPQTBBZ0NDQU9RUUowYWlJQ0lBTDlBQUlBSWpyOXh3RkJCLzNMQVNJNy9SMEFJRHo5SFFBaVEzLzlFaUE3L1IwQklEejlIUUVpUkgvOUhnRWdPaUE4L1EwSUNRb0xEQTBPRHdBQkFnTUFBUUlEL2NjQlFRZjl5d0VpT3YwZEFDQkRmLzBTSURyOUhRRWdSSC85SGdIOURRQUJBZ01JQ1FvTEVCRVNFeGdaR2h2OUN3SUFJQTVCQkdvaURpQUtSdzBBQ3lBQklBcEdEUU1MQTBBZ0NDQUtRUUowYWlJQ0lBSTBBZ0JDQjRZZ1FuOCtBZ0FnQ2tFQmFpSUtJQUZIRFFBTERBSUxJQUZGRFFGQmZ5QUNkRUYvYzYwaFFrRUFJUW9nQVVFRVR3UkFJQUZCZkhFaENpQkMvUkloUEVFQUlRNERRQ0FJSUE1QkFuUnFJZ0lnQXYwQUFnQWlPdjNKQWYwTS93QUFBQUFBQUFEL0FBQUFBQUFBQVAzVkFTSTcvUjBBSUR6OUhRQWlRNEQ5RWlBNy9SMEJJRHo5SFFFaVJJRDlIZ0VnT2lBOC9RMElDUW9MREEwT0R3QUJBZ01BQVFJRC9ja0IvUXovQUFBQUFBQUFBUDhBQUFBQUFBQUEvZFVCSWpyOUhRQWdRNEQ5RWlBNi9SMEJJRVNBL1I0Qi9RMEFBUUlEQ0FrS0N4QVJFaE1ZR1JvYi9Rc0NBQ0FPUVFScUlnNGdDa2NOQUFzZ0FTQUtSZzBDQ3dOQUlBZ2dDa0VDZEdvaUFpQUNOUUlBUXY4QmZpQkNnRDRDQUNBS1FRRnFJZ29nQVVjTkFBc01BUXNnQWtFSWF5RUlJQU1vQWd3Z0F5Z0NDR3doQVNBREtBSXNJUTBnQXlnQ0lBUkFJQUZGRFFGQkFDRUtJQUZCQkU4RVFDQUJRWHh4SVFwQkFDRUNBMEFnRFNBQ1FRSjBhaUlKSUFuOUFBSUFJQWo5ckFIOUN3SUFJQUpCQkdvaUFpQUtSdzBBQ3lBQklBcEdEUUlMQTBBZ0RTQUtRUUowYWlJQ0lBSW9BZ0FnQ0hVMkFnQWdDa0VCYWlJS0lBRkhEUUFMREFFTElBRkZEUUJCQUNFS0lBRkJCRThFUUNBQlFYeHhJUXBCQUNFQ0EwQWdEU0FDUVFKMGFpSUpJQW45QUFJQUlBajlyUUg5Q3dJQUlBSkJCR29pQWlBS1J3MEFDeUFCSUFwR0RRRUxBMEFnRFNBS1FRSjBhaUlDSUFJb0FnQWdDSFkyQWdBZ0NrRUJhaUlLSUFGSERRQUxDeUFEUVFnMkFoZ0xJQlpCQVdvaUZpQWhSdzBBQ3dzZ0FDZ0NEQ0FBS0FJSWJDRUJBa0FnR1VVRVFDQUFLQUlVUVFKR0JFQWdBQ2dDRUVFQlJnUkFJQUFvQWhnb0Fpd2dBUkFTREFNTElBUkZEUUlnQUNnQ0dDSUFLQUlzSUFBb0FtQWdBUkFJREFJTElBQW9BaGdpQUNnQ0xDQUFLQUpnSUFBb0FwUUJJQUVRQnd3QkN3SkFBa0FDUUNBaFFRRnJEZ1FBQXdFQ0F3c2dBQ2dDR0NnQ0xDQUJFQVlNQWdzZ0FDZ0NHQ0lBS0FJc0lBQW9BbUFnQUNnQ2xBRWdBUkFGREFFTElBQW9BaGdpQUNnQ0xDQUFLQUpnSUFBb0FwUUJJQUFvQXNnQklBRVFCQXNnR2lnQ0lCQWxRUUFoRGdzZ0drSGd3QUJxSkFBZ0Rnc0lBRUVJSUFBUUtRdXJBZ0lDZmdKL1FuOGhBeUFBTFFCRVFRaHhSUVJBSUFBZ0FDZ0NJQ0lHTmdJa0FrQUNRQUpBSUFBZ0FDZ0NNQ0lGQkg4RFFDQUdJQVVnQUNnQ0FDQUFLQUlVRVFBQUlnVkJmMFlOQWlBQUlBQW9BaVFnQldvaUJqWUNKQ0FBSUFBb0FqQWdCV3NpQlRZQ01DQUZEUUFMSUFBb0FpQUZJQVlMTmdJa0lBRkNBRlVOQVVJQUlRTU1BZ3NnQUNBQUtBSkVRUWh5TmdKRUlBSkJCRUhQK1FCQkFCQVRJQUJCQURZQ01DQUFJQUFvQWtSQkNISTJBa1JDZnc4TFFnQWhBd05BSUFFZ0FDZ0NBQ0FBS0FJWUVRMEFJZ1JDZjFFRVFDQUNRUVJCd1BrQVFRQVFFeUFBSUFBb0FrUkJDSEkyQWtRZ0FDQUFLUU00SUFOOE53TTRRbjhnQXlBRFVCc1BDeUFESUFSOElRTWdBU0FFZlNJQlFnQlZEUUFMQ3lBQUlBQXBBemdnQTN3M0F6Z0xJQU1MSXdFQmZ5QUJJQUVvQWdBZ0FTZ0NDQ0lCSUFDbklnSWdBU0FDU1J0cU5nSUVRUUVMUEFJQ2Z3RitJQUVvQWdBZ0FTZ0NDR29pQXlBQktBSUVJZ0pHQkVCQ2Z3OExJQUVnQWlBQXAybzJBZ1FnQUNBRElBSnJyQ0lFSUFBZ0JGTWJDNXNCQVFWL1FRRWdBaWdDQ0NJSElBZEJBVTBiSVFRZ0FpZ0NCQ0lESUFJb0FnQnJJUVlEUUNBRUlnVkJBWFFoQkNBRklBWnJJQUZKRFFBTElBVWdCMGNFUUNBRkVCZ2lBMFVFUUVGL0R3c2dBaWdDQUNJRUJFQWdBeUFFSUFZUUZob2dBaWdDQUJBVUN5QUNJQVUyQWdnZ0FpQUROZ0lBSUFJZ0F5QUdhaUlETmdJRUN5QURJQUFnQVJBV0dpQUNJQUlvQWdRZ0FXbzJBZ1FnQVF1T0F3SUNmZ0ovSUFBb0FqQWlCU0FCcHlJR1R3UkFJQUFnQlNBR2F6WUNNQ0FBSUFBb0FpUWdCbW8yQWlRZ0FDQUFLUU00SUFGOE53TTRJQUVQQ3lBQUxRQkVRUVJ4QkVBZ0FFRUFOZ0l3SUFBZ0FDZ0NKQ0FGYWpZQ0pDQUFJQVd0SWdFZ0FDa0RPSHczQXpnZ0FVSi9JQVViRHdzQ1FDQUZSUVJBREFFTElBQkJBRFlDTUNBQUlBQW9BaUEyQWlRZ0FTQUZyU0lEZlNFQkN5QUJRZ0JWQkVBRFFDQUFLUU1JSUFBcEF6Z2dBU0FEZkh4VUJFQWdBa0VFUWVuNUFFRUFFQk1nQUVFQU5nSXdJQUFnQUNnQ0lEWUNKQ0FBSUFBcEF6Z2dBM3dpQXpjRE9DQUFLUU1JSWdFZ0EzMGhCQ0FCSUFBb0FnQWdBQ2dDSEJFTEFDQUFLQUpFSVFVRVFDQUFJQUUzQXpnTElBQWdCVUVFY2pZQ1JFSi9JQVFnQVNBRFVSc1BDeUFCSUFBb0FnQWdBQ2dDR0JFTkFDSUVRbjlSQkVBZ0FrRUVRZW41QUVFQUVCTWdBQ0FBS0FKRVFRUnlOZ0pFSUFBZ0FDa0RPQ0FEZkRjRE9FSi9JQU1nQTFBYkR3c2dBeUFFZkNFRElBRWdCSDBpQVVJQVZRMEFDd3NnQUNBQUtRTTRJQU44TndNNElBTUxSZ0VDZnlBQ0tBSUFJQUlvQWdocUlnUWdBaWdDQkNJRFJnUkFRWDhQQ3lBQUlBTWdCQ0FEYXlJQUlBRWdBQ0FCU1JzaUFCQVdHaUFDSUFJb0FnUWdBR28yQWdRZ0FBdXFBZ0VFZnlNQVFSQnJJZ1FrQUFKQUlBQW9BblFOQUNBQ1FRRk5CRUFnQTBFQlFZM0ZBRUVBRUJNTUFRc2dBU0FFUVF4cVFRSVFGU0FFS0FJTUlnWkIvLzhEY1NJSFJRUkFJQU5CQVVHdXhRQkJBQkFUREFFTElBZEJCbXhCQW1vZ0Frc0VRQ0FEUVFGQmpjVUFRUUFRRXd3QkN5QUdRUVpzRUJnaUEwVU5BQ0FBUVFnUUdDSUNOZ0owSUFKRkJFQWdBeEFVREFFTElBSWdBellDQUNBQ0lBUXZBUXdpQWpzQkJDQUNSUVJBUVFFaEJRd0JDMEVBSVFJRFFDQUJRUUpxSUFSQkRHb2lCVUVDRUJVZ0F5QUNRUVpzYWlJR0lBUW9BZ3c3QVFBZ0FVRUVhaUFGUVFJUUZTQUdJQVFvQWd3N0FRSWdBVUVHYWlJQklBVkJBaEFWSUFZZ0JDZ0NERHNCQkVFQklRVWdBa0VCYWlJQ0lBQW9BblF2QVFSSkRRQUxDeUFFUVJCcUpBQWdCUXZzQVFFRWZ5TUFRUkJySWdVa0FBSi9JQUFvQW5naUJFVUVRQ0FEUVFGQjM4UUFRUUFRRTBFQURBRUxJQVFvQWd3RVFDQURRUUZCcWRvQVFRQVFFMEVBREFFTElBSWdCQzBBRWlJQ1FRSjBJZ1JKQkVBZ0EwRUJRYjdFQUVFQUVCTkJBQXdCQzBFQUlBUVFHQ0lFUlEwQUdpQUNCRUJCQUNFREEwQWdBU0FGUVF4cUlnWkJBaEFWSUFRZ0EwRUNkR29pQnlBRktBSU1Pd0VBSUFGQkFtb2dCa0VCRUJVZ0J5QUZLQUlNT2dBQ0lBRkJBMm9nQmtFQkVCVWdCeUFGS0FJTU9nQURJQUZCQkdvaEFTQURRUUZxSWdNZ0FrY05BQXNMSUFBb0FuZ2dCRFlDREVFQkN5QUZRUkJxSkFBTDhBTUJDWDhqQUVFUWF5SUZKQUFDUUNBQ1FRTkpEUUFnQUNnQ2VBMEFJQUVnQlVFTWFrRUNFQlVnQlM4QkRDSUpRWUVJYTBIL2QwMEVRQ0FGSUFrMkFnQWdBMEVCUWFFYklBVVFFd3dCQ3lBQlFRSnFJQVZCREdwQkFSQVZJQVV2QVF3aUNFVUVRQ0FEUVFGQndSaEJBQkFUREFFTElBSWdDRUVEYWtrTkFDQUlJQWxzUVFKMEVCZ2lCMFVOQUNBSUVCZ2lDa1VFUUNBSEVCUU1BUXNnQ0JBWUlndEZCRUFnQnhBVUlBb1FGQXdCQzBFVUVCZ2lCa1VFUUNBSEVCUWdDaEFVSUFzUUZBd0JDeUFCUVFOcUlRTWdCaUFLTmdJSUlBWWdDellDQkNBR0lBazdBUkFnQmlBSE5nSUFJQVVvQWd3aERDQUdRUUEyQWd3Z0JpQU1PZ0FTSUFBZ0JqWUNlQU5BSUFNZ0JVRU1ha0VCRUJVZ0JDQUthaUFGTFFBTVFmOEFjVUVCYWpvQUFDQUVJQXRxSUFVb0FneEJnQUZ4UVFkMk9nQUFJQU5CQVdvaEF5QUVRUUZxSWdRZ0NFY05BQXNnQ1VVRVFFRUJJUVFNQVF0QkFDRUdBMEJCQUNFRVFRQWhBQU5BUVFRZ0JDQUthaTBBQUVFSGFrRURkaUlFSUFSQkJFOGJJZ1FnQXlBQmEyb2dBa29FUUVFQUlRUU1Bd3NnQXlBRlFReHFJQVFRRlNBSElBVW9BZ3cyQWdBZ0IwRUVhaUVISUFNZ0JHb2hBeUFBUVFGcUlnQkIvLzhEY1NJRUlBaEpEUUFMUVFFaEJDQUdRUUZxSWdaQi8vOERjU0FKU1EwQUN3c2dCVUVRYWlRQUlBUUxtQUVCQW44akFFRVFheUlGSkFBZ0FDZ0NHQ0lFUWY4QlJ3UkFJQVVnQkRZQ0FDQURRUUpCMFJRZ0JSQVRDd0pBQWtBZ0FDZ0NGQ0FDUmdSQUlBSU5BVUVCSVFRTUFndEJBQ0VFSUFOQkFVR0o4UUJCQUJBVERBRUxRUUFoQWdOQVFRRWhCQ0FCSUFBb0FrZ2dBa0VNYkdwQkNHcEJBUkFWSUFGQkFXb2hBU0FDUVFGcUlnSWdBQ2dDRkVrTkFBc0xJQVZCRUdva0FDQUVDNDRHQVFaL0l3QkIwQUJySWdRa0FBSkFJQUpCQWswRVFDQURRUUZCNmZBQVFRQVFFd3dCQ3lBQUxRQjhCRUFnQTBFRVFaVFhBRUVBRUJOQkFTRUdEQUVMUVFFaEJpQUJJQUJCS0dwQkFSQVZJQUZCQVdvZ0FFRTBha0VCRUJVZ0FVRUNhaUFBUVN4cVFRRVFGU0FCUVFOcUlRVUNRQUpBQWtBQ1FBSkFJQUFvQWlnaUIwRUJhdzRDQUFFQ0N5QUNRUVpOQkVBZ0JDQUNOZ0lRSUFOQkFVR085Z0FnQkVFUWFoQVRRUUFoQmd3RkN3SkFJQUpCQjBZTkFDQUFLQUl3UVE1R0RRQWdCQ0FDTmdJd0lBTkJBa0dPOWdBZ0JFRXdhaEFUQ3lBRklBQkJNR3BCQkJBVklBQW9BakJCRGtjTkEwRWtFQmdpQlVVRVFFRUFJUVlnQTBFQlFaUStRUUFRRXd3RkN5QUZRUTQyQWdBZ0JFRUFOZ0pBSUFSQkFEWUNPQ0FFUVFBMkFrZ2dCRUVBTmdJOElBUkJBRFlDUkNBRVFRQTJBa3hCc09xUUFpRUdJQVJCc09xUUFqWUNOQ0FGUVlDTWxhSUVOZ0lFQW44Z0FrRUhSd1JBSUFKQkkwWUVRQ0FCUVFkcUlBUkJ6QUJxUVFRUUZTQUJRUXRxSUFSQnlBQnFRUVFRRlNBQlFROXFJQVJCeEFCcVFRUVFGU0FCUVJOcUlBUkJRR3RCQkJBVklBRkJGMm9nQkVFOGFrRUVFQlVnQVVFYmFpQUVRVGhxUVFRUUZTQUJRUjlxSUFSQk5HcEJCQkFWSUFWQkFEWUNCQ0FFS0FJMElRWWdCQ2dDT0NFQ0lBUW9Ba0FoQXlBRUtBSThJUWNnQkNnQ1JDRUlJQVFvQWt3aENTQUVLQUpJREFJTElBUWdBallDSUNBRFFRSkJzdllBSUFSQklHb1FFd3RCQUNFQ1FRQWhBMEVBSVFkQkFBc2hBU0FGSUFjMkFoZ2dCU0FJTmdJUUlBVWdDVFlDQ0NBRklBWTJBaUFnQlNBQ05nSWNJQVVnQXpZQ0ZDQUZJQUUyQWd3Z0FFRUFOZ0p3SUFBZ0JUWUNiQXdEQ3lBQUlBSkJBMnNpQVRZQ2NDQUFRUUVnQVJBWElnTTJBbXdnQTBVTkFTQUNRUU5NRFFKQkFDRUNBMEFnQlNBRVFjd0Fha0VCRUJVZ0FDZ0NiQ0FDYWlBRUtBSk1PZ0FBSUFWQkFXb2hCU0FDUVFGcUlnSWdBVWNOQUFzTUFnc2dCMEVEU1EwQ0lBUWdCellDQUNBRFFRUkJxZndBSUFRUUV3d0NDMEVBSVFZZ0FFRUFOZ0p3REFFTFFRRWhCaUFBUVFFNkFId0xJQVJCMEFCcUpBQWdCZ3UwQXdFRGZ5TUFRU0JySWdRa0FBSkFJQUFvQWtnRVFDQURRUUpCd2paQkFCQVRRUUVoQWd3QkN5QUNRUTVIQkVCQkFDRUNJQU5CQVVISThBQkJBQkFUREFFTElBRWdBRUVRYWtFRUVCVWdBVUVFYWlBQVFReHFRUVFRRlNBQlFRaHFJQUJCRkdwQkFoQVZJQUFvQWd3aEJRSkFJQVFDZnlBQUtBSVFJZ1pGQkVBZ0FDZ0NGQXdCQ3lBQUtBSVVJZ0lnQlVVTkFCb2dBZzBCUVFBTE5nSUlJQVFnQmpZQ0JDQUVJQVUyQWdBZ0EwRUJRYXp2QUNBRUVCTkJBQ0VDREFFTElBSkJnWUFCYTBILy8zNU5CRUJCQUNFQ0lBTkJBVUhXN2dCQkFCQVREQUVMSUFBZ0FrRU1FQmNpQWpZQ1NDQUNSUVJBUVFBaEFpQURRUUZCKys0QVFRQVFFd3dCQzBFQklRSWdBVUVLYWlBQVFSaHFRUUVRRlNBQlFRdHFJQUJCSEdwQkFSQVZJQUFvQWh3aUJVRUhSd1JBSUFRZ0JUWUNFQ0FEUVFSQjYvNEFJQVJCRUdvUUV3c2dBVUVNYWlBQVFTQnFRUUVRRlNBQlFRMXFJQUJCSkdwQkFSQVZJQUFvQWdBaUFTQUJMUURVQVVIN0FYRWdBQ2dDR0VIL0FVWkJBblJ5T2dEVUFTQUFLQUlBSWdFZ0FDZ0NERFlDOEFFZ0FTQUFLQUlRTmdMMEFTQUFRUUU2QUlVQkN5QUVRU0JxSkFBZ0FndTNCQUVGZnlNQVFSQnJJZ1lrQUFKL0lBQXRBR1JCQW5GRkJFQWdBMEVCUWJmWUFFRUFFQk5CQUF3QkN5QUFRUUEyQW1nQ1FBSkFBa0FnQWdSQUEwQWdBa0VIVFFSQUlBTkJBVUdtR2tFQUVCTU1CUXNnQVNBR1FReHFJZ1ZCQkJBVklBWW9BZ3doQkNBQlFRUnFJQVZCQkJBVlFRZ2hCeUFHS0FJTUlRVUNRQUpBQWtBQ1FDQUVEZ0lCQUFNTElBSkJFRWtFUUVIT0dpRUVEQWNMSUFGQkNHb2dCa0VJYWtFRUVCVWdCaWdDQ0FSQVFkekJBQ0VFREFjTElBRkJER29nQmtFTWFrRUVFQlVnQmlnQ0RDSUVEUUZCbnhraEJBd0dDeUFEUVFGQm54bEJBQkFUREFZTFFSQWhCd3NnQkNBSFNRUkFJQU5CQVVHWHh3QkJBQkFUREFVTElBSWdCRWtFUUNBRFFRRkJ6OFlBUVFBUUUwRUFEQVlMQWtBQ1FDQUFJQUVnQjJvZ0JDQUhheUFEQW44Q1FBSkFBa0FnQlVIeDJMMmJCa3dFUUNBRlFlUEd3Wk1HUmcwQklBVkI1c3FSbXdaR0RRTWdCVUh3d3JXYkJrY05CVUdneFFFTUJBc2dCVUh5MkkyREIwWU5BVUdBeFFFZ0JVSHl5S0hMQmtZTkF4b2dCVUh5MkwyYkJrY05CRUdJeFFFTUF3dEJrTVVCREFJTFFaakZBUXdCQzBHb3hRRUxLQUlFRVFFQURRRkJBQXdIQ3lBQUlBQW9BbWhCLy8vLy93ZHlOZ0pvQzBFQklBZ2dCVUh5eUtITEJrWWJJUWdnQVNBRWFpRUJJQUlnQkdzaUFnMEFDeUFJRFFFTElBTkJBVUhyeFFCQkFCQVRRUUFNQXdzZ0FFRUJPZ0NFQVNBQUlBQW9BbVJCQkhJMkFtUkJBUXdDQ3lBRFFRRWdCRUVBRUJNTElBTkJBVUdMRDBFQUVCTkJBQXNnQmtFUWFpUUFDK0lCQVFGL0lBQW9BbVJCQVVjRVFDQURRUUZCNU5nQVFRQVFFMEVBRHdzQ1FDQUNRUWROQkVBTUFRc2dBU0FBUVRocVFRUVFGU0FCUVFScUlBQkJQR3BCQkJBVklBSkJBM0VFUUF3QkN5QUFJQUpCQ0dzaUFrRUNkaUlFTmdKQUFrQWdBa1VOQUNBQUlBUkJCQkFYSWdJMkFrUWdBa1VFUUNBRFFRRkJsaEZCQUJBVFFRQVBDeUFBS0FKQVJRMEFJQUZCQ0dvaEEwRUFJUUlEUUNBRElBQW9Ba1FnQWtFQ2RHcEJCQkFWSUFOQkJHb2hBeUFDUVFGcUlnSWdBQ2dDUUVrTkFBc0xJQUFnQUNnQ1pFRUNjallDWkVFQkR3c2dBMEVCUVo0dVFRQVFFMEVBQzM0QkFYOGpBRUVRYXlJRUpBQUNmeUFBS0FKa0JFQWdBMEVCUVlIWUFFRUFFQk5CQUF3QkN5QUNRUVJIQkVBZ0EwRUJRY0l1UVFBUUUwRUFEQUVMSUFFZ0JFRU1ha0VFRUJVZ0JDZ0NERUdLanFyb0FFY0VRQ0FEUVFGQjZpWkJBQkFUUVFBTUFRc2dBQ0FBS0FKa1FRRnlOZ0prUVFFTElBUkJFR29rQUF2RUFRRUNmeUFBSUFBb0FpQWlCRFlDSkFKQUlBQW9BakFpQXdSQUEwQWdCQ0FESUFBb0FnQWdBQ2dDRkJFQUFDSURRWDlHRFFJZ0FDQUFLQUlrSUFOcUlnUTJBaVFnQUNBQUtBSXdJQU5ySWdNMkFqQWdBdzBBQ3lBQUtBSWdJUVFMSUFCQkFEWUNNQ0FBSUFRMkFpUWdBU0FBS0FJQUlBQW9BaHdSQ3dCRkJFQWdBQ0FBS0FKRVFRaHlOZ0pFUVFBUEN5QUFJQUUzQXpoQkFROExJQUFnQUNnQ1JFRUljallDUkNBQ1FRUkJ6L2tBUVFBUUV5QUFJQUFvQWtSQkNISTJBa1JCQUFzTkFDQUFLQUlBSUFFZ0FoQk9Dd2tBSUFBb0FnQVFVd3NKQUNBQUtBSUFFRklMRFFBZ0FDZ0NBQ0FCSUFJUVZRdEJBUUYvSUFJRWZ5QURRUUpCeTg4QVFRQVFFeUFBS0FJQUlBRWdBaUFESUFRUVQwVUVRQ0FEUVFGQm5UQkJBQkFUUVFBUEN5QUFJQUlnQXhCK0JVRUFDd3NWQUNBQUtBSUFJQUVnQWlBRElBUWdCU0FHRUZjTER3QWdBQ2dDQUNBQklBSWdBeEJZQ3hNQUlBQW9BZ0FnQVNBQ0lBTWdCQ0FGRURFTEhRQWdBQ2dDQUNBQklBSWdBeUFFSUFVZ0JpQUhJQWdnQ1NBS0VDd0w1UVFCQm44Z0FTZ0NDRUUySUFNUUtFVUVRRUVBRHdzZ0FTZ0NCQ0lJS0FJQUlRY2dDQ2dDQ0NFR0FrQWdCd1JBUVFFaEJTQUhRUUZ4SVFrZ0IwRUJSZ1IvUVFBRklBZEJmbkVoQndOQUFuOUJBQ0FGUlEwQUdrRUFJQUVnQUNBRElBWW9BZ0FSQUFCRkRRQWFJQUVnQUNBRElBWW9BZ1FSQUFCQkFFY0xJUVVnQmtFSWFpRUdJQVJCQW1vaUJDQUhSdzBBQ3lBRlJRc2hCRUVBSUFVZ0NSc2hCUUpBSUFsRkRRQWdCQTBBSUFFZ0FDQURJQVlvQWdBUkFBQkJBRWNoQlFzZ0NFRUFOZ0lBSUFVTkFVRUFEd3NnQ0VFQU5nSUFDeUFCS0FJSUlnY29BZ0FoQkNBSEtBSUlJUVlDUUNBRUJFQkJBU0VGSUFSQkFYRWhDQ0FFUVFGR0JIOUJBQVVnQkVGK2NTRUpRUUFoQkFOQUFuOUJBQ0FGUlEwQUdrRUFJQUVnQUNBRElBWW9BZ0FSQUFCRkRRQWFJQUVnQUNBRElBWW9BZ1FSQUFCQkFFY0xJUVVnQmtFSWFpRUdJQVJCQW1vaUJDQUpSdzBBQ3lBRlJRc2hCRUVBSUFVZ0NCc2hCUUpBSUFoRkRRQWdCQTBBSUFFZ0FDQURJQVlvQWdBUkFBQkJBRWNoQlFzZ0IwRUFOZ0lBSUFVTkFVRUFEd3NnQjBFQU5nSUFDeUFCTFFDRUFVVUVRQ0FEUVFGQmk5c0FRUUFRRTBFQUR3c2dBUzBBaFFGRkJFQWdBMEVCUWU3YUFFRUFFQk5CQUE4TElBQWdBU2dDQUNBQ0lBTVFXUUpBSUFKRkRRQWdBaWdDQUNJQVJRMEFRUUVoQkFKQUFrQUNRQUpBQWtBQ1FDQUJLQUl3UVF4ckRnMERCQVFFQlFBQkJBUUVCQVFDQkF0QkFpRUVEQVFMUVFNaEJBd0RDMEVFSVFRTUFndEJCU0VFREFFTFFYOGhCQXNnQUNBRU5nSVVJQUVvQW13aUJVVU5BQ0FBSUFVMkFod2dBaWdDQUNBQktBSndOZ0lnSUFGQkFEWUNiQXNMNGdrQ0NYOEJmaU1BUWZBQWF5SURKQUJCZ0FnaENBSi9Ba0JCQVVHQUNCQVhJZ1lFUUNBRFFkd0FhaUVMSUFOQjdBQnFJUWtEUUFKQUFrQUNRQ0FCSUFOQjZBQnFJZ1JCQ0NBQ0VCMUJDRWNOQUNBRUlBTkIyQUJxUVFRUUZTQUpJQXRCQkJBVlFRZ2hCUUpBQWtBQ1FBSkFBa0FnQXlnQ1dBNENBQUVFQ3lBQktRTUlJZ3hRQkg1Q0FBVWdEQ0FCS1FNNGZRc2lERUw0Ly8vL0QxTU5BU0FDUVFGQjNNRUFRUUFRRXd3RUN5QUJJQU5CNkFCcUlnUkJDQ0FDRUIxQkNFY05BeUFFSUFOQjVBQnFRUVFRRlNBREtBSmtSUTBCSUFKQkFVSGN3UUJCQUJBVERBTUxJQU1nREtkQkNHbzJBbGdNQVFzZ0NTQURRZGdBYWtFRUVCVkJFQ0VGQ3lBREtBSmNJZ1JCNCtUQTB3WkdCRUFnQUNnQ1pDSUJRUVJ4QkVBZ0FDQUJRUWh5TmdKa0RBSUxJQUpCQVVHaExFRUFFQk1nQmhBVVFRQU1Cd3NnQXlnQ1dDSUhSUVJBSUFKQkFVR2ZHVUVBRUJNZ0JoQVVRUUFNQndzZ0JTQUhTd1JBSUFNZ0JEWUNCQ0FESUFjMkFnQWdBa0VCUWNqc0FDQURFQk1NQmdzQ1FBSi9BbjhDUUFKL0FrQUNRQUpBQWtBQ1FDQUVRZkhZdlpzR1RBUkFJQVJCNDhiQmt3WkdEUUlnQkVIbXlwR2JCa1lOQkNBRVFmREN0WnNHUncwQlFhREZBUXdHQ3lBRVFaL0F3TklHVEFSQUlBUkI4dGk5bXdaR0RRVkJnTVVCSUFSQjhzaWh5d1pHRFFZYUlBUkI4UExSc3daSERRRkI2TVFCREFnTElBUkI4dGlOZ3dkR0RRSWdCRUdnd01EU0JrWU5Ca0h3eEFFZ0JFSG81TURUQmtZTkJ4b0xJQUFvQW1RaUJFRUJjUTBJSUFKQkFVSHBEMEVBRUJNZ0JoQVVRUUFNRHd0QmtNVUJEQU1MUVpqRkFRd0NDMEdveFFFTUFRdEJpTVVCQ3lFS0lBTWdCRUgvQVhFMkFrd2dBeUFFUVJoMk5nSkFJQU1nQkVFSWRrSC9BWEUyQWtnZ0F5QUVRUkIyUWY4QmNUWUNSQ0FDUVFKQnRnOGdBMEZBYXhBVElBY2dCV3NpQlNBQUxRQmtRUVJ4RFFJYUlBTWdBeWdDWENJRVFSaDJOZ0l3SUFNZ0JFSC9BWEUyQWp3Z0F5QUVRUkIyUWY4QmNUWUNOQ0FESUFSQkNIWkIvd0Z4TmdJNElBSkJBa0hPTkNBRFFUQnFFQk1nQUNBQUtBSmtRZi8vLy84SGNqWUNaQ0FCSUFXdElnd2dBaUFCS0FJb0VRZ0FJQXhSRFFjZ0FrRUJRZjhjUVFBUUV5QUdFQlJCQUF3S0MwSGd4QUVMSVFvZ0J5QUZhd3NoQlNBQktRTUlJZ3hRQkg1Q0FBVWdEQ0FCS1FNNGZRc2dCYTFUQkVBZ0F5Z0NXQ0VFSUFNb0Fsd2hBQ0FESUFFcEF3Z2lERkFFZmtJQUJTQU1JQUVwQXpoOUN6NENLQ0FESUFVMkFpUWdBeUFBUWY4QmNUWUNJQ0FESUFCQkdIWTJBaFFnQXlBRU5nSVFJQU1nQUVFSWRrSC9BWEUyQWh3Z0F5QUFRUkIyUWY4QmNUWUNHQ0FDUVFGQm0vb0FJQU5CRUdvUUV3d0hDeUFGSUFoTkJFQWdCaUVFREFRTElBVWhDQ0FHSUFVUUd5SUVEUU1nQmhBVUlBSkJBVUhzRUVFQUVCTkJBQXdIQ3lBRVFRSnhSUVJBSUFKQkFVR3ZFRUVBRUJNZ0JoQVVRUUFNQndzZ0FDQUVRZi8vLy84SGNqWUNaQ0FCSUFjZ0JXdXRJZ3dnQWlBQktBSW9FUWdBSUF4UkRRTWdBQzBBWkVFSWNVVU5BU0FDUVFKQi94eEJBQkFUQ3lBR0VCUkJBUXdGQ3lBQ1FRRkIveHhCQUJBVElBWVFGRUVBREFRTElBRWdCQ0FGSUFJUUhTQUZSd1JBSUFKQkFVR3hIVUVBRUJNZ0JCQVVRUUFNQkFzZ0FDQUVJZ1lnQlNBQ0lBb29BZ1FSQVFBTkFBc2dCQkFVUVFBTUFnc2dBa0VCUVpZbVFRQVFFMEVBREFFTElBWVFGRUVBQ3lBRFFmQUFhaVFBQytBQkFRWi9JQUFvQWdoQk5pQUNFQ2hGQkVCQkFBOExJQUFvQWdnaUJpZ0NBQ0VESUFZb0FnZ2hCUUpBSUFNRVFFRUJJUVFnQTBFQmNTRUhJQU5CQVVZRWYwRUFCU0FEUVg1eElRTURRQUovUVFBZ0JFVU5BQnBCQUNBQUlBRWdBaUFGS0FJQUVRQUFSUTBBR2lBQUlBRWdBaUFGS0FJRUVRQUFRUUJIQ3lFRUlBVkJDR29oQlNBSVFRSnFJZ2dnQTBjTkFBc2dCRVVMSVFOQkFDQUVJQWNiSVFRQ1FDQUhSUTBBSUFNTkFDQUFJQUVnQWlBRktBSUFFUUFBUVFCSElRUUxJQVpCQURZQ0FDQUVEUUZCQUE4TElBWkJBRFlDQUFzZ0FDZ0NBQnBCQVFzS0FDQUFLQUlBR2tFQUN5a0FBa0FnQUNnQ0FDSUFSUTBBSUFBZ0FUWUMwQUVnQVVVTkFDQUFJQUF0QUZ4QkNISTZBRndMQ3lFQUlBQW9BZ0FnQVJCY0lBQkJBRG9BZkNBQUlBRW9BcmhBUVFGeE5nS0FBUXN5QUNBQ1JRUkFRUUFQQ3lBQUtBSUFJQUVnQWlBREVGRkZCRUFnQTBFQlFaMHdRUUFRRTBFQUR3c2dBQ0FDSUFNUWZndHBBZ0ovQVh3akFFRVFheUlESkFBZ0FnUkFBMEFnQUNBRFFRaHFFRTBnQVFKL0lBTXJBd2dpQlpsRUFBQUFBQUFBNEVGakJFQWdCYW9NQVF0QmdJQ0FnSGdMTmdJQUlBRkJCR29oQVNBQVFRaHFJUUFnQkVFQmFpSUVJQUpIRFFBTEN5QURRUkJxSkFBTGhBRUNBbjhCZlNNQVFSQnJJZ01rQUNBQ0JFQURRQ0FESUFBdEFBQTZBQThnQXlBQUxRQUJPZ0FPSUFNZ0FDMEFBam9BRFNBRElBQXRBQU02QUF3Z0FRSi9JQU1xQWd3aUJZdERBQUFBVDEwRVFDQUZxQXdCQzBHQWdJQ0FlQXMyQWdBZ0FVRUVhaUVCSUFCQkJHb2hBQ0FFUVFGcUlnUWdBa2NOQUFzTElBTkJFR29rQUF0TEFRSi9Jd0JCRUdzaUF5UUFJQUlFUUFOQUlBQWdBMEVNYWtFRUVCVWdBU0FES0FJTU5nSUFJQUZCQkdvaEFTQUFRUVJxSVFBZ0JFRUJhaUlFSUFKSERRQUxDeUFEUVJCcUpBQUxTd0VDZnlNQVFSQnJJZ01rQUNBQ0JFQURRQ0FBSUFOQkRHcEJBaEFWSUFFZ0F5Z0NERFlDQUNBQlFRUnFJUUVnQUVFQ2FpRUFJQVJCQVdvaUJDQUNSdzBBQ3dzZ0EwRVFhaVFBQzBvQkFuOGpBRUVRYXlJREpBQWdBZ1JBQTBBZ0FDQURRUWhxRUUwZ0FTQURLd01JdGpnQ0FDQUJRUVJxSVFFZ0FFRUlhaUVBSUFSQkFXb2lCQ0FDUncwQUN3c2dBMEVRYWlRQUMyZ0JBbjhqQUVFUWF5SURKQUFnQWdSQUEwQWdBeUFBTFFBQU9nQVBJQU1nQUMwQUFUb0FEaUFESUFBdEFBSTZBQTBnQXlBQUxRQURPZ0FNSUFFZ0F5b0NERGdDQUNBQlFRUnFJUUVnQUVFRWFpRUFJQVJCQVdvaUJDQUNSdzBBQ3dzZ0EwRVFhaVFBQzB3QkFuOGpBRUVRYXlJREpBQWdBZ1JBQTBBZ0FDQURRUXhxUVFRUUZTQUJJQU1vQWd5ek9BSUFJQUZCQkdvaEFTQUFRUVJxSVFBZ0JFRUJhaUlFSUFKSERRQUxDeUFEUVJCcUpBQUxUQUVDZnlNQVFSQnJJZ01rQUNBQ0JFQURRQ0FBSUFOQkRHcEJBaEFWSUFFZ0F5Z0NETE00QWdBZ0FVRUVhaUVCSUFCQkFtb2hBQ0FFUVFGcUlnUWdBa2NOQUFzTElBTkJFR29rQUF1cUNBSU5md0Y3SXdCQkVHc2lDQ1FBQW44Z0FDZ0NDRUVRUmdSQUlBQW9BclFCSUFBb0F1UUJRWXdzYkdvTUFRc2dBQ2dDREFzaENRSkFJQUpGQkVBZ0EwRUJRZjRnUVFBUUV3d0JDeUFBS0FKZ0lRWkJBU0VFSUFFZ0NFRUlha0VCRUJVZ0NDZ0NDQ0lGUVFKUEJFQWdBMEVDUVp2TUFFRUFFQk1NQVFzZ0JVRUJhaUFDUndSQVFRQWhCQ0FEUVFKQi9pQkJBQkFUREFFTEFrQWdCaWdDRUNJRFJRMEFJQWtvQXRBcklRUWdBMEVJVHdSQUlBTkJlSEVoQmtFQUlRSURRQ0FFUVFBMkFyeERJQVJCQURZQ2hEc2dCRUVBTmdMTU1pQUVRUUEyQXBRcUlBUkJBRFlDM0NFZ0JFRUFOZ0trR1NBRVFRQTJBdXdRSUFSQkFEWUN0QWdnQkVIQXd3QnFJUVFnQWtFSWFpSUNJQVpIRFFBTEN5QURRUWR4SWdORkRRQkJBQ0VDQTBBZ0JFRUFOZ0swQ0NBRVFiZ0lhaUVFSUFKQkFXb2lBaUFEUncwQUN3c2dDU2dDNkNzaUFnUi9JQUlRRkNBSlFRQTJBdWdySUFnb0FnZ0ZJQVVMUlFSQVFRRWhCQXdCQ3dOQUlBRkJBV29pQVNBSVFReHFRUUVRRlFKQUlBa29Bb0FzUlEwQUlBa29BdndySWdNb0FnQWdDQ2dDREVjTkFDQURLQUlFSWdVZ0FDZ0NZQ0lHS0FJUVJ3MEFJQU1vQWdnaUFnUkFRUUFoQkNBQ0tBSVFJQVVnQld3aUJTQUNLQUlBUVFKMFFaRENBV29vQWdCc1J3MERJQWtnQlVFQ2RCQVlJZ2MyQXVncklBZEZEUU1nQWlnQ0RDQUhJQVVnQWlnQ0FFRUNkRUhBeEFGcUtBSUFFUVVBQ3lBREtBSU1JZ0pGRFFCQkFDRUVJQUlvQWhBZ0JpZ0NFQ0lESUFJb0FnQkJBblJCa01JQmFpZ0NBR3hIRFFJZ0EwRUNkQkFZSWdWRkRRSWdBaWdDRENBRklBTWdBaWdDQUVFQ2RFSFF4QUZxS0FJQUVRVUFBa0FnQmlnQ0VDSUhSUTBBSUFrb0F0QXJJUVJCQUNFTEFrQUNRQ0FIUVFSSkRRQWdCRUcwQ0dvaURDQUZJQWRCQW5ScVNRUkFJQVVnQkNBSFFiZ0liR3BKRFFFTElBUkIzQ0ZxSVEwZ0JFR2tHV29oRGlBRVFld1FhaUVQSUFVZ0IwRjhjU0lHUVFKMGFpRUNJQVFnQmtHNENHeHFJUVJCQUNFREEwQWdEQ0FEUWJnSWJDSUthaUFGSUFOQkFuUnEvUUFDQUNJUi9Wb0NBQUFnQ2lBUGFpQVIvVm9DQUFFZ0NpQU9haUFSL1ZvQ0FBSWdDaUFOYWlBUi9Wb0NBQU1nQTBFRWFpSURJQVpIRFFBTElBWWdCMFlOQWd3QkN5QUZJUUpCQUNFR0N5QUhJQVlpQTJ0QkIzRWlDZ1JBQTBBZ0JDQUNLQUlBTmdLMENDQURRUUZxSVFNZ0JFRzRDR29oQkNBQ1FRUnFJUUlnQzBFQmFpSUxJQXBIRFFBTEN5QUdJQWRyUVhoTERRQURRQ0FFSUFJb0FnQTJBclFJSUFRZ0FpZ0NCRFlDN0JBZ0JDQUNLQUlJTmdLa0dTQUVJQUlvQWd3MkF0d2hJQVFnQWlnQ0VEWUNsQ29nQkNBQ0tBSVVOZ0xNTWlBRUlBSW9BaGcyQW9RN0lBUWdBaWdDSERZQ3ZFTWdCRUhBd3dCcUlRUWdBa0VnYWlFQ0lBTkJDR29pQXlBSFJ3MEFDd3NnQlJBVUMwRUJJUVFnRUVFQmFpSVFJQWdvQWdoSkRRQUxDeUFJUVJCcUpBQWdCQXNFQUVKL0M3c0pBUXAvSXdCQkVHc2lCU1FBQW44Z0FDZ0NDRUVRUmdSQUlBQW9BclFCSUFBb0F1UUJRWXdzYkdvTUFRc2dBQ2dDREFzaEJ3Si9JQUpCQVUwRVFDQURRUUZCekNSQkFCQVRRUUFNQVFzZ0FTQUZRUXhxUVFJUUZTQUZLQUlNQkVBZ0EwRUNRZVF0UVFBUUUwRUJEQUVMSUFKQkJrMEVRQ0FEUVFGQnpDUkJBQkFUUVFBTUFRc2dBVUVDYWlBRlFRaHFRUUVRRlNBSEtBTDhLeUlKSVFBQ1FBSkFBa0FnQnlnQ2dDd2lCa1VOQUNBRktBSUlJUWdEUUNBQUtBSUFJQWhHRFFFZ0FFRVVhaUVBSUFSQkFXb2lCQ0FHUncwQUN3d0JDeUFFSUFaSERRRUxJQWNvQW9Rc0lBWkdCSDhnQnlBR1FRcHFJZ0EyQW9Rc0lBa2dBRUVVYkJBYklnQkZCRUFnQnlnQy9Dc1FGQ0FIUVFBMkFvUXNJQWRDQURjQy9Dc2dBMEVCUWVZa1FRQVFFMEVBREFNTElBY2dBRFlDL0NzZ0FDQUhLQUtBTENJRVFSUnNha0VBSUFjb0FvUXNJQVJyUVJSc0VCa2FJQWNvQXZ3cklRa2dCeWdDZ0N3RklBWUxRUlJzSUFscUlRQkJBU0VMQ3lBQUlBVW9BZ2cyQWdBZ0FVRURhaUFGUVF4cVFRSVFGU0FGS0FJTUJFQWdBMEVDUWVRdFFRQVFFMEVCREFFTElBRkJCV29nQlVFRWFrRUNFQlVnQlNnQ0JDSUVRUUpQQkVBZ0EwRUNRWlVZUVFBUUUwRUJEQUVMSUFKQkIyc2hCaUFFQkVBZ0FVRUhhaUVDUVFBaENRTkFJQVpCQWswRVFDQURRUUZCekNSQkFCQVRRUUFNQXdzZ0FpQUZRUXhxUVFFUUZTQUZLQUlNUVFGSEJFQWdBMEVDUWFZclFRQVFFMEVCREFNTElBSkJBV29nQlVFQ0VCVWdBQ0FGS0FJQUlnUkIvLzhCY1NJQk5nSUVJQVpCQTJzaUNDQUVRUTkyUVFGcUlnWWdBV3hCQW1vaUNra0VRQ0FEUVFGQnpDUkJBQkFUUVFBTUF3c2dBa0VEYWlFQ1FRQWhCQ0FCQkVBRFFDQUNJQVZCREdvZ0JoQVZJQVFnQlNnQ0RFY0VRQ0FEUVFKQnpqQkJBQkFUUVFFTUJRc2dBaUFHYWlFQ0lBUkJBV29pQkNBQUtBSUVTUTBBQ3dzZ0FpQUZRUUlRRlNBRklBVW9BZ0FpQkVILy93RnhJZ0UyQWdBZ0FDZ0NCQ0FCUndSQUlBTkJBa0hGR1VFQUVCTkJBUXdEQ3lBSUlBcHJJZ29nQkVFUGRrRUJhaUlHSUFGc1FRTnFJZ3hKQkVBZ0EwRUJRY3drUVFBUUUwRUFEQU1MSUFKQkFtb2hBa0VBSVFRZ0FRUkFBMEFnQWlBRlFReHFJQVlRRlNBRUlBVW9BZ3hIQkVBZ0EwRUNRYzR3UVFBUUUwRUJEQVVMSUFJZ0Jtb2hBaUFFUVFGcUlnUWdBQ2dDQkVrTkFBc0xJQUlnQlVFTWFrRURFQlVnQlNnQ0RDRUdJQUJDQURjQ0NDQUFJQVpCZ0lBRWNVVWdBQzBBRUVIK0FYRnlPZ0FRSUFVZ0JrSC9BWEVpQ0RZQ0NBSkFJQWhGRFFBZ0J5Z0M5Q3NpRFFSQUlBY29BdkFySVFSQkFDRUJBMEFnQ0NBRUtBSUlSZ1JBSUFBZ0JEWUNDQXdEQ3lBRVFSUnFJUVFnQVVFQmFpSUJJQTFIRFFBTEN5QURRUUZCekNSQkFCQVRRUUFNQXdzZ0JTQUdRUWgyUWY4QmNTSUdOZ0lJQWtBZ0JrVU5BQ0FIS0FMMEt5SUlCRUFnQnlnQzhDc2hCRUVBSVFFRFFDQUdJQVFvQWdoR0JFQWdBQ0FFTmdJTURBTUxJQVJCRkdvaEJDQUJRUUZxSWdFZ0NFY05BQXNMSUFOQkFVSE1KRUVBRUJOQkFBd0RDeUFLSUF4cklRWWdBa0VEYWlFQ0lBbEJBV29pQ1NBRktBSUVTUTBBQ3dzZ0JnUkFJQU5CQVVITUpFRUFFQk5CQUF3QkMwRUJJQXRGRFFBYUlBY2dCeWdDZ0N4QkFXbzJBb0FzUVFFTElBVkJFR29rQUF2MUFRRUZmeU1BUVJCcklnUWtBQUpBSUFBb0FtQW9BaEFpQmtFQ2FpQUNSd1JBSUFOQkFVSGtJMEVBRUJNTUFRc2dBU0FFUVF4cVFRSVFGU0FHSUFRb0FneEhCRUFnQTBFQlFlUWpRUUFRRXd3QkN5QUdSUVJBUVFFaEJRd0JDeUFCUVFKcUlRSWdBQ2dDWUNnQ0dDRUFRUUFoQVFOQUlBSWdCRUVJYWtFQkVCVWdBQ0FFS0FJSUlnVkIvd0J4SWdkQkFXb2lDRFlDR0NBQUlBVkJCM1pCQVhFMkFpQWdCMEVmVHdSQUlBUWdDRFlDQkNBRUlBRTJBZ0FnQTBFQlFZWDRBQ0FFRUJOQkFDRUZEQUlMSUFCQk5Hb2hBRUVCSVFVZ0FrRUJhaUVDSUFGQkFXb2lBU0FHUncwQUN3c2dCRUVRYWlRQUlBVUxsQVVCQ1g4akFFRVFheUlISkFBQ2Z5QUFLQUlJUVJCR0JFQWdBQ2dDdEFFZ0FDZ0M1QUZCakN4c2Fnd0JDeUFBS0FJTUN5RUZBbjhnQWtFQlRRUkFJQU5CQVVIL0gwRUFFQk5CQUF3QkN5QUJJQWRCREdwQkFoQVZBa0FnQnlnQ0RBUkFJQU5CQWtIekcwRUFFQk1NQVFzZ0FrRUdUUVJBSUFOQkFVSC9IMEVBRUJOQkFBd0NDeUFCUVFKcUlBZEJER3BCQWhBVklBVW9BdkFySVFRZ0J5MEFEQ0VLQWtBQ1FBSkFJQVVvQXZRcklnWkZCRUFnQkNFQURBRUxJQVFoQUFOQUlBQW9BZ2dnQ2tZTkFTQUFRUlJxSVFBZ0NFRUJhaUlJSUFaSERRQUxEQUVMSUFZZ0NFY05BUXNnQlNnQytDc2dCa1lFUUNBRklBWkJDbW9pQURZQytDc2dCQ0FBUVJSc0VCc2hBQ0FGS0FMd0t5RUVJQUJGQkVBZ0JCQVVJQVZCQURZQytDc2dCVUlBTndMd0t5QURRUUZCbVNCQkFCQVRRUUFNQkFzQ1FDQUFJQVJHRFFBZ0JTZ0NnQ3dpQzBVTkFDQUZLQUw4S3lFTVFRQWhDQU5BSUF3Z0NFRVViR29pQmlnQ0NDSUpCRUFnQmlBQUlBa2dCR3RxTmdJSUN5QUdLQUlNSWdrRVFDQUdJQUFnQ1NBRWEybzJBZ3dMSUFoQkFXb2lDQ0FMUncwQUN3c2dCU0FBTmdMd0t5QUFJQVVvQXZRcklnUkJGR3hxUVFBZ0JTZ0MrQ3NnQkd0QkZHd1FHUm9nQlNnQzlDc2hCaUFGS0FMd0t5RUVDeUFGSUFaQkFXbzJBdlFySUFRZ0JrRVViR29oQUFzZ0FDZ0NEQ0lFQkVBZ0JCQVVJQUJDQURjQ0RBc2dBQ0FLTmdJSUlBQWdCeWdDRENJRVFRcDJRUU54TmdJQUlBQWdCRUVJZGtFRGNUWUNCQ0FCUVFScUlBZEJER3BCQWhBVklBY29BZ3dFUUNBRFFRSkJxaGRCQUJBVERBRUxJQUFnQWtFR2F5SUNFQmdpQkRZQ0RDQUVSUVJBSUFOQkFVSC9IMEVBRUJOQkFBd0NDeUFFSUFGQkJtb2dBaEFXR2lBQUlBSTJBaEFMUVFFTElBZEJFR29rQUFzbkFFRUJJUUVnQUNnQ1lDZ0NFRUVDZENBQ1J3Ui9JQU5CQVVITElrRUFFQk5CQUFWQkFRc0xwd01CQkg4akFFRVFheUlHSkFBQ2Z5QUNRUUZOQkVBZ0EwRUJRZW9lUVFBUUUwRUFEQUVMSUFBdEFOUUJRUUZ4QkVBZ0EwRUJRZGZpQUVFQUVCTkJBQXdCQ3lBQUtBSzBBU0FBS0FMa0FVR01MR3hxSWdBZ0FDMEFpQ3hCQW5JNkFJZ3NJQUVnQmtFTWFrRUJFQlVDUUNBQUtBS3NLQ0lFUlFSQUlBQWdCaWdDREVFQmFpSUZRUWdRRnlJRU5nS3NLQ0FFUlFSQUlBTkJBVUdFSDBFQUVCTkJBQXdEQ3lBQUlBVTJBcWdvREFFTElBWW9BZ3dpQlNBQUtBS29LRWtOQUNBRUlBVkJBV29pQkVFRGRCQWJJZ1ZGQkVBZ0EwRUJRWVFmUVFBUUUwRUFEQUlMSUFBZ0JUWUNyQ2dnQlNBQUtBS29LQ0lIUVFOMGFrRUFJQVFnQjJ0QkEzUVFHUm9nQUNBRU5nS29LQ0FBS0FLc0tDRUVDeUFFSUFZb0Fnd2lCVUVEZEdvb0FnQUVRQ0FHSUFVMkFnQWdBMEVCUWZJMklBWVFFMEVBREFFTElBSkJBV3NpQWhBWUlRUWdBQ2dDckNnaUFDQUdLQUlNSWdWQkEzUnFJQVEyQWdBZ0JFVUVRQ0FEUVFGQmhCOUJBQkFUUVFBTUFRc2dBQ0FGUVFOMGFpQUNOZ0lFSUFBZ0JpZ0NERUVEZEdvb0FnQWdBVUVCYWlBQ0VCWWFRUUVMSUFaQkVHb2tBQXY2QWdFRWZ5TUFRUkJySWdZa0FBSi9JQUpCQVUwRVFDQURRUUZCc2lGQkFCQVRRUUFNQVFzZ0FDQUFMUURVQVVFQmNqb0ExQUVnQVNBR1FReHFRUUVRRlFKQUlBQW9Bb3dCSWdSRkJFQWdBQ0FHS0FJTVFRRnFJZ1ZCQ0JBWElnUTJBb3dCSUFSRkJFQWdBMEVCUWN3aFFRQVFFMEVBREFNTElBQWdCVFlDaUFFTUFRc2dCaWdDRENJRklBQW9Bb2dCU1EwQUlBUWdCVUVCYWlJRVFRTjBFQnNpQlVVRVFDQURRUUZCekNGQkFCQVRRUUFNQWdzZ0FDQUZOZ0tNQVNBRklBQW9Bb2dCSWdkQkEzUnFRUUFnQkNBSGEwRURkQkFaR2lBQUlBUTJBb2dCSUFBb0Fvd0JJUVFMSUFRZ0JpZ0NEQ0lGUVFOMGFpZ0NBQVJBSUFZZ0JUWUNBQ0FEUVFGQmlEY2dCaEFUUVFBTUFRc2dBa0VCYXlJQ0VCZ2hCQ0FBS0FLTUFTSUFJQVlvQWd3aUJVRURkR29nQkRZQ0FDQUVSUVJBSUFOQkFVSE1JVUVBRUJOQkFBd0JDeUFBSUFWQkEzUnFJQUkyQWdRZ0FDQUdLQUlNUVFOMGFpZ0NBQ0FCUVFGcUlBSVFGaHBCQVFzZ0JrRVFhaVFBQzV3QkFRTi9Jd0JCRUdzaUJDUUFBbjhnQWtVRVFDQURRUUZCNVI5QkFCQVRRUUFNQVFzZ0FTQUVRUXhxUVFFUUZVRUJJQUpCQVdzaUJVVU5BQnBCQUNFQVFRQWhBZ05BSUFGQkFXb2lBU0FFUVFocVFRRVFGU0FFS0FJSUlnWkJHSFJCSDNVZ0JrSC9BSEVnQW5KQkIzUnhJUUlnQUVFQmFpSUFJQVZIRFFBTFFRRWdBa1VOQUJvZ0EwRUJRZVVmUVFBUUUwRUFDeUFFUVJCcUpBQUxHd0JCQVNFQUlBSUVmMEVCQlNBRFFRRkI4aUZCQUJBVFFRQUxDOW9FQVFkL0l3QkJJR3NpQkNRQVFRRWhCUUpBSUFKQkFVMEVRRUVBSVFVZ0EwRUJRYW5PQUVFQUVCTU1BUXNnQUNnQ1RBMEFJQUVnQkVFY2FrRUJFQlVnQVVFQmFpQUVRUmhxUVFFUUZTQUVLQUlZSWdaQkJIWkJBM0VpQjBFRFJnUkFJQUJCQVRZQ1RDQURRUUpCZ2RvQVFRQVFFd3dCQ3lBQ1FRSnJJZ0lnQWlBR1FRVjJRUUp4UVFKcUlna2dCMm9pQ0c0aUJpQUliRWNFUUNBQVFRRTJBa3dnQTBFQ1FkN1dBRUVBRUJNTUFRc2dBaUFJU1EwQUFrQWdBQ2dDUkNJQ0lBWkJmM05OQkVBZ0FpQUdhaUlDUVlDQWdJQUNTUTBCQ3lBQVFRRTJBa3dnQTBFQ1FaUEpBRUVBRUJNTUFRc2dBQ2dDU0NBQ1FRTjBFQnNpQ0VVRVFDQUFRUUUyQWt3Z0EwRUNRYjdKQUVFQUVCTU1BUXNnQVVFQ2FpRUNJQUFnQ0RZQ1NBSkFJQWNFUUVFQklBWWdCa0VCVFJzaENrRUFJUVlEUUNBQ0lBUkJGR29nQnhBVklBUW9BaFFpQVNBQUtBS0VBU0FBS0FLQUFXeFBEUUlnQWlBSGFpSUJJQVJCRUdvZ0NSQVZJQWdnQUNnQ1JDSUNRUU4wYWlJRklBUW9BaFE3QVFBZ0JTQUVLQUlRTmdJRVFRRWhCU0FBSUFKQkFXbzJBa1FnQVNBSmFpRUNJQVpCQVdvaUJpQUtSdzBBQ3d3Q0MwRUJJQVlnQmtFQlRSc2hCeUFBS0FKRUlRRkJBQ0VHQTBBZ0JDQUJOZ0lVSUFFZ0FDZ0NoQUVnQUNnQ2dBRnNUdzBCSUFJZ0JFRVFhaUFKRUJVZ0NDQUFLQUpFSWdwQkEzUnFJZ1VnQVRzQkFDQUZJQVFvQWhBMkFnUkJBU0VGSUFBZ0NrRUJhaUlCTmdKRUlBSWdDV29oQWlBR1FRRnFJZ1lnQjBjTkFBc01BUXNnQUVFQk5nSk1JQVFnQVRZQ0FDQURRUUpCMGp3Z0JCQVRDeUFFUVNCcUpBQWdCUXNFQUVFQUN3dkx3UUVoQUVHQUNBdmdtUUZqWVc1dWIzUWdZV3hzYjJOaGRHVWdiM0JxWDNSalpGOXpaV2RmWkdGMFlWOWphSFZ1YTE5MEtpQmhjbkpoZVFBdEt5QWdJREJZTUhnQUxUQllLekJZSURCWUxUQjRLekI0SURCNEFGVnVhMjV2ZDI0Z1ptOXliV0YwQUVaaGFXeGxaQ0IwYnlCelpYUjFjQ0IwYUdVZ1pHVmpiMlJsY2dCR1lXbHNaV1FnZEc4Z2NtVmhaQ0IwYUdVZ2FHVmhaR1Z5QUc1aGJnQXFiRjkwYVd4bFgyeGxiaUErSUZWSlRsUmZUVUZZSUMwZ1QxQktYME5QVFUxUFRsOURRa3hMWDBSQlZFRmZSVmhVVWtFZ0xTQndYMm95YXkwK2JWOXpjR1ZqYVdacFkxOXdZWEpoYlM1dFgyUmxZMjlrWlhJdWJWOXpiM1JmYkdWdVozUm9BR2x1WmdCR1lXbHNaV1FnZEc4Z1pHVmpiMlJsSUhSb1pTQnBiV0ZuWlFCSmJuWmhiR2xrSUdGalkyVnpjeUIwYnlCd2FTMCthVzVqYkhWa1pRQXZkRzF3TDI5d1pXNXFjR1ZuTDNOeVl5OWlhVzR2WTI5dGJXOXVMMk52Ykc5eUxtTUFRVXhNWDBOUVZWTUFUMUJLWDA1VlRWOVVTRkpGUVVSVEFFNUJUZ0JQU2xCZlJFOWZUazlVWDBSSlUxQk1RVmxmVkVsTVJWOUpUa1JGV0Y5SlJsOVVURTBBU1U1R0FIQmZhakpyTFQ1dFgzTndaV05wWm1salgzQmhjbUZ0TG0xZlpHVmpiMlJsY2k1dFgzTnZkRjlzWlc1bmRHZ2dQaUJWU1U1VVgwMUJXQ0F0SUU5UVNsOURUMDFOVDA1ZlEwSk1TMTlFUVZSQlgwVllWRkpCQUFrSkNTQndjbVZqWTJsdWRITnBlbVVnS0hjc2FDazlBQWtKQ1NCemRHVndjMmw2WlhNZ0tHMHNaU2s5QUZOUFZDQnRZWEpyWlhJZ1ptOXlJSFJwYkdVZ0pYVWdaR1ZqYkdGeVpYTWdiVzl5WlNCMGFXeGxMWEJoY25SeklIUm9ZVzRnWm05MWJtUWdhVzRnVkV4TklHMWhjbXRsY2k0QUtHNTFiR3dwQUNnbFpDd2xaQ2tnQUNWemZRb0FDUWtnZlFvQVcwUkZWbDBnUkhWdGNDQmhiaUJwYldGblpWOWpiMjF3WDJobFlXUmxjaUJ6ZEhKMVkzUWdld29BVzBSRlZsMGdSSFZ0Y0NCaGJpQnBiV0ZuWlY5b1pXRmtaWElnYzNSeWRXTjBJSHNLQUVsdFlXZGxJR2x1Wm04Z2V3b0FDU0JrWldaaGRXeDBJSFJwYkdVZ2V3b0FKWE1KSUdOdmJYQnZibVZ1ZENBbFpDQjdDZ0FKQ1NCamIyMXdJQ1ZrSUhzS0FBa2dWR2xzWlNCcGJtUmxlRG9nZXdvQUNTQk5ZWEpyWlhJZ2JHbHpkRG9nZXdvQVEyOWtaWE4wY21WaGJTQnBibVJsZUNCbWNtOXRJRzFoYVc0Z2FHVmhaR1Z5T2lCN0NnQkRiMlJsYzNSeVpXRnRJR2x1Wm04Z1puSnZiU0J0WVdsdUlHaGxZV1JsY2pvZ2V3b0FVM1J5WldGdElHVnljbTl5SUhkb2FXeGxJSEpsWVdScGJtY2dTbEF5SUVobFlXUmxjaUJpYjNnS0FFWnZkVzVrSUdFZ2JXbHpjR3hoWTJWa0lDY2xZeVZqSldNbFl5Y2dZbTk0SUc5MWRITnBaR1VnYW5BeWFDQmliM2dLQUUxaGJHWnZjbTFsWkNCS1VESWdabWxzWlNCbWIzSnRZWFE2SUdacGNuTjBJR0p2ZUNCdGRYTjBJR0psSUVwUVJVY2dNakF3TUNCemFXZHVZWFIxY21VZ1ltOTRDZ0JOWVd4bWIzSnRaV1FnU2xBeUlHWnBiR1VnWm05eWJXRjBPaUJ6WldOdmJtUWdZbTk0SUcxMWMzUWdZbVVnWm1sc1pTQjBlWEJsSUdKdmVBb0FUbTkwSUdWdWIzVm5hQ0J0WlcxdmNua2dkRzhnYUdGdVpHeGxJR3B3WldjeU1EQXdJR0p2ZUFvQVRtOTBJR1Z1YjNWbmFDQnRaVzF2Y25rZ2QybDBhQ0JHVkZsUUlFSnZlQW9BUVNCdFlYSnJaWElnU1VRZ2QyRnpJR1Y0Y0dWamRHVmtJQ2d3ZUdabUxTMHBJR2x1YzNSbFlXUWdiMllnSlM0NGVBb0FDUWtnYldOMFBTVjRDZ0FKQ1FrZ1kySnNhM04wZVQwbEkzZ0tBQWtKQ1NCamMzUjVQU1VqZUFvQUNRa2djSEpuUFNVamVBb0FTVzUwWldkbGNpQnZkbVZ5Wm14dmR3b0FDU0IwWkhnOUpYVXNJSFJrZVQwbGRRb0FDU0IwZHowbGRTd2dkR2c5SlhVS0FBa2dkSGd3UFNWMUxDQjBlVEE5SlhVS0FFbHVkbUZzYVdRZ1kyOXRjRzl1Wlc1MElHbHVaR1Y0T2lBbGRRb0FVM1J5WldGdElIUnZieUJ6YUc5eWRBb0FUV0Z5YTJWeUlHaGhibVJzWlhJZ1puVnVZM1JwYjI0Z1ptRnBiR1ZrSUhSdklISmxZV1FnZEdobElHMWhjbXRsY2lCelpXZHRaVzUwQ2dCT2IzUWdaVzV2ZFdkb0lHMWxiVzl5ZVNCbWIzSWdZM1Z5Y21WdWRDQndjbVZqYVc1amRDQmpiMlJsWW14dlkyc2daV3hsYldWdWRBb0FSWEp5YjNJZ2NtVmhaR2x1WnlCVFVFTnZaQ0JUVUVOdll5QmxiR1Z0Wlc1MENnQkZjbkp2Y2lCeVpXRmthVzVuSUZOUlkyUWdiM0lnVTFGall5QmxiR1Z0Wlc1MENnQkJJRUpRUTBNZ2FHVmhaR1Z5SUdKdmVDQnBjeUJoZG1GcGJHRmliR1VnWVd4MGFHOTFaMmdnUWxCRElHZHBkbVZ1SUdKNUlIUm9aU0JKU0VSU0lHSnZlQ0FvSldRcElHbHVaR2xqWVhSbElHTnZiWEJ2Ym1WdWRITWdZbWwwSUdSbGNIUm9JR2x6SUdOdmJuTjBZVzUwQ2dCRmNuSnZjaUIzYVhSb0lGTkpXaUJ0WVhKclpYSTZJR2xzYkdWbllXd2dkR2xzWlNCdlptWnpaWFFLQUVsdWRtRnNhV1FnY0hKbFkybHVZM1FLQUU1dmRDQmxibTkxWjJnZ2JXVnRiM0o1SUhSdklHaGhibVJzWlNCaVlXNWtJSEJ5WldOcGJuUnpDZ0JHWVdsc1pXUWdkRzhnWkdWamIyUmxJR0ZzYkNCMWMyVmtJR052YlhCdmJtVnVkSE1LQUZOcGVtVWdiMllnWTI5a1pTQmliRzlqYXlCa1lYUmhJR1Y0WTJWbFpITWdjM2x6ZEdWdElHeHBiV2wwY3dvQVUybDZaU0J2WmlCMGFXeGxJR1JoZEdFZ1pYaGpaV1ZrY3lCemVYTjBaVzBnYkdsdGFYUnpDZ0JEWVc1dWIzUWdkR0ZyWlNCcGJpQmphR0Z5WjJVZ2JYVnNkR2x3YkdVZ1RVTlVJRzFoY210bGNuTUtBRU52Y25KMWNIUmxaQ0JRVUUwZ2JXRnlhMlZ5Y3dvQVRtOTBJR1Z1YjNWbmFDQnRaVzF2Y25rZ1ptOXlJSFJwYkdVZ2NtVnpiMngxZEdsdmJuTUtBRU5oYm01dmRDQjBZV3RsSUdsdUlHTm9ZWEpuWlNCdGRXeDBhWEJzWlNCamIyeHNaV04wYVc5dWN3b0FTVzUyWVd4cFpDQlFRMHhTSUdKdmVDNGdVbVZ3YjNKMGN5QXdJSEJoYkdWMGRHVWdZMjlzZFcxdWN3b0FWMlVnWkc4Z2JtOTBJSE4xY0hCdmNuUWdVazlKSUdsdUlHUmxZMjlrYVc1bklFaFVJR052WkdWaWJHOWphM01LQUVOaGJtNXZkQ0JvWVc1a2JHVWdZbTk0SUc5bUlIVnVaR1ZtYVc1bFpDQnphWHBsY3dvQVEyRnVibTkwSUhSaGEyVWdhVzRnWTJoaGNtZGxJR052Ykd4bFkzUnBiMjV6SUhkcGRHaHZkWFFnYzJGdFpTQnVkVzFpWlhJZ2IyWWdhVzVrYVhobGN3b0FTVzUyWVd4cFpDQjBhV3hsWXkwK2QybHVYM2g0ZUNCMllXeDFaWE1LQUVOaGJtNXZkQ0JvWVc1a2JHVWdZbTk0SUc5bUlHeGxjM01nZEdoaGJpQTRJR0o1ZEdWekNnQkRZVzV1YjNRZ2FHRnVaR3hsSUZoTUlHSnZlQ0J2WmlCc1pYTnpJSFJvWVc0Z01UWWdZbmwwWlhNS0FFTnZiWEJ2Ym1WdWRDQnBibVJsZUNBbGRTQjFjMlZrSUhObGRtVnlZV3dnZEdsdFpYTUtBRWx1ZG1Gc2FXUWdVRU5NVWlCaWIzZ3VJRkpsY0c5eWRITWdKV1FnWlc1MGNtbGxjd29BVG05MElHVnViM1ZuYUNCdFpXMXZjbmtnZEc4Z1kzSmxZWFJsSUZSaFp5MTBjbVZsSUc1dlpHVnpDZ0JEWVc1dWIzUWdkR0ZyWlNCcGJpQmphR0Z5WjJVZ2JXTjBJR1JoZEdFZ2QybDBhR2x1SUcxMWJIUnBjR3hsSUUxRFZDQnlaV052Y21SekNnQkRZVzV1YjNRZ1pHVmpiMlJsSUhScGJHVXNJRzFsYlc5eWVTQmxjbkp2Y2dvQWIzQnFYMm95YTE5aGNIQnNlVjl1WWw5MGFXeGxYM0JoY25SelgyTnZjbkpsWTNScGIyNGdaWEp5YjNJS0FGQnliMkpzWlcwZ2QybDBhQ0J6YTJsd2NHbHVaeUJLVUVWSE1qQXdNQ0JpYjNnc0lITjBjbVZoYlNCbGNuSnZjZ29BVUhKdllteGxiU0IzYVhSb0lISmxZV1JwYm1jZ1NsQkZSekl3TURBZ1ltOTRMQ0J6ZEhKbFlXMGdaWEp5YjNJS0FGVnVhMjV2ZDI0Z2JXRnlhMlZ5Q2dCT2IzUWdaVzV2ZFdkb0lHMWxiVzl5ZVNCMGJ5QmhaR1FnZEd3Z2JXRnlhMlZ5Q2dCT2IzUWdaVzV2ZFdkb0lHMWxiVzl5ZVNCMGJ5QmhaR1FnYldnZ2JXRnlhMlZ5Q2dCT2IzUWdaVzV2ZFdkb0lHMWxiVzl5ZVNCMGJ5QjBZV3RsSUdsdUlHTm9ZWEpuWlNCVFNWb2diV0Z5YTJWeUNnQkZjbkp2Y2lCeVpXRmthVzVuSUZCUVZDQnRZWEpyWlhJS0FFNXZkQ0JsYm05MVoyZ2diV1Z0YjNKNUlIUnZJSEpsWVdRZ1VGQlVJRzFoY210bGNnb0FSWEp5YjNJZ2NtVmhaR2x1WnlCVFQxUWdiV0Z5YTJWeUNnQkVhV1FnYm05MElHZGxkQ0JsZUhCbFkzUmxaQ0JUVDFRZ2JXRnlhMlZ5Q2dCRmNuSnZjaUJ5WldGa2FXNW5JRkJNVkNCdFlYSnJaWElLQUVWeWNtOXlJSEpsWVdScGJtY2dUVU5VSUcxaGNtdGxjZ29BVG05MElHVnViM1ZuYUNCdFpXMXZjbmtnZEc4Z2NtVmhaQ0JOUTFRZ2JXRnlhMlZ5Q2dCT2IzUWdaVzV2ZFdkb0lITndZV05sSUdadmNpQmxlSEJsWTNSbFpDQlRUMUFnYldGeWEyVnlDZ0JGZUhCbFkzUmxaQ0JUVDFBZ2JXRnlhMlZ5Q2dCRmNuSnZjaUJ5WldGa2FXNW5JRTFEVHlCdFlYSnJaWElLQUVWeWNtOXlJSEpsWVdScGJtY2dVa2RPSUcxaGNtdGxjZ29BUlhKeWIzSWdjbVZoWkdsdVp5QlFVRTBnYldGeWEyVnlDZ0JPYjNRZ1pXNXZkV2RvSUcxbGJXOXllU0IwYnlCeVpXRmtJRkJRVFNCdFlYSnJaWElLQUVWeWNtOXlJSEpsWVdScGJtY2dVRXhOSUcxaGNtdGxjZ29BUlhod1pXTjBaV1FnUlZCSUlHMWhjbXRsY2dvQVRtOTBJR1Z1YjNWbmFDQnpjR0ZqWlNCbWIzSWdjbVZ4ZFdseVpXUWdSVkJJSUcxaGNtdGxjZ29BUlhKeWIzSWdjbVZoWkdsdVp5QkRVa2NnYldGeWEyVnlDZ0JWYm10dWIzZHVJSEJ5YjJkeVpYTnphVzl1SUc5eVpHVnlJR2x1SUVOUFJDQnRZWEpyWlhJS0FGVnVhMjV2ZDI0Z1UyTnZaQ0IyWVd4MVpTQnBiaUJEVDBRZ2JXRnlhMlZ5Q2dCRmNuSnZjaUJ5WldGa2FXNW5JRU5QUkNCdFlYSnJaWElLQUVWeWNtOXlJSEpsWVdScGJtY2dVVU5FSUcxaGNtdGxjZ29BUTNKeWIzSWdjbVZoWkdsdVp5QkRRa1FnYldGeWEyVnlDZ0JGY25KdmNpQnlaV0ZrYVc1bklGQlBReUJ0WVhKclpYSUtBRVZ5Y205eUlISmxZV1JwYm1jZ1EwOURJRzFoY210bGNnb0FSWEp5YjNJZ2NtVmhaR2x1WnlCUlEwTWdiV0Z5YTJWeUNnQkZjbkp2Y2lCeVpXRmthVzVuSUUxRFF5QnRZWEpyWlhJS0FFNXZkQ0JsYm05MVoyZ2diV1Z0YjNKNUlIUnZJSEpsWVdRZ1RVTkRJRzFoY210bGNnb0FjbVZ4ZFdseVpXUWdVMGxhSUcxaGNtdGxjaUJ1YjNRZ1ptOTFibVFnYVc0Z2JXRnBiaUJvWldGa1pYSUtBSEpsY1hWcGNtVmtJRU5QUkNCdFlYSnJaWElnYm05MElHWnZkVzVrSUdsdUlHMWhhVzRnYUdWaFpHVnlDZ0J5WlhGMWFYSmxaQ0JSUTBRZ2JXRnlhMlZ5SUc1dmRDQm1iM1Z1WkNCcGJpQnRZV2x1SUdobFlXUmxjZ29BVG05MElHVnViM1ZuYUNCdFpXMXZjbmtnZEc4Z2FHRnVaR3hsSUdwd1pXY3lNREF3SUdacGJHVWdhR1ZoWkdWeUNnQk9iM1FnWlc1dmRXZG9JRzFsYlc5eWVTQjBieUJ5WldGa0lHaGxZV1JsY2dvQVJYSnliM0lnZDJsMGFDQktVQ0JUYVdkdVlYUjFjbVVnT2lCaVlXUWdiV0ZuYVdNZ2JuVnRZbVZ5Q2dCSmJpQlRUMVFnYldGeWEyVnlMQ0JVVUZOdmRDQW9KV1FwSUdseklHNXZkQ0IyWVd4cFpDQnlaV2RoY21SeklIUnZJSFJvWlNCamRYSnlaVzUwSUc1MWJXSmxjaUJ2WmlCMGFXeGxMWEJoY25RZ0tDVmtLU3dnWjJsMmFXNW5JSFZ3Q2dCSmJpQlRUMVFnYldGeWEyVnlMQ0JVVUZOdmRDQW9KV1FwSUdseklHNXZkQ0IyWVd4cFpDQnlaV2RoY21SeklIUnZJSFJvWlNCd2NtVjJhVzkxY3lCdWRXMWlaWElnYjJZZ2RHbHNaUzF3WVhKMElDZ2xaQ2tzSUdkcGRtbHVaeUIxY0FvQVNXNGdVMDlVSUcxaGNtdGxjaXdnVkZCVGIzUWdLQ1ZrS1NCcGN5QnViM1FnZG1Gc2FXUWdjbVZuWVhKa2N5QjBieUIwYUdVZ1kzVnljbVZ1ZENCdWRXMWlaWElnYjJZZ2RHbHNaUzF3WVhKMElDaG9aV0ZrWlhJcElDZ2xaQ2tzSUdkcGRtbHVaeUIxY0FvQWRHbHNaWE1nY21WeGRXbHlaU0JoZENCc1pXRnpkQ0J2Ym1VZ2NtVnpiMngxZEdsdmJnb0FUV0Z5YTJWeUlHbHpJRzV2ZENCamIyMXdiR2xoYm5RZ2QybDBhQ0JwZEhNZ2NHOXphWFJwYjI0S0FGQnliMkpzWlcwZ2QybDBhQ0J6WldWcklHWjFibU4wYVc5dUNnQkZjbkp2Y2lCeVpXRmthVzVuSUZOUVEyOWtJRk5RUTI5aklHVnNaVzFsYm5Rc0lFbHVkbUZzYVdRZ1kySnNhM2N2WTJKc2EyZ2dZMjl0WW1sdVlYUnBiMjRLQUVsdWRtRnNhV1FnYlhWc2RHbHdiR1VnWTI5dGNHOXVaVzUwSUhSeVlXNXpabTl5YldGMGFXOXVDZ0JEWVc1dWIzUWdkR0ZyWlNCcGJpQmphR0Z5WjJVZ1kyOXNiR1ZqZEdsdmJuTWdiM1JvWlhJZ2RHaGhiaUJoY25KaGVTQmtaV052Y25KbGJHRjBhVzl1Q2dCVWIyOGdiR0Z5WjJVZ2RtRnNkV1VnWm05eUlFNXdjRzBLQUU1dmRDQmxibTkxWjJnZ1lubDBaWE1nZEc4Z2NtVmhaQ0JPY0hCdENnQmlZV1FnY0d4aFkyVmtJR3B3WldjZ1kyOWtaWE4wY21WaGJRb0FDU0JOWVdsdUlHaGxZV1JsY2lCemRHRnlkQ0J3YjNOcGRHbHZiajBsYkd4cENna2dUV0ZwYmlCb1pXRmtaWElnWlc1a0lIQnZjMmwwYVc5dVBTVnNiR2tLQUUxaGNtdGxjaUJ6YVhwbElHbHVZMjl1YzJsemRHVnVkQ0IzYVhSb0lITjBjbVZoYlNCc1pXNW5kR2dLQUZScGJHVWdjR0Z5ZENCc1pXNW5kR2dnYzJsNlpTQnBibU52Ym5OcGMzUmxiblFnZDJsMGFDQnpkSEpsWVcwZ2JHVnVaM1JvQ2dCRFlXNXViM1FnZEdGclpTQnBiaUJqYUdGeVoyVWdiWFZzZEdsd2JHVWdaR0YwWVNCemNHRnVibWx1WndvQVYzSnZibWNnWm14aFp3b0FSWEp5YjNJZ2QybDBhQ0JHVkZsUUlITnBaMjVoZEhWeVpTQkNiM2dnYzJsNlpRb0FSWEp5YjNJZ2QybDBhQ0JLVUNCemFXZHVZWFIxY21VZ1FtOTRJSE5wZW1VS0FFbHVkbUZzYVdRZ2NISmxZMmx1WTNRZ2MybDZaUW9BU1c1amIyNXphWE4wWlc1MElHMWhjbXRsY2lCemFYcGxDZ0JKYm5aaGJHbGtJRzFoY210bGNpQnphWHBsQ2dCRmNuSnZjaUIzYVhSb0lGTkpXaUJ0WVhKclpYSWdjMmw2WlFvQVRtOTBJR1Z1YjNWbmFDQnRaVzF2Y25rZ2RHOGdZV1JrSUdFZ2JtVjNJSFpoYkdsa1lYUnBiMjRnY0hKdlkyVmtkWEpsQ2dCT2IzUWdaVzV2ZFdkb0lHMWxiVzl5ZVNCMGJ5QmtaV052WkdVZ2RHbHNaUW9BUm1GcGJHVmtJSFJ2SUdSbFkyOWtaU0IwYUdVZ1kyOWtaWE4wY21WaGJTQnBiaUIwYUdVZ1NsQXlJR1pwYkdVS0FFTmhibTV2ZENCMFlXdGxJR2x1SUdOb1lYSm5aU0JqYjJ4c1pXTjBhVzl1Y3lCM2FYUm9JR2x1WkdsNElITm9kV1ptYkdVS0FFTmhibTV2ZENCaGJHeHZZMkYwWlNCVWFXVnlJREVnYUdGdVpHeGxDZ0JPYnlCa1pXTnZaR1ZrSUdGeVpXRWdjR0Z5WVcxbGRHVnljeXdnYzJWMElIUm9aU0JrWldOdlpHVmtJR0Z5WldFZ2RHOGdkR2hsSUhkb2IyeGxJR2x0WVdkbENnQk9iM1FnWlc1dmRXZG9JRzFsYlc5eWVTQjBieUJqY21WaGRHVWdWR0ZuTFhSeVpXVUtBRTV2ZENCbGJtOTFaMmdnYldWdGIzSjVJSFJ2SUhKbGFXNXBkR2xoYkdsNlpTQjBhR1VnZEdGbklIUnlaV1VLQUVWeWNtOXlJSEpsWVdScGJtY2dVMUJEYjJRZ1UxQkRiMk1nWld4bGJXVnVkQ3dnU1c1MllXeHBaQ0IwY21GdWMyWnZjbTFoZEdsdmJpQm1iM1Z1WkFvQVJYSnliM0lnY21WaFpHbHVaeUJUVUVOdlpDQlRVRU52WXlCbGJHVnRaVzUwTGlCVmJuTjFjSEJ2Y25SbFpDQk5hWGhsWkNCSVZDQmpiMlJsTFdKc2IyTnJJSE4wZVd4bElHWnZkVzVrQ2dCVWFXeGxJRmtnWTI5dmNtUnBibUYwWlhNZ1lYSmxJRzV2ZENCemRYQndiM0owWldRS0FGUnBiR1VnV0NCamIyOXlaR2x1WVhSbGN5QmhjbVVnYm05MElITjFjSEJ2Y25SbFpBb0FTVzFoWjJVZ1kyOXZjbVJwYm1GMFpYTWdZV0p2ZG1VZ1NVNVVYMDFCV0NCaGNtVWdibTkwSUhOMWNIQnZjblJsWkFvQVNsQkZSekl3TURBZ1NHVmhaR1Z5SUdKdmVDQnViM1FnY21WaFpDQjVaWFFzSUNjbFl5VmpKV01sWXljZ1ltOTRJSGRwYkd3Z1ltVWdhV2R1YjNKbFpBb0FiM0JxWDJveWExOXRaWEpuWlY5d2NIUW9LU0JvWVhNZ1lXeHlaV0ZrZVNCaVpXVnVJR05oYkd4bFpBb0FiM0JxWDJveWExOWlkV2xzWkY5MGNGOXBibVJsZUY5bWNtOXRYM1JzYlNncE9pQjBhV3hsSUdsdVpHVjRJR0ZzYkc5allYUnBiMjRnWm1GcGJHVmtDZ0JPYjNRZ1pXNXZkV2RvSUcxbGJXOXllU0IwYnlCeVpXRmtJRk5QVkNCdFlYSnJaWEl1SUZScGJHVWdhVzVrWlhnZ1lXeHNiMk5oZEdsdmJpQm1ZV2xzWldRS0FFbG5ibTl5YVc1bklHbG9aSElnWW05NExpQkdhWEp6ZENCcGFHUnlJR0p2ZUNCaGJISmxZV1I1SUhKbFlXUUtBRnB3Y0hRZ0pYVWdZV3h5WldGa2VTQnlaV0ZrQ2dCYWNIQnRJQ1YxSUdGc2NtVmhaSGtnY21WaFpBb0FVRlJGVWswZ1kyaGxZMnNnWm1GcGJIVnlaVG9nSldRZ2MzbHVkR2hsYzJsNlpXUWdNSGhHUmlCdFlYSnJaWEp6SUhKbFlXUUtBQWtKQ1NCallteHJkejB5WGlWa0NnQUpDUWtnWTJKc2EyZzlNbDRsWkFvQUNRa0pJSEZ1ZEhOMGVUMGxaQW9BSlhNZ1pIZzlKV1FzSUdSNVBTVmtDZ0FKQ1FrZ2NtOXBjMmhwWm5ROUpXUUtBQWtKQ1NCdWRXMW5ZbWwwY3owbFpBb0FDUWtnYm5WdGJHRjVaWEp6UFNWa0NnQWxjeUJ1ZFcxamIyMXdjejBsWkFvQWIzQnFYMnB3TWw5aGNIQnNlVjlqWkdWbU9pQmhZMjQ5SldRc0lHNTFiV052YlhCelBTVmtDZ0J2Y0dwZmFuQXlYMkZ3Y0d4NVgyTmtaV1k2SUdOdVBTVmtMQ0J1ZFcxamIyMXdjejBsWkFvQUNRa0pJRzUxYlhKbGMyOXNkWFJwYjI1elBTVmtDZ0FKQ1NCMGVYQmxQU1VqZUN3Z2NHOXpQU1ZzYkdrc0lHeGxiajBsWkFvQUpYTWdjMmR1WkQwbFpBb0FDUWtKSUhGdFptSnBaRDBsWkFvQUpYTWdjSEpsWXowbFpBb0FDUWtnYm1JZ2IyWWdkR2xzWlMxd1lYSjBJR2x1SUhScGJHVWdXeVZrWFQwbFpBb0FKWE1nZURFOUpXUXNJSGt4UFNWa0NnQWxjeUI0TUQwbFpDd2dlVEE5SldRS0FFWmhhV3hsWkNCMGJ5QmtaV052WkdVZ2RHbHNaU0FsWkM4bFpBb0FVMlYwZEdsdVp5QmtaV052WkdsdVp5QmhjbVZoSUhSdklDVmtMQ1ZrTENWa0xDVmtDZ0JHWVdsc1pXUWdkRzhnWkdWamIyUmxJR052YlhCdmJtVnVkQ0FsWkFvQVNXNTJZV3hwWkNCMllXeDFaU0JtYjNJZ2JuVnRjbVZ6YjJ4MWRHbHZibk1nT2lBbFpDd2diV0Y0SUhaaGJIVmxJR2x6SUhObGRDQnBiaUJ2Y0dWdWFuQmxaeTVvSUdGMElDVmtDZ0JKYm5aaGJHbGtJR052YlhCdmJtVnVkQ0J1ZFcxaVpYSTZJQ1ZrTENCeVpXZGhjbVJwYm1jZ2RHaGxJRzUxYldKbGNpQnZaaUJqYjIxd2IyNWxiblJ6SUNWa0NnQlViMjhnYldGdWVTQlFUME56SUNWa0NnQnZjR3BmYWpKclgzSmxZV1JmZEd4dEtDazZJR2x1ZG1Gc2FXUWdkR2xzWlNCdWRXMWlaWElnSldRS0FFbHVkbUZzYVdRZ2RHbHNaU0J1ZFcxaVpYSWdKV1FLQUVsdWRtRnNhV1FnZEdsc1pTQndZWEowSUdsdVpHVjRJR1p2Y2lCMGFXeGxJRzUxYldKbGNpQWxaQzRnUjI5MElDVmtMQ0JsZUhCbFkzUmxaQ0FsWkFvQVJYSnliM0lnZDJsMGFDQlRTVm9nYldGeWEyVnlPaUJ1ZFcxaVpYSWdiMllnWTI5dGNHOXVaVzUwSUdseklHbHNiR1ZuWVd3Z0xUNGdKV1FLQUU1dmRDQmxibTkxWjJnZ2JXVnRiM0o1SUdadmNpQmphV1ZzWVdJS0FFTmhibTV2ZENCaGJHeHZZMkYwWlNCallteHJMVDVrWldOdlpHVmtYMlJoZEdFS0FFWmhhV3hsWkNCMGJ5QnRaWEpuWlNCUVVGUWdaR0YwWVFvQVJtRnBiR1ZrSUhSdklHMWxjbWRsSUZCUVRTQmtZWFJoQ2dCSmJuWmhiR2xrSUc1MWJXSmxjaUJ2WmlCc1lYbGxjbk1nYVc0Z1EwOUVJRzFoY210bGNpQTZJQ1ZrSUc1dmRDQnBiaUJ5WVc1blpTQmJNUzAyTlRVek5WMEtBQ1Z6T2lWa09tTnZiRzl5WDJOdGVXdGZkRzlmY21kaUNnbERRVTRnVGs5VUlFTlBUbFpGVWxRS0FDVnpPaVZrT21OdmJHOXlYMlZ6ZVdOalgzUnZYM0puWWdvSlEwRk9JRTVQVkNCRFQwNVdSVkpVQ2dBbGN6b2xaRHBqYjJ4dmNsOXplV05qWDNSdlgzSm5ZZ29KUTBGT0lFNVBWQ0JEVDA1V1JWSlVDZ0JUZEhKbFlXMGdkRzl2SUhOb2IzSjBMQ0JsZUhCbFkzUmxaQ0JUVDFRS0FGVnVZV0pzWlNCMGJ5QnpaWFFnZERFZ2FHRnVaR3hsSUdGeklGUk1Vd29BVTI5MElHeGxibWQwYUNCcGN5QnNaWE56SUhSb1lXNGdiV0Z5YTJWeUlITnBlbVVnS3lCdFlYSnJaWElnU1VRS0FGTjBjbVZoYlNCa2IyVnpJRzV2ZENCbGJtUWdkMmwwYUNCRlQwTUtBRU5oYm01dmRDQm9ZVzVrYkdVZ1ltOTRJSE5wZW1WeklHaHBaMmhsY2lCMGFHRnVJREplTXpJS0FHOXdhbDl3YVY5dVpYaDBYMnh5WTNBb0tUb2dhVzUyWVd4cFpDQmpiMjF3Ym04d0wyTnZiWEJ1YnpFS0FHOXdhbDl3YVY5dVpYaDBYM0pzWTNBb0tUb2dhVzUyWVd4cFpDQmpiMjF3Ym04d0wyTnZiWEJ1YnpFS0FHOXdhbDl3YVY5dVpYaDBYMk53Y213b0tUb2dhVzUyWVd4cFpDQmpiMjF3Ym04d0wyTnZiWEJ1YnpFS0FHOXdhbDl3YVY5dVpYaDBYM0JqY213b0tUb2dhVzUyWVd4cFpDQmpiMjF3Ym04d0wyTnZiWEJ1YnpFS0FHOXdhbDl3YVY5dVpYaDBYM0p3WTJ3b0tUb2dhVzUyWVd4cFpDQmpiMjF3Ym04d0wyTnZiWEJ1YnpFS0FHOXdhbDkwTVY5a1pXTnZaR1ZmWTJKc2F5Z3BPaUIxYm5OMWNIQnZjblJsWkNCaWNHNXZYM0JzZFhOZmIyNWxJRDBnSldRZ1BqMGdNekVLQUVaaGFXeGxaQ0IwYnlCa1pXTnZaR1VnZEdsc1pTQXhMekVLQUVsdWMzVm1abWxqYVdWdWRDQmtZWFJoSUdadmNpQkRUVUZRSUdKdmVDNEtBRTVsWldRZ2RHOGdjbVZoWkNCaElGQkRURklnWW05NElHSmxabTl5WlNCMGFHVWdRMDFCVUNCaWIzZ3VDZ0JKYm5OMVptWnBZMmxsYm5RZ1pHRjBZU0JtYjNJZ1EwUkZSaUJpYjNndUNnQk9kVzFpWlhJZ2IyWWdZMmhoYm01bGJDQmtaWE5qY21sd2RHbHZiaUJwY3lCbGNYVmhiQ0IwYnlCNlpYSnZJR2x1SUVORVJVWWdZbTk0TGdvQVUzUnlaV0Z0SUdWeWNtOXlJSGRvYVd4bElISmxZV1JwYm1jZ1NsQXlJRWhsWVdSbGNpQmliM2c2SUc1dklDZHBhR1J5SnlCaWIzZ3VDZ0JPYjI0Z1kyOXVabTl5YldGdWRDQmpiMlJsYzNSeVpXRnRJRlJRYzI5MFBUMVVUbk52ZEM0S0FGTjBjbVZoYlNCbGNuSnZjaUIzYUdsc1pTQnlaV0ZrYVc1bklFcFFNaUJJWldGa1pYSWdZbTk0T2lCaWIzZ2diR1Z1WjNSb0lHbHpJR2x1WTI5dWMybHpkR1Z1ZEM0S0FFSnZlQ0JzWlc1bmRHZ2dhWE1nYVc1amIyNXphWE4wWlc1MExnb0FVbVZ6YjJ4MWRHbHZiaUJtWVdOMGIzSWdhWE1nWjNKbFlYUmxjaUIwYUdGdUlIUm9aU0J0WVhocGJYVnRJSEpsYzI5c2RYUnBiMjRnYVc0Z2RHaGxJR052YlhCdmJtVnVkQzRLQUVOdmJYQnZibVZ1ZENCdFlYQndhVzVuSUhObFpXMXpJSGR5YjI1bkxpQlVjbmxwYm1jZ2RHOGdZMjl5Y21WamRDNEtBRzl3YWw5cU1tdGZZblZwYkdSZmRIQmZhVzVrWlhoZlpuSnZiVjkwYkcwb0tUb2dkR2xzWlNBbFpDQm9ZWE1nYm04Z2NtVm5hWE4wWlhKbFpDQjBhV3hsTFhCaGNuUWdhVzRnVkV4TklHMWhjbXRsY2lCelpXZHRaVzUwY3k0S0FHOXdhbDlxTW10ZmNtVmhaRjkwYkcwb0tUb2dkRzl2SUcxaGJua2dWRXhOSUcxaGNtdGxjbk11Q2dCdmNHcGZhakpyWDNKbFlXUmZkR3h0S0NrNklHTmhibTV2ZENCaGJHeHZZMkYwWlNCdFgzUnBiR1ZmY0dGeWRGOXBibVp2Y3k0S0FFbHVZMjl0Y0d4bGRHVWdZMmhoYm01bGJDQmtaV1pwYm1sMGFXOXVjeTRLQUUxaGJHWnZjbTFsWkNCSVZDQmpiMlJsWW14dlkyc3VJRWx1ZG1Gc2FXUWdZMjlrWldKc2IyTnJJR3hsYm1kMGFDQjJZV3gxWlhNdUNnQlhaU0JrYnlCdWIzUWdjM1Z3Y0c5eWRDQnRiM0psSUhSb1lXNGdNeUJqYjJScGJtY2djR0Z6YzJWeklHbHVJR0Z1SUVoVUlHTnZaR1ZpYkc5amF6c2dWR2hwY3lCamIyUmxZbXh2WTJ0eklHaGhjeUFsWkNCd1lYTnpaWE11Q2dCTllXeG1iM0p0WldRZ1NGUWdZMjlrWldKc2IyTnJMaUJFWldOdlpHbHVaeUIwYUdseklHTnZaR1ZpYkc5amF5QnBjeUJ6ZEc5d2NHVmtMaUJVYUdWeVpTQmhjbVVnSldRZ2VtVnlieUJpYVhSd2JHRnVaWE1nYVc0Z0pXUWdZbWwwY0d4aGJtVnpMZ29BUTJGdWJtOTBJSFJoYTJVZ2FXNGdZMmhoY21kbElHMTFiSFJwY0d4bElIUnlZVzV6Wm05eWJXRjBhVzl1SUhOMFlXZGxjeTRLQUZWdWEyNXZkMjRnYldGeWEyVnlJR2hoY3lCaVpXVnVJR1JsZEdWamRHVmtJR0Z1WkNCblpXNWxjbUYwWldRZ1pYSnliM0l1Q2dCRGIyUmxZeUJ3Y205MmFXUmxaQ0IwYnlCMGFHVWdiM0JxWDNObGRIVndYMlJsWTI5a1pYSWdablZ1WTNScGIyNGdhWE1nYm05MElHRWdaR1ZqYjIxd2NtVnpjMjl5SUdoaGJtUnNaWEl1Q2dCRGIyUmxZeUJ3Y205MmFXUmxaQ0IwYnlCMGFHVWdiM0JxWDNKbFlXUmZhR1ZoWkdWeUlHWjFibU4wYVc5dUlHbHpJRzV2ZENCaElHUmxZMjl0Y0hKbGMzTnZjaUJvWVc1a2JHVnlMZ29BUlhKeWIzSWdjbVZoWkdsdVp5QlVURTBnYldGeWEyVnlMZ29BVkdsc1pYTWdaRzl1SjNRZ1lXeHNJR2hoZG1VZ2RHaGxJSE5oYldVZ1pHbHRaVzV6YVc5dUxpQlRhMmx3SUhSb1pTQk5RMVFnYzNSbGNDNEtBRTUxYldKbGNpQnZaaUJqYjIxd2IyNWxiblJ6SUNnbFpDa2dhWE1nYVc1amIyNXphWE4wWlc1MElIZHBkR2dnWVNCTlExUXVJRk5yYVhBZ2RHaGxJRTFEVkNCemRHVndMZ29BU2xBeUlHSnZlQ0IzYUdsamFDQmhjbVVnWVdaMFpYSWdkR2hsSUdOdlpHVnpkSEpsWVcwZ2QybHNiQ0J1YjNRZ1ltVWdjbVZoWkNCaWVTQjBhR2x6SUdaMWJtTjBhVzl1TGdvQVRXRnNabTl5YldWa0lFaFVJR052WkdWaWJHOWpheTRnVjJobGJpQjBhR1VnYm5WdFltVnlJRzltSUhwbGNtOGdjR3hoYm1WeklHSnBkSEJzWVc1bGN5QnBjeUJsY1hWaGJDQjBieUIwYUdVZ2JuVnRZbVZ5SUc5bUlHSnBkSEJzWVc1bGN5d2diMjVzZVNCMGFHVWdZMnhsWVc1MWNDQndZWE56SUcxaGEyVnpJSE5sYm5ObExDQmlkWFFnZDJVZ2FHRjJaU0FsWkNCd1lYTnpaWE1nYVc0Z2RHaHBjeUJqYjJSbFlteHZZMnN1SUZSb1pYSmxabTl5WlN3Z2IyNXNlU0IwYUdVZ1kyeGxZVzUxY0NCd1lYTnpJSGRwYkd3Z1ltVWdaR1ZqYjJSbFpDNGdWR2hwY3lCdFpYTnpZV2RsSUhkcGJHd2dibTkwSUdKbElHUnBjM0JzWVhsbFpDQmhaMkZwYmk0S0FFbHRZV2RsSUdoaGN5QnNaWE56SUdOdmJYQnZibVZ1ZEhNZ2RHaGhiaUJqYjJSbGMzUnlaV0Z0TGdvQVRtVmxaQ0IwYnlCa1pXTnZaR1VnZEdobElHMWhhVzRnYUdWaFpHVnlJR0psWm05eVpTQmlaV2RwYmlCMGJ5QmtaV052WkdVZ2RHaGxJSEpsYldGcGJtbHVaeUJqYjJSbGMzUnlaV0Z0TGdvQVVITnZkQ0IyWVd4MVpTQnZaaUIwYUdVZ1kzVnljbVZ1ZENCMGFXeGxMWEJoY25RZ2FYTWdaWEYxWVd3Z2RHOGdlbVZ5Ynl3Z2QyVWdZWE56ZFcxcGJtY2dhWFFnYVhNZ2RHaGxJR3hoYzNRZ2RHbHNaUzF3WVhKMElHOW1JSFJvWlNCamIyUmxjM1J5WldGdExnb0FRU0J0WVd4bWIzSnRaV1FnWTI5a1pXSnNiMk5ySUhSb1lYUWdhR0Z6SUcxdmNtVWdkR2hoYmlCdmJtVWdZMjlrYVc1bklIQmhjM01zSUdKMWRDQjZaWEp2SUd4bGJtZDBhQ0JtYjNJZ01tNWtJR0Z1WkNCd2IzUmxiblJwWVd4c2VTQjBhR1VnTTNKa0lIQmhjM01nYVc0Z1lXNGdTRlFnWTI5a1pXSnNiMk5yTGdvQUNRa0pJSFJwYkdVdGNHRnlkRnNsWkYwNklITjBZWEpmY0c5elBTVnNiR2tzSUdWdVpGOW9aV0ZrWlhJOUpXeHNhU3dnWlc1a1gzQnZjejBsYkd4cExnb0FWR2xzWlNBbGRTQm9ZWE1nVkZCemIzUWdQVDBnTUNCaGJtUWdWRTV6YjNRZ1BUMGdNQ3dnWW5WMElHNXZJRzkwYUdWeUlIUnBiR1V0Y0dGeWRITWdkMlZ5WlNCbWIzVnVaQzRnUlU5RElHbHpJR0ZzYzI4Z2JXbHpjMmx1Wnk0S0FFTnZiWEJ2Ym1WdWRDQWxaQ0JrYjJWemJpZDBJR2hoZG1VZ1lTQnRZWEJ3YVc1bkxnb0FiM0JxWDJveWExOXlaV0ZrWDNSc2JTZ3BPaUJVVEUwZ2JXRnlhMlZ5SUc1dmRDQnZaaUJsZUhCbFkzUmxaQ0J6YVhwbExnb0FRU0JqYjI1bWIzSnRhVzVuSUVwUU1pQnlaV0ZrWlhJZ2MyaGhiR3dnYVdkdWIzSmxJR0ZzYkNCRGIyeHZkWElnVTNCbFkybG1hV05oZEdsdmJpQmliM2hsY3lCaFpuUmxjaUIwYUdVZ1ptbHljM1FzSUhOdklIZGxJR2xuYm05eVpTQjBhR2x6SUc5dVpTNEtBRlJvWlNCemFXZHVZWFIxY21VZ1ltOTRJRzExYzNRZ1ltVWdkR2hsSUdacGNuTjBJR0p2ZUNCcGJpQjBhR1VnWm1sc1pTNEtBRlJvWlNBZ1ltOTRJRzExYzNRZ1ltVWdkR2hsSUdacGNuTjBJR0p2ZUNCcGJpQjBhR1VnWm1sc1pTNEtBRlJvWlNCbWRIbHdJR0p2ZUNCdGRYTjBJR0psSUhSb1pTQnpaV052Ym1RZ1ltOTRJR2x1SUhSb1pTQm1hV3hsTGdvQVJtRnBiR1ZrSUhSdklHUmxZMjlrWlM0S0FFMWhiR1p2Y20xbFpDQklWQ0JqYjJSbFlteHZZMnN1SUVsdVkyOXljbVZqZENCTlJVd2djMlZuYldWdWRDQnpaWEYxWlc1alpTNEtBRU52YlhCdmJtVnVkQ0FsWkNCcGN5QnRZWEJ3WldRZ2RIZHBZMlV1Q2dCdmNHcGZhakpyWDNKbFlXUmZkR3h0S0NrNklGTlVJRDBnTXlCcGN5QnBiblpoYkdsa0xnb0FUMjVzZVNCdmJtVWdRMDFCVUNCaWIzZ2dhWE1nWVd4c2IzZGxaQzRLQUZkbElHNWxaV1FnWVc0Z2FXMWhaMlVnY0hKbGRtbHZkWE5zZVNCamNtVmhkR1ZrTGdvQVNVaEVVaUJpYjNoZmJXbHpjMmx1Wnk0Z1VtVnhkV2x5WldRdUNnQktVREpJSUdKdmVDQnRhWE56YVc1bkxpQlNaWEYxYVhKbFpDNEtBRTV2ZENCemRYSmxJR2h2ZHlCMGFHRjBJR2hoY0hCbGJtVmtMZ29BVFdGcGJpQm9aV0ZrWlhJZ2FHRnpJR0psWlc0Z1kyOXljbVZqZEd4NUlHUmxZMjlrWldRdUNnQlVhV3hsSUNWa0x5VmtJR2hoY3lCaVpXVnVJR1JsWTI5a1pXUXVDZ0JJWldGa1pYSWdiMllnZEdsc1pTQWxaQ0F2SUNWa0lHaGhjeUJpWldWdUlISmxZV1F1Q2dCRmJYQjBlU0JUVDFRZ2JXRnlhMlZ5SUdSbGRHVmpkR1ZrT2lCUWMyOTBQU1ZrTGdvQVJHbHlaV04wSUhWelpTQmhkQ0FqSldRZ2FHOTNaWFpsY2lCd1kyOXNQU1ZrTGdvQVNXMXdiR1Z0Wlc1MFlYUnBiMjRnYkdsdGFYUmhkR2x2YmpvZ1ptOXlJSEJoYkdWMGRHVWdiV0Z3Y0dsdVp5d2djR052YkZzbFpGMGdjMmh2ZFd4a0lHSmxJR1Z4ZFdGc0lIUnZJQ1ZrTENCaWRYUWdhWE1nWlhGMVlXd2dkRzhnSldRdUNnQkpiblpoYkdsa0lHTnZiWEJ2Ym1WdWRDOXdZV3hsZEhSbElHbHVaR1Y0SUdadmNpQmthWEpsWTNRZ2JXRndjR2x1WnlBbFpDNEtBRWx1ZG1Gc2FXUWdkbUZzZFdVZ1ptOXlJR050WVhCYkpXUmRMbTEwZVhBZ1BTQWxaQzRLQUZCemIzUWdkbUZzZFdVZ2FYTWdibTkwSUdOdmNuSmxZM1FnY21WbllYSmtjeUIwYnlCMGFHVWdTbEJGUnpJd01EQWdibTl5YlRvZ0pXUXVDZ0JOWVd4bWIzSnRaV1FnU0ZRZ1kyOWtaV0pzYjJOckxpQldURU1nWTI5a1pTQndjbTlrZFdObGN5QnphV2R1YVdacFkyRnVkQ0J6WVcxd2JHVnpJRzkxZEhOcFpHVWdkR2hsSUdOdlpHVmliRzlqYXlCaGNtVmhMZ29BVlc1bGVIQmxZM1JsWkNCUFQwMHVDZ0F6TWlCaWFYUnpJR0Z5WlNCdWIzUWdaVzV2ZFdkb0lIUnZJR1JsWTI5a1pTQjBhR2x6SUdOdlpHVmliRzlqYXl3Z2MybHVZMlVnZEdobElHNTFiV0psY2lCdlppQmlhWFJ3YkdGdVpTd2dKV1FzSUdseklHeGhjbWRsY2lCMGFHRnVJRE13TGdvQVFtOTBkRzl0SUhCdmMybDBhVzl1SUc5bUlIUm9aU0JrWldOdlpHVmtJR0Z5WldFZ0tISmxaMmx2Ymw5NU1UMGxaQ2tnYzJodmRXeGtJR0psSUQ0Z01DNEtBRkpwWjJoMElIQnZjMmwwYVc5dUlHOW1JSFJvWlNCa1pXTnZaR1ZrSUdGeVpXRWdLSEpsWjJsdmJsOTRNVDBsWkNrZ2MyaHZkV3hrSUdKbElENGdNQzRLQUZWd0lIQnZjMmwwYVc5dUlHOW1JSFJvWlNCa1pXTnZaR1ZrSUdGeVpXRWdLSEpsWjJsdmJsOTVNRDBsWkNrZ2MyaHZkV3hrSUdKbElENDlJREF1Q2dCTVpXWjBJSEJ2YzJsMGFXOXVJRzltSUhSb1pTQmtaV052WkdWa0lHRnlaV0VnS0hKbFoybHZibDk0TUQwbFpDa2djMmh2ZFd4a0lHSmxJRDQ5SURBdUNnQkZjbkp2Y2lCeVpXRmthVzVuSUZCUVZDQnRZWEpyWlhJNklIQmhZMnRsZENCb1pXRmtaWElnYUdGMlpTQmlaV1Z1SUhCeVpYWnBiM1Z6YkhrZ1ptOTFibVFnYVc0Z2RHaGxJRzFoYVc0Z2FHVmhaR1Z5SUNoUVVFMGdiV0Z5YTJWeUtTNEtBRk4wWVhKMElIUnZJSEpsWVdRZ2FqSnJJRzFoYVc0Z2FHVmhaR1Z5SUNnbGJHeGtLUzRLQUVKdmRIUnZiU0J3YjNOcGRHbHZiaUJ2WmlCMGFHVWdaR1ZqYjJSbFpDQmhjbVZoSUNoeVpXZHBiMjVmZVRFOUpXUXBJR2x6SUc5MWRITnBaR1VnZEdobElHbHRZV2RsSUdGeVpXRWdLRmx6YVhvOUpXUXBMZ29BVlhBZ2NHOXphWFJwYjI0Z2IyWWdkR2hsSUdSbFkyOWtaV1FnWVhKbFlTQW9jbVZuYVc5dVgza3dQU1ZrS1NCcGN5QnZkWFJ6YVdSbElIUm9aU0JwYldGblpTQmhjbVZoSUNoWmMybDZQU1ZrS1M0S0FGSnBaMmgwSUhCdmMybDBhVzl1SUc5bUlIUm9aU0JrWldOdlpHVmtJR0Z5WldFZ0tISmxaMmx2Ymw5NE1UMGxaQ2tnYVhNZ2IzVjBjMmxrWlNCMGFHVWdhVzFoWjJVZ1lYSmxZU0FvV0hOcGVqMGxaQ2t1Q2dCTVpXWjBJSEJ2YzJsMGFXOXVJRzltSUhSb1pTQmtaV052WkdWa0lHRnlaV0VnS0hKbFoybHZibDk0TUQwbFpDa2dhWE1nYjNWMGMybGtaU0IwYUdVZ2FXMWhaMlVnWVhKbFlTQW9XSE5wZWowbFpDa3VDZ0JDYjNSMGIyMGdjRzl6YVhScGIyNGdiMllnZEdobElHUmxZMjlrWldRZ1lYSmxZU0FvY21WbmFXOXVYM2t4UFNWa0tTQnBjeUJ2ZFhSemFXUmxJSFJvWlNCcGJXRm5aU0JoY21WaElDaFpUM05wZWowbFpDa3VDZ0JWY0NCd2IzTnBkR2x2YmlCdlppQjBhR1VnWkdWamIyUmxaQ0JoY21WaElDaHlaV2RwYjI1ZmVUQTlKV1FwSUdseklHOTFkSE5wWkdVZ2RHaGxJR2x0WVdkbElHRnlaV0VnS0ZsUGMybDZQU1ZrS1M0S0FGSnBaMmgwSUhCdmMybDBhVzl1SUc5bUlIUm9aU0JrWldOdlpHVmtJR0Z5WldFZ0tISmxaMmx2Ymw5NE1UMGxaQ2tnYVhNZ2IzVjBjMmxrWlNCMGFHVWdhVzFoWjJVZ1lYSmxZU0FvV0U5emFYbzlKV1FwTGdvQVRHVm1kQ0J3YjNOcGRHbHZiaUJ2WmlCMGFHVWdaR1ZqYjJSbFpDQmhjbVZoSUNoeVpXZHBiMjVmZURBOUpXUXBJR2x6SUc5MWRITnBaR1VnZEdobElHbHRZV2RsSUdGeVpXRWdLRmhQYzJsNlBTVmtLUzRLQUZOcGVtVWdlQ0J2WmlCMGFHVWdaR1ZqYjJSbFpDQmpiMjF3YjI1bGJuUWdhVzFoWjJVZ2FYTWdhVzVqYjNKeVpXTjBJQ2hqYjIxd1d5VmtYUzUzUFNWa0tTNEtBRk5wZW1VZ2VTQnZaaUIwYUdVZ1pHVmpiMlJsWkNCamIyMXdiMjVsYm5RZ2FXMWhaMlVnYVhNZ2FXNWpiM0p5WldOMElDaGpiMjF3V3lWa1hTNW9QU1ZrS1M0S0FGUnBiR1VnY21WaFpDd2daR1ZqYjJSbFpDQmhibVFnZFhCa1lYUmxaQ0JwY3lCdWIzUWdkR2hsSUdSbGMybHlaV1FnYjI1bElDZ2xaQ0IyY3lBbFpDa3VDZ0JKYm5aaGJHbGtJR052YlhCdmJtVnVkQ0JwYm1SbGVDQWxaQ0FvUGowZ0pXUXBMZ29BYjNCcVgzSmxZV1JmYUdWaFpHVnlLQ2tnYzJodmRXeGtJR0psSUdOaGJHeGxaQ0JpWldadmNtVWdiM0JxWDNObGRGOWtaV052WkdWa1gyTnZiWEJ2Ym1WdWRITW9LUzRLQUUxbGJXOXllU0JoYkd4dlkyRjBhVzl1SUdaaGFXeDFjbVVnYVc0Z2IzQnFYMnB3TWw5aGNIQnNlVjl3WTJ4eUtDa3VDZ0JwYldGblpTMCtZMjl0Y0hOYkpXUmRMbVJoZEdFZ1BUMGdUbFZNVENCcGJpQnZjR3BmYW5BeVgyRndjR3g1WDNCamJISW9LUzRLQUdsdWRtRnNhV1FnWW05NElITnBlbVVnSldRZ0tDVjRLUW9BUm1GcGJDQjBieUJ5WldGa0lIUm9aU0JqZFhKeVpXNTBJRzFoY210bGNpQnpaV2R0Wlc1MElDZ2xJM2dwQ2dCRmNuSnZjaUIzYVhSb0lGTkpXaUJ0WVhKclpYSTZJRWxJUkZJZ2R5Z2xkU2tnYUNnbGRTa2dkbk11SUZOSldpQjNLQ1YxS1NCb0tDVjFLUW9BUlhKeWIzSWdjbVZoWkdsdVp5QkRUME1nYldGeWEyVnlJQ2hpWVdRZ2JuVnRZbVZ5SUc5bUlHTnZiWEJ2Ym1WdWRITXBDZ0JKYm5aaGJHbGtJRzUxYldKbGNpQnZaaUIwYVd4bGN5QTZJQ1YxSUhnZ0pYVWdLRzFoZUdsdGRXMGdabWw0WldRZ1lua2dhbkJsWnpJd01EQWdibTl5YlNCcGN5QTJOVFV6TlNCMGFXeGxjeWtLQUVsdWRtRnNhV1FnYm5WdFltVnlJRzltSUdOdmJYQnZibVZ1ZEhNZ0tHbG9aSElwQ2dCT2IzUWdaVzV2ZFdkb0lHMWxiVzl5ZVNCMGJ5Qm9ZVzVrYkdVZ2FXMWhaMlVnYUdWaFpHVnlJQ2hwYUdSeUtRb0FWM0p2Ym1jZ2RtRnNkV1Z6SUdadmNqb2dkeWdsWkNrZ2FDZ2xaQ2tnYm5WdFkyOXRjSE1vSldRcElDaHBhR1J5S1FvQVNXNTJZV3hwWkNCMllXeDFaWE1nWm05eUlHTnZiWEFnUFNBbFpDQTZJR1I0UFNWMUlHUjVQU1YxSUNoemFHOTFiR1FnWW1VZ1ltVjBkMlZsYmlBeElHRnVaQ0F5TlRVZ1lXTmpiM0prYVc1bklIUnZJSFJvWlNCS1VFVkhNakF3TUNCdWIzSnRLUW9BUW1Ga0lHbHRZV2RsSUdobFlXUmxjaUJpYjNnZ0tHSmhaQ0J6YVhwbEtRb0FRbUZrSUVOUFRGSWdhR1ZoWkdWeUlHSnZlQ0FvWW1Ga0lITnBlbVVwQ2dCQ1lXUWdRbEJEUXlCb1pXRmtaWElnWW05NElDaGlZV1FnYzJsNlpTa0tBRVZ5Y205eUlIZHBkR2dnVTBsYUlHMWhjbXRsY2pvZ2JtVm5ZWFJwZG1VZ2IzSWdlbVZ5YnlCcGJXRm5aU0J6YVhwbElDZ2xiR3hrSUhnZ0pXeHNaQ2tLQUhOcmFYQTZJSE5sWjIxbGJuUWdkRzl2SUd4dmJtY2dLQ1ZrS1NCM2FYUm9JRzFoZUNBb0pXUXBJR1p2Y2lCamIyUmxZbXh2WTJzZ0pXUWdLSEE5SldRc0lHSTlKV1FzSUhJOUpXUXNJR005SldRcENnQnlaV0ZrT2lCelpXZHRaVzUwSUhSdmJ5QnNiMjVuSUNnbFpDa2dkMmwwYUNCdFlYZ2dLQ1ZrS1NCbWIzSWdZMjlrWldKc2IyTnJJQ1ZrSUNod1BTVmtMQ0JpUFNWa0xDQnlQU1ZrTENCalBTVmtLUW9BUkdWemNHbDBaU0JLVURJZ1FsQkRJVDB5TlRVc0lIQnlaV05wYzJsdmJpQmhibVF2YjNJZ2MyZHVaQ0IyWVd4MVpYTWdabTl5SUdOdmJYQmJKV1JkSUdseklHUnBabVpsY21WdWRDQjBhR0Z1SUdOdmJYQmJNRjA2Q2lBZ0lDQWdJQ0FnV3pCZElIQnlaV01vSldRcElITm5ibVFvSldRcElGc2xaRjBnY0hKbFl5Z2xaQ2tnYzJkdVpDZ2xaQ2tLQUdKaFpDQmpiMjF3YjI1bGJuUWdiblZ0WW1WeUlHbHVJRkpIVGlBb0pXUWdkMmhsYmlCMGFHVnlaU0JoY21VZ2IyNXNlU0FsWkNrS0FFVnljbTl5SUhkcGRHZ2dVMGxhSUcxaGNtdGxjam9nYm5WdFltVnlJRzltSUdOdmJYQnZibVZ1ZENCcGN5QnViM1FnWTI5dGNHRjBhV0pzWlNCM2FYUm9JSFJvWlNCeVpXMWhhVzVwYm1jZ2JuVnRZbVZ5SUc5bUlIQmhjbUZ0WlhSbGNuTWdLQ0FsWkNCMmN5QWxaQ2tLQUVWeWNtOXlJSGRwZEdnZ1UwbGFJRzFoY210bGNqb2dhVzUyWVd4cFpDQjBhV3hsSUhOcGVtVWdLSFJrZURvZ0pXUXNJSFJrZVRvZ0pXUXBDZ0JDWVdRZ1EwOU1VaUJvWldGa1pYSWdZbTk0SUNoaVlXUWdjMmw2WlRvZ0pXUXBDZ0JDWVdRZ1EwOU1VaUJvWldGa1pYSWdZbTk0SUNoRFNVVk1ZV0lzSUdKaFpDQnphWHBsT2lBbFpDa0tBRkJVUlZKTklHTm9aV05ySUdaaGFXeDFjbVU2SUNWa0lISmxiV0ZwYm1sdVp5QmllWFJsY3lCcGJpQmpiMlJsSUdKc2IyTnJJQ2dsWkNCMWMyVmtJQzhnSldRcENnQk5ZV3htYjNKdFpXUWdTRlFnWTI5a1pXSnNiMk5yTGlCUGJtVWdiMllnZEdobElHWnZiR3h2ZDJsdVp5QmpiMjVrYVhScGIyNGdhWE1nYm05MElHMWxkRG9nTWlBOFBTQlRZM1Z3SUR3OUlHMXBiaWhNWTNWd0xDQTBNRGM1S1FvQVNXNTJZV3hwWkNCMllXeDFaWE1nWm05eUlHTnZiWEFnUFNBbFpDQTZJSEJ5WldNOUpYVWdLSE5vYjNWc1pDQmlaU0JpWlhSM1pXVnVJREVnWVc1a0lETTRJR0ZqWTI5eVpHbHVaeUIwYnlCMGFHVWdTbEJGUnpJd01EQWdibTl5YlM0Z1QzQmxia3B3WldjZ2IyNXNlU0J6ZFhCd2IzSjBjeUIxY0NCMGJ5QXpNU2tLQUVsdWRtRnNhV1FnWW1sMElHNTFiV0psY2lBbFpDQnBiaUJ2Y0dwZmRESmZjbVZoWkY5d1lXTnJaWFJmYUdWaFpHVnlLQ2tLQUZOMGNtVmhiU0JsY25KdmNpRUtBRVZ5Y205eUlHOXVJSGR5YVhScGJtY2djM1J5WldGdElRb0FVM1J5WldGdElISmxZV05vWldRZ2FYUnpJR1Z1WkNBaENnQkZlSEJsWTNSbFpDQmhJRk5QUXlCdFlYSnJaWElnQ2dCSmJuWmhiR2xrSUdKdmVDQnphWHBsSUNWa0lHWnZjaUJpYjNnZ0p5VmpKV01sWXlWakp5NGdUbVZsWkNBbFpDQmllWFJsY3l3Z0pXUWdZbmwwWlhNZ2NtVnRZV2x1YVc1bklBb0FUV0ZzWm05eWJXVmtJRWhVSUdOdlpHVmliRzlqYXk0Z1JHVmpiMlJwYm1jZ2RHaHBjeUJqYjJSbFlteHZZMnNnYVhNZ2MzUnZjSEJsWkM0Z1ZWOXhJR2x6SUd4aGNtZGxjaUIwYUdGdUlIcGxjbThnWW1sMGNHeGhibVZ6SUNzZ01TQUtBRTFoYkdadmNtMWxaQ0JJVkNCamIyUmxZbXh2WTJzdUlFUmxZMjlrYVc1bklIUm9hWE1nWTI5a1pXSnNiMk5ySUdseklITjBiM0J3WldRdUlGVmZjU0JwYzJ4aGNtZGxjaUIwYUdGdUlHSnBkSEJzWVc1bGN5QXJJREVnQ2dCRFQweFNJRUpQV0NCdFpYUm9JSFpoYkhWbElHbHpJRzV2ZENCaElISmxaM1ZzWVhJZ2RtRnNkV1VnS0NWa0tTd2djMjhnZDJVZ2QybHNiQ0JwWjI1dmNtVWdkR2hsSUdWdWRHbHlaU0JEYjJ4dmRYSWdVM0JsWTJsbWFXTmhkR2x2YmlCaWIzZ3VJQW9BVjJocGJHVWdjbVZoWkdsdVp5QkRRMUJmVVU1VVUxUlpJR1ZzWlcxbGJuUWdhVzV6YVdSbElGRkRSQ0J2Y2lCUlEwTWdiV0Z5YTJWeUlITmxaMjFsYm5Rc0lHNTFiV0psY2lCdlppQnpkV0ppWVc1a2N5QW9KV1FwSUdseklHZHlaV0YwWlhJZ2RHOGdUMUJLWDBveVMxOU5RVmhDUVU1RVV5QW9KV1FwTGlCVGJ5QjNaU0JzYVcxcGRDQjBhR1VnYm5WdFltVnlJRzltSUdWc1pXMWxiblJ6SUhOMGIzSmxaQ0IwYnlCUFVFcGZTakpMWDAxQldFSkJUa1JUSUNnbFpDa2dZVzVrSUhOcmFYQWdkR2hsSUhKbGMzUXVJQW9BU2xBeUlFbElSRklnWW05NE9pQmpiMjF3Y21WemMybHZiaUIwZVhCbElHbHVaR2xqWVhSbElIUm9ZWFFnZEdobElHWnBiR1VnYVhNZ2JtOTBJR0VnWTI5dVptOXliV2x1WnlCS1VESWdabWxzWlNBb0pXUXBJQW9BVkdsc1pTQnBibVJsZUNCd2NtOTJhV1JsWkNCaWVTQjBhR1VnZFhObGNpQnBjeUJwYm1OdmNuSmxZM1FnSldRZ0tHMWhlQ0E5SUNWa0tTQUtBRVZ5Y205eUlHUmxZMjlrYVc1bklHTnZiWEJ2Ym1WdWRDQWxaQzRLVkdobElHNTFiV0psY2lCdlppQnlaWE52YkhWMGFXOXVjeUIwYnlCeVpXMXZkbVVnS0NWa0tTQnBjeUJuY21WaGRHVnlJRzl5SUdWeGRXRnNJSFJvWVc0Z2RHaGxJRzUxYldKbGNpQnZaaUJ5WlhOdmJIVjBhVzl1Y3lCdlppQjBhR2x6SUdOdmJYQnZibVZ1ZENBb0pXUXBDazF2WkdsbWVTQjBhR1VnWTNCZmNtVmtkV05sSUhCaGNtRnRaWFJsY2k0S0NnQkpiV0ZuWlNCa1lYUmhJR2hoY3lCaVpXVnVJSFZ3WkdGMFpXUWdkMmwwYUNCMGFXeGxJQ1ZrTGdvS0FDTUFwUUJEQUdZQWd3RHVxQlFBMzlnakFMNFFRd0QvOVlNQWZpQlZBRjlSSXdBMUFFTUFUa1NEQU03RUZBRFB6Q01BL3VKREFQK1pnd0NXQU1VQVB6RWpBS1VBUXdCZVJJTUF6c2dVQU44Ukl3RCs5RU1BLy95REFKNEFWUUIzQUNNQU5RQkRBUC94Z3dDdWlCUUF0d0FqQVA3NFF3RHY1SU1Bam9qRkFCOFJJd0NsQUVNQVpnQ0RBTzZvRkFEZlZDTUF2aEJEQU84aWd3QitJRlVBZnlJakFEVUFRd0JPUklNQXpzUVVBTDhSSXdEKzRrTUE5d0NEQUpZQXhRQS9JaU1BcFFCREFGNUVnd0RPeUJRQTF3QWpBUDcwUXdEL3VvTUFuZ0JWQUc4QUl3QTFBRU1BLythREFLNklGQUN2b2lNQS92aERBT2NBZ3dDT2lNVUFMeUlDQU1VQWhBQitJQUlBenNRa0FQY0FBZ0Qrb2tRQVZnQUNBSjRBRkFEWEFBSUF2aENFQUdZQUFnQ3VpQ1FBM3hFQ0FPNm9SQUEyQUFJQWpvZ1VBQjhSQWdERkFJUUFiZ0FDQU02SUpBRC9pQUlBL3JoRUFFNUVBZ0NXQUJRQXR3QUNBUDdraEFCZVJBSUFwZ0FrQU9jQUFnRGVWRVFBTGlJQ0FENEFGQUIzQUFJQXhRQ0VBSDRnQWdET3hDUUEvL0VDQVA2aVJBQldBQUlBbmdBVUFMOFJBZ0MrRUlRQVpnQUNBSzZJSkFEdklnSUE3cWhFQURZQUFnQ09pQlFBZnlJQ0FNVUFoQUJ1QUFJQXpvZ2tBTy9rQWdEK3VFUUFUa1FDQUpZQUZBQ3ZvZ0lBL3VTRUFGNUVBZ0NtQUNRQTM5Z0NBTjVVUkFBdUlnSUFQZ0FVQUY5UkFnQlZBSVFBWmdBQ0FONklKQUQvTWdJQS9oRkVBRTVFQWdDdUFCUUF0d0FDQUg0eGhBQmVVUUlBeGdBa0FOY0FBZ0R1SUVRQUhoRUNBSjRBRkFCM0FBSUFWUUNFQUY1VUFnRE9SQ1FBNXdBQ0FQN3hSQUEyQUFJQXBnQVVBRjlWQWdEK2RJUUFQaEVDQUw0Z0pBQi9kQUlBM3NSRUFQLzRBZ0NXQUJRQUx5SUNBRlVBaEFCbUFBSUEzb2drQVBjQUFnRCtFVVFBVGtRQ0FLNEFGQUNQaUFJQWZqR0VBRjVSQWdER0FDUUF6OGdDQU80Z1JBQWVFUUlBbmdBVUFHOEFBZ0JWQUlRQVhsUUNBTTVFSkFEZjBRSUEvdkZFQURZQUFnQ21BQlFBZnlJQ0FQNTBoQUErRVFJQXZpQWtBTDhpQWdEZXhFUUE3eUlDQUpZQUZBQS9NZ01BM3RUOTlQLzhGQUErRVZVQWo0Z0RBTDR5aFFEbkFDVUFYbEgrcW45eUF3RE9SUDM0NzBRVUFINWtSUUN2b2dNQXBnQmRWZCtaL2ZFMkFQNzFiMklEQU43Ui9mVC81aFFBZm5GVkFMK3hBd0N1aUlVQTM5VWxBRTVFL3ZKL1pnTUF4Z0Q5K08vaUZBQmVWRVVBbnhFREFKWUFYVlhQeVAzeEhoSHV5R2NBQXdEZTFQMzAvL01VQUQ0UlZRQy9FUU1BdmpLRkFOL1lKUUJlVWY2cUx5SURBTTVFL2ZqM0FCUUFmbVJGQUorWUF3Q21BRjFWMXdEOThUWUEvdlZ2UkFNQTN0SDk5UCs1RkFCK2NWVUF0d0FEQUs2SWhRRGYzQ1VBVGtUKzhuY0FBd0RHQVAzNDcrUVVBRjVVUlFCL2N3TUFsZ0JkVmIrNC9mRWVFZTdJUHpJQ0FLVUFoQUIrUUFJQTNoQWtBTjhSQWdEK2NrUUFWZ0FDQUs2b0ZBQy9zZ0lBbGdDRUFHWUFBZ0RHQUNRQTV3QUNBTzdJUkFBdUlnSUFqb2dVQUhjQUFnQ2xBSVFBYmdBQ0FNNklKQUQzQUFJQS9wRkVBRFlBQWdDdW9oUUFyNm9DQVA2NGhBQmVBQUlBdmdBa0FNL0VBZ0R1UkVRQS8vUUNBRDRpRkFBZkVRSUFwUUNFQUg1QUFnRGVFQ1FBLzVrQ0FQNXlSQUJXQUFJQXJxZ1VBTGNBQWdDV0FJUUFaZ0FDQU1ZQUpBRFhBQUlBN3NoRUFDNGlBZ0NPaUJRQVQwUUNBS1VBaEFCdUFBSUF6b2drQU8vaUFnRCtrVVFBTmdBQ0FLNmlGQUIvUkFJQS9yaUVBRjRBQWdDK0FDUUFud0FDQU81RVJBRC9kZ0lBUGlJVUFEOHhBd0RHQUlVQS85bjk4bjVrL3ZHL21RTUFycUlsQU85bS9mUldBTzdpZjNNREFMNllSUUQzQVAzNFpnRCtkcCtJQXdDT2lCVUEzOVdsQUM0aTNwaFBSQU1BdnJLRkFQLzgvZkp1SXBZQXR3QURBSzZxSlFEZjBmMzBOZ0RlMUc5a0F3Q3VxRVVBNytyOStGNUU3dWgvY1FNQVBqSVZBTS9FcFFELytzNklQekVEQU1ZQWhRRC9kLzN5Zm1UKzhiK3pBd0N1b2lVQTV3RDk5RllBN3VKM0FBTUF2cGhGQU8vay9maG1BUDUyZjJZREFJNklGUURYQUtVQUxpTGVtRDh6QXdDK3NvVUEvM1g5OG00aWxnQ2ZrUU1BcnFvbEFOK1ovZlEyQU43VVgxRURBSzZvUlFEdjdQMzRYa1R1Nkg5eUF3QStNaFVBdjdHbEFQL3p6b2dmRVFNQTNsVDk4aDRSRkFCK1pQNzR6OHdEQUw2UlJRRHZJaVVBTGlMKzg0K0lBd0RHQUlVQTl3QVVBRjRSL3Z5dnFBTUFwZ0ExQU4vSS9mRStNZjVtYjJRREFNN0kvZkwvOVJRQVpnRCs5TCs2QXdDdUlrVUE1d0FsQUQ0eS91cC9jd01BdnJLRkFOOVZGQUJXQUg1eG54RURBSllBTlFEUHhQM3hQalB1NkU5RUF3RGVWUDN5SGhFVUFINWsvdmkvbVFNQXZwRkZBTy9pSlFBdUl2N3pmMllEQU1ZQWhRRHY1QlFBWGhIKy9KK1lBd0NtQURVQTF3RDk4VDR4L21adklnTUF6c2o5OHYrNUZBQm1BUDcwdHdBREFLNGlSUURmMFNVQVBqTCs2bmNBQXdDK3NvVUE3K3dVQUZZQWZuRi9jZ01BbGdBMUFMKzQvZkUrTSs3b1gxVDg4ZDdSL2ZyWEFQejRGZ0Q5LzM5MC9QUitjZjN6djdQODh1L3E3dWhQUlB6eHJpSUZBTCs0L1BqM0FQNzhkd0Q4OUY0Ui9mVi9kZnp5MzlqdTRqOHovUEcrc3YzNno0ajgrUC83L2Y5L2MvejBiZ0Q5ODdjQS9QTHZadjc1UHpIODhaNEFCUUMvdXZ6NC8vMys5bWNBL1BRbUFQMzFqNGo4OHQvYzN0UXZJdnp4M3RIOStzL0UvUGdXQVAzL2YzTDg5SDV4L2ZPL21menk3K3p1NkVjQS9QR3VJZ1VBcHdEOCtQLzMvdnhYQVB6MFhoSDk5WmNBL1BMZjFlN2lOd0Q4OGI2eS9mckhBUHo0Ly83OS8zOW0vUFJ1QVAzenI2ajg4dWNBL3ZrL012enhuZ0FGQUwreC9QanY1UDcyWDFUODlDWUEvZldIQVB6eTM1bmUxQjhSRXdCbEFFTUEzZ0NEQUkySUl3Qk9SQk1BcFFCREFLNklnd0ExQUNNQTF3QVRBTVVBUXdDZUFJTUFWUUFqQUM0aUV3Q1ZBRU1BZmdDREFQNFFJd0IzQUJNQVpRQkRBTTZJZ3dDTmlDTUFIaEVUQUtVQVF3QmVBSU1BTlFBakFPY0FFd0RGQUVNQXZnQ0RBRlVBSXdEL0VSTUFsUUJEQUQ0QWd3RHVRQ01BcjZJVEFHVUFRd0RlQUlNQWpZZ2pBRTVFRXdDbEFFTUFyb2lEQURVQUl3RHZSQk1BeFFCREFKNEFnd0JWQUNNQUxpSVRBSlVBUXdCK0FJTUEvaEFqQUxjQUV3QmxBRU1Bem9pREFJMklJd0FlRVJNQXBRQkRBRjRBZ3dBMUFDTUF6OFFUQU1VQVF3QytBSU1BVlFBakFQY0FFd0NWQUVNQVBnQ0RBTzVBSXdCdkFBRUFoQUFCQUZZQUFRQVVBQUVBMXdBQkFDUUFBUUNXQUFFQVJRQUJBSGNBQVFDRUFBRUF4Z0FCQUJRQUFRQ1BpQUVBSkFBQkFQY0FBUUExQUFFQUx5SUJBSVFBQVFEK1FBRUFGQUFCQUxjQUFRQWtBQUVBdndBQkFFVUFBUUJuQUFFQWhBQUJBS1lBQVFBVUFBRUFUMFFCQUNRQUFRRG5BQUVBTlFBQkFEOFJBUUNFQUFFQVZnQUJBQlFBQVFEUEFBRUFKQUFCQUpZQUFRQkZBQUVBYndBQkFJUUFBUURHQUFFQUZBQUJBSjhBQVFBa0FBRUE3d0FCQURVQUFRQS9NZ0VBaEFBQkFQNUFBUUFVQUFFQXJ3QUJBQ1FBQVFEL1JBRUFSUUFCQUY4QUFRQ0VBQUVBcGdBQkFCUUFBUUIvQUFFQUpBQUJBTjhBQVFBMUFBRUFIeEVCQUNRQUFRQldBQUVBaFFBQkFMOEFBUUFVQUFFQTl3QUJBTVlBQVFCM0FBRUFKQUFCQVAvNEFRQkZBQUVBZndBQkFCUUFBUURmQUFFQXBnQUJBRDh4QVFBa0FBRUFMaUlCQUlVQUFRQzNBQUVBRkFBQkFPOUVBUUN1b2dFQVp3QUJBQ1FBQVFEL1VRRUFSUUFCQUpjQUFRQVVBQUVBendBQkFEWUFBUUEvSWdFQUpBQUJBRllBQVFDRkFBRUF2N0lCQUJRQUFRRHZRQUVBeGdBQkFHOEFBUUFrQUFFQS8zSUJBRVVBQVFDZkFBRUFGQUFCQU5jQUFRQ21BQUVBVDBRQkFDUUFBUUF1SWdFQWhRQUJBSytvQVFBVUFBRUE1d0FCQUs2aUFRQmZBQUVBSkFBQkFQOUVBUUJGQUFFQWo0Z0JBQlFBQVFDdnFnRUFOZ0FCQUI4UkFnRCsrQ1FBVmdBQ0FMWUFoUUQvWmdJQXpnQVVBQjRSQWdDV0FEVUFyNmdDQVBZQUpBQStNUUlBcGdCRkFMK3pBZ0Mrc2hRQS8vVUNBR1lBZmxGZlZBSUEvdklrQUM0aUFnQ3VJb1VBNzBRQ0FNWUFGQUQvOUFJQWRnQTFBSDlFQWdEZVFDUUFQaklDQUo0QVJRRFhBQUlBdm9nVUFQLzZBZ0JlRWY3eFQwUUNBUDc0SkFCV0FBSUF0Z0NGQU8vSUFnRE9BQlFBSGhFQ0FKWUFOUUNQaUFJQTlnQWtBRDR4QWdDbUFFVUEzMFFDQUw2eUZBRC9xQUlBWmdCK1VXOEFBZ0QrOGlRQUxpSUNBSzRpaFFEbkFBSUF4Z0FVQU8vaUFnQjJBRFVBZjNJQ0FONUFKQUErTWdJQW5nQkZBTCt4QWdDK2lCUUEvM01DQUY0Ui92RS9Nd0VBaEFBQkFPNGdBUURGQUFFQXo4UUJBRVFBQVFEL01nRUFGUUFCQUkrSUFRQ0VBQUVBWmdBQkFDVUFBUUN2QUFFQVJBQUJBTzhpQVFDbUFBRUFYd0FCQUlRQUFRQk9SQUVBeFFBQkFNL01BUUJFQUFFQTl3QUJBQlVBQVFCdkFBRUFoQUFCQUZZQUFRQWxBQUVBbndBQkFFUUFBUURmQUFFQS9qQUJBQzhpQVFDRUFBRUE3aUFCQU1VQUFRRFB5QUVBUkFBQkFQOFJBUUFWQUFFQWR3QUJBSVFBQVFCbUFBRUFKUUFCQUg4QUFRQkVBQUVBNXdBQkFLWUFBUUEzQUFFQWhBQUJBRTVFQVFERkFBRUF0d0FCQUVRQUFRQy9BQUVBRlFBQkFEOEFBUUNFQUFFQVZnQUJBQ1VBQVFDWEFBRUFSQUFCQU5jQUFRRCtNQUVBSHhFQ0FPNm9SQUNPaUFJQTFnREZBUC96QWdEKy9DVUFQZ0FDQUxZQVZRRGYyQUlBL3ZoRUFHWUFBZ0IrSUlVQS81a0NBT1lBOVFBMkFBSUFwZ0FWQUo4QUFnRCs4a1FBZGdBQ0FNNUV4UUQvZGdJQS92RWxBRTVFQWdDdUFGVUF6OGdDQVA3MFJBQmVSQUlBdmhDRkFPL2tBZ0RlVlBVQUhoRUNBSllBRlFBdklnSUE3cWhFQUk2SUFnRFdBTVVBLy9vQ0FQNzhKUUErQUFJQXRnQlZBTDhSQWdEKytFUUFaZ0FDQUg0Z2hRRHZJZ0lBNWdEMUFEWUFBZ0NtQUJVQWZ5SUNBUDd5UkFCMkFBSUF6a1RGQVAvVkFnRCs4U1VBVGtRQ0FLNEFWUUJ2QUFJQS92UkVBRjVFQWdDK0VJVUEzeEVDQU41VTlRQWVFUUlBbGdBVkFGOVJBd0QyQUJRQUhoRkVBSTZJcFFEZjFBTUFycUpWQVA5MkpBQStJcllBcjZvREFPWUFGQUQvOVVRQVpnQ0ZBTS9NQXdDZUFNVUE3MFFrQURZQS92aC9NUU1BN3VnVUFQL3hSQUIyQUtVQXo4UURBSDRpVlFEZjBTUUFUa1QrOUY5UkF3RFdBQlFBNytKRUFGNUVoUUMvSWdNQWxnREZBTi9JSkFBdUl2N3lieUlEQVBZQUZBQWVFVVFBam9pbEFMK3hBd0N1b2xVQS96TWtBRDRpdGdDdnFBTUE1Z0FVQVArNVJBQm1BSVVBdjZnREFKNEF4UUR2NUNRQU5nRCsrRzlrQXdEdTZCUUEvL3hFQUhZQXBRRFB5QU1BZmlKVkFPL3FKQUJPUlA3MGYzUURBTllBRkFELytrUUFYa1NGQUwreUF3Q1dBTVVBMzBRa0FDNGkvdkkvTWZNQS92cjk4VFlBQkFDK01uVUEzeEh6QU41VS9mTHY1TlVBZm5IKy9IOXo4d0QrOC8zNEhoRUVBSllBVlFDL3NmTUF6Z0MxQU4vWS9mUm1BUDY1WDFUekFQNTIvZkVtQUFRQXBnQjFBSjhBOHdDdUFQM3kvL2ZWQUVZQS92Vi9kUE1BNWdEOStCWUFCQUNHQUZVQWo0anpBTVlBdFFEdjR2MzBYaEh1cUQ4Ujh3RCsrdjN4TmdBRUFMNHlkUURmMGZNQTNsVDk4di83MVFCK2NmNzhmMFR6QVA3ei9mZ2VFUVFBbGdCVkFIOXk4d0RPQUxVQTd5TDk5R1lBL3JsUFJQTUEvbmI5OFNZQUJBQ21BSFVBdnhIekFLNEEvZkwvLzlVQVJnRCs5VDh5OHdEbUFQMzRGZ0FFQUlZQVZRQnZBUE1BeGdDMUFMKzQvZlJlRWU2b0x5SUFRZXloQVF1a0hnRUFBQUFCQUFBQUFRQUFBQUlBQUFBQ0FBQUFBZ0FBQUFNQUFBQURBQUFBQkFBQUFBVUFBQUMzSVVJaFp5RkNJUkVSRVJFek16TXpkM2QzZHdBQUFBQUFBQUFBQVZZQUFBQUFBQUJRVVFBQVlGRUFBQUZXQUFBQkFBQUFZRkVBQUZCUkFBQUJOQUFBQUFBQUFIQlJBQUR3VVFBQUFUUUFBQUVBQUFDQVVRQUFBRklBQUFFWUFBQUFBQUFBa0ZFQUFGQlNBQUFCR0FBQUFRQUFBS0JSQUFCZ1VnQUF3UW9BQUFBQUFBQ3dVUUFBc0ZJQUFNRUtBQUFCQUFBQXdGRUFBTUJTQUFBaEJRQUFBQUFBQU5CUkFBRFFWQUFBSVFVQUFBRUFBQURnVVFBQTRGUUFBQ0VDQUFBQUFBQUE4RlVBQUZCVkFBQWhBZ0FBQVFBQUFBQldBQUJnVlFBQUFWWUFBQUFBQUFBUVVnQUFBRklBQUFGV0FBQUJBQUFBSUZJQUFQQlJBQUFCVkFBQUFBQUFBREJTQUFEd1VnQUFBVlFBQUFFQUFBQkFVZ0FBQUZNQUFBRklBQUFBQUFBQVVGSUFBUEJTQUFBQlNBQUFBUUFBQUdCU0FBQUFVd0FBQVRnQUFBQUFBQUJ3VWdBQThGSUFBQUU0QUFBQkFBQUFnRklBQUFCVEFBQUJNQUFBQUFBQUFKQlNBQUJRVXdBQUFUQUFBQUVBQUFDZ1VnQUFZRk1BQUFFa0FBQUFBQUFBc0ZJQUFIQlRBQUFCSkFBQUFRQUFBTUJTQUFDQVV3QUFBUndBQUFBQUFBRFFVZ0FBc0ZNQUFBRWNBQUFCQUFBQTRGSUFBTUJUQUFBQkZnQUFBQUFBQU5CVUFBRFFVd0FBQVJZQUFBRUFBQURnVkFBQTRGTUFBQUZXQUFBQUFBQUFFRk1BQUFCVEFBQUJWZ0FBQVFBQUFDQlRBQUR3VWdBQUFWUUFBQUFBQUFBd1V3QUE4RklBQUFGVUFBQUJBQUFBUUZNQUFBQlRBQUFCVVFBQUFBQUFBRkJUQUFBUVV3QUFBVkVBQUFFQUFBQmdVd0FBSUZNQUFBRklBQUFBQUFBQWNGTUFBREJUQUFBQlNBQUFBUUFBQUlCVEFBQkFVd0FBQVRnQUFBQUFBQUNRVXdBQVVGTUFBQUU0QUFBQkFBQUFvRk1BQUdCVEFBQUJOQUFBQUFBQUFMQlRBQUJ3VXdBQUFUUUFBQUVBQUFEQVV3QUFnRk1BQUFFd0FBQUFBQUFBMEZNQUFKQlRBQUFCTUFBQUFRQUFBT0JUQUFDZ1V3QUFBU2dBQUFBQUFBRHdVd0FBa0ZNQUFBRW9BQUFCQUFBQUFGUUFBS0JUQUFBQkpBQUFBQUFBQUJCVUFBQ3dVd0FBQVNRQUFBRUFBQUFnVkFBQXdGTUFBQUVpQUFBQUFBQUFNRlFBQU5CVEFBQUJJZ0FBQVFBQUFFQlVBQURnVXdBQUFSd0FBQUFBQUFCUVZBQUE4Rk1BQUFFY0FBQUJBQUFBWUZRQUFBQlVBQUFCR0FBQUFBQUFBSEJVQUFBUVZBQUFBUmdBQUFFQUFBQ0FWQUFBSUZRQUFBRVdBQUFBQUFBQWtGUUFBREJVQUFBQkZnQUFBUUFBQUtCVUFBQkFWQUFBQVJRQUFBQUFBQUN3VkFBQVVGUUFBQUVVQUFBQkFBQUF3RlFBQUdCVUFBQUJFZ0FBQUFBQUFOQlVBQUJ3VkFBQUFSSUFBQUVBQUFEZ1ZBQUFnRlFBQUFFUkFBQUFBQUFBOEZRQUFKQlVBQUFCRVFBQUFRQUFBQUJWQUFDZ1ZBQUF3UW9BQUFBQUFBQVFWUUFBc0ZRQUFNRUtBQUFCQUFBQUlGVUFBTUJVQUFEQkNRQUFBQUFBQURCVkFBRFFWQUFBd1FrQUFBRUFBQUJBVlFBQTRGUUFBS0VJQUFBQUFBQUFVRlVBQVBCVUFBQ2hDQUFBQVFBQUFHQlZBQUFBVlFBQUlRVUFBQUFBQUFCd1ZRQUFFRlVBQUNFRkFBQUJBQUFBZ0ZVQUFDQlZBQUJCQkFBQUFBQUFBSkJWQUFBd1ZRQUFRUVFBQUFFQUFBQ2dWUUFBUUZVQUFLRUNBQUFBQUFBQXNGVUFBRkJWQUFDaEFnQUFBUUFBQU1CVkFBQmdWUUFBSVFJQUFBQUFBQURRVlFBQWNGVUFBQ0VDQUFBQkFBQUE0RlVBQUlCVkFBQkJBUUFBQUFBQUFQQlZBQUNRVlFBQVFRRUFBQUVBQUFBQVZnQUFvRlVBQUJFQkFBQUFBQUFBRUZZQUFMQlZBQUFSQVFBQUFRQUFBQ0JXQUFEQVZRQUFoUUFBQUFBQUFBQXdWZ0FBMEZVQUFJVUFBQUFCQUFBQVFGWUFBT0JWQUFCSkFBQUFBQUFBQUZCV0FBRHdWUUFBU1FBQUFBRUFBQUJnVmdBQUFGWUFBQ1VBQUFBQUFBQUFjRllBQUJCV0FBQWxBQUFBQVFBQUFJQldBQUFnVmdBQUZRQUFBQUFBQUFDUVZnQUFNRllBQUJVQUFBQUJBQUFBb0ZZQUFFQldBQUFKQUFBQUFBQUFBTEJXQUFCUVZnQUFDUUFBQUFFQUFBREFWZ0FBWUZZQUFBVUFBQUFBQUFBQTBGWUFBSEJXQUFBRkFBQUFBUUFBQU9CV0FBQ0FWZ0FBQVFBQUFBQUFBQURRVmdBQWtGWUFBQUVBQUFBQkFBQUE0RllBQUtCV0FBQUJWZ0FBQUFBQUFQQldBQUR3VmdBQUFWWUFBQUVBQUFBQVZ3QUFBRmNBQUFBQkF3TUJBZ01EQlFZSEJ3WUdCd2NBQVFNREFRSURBd1VHQndjR0JnY0hCUVlIQndZR0J3Y0lDQWdJQ0FnSUNBVUdCd2NHQmdjSENBZ0lDQWdJQ0FnQkFnTURBZ0lEQXdZR0J3Y0dCZ2NIQVFJREF3SUNBd01HQmdjSEJnWUhCd1lHQndjR0JnY0hDQWdJQ0FnSUNBZ0dCZ2NIQmdZSEJ3Z0lDQWdJQ0FnSUF3TUVCQU1EQkFRSEJ3Y0hCd2NIQndNREJBUURBd1FFQndjSEJ3Y0hCd2NIQndjSEJ3Y0hCd2dJQ0FnSUNBZ0lCd2NIQndjSEJ3Y0lDQWdJQ0FnSUNBTURCQVFEQXdRRUJ3Y0hCd2NIQndjREF3UUVBd01FQkFjSEJ3Y0hCd2NIQndjSEJ3Y0hCd2NJQ0FnSUNBZ0lDQWNIQndjSEJ3Y0hDQWdJQ0FnSUNBZ0JBZ01EQWdJREF3WUdCd2NHQmdjSEFRSURBd0lDQXdNR0JnY0hCZ1lIQndZR0J3Y0dCZ2NIQ0FnSUNBZ0lDQWdHQmdjSEJnWUhCd2dJQ0FnSUNBZ0lBZ0lEQXdJQ0F3TUdCZ2NIQmdZSEJ3SUNBd01DQWdNREJnWUhCd1lHQndjR0JnY0hCZ1lIQndnSUNBZ0lDQWdJQmdZSEJ3WUdCd2NJQ0FnSUNBZ0lDQU1EQkFRREF3UUVCd2NIQndjSEJ3Y0RBd1FFQXdNRUJBY0hCd2NIQndjSEJ3Y0hCd2NIQndjSUNBZ0lDQWdJQ0FjSEJ3Y0hCd2NIQ0FnSUNBZ0lDQWdEQXdRRUF3TUVCQWNIQndjSEJ3Y0hBd01FQkFNREJBUUhCd2NIQndjSEJ3Y0hCd2NIQndjSENBZ0lDQWdJQ0FnSEJ3Y0hCd2NIQndnSUNBZ0lDQWdJQUFFRkJnRUNCZ1lEQXdjSEF3TUhCd0FCQlFZQkFnWUdBd01IQndNREJ3Y0RBd2NIQXdNSEJ3UUVCd2NFQkFjSEF3TUhCd01EQndjRUJBY0hCQVFIQndFQ0JnWUNBZ1lHQXdNSEJ3TURCd2NCQWdZR0FnSUdCZ01EQndjREF3Y0hBd01IQndNREJ3Y0VCQWNIQkFRSEJ3TURCd2NEQXdjSEJBUUhCd1FFQndjRkJnZ0lCZ1lJQ0FjSENBZ0hCd2dJQlFZSUNBWUdDQWdIQndnSUJ3Y0lDQWNIQ0FnSEJ3Z0lCd2NJQ0FjSENBZ0hCd2dJQndjSUNBY0hDQWdIQndnSUJnWUlDQVlHQ0FnSEJ3Z0lCd2NJQ0FZR0NBZ0dCZ2dJQndjSUNBY0hDQWdIQndnSUJ3Y0lDQWNIQ0FnSEJ3Z0lCd2NJQ0FjSENBZ0hCd2dJQndjSUNBRUNCZ1lDQWdZR0F3TUhCd01EQndjQkFnWUdBZ0lHQmdNREJ3Y0RBd2NIQXdNSEJ3TURCd2NFQkFjSEJBUUhCd01EQndjREF3Y0hCQVFIQndRRUJ3Y0NBZ1lHQWdJR0JnTURCd2NEQXdjSEFnSUdCZ0lDQmdZREF3Y0hBd01IQndNREJ3Y0RBd2NIQkFRSEJ3UUVCd2NEQXdjSEF3TUhCd1FFQndjRUJBY0hCZ1lJQ0FZR0NBZ0hCd2dJQndjSUNBWUdDQWdHQmdnSUJ3Y0lDQWNIQ0FnSEJ3Z0lCd2NJQ0FjSENBZ0hCd2dJQndjSUNBY0hDQWdIQndnSUJ3Y0lDQVlHQ0FnR0JnZ0lCd2NJQ0FjSENBZ0dCZ2dJQmdZSUNBY0hDQWdIQndnSUJ3Y0lDQWNIQ0FnSEJ3Z0lCd2NJQ0FjSENBZ0hCd2dJQndjSUNBY0hDQWdBQVFNREFRSURBd1VHQndjR0JnY0hBQUVEQXdFQ0F3TUZCZ2NIQmdZSEJ3VUdCd2NHQmdjSENBZ0lDQWdJQ0FnRkJnY0hCZ1lIQndnSUNBZ0lDQWdJQVFJREF3SUNBd01HQmdjSEJnWUhCd0VDQXdNQ0FnTURCZ1lIQndZR0J3Y0dCZ2NIQmdZSEJ3Z0lDQWdJQ0FnSUJnWUhCd1lHQndjSUNBZ0lDQWdJQ0FNREJBUURBd1FFQndjSEJ3Y0hCd2NEQXdRRUF3TUVCQWNIQndjSEJ3Y0hCd2NIQndjSEJ3Y0lDQWdJQ0FnSUNBY0hCd2NIQndjSENBZ0lDQWdJQ0FnREF3UUVBd01FQkFjSEJ3Y0hCd2NIQXdNRUJBTURCQVFIQndjSEJ3Y0hCd2NIQndjSEJ3Y0hDQWdJQ0FnSUNBZ0hCd2NIQndjSEJ3Z0lDQWdJQ0FnSUFRSURBd0lDQXdNR0JnY0hCZ1lIQndFQ0F3TUNBZ01EQmdZSEJ3WUdCd2NHQmdjSEJnWUhCd2dJQ0FnSUNBZ0lCZ1lIQndZR0J3Y0lDQWdJQ0FnSUNBSUNBd01DQWdNREJnWUhCd1lHQndjQ0FnTURBZ0lEQXdZR0J3Y0dCZ2NIQmdZSEJ3WUdCd2NJQ0FnSUNBZ0lDQVlHQndjR0JnY0hDQWdJQ0FnSUNBZ0RBd1FFQXdNRUJBY0hCd2NIQndjSEF3TUVCQU1EQkFRSEJ3Y0hCd2NIQndjSEJ3Y0hCd2NIQ0FnSUNBZ0lDQWdIQndjSEJ3Y0hCd2dJQ0FnSUNBZ0lBd01FQkFNREJBUUhCd2NIQndjSEJ3TURCQVFEQXdRRUJ3Y0hCd2NIQndjSEJ3Y0hCd2NIQndnSUNBZ0lDQWdJQndjSEJ3Y0hCd2NJQ0FnSUNBZ0lDQUFEQVFRREJnUUhBUVFDQlFRSEJRY0FBd0VFQXdZRUJ3RUVBZ1VFQndVSEFRUUNCUVFIQlFjQ0JRSUZCUWNGQndFRUFnVUVCd1VIQWdVQ0JRVUhCUWNEQmdRSEJnZ0hDQVFIQlFjSENBY0lBd1lFQndZSUJ3Z0VCd1VIQndnSENBUUhCUWNIQ0FjSUJRY0ZCd2NJQndnRUJ3VUhCd2dIQ0FVSEJRY0hDQWNJQVFRQ0JRUUhCUWNDQlFJRkJRY0ZCd0VFQWdVRUJ3VUhBZ1VDQlFVSEJRY0NCUUlGQlFjRkJ3SUZBZ1VGQndVSEFnVUNCUVVIQlFjQ0JRSUZCUWNGQndRSEJRY0hDQWNJQlFjRkJ3Y0lCd2dFQndVSEJ3Z0hDQVVIQlFjSENBY0lCUWNGQndjSUJ3Z0ZCd1VIQndnSENBVUhCUWNIQ0FjSUJRY0ZCd2NJQndnREJnUUhCZ2dIQ0FRSEJRY0hDQWNJQXdZRUJ3WUlCd2dFQndVSEJ3Z0hDQVFIQlFjSENBY0lCUWNGQndjSUJ3Z0VCd1VIQndnSENBVUhCUWNIQ0FjSUJnZ0hDQWdJQ0FnSENBY0lDQWdJQ0FZSUJ3Z0lDQWdJQndnSENBZ0lDQWdIQ0FjSUNBZ0lDQWNJQndnSUNBZ0lCd2dIQ0FnSUNBZ0hDQWNJQ0FnSUNBUUhCUWNIQ0FjSUJRY0ZCd2NJQndnRUJ3VUhCd2dIQ0FVSEJRY0hDQWNJQlFjRkJ3Y0lCd2dGQndVSEJ3Z0hDQVVIQlFjSENBY0lCUWNGQndjSUJ3Z0hDQWNJQ0FnSUNBY0lCd2dJQ0FnSUJ3Z0hDQWdJQ0FnSENBY0lDQWdJQ0FjSUJ3Z0lDQWdJQndnSENBZ0lDQWdIQ0FjSUNBZ0lDQWNJQndnSUNBZ0lDUWtLQ2drSkNnb01EQTBMREF3TkN3a0pDZ29KQ1FvS0RBd0xEUXdNQ3cwTURBME5EQXdMQ3d3SkRRb0pEQW9MREF3TEN3d01EUTBNQ1FzS0NRd0tEUWtKQ2dvSkNRb0tEQXdOQ3d3TURRc0pDUW9LQ1FrS0Nnd01DdzBNREFzTkRBd05EUXdNQ3dzTUNRMEtDUXdLQ3d3TUN3c01EQTBOREFrTENna01DZzBLQ2dvS0Nnb0tDZzBMRFFzTkN3MExDZ29KQ1FvS0NRa05Dd3dNRFFzTURBME5EUTBMQ3dzTERRb05DZ29MQ2dzTkRRd01Dd3NNREEwS0RBa0tDd2tNQ2dvSkNRb0tDUWtMRFF3TUN3ME1EQW9LQ2dvS0Nnb0tDdzBMRFFzTkN3MExDd3dNRFEwTURBc0tEQWtLRFFrTUN3c0xDdzBORFEwTENnc0tDZzBLRFFCQm1jQUJDemNCQUFFQUFRQUJBQUFCQVFBQUFRRUFBUUFCQUFFQUFRQUFBQUFCQVFFQkFBQUFBQUFCQUFFQUFBQUFBUUVCQVFBQUFBRUFBUUVCQUVIWndBRUxOd0VBQVFBQkFBRUFBQUVCQUFBQkFRQUJBQUVBQVFBQkFBQUFBQUVCQVFFQUFBQUFBQUVBQVFBQUFBQUJBUUVCQUFBQUFRQUJBUUVBUVpuQkFRc0hBUUFCQUFFQUFRQkJxY0VCQzVVQ0FRQUJBQUVBQVFBQUFBQUJBUUVCQUFBQUFBQUJBQUVBQUFBQUFRRUJBUUFBQUFBQUFRQUJBUUVBQUFFQkFBQUFBUUFCQUFFQUFRRUJBUUVCQVFFQkFBRUFBUUFCQUFFQUFBQUFBUUVCQVFBQkFBQUJBUUFCQUFBQUFBRUJBUUVBQVFBQkFRRUJBUUlBQUFBRUFBQUFCQUFBQUFnQUFBQ1Evd0FBREFBQUFCa0FBQUJTL3dBQUZBQUFBQm9BQUFCVC93QUFGQUFBQUJzQUFBQmUvd0FBRkFBQUFCd0FBQUJjL3dBQUZBQUFBQjBBQUFCZC93QUFGQUFBQUI0QUFBQmYvd0FBRkFBQUFCOEFBQUJSL3dBQUFnQUFBQ0FBQUFCVi93QUFCQUFBQUNFQUFBQlgvd0FBQkFBQUFDSUFBQUJZL3dBQUVBQUFBQ01BQUFCZy93QUFCQUFBQUNRQUFBQmgvd0FBRUFBQUFDVUFBQUNSL3dCQnlNTUJDMlZqL3dBQUJBQUFBQ1lBQUFCay93QUFGQUFBQUNjQUFBQjAvd0FBRkFBQUFDZ0FBQUI0L3dBQUJBQUFBQ2tBQUFCUS93QUFCQUFBQUNvQUFBQlovd0FBQkFBQUFDc0FBQUIxL3dBQUZBQUFBQ3dBQUFCMy93QUFGQUFBQUMwQUFBQUFBQUFBRkFCQndNUUJDelV1QUFBQUx3QUFBREFBQUFBeEFBQUFNZ0FBQURNQUFBQTBBQUFBTlFBQUFDQWdVR28zQUFBQWNIbDBaamdBQUFCb01uQnFPUUJCZ01VQkN6SnlaR2hwT2dBQUFISnNiMk03QUFBQVkyTndZandBQUFCeWJHTndQUUFBQUhCaGJXTStBQUFBWm1Wa1l6OEFBQUJBWmdCQndNVUJDMEVaQUFzQUdSa1pBQUFBQUFVQUFBQUFBQUFKQUFBQUFBc0FBQUFBQUFBQUFCa0FDZ29aR1JrRENnY0FBUUFKQ3hnQUFBa0dDd0FBQ3dBR0dRQUFBQmtaR1FCQmtjWUJDeUVPQUFBQUFBQUFBQUFaQUFzTkdSa1pBQTBBQUFJQUNRNEFBQUFKQUE0QUFBNEFRY3ZHQVFzQkRBQkIxOFlCQ3hVVEFBQUFBQk1BQUFBQUNRd0FBQUFBQUF3QUFBd0FRWVhIQVFzQkVBQkJrY2NCQ3hVUEFBQUFCQThBQUFBQUNSQUFBQUFBQUJBQUFCQUFRYi9IQVFzQkVnQkJ5OGNCQ3g0UkFBQUFBQkVBQUFBQUNSSUFBQUFBQUJJQUFCSUFBQm9BQUFBYUdob0FRWUxJQVFzT0dnQUFBQm9hR2dBQUFBQUFBQWtBUWJQSUFRc0JGQUJCdjhnQkN4VVhBQUFBQUJjQUFBQUFDUlFBQUFBQUFCUUFBQlFBUWUzSUFRc0JGZ0JCK2NnQkMyUVZBQUFBQUJVQUFBQUFDUllBQUFBQUFCWUFBQllBQURBeE1qTTBOVFkzT0RsQlFrTkVSVVlBQUFBQWNBQUFBSEFBQUFCeEFBQUFjUUFBQUhFQUFBQnhBQUFBY1FBQUFIRUFBQUJ3QUFBQWNBQUFBSEVBQUFCd0FBQUFjQUFBQUhBQUFBQndBRUdBeWdFTEhYRUFBQUJ4QUFBQWNBQUFBSEFBQUFBQUFBQUFjQUFBQUFBQUFBQnhBRUdveXdFTENWQndBUUFBQUFBQUJRQkJ2TXNCQ3dGckFFSFV5d0VMQ213QUFBQnRBQUFBdUdzQVFlekxBUXNCQWdCQi9Nc0JDd2ovLy8vLy8vLy8vd0JCd013QkN3RUZBRUhNekFFTEFXNEFRZVRNQVFzT2JBQUFBRzhBQUFESWF3QUFBQVFBUWZ6TUFRc0JBUUJCak0wQkN3WC8vLy8vQ2c9PSI7cmV0dXJuIHJlY2VpdmVJbnN0YW5jZShpbnN0YW50aWF0ZVN5bmMoZCxlKVswXSl9KCksSD0oTC51LGEuX21hbGxvYz1MLnYsYS5fZnJlZT1MLncsYS5fanAyX2RlY29kZT1MLnksTC56KTtiPWZ1bmN0aW9uIHJ1bkNhbGxlcigpe1N8fHJ1bigpO1N8fChiPXJ1bkNhbGxlcil9O2Z1bmN0aW9uIHJ1bigpe2lmKCEoeT4wKSl7IWZ1bmN0aW9uIHByZVJ1bigpe2lmKGEucHJlUnVuKXsiZnVuY3Rpb24iPT10eXBlb2YgYS5wcmVSdW4mJihhLnByZVJ1bj1bYS5wcmVSdW5dKTtmb3IoO2EucHJlUnVuLmxlbmd0aDspZT1hLnByZVJ1bi5zaGlmdCgpLGYudW5zaGlmdChlKX12YXIgZTtjYWxsUnVudGltZUNhbGxiYWNrcyhmKX0oKTtpZighKHk+MCkpaWYoYS5zZXRTdGF0dXMpe2Euc2V0U3RhdHVzKCJSdW5uaW5nLi4uIik7c2V0VGltZW91dCgoKCk9PntzZXRUaW1lb3V0KCgoKT0+YS5zZXRTdGF0dXMoIiIpKSwxKTtkb1J1bigpfSksMSl9ZWxzZSBkb1J1bigpfWZ1bmN0aW9uIGRvUnVuKCl7aWYoIVMpe1M9ITA7YS5jYWxsZWRSdW49ITA7aWYoIXUpeyFmdW5jdGlvbiBpbml0UnVudGltZSgpe2NhbGxSdW50aW1lQ2FsbGJhY2tzKHApfSgpO3QoYSk7YS5vblJ1bnRpbWVJbml0aWFsaXplZD8uKCk7IWZ1bmN0aW9uIHBvc3RSdW4oKXtpZihhLnBvc3RSdW4peyJmdW5jdGlvbiI9PXR5cGVvZiBhLnBvc3RSdW4mJihhLnBvc3RSdW49W2EucG9zdFJ1bl0pO2Zvcig7YS5wb3N0UnVuLmxlbmd0aDspZT1hLnBvc3RSdW4uc2hpZnQoKSxtLnVuc2hpZnQoZSl9dmFyIGU7Y2FsbFJ1bnRpbWVDYWxsYmFja3MobSl9KCl9fX19aWYoYS5wcmVJbml0KXsiZnVuY3Rpb24iPT10eXBlb2YgYS5wcmVJbml0JiYoYS5wcmVJbml0PVthLnByZUluaXRdKTtmb3IoO2EucHJlSW5pdC5sZW5ndGg+MDspYS5wcmVJbml0LnBvcCgpKCl9cnVuKCk7cmV0dXJuIGF9KTtjb25zdCByaT1haTtjbGFzcyBKcHhFcnJvciBleHRlbmRzIGN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsIkpweEVycm9yIil9fWNsYXNzIEpweEltYWdle3N0YXRpYyNiPW51bGw7c3RhdGljIGRlY29kZShlLHQpe3R8fD17fTt0aGlzLiNifHw9cmkoe3dhcm59KTtjb25zdCBpPXRoaXMuI2IuZGVjb2RlKGUsdCk7aWYoInN0cmluZyI9PXR5cGVvZiBpKXRocm93IG5ldyBKcHhFcnJvcihpKTtyZXR1cm4gaX1zdGF0aWMgY2xlYW51cCgpe3RoaXMuI2I9bnVsbH1zdGF0aWMgcGFyc2VJbWFnZVByb3BlcnRpZXMoZSl7bGV0IHQ9ZS5nZXRCeXRlKCk7Zm9yKDt0Pj0wOyl7Y29uc3QgaT10O3Q9ZS5nZXRCeXRlKCk7aWYoNjUzNjE9PT0oaTw8OHx0KSl7ZS5za2lwKDQpO2NvbnN0IHQ9ZS5nZXRJbnQzMigpPj4+MCxpPWUuZ2V0SW50MzIoKT4+PjAsYT1lLmdldEludDMyKCk+Pj4wLHI9ZS5nZXRJbnQzMigpPj4+MDtlLnNraXAoMTYpO3JldHVybnt3aWR0aDp0LWEsaGVpZ2h0OmktcixiaXRzUGVyQ29tcG9uZW50OjgsY29tcG9uZW50c0NvdW50OmUuZ2V0VWludDE2KCl9fX10aHJvdyBuZXcgSnB4RXJyb3IoIk5vIHNpemUgbWFya2VyIGZvdW5kIGluIEpQWCBzdHJlYW0iKX19Y2xhc3MgSnB4U3RyZWFtIGV4dGVuZHMgRGVjb2RlU3RyZWFte2NvbnN0cnVjdG9yKGUsdCxpKXtzdXBlcih0KTt0aGlzLnN0cmVhbT1lO3RoaXMuZGljdD1lLmRpY3Q7dGhpcy5tYXliZUxlbmd0aD10O3RoaXMucGFyYW1zPWl9Z2V0IGJ5dGVzKCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJieXRlcyIsdGhpcy5zdHJlYW0uZ2V0Qnl0ZXModGhpcy5tYXliZUxlbmd0aCkpfWVuc3VyZUJ1ZmZlcihlKXt9cmVhZEJsb2NrKGUpe3RoaXMuZGVjb2RlSW1hZ2UobnVsbCxlKX1kZWNvZGVJbWFnZShlLHQpe2lmKHRoaXMuZW9mKXJldHVybiB0aGlzLmJ1ZmZlcjtlfHw9dGhpcy5ieXRlczt0aGlzLmJ1ZmZlcj1KcHhJbWFnZS5kZWNvZGUoZSx0KTt0aGlzLmJ1ZmZlckxlbmd0aD10aGlzLmJ1ZmZlci5sZW5ndGg7dGhpcy5lb2Y9ITA7cmV0dXJuIHRoaXMuYnVmZmVyfWdldCBjYW5Bc3luY0RlY29kZUltYWdlRnJvbUJ1ZmZlcigpe3JldHVybiB0aGlzLnN0cmVhbS5pc0FzeW5jfX1jbGFzcyBMWldTdHJlYW0gZXh0ZW5kcyBEZWNvZGVTdHJlYW17Y29uc3RydWN0b3IoZSx0LGkpe3N1cGVyKHQpO3RoaXMuc3RyPWU7dGhpcy5kaWN0PWUuZGljdDt0aGlzLmNhY2hlZERhdGE9MDt0aGlzLmJpdHNDYWNoZWQ9MDtjb25zdCBhPTQwOTYscj17ZWFybHlDaGFuZ2U6aSxjb2RlTGVuZ3RoOjksbmV4dENvZGU6MjU4LGRpY3Rpb25hcnlWYWx1ZXM6bmV3IFVpbnQ4QXJyYXkoYSksZGljdGlvbmFyeUxlbmd0aHM6bmV3IFVpbnQxNkFycmF5KGEpLGRpY3Rpb25hcnlQcmV2Q29kZXM6bmV3IFVpbnQxNkFycmF5KGEpLGN1cnJlbnRTZXF1ZW5jZTpuZXcgVWludDhBcnJheShhKSxjdXJyZW50U2VxdWVuY2VMZW5ndGg6MH07Zm9yKGxldCBlPTA7ZTwyNTY7KytlKXtyLmRpY3Rpb25hcnlWYWx1ZXNbZV09ZTtyLmRpY3Rpb25hcnlMZW5ndGhzW2VdPTF9dGhpcy5sendTdGF0ZT1yfXJlYWRCaXRzKGUpe2xldCB0PXRoaXMuYml0c0NhY2hlZCxpPXRoaXMuY2FjaGVkRGF0YTtmb3IoO3Q8ZTspe2NvbnN0IGU9dGhpcy5zdHIuZ2V0Qnl0ZSgpO2lmKC0xPT09ZSl7dGhpcy5lb2Y9ITA7cmV0dXJuIG51bGx9aT1pPDw4fGU7dCs9OH10aGlzLmJpdHNDYWNoZWQ9dC09ZTt0aGlzLmNhY2hlZERhdGE9aTt0aGlzLmxhc3RDb2RlPW51bGw7cmV0dXJuIGk+Pj50JigxPDxlKS0xfXJlYWRCbG9jaygpe2xldCBlLHQsaSxhPTEwMjQ7Y29uc3Qgcj10aGlzLmx6d1N0YXRlO2lmKCFyKXJldHVybjtjb25zdCBzPXIuZWFybHlDaGFuZ2U7bGV0IG49ci5uZXh0Q29kZTtjb25zdCBvPXIuZGljdGlvbmFyeVZhbHVlcyxnPXIuZGljdGlvbmFyeUxlbmd0aHMsYz1yLmRpY3Rpb25hcnlQcmV2Q29kZXM7bGV0IGw9ci5jb2RlTGVuZ3RoLGg9ci5wcmV2Q29kZTtjb25zdCBDPXIuY3VycmVudFNlcXVlbmNlO2xldCBRPXIuY3VycmVudFNlcXVlbmNlTGVuZ3RoLEU9MCx1PXRoaXMuYnVmZmVyTGVuZ3RoLGQ9dGhpcy5lbnN1cmVCdWZmZXIodGhpcy5idWZmZXJMZW5ndGgrYSk7Zm9yKGU9MDtlPDUxMjtlKyspe2NvbnN0IGU9dGhpcy5yZWFkQml0cyhsKSxyPVE+MDtpZihlPDI1Nil7Q1swXT1lO1E9MX1lbHNle2lmKCEoZT49MjU4KSl7aWYoMjU2PT09ZSl7bD05O249MjU4O1E9MDtjb250aW51ZX10aGlzLmVvZj0hMDtkZWxldGUgdGhpcy5sendTdGF0ZTticmVha31pZihlPG4pe1E9Z1tlXTtmb3IodD1RLTEsaT1lO3Q+PTA7dC0tKXtDW3RdPW9baV07aT1jW2ldfX1lbHNlIENbUSsrXT1DWzBdfWlmKHIpe2Nbbl09aDtnW25dPWdbaF0rMTtvW25dPUNbMF07bisrO2w9bitzJm4rcy0xP2w6MHxNYXRoLm1pbihNYXRoLmxvZyhuK3MpLy42OTMxNDcxODA1NTk5NDUzKzEsMTIpfWg9ZTtFKz1RO2lmKGE8RSl7ZG97YSs9NTEyfXdoaWxlKGE8RSk7ZD10aGlzLmVuc3VyZUJ1ZmZlcih0aGlzLmJ1ZmZlckxlbmd0aCthKX1mb3IodD0wO3Q8UTt0KyspZFt1KytdPUNbdF19ci5uZXh0Q29kZT1uO3IuY29kZUxlbmd0aD1sO3IucHJldkNvZGU9aDtyLmN1cnJlbnRTZXF1ZW5jZUxlbmd0aD1RO3RoaXMuYnVmZmVyTGVuZ3RoPXV9fWNsYXNzIFByZWRpY3RvclN0cmVhbSBleHRlbmRzIERlY29kZVN0cmVhbXtjb25zdHJ1Y3RvcihlLHQsaSl7c3VwZXIodCk7aWYoIShpIGluc3RhbmNlb2YgRGljdCkpcmV0dXJuIGU7Y29uc3QgYT10aGlzLnByZWRpY3Rvcj1pLmdldCgiUHJlZGljdG9yIil8fDE7aWYoYTw9MSlyZXR1cm4gZTtpZigyIT09YSYmKGE8MTB8fGE+MTUpKXRocm93IG5ldyBGb3JtYXRFcnJvcihgVW5zdXBwb3J0ZWQgcHJlZGljdG9yOiAke2F9YCk7dGhpcy5yZWFkQmxvY2s9Mj09PWE/dGhpcy5yZWFkQmxvY2tUaWZmOnRoaXMucmVhZEJsb2NrUG5nO3RoaXMuc3RyPWU7dGhpcy5kaWN0PWUuZGljdDtjb25zdCByPXRoaXMuY29sb3JzPWkuZ2V0KCJDb2xvcnMiKXx8MSxzPXRoaXMuYml0cz1pLmdldCgiQlBDIiwiQml0c1BlckNvbXBvbmVudCIpfHw4LG49dGhpcy5jb2x1bW5zPWkuZ2V0KCJDb2x1bW5zIil8fDE7dGhpcy5waXhCeXRlcz1yKnMrNz4+Mzt0aGlzLnJvd0J5dGVzPW4qcipzKzc+PjM7cmV0dXJuIHRoaXN9cmVhZEJsb2NrVGlmZigpe2NvbnN0IGU9dGhpcy5yb3dCeXRlcyx0PXRoaXMuYnVmZmVyTGVuZ3RoLGk9dGhpcy5lbnN1cmVCdWZmZXIodCtlKSxhPXRoaXMuYml0cyxyPXRoaXMuY29sb3JzLHM9dGhpcy5zdHIuZ2V0Qnl0ZXMoZSk7dGhpcy5lb2Y9IXMubGVuZ3RoO2lmKHRoaXMuZW9mKXJldHVybjtsZXQgbixvPTAsZz0wLGM9MCxsPTAsaD10O2lmKDE9PT1hJiYxPT09cilmb3Iobj0wO248ZTsrK24pe2xldCBlPXNbbl1ebztlXj1lPj4xO2VePWU+PjI7ZV49ZT4+NDtvPSgxJmUpPDw3O2lbaCsrXT1lfWVsc2UgaWYoOD09PWEpe2ZvcihuPTA7bjxyOysrbilpW2grK109c1tuXTtmb3IoO248ZTsrK24pe2lbaF09aVtoLXJdK3Nbbl07aCsrfX1lbHNlIGlmKDE2PT09YSl7Y29uc3QgdD0yKnI7Zm9yKG49MDtuPHQ7KytuKWlbaCsrXT1zW25dO2Zvcig7bjxlO24rPTIpe2NvbnN0IGU9KCgyNTUmc1tuXSk8PDgpKygyNTUmc1tuKzFdKSsoKDI1NSZpW2gtdF0pPDw4KSsoMjU1JmlbaC10KzFdKTtpW2grK109ZT4+OCYyNTU7aVtoKytdPTI1NSZlfX1lbHNle2NvbnN0IGU9bmV3IFVpbnQ4QXJyYXkocisxKSxoPSgxPDxhKS0xO2xldCBDPTAsUT10O2NvbnN0IEU9dGhpcy5jb2x1bW5zO2ZvcihuPTA7bjxFOysrbilmb3IobGV0IHQ9MDt0PHI7Kyt0KXtpZihjPGEpe289bzw8OHwyNTUmc1tDKytdO2MrPTh9ZVt0XT1lW3RdKyhvPj5jLWEpJmg7Yy09YTtnPWc8PGF8ZVt0XTtsKz1hO2lmKGw+PTgpe2lbUSsrXT1nPj5sLTgmMjU1O2wtPTh9fWw+MCYmKGlbUSsrXT0oZzw8OC1sKSsobyYoMTw8OC1sKS0xKSl9dGhpcy5idWZmZXJMZW5ndGgrPWV9cmVhZEJsb2NrUG5nKCl7Y29uc3QgZT10aGlzLnJvd0J5dGVzLHQ9dGhpcy5waXhCeXRlcyxpPXRoaXMuc3RyLmdldEJ5dGUoKSxhPXRoaXMuc3RyLmdldEJ5dGVzKGUpO3RoaXMuZW9mPSFhLmxlbmd0aDtpZih0aGlzLmVvZilyZXR1cm47Y29uc3Qgcj10aGlzLmJ1ZmZlckxlbmd0aCxzPXRoaXMuZW5zdXJlQnVmZmVyKHIrZSk7bGV0IG49cy5zdWJhcnJheShyLWUscik7MD09PW4ubGVuZ3RoJiYobj1uZXcgVWludDhBcnJheShlKSk7bGV0IG8sZyxjLGw9cjtzd2l0Y2goaSl7Y2FzZSAwOmZvcihvPTA7bzxlOysrbylzW2wrK109YVtvXTticmVhaztjYXNlIDE6Zm9yKG89MDtvPHQ7KytvKXNbbCsrXT1hW29dO2Zvcig7bzxlOysrbyl7c1tsXT1zW2wtdF0rYVtvXSYyNTU7bCsrfWJyZWFrO2Nhc2UgMjpmb3Iobz0wO288ZTsrK28pc1tsKytdPW5bb10rYVtvXSYyNTU7YnJlYWs7Y2FzZSAzOmZvcihvPTA7bzx0OysrbylzW2wrK109KG5bb10+PjEpK2Fbb107Zm9yKDtvPGU7KytvKXtzW2xdPShuW29dK3NbbC10XT4+MSkrYVtvXSYyNTU7bCsrfWJyZWFrO2Nhc2UgNDpmb3Iobz0wO288dDsrK28pe2c9bltvXTtjPWFbb107c1tsKytdPWcrY31mb3IoO288ZTsrK28pe2c9bltvXTtjb25zdCBlPW5bby10XSxpPXNbbC10XSxyPWkrZy1lO2xldCBoPXItaTtoPDAmJihoPS1oKTtsZXQgQz1yLWc7QzwwJiYoQz0tQyk7bGV0IFE9ci1lO1E8MCYmKFE9LVEpO2M9YVtvXTtzW2wrK109aDw9QyYmaDw9UT9pK2M6Qzw9UT9nK2M6ZStjfWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEZvcm1hdEVycm9yKGBVbnN1cHBvcnRlZCBwcmVkaWN0b3I6ICR7aX1gKX10aGlzLmJ1ZmZlckxlbmd0aCs9ZX19Y2xhc3MgUnVuTGVuZ3RoU3RyZWFtIGV4dGVuZHMgRGVjb2RlU3RyZWFte2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIodCk7dGhpcy5zdHI9ZTt0aGlzLmRpY3Q9ZS5kaWN0fXJlYWRCbG9jaygpe2NvbnN0IGU9dGhpcy5zdHIuZ2V0Qnl0ZXMoMik7aWYoIWV8fGUubGVuZ3RoPDJ8fDEyOD09PWVbMF0pe3RoaXMuZW9mPSEwO3JldHVybn1sZXQgdCxpPXRoaXMuYnVmZmVyTGVuZ3RoLGE9ZVswXTtpZihhPDEyOCl7dD10aGlzLmVuc3VyZUJ1ZmZlcihpK2ErMSk7dFtpKytdPWVbMV07aWYoYT4wKXtjb25zdCBlPXRoaXMuc3RyLmdldEJ5dGVzKGEpO3Quc2V0KGUsaSk7aSs9YX19ZWxzZXthPTI1Ny1hO2NvbnN0IHI9ZVsxXTt0PXRoaXMuZW5zdXJlQnVmZmVyKGkrYSsxKTtmb3IobGV0IGU9MDtlPGE7ZSsrKXRbaSsrXT1yfXRoaXMuYnVmZmVyTGVuZ3RoPWl9fWNsYXNzIFBhcnNlcntjb25zdHJ1Y3Rvcih7bGV4ZXI6ZSx4cmVmOnQsYWxsb3dTdHJlYW1zOmk9ITEscmVjb3ZlcnlNb2RlOmE9ITF9KXt0aGlzLmxleGVyPWU7dGhpcy54cmVmPXQ7dGhpcy5hbGxvd1N0cmVhbXM9aTt0aGlzLnJlY292ZXJ5TW9kZT1hO3RoaXMuaW1hZ2VDYWNoZT1PYmplY3QuY3JlYXRlKG51bGwpO3RoaXMuX2ltYWdlSWQ9MDt0aGlzLnJlZmlsbCgpfXJlZmlsbCgpe3RoaXMuYnVmMT10aGlzLmxleGVyLmdldE9iaigpO3RoaXMuYnVmMj10aGlzLmxleGVyLmdldE9iaigpfXNoaWZ0KCl7aWYodGhpcy5idWYyIGluc3RhbmNlb2YgQ21kJiYiSUQiPT09dGhpcy5idWYyLmNtZCl7dGhpcy5idWYxPXRoaXMuYnVmMjt0aGlzLmJ1ZjI9bnVsbH1lbHNle3RoaXMuYnVmMT10aGlzLmJ1ZjI7dGhpcy5idWYyPXRoaXMubGV4ZXIuZ2V0T2JqKCl9fXRyeVNoaWZ0KCl7dHJ5e3RoaXMuc2hpZnQoKTtyZXR1cm4hMH1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTtyZXR1cm4hMX19Z2V0T2JqKGU9bnVsbCl7Y29uc3QgdD10aGlzLmJ1ZjE7dGhpcy5zaGlmdCgpO2lmKHQgaW5zdGFuY2VvZiBDbWQpc3dpdGNoKHQuY21kKXtjYXNlIkJJIjpyZXR1cm4gdGhpcy5tYWtlSW5saW5lSW1hZ2UoZSk7Y2FzZSJbIjpjb25zdCBpPVtdO2Zvcig7IWlzQ21kKHRoaXMuYnVmMSwiXSIpJiZ0aGlzLmJ1ZjEhPT1FdDspaS5wdXNoKHRoaXMuZ2V0T2JqKGUpKTtpZih0aGlzLmJ1ZjE9PT1FdCl7aWYodGhpcy5yZWNvdmVyeU1vZGUpcmV0dXJuIGk7dGhyb3cgbmV3IFBhcnNlckVPRkV4Y2VwdGlvbigiRW5kIG9mIGZpbGUgaW5zaWRlIGFycmF5LiIpfXRoaXMuc2hpZnQoKTtyZXR1cm4gaTtjYXNlIjw8Ijpjb25zdCBhPW5ldyBEaWN0KHRoaXMueHJlZik7Zm9yKDshaXNDbWQodGhpcy5idWYxLCI+PiIpJiZ0aGlzLmJ1ZjEhPT1FdDspe2lmKCEodGhpcy5idWYxIGluc3RhbmNlb2YgTmFtZSkpe2luZm8oIk1hbGZvcm1lZCBkaWN0aW9uYXJ5OiBrZXkgbXVzdCBiZSBhIG5hbWUgb2JqZWN0Iik7dGhpcy5zaGlmdCgpO2NvbnRpbnVlfWNvbnN0IHQ9dGhpcy5idWYxLm5hbWU7dGhpcy5zaGlmdCgpO2lmKHRoaXMuYnVmMT09PUV0KWJyZWFrO2Euc2V0KHQsdGhpcy5nZXRPYmooZSkpfWlmKHRoaXMuYnVmMT09PUV0KXtpZih0aGlzLnJlY292ZXJ5TW9kZSlyZXR1cm4gYTt0aHJvdyBuZXcgUGFyc2VyRU9GRXhjZXB0aW9uKCJFbmQgb2YgZmlsZSBpbnNpZGUgZGljdGlvbmFyeS4iKX1pZihpc0NtZCh0aGlzLmJ1ZjIsInN0cmVhbSIpKXJldHVybiB0aGlzLmFsbG93U3RyZWFtcz90aGlzLm1ha2VTdHJlYW0oYSxlKTphO3RoaXMuc2hpZnQoKTtyZXR1cm4gYTtkZWZhdWx0OnJldHVybiB0fWlmKE51bWJlci5pc0ludGVnZXIodCkpe2lmKE51bWJlci5pc0ludGVnZXIodGhpcy5idWYxKSYmaXNDbWQodGhpcy5idWYyLCJSIikpe2NvbnN0IGU9UmVmLmdldCh0LHRoaXMuYnVmMSk7dGhpcy5zaGlmdCgpO3RoaXMuc2hpZnQoKTtyZXR1cm4gZX1yZXR1cm4gdH1yZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQmJmU/ZS5kZWNyeXB0U3RyaW5nKHQpOnR9ZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQoZSl7Y29uc3R7a25vd25Db21tYW5kczp0fT10aGlzLmxleGVyLGk9ZS5wb3M7bGV0IGEscixzPTA7Zm9yKDstMSE9PShhPWUuZ2V0Qnl0ZSgpKTspaWYoMD09PXMpcz02OT09PWE/MTowO2Vsc2UgaWYoMT09PXMpcz03Mz09PWE/MjowO2Vsc2UgaWYoMzI9PT1hfHwxMD09PWF8fDEzPT09YSl7cj1lLnBvcztjb25zdCBpPWUucGVla0J5dGVzKDE1KSxuPWkubGVuZ3RoO2lmKDA9PT1uKWJyZWFrO2ZvcihsZXQgZT0wO2U8bjtlKyspe2E9aVtlXTtpZigoMCE9PWF8fDA9PT1pW2UrMV0pJiYoMTAhPT1hJiYxMyE9PWEmJihhPDMyfHxhPjEyNykpKXtzPTA7YnJlYWt9fWlmKDIhPT1zKWNvbnRpbnVlO2lmKCF0KXt3YXJuKCJmaW5kRGVmYXVsdElubGluZVN0cmVhbUVuZCAtIGBsZXhlci5rbm93bkNvbW1hbmRzYCBpcyB1bmRlZmluZWQuIik7Y29udGludWV9Y29uc3Qgbz1uZXcgTGV4ZXIobmV3IFN0cmVhbShpLnNsaWNlKCkpLHQpO28uX2hleFN0cmluZ1dhcm49KCk9Pnt9O2xldCBnPTA7Zm9yKDs7KXtjb25zdCBlPW8uZ2V0T2JqKCk7aWYoZT09PUV0KXtzPTA7YnJlYWt9aWYoZSBpbnN0YW5jZW9mIENtZCl7Y29uc3QgaT10W2UuY21kXTtpZighaSl7cz0wO2JyZWFrfWlmKGkudmFyaWFibGVBcmdzP2c8PWkubnVtQXJnczpnPT09aS5udW1BcmdzKWJyZWFrO2c9MH1lbHNlIGcrK31pZigyPT09cylicmVha31lbHNlIHM9MDtpZigtMT09PWEpe3dhcm4oImZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kOiBSZWFjaGVkIHRoZSBlbmQgb2YgdGhlIHN0cmVhbSB3aXRob3V0IGZpbmRpbmcgYSB2YWxpZCBFSSBtYXJrZXIiKTtpZihyKXt3YXJuKCcuLi4gdHJ5aW5nIHRvIHJlY292ZXIgYnkgdXNpbmcgdGhlIGxhc3QgIkVJIiBvY2N1cnJlbmNlLicpO2Uuc2tpcCgtKGUucG9zLXIpKX19bGV0IG49NDtlLnNraXAoLW4pO2E9ZS5wZWVrQnl0ZSgpO2Uuc2tpcChuKTtpc1doaXRlU3BhY2UoYSl8fG4tLTtyZXR1cm4gZS5wb3Mtbi1pfWZpbmREQ1REZWNvZGVJbmxpbmVTdHJlYW1FbmQoZSl7Y29uc3QgdD1lLnBvcztsZXQgaSxhLHI9ITE7Zm9yKDstMSE9PShpPWUuZ2V0Qnl0ZSgpKTspaWYoMjU1PT09aSl7c3dpdGNoKGUuZ2V0Qnl0ZSgpKXtjYXNlIDA6YnJlYWs7Y2FzZSAyNTU6ZS5za2lwKC0xKTticmVhaztjYXNlIDIxNzpyPSEwO2JyZWFrO2Nhc2UgMTkyOmNhc2UgMTkzOmNhc2UgMTk0OmNhc2UgMTk1OmNhc2UgMTk3OmNhc2UgMTk4OmNhc2UgMTk5OmNhc2UgMjAxOmNhc2UgMjAyOmNhc2UgMjAzOmNhc2UgMjA1OmNhc2UgMjA2OmNhc2UgMjA3OmNhc2UgMTk2OmNhc2UgMjA0OmNhc2UgMjE4OmNhc2UgMjE5OmNhc2UgMjIwOmNhc2UgMjIxOmNhc2UgMjIyOmNhc2UgMjIzOmNhc2UgMjI0OmNhc2UgMjI1OmNhc2UgMjI2OmNhc2UgMjI3OmNhc2UgMjI4OmNhc2UgMjI5OmNhc2UgMjMwOmNhc2UgMjMxOmNhc2UgMjMyOmNhc2UgMjMzOmNhc2UgMjM0OmNhc2UgMjM1OmNhc2UgMjM2OmNhc2UgMjM3OmNhc2UgMjM4OmNhc2UgMjM5OmNhc2UgMjU0OmE9ZS5nZXRVaW50MTYoKTthPjI/ZS5za2lwKGEtMik6ZS5za2lwKC0yKX1pZihyKWJyZWFrfWNvbnN0IHM9ZS5wb3MtdDtpZigtMT09PWkpe3dhcm4oIklubGluZSBEQ1REZWNvZGUgaW1hZ2Ugc3RyZWFtOiBFT0kgbWFya2VyIG5vdCBmb3VuZCwgc2VhcmNoaW5nIGZvciAvRUkvIGluc3RlYWQuIik7ZS5za2lwKC1zKTtyZXR1cm4gdGhpcy5maW5kRGVmYXVsdElubGluZVN0cmVhbUVuZChlKX10aGlzLmlubGluZVN0cmVhbVNraXBFSShlKTtyZXR1cm4gc31maW5kQVNDSUk4NURlY29kZUlubGluZVN0cmVhbUVuZChlKXtjb25zdCB0PWUucG9zO2xldCBpO2Zvcig7LTEhPT0oaT1lLmdldEJ5dGUoKSk7KWlmKDEyNj09PWkpe2NvbnN0IHQ9ZS5wb3M7aT1lLnBlZWtCeXRlKCk7Zm9yKDtpc1doaXRlU3BhY2UoaSk7KXtlLnNraXAoKTtpPWUucGVla0J5dGUoKX1pZig2Mj09PWkpe2Uuc2tpcCgpO2JyZWFrfWlmKGUucG9zPnQpe2NvbnN0IHQ9ZS5wZWVrQnl0ZXMoMik7aWYoNjk9PT10WzBdJiY3Mz09PXRbMV0pYnJlYWt9fWNvbnN0IGE9ZS5wb3MtdDtpZigtMT09PWkpe3dhcm4oIklubGluZSBBU0NJSTg1RGVjb2RlIGltYWdlIHN0cmVhbTogRU9EIG1hcmtlciBub3QgZm91bmQsIHNlYXJjaGluZyBmb3IgL0VJLyBpbnN0ZWFkLiIpO2Uuc2tpcCgtYSk7cmV0dXJuIHRoaXMuZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQoZSl9dGhpcy5pbmxpbmVTdHJlYW1Ta2lwRUkoZSk7cmV0dXJuIGF9ZmluZEFTQ0lJSGV4RGVjb2RlSW5saW5lU3RyZWFtRW5kKGUpe2NvbnN0IHQ9ZS5wb3M7bGV0IGk7Zm9yKDstMSE9PShpPWUuZ2V0Qnl0ZSgpKSYmNjIhPT1pOyk7Y29uc3QgYT1lLnBvcy10O2lmKC0xPT09aSl7d2FybigiSW5saW5lIEFTQ0lJSGV4RGVjb2RlIGltYWdlIHN0cmVhbTogRU9EIG1hcmtlciBub3QgZm91bmQsIHNlYXJjaGluZyBmb3IgL0VJLyBpbnN0ZWFkLiIpO2Uuc2tpcCgtYSk7cmV0dXJuIHRoaXMuZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQoZSl9dGhpcy5pbmxpbmVTdHJlYW1Ta2lwRUkoZSk7cmV0dXJuIGF9aW5saW5lU3RyZWFtU2tpcEVJKGUpe2xldCB0LGk9MDtmb3IoOy0xIT09KHQ9ZS5nZXRCeXRlKCkpOylpZigwPT09aSlpPTY5PT09dD8xOjA7ZWxzZSBpZigxPT09aSlpPTczPT09dD8yOjA7ZWxzZSBpZigyPT09aSlicmVha31tYWtlSW5saW5lSW1hZ2UoZSl7Y29uc3QgdD10aGlzLmxleGVyLGk9dC5zdHJlYW0sYT1PYmplY3QuY3JlYXRlKG51bGwpO2xldCByO2Zvcig7IWlzQ21kKHRoaXMuYnVmMSwiSUQiKSYmdGhpcy5idWYxIT09RXQ7KXtpZighKHRoaXMuYnVmMSBpbnN0YW5jZW9mIE5hbWUpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiRGljdGlvbmFyeSBrZXkgbXVzdCBiZSBhIG5hbWUgb2JqZWN0Iik7Y29uc3QgdD10aGlzLmJ1ZjEubmFtZTt0aGlzLnNoaWZ0KCk7aWYodGhpcy5idWYxPT09RXQpYnJlYWs7YVt0XT10aGlzLmdldE9iaihlKX0tMSE9PXQuYmVnaW5JbmxpbmVJbWFnZVBvcyYmKHI9aS5wb3MtdC5iZWdpbklubGluZUltYWdlUG9zKTtjb25zdCBzPXRoaXMueHJlZi5mZXRjaElmUmVmKGEuRnx8YS5GaWx0ZXIpO2xldCBuO2lmKHMgaW5zdGFuY2VvZiBOYW1lKW49cy5uYW1lO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShzKSl7Y29uc3QgZT10aGlzLnhyZWYuZmV0Y2hJZlJlZihzWzBdKTtlIGluc3RhbmNlb2YgTmFtZSYmKG49ZS5uYW1lKX1jb25zdCBvPWkucG9zO2xldCBnLGM7c3dpdGNoKG4pe2Nhc2UiRENUIjpjYXNlIkRDVERlY29kZSI6Zz10aGlzLmZpbmREQ1REZWNvZGVJbmxpbmVTdHJlYW1FbmQoaSk7YnJlYWs7Y2FzZSJBODUiOmNhc2UiQVNDSUk4NURlY29kZSI6Zz10aGlzLmZpbmRBU0NJSTg1RGVjb2RlSW5saW5lU3RyZWFtRW5kKGkpO2JyZWFrO2Nhc2UiQUh4IjpjYXNlIkFTQ0lJSGV4RGVjb2RlIjpnPXRoaXMuZmluZEFTQ0lJSGV4RGVjb2RlSW5saW5lU3RyZWFtRW5kKGkpO2JyZWFrO2RlZmF1bHQ6Zz10aGlzLmZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kKGkpfWlmKGc8MWUzJiZyPjApe2NvbnN0IGU9aS5wb3M7aS5wb3M9dC5iZWdpbklubGluZUltYWdlUG9zO2M9ZnVuY3Rpb24gZ2V0SW5saW5lSW1hZ2VDYWNoZUtleShlKXtjb25zdCB0PVtdLGk9ZS5sZW5ndGg7bGV0IGE9MDtmb3IoO2E8aS0xOyl0LnB1c2goZVthKytdPDw4fGVbYSsrXSk7YTxpJiZ0LnB1c2goZVthXSk7cmV0dXJuIGkrIl8iK1N0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCx0KX0oaS5nZXRCeXRlcyhyK2cpKTtpLnBvcz1lO2NvbnN0IGE9dGhpcy5pbWFnZUNhY2hlW2NdO2lmKHZvaWQgMCE9PWEpe3RoaXMuYnVmMj1DbWQuZ2V0KCJFSSIpO3RoaXMuc2hpZnQoKTthLnJlc2V0KCk7cmV0dXJuIGF9fWNvbnN0IGw9bmV3IERpY3QodGhpcy54cmVmKTtmb3IoY29uc3QgZSBpbiBhKWwuc2V0KGUsYVtlXSk7bGV0IGg9aS5tYWtlU3ViU3RyZWFtKG8sZyxsKTtlJiYoaD1lLmNyZWF0ZVN0cmVhbShoLGcpKTtoPXRoaXMuZmlsdGVyKGgsbCxnKTtoLmRpY3Q9bDtpZih2b2lkIDAhPT1jKXtoLmNhY2hlS2V5PSJpbmxpbmVfaW1nXyIrICsrdGhpcy5faW1hZ2VJZDt0aGlzLmltYWdlQ2FjaGVbY109aH10aGlzLmJ1ZjI9Q21kLmdldCgiRUkiKTt0aGlzLnNoaWZ0KCk7cmV0dXJuIGh9I0QoZSl7Y29uc3R7c3RyZWFtOnR9PXRoaXMubGV4ZXI7dC5wb3M9ZTtjb25zdCBpPW5ldyBVaW50OEFycmF5KFsxMDEsMTEwLDEwMF0pLGE9aS5sZW5ndGgscj1bbmV3IFVpbnQ4QXJyYXkoWzExNSwxMTYsMTE0LDEwMSw5NywxMDldKSxuZXcgVWludDhBcnJheShbMTE1LDExNiwxMDEsOTcsMTA5XSksbmV3IFVpbnQ4QXJyYXkoWzExNSwxMTYsMTE0LDEwMSw5N10pXSxzPTktYTtmb3IoO3QucG9zPHQuZW5kOyl7Y29uc3Qgbj10LnBlZWtCeXRlcygyMDQ4KSxvPW4ubGVuZ3RoLTk7aWYobzw9MClicmVhaztsZXQgZz0wO2Zvcig7ZzxvOyl7bGV0IG89MDtmb3IoO288YSYmbltnK29dPT09aVtvXTspbysrO2lmKG8+PWEpe2xldCBhPSExO2Zvcihjb25zdCBlIG9mIHIpe2NvbnN0IHQ9ZS5sZW5ndGg7bGV0IHI9MDtmb3IoO3I8dCYmbltnK28rcl09PT1lW3JdOylyKys7aWYocj49cyl7YT0hMDticmVha31pZihyPj10KXtpZihpc1doaXRlU3BhY2UobltnK28rcl0pKXtpbmZvKGBGb3VuZCAiJHtieXRlc1RvU3RyaW5nKFsuLi5pLC4uLmVdKX0iIHdoZW4gc2VhcmNoaW5nIGZvciBlbmRzdHJlYW0gY29tbWFuZC5gKTthPSEwfWJyZWFrfX1pZihhKXt0LnBvcys9ZztyZXR1cm4gdC5wb3MtZX19ZysrfXQucG9zKz1vfXJldHVybi0xfW1ha2VTdHJlYW0oZSx0KXtjb25zdCBpPXRoaXMubGV4ZXI7bGV0IGE9aS5zdHJlYW07aS5za2lwVG9OZXh0TGluZSgpO2NvbnN0IHI9YS5wb3MtMTtsZXQgcz1lLmdldCgiTGVuZ3RoIik7aWYoIU51bWJlci5pc0ludGVnZXIocykpe2luZm8oYEJhZCBsZW5ndGggIiR7cyYmcy50b1N0cmluZygpfSIgaW4gc3RyZWFtLmApO3M9MH1hLnBvcz1yK3M7aS5uZXh0Q2hhcigpO2lmKHRoaXMudHJ5U2hpZnQoKSYmaXNDbWQodGhpcy5idWYyLCJlbmRzdHJlYW0iKSl0aGlzLnNoaWZ0KCk7ZWxzZXtzPXRoaXMuI0Qocik7aWYoczwwKXRocm93IG5ldyBGb3JtYXRFcnJvcigiTWlzc2luZyBlbmRzdHJlYW0gY29tbWFuZC4iKTtpLm5leHRDaGFyKCk7dGhpcy5zaGlmdCgpO3RoaXMuc2hpZnQoKX10aGlzLnNoaWZ0KCk7YT1hLm1ha2VTdWJTdHJlYW0ocixzLGUpO3QmJihhPXQuY3JlYXRlU3RyZWFtKGEscykpO2E9dGhpcy5maWx0ZXIoYSxlLHMpO2EuZGljdD1lO3JldHVybiBhfWZpbHRlcihlLHQsaSl7bGV0IGE9dC5nZXQoIkYiLCJGaWx0ZXIiKSxyPXQuZ2V0KCJEUCIsIkRlY29kZVBhcm1zIik7aWYoYSBpbnN0YW5jZW9mIE5hbWUpe0FycmF5LmlzQXJyYXkocikmJndhcm4oIi9EZWNvZGVQYXJtcyBzaG91bGQgbm90IGJlIGFuIEFycmF5LCB3aGVuIC9GaWx0ZXIgaXMgYSBOYW1lLiIpO3JldHVybiB0aGlzLm1ha2VGaWx0ZXIoZSxhLm5hbWUsaSxyKX1sZXQgcz1pO2lmKEFycmF5LmlzQXJyYXkoYSkpe2NvbnN0IHQ9YSxpPXI7Zm9yKGxldCBuPTAsbz10Lmxlbmd0aDtuPG87KytuKXthPXRoaXMueHJlZi5mZXRjaElmUmVmKHRbbl0pO2lmKCEoYSBpbnN0YW5jZW9mIE5hbWUpKXRocm93IG5ldyBGb3JtYXRFcnJvcihgQmFkIGZpbHRlciBuYW1lICIke2F9ImApO3I9bnVsbDtBcnJheS5pc0FycmF5KGkpJiZuIGluIGkmJihyPXRoaXMueHJlZi5mZXRjaElmUmVmKGlbbl0pKTtlPXRoaXMubWFrZUZpbHRlcihlLGEubmFtZSxzLHIpO3M9bnVsbH19cmV0dXJuIGV9bWFrZUZpbHRlcihlLHQsaSxhKXtpZigwPT09aSl7d2FybihgRW1wdHkgIiR7dH0iIHN0cmVhbS5gKTtyZXR1cm4gbmV3IE51bGxTdHJlYW19dHJ5e3N3aXRjaCh0KXtjYXNlIkZsIjpjYXNlIkZsYXRlRGVjb2RlIjpyZXR1cm4gYT9uZXcgUHJlZGljdG9yU3RyZWFtKG5ldyBGbGF0ZVN0cmVhbShlLGkpLGksYSk6bmV3IEZsYXRlU3RyZWFtKGUsaSk7Y2FzZSJMWlciOmNhc2UiTFpXRGVjb2RlIjpsZXQgdD0xO2lmKGEpe2EuaGFzKCJFYXJseUNoYW5nZSIpJiYodD1hLmdldCgiRWFybHlDaGFuZ2UiKSk7cmV0dXJuIG5ldyBQcmVkaWN0b3JTdHJlYW0obmV3IExaV1N0cmVhbShlLGksdCksaSxhKX1yZXR1cm4gbmV3IExaV1N0cmVhbShlLGksdCk7Y2FzZSJEQ1QiOmNhc2UiRENURGVjb2RlIjpyZXR1cm4gbmV3IEpwZWdTdHJlYW0oZSxpLGEpO2Nhc2UiSlBYIjpjYXNlIkpQWERlY29kZSI6cmV0dXJuIG5ldyBKcHhTdHJlYW0oZSxpLGEpO2Nhc2UiQTg1IjpjYXNlIkFTQ0lJODVEZWNvZGUiOnJldHVybiBuZXcgQXNjaWk4NVN0cmVhbShlLGkpO2Nhc2UiQUh4IjpjYXNlIkFTQ0lJSGV4RGVjb2RlIjpyZXR1cm4gbmV3IEFzY2lpSGV4U3RyZWFtKGUsaSk7Y2FzZSJDQ0YiOmNhc2UiQ0NJVFRGYXhEZWNvZGUiOnJldHVybiBuZXcgQ0NJVFRGYXhTdHJlYW0oZSxpLGEpO2Nhc2UiUkwiOmNhc2UiUnVuTGVuZ3RoRGVjb2RlIjpyZXR1cm4gbmV3IFJ1bkxlbmd0aFN0cmVhbShlLGkpO2Nhc2UiSkJJRzJEZWNvZGUiOnJldHVybiBuZXcgSmJpZzJTdHJlYW0oZSxpLGEpfXdhcm4oYEZpbHRlciAiJHt0fSIgaXMgbm90IHN1cHBvcnRlZC5gKTtyZXR1cm4gZX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTt3YXJuKGBJbnZhbGlkIHN0cmVhbTogIiR7ZX0iYCk7cmV0dXJuIG5ldyBOdWxsU3RyZWFtfX19Y29uc3Qgc2k9WzEsMCwwLDAsMCwwLDAsMCwwLDEsMSwwLDEsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxLDAsMCwwLDAsMiwwLDAsMiwyLDAsMCwwLDAsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwwLDIsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDBdO2Z1bmN0aW9uIHRvSGV4RGlnaXQoZSl7cmV0dXJuIGU+PTQ4JiZlPD01Nz8xNSZlOmU+PTY1JiZlPD03MHx8ZT49OTcmJmU8PTEwMj85KygxNSZlKTotMX1jbGFzcyBMZXhlcntjb25zdHJ1Y3RvcihlLHQ9bnVsbCl7dGhpcy5zdHJlYW09ZTt0aGlzLm5leHRDaGFyKCk7dGhpcy5zdHJCdWY9W107dGhpcy5rbm93bkNvbW1hbmRzPXQ7dGhpcy5faGV4U3RyaW5nTnVtV2Fybj0wO3RoaXMuYmVnaW5JbmxpbmVJbWFnZVBvcz0tMX1uZXh0Q2hhcigpe3JldHVybiB0aGlzLmN1cnJlbnRDaGFyPXRoaXMuc3RyZWFtLmdldEJ5dGUoKX1wZWVrQ2hhcigpe3JldHVybiB0aGlzLnN0cmVhbS5wZWVrQnl0ZSgpfWdldE51bWJlcigpe2xldCBlPXRoaXMuY3VycmVudENoYXIsdD0hMSxpPTAsYT0xO2lmKDQ1PT09ZSl7YT0tMTtlPXRoaXMubmV4dENoYXIoKTs0NT09PWUmJihlPXRoaXMubmV4dENoYXIoKSl9ZWxzZSA0Mz09PWUmJihlPXRoaXMubmV4dENoYXIoKSk7aWYoMTA9PT1lfHwxMz09PWUpZG97ZT10aGlzLm5leHRDaGFyKCl9d2hpbGUoMTA9PT1lfHwxMz09PWUpO2lmKDQ2PT09ZSl7aT0xMDtlPXRoaXMubmV4dENoYXIoKX1pZihlPDQ4fHxlPjU3KXtjb25zdCB0PWBJbnZhbGlkIG51bWJlcjogJHtTdHJpbmcuZnJvbUNoYXJDb2RlKGUpfSAoY2hhckNvZGUgJHtlfSlgO2lmKGlzV2hpdGVTcGFjZShlKXx8LTE9PT1lKXtpbmZvKGBMZXhlci5nZXROdW1iZXIgLSAiJHt0fSIuYCk7cmV0dXJuIDB9dGhyb3cgbmV3IEZvcm1hdEVycm9yKHQpfWxldCByPWUtNDgscz0wLG49MTtmb3IoOyhlPXRoaXMubmV4dENoYXIoKSk+PTA7KWlmKGU+PTQ4JiZlPD01Nyl7Y29uc3QgYT1lLTQ4O2lmKHQpcz0xMCpzK2E7ZWxzZXswIT09aSYmKGkqPTEwKTtyPTEwKnIrYX19ZWxzZSBpZig0Nj09PWUpe2lmKDAhPT1pKWJyZWFrO2k9MX1lbHNlIGlmKDQ1PT09ZSl3YXJuKCJCYWRseSBmb3JtYXR0ZWQgbnVtYmVyOiBtaW51cyBzaWduIGluIHRoZSBtaWRkbGUiKTtlbHNle2lmKDY5IT09ZSYmMTAxIT09ZSlicmVhaztlPXRoaXMucGVla0NoYXIoKTtpZig0Mz09PWV8fDQ1PT09ZSl7bj00NT09PWU/LTE6MTt0aGlzLm5leHRDaGFyKCl9ZWxzZSBpZihlPDQ4fHxlPjU3KWJyZWFrO3Q9ITB9MCE9PWkmJihyLz1pKTt0JiYocio9MTAqKihuKnMpKTtyZXR1cm4gYSpyfWdldFN0cmluZygpe2xldCBlPTEsdD0hMTtjb25zdCBpPXRoaXMuc3RyQnVmO2kubGVuZ3RoPTA7bGV0IGE9dGhpcy5uZXh0Q2hhcigpO2Zvcig7Oyl7bGV0IHI9ITE7c3dpdGNoKDB8YSl7Y2FzZS0xOndhcm4oIlVudGVybWluYXRlZCBzdHJpbmciKTt0PSEwO2JyZWFrO2Nhc2UgNDA6KytlO2kucHVzaCgiKCIpO2JyZWFrO2Nhc2UgNDE6aWYoMD09LS1lKXt0aGlzLm5leHRDaGFyKCk7dD0hMH1lbHNlIGkucHVzaCgiKSIpO2JyZWFrO2Nhc2UgOTI6YT10aGlzLm5leHRDaGFyKCk7c3dpdGNoKGEpe2Nhc2UtMTp3YXJuKCJVbnRlcm1pbmF0ZWQgc3RyaW5nIik7dD0hMDticmVhaztjYXNlIDExMDppLnB1c2goIlxuIik7YnJlYWs7Y2FzZSAxMTQ6aS5wdXNoKCJcciIpO2JyZWFrO2Nhc2UgMTE2OmkucHVzaCgiXHQiKTticmVhaztjYXNlIDk4OmkucHVzaCgiXGIiKTticmVhaztjYXNlIDEwMjppLnB1c2goIlxmIik7YnJlYWs7Y2FzZSA5MjpjYXNlIDQwOmNhc2UgNDE6aS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoYSkpO2JyZWFrO2Nhc2UgNDg6Y2FzZSA0OTpjYXNlIDUwOmNhc2UgNTE6Y2FzZSA1MjpjYXNlIDUzOmNhc2UgNTQ6Y2FzZSA1NTpsZXQgZT0xNSZhO2E9dGhpcy5uZXh0Q2hhcigpO3I9ITA7aWYoYT49NDgmJmE8PTU1KXtlPShlPDwzKSsoMTUmYSk7YT10aGlzLm5leHRDaGFyKCk7aWYoYT49NDgmJmE8PTU1KXtyPSExO2U9KGU8PDMpKygxNSZhKX19aS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoZSkpO2JyZWFrO2Nhc2UgMTM6MTA9PT10aGlzLnBlZWtDaGFyKCkmJnRoaXMubmV4dENoYXIoKTticmVhaztjYXNlIDEwOmJyZWFrO2RlZmF1bHQ6aS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoYSkpfWJyZWFrO2RlZmF1bHQ6aS5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoYSkpfWlmKHQpYnJlYWs7cnx8KGE9dGhpcy5uZXh0Q2hhcigpKX1yZXR1cm4gaS5qb2luKCIiKX1nZXROYW1lKCl7bGV0IGUsdDtjb25zdCBpPXRoaXMuc3RyQnVmO2kubGVuZ3RoPTA7Zm9yKDsoZT10aGlzLm5leHRDaGFyKCkpPj0wJiYhc2lbZV07KWlmKDM1PT09ZSl7ZT10aGlzLm5leHRDaGFyKCk7aWYoc2lbZV0pe3dhcm4oIkxleGVyX2dldE5hbWU6IE5VTUJFUiBTSUdOICgjKSBzaG91bGQgYmUgZm9sbG93ZWQgYnkgYSBoZXhhZGVjaW1hbCBudW1iZXIuIik7aS5wdXNoKCIjIik7YnJlYWt9Y29uc3QgYT10b0hleERpZ2l0KGUpO2lmKC0xIT09YSl7dD1lO2U9dGhpcy5uZXh0Q2hhcigpO2NvbnN0IHI9dG9IZXhEaWdpdChlKTtpZigtMT09PXIpe3dhcm4oYExleGVyX2dldE5hbWU6IElsbGVnYWwgZGlnaXQgKCR7U3RyaW5nLmZyb21DaGFyQ29kZShlKX0pIGluIGhleGFkZWNpbWFsIG51bWJlci5gKTtpLnB1c2goIiMiLFN0cmluZy5mcm9tQ2hhckNvZGUodCkpO2lmKHNpW2VdKWJyZWFrO2kucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGUpKTtjb250aW51ZX1pLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShhPDw0fHIpKX1lbHNlIGkucHVzaCgiIyIsU3RyaW5nLmZyb21DaGFyQ29kZShlKSl9ZWxzZSBpLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShlKSk7aS5sZW5ndGg+MTI3JiZ3YXJuKGBOYW1lIHRva2VuIGlzIGxvbmdlciB0aGFuIGFsbG93ZWQgYnkgdGhlIHNwZWM6ICR7aS5sZW5ndGh9YCk7cmV0dXJuIE5hbWUuZ2V0KGkuam9pbigiIikpfV9oZXhTdHJpbmdXYXJuKGUpezUhPXRoaXMuX2hleFN0cmluZ051bVdhcm4rKz90aGlzLl9oZXhTdHJpbmdOdW1XYXJuPjV8fHdhcm4oYGdldEhleFN0cmluZyAtIGlnbm9yaW5nIGludmFsaWQgY2hhcmFjdGVyOiAke2V9YCk6d2FybigiZ2V0SGV4U3RyaW5nIC0gaWdub3JpbmcgYWRkaXRpb25hbCBpbnZhbGlkIGNoYXJhY3RlcnMuIil9Z2V0SGV4U3RyaW5nKCl7Y29uc3QgZT10aGlzLnN0ckJ1ZjtlLmxlbmd0aD0wO2xldCB0PXRoaXMuY3VycmVudENoYXIsaT0tMSxhPS0xO3RoaXMuX2hleFN0cmluZ051bVdhcm49MDtmb3IoOzspe2lmKHQ8MCl7d2FybigiVW50ZXJtaW5hdGVkIGhleCBzdHJpbmciKTticmVha31pZig2Mj09PXQpe3RoaXMubmV4dENoYXIoKTticmVha31pZigxIT09c2lbdF0pe2E9dG9IZXhEaWdpdCh0KTtpZigtMT09PWEpdGhpcy5faGV4U3RyaW5nV2Fybih0KTtlbHNlIGlmKC0xPT09aSlpPWE7ZWxzZXtlLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShpPDw0fGEpKTtpPS0xfXQ9dGhpcy5uZXh0Q2hhcigpfWVsc2UgdD10aGlzLm5leHRDaGFyKCl9LTEhPT1pJiZlLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShpPDw0KSk7cmV0dXJuIGUuam9pbigiIil9Z2V0T2JqKCl7bGV0IGU9ITEsdD10aGlzLmN1cnJlbnRDaGFyO2Zvcig7Oyl7aWYodDwwKXJldHVybiBFdDtpZihlKTEwIT09dCYmMTMhPT10fHwoZT0hMSk7ZWxzZSBpZigzNz09PXQpZT0hMDtlbHNlIGlmKDEhPT1zaVt0XSlicmVhazt0PXRoaXMubmV4dENoYXIoKX1zd2l0Y2goMHx0KXtjYXNlIDQ4OmNhc2UgNDk6Y2FzZSA1MDpjYXNlIDUxOmNhc2UgNTI6Y2FzZSA1MzpjYXNlIDU0OmNhc2UgNTU6Y2FzZSA1NjpjYXNlIDU3OmNhc2UgNDM6Y2FzZSA0NTpjYXNlIDQ2OnJldHVybiB0aGlzLmdldE51bWJlcigpO2Nhc2UgNDA6cmV0dXJuIHRoaXMuZ2V0U3RyaW5nKCk7Y2FzZSA0NzpyZXR1cm4gdGhpcy5nZXROYW1lKCk7Y2FzZSA5MTp0aGlzLm5leHRDaGFyKCk7cmV0dXJuIENtZC5nZXQoIlsiKTtjYXNlIDkzOnRoaXMubmV4dENoYXIoKTtyZXR1cm4gQ21kLmdldCgiXSIpO2Nhc2UgNjA6dD10aGlzLm5leHRDaGFyKCk7aWYoNjA9PT10KXt0aGlzLm5leHRDaGFyKCk7cmV0dXJuIENtZC5nZXQoIjw8Iil9cmV0dXJuIHRoaXMuZ2V0SGV4U3RyaW5nKCk7Y2FzZSA2Mjp0PXRoaXMubmV4dENoYXIoKTtpZig2Mj09PXQpe3RoaXMubmV4dENoYXIoKTtyZXR1cm4gQ21kLmdldCgiPj4iKX1yZXR1cm4gQ21kLmdldCgiPiIpO2Nhc2UgMTIzOnRoaXMubmV4dENoYXIoKTtyZXR1cm4gQ21kLmdldCgieyIpO2Nhc2UgMTI1OnRoaXMubmV4dENoYXIoKTtyZXR1cm4gQ21kLmdldCgifSIpO2Nhc2UgNDE6dGhpcy5uZXh0Q2hhcigpO3Rocm93IG5ldyBGb3JtYXRFcnJvcihgSWxsZWdhbCBjaGFyYWN0ZXI6ICR7dH1gKX1sZXQgaT1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpO2lmKHQ8MzJ8fHQ+MTI3KXtjb25zdCBlPXRoaXMucGVla0NoYXIoKTtpZihlPj0zMiYmZTw9MTI3KXt0aGlzLm5leHRDaGFyKCk7cmV0dXJuIENtZC5nZXQoaSl9fWNvbnN0IGE9dGhpcy5rbm93bkNvbW1hbmRzO2xldCByPXZvaWQgMCE9PWE/LltpXTtmb3IoOyh0PXRoaXMubmV4dENoYXIoKSk+PTAmJiFzaVt0XTspe2NvbnN0IGU9aStTdHJpbmcuZnJvbUNoYXJDb2RlKHQpO2lmKHImJnZvaWQgMD09PWFbZV0pYnJlYWs7aWYoMTI4PT09aS5sZW5ndGgpdGhyb3cgbmV3IEZvcm1hdEVycm9yKGBDb21tYW5kIHRva2VuIHRvbyBsb25nOiAke2kubGVuZ3RofWApO2k9ZTtyPXZvaWQgMCE9PWE/LltpXX1pZigidHJ1ZSI9PT1pKXJldHVybiEwO2lmKCJmYWxzZSI9PT1pKXJldHVybiExO2lmKCJudWxsIj09PWkpcmV0dXJuIG51bGw7IkJJIj09PWkmJih0aGlzLmJlZ2luSW5saW5lSW1hZ2VQb3M9dGhpcy5zdHJlYW0ucG9zKTtyZXR1cm4gQ21kLmdldChpKX1za2lwVG9OZXh0TGluZSgpe2xldCBlPXRoaXMuY3VycmVudENoYXI7Zm9yKDtlPj0wOyl7aWYoMTM9PT1lKXtlPXRoaXMubmV4dENoYXIoKTsxMD09PWUmJnRoaXMubmV4dENoYXIoKTticmVha31pZigxMD09PWUpe3RoaXMubmV4dENoYXIoKTticmVha31lPXRoaXMubmV4dENoYXIoKX19fWNsYXNzIExpbmVhcml6YXRpb257c3RhdGljIGNyZWF0ZShlKXtmdW5jdGlvbiBnZXRJbnQoZSx0LGk9ITEpe2NvbnN0IGE9ZS5nZXQodCk7aWYoTnVtYmVyLmlzSW50ZWdlcihhKSYmKGk/YT49MDphPjApKXJldHVybiBhO3Rocm93IG5ldyBFcnJvcihgVGhlICIke3R9IiBwYXJhbWV0ZXIgaW4gdGhlIGxpbmVhcml6YXRpb24gZGljdGlvbmFyeSBpcyBpbnZhbGlkLmApfWNvbnN0IHQ9bmV3IFBhcnNlcih7bGV4ZXI6bmV3IExleGVyKGUpLHhyZWY6bnVsbH0pLGk9dC5nZXRPYmooKSxhPXQuZ2V0T2JqKCkscj10LmdldE9iaigpLHM9dC5nZXRPYmooKTtsZXQgbixvO2lmKCEoTnVtYmVyLmlzSW50ZWdlcihpKSYmTnVtYmVyLmlzSW50ZWdlcihhKSYmaXNDbWQociwib2JqIikmJnMgaW5zdGFuY2VvZiBEaWN0JiYibnVtYmVyIj09dHlwZW9mKG49cy5nZXQoIkxpbmVhcml6ZWQiKSkmJm4+MCkpcmV0dXJuIG51bGw7aWYoKG89Z2V0SW50KHMsIkwiKSkhPT1lLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoJ1RoZSAiTCIgcGFyYW1ldGVyIGluIHRoZSBsaW5lYXJpemF0aW9uIGRpY3Rpb25hcnkgZG9lcyBub3QgZXF1YWwgdGhlIHN0cmVhbSBsZW5ndGguJyk7cmV0dXJue2xlbmd0aDpvLGhpbnRzOmZ1bmN0aW9uIGdldEhpbnRzKGUpe2NvbnN0IHQ9ZS5nZXQoIkgiKTtsZXQgaTtpZihBcnJheS5pc0FycmF5KHQpJiYoMj09PShpPXQubGVuZ3RoKXx8ND09PWkpKXtmb3IobGV0IGU9MDtlPGk7ZSsrKXtjb25zdCBpPXRbZV07aWYoIShOdW1iZXIuaXNJbnRlZ2VyKGkpJiZpPjApKXRocm93IG5ldyBFcnJvcihgSGludCAoJHtlfSkgaW4gdGhlIGxpbmVhcml6YXRpb24gZGljdGlvbmFyeSBpcyBpbnZhbGlkLmApfXJldHVybiB0fXRocm93IG5ldyBFcnJvcigiSGludCBhcnJheSBpbiB0aGUgbGluZWFyaXphdGlvbiBkaWN0aW9uYXJ5IGlzIGludmFsaWQuIil9KHMpLG9iamVjdE51bWJlckZpcnN0OmdldEludChzLCJPIiksZW5kRmlyc3Q6Z2V0SW50KHMsIkUiKSxudW1QYWdlczpnZXRJbnQocywiTiIpLG1haW5YUmVmRW50cmllc09mZnNldDpnZXRJbnQocywiVCIpLHBhZ2VGaXJzdDpzLmhhcygiUCIpP2dldEludChzLCJQIiwhMCk6MH19fWNvbnN0IG5pPVsiQWRvYmUtR0IxLVVDUzIiLCJBZG9iZS1DTlMxLVVDUzIiLCJBZG9iZS1KYXBhbjEtVUNTMiIsIkFkb2JlLUtvcmVhMS1VQ1MyIiwiNzgtRVVDLUgiLCI3OC1FVUMtViIsIjc4LUgiLCI3OC1SS1NKLUgiLCI3OC1SS1NKLVYiLCI3OC1WIiwiNzhtcy1SS1NKLUgiLCI3OG1zLVJLU0otViIsIjgzcHYtUktTSi1IIiwiOTBtcy1SS1NKLUgiLCI5MG1zLVJLU0otViIsIjkwbXNwLVJLU0otSCIsIjkwbXNwLVJLU0otViIsIjkwcHYtUktTSi1IIiwiOTBwdi1SS1NKLVYiLCJBZGQtSCIsIkFkZC1SS1NKLUgiLCJBZGQtUktTSi1WIiwiQWRkLVYiLCJBZG9iZS1DTlMxLTAiLCJBZG9iZS1DTlMxLTEiLCJBZG9iZS1DTlMxLTIiLCJBZG9iZS1DTlMxLTMiLCJBZG9iZS1DTlMxLTQiLCJBZG9iZS1DTlMxLTUiLCJBZG9iZS1DTlMxLTYiLCJBZG9iZS1HQjEtMCIsIkFkb2JlLUdCMS0xIiwiQWRvYmUtR0IxLTIiLCJBZG9iZS1HQjEtMyIsIkFkb2JlLUdCMS00IiwiQWRvYmUtR0IxLTUiLCJBZG9iZS1KYXBhbjEtMCIsIkFkb2JlLUphcGFuMS0xIiwiQWRvYmUtSmFwYW4xLTIiLCJBZG9iZS1KYXBhbjEtMyIsIkFkb2JlLUphcGFuMS00IiwiQWRvYmUtSmFwYW4xLTUiLCJBZG9iZS1KYXBhbjEtNiIsIkFkb2JlLUtvcmVhMS0wIiwiQWRvYmUtS29yZWExLTEiLCJBZG9iZS1Lb3JlYTEtMiIsIkI1LUgiLCJCNS1WIiwiQjVwYy1IIiwiQjVwYy1WIiwiQ05TLUVVQy1IIiwiQ05TLUVVQy1WIiwiQ05TMS1IIiwiQ05TMS1WIiwiQ05TMi1IIiwiQ05TMi1WIiwiRVRISy1CNS1IIiwiRVRISy1CNS1WIiwiRVRlbi1CNS1IIiwiRVRlbi1CNS1WIiwiRVRlbm1zLUI1LUgiLCJFVGVubXMtQjUtViIsIkVVQy1IIiwiRVVDLVYiLCJFeHQtSCIsIkV4dC1SS1NKLUgiLCJFeHQtUktTSi1WIiwiRXh0LVYiLCJHQi1FVUMtSCIsIkdCLUVVQy1WIiwiR0ItSCIsIkdCLVYiLCJHQkstRVVDLUgiLCJHQkstRVVDLVYiLCJHQksySy1IIiwiR0JLMkstViIsIkdCS3AtRVVDLUgiLCJHQktwLUVVQy1WIiwiR0JULUVVQy1IIiwiR0JULUVVQy1WIiwiR0JULUgiLCJHQlQtViIsIkdCVHBjLUVVQy1IIiwiR0JUcGMtRVVDLVYiLCJHQnBjLUVVQy1IIiwiR0JwYy1FVUMtViIsIkgiLCJIS2RsYS1CNS1IIiwiSEtkbGEtQjUtViIsIkhLZGxiLUI1LUgiLCJIS2RsYi1CNS1WIiwiSEtnY2NzLUI1LUgiLCJIS2djY3MtQjUtViIsIkhLbTMxNC1CNS1IIiwiSEttMzE0LUI1LVYiLCJIS200NzEtQjUtSCIsIkhLbTQ3MS1CNS1WIiwiSEtzY3MtQjUtSCIsIkhLc2NzLUI1LVYiLCJIYW5rYWt1IiwiSGlyYWdhbmEiLCJLU0MtRVVDLUgiLCJLU0MtRVVDLVYiLCJLU0MtSCIsIktTQy1Kb2hhYi1IIiwiS1NDLUpvaGFiLVYiLCJLU0MtViIsIktTQ21zLVVIQy1IIiwiS1NDbXMtVUhDLUhXLUgiLCJLU0Ntcy1VSEMtSFctViIsIktTQ21zLVVIQy1WIiwiS1NDcGMtRVVDLUgiLCJLU0NwYy1FVUMtViIsIkthdGFrYW5hIiwiTldQLUgiLCJOV1AtViIsIlJLU0otSCIsIlJLU0otViIsIlJvbWFuIiwiVW5pQ05TLVVDUzItSCIsIlVuaUNOUy1VQ1MyLVYiLCJVbmlDTlMtVVRGMTYtSCIsIlVuaUNOUy1VVEYxNi1WIiwiVW5pQ05TLVVURjMyLUgiLCJVbmlDTlMtVVRGMzItViIsIlVuaUNOUy1VVEY4LUgiLCJVbmlDTlMtVVRGOC1WIiwiVW5pR0ItVUNTMi1IIiwiVW5pR0ItVUNTMi1WIiwiVW5pR0ItVVRGMTYtSCIsIlVuaUdCLVVURjE2LVYiLCJVbmlHQi1VVEYzMi1IIiwiVW5pR0ItVVRGMzItViIsIlVuaUdCLVVURjgtSCIsIlVuaUdCLVVURjgtViIsIlVuaUpJUy1VQ1MyLUgiLCJVbmlKSVMtVUNTMi1IVy1IIiwiVW5pSklTLVVDUzItSFctViIsIlVuaUpJUy1VQ1MyLVYiLCJVbmlKSVMtVVRGMTYtSCIsIlVuaUpJUy1VVEYxNi1WIiwiVW5pSklTLVVURjMyLUgiLCJVbmlKSVMtVVRGMzItViIsIlVuaUpJUy1VVEY4LUgiLCJVbmlKSVMtVVRGOC1WIiwiVW5pSklTMjAwNC1VVEYxNi1IIiwiVW5pSklTMjAwNC1VVEYxNi1WIiwiVW5pSklTMjAwNC1VVEYzMi1IIiwiVW5pSklTMjAwNC1VVEYzMi1WIiwiVW5pSklTMjAwNC1VVEY4LUgiLCJVbmlKSVMyMDA0LVVURjgtViIsIlVuaUpJU1Byby1VQ1MyLUhXLVYiLCJVbmlKSVNQcm8tVUNTMi1WIiwiVW5pSklTUHJvLVVURjgtViIsIlVuaUpJU1gwMjEzLVVURjMyLUgiLCJVbmlKSVNYMDIxMy1VVEYzMi1WIiwiVW5pSklTWDAyMTMyMDA0LVVURjMyLUgiLCJVbmlKSVNYMDIxMzIwMDQtVVRGMzItViIsIlVuaUtTLVVDUzItSCIsIlVuaUtTLVVDUzItViIsIlVuaUtTLVVURjE2LUgiLCJVbmlLUy1VVEYxNi1WIiwiVW5pS1MtVVRGMzItSCIsIlVuaUtTLVVURjMyLVYiLCJVbmlLUy1VVEY4LUgiLCJVbmlLUy1VVEY4LVYiLCJWIiwiV1AtU3ltYm9sIl0sb2k9MioqMjQtMTtjbGFzcyBDTWFwe2NvbnN0cnVjdG9yKGU9ITEpe3RoaXMuY29kZXNwYWNlUmFuZ2VzPVtbXSxbXSxbXSxbXV07dGhpcy5udW1Db2Rlc3BhY2VSYW5nZXM9MDt0aGlzLl9tYXA9W107dGhpcy5uYW1lPSIiO3RoaXMudmVydGljYWw9ITE7dGhpcy51c2VDTWFwPW51bGw7dGhpcy5idWlsdEluQ01hcD1lfWFkZENvZGVzcGFjZVJhbmdlKGUsdCxpKXt0aGlzLmNvZGVzcGFjZVJhbmdlc1tlLTFdLnB1c2godCxpKTt0aGlzLm51bUNvZGVzcGFjZVJhbmdlcysrfW1hcENpZFJhbmdlKGUsdCxpKXtpZih0LWU+b2kpdGhyb3cgbmV3IEVycm9yKCJtYXBDaWRSYW5nZSAtIGlnbm9yaW5nIGRhdGEgYWJvdmUgTUFYX01BUF9SQU5HRS4iKTtmb3IoO2U8PXQ7KXRoaXMuX21hcFtlKytdPWkrK31tYXBCZlJhbmdlKGUsdCxpKXtpZih0LWU+b2kpdGhyb3cgbmV3IEVycm9yKCJtYXBCZlJhbmdlIC0gaWdub3JpbmcgZGF0YSBhYm92ZSBNQVhfTUFQX1JBTkdFLiIpO2NvbnN0IGE9aS5sZW5ndGgtMTtmb3IoO2U8PXQ7KXt0aGlzLl9tYXBbZSsrXT1pO2NvbnN0IHQ9aS5jaGFyQ29kZUF0KGEpKzE7dD4yNTU/aT1pLnN1YnN0cmluZygwLGEtMSkrU3RyaW5nLmZyb21DaGFyQ29kZShpLmNoYXJDb2RlQXQoYS0xKSsxKSsiXDAiOmk9aS5zdWJzdHJpbmcoMCxhKStTdHJpbmcuZnJvbUNoYXJDb2RlKHQpfX1tYXBCZlJhbmdlVG9BcnJheShlLHQsaSl7aWYodC1lPm9pKXRocm93IG5ldyBFcnJvcigibWFwQmZSYW5nZVRvQXJyYXkgLSBpZ25vcmluZyBkYXRhIGFib3ZlIE1BWF9NQVBfUkFOR0UuIik7Y29uc3QgYT1pLmxlbmd0aDtsZXQgcj0wO2Zvcig7ZTw9dCYmcjxhOyl7dGhpcy5fbWFwW2VdPWlbcisrXTsrK2V9fW1hcE9uZShlLHQpe3RoaXMuX21hcFtlXT10fWxvb2t1cChlKXtyZXR1cm4gdGhpcy5fbWFwW2VdfWNvbnRhaW5zKGUpe3JldHVybiB2b2lkIDAhPT10aGlzLl9tYXBbZV19Zm9yRWFjaChlKXtjb25zdCB0PXRoaXMuX21hcCxpPXQubGVuZ3RoO2lmKGk8PTY1NTM2KWZvcihsZXQgYT0wO2E8aTthKyspdm9pZCAwIT09dFthXSYmZShhLHRbYV0pO2Vsc2UgZm9yKGNvbnN0IGkgaW4gdCllKGksdFtpXSl9Y2hhckNvZGVPZihlKXtjb25zdCB0PXRoaXMuX21hcDtpZih0Lmxlbmd0aDw9NjU1MzYpcmV0dXJuIHQuaW5kZXhPZihlKTtmb3IoY29uc3QgaSBpbiB0KWlmKHRbaV09PT1lKXJldHVybiAwfGk7cmV0dXJuLTF9Z2V0TWFwKCl7cmV0dXJuIHRoaXMuX21hcH1yZWFkQ2hhckNvZGUoZSx0LGkpe2xldCBhPTA7Y29uc3Qgcj10aGlzLmNvZGVzcGFjZVJhbmdlcztmb3IobGV0IHM9MCxuPXIubGVuZ3RoO3M8bjtzKyspe2E9KGE8PDh8ZS5jaGFyQ29kZUF0KHQrcykpPj4+MDtjb25zdCBuPXJbc107Zm9yKGxldCBlPTAsdD1uLmxlbmd0aDtlPHQ7KXtjb25zdCB0PW5bZSsrXSxyPW5bZSsrXTtpZihhPj10JiZhPD1yKXtpLmNoYXJjb2RlPWE7aS5sZW5ndGg9cysxO3JldHVybn19fWkuY2hhcmNvZGU9MDtpLmxlbmd0aD0xfWdldENoYXJDb2RlTGVuZ3RoKGUpe2NvbnN0IHQ9dGhpcy5jb2Rlc3BhY2VSYW5nZXM7Zm9yKGxldCBpPTAsYT10Lmxlbmd0aDtpPGE7aSsrKXtjb25zdCBhPXRbaV07Zm9yKGxldCB0PTAscj1hLmxlbmd0aDt0PHI7KXtjb25zdCByPWFbdCsrXSxzPWFbdCsrXTtpZihlPj1yJiZlPD1zKXJldHVybiBpKzF9fXJldHVybiAxfWdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5fbWFwLmxlbmd0aH1nZXQgaXNJZGVudGl0eUNNYXAoKXtpZigiSWRlbnRpdHktSCIhPT10aGlzLm5hbWUmJiJJZGVudGl0eS1WIiE9PXRoaXMubmFtZSlyZXR1cm4hMTtpZig2NTUzNiE9PXRoaXMuX21hcC5sZW5ndGgpcmV0dXJuITE7Zm9yKGxldCBlPTA7ZTw2NTUzNjtlKyspaWYodGhpcy5fbWFwW2VdIT09ZSlyZXR1cm4hMTtyZXR1cm4hMH19Y2xhc3MgSWRlbnRpdHlDTWFwIGV4dGVuZHMgQ01hcHtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKCk7dGhpcy52ZXJ0aWNhbD1lO3RoaXMuYWRkQ29kZXNwYWNlUmFuZ2UodCwwLDY1NTM1KX1tYXBDaWRSYW5nZShlLHQsaSl7dW5yZWFjaGFibGUoInNob3VsZCBub3QgY2FsbCBtYXBDaWRSYW5nZSIpfW1hcEJmUmFuZ2UoZSx0LGkpe3VucmVhY2hhYmxlKCJzaG91bGQgbm90IGNhbGwgbWFwQmZSYW5nZSIpfW1hcEJmUmFuZ2VUb0FycmF5KGUsdCxpKXt1bnJlYWNoYWJsZSgic2hvdWxkIG5vdCBjYWxsIG1hcEJmUmFuZ2VUb0FycmF5Iil9bWFwT25lKGUsdCl7dW5yZWFjaGFibGUoInNob3VsZCBub3QgY2FsbCBtYXBDaWRPbmUiKX1sb29rdXAoZSl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoZSkmJmU8PTY1NTM1P2U6dm9pZCAwfWNvbnRhaW5zKGUpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGUpJiZlPD02NTUzNX1mb3JFYWNoKGUpe2ZvcihsZXQgdD0wO3Q8PTY1NTM1O3QrKyllKHQsdCl9Y2hhckNvZGVPZihlKXtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihlKSYmZTw9NjU1MzU/ZTotMX1nZXRNYXAoKXtjb25zdCBlPW5ldyBBcnJheSg2NTUzNik7Zm9yKGxldCB0PTA7dDw9NjU1MzU7dCsrKWVbdF09dDtyZXR1cm4gZX1nZXQgbGVuZ3RoKCl7cmV0dXJuIDY1NTM2fWdldCBpc0lkZW50aXR5Q01hcCgpe3VucmVhY2hhYmxlKCJzaG91bGQgbm90IGFjY2VzcyAuaXNJZGVudGl0eUNNYXAiKX19ZnVuY3Rpb24gc3RyVG9JbnQoZSl7bGV0IHQ9MDtmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKyl0PXQ8PDh8ZS5jaGFyQ29kZUF0KGkpO3JldHVybiB0Pj4+MH1mdW5jdGlvbiBleHBlY3RTdHJpbmcoZSl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBGb3JtYXRFcnJvcigiTWFsZm9ybWVkIENNYXA6IGV4cGVjdGVkIHN0cmluZy4iKX1mdW5jdGlvbiBleHBlY3RJbnQoZSl7aWYoIU51bWJlci5pc0ludGVnZXIoZSkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJNYWxmb3JtZWQgQ01hcDogZXhwZWN0ZWQgaW50LiIpfWZ1bmN0aW9uIHBhcnNlQmZDaGFyKGUsdCl7Zm9yKDs7KXtsZXQgaT10LmdldE9iaigpO2lmKGk9PT1FdClicmVhaztpZihpc0NtZChpLCJlbmRiZmNoYXIiKSlyZXR1cm47ZXhwZWN0U3RyaW5nKGkpO2NvbnN0IGE9c3RyVG9JbnQoaSk7aT10LmdldE9iaigpO2V4cGVjdFN0cmluZyhpKTtjb25zdCByPWk7ZS5tYXBPbmUoYSxyKX19ZnVuY3Rpb24gcGFyc2VCZlJhbmdlKGUsdCl7Zm9yKDs7KXtsZXQgaT10LmdldE9iaigpO2lmKGk9PT1FdClicmVhaztpZihpc0NtZChpLCJlbmRiZnJhbmdlIikpcmV0dXJuO2V4cGVjdFN0cmluZyhpKTtjb25zdCBhPXN0clRvSW50KGkpO2k9dC5nZXRPYmooKTtleHBlY3RTdHJpbmcoaSk7Y29uc3Qgcj1zdHJUb0ludChpKTtpPXQuZ2V0T2JqKCk7aWYoTnVtYmVyLmlzSW50ZWdlcihpKXx8InN0cmluZyI9PXR5cGVvZiBpKXtjb25zdCB0PU51bWJlci5pc0ludGVnZXIoaSk/U3RyaW5nLmZyb21DaGFyQ29kZShpKTppO2UubWFwQmZSYW5nZShhLHIsdCl9ZWxzZXtpZighaXNDbWQoaSwiWyIpKWJyZWFrO3tpPXQuZ2V0T2JqKCk7Y29uc3Qgcz1bXTtmb3IoOyFpc0NtZChpLCJdIikmJmkhPT1FdDspe3MucHVzaChpKTtpPXQuZ2V0T2JqKCl9ZS5tYXBCZlJhbmdlVG9BcnJheShhLHIscyl9fX10aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkludmFsaWQgYmYgcmFuZ2UuIil9ZnVuY3Rpb24gcGFyc2VDaWRDaGFyKGUsdCl7Zm9yKDs7KXtsZXQgaT10LmdldE9iaigpO2lmKGk9PT1FdClicmVhaztpZihpc0NtZChpLCJlbmRjaWRjaGFyIikpcmV0dXJuO2V4cGVjdFN0cmluZyhpKTtjb25zdCBhPXN0clRvSW50KGkpO2k9dC5nZXRPYmooKTtleHBlY3RJbnQoaSk7Y29uc3Qgcj1pO2UubWFwT25lKGEscil9fWZ1bmN0aW9uIHBhcnNlQ2lkUmFuZ2UoZSx0KXtmb3IoOzspe2xldCBpPXQuZ2V0T2JqKCk7aWYoaT09PUV0KWJyZWFrO2lmKGlzQ21kKGksImVuZGNpZHJhbmdlIikpcmV0dXJuO2V4cGVjdFN0cmluZyhpKTtjb25zdCBhPXN0clRvSW50KGkpO2k9dC5nZXRPYmooKTtleHBlY3RTdHJpbmcoaSk7Y29uc3Qgcj1zdHJUb0ludChpKTtpPXQuZ2V0T2JqKCk7ZXhwZWN0SW50KGkpO2NvbnN0IHM9aTtlLm1hcENpZFJhbmdlKGEscixzKX19ZnVuY3Rpb24gcGFyc2VDb2Rlc3BhY2VSYW5nZShlLHQpe2Zvcig7Oyl7bGV0IGk9dC5nZXRPYmooKTtpZihpPT09RXQpYnJlYWs7aWYoaXNDbWQoaSwiZW5kY29kZXNwYWNlcmFuZ2UiKSlyZXR1cm47aWYoInN0cmluZyIhPXR5cGVvZiBpKWJyZWFrO2NvbnN0IGE9c3RyVG9JbnQoaSk7aT10LmdldE9iaigpO2lmKCJzdHJpbmciIT10eXBlb2YgaSlicmVhaztjb25zdCByPXN0clRvSW50KGkpO2UuYWRkQ29kZXNwYWNlUmFuZ2UoaS5sZW5ndGgsYSxyKX10aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkludmFsaWQgY29kZXNwYWNlIHJhbmdlLiIpfWZ1bmN0aW9uIHBhcnNlV01vZGUoZSx0KXtjb25zdCBpPXQuZ2V0T2JqKCk7TnVtYmVyLmlzSW50ZWdlcihpKSYmKGUudmVydGljYWw9ISFpKX1mdW5jdGlvbiBwYXJzZUNNYXBOYW1lKGUsdCl7Y29uc3QgaT10LmdldE9iaigpO2kgaW5zdGFuY2VvZiBOYW1lJiYoZS5uYW1lPWkubmFtZSl9YXN5bmMgZnVuY3Rpb24gcGFyc2VDTWFwKGUsdCxpLGEpe2xldCByLHM7QTpmb3IoOzspdHJ5e2NvbnN0IGk9dC5nZXRPYmooKTtpZihpPT09RXQpYnJlYWs7aWYoaSBpbnN0YW5jZW9mIE5hbWUpeyJXTW9kZSI9PT1pLm5hbWU/cGFyc2VXTW9kZShlLHQpOiJDTWFwTmFtZSI9PT1pLm5hbWUmJnBhcnNlQ01hcE5hbWUoZSx0KTtyPWl9ZWxzZSBpZihpIGluc3RhbmNlb2YgQ21kKXN3aXRjaChpLmNtZCl7Y2FzZSJlbmRjbWFwIjpicmVhayBBO2Nhc2UidXNlY21hcCI6ciBpbnN0YW5jZW9mIE5hbWUmJihzPXIubmFtZSk7YnJlYWs7Y2FzZSJiZWdpbmNvZGVzcGFjZXJhbmdlIjpwYXJzZUNvZGVzcGFjZVJhbmdlKGUsdCk7YnJlYWs7Y2FzZSJiZWdpbmJmY2hhciI6cGFyc2VCZkNoYXIoZSx0KTticmVhaztjYXNlImJlZ2luY2lkY2hhciI6cGFyc2VDaWRDaGFyKGUsdCk7YnJlYWs7Y2FzZSJiZWdpbmJmcmFuZ2UiOnBhcnNlQmZSYW5nZShlLHQpO2JyZWFrO2Nhc2UiYmVnaW5jaWRyYW5nZSI6cGFyc2VDaWRSYW5nZShlLHQpfX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTt3YXJuKCJJbnZhbGlkIGNNYXAgZGF0YTogIitlKTtjb250aW51ZX0hYSYmcyYmKGE9cyk7cmV0dXJuIGE/ZXh0ZW5kQ01hcChlLGksYSk6ZX1hc3luYyBmdW5jdGlvbiBleHRlbmRDTWFwKGUsdCxpKXtlLnVzZUNNYXA9YXdhaXQgY3JlYXRlQnVpbHRJbkNNYXAoaSx0KTtpZigwPT09ZS5udW1Db2Rlc3BhY2VSYW5nZXMpe2NvbnN0IHQ9ZS51c2VDTWFwLmNvZGVzcGFjZVJhbmdlcztmb3IobGV0IGk9MDtpPHQubGVuZ3RoO2krKyllLmNvZGVzcGFjZVJhbmdlc1tpXT10W2ldLnNsaWNlKCk7ZS5udW1Db2Rlc3BhY2VSYW5nZXM9ZS51c2VDTWFwLm51bUNvZGVzcGFjZVJhbmdlc31lLnVzZUNNYXAuZm9yRWFjaCgoZnVuY3Rpb24odCxpKXtlLmNvbnRhaW5zKHQpfHxlLm1hcE9uZSh0LGkpfSkpO3JldHVybiBlfWFzeW5jIGZ1bmN0aW9uIGNyZWF0ZUJ1aWx0SW5DTWFwKGUsdCl7aWYoIklkZW50aXR5LUgiPT09ZSlyZXR1cm4gbmV3IElkZW50aXR5Q01hcCghMSwyKTtpZigiSWRlbnRpdHktViI9PT1lKXJldHVybiBuZXcgSWRlbnRpdHlDTWFwKCEwLDIpO2lmKCFuaS5pbmNsdWRlcyhlKSl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gQ01hcCBuYW1lOiAiK2UpO2lmKCF0KXRocm93IG5ldyBFcnJvcigiQnVpbHQtaW4gQ01hcCBwYXJhbWV0ZXJzIGFyZSBub3QgcHJvdmlkZWQuIik7Y29uc3R7Y01hcERhdGE6aSxpc0NvbXByZXNzZWQ6YX09YXdhaXQgdChlKSxyPW5ldyBDTWFwKCEwKTtpZihhKXJldHVybihuZXcgQmluYXJ5Q01hcFJlYWRlcikucHJvY2VzcyhpLHIsKGU9PmV4dGVuZENNYXAocix0LGUpKSk7Y29uc3Qgcz1uZXcgTGV4ZXIobmV3IFN0cmVhbShpKSk7cmV0dXJuIHBhcnNlQ01hcChyLHMsdCxudWxsKX1jbGFzcyBDTWFwRmFjdG9yeXtzdGF0aWMgYXN5bmMgY3JlYXRlKHtlbmNvZGluZzplLGZldGNoQnVpbHRJbkNNYXA6dCx1c2VDTWFwOml9KXtpZihlIGluc3RhbmNlb2YgTmFtZSlyZXR1cm4gY3JlYXRlQnVpbHRJbkNNYXAoZS5uYW1lLHQpO2lmKGUgaW5zdGFuY2VvZiBCYXNlU3RyZWFtKXtjb25zdCBhPWF3YWl0IHBhcnNlQ01hcChuZXcgQ01hcCxuZXcgTGV4ZXIoZSksdCxpKTtyZXR1cm4gYS5pc0lkZW50aXR5Q01hcD9jcmVhdGVCdWlsdEluQ01hcChhLm5hbWUsdCk6YX10aHJvdyBuZXcgRXJyb3IoIkVuY29kaW5nIHJlcXVpcmVkLiIpfX1fX3dlYnBhY2tfcmVxdWlyZV9fKDE3OTUpO2NvbnN0IGdpPVsiLm5vdGRlZiIsInNwYWNlIiwiZXhjbGFtIiwicXVvdGVkYmwiLCJudW1iZXJzaWduIiwiZG9sbGFyIiwicGVyY2VudCIsImFtcGVyc2FuZCIsInF1b3RlcmlnaHQiLCJwYXJlbmxlZnQiLCJwYXJlbnJpZ2h0IiwiYXN0ZXJpc2siLCJwbHVzIiwiY29tbWEiLCJoeXBoZW4iLCJwZXJpb2QiLCJzbGFzaCIsInplcm8iLCJvbmUiLCJ0d28iLCJ0aHJlZSIsImZvdXIiLCJmaXZlIiwic2l4Iiwic2V2ZW4iLCJlaWdodCIsIm5pbmUiLCJjb2xvbiIsInNlbWljb2xvbiIsImxlc3MiLCJlcXVhbCIsImdyZWF0ZXIiLCJxdWVzdGlvbiIsImF0IiwiQSIsIkIiLCJDIiwiRCIsIkUiLCJGIiwiRyIsIkgiLCJJIiwiSiIsIksiLCJMIiwiTSIsIk4iLCJPIiwiUCIsIlEiLCJSIiwiUyIsIlQiLCJVIiwiViIsIlciLCJYIiwiWSIsIloiLCJicmFja2V0bGVmdCIsImJhY2tzbGFzaCIsImJyYWNrZXRyaWdodCIsImFzY2lpY2lyY3VtIiwidW5kZXJzY29yZSIsInF1b3RlbGVmdCIsImEiLCJiIiwiYyIsImQiLCJlIiwiZiIsImciLCJoIiwiaSIsImoiLCJrIiwibCIsIm0iLCJuIiwibyIsInAiLCJxIiwiciIsInMiLCJ0IiwidSIsInYiLCJ3IiwieCIsInkiLCJ6IiwiYnJhY2VsZWZ0IiwiYmFyIiwiYnJhY2VyaWdodCIsImFzY2lpdGlsZGUiLCJleGNsYW1kb3duIiwiY2VudCIsInN0ZXJsaW5nIiwiZnJhY3Rpb24iLCJ5ZW4iLCJmbG9yaW4iLCJzZWN0aW9uIiwiY3VycmVuY3kiLCJxdW90ZXNpbmdsZSIsInF1b3RlZGJsbGVmdCIsImd1aWxsZW1vdGxlZnQiLCJndWlsc2luZ2xsZWZ0IiwiZ3VpbHNpbmdscmlnaHQiLCJmaSIsImZsIiwiZW5kYXNoIiwiZGFnZ2VyIiwiZGFnZ2VyZGJsIiwicGVyaW9kY2VudGVyZWQiLCJwYXJhZ3JhcGgiLCJidWxsZXQiLCJxdW90ZXNpbmdsYmFzZSIsInF1b3RlZGJsYmFzZSIsInF1b3RlZGJscmlnaHQiLCJndWlsbGVtb3RyaWdodCIsImVsbGlwc2lzIiwicGVydGhvdXNhbmQiLCJxdWVzdGlvbmRvd24iLCJncmF2ZSIsImFjdXRlIiwiY2lyY3VtZmxleCIsInRpbGRlIiwibWFjcm9uIiwiYnJldmUiLCJkb3RhY2NlbnQiLCJkaWVyZXNpcyIsInJpbmciLCJjZWRpbGxhIiwiaHVuZ2FydW1sYXV0Iiwib2dvbmVrIiwiY2Fyb24iLCJlbWRhc2giLCJBRSIsIm9yZGZlbWluaW5lIiwiTHNsYXNoIiwiT3NsYXNoIiwiT0UiLCJvcmRtYXNjdWxpbmUiLCJhZSIsImRvdGxlc3NpIiwibHNsYXNoIiwib3NsYXNoIiwib2UiLCJnZXJtYW5kYmxzIiwib25lc3VwZXJpb3IiLCJsb2dpY2Fsbm90IiwibXUiLCJ0cmFkZW1hcmsiLCJFdGgiLCJvbmVoYWxmIiwicGx1c21pbnVzIiwiVGhvcm4iLCJvbmVxdWFydGVyIiwiZGl2aWRlIiwiYnJva2VuYmFyIiwiZGVncmVlIiwidGhvcm4iLCJ0aHJlZXF1YXJ0ZXJzIiwidHdvc3VwZXJpb3IiLCJyZWdpc3RlcmVkIiwibWludXMiLCJldGgiLCJtdWx0aXBseSIsInRocmVlc3VwZXJpb3IiLCJjb3B5cmlnaHQiLCJBYWN1dGUiLCJBY2lyY3VtZmxleCIsIkFkaWVyZXNpcyIsIkFncmF2ZSIsIkFyaW5nIiwiQXRpbGRlIiwiQ2NlZGlsbGEiLCJFYWN1dGUiLCJFY2lyY3VtZmxleCIsIkVkaWVyZXNpcyIsIkVncmF2ZSIsIklhY3V0ZSIsIkljaXJjdW1mbGV4IiwiSWRpZXJlc2lzIiwiSWdyYXZlIiwiTnRpbGRlIiwiT2FjdXRlIiwiT2NpcmN1bWZsZXgiLCJPZGllcmVzaXMiLCJPZ3JhdmUiLCJPdGlsZGUiLCJTY2Fyb24iLCJVYWN1dGUiLCJVY2lyY3VtZmxleCIsIlVkaWVyZXNpcyIsIlVncmF2ZSIsIllhY3V0ZSIsIllkaWVyZXNpcyIsIlpjYXJvbiIsImFhY3V0ZSIsImFjaXJjdW1mbGV4IiwiYWRpZXJlc2lzIiwiYWdyYXZlIiwiYXJpbmciLCJhdGlsZGUiLCJjY2VkaWxsYSIsImVhY3V0ZSIsImVjaXJjdW1mbGV4IiwiZWRpZXJlc2lzIiwiZWdyYXZlIiwiaWFjdXRlIiwiaWNpcmN1bWZsZXgiLCJpZGllcmVzaXMiLCJpZ3JhdmUiLCJudGlsZGUiLCJvYWN1dGUiLCJvY2lyY3VtZmxleCIsIm9kaWVyZXNpcyIsIm9ncmF2ZSIsIm90aWxkZSIsInNjYXJvbiIsInVhY3V0ZSIsInVjaXJjdW1mbGV4IiwidWRpZXJlc2lzIiwidWdyYXZlIiwieWFjdXRlIiwieWRpZXJlc2lzIiwiemNhcm9uIl0sSWk9WyIubm90ZGVmIiwic3BhY2UiLCJleGNsYW1zbWFsbCIsIkh1bmdhcnVtbGF1dHNtYWxsIiwiZG9sbGFyb2xkc3R5bGUiLCJkb2xsYXJzdXBlcmlvciIsImFtcGVyc2FuZHNtYWxsIiwiQWN1dGVzbWFsbCIsInBhcmVubGVmdHN1cGVyaW9yIiwicGFyZW5yaWdodHN1cGVyaW9yIiwidHdvZG90ZW5sZWFkZXIiLCJvbmVkb3RlbmxlYWRlciIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwiZnJhY3Rpb24iLCJ6ZXJvb2xkc3R5bGUiLCJvbmVvbGRzdHlsZSIsInR3b29sZHN0eWxlIiwidGhyZWVvbGRzdHlsZSIsImZvdXJvbGRzdHlsZSIsImZpdmVvbGRzdHlsZSIsInNpeG9sZHN0eWxlIiwic2V2ZW5vbGRzdHlsZSIsImVpZ2h0b2xkc3R5bGUiLCJuaW5lb2xkc3R5bGUiLCJjb2xvbiIsInNlbWljb2xvbiIsImNvbW1hc3VwZXJpb3IiLCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoIiwicGVyaW9kc3VwZXJpb3IiLCJxdWVzdGlvbnNtYWxsIiwiYXN1cGVyaW9yIiwiYnN1cGVyaW9yIiwiY2VudHN1cGVyaW9yIiwiZHN1cGVyaW9yIiwiZXN1cGVyaW9yIiwiaXN1cGVyaW9yIiwibHN1cGVyaW9yIiwibXN1cGVyaW9yIiwibnN1cGVyaW9yIiwib3N1cGVyaW9yIiwicnN1cGVyaW9yIiwic3N1cGVyaW9yIiwidHN1cGVyaW9yIiwiZmYiLCJmaSIsImZsIiwiZmZpIiwiZmZsIiwicGFyZW5sZWZ0aW5mZXJpb3IiLCJwYXJlbnJpZ2h0aW5mZXJpb3IiLCJDaXJjdW1mbGV4c21hbGwiLCJoeXBoZW5zdXBlcmlvciIsIkdyYXZlc21hbGwiLCJBc21hbGwiLCJCc21hbGwiLCJDc21hbGwiLCJEc21hbGwiLCJFc21hbGwiLCJGc21hbGwiLCJHc21hbGwiLCJIc21hbGwiLCJJc21hbGwiLCJKc21hbGwiLCJLc21hbGwiLCJMc21hbGwiLCJNc21hbGwiLCJOc21hbGwiLCJPc21hbGwiLCJQc21hbGwiLCJRc21hbGwiLCJSc21hbGwiLCJTc21hbGwiLCJUc21hbGwiLCJVc21hbGwiLCJWc21hbGwiLCJXc21hbGwiLCJYc21hbGwiLCJZc21hbGwiLCJac21hbGwiLCJjb2xvbm1vbmV0YXJ5Iiwib25lZml0dGVkIiwicnVwaWFoIiwiVGlsZGVzbWFsbCIsImV4Y2xhbWRvd25zbWFsbCIsImNlbnRvbGRzdHlsZSIsIkxzbGFzaHNtYWxsIiwiU2Nhcm9uc21hbGwiLCJaY2Fyb25zbWFsbCIsIkRpZXJlc2lzc21hbGwiLCJCcmV2ZXNtYWxsIiwiQ2Fyb25zbWFsbCIsIkRvdGFjY2VudHNtYWxsIiwiTWFjcm9uc21hbGwiLCJmaWd1cmVkYXNoIiwiaHlwaGVuaW5mZXJpb3IiLCJPZ29uZWtzbWFsbCIsIlJpbmdzbWFsbCIsIkNlZGlsbGFzbWFsbCIsIm9uZXF1YXJ0ZXIiLCJvbmVoYWxmIiwidGhyZWVxdWFydGVycyIsInF1ZXN0aW9uZG93bnNtYWxsIiwib25lZWlnaHRoIiwidGhyZWVlaWdodGhzIiwiZml2ZWVpZ2h0aHMiLCJzZXZlbmVpZ2h0aHMiLCJvbmV0aGlyZCIsInR3b3RoaXJkcyIsInplcm9zdXBlcmlvciIsIm9uZXN1cGVyaW9yIiwidHdvc3VwZXJpb3IiLCJ0aHJlZXN1cGVyaW9yIiwiZm91cnN1cGVyaW9yIiwiZml2ZXN1cGVyaW9yIiwic2l4c3VwZXJpb3IiLCJzZXZlbnN1cGVyaW9yIiwiZWlnaHRzdXBlcmlvciIsIm5pbmVzdXBlcmlvciIsInplcm9pbmZlcmlvciIsIm9uZWluZmVyaW9yIiwidHdvaW5mZXJpb3IiLCJ0aHJlZWluZmVyaW9yIiwiZm91cmluZmVyaW9yIiwiZml2ZWluZmVyaW9yIiwic2l4aW5mZXJpb3IiLCJzZXZlbmluZmVyaW9yIiwiZWlnaHRpbmZlcmlvciIsIm5pbmVpbmZlcmlvciIsImNlbnRpbmZlcmlvciIsImRvbGxhcmluZmVyaW9yIiwicGVyaW9kaW5mZXJpb3IiLCJjb21tYWluZmVyaW9yIiwiQWdyYXZlc21hbGwiLCJBYWN1dGVzbWFsbCIsIkFjaXJjdW1mbGV4c21hbGwiLCJBdGlsZGVzbWFsbCIsIkFkaWVyZXNpc3NtYWxsIiwiQXJpbmdzbWFsbCIsIkFFc21hbGwiLCJDY2VkaWxsYXNtYWxsIiwiRWdyYXZlc21hbGwiLCJFYWN1dGVzbWFsbCIsIkVjaXJjdW1mbGV4c21hbGwiLCJFZGllcmVzaXNzbWFsbCIsIklncmF2ZXNtYWxsIiwiSWFjdXRlc21hbGwiLCJJY2lyY3VtZmxleHNtYWxsIiwiSWRpZXJlc2lzc21hbGwiLCJFdGhzbWFsbCIsIk50aWxkZXNtYWxsIiwiT2dyYXZlc21hbGwiLCJPYWN1dGVzbWFsbCIsIk9jaXJjdW1mbGV4c21hbGwiLCJPdGlsZGVzbWFsbCIsIk9kaWVyZXNpc3NtYWxsIiwiT0VzbWFsbCIsIk9zbGFzaHNtYWxsIiwiVWdyYXZlc21hbGwiLCJVYWN1dGVzbWFsbCIsIlVjaXJjdW1mbGV4c21hbGwiLCJVZGllcmVzaXNzbWFsbCIsIllhY3V0ZXNtYWxsIiwiVGhvcm5zbWFsbCIsIllkaWVyZXNpc3NtYWxsIl0sY2k9WyIubm90ZGVmIiwic3BhY2UiLCJkb2xsYXJvbGRzdHlsZSIsImRvbGxhcnN1cGVyaW9yIiwicGFyZW5sZWZ0c3VwZXJpb3IiLCJwYXJlbnJpZ2h0c3VwZXJpb3IiLCJ0d29kb3RlbmxlYWRlciIsIm9uZWRvdGVubGVhZGVyIiwiY29tbWEiLCJoeXBoZW4iLCJwZXJpb2QiLCJmcmFjdGlvbiIsInplcm9vbGRzdHlsZSIsIm9uZW9sZHN0eWxlIiwidHdvb2xkc3R5bGUiLCJ0aHJlZW9sZHN0eWxlIiwiZm91cm9sZHN0eWxlIiwiZml2ZW9sZHN0eWxlIiwic2l4b2xkc3R5bGUiLCJzZXZlbm9sZHN0eWxlIiwiZWlnaHRvbGRzdHlsZSIsIm5pbmVvbGRzdHlsZSIsImNvbG9uIiwic2VtaWNvbG9uIiwiY29tbWFzdXBlcmlvciIsInRocmVlcXVhcnRlcnNlbWRhc2giLCJwZXJpb2RzdXBlcmlvciIsImFzdXBlcmlvciIsImJzdXBlcmlvciIsImNlbnRzdXBlcmlvciIsImRzdXBlcmlvciIsImVzdXBlcmlvciIsImlzdXBlcmlvciIsImxzdXBlcmlvciIsIm1zdXBlcmlvciIsIm5zdXBlcmlvciIsIm9zdXBlcmlvciIsInJzdXBlcmlvciIsInNzdXBlcmlvciIsInRzdXBlcmlvciIsImZmIiwiZmkiLCJmbCIsImZmaSIsImZmbCIsInBhcmVubGVmdGluZmVyaW9yIiwicGFyZW5yaWdodGluZmVyaW9yIiwiaHlwaGVuc3VwZXJpb3IiLCJjb2xvbm1vbmV0YXJ5Iiwib25lZml0dGVkIiwicnVwaWFoIiwiY2VudG9sZHN0eWxlIiwiZmlndXJlZGFzaCIsImh5cGhlbmluZmVyaW9yIiwib25lcXVhcnRlciIsIm9uZWhhbGYiLCJ0aHJlZXF1YXJ0ZXJzIiwib25lZWlnaHRoIiwidGhyZWVlaWdodGhzIiwiZml2ZWVpZ2h0aHMiLCJzZXZlbmVpZ2h0aHMiLCJvbmV0aGlyZCIsInR3b3RoaXJkcyIsInplcm9zdXBlcmlvciIsIm9uZXN1cGVyaW9yIiwidHdvc3VwZXJpb3IiLCJ0aHJlZXN1cGVyaW9yIiwiZm91cnN1cGVyaW9yIiwiZml2ZXN1cGVyaW9yIiwic2l4c3VwZXJpb3IiLCJzZXZlbnN1cGVyaW9yIiwiZWlnaHRzdXBlcmlvciIsIm5pbmVzdXBlcmlvciIsInplcm9pbmZlcmlvciIsIm9uZWluZmVyaW9yIiwidHdvaW5mZXJpb3IiLCJ0aHJlZWluZmVyaW9yIiwiZm91cmluZmVyaW9yIiwiZml2ZWluZmVyaW9yIiwic2l4aW5mZXJpb3IiLCJzZXZlbmluZmVyaW9yIiwiZWlnaHRpbmZlcmlvciIsIm5pbmVpbmZlcmlvciIsImNlbnRpbmZlcmlvciIsImRvbGxhcmluZmVyaW9yIiwicGVyaW9kaW5mZXJpb3IiLCJjb21tYWluZmVyaW9yIl0sbGk9WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJzcGFjZSIsImV4Y2xhbXNtYWxsIiwiSHVuZ2FydW1sYXV0c21hbGwiLCIiLCJkb2xsYXJvbGRzdHlsZSIsImRvbGxhcnN1cGVyaW9yIiwiYW1wZXJzYW5kc21hbGwiLCJBY3V0ZXNtYWxsIiwicGFyZW5sZWZ0c3VwZXJpb3IiLCJwYXJlbnJpZ2h0c3VwZXJpb3IiLCJ0d29kb3RlbmxlYWRlciIsIm9uZWRvdGVubGVhZGVyIiwiY29tbWEiLCJoeXBoZW4iLCJwZXJpb2QiLCJmcmFjdGlvbiIsInplcm9vbGRzdHlsZSIsIm9uZW9sZHN0eWxlIiwidHdvb2xkc3R5bGUiLCJ0aHJlZW9sZHN0eWxlIiwiZm91cm9sZHN0eWxlIiwiZml2ZW9sZHN0eWxlIiwic2l4b2xkc3R5bGUiLCJzZXZlbm9sZHN0eWxlIiwiZWlnaHRvbGRzdHlsZSIsIm5pbmVvbGRzdHlsZSIsImNvbG9uIiwic2VtaWNvbG9uIiwiY29tbWFzdXBlcmlvciIsInRocmVlcXVhcnRlcnNlbWRhc2giLCJwZXJpb2RzdXBlcmlvciIsInF1ZXN0aW9uc21hbGwiLCIiLCJhc3VwZXJpb3IiLCJic3VwZXJpb3IiLCJjZW50c3VwZXJpb3IiLCJkc3VwZXJpb3IiLCJlc3VwZXJpb3IiLCIiLCIiLCIiLCJpc3VwZXJpb3IiLCIiLCIiLCJsc3VwZXJpb3IiLCJtc3VwZXJpb3IiLCJuc3VwZXJpb3IiLCJvc3VwZXJpb3IiLCIiLCIiLCJyc3VwZXJpb3IiLCJzc3VwZXJpb3IiLCJ0c3VwZXJpb3IiLCIiLCJmZiIsImZpIiwiZmwiLCJmZmkiLCJmZmwiLCJwYXJlbmxlZnRpbmZlcmlvciIsIiIsInBhcmVucmlnaHRpbmZlcmlvciIsIkNpcmN1bWZsZXhzbWFsbCIsImh5cGhlbnN1cGVyaW9yIiwiR3JhdmVzbWFsbCIsIkFzbWFsbCIsIkJzbWFsbCIsIkNzbWFsbCIsIkRzbWFsbCIsIkVzbWFsbCIsIkZzbWFsbCIsIkdzbWFsbCIsIkhzbWFsbCIsIklzbWFsbCIsIkpzbWFsbCIsIktzbWFsbCIsIkxzbWFsbCIsIk1zbWFsbCIsIk5zbWFsbCIsIk9zbWFsbCIsIlBzbWFsbCIsIlFzbWFsbCIsIlJzbWFsbCIsIlNzbWFsbCIsIlRzbWFsbCIsIlVzbWFsbCIsIlZzbWFsbCIsIldzbWFsbCIsIlhzbWFsbCIsIllzbWFsbCIsIlpzbWFsbCIsImNvbG9ubW9uZXRhcnkiLCJvbmVmaXR0ZWQiLCJydXBpYWgiLCJUaWxkZXNtYWxsIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiZXhjbGFtZG93bnNtYWxsIiwiY2VudG9sZHN0eWxlIiwiTHNsYXNoc21hbGwiLCIiLCIiLCJTY2Fyb25zbWFsbCIsIlpjYXJvbnNtYWxsIiwiRGllcmVzaXNzbWFsbCIsIkJyZXZlc21hbGwiLCJDYXJvbnNtYWxsIiwiIiwiRG90YWNjZW50c21hbGwiLCIiLCIiLCJNYWNyb25zbWFsbCIsIiIsIiIsImZpZ3VyZWRhc2giLCJoeXBoZW5pbmZlcmlvciIsIiIsIiIsIk9nb25la3NtYWxsIiwiUmluZ3NtYWxsIiwiQ2VkaWxsYXNtYWxsIiwiIiwiIiwiIiwib25lcXVhcnRlciIsIm9uZWhhbGYiLCJ0aHJlZXF1YXJ0ZXJzIiwicXVlc3Rpb25kb3duc21hbGwiLCJvbmVlaWdodGgiLCJ0aHJlZWVpZ2h0aHMiLCJmaXZlZWlnaHRocyIsInNldmVuZWlnaHRocyIsIm9uZXRoaXJkIiwidHdvdGhpcmRzIiwiIiwiIiwiemVyb3N1cGVyaW9yIiwib25lc3VwZXJpb3IiLCJ0d29zdXBlcmlvciIsInRocmVlc3VwZXJpb3IiLCJmb3Vyc3VwZXJpb3IiLCJmaXZlc3VwZXJpb3IiLCJzaXhzdXBlcmlvciIsInNldmVuc3VwZXJpb3IiLCJlaWdodHN1cGVyaW9yIiwibmluZXN1cGVyaW9yIiwiemVyb2luZmVyaW9yIiwib25laW5mZXJpb3IiLCJ0d29pbmZlcmlvciIsInRocmVlaW5mZXJpb3IiLCJmb3VyaW5mZXJpb3IiLCJmaXZlaW5mZXJpb3IiLCJzaXhpbmZlcmlvciIsInNldmVuaW5mZXJpb3IiLCJlaWdodGluZmVyaW9yIiwibmluZWluZmVyaW9yIiwiY2VudGluZmVyaW9yIiwiZG9sbGFyaW5mZXJpb3IiLCJwZXJpb2RpbmZlcmlvciIsImNvbW1haW5mZXJpb3IiLCJBZ3JhdmVzbWFsbCIsIkFhY3V0ZXNtYWxsIiwiQWNpcmN1bWZsZXhzbWFsbCIsIkF0aWxkZXNtYWxsIiwiQWRpZXJlc2lzc21hbGwiLCJBcmluZ3NtYWxsIiwiQUVzbWFsbCIsIkNjZWRpbGxhc21hbGwiLCJFZ3JhdmVzbWFsbCIsIkVhY3V0ZXNtYWxsIiwiRWNpcmN1bWZsZXhzbWFsbCIsIkVkaWVyZXNpc3NtYWxsIiwiSWdyYXZlc21hbGwiLCJJYWN1dGVzbWFsbCIsIkljaXJjdW1mbGV4c21hbGwiLCJJZGllcmVzaXNzbWFsbCIsIkV0aHNtYWxsIiwiTnRpbGRlc21hbGwiLCJPZ3JhdmVzbWFsbCIsIk9hY3V0ZXNtYWxsIiwiT2NpcmN1bWZsZXhzbWFsbCIsIk90aWxkZXNtYWxsIiwiT2RpZXJlc2lzc21hbGwiLCJPRXNtYWxsIiwiT3NsYXNoc21hbGwiLCJVZ3JhdmVzbWFsbCIsIlVhY3V0ZXNtYWxsIiwiVWNpcmN1bWZsZXhzbWFsbCIsIlVkaWVyZXNpc3NtYWxsIiwiWWFjdXRlc21hbGwiLCJUaG9ybnNtYWxsIiwiWWRpZXJlc2lzc21hbGwiXSxoaT1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsInNwYWNlIiwiZXhjbGFtc21hbGwiLCJIdW5nYXJ1bWxhdXRzbWFsbCIsImNlbnRvbGRzdHlsZSIsImRvbGxhcm9sZHN0eWxlIiwiZG9sbGFyc3VwZXJpb3IiLCJhbXBlcnNhbmRzbWFsbCIsIkFjdXRlc21hbGwiLCJwYXJlbmxlZnRzdXBlcmlvciIsInBhcmVucmlnaHRzdXBlcmlvciIsInR3b2RvdGVubGVhZGVyIiwib25lZG90ZW5sZWFkZXIiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsImZyYWN0aW9uIiwiemVyb29sZHN0eWxlIiwib25lb2xkc3R5bGUiLCJ0d29vbGRzdHlsZSIsInRocmVlb2xkc3R5bGUiLCJmb3Vyb2xkc3R5bGUiLCJmaXZlb2xkc3R5bGUiLCJzaXhvbGRzdHlsZSIsInNldmVub2xkc3R5bGUiLCJlaWdodG9sZHN0eWxlIiwibmluZW9sZHN0eWxlIiwiY29sb24iLCJzZW1pY29sb24iLCIiLCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoIiwiIiwicXVlc3Rpb25zbWFsbCIsIiIsIiIsIiIsIiIsIkV0aHNtYWxsIiwiIiwiIiwib25lcXVhcnRlciIsIm9uZWhhbGYiLCJ0aHJlZXF1YXJ0ZXJzIiwib25lZWlnaHRoIiwidGhyZWVlaWdodGhzIiwiZml2ZWVpZ2h0aHMiLCJzZXZlbmVpZ2h0aHMiLCJvbmV0aGlyZCIsInR3b3RoaXJkcyIsIiIsIiIsIiIsIiIsIiIsIiIsImZmIiwiZmkiLCJmbCIsImZmaSIsImZmbCIsInBhcmVubGVmdGluZmVyaW9yIiwiIiwicGFyZW5yaWdodGluZmVyaW9yIiwiQ2lyY3VtZmxleHNtYWxsIiwiaHlwaGVuaW5mZXJpb3IiLCJHcmF2ZXNtYWxsIiwiQXNtYWxsIiwiQnNtYWxsIiwiQ3NtYWxsIiwiRHNtYWxsIiwiRXNtYWxsIiwiRnNtYWxsIiwiR3NtYWxsIiwiSHNtYWxsIiwiSXNtYWxsIiwiSnNtYWxsIiwiS3NtYWxsIiwiTHNtYWxsIiwiTXNtYWxsIiwiTnNtYWxsIiwiT3NtYWxsIiwiUHNtYWxsIiwiUXNtYWxsIiwiUnNtYWxsIiwiU3NtYWxsIiwiVHNtYWxsIiwiVXNtYWxsIiwiVnNtYWxsIiwiV3NtYWxsIiwiWHNtYWxsIiwiWXNtYWxsIiwiWnNtYWxsIiwiY29sb25tb25ldGFyeSIsIm9uZWZpdHRlZCIsInJ1cGlhaCIsIlRpbGRlc21hbGwiLCIiLCIiLCJhc3VwZXJpb3IiLCJjZW50c3VwZXJpb3IiLCIiLCIiLCIiLCIiLCJBYWN1dGVzbWFsbCIsIkFncmF2ZXNtYWxsIiwiQWNpcmN1bWZsZXhzbWFsbCIsIkFkaWVyZXNpc3NtYWxsIiwiQXRpbGRlc21hbGwiLCJBcmluZ3NtYWxsIiwiQ2NlZGlsbGFzbWFsbCIsIkVhY3V0ZXNtYWxsIiwiRWdyYXZlc21hbGwiLCJFY2lyY3VtZmxleHNtYWxsIiwiRWRpZXJlc2lzc21hbGwiLCJJYWN1dGVzbWFsbCIsIklncmF2ZXNtYWxsIiwiSWNpcmN1bWZsZXhzbWFsbCIsIklkaWVyZXNpc3NtYWxsIiwiTnRpbGRlc21hbGwiLCJPYWN1dGVzbWFsbCIsIk9ncmF2ZXNtYWxsIiwiT2NpcmN1bWZsZXhzbWFsbCIsIk9kaWVyZXNpc3NtYWxsIiwiT3RpbGRlc21hbGwiLCJVYWN1dGVzbWFsbCIsIlVncmF2ZXNtYWxsIiwiVWNpcmN1bWZsZXhzbWFsbCIsIlVkaWVyZXNpc3NtYWxsIiwiIiwiZWlnaHRzdXBlcmlvciIsImZvdXJpbmZlcmlvciIsInRocmVlaW5mZXJpb3IiLCJzaXhpbmZlcmlvciIsImVpZ2h0aW5mZXJpb3IiLCJzZXZlbmluZmVyaW9yIiwiU2Nhcm9uc21hbGwiLCIiLCJjZW50aW5mZXJpb3IiLCJ0d29pbmZlcmlvciIsIiIsIkRpZXJlc2lzc21hbGwiLCIiLCJDYXJvbnNtYWxsIiwib3N1cGVyaW9yIiwiZml2ZWluZmVyaW9yIiwiIiwiY29tbWFpbmZlcmlvciIsInBlcmlvZGluZmVyaW9yIiwiWWFjdXRlc21hbGwiLCIiLCJkb2xsYXJpbmZlcmlvciIsIiIsIiIsIlRob3Juc21hbGwiLCIiLCJuaW5laW5mZXJpb3IiLCJ6ZXJvaW5mZXJpb3IiLCJaY2Fyb25zbWFsbCIsIkFFc21hbGwiLCJPc2xhc2hzbWFsbCIsInF1ZXN0aW9uZG93bnNtYWxsIiwib25laW5mZXJpb3IiLCJMc2xhc2hzbWFsbCIsIiIsIiIsIiIsIiIsIiIsIiIsIkNlZGlsbGFzbWFsbCIsIiIsIiIsIiIsIiIsIiIsIk9Fc21hbGwiLCJmaWd1cmVkYXNoIiwiaHlwaGVuc3VwZXJpb3IiLCIiLCIiLCIiLCIiLCJleGNsYW1kb3duc21hbGwiLCIiLCJZZGllcmVzaXNzbWFsbCIsIiIsIm9uZXN1cGVyaW9yIiwidHdvc3VwZXJpb3IiLCJ0aHJlZXN1cGVyaW9yIiwiZm91cnN1cGVyaW9yIiwiZml2ZXN1cGVyaW9yIiwic2l4c3VwZXJpb3IiLCJzZXZlbnN1cGVyaW9yIiwibmluZXN1cGVyaW9yIiwiemVyb3N1cGVyaW9yIiwiIiwiZXN1cGVyaW9yIiwicnN1cGVyaW9yIiwidHN1cGVyaW9yIiwiIiwiIiwiaXN1cGVyaW9yIiwic3N1cGVyaW9yIiwiZHN1cGVyaW9yIiwiIiwiIiwiIiwiIiwiIiwibHN1cGVyaW9yIiwiT2dvbmVrc21hbGwiLCJCcmV2ZXNtYWxsIiwiTWFjcm9uc21hbGwiLCJic3VwZXJpb3IiLCJuc3VwZXJpb3IiLCJtc3VwZXJpb3IiLCJjb21tYXN1cGVyaW9yIiwicGVyaW9kc3VwZXJpb3IiLCJEb3RhY2NlbnRzbWFsbCIsIlJpbmdzbWFsbCIsIiIsIiIsIiIsIiJdLENpPVsiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwic3BhY2UiLCJleGNsYW0iLCJxdW90ZWRibCIsIm51bWJlcnNpZ24iLCJkb2xsYXIiLCJwZXJjZW50IiwiYW1wZXJzYW5kIiwicXVvdGVzaW5nbGUiLCJwYXJlbmxlZnQiLCJwYXJlbnJpZ2h0IiwiYXN0ZXJpc2siLCJwbHVzIiwiY29tbWEiLCJoeXBoZW4iLCJwZXJpb2QiLCJzbGFzaCIsInplcm8iLCJvbmUiLCJ0d28iLCJ0aHJlZSIsImZvdXIiLCJmaXZlIiwic2l4Iiwic2V2ZW4iLCJlaWdodCIsIm5pbmUiLCJjb2xvbiIsInNlbWljb2xvbiIsImxlc3MiLCJlcXVhbCIsImdyZWF0ZXIiLCJxdWVzdGlvbiIsImF0IiwiQSIsIkIiLCJDIiwiRCIsIkUiLCJGIiwiRyIsIkgiLCJJIiwiSiIsIksiLCJMIiwiTSIsIk4iLCJPIiwiUCIsIlEiLCJSIiwiUyIsIlQiLCJVIiwiViIsIlciLCJYIiwiWSIsIloiLCJicmFja2V0bGVmdCIsImJhY2tzbGFzaCIsImJyYWNrZXRyaWdodCIsImFzY2lpY2lyY3VtIiwidW5kZXJzY29yZSIsImdyYXZlIiwiYSIsImIiLCJjIiwiZCIsImUiLCJmIiwiZyIsImgiLCJpIiwiaiIsImsiLCJsIiwibSIsIm4iLCJvIiwicCIsInEiLCJyIiwicyIsInQiLCJ1IiwidiIsInciLCJ4IiwieSIsInoiLCJicmFjZWxlZnQiLCJiYXIiLCJicmFjZXJpZ2h0IiwiYXNjaWl0aWxkZSIsIiIsIkFkaWVyZXNpcyIsIkFyaW5nIiwiQ2NlZGlsbGEiLCJFYWN1dGUiLCJOdGlsZGUiLCJPZGllcmVzaXMiLCJVZGllcmVzaXMiLCJhYWN1dGUiLCJhZ3JhdmUiLCJhY2lyY3VtZmxleCIsImFkaWVyZXNpcyIsImF0aWxkZSIsImFyaW5nIiwiY2NlZGlsbGEiLCJlYWN1dGUiLCJlZ3JhdmUiLCJlY2lyY3VtZmxleCIsImVkaWVyZXNpcyIsImlhY3V0ZSIsImlncmF2ZSIsImljaXJjdW1mbGV4IiwiaWRpZXJlc2lzIiwibnRpbGRlIiwib2FjdXRlIiwib2dyYXZlIiwib2NpcmN1bWZsZXgiLCJvZGllcmVzaXMiLCJvdGlsZGUiLCJ1YWN1dGUiLCJ1Z3JhdmUiLCJ1Y2lyY3VtZmxleCIsInVkaWVyZXNpcyIsImRhZ2dlciIsImRlZ3JlZSIsImNlbnQiLCJzdGVybGluZyIsInNlY3Rpb24iLCJidWxsZXQiLCJwYXJhZ3JhcGgiLCJnZXJtYW5kYmxzIiwicmVnaXN0ZXJlZCIsImNvcHlyaWdodCIsInRyYWRlbWFyayIsImFjdXRlIiwiZGllcmVzaXMiLCJub3RlcXVhbCIsIkFFIiwiT3NsYXNoIiwiaW5maW5pdHkiLCJwbHVzbWludXMiLCJsZXNzZXF1YWwiLCJncmVhdGVyZXF1YWwiLCJ5ZW4iLCJtdSIsInBhcnRpYWxkaWZmIiwic3VtbWF0aW9uIiwicHJvZHVjdCIsInBpIiwiaW50ZWdyYWwiLCJvcmRmZW1pbmluZSIsIm9yZG1hc2N1bGluZSIsIk9tZWdhIiwiYWUiLCJvc2xhc2giLCJxdWVzdGlvbmRvd24iLCJleGNsYW1kb3duIiwibG9naWNhbG5vdCIsInJhZGljYWwiLCJmbG9yaW4iLCJhcHByb3hlcXVhbCIsIkRlbHRhIiwiZ3VpbGxlbW90bGVmdCIsImd1aWxsZW1vdHJpZ2h0IiwiZWxsaXBzaXMiLCJzcGFjZSIsIkFncmF2ZSIsIkF0aWxkZSIsIk90aWxkZSIsIk9FIiwib2UiLCJlbmRhc2giLCJlbWRhc2giLCJxdW90ZWRibGxlZnQiLCJxdW90ZWRibHJpZ2h0IiwicXVvdGVsZWZ0IiwicXVvdGVyaWdodCIsImRpdmlkZSIsImxvemVuZ2UiLCJ5ZGllcmVzaXMiLCJZZGllcmVzaXMiLCJmcmFjdGlvbiIsImN1cnJlbmN5IiwiZ3VpbHNpbmdsbGVmdCIsImd1aWxzaW5nbHJpZ2h0IiwiZmkiLCJmbCIsImRhZ2dlcmRibCIsInBlcmlvZGNlbnRlcmVkIiwicXVvdGVzaW5nbGJhc2UiLCJxdW90ZWRibGJhc2UiLCJwZXJ0aG91c2FuZCIsIkFjaXJjdW1mbGV4IiwiRWNpcmN1bWZsZXgiLCJBYWN1dGUiLCJFZGllcmVzaXMiLCJFZ3JhdmUiLCJJYWN1dGUiLCJJY2lyY3VtZmxleCIsIklkaWVyZXNpcyIsIklncmF2ZSIsIk9hY3V0ZSIsIk9jaXJjdW1mbGV4IiwiYXBwbGUiLCJPZ3JhdmUiLCJVYWN1dGUiLCJVY2lyY3VtZmxleCIsIlVncmF2ZSIsImRvdGxlc3NpIiwiY2lyY3VtZmxleCIsInRpbGRlIiwibWFjcm9uIiwiYnJldmUiLCJkb3RhY2NlbnQiLCJyaW5nIiwiY2VkaWxsYSIsImh1bmdhcnVtbGF1dCIsIm9nb25layIsImNhcm9uIl0sQmk9WyIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJzcGFjZSIsImV4Y2xhbSIsInF1b3RlZGJsIiwibnVtYmVyc2lnbiIsImRvbGxhciIsInBlcmNlbnQiLCJhbXBlcnNhbmQiLCJxdW90ZXJpZ2h0IiwicGFyZW5sZWZ0IiwicGFyZW5yaWdodCIsImFzdGVyaXNrIiwicGx1cyIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwic2xhc2giLCJ6ZXJvIiwib25lIiwidHdvIiwidGhyZWUiLCJmb3VyIiwiZml2ZSIsInNpeCIsInNldmVuIiwiZWlnaHQiLCJuaW5lIiwiY29sb24iLCJzZW1pY29sb24iLCJsZXNzIiwiZXF1YWwiLCJncmVhdGVyIiwicXVlc3Rpb24iLCJhdCIsIkEiLCJCIiwiQyIsIkQiLCJFIiwiRiIsIkciLCJIIiwiSSIsIkoiLCJLIiwiTCIsIk0iLCJOIiwiTyIsIlAiLCJRIiwiUiIsIlMiLCJUIiwiVSIsIlYiLCJXIiwiWCIsIlkiLCJaIiwiYnJhY2tldGxlZnQiLCJiYWNrc2xhc2giLCJicmFja2V0cmlnaHQiLCJhc2NpaWNpcmN1bSIsInVuZGVyc2NvcmUiLCJxdW90ZWxlZnQiLCJhIiwiYiIsImMiLCJkIiwiZSIsImYiLCJnIiwiaCIsImkiLCJqIiwiayIsImwiLCJtIiwibiIsIm8iLCJwIiwicSIsInIiLCJzIiwidCIsInUiLCJ2IiwidyIsIngiLCJ5IiwieiIsImJyYWNlbGVmdCIsImJhciIsImJyYWNlcmlnaHQiLCJhc2NpaXRpbGRlIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiZXhjbGFtZG93biIsImNlbnQiLCJzdGVybGluZyIsImZyYWN0aW9uIiwieWVuIiwiZmxvcmluIiwic2VjdGlvbiIsImN1cnJlbmN5IiwicXVvdGVzaW5nbGUiLCJxdW90ZWRibGxlZnQiLCJndWlsbGVtb3RsZWZ0IiwiZ3VpbHNpbmdsbGVmdCIsImd1aWxzaW5nbHJpZ2h0IiwiZmkiLCJmbCIsIiIsImVuZGFzaCIsImRhZ2dlciIsImRhZ2dlcmRibCIsInBlcmlvZGNlbnRlcmVkIiwiIiwicGFyYWdyYXBoIiwiYnVsbGV0IiwicXVvdGVzaW5nbGJhc2UiLCJxdW90ZWRibGJhc2UiLCJxdW90ZWRibHJpZ2h0IiwiZ3VpbGxlbW90cmlnaHQiLCJlbGxpcHNpcyIsInBlcnRob3VzYW5kIiwiIiwicXVlc3Rpb25kb3duIiwiIiwiZ3JhdmUiLCJhY3V0ZSIsImNpcmN1bWZsZXgiLCJ0aWxkZSIsIm1hY3JvbiIsImJyZXZlIiwiZG90YWNjZW50IiwiZGllcmVzaXMiLCIiLCJyaW5nIiwiY2VkaWxsYSIsIiIsImh1bmdhcnVtbGF1dCIsIm9nb25layIsImNhcm9uIiwiZW1kYXNoIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiQUUiLCIiLCJvcmRmZW1pbmluZSIsIiIsIiIsIiIsIiIsIkxzbGFzaCIsIk9zbGFzaCIsIk9FIiwib3JkbWFzY3VsaW5lIiwiIiwiIiwiIiwiIiwiIiwiYWUiLCIiLCIiLCIiLCJkb3RsZXNzaSIsIiIsIiIsImxzbGFzaCIsIm9zbGFzaCIsIm9lIiwiZ2VybWFuZGJscyIsIiIsIiIsIiIsIiJdLFFpPVsiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwic3BhY2UiLCJleGNsYW0iLCJxdW90ZWRibCIsIm51bWJlcnNpZ24iLCJkb2xsYXIiLCJwZXJjZW50IiwiYW1wZXJzYW5kIiwicXVvdGVzaW5nbGUiLCJwYXJlbmxlZnQiLCJwYXJlbnJpZ2h0IiwiYXN0ZXJpc2siLCJwbHVzIiwiY29tbWEiLCJoeXBoZW4iLCJwZXJpb2QiLCJzbGFzaCIsInplcm8iLCJvbmUiLCJ0d28iLCJ0aHJlZSIsImZvdXIiLCJmaXZlIiwic2l4Iiwic2V2ZW4iLCJlaWdodCIsIm5pbmUiLCJjb2xvbiIsInNlbWljb2xvbiIsImxlc3MiLCJlcXVhbCIsImdyZWF0ZXIiLCJxdWVzdGlvbiIsImF0IiwiQSIsIkIiLCJDIiwiRCIsIkUiLCJGIiwiRyIsIkgiLCJJIiwiSiIsIksiLCJMIiwiTSIsIk4iLCJPIiwiUCIsIlEiLCJSIiwiUyIsIlQiLCJVIiwiViIsIlciLCJYIiwiWSIsIloiLCJicmFja2V0bGVmdCIsImJhY2tzbGFzaCIsImJyYWNrZXRyaWdodCIsImFzY2lpY2lyY3VtIiwidW5kZXJzY29yZSIsImdyYXZlIiwiYSIsImIiLCJjIiwiZCIsImUiLCJmIiwiZyIsImgiLCJpIiwiaiIsImsiLCJsIiwibSIsIm4iLCJvIiwicCIsInEiLCJyIiwicyIsInQiLCJ1IiwidiIsInciLCJ4IiwieSIsInoiLCJicmFjZWxlZnQiLCJiYXIiLCJicmFjZXJpZ2h0IiwiYXNjaWl0aWxkZSIsImJ1bGxldCIsIkV1cm8iLCJidWxsZXQiLCJxdW90ZXNpbmdsYmFzZSIsImZsb3JpbiIsInF1b3RlZGJsYmFzZSIsImVsbGlwc2lzIiwiZGFnZ2VyIiwiZGFnZ2VyZGJsIiwiY2lyY3VtZmxleCIsInBlcnRob3VzYW5kIiwiU2Nhcm9uIiwiZ3VpbHNpbmdsbGVmdCIsIk9FIiwiYnVsbGV0IiwiWmNhcm9uIiwiYnVsbGV0IiwiYnVsbGV0IiwicXVvdGVsZWZ0IiwicXVvdGVyaWdodCIsInF1b3RlZGJsbGVmdCIsInF1b3RlZGJscmlnaHQiLCJidWxsZXQiLCJlbmRhc2giLCJlbWRhc2giLCJ0aWxkZSIsInRyYWRlbWFyayIsInNjYXJvbiIsImd1aWxzaW5nbHJpZ2h0Iiwib2UiLCJidWxsZXQiLCJ6Y2Fyb24iLCJZZGllcmVzaXMiLCJzcGFjZSIsImV4Y2xhbWRvd24iLCJjZW50Iiwic3RlcmxpbmciLCJjdXJyZW5jeSIsInllbiIsImJyb2tlbmJhciIsInNlY3Rpb24iLCJkaWVyZXNpcyIsImNvcHlyaWdodCIsIm9yZGZlbWluaW5lIiwiZ3VpbGxlbW90bGVmdCIsImxvZ2ljYWxub3QiLCJoeXBoZW4iLCJyZWdpc3RlcmVkIiwibWFjcm9uIiwiZGVncmVlIiwicGx1c21pbnVzIiwidHdvc3VwZXJpb3IiLCJ0aHJlZXN1cGVyaW9yIiwiYWN1dGUiLCJtdSIsInBhcmFncmFwaCIsInBlcmlvZGNlbnRlcmVkIiwiY2VkaWxsYSIsIm9uZXN1cGVyaW9yIiwib3JkbWFzY3VsaW5lIiwiZ3VpbGxlbW90cmlnaHQiLCJvbmVxdWFydGVyIiwib25laGFsZiIsInRocmVlcXVhcnRlcnMiLCJxdWVzdGlvbmRvd24iLCJBZ3JhdmUiLCJBYWN1dGUiLCJBY2lyY3VtZmxleCIsIkF0aWxkZSIsIkFkaWVyZXNpcyIsIkFyaW5nIiwiQUUiLCJDY2VkaWxsYSIsIkVncmF2ZSIsIkVhY3V0ZSIsIkVjaXJjdW1mbGV4IiwiRWRpZXJlc2lzIiwiSWdyYXZlIiwiSWFjdXRlIiwiSWNpcmN1bWZsZXgiLCJJZGllcmVzaXMiLCJFdGgiLCJOdGlsZGUiLCJPZ3JhdmUiLCJPYWN1dGUiLCJPY2lyY3VtZmxleCIsIk90aWxkZSIsIk9kaWVyZXNpcyIsIm11bHRpcGx5IiwiT3NsYXNoIiwiVWdyYXZlIiwiVWFjdXRlIiwiVWNpcmN1bWZsZXgiLCJVZGllcmVzaXMiLCJZYWN1dGUiLCJUaG9ybiIsImdlcm1hbmRibHMiLCJhZ3JhdmUiLCJhYWN1dGUiLCJhY2lyY3VtZmxleCIsImF0aWxkZSIsImFkaWVyZXNpcyIsImFyaW5nIiwiYWUiLCJjY2VkaWxsYSIsImVncmF2ZSIsImVhY3V0ZSIsImVjaXJjdW1mbGV4IiwiZWRpZXJlc2lzIiwiaWdyYXZlIiwiaWFjdXRlIiwiaWNpcmN1bWZsZXgiLCJpZGllcmVzaXMiLCJldGgiLCJudGlsZGUiLCJvZ3JhdmUiLCJvYWN1dGUiLCJvY2lyY3VtZmxleCIsIm90aWxkZSIsIm9kaWVyZXNpcyIsImRpdmlkZSIsIm9zbGFzaCIsInVncmF2ZSIsInVhY3V0ZSIsInVjaXJjdW1mbGV4IiwidWRpZXJlc2lzIiwieWFjdXRlIiwidGhvcm4iLCJ5ZGllcmVzaXMiXSxFaT1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsInNwYWNlIiwiZXhjbGFtIiwidW5pdmVyc2FsIiwibnVtYmVyc2lnbiIsImV4aXN0ZW50aWFsIiwicGVyY2VudCIsImFtcGVyc2FuZCIsInN1Y2h0aGF0IiwicGFyZW5sZWZ0IiwicGFyZW5yaWdodCIsImFzdGVyaXNrbWF0aCIsInBsdXMiLCJjb21tYSIsIm1pbnVzIiwicGVyaW9kIiwic2xhc2giLCJ6ZXJvIiwib25lIiwidHdvIiwidGhyZWUiLCJmb3VyIiwiZml2ZSIsInNpeCIsInNldmVuIiwiZWlnaHQiLCJuaW5lIiwiY29sb24iLCJzZW1pY29sb24iLCJsZXNzIiwiZXF1YWwiLCJncmVhdGVyIiwicXVlc3Rpb24iLCJjb25ncnVlbnQiLCJBbHBoYSIsIkJldGEiLCJDaGkiLCJEZWx0YSIsIkVwc2lsb24iLCJQaGkiLCJHYW1tYSIsIkV0YSIsIklvdGEiLCJ0aGV0YTEiLCJLYXBwYSIsIkxhbWJkYSIsIk11IiwiTnUiLCJPbWljcm9uIiwiUGkiLCJUaGV0YSIsIlJobyIsIlNpZ21hIiwiVGF1IiwiVXBzaWxvbiIsInNpZ21hMSIsIk9tZWdhIiwiWGkiLCJQc2kiLCJaZXRhIiwiYnJhY2tldGxlZnQiLCJ0aGVyZWZvcmUiLCJicmFja2V0cmlnaHQiLCJwZXJwZW5kaWN1bGFyIiwidW5kZXJzY29yZSIsInJhZGljYWxleCIsImFscGhhIiwiYmV0YSIsImNoaSIsImRlbHRhIiwiZXBzaWxvbiIsInBoaSIsImdhbW1hIiwiZXRhIiwiaW90YSIsInBoaTEiLCJrYXBwYSIsImxhbWJkYSIsIm11IiwibnUiLCJvbWljcm9uIiwicGkiLCJ0aGV0YSIsInJobyIsInNpZ21hIiwidGF1IiwidXBzaWxvbiIsIm9tZWdhMSIsIm9tZWdhIiwieGkiLCJwc2kiLCJ6ZXRhIiwiYnJhY2VsZWZ0IiwiYmFyIiwiYnJhY2VyaWdodCIsInNpbWlsYXIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJFdXJvIiwiVXBzaWxvbjEiLCJtaW51dGUiLCJsZXNzZXF1YWwiLCJmcmFjdGlvbiIsImluZmluaXR5IiwiZmxvcmluIiwiY2x1YiIsImRpYW1vbmQiLCJoZWFydCIsInNwYWRlIiwiYXJyb3dib3RoIiwiYXJyb3dsZWZ0IiwiYXJyb3d1cCIsImFycm93cmlnaHQiLCJhcnJvd2Rvd24iLCJkZWdyZWUiLCJwbHVzbWludXMiLCJzZWNvbmQiLCJncmVhdGVyZXF1YWwiLCJtdWx0aXBseSIsInByb3BvcnRpb25hbCIsInBhcnRpYWxkaWZmIiwiYnVsbGV0IiwiZGl2aWRlIiwibm90ZXF1YWwiLCJlcXVpdmFsZW5jZSIsImFwcHJveGVxdWFsIiwiZWxsaXBzaXMiLCJhcnJvd3ZlcnRleCIsImFycm93aG9yaXpleCIsImNhcnJpYWdlcmV0dXJuIiwiYWxlcGgiLCJJZnJha3R1ciIsIlJmcmFrdHVyIiwid2VpZXJzdHJhc3MiLCJjaXJjbGVtdWx0aXBseSIsImNpcmNsZXBsdXMiLCJlbXB0eXNldCIsImludGVyc2VjdGlvbiIsInVuaW9uIiwicHJvcGVyc3VwZXJzZXQiLCJyZWZsZXhzdXBlcnNldCIsIm5vdHN1YnNldCIsInByb3BlcnN1YnNldCIsInJlZmxleHN1YnNldCIsImVsZW1lbnQiLCJub3RlbGVtZW50IiwiYW5nbGUiLCJncmFkaWVudCIsInJlZ2lzdGVyc2VyaWYiLCJjb3B5cmlnaHRzZXJpZiIsInRyYWRlbWFya3NlcmlmIiwicHJvZHVjdCIsInJhZGljYWwiLCJkb3RtYXRoIiwibG9naWNhbG5vdCIsImxvZ2ljYWxhbmQiLCJsb2dpY2Fsb3IiLCJhcnJvd2RibGJvdGgiLCJhcnJvd2RibGxlZnQiLCJhcnJvd2RibHVwIiwiYXJyb3dkYmxyaWdodCIsImFycm93ZGJsZG93biIsImxvemVuZ2UiLCJhbmdsZWxlZnQiLCJyZWdpc3RlcnNhbnMiLCJjb3B5cmlnaHRzYW5zIiwidHJhZGVtYXJrc2FucyIsInN1bW1hdGlvbiIsInBhcmVubGVmdHRwIiwicGFyZW5sZWZ0ZXgiLCJwYXJlbmxlZnRidCIsImJyYWNrZXRsZWZ0dHAiLCJicmFja2V0bGVmdGV4IiwiYnJhY2tldGxlZnRidCIsImJyYWNlbGVmdHRwIiwiYnJhY2VsZWZ0bWlkIiwiYnJhY2VsZWZ0YnQiLCJicmFjZWV4IiwiIiwiYW5nbGVyaWdodCIsImludGVncmFsIiwiaW50ZWdyYWx0cCIsImludGVncmFsZXgiLCJpbnRlZ3JhbGJ0IiwicGFyZW5yaWdodHRwIiwicGFyZW5yaWdodGV4IiwicGFyZW5yaWdodGJ0IiwiYnJhY2tldHJpZ2h0dHAiLCJicmFja2V0cmlnaHRleCIsImJyYWNrZXRyaWdodGJ0IiwiYnJhY2VyaWdodHRwIiwiYnJhY2VyaWdodG1pZCIsImJyYWNlcmlnaHRidCIsIiJdLHVpPVsiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwic3BhY2UiLCJhMSIsImEyIiwiYTIwMiIsImEzIiwiYTQiLCJhNSIsImExMTkiLCJhMTE4IiwiYTExNyIsImExMSIsImExMiIsImExMyIsImExNCIsImExNSIsImExNiIsImExMDUiLCJhMTciLCJhMTgiLCJhMTkiLCJhMjAiLCJhMjEiLCJhMjIiLCJhMjMiLCJhMjQiLCJhMjUiLCJhMjYiLCJhMjciLCJhMjgiLCJhNiIsImE3IiwiYTgiLCJhOSIsImExMCIsImEyOSIsImEzMCIsImEzMSIsImEzMiIsImEzMyIsImEzNCIsImEzNSIsImEzNiIsImEzNyIsImEzOCIsImEzOSIsImE0MCIsImE0MSIsImE0MiIsImE0MyIsImE0NCIsImE0NSIsImE0NiIsImE0NyIsImE0OCIsImE0OSIsImE1MCIsImE1MSIsImE1MiIsImE1MyIsImE1NCIsImE1NSIsImE1NiIsImE1NyIsImE1OCIsImE1OSIsImE2MCIsImE2MSIsImE2MiIsImE2MyIsImE2NCIsImE2NSIsImE2NiIsImE2NyIsImE2OCIsImE2OSIsImE3MCIsImE3MSIsImE3MiIsImE3MyIsImE3NCIsImEyMDMiLCJhNzUiLCJhMjA0IiwiYTc2IiwiYTc3IiwiYTc4IiwiYTc5IiwiYTgxIiwiYTgyIiwiYTgzIiwiYTg0IiwiYTk3IiwiYTk4IiwiYTk5IiwiYTEwMCIsIiIsImE4OSIsImE5MCIsImE5MyIsImE5NCIsImE5MSIsImE5MiIsImEyMDUiLCJhODUiLCJhMjA2IiwiYTg2IiwiYTg3IiwiYTg4IiwiYTk1IiwiYTk2IiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiYTEwMSIsImExMDIiLCJhMTAzIiwiYTEwNCIsImExMDYiLCJhMTA3IiwiYTEwOCIsImExMTIiLCJhMTExIiwiYTExMCIsImExMDkiLCJhMTIwIiwiYTEyMSIsImExMjIiLCJhMTIzIiwiYTEyNCIsImExMjUiLCJhMTI2IiwiYTEyNyIsImExMjgiLCJhMTI5IiwiYTEzMCIsImExMzEiLCJhMTMyIiwiYTEzMyIsImExMzQiLCJhMTM1IiwiYTEzNiIsImExMzciLCJhMTM4IiwiYTEzOSIsImExNDAiLCJhMTQxIiwiYTE0MiIsImExNDMiLCJhMTQ0IiwiYTE0NSIsImExNDYiLCJhMTQ3IiwiYTE0OCIsImExNDkiLCJhMTUwIiwiYTE1MSIsImExNTIiLCJhMTUzIiwiYTE1NCIsImExNTUiLCJhMTU2IiwiYTE1NyIsImExNTgiLCJhMTU5IiwiYTE2MCIsImExNjEiLCJhMTYzIiwiYTE2NCIsImExOTYiLCJhMTY1IiwiYTE5MiIsImExNjYiLCJhMTY3IiwiYTE2OCIsImExNjkiLCJhMTcwIiwiYTE3MSIsImExNzIiLCJhMTczIiwiYTE2MiIsImExNzQiLCJhMTc1IiwiYTE3NiIsImExNzciLCJhMTc4IiwiYTE3OSIsImExOTMiLCJhMTgwIiwiYTE5OSIsImExODEiLCJhMjAwIiwiYTE4MiIsIiIsImEyMDEiLCJhMTgzIiwiYTE4NCIsImExOTciLCJhMTg1IiwiYTE5NCIsImExOTgiLCJhMTg2IiwiYTE5NSIsImExODciLCJhMTg4IiwiYTE4OSIsImExOTAiLCJhMTkxIiwiIl07ZnVuY3Rpb24gZ2V0RW5jb2RpbmcoZSl7c3dpdGNoKGUpe2Nhc2UiV2luQW5zaUVuY29kaW5nIjpyZXR1cm4gUWk7Y2FzZSJTdGFuZGFyZEVuY29kaW5nIjpyZXR1cm4gQmk7Y2FzZSJNYWNSb21hbkVuY29kaW5nIjpyZXR1cm4gQ2k7Y2FzZSJTeW1ib2xTZXRFbmNvZGluZyI6cmV0dXJuIEVpO2Nhc2UiWmFwZkRpbmdiYXRzRW5jb2RpbmciOnJldHVybiB1aTtjYXNlIkV4cGVydEVuY29kaW5nIjpyZXR1cm4gbGk7Y2FzZSJNYWNFeHBlcnRFbmNvZGluZyI6cmV0dXJuIGhpO2RlZmF1bHQ6cmV0dXJuIG51bGx9fWNvbnN0IGRpPVsiLm5vdGRlZiIsInNwYWNlIiwiZXhjbGFtIiwicXVvdGVkYmwiLCJudW1iZXJzaWduIiwiZG9sbGFyIiwicGVyY2VudCIsImFtcGVyc2FuZCIsInF1b3RlcmlnaHQiLCJwYXJlbmxlZnQiLCJwYXJlbnJpZ2h0IiwiYXN0ZXJpc2siLCJwbHVzIiwiY29tbWEiLCJoeXBoZW4iLCJwZXJpb2QiLCJzbGFzaCIsInplcm8iLCJvbmUiLCJ0d28iLCJ0aHJlZSIsImZvdXIiLCJmaXZlIiwic2l4Iiwic2V2ZW4iLCJlaWdodCIsIm5pbmUiLCJjb2xvbiIsInNlbWljb2xvbiIsImxlc3MiLCJlcXVhbCIsImdyZWF0ZXIiLCJxdWVzdGlvbiIsImF0IiwiQSIsIkIiLCJDIiwiRCIsIkUiLCJGIiwiRyIsIkgiLCJJIiwiSiIsIksiLCJMIiwiTSIsIk4iLCJPIiwiUCIsIlEiLCJSIiwiUyIsIlQiLCJVIiwiViIsIlciLCJYIiwiWSIsIloiLCJicmFja2V0bGVmdCIsImJhY2tzbGFzaCIsImJyYWNrZXRyaWdodCIsImFzY2lpY2lyY3VtIiwidW5kZXJzY29yZSIsInF1b3RlbGVmdCIsImEiLCJiIiwiYyIsImQiLCJlIiwiZiIsImciLCJoIiwiaSIsImoiLCJrIiwibCIsIm0iLCJuIiwibyIsInAiLCJxIiwiciIsInMiLCJ0IiwidSIsInYiLCJ3IiwieCIsInkiLCJ6IiwiYnJhY2VsZWZ0IiwiYmFyIiwiYnJhY2VyaWdodCIsImFzY2lpdGlsZGUiLCJleGNsYW1kb3duIiwiY2VudCIsInN0ZXJsaW5nIiwiZnJhY3Rpb24iLCJ5ZW4iLCJmbG9yaW4iLCJzZWN0aW9uIiwiY3VycmVuY3kiLCJxdW90ZXNpbmdsZSIsInF1b3RlZGJsbGVmdCIsImd1aWxsZW1vdGxlZnQiLCJndWlsc2luZ2xsZWZ0IiwiZ3VpbHNpbmdscmlnaHQiLCJmaSIsImZsIiwiZW5kYXNoIiwiZGFnZ2VyIiwiZGFnZ2VyZGJsIiwicGVyaW9kY2VudGVyZWQiLCJwYXJhZ3JhcGgiLCJidWxsZXQiLCJxdW90ZXNpbmdsYmFzZSIsInF1b3RlZGJsYmFzZSIsInF1b3RlZGJscmlnaHQiLCJndWlsbGVtb3RyaWdodCIsImVsbGlwc2lzIiwicGVydGhvdXNhbmQiLCJxdWVzdGlvbmRvd24iLCJncmF2ZSIsImFjdXRlIiwiY2lyY3VtZmxleCIsInRpbGRlIiwibWFjcm9uIiwiYnJldmUiLCJkb3RhY2NlbnQiLCJkaWVyZXNpcyIsInJpbmciLCJjZWRpbGxhIiwiaHVuZ2FydW1sYXV0Iiwib2dvbmVrIiwiY2Fyb24iLCJlbWRhc2giLCJBRSIsIm9yZGZlbWluaW5lIiwiTHNsYXNoIiwiT3NsYXNoIiwiT0UiLCJvcmRtYXNjdWxpbmUiLCJhZSIsImRvdGxlc3NpIiwibHNsYXNoIiwib3NsYXNoIiwib2UiLCJnZXJtYW5kYmxzIiwib25lc3VwZXJpb3IiLCJsb2dpY2Fsbm90IiwibXUiLCJ0cmFkZW1hcmsiLCJFdGgiLCJvbmVoYWxmIiwicGx1c21pbnVzIiwiVGhvcm4iLCJvbmVxdWFydGVyIiwiZGl2aWRlIiwiYnJva2VuYmFyIiwiZGVncmVlIiwidGhvcm4iLCJ0aHJlZXF1YXJ0ZXJzIiwidHdvc3VwZXJpb3IiLCJyZWdpc3RlcmVkIiwibWludXMiLCJldGgiLCJtdWx0aXBseSIsInRocmVlc3VwZXJpb3IiLCJjb3B5cmlnaHQiLCJBYWN1dGUiLCJBY2lyY3VtZmxleCIsIkFkaWVyZXNpcyIsIkFncmF2ZSIsIkFyaW5nIiwiQXRpbGRlIiwiQ2NlZGlsbGEiLCJFYWN1dGUiLCJFY2lyY3VtZmxleCIsIkVkaWVyZXNpcyIsIkVncmF2ZSIsIklhY3V0ZSIsIkljaXJjdW1mbGV4IiwiSWRpZXJlc2lzIiwiSWdyYXZlIiwiTnRpbGRlIiwiT2FjdXRlIiwiT2NpcmN1bWZsZXgiLCJPZGllcmVzaXMiLCJPZ3JhdmUiLCJPdGlsZGUiLCJTY2Fyb24iLCJVYWN1dGUiLCJVY2lyY3VtZmxleCIsIlVkaWVyZXNpcyIsIlVncmF2ZSIsIllhY3V0ZSIsIllkaWVyZXNpcyIsIlpjYXJvbiIsImFhY3V0ZSIsImFjaXJjdW1mbGV4IiwiYWRpZXJlc2lzIiwiYWdyYXZlIiwiYXJpbmciLCJhdGlsZGUiLCJjY2VkaWxsYSIsImVhY3V0ZSIsImVjaXJjdW1mbGV4IiwiZWRpZXJlc2lzIiwiZWdyYXZlIiwiaWFjdXRlIiwiaWNpcmN1bWZsZXgiLCJpZGllcmVzaXMiLCJpZ3JhdmUiLCJudGlsZGUiLCJvYWN1dGUiLCJvY2lyY3VtZmxleCIsIm9kaWVyZXNpcyIsIm9ncmF2ZSIsIm90aWxkZSIsInNjYXJvbiIsInVhY3V0ZSIsInVjaXJjdW1mbGV4IiwidWRpZXJlc2lzIiwidWdyYXZlIiwieWFjdXRlIiwieWRpZXJlc2lzIiwiemNhcm9uIiwiZXhjbGFtc21hbGwiLCJIdW5nYXJ1bWxhdXRzbWFsbCIsImRvbGxhcm9sZHN0eWxlIiwiZG9sbGFyc3VwZXJpb3IiLCJhbXBlcnNhbmRzbWFsbCIsIkFjdXRlc21hbGwiLCJwYXJlbmxlZnRzdXBlcmlvciIsInBhcmVucmlnaHRzdXBlcmlvciIsInR3b2RvdGVubGVhZGVyIiwib25lZG90ZW5sZWFkZXIiLCJ6ZXJvb2xkc3R5bGUiLCJvbmVvbGRzdHlsZSIsInR3b29sZHN0eWxlIiwidGhyZWVvbGRzdHlsZSIsImZvdXJvbGRzdHlsZSIsImZpdmVvbGRzdHlsZSIsInNpeG9sZHN0eWxlIiwic2V2ZW5vbGRzdHlsZSIsImVpZ2h0b2xkc3R5bGUiLCJuaW5lb2xkc3R5bGUiLCJjb21tYXN1cGVyaW9yIiwidGhyZWVxdWFydGVyc2VtZGFzaCIsInBlcmlvZHN1cGVyaW9yIiwicXVlc3Rpb25zbWFsbCIsImFzdXBlcmlvciIsImJzdXBlcmlvciIsImNlbnRzdXBlcmlvciIsImRzdXBlcmlvciIsImVzdXBlcmlvciIsImlzdXBlcmlvciIsImxzdXBlcmlvciIsIm1zdXBlcmlvciIsIm5zdXBlcmlvciIsIm9zdXBlcmlvciIsInJzdXBlcmlvciIsInNzdXBlcmlvciIsInRzdXBlcmlvciIsImZmIiwiZmZpIiwiZmZsIiwicGFyZW5sZWZ0aW5mZXJpb3IiLCJwYXJlbnJpZ2h0aW5mZXJpb3IiLCJDaXJjdW1mbGV4c21hbGwiLCJoeXBoZW5zdXBlcmlvciIsIkdyYXZlc21hbGwiLCJBc21hbGwiLCJCc21hbGwiLCJDc21hbGwiLCJEc21hbGwiLCJFc21hbGwiLCJGc21hbGwiLCJHc21hbGwiLCJIc21hbGwiLCJJc21hbGwiLCJKc21hbGwiLCJLc21hbGwiLCJMc21hbGwiLCJNc21hbGwiLCJOc21hbGwiLCJPc21hbGwiLCJQc21hbGwiLCJRc21hbGwiLCJSc21hbGwiLCJTc21hbGwiLCJUc21hbGwiLCJVc21hbGwiLCJWc21hbGwiLCJXc21hbGwiLCJYc21hbGwiLCJZc21hbGwiLCJac21hbGwiLCJjb2xvbm1vbmV0YXJ5Iiwib25lZml0dGVkIiwicnVwaWFoIiwiVGlsZGVzbWFsbCIsImV4Y2xhbWRvd25zbWFsbCIsImNlbnRvbGRzdHlsZSIsIkxzbGFzaHNtYWxsIiwiU2Nhcm9uc21hbGwiLCJaY2Fyb25zbWFsbCIsIkRpZXJlc2lzc21hbGwiLCJCcmV2ZXNtYWxsIiwiQ2Fyb25zbWFsbCIsIkRvdGFjY2VudHNtYWxsIiwiTWFjcm9uc21hbGwiLCJmaWd1cmVkYXNoIiwiaHlwaGVuaW5mZXJpb3IiLCJPZ29uZWtzbWFsbCIsIlJpbmdzbWFsbCIsIkNlZGlsbGFzbWFsbCIsInF1ZXN0aW9uZG93bnNtYWxsIiwib25lZWlnaHRoIiwidGhyZWVlaWdodGhzIiwiZml2ZWVpZ2h0aHMiLCJzZXZlbmVpZ2h0aHMiLCJvbmV0aGlyZCIsInR3b3RoaXJkcyIsInplcm9zdXBlcmlvciIsImZvdXJzdXBlcmlvciIsImZpdmVzdXBlcmlvciIsInNpeHN1cGVyaW9yIiwic2V2ZW5zdXBlcmlvciIsImVpZ2h0c3VwZXJpb3IiLCJuaW5lc3VwZXJpb3IiLCJ6ZXJvaW5mZXJpb3IiLCJvbmVpbmZlcmlvciIsInR3b2luZmVyaW9yIiwidGhyZWVpbmZlcmlvciIsImZvdXJpbmZlcmlvciIsImZpdmVpbmZlcmlvciIsInNpeGluZmVyaW9yIiwic2V2ZW5pbmZlcmlvciIsImVpZ2h0aW5mZXJpb3IiLCJuaW5laW5mZXJpb3IiLCJjZW50aW5mZXJpb3IiLCJkb2xsYXJpbmZlcmlvciIsInBlcmlvZGluZmVyaW9yIiwiY29tbWFpbmZlcmlvciIsIkFncmF2ZXNtYWxsIiwiQWFjdXRlc21hbGwiLCJBY2lyY3VtZmxleHNtYWxsIiwiQXRpbGRlc21hbGwiLCJBZGllcmVzaXNzbWFsbCIsIkFyaW5nc21hbGwiLCJBRXNtYWxsIiwiQ2NlZGlsbGFzbWFsbCIsIkVncmF2ZXNtYWxsIiwiRWFjdXRlc21hbGwiLCJFY2lyY3VtZmxleHNtYWxsIiwiRWRpZXJlc2lzc21hbGwiLCJJZ3JhdmVzbWFsbCIsIklhY3V0ZXNtYWxsIiwiSWNpcmN1bWZsZXhzbWFsbCIsIklkaWVyZXNpc3NtYWxsIiwiRXRoc21hbGwiLCJOdGlsZGVzbWFsbCIsIk9ncmF2ZXNtYWxsIiwiT2FjdXRlc21hbGwiLCJPY2lyY3VtZmxleHNtYWxsIiwiT3RpbGRlc21hbGwiLCJPZGllcmVzaXNzbWFsbCIsIk9Fc21hbGwiLCJPc2xhc2hzbWFsbCIsIlVncmF2ZXNtYWxsIiwiVWFjdXRlc21hbGwiLCJVY2lyY3VtZmxleHNtYWxsIiwiVWRpZXJlc2lzc21hbGwiLCJZYWN1dGVzbWFsbCIsIlRob3Juc21hbGwiLCJZZGllcmVzaXNzbWFsbCIsIjAwMS4wMDAiLCIwMDEuMDAxIiwiMDAxLjAwMiIsIjAwMS4wMDMiLCJCbGFjayIsIkJvbGQiLCJCb29rIiwiTGlnaHQiLCJNZWRpdW0iLCJSZWd1bGFyIiwiUm9tYW4iLCJTZW1pYm9sZCJdLGZpPTM5MSxwaT1bbnVsbCx7aWQ6ImhzdGVtIixtaW46MixzdGFja0NsZWFyaW5nOiEwLHN0ZW06ITB9LG51bGwse2lkOiJ2c3RlbSIsbWluOjIsc3RhY2tDbGVhcmluZzohMCxzdGVtOiEwfSx7aWQ6InZtb3ZldG8iLG1pbjoxLHN0YWNrQ2xlYXJpbmc6ITB9LHtpZDoicmxpbmV0byIsbWluOjIscmVzZXRTdGFjazohMH0se2lkOiJobGluZXRvIixtaW46MSxyZXNldFN0YWNrOiEwfSx7aWQ6InZsaW5ldG8iLG1pbjoxLHJlc2V0U3RhY2s6ITB9LHtpZDoicnJjdXJ2ZXRvIixtaW46NixyZXNldFN0YWNrOiEwfSxudWxsLHtpZDoiY2FsbHN1YnIiLG1pbjoxLHVuZGVmU3RhY2s6ITB9LHtpZDoicmV0dXJuIixtaW46MCx1bmRlZlN0YWNrOiEwfSxudWxsLG51bGwse2lkOiJlbmRjaGFyIixtaW46MCxzdGFja0NsZWFyaW5nOiEwfSxudWxsLG51bGwsbnVsbCx7aWQ6ImhzdGVtaG0iLG1pbjoyLHN0YWNrQ2xlYXJpbmc6ITAsc3RlbTohMH0se2lkOiJoaW50bWFzayIsbWluOjAsc3RhY2tDbGVhcmluZzohMH0se2lkOiJjbnRybWFzayIsbWluOjAsc3RhY2tDbGVhcmluZzohMH0se2lkOiJybW92ZXRvIixtaW46MixzdGFja0NsZWFyaW5nOiEwfSx7aWQ6Imhtb3ZldG8iLG1pbjoxLHN0YWNrQ2xlYXJpbmc6ITB9LHtpZDoidnN0ZW1obSIsbWluOjIsc3RhY2tDbGVhcmluZzohMCxzdGVtOiEwfSx7aWQ6InJjdXJ2ZWxpbmUiLG1pbjo4LHJlc2V0U3RhY2s6ITB9LHtpZDoicmxpbmVjdXJ2ZSIsbWluOjgscmVzZXRTdGFjazohMH0se2lkOiJ2dmN1cnZldG8iLG1pbjo0LHJlc2V0U3RhY2s6ITB9LHtpZDoiaGhjdXJ2ZXRvIixtaW46NCxyZXNldFN0YWNrOiEwfSxudWxsLHtpZDoiY2FsbGdzdWJyIixtaW46MSx1bmRlZlN0YWNrOiEwfSx7aWQ6InZoY3VydmV0byIsbWluOjQscmVzZXRTdGFjazohMH0se2lkOiJodmN1cnZldG8iLG1pbjo0LHJlc2V0U3RhY2s6ITB9XSxtaT1bbnVsbCxudWxsLG51bGwse2lkOiJhbmQiLG1pbjoyLHN0YWNrRGVsdGE6LTF9LHtpZDoib3IiLG1pbjoyLHN0YWNrRGVsdGE6LTF9LHtpZDoibm90IixtaW46MSxzdGFja0RlbHRhOjB9LG51bGwsbnVsbCxudWxsLHtpZDoiYWJzIixtaW46MSxzdGFja0RlbHRhOjB9LHtpZDoiYWRkIixtaW46MixzdGFja0RlbHRhOi0xLHN0YWNrRm4oZSx0KXtlW3QtMl09ZVt0LTJdK2VbdC0xXX19LHtpZDoic3ViIixtaW46MixzdGFja0RlbHRhOi0xLHN0YWNrRm4oZSx0KXtlW3QtMl09ZVt0LTJdLWVbdC0xXX19LHtpZDoiZGl2IixtaW46MixzdGFja0RlbHRhOi0xLHN0YWNrRm4oZSx0KXtlW3QtMl09ZVt0LTJdL2VbdC0xXX19LG51bGwse2lkOiJuZWciLG1pbjoxLHN0YWNrRGVsdGE6MCxzdGFja0ZuKGUsdCl7ZVt0LTFdPS1lW3QtMV19fSx7aWQ6ImVxIixtaW46MixzdGFja0RlbHRhOi0xfSxudWxsLG51bGwse2lkOiJkcm9wIixtaW46MSxzdGFja0RlbHRhOi0xfSxudWxsLHtpZDoicHV0IixtaW46MixzdGFja0RlbHRhOi0yfSx7aWQ6ImdldCIsbWluOjEsc3RhY2tEZWx0YTowfSx7aWQ6ImlmZWxzZSIsbWluOjQsc3RhY2tEZWx0YTotM30se2lkOiJyYW5kb20iLG1pbjowLHN0YWNrRGVsdGE6MX0se2lkOiJtdWwiLG1pbjoyLHN0YWNrRGVsdGE6LTEsc3RhY2tGbihlLHQpe2VbdC0yXT1lW3QtMl0qZVt0LTFdfX0sbnVsbCx7aWQ6InNxcnQiLG1pbjoxLHN0YWNrRGVsdGE6MH0se2lkOiJkdXAiLG1pbjoxLHN0YWNrRGVsdGE6MX0se2lkOiJleGNoIixtaW46MixzdGFja0RlbHRhOjB9LHtpZDoiaW5kZXgiLG1pbjoyLHN0YWNrRGVsdGE6MH0se2lkOiJyb2xsIixtaW46MyxzdGFja0RlbHRhOi0yfSxudWxsLG51bGwsbnVsbCx7aWQ6ImhmbGV4IixtaW46NyxyZXNldFN0YWNrOiEwfSx7aWQ6ImZsZXgiLG1pbjoxMyxyZXNldFN0YWNrOiEwfSx7aWQ6ImhmbGV4MSIsbWluOjkscmVzZXRTdGFjazohMH0se2lkOiJmbGV4MSIsbWluOjExLHJlc2V0U3RhY2s6ITB9XTtjbGFzcyBDRkZQYXJzZXJ7Y29uc3RydWN0b3IoZSx0LGkpe3RoaXMuYnl0ZXM9ZS5nZXRCeXRlcygpO3RoaXMucHJvcGVydGllcz10O3RoaXMuc2VhY0FuYWx5c2lzRW5hYmxlZD0hIWl9cGFyc2UoKXtjb25zdCBlPXRoaXMucHJvcGVydGllcyx0PW5ldyBDRkY7dGhpcy5jZmY9dDtjb25zdCBpPXRoaXMucGFyc2VIZWFkZXIoKSxhPXRoaXMucGFyc2VJbmRleChpLmVuZFBvcykscj10aGlzLnBhcnNlSW5kZXgoYS5lbmRQb3MpLHM9dGhpcy5wYXJzZUluZGV4KHIuZW5kUG9zKSxuPXRoaXMucGFyc2VJbmRleChzLmVuZFBvcyksbz10aGlzLnBhcnNlRGljdChyLm9iai5nZXQoMCkpLGc9dGhpcy5jcmVhdGVEaWN0KENGRlRvcERpY3Qsbyx0LnN0cmluZ3MpO3QuaGVhZGVyPWkub2JqO3QubmFtZXM9dGhpcy5wYXJzZU5hbWVJbmRleChhLm9iaik7dC5zdHJpbmdzPXRoaXMucGFyc2VTdHJpbmdJbmRleChzLm9iaik7dC50b3BEaWN0PWc7dC5nbG9iYWxTdWJySW5kZXg9bi5vYmo7dGhpcy5wYXJzZVByaXZhdGVEaWN0KHQudG9wRGljdCk7dC5pc0NJREZvbnQ9Zy5oYXNOYW1lKCJST1MiKTtjb25zdCBjPWcuZ2V0QnlOYW1lKCJDaGFyU3RyaW5ncyIpLGw9dGhpcy5wYXJzZUluZGV4KGMpLm9iaixoPWcuZ2V0QnlOYW1lKCJGb250TWF0cml4Iik7aCYmKGUuZm9udE1hdHJpeD1oKTtjb25zdCBDPWcuZ2V0QnlOYW1lKCJGb250QkJveCIpO2lmKEMpe2UuYXNjZW50PU1hdGgubWF4KENbM10sQ1sxXSk7ZS5kZXNjZW50PU1hdGgubWluKENbMV0sQ1szXSk7ZS5hc2NlbnRTY2FsZWQ9ITB9bGV0IFEsRTtpZih0LmlzQ0lERm9udCl7Y29uc3QgZT10aGlzLnBhcnNlSW5kZXgoZy5nZXRCeU5hbWUoIkZEQXJyYXkiKSkub2JqO2ZvcihsZXQgaT0wLGE9ZS5jb3VudDtpPGE7KytpKXtjb25zdCBhPWUuZ2V0KGkpLHI9dGhpcy5jcmVhdGVEaWN0KENGRlRvcERpY3QsdGhpcy5wYXJzZURpY3QoYSksdC5zdHJpbmdzKTt0aGlzLnBhcnNlUHJpdmF0ZURpY3Qocik7dC5mZEFycmF5LnB1c2gocil9RT1udWxsO1E9dGhpcy5wYXJzZUNoYXJzZXRzKGcuZ2V0QnlOYW1lKCJjaGFyc2V0IiksbC5jb3VudCx0LnN0cmluZ3MsITApO3QuZmRTZWxlY3Q9dGhpcy5wYXJzZUZEU2VsZWN0KGcuZ2V0QnlOYW1lKCJGRFNlbGVjdCIpLGwuY291bnQpfWVsc2V7UT10aGlzLnBhcnNlQ2hhcnNldHMoZy5nZXRCeU5hbWUoImNoYXJzZXQiKSxsLmNvdW50LHQuc3RyaW5ncywhMSk7RT10aGlzLnBhcnNlRW5jb2RpbmcoZy5nZXRCeU5hbWUoIkVuY29kaW5nIiksZSx0LnN0cmluZ3MsUS5jaGFyc2V0KX10LmNoYXJzZXQ9UTt0LmVuY29kaW5nPUU7Y29uc3QgdT10aGlzLnBhcnNlQ2hhclN0cmluZ3Moe2NoYXJTdHJpbmdzOmwsbG9jYWxTdWJySW5kZXg6Zy5wcml2YXRlRGljdC5zdWJyc0luZGV4LGdsb2JhbFN1YnJJbmRleDpuLm9iaixmZFNlbGVjdDp0LmZkU2VsZWN0LGZkQXJyYXk6dC5mZEFycmF5LHByaXZhdGVEaWN0OmcucHJpdmF0ZURpY3R9KTt0LmNoYXJTdHJpbmdzPXUuY2hhclN0cmluZ3M7dC5zZWFjcz11LnNlYWNzO3Qud2lkdGhzPXUud2lkdGhzO3JldHVybiB0fXBhcnNlSGVhZGVyKCl7bGV0IGU9dGhpcy5ieXRlcztjb25zdCB0PWUubGVuZ3RoO2xldCBpPTA7Zm9yKDtpPHQmJjEhPT1lW2ldOykrK2k7aWYoaT49dCl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkludmFsaWQgQ0ZGIGhlYWRlciIpO2lmKDAhPT1pKXtpbmZvKCJjZmYgZGF0YSBpcyBzaGlmdGVkIik7ZT1lLnN1YmFycmF5KGkpO3RoaXMuYnl0ZXM9ZX1jb25zdCBhPWVbMF0scj1lWzFdLHM9ZVsyXSxuPWVbM107cmV0dXJue29iajpuZXcgQ0ZGSGVhZGVyKGEscixzLG4pLGVuZFBvczpzfX1wYXJzZURpY3QoZSl7bGV0IHQ9MDtmdW5jdGlvbiBwYXJzZU9wZXJhbmQoKXtsZXQgaT1lW3QrK107aWYoMzA9PT1pKXJldHVybiBmdW5jdGlvbiBwYXJzZUZsb2F0T3BlcmFuZCgpe2xldCBpPSIiO2NvbnN0IGE9MTUscj1bIjAiLCIxIiwiMiIsIjMiLCI0IiwiNSIsIjYiLCI3IiwiOCIsIjkiLCIuIiwiRSIsIkUtIixudWxsLCItIl0scz1lLmxlbmd0aDtmb3IoO3Q8czspe2NvbnN0IHM9ZVt0KytdLG49cz4+NCxvPTE1JnM7aWYobj09PWEpYnJlYWs7aSs9cltuXTtpZihvPT09YSlicmVhaztpKz1yW29dfXJldHVybiBwYXJzZUZsb2F0KGkpfSgpO2lmKDI4PT09aSl7aT1lW3QrK107aT0oaTw8MjR8ZVt0KytdPDwxNik+PjE2O3JldHVybiBpfWlmKDI5PT09aSl7aT1lW3QrK107aT1pPDw4fGVbdCsrXTtpPWk8PDh8ZVt0KytdO2k9aTw8OHxlW3QrK107cmV0dXJuIGl9aWYoaT49MzImJmk8PTI0NilyZXR1cm4gaS0xMzk7aWYoaT49MjQ3JiZpPD0yNTApcmV0dXJuIDI1NiooaS0yNDcpK2VbdCsrXSsxMDg7aWYoaT49MjUxJiZpPD0yNTQpcmV0dXJuLTI1NiooaS0yNTEpLWVbdCsrXS0xMDg7d2FybignQ0ZGUGFyc2VyX3BhcnNlRGljdDogIicraSsnIiBpcyBhIHJlc2VydmVkIGNvbW1hbmQuJyk7cmV0dXJuIE5hTn1sZXQgaT1bXTtjb25zdCBhPVtdO3Q9MDtjb25zdCByPWUubGVuZ3RoO2Zvcig7dDxyOyl7bGV0IHI9ZVt0XTtpZihyPD0yMSl7MTI9PT1yJiYocj1yPDw4fGVbKyt0XSk7YS5wdXNoKFtyLGldKTtpPVtdOysrdH1lbHNlIGkucHVzaChwYXJzZU9wZXJhbmQoKSl9cmV0dXJuIGF9cGFyc2VJbmRleChlKXtjb25zdCB0PW5ldyBDRkZJbmRleCxpPXRoaXMuYnl0ZXMsYT1pW2UrK108PDh8aVtlKytdLHI9W107bGV0IHMsbixvPWU7aWYoMCE9PWEpe2NvbnN0IHQ9aVtlKytdLGc9ZSsoYSsxKSp0LTE7Zm9yKHM9MCxuPWErMTtzPG47KytzKXtsZXQgYT0wO2ZvcihsZXQgcj0wO3I8dDsrK3Ipe2E8PD04O2ErPWlbZSsrXX1yLnB1c2goZythKX1vPXJbYV19Zm9yKHM9MCxuPXIubGVuZ3RoLTE7czxuOysrcyl7Y29uc3QgZT1yW3NdLGE9cltzKzFdO3QuYWRkKGkuc3ViYXJyYXkoZSxhKSl9cmV0dXJue29iajp0LGVuZFBvczpvfX1wYXJzZU5hbWVJbmRleChlKXtjb25zdCB0PVtdO2ZvcihsZXQgaT0wLGE9ZS5jb3VudDtpPGE7KytpKXtjb25zdCBhPWUuZ2V0KGkpO3QucHVzaChieXRlc1RvU3RyaW5nKGEpKX1yZXR1cm4gdH1wYXJzZVN0cmluZ0luZGV4KGUpe2NvbnN0IHQ9bmV3IENGRlN0cmluZ3M7Zm9yKGxldCBpPTAsYT1lLmNvdW50O2k8YTsrK2kpe2NvbnN0IGE9ZS5nZXQoaSk7dC5hZGQoYnl0ZXNUb1N0cmluZyhhKSl9cmV0dXJuIHR9Y3JlYXRlRGljdChlLHQsaSl7Y29uc3QgYT1uZXcgZShpKTtmb3IoY29uc3RbZSxpXW9mIHQpYS5zZXRCeUtleShlLGkpO3JldHVybiBhfXBhcnNlQ2hhclN0cmluZyhlLHQsaSxhKXtpZighdHx8ZS5jYWxsRGVwdGg+MTApcmV0dXJuITE7bGV0IHI9ZS5zdGFja1NpemU7Y29uc3Qgcz1lLnN0YWNrO2xldCBuPXQubGVuZ3RoO2ZvcihsZXQgbz0wO288bjspe2NvbnN0IGc9dFtvKytdO2xldCBjPW51bGw7aWYoMTI9PT1nKXtjb25zdCBlPXRbbysrXTtpZigwPT09ZSl7dFtvLTJdPTEzOTt0W28tMV09MjI7cj0wfWVsc2UgYz1taVtlXX1lbHNlIGlmKDI4PT09Zyl7c1tyXT0odFtvXTw8MjR8dFtvKzFdPDwxNik+PjE2O28rPTI7cisrfWVsc2UgaWYoMTQ9PT1nKXtpZihyPj00KXtyLT00O2lmKHRoaXMuc2VhY0FuYWx5c2lzRW5hYmxlZCl7ZS5zZWFjPXMuc2xpY2UocixyKzQpO3JldHVybiExfX1jPXBpW2ddfWVsc2UgaWYoZz49MzImJmc8PTI0Nil7c1tyXT1nLTEzOTtyKyt9ZWxzZSBpZihnPj0yNDcmJmc8PTI1NCl7c1tyXT1nPDI1MT8oZy0yNDc8PDgpK3Rbb10rMTA4Oi0oZy0yNTE8PDgpLXRbb10tMTA4O28rKztyKyt9ZWxzZSBpZigyNTU9PT1nKXtzW3JdPSh0W29dPDwyNHx0W28rMV08PDE2fHRbbysyXTw8OHx0W28rM10pLzY1NTM2O28rPTQ7cisrfWVsc2UgaWYoMTk9PT1nfHwyMD09PWcpe2UuaGludHMrPXI+PjE7aWYoMD09PWUuaGludHMpe3QuY29weVdpdGhpbihvLTEsbywtMSk7by09MTtuLT0xO2NvbnRpbnVlfW8rPWUuaGludHMrNz4+MztyJT0yO2M9cGlbZ119ZWxzZXtpZigxMD09PWd8fDI5PT09Zyl7Y29uc3QgdD0xMD09PWc/aTphO2lmKCF0KXtjPXBpW2ddO3dhcm4oIk1pc3Npbmcgc3VicnNJbmRleCBmb3IgIitjLmlkKTtyZXR1cm4hMX1sZXQgbj0zMjc2ODt0LmNvdW50PDEyNDA/bj0xMDc6dC5jb3VudDwzMzkwMCYmKG49MTEzMSk7Y29uc3Qgbz1zWy0tcl0rbjtpZihvPDB8fG8+PXQuY291bnR8fGlzTmFOKG8pKXtjPXBpW2ddO3dhcm4oIk91dCBvZiBib3VuZHMgc3VickluZGV4IGZvciAiK2MuaWQpO3JldHVybiExfWUuc3RhY2tTaXplPXI7ZS5jYWxsRGVwdGgrKztpZighdGhpcy5wYXJzZUNoYXJTdHJpbmcoZSx0LmdldChvKSxpLGEpKXJldHVybiExO2UuY2FsbERlcHRoLS07cj1lLnN0YWNrU2l6ZTtjb250aW51ZX1pZigxMT09PWcpe2Uuc3RhY2tTaXplPXI7cmV0dXJuITB9aWYoMD09PWcmJm89PT10Lmxlbmd0aCl7dFtvLTFdPTE0O2M9cGlbMTRdfWVsc2V7aWYoOT09PWcpe3QuY29weVdpdGhpbihvLTEsbywtMSk7by09MTtuLT0xO2NvbnRpbnVlfWM9cGlbZ119fWlmKGMpe2lmKGMuc3RlbSl7ZS5oaW50cys9cj4+MTtpZigzPT09Z3x8MjM9PT1nKWUuaGFzVlN0ZW1zPSEwO2Vsc2UgaWYoZS5oYXNWU3RlbXMmJigxPT09Z3x8MTg9PT1nKSl7d2FybigiQ0ZGIHN0ZW0gaGludHMgYXJlIGluIHdyb25nIG9yZGVyIik7dFtvLTFdPTE9PT1nPzM6MjN9fWlmKCJtaW4iaW4gYyYmIWUudW5kZWZTdGFjayYmcjxjLm1pbil7d2FybigiTm90IGVub3VnaCBwYXJhbWV0ZXJzIGZvciAiK2MuaWQrIjsgYWN0dWFsOiAiK3IrIiwgZXhwZWN0ZWQ6ICIrYy5taW4pO2lmKDA9PT1yKXt0W28tMV09MTQ7cmV0dXJuITB9cmV0dXJuITF9aWYoZS5maXJzdFN0YWNrQ2xlYXJpbmcmJmMuc3RhY2tDbGVhcmluZyl7ZS5maXJzdFN0YWNrQ2xlYXJpbmc9ITE7ci09Yy5taW47cj49MiYmYy5zdGVtP3IlPTI6cj4xJiZ3YXJuKCJGb3VuZCB0b28gbWFueSBwYXJhbWV0ZXJzIGZvciBzdGFjay1jbGVhcmluZyBjb21tYW5kIik7cj4wJiYoZS53aWR0aD1zW3ItMV0pfWlmKCJzdGFja0RlbHRhImluIGMpeyJzdGFja0ZuImluIGMmJmMuc3RhY2tGbihzLHIpO3IrPWMuc3RhY2tEZWx0YX1lbHNlIGlmKGMuc3RhY2tDbGVhcmluZylyPTA7ZWxzZSBpZihjLnJlc2V0U3RhY2spe3I9MDtlLnVuZGVmU3RhY2s9ITF9ZWxzZSBpZihjLnVuZGVmU3RhY2spe3I9MDtlLnVuZGVmU3RhY2s9ITA7ZS5maXJzdFN0YWNrQ2xlYXJpbmc9ITF9fX1uPHQubGVuZ3RoJiZ0LmZpbGwoMTQsbik7ZS5zdGFja1NpemU9cjtyZXR1cm4hMH1wYXJzZUNoYXJTdHJpbmdzKHtjaGFyU3RyaW5nczplLGxvY2FsU3VickluZGV4OnQsZ2xvYmFsU3VickluZGV4OmksZmRTZWxlY3Q6YSxmZEFycmF5OnIscHJpdmF0ZURpY3Q6c30pe2NvbnN0IG49W10sbz1bXSxnPWUuY291bnQ7Zm9yKGxldCBjPTA7YzxnO2MrKyl7Y29uc3QgZz1lLmdldChjKSxsPXtjYWxsRGVwdGg6MCxzdGFja1NpemU6MCxzdGFjazpbXSx1bmRlZlN0YWNrOiEwLGhpbnRzOjAsZmlyc3RTdGFja0NsZWFyaW5nOiEwLHNlYWM6bnVsbCx3aWR0aDpudWxsLGhhc1ZTdGVtczohMX07bGV0IGg9ITAsQz1udWxsLFE9cztpZihhJiZyLmxlbmd0aCl7Y29uc3QgZT1hLmdldEZESW5kZXgoYyk7aWYoLTE9PT1lKXt3YXJuKCJHbHlwaCBpbmRleCBpcyBub3QgaW4gZmQgc2VsZWN0LiIpO2g9ITF9aWYoZT49ci5sZW5ndGgpe3dhcm4oIkludmFsaWQgZmQgaW5kZXggZm9yIGdseXBoIGluZGV4LiIpO2g9ITF9aWYoaCl7UT1yW2VdLnByaXZhdGVEaWN0O0M9US5zdWJyc0luZGV4fX1lbHNlIHQmJihDPXQpO2gmJihoPXRoaXMucGFyc2VDaGFyU3RyaW5nKGwsZyxDLGkpKTtpZihudWxsIT09bC53aWR0aCl7Y29uc3QgZT1RLmdldEJ5TmFtZSgibm9taW5hbFdpZHRoWCIpO29bY109ZStsLndpZHRofWVsc2V7Y29uc3QgZT1RLmdldEJ5TmFtZSgiZGVmYXVsdFdpZHRoWCIpO29bY109ZX1udWxsIT09bC5zZWFjJiYobltjXT1sLnNlYWMpO2h8fGUuc2V0KGMsbmV3IFVpbnQ4QXJyYXkoWzE0XSkpfXJldHVybntjaGFyU3RyaW5nczplLHNlYWNzOm4sd2lkdGhzOm99fWVtcHR5UHJpdmF0ZURpY3Rpb25hcnkoZSl7Y29uc3QgdD10aGlzLmNyZWF0ZURpY3QoQ0ZGUHJpdmF0ZURpY3QsW10sZS5zdHJpbmdzKTtlLnNldEJ5S2V5KDE4LFswLDBdKTtlLnByaXZhdGVEaWN0PXR9cGFyc2VQcml2YXRlRGljdChlKXtpZighZS5oYXNOYW1lKCJQcml2YXRlIikpe3RoaXMuZW1wdHlQcml2YXRlRGljdGlvbmFyeShlKTtyZXR1cm59Y29uc3QgdD1lLmdldEJ5TmFtZSgiUHJpdmF0ZSIpO2lmKCFBcnJheS5pc0FycmF5KHQpfHwyIT09dC5sZW5ndGgpe2UucmVtb3ZlQnlOYW1lKCJQcml2YXRlIik7cmV0dXJufWNvbnN0IGk9dFswXSxhPXRbMV07aWYoMD09PWl8fGE+PXRoaXMuYnl0ZXMubGVuZ3RoKXt0aGlzLmVtcHR5UHJpdmF0ZURpY3Rpb25hcnkoZSk7cmV0dXJufWNvbnN0IHI9YStpLHM9dGhpcy5ieXRlcy5zdWJhcnJheShhLHIpLG49dGhpcy5wYXJzZURpY3Qocyksbz10aGlzLmNyZWF0ZURpY3QoQ0ZGUHJpdmF0ZURpY3QsbixlLnN0cmluZ3MpO2UucHJpdmF0ZURpY3Q9bzswPT09by5nZXRCeU5hbWUoIkV4cGFuc2lvbkZhY3RvciIpJiZvLnNldEJ5TmFtZSgiRXhwYW5zaW9uRmFjdG9yIiwuMDYpO2lmKCFvLmdldEJ5TmFtZSgiU3VicnMiKSlyZXR1cm47Y29uc3QgZz1vLmdldEJ5TmFtZSgiU3VicnMiKSxjPWErZztpZigwPT09Z3x8Yz49dGhpcy5ieXRlcy5sZW5ndGgpe3RoaXMuZW1wdHlQcml2YXRlRGljdGlvbmFyeShlKTtyZXR1cm59Y29uc3QgbD10aGlzLnBhcnNlSW5kZXgoYyk7by5zdWJyc0luZGV4PWwub2JqfXBhcnNlQ2hhcnNldHMoZSx0LGksYSl7aWYoMD09PWUpcmV0dXJuIG5ldyBDRkZDaGFyc2V0KCEwLGJpLklTT19BRE9CRSxnaSk7aWYoMT09PWUpcmV0dXJuIG5ldyBDRkZDaGFyc2V0KCEwLGJpLkVYUEVSVCxJaSk7aWYoMj09PWUpcmV0dXJuIG5ldyBDRkZDaGFyc2V0KCEwLGJpLkVYUEVSVF9TVUJTRVQsY2kpO2NvbnN0IHI9dGhpcy5ieXRlcyxzPWUsbj1yW2UrK10sbz1bYT8wOiIubm90ZGVmIl07bGV0IGcsYyxsO3QtPTE7c3dpdGNoKG4pe2Nhc2UgMDpmb3IobD0wO2w8dDtsKyspe2c9cltlKytdPDw4fHJbZSsrXTtvLnB1c2goYT9nOmkuZ2V0KGcpKX1icmVhaztjYXNlIDE6Zm9yKDtvLmxlbmd0aDw9dDspe2c9cltlKytdPDw4fHJbZSsrXTtjPXJbZSsrXTtmb3IobD0wO2w8PWM7bCsrKW8ucHVzaChhP2crKzppLmdldChnKyspKX1icmVhaztjYXNlIDI6Zm9yKDtvLmxlbmd0aDw9dDspe2c9cltlKytdPDw4fHJbZSsrXTtjPXJbZSsrXTw8OHxyW2UrK107Zm9yKGw9MDtsPD1jO2wrKylvLnB1c2goYT9nKys6aS5nZXQoZysrKSl9YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIlVua25vd24gY2hhcnNldCBmb3JtYXQiKX1jb25zdCBoPWUsQz1yLnN1YmFycmF5KHMsaCk7cmV0dXJuIG5ldyBDRkZDaGFyc2V0KCExLG4sbyxDKX1wYXJzZUVuY29kaW5nKGUsdCxpLGEpe2NvbnN0IHI9T2JqZWN0LmNyZWF0ZShudWxsKSxzPXRoaXMuYnl0ZXM7bGV0IG4sbyxnLGM9ITEsbD1udWxsO2lmKDA9PT1lfHwxPT09ZSl7Yz0hMDtuPWU7Y29uc3QgdD1lP2xpOkJpO2ZvcihvPTAsZz1hLmxlbmd0aDtvPGc7bysrKXtjb25zdCBlPXQuaW5kZXhPZihhW29dKTstMSE9PWUmJihyW2VdPW8pfX1lbHNle2NvbnN0IHQ9ZTtuPXNbZSsrXTtzd2l0Y2goMTI3Jm4pe2Nhc2UgMDpjb25zdCB0PXNbZSsrXTtmb3Iobz0xO288PXQ7bysrKXJbc1tlKytdXT1vO2JyZWFrO2Nhc2UgMTpjb25zdCBpPXNbZSsrXTtsZXQgYT0xO2ZvcihvPTA7bzxpO28rKyl7Y29uc3QgdD1zW2UrK10saT1zW2UrK107Zm9yKGxldCBlPXQ7ZTw9dCtpO2UrKylyW2VdPWErK31icmVhaztkZWZhdWx0OnRocm93IG5ldyBGb3JtYXRFcnJvcihgVW5rbm93biBlbmNvZGluZyBmb3JtYXQ6ICR7bn0gaW4gQ0ZGYCl9Y29uc3QgZz1lO2lmKDEyOCZuKXtzW3RdJj0xMjc7IWZ1bmN0aW9uIHJlYWRTdXBwbGVtZW50KCl7Y29uc3QgdD1zW2UrK107Zm9yKG89MDtvPHQ7bysrKXtjb25zdCB0PXNbZSsrXSxuPShzW2UrK108PDgpKygyNTUmc1tlKytdKTtyW3RdPWEuaW5kZXhPZihpLmdldChuKSl9fSgpfWw9cy5zdWJhcnJheSh0LGcpfW4mPTEyNztyZXR1cm4gbmV3IENGRkVuY29kaW5nKGMsbixyLGwpfXBhcnNlRkRTZWxlY3QoZSx0KXtjb25zdCBpPXRoaXMuYnl0ZXMsYT1pW2UrK10scj1bXTtsZXQgcztzd2l0Y2goYSl7Y2FzZSAwOmZvcihzPTA7czx0Oysrcyl7Y29uc3QgdD1pW2UrK107ci5wdXNoKHQpfWJyZWFrO2Nhc2UgMzpjb25zdCBuPWlbZSsrXTw8OHxpW2UrK107Zm9yKHM9MDtzPG47KytzKXtsZXQgdD1pW2UrK108PDh8aVtlKytdO2lmKDA9PT1zJiYwIT09dCl7d2FybigicGFyc2VGRFNlbGVjdDogVGhlIGZpcnN0IHJhbmdlIG11c3QgaGF2ZSBhIGZpcnN0IEdJRCBvZiAwIC0tIHRyeWluZyB0byByZWNvdmVyLiIpO3Q9MH1jb25zdCBhPWlbZSsrXSxuPWlbZV08PDh8aVtlKzFdO2ZvcihsZXQgZT10O2U8bjsrK2Upci5wdXNoKGEpfWUrPTI7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYHBhcnNlRkRTZWxlY3Q6IFVua25vd24gZm9ybWF0ICIke2F9Ii5gKX1pZihyLmxlbmd0aCE9PXQpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJwYXJzZUZEU2VsZWN0OiBJbnZhbGlkIGZvbnQgZGF0YS4iKTtyZXR1cm4gbmV3IENGRkZEU2VsZWN0KGEscil9fWNsYXNzIENGRntjb25zdHJ1Y3Rvcigpe3RoaXMuaGVhZGVyPW51bGw7dGhpcy5uYW1lcz1bXTt0aGlzLnRvcERpY3Q9bnVsbDt0aGlzLnN0cmluZ3M9bmV3IENGRlN0cmluZ3M7dGhpcy5nbG9iYWxTdWJySW5kZXg9bnVsbDt0aGlzLmVuY29kaW5nPW51bGw7dGhpcy5jaGFyc2V0PW51bGw7dGhpcy5jaGFyU3RyaW5ncz1udWxsO3RoaXMuZmRBcnJheT1bXTt0aGlzLmZkU2VsZWN0PW51bGw7dGhpcy5pc0NJREZvbnQ9ITF9ZHVwbGljYXRlRmlyc3RHbHlwaCgpe2lmKHRoaXMuY2hhclN0cmluZ3MuY291bnQ+PTY1NTM1KXt3YXJuKCJOb3QgZW5vdWdoIHNwYWNlIGluIGNoYXJzdHJpbmdzIHRvIGR1cGxpY2F0ZSBmaXJzdCBnbHlwaC4iKTtyZXR1cm59Y29uc3QgZT10aGlzLmNoYXJTdHJpbmdzLmdldCgwKTt0aGlzLmNoYXJTdHJpbmdzLmFkZChlKTt0aGlzLmlzQ0lERm9udCYmdGhpcy5mZFNlbGVjdC5mZFNlbGVjdC5wdXNoKHRoaXMuZmRTZWxlY3QuZmRTZWxlY3RbMF0pfWhhc0dseXBoSWQoZSl7aWYoZTwwfHxlPj10aGlzLmNoYXJTdHJpbmdzLmNvdW50KXJldHVybiExO3JldHVybiB0aGlzLmNoYXJTdHJpbmdzLmdldChlKS5sZW5ndGg+MH19Y2xhc3MgQ0ZGSGVhZGVye2NvbnN0cnVjdG9yKGUsdCxpLGEpe3RoaXMubWFqb3I9ZTt0aGlzLm1pbm9yPXQ7dGhpcy5oZHJTaXplPWk7dGhpcy5vZmZTaXplPWF9fWNsYXNzIENGRlN0cmluZ3N7Y29uc3RydWN0b3IoKXt0aGlzLnN0cmluZ3M9W119Z2V0KGUpe3JldHVybiBlPj0wJiZlPD0zOTA/ZGlbZV06ZS1maTw9dGhpcy5zdHJpbmdzLmxlbmd0aD90aGlzLnN0cmluZ3NbZS1maV06ZGlbMF19Z2V0U0lEKGUpe2xldCB0PWRpLmluZGV4T2YoZSk7aWYoLTEhPT10KXJldHVybiB0O3Q9dGhpcy5zdHJpbmdzLmluZGV4T2YoZSk7cmV0dXJuLTEhPT10P3QrZmk6LTF9YWRkKGUpe3RoaXMuc3RyaW5ncy5wdXNoKGUpfWdldCBjb3VudCgpe3JldHVybiB0aGlzLnN0cmluZ3MubGVuZ3RofX1jbGFzcyBDRkZJbmRleHtjb25zdHJ1Y3Rvcigpe3RoaXMub2JqZWN0cz1bXTt0aGlzLmxlbmd0aD0wfWFkZChlKXt0aGlzLmxlbmd0aCs9ZS5sZW5ndGg7dGhpcy5vYmplY3RzLnB1c2goZSl9c2V0KGUsdCl7dGhpcy5sZW5ndGgrPXQubGVuZ3RoLXRoaXMub2JqZWN0c1tlXS5sZW5ndGg7dGhpcy5vYmplY3RzW2VdPXR9Z2V0KGUpe3JldHVybiB0aGlzLm9iamVjdHNbZV19Z2V0IGNvdW50KCl7cmV0dXJuIHRoaXMub2JqZWN0cy5sZW5ndGh9fWNsYXNzIENGRkRpY3R7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmtleVRvTmFtZU1hcD1lLmtleVRvTmFtZU1hcDt0aGlzLm5hbWVUb0tleU1hcD1lLm5hbWVUb0tleU1hcDt0aGlzLmRlZmF1bHRzPWUuZGVmYXVsdHM7dGhpcy50eXBlcz1lLnR5cGVzO3RoaXMub3Bjb2Rlcz1lLm9wY29kZXM7dGhpcy5vcmRlcj1lLm9yZGVyO3RoaXMuc3RyaW5ncz10O3RoaXMudmFsdWVzPU9iamVjdC5jcmVhdGUobnVsbCl9c2V0QnlLZXkoZSx0KXtpZighKGUgaW4gdGhpcy5rZXlUb05hbWVNYXApKXJldHVybiExO2lmKDA9PT10Lmxlbmd0aClyZXR1cm4hMDtmb3IoY29uc3QgaSBvZiB0KWlmKGlzTmFOKGkpKXt3YXJuKGBJbnZhbGlkIENGRkRpY3QgdmFsdWU6ICIke3R9IiBmb3Iga2V5ICIke2V9Ii5gKTtyZXR1cm4hMH1jb25zdCBpPXRoaXMudHlwZXNbZV07Im51bSIhPT1pJiYic2lkIiE9PWkmJiJvZmZzZXQiIT09aXx8KHQ9dFswXSk7dGhpcy52YWx1ZXNbZV09dDtyZXR1cm4hMH1zZXRCeU5hbWUoZSx0KXtpZighKGUgaW4gdGhpcy5uYW1lVG9LZXlNYXApKXRocm93IG5ldyBGb3JtYXRFcnJvcihgSW52YWxpZCBkaWN0aW9uYXJ5IG5hbWUgIiR7ZX0iYCk7dGhpcy52YWx1ZXNbdGhpcy5uYW1lVG9LZXlNYXBbZV1dPXR9aGFzTmFtZShlKXtyZXR1cm4gdGhpcy5uYW1lVG9LZXlNYXBbZV1pbiB0aGlzLnZhbHVlc31nZXRCeU5hbWUoZSl7aWYoIShlIGluIHRoaXMubmFtZVRvS2V5TWFwKSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYEludmFsaWQgZGljdGlvbmFyeSBuYW1lICR7ZX0iYCk7Y29uc3QgdD10aGlzLm5hbWVUb0tleU1hcFtlXTtyZXR1cm4gdCBpbiB0aGlzLnZhbHVlcz90aGlzLnZhbHVlc1t0XTp0aGlzLmRlZmF1bHRzW3RdfXJlbW92ZUJ5TmFtZShlKXtkZWxldGUgdGhpcy52YWx1ZXNbdGhpcy5uYW1lVG9LZXlNYXBbZV1dfXN0YXRpYyBjcmVhdGVUYWJsZXMoZSl7Y29uc3QgdD17a2V5VG9OYW1lTWFwOnt9LG5hbWVUb0tleU1hcDp7fSxkZWZhdWx0czp7fSx0eXBlczp7fSxvcGNvZGVzOnt9LG9yZGVyOltdfTtmb3IoY29uc3QgaSBvZiBlKXtjb25zdCBlPUFycmF5LmlzQXJyYXkoaVswXSk/KGlbMF1bMF08PDgpK2lbMF1bMV06aVswXTt0LmtleVRvTmFtZU1hcFtlXT1pWzFdO3QubmFtZVRvS2V5TWFwW2lbMV1dPWU7dC50eXBlc1tlXT1pWzJdO3QuZGVmYXVsdHNbZV09aVszXTt0Lm9wY29kZXNbZV09QXJyYXkuaXNBcnJheShpWzBdKT9pWzBdOltpWzBdXTt0Lm9yZGVyLnB1c2goZSl9cmV0dXJuIHR9fWNvbnN0IHlpPVtbWzEyLDMwXSwiUk9TIixbInNpZCIsInNpZCIsIm51bSJdLG51bGxdLFtbMTIsMjBdLCJTeW50aGV0aWNCYXNlIiwibnVtIixudWxsXSxbMCwidmVyc2lvbiIsInNpZCIsbnVsbF0sWzEsIk5vdGljZSIsInNpZCIsbnVsbF0sW1sxMiwwXSwiQ29weXJpZ2h0Iiwic2lkIixudWxsXSxbMiwiRnVsbE5hbWUiLCJzaWQiLG51bGxdLFszLCJGYW1pbHlOYW1lIiwic2lkIixudWxsXSxbNCwiV2VpZ2h0Iiwic2lkIixudWxsXSxbWzEyLDFdLCJpc0ZpeGVkUGl0Y2giLCJudW0iLDBdLFtbMTIsMl0sIkl0YWxpY0FuZ2xlIiwibnVtIiwwXSxbWzEyLDNdLCJVbmRlcmxpbmVQb3NpdGlvbiIsIm51bSIsLTEwMF0sW1sxMiw0XSwiVW5kZXJsaW5lVGhpY2tuZXNzIiwibnVtIiw1MF0sW1sxMiw1XSwiUGFpbnRUeXBlIiwibnVtIiwwXSxbWzEyLDZdLCJDaGFyc3RyaW5nVHlwZSIsIm51bSIsMl0sW1sxMiw3XSwiRm9udE1hdHJpeCIsWyJudW0iLCJudW0iLCJudW0iLCJudW0iLCJudW0iLCJudW0iXSxbLjAwMSwwLDAsLjAwMSwwLDBdXSxbMTMsIlVuaXF1ZUlEIiwibnVtIixudWxsXSxbNSwiRm9udEJCb3giLFsibnVtIiwibnVtIiwibnVtIiwibnVtIl0sWzAsMCwwLDBdXSxbWzEyLDhdLCJTdHJva2VXaWR0aCIsIm51bSIsMF0sWzE0LCJYVUlEIiwiYXJyYXkiLG51bGxdLFsxNSwiY2hhcnNldCIsIm9mZnNldCIsMF0sWzE2LCJFbmNvZGluZyIsIm9mZnNldCIsMF0sWzE3LCJDaGFyU3RyaW5ncyIsIm9mZnNldCIsMF0sWzE4LCJQcml2YXRlIixbIm9mZnNldCIsIm9mZnNldCJdLG51bGxdLFtbMTIsMjFdLCJQb3N0U2NyaXB0Iiwic2lkIixudWxsXSxbWzEyLDIyXSwiQmFzZUZvbnROYW1lIiwic2lkIixudWxsXSxbWzEyLDIzXSwiQmFzZUZvbnRCbGVuZCIsImRlbHRhIixudWxsXSxbWzEyLDMxXSwiQ0lERm9udFZlcnNpb24iLCJudW0iLDBdLFtbMTIsMzJdLCJDSURGb250UmV2aXNpb24iLCJudW0iLDBdLFtbMTIsMzNdLCJDSURGb250VHlwZSIsIm51bSIsMF0sW1sxMiwzNF0sIkNJRENvdW50IiwibnVtIiw4NzIwXSxbWzEyLDM1XSwiVUlEQmFzZSIsIm51bSIsbnVsbF0sW1sxMiwzN10sIkZEU2VsZWN0Iiwib2Zmc2V0IixudWxsXSxbWzEyLDM2XSwiRkRBcnJheSIsIm9mZnNldCIsbnVsbF0sW1sxMiwzOF0sIkZvbnROYW1lIiwic2lkIixudWxsXV07Y2xhc3MgQ0ZGVG9wRGljdCBleHRlbmRzIENGRkRpY3R7c3RhdGljIGdldCB0YWJsZXMoKXtyZXR1cm4gc2hhZG93KHRoaXMsInRhYmxlcyIsdGhpcy5jcmVhdGVUYWJsZXMoeWkpKX1jb25zdHJ1Y3RvcihlKXtzdXBlcihDRkZUb3BEaWN0LnRhYmxlcyxlKTt0aGlzLnByaXZhdGVEaWN0PW51bGx9fWNvbnN0IHdpPVtbNiwiQmx1ZVZhbHVlcyIsImRlbHRhIixudWxsXSxbNywiT3RoZXJCbHVlcyIsImRlbHRhIixudWxsXSxbOCwiRmFtaWx5Qmx1ZXMiLCJkZWx0YSIsbnVsbF0sWzksIkZhbWlseU90aGVyQmx1ZXMiLCJkZWx0YSIsbnVsbF0sW1sxMiw5XSwiQmx1ZVNjYWxlIiwibnVtIiwuMDM5NjI1XSxbWzEyLDEwXSwiQmx1ZVNoaWZ0IiwibnVtIiw3XSxbWzEyLDExXSwiQmx1ZUZ1enoiLCJudW0iLDFdLFsxMCwiU3RkSFciLCJudW0iLG51bGxdLFsxMSwiU3RkVlciLCJudW0iLG51bGxdLFtbMTIsMTJdLCJTdGVtU25hcEgiLCJkZWx0YSIsbnVsbF0sW1sxMiwxM10sIlN0ZW1TbmFwViIsImRlbHRhIixudWxsXSxbWzEyLDE0XSwiRm9yY2VCb2xkIiwibnVtIiwwXSxbWzEyLDE3XSwiTGFuZ3VhZ2VHcm91cCIsIm51bSIsMF0sW1sxMiwxOF0sIkV4cGFuc2lvbkZhY3RvciIsIm51bSIsLjA2XSxbWzEyLDE5XSwiaW5pdGlhbFJhbmRvbVNlZWQiLCJudW0iLDBdLFsyMCwiZGVmYXVsdFdpZHRoWCIsIm51bSIsMF0sWzIxLCJub21pbmFsV2lkdGhYIiwibnVtIiwwXSxbMTksIlN1YnJzIiwib2Zmc2V0IixudWxsXV07Y2xhc3MgQ0ZGUHJpdmF0ZURpY3QgZXh0ZW5kcyBDRkZEaWN0e3N0YXRpYyBnZXQgdGFibGVzKCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJ0YWJsZXMiLHRoaXMuY3JlYXRlVGFibGVzKHdpKSl9Y29uc3RydWN0b3IoZSl7c3VwZXIoQ0ZGUHJpdmF0ZURpY3QudGFibGVzLGUpO3RoaXMuc3VicnNJbmRleD1udWxsfX1jb25zdCBiaT17SVNPX0FET0JFOjAsRVhQRVJUOjEsRVhQRVJUX1NVQlNFVDoyfTtjbGFzcyBDRkZDaGFyc2V0e2NvbnN0cnVjdG9yKGUsdCxpLGEpe3RoaXMucHJlZGVmaW5lZD1lO3RoaXMuZm9ybWF0PXQ7dGhpcy5jaGFyc2V0PWk7dGhpcy5yYXc9YX19Y2xhc3MgQ0ZGRW5jb2Rpbmd7Y29uc3RydWN0b3IoZSx0LGksYSl7dGhpcy5wcmVkZWZpbmVkPWU7dGhpcy5mb3JtYXQ9dDt0aGlzLmVuY29kaW5nPWk7dGhpcy5yYXc9YX19Y2xhc3MgQ0ZGRkRTZWxlY3R7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmZvcm1hdD1lO3RoaXMuZmRTZWxlY3Q9dH1nZXRGREluZGV4KGUpe3JldHVybiBlPDB8fGU+PXRoaXMuZmRTZWxlY3QubGVuZ3RoPy0xOnRoaXMuZmRTZWxlY3RbZV19fWNsYXNzIENGRk9mZnNldFRyYWNrZXJ7Y29uc3RydWN0b3IoKXt0aGlzLm9mZnNldHM9T2JqZWN0LmNyZWF0ZShudWxsKX1pc1RyYWNraW5nKGUpe3JldHVybiBlIGluIHRoaXMub2Zmc2V0c310cmFjayhlLHQpe2lmKGUgaW4gdGhpcy5vZmZzZXRzKXRocm93IG5ldyBGb3JtYXRFcnJvcihgQWxyZWFkeSB0cmFja2luZyBsb2NhdGlvbiBvZiAke2V9YCk7dGhpcy5vZmZzZXRzW2VdPXR9b2Zmc2V0KGUpe2Zvcihjb25zdCB0IGluIHRoaXMub2Zmc2V0cyl0aGlzLm9mZnNldHNbdF0rPWV9c2V0RW50cnlMb2NhdGlvbihlLHQsaSl7aWYoIShlIGluIHRoaXMub2Zmc2V0cykpdGhyb3cgbmV3IEZvcm1hdEVycm9yKGBOb3QgdHJhY2tpbmcgbG9jYXRpb24gb2YgJHtlfWApO2NvbnN0IGE9aS5kYXRhLHI9dGhpcy5vZmZzZXRzW2VdO2ZvcihsZXQgZT0wLGk9dC5sZW5ndGg7ZTxpOysrZSl7Y29uc3QgaT01KmUrcixzPWkrMSxuPWkrMixvPWkrMyxnPWkrNDtpZigyOSE9PWFbaV18fDAhPT1hW3NdfHwwIT09YVtuXXx8MCE9PWFbb118fDAhPT1hW2ddKXRocm93IG5ldyBGb3JtYXRFcnJvcigid3JpdGluZyB0byBhbiBvZmZzZXQgdGhhdCBpcyBub3QgZW1wdHkiKTtjb25zdCBjPXRbZV07YVtpXT0yOTthW3NdPWM+PjI0JjI1NTthW25dPWM+PjE2JjI1NTthW29dPWM+PjgmMjU1O2FbZ109MjU1JmN9fX1jbGFzcyBDRkZDb21waWxlcntjb25zdHJ1Y3RvcihlKXt0aGlzLmNmZj1lfWNvbXBpbGUoKXtjb25zdCBlPXRoaXMuY2ZmLHQ9e2RhdGE6W10sbGVuZ3RoOjAsYWRkKGUpe3RyeXt0aGlzLmRhdGEucHVzaCguLi5lKX1jYXRjaHt0aGlzLmRhdGE9dGhpcy5kYXRhLmNvbmNhdChlKX10aGlzLmxlbmd0aD10aGlzLmRhdGEubGVuZ3RofX0saT10aGlzLmNvbXBpbGVIZWFkZXIoZS5oZWFkZXIpO3QuYWRkKGkpO2NvbnN0IGE9dGhpcy5jb21waWxlTmFtZUluZGV4KGUubmFtZXMpO3QuYWRkKGEpO2lmKGUuaXNDSURGb250JiZlLnRvcERpY3QuaGFzTmFtZSgiRm9udE1hdHJpeCIpKXtjb25zdCB0PWUudG9wRGljdC5nZXRCeU5hbWUoIkZvbnRNYXRyaXgiKTtlLnRvcERpY3QucmVtb3ZlQnlOYW1lKCJGb250TWF0cml4Iik7Zm9yKGNvbnN0IGkgb2YgZS5mZEFycmF5KXtsZXQgZT10LnNsaWNlKDApO2kuaGFzTmFtZSgiRm9udE1hdHJpeCIpJiYoZT1VdGlsLnRyYW5zZm9ybShlLGkuZ2V0QnlOYW1lKCJGb250TWF0cml4IikpKTtpLnNldEJ5TmFtZSgiRm9udE1hdHJpeCIsZSl9fWNvbnN0IHI9ZS50b3BEaWN0LmdldEJ5TmFtZSgiWFVJRCIpO3I/Lmxlbmd0aD4xNiYmZS50b3BEaWN0LnJlbW92ZUJ5TmFtZSgiWFVJRCIpO2UudG9wRGljdC5zZXRCeU5hbWUoImNoYXJzZXQiLDApO2xldCBzPXRoaXMuY29tcGlsZVRvcERpY3RzKFtlLnRvcERpY3RdLHQubGVuZ3RoLGUuaXNDSURGb250KTt0LmFkZChzLm91dHB1dCk7Y29uc3Qgbj1zLnRyYWNrZXJzWzBdLG89dGhpcy5jb21waWxlU3RyaW5nSW5kZXgoZS5zdHJpbmdzLnN0cmluZ3MpO3QuYWRkKG8pO2NvbnN0IGc9dGhpcy5jb21waWxlSW5kZXgoZS5nbG9iYWxTdWJySW5kZXgpO3QuYWRkKGcpO2lmKGUuZW5jb2RpbmcmJmUudG9wRGljdC5oYXNOYW1lKCJFbmNvZGluZyIpKWlmKGUuZW5jb2RpbmcucHJlZGVmaW5lZCluLnNldEVudHJ5TG9jYXRpb24oIkVuY29kaW5nIixbZS5lbmNvZGluZy5mb3JtYXRdLHQpO2Vsc2V7Y29uc3QgaT10aGlzLmNvbXBpbGVFbmNvZGluZyhlLmVuY29kaW5nKTtuLnNldEVudHJ5TG9jYXRpb24oIkVuY29kaW5nIixbdC5sZW5ndGhdLHQpO3QuYWRkKGkpfWNvbnN0IGM9dGhpcy5jb21waWxlQ2hhcnNldChlLmNoYXJzZXQsZS5jaGFyU3RyaW5ncy5jb3VudCxlLnN0cmluZ3MsZS5pc0NJREZvbnQpO24uc2V0RW50cnlMb2NhdGlvbigiY2hhcnNldCIsW3QubGVuZ3RoXSx0KTt0LmFkZChjKTtjb25zdCBsPXRoaXMuY29tcGlsZUNoYXJTdHJpbmdzKGUuY2hhclN0cmluZ3MpO24uc2V0RW50cnlMb2NhdGlvbigiQ2hhclN0cmluZ3MiLFt0Lmxlbmd0aF0sdCk7dC5hZGQobCk7aWYoZS5pc0NJREZvbnQpe24uc2V0RW50cnlMb2NhdGlvbigiRkRTZWxlY3QiLFt0Lmxlbmd0aF0sdCk7Y29uc3QgaT10aGlzLmNvbXBpbGVGRFNlbGVjdChlLmZkU2VsZWN0KTt0LmFkZChpKTtzPXRoaXMuY29tcGlsZVRvcERpY3RzKGUuZmRBcnJheSx0Lmxlbmd0aCwhMCk7bi5zZXRFbnRyeUxvY2F0aW9uKCJGREFycmF5IixbdC5sZW5ndGhdLHQpO3QuYWRkKHMub3V0cHV0KTtjb25zdCBhPXMudHJhY2tlcnM7dGhpcy5jb21waWxlUHJpdmF0ZURpY3RzKGUuZmRBcnJheSxhLHQpfXRoaXMuY29tcGlsZVByaXZhdGVEaWN0cyhbZS50b3BEaWN0XSxbbl0sdCk7dC5hZGQoWzBdKTtyZXR1cm4gdC5kYXRhfWVuY29kZU51bWJlcihlKXtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihlKT90aGlzLmVuY29kZUludGVnZXIoZSk6dGhpcy5lbmNvZGVGbG9hdChlKX1zdGF0aWMgZ2V0IEVuY29kZUZsb2F0UmVnRXhwKCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJFbmNvZGVGbG9hdFJlZ0V4cCIsL1wuKFxkKj8pKD86OXs1LDIwfXwwezUsMjB9KVxkezAsMn0oPzplKC4rKXwkKS8pfWVuY29kZUZsb2F0KGUpe2xldCB0PWUudG9TdHJpbmcoKTtjb25zdCBpPUNGRkNvbXBpbGVyLkVuY29kZUZsb2F0UmVnRXhwLmV4ZWModCk7aWYoaSl7Y29uc3QgYT1wYXJzZUZsb2F0KCIxZSIrKChpWzJdPytpWzJdOjApK2lbMV0ubGVuZ3RoKSk7dD0oTWF0aC5yb3VuZChlKmEpL2EpLnRvU3RyaW5nKCl9bGV0IGEscixzPSIiO2ZvcihhPTAscj10Lmxlbmd0aDthPHI7KythKXtjb25zdCBlPXRbYV07cys9ImUiPT09ZT8iLSI9PT10WysrYV0/ImMiOiJiIjoiLiI9PT1lPyJhIjoiLSI9PT1lPyJlIjplfXMrPTEmcy5sZW5ndGg/ImYiOiJmZiI7Y29uc3Qgbj1bMzBdO2ZvcihhPTAscj1zLmxlbmd0aDthPHI7YSs9MiluLnB1c2gocGFyc2VJbnQocy5zdWJzdHJpbmcoYSxhKzIpLDE2KSk7cmV0dXJuIG59ZW5jb2RlSW50ZWdlcihlKXtsZXQgdDt0PWU+PS0xMDcmJmU8PTEwNz9bZSsxMzldOmU+PTEwOCYmZTw9MTEzMT9bMjQ3KygoZS09MTA4KT4+OCksMjU1JmVdOmU+PS0xMTMxJiZlPD0tMTA4P1syNTErKChlPS1lLTEwOCk+PjgpLDI1NSZlXTplPj0tMzI3NjgmJmU8PTMyNzY3P1syOCxlPj44JjI1NSwyNTUmZV06WzI5LGU+PjI0JjI1NSxlPj4xNiYyNTUsZT4+OCYyNTUsMjU1JmVdO3JldHVybiB0fWNvbXBpbGVIZWFkZXIoZSl7cmV0dXJuW2UubWFqb3IsZS5taW5vciw0LGUub2ZmU2l6ZV19Y29tcGlsZU5hbWVJbmRleChlKXtjb25zdCB0PW5ldyBDRkZJbmRleDtmb3IoY29uc3QgaSBvZiBlKXtjb25zdCBlPU1hdGgubWluKGkubGVuZ3RoLDEyNyk7bGV0IGE9bmV3IEFycmF5KGUpO2ZvcihsZXQgdD0wO3Q8ZTt0Kyspe2xldCBlPWlbdF07KGU8IiEifHxlPiJ+Inx8IlsiPT09ZXx8Il0iPT09ZXx8IigiPT09ZXx8IikiPT09ZXx8InsiPT09ZXx8In0iPT09ZXx8IjwiPT09ZXx8Ij4iPT09ZXx8Ii8iPT09ZXx8IiUiPT09ZSkmJihlPSJfIik7YVt0XT1lfWE9YS5qb2luKCIiKTsiIj09PWEmJihhPSJCYWRfRm9udF9OYW1lIik7dC5hZGQoc3RyaW5nVG9CeXRlcyhhKSl9cmV0dXJuIHRoaXMuY29tcGlsZUluZGV4KHQpfWNvbXBpbGVUb3BEaWN0cyhlLHQsaSl7Y29uc3QgYT1bXTtsZXQgcj1uZXcgQ0ZGSW5kZXg7Zm9yKGNvbnN0IHMgb2YgZSl7aWYoaSl7cy5yZW1vdmVCeU5hbWUoIkNJREZvbnRWZXJzaW9uIik7cy5yZW1vdmVCeU5hbWUoIkNJREZvbnRSZXZpc2lvbiIpO3MucmVtb3ZlQnlOYW1lKCJDSURGb250VHlwZSIpO3MucmVtb3ZlQnlOYW1lKCJDSURDb3VudCIpO3MucmVtb3ZlQnlOYW1lKCJVSURCYXNlIil9Y29uc3QgZT1uZXcgQ0ZGT2Zmc2V0VHJhY2tlcixuPXRoaXMuY29tcGlsZURpY3QocyxlKTthLnB1c2goZSk7ci5hZGQobik7ZS5vZmZzZXQodCl9cj10aGlzLmNvbXBpbGVJbmRleChyLGEpO3JldHVybnt0cmFja2VyczphLG91dHB1dDpyfX1jb21waWxlUHJpdmF0ZURpY3RzKGUsdCxpKXtmb3IobGV0IGE9MCxyPWUubGVuZ3RoO2E8cjsrK2Epe2NvbnN0IHI9ZVthXSxzPXIucHJpdmF0ZURpY3Q7aWYoIXN8fCFyLmhhc05hbWUoIlByaXZhdGUiKSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIlRoZXJlIG11c3QgYmUgYSBwcml2YXRlIGRpY3Rpb25hcnkuIik7Y29uc3Qgbj1uZXcgQ0ZGT2Zmc2V0VHJhY2tlcixvPXRoaXMuY29tcGlsZURpY3QocyxuKTtsZXQgZz1pLmxlbmd0aDtuLm9mZnNldChnKTtvLmxlbmd0aHx8KGc9MCk7dFthXS5zZXRFbnRyeUxvY2F0aW9uKCJQcml2YXRlIixbby5sZW5ndGgsZ10saSk7aS5hZGQobyk7aWYocy5zdWJyc0luZGV4JiZzLmhhc05hbWUoIlN1YnJzIikpe2NvbnN0IGU9dGhpcy5jb21waWxlSW5kZXgocy5zdWJyc0luZGV4KTtuLnNldEVudHJ5TG9jYXRpb24oIlN1YnJzIixbby5sZW5ndGhdLGkpO2kuYWRkKGUpfX19Y29tcGlsZURpY3QoZSx0KXtjb25zdCBpPVtdO2Zvcihjb25zdCBhIG9mIGUub3JkZXIpe2lmKCEoYSBpbiBlLnZhbHVlcykpY29udGludWU7bGV0IHI9ZS52YWx1ZXNbYV0scz1lLnR5cGVzW2FdO0FycmF5LmlzQXJyYXkocyl8fChzPVtzXSk7QXJyYXkuaXNBcnJheShyKXx8KHI9W3JdKTtpZigwIT09ci5sZW5ndGgpe2ZvcihsZXQgbj0wLG89cy5sZW5ndGg7bjxvOysrbil7Y29uc3Qgbz1zW25dLGc9cltuXTtzd2l0Y2gobyl7Y2FzZSJudW0iOmNhc2Uic2lkIjppLnB1c2goLi4udGhpcy5lbmNvZGVOdW1iZXIoZykpO2JyZWFrO2Nhc2Uib2Zmc2V0Ijpjb25zdCBzPWUua2V5VG9OYW1lTWFwW2FdO3QuaXNUcmFja2luZyhzKXx8dC50cmFjayhzLGkubGVuZ3RoKTtpLnB1c2goMjksMCwwLDAsMCk7YnJlYWs7Y2FzZSJhcnJheSI6Y2FzZSJkZWx0YSI6aS5wdXNoKC4uLnRoaXMuZW5jb2RlTnVtYmVyKGcpKTtmb3IobGV0IGU9MSx0PXIubGVuZ3RoO2U8dDsrK2UpaS5wdXNoKC4uLnRoaXMuZW5jb2RlTnVtYmVyKHJbZV0pKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBGb3JtYXRFcnJvcihgVW5rbm93biBkYXRhIHR5cGUgb2YgJHtvfWApfX1pLnB1c2goLi4uZS5vcGNvZGVzW2FdKX19cmV0dXJuIGl9Y29tcGlsZVN0cmluZ0luZGV4KGUpe2NvbnN0IHQ9bmV3IENGRkluZGV4O2Zvcihjb25zdCBpIG9mIGUpdC5hZGQoc3RyaW5nVG9CeXRlcyhpKSk7cmV0dXJuIHRoaXMuY29tcGlsZUluZGV4KHQpfWNvbXBpbGVDaGFyU3RyaW5ncyhlKXtjb25zdCB0PW5ldyBDRkZJbmRleDtmb3IobGV0IGk9MDtpPGUuY291bnQ7aSsrKXtjb25zdCBhPWUuZ2V0KGkpOzAhPT1hLmxlbmd0aD90LmFkZChhKTp0LmFkZChuZXcgVWludDhBcnJheShbMTM5LDE0XSkpfXJldHVybiB0aGlzLmNvbXBpbGVJbmRleCh0KX1jb21waWxlQ2hhcnNldChlLHQsaSxhKXtsZXQgcjtjb25zdCBzPXQtMTtpZihhKXI9bmV3IFVpbnQ4QXJyYXkoWzIsMCwwLHM+PjgmMjU1LDI1NSZzXSk7ZWxzZXtyPW5ldyBVaW50OEFycmF5KDErMipzKTtyWzBdPTA7bGV0IHQ9MDtjb25zdCBhPWUuY2hhcnNldC5sZW5ndGg7bGV0IG49ITE7Zm9yKGxldCBzPTE7czxyLmxlbmd0aDtzKz0yKXtsZXQgbz0wO2lmKHQ8YSl7Y29uc3QgYT1lLmNoYXJzZXRbdCsrXTtvPWkuZ2V0U0lEKGEpO2lmKC0xPT09byl7bz0wO2lmKCFuKXtuPSEwO3dhcm4oYENvdWxkbid0IGZpbmQgJHthfSBpbiBDRkYgc3RyaW5nc2ApfX19cltzXT1vPj44JjI1NTtyW3MrMV09MjU1Jm99fXJldHVybiB0aGlzLmNvbXBpbGVUeXBlZEFycmF5KHIpfWNvbXBpbGVFbmNvZGluZyhlKXtyZXR1cm4gdGhpcy5jb21waWxlVHlwZWRBcnJheShlLnJhdyl9Y29tcGlsZUZEU2VsZWN0KGUpe2NvbnN0IHQ9ZS5mb3JtYXQ7bGV0IGksYTtzd2l0Y2godCl7Y2FzZSAwOmk9bmV3IFVpbnQ4QXJyYXkoMStlLmZkU2VsZWN0Lmxlbmd0aCk7aVswXT10O2ZvcihhPTA7YTxlLmZkU2VsZWN0Lmxlbmd0aDthKyspaVthKzFdPWUuZmRTZWxlY3RbYV07YnJlYWs7Y2FzZSAzOmNvbnN0IHI9MDtsZXQgcz1lLmZkU2VsZWN0WzBdO2NvbnN0IG49W3QsMCwwLHI+PjgmMjU1LDI1NSZyLHNdO2ZvcihhPTE7YTxlLmZkU2VsZWN0Lmxlbmd0aDthKyspe2NvbnN0IHQ9ZS5mZFNlbGVjdFthXTtpZih0IT09cyl7bi5wdXNoKGE+PjgmMjU1LDI1NSZhLHQpO3M9dH19Y29uc3Qgbz0obi5sZW5ndGgtMykvMztuWzFdPW8+PjgmMjU1O25bMl09MjU1Jm87bi5wdXNoKGE+PjgmMjU1LDI1NSZhKTtpPW5ldyBVaW50OEFycmF5KG4pfXJldHVybiB0aGlzLmNvbXBpbGVUeXBlZEFycmF5KGkpfWNvbXBpbGVUeXBlZEFycmF5KGUpe3JldHVybiBBcnJheS5mcm9tKGUpfWNvbXBpbGVJbmRleChlLHQ9W10pe2NvbnN0IGk9ZS5vYmplY3RzLGE9aS5sZW5ndGg7aWYoMD09PWEpcmV0dXJuWzAsMF07Y29uc3Qgcj1bYT4+OCYyNTUsMjU1JmFdO2xldCBzLG4sbz0xO2ZvcihzPTA7czxhOysrcylvKz1pW3NdLmxlbmd0aDtuPW88MjU2PzE6bzw2NTUzNj8yOm88MTY3NzcyMTY/Mzo0O3IucHVzaChuKTtsZXQgZz0xO2ZvcihzPTA7czxhKzE7cysrKXsxPT09bj9yLnB1c2goMjU1JmcpOjI9PT1uP3IucHVzaChnPj44JjI1NSwyNTUmZyk6Mz09PW4/ci5wdXNoKGc+PjE2JjI1NSxnPj44JjI1NSwyNTUmZyk6ci5wdXNoKGc+Pj4yNCYyNTUsZz4+MTYmMjU1LGc+PjgmMjU1LDI1NSZnKTtpW3NdJiYoZys9aVtzXS5sZW5ndGgpfWZvcihzPTA7czxhO3MrKyl7dFtzXSYmdFtzXS5vZmZzZXQoci5sZW5ndGgpO3IucHVzaCguLi5pW3NdKX1yZXR1cm4gcn19Y29uc3QgRGk9Z2V0TG9va3VwVGFibGVGYWN0b3J5KChmdW5jdGlvbihlKXtlLkE9NjU7ZS5BRT0xOTg7ZS5BRWFjdXRlPTUwODtlLkFFbWFjcm9uPTQ4MjtlLkFFc21hbGw9NjM0NjI7ZS5BYWN1dGU9MTkzO2UuQWFjdXRlc21hbGw9NjM0NTc7ZS5BYnJldmU9MjU4O2UuQWJyZXZlYWN1dGU9Nzg1NDtlLkFicmV2ZWN5cmlsbGljPTEyMzI7ZS5BYnJldmVkb3RiZWxvdz03ODYyO2UuQWJyZXZlZ3JhdmU9Nzg1NjtlLkFicmV2ZWhvb2thYm92ZT03ODU4O2UuQWJyZXZldGlsZGU9Nzg2MDtlLkFjYXJvbj00NjE7ZS5BY2lyY2xlPTkzOTg7ZS5BY2lyY3VtZmxleD0xOTQ7ZS5BY2lyY3VtZmxleGFjdXRlPTc4NDQ7ZS5BY2lyY3VtZmxleGRvdGJlbG93PTc4NTI7ZS5BY2lyY3VtZmxleGdyYXZlPTc4NDY7ZS5BY2lyY3VtZmxleGhvb2thYm92ZT03ODQ4O2UuQWNpcmN1bWZsZXhzbWFsbD02MzQ1ODtlLkFjaXJjdW1mbGV4dGlsZGU9Nzg1MDtlLkFjdXRlPTYzMTc3O2UuQWN1dGVzbWFsbD02MzQxMjtlLkFjeXJpbGxpYz0xMDQwO2UuQWRibGdyYXZlPTUxMjtlLkFkaWVyZXNpcz0xOTY7ZS5BZGllcmVzaXNjeXJpbGxpYz0xMjM0O2UuQWRpZXJlc2lzbWFjcm9uPTQ3ODtlLkFkaWVyZXNpc3NtYWxsPTYzNDYwO2UuQWRvdGJlbG93PTc4NDA7ZS5BZG90bWFjcm9uPTQ4MDtlLkFncmF2ZT0xOTI7ZS5BZ3JhdmVzbWFsbD02MzQ1NjtlLkFob29rYWJvdmU9Nzg0MjtlLkFpZWN5cmlsbGljPTEyMzY7ZS5BaW52ZXJ0ZWRicmV2ZT01MTQ7ZS5BbHBoYT05MTM7ZS5BbHBoYXRvbm9zPTkwMjtlLkFtYWNyb249MjU2O2UuQW1vbm9zcGFjZT02NTMxMztlLkFvZ29uZWs9MjYwO2UuQXJpbmc9MTk3O2UuQXJpbmdhY3V0ZT01MDY7ZS5BcmluZ2JlbG93PTc2ODA7ZS5BcmluZ3NtYWxsPTYzNDYxO2UuQXNtYWxsPTYzMzI5O2UuQXRpbGRlPTE5NTtlLkF0aWxkZXNtYWxsPTYzNDU5O2UuQXliYXJtZW5pYW49MTMyOTtlLkI9NjY7ZS5CY2lyY2xlPTkzOTk7ZS5CZG90YWNjZW50PTc2ODI7ZS5CZG90YmVsb3c9NzY4NDtlLkJlY3lyaWxsaWM9MTA0MTtlLkJlbmFybWVuaWFuPTEzMzA7ZS5CZXRhPTkxNDtlLkJob29rPTM4NTtlLkJsaW5lYmVsb3c9NzY4NjtlLkJtb25vc3BhY2U9NjUzMTQ7ZS5CcmV2ZXNtYWxsPTYzMjIwO2UuQnNtYWxsPTYzMzMwO2UuQnRvcGJhcj0zODY7ZS5DPTY3O2UuQ2Fhcm1lbmlhbj0xMzQyO2UuQ2FjdXRlPTI2MjtlLkNhcm9uPTYzMTc4O2UuQ2Fyb25zbWFsbD02MzIyMTtlLkNjYXJvbj0yNjg7ZS5DY2VkaWxsYT0xOTk7ZS5DY2VkaWxsYWFjdXRlPTc2ODg7ZS5DY2VkaWxsYXNtYWxsPTYzNDYzO2UuQ2NpcmNsZT05NDAwO2UuQ2NpcmN1bWZsZXg9MjY0O2UuQ2RvdD0yNjY7ZS5DZG90YWNjZW50PTI2NjtlLkNlZGlsbGFzbWFsbD02MzQxNjtlLkNoYWFybWVuaWFuPTEzNTM7ZS5DaGVhYmtoYXNpYW5jeXJpbGxpYz0xMjEyO2UuQ2hlY3lyaWxsaWM9MTA2MztlLkNoZWRlc2NlbmRlcmFia2hhc2lhbmN5cmlsbGljPTEyMTQ7ZS5DaGVkZXNjZW5kZXJjeXJpbGxpYz0xMjA2O2UuQ2hlZGllcmVzaXNjeXJpbGxpYz0xMjY4O2UuQ2hlaGFybWVuaWFuPTEzNDc7ZS5DaGVraGFrYXNzaWFuY3lyaWxsaWM9MTIyNztlLkNoZXZlcnRpY2Fsc3Ryb2tlY3lyaWxsaWM9MTIwODtlLkNoaT05MzU7ZS5DaG9vaz0zOTE7ZS5DaXJjdW1mbGV4c21hbGw9NjMyMjI7ZS5DbW9ub3NwYWNlPTY1MzE1O2UuQ29hcm1lbmlhbj0xMzYxO2UuQ3NtYWxsPTYzMzMxO2UuRD02ODtlLkRaPTQ5NztlLkRaY2Fyb249NDUyO2UuRGFhcm1lbmlhbj0xMzMyO2UuRGFmcmljYW49MzkzO2UuRGNhcm9uPTI3MDtlLkRjZWRpbGxhPTc2OTY7ZS5EY2lyY2xlPTk0MDE7ZS5EY2lyY3VtZmxleGJlbG93PTc2OTg7ZS5EY3JvYXQ9MjcyO2UuRGRvdGFjY2VudD03NjkwO2UuRGRvdGJlbG93PTc2OTI7ZS5EZWN5cmlsbGljPTEwNDQ7ZS5EZWljb3B0aWM9MTAwNjtlLkRlbHRhPTg3MTA7ZS5EZWx0YWdyZWVrPTkxNjtlLkRob29rPTM5NDtlLkRpZXJlc2lzPTYzMTc5O2UuRGllcmVzaXNBY3V0ZT02MzE4MDtlLkRpZXJlc2lzR3JhdmU9NjMxODE7ZS5EaWVyZXNpc3NtYWxsPTYzNDAwO2UuRGlnYW1tYWdyZWVrPTk4ODtlLkRqZWN5cmlsbGljPTEwMjY7ZS5EbGluZWJlbG93PTc2OTQ7ZS5EbW9ub3NwYWNlPTY1MzE2O2UuRG90YWNjZW50c21hbGw9NjMyMjM7ZS5Ec2xhc2g9MjcyO2UuRHNtYWxsPTYzMzMyO2UuRHRvcGJhcj0zOTU7ZS5Eej00OTg7ZS5EemNhcm9uPTQ1MztlLkR6ZWFia2hhc2lhbmN5cmlsbGljPTEyNDg7ZS5EemVjeXJpbGxpYz0xMDI5O2UuRHpoZWN5cmlsbGljPTEwMzk7ZS5FPTY5O2UuRWFjdXRlPTIwMTtlLkVhY3V0ZXNtYWxsPTYzNDY1O2UuRWJyZXZlPTI3NjtlLkVjYXJvbj0yODI7ZS5FY2VkaWxsYWJyZXZlPTc3MDg7ZS5FY2hhcm1lbmlhbj0xMzMzO2UuRWNpcmNsZT05NDAyO2UuRWNpcmN1bWZsZXg9MjAyO2UuRWNpcmN1bWZsZXhhY3V0ZT03ODcwO2UuRWNpcmN1bWZsZXhiZWxvdz03NzA0O2UuRWNpcmN1bWZsZXhkb3RiZWxvdz03ODc4O2UuRWNpcmN1bWZsZXhncmF2ZT03ODcyO2UuRWNpcmN1bWZsZXhob29rYWJvdmU9Nzg3NDtlLkVjaXJjdW1mbGV4c21hbGw9NjM0NjY7ZS5FY2lyY3VtZmxleHRpbGRlPTc4NzY7ZS5FY3lyaWxsaWM9MTAyODtlLkVkYmxncmF2ZT01MTY7ZS5FZGllcmVzaXM9MjAzO2UuRWRpZXJlc2lzc21hbGw9NjM0Njc7ZS5FZG90PTI3ODtlLkVkb3RhY2NlbnQ9Mjc4O2UuRWRvdGJlbG93PTc4NjQ7ZS5FZmN5cmlsbGljPTEwNjA7ZS5FZ3JhdmU9MjAwO2UuRWdyYXZlc21hbGw9NjM0NjQ7ZS5FaGFybWVuaWFuPTEzMzU7ZS5FaG9va2Fib3ZlPTc4NjY7ZS5FaWdodHJvbWFuPTg1NTE7ZS5FaW52ZXJ0ZWRicmV2ZT01MTg7ZS5FaW90aWZpZWRjeXJpbGxpYz0xMTI0O2UuRWxjeXJpbGxpYz0xMDUxO2UuRWxldmVucm9tYW49ODU1NDtlLkVtYWNyb249Mjc0O2UuRW1hY3JvbmFjdXRlPTc3MDI7ZS5FbWFjcm9uZ3JhdmU9NzcwMDtlLkVtY3lyaWxsaWM9MTA1MjtlLkVtb25vc3BhY2U9NjUzMTc7ZS5FbmN5cmlsbGljPTEwNTM7ZS5FbmRlc2NlbmRlcmN5cmlsbGljPTExODY7ZS5Fbmc9MzMwO2UuRW5naGVjeXJpbGxpYz0xMTg4O2UuRW5ob29rY3lyaWxsaWM9MTIyMztlLkVvZ29uZWs9MjgwO2UuRW9wZW49NDAwO2UuRXBzaWxvbj05MTc7ZS5FcHNpbG9udG9ub3M9OTA0O2UuRXJjeXJpbGxpYz0xMDU2O2UuRXJldmVyc2VkPTM5ODtlLkVyZXZlcnNlZGN5cmlsbGljPTEwNjk7ZS5Fc2N5cmlsbGljPTEwNTc7ZS5Fc2Rlc2NlbmRlcmN5cmlsbGljPTExOTQ7ZS5Fc2g9NDI1O2UuRXNtYWxsPTYzMzMzO2UuRXRhPTkxOTtlLkV0YXJtZW5pYW49MTMzNjtlLkV0YXRvbm9zPTkwNTtlLkV0aD0yMDg7ZS5FdGhzbWFsbD02MzQ3MjtlLkV0aWxkZT03ODY4O2UuRXRpbGRlYmVsb3c9NzcwNjtlLkV1cm89ODM2NDtlLkV6aD00Mzk7ZS5FemhjYXJvbj00OTQ7ZS5FemhyZXZlcnNlZD00NDA7ZS5GPTcwO2UuRmNpcmNsZT05NDAzO2UuRmRvdGFjY2VudD03NzEwO2UuRmVoYXJtZW5pYW49MTM2NjtlLkZlaWNvcHRpYz05OTY7ZS5GaG9vaz00MDE7ZS5GaXRhY3lyaWxsaWM9MTEzODtlLkZpdmVyb21hbj04NTQ4O2UuRm1vbm9zcGFjZT02NTMxODtlLkZvdXJyb21hbj04NTQ3O2UuRnNtYWxsPTYzMzM0O2UuRz03MTtlLkdCc3F1YXJlPTEzMTkxO2UuR2FjdXRlPTUwMDtlLkdhbW1hPTkxNTtlLkdhbW1hYWZyaWNhbj00MDQ7ZS5HYW5naWFjb3B0aWM9MTAwMjtlLkdicmV2ZT0yODY7ZS5HY2Fyb249NDg2O2UuR2NlZGlsbGE9MjkwO2UuR2NpcmNsZT05NDA0O2UuR2NpcmN1bWZsZXg9Mjg0O2UuR2NvbW1hYWNjZW50PTI5MDtlLkdkb3Q9Mjg4O2UuR2RvdGFjY2VudD0yODg7ZS5HZWN5cmlsbGljPTEwNDM7ZS5HaGFkYXJtZW5pYW49MTM0NjtlLkdoZW1pZGRsZWhvb2tjeXJpbGxpYz0xMTcyO2UuR2hlc3Ryb2tlY3lyaWxsaWM9MTE3MDtlLkdoZXVwdHVybmN5cmlsbGljPTExNjg7ZS5HaG9vaz00MDM7ZS5HaW1hcm1lbmlhbj0xMzMxO2UuR2plY3lyaWxsaWM9MTAyNztlLkdtYWNyb249NzcxMjtlLkdtb25vc3BhY2U9NjUzMTk7ZS5HcmF2ZT02MzE4MjtlLkdyYXZlc21hbGw9NjMzMjg7ZS5Hc21hbGw9NjMzMzU7ZS5Hc21hbGxob29rPTY2NztlLkdzdHJva2U9NDg0O2UuSD03MjtlLkgxODUzMz05Njc5O2UuSDE4NTQzPTk2NDI7ZS5IMTg1NTE9OTY0MztlLkgyMjA3Mz05NjMzO2UuSFBzcXVhcmU9MTMyNTk7ZS5IYWFia2hhc2lhbmN5cmlsbGljPTExOTI7ZS5IYWRlc2NlbmRlcmN5cmlsbGljPTEyMDI7ZS5IYXJkc2lnbmN5cmlsbGljPTEwNjY7ZS5IYmFyPTI5NDtlLkhicmV2ZWJlbG93PTc3MjI7ZS5IY2VkaWxsYT03NzIwO2UuSGNpcmNsZT05NDA1O2UuSGNpcmN1bWZsZXg9MjkyO2UuSGRpZXJlc2lzPTc3MTg7ZS5IZG90YWNjZW50PTc3MTQ7ZS5IZG90YmVsb3c9NzcxNjtlLkhtb25vc3BhY2U9NjUzMjA7ZS5Ib2FybWVuaWFuPTEzNDQ7ZS5Ib3JpY29wdGljPTFlMztlLkhzbWFsbD02MzMzNjtlLkh1bmdhcnVtbGF1dD02MzE4MztlLkh1bmdhcnVtbGF1dHNtYWxsPTYzMjI0O2UuSHpzcXVhcmU9MTMyMDA7ZS5JPTczO2UuSUFjeXJpbGxpYz0xMDcxO2UuSUo9MzA2O2UuSVVjeXJpbGxpYz0xMDcwO2UuSWFjdXRlPTIwNTtlLklhY3V0ZXNtYWxsPTYzNDY5O2UuSWJyZXZlPTMwMDtlLkljYXJvbj00NjM7ZS5JY2lyY2xlPTk0MDY7ZS5JY2lyY3VtZmxleD0yMDY7ZS5JY2lyY3VtZmxleHNtYWxsPTYzNDcwO2UuSWN5cmlsbGljPTEwMzA7ZS5JZGJsZ3JhdmU9NTIwO2UuSWRpZXJlc2lzPTIwNztlLklkaWVyZXNpc2FjdXRlPTc3MjY7ZS5JZGllcmVzaXNjeXJpbGxpYz0xMjUyO2UuSWRpZXJlc2lzc21hbGw9NjM0NzE7ZS5JZG90PTMwNDtlLklkb3RhY2NlbnQ9MzA0O2UuSWRvdGJlbG93PTc4ODI7ZS5JZWJyZXZlY3lyaWxsaWM9MTIzODtlLkllY3lyaWxsaWM9MTA0NTtlLklmcmFrdHVyPTg0NjU7ZS5JZ3JhdmU9MjA0O2UuSWdyYXZlc21hbGw9NjM0Njg7ZS5JaG9va2Fib3ZlPTc4ODA7ZS5JaWN5cmlsbGljPTEwNDg7ZS5JaW52ZXJ0ZWRicmV2ZT01MjI7ZS5JaXNob3J0Y3lyaWxsaWM9MTA0OTtlLkltYWNyb249Mjk4O2UuSW1hY3JvbmN5cmlsbGljPTEyNTA7ZS5JbW9ub3NwYWNlPTY1MzIxO2UuSW5pYXJtZW5pYW49MTMzOTtlLklvY3lyaWxsaWM9MTAyNTtlLklvZ29uZWs9MzAyO2UuSW90YT05MjE7ZS5Jb3RhYWZyaWNhbj00MDY7ZS5Jb3RhZGllcmVzaXM9OTM4O2UuSW90YXRvbm9zPTkwNjtlLklzbWFsbD02MzMzNztlLklzdHJva2U9NDA3O2UuSXRpbGRlPTI5NjtlLkl0aWxkZWJlbG93PTc3MjQ7ZS5JemhpdHNhY3lyaWxsaWM9MTE0MDtlLkl6aGl0c2FkYmxncmF2ZWN5cmlsbGljPTExNDI7ZS5KPTc0O2UuSmFhcm1lbmlhbj0xMzQ1O2UuSmNpcmNsZT05NDA3O2UuSmNpcmN1bWZsZXg9MzA4O2UuSmVjeXJpbGxpYz0xMDMyO2UuSmhlaGFybWVuaWFuPTEzNTU7ZS5KbW9ub3NwYWNlPTY1MzIyO2UuSnNtYWxsPTYzMzM4O2UuSz03NTtlLktCc3F1YXJlPTEzMTg5O2UuS0tzcXVhcmU9MTMyNjE7ZS5LYWJhc2hraXJjeXJpbGxpYz0xMTg0O2UuS2FjdXRlPTc3Mjg7ZS5LYWN5cmlsbGljPTEwNTA7ZS5LYWRlc2NlbmRlcmN5cmlsbGljPTExNzg7ZS5LYWhvb2tjeXJpbGxpYz0xMjE5O2UuS2FwcGE9OTIyO2UuS2FzdHJva2VjeXJpbGxpYz0xMTgyO2UuS2F2ZXJ0aWNhbHN0cm9rZWN5cmlsbGljPTExODA7ZS5LY2Fyb249NDg4O2UuS2NlZGlsbGE9MzEwO2UuS2NpcmNsZT05NDA4O2UuS2NvbW1hYWNjZW50PTMxMDtlLktkb3RiZWxvdz03NzMwO2UuS2VoYXJtZW5pYW49MTM2NDtlLktlbmFybWVuaWFuPTEzNDM7ZS5LaGFjeXJpbGxpYz0xMDYxO2UuS2hlaWNvcHRpYz05OTg7ZS5LaG9vaz00MDg7ZS5LamVjeXJpbGxpYz0xMDM2O2UuS2xpbmViZWxvdz03NzMyO2UuS21vbm9zcGFjZT02NTMyMztlLktvcHBhY3lyaWxsaWM9MTE1MjtlLktvcHBhZ3JlZWs9OTkwO2UuS3NpY3lyaWxsaWM9MTEzNDtlLktzbWFsbD02MzMzOTtlLkw9NzY7ZS5MSj00NTU7ZS5MTD02MzE2NztlLkxhY3V0ZT0zMTM7ZS5MYW1iZGE9OTIzO2UuTGNhcm9uPTMxNztlLkxjZWRpbGxhPTMxNTtlLkxjaXJjbGU9OTQwOTtlLkxjaXJjdW1mbGV4YmVsb3c9Nzc0MDtlLkxjb21tYWFjY2VudD0zMTU7ZS5MZG90PTMxOTtlLkxkb3RhY2NlbnQ9MzE5O2UuTGRvdGJlbG93PTc3MzQ7ZS5MZG90YmVsb3dtYWNyb249NzczNjtlLkxpd25hcm1lbmlhbj0xMzQwO2UuTGo9NDU2O2UuTGplY3lyaWxsaWM9MTAzMztlLkxsaW5lYmVsb3c9NzczODtlLkxtb25vc3BhY2U9NjUzMjQ7ZS5Mc2xhc2g9MzIxO2UuTHNsYXNoc21hbGw9NjMyMjU7ZS5Mc21hbGw9NjMzNDA7ZS5NPTc3O2UuTUJzcXVhcmU9MTMxOTA7ZS5NYWNyb249NjMxODQ7ZS5NYWNyb25zbWFsbD02MzQwNztlLk1hY3V0ZT03NzQyO2UuTWNpcmNsZT05NDEwO2UuTWRvdGFjY2VudD03NzQ0O2UuTWRvdGJlbG93PTc3NDY7ZS5NZW5hcm1lbmlhbj0xMzQ4O2UuTW1vbm9zcGFjZT02NTMyNTtlLk1zbWFsbD02MzM0MTtlLk10dXJuZWQ9NDEyO2UuTXU9OTI0O2UuTj03ODtlLk5KPTQ1ODtlLk5hY3V0ZT0zMjM7ZS5OY2Fyb249MzI3O2UuTmNlZGlsbGE9MzI1O2UuTmNpcmNsZT05NDExO2UuTmNpcmN1bWZsZXhiZWxvdz03NzU0O2UuTmNvbW1hYWNjZW50PTMyNTtlLk5kb3RhY2NlbnQ9Nzc0ODtlLk5kb3RiZWxvdz03NzUwO2UuTmhvb2tsZWZ0PTQxMztlLk5pbmVyb21hbj04NTUyO2UuTmo9NDU5O2UuTmplY3lyaWxsaWM9MTAzNDtlLk5saW5lYmVsb3c9Nzc1MjtlLk5tb25vc3BhY2U9NjUzMjY7ZS5Ob3dhcm1lbmlhbj0xMzUwO2UuTnNtYWxsPTYzMzQyO2UuTnRpbGRlPTIwOTtlLk50aWxkZXNtYWxsPTYzNDczO2UuTnU9OTI1O2UuTz03OTtlLk9FPTMzODtlLk9Fc21hbGw9NjMyMjY7ZS5PYWN1dGU9MjExO2UuT2FjdXRlc21hbGw9NjM0NzU7ZS5PYmFycmVkY3lyaWxsaWM9MTI1NjtlLk9iYXJyZWRkaWVyZXNpc2N5cmlsbGljPTEyNTg7ZS5PYnJldmU9MzM0O2UuT2Nhcm9uPTQ2NTtlLk9jZW50ZXJlZHRpbGRlPTQxNTtlLk9jaXJjbGU9OTQxMjtlLk9jaXJjdW1mbGV4PTIxMjtlLk9jaXJjdW1mbGV4YWN1dGU9Nzg4ODtlLk9jaXJjdW1mbGV4ZG90YmVsb3c9Nzg5NjtlLk9jaXJjdW1mbGV4Z3JhdmU9Nzg5MDtlLk9jaXJjdW1mbGV4aG9va2Fib3ZlPTc4OTI7ZS5PY2lyY3VtZmxleHNtYWxsPTYzNDc2O2UuT2NpcmN1bWZsZXh0aWxkZT03ODk0O2UuT2N5cmlsbGljPTEwNTQ7ZS5PZGJsYWN1dGU9MzM2O2UuT2RibGdyYXZlPTUyNDtlLk9kaWVyZXNpcz0yMTQ7ZS5PZGllcmVzaXNjeXJpbGxpYz0xMjU0O2UuT2RpZXJlc2lzc21hbGw9NjM0Nzg7ZS5PZG90YmVsb3c9Nzg4NDtlLk9nb25la3NtYWxsPTYzMjI3O2UuT2dyYXZlPTIxMDtlLk9ncmF2ZXNtYWxsPTYzNDc0O2UuT2hhcm1lbmlhbj0xMzY1O2UuT2htPTg0ODY7ZS5PaG9va2Fib3ZlPTc4ODY7ZS5PaG9ybj00MTY7ZS5PaG9ybmFjdXRlPTc4OTg7ZS5PaG9ybmRvdGJlbG93PTc5MDY7ZS5PaG9ybmdyYXZlPTc5MDA7ZS5PaG9ybmhvb2thYm92ZT03OTAyO2UuT2hvcm50aWxkZT03OTA0O2UuT2h1bmdhcnVtbGF1dD0zMzY7ZS5PaT00MTg7ZS5PaW52ZXJ0ZWRicmV2ZT01MjY7ZS5PbWFjcm9uPTMzMjtlLk9tYWNyb25hY3V0ZT03NzYyO2UuT21hY3JvbmdyYXZlPTc3NjA7ZS5PbWVnYT04NDg2O2UuT21lZ2FjeXJpbGxpYz0xMTIwO2UuT21lZ2FncmVlaz05Mzc7ZS5PbWVnYXJvdW5kY3lyaWxsaWM9MTE0NjtlLk9tZWdhdGl0bG9jeXJpbGxpYz0xMTQ4O2UuT21lZ2F0b25vcz05MTE7ZS5PbWljcm9uPTkyNztlLk9taWNyb250b25vcz05MDg7ZS5PbW9ub3NwYWNlPTY1MzI3O2UuT25lcm9tYW49ODU0NDtlLk9vZ29uZWs9NDkwO2UuT29nb25la21hY3Jvbj00OTI7ZS5Pb3Blbj0zOTA7ZS5Pc2xhc2g9MjE2O2UuT3NsYXNoYWN1dGU9NTEwO2UuT3NsYXNoc21hbGw9NjM0ODA7ZS5Pc21hbGw9NjMzNDM7ZS5Pc3Ryb2tlYWN1dGU9NTEwO2UuT3RjeXJpbGxpYz0xMTUwO2UuT3RpbGRlPTIxMztlLk90aWxkZWFjdXRlPTc3NTY7ZS5PdGlsZGVkaWVyZXNpcz03NzU4O2UuT3RpbGRlc21hbGw9NjM0Nzc7ZS5QPTgwO2UuUGFjdXRlPTc3NjQ7ZS5QY2lyY2xlPTk0MTM7ZS5QZG90YWNjZW50PTc3NjY7ZS5QZWN5cmlsbGljPTEwNTU7ZS5QZWhhcm1lbmlhbj0xMzU0O2UuUGVtaWRkbGVob29rY3lyaWxsaWM9MTE5MDtlLlBoaT05MzQ7ZS5QaG9vaz00MjA7ZS5QaT05Mjg7ZS5QaXdyYXJtZW5pYW49MTM2MztlLlBtb25vc3BhY2U9NjUzMjg7ZS5Qc2k9OTM2O2UuUHNpY3lyaWxsaWM9MTEzNjtlLlBzbWFsbD02MzM0NDtlLlE9ODE7ZS5RY2lyY2xlPTk0MTQ7ZS5RbW9ub3NwYWNlPTY1MzI5O2UuUXNtYWxsPTYzMzQ1O2UuUj04MjtlLlJhYXJtZW5pYW49MTM1NjtlLlJhY3V0ZT0zNDA7ZS5SY2Fyb249MzQ0O2UuUmNlZGlsbGE9MzQyO2UuUmNpcmNsZT05NDE1O2UuUmNvbW1hYWNjZW50PTM0MjtlLlJkYmxncmF2ZT01Mjg7ZS5SZG90YWNjZW50PTc3Njg7ZS5SZG90YmVsb3c9Nzc3MDtlLlJkb3RiZWxvd21hY3Jvbj03NzcyO2UuUmVoYXJtZW5pYW49MTM2MDtlLlJmcmFrdHVyPTg0NzY7ZS5SaG89OTI5O2UuUmluZ3NtYWxsPTYzMjI4O2UuUmludmVydGVkYnJldmU9NTMwO2UuUmxpbmViZWxvdz03Nzc0O2UuUm1vbm9zcGFjZT02NTMzMDtlLlJzbWFsbD02MzM0NjtlLlJzbWFsbGludmVydGVkPTY0MTtlLlJzbWFsbGludmVydGVkc3VwZXJpb3I9Njk0O2UuUz04MztlLlNGMDEwMDAwPTk0ODQ7ZS5TRjAyMDAwMD05NDkyO2UuU0YwMzAwMDA9OTQ4ODtlLlNGMDQwMDAwPTk0OTY7ZS5TRjA1MDAwMD05NTMyO2UuU0YwNjAwMDA9OTUxNjtlLlNGMDcwMDAwPTk1MjQ7ZS5TRjA4MDAwMD05NTAwO2UuU0YwOTAwMDA9OTUwODtlLlNGMTAwMDAwPTk0NzI7ZS5TRjExMDAwMD05NDc0O2UuU0YxOTAwMDA9OTU2OTtlLlNGMjAwMDAwPTk1NzA7ZS5TRjIxMDAwMD05NTU4O2UuU0YyMjAwMDA9OTU1NztlLlNGMjMwMDAwPTk1NzE7ZS5TRjI0MDAwMD05NTUzO2UuU0YyNTAwMDA9OTU1OTtlLlNGMjYwMDAwPTk1NjU7ZS5TRjI3MDAwMD05NTY0O2UuU0YyODAwMDA9OTU2MztlLlNGMzYwMDAwPTk1NjY7ZS5TRjM3MDAwMD05NTY3O2UuU0YzODAwMDA9OTU2MjtlLlNGMzkwMDAwPTk1NTY7ZS5TRjQwMDAwMD05NTc3O2UuU0Y0MTAwMDA9OTU3NDtlLlNGNDIwMDAwPTk1Njg7ZS5TRjQzMDAwMD05NTUyO2UuU0Y0NDAwMDA9OTU4MDtlLlNGNDUwMDAwPTk1NzU7ZS5TRjQ2MDAwMD05NTc2O2UuU0Y0NzAwMDA9OTU3MjtlLlNGNDgwMDAwPTk1NzM7ZS5TRjQ5MDAwMD05NTYxO2UuU0Y1MDAwMDA9OTU2MDtlLlNGNTEwMDAwPTk1NTQ7ZS5TRjUyMDAwMD05NTU1O2UuU0Y1MzAwMDA9OTU3OTtlLlNGNTQwMDAwPTk1Nzg7ZS5TYWN1dGU9MzQ2O2UuU2FjdXRlZG90YWNjZW50PTc3ODA7ZS5TYW1waWdyZWVrPTk5MjtlLlNjYXJvbj0zNTI7ZS5TY2Fyb25kb3RhY2NlbnQ9Nzc4MjtlLlNjYXJvbnNtYWxsPTYzMjI5O2UuU2NlZGlsbGE9MzUwO2UuU2Nod2E9Mzk5O2UuU2Nod2FjeXJpbGxpYz0xMjQwO2UuU2Nod2FkaWVyZXNpc2N5cmlsbGljPTEyNDI7ZS5TY2lyY2xlPTk0MTY7ZS5TY2lyY3VtZmxleD0zNDg7ZS5TY29tbWFhY2NlbnQ9NTM2O2UuU2RvdGFjY2VudD03Nzc2O2UuU2RvdGJlbG93PTc3Nzg7ZS5TZG90YmVsb3dkb3RhY2NlbnQ9Nzc4NDtlLlNlaGFybWVuaWFuPTEzNTc7ZS5TZXZlbnJvbWFuPTg1NTA7ZS5TaGFhcm1lbmlhbj0xMzUxO2UuU2hhY3lyaWxsaWM9MTA2NDtlLlNoY2hhY3lyaWxsaWM9MTA2NTtlLlNoZWljb3B0aWM9OTk0O2UuU2hoYWN5cmlsbGljPTEyMTA7ZS5TaGltYWNvcHRpYz0xMDA0O2UuU2lnbWE9OTMxO2UuU2l4cm9tYW49ODU0OTtlLlNtb25vc3BhY2U9NjUzMzE7ZS5Tb2Z0c2lnbmN5cmlsbGljPTEwNjg7ZS5Tc21hbGw9NjMzNDc7ZS5TdGlnbWFncmVlaz05ODY7ZS5UPTg0O2UuVGF1PTkzMjtlLlRiYXI9MzU4O2UuVGNhcm9uPTM1NjtlLlRjZWRpbGxhPTM1NDtlLlRjaXJjbGU9OTQxNztlLlRjaXJjdW1mbGV4YmVsb3c9Nzc5MjtlLlRjb21tYWFjY2VudD0zNTQ7ZS5UZG90YWNjZW50PTc3ODY7ZS5UZG90YmVsb3c9Nzc4ODtlLlRlY3lyaWxsaWM9MTA1ODtlLlRlZGVzY2VuZGVyY3lyaWxsaWM9MTE5NjtlLlRlbnJvbWFuPTg1NTM7ZS5UZXRzZWN5cmlsbGljPTEyMDQ7ZS5UaGV0YT05MjA7ZS5UaG9vaz00Mjg7ZS5UaG9ybj0yMjI7ZS5UaG9ybnNtYWxsPTYzNDg2O2UuVGhyZWVyb21hbj04NTQ2O2UuVGlsZGVzbWFsbD02MzIzMDtlLlRpd25hcm1lbmlhbj0xMzU5O2UuVGxpbmViZWxvdz03NzkwO2UuVG1vbm9zcGFjZT02NTMzMjtlLlRvYXJtZW5pYW49MTMzNztlLlRvbmVmaXZlPTQ0NDtlLlRvbmVzaXg9Mzg4O2UuVG9uZXR3bz00MjM7ZS5UcmV0cm9mbGV4aG9vaz00MzA7ZS5Uc2VjeXJpbGxpYz0xMDYyO2UuVHNoZWN5cmlsbGljPTEwMzU7ZS5Uc21hbGw9NjMzNDg7ZS5Ud2VsdmVyb21hbj04NTU1O2UuVHdvcm9tYW49ODU0NTtlLlU9ODU7ZS5VYWN1dGU9MjE4O2UuVWFjdXRlc21hbGw9NjM0ODI7ZS5VYnJldmU9MzY0O2UuVWNhcm9uPTQ2NztlLlVjaXJjbGU9OTQxODtlLlVjaXJjdW1mbGV4PTIxOTtlLlVjaXJjdW1mbGV4YmVsb3c9Nzc5ODtlLlVjaXJjdW1mbGV4c21hbGw9NjM0ODM7ZS5VY3lyaWxsaWM9MTA1OTtlLlVkYmxhY3V0ZT0zNjg7ZS5VZGJsZ3JhdmU9NTMyO2UuVWRpZXJlc2lzPTIyMDtlLlVkaWVyZXNpc2FjdXRlPTQ3MTtlLlVkaWVyZXNpc2JlbG93PTc3OTQ7ZS5VZGllcmVzaXNjYXJvbj00NzM7ZS5VZGllcmVzaXNjeXJpbGxpYz0xMjY0O2UuVWRpZXJlc2lzZ3JhdmU9NDc1O2UuVWRpZXJlc2lzbWFjcm9uPTQ2OTtlLlVkaWVyZXNpc3NtYWxsPTYzNDg0O2UuVWRvdGJlbG93PTc5MDg7ZS5VZ3JhdmU9MjE3O2UuVWdyYXZlc21hbGw9NjM0ODE7ZS5VaG9va2Fib3ZlPTc5MTA7ZS5VaG9ybj00MzE7ZS5VaG9ybmFjdXRlPTc5MTI7ZS5VaG9ybmRvdGJlbG93PTc5MjA7ZS5VaG9ybmdyYXZlPTc5MTQ7ZS5VaG9ybmhvb2thYm92ZT03OTE2O2UuVWhvcm50aWxkZT03OTE4O2UuVWh1bmdhcnVtbGF1dD0zNjg7ZS5VaHVuZ2FydW1sYXV0Y3lyaWxsaWM9MTI2NjtlLlVpbnZlcnRlZGJyZXZlPTUzNDtlLlVrY3lyaWxsaWM9MTE0NDtlLlVtYWNyb249MzYyO2UuVW1hY3JvbmN5cmlsbGljPTEyNjI7ZS5VbWFjcm9uZGllcmVzaXM9NzgwMjtlLlVtb25vc3BhY2U9NjUzMzM7ZS5Vb2dvbmVrPTM3MDtlLlVwc2lsb249OTMzO2UuVXBzaWxvbjE9OTc4O2UuVXBzaWxvbmFjdXRlaG9va3N5bWJvbGdyZWVrPTk3OTtlLlVwc2lsb25hZnJpY2FuPTQzMztlLlVwc2lsb25kaWVyZXNpcz05Mzk7ZS5VcHNpbG9uZGllcmVzaXNob29rc3ltYm9sZ3JlZWs9OTgwO2UuVXBzaWxvbmhvb2tzeW1ib2w9OTc4O2UuVXBzaWxvbnRvbm9zPTkxMDtlLlVyaW5nPTM2NjtlLlVzaG9ydGN5cmlsbGljPTEwMzg7ZS5Vc21hbGw9NjMzNDk7ZS5Vc3RyYWlnaHRjeXJpbGxpYz0xMTk4O2UuVXN0cmFpZ2h0c3Ryb2tlY3lyaWxsaWM9MTIwMDtlLlV0aWxkZT0zNjA7ZS5VdGlsZGVhY3V0ZT03ODAwO2UuVXRpbGRlYmVsb3c9Nzc5NjtlLlY9ODY7ZS5WY2lyY2xlPTk0MTk7ZS5WZG90YmVsb3c9NzgwNjtlLlZlY3lyaWxsaWM9MTA0MjtlLlZld2FybWVuaWFuPTEzNTg7ZS5WaG9vaz00MzQ7ZS5WbW9ub3NwYWNlPTY1MzM0O2UuVm9hcm1lbmlhbj0xMzUyO2UuVnNtYWxsPTYzMzUwO2UuVnRpbGRlPTc4MDQ7ZS5XPTg3O2UuV2FjdXRlPTc4MTA7ZS5XY2lyY2xlPTk0MjA7ZS5XY2lyY3VtZmxleD0zNzI7ZS5XZGllcmVzaXM9NzgxMjtlLldkb3RhY2NlbnQ9NzgxNDtlLldkb3RiZWxvdz03ODE2O2UuV2dyYXZlPTc4MDg7ZS5XbW9ub3NwYWNlPTY1MzM1O2UuV3NtYWxsPTYzMzUxO2UuWD04ODtlLlhjaXJjbGU9OTQyMTtlLlhkaWVyZXNpcz03ODIwO2UuWGRvdGFjY2VudD03ODE4O2UuWGVoYXJtZW5pYW49MTM0MTtlLlhpPTkyNjtlLlhtb25vc3BhY2U9NjUzMzY7ZS5Yc21hbGw9NjMzNTI7ZS5ZPTg5O2UuWWFjdXRlPTIyMTtlLllhY3V0ZXNtYWxsPTYzNDg1O2UuWWF0Y3lyaWxsaWM9MTEyMjtlLlljaXJjbGU9OTQyMjtlLlljaXJjdW1mbGV4PTM3NDtlLllkaWVyZXNpcz0zNzY7ZS5ZZGllcmVzaXNzbWFsbD02MzQ4NztlLllkb3RhY2NlbnQ9NzgyMjtlLllkb3RiZWxvdz03OTI0O2UuWWVyaWN5cmlsbGljPTEwNjc7ZS5ZZXJ1ZGllcmVzaXNjeXJpbGxpYz0xMjcyO2UuWWdyYXZlPTc5MjI7ZS5ZaG9vaz00MzU7ZS5ZaG9va2Fib3ZlPTc5MjY7ZS5ZaWFybWVuaWFuPTEzNDk7ZS5ZaWN5cmlsbGljPTEwMzE7ZS5ZaXduYXJtZW5pYW49MTM2MjtlLlltb25vc3BhY2U9NjUzMzc7ZS5Zc21hbGw9NjMzNTM7ZS5ZdGlsZGU9NzkyODtlLll1c2JpZ2N5cmlsbGljPTExMzA7ZS5ZdXNiaWdpb3RpZmllZGN5cmlsbGljPTExMzI7ZS5ZdXNsaXR0bGVjeXJpbGxpYz0xMTI2O2UuWXVzbGl0dGxlaW90aWZpZWRjeXJpbGxpYz0xMTI4O2UuWj05MDtlLlphYXJtZW5pYW49MTMzNDtlLlphY3V0ZT0zNzc7ZS5aY2Fyb249MzgxO2UuWmNhcm9uc21hbGw9NjMyMzE7ZS5aY2lyY2xlPTk0MjM7ZS5aY2lyY3VtZmxleD03ODI0O2UuWmRvdD0zNzk7ZS5aZG90YWNjZW50PTM3OTtlLlpkb3RiZWxvdz03ODI2O2UuWmVjeXJpbGxpYz0xMDQ3O2UuWmVkZXNjZW5kZXJjeXJpbGxpYz0xMTc2O2UuWmVkaWVyZXNpc2N5cmlsbGljPTEyNDY7ZS5aZXRhPTkxODtlLlpoZWFybWVuaWFuPTEzMzg7ZS5aaGVicmV2ZWN5cmlsbGljPTEyMTc7ZS5aaGVjeXJpbGxpYz0xMDQ2O2UuWmhlZGVzY2VuZGVyY3lyaWxsaWM9MTE3NDtlLlpoZWRpZXJlc2lzY3lyaWxsaWM9MTI0NDtlLlpsaW5lYmVsb3c9NzgyODtlLlptb25vc3BhY2U9NjUzMzg7ZS5ac21hbGw9NjMzNTQ7ZS5ac3Ryb2tlPTQzNztlLmE9OTc7ZS5hYWJlbmdhbGk9MjQzODtlLmFhY3V0ZT0yMjU7ZS5hYWRldmE9MjMxMDtlLmFhZ3VqYXJhdGk9MjY5NDtlLmFhZ3VybXVraGk9MjU2NjtlLmFhbWF0cmFndXJtdWtoaT0yNjIyO2UuYWFydXNxdWFyZT0xMzA1OTtlLmFhdm93ZWxzaWduYmVuZ2FsaT0yNDk0O2UuYWF2b3dlbHNpZ25kZXZhPTIzNjY7ZS5hYXZvd2Vsc2lnbmd1amFyYXRpPTI3NTA7ZS5hYmJyZXZpYXRpb25tYXJrYXJtZW5pYW49MTM3NTtlLmFiYnJldmlhdGlvbnNpZ25kZXZhPTI0MTY7ZS5hYmVuZ2FsaT0yNDM3O2UuYWJvcG9tb2ZvPTEyNTcwO2UuYWJyZXZlPTI1OTtlLmFicmV2ZWFjdXRlPTc4NTU7ZS5hYnJldmVjeXJpbGxpYz0xMjMzO2UuYWJyZXZlZG90YmVsb3c9Nzg2MztlLmFicmV2ZWdyYXZlPTc4NTc7ZS5hYnJldmVob29rYWJvdmU9Nzg1OTtlLmFicmV2ZXRpbGRlPTc4NjE7ZS5hY2Fyb249NDYyO2UuYWNpcmNsZT05NDI0O2UuYWNpcmN1bWZsZXg9MjI2O2UuYWNpcmN1bWZsZXhhY3V0ZT03ODQ1O2UuYWNpcmN1bWZsZXhkb3RiZWxvdz03ODUzO2UuYWNpcmN1bWZsZXhncmF2ZT03ODQ3O2UuYWNpcmN1bWZsZXhob29rYWJvdmU9Nzg0OTtlLmFjaXJjdW1mbGV4dGlsZGU9Nzg1MTtlLmFjdXRlPTE4MDtlLmFjdXRlYmVsb3djbWI9NzkxO2UuYWN1dGVjbWI9NzY5O2UuYWN1dGVjb21iPTc2OTtlLmFjdXRlZGV2YT0yMzg4O2UuYWN1dGVsb3dtb2Q9NzE5O2UuYWN1dGV0b25lY21iPTgzMztlLmFjeXJpbGxpYz0xMDcyO2UuYWRibGdyYXZlPTUxMztlLmFkZGFrZ3VybXVraGk9MjY3MztlLmFkZXZhPTIzMDk7ZS5hZGllcmVzaXM9MjI4O2UuYWRpZXJlc2lzY3lyaWxsaWM9MTIzNTtlLmFkaWVyZXNpc21hY3Jvbj00Nzk7ZS5hZG90YmVsb3c9Nzg0MTtlLmFkb3RtYWNyb249NDgxO2UuYWU9MjMwO2UuYWVhY3V0ZT01MDk7ZS5hZWtvcmVhbj0xMjYyNDtlLmFlbWFjcm9uPTQ4MztlLmFmaWkwMDIwOD04MjEzO2UuYWZpaTA4OTQxPTgzNTY7ZS5hZmlpMTAwMTc9MTA0MDtlLmFmaWkxMDAxOD0xMDQxO2UuYWZpaTEwMDE5PTEwNDI7ZS5hZmlpMTAwMjA9MTA0MztlLmFmaWkxMDAyMT0xMDQ0O2UuYWZpaTEwMDIyPTEwNDU7ZS5hZmlpMTAwMjM9MTAyNTtlLmFmaWkxMDAyND0xMDQ2O2UuYWZpaTEwMDI1PTEwNDc7ZS5hZmlpMTAwMjY9MTA0ODtlLmFmaWkxMDAyNz0xMDQ5O2UuYWZpaTEwMDI4PTEwNTA7ZS5hZmlpMTAwMjk9MTA1MTtlLmFmaWkxMDAzMD0xMDUyO2UuYWZpaTEwMDMxPTEwNTM7ZS5hZmlpMTAwMzI9MTA1NDtlLmFmaWkxMDAzMz0xMDU1O2UuYWZpaTEwMDM0PTEwNTY7ZS5hZmlpMTAwMzU9MTA1NztlLmFmaWkxMDAzNj0xMDU4O2UuYWZpaTEwMDM3PTEwNTk7ZS5hZmlpMTAwMzg9MTA2MDtlLmFmaWkxMDAzOT0xMDYxO2UuYWZpaTEwMDQwPTEwNjI7ZS5hZmlpMTAwNDE9MTA2MztlLmFmaWkxMDA0Mj0xMDY0O2UuYWZpaTEwMDQzPTEwNjU7ZS5hZmlpMTAwNDQ9MTA2NjtlLmFmaWkxMDA0NT0xMDY3O2UuYWZpaTEwMDQ2PTEwNjg7ZS5hZmlpMTAwNDc9MTA2OTtlLmFmaWkxMDA0OD0xMDcwO2UuYWZpaTEwMDQ5PTEwNzE7ZS5hZmlpMTAwNTA9MTE2ODtlLmFmaWkxMDA1MT0xMDI2O2UuYWZpaTEwMDUyPTEwMjc7ZS5hZmlpMTAwNTM9MTAyODtlLmFmaWkxMDA1ND0xMDI5O2UuYWZpaTEwMDU1PTEwMzA7ZS5hZmlpMTAwNTY9MTAzMTtlLmFmaWkxMDA1Nz0xMDMyO2UuYWZpaTEwMDU4PTEwMzM7ZS5hZmlpMTAwNTk9MTAzNDtlLmFmaWkxMDA2MD0xMDM1O2UuYWZpaTEwMDYxPTEwMzY7ZS5hZmlpMTAwNjI9MTAzODtlLmFmaWkxMDA2Mz02MzE3MjtlLmFmaWkxMDA2ND02MzE3MztlLmFmaWkxMDA2NT0xMDcyO2UuYWZpaTEwMDY2PTEwNzM7ZS5hZmlpMTAwNjc9MTA3NDtlLmFmaWkxMDA2OD0xMDc1O2UuYWZpaTEwMDY5PTEwNzY7ZS5hZmlpMTAwNzA9MTA3NztlLmFmaWkxMDA3MT0xMTA1O2UuYWZpaTEwMDcyPTEwNzg7ZS5hZmlpMTAwNzM9MTA3OTtlLmFmaWkxMDA3ND0xMDgwO2UuYWZpaTEwMDc1PTEwODE7ZS5hZmlpMTAwNzY9MTA4MjtlLmFmaWkxMDA3Nz0xMDgzO2UuYWZpaTEwMDc4PTEwODQ7ZS5hZmlpMTAwNzk9MTA4NTtlLmFmaWkxMDA4MD0xMDg2O2UuYWZpaTEwMDgxPTEwODc7ZS5hZmlpMTAwODI9MTA4ODtlLmFmaWkxMDA4Mz0xMDg5O2UuYWZpaTEwMDg0PTEwOTA7ZS5hZmlpMTAwODU9MTA5MTtlLmFmaWkxMDA4Nj0xMDkyO2UuYWZpaTEwMDg3PTEwOTM7ZS5hZmlpMTAwODg9MTA5NDtlLmFmaWkxMDA4OT0xMDk1O2UuYWZpaTEwMDkwPTEwOTY7ZS5hZmlpMTAwOTE9MTA5NztlLmFmaWkxMDA5Mj0xMDk4O2UuYWZpaTEwMDkzPTEwOTk7ZS5hZmlpMTAwOTQ9MTEwMDtlLmFmaWkxMDA5NT0xMTAxO2UuYWZpaTEwMDk2PTExMDI7ZS5hZmlpMTAwOTc9MTEwMztlLmFmaWkxMDA5OD0xMTY5O2UuYWZpaTEwMDk5PTExMDY7ZS5hZmlpMTAxMDA9MTEwNztlLmFmaWkxMDEwMT0xMTA4O2UuYWZpaTEwMTAyPTExMDk7ZS5hZmlpMTAxMDM9MTExMDtlLmFmaWkxMDEwND0xMTExO2UuYWZpaTEwMTA1PTExMTI7ZS5hZmlpMTAxMDY9MTExMztlLmFmaWkxMDEwNz0xMTE0O2UuYWZpaTEwMTA4PTExMTU7ZS5hZmlpMTAxMDk9MTExNjtlLmFmaWkxMDExMD0xMTE4O2UuYWZpaTEwMTQ1PTEwMzk7ZS5hZmlpMTAxNDY9MTEyMjtlLmFmaWkxMDE0Nz0xMTM4O2UuYWZpaTEwMTQ4PTExNDA7ZS5hZmlpMTAxOTI9NjMxNzQ7ZS5hZmlpMTAxOTM9MTExOTtlLmFmaWkxMDE5ND0xMTIzO2UuYWZpaTEwMTk1PTExMzk7ZS5hZmlpMTAxOTY9MTE0MTtlLmFmaWkxMDgzMT02MzE3NTtlLmFmaWkxMDgzMj02MzE3NjtlLmFmaWkxMDg0Nj0xMjQxO2UuYWZpaTI5OT04MjA2O2UuYWZpaTMwMD04MjA3O2UuYWZpaTMwMT04MjA1O2UuYWZpaTU3MzgxPTE2NDI7ZS5hZmlpNTczODg9MTU0ODtlLmFmaWk1NzM5Mj0xNjMyO2UuYWZpaTU3MzkzPTE2MzM7ZS5hZmlpNTczOTQ9MTYzNDtlLmFmaWk1NzM5NT0xNjM1O2UuYWZpaTU3Mzk2PTE2MzY7ZS5hZmlpNTczOTc9MTYzNztlLmFmaWk1NzM5OD0xNjM4O2UuYWZpaTU3Mzk5PTE2Mzk7ZS5hZmlpNTc0MDA9MTY0MDtlLmFmaWk1NzQwMT0xNjQxO2UuYWZpaTU3NDAzPTE1NjM7ZS5hZmlpNTc0MDc9MTU2NztlLmFmaWk1NzQwOT0xNTY5O2UuYWZpaTU3NDEwPTE1NzA7ZS5hZmlpNTc0MTE9MTU3MTtlLmFmaWk1NzQxMj0xNTcyO2UuYWZpaTU3NDEzPTE1NzM7ZS5hZmlpNTc0MTQ9MTU3NDtlLmFmaWk1NzQxNT0xNTc1O2UuYWZpaTU3NDE2PTE1NzY7ZS5hZmlpNTc0MTc9MTU3NztlLmFmaWk1NzQxOD0xNTc4O2UuYWZpaTU3NDE5PTE1Nzk7ZS5hZmlpNTc0MjA9MTU4MDtlLmFmaWk1NzQyMT0xNTgxO2UuYWZpaTU3NDIyPTE1ODI7ZS5hZmlpNTc0MjM9MTU4MztlLmFmaWk1NzQyND0xNTg0O2UuYWZpaTU3NDI1PTE1ODU7ZS5hZmlpNTc0MjY9MTU4NjtlLmFmaWk1NzQyNz0xNTg3O2UuYWZpaTU3NDI4PTE1ODg7ZS5hZmlpNTc0Mjk9MTU4OTtlLmFmaWk1NzQzMD0xNTkwO2UuYWZpaTU3NDMxPTE1OTE7ZS5hZmlpNTc0MzI9MTU5MjtlLmFmaWk1NzQzMz0xNTkzO2UuYWZpaTU3NDM0PTE1OTQ7ZS5hZmlpNTc0NDA9MTYwMDtlLmFmaWk1NzQ0MT0xNjAxO2UuYWZpaTU3NDQyPTE2MDI7ZS5hZmlpNTc0NDM9MTYwMztlLmFmaWk1NzQ0ND0xNjA0O2UuYWZpaTU3NDQ1PTE2MDU7ZS5hZmlpNTc0NDY9MTYwNjtlLmFmaWk1NzQ0OD0xNjA4O2UuYWZpaTU3NDQ5PTE2MDk7ZS5hZmlpNTc0NTA9MTYxMDtlLmFmaWk1NzQ1MT0xNjExO2UuYWZpaTU3NDUyPTE2MTI7ZS5hZmlpNTc0NTM9MTYxMztlLmFmaWk1NzQ1ND0xNjE0O2UuYWZpaTU3NDU1PTE2MTU7ZS5hZmlpNTc0NTY9MTYxNjtlLmFmaWk1NzQ1Nz0xNjE3O2UuYWZpaTU3NDU4PTE2MTg7ZS5hZmlpNTc0NzA9MTYwNztlLmFmaWk1NzUwNT0xNzAwO2UuYWZpaTU3NTA2PTE2NjI7ZS5hZmlpNTc1MDc9MTY3MDtlLmFmaWk1NzUwOD0xNjg4O2UuYWZpaTU3NTA5PTE3MTE7ZS5hZmlpNTc1MTE9MTY1NztlLmFmaWk1NzUxMj0xNjcyO2UuYWZpaTU3NTEzPTE2ODE7ZS5hZmlpNTc1MTQ9MTcyMjtlLmFmaWk1NzUxOT0xNzQ2O2UuYWZpaTU3NTM0PTE3NDk7ZS5hZmlpNTc2MzY9ODM2MjtlLmFmaWk1NzY0NT0xNDcwO2UuYWZpaTU3NjU4PTE0NzU7ZS5hZmlpNTc2NjQ9MTQ4ODtlLmFmaWk1NzY2NT0xNDg5O2UuYWZpaTU3NjY2PTE0OTA7ZS5hZmlpNTc2Njc9MTQ5MTtlLmFmaWk1NzY2OD0xNDkyO2UuYWZpaTU3NjY5PTE0OTM7ZS5hZmlpNTc2NzA9MTQ5NDtlLmFmaWk1NzY3MT0xNDk1O2UuYWZpaTU3NjcyPTE0OTY7ZS5hZmlpNTc2NzM9MTQ5NztlLmFmaWk1NzY3ND0xNDk4O2UuYWZpaTU3Njc1PTE0OTk7ZS5hZmlpNTc2NzY9MTUwMDtlLmFmaWk1NzY3Nz0xNTAxO2UuYWZpaTU3Njc4PTE1MDI7ZS5hZmlpNTc2Nzk9MTUwMztlLmFmaWk1NzY4MD0xNTA0O2UuYWZpaTU3NjgxPTE1MDU7ZS5hZmlpNTc2ODI9MTUwNjtlLmFmaWk1NzY4Mz0xNTA3O2UuYWZpaTU3Njg0PTE1MDg7ZS5hZmlpNTc2ODU9MTUwOTtlLmFmaWk1NzY4Nj0xNTEwO2UuYWZpaTU3Njg3PTE1MTE7ZS5hZmlpNTc2ODg9MTUxMjtlLmFmaWk1NzY4OT0xNTEzO2UuYWZpaTU3NjkwPTE1MTQ7ZS5hZmlpNTc2OTQ9NjQyOTg7ZS5hZmlpNTc2OTU9NjQyOTk7ZS5hZmlpNTc3MDA9NjQzMzE7ZS5hZmlpNTc3MDU9NjQyODc7ZS5hZmlpNTc3MTY9MTUyMDtlLmFmaWk1NzcxNz0xNTIxO2UuYWZpaTU3NzE4PTE1MjI7ZS5hZmlpNTc3MjM9NjQzMDk7ZS5hZmlpNTc3OTM9MTQ2MDtlLmFmaWk1Nzc5ND0xNDYxO2UuYWZpaTU3Nzk1PTE0NjI7ZS5hZmlpNTc3OTY9MTQ2NztlLmFmaWk1Nzc5Nz0xNDY0O2UuYWZpaTU3Nzk4PTE0NjM7ZS5hZmlpNTc3OTk9MTQ1NjtlLmFmaWk1NzgwMD0xNDU4O2UuYWZpaTU3ODAxPTE0NTc7ZS5hZmlpNTc4MDI9MTQ1OTtlLmFmaWk1NzgwMz0xNDc0O2UuYWZpaTU3ODA0PTE0NzM7ZS5hZmlpNTc4MDY9MTQ2NTtlLmFmaWk1NzgwNz0xNDY4O2UuYWZpaTU3ODM5PTE0Njk7ZS5hZmlpNTc4NDE9MTQ3MTtlLmFmaWk1Nzg0Mj0xNDcyO2UuYWZpaTU3OTI5PTcwMDtlLmFmaWk2MTI0OD04NDUzO2UuYWZpaTYxMjg5PTg0Njc7ZS5hZmlpNjEzNTI9ODQ3MDtlLmFmaWk2MTU3Mz04MjM2O2UuYWZpaTYxNTc0PTgyMzc7ZS5hZmlpNjE1NzU9ODIzODtlLmFmaWk2MTY2ND04MjA0O2UuYWZpaTYzMTY3PTE2NDU7ZS5hZmlpNjQ5Mzc9NzAxO2UuYWdyYXZlPTIyNDtlLmFndWphcmF0aT0yNjkzO2UuYWd1cm11a2hpPTI1NjU7ZS5haGlyYWdhbmE9MTIzNTQ7ZS5haG9va2Fib3ZlPTc4NDM7ZS5haWJlbmdhbGk9MjQ0ODtlLmFpYm9wb21vZm89MTI1NzQ7ZS5haWRldmE9MjMyMDtlLmFpZWN5cmlsbGljPTEyMzc7ZS5haWd1amFyYXRpPTI3MDQ7ZS5haWd1cm11a2hpPTI1NzY7ZS5haW1hdHJhZ3VybXVraGk9MjYzMjtlLmFpbmFyYWJpYz0xNTkzO2UuYWluZmluYWxhcmFiaWM9NjUyMjY7ZS5haW5pbml0aWFsYXJhYmljPTY1MjI3O2UuYWlubWVkaWFsYXJhYmljPTY1MjI4O2UuYWludmVydGVkYnJldmU9NTE1O2UuYWl2b3dlbHNpZ25iZW5nYWxpPTI1MDQ7ZS5haXZvd2Vsc2lnbmRldmE9MjM3NjtlLmFpdm93ZWxzaWduZ3VqYXJhdGk9Mjc2MDtlLmFrYXRha2FuYT0xMjQ1MDtlLmFrYXRha2FuYWhhbGZ3aWR0aD02NTM5MztlLmFrb3JlYW49MTI2MjM7ZS5hbGVmPTE0ODg7ZS5hbGVmYXJhYmljPTE1NzU7ZS5hbGVmZGFnZXNoaGVicmV3PTY0MzA0O2UuYWxlZmZpbmFsYXJhYmljPTY1MTY2O2UuYWxlZmhhbXphYWJvdmVhcmFiaWM9MTU3MTtlLmFsZWZoYW16YWFib3ZlZmluYWxhcmFiaWM9NjUxNTY7ZS5hbGVmaGFtemFiZWxvd2FyYWJpYz0xNTczO2UuYWxlZmhhbXphYmVsb3dmaW5hbGFyYWJpYz02NTE2MDtlLmFsZWZoZWJyZXc9MTQ4ODtlLmFsZWZsYW1lZGhlYnJldz02NDMzNTtlLmFsZWZtYWRkYWFib3ZlYXJhYmljPTE1NzA7ZS5hbGVmbWFkZGFhYm92ZWZpbmFsYXJhYmljPTY1MTU0O2UuYWxlZm1ha3N1cmFhcmFiaWM9MTYwOTtlLmFsZWZtYWtzdXJhZmluYWxhcmFiaWM9NjUyNjQ7ZS5hbGVmbWFrc3VyYWluaXRpYWxhcmFiaWM9NjUyNjc7ZS5hbGVmbWFrc3VyYW1lZGlhbGFyYWJpYz02NTI2ODtlLmFsZWZwYXRhaGhlYnJldz02NDMwMjtlLmFsZWZxYW1hdHNoZWJyZXc9NjQzMDM7ZS5hbGVwaD04NTAxO2UuYWxsZXF1YWw9ODc4MDtlLmFscGhhPTk0NTtlLmFscGhhdG9ub3M9OTQwO2UuYW1hY3Jvbj0yNTc7ZS5hbW9ub3NwYWNlPTY1MzQ1O2UuYW1wZXJzYW5kPTM4O2UuYW1wZXJzYW5kbW9ub3NwYWNlPTY1Mjg2O2UuYW1wZXJzYW5kc21hbGw9NjMyNzA7ZS5hbXNxdWFyZT0xMzI1MDtlLmFuYm9wb21vZm89MTI1Nzg7ZS5hbmdib3BvbW9mbz0xMjU4MDtlLmFuZ2JyYWNrZXRsZWZ0PTEyMjk2O2UuYW5nYnJhY2tldHJpZ2h0PTEyMjk3O2UuYW5na2hhbmtodXRoYWk9MzY3NDtlLmFuZ2xlPTg3MzY7ZS5hbmdsZWJyYWNrZXRsZWZ0PTEyMjk2O2UuYW5nbGVicmFja2V0bGVmdHZlcnRpY2FsPTY1MDg3O2UuYW5nbGVicmFja2V0cmlnaHQ9MTIyOTc7ZS5hbmdsZWJyYWNrZXRyaWdodHZlcnRpY2FsPTY1MDg4O2UuYW5nbGVsZWZ0PTkwMDE7ZS5hbmdsZXJpZ2h0PTkwMDI7ZS5hbmdzdHJvbT04NDkxO2UuYW5vdGVsZWlhPTkwMztlLmFudWRhdHRhZGV2YT0yMzg2O2UuYW51c3ZhcmFiZW5nYWxpPTI0MzQ7ZS5hbnVzdmFyYWRldmE9MjMwNjtlLmFudXN2YXJhZ3VqYXJhdGk9MjY5MDtlLmFvZ29uZWs9MjYxO2UuYXBhYXRvc3F1YXJlPTEzMDU2O2UuYXBhcmVuPTkzNzI7ZS5hcG9zdHJvcGhlYXJtZW5pYW49MTM3MDtlLmFwb3N0cm9waGVtb2Q9NzAwO2UuYXBwbGU9NjM3NDM7ZS5hcHByb2FjaGVzPTg3ODQ7ZS5hcHByb3hlcXVhbD04Nzc2O2UuYXBwcm94ZXF1YWxvcmltYWdlPTg3ODY7ZS5hcHByb3hpbWF0ZWx5ZXF1YWw9ODc3MztlLmFyYWVhZWtvcmVhbj0xMjY4NjtlLmFyYWVha29yZWFuPTEyNjg1O2UuYXJjPTg5Nzg7ZS5hcmlnaHRoYWxmcmluZz03ODM0O2UuYXJpbmc9MjI5O2UuYXJpbmdhY3V0ZT01MDc7ZS5hcmluZ2JlbG93PTc2ODE7ZS5hcnJvd2JvdGg9ODU5NjtlLmFycm93ZGFzaGRvd249ODY3NTtlLmFycm93ZGFzaGxlZnQ9ODY3MjtlLmFycm93ZGFzaHJpZ2h0PTg2NzQ7ZS5hcnJvd2Rhc2h1cD04NjczO2UuYXJyb3dkYmxib3RoPTg2NjA7ZS5hcnJvd2RibGRvd249ODY1OTtlLmFycm93ZGJsbGVmdD04NjU2O2UuYXJyb3dkYmxyaWdodD04NjU4O2UuYXJyb3dkYmx1cD04NjU3O2UuYXJyb3dkb3duPTg1OTU7ZS5hcnJvd2Rvd25sZWZ0PTg2MDE7ZS5hcnJvd2Rvd25yaWdodD04NjAwO2UuYXJyb3dkb3dud2hpdGU9ODY4MTtlLmFycm93aGVhZGRvd25tb2Q9NzA5O2UuYXJyb3doZWFkbGVmdG1vZD03MDY7ZS5hcnJvd2hlYWRyaWdodG1vZD03MDc7ZS5hcnJvd2hlYWR1cG1vZD03MDg7ZS5hcnJvd2hvcml6ZXg9NjM3MTk7ZS5hcnJvd2xlZnQ9ODU5MjtlLmFycm93bGVmdGRibD04NjU2O2UuYXJyb3dsZWZ0ZGJsc3Ryb2tlPTg2NTM7ZS5hcnJvd2xlZnRvdmVycmlnaHQ9ODY0NjtlLmFycm93bGVmdHdoaXRlPTg2Nzg7ZS5hcnJvd3JpZ2h0PTg1OTQ7ZS5hcnJvd3JpZ2h0ZGJsc3Ryb2tlPTg2NTU7ZS5hcnJvd3JpZ2h0aGVhdnk9MTAxNDI7ZS5hcnJvd3JpZ2h0b3ZlcmxlZnQ9ODY0NDtlLmFycm93cmlnaHR3aGl0ZT04NjgwO2UuYXJyb3d0YWJsZWZ0PTg2NzY7ZS5hcnJvd3RhYnJpZ2h0PTg2Nzc7ZS5hcnJvd3VwPTg1OTM7ZS5hcnJvd3VwZG49ODU5NztlLmFycm93dXBkbmJzZT04NjE2O2UuYXJyb3d1cGRvd25iYXNlPTg2MTY7ZS5hcnJvd3VwbGVmdD04NTk4O2UuYXJyb3d1cGxlZnRvZmRvd249ODY0NTtlLmFycm93dXByaWdodD04NTk5O2UuYXJyb3d1cHdoaXRlPTg2Nzk7ZS5hcnJvd3ZlcnRleD02MzcxODtlLmFzY2lpY2lyY3VtPTk0O2UuYXNjaWljaXJjdW1tb25vc3BhY2U9NjUzNDI7ZS5hc2NpaXRpbGRlPTEyNjtlLmFzY2lpdGlsZGVtb25vc3BhY2U9NjUzNzQ7ZS5hc2NyaXB0PTU5MztlLmFzY3JpcHR0dXJuZWQ9NTk0O2UuYXNtYWxsaGlyYWdhbmE9MTIzNTM7ZS5hc21hbGxrYXRha2FuYT0xMjQ0OTtlLmFzbWFsbGthdGFrYW5haGFsZndpZHRoPTY1MzgzO2UuYXN0ZXJpc2s9NDI7ZS5hc3Rlcmlza2FsdG9uZWFyYWJpYz0xNjQ1O2UuYXN0ZXJpc2thcmFiaWM9MTY0NTtlLmFzdGVyaXNrbWF0aD04NzI3O2UuYXN0ZXJpc2ttb25vc3BhY2U9NjUyOTA7ZS5hc3Rlcmlza3NtYWxsPTY1MTIxO2UuYXN0ZXJpc209ODI1ODtlLmFzdXBlcmlvcj02MzIwOTtlLmFzeW1wdG90aWNhbGx5ZXF1YWw9ODc3MTtlLmF0PTY0O2UuYXRpbGRlPTIyNztlLmF0bW9ub3NwYWNlPTY1MzEyO2UuYXRzbWFsbD02NTEzMTtlLmF0dXJuZWQ9NTkyO2UuYXViZW5nYWxpPTI0NTI7ZS5hdWJvcG9tb2ZvPTEyNTc2O2UuYXVkZXZhPTIzMjQ7ZS5hdWd1amFyYXRpPTI3MDg7ZS5hdWd1cm11a2hpPTI1ODA7ZS5hdWxlbmd0aG1hcmtiZW5nYWxpPTI1MTk7ZS5hdW1hdHJhZ3VybXVraGk9MjYzNjtlLmF1dm93ZWxzaWduYmVuZ2FsaT0yNTA4O2UuYXV2b3dlbHNpZ25kZXZhPTIzODA7ZS5hdXZvd2Vsc2lnbmd1amFyYXRpPTI3NjQ7ZS5hdmFncmFoYWRldmE9MjM2NTtlLmF5YmFybWVuaWFuPTEzNzc7ZS5heWluPTE1MDY7ZS5heWluYWx0b25laGVicmV3PTY0Mjg4O2UuYXlpbmhlYnJldz0xNTA2O2UuYj05ODtlLmJhYmVuZ2FsaT0yNDc2O2UuYmFja3NsYXNoPTkyO2UuYmFja3NsYXNobW9ub3NwYWNlPTY1MzQwO2UuYmFkZXZhPTIzNDg7ZS5iYWd1amFyYXRpPTI3MzI7ZS5iYWd1cm11a2hpPTI2MDQ7ZS5iYWhpcmFnYW5hPTEyNDAwO2UuYmFodHRoYWk9MzY0NztlLmJha2F0YWthbmE9MTI0OTY7ZS5iYXI9MTI0O2UuYmFybW9ub3NwYWNlPTY1MzcyO2UuYmJvcG9tb2ZvPTEyNTQ5O2UuYmNpcmNsZT05NDI1O2UuYmRvdGFjY2VudD03NjgzO2UuYmRvdGJlbG93PTc2ODU7ZS5iZWFtZWRzaXh0ZWVudGhub3Rlcz05ODM2O2UuYmVjYXVzZT04NzU3O2UuYmVjeXJpbGxpYz0xMDczO2UuYmVoYXJhYmljPTE1NzY7ZS5iZWhmaW5hbGFyYWJpYz02NTE2ODtlLmJlaGluaXRpYWxhcmFiaWM9NjUxNjk7ZS5iZWhpcmFnYW5hPTEyNDA5O2UuYmVobWVkaWFsYXJhYmljPTY1MTcwO2UuYmVobWVlbWluaXRpYWxhcmFiaWM9NjQ2NzE7ZS5iZWhtZWVtaXNvbGF0ZWRhcmFiaWM9NjQ1MjA7ZS5iZWhub29uZmluYWxhcmFiaWM9NjQ2MjE7ZS5iZWthdGFrYW5hPTEyNTA1O2UuYmVuYXJtZW5pYW49MTM3ODtlLmJldD0xNDg5O2UuYmV0YT05NDY7ZS5iZXRhc3ltYm9sZ3JlZWs9OTc2O2UuYmV0ZGFnZXNoPTY0MzA1O2UuYmV0ZGFnZXNoaGVicmV3PTY0MzA1O2UuYmV0aGVicmV3PTE0ODk7ZS5iZXRyYWZlaGVicmV3PTY0MzMyO2UuYmhhYmVuZ2FsaT0yNDc3O2UuYmhhZGV2YT0yMzQ5O2UuYmhhZ3VqYXJhdGk9MjczMztlLmJoYWd1cm11a2hpPTI2MDU7ZS5iaG9vaz01OTU7ZS5iaWhpcmFnYW5hPTEyNDAzO2UuYmlrYXRha2FuYT0xMjQ5OTtlLmJpbGFiaWFsY2xpY2s9NjY0O2UuYmluZGlndXJtdWtoaT0yNTYyO2UuYmlydXNxdWFyZT0xMzEwNTtlLmJsYWNrY2lyY2xlPTk2Nzk7ZS5ibGFja2RpYW1vbmQ9OTY3MDtlLmJsYWNrZG93bnBvaW50aW5ndHJpYW5nbGU9OTY2MDtlLmJsYWNrbGVmdHBvaW50aW5ncG9pbnRlcj05NjY4O2UuYmxhY2tsZWZ0cG9pbnRpbmd0cmlhbmdsZT05NjY0O2UuYmxhY2tsZW50aWN1bGFyYnJhY2tldGxlZnQ9MTIzMDQ7ZS5ibGFja2xlbnRpY3VsYXJicmFja2V0bGVmdHZlcnRpY2FsPTY1MDgzO2UuYmxhY2tsZW50aWN1bGFyYnJhY2tldHJpZ2h0PTEyMzA1O2UuYmxhY2tsZW50aWN1bGFyYnJhY2tldHJpZ2h0dmVydGljYWw9NjUwODQ7ZS5ibGFja2xvd2VybGVmdHRyaWFuZ2xlPTk2OTk7ZS5ibGFja2xvd2VycmlnaHR0cmlhbmdsZT05Njk4O2UuYmxhY2tyZWN0YW5nbGU9OTY0NDtlLmJsYWNrcmlnaHRwb2ludGluZ3BvaW50ZXI9OTY1ODtlLmJsYWNrcmlnaHRwb2ludGluZ3RyaWFuZ2xlPTk2NTQ7ZS5ibGFja3NtYWxsc3F1YXJlPTk2NDI7ZS5ibGFja3NtaWxpbmdmYWNlPTk3ODc7ZS5ibGFja3NxdWFyZT05NjMyO2UuYmxhY2tzdGFyPTk3MzM7ZS5ibGFja3VwcGVybGVmdHRyaWFuZ2xlPTk3MDA7ZS5ibGFja3VwcGVycmlnaHR0cmlhbmdsZT05NzAxO2UuYmxhY2t1cHBvaW50aW5nc21hbGx0cmlhbmdsZT05NjUyO2UuYmxhY2t1cHBvaW50aW5ndHJpYW5nbGU9OTY1MDtlLmJsYW5rPTkyNTE7ZS5ibGluZWJlbG93PTc2ODc7ZS5ibG9jaz05NjA4O2UuYm1vbm9zcGFjZT02NTM0NjtlLmJvYmFpbWFpdGhhaT0zNjEwO2UuYm9oaXJhZ2FuYT0xMjQxMjtlLmJva2F0YWthbmE9MTI1MDg7ZS5icGFyZW49OTM3MztlLmJxc3F1YXJlPTEzMjUxO2UuYnJhY2VleD02MzczMjtlLmJyYWNlbGVmdD0xMjM7ZS5icmFjZWxlZnRidD02MzczMTtlLmJyYWNlbGVmdG1pZD02MzczMDtlLmJyYWNlbGVmdG1vbm9zcGFjZT02NTM3MTtlLmJyYWNlbGVmdHNtYWxsPTY1MTE1O2UuYnJhY2VsZWZ0dHA9NjM3Mjk7ZS5icmFjZWxlZnR2ZXJ0aWNhbD02NTA3OTtlLmJyYWNlcmlnaHQ9MTI1O2UuYnJhY2VyaWdodGJ0PTYzNzQyO2UuYnJhY2VyaWdodG1pZD02Mzc0MTtlLmJyYWNlcmlnaHRtb25vc3BhY2U9NjUzNzM7ZS5icmFjZXJpZ2h0c21hbGw9NjUxMTY7ZS5icmFjZXJpZ2h0dHA9NjM3NDA7ZS5icmFjZXJpZ2h0dmVydGljYWw9NjUwODA7ZS5icmFja2V0bGVmdD05MTtlLmJyYWNrZXRsZWZ0YnQ9NjM3Mjg7ZS5icmFja2V0bGVmdGV4PTYzNzI3O2UuYnJhY2tldGxlZnRtb25vc3BhY2U9NjUzMzk7ZS5icmFja2V0bGVmdHRwPTYzNzI2O2UuYnJhY2tldHJpZ2h0PTkzO2UuYnJhY2tldHJpZ2h0YnQ9NjM3Mzk7ZS5icmFja2V0cmlnaHRleD02MzczODtlLmJyYWNrZXRyaWdodG1vbm9zcGFjZT02NTM0MTtlLmJyYWNrZXRyaWdodHRwPTYzNzM3O2UuYnJldmU9NzI4O2UuYnJldmViZWxvd2NtYj04MTQ7ZS5icmV2ZWNtYj03NzQ7ZS5icmV2ZWludmVydGVkYmVsb3djbWI9ODE1O2UuYnJldmVpbnZlcnRlZGNtYj03ODU7ZS5icmV2ZWludmVydGVkZG91YmxlY21iPTg2NTtlLmJyaWRnZWJlbG93Y21iPTgxMDtlLmJyaWRnZWludmVydGVkYmVsb3djbWI9ODI2O2UuYnJva2VuYmFyPTE2NjtlLmJzdHJva2U9Mzg0O2UuYnN1cGVyaW9yPTYzMjEwO2UuYnRvcGJhcj0zODc7ZS5idWhpcmFnYW5hPTEyNDA2O2UuYnVrYXRha2FuYT0xMjUwMjtlLmJ1bGxldD04MjI2O2UuYnVsbGV0aW52ZXJzZT05Njg4O2UuYnVsbGV0b3BlcmF0b3I9ODcyOTtlLmJ1bGxzZXllPTk2Nzg7ZS5jPTk5O2UuY2Fhcm1lbmlhbj0xMzkwO2UuY2FiZW5nYWxpPTI0NTg7ZS5jYWN1dGU9MjYzO2UuY2FkZXZhPTIzMzA7ZS5jYWd1amFyYXRpPTI3MTQ7ZS5jYWd1cm11a2hpPTI1ODY7ZS5jYWxzcXVhcmU9MTMxOTI7ZS5jYW5kcmFiaW5kdWJlbmdhbGk9MjQzMztlLmNhbmRyYWJpbmR1Y21iPTc4NDtlLmNhbmRyYWJpbmR1ZGV2YT0yMzA1O2UuY2FuZHJhYmluZHVndWphcmF0aT0yNjg5O2UuY2Fwc2xvY2s9ODY4MjtlLmNhcmVvZj04NDUzO2UuY2Fyb249NzExO2UuY2Fyb25iZWxvd2NtYj04MTI7ZS5jYXJvbmNtYj03ODA7ZS5jYXJyaWFnZXJldHVybj04NjI5O2UuY2JvcG9tb2ZvPTEyNTY4O2UuY2Nhcm9uPTI2OTtlLmNjZWRpbGxhPTIzMTtlLmNjZWRpbGxhYWN1dGU9NzY4OTtlLmNjaXJjbGU9OTQyNjtlLmNjaXJjdW1mbGV4PTI2NTtlLmNjdXJsPTU5NztlLmNkb3Q9MjY3O2UuY2RvdGFjY2VudD0yNjc7ZS5jZHNxdWFyZT0xMzI1MztlLmNlZGlsbGE9MTg0O2UuY2VkaWxsYWNtYj04MDc7ZS5jZW50PTE2MjtlLmNlbnRpZ3JhZGU9ODQ1MTtlLmNlbnRpbmZlcmlvcj02MzE5OTtlLmNlbnRtb25vc3BhY2U9NjU1MDQ7ZS5jZW50b2xkc3R5bGU9NjMzOTQ7ZS5jZW50c3VwZXJpb3I9NjMyMDA7ZS5jaGFhcm1lbmlhbj0xNDAxO2UuY2hhYmVuZ2FsaT0yNDU5O2UuY2hhZGV2YT0yMzMxO2UuY2hhZ3VqYXJhdGk9MjcxNTtlLmNoYWd1cm11a2hpPTI1ODc7ZS5jaGJvcG9tb2ZvPTEyNTY0O2UuY2hlYWJraGFzaWFuY3lyaWxsaWM9MTIxMztlLmNoZWNrbWFyaz0xMDAwMztlLmNoZWN5cmlsbGljPTEwOTU7ZS5jaGVkZXNjZW5kZXJhYmtoYXNpYW5jeXJpbGxpYz0xMjE1O2UuY2hlZGVzY2VuZGVyY3lyaWxsaWM9MTIwNztlLmNoZWRpZXJlc2lzY3lyaWxsaWM9MTI2OTtlLmNoZWhhcm1lbmlhbj0xMzk1O2UuY2hla2hha2Fzc2lhbmN5cmlsbGljPTEyMjg7ZS5jaGV2ZXJ0aWNhbHN0cm9rZWN5cmlsbGljPTEyMDk7ZS5jaGk9OTY3O2UuY2hpZXVjaGFjaXJjbGVrb3JlYW49MTI5MTk7ZS5jaGlldWNoYXBhcmVua29yZWFuPTEyODIzO2UuY2hpZXVjaGNpcmNsZWtvcmVhbj0xMjkwNTtlLmNoaWV1Y2hrb3JlYW49MTI2MTg7ZS5jaGlldWNocGFyZW5rb3JlYW49MTI4MDk7ZS5jaG9jaGFuZ3RoYWk9MzU5NDtlLmNob2NoYW50aGFpPTM1OTI7ZS5jaG9jaGluZ3RoYWk9MzU5MztlLmNob2Nob2V0aGFpPTM1OTY7ZS5jaG9vaz0zOTI7ZS5jaWV1Y2FjaXJjbGVrb3JlYW49MTI5MTg7ZS5jaWV1Y2FwYXJlbmtvcmVhbj0xMjgyMjtlLmNpZXVjY2lyY2xla29yZWFuPTEyOTA0O2UuY2lldWNrb3JlYW49MTI2MTY7ZS5jaWV1Y3BhcmVua29yZWFuPTEyODA4O2UuY2lldWN1cGFyZW5rb3JlYW49MTI4Mjg7ZS5jaXJjbGU9OTY3NTtlLmNpcmNsZWNvcHlydD0xNjk7ZS5jaXJjbGVtdWx0aXBseT04ODU1O2UuY2lyY2xlb3Q9ODg1NztlLmNpcmNsZXBsdXM9ODg1MztlLmNpcmNsZXBvc3RhbG1hcms9MTIzNDI7ZS5jaXJjbGV3aXRobGVmdGhhbGZibGFjaz05NjgwO2UuY2lyY2xld2l0aHJpZ2h0aGFsZmJsYWNrPTk2ODE7ZS5jaXJjdW1mbGV4PTcxMDtlLmNpcmN1bWZsZXhiZWxvd2NtYj04MTM7ZS5jaXJjdW1mbGV4Y21iPTc3MDtlLmNsZWFyPTg5OTk7ZS5jbGlja2FsdmVvbGFyPTQ1MDtlLmNsaWNrZGVudGFsPTQ0ODtlLmNsaWNrbGF0ZXJhbD00NDk7ZS5jbGlja3JldHJvZmxleD00NTE7ZS5jbHViPTk4Mjc7ZS5jbHVic3VpdGJsYWNrPTk4Mjc7ZS5jbHVic3VpdHdoaXRlPTk4MzE7ZS5jbWN1YmVkc3F1YXJlPTEzMjIwO2UuY21vbm9zcGFjZT02NTM0NztlLmNtc3F1YXJlZHNxdWFyZT0xMzIxNjtlLmNvYXJtZW5pYW49MTQwOTtlLmNvbG9uPTU4O2UuY29sb25tb25ldGFyeT04MzUzO2UuY29sb25tb25vc3BhY2U9NjUzMDY7ZS5jb2xvbnNpZ249ODM1MztlLmNvbG9uc21hbGw9NjUxMDk7ZS5jb2xvbnRyaWFuZ3VsYXJoYWxmbW9kPTcyMTtlLmNvbG9udHJpYW5ndWxhcm1vZD03MjA7ZS5jb21tYT00NDtlLmNvbW1hYWJvdmVjbWI9Nzg3O2UuY29tbWFhYm92ZXJpZ2h0Y21iPTc4OTtlLmNvbW1hYWNjZW50PTYzMTcxO2UuY29tbWFhcmFiaWM9MTU0ODtlLmNvbW1hYXJtZW5pYW49MTM3MztlLmNvbW1haW5mZXJpb3I9NjMyMDE7ZS5jb21tYW1vbm9zcGFjZT02NTI5MjtlLmNvbW1hcmV2ZXJzZWRhYm92ZWNtYj03ODg7ZS5jb21tYXJldmVyc2VkbW9kPTcwMTtlLmNvbW1hc21hbGw9NjUxMDQ7ZS5jb21tYXN1cGVyaW9yPTYzMjAyO2UuY29tbWF0dXJuZWRhYm92ZWNtYj03ODY7ZS5jb21tYXR1cm5lZG1vZD02OTk7ZS5jb21wYXNzPTk3ODg7ZS5jb25ncnVlbnQ9ODc3MztlLmNvbnRvdXJpbnRlZ3JhbD04NzUwO2UuY29udHJvbD04OTYzO2UuY29udHJvbEFDSz02O2UuY29udHJvbEJFTD03O2UuY29udHJvbEJTPTg7ZS5jb250cm9sQ0FOPTI0O2UuY29udHJvbENSPTEzO2UuY29udHJvbERDMT0xNztlLmNvbnRyb2xEQzI9MTg7ZS5jb250cm9sREMzPTE5O2UuY29udHJvbERDND0yMDtlLmNvbnRyb2xERUw9MTI3O2UuY29udHJvbERMRT0xNjtlLmNvbnRyb2xFTT0yNTtlLmNvbnRyb2xFTlE9NTtlLmNvbnRyb2xFT1Q9NDtlLmNvbnRyb2xFU0M9Mjc7ZS5jb250cm9sRVRCPTIzO2UuY29udHJvbEVUWD0zO2UuY29udHJvbEZGPTEyO2UuY29udHJvbEZTPTI4O2UuY29udHJvbEdTPTI5O2UuY29udHJvbEhUPTk7ZS5jb250cm9sTEY9MTA7ZS5jb250cm9sTkFLPTIxO2UuY29udHJvbE5VTEw9MDtlLmNvbnRyb2xSUz0zMDtlLmNvbnRyb2xTST0xNTtlLmNvbnRyb2xTTz0xNDtlLmNvbnRyb2xTT1Q9MjtlLmNvbnRyb2xTVFg9MTtlLmNvbnRyb2xTVUI9MjY7ZS5jb250cm9sU1lOPTIyO2UuY29udHJvbFVTPTMxO2UuY29udHJvbFZUPTExO2UuY29weXJpZ2h0PTE2OTtlLmNvcHlyaWdodHNhbnM9NjM3MjE7ZS5jb3B5cmlnaHRzZXJpZj02MzE5MztlLmNvcm5lcmJyYWNrZXRsZWZ0PTEyMzAwO2UuY29ybmVyYnJhY2tldGxlZnRoYWxmd2lkdGg9NjUzNzg7ZS5jb3JuZXJicmFja2V0bGVmdHZlcnRpY2FsPTY1MDg5O2UuY29ybmVyYnJhY2tldHJpZ2h0PTEyMzAxO2UuY29ybmVyYnJhY2tldHJpZ2h0aGFsZndpZHRoPTY1Mzc5O2UuY29ybmVyYnJhY2tldHJpZ2h0dmVydGljYWw9NjUwOTA7ZS5jb3Jwb3JhdGlvbnNxdWFyZT0xMzE4MztlLmNvc3F1YXJlPTEzMjU1O2UuY292ZXJrZ3NxdWFyZT0xMzI1NDtlLmNwYXJlbj05Mzc0O2UuY3J1emVpcm89ODM1NDtlLmNzdHJldGNoZWQ9NjYzO2UuY3VybHlhbmQ9ODkxMTtlLmN1cmx5b3I9ODkxMDtlLmN1cnJlbmN5PTE2NDtlLmN5ckJyZXZlPTYzMTg1O2UuY3lyRmxleD02MzE4NjtlLmN5cmJyZXZlPTYzMTg4O2UuY3lyZmxleD02MzE4OTtlLmQ9MTAwO2UuZGFhcm1lbmlhbj0xMzgwO2UuZGFiZW5nYWxpPTI0NzA7ZS5kYWRhcmFiaWM9MTU5MDtlLmRhZGV2YT0yMzQyO2UuZGFkZmluYWxhcmFiaWM9NjUyMTQ7ZS5kYWRpbml0aWFsYXJhYmljPTY1MjE1O2UuZGFkbWVkaWFsYXJhYmljPTY1MjE2O2UuZGFnZXNoPTE0Njg7ZS5kYWdlc2hoZWJyZXc9MTQ2ODtlLmRhZ2dlcj04MjI0O2UuZGFnZ2VyZGJsPTgyMjU7ZS5kYWd1amFyYXRpPTI3MjY7ZS5kYWd1cm11a2hpPTI1OTg7ZS5kYWhpcmFnYW5hPTEyMzg0O2UuZGFrYXRha2FuYT0xMjQ4MDtlLmRhbGFyYWJpYz0xNTgzO2UuZGFsZXQ9MTQ5MTtlLmRhbGV0ZGFnZXNoPTY0MzA3O2UuZGFsZXRkYWdlc2hoZWJyZXc9NjQzMDc7ZS5kYWxldGhlYnJldz0xNDkxO2UuZGFsZmluYWxhcmFiaWM9NjUxOTQ7ZS5kYW1tYWFyYWJpYz0xNjE1O2UuZGFtbWFsb3dhcmFiaWM9MTYxNTtlLmRhbW1hdGFuYWx0b25lYXJhYmljPTE2MTI7ZS5kYW1tYXRhbmFyYWJpYz0xNjEyO2UuZGFuZGE9MjQwNDtlLmRhcmdhaGVicmV3PTE0NDc7ZS5kYXJnYWxlZnRoZWJyZXc9MTQ0NztlLmRhc2lhcG5ldW1hdGFjeXJpbGxpY2NtYj0xMTU3O2UuZGJsR3JhdmU9NjMxODc7ZS5kYmxhbmdsZWJyYWNrZXRsZWZ0PTEyMjk4O2UuZGJsYW5nbGVicmFja2V0bGVmdHZlcnRpY2FsPTY1MDg1O2UuZGJsYW5nbGVicmFja2V0cmlnaHQ9MTIyOTk7ZS5kYmxhbmdsZWJyYWNrZXRyaWdodHZlcnRpY2FsPTY1MDg2O2UuZGJsYXJjaGludmVydGVkYmVsb3djbWI9ODExO2UuZGJsYXJyb3dsZWZ0PTg2NjA7ZS5kYmxhcnJvd3JpZ2h0PTg2NTg7ZS5kYmxkYW5kYT0yNDA1O2UuZGJsZ3JhdmU9NjMxOTA7ZS5kYmxncmF2ZWNtYj03ODM7ZS5kYmxpbnRlZ3JhbD04NzQ4O2UuZGJsbG93bGluZT04MjE1O2UuZGJsbG93bGluZWNtYj04MTk7ZS5kYmxvdmVybGluZWNtYj04MzE7ZS5kYmxwcmltZW1vZD02OTg7ZS5kYmx2ZXJ0aWNhbGJhcj04MjE0O2UuZGJsdmVydGljYWxsaW5lYWJvdmVjbWI9NzgyO2UuZGJvcG9tb2ZvPTEyNTUzO2UuZGJzcXVhcmU9MTMyNTY7ZS5kY2Fyb249MjcxO2UuZGNlZGlsbGE9NzY5NztlLmRjaXJjbGU9OTQyNztlLmRjaXJjdW1mbGV4YmVsb3c9NzY5OTtlLmRjcm9hdD0yNzM7ZS5kZGFiZW5nYWxpPTI0NjU7ZS5kZGFkZXZhPTIzMzc7ZS5kZGFndWphcmF0aT0yNzIxO2UuZGRhZ3VybXVraGk9MjU5MztlLmRkYWxhcmFiaWM9MTY3MjtlLmRkYWxmaW5hbGFyYWJpYz02NDM5MztlLmRkZGhhZGV2YT0yMzk2O2UuZGRoYWJlbmdhbGk9MjQ2NjtlLmRkaGFkZXZhPTIzMzg7ZS5kZGhhZ3VqYXJhdGk9MjcyMjtlLmRkaGFndXJtdWtoaT0yNTk0O2UuZGRvdGFjY2VudD03NjkxO2UuZGRvdGJlbG93PTc2OTM7ZS5kZWNpbWFsc2VwYXJhdG9yYXJhYmljPTE2NDM7ZS5kZWNpbWFsc2VwYXJhdG9ycGVyc2lhbj0xNjQzO2UuZGVjeXJpbGxpYz0xMDc2O2UuZGVncmVlPTE3NjtlLmRlaGloZWJyZXc9MTQ1MztlLmRlaGlyYWdhbmE9MTIzOTE7ZS5kZWljb3B0aWM9MTAwNztlLmRla2F0YWthbmE9MTI0ODc7ZS5kZWxldGVsZWZ0PTkwMDM7ZS5kZWxldGVyaWdodD04OTk4O2UuZGVsdGE9OTQ4O2UuZGVsdGF0dXJuZWQ9Mzk3O2UuZGVub21pbmF0b3JtaW51c29uZW51bWVyYXRvcmJlbmdhbGk9MjU1MjtlLmRlemg9Njc2O2UuZGhhYmVuZ2FsaT0yNDcxO2UuZGhhZGV2YT0yMzQzO2UuZGhhZ3VqYXJhdGk9MjcyNztlLmRoYWd1cm11a2hpPTI1OTk7ZS5kaG9vaz01OTk7ZS5kaWFseXRpa2F0b25vcz05MDE7ZS5kaWFseXRpa2F0b25vc2NtYj04MzY7ZS5kaWFtb25kPTk4MzA7ZS5kaWFtb25kc3VpdHdoaXRlPTk4MjY7ZS5kaWVyZXNpcz0xNjg7ZS5kaWVyZXNpc2FjdXRlPTYzMTkxO2UuZGllcmVzaXNiZWxvd2NtYj04MDQ7ZS5kaWVyZXNpc2NtYj03NzY7ZS5kaWVyZXNpc2dyYXZlPTYzMTkyO2UuZGllcmVzaXN0b25vcz05MDE7ZS5kaWhpcmFnYW5hPTEyMzg2O2UuZGlrYXRha2FuYT0xMjQ4MjtlLmRpdHRvbWFyaz0xMjI5MTtlLmRpdmlkZT0yNDc7ZS5kaXZpZGVzPTg3Mzk7ZS5kaXZpc2lvbnNsYXNoPTg3MjU7ZS5kamVjeXJpbGxpYz0xMTA2O2UuZGtzaGFkZT05NjE5O2UuZGxpbmViZWxvdz03Njk1O2UuZGxzcXVhcmU9MTMyMDc7ZS5kbWFjcm9uPTI3MztlLmRtb25vc3BhY2U9NjUzNDg7ZS5kbmJsb2NrPTk2MDQ7ZS5kb2NoYWRhdGhhaT0zNTk4O2UuZG9kZWt0aGFpPTM2MDQ7ZS5kb2hpcmFnYW5hPTEyMzkzO2UuZG9rYXRha2FuYT0xMjQ4OTtlLmRvbGxhcj0zNjtlLmRvbGxhcmluZmVyaW9yPTYzMjAzO2UuZG9sbGFybW9ub3NwYWNlPTY1Mjg0O2UuZG9sbGFyb2xkc3R5bGU9NjMyNjg7ZS5kb2xsYXJzbWFsbD02NTEyOTtlLmRvbGxhcnN1cGVyaW9yPTYzMjA0O2UuZG9uZz04MzYzO2UuZG9ydXNxdWFyZT0xMzA5NDtlLmRvdGFjY2VudD03Mjk7ZS5kb3RhY2NlbnRjbWI9Nzc1O2UuZG90YmVsb3djbWI9ODAzO2UuZG90YmVsb3djb21iPTgwMztlLmRvdGthdGFrYW5hPTEyNTM5O2UuZG90bGVzc2k9MzA1O2UuZG90bGVzc2o9NjMxNjY7ZS5kb3RsZXNzanN0cm9rZWhvb2s9NjQ0O2UuZG90bWF0aD04OTAxO2UuZG90dGVkY2lyY2xlPTk2NzY7ZS5kb3VibGV5b2RwYXRhaD02NDI4NztlLmRvdWJsZXlvZHBhdGFoaGVicmV3PTY0Mjg3O2UuZG93bnRhY2tiZWxvd2NtYj03OTg7ZS5kb3dudGFja21vZD03MjU7ZS5kcGFyZW49OTM3NTtlLmRzdXBlcmlvcj02MzIxMTtlLmR0YWlsPTU5ODtlLmR0b3BiYXI9Mzk2O2UuZHVoaXJhZ2FuYT0xMjM4OTtlLmR1a2F0YWthbmE9MTI0ODU7ZS5kej00OTk7ZS5kemFsdG9uZT02NzU7ZS5kemNhcm9uPTQ1NDtlLmR6Y3VybD02Nzc7ZS5kemVhYmtoYXNpYW5jeXJpbGxpYz0xMjQ5O2UuZHplY3lyaWxsaWM9MTEwOTtlLmR6aGVjeXJpbGxpYz0xMTE5O2UuZT0xMDE7ZS5lYWN1dGU9MjMzO2UuZWFydGg9OTc5MztlLmViZW5nYWxpPTI0NDc7ZS5lYm9wb21vZm89MTI1NzI7ZS5lYnJldmU9Mjc3O2UuZWNhbmRyYWRldmE9MjMxNztlLmVjYW5kcmFndWphcmF0aT0yNzAxO2UuZWNhbmRyYXZvd2Vsc2lnbmRldmE9MjM3MztlLmVjYW5kcmF2b3dlbHNpZ25ndWphcmF0aT0yNzU3O2UuZWNhcm9uPTI4MztlLmVjZWRpbGxhYnJldmU9NzcwOTtlLmVjaGFybWVuaWFuPTEzODE7ZS5lY2h5aXduYXJtZW5pYW49MTQxNTtlLmVjaXJjbGU9OTQyODtlLmVjaXJjdW1mbGV4PTIzNDtlLmVjaXJjdW1mbGV4YWN1dGU9Nzg3MTtlLmVjaXJjdW1mbGV4YmVsb3c9NzcwNTtlLmVjaXJjdW1mbGV4ZG90YmVsb3c9Nzg3OTtlLmVjaXJjdW1mbGV4Z3JhdmU9Nzg3MztlLmVjaXJjdW1mbGV4aG9va2Fib3ZlPTc4NzU7ZS5lY2lyY3VtZmxleHRpbGRlPTc4Nzc7ZS5lY3lyaWxsaWM9MTEwODtlLmVkYmxncmF2ZT01MTc7ZS5lZGV2YT0yMzE5O2UuZWRpZXJlc2lzPTIzNTtlLmVkb3Q9Mjc5O2UuZWRvdGFjY2VudD0yNzk7ZS5lZG90YmVsb3c9Nzg2NTtlLmVlZ3VybXVraGk9MjU3NTtlLmVlbWF0cmFndXJtdWtoaT0yNjMxO2UuZWZjeXJpbGxpYz0xMDkyO2UuZWdyYXZlPTIzMjtlLmVndWphcmF0aT0yNzAzO2UuZWhhcm1lbmlhbj0xMzgzO2UuZWhib3BvbW9mbz0xMjU3MztlLmVoaXJhZ2FuYT0xMjM2MDtlLmVob29rYWJvdmU9Nzg2NztlLmVpYm9wb21vZm89MTI1NzU7ZS5laWdodD01NjtlLmVpZ2h0YXJhYmljPTE2NDA7ZS5laWdodGJlbmdhbGk9MjU0MjtlLmVpZ2h0Y2lyY2xlPTkzMTk7ZS5laWdodGNpcmNsZWludmVyc2VzYW5zc2VyaWY9MTAxMjk7ZS5laWdodGRldmE9MjQxNDtlLmVpZ2h0ZWVuY2lyY2xlPTkzMjk7ZS5laWdodGVlbnBhcmVuPTkzNDk7ZS5laWdodGVlbnBlcmlvZD05MzY5O2UuZWlnaHRndWphcmF0aT0yNzk4O2UuZWlnaHRndXJtdWtoaT0yNjcwO2UuZWlnaHRoYWNrYXJhYmljPTE2NDA7ZS5laWdodGhhbmd6aG91PTEyMzI4O2UuZWlnaHRobm90ZWJlYW1lZD05ODM1O2UuZWlnaHRpZGVvZ3JhcGhpY3BhcmVuPTEyODM5O2UuZWlnaHRpbmZlcmlvcj04MzI4O2UuZWlnaHRtb25vc3BhY2U9NjUzMDQ7ZS5laWdodG9sZHN0eWxlPTYzMjg4O2UuZWlnaHRwYXJlbj05MzM5O2UuZWlnaHRwZXJpb2Q9OTM1OTtlLmVpZ2h0cGVyc2lhbj0xNzg0O2UuZWlnaHRyb21hbj04NTY3O2UuZWlnaHRzdXBlcmlvcj04MzEyO2UuZWlnaHR0aGFpPTM2NzI7ZS5laW52ZXJ0ZWRicmV2ZT01MTk7ZS5laW90aWZpZWRjeXJpbGxpYz0xMTI1O2UuZWthdGFrYW5hPTEyNDU2O2UuZWthdGFrYW5haGFsZndpZHRoPTY1Mzk2O2UuZWtvbmthcmd1cm11a2hpPTI2NzY7ZS5la29yZWFuPTEyNjI4O2UuZWxjeXJpbGxpYz0xMDgzO2UuZWxlbWVudD04NzEyO2UuZWxldmVuY2lyY2xlPTkzMjI7ZS5lbGV2ZW5wYXJlbj05MzQyO2UuZWxldmVucGVyaW9kPTkzNjI7ZS5lbGV2ZW5yb21hbj04NTcwO2UuZWxsaXBzaXM9ODIzMDtlLmVsbGlwc2lzdmVydGljYWw9ODk0MjtlLmVtYWNyb249Mjc1O2UuZW1hY3JvbmFjdXRlPTc3MDM7ZS5lbWFjcm9uZ3JhdmU9NzcwMTtlLmVtY3lyaWxsaWM9MTA4NDtlLmVtZGFzaD04MjEyO2UuZW1kYXNodmVydGljYWw9NjUwNzM7ZS5lbW9ub3NwYWNlPTY1MzQ5O2UuZW1waGFzaXNtYXJrYXJtZW5pYW49MTM3MTtlLmVtcHR5c2V0PTg3MDk7ZS5lbmJvcG9tb2ZvPTEyNTc5O2UuZW5jeXJpbGxpYz0xMDg1O2UuZW5kYXNoPTgyMTE7ZS5lbmRhc2h2ZXJ0aWNhbD02NTA3NDtlLmVuZGVzY2VuZGVyY3lyaWxsaWM9MTE4NztlLmVuZz0zMzE7ZS5lbmdib3BvbW9mbz0xMjU4MTtlLmVuZ2hlY3lyaWxsaWM9MTE4OTtlLmVuaG9va2N5cmlsbGljPTEyMjQ7ZS5lbnNwYWNlPTgxOTQ7ZS5lb2dvbmVrPTI4MTtlLmVva29yZWFuPTEyNjI3O2UuZW9wZW49NjAzO2UuZW9wZW5jbG9zZWQ9NjY2O2UuZW9wZW5yZXZlcnNlZD02MDQ7ZS5lb3BlbnJldmVyc2VkY2xvc2VkPTYwNjtlLmVvcGVucmV2ZXJzZWRob29rPTYwNTtlLmVwYXJlbj05Mzc2O2UuZXBzaWxvbj05NDk7ZS5lcHNpbG9udG9ub3M9OTQxO2UuZXF1YWw9NjE7ZS5lcXVhbG1vbm9zcGFjZT02NTMwOTtlLmVxdWFsc21hbGw9NjUxMjY7ZS5lcXVhbHN1cGVyaW9yPTgzMTY7ZS5lcXVpdmFsZW5jZT04ODAxO2UuZXJib3BvbW9mbz0xMjU4MjtlLmVyY3lyaWxsaWM9MTA4ODtlLmVyZXZlcnNlZD02MDA7ZS5lcmV2ZXJzZWRjeXJpbGxpYz0xMTAxO2UuZXNjeXJpbGxpYz0xMDg5O2UuZXNkZXNjZW5kZXJjeXJpbGxpYz0xMTk1O2UuZXNoPTY0MztlLmVzaGN1cmw9NjQ2O2UuZXNob3J0ZGV2YT0yMzE4O2UuZXNob3J0dm93ZWxzaWduZGV2YT0yMzc0O2UuZXNocmV2ZXJzZWRsb29wPTQyNjtlLmVzaHNxdWF0cmV2ZXJzZWQ9NjQ1O2UuZXNtYWxsaGlyYWdhbmE9MTIzNTk7ZS5lc21hbGxrYXRha2FuYT0xMjQ1NTtlLmVzbWFsbGthdGFrYW5haGFsZndpZHRoPTY1Mzg2O2UuZXN0aW1hdGVkPTg0OTQ7ZS5lc3VwZXJpb3I9NjMyMTI7ZS5ldGE9OTUxO2UuZXRhcm1lbmlhbj0xMzg0O2UuZXRhdG9ub3M9OTQyO2UuZXRoPTI0MDtlLmV0aWxkZT03ODY5O2UuZXRpbGRlYmVsb3c9NzcwNztlLmV0bmFodGFmb3VraGhlYnJldz0xNDI1O2UuZXRuYWh0YWZvdWtobGVmdGhlYnJldz0xNDI1O2UuZXRuYWh0YWhlYnJldz0xNDI1O2UuZXRuYWh0YWxlZnRoZWJyZXc9MTQyNTtlLmV0dXJuZWQ9NDc3O2UuZXVrb3JlYW49MTI2NDE7ZS5ldXJvPTgzNjQ7ZS5ldm93ZWxzaWduYmVuZ2FsaT0yNTAzO2UuZXZvd2Vsc2lnbmRldmE9MjM3NTtlLmV2b3dlbHNpZ25ndWphcmF0aT0yNzU5O2UuZXhjbGFtPTMzO2UuZXhjbGFtYXJtZW5pYW49MTM3MjtlLmV4Y2xhbWRibD04MjUyO2UuZXhjbGFtZG93bj0xNjE7ZS5leGNsYW1kb3duc21hbGw9NjMzOTM7ZS5leGNsYW1tb25vc3BhY2U9NjUyODE7ZS5leGNsYW1zbWFsbD02MzI2NTtlLmV4aXN0ZW50aWFsPTg3MDc7ZS5lemg9NjU4O2UuZXpoY2Fyb249NDk1O2UuZXpoY3VybD02NTk7ZS5lemhyZXZlcnNlZD00NDE7ZS5lemh0YWlsPTQ0MjtlLmY9MTAyO2UuZmFkZXZhPTIzOTg7ZS5mYWd1cm11a2hpPTI2NTQ7ZS5mYWhyZW5oZWl0PTg0NTc7ZS5mYXRoYWFyYWJpYz0xNjE0O2UuZmF0aGFsb3dhcmFiaWM9MTYxNDtlLmZhdGhhdGFuYXJhYmljPTE2MTE7ZS5mYm9wb21vZm89MTI1NTI7ZS5mY2lyY2xlPTk0Mjk7ZS5mZG90YWNjZW50PTc3MTE7ZS5mZWhhcmFiaWM9MTYwMTtlLmZlaGFybWVuaWFuPTE0MTQ7ZS5mZWhmaW5hbGFyYWJpYz02NTIzNDtlLmZlaGluaXRpYWxhcmFiaWM9NjUyMzU7ZS5mZWhtZWRpYWxhcmFiaWM9NjUyMzY7ZS5mZWljb3B0aWM9OTk3O2UuZmVtYWxlPTk3OTI7ZS5mZj02NDI1NjtlLmZfZj02NDI1NjtlLmZmaT02NDI1OTtlLmZfZl9pPTY0MjU5O2UuZmZsPTY0MjYwO2UuZl9mX2w9NjQyNjA7ZS5maT02NDI1NztlLmZfaT02NDI1NztlLmZpZnRlZW5jaXJjbGU9OTMyNjtlLmZpZnRlZW5wYXJlbj05MzQ2O2UuZmlmdGVlbnBlcmlvZD05MzY2O2UuZmlndXJlZGFzaD04MjEwO2UuZmlsbGVkYm94PTk2MzI7ZS5maWxsZWRyZWN0PTk2NDQ7ZS5maW5hbGthZj0xNDk4O2UuZmluYWxrYWZkYWdlc2g9NjQzMTQ7ZS5maW5hbGthZmRhZ2VzaGhlYnJldz02NDMxNDtlLmZpbmFsa2FmaGVicmV3PTE0OTg7ZS5maW5hbG1lbT0xNTAxO2UuZmluYWxtZW1oZWJyZXc9MTUwMTtlLmZpbmFsbnVuPTE1MDM7ZS5maW5hbG51bmhlYnJldz0xNTAzO2UuZmluYWxwZT0xNTA3O2UuZmluYWxwZWhlYnJldz0xNTA3O2UuZmluYWx0c2FkaT0xNTA5O2UuZmluYWx0c2FkaWhlYnJldz0xNTA5O2UuZmlyc3R0b25lY2hpbmVzZT03MTM7ZS5maXNoZXllPTk2NzM7ZS5maXRhY3lyaWxsaWM9MTEzOTtlLmZpdmU9NTM7ZS5maXZlYXJhYmljPTE2Mzc7ZS5maXZlYmVuZ2FsaT0yNTM5O2UuZml2ZWNpcmNsZT05MzE2O2UuZml2ZWNpcmNsZWludmVyc2VzYW5zc2VyaWY9MTAxMjY7ZS5maXZlZGV2YT0yNDExO2UuZml2ZWVpZ2h0aHM9ODU0MTtlLmZpdmVndWphcmF0aT0yNzk1O2UuZml2ZWd1cm11a2hpPTI2Njc7ZS5maXZlaGFja2FyYWJpYz0xNjM3O2UuZml2ZWhhbmd6aG91PTEyMzI1O2UuZml2ZWlkZW9ncmFwaGljcGFyZW49MTI4MzY7ZS5maXZlaW5mZXJpb3I9ODMyNTtlLmZpdmVtb25vc3BhY2U9NjUzMDE7ZS5maXZlb2xkc3R5bGU9NjMyODU7ZS5maXZlcGFyZW49OTMzNjtlLmZpdmVwZXJpb2Q9OTM1NjtlLmZpdmVwZXJzaWFuPTE3ODE7ZS5maXZlcm9tYW49ODU2NDtlLmZpdmVzdXBlcmlvcj04MzA5O2UuZml2ZXRoYWk9MzY2OTtlLmZsPTY0MjU4O2UuZl9sPTY0MjU4O2UuZmxvcmluPTQwMjtlLmZtb25vc3BhY2U9NjUzNTA7ZS5mbXNxdWFyZT0xMzIwOTtlLmZvZmFudGhhaT0zNjE1O2UuZm9mYXRoYWk9MzYxMztlLmZvbmdtYW50aGFpPTM2NjM7ZS5mb3JhbGw9ODcwNDtlLmZvdXI9NTI7ZS5mb3VyYXJhYmljPTE2MzY7ZS5mb3VyYmVuZ2FsaT0yNTM4O2UuZm91cmNpcmNsZT05MzE1O2UuZm91cmNpcmNsZWludmVyc2VzYW5zc2VyaWY9MTAxMjU7ZS5mb3VyZGV2YT0yNDEwO2UuZm91cmd1amFyYXRpPTI3OTQ7ZS5mb3VyZ3VybXVraGk9MjY2NjtlLmZvdXJoYWNrYXJhYmljPTE2MzY7ZS5mb3VyaGFuZ3pob3U9MTIzMjQ7ZS5mb3VyaWRlb2dyYXBoaWNwYXJlbj0xMjgzNTtlLmZvdXJpbmZlcmlvcj04MzI0O2UuZm91cm1vbm9zcGFjZT02NTMwMDtlLmZvdXJudW1lcmF0b3JiZW5nYWxpPTI1NTE7ZS5mb3Vyb2xkc3R5bGU9NjMyODQ7ZS5mb3VycGFyZW49OTMzNTtlLmZvdXJwZXJpb2Q9OTM1NTtlLmZvdXJwZXJzaWFuPTE3ODA7ZS5mb3Vycm9tYW49ODU2MztlLmZvdXJzdXBlcmlvcj04MzA4O2UuZm91cnRlZW5jaXJjbGU9OTMyNTtlLmZvdXJ0ZWVucGFyZW49OTM0NTtlLmZvdXJ0ZWVucGVyaW9kPTkzNjU7ZS5mb3VydGhhaT0zNjY4O2UuZm91cnRodG9uZWNoaW5lc2U9NzE1O2UuZnBhcmVuPTkzNzc7ZS5mcmFjdGlvbj04MjYwO2UuZnJhbmM9ODM1NTtlLmc9MTAzO2UuZ2FiZW5nYWxpPTI0NTU7ZS5nYWN1dGU9NTAxO2UuZ2FkZXZhPTIzMjc7ZS5nYWZhcmFiaWM9MTcxMTtlLmdhZmZpbmFsYXJhYmljPTY0NDAzO2UuZ2FmaW5pdGlhbGFyYWJpYz02NDQwNDtlLmdhZm1lZGlhbGFyYWJpYz02NDQwNTtlLmdhZ3VqYXJhdGk9MjcxMTtlLmdhZ3VybXVraGk9MjU4MztlLmdhaGlyYWdhbmE9MTIzNjQ7ZS5nYWthdGFrYW5hPTEyNDYwO2UuZ2FtbWE9OTQ3O2UuZ2FtbWFsYXRpbnNtYWxsPTYxMTtlLmdhbW1hc3VwZXJpb3I9NzM2O2UuZ2FuZ2lhY29wdGljPTEwMDM7ZS5nYm9wb21vZm89MTI1NTc7ZS5nYnJldmU9Mjg3O2UuZ2Nhcm9uPTQ4NztlLmdjZWRpbGxhPTI5MTtlLmdjaXJjbGU9OTQzMDtlLmdjaXJjdW1mbGV4PTI4NTtlLmdjb21tYWFjY2VudD0yOTE7ZS5nZG90PTI4OTtlLmdkb3RhY2NlbnQ9Mjg5O2UuZ2VjeXJpbGxpYz0xMDc1O2UuZ2VoaXJhZ2FuYT0xMjM3MDtlLmdla2F0YWthbmE9MTI0NjY7ZS5nZW9tZXRyaWNhbGx5ZXF1YWw9ODc4NTtlLmdlcmVzaGFjY2VudGhlYnJldz0xNDM2O2UuZ2VyZXNoaGVicmV3PTE1MjM7ZS5nZXJlc2htdXFkYW1oZWJyZXc9MTQzNztlLmdlcm1hbmRibHM9MjIzO2UuZ2Vyc2hheWltYWNjZW50aGVicmV3PTE0Mzg7ZS5nZXJzaGF5aW1oZWJyZXc9MTUyNDtlLmdldGFtYXJrPTEyMzA3O2UuZ2hhYmVuZ2FsaT0yNDU2O2UuZ2hhZGFybWVuaWFuPTEzOTQ7ZS5naGFkZXZhPTIzMjg7ZS5naGFndWphcmF0aT0yNzEyO2UuZ2hhZ3VybXVraGk9MjU4NDtlLmdoYWluYXJhYmljPTE1OTQ7ZS5naGFpbmZpbmFsYXJhYmljPTY1MjMwO2UuZ2hhaW5pbml0aWFsYXJhYmljPTY1MjMxO2UuZ2hhaW5tZWRpYWxhcmFiaWM9NjUyMzI7ZS5naGVtaWRkbGVob29rY3lyaWxsaWM9MTE3MztlLmdoZXN0cm9rZWN5cmlsbGljPTExNzE7ZS5naGV1cHR1cm5jeXJpbGxpYz0xMTY5O2UuZ2hoYWRldmE9MjM5NDtlLmdoaGFndXJtdWtoaT0yNjUwO2UuZ2hvb2s9NjA4O2UuZ2h6c3F1YXJlPTEzMjAzO2UuZ2loaXJhZ2FuYT0xMjM2NjtlLmdpa2F0YWthbmE9MTI0NjI7ZS5naW1hcm1lbmlhbj0xMzc5O2UuZ2ltZWw9MTQ5MDtlLmdpbWVsZGFnZXNoPTY0MzA2O2UuZ2ltZWxkYWdlc2hoZWJyZXc9NjQzMDY7ZS5naW1lbGhlYnJldz0xNDkwO2UuZ2plY3lyaWxsaWM9MTEwNztlLmdsb3R0YWxpbnZlcnRlZHN0cm9rZT00NDY7ZS5nbG90dGFsc3RvcD02NjA7ZS5nbG90dGFsc3RvcGludmVydGVkPTY2MjtlLmdsb3R0YWxzdG9wbW9kPTcwNDtlLmdsb3R0YWxzdG9wcmV2ZXJzZWQ9NjYxO2UuZ2xvdHRhbHN0b3ByZXZlcnNlZG1vZD03MDU7ZS5nbG90dGFsc3RvcHJldmVyc2Vkc3VwZXJpb3I9NzQwO2UuZ2xvdHRhbHN0b3BzdHJva2U9NjczO2UuZ2xvdHRhbHN0b3BzdHJva2VyZXZlcnNlZD02NzQ7ZS5nbWFjcm9uPTc3MTM7ZS5nbW9ub3NwYWNlPTY1MzUxO2UuZ29oaXJhZ2FuYT0xMjM3MjtlLmdva2F0YWthbmE9MTI0Njg7ZS5ncGFyZW49OTM3ODtlLmdwYXNxdWFyZT0xMzIyODtlLmdyYWRpZW50PTg3MTE7ZS5ncmF2ZT05NjtlLmdyYXZlYmVsb3djbWI9NzkwO2UuZ3JhdmVjbWI9NzY4O2UuZ3JhdmVjb21iPTc2ODtlLmdyYXZlZGV2YT0yMzg3O2UuZ3JhdmVsb3dtb2Q9NzE4O2UuZ3JhdmVtb25vc3BhY2U9NjUzNDQ7ZS5ncmF2ZXRvbmVjbWI9ODMyO2UuZ3JlYXRlcj02MjtlLmdyZWF0ZXJlcXVhbD04ODA1O2UuZ3JlYXRlcmVxdWFsb3JsZXNzPTg5MjM7ZS5ncmVhdGVybW9ub3NwYWNlPTY1MzEwO2UuZ3JlYXRlcm9yZXF1aXZhbGVudD04ODE5O2UuZ3JlYXRlcm9ybGVzcz04ODIzO2UuZ3JlYXRlcm92ZXJlcXVhbD04ODA3O2UuZ3JlYXRlcnNtYWxsPTY1MTI1O2UuZ3NjcmlwdD02MDk7ZS5nc3Ryb2tlPTQ4NTtlLmd1aGlyYWdhbmE9MTIzNjg7ZS5ndWlsbGVtb3RsZWZ0PTE3MTtlLmd1aWxsZW1vdHJpZ2h0PTE4NztlLmd1aWxzaW5nbGxlZnQ9ODI0OTtlLmd1aWxzaW5nbHJpZ2h0PTgyNTA7ZS5ndWthdGFrYW5hPTEyNDY0O2UuZ3VyYW11c3F1YXJlPTEzMDgwO2UuZ3lzcXVhcmU9MTMyNTc7ZS5oPTEwNDtlLmhhYWJraGFzaWFuY3lyaWxsaWM9MTE5MztlLmhhYWx0b25lYXJhYmljPTE3Mjk7ZS5oYWJlbmdhbGk9MjQ4OTtlLmhhZGVzY2VuZGVyY3lyaWxsaWM9MTIwMztlLmhhZGV2YT0yMzYxO2UuaGFndWphcmF0aT0yNzQ1O2UuaGFndXJtdWtoaT0yNjE3O2UuaGFoYXJhYmljPTE1ODE7ZS5oYWhmaW5hbGFyYWJpYz02NTE4NjtlLmhhaGluaXRpYWxhcmFiaWM9NjUxODc7ZS5oYWhpcmFnYW5hPTEyMzk5O2UuaGFobWVkaWFsYXJhYmljPTY1MTg4O2UuaGFpdHVzcXVhcmU9MTMwOTg7ZS5oYWthdGFrYW5hPTEyNDk1O2UuaGFrYXRha2FuYWhhbGZ3aWR0aD02NTQxODtlLmhhbGFudGd1cm11a2hpPTI2Mzc7ZS5oYW16YWFyYWJpYz0xNTY5O2UuaGFtemFsb3dhcmFiaWM9MTU2OTtlLmhhbmd1bGZpbGxlcj0xMjY0NDtlLmhhcmRzaWduY3lyaWxsaWM9MTA5ODtlLmhhcnBvb25sZWZ0YmFyYnVwPTg2MzY7ZS5oYXJwb29ucmlnaHRiYXJidXA9ODY0MDtlLmhhc3F1YXJlPTEzMjU4O2UuaGF0YWZwYXRhaD0xNDU4O2UuaGF0YWZwYXRhaDE2PTE0NTg7ZS5oYXRhZnBhdGFoMjM9MTQ1ODtlLmhhdGFmcGF0YWgyZj0xNDU4O2UuaGF0YWZwYXRhaGhlYnJldz0xNDU4O2UuaGF0YWZwYXRhaG5hcnJvd2hlYnJldz0xNDU4O2UuaGF0YWZwYXRhaHF1YXJ0ZXJoZWJyZXc9MTQ1ODtlLmhhdGFmcGF0YWh3aWRlaGVicmV3PTE0NTg7ZS5oYXRhZnFhbWF0cz0xNDU5O2UuaGF0YWZxYW1hdHMxYj0xNDU5O2UuaGF0YWZxYW1hdHMyOD0xNDU5O2UuaGF0YWZxYW1hdHMzND0xNDU5O2UuaGF0YWZxYW1hdHNoZWJyZXc9MTQ1OTtlLmhhdGFmcWFtYXRzbmFycm93aGVicmV3PTE0NTk7ZS5oYXRhZnFhbWF0c3F1YXJ0ZXJoZWJyZXc9MTQ1OTtlLmhhdGFmcWFtYXRzd2lkZWhlYnJldz0xNDU5O2UuaGF0YWZzZWdvbD0xNDU3O2UuaGF0YWZzZWdvbDE3PTE0NTc7ZS5oYXRhZnNlZ29sMjQ9MTQ1NztlLmhhdGFmc2Vnb2wzMD0xNDU3O2UuaGF0YWZzZWdvbGhlYnJldz0xNDU3O2UuaGF0YWZzZWdvbG5hcnJvd2hlYnJldz0xNDU3O2UuaGF0YWZzZWdvbHF1YXJ0ZXJoZWJyZXc9MTQ1NztlLmhhdGFmc2Vnb2x3aWRlaGVicmV3PTE0NTc7ZS5oYmFyPTI5NTtlLmhib3BvbW9mbz0xMjU1OTtlLmhicmV2ZWJlbG93PTc3MjM7ZS5oY2VkaWxsYT03NzIxO2UuaGNpcmNsZT05NDMxO2UuaGNpcmN1bWZsZXg9MjkzO2UuaGRpZXJlc2lzPTc3MTk7ZS5oZG90YWNjZW50PTc3MTU7ZS5oZG90YmVsb3c9NzcxNztlLmhlPTE0OTI7ZS5oZWFydD05ODI5O2UuaGVhcnRzdWl0YmxhY2s9OTgyOTtlLmhlYXJ0c3VpdHdoaXRlPTk4MjU7ZS5oZWRhZ2VzaD02NDMwODtlLmhlZGFnZXNoaGVicmV3PTY0MzA4O2UuaGVoYWx0b25lYXJhYmljPTE3Mjk7ZS5oZWhhcmFiaWM9MTYwNztlLmhlaGVicmV3PTE0OTI7ZS5oZWhmaW5hbGFsdG9uZWFyYWJpYz02NDQyMztlLmhlaGZpbmFsYWx0dHdvYXJhYmljPTY1MjU4O2UuaGVoZmluYWxhcmFiaWM9NjUyNTg7ZS5oZWhoYW16YWFib3ZlZmluYWxhcmFiaWM9NjQ0MjE7ZS5oZWhoYW16YWFib3ZlaXNvbGF0ZWRhcmFiaWM9NjQ0MjA7ZS5oZWhpbml0aWFsYWx0b25lYXJhYmljPTY0NDI0O2UuaGVoaW5pdGlhbGFyYWJpYz02NTI1OTtlLmhlaGlyYWdhbmE9MTI0MDg7ZS5oZWhtZWRpYWxhbHRvbmVhcmFiaWM9NjQ0MjU7ZS5oZWhtZWRpYWxhcmFiaWM9NjUyNjA7ZS5oZWlzZWllcmFzcXVhcmU9MTMxNzk7ZS5oZWthdGFrYW5hPTEyNTA0O2UuaGVrYXRha2FuYWhhbGZ3aWR0aD02NTQyMTtlLmhla3V0YWFydXNxdWFyZT0xMzExMDtlLmhlbmdob29rPTYxNTtlLmhlcnV0dXNxdWFyZT0xMzExMztlLmhldD0xNDk1O2UuaGV0aGVicmV3PTE0OTU7ZS5oaG9vaz02MTQ7ZS5oaG9va3N1cGVyaW9yPTY4OTtlLmhpZXVoYWNpcmNsZWtvcmVhbj0xMjkyMztlLmhpZXVoYXBhcmVua29yZWFuPTEyODI3O2UuaGlldWhjaXJjbGVrb3JlYW49MTI5MDk7ZS5oaWV1aGtvcmVhbj0xMjYyMjtlLmhpZXVocGFyZW5rb3JlYW49MTI4MTM7ZS5oaWhpcmFnYW5hPTEyNDAyO2UuaGlrYXRha2FuYT0xMjQ5ODtlLmhpa2F0YWthbmFoYWxmd2lkdGg9NjU0MTk7ZS5oaXJpcT0xNDYwO2UuaGlyaXExND0xNDYwO2UuaGlyaXEyMT0xNDYwO2UuaGlyaXEyZD0xNDYwO2UuaGlyaXFoZWJyZXc9MTQ2MDtlLmhpcmlxbmFycm93aGVicmV3PTE0NjA7ZS5oaXJpcXF1YXJ0ZXJoZWJyZXc9MTQ2MDtlLmhpcmlxd2lkZWhlYnJldz0xNDYwO2UuaGxpbmViZWxvdz03ODMwO2UuaG1vbm9zcGFjZT02NTM1MjtlLmhvYXJtZW5pYW49MTM5MjtlLmhvaGlwdGhhaT0zNjI3O2UuaG9oaXJhZ2FuYT0xMjQxMTtlLmhva2F0YWthbmE9MTI1MDc7ZS5ob2thdGFrYW5haGFsZndpZHRoPTY1NDIyO2UuaG9sYW09MTQ2NTtlLmhvbGFtMTk9MTQ2NTtlLmhvbGFtMjY9MTQ2NTtlLmhvbGFtMzI9MTQ2NTtlLmhvbGFtaGVicmV3PTE0NjU7ZS5ob2xhbW5hcnJvd2hlYnJldz0xNDY1O2UuaG9sYW1xdWFydGVyaGVicmV3PTE0NjU7ZS5ob2xhbXdpZGVoZWJyZXc9MTQ2NTtlLmhvbm9raHVrdGhhaT0zNjMwO2UuaG9va2Fib3ZlY29tYj03Nzc7ZS5ob29rY21iPTc3NztlLmhvb2twYWxhdGFsaXplZGJlbG93Y21iPTgwMTtlLmhvb2tyZXRyb2ZsZXhiZWxvd2NtYj04MDI7ZS5ob29uc3F1YXJlPTEzMTIyO2UuaG9yaWNvcHRpYz0xMDAxO2UuaG9yaXpvbnRhbGJhcj04MjEzO2UuaG9ybmNtYj03OTU7ZS5ob3RzcHJpbmdzPTk4MzI7ZS5ob3VzZT04OTYyO2UuaHBhcmVuPTkzNzk7ZS5oc3VwZXJpb3I9Njg4O2UuaHR1cm5lZD02MTM7ZS5odWhpcmFnYW5hPTEyNDA1O2UuaHVpaXRvc3F1YXJlPTEzMTA3O2UuaHVrYXRha2FuYT0xMjUwMTtlLmh1a2F0YWthbmFoYWxmd2lkdGg9NjU0MjA7ZS5odW5nYXJ1bWxhdXQ9NzMzO2UuaHVuZ2FydW1sYXV0Y21iPTc3OTtlLmh2PTQwNTtlLmh5cGhlbj00NTtlLmh5cGhlbmluZmVyaW9yPTYzMjA1O2UuaHlwaGVubW9ub3NwYWNlPTY1MjkzO2UuaHlwaGVuc21hbGw9NjUxMjM7ZS5oeXBoZW5zdXBlcmlvcj02MzIwNjtlLmh5cGhlbnR3bz04MjA4O2UuaT0xMDU7ZS5pYWN1dGU9MjM3O2UuaWFjeXJpbGxpYz0xMTAzO2UuaWJlbmdhbGk9MjQzOTtlLmlib3BvbW9mbz0xMjU4MztlLmlicmV2ZT0zMDE7ZS5pY2Fyb249NDY0O2UuaWNpcmNsZT05NDMyO2UuaWNpcmN1bWZsZXg9MjM4O2UuaWN5cmlsbGljPTExMTA7ZS5pZGJsZ3JhdmU9NTIxO2UuaWRlb2dyYXBoZWFydGhjaXJjbGU9MTI5NDM7ZS5pZGVvZ3JhcGhmaXJlY2lyY2xlPTEyOTM5O2UuaWRlb2dyYXBoaWNhbGxpYW5jZXBhcmVuPTEyODYzO2UuaWRlb2dyYXBoaWNjYWxscGFyZW49MTI4NTg7ZS5pZGVvZ3JhcGhpY2NlbnRyZWNpcmNsZT0xMjk2NTtlLmlkZW9ncmFwaGljY2xvc2U9MTIyOTQ7ZS5pZGVvZ3JhcGhpY2NvbW1hPTEyMjg5O2UuaWRlb2dyYXBoaWNjb21tYWxlZnQ9NjUzODA7ZS5pZGVvZ3JhcGhpY2NvbmdyYXR1bGF0aW9ucGFyZW49MTI4NTU7ZS5pZGVvZ3JhcGhpY2NvcnJlY3RjaXJjbGU9MTI5NjM7ZS5pZGVvZ3JhcGhpY2VhcnRocGFyZW49MTI4NDc7ZS5pZGVvZ3JhcGhpY2VudGVycHJpc2VwYXJlbj0xMjg2MTtlLmlkZW9ncmFwaGljZXhjZWxsZW50Y2lyY2xlPTEyOTU3O2UuaWRlb2dyYXBoaWNmZXN0aXZhbHBhcmVuPTEyODY0O2UuaWRlb2dyYXBoaWNmaW5hbmNpYWxjaXJjbGU9MTI5NTA7ZS5pZGVvZ3JhcGhpY2ZpbmFuY2lhbHBhcmVuPTEyODU0O2UuaWRlb2dyYXBoaWNmaXJlcGFyZW49MTI4NDM7ZS5pZGVvZ3JhcGhpY2hhdmVwYXJlbj0xMjg1MDtlLmlkZW9ncmFwaGljaGlnaGNpcmNsZT0xMjk2NDtlLmlkZW9ncmFwaGljaXRlcmF0aW9ubWFyaz0xMjI5MztlLmlkZW9ncmFwaGljbGFib3JjaXJjbGU9MTI5NTI7ZS5pZGVvZ3JhcGhpY2xhYm9ycGFyZW49MTI4NTY7ZS5pZGVvZ3JhcGhpY2xlZnRjaXJjbGU9MTI5Njc7ZS5pZGVvZ3JhcGhpY2xvd2NpcmNsZT0xMjk2NjtlLmlkZW9ncmFwaGljbWVkaWNpbmVjaXJjbGU9MTI5Njk7ZS5pZGVvZ3JhcGhpY21ldGFscGFyZW49MTI4NDY7ZS5pZGVvZ3JhcGhpY21vb25wYXJlbj0xMjg0MjtlLmlkZW9ncmFwaGljbmFtZXBhcmVuPTEyODUyO2UuaWRlb2dyYXBoaWNwZXJpb2Q9MTIyOTA7ZS5pZGVvZ3JhcGhpY3ByaW50Y2lyY2xlPTEyOTU4O2UuaWRlb2dyYXBoaWNyZWFjaHBhcmVuPTEyODY3O2UuaWRlb2dyYXBoaWNyZXByZXNlbnRwYXJlbj0xMjg1NztlLmlkZW9ncmFwaGljcmVzb3VyY2VwYXJlbj0xMjg2MjtlLmlkZW9ncmFwaGljcmlnaHRjaXJjbGU9MTI5Njg7ZS5pZGVvZ3JhcGhpY3NlY3JldGNpcmNsZT0xMjk1MztlLmlkZW9ncmFwaGljc2VsZnBhcmVuPTEyODY2O2UuaWRlb2dyYXBoaWNzb2NpZXR5cGFyZW49MTI4NTE7ZS5pZGVvZ3JhcGhpY3NwYWNlPTEyMjg4O2UuaWRlb2dyYXBoaWNzcGVjaWFscGFyZW49MTI4NTM7ZS5pZGVvZ3JhcGhpY3N0b2NrcGFyZW49MTI4NDk7ZS5pZGVvZ3JhcGhpY3N0dWR5cGFyZW49MTI4NTk7ZS5pZGVvZ3JhcGhpY3N1bnBhcmVuPTEyODQ4O2UuaWRlb2dyYXBoaWNzdXBlcnZpc2VwYXJlbj0xMjg2MDtlLmlkZW9ncmFwaGljd2F0ZXJwYXJlbj0xMjg0NDtlLmlkZW9ncmFwaGljd29vZHBhcmVuPTEyODQ1O2UuaWRlb2dyYXBoaWN6ZXJvPTEyMjk1O2UuaWRlb2dyYXBobWV0YWxjaXJjbGU9MTI5NDI7ZS5pZGVvZ3JhcGhtb29uY2lyY2xlPTEyOTM4O2UuaWRlb2dyYXBobmFtZWNpcmNsZT0xMjk0ODtlLmlkZW9ncmFwaHN1bmNpcmNsZT0xMjk0NDtlLmlkZW9ncmFwaHdhdGVyY2lyY2xlPTEyOTQwO2UuaWRlb2dyYXBod29vZGNpcmNsZT0xMjk0MTtlLmlkZXZhPTIzMTE7ZS5pZGllcmVzaXM9MjM5O2UuaWRpZXJlc2lzYWN1dGU9NzcyNztlLmlkaWVyZXNpc2N5cmlsbGljPTEyNTM7ZS5pZG90YmVsb3c9Nzg4MztlLmllYnJldmVjeXJpbGxpYz0xMjM5O2UuaWVjeXJpbGxpYz0xMDc3O2UuaWV1bmdhY2lyY2xla29yZWFuPTEyOTE3O2UuaWV1bmdhcGFyZW5rb3JlYW49MTI4MjE7ZS5pZXVuZ2NpcmNsZWtvcmVhbj0xMjkwMztlLmlldW5na29yZWFuPTEyNjE1O2UuaWV1bmdwYXJlbmtvcmVhbj0xMjgwNztlLmlncmF2ZT0yMzY7ZS5pZ3VqYXJhdGk9MjY5NTtlLmlndXJtdWtoaT0yNTY3O2UuaWhpcmFnYW5hPTEyMzU2O2UuaWhvb2thYm92ZT03ODgxO2UuaWliZW5nYWxpPTI0NDA7ZS5paWN5cmlsbGljPTEwODA7ZS5paWRldmE9MjMxMjtlLmlpZ3VqYXJhdGk9MjY5NjtlLmlpZ3VybXVraGk9MjU2ODtlLmlpbWF0cmFndXJtdWtoaT0yNjI0O2UuaWludmVydGVkYnJldmU9NTIzO2UuaWlzaG9ydGN5cmlsbGljPTEwODE7ZS5paXZvd2Vsc2lnbmJlbmdhbGk9MjQ5NjtlLmlpdm93ZWxzaWduZGV2YT0yMzY4O2UuaWl2b3dlbHNpZ25ndWphcmF0aT0yNzUyO2UuaWo9MzA3O2UuaWthdGFrYW5hPTEyNDUyO2UuaWthdGFrYW5haGFsZndpZHRoPTY1Mzk0O2UuaWtvcmVhbj0xMjY0MztlLmlsZGU9NzMyO2UuaWx1eWhlYnJldz0xNDUyO2UuaW1hY3Jvbj0yOTk7ZS5pbWFjcm9uY3lyaWxsaWM9MTI1MTtlLmltYWdlb3JhcHByb3hpbWF0ZWx5ZXF1YWw9ODc4NztlLmltYXRyYWd1cm11a2hpPTI2MjM7ZS5pbW9ub3NwYWNlPTY1MzUzO2UuaW5jcmVtZW50PTg3MTA7ZS5pbmZpbml0eT04NzM0O2UuaW5pYXJtZW5pYW49MTM4NztlLmludGVncmFsPTg3NDc7ZS5pbnRlZ3JhbGJvdHRvbT04OTkzO2UuaW50ZWdyYWxidD04OTkzO2UuaW50ZWdyYWxleD02MzczMztlLmludGVncmFsdG9wPTg5OTI7ZS5pbnRlZ3JhbHRwPTg5OTI7ZS5pbnRlcnNlY3Rpb249ODc0NTtlLmludGlzcXVhcmU9MTMwNjE7ZS5pbnZidWxsZXQ9OTY4ODtlLmludmNpcmNsZT05Njg5O2UuaW52c21pbGVmYWNlPTk3ODc7ZS5pb2N5cmlsbGljPTExMDU7ZS5pb2dvbmVrPTMwMztlLmlvdGE9OTUzO2UuaW90YWRpZXJlc2lzPTk3MDtlLmlvdGFkaWVyZXNpc3Rvbm9zPTkxMjtlLmlvdGFsYXRpbj02MTc7ZS5pb3RhdG9ub3M9OTQzO2UuaXBhcmVuPTkzODA7ZS5pcmlndXJtdWtoaT0yNjc0O2UuaXNtYWxsaGlyYWdhbmE9MTIzNTU7ZS5pc21hbGxrYXRha2FuYT0xMjQ1MTtlLmlzbWFsbGthdGFrYW5haGFsZndpZHRoPTY1Mzg0O2UuaXNzaGFyYmVuZ2FsaT0yNTU0O2UuaXN0cm9rZT02MTY7ZS5pc3VwZXJpb3I9NjMyMTM7ZS5pdGVyYXRpb25oaXJhZ2FuYT0xMjQ0NTtlLml0ZXJhdGlvbmthdGFrYW5hPTEyNTQxO2UuaXRpbGRlPTI5NztlLml0aWxkZWJlbG93PTc3MjU7ZS5pdWJvcG9tb2ZvPTEyNTg1O2UuaXVjeXJpbGxpYz0xMTAyO2UuaXZvd2Vsc2lnbmJlbmdhbGk9MjQ5NTtlLml2b3dlbHNpZ25kZXZhPTIzNjc7ZS5pdm93ZWxzaWduZ3VqYXJhdGk9Mjc1MTtlLml6aGl0c2FjeXJpbGxpYz0xMTQxO2UuaXpoaXRzYWRibGdyYXZlY3lyaWxsaWM9MTE0MztlLmo9MTA2O2UuamFhcm1lbmlhbj0xMzkzO2UuamFiZW5nYWxpPTI0NjA7ZS5qYWRldmE9MjMzMjtlLmphZ3VqYXJhdGk9MjcxNjtlLmphZ3VybXVraGk9MjU4ODtlLmpib3BvbW9mbz0xMjU2MDtlLmpjYXJvbj00OTY7ZS5qY2lyY2xlPTk0MzM7ZS5qY2lyY3VtZmxleD0zMDk7ZS5qY3Jvc3NlZHRhaWw9NjY5O2UuamRvdGxlc3NzdHJva2U9NjA3O2UuamVjeXJpbGxpYz0xMTEyO2UuamVlbWFyYWJpYz0xNTgwO2UuamVlbWZpbmFsYXJhYmljPTY1MTgyO2UuamVlbWluaXRpYWxhcmFiaWM9NjUxODM7ZS5qZWVtbWVkaWFsYXJhYmljPTY1MTg0O2UuamVoYXJhYmljPTE2ODg7ZS5qZWhmaW5hbGFyYWJpYz02NDM5NTtlLmpoYWJlbmdhbGk9MjQ2MTtlLmpoYWRldmE9MjMzMztlLmpoYWd1amFyYXRpPTI3MTc7ZS5qaGFndXJtdWtoaT0yNTg5O2UuamhlaGFybWVuaWFuPTE0MDM7ZS5qaXM9MTIyOTI7ZS5qbW9ub3NwYWNlPTY1MzU0O2UuanBhcmVuPTkzODE7ZS5qc3VwZXJpb3I9NjkwO2Uuaz0xMDc7ZS5rYWJhc2hraXJjeXJpbGxpYz0xMTg1O2Uua2FiZW5nYWxpPTI0NTM7ZS5rYWN1dGU9NzcyOTtlLmthY3lyaWxsaWM9MTA4MjtlLmthZGVzY2VuZGVyY3lyaWxsaWM9MTE3OTtlLmthZGV2YT0yMzI1O2Uua2FmPTE0OTk7ZS5rYWZhcmFiaWM9MTYwMztlLmthZmRhZ2VzaD02NDMxNTtlLmthZmRhZ2VzaGhlYnJldz02NDMxNTtlLmthZmZpbmFsYXJhYmljPTY1MjQyO2Uua2FmaGVicmV3PTE0OTk7ZS5rYWZpbml0aWFsYXJhYmljPTY1MjQzO2Uua2FmbWVkaWFsYXJhYmljPTY1MjQ0O2Uua2FmcmFmZWhlYnJldz02NDMzMztlLmthZ3VqYXJhdGk9MjcwOTtlLmthZ3VybXVraGk9MjU4MTtlLmthaGlyYWdhbmE9MTIzNjM7ZS5rYWhvb2tjeXJpbGxpYz0xMjIwO2Uua2FrYXRha2FuYT0xMjQ1OTtlLmtha2F0YWthbmFoYWxmd2lkdGg9NjUzOTg7ZS5rYXBwYT05NTQ7ZS5rYXBwYXN5bWJvbGdyZWVrPTEwMDg7ZS5rYXB5ZW91bm1pZXVta29yZWFuPTEyNjU3O2Uua2FweWVvdW5waGlldXBoa29yZWFuPTEyNjc2O2Uua2FweWVvdW5waWV1cGtvcmVhbj0xMjY2NDtlLmthcHllb3Vuc3NhbmdwaWV1cGtvcmVhbj0xMjY2NTtlLmthcm9yaWlzcXVhcmU9MTMwNjk7ZS5rYXNoaWRhYXV0b2FyYWJpYz0xNjAwO2Uua2FzaGlkYWF1dG9ub3NpZGViZWFyaW5nYXJhYmljPTE2MDA7ZS5rYXNtYWxsa2F0YWthbmE9MTI1MzM7ZS5rYXNxdWFyZT0xMzE4ODtlLmthc3JhYXJhYmljPTE2MTY7ZS5rYXNyYXRhbmFyYWJpYz0xNjEzO2Uua2FzdHJva2VjeXJpbGxpYz0xMTgzO2Uua2F0YWhpcmFwcm9sb25nbWFya2hhbGZ3aWR0aD02NTM5MjtlLmthdmVydGljYWxzdHJva2VjeXJpbGxpYz0xMTgxO2Uua2JvcG9tb2ZvPTEyNTU4O2Uua2NhbHNxdWFyZT0xMzE5MztlLmtjYXJvbj00ODk7ZS5rY2VkaWxsYT0zMTE7ZS5rY2lyY2xlPTk0MzQ7ZS5rY29tbWFhY2NlbnQ9MzExO2Uua2RvdGJlbG93PTc3MzE7ZS5rZWhhcm1lbmlhbj0xNDEyO2Uua2VoaXJhZ2FuYT0xMjM2OTtlLmtla2F0YWthbmE9MTI0NjU7ZS5rZWthdGFrYW5haGFsZndpZHRoPTY1NDAxO2Uua2VuYXJtZW5pYW49MTM5MTtlLmtlc21hbGxrYXRha2FuYT0xMjUzNDtlLmtncmVlbmxhbmRpYz0zMTI7ZS5raGFiZW5nYWxpPTI0NTQ7ZS5raGFjeXJpbGxpYz0xMDkzO2Uua2hhZGV2YT0yMzI2O2Uua2hhZ3VqYXJhdGk9MjcxMDtlLmtoYWd1cm11a2hpPTI1ODI7ZS5raGFoYXJhYmljPTE1ODI7ZS5raGFoZmluYWxhcmFiaWM9NjUxOTA7ZS5raGFoaW5pdGlhbGFyYWJpYz02NTE5MTtlLmtoYWhtZWRpYWxhcmFiaWM9NjUxOTI7ZS5raGVpY29wdGljPTk5OTtlLmtoaGFkZXZhPTIzOTM7ZS5raGhhZ3VybXVraGk9MjY0OTtlLmtoaWV1a2hhY2lyY2xla29yZWFuPTEyOTIwO2Uua2hpZXVraGFwYXJlbmtvcmVhbj0xMjgyNDtlLmtoaWV1a2hjaXJjbGVrb3JlYW49MTI5MDY7ZS5raGlldWtoa29yZWFuPTEyNjE5O2Uua2hpZXVraHBhcmVua29yZWFuPTEyODEwO2Uua2hva2hhaXRoYWk9MzU4NjtlLmtob2tob250aGFpPTM1ODk7ZS5raG9raHVhdHRoYWk9MzU4NztlLmtob2tod2FpdGhhaT0zNTg4O2Uua2hvbXV0dGhhaT0zNjc1O2Uua2hvb2s9NDA5O2Uua2hvcmFraGFuZ3RoYWk9MzU5MDtlLmtoenNxdWFyZT0xMzIwMTtlLmtpaGlyYWdhbmE9MTIzNjU7ZS5raWthdGFrYW5hPTEyNDYxO2Uua2lrYXRha2FuYWhhbGZ3aWR0aD02NTM5OTtlLmtpcm9ndXJhbXVzcXVhcmU9MTMwNzc7ZS5raXJvbWVldG9ydXNxdWFyZT0xMzA3ODtlLmtpcm9zcXVhcmU9MTMwNzY7ZS5raXllb2thY2lyY2xla29yZWFuPTEyOTEwO2Uua2l5ZW9rYXBhcmVua29yZWFuPTEyODE0O2Uua2l5ZW9rY2lyY2xla29yZWFuPTEyODk2O2Uua2l5ZW9ra29yZWFuPTEyNTkzO2Uua2l5ZW9rcGFyZW5rb3JlYW49MTI4MDA7ZS5raXllb2tzaW9za29yZWFuPTEyNTk1O2Uua2plY3lyaWxsaWM9MTExNjtlLmtsaW5lYmVsb3c9NzczMztlLmtsc3F1YXJlPTEzMjA4O2Uua21jdWJlZHNxdWFyZT0xMzIyMjtlLmttb25vc3BhY2U9NjUzNTU7ZS5rbXNxdWFyZWRzcXVhcmU9MTMyMTg7ZS5rb2hpcmFnYW5hPTEyMzcxO2Uua29obXNxdWFyZT0xMzI0ODtlLmtva2FpdGhhaT0zNTg1O2Uua29rYXRha2FuYT0xMjQ2NztlLmtva2F0YWthbmFoYWxmd2lkdGg9NjU0MDI7ZS5rb29wb3NxdWFyZT0xMzA4NjtlLmtvcHBhY3lyaWxsaWM9MTE1MztlLmtvcmVhbnN0YW5kYXJkc3ltYm9sPTEyOTI3O2Uua29yb25pc2NtYj04MzU7ZS5rcGFyZW49OTM4MjtlLmtwYXNxdWFyZT0xMzIyNjtlLmtzaWN5cmlsbGljPTExMzU7ZS5rdHNxdWFyZT0xMzI2MztlLmt0dXJuZWQ9NjcwO2Uua3VoaXJhZ2FuYT0xMjM2NztlLmt1a2F0YWthbmE9MTI0NjM7ZS5rdWthdGFrYW5haGFsZndpZHRoPTY1NDAwO2Uua3ZzcXVhcmU9MTMyNDA7ZS5rd3NxdWFyZT0xMzI0NjtlLmw9MTA4O2UubGFiZW5nYWxpPTI0ODI7ZS5sYWN1dGU9MzE0O2UubGFkZXZhPTIzNTQ7ZS5sYWd1amFyYXRpPTI3Mzg7ZS5sYWd1cm11a2hpPTI2MTA7ZS5sYWtraGFuZ3lhb3RoYWk9MzY1MztlLmxhbWFsZWZmaW5hbGFyYWJpYz02NTI3NjtlLmxhbWFsZWZoYW16YWFib3ZlZmluYWxhcmFiaWM9NjUyNzI7ZS5sYW1hbGVmaGFtemFhYm92ZWlzb2xhdGVkYXJhYmljPTY1MjcxO2UubGFtYWxlZmhhbXphYmVsb3dmaW5hbGFyYWJpYz02NTI3NDtlLmxhbWFsZWZoYW16YWJlbG93aXNvbGF0ZWRhcmFiaWM9NjUyNzM7ZS5sYW1hbGVmaXNvbGF0ZWRhcmFiaWM9NjUyNzU7ZS5sYW1hbGVmbWFkZGFhYm92ZWZpbmFsYXJhYmljPTY1MjcwO2UubGFtYWxlZm1hZGRhYWJvdmVpc29sYXRlZGFyYWJpYz02NTI2OTtlLmxhbWFyYWJpYz0xNjA0O2UubGFtYmRhPTk1NTtlLmxhbWJkYXN0cm9rZT00MTE7ZS5sYW1lZD0xNTAwO2UubGFtZWRkYWdlc2g9NjQzMTY7ZS5sYW1lZGRhZ2VzaGhlYnJldz02NDMxNjtlLmxhbWVkaGVicmV3PTE1MDA7ZS5sYW1maW5hbGFyYWJpYz02NTI0NjtlLmxhbWhhaGluaXRpYWxhcmFiaWM9NjQ3MTQ7ZS5sYW1pbml0aWFsYXJhYmljPTY1MjQ3O2UubGFtamVlbWluaXRpYWxhcmFiaWM9NjQ3MTM7ZS5sYW1raGFoaW5pdGlhbGFyYWJpYz02NDcxNTtlLmxhbWxhbWhlaGlzb2xhdGVkYXJhYmljPTY1MDEwO2UubGFtbWVkaWFsYXJhYmljPTY1MjQ4O2UubGFtbWVlbWhhaGluaXRpYWxhcmFiaWM9NjQ5MDQ7ZS5sYW1tZWVtaW5pdGlhbGFyYWJpYz02NDcxNjtlLmxhcmdlY2lyY2xlPTk3MTE7ZS5sYmFyPTQxMDtlLmxiZWx0PTYyMDtlLmxib3BvbW9mbz0xMjU1NjtlLmxjYXJvbj0zMTg7ZS5sY2VkaWxsYT0zMTY7ZS5sY2lyY2xlPTk0MzU7ZS5sY2lyY3VtZmxleGJlbG93PTc3NDE7ZS5sY29tbWFhY2NlbnQ9MzE2O2UubGRvdD0zMjA7ZS5sZG90YWNjZW50PTMyMDtlLmxkb3RiZWxvdz03NzM1O2UubGRvdGJlbG93bWFjcm9uPTc3Mzc7ZS5sZWZ0YW5nbGVhYm92ZWNtYj03OTQ7ZS5sZWZ0dGFja2JlbG93Y21iPTc5MjtlLmxlc3M9NjA7ZS5sZXNzZXF1YWw9ODgwNDtlLmxlc3NlcXVhbG9yZ3JlYXRlcj04OTIyO2UubGVzc21vbm9zcGFjZT02NTMwODtlLmxlc3NvcmVxdWl2YWxlbnQ9ODgxODtlLmxlc3NvcmdyZWF0ZXI9ODgyMjtlLmxlc3NvdmVyZXF1YWw9ODgwNjtlLmxlc3NzbWFsbD02NTEyNDtlLmxlemg9NjIyO2UubGZibG9jaz05NjEyO2UubGhvb2tyZXRyb2ZsZXg9NjIxO2UubGlyYT04MzU2O2UubGl3bmFybWVuaWFuPTEzODg7ZS5saj00NTc7ZS5samVjeXJpbGxpYz0xMTEzO2UubGw9NjMxNjg7ZS5sbGFkZXZhPTIzNTU7ZS5sbGFndWphcmF0aT0yNzM5O2UubGxpbmViZWxvdz03NzM5O2UubGxsYWRldmE9MjM1NjtlLmxsdm9jYWxpY2JlbmdhbGk9MjUyOTtlLmxsdm9jYWxpY2RldmE9MjQwMTtlLmxsdm9jYWxpY3Zvd2Vsc2lnbmJlbmdhbGk9MjUzMTtlLmxsdm9jYWxpY3Zvd2Vsc2lnbmRldmE9MjQwMztlLmxtaWRkbGV0aWxkZT02MTk7ZS5sbW9ub3NwYWNlPTY1MzU2O2UubG1zcXVhcmU9MTMyNjQ7ZS5sb2NodWxhdGhhaT0zNjI4O2UubG9naWNhbGFuZD04NzQzO2UubG9naWNhbG5vdD0xNzI7ZS5sb2dpY2Fsbm90cmV2ZXJzZWQ9ODk3NjtlLmxvZ2ljYWxvcj04NzQ0O2UubG9saW5ndGhhaT0zNjIxO2UubG9uZ3M9MzgzO2UubG93bGluZWNlbnRlcmxpbmU9NjUxMDI7ZS5sb3dsaW5lY21iPTgxODtlLmxvd2xpbmVkYXNoZWQ9NjUxMDE7ZS5sb3plbmdlPTk2NzQ7ZS5scGFyZW49OTM4MztlLmxzbGFzaD0zMjI7ZS5sc3F1YXJlPTg0Njc7ZS5sc3VwZXJpb3I9NjMyMTQ7ZS5sdHNoYWRlPTk2MTc7ZS5sdXRoYWk9MzYyMjtlLmx2b2NhbGljYmVuZ2FsaT0yNDQ0O2UubHZvY2FsaWNkZXZhPTIzMTY7ZS5sdm9jYWxpY3Zvd2Vsc2lnbmJlbmdhbGk9MjUzMDtlLmx2b2NhbGljdm93ZWxzaWduZGV2YT0yNDAyO2UubHhzcXVhcmU9MTMyNjc7ZS5tPTEwOTtlLm1hYmVuZ2FsaT0yNDc4O2UubWFjcm9uPTE3NTtlLm1hY3JvbmJlbG93Y21iPTgxNztlLm1hY3JvbmNtYj03NzI7ZS5tYWNyb25sb3dtb2Q9NzE3O2UubWFjcm9ubW9ub3NwYWNlPTY1NTA3O2UubWFjdXRlPTc3NDM7ZS5tYWRldmE9MjM1MDtlLm1hZ3VqYXJhdGk9MjczNDtlLm1hZ3VybXVraGk9MjYwNjtlLm1haGFwYWtoaGVicmV3PTE0NDQ7ZS5tYWhhcGFraGxlZnRoZWJyZXc9MTQ0NDtlLm1haGlyYWdhbmE9MTI0MTQ7ZS5tYWljaGF0dGF3YWxvd2xlZnR0aGFpPTYzNjM3O2UubWFpY2hhdHRhd2Fsb3dyaWdodHRoYWk9NjM2MzY7ZS5tYWljaGF0dGF3YXRoYWk9MzY1OTtlLm1haWNoYXR0YXdhdXBwZXJsZWZ0dGhhaT02MzYzNTtlLm1haWVrbG93bGVmdHRoYWk9NjM2Mjg7ZS5tYWlla2xvd3JpZ2h0dGhhaT02MzYyNztlLm1haWVrdGhhaT0zNjU2O2UubWFpZWt1cHBlcmxlZnR0aGFpPTYzNjI2O2UubWFpaGFuYWthdGxlZnR0aGFpPTYzNjIwO2UubWFpaGFuYWthdHRoYWk9MzYzMztlLm1haXRhaWtodWxlZnR0aGFpPTYzNjI1O2UubWFpdGFpa2h1dGhhaT0zNjU1O2UubWFpdGhvbG93bGVmdHRoYWk9NjM2MzE7ZS5tYWl0aG9sb3dyaWdodHRoYWk9NjM2MzA7ZS5tYWl0aG90aGFpPTM2NTc7ZS5tYWl0aG91cHBlcmxlZnR0aGFpPTYzNjI5O2UubWFpdHJpbG93bGVmdHRoYWk9NjM2MzQ7ZS5tYWl0cmlsb3dyaWdodHRoYWk9NjM2MzM7ZS5tYWl0cml0aGFpPTM2NTg7ZS5tYWl0cml1cHBlcmxlZnR0aGFpPTYzNjMyO2UubWFpeWFtb2t0aGFpPTM2NTQ7ZS5tYWthdGFrYW5hPTEyNTEwO2UubWFrYXRha2FuYWhhbGZ3aWR0aD02NTQyMztlLm1hbGU9OTc5NDtlLm1hbnN5b25zcXVhcmU9MTMxMjc7ZS5tYXFhZmhlYnJldz0xNDcwO2UubWFycz05Nzk0O2UubWFzb3JhY2lyY2xlaGVicmV3PTE0NTU7ZS5tYXNxdWFyZT0xMzE4NztlLm1ib3BvbW9mbz0xMjU1MTtlLm1ic3F1YXJlPTEzMjY4O2UubWNpcmNsZT05NDM2O2UubWN1YmVkc3F1YXJlPTEzMjIxO2UubWRvdGFjY2VudD03NzQ1O2UubWRvdGJlbG93PTc3NDc7ZS5tZWVtYXJhYmljPTE2MDU7ZS5tZWVtZmluYWxhcmFiaWM9NjUyNTA7ZS5tZWVtaW5pdGlhbGFyYWJpYz02NTI1MTtlLm1lZW1tZWRpYWxhcmFiaWM9NjUyNTI7ZS5tZWVtbWVlbWluaXRpYWxhcmFiaWM9NjQ3MjE7ZS5tZWVtbWVlbWlzb2xhdGVkYXJhYmljPTY0NTg0O2UubWVldG9ydXNxdWFyZT0xMzEzMztlLm1laGlyYWdhbmE9MTI0MTc7ZS5tZWl6aWVyYXNxdWFyZT0xMzE4MjtlLm1la2F0YWthbmE9MTI1MTM7ZS5tZWthdGFrYW5haGFsZndpZHRoPTY1NDI2O2UubWVtPTE1MDI7ZS5tZW1kYWdlc2g9NjQzMTg7ZS5tZW1kYWdlc2hoZWJyZXc9NjQzMTg7ZS5tZW1oZWJyZXc9MTUwMjtlLm1lbmFybWVuaWFuPTEzOTY7ZS5tZXJraGFoZWJyZXc9MTQ0NTtlLm1lcmtoYWtlZnVsYWhlYnJldz0xNDQ2O2UubWVya2hha2VmdWxhbGVmdGhlYnJldz0xNDQ2O2UubWVya2hhbGVmdGhlYnJldz0xNDQ1O2UubWhvb2s9NjI1O2UubWh6c3F1YXJlPTEzMjAyO2UubWlkZGxlZG90a2F0YWthbmFoYWxmd2lkdGg9NjUzODE7ZS5taWRkb3Q9MTgzO2UubWlldW1hY2lyY2xla29yZWFuPTEyOTE0O2UubWlldW1hcGFyZW5rb3JlYW49MTI4MTg7ZS5taWV1bWNpcmNsZWtvcmVhbj0xMjkwMDtlLm1pZXVta29yZWFuPTEyNjA5O2UubWlldW1wYW5zaW9za29yZWFuPTEyNjU2O2UubWlldW1wYXJlbmtvcmVhbj0xMjgwNDtlLm1pZXVtcGlldXBrb3JlYW49MTI2NTQ7ZS5taWV1bXNpb3Nrb3JlYW49MTI2NTU7ZS5taWhpcmFnYW5hPTEyNDE1O2UubWlrYXRha2FuYT0xMjUxMTtlLm1pa2F0YWthbmFoYWxmd2lkdGg9NjU0MjQ7ZS5taW51cz04NzIyO2UubWludXNiZWxvd2NtYj04MDA7ZS5taW51c2NpcmNsZT04ODU0O2UubWludXNtb2Q9NzI3O2UubWludXNwbHVzPTg3MjM7ZS5taW51dGU9ODI0MjtlLm1pcmliYWFydXNxdWFyZT0xMzEzMDtlLm1pcmlzcXVhcmU9MTMxMjk7ZS5tbG9uZ2xlZ3R1cm5lZD02MjQ7ZS5tbHNxdWFyZT0xMzIwNjtlLm1tY3ViZWRzcXVhcmU9MTMyMTk7ZS5tbW9ub3NwYWNlPTY1MzU3O2UubW1zcXVhcmVkc3F1YXJlPTEzMjE1O2UubW9oaXJhZ2FuYT0xMjQxODtlLm1vaG1zcXVhcmU9MTMyNDk7ZS5tb2thdGFrYW5hPTEyNTE0O2UubW9rYXRha2FuYWhhbGZ3aWR0aD02NTQyNztlLm1vbHNxdWFyZT0xMzI3MDtlLm1vbWF0aGFpPTM2MTc7ZS5tb3ZlcnNzcXVhcmU9MTMyMjM7ZS5tb3ZlcnNzcXVhcmVkc3F1YXJlPTEzMjI0O2UubXBhcmVuPTkzODQ7ZS5tcGFzcXVhcmU9MTMyMjc7ZS5tc3NxdWFyZT0xMzIzNTtlLm1zdXBlcmlvcj02MzIxNTtlLm10dXJuZWQ9NjIzO2UubXU9MTgxO2UubXUxPTE4MTtlLm11YXNxdWFyZT0xMzE4NjtlLm11Y2hncmVhdGVyPTg4MTE7ZS5tdWNobGVzcz04ODEwO2UubXVmc3F1YXJlPTEzMTk2O2UubXVncmVlaz05NTY7ZS5tdWdzcXVhcmU9MTMxOTc7ZS5tdWhpcmFnYW5hPTEyNDE2O2UubXVrYXRha2FuYT0xMjUxMjtlLm11a2F0YWthbmFoYWxmd2lkdGg9NjU0MjU7ZS5tdWxzcXVhcmU9MTMyMDU7ZS5tdWx0aXBseT0yMTU7ZS5tdW1zcXVhcmU9MTMyMTE7ZS5tdW5haGhlYnJldz0xNDQzO2UubXVuYWhsZWZ0aGVicmV3PTE0NDM7ZS5tdXNpY2Fsbm90ZT05ODM0O2UubXVzaWNhbG5vdGVkYmw9OTgzNTtlLm11c2ljZmxhdHNpZ249OTgzNztlLm11c2ljc2hhcnBzaWduPTk4Mzk7ZS5tdXNzcXVhcmU9MTMyMzQ7ZS5tdXZzcXVhcmU9MTMyMzg7ZS5tdXdzcXVhcmU9MTMyNDQ7ZS5tdm1lZ2FzcXVhcmU9MTMyNDE7ZS5tdnNxdWFyZT0xMzIzOTtlLm13bWVnYXNxdWFyZT0xMzI0NztlLm13c3F1YXJlPTEzMjQ1O2Uubj0xMTA7ZS5uYWJlbmdhbGk9MjQ3MjtlLm5hYmxhPTg3MTE7ZS5uYWN1dGU9MzI0O2UubmFkZXZhPTIzNDQ7ZS5uYWd1amFyYXRpPTI3Mjg7ZS5uYWd1cm11a2hpPTI2MDA7ZS5uYWhpcmFnYW5hPTEyMzk0O2UubmFrYXRha2FuYT0xMjQ5MDtlLm5ha2F0YWthbmFoYWxmd2lkdGg9NjU0MTM7ZS5uYXBvc3Ryb3BoZT0zMjk7ZS5uYXNxdWFyZT0xMzE4NTtlLm5ib3BvbW9mbz0xMjU1NTtlLm5ic3BhY2U9MTYwO2UubmNhcm9uPTMyODtlLm5jZWRpbGxhPTMyNjtlLm5jaXJjbGU9OTQzNztlLm5jaXJjdW1mbGV4YmVsb3c9Nzc1NTtlLm5jb21tYWFjY2VudD0zMjY7ZS5uZG90YWNjZW50PTc3NDk7ZS5uZG90YmVsb3c9Nzc1MTtlLm5laGlyYWdhbmE9MTIzOTc7ZS5uZWthdGFrYW5hPTEyNDkzO2UubmVrYXRha2FuYWhhbGZ3aWR0aD02NTQxNjtlLm5ld3NoZXFlbHNpZ249ODM2MjtlLm5mc3F1YXJlPTEzMTk1O2UubmdhYmVuZ2FsaT0yNDU3O2UubmdhZGV2YT0yMzI5O2UubmdhZ3VqYXJhdGk9MjcxMztlLm5nYWd1cm11a2hpPTI1ODU7ZS5uZ29uZ3V0aGFpPTM1OTE7ZS5uaGlyYWdhbmE9MTI0MzU7ZS5uaG9va2xlZnQ9NjI2O2Uubmhvb2tyZXRyb2ZsZXg9NjI3O2UubmlldW5hY2lyY2xla29yZWFuPTEyOTExO2UubmlldW5hcGFyZW5rb3JlYW49MTI4MTU7ZS5uaWV1bmNpZXVja29yZWFuPTEyNTk3O2UubmlldW5jaXJjbGVrb3JlYW49MTI4OTc7ZS5uaWV1bmhpZXVoa29yZWFuPTEyNTk4O2UubmlldW5rb3JlYW49MTI1OTY7ZS5uaWV1bnBhbnNpb3Nrb3JlYW49MTI2NDg7ZS5uaWV1bnBhcmVua29yZWFuPTEyODAxO2UubmlldW5zaW9za29yZWFuPTEyNjQ3O2UubmlldW50aWtldXRrb3JlYW49MTI2NDY7ZS5uaWhpcmFnYW5hPTEyMzk1O2UubmlrYXRha2FuYT0xMjQ5MTtlLm5pa2F0YWthbmFoYWxmd2lkdGg9NjU0MTQ7ZS5uaWtoYWhpdGxlZnR0aGFpPTYzNjQxO2UubmlraGFoaXR0aGFpPTM2NjE7ZS5uaW5lPTU3O2UubmluZWFyYWJpYz0xNjQxO2UubmluZWJlbmdhbGk9MjU0MztlLm5pbmVjaXJjbGU9OTMyMDtlLm5pbmVjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmPTEwMTMwO2UubmluZWRldmE9MjQxNTtlLm5pbmVndWphcmF0aT0yNzk5O2UubmluZWd1cm11a2hpPTI2NzE7ZS5uaW5laGFja2FyYWJpYz0xNjQxO2UubmluZWhhbmd6aG91PTEyMzI5O2UubmluZWlkZW9ncmFwaGljcGFyZW49MTI4NDA7ZS5uaW5laW5mZXJpb3I9ODMyOTtlLm5pbmVtb25vc3BhY2U9NjUzMDU7ZS5uaW5lb2xkc3R5bGU9NjMyODk7ZS5uaW5lcGFyZW49OTM0MDtlLm5pbmVwZXJpb2Q9OTM2MDtlLm5pbmVwZXJzaWFuPTE3ODU7ZS5uaW5lcm9tYW49ODU2ODtlLm5pbmVzdXBlcmlvcj04MzEzO2UubmluZXRlZW5jaXJjbGU9OTMzMDtlLm5pbmV0ZWVucGFyZW49OTM1MDtlLm5pbmV0ZWVucGVyaW9kPTkzNzA7ZS5uaW5ldGhhaT0zNjczO2Uubmo9NDYwO2UubmplY3lyaWxsaWM9MTExNDtlLm5rYXRha2FuYT0xMjUzMTtlLm5rYXRha2FuYWhhbGZ3aWR0aD02NTQzNztlLm5sZWdyaWdodGxvbmc9NDE0O2UubmxpbmViZWxvdz03NzUzO2Uubm1vbm9zcGFjZT02NTM1ODtlLm5tc3F1YXJlPTEzMjEwO2Uubm5hYmVuZ2FsaT0yNDY3O2Uubm5hZGV2YT0yMzM5O2Uubm5hZ3VqYXJhdGk9MjcyMztlLm5uYWd1cm11a2hpPTI1OTU7ZS5ubm5hZGV2YT0yMzQ1O2Uubm9oaXJhZ2FuYT0xMjM5ODtlLm5va2F0YWthbmE9MTI0OTQ7ZS5ub2thdGFrYW5haGFsZndpZHRoPTY1NDE3O2Uubm9uYnJlYWtpbmdzcGFjZT0xNjA7ZS5ub25lbnRoYWk9MzYwMztlLm5vbnV0aGFpPTM2MDk7ZS5ub29uYXJhYmljPTE2MDY7ZS5ub29uZmluYWxhcmFiaWM9NjUyNTQ7ZS5ub29uZ2h1bm5hYXJhYmljPTE3MjI7ZS5ub29uZ2h1bm5hZmluYWxhcmFiaWM9NjQ0MTU7ZS5ub29uaW5pdGlhbGFyYWJpYz02NTI1NTtlLm5vb25qZWVtaW5pdGlhbGFyYWJpYz02NDcyMjtlLm5vb25qZWVtaXNvbGF0ZWRhcmFiaWM9NjQ1ODc7ZS5ub29ubWVkaWFsYXJhYmljPTY1MjU2O2Uubm9vbm1lZW1pbml0aWFsYXJhYmljPTY0NzI1O2Uubm9vbm1lZW1pc29sYXRlZGFyYWJpYz02NDU5MDtlLm5vb25ub29uZmluYWxhcmFiaWM9NjQ2NTM7ZS5ub3Rjb250YWlucz04NzE2O2Uubm90ZWxlbWVudD04NzEzO2Uubm90ZWxlbWVudG9mPTg3MTM7ZS5ub3RlcXVhbD04ODAwO2Uubm90Z3JlYXRlcj04ODE1O2Uubm90Z3JlYXRlcm5vcmVxdWFsPTg4MTc7ZS5ub3RncmVhdGVybm9ybGVzcz04ODI1O2Uubm90aWRlbnRpY2FsPTg4MDI7ZS5ub3RsZXNzPTg4MTQ7ZS5ub3RsZXNzbm9yZXF1YWw9ODgxNjtlLm5vdHBhcmFsbGVsPTg3NDI7ZS5ub3RwcmVjZWRlcz04ODMyO2Uubm90c3Vic2V0PTg4MzY7ZS5ub3RzdWNjZWVkcz04ODMzO2Uubm90c3VwZXJzZXQ9ODgzNztlLm5vd2FybWVuaWFuPTEzOTg7ZS5ucGFyZW49OTM4NTtlLm5zc3F1YXJlPTEzMjMzO2UubnN1cGVyaW9yPTgzMTk7ZS5udGlsZGU9MjQxO2UubnU9OTU3O2UubnVoaXJhZ2FuYT0xMjM5NjtlLm51a2F0YWthbmE9MTI0OTI7ZS5udWthdGFrYW5haGFsZndpZHRoPTY1NDE1O2UubnVrdGFiZW5nYWxpPTI0OTI7ZS5udWt0YWRldmE9MjM2NDtlLm51a3RhZ3VqYXJhdGk9Mjc0ODtlLm51a3RhZ3VybXVraGk9MjYyMDtlLm51bWJlcnNpZ249MzU7ZS5udW1iZXJzaWdubW9ub3NwYWNlPTY1MjgzO2UubnVtYmVyc2lnbnNtYWxsPTY1MTE5O2UubnVtZXJhbHNpZ25ncmVlaz04ODQ7ZS5udW1lcmFsc2lnbmxvd2VyZ3JlZWs9ODg1O2UubnVtZXJvPTg0NzA7ZS5udW49MTUwNDtlLm51bmRhZ2VzaD02NDMyMDtlLm51bmRhZ2VzaGhlYnJldz02NDMyMDtlLm51bmhlYnJldz0xNTA0O2UubnZzcXVhcmU9MTMyMzc7ZS5ud3NxdWFyZT0xMzI0MztlLm55YWJlbmdhbGk9MjQ2MjtlLm55YWRldmE9MjMzNDtlLm55YWd1amFyYXRpPTI3MTg7ZS5ueWFndXJtdWtoaT0yNTkwO2Uubz0xMTE7ZS5vYWN1dGU9MjQzO2Uub2FuZ3RoYWk9MzYyOTtlLm9iYXJyZWQ9NjI5O2Uub2JhcnJlZGN5cmlsbGljPTEyNTc7ZS5vYmFycmVkZGllcmVzaXNjeXJpbGxpYz0xMjU5O2Uub2JlbmdhbGk9MjQ1MTtlLm9ib3BvbW9mbz0xMjU3MTtlLm9icmV2ZT0zMzU7ZS5vY2FuZHJhZGV2YT0yMzIxO2Uub2NhbmRyYWd1amFyYXRpPTI3MDU7ZS5vY2FuZHJhdm93ZWxzaWduZGV2YT0yMzc3O2Uub2NhbmRyYXZvd2Vsc2lnbmd1amFyYXRpPTI3NjE7ZS5vY2Fyb249NDY2O2Uub2NpcmNsZT05NDM4O2Uub2NpcmN1bWZsZXg9MjQ0O2Uub2NpcmN1bWZsZXhhY3V0ZT03ODg5O2Uub2NpcmN1bWZsZXhkb3RiZWxvdz03ODk3O2Uub2NpcmN1bWZsZXhncmF2ZT03ODkxO2Uub2NpcmN1bWZsZXhob29rYWJvdmU9Nzg5MztlLm9jaXJjdW1mbGV4dGlsZGU9Nzg5NTtlLm9jeXJpbGxpYz0xMDg2O2Uub2RibGFjdXRlPTMzNztlLm9kYmxncmF2ZT01MjU7ZS5vZGV2YT0yMzIzO2Uub2RpZXJlc2lzPTI0NjtlLm9kaWVyZXNpc2N5cmlsbGljPTEyNTU7ZS5vZG90YmVsb3c9Nzg4NTtlLm9lPTMzOTtlLm9la29yZWFuPTEyNjM0O2Uub2dvbmVrPTczMTtlLm9nb25la2NtYj04MDg7ZS5vZ3JhdmU9MjQyO2Uub2d1amFyYXRpPTI3MDc7ZS5vaGFybWVuaWFuPTE0MTM7ZS5vaGlyYWdhbmE9MTIzNjI7ZS5vaG9va2Fib3ZlPTc4ODc7ZS5vaG9ybj00MTc7ZS5vaG9ybmFjdXRlPTc4OTk7ZS5vaG9ybmRvdGJlbG93PTc5MDc7ZS5vaG9ybmdyYXZlPTc5MDE7ZS5vaG9ybmhvb2thYm92ZT03OTAzO2Uub2hvcm50aWxkZT03OTA1O2Uub2h1bmdhcnVtbGF1dD0zMzc7ZS5vaT00MTk7ZS5vaW52ZXJ0ZWRicmV2ZT01Mjc7ZS5va2F0YWthbmE9MTI0NTg7ZS5va2F0YWthbmFoYWxmd2lkdGg9NjUzOTc7ZS5va29yZWFuPTEyNjMxO2Uub2xlaGVicmV3PTE0NTE7ZS5vbWFjcm9uPTMzMztlLm9tYWNyb25hY3V0ZT03NzYzO2Uub21hY3JvbmdyYXZlPTc3NjE7ZS5vbWRldmE9MjM4NDtlLm9tZWdhPTk2OTtlLm9tZWdhMT05ODI7ZS5vbWVnYWN5cmlsbGljPTExMjE7ZS5vbWVnYWxhdGluY2xvc2VkPTYzMTtlLm9tZWdhcm91bmRjeXJpbGxpYz0xMTQ3O2Uub21lZ2F0aXRsb2N5cmlsbGljPTExNDk7ZS5vbWVnYXRvbm9zPTk3NDtlLm9tZ3VqYXJhdGk9Mjc2ODtlLm9taWNyb249OTU5O2Uub21pY3JvbnRvbm9zPTk3MjtlLm9tb25vc3BhY2U9NjUzNTk7ZS5vbmU9NDk7ZS5vbmVhcmFiaWM9MTYzMztlLm9uZWJlbmdhbGk9MjUzNTtlLm9uZWNpcmNsZT05MzEyO2Uub25lY2lyY2xlaW52ZXJzZXNhbnNzZXJpZj0xMDEyMjtlLm9uZWRldmE9MjQwNztlLm9uZWRvdGVubGVhZGVyPTgyMjg7ZS5vbmVlaWdodGg9ODUzOTtlLm9uZWZpdHRlZD02MzE5NjtlLm9uZWd1amFyYXRpPTI3OTE7ZS5vbmVndXJtdWtoaT0yNjYzO2Uub25laGFja2FyYWJpYz0xNjMzO2Uub25laGFsZj0xODk7ZS5vbmVoYW5nemhvdT0xMjMyMTtlLm9uZWlkZW9ncmFwaGljcGFyZW49MTI4MzI7ZS5vbmVpbmZlcmlvcj04MzIxO2Uub25lbW9ub3NwYWNlPTY1Mjk3O2Uub25lbnVtZXJhdG9yYmVuZ2FsaT0yNTQ4O2Uub25lb2xkc3R5bGU9NjMyODE7ZS5vbmVwYXJlbj05MzMyO2Uub25lcGVyaW9kPTkzNTI7ZS5vbmVwZXJzaWFuPTE3Nzc7ZS5vbmVxdWFydGVyPTE4ODtlLm9uZXJvbWFuPTg1NjA7ZS5vbmVzdXBlcmlvcj0xODU7ZS5vbmV0aGFpPTM2NjU7ZS5vbmV0aGlyZD04NTMxO2Uub29nb25laz00OTE7ZS5vb2dvbmVrbWFjcm9uPTQ5MztlLm9vZ3VybXVraGk9MjU3OTtlLm9vbWF0cmFndXJtdWtoaT0yNjM1O2Uub29wZW49NTk2O2Uub3BhcmVuPTkzODY7ZS5vcGVuYnVsbGV0PTk3MDI7ZS5vcHRpb249ODk5NztlLm9yZGZlbWluaW5lPTE3MDtlLm9yZG1hc2N1bGluZT0xODY7ZS5vcnRob2dvbmFsPTg3MzU7ZS5vc2hvcnRkZXZhPTIzMjI7ZS5vc2hvcnR2b3dlbHNpZ25kZXZhPTIzNzg7ZS5vc2xhc2g9MjQ4O2Uub3NsYXNoYWN1dGU9NTExO2Uub3NtYWxsaGlyYWdhbmE9MTIzNjE7ZS5vc21hbGxrYXRha2FuYT0xMjQ1NztlLm9zbWFsbGthdGFrYW5haGFsZndpZHRoPTY1Mzg3O2Uub3N0cm9rZWFjdXRlPTUxMTtlLm9zdXBlcmlvcj02MzIxNjtlLm90Y3lyaWxsaWM9MTE1MTtlLm90aWxkZT0yNDU7ZS5vdGlsZGVhY3V0ZT03NzU3O2Uub3RpbGRlZGllcmVzaXM9Nzc1OTtlLm91Ym9wb21vZm89MTI1Nzc7ZS5vdmVybGluZT04MjU0O2Uub3ZlcmxpbmVjZW50ZXJsaW5lPTY1MDk4O2Uub3ZlcmxpbmVjbWI9NzczO2Uub3ZlcmxpbmVkYXNoZWQ9NjUwOTc7ZS5vdmVybGluZWRibHdhdnk9NjUxMDA7ZS5vdmVybGluZXdhdnk9NjUwOTk7ZS5vdmVyc2NvcmU9MTc1O2Uub3Zvd2Vsc2lnbmJlbmdhbGk9MjUwNztlLm92b3dlbHNpZ25kZXZhPTIzNzk7ZS5vdm93ZWxzaWduZ3VqYXJhdGk9Mjc2MztlLnA9MTEyO2UucGFhbXBzc3F1YXJlPTEzMTg0O2UucGFhc2VudG9zcXVhcmU9MTMwOTk7ZS5wYWJlbmdhbGk9MjQ3NDtlLnBhY3V0ZT03NzY1O2UucGFkZXZhPTIzNDY7ZS5wYWdlZG93bj04NjcxO2UucGFnZXVwPTg2NzA7ZS5wYWd1amFyYXRpPTI3MzA7ZS5wYWd1cm11a2hpPTI2MDI7ZS5wYWhpcmFnYW5hPTEyNDAxO2UucGFpeWFubm9pdGhhaT0zNjMxO2UucGFrYXRha2FuYT0xMjQ5NztlLnBhbGF0YWxpemF0aW9uY3lyaWxsaWNjbWI9MTE1NjtlLnBhbG9jaGthY3lyaWxsaWM9MTIxNjtlLnBhbnNpb3Nrb3JlYW49MTI2NzE7ZS5wYXJhZ3JhcGg9MTgyO2UucGFyYWxsZWw9ODc0MTtlLnBhcmVubGVmdD00MDtlLnBhcmVubGVmdGFsdG9uZWFyYWJpYz02NDgzMDtlLnBhcmVubGVmdGJ0PTYzNzI1O2UucGFyZW5sZWZ0ZXg9NjM3MjQ7ZS5wYXJlbmxlZnRpbmZlcmlvcj04MzMzO2UucGFyZW5sZWZ0bW9ub3NwYWNlPTY1Mjg4O2UucGFyZW5sZWZ0c21hbGw9NjUxMTM7ZS5wYXJlbmxlZnRzdXBlcmlvcj04MzE3O2UucGFyZW5sZWZ0dHA9NjM3MjM7ZS5wYXJlbmxlZnR2ZXJ0aWNhbD02NTA3NztlLnBhcmVucmlnaHQ9NDE7ZS5wYXJlbnJpZ2h0YWx0b25lYXJhYmljPTY0ODMxO2UucGFyZW5yaWdodGJ0PTYzNzM2O2UucGFyZW5yaWdodGV4PTYzNzM1O2UucGFyZW5yaWdodGluZmVyaW9yPTgzMzQ7ZS5wYXJlbnJpZ2h0bW9ub3NwYWNlPTY1Mjg5O2UucGFyZW5yaWdodHNtYWxsPTY1MTE0O2UucGFyZW5yaWdodHN1cGVyaW9yPTgzMTg7ZS5wYXJlbnJpZ2h0dHA9NjM3MzQ7ZS5wYXJlbnJpZ2h0dmVydGljYWw9NjUwNzg7ZS5wYXJ0aWFsZGlmZj04NzA2O2UucGFzZXFoZWJyZXc9MTQ3MjtlLnBhc2h0YWhlYnJldz0xNDMzO2UucGFzcXVhcmU9MTMyMjU7ZS5wYXRhaD0xNDYzO2UucGF0YWgxMT0xNDYzO2UucGF0YWgxZD0xNDYzO2UucGF0YWgyYT0xNDYzO2UucGF0YWhoZWJyZXc9MTQ2MztlLnBhdGFobmFycm93aGVicmV3PTE0NjM7ZS5wYXRhaHF1YXJ0ZXJoZWJyZXc9MTQ2MztlLnBhdGFod2lkZWhlYnJldz0xNDYzO2UucGF6ZXJoZWJyZXc9MTQ0MTtlLnBib3BvbW9mbz0xMjU1MDtlLnBjaXJjbGU9OTQzOTtlLnBkb3RhY2NlbnQ9Nzc2NztlLnBlPTE1MDg7ZS5wZWN5cmlsbGljPTEwODc7ZS5wZWRhZ2VzaD02NDMyNDtlLnBlZGFnZXNoaGVicmV3PTY0MzI0O2UucGVlemlzcXVhcmU9MTMxMTU7ZS5wZWZpbmFsZGFnZXNoaGVicmV3PTY0MzIzO2UucGVoYXJhYmljPTE2NjI7ZS5wZWhhcm1lbmlhbj0xNDAyO2UucGVoZWJyZXc9MTUwODtlLnBlaGZpbmFsYXJhYmljPTY0MzQzO2UucGVoaW5pdGlhbGFyYWJpYz02NDM0NDtlLnBlaGlyYWdhbmE9MTI0MTA7ZS5wZWhtZWRpYWxhcmFiaWM9NjQzNDU7ZS5wZWthdGFrYW5hPTEyNTA2O2UucGVtaWRkbGVob29rY3lyaWxsaWM9MTE5MTtlLnBlcmFmZWhlYnJldz02NDMzNDtlLnBlcmNlbnQ9Mzc7ZS5wZXJjZW50YXJhYmljPTE2NDI7ZS5wZXJjZW50bW9ub3NwYWNlPTY1Mjg1O2UucGVyY2VudHNtYWxsPTY1MTMwO2UucGVyaW9kPTQ2O2UucGVyaW9kYXJtZW5pYW49MTQxNztlLnBlcmlvZGNlbnRlcmVkPTE4MztlLnBlcmlvZGhhbGZ3aWR0aD02NTM3NztlLnBlcmlvZGluZmVyaW9yPTYzMjA3O2UucGVyaW9kbW9ub3NwYWNlPTY1Mjk0O2UucGVyaW9kc21hbGw9NjUxMDY7ZS5wZXJpb2RzdXBlcmlvcj02MzIwODtlLnBlcmlzcG9tZW5pZ3JlZWtjbWI9ODM0O2UucGVycGVuZGljdWxhcj04ODY5O2UucGVydGhvdXNhbmQ9ODI0MDtlLnBlc2V0YT04MzU5O2UucGZzcXVhcmU9MTMxOTQ7ZS5waGFiZW5nYWxpPTI0NzU7ZS5waGFkZXZhPTIzNDc7ZS5waGFndWphcmF0aT0yNzMxO2UucGhhZ3VybXVraGk9MjYwMztlLnBoaT05NjY7ZS5waGkxPTk4MTtlLnBoaWV1cGhhY2lyY2xla29yZWFuPTEyOTIyO2UucGhpZXVwaGFwYXJlbmtvcmVhbj0xMjgyNjtlLnBoaWV1cGhjaXJjbGVrb3JlYW49MTI5MDg7ZS5waGlldXBoa29yZWFuPTEyNjIxO2UucGhpZXVwaHBhcmVua29yZWFuPTEyODEyO2UucGhpbGF0aW49NjMyO2UucGhpbnRodXRoYWk9MzY0MjtlLnBoaXN5bWJvbGdyZWVrPTk4MTtlLnBob29rPTQyMTtlLnBob3BoYW50aGFpPTM2MTQ7ZS5waG9waHVuZ3RoYWk9MzYxMjtlLnBob3NhbXBoYW90aGFpPTM2MTY7ZS5waT05NjA7ZS5waWV1cGFjaXJjbGVrb3JlYW49MTI5MTU7ZS5waWV1cGFwYXJlbmtvcmVhbj0xMjgxOTtlLnBpZXVwY2lldWNrb3JlYW49MTI2NjI7ZS5waWV1cGNpcmNsZWtvcmVhbj0xMjkwMTtlLnBpZXVwa2l5ZW9ra29yZWFuPTEyNjU4O2UucGlldXBrb3JlYW49MTI2MTA7ZS5waWV1cHBhcmVua29yZWFuPTEyODA1O2UucGlldXBzaW9za2l5ZW9ra29yZWFuPTEyNjYwO2UucGlldXBzaW9za29yZWFuPTEyNjEyO2UucGlldXBzaW9zdGlrZXV0a29yZWFuPTEyNjYxO2UucGlldXB0aGlldXRoa29yZWFuPTEyNjYzO2UucGlldXB0aWtldXRrb3JlYW49MTI2NTk7ZS5waWhpcmFnYW5hPTEyNDA0O2UucGlrYXRha2FuYT0xMjUwMDtlLnBpc3ltYm9sZ3JlZWs9OTgyO2UucGl3cmFybWVuaWFuPTE0MTE7ZS5wbGFuY2tvdmVyMnBpPTg0NjM7ZS5wbGFuY2tvdmVyMnBpMT04NDYzO2UucGx1cz00MztlLnBsdXNiZWxvd2NtYj03OTk7ZS5wbHVzY2lyY2xlPTg4NTM7ZS5wbHVzbWludXM9MTc3O2UucGx1c21vZD03MjY7ZS5wbHVzbW9ub3NwYWNlPTY1MjkxO2UucGx1c3NtYWxsPTY1MTIyO2UucGx1c3N1cGVyaW9yPTgzMTQ7ZS5wbW9ub3NwYWNlPTY1MzYwO2UucG1zcXVhcmU9MTMyNzI7ZS5wb2hpcmFnYW5hPTEyNDEzO2UucG9pbnRpbmdpbmRleGRvd253aGl0ZT05NzU5O2UucG9pbnRpbmdpbmRleGxlZnR3aGl0ZT05NzU2O2UucG9pbnRpbmdpbmRleHJpZ2h0d2hpdGU9OTc1ODtlLnBvaW50aW5naW5kZXh1cHdoaXRlPTk3NTc7ZS5wb2thdGFrYW5hPTEyNTA5O2UucG9wbGF0aGFpPTM2MTE7ZS5wb3N0YWxtYXJrPTEyMzA2O2UucG9zdGFsbWFya2ZhY2U9MTIzMjA7ZS5wcGFyZW49OTM4NztlLnByZWNlZGVzPTg4MjY7ZS5wcmVzY3JpcHRpb249ODQ3ODtlLnByaW1lbW9kPTY5NztlLnByaW1lcmV2ZXJzZWQ9ODI0NTtlLnByb2R1Y3Q9ODcxOTtlLnByb2plY3RpdmU9ODk2NTtlLnByb2xvbmdlZGthbmE9MTI1NDA7ZS5wcm9wZWxsb3I9ODk4NDtlLnByb3BlcnN1YnNldD04ODM0O2UucHJvcGVyc3VwZXJzZXQ9ODgzNTtlLnByb3BvcnRpb249ODc1OTtlLnByb3BvcnRpb25hbD04NzMzO2UucHNpPTk2ODtlLnBzaWN5cmlsbGljPTExMzc7ZS5wc2lsaXBuZXVtYXRhY3lyaWxsaWNjbWI9MTE1ODtlLnBzc3F1YXJlPTEzMjMyO2UucHVoaXJhZ2FuYT0xMjQwNztlLnB1a2F0YWthbmE9MTI1MDM7ZS5wdnNxdWFyZT0xMzIzNjtlLnB3c3F1YXJlPTEzMjQyO2UucT0xMTM7ZS5xYWRldmE9MjM5MjtlLnFhZG1haGVicmV3PTE0NDg7ZS5xYWZhcmFiaWM9MTYwMjtlLnFhZmZpbmFsYXJhYmljPTY1MjM4O2UucWFmaW5pdGlhbGFyYWJpYz02NTIzOTtlLnFhZm1lZGlhbGFyYWJpYz02NTI0MDtlLnFhbWF0cz0xNDY0O2UucWFtYXRzMTA9MTQ2NDtlLnFhbWF0czFhPTE0NjQ7ZS5xYW1hdHMxYz0xNDY0O2UucWFtYXRzMjc9MTQ2NDtlLnFhbWF0czI5PTE0NjQ7ZS5xYW1hdHMzMz0xNDY0O2UucWFtYXRzZGU9MTQ2NDtlLnFhbWF0c2hlYnJldz0xNDY0O2UucWFtYXRzbmFycm93aGVicmV3PTE0NjQ7ZS5xYW1hdHNxYXRhbmhlYnJldz0xNDY0O2UucWFtYXRzcWF0YW5uYXJyb3doZWJyZXc9MTQ2NDtlLnFhbWF0c3FhdGFucXVhcnRlcmhlYnJldz0xNDY0O2UucWFtYXRzcWF0YW53aWRlaGVicmV3PTE0NjQ7ZS5xYW1hdHNxdWFydGVyaGVicmV3PTE0NjQ7ZS5xYW1hdHN3aWRlaGVicmV3PTE0NjQ7ZS5xYXJuZXlwYXJhaGVicmV3PTE0Mzk7ZS5xYm9wb21vZm89MTI1NjE7ZS5xY2lyY2xlPTk0NDA7ZS5xaG9vaz02NzI7ZS5xbW9ub3NwYWNlPTY1MzYxO2UucW9mPTE1MTE7ZS5xb2ZkYWdlc2g9NjQzMjc7ZS5xb2ZkYWdlc2hoZWJyZXc9NjQzMjc7ZS5xb2ZoZWJyZXc9MTUxMTtlLnFwYXJlbj05Mzg4O2UucXVhcnRlcm5vdGU9OTgzMztlLnF1YnV0cz0xNDY3O2UucXVidXRzMTg9MTQ2NztlLnF1YnV0czI1PTE0Njc7ZS5xdWJ1dHMzMT0xNDY3O2UucXVidXRzaGVicmV3PTE0Njc7ZS5xdWJ1dHNuYXJyb3doZWJyZXc9MTQ2NztlLnF1YnV0c3F1YXJ0ZXJoZWJyZXc9MTQ2NztlLnF1YnV0c3dpZGVoZWJyZXc9MTQ2NztlLnF1ZXN0aW9uPTYzO2UucXVlc3Rpb25hcmFiaWM9MTU2NztlLnF1ZXN0aW9uYXJtZW5pYW49MTM3NDtlLnF1ZXN0aW9uZG93bj0xOTE7ZS5xdWVzdGlvbmRvd25zbWFsbD02MzQyMztlLnF1ZXN0aW9uZ3JlZWs9ODk0O2UucXVlc3Rpb25tb25vc3BhY2U9NjUzMTE7ZS5xdWVzdGlvbnNtYWxsPTYzMjk1O2UucXVvdGVkYmw9MzQ7ZS5xdW90ZWRibGJhc2U9ODIyMjtlLnF1b3RlZGJsbGVmdD04MjIwO2UucXVvdGVkYmxtb25vc3BhY2U9NjUyODI7ZS5xdW90ZWRibHByaW1lPTEyMzE4O2UucXVvdGVkYmxwcmltZXJldmVyc2VkPTEyMzE3O2UucXVvdGVkYmxyaWdodD04MjIxO2UucXVvdGVsZWZ0PTgyMTY7ZS5xdW90ZWxlZnRyZXZlcnNlZD04MjE5O2UucXVvdGVyZXZlcnNlZD04MjE5O2UucXVvdGVyaWdodD04MjE3O2UucXVvdGVyaWdodG49MzI5O2UucXVvdGVzaW5nbGJhc2U9ODIxODtlLnF1b3Rlc2luZ2xlPTM5O2UucXVvdGVzaW5nbGVtb25vc3BhY2U9NjUyODc7ZS5yPTExNDtlLnJhYXJtZW5pYW49MTQwNDtlLnJhYmVuZ2FsaT0yNDgwO2UucmFjdXRlPTM0MTtlLnJhZGV2YT0yMzUyO2UucmFkaWNhbD04NzMwO2UucmFkaWNhbGV4PTYzNzE3O2UucmFkb3ZlcnNzcXVhcmU9MTMyMzA7ZS5yYWRvdmVyc3NxdWFyZWRzcXVhcmU9MTMyMzE7ZS5yYWRzcXVhcmU9MTMyMjk7ZS5yYWZlPTE0NzE7ZS5yYWZlaGVicmV3PTE0NzE7ZS5yYWd1amFyYXRpPTI3MzY7ZS5yYWd1cm11a2hpPTI2MDg7ZS5yYWhpcmFnYW5hPTEyNDI1O2UucmFrYXRha2FuYT0xMjUyMTtlLnJha2F0YWthbmFoYWxmd2lkdGg9NjU0MzE7ZS5yYWxvd2VyZGlhZ29uYWxiZW5nYWxpPTI1NDU7ZS5yYW1pZGRsZWRpYWdvbmFsYmVuZ2FsaT0yNTQ0O2UucmFtc2hvcm49NjEyO2UucmF0aW89ODc1ODtlLnJib3BvbW9mbz0xMjU2NjtlLnJjYXJvbj0zNDU7ZS5yY2VkaWxsYT0zNDM7ZS5yY2lyY2xlPTk0NDE7ZS5yY29tbWFhY2NlbnQ9MzQzO2UucmRibGdyYXZlPTUyOTtlLnJkb3RhY2NlbnQ9Nzc2OTtlLnJkb3RiZWxvdz03NzcxO2UucmRvdGJlbG93bWFjcm9uPTc3NzM7ZS5yZWZlcmVuY2VtYXJrPTgyNTE7ZS5yZWZsZXhzdWJzZXQ9ODgzODtlLnJlZmxleHN1cGVyc2V0PTg4Mzk7ZS5yZWdpc3RlcmVkPTE3NDtlLnJlZ2lzdGVyc2Fucz02MzcyMDtlLnJlZ2lzdGVyc2VyaWY9NjMxOTQ7ZS5yZWhhcmFiaWM9MTU4NTtlLnJlaGFybWVuaWFuPTE0MDg7ZS5yZWhmaW5hbGFyYWJpYz02NTE5ODtlLnJlaGlyYWdhbmE9MTI0Mjg7ZS5yZWthdGFrYW5hPTEyNTI0O2UucmVrYXRha2FuYWhhbGZ3aWR0aD02NTQzNDtlLnJlc2g9MTUxMjtlLnJlc2hkYWdlc2hoZWJyZXc9NjQzMjg7ZS5yZXNoaGVicmV3PTE1MTI7ZS5yZXZlcnNlZHRpbGRlPTg3NjU7ZS5yZXZpYWhlYnJldz0xNDMxO2UucmV2aWFtdWdyYXNoaGVicmV3PTE0MzE7ZS5yZXZsb2dpY2Fsbm90PTg5NzY7ZS5yZmlzaGhvb2s9NjM4O2UucmZpc2hob29rcmV2ZXJzZWQ9NjM5O2UucmhhYmVuZ2FsaT0yNTI1O2UucmhhZGV2YT0yMzk3O2UucmhvPTk2MTtlLnJob29rPTYzNztlLnJob29rdHVybmVkPTYzNTtlLnJob29rdHVybmVkc3VwZXJpb3I9NjkzO2Uucmhvc3ltYm9sZ3JlZWs9MTAwOTtlLnJob3RpY2hvb2ttb2Q9NzM0O2UucmlldWxhY2lyY2xla29yZWFuPTEyOTEzO2UucmlldWxhcGFyZW5rb3JlYW49MTI4MTc7ZS5yaWV1bGNpcmNsZWtvcmVhbj0xMjg5OTtlLnJpZXVsaGlldWhrb3JlYW49MTI2MDg7ZS5yaWV1bGtpeWVva2tvcmVhbj0xMjYwMjtlLnJpZXVsa2l5ZW9rc2lvc2tvcmVhbj0xMjY0OTtlLnJpZXVsa29yZWFuPTEyNjAxO2UucmlldWxtaWV1bWtvcmVhbj0xMjYwMztlLnJpZXVscGFuc2lvc2tvcmVhbj0xMjY1MjtlLnJpZXVscGFyZW5rb3JlYW49MTI4MDM7ZS5yaWV1bHBoaWV1cGhrb3JlYW49MTI2MDc7ZS5yaWV1bHBpZXVwa29yZWFuPTEyNjA0O2UucmlldWxwaWV1cHNpb3Nrb3JlYW49MTI2NTE7ZS5yaWV1bHNpb3Nrb3JlYW49MTI2MDU7ZS5yaWV1bHRoaWV1dGhrb3JlYW49MTI2MDY7ZS5yaWV1bHRpa2V1dGtvcmVhbj0xMjY1MDtlLnJpZXVseWVvcmluaGlldWhrb3JlYW49MTI2NTM7ZS5yaWdodGFuZ2xlPTg3MzU7ZS5yaWdodHRhY2tiZWxvd2NtYj03OTM7ZS5yaWdodHRyaWFuZ2xlPTg4OTU7ZS5yaWhpcmFnYW5hPTEyNDI2O2UucmlrYXRha2FuYT0xMjUyMjtlLnJpa2F0YWthbmFoYWxmd2lkdGg9NjU0MzI7ZS5yaW5nPTczMDtlLnJpbmdiZWxvd2NtYj04MDU7ZS5yaW5nY21iPTc3ODtlLnJpbmdoYWxmbGVmdD03MDM7ZS5yaW5naGFsZmxlZnRhcm1lbmlhbj0xMzY5O2UucmluZ2hhbGZsZWZ0YmVsb3djbWI9Nzk2O2UucmluZ2hhbGZsZWZ0Y2VudGVyZWQ9NzIzO2UucmluZ2hhbGZyaWdodD03MDI7ZS5yaW5naGFsZnJpZ2h0YmVsb3djbWI9ODI1O2UucmluZ2hhbGZyaWdodGNlbnRlcmVkPTcyMjtlLnJpbnZlcnRlZGJyZXZlPTUzMTtlLnJpdHRvcnVzcXVhcmU9MTMxMzc7ZS5ybGluZWJlbG93PTc3NzU7ZS5ybG9uZ2xlZz02MzY7ZS5ybG9uZ2xlZ3R1cm5lZD02MzQ7ZS5ybW9ub3NwYWNlPTY1MzYyO2Uucm9oaXJhZ2FuYT0xMjQyOTtlLnJva2F0YWthbmE9MTI1MjU7ZS5yb2thdGFrYW5haGFsZndpZHRoPTY1NDM1O2Uucm9ydWF0aGFpPTM2MTk7ZS5ycGFyZW49OTM4OTtlLnJyYWJlbmdhbGk9MjUyNDtlLnJyYWRldmE9MjM1MztlLnJyYWd1cm11a2hpPTI2NTI7ZS5ycmVoYXJhYmljPTE2ODE7ZS5ycmVoZmluYWxhcmFiaWM9NjQzOTc7ZS5ycnZvY2FsaWNiZW5nYWxpPTI1Mjg7ZS5ycnZvY2FsaWNkZXZhPTI0MDA7ZS5ycnZvY2FsaWNndWphcmF0aT0yNzg0O2UucnJ2b2NhbGljdm93ZWxzaWduYmVuZ2FsaT0yNTAwO2UucnJ2b2NhbGljdm93ZWxzaWduZGV2YT0yMzcyO2UucnJ2b2NhbGljdm93ZWxzaWduZ3VqYXJhdGk9Mjc1NjtlLnJzdXBlcmlvcj02MzIxNztlLnJ0YmxvY2s9OTYxNjtlLnJ0dXJuZWQ9NjMzO2UucnR1cm5lZHN1cGVyaW9yPTY5MjtlLnJ1aGlyYWdhbmE9MTI0Mjc7ZS5ydWthdGFrYW5hPTEyNTIzO2UucnVrYXRha2FuYWhhbGZ3aWR0aD02NTQzMztlLnJ1cGVlbWFya2JlbmdhbGk9MjU0NjtlLnJ1cGVlc2lnbmJlbmdhbGk9MjU0NztlLnJ1cGlhaD02MzE5NztlLnJ1dGhhaT0zNjIwO2UucnZvY2FsaWNiZW5nYWxpPTI0NDM7ZS5ydm9jYWxpY2RldmE9MjMxNTtlLnJ2b2NhbGljZ3VqYXJhdGk9MjY5OTtlLnJ2b2NhbGljdm93ZWxzaWduYmVuZ2FsaT0yNDk5O2UucnZvY2FsaWN2b3dlbHNpZ25kZXZhPTIzNzE7ZS5ydm9jYWxpY3Zvd2Vsc2lnbmd1amFyYXRpPTI3NTU7ZS5zPTExNTtlLnNhYmVuZ2FsaT0yNDg4O2Uuc2FjdXRlPTM0NztlLnNhY3V0ZWRvdGFjY2VudD03NzgxO2Uuc2FkYXJhYmljPTE1ODk7ZS5zYWRldmE9MjM2MDtlLnNhZGZpbmFsYXJhYmljPTY1MjEwO2Uuc2FkaW5pdGlhbGFyYWJpYz02NTIxMTtlLnNhZG1lZGlhbGFyYWJpYz02NTIxMjtlLnNhZ3VqYXJhdGk9Mjc0NDtlLnNhZ3VybXVraGk9MjYxNjtlLnNhaGlyYWdhbmE9MTIzNzM7ZS5zYWthdGFrYW5hPTEyNDY5O2Uuc2FrYXRha2FuYWhhbGZ3aWR0aD02NTQwMztlLnNhbGxhbGxhaG91YWxheWhld2FzYWxsYW1hcmFiaWM9NjUwMTg7ZS5zYW1la2g9MTUwNTtlLnNhbWVraGRhZ2VzaD02NDMyMTtlLnNhbWVraGRhZ2VzaGhlYnJldz02NDMyMTtlLnNhbWVraGhlYnJldz0xNTA1O2Uuc2FyYWFhdGhhaT0zNjM0O2Uuc2FyYWFldGhhaT0zNjQ5O2Uuc2FyYWFpbWFpbWFsYWl0aGFpPTM2NTI7ZS5zYXJhYWltYWltdWFudGhhaT0zNjUxO2Uuc2FyYWFtdGhhaT0zNjM1O2Uuc2FyYWF0aGFpPTM2MzI7ZS5zYXJhZXRoYWk9MzY0ODtlLnNhcmFpaWxlZnR0aGFpPTYzNjIyO2Uuc2FyYWlpdGhhaT0zNjM3O2Uuc2FyYWlsZWZ0dGhhaT02MzYyMTtlLnNhcmFpdGhhaT0zNjM2O2Uuc2FyYW90aGFpPTM2NTA7ZS5zYXJhdWVlbGVmdHRoYWk9NjM2MjQ7ZS5zYXJhdWVldGhhaT0zNjM5O2Uuc2FyYXVlbGVmdHRoYWk9NjM2MjM7ZS5zYXJhdWV0aGFpPTM2Mzg7ZS5zYXJhdXRoYWk9MzY0MDtlLnNhcmF1dXRoYWk9MzY0MTtlLnNib3BvbW9mbz0xMjU2OTtlLnNjYXJvbj0zNTM7ZS5zY2Fyb25kb3RhY2NlbnQ9Nzc4MztlLnNjZWRpbGxhPTM1MTtlLnNjaHdhPTYwMTtlLnNjaHdhY3lyaWxsaWM9MTI0MTtlLnNjaHdhZGllcmVzaXNjeXJpbGxpYz0xMjQzO2Uuc2Nod2Fob29rPTYwMjtlLnNjaXJjbGU9OTQ0MjtlLnNjaXJjdW1mbGV4PTM0OTtlLnNjb21tYWFjY2VudD01Mzc7ZS5zZG90YWNjZW50PTc3Nzc7ZS5zZG90YmVsb3c9Nzc3OTtlLnNkb3RiZWxvd2RvdGFjY2VudD03Nzg1O2Uuc2VhZ3VsbGJlbG93Y21iPTgyODtlLnNlY29uZD04MjQzO2Uuc2Vjb25kdG9uZWNoaW5lc2U9NzE0O2Uuc2VjdGlvbj0xNjc7ZS5zZWVuYXJhYmljPTE1ODc7ZS5zZWVuZmluYWxhcmFiaWM9NjUyMDI7ZS5zZWVuaW5pdGlhbGFyYWJpYz02NTIwMztlLnNlZW5tZWRpYWxhcmFiaWM9NjUyMDQ7ZS5zZWdvbD0xNDYyO2Uuc2Vnb2wxMz0xNDYyO2Uuc2Vnb2wxZj0xNDYyO2Uuc2Vnb2wyYz0xNDYyO2Uuc2Vnb2xoZWJyZXc9MTQ2MjtlLnNlZ29sbmFycm93aGVicmV3PTE0NjI7ZS5zZWdvbHF1YXJ0ZXJoZWJyZXc9MTQ2MjtlLnNlZ29sdGFoZWJyZXc9MTQyNjtlLnNlZ29sd2lkZWhlYnJldz0xNDYyO2Uuc2VoYXJtZW5pYW49MTQwNTtlLnNlaGlyYWdhbmE9MTIzNzk7ZS5zZWthdGFrYW5hPTEyNDc1O2Uuc2VrYXRha2FuYWhhbGZ3aWR0aD02NTQwNjtlLnNlbWljb2xvbj01OTtlLnNlbWljb2xvbmFyYWJpYz0xNTYzO2Uuc2VtaWNvbG9ubW9ub3NwYWNlPTY1MzA3O2Uuc2VtaWNvbG9uc21hbGw9NjUxMDg7ZS5zZW1pdm9pY2VkbWFya2thbmE9MTI0NDQ7ZS5zZW1pdm9pY2VkbWFya2thbmFoYWxmd2lkdGg9NjU0Mzk7ZS5zZW50aXNxdWFyZT0xMzA5MDtlLnNlbnRvc3F1YXJlPTEzMDkxO2Uuc2V2ZW49NTU7ZS5zZXZlbmFyYWJpYz0xNjM5O2Uuc2V2ZW5iZW5nYWxpPTI1NDE7ZS5zZXZlbmNpcmNsZT05MzE4O2Uuc2V2ZW5jaXJjbGVpbnZlcnNlc2Fuc3NlcmlmPTEwMTI4O2Uuc2V2ZW5kZXZhPTI0MTM7ZS5zZXZlbmVpZ2h0aHM9ODU0MjtlLnNldmVuZ3VqYXJhdGk9Mjc5NztlLnNldmVuZ3VybXVraGk9MjY2OTtlLnNldmVuaGFja2FyYWJpYz0xNjM5O2Uuc2V2ZW5oYW5nemhvdT0xMjMyNztlLnNldmVuaWRlb2dyYXBoaWNwYXJlbj0xMjgzODtlLnNldmVuaW5mZXJpb3I9ODMyNztlLnNldmVubW9ub3NwYWNlPTY1MzAzO2Uuc2V2ZW5vbGRzdHlsZT02MzI4NztlLnNldmVucGFyZW49OTMzODtlLnNldmVucGVyaW9kPTkzNTg7ZS5zZXZlbnBlcnNpYW49MTc4MztlLnNldmVucm9tYW49ODU2NjtlLnNldmVuc3VwZXJpb3I9ODMxMTtlLnNldmVudGVlbmNpcmNsZT05MzI4O2Uuc2V2ZW50ZWVucGFyZW49OTM0ODtlLnNldmVudGVlbnBlcmlvZD05MzY4O2Uuc2V2ZW50aGFpPTM2NzE7ZS5zZnRoeXBoZW49MTczO2Uuc2hhYXJtZW5pYW49MTM5OTtlLnNoYWJlbmdhbGk9MjQ4NjtlLnNoYWN5cmlsbGljPTEwOTY7ZS5zaGFkZGFhcmFiaWM9MTYxNztlLnNoYWRkYWRhbW1hYXJhYmljPTY0NjA5O2Uuc2hhZGRhZGFtbWF0YW5hcmFiaWM9NjQ2MDY7ZS5zaGFkZGFmYXRoYWFyYWJpYz02NDYwODtlLnNoYWRkYWthc3JhYXJhYmljPTY0NjEwO2Uuc2hhZGRha2FzcmF0YW5hcmFiaWM9NjQ2MDc7ZS5zaGFkZT05NjE4O2Uuc2hhZGVkYXJrPTk2MTk7ZS5zaGFkZWxpZ2h0PTk2MTc7ZS5zaGFkZW1lZGl1bT05NjE4O2Uuc2hhZGV2YT0yMzU4O2Uuc2hhZ3VqYXJhdGk9Mjc0MjtlLnNoYWd1cm11a2hpPTI2MTQ7ZS5zaGFsc2hlbGV0aGVicmV3PTE0Mjc7ZS5zaGJvcG9tb2ZvPTEyNTY1O2Uuc2hjaGFjeXJpbGxpYz0xMDk3O2Uuc2hlZW5hcmFiaWM9MTU4ODtlLnNoZWVuZmluYWxhcmFiaWM9NjUyMDY7ZS5zaGVlbmluaXRpYWxhcmFiaWM9NjUyMDc7ZS5zaGVlbm1lZGlhbGFyYWJpYz02NTIwODtlLnNoZWljb3B0aWM9OTk1O2Uuc2hlcWVsPTgzNjI7ZS5zaGVxZWxoZWJyZXc9ODM2MjtlLnNoZXZhPTE0NTY7ZS5zaGV2YTExNT0xNDU2O2Uuc2hldmExNT0xNDU2O2Uuc2hldmEyMj0xNDU2O2Uuc2hldmEyZT0xNDU2O2Uuc2hldmFoZWJyZXc9MTQ1NjtlLnNoZXZhbmFycm93aGVicmV3PTE0NTY7ZS5zaGV2YXF1YXJ0ZXJoZWJyZXc9MTQ1NjtlLnNoZXZhd2lkZWhlYnJldz0xNDU2O2Uuc2hoYWN5cmlsbGljPTEyMTE7ZS5zaGltYWNvcHRpYz0xMDA1O2Uuc2hpbj0xNTEzO2Uuc2hpbmRhZ2VzaD02NDMyOTtlLnNoaW5kYWdlc2hoZWJyZXc9NjQzMjk7ZS5zaGluZGFnZXNoc2hpbmRvdD02NDMwMDtlLnNoaW5kYWdlc2hzaGluZG90aGVicmV3PTY0MzAwO2Uuc2hpbmRhZ2VzaHNpbmRvdD02NDMwMTtlLnNoaW5kYWdlc2hzaW5kb3RoZWJyZXc9NjQzMDE7ZS5zaGluZG90aGVicmV3PTE0NzM7ZS5zaGluaGVicmV3PTE1MTM7ZS5zaGluc2hpbmRvdD02NDI5ODtlLnNoaW5zaGluZG90aGVicmV3PTY0Mjk4O2Uuc2hpbnNpbmRvdD02NDI5OTtlLnNoaW5zaW5kb3RoZWJyZXc9NjQyOTk7ZS5zaG9vaz02NDI7ZS5zaWdtYT05NjM7ZS5zaWdtYTE9OTYyO2Uuc2lnbWFmaW5hbD05NjI7ZS5zaWdtYWx1bmF0ZXN5bWJvbGdyZWVrPTEwMTA7ZS5zaWhpcmFnYW5hPTEyMzc1O2Uuc2lrYXRha2FuYT0xMjQ3MTtlLnNpa2F0YWthbmFoYWxmd2lkdGg9NjU0MDQ7ZS5zaWx1cWhlYnJldz0xNDY5O2Uuc2lsdXFsZWZ0aGVicmV3PTE0Njk7ZS5zaW1pbGFyPTg3NjQ7ZS5zaW5kb3RoZWJyZXc9MTQ3NDtlLnNpb3NhY2lyY2xla29yZWFuPTEyOTE2O2Uuc2lvc2FwYXJlbmtvcmVhbj0xMjgyMDtlLnNpb3NjaWV1Y2tvcmVhbj0xMjY3MDtlLnNpb3NjaXJjbGVrb3JlYW49MTI5MDI7ZS5zaW9za2l5ZW9ra29yZWFuPTEyNjY2O2Uuc2lvc2tvcmVhbj0xMjYxMztlLnNpb3NuaWV1bmtvcmVhbj0xMjY2NztlLnNpb3NwYXJlbmtvcmVhbj0xMjgwNjtlLnNpb3NwaWV1cGtvcmVhbj0xMjY2OTtlLnNpb3N0aWtldXRrb3JlYW49MTI2Njg7ZS5zaXg9NTQ7ZS5zaXhhcmFiaWM9MTYzODtlLnNpeGJlbmdhbGk9MjU0MDtlLnNpeGNpcmNsZT05MzE3O2Uuc2l4Y2lyY2xlaW52ZXJzZXNhbnNzZXJpZj0xMDEyNztlLnNpeGRldmE9MjQxMjtlLnNpeGd1amFyYXRpPTI3OTY7ZS5zaXhndXJtdWtoaT0yNjY4O2Uuc2l4aGFja2FyYWJpYz0xNjM4O2Uuc2l4aGFuZ3pob3U9MTIzMjY7ZS5zaXhpZGVvZ3JhcGhpY3BhcmVuPTEyODM3O2Uuc2l4aW5mZXJpb3I9ODMyNjtlLnNpeG1vbm9zcGFjZT02NTMwMjtlLnNpeG9sZHN0eWxlPTYzMjg2O2Uuc2l4cGFyZW49OTMzNztlLnNpeHBlcmlvZD05MzU3O2Uuc2l4cGVyc2lhbj0xNzgyO2Uuc2l4cm9tYW49ODU2NTtlLnNpeHN1cGVyaW9yPTgzMTA7ZS5zaXh0ZWVuY2lyY2xlPTkzMjc7ZS5zaXh0ZWVuY3VycmVuY3lkZW5vbWluYXRvcmJlbmdhbGk9MjU1MztlLnNpeHRlZW5wYXJlbj05MzQ3O2Uuc2l4dGVlbnBlcmlvZD05MzY3O2Uuc2l4dGhhaT0zNjcwO2Uuc2xhc2g9NDc7ZS5zbGFzaG1vbm9zcGFjZT02NTI5NTtlLnNsb25nPTM4MztlLnNsb25nZG90YWNjZW50PTc4MzU7ZS5zbWlsZWZhY2U9OTc4NjtlLnNtb25vc3BhY2U9NjUzNjM7ZS5zb2ZwYXN1cWhlYnJldz0xNDc1O2Uuc29mdGh5cGhlbj0xNzM7ZS5zb2Z0c2lnbmN5cmlsbGljPTExMDA7ZS5zb2hpcmFnYW5hPTEyMzgxO2Uuc29rYXRha2FuYT0xMjQ3NztlLnNva2F0YWthbmFoYWxmd2lkdGg9NjU0MDc7ZS5zb2xpZHVzbG9uZ292ZXJsYXljbWI9ODI0O2Uuc29saWR1c3Nob3J0b3ZlcmxheWNtYj04MjM7ZS5zb3J1c2l0aGFpPTM2MjU7ZS5zb3NhbGF0aGFpPTM2MjQ7ZS5zb3NvdGhhaT0zNTk1O2Uuc29zdWF0aGFpPTM2MjY7ZS5zcGFjZT0zMjtlLnNwYWNlaGFja2FyYWJpYz0zMjtlLnNwYWRlPTk4MjQ7ZS5zcGFkZXN1aXRibGFjaz05ODI0O2Uuc3BhZGVzdWl0d2hpdGU9OTgyODtlLnNwYXJlbj05MzkwO2Uuc3F1YXJlYmVsb3djbWI9ODI3O2Uuc3F1YXJlY2M9MTMyNTI7ZS5zcXVhcmVjbT0xMzIxMztlLnNxdWFyZWRpYWdvbmFsY3Jvc3NoYXRjaGZpbGw9OTY0MTtlLnNxdWFyZWhvcml6b250YWxmaWxsPTk2MzY7ZS5zcXVhcmVrZz0xMzE5OTtlLnNxdWFyZWttPTEzMjE0O2Uuc3F1YXJla21jYXBpdGFsPTEzMjYyO2Uuc3F1YXJlbG49MTMyNjU7ZS5zcXVhcmVsb2c9MTMyNjY7ZS5zcXVhcmVtZz0xMzE5ODtlLnNxdWFyZW1pbD0xMzI2OTtlLnNxdWFyZW1tPTEzMjEyO2Uuc3F1YXJlbXNxdWFyZWQ9MTMyMTc7ZS5zcXVhcmVvcnRob2dvbmFsY3Jvc3NoYXRjaGZpbGw9OTYzODtlLnNxdWFyZXVwcGVybGVmdHRvbG93ZXJyaWdodGZpbGw9OTYzOTtlLnNxdWFyZXVwcGVycmlnaHR0b2xvd2VybGVmdGZpbGw9OTY0MDtlLnNxdWFyZXZlcnRpY2FsZmlsbD05NjM3O2Uuc3F1YXJld2hpdGV3aXRoc21hbGxibGFjaz05NjM1O2Uuc3JzcXVhcmU9MTMyNzU7ZS5zc2FiZW5nYWxpPTI0ODc7ZS5zc2FkZXZhPTIzNTk7ZS5zc2FndWphcmF0aT0yNzQzO2Uuc3NhbmdjaWV1Y2tvcmVhbj0xMjYxNztlLnNzYW5naGlldWhrb3JlYW49MTI2Nzc7ZS5zc2FuZ2lldW5na29yZWFuPTEyNjcyO2Uuc3NhbmdraXllb2trb3JlYW49MTI1OTQ7ZS5zc2FuZ25pZXVua29yZWFuPTEyNjQ1O2Uuc3NhbmdwaWV1cGtvcmVhbj0xMjYxMTtlLnNzYW5nc2lvc2tvcmVhbj0xMjYxNDtlLnNzYW5ndGlrZXV0a29yZWFuPTEyNjAwO2Uuc3N1cGVyaW9yPTYzMjE4O2Uuc3Rlcmxpbmc9MTYzO2Uuc3Rlcmxpbmdtb25vc3BhY2U9NjU1MDU7ZS5zdHJva2Vsb25nb3ZlcmxheWNtYj04MjI7ZS5zdHJva2VzaG9ydG92ZXJsYXljbWI9ODIxO2Uuc3Vic2V0PTg4MzQ7ZS5zdWJzZXRub3RlcXVhbD04ODQyO2Uuc3Vic2V0b3JlcXVhbD04ODM4O2Uuc3VjY2VlZHM9ODgyNztlLnN1Y2h0aGF0PTg3MTU7ZS5zdWhpcmFnYW5hPTEyMzc3O2Uuc3VrYXRha2FuYT0xMjQ3MztlLnN1a2F0YWthbmFoYWxmd2lkdGg9NjU0MDU7ZS5zdWt1bmFyYWJpYz0xNjE4O2Uuc3VtbWF0aW9uPTg3MjE7ZS5zdW49OTc4ODtlLnN1cGVyc2V0PTg4MzU7ZS5zdXBlcnNldG5vdGVxdWFsPTg4NDM7ZS5zdXBlcnNldG9yZXF1YWw9ODgzOTtlLnN2c3F1YXJlPTEzMjc2O2Uuc3lvdXdhZXJhc3F1YXJlPTEzMTgwO2UudD0xMTY7ZS50YWJlbmdhbGk9MjQ2ODtlLnRhY2tkb3duPTg4Njg7ZS50YWNrbGVmdD04ODY3O2UudGFkZXZhPTIzNDA7ZS50YWd1amFyYXRpPTI3MjQ7ZS50YWd1cm11a2hpPTI1OTY7ZS50YWhhcmFiaWM9MTU5MTtlLnRhaGZpbmFsYXJhYmljPTY1MjE4O2UudGFoaW5pdGlhbGFyYWJpYz02NTIxOTtlLnRhaGlyYWdhbmE9MTIzODM7ZS50YWhtZWRpYWxhcmFiaWM9NjUyMjA7ZS50YWlzeW91ZXJhc3F1YXJlPTEzMTgxO2UudGFrYXRha2FuYT0xMjQ3OTtlLnRha2F0YWthbmFoYWxmd2lkdGg9NjU0MDg7ZS50YXR3ZWVsYXJhYmljPTE2MDA7ZS50YXU9OTY0O2UudGF2PTE1MTQ7ZS50YXZkYWdlcz02NDMzMDtlLnRhdmRhZ2VzaD02NDMzMDtlLnRhdmRhZ2VzaGhlYnJldz02NDMzMDtlLnRhdmhlYnJldz0xNTE0O2UudGJhcj0zNTk7ZS50Ym9wb21vZm89MTI1NTQ7ZS50Y2Fyb249MzU3O2UudGNjdXJsPTY4MDtlLnRjZWRpbGxhPTM1NTtlLnRjaGVoYXJhYmljPTE2NzA7ZS50Y2hlaGZpbmFsYXJhYmljPTY0Mzc5O2UudGNoZWhpbml0aWFsYXJhYmljPTY0MzgwO2UudGNoZWhtZWRpYWxhcmFiaWM9NjQzODE7ZS50Y2lyY2xlPTk0NDM7ZS50Y2lyY3VtZmxleGJlbG93PTc3OTM7ZS50Y29tbWFhY2NlbnQ9MzU1O2UudGRpZXJlc2lzPTc4MzE7ZS50ZG90YWNjZW50PTc3ODc7ZS50ZG90YmVsb3c9Nzc4OTtlLnRlY3lyaWxsaWM9MTA5MDtlLnRlZGVzY2VuZGVyY3lyaWxsaWM9MTE5NztlLnRlaGFyYWJpYz0xNTc4O2UudGVoZmluYWxhcmFiaWM9NjUxNzQ7ZS50ZWhoYWhpbml0aWFsYXJhYmljPTY0Njc0O2UudGVoaGFoaXNvbGF0ZWRhcmFiaWM9NjQ1MjQ7ZS50ZWhpbml0aWFsYXJhYmljPTY1MTc1O2UudGVoaXJhZ2FuYT0xMjM5MDtlLnRlaGplZW1pbml0aWFsYXJhYmljPTY0NjczO2UudGVoamVlbWlzb2xhdGVkYXJhYmljPTY0NTIzO2UudGVobWFyYnV0YWFyYWJpYz0xNTc3O2UudGVobWFyYnV0YWZpbmFsYXJhYmljPTY1MTcyO2UudGVobWVkaWFsYXJhYmljPTY1MTc2O2UudGVobWVlbWluaXRpYWxhcmFiaWM9NjQ2NzY7ZS50ZWhtZWVtaXNvbGF0ZWRhcmFiaWM9NjQ1MjY7ZS50ZWhub29uZmluYWxhcmFiaWM9NjQ2Mjc7ZS50ZWthdGFrYW5hPTEyNDg2O2UudGVrYXRha2FuYWhhbGZ3aWR0aD02NTQxMTtlLnRlbGVwaG9uZT04NDgxO2UudGVsZXBob25lYmxhY2s9OTc0MjtlLnRlbGlzaGFnZWRvbGFoZWJyZXc9MTQ0MDtlLnRlbGlzaGFxZXRhbmFoZWJyZXc9MTQ0OTtlLnRlbmNpcmNsZT05MzIxO2UudGVuaWRlb2dyYXBoaWNwYXJlbj0xMjg0MTtlLnRlbnBhcmVuPTkzNDE7ZS50ZW5wZXJpb2Q9OTM2MTtlLnRlbnJvbWFuPTg1Njk7ZS50ZXNoPTY3OTtlLnRldD0xNDk2O2UudGV0ZGFnZXNoPTY0MzEyO2UudGV0ZGFnZXNoaGVicmV3PTY0MzEyO2UudGV0aGVicmV3PTE0OTY7ZS50ZXRzZWN5cmlsbGljPTEyMDU7ZS50ZXZpcmhlYnJldz0xNDM1O2UudGV2aXJsZWZ0aGVicmV3PTE0MzU7ZS50aGFiZW5nYWxpPTI0Njk7ZS50aGFkZXZhPTIzNDE7ZS50aGFndWphcmF0aT0yNzI1O2UudGhhZ3VybXVraGk9MjU5NztlLnRoYWxhcmFiaWM9MTU4NDtlLnRoYWxmaW5hbGFyYWJpYz02NTE5NjtlLnRoYW50aGFraGF0bG93bGVmdHRoYWk9NjM2NDA7ZS50aGFudGhha2hhdGxvd3JpZ2h0dGhhaT02MzYzOTtlLnRoYW50aGFraGF0dGhhaT0zNjYwO2UudGhhbnRoYWtoYXR1cHBlcmxlZnR0aGFpPTYzNjM4O2UudGhlaGFyYWJpYz0xNTc5O2UudGhlaGZpbmFsYXJhYmljPTY1MTc4O2UudGhlaGluaXRpYWxhcmFiaWM9NjUxNzk7ZS50aGVobWVkaWFsYXJhYmljPTY1MTgwO2UudGhlcmVleGlzdHM9ODcwNztlLnRoZXJlZm9yZT04NzU2O2UudGhldGE9OTUyO2UudGhldGExPTk3NztlLnRoZXRhc3ltYm9sZ3JlZWs9OTc3O2UudGhpZXV0aGFjaXJjbGVrb3JlYW49MTI5MjE7ZS50aGlldXRoYXBhcmVua29yZWFuPTEyODI1O2UudGhpZXV0aGNpcmNsZWtvcmVhbj0xMjkwNztlLnRoaWV1dGhrb3JlYW49MTI2MjA7ZS50aGlldXRocGFyZW5rb3JlYW49MTI4MTE7ZS50aGlydGVlbmNpcmNsZT05MzI0O2UudGhpcnRlZW5wYXJlbj05MzQ0O2UudGhpcnRlZW5wZXJpb2Q9OTM2NDtlLnRob25hbmdtb250aG90aGFpPTM2MDE7ZS50aG9vaz00Mjk7ZS50aG9waHV0aGFvdGhhaT0zNjAyO2UudGhvcm49MjU0O2UudGhvdGhhaGFudGhhaT0zNjA3O2UudGhvdGhhbnRoYWk9MzYwMDtlLnRob3Rob25ndGhhaT0zNjA4O2UudGhvdGh1bmd0aGFpPTM2MDY7ZS50aG91c2FuZGN5cmlsbGljPTExNTQ7ZS50aG91c2FuZHNzZXBhcmF0b3JhcmFiaWM9MTY0NDtlLnRob3VzYW5kc3NlcGFyYXRvcnBlcnNpYW49MTY0NDtlLnRocmVlPTUxO2UudGhyZWVhcmFiaWM9MTYzNTtlLnRocmVlYmVuZ2FsaT0yNTM3O2UudGhyZWVjaXJjbGU9OTMxNDtlLnRocmVlY2lyY2xlaW52ZXJzZXNhbnNzZXJpZj0xMDEyNDtlLnRocmVlZGV2YT0yNDA5O2UudGhyZWVlaWdodGhzPTg1NDA7ZS50aHJlZWd1amFyYXRpPTI3OTM7ZS50aHJlZWd1cm11a2hpPTI2NjU7ZS50aHJlZWhhY2thcmFiaWM9MTYzNTtlLnRocmVlaGFuZ3pob3U9MTIzMjM7ZS50aHJlZWlkZW9ncmFwaGljcGFyZW49MTI4MzQ7ZS50aHJlZWluZmVyaW9yPTgzMjM7ZS50aHJlZW1vbm9zcGFjZT02NTI5OTtlLnRocmVlbnVtZXJhdG9yYmVuZ2FsaT0yNTUwO2UudGhyZWVvbGRzdHlsZT02MzI4MztlLnRocmVlcGFyZW49OTMzNDtlLnRocmVlcGVyaW9kPTkzNTQ7ZS50aHJlZXBlcnNpYW49MTc3OTtlLnRocmVlcXVhcnRlcnM9MTkwO2UudGhyZWVxdWFydGVyc2VtZGFzaD02MzE5ODtlLnRocmVlcm9tYW49ODU2MjtlLnRocmVlc3VwZXJpb3I9MTc5O2UudGhyZWV0aGFpPTM2Njc7ZS50aHpzcXVhcmU9MTMyMDQ7ZS50aWhpcmFnYW5hPTEyMzg1O2UudGlrYXRha2FuYT0xMjQ4MTtlLnRpa2F0YWthbmFoYWxmd2lkdGg9NjU0MDk7ZS50aWtldXRhY2lyY2xla29yZWFuPTEyOTEyO2UudGlrZXV0YXBhcmVua29yZWFuPTEyODE2O2UudGlrZXV0Y2lyY2xla29yZWFuPTEyODk4O2UudGlrZXV0a29yZWFuPTEyNTk5O2UudGlrZXV0cGFyZW5rb3JlYW49MTI4MDI7ZS50aWxkZT03MzI7ZS50aWxkZWJlbG93Y21iPTgxNjtlLnRpbGRlY21iPTc3MTtlLnRpbGRlY29tYj03NzE7ZS50aWxkZWRvdWJsZWNtYj04NjQ7ZS50aWxkZW9wZXJhdG9yPTg3NjQ7ZS50aWxkZW92ZXJsYXljbWI9ODIwO2UudGlsZGV2ZXJ0aWNhbGNtYj04MzA7ZS50aW1lc2NpcmNsZT04ODU1O2UudGlwZWhhaGVicmV3PTE0MzA7ZS50aXBlaGFsZWZ0aGVicmV3PTE0MzA7ZS50aXBwaWd1cm11a2hpPTI2NzI7ZS50aXRsb2N5cmlsbGljY21iPTExNTU7ZS50aXduYXJtZW5pYW49MTQwNztlLnRsaW5lYmVsb3c9Nzc5MTtlLnRtb25vc3BhY2U9NjUzNjQ7ZS50b2FybWVuaWFuPTEzODU7ZS50b2hpcmFnYW5hPTEyMzkyO2UudG9rYXRha2FuYT0xMjQ4ODtlLnRva2F0YWthbmFoYWxmd2lkdGg9NjU0MTI7ZS50b25lYmFyZXh0cmFoaWdobW9kPTc0MTtlLnRvbmViYXJleHRyYWxvd21vZD03NDU7ZS50b25lYmFyaGlnaG1vZD03NDI7ZS50b25lYmFybG93bW9kPTc0NDtlLnRvbmViYXJtaWRtb2Q9NzQzO2UudG9uZWZpdmU9NDQ1O2UudG9uZXNpeD0zODk7ZS50b25ldHdvPTQyNDtlLnRvbm9zPTkwMDtlLnRvbnNxdWFyZT0xMzA5NTtlLnRvcGF0YWt0aGFpPTM1OTk7ZS50b3J0b2lzZXNoZWxsYnJhY2tldGxlZnQ9MTIzMDg7ZS50b3J0b2lzZXNoZWxsYnJhY2tldGxlZnRzbWFsbD02NTExNztlLnRvcnRvaXNlc2hlbGxicmFja2V0bGVmdHZlcnRpY2FsPTY1MDgxO2UudG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodD0xMjMwOTtlLnRvcnRvaXNlc2hlbGxicmFja2V0cmlnaHRzbWFsbD02NTExODtlLnRvcnRvaXNlc2hlbGxicmFja2V0cmlnaHR2ZXJ0aWNhbD02NTA4MjtlLnRvdGFvdGhhaT0zNjA1O2UudHBhbGF0YWxob29rPTQyNztlLnRwYXJlbj05MzkxO2UudHJhZGVtYXJrPTg0ODI7ZS50cmFkZW1hcmtzYW5zPTYzNzIyO2UudHJhZGVtYXJrc2VyaWY9NjMxOTU7ZS50cmV0cm9mbGV4aG9vaz02NDg7ZS50cmlhZ2RuPTk2NjA7ZS50cmlhZ2xmPTk2Njg7ZS50cmlhZ3J0PTk2NTg7ZS50cmlhZ3VwPTk2NTA7ZS50cz02Nzg7ZS50c2FkaT0xNTEwO2UudHNhZGlkYWdlc2g9NjQzMjY7ZS50c2FkaWRhZ2VzaGhlYnJldz02NDMyNjtlLnRzYWRpaGVicmV3PTE1MTA7ZS50c2VjeXJpbGxpYz0xMDk0O2UudHNlcmU9MTQ2MTtlLnRzZXJlMTI9MTQ2MTtlLnRzZXJlMWU9MTQ2MTtlLnRzZXJlMmI9MTQ2MTtlLnRzZXJlaGVicmV3PTE0NjE7ZS50c2VyZW5hcnJvd2hlYnJldz0xNDYxO2UudHNlcmVxdWFydGVyaGVicmV3PTE0NjE7ZS50c2VyZXdpZGVoZWJyZXc9MTQ2MTtlLnRzaGVjeXJpbGxpYz0xMTE1O2UudHN1cGVyaW9yPTYzMjE5O2UudHRhYmVuZ2FsaT0yNDYzO2UudHRhZGV2YT0yMzM1O2UudHRhZ3VqYXJhdGk9MjcxOTtlLnR0YWd1cm11a2hpPTI1OTE7ZS50dGVoYXJhYmljPTE2NTc7ZS50dGVoZmluYWxhcmFiaWM9NjQzNTk7ZS50dGVoaW5pdGlhbGFyYWJpYz02NDM2MDtlLnR0ZWhtZWRpYWxhcmFiaWM9NjQzNjE7ZS50dGhhYmVuZ2FsaT0yNDY0O2UudHRoYWRldmE9MjMzNjtlLnR0aGFndWphcmF0aT0yNzIwO2UudHRoYWd1cm11a2hpPTI1OTI7ZS50dHVybmVkPTY0NztlLnR1aGlyYWdhbmE9MTIzODg7ZS50dWthdGFrYW5hPTEyNDg0O2UudHVrYXRha2FuYWhhbGZ3aWR0aD02NTQxMDtlLnR1c21hbGxoaXJhZ2FuYT0xMjM4NztlLnR1c21hbGxrYXRha2FuYT0xMjQ4MztlLnR1c21hbGxrYXRha2FuYWhhbGZ3aWR0aD02NTM5MTtlLnR3ZWx2ZWNpcmNsZT05MzIzO2UudHdlbHZlcGFyZW49OTM0MztlLnR3ZWx2ZXBlcmlvZD05MzYzO2UudHdlbHZlcm9tYW49ODU3MTtlLnR3ZW50eWNpcmNsZT05MzMxO2UudHdlbnR5aGFuZ3pob3U9MjEzMTY7ZS50d2VudHlwYXJlbj05MzUxO2UudHdlbnR5cGVyaW9kPTkzNzE7ZS50d289NTA7ZS50d29hcmFiaWM9MTYzNDtlLnR3b2JlbmdhbGk9MjUzNjtlLnR3b2NpcmNsZT05MzEzO2UudHdvY2lyY2xlaW52ZXJzZXNhbnNzZXJpZj0xMDEyMztlLnR3b2RldmE9MjQwODtlLnR3b2RvdGVubGVhZGVyPTgyMjk7ZS50d29kb3RsZWFkZXI9ODIyOTtlLnR3b2RvdGxlYWRlcnZlcnRpY2FsPTY1MDcyO2UudHdvZ3VqYXJhdGk9Mjc5MjtlLnR3b2d1cm11a2hpPTI2NjQ7ZS50d29oYWNrYXJhYmljPTE2MzQ7ZS50d29oYW5nemhvdT0xMjMyMjtlLnR3b2lkZW9ncmFwaGljcGFyZW49MTI4MzM7ZS50d29pbmZlcmlvcj04MzIyO2UudHdvbW9ub3NwYWNlPTY1Mjk4O2UudHdvbnVtZXJhdG9yYmVuZ2FsaT0yNTQ5O2UudHdvb2xkc3R5bGU9NjMyODI7ZS50d29wYXJlbj05MzMzO2UudHdvcGVyaW9kPTkzNTM7ZS50d29wZXJzaWFuPTE3Nzg7ZS50d29yb21hbj04NTYxO2UudHdvc3Ryb2tlPTQ0MztlLnR3b3N1cGVyaW9yPTE3ODtlLnR3b3RoYWk9MzY2NjtlLnR3b3RoaXJkcz04NTMyO2UudT0xMTc7ZS51YWN1dGU9MjUwO2UudWJhcj02NDk7ZS51YmVuZ2FsaT0yNDQxO2UudWJvcG9tb2ZvPTEyNTg0O2UudWJyZXZlPTM2NTtlLnVjYXJvbj00Njg7ZS51Y2lyY2xlPTk0NDQ7ZS51Y2lyY3VtZmxleD0yNTE7ZS51Y2lyY3VtZmxleGJlbG93PTc3OTk7ZS51Y3lyaWxsaWM9MTA5MTtlLnVkYXR0YWRldmE9MjM4NTtlLnVkYmxhY3V0ZT0zNjk7ZS51ZGJsZ3JhdmU9NTMzO2UudWRldmE9MjMxMztlLnVkaWVyZXNpcz0yNTI7ZS51ZGllcmVzaXNhY3V0ZT00NzI7ZS51ZGllcmVzaXNiZWxvdz03Nzk1O2UudWRpZXJlc2lzY2Fyb249NDc0O2UudWRpZXJlc2lzY3lyaWxsaWM9MTI2NTtlLnVkaWVyZXNpc2dyYXZlPTQ3NjtlLnVkaWVyZXNpc21hY3Jvbj00NzA7ZS51ZG90YmVsb3c9NzkwOTtlLnVncmF2ZT0yNDk7ZS51Z3VqYXJhdGk9MjY5NztlLnVndXJtdWtoaT0yNTY5O2UudWhpcmFnYW5hPTEyMzU4O2UudWhvb2thYm92ZT03OTExO2UudWhvcm49NDMyO2UudWhvcm5hY3V0ZT03OTEzO2UudWhvcm5kb3RiZWxvdz03OTIxO2UudWhvcm5ncmF2ZT03OTE1O2UudWhvcm5ob29rYWJvdmU9NzkxNztlLnVob3JudGlsZGU9NzkxOTtlLnVodW5nYXJ1bWxhdXQ9MzY5O2UudWh1bmdhcnVtbGF1dGN5cmlsbGljPTEyNjc7ZS51aW52ZXJ0ZWRicmV2ZT01MzU7ZS51a2F0YWthbmE9MTI0NTQ7ZS51a2F0YWthbmFoYWxmd2lkdGg9NjUzOTU7ZS51a2N5cmlsbGljPTExNDU7ZS51a29yZWFuPTEyNjM2O2UudW1hY3Jvbj0zNjM7ZS51bWFjcm9uY3lyaWxsaWM9MTI2MztlLnVtYWNyb25kaWVyZXNpcz03ODAzO2UudW1hdHJhZ3VybXVraGk9MjYyNTtlLnVtb25vc3BhY2U9NjUzNjU7ZS51bmRlcnNjb3JlPTk1O2UudW5kZXJzY29yZWRibD04MjE1O2UudW5kZXJzY29yZW1vbm9zcGFjZT02NTM0MztlLnVuZGVyc2NvcmV2ZXJ0aWNhbD02NTA3NTtlLnVuZGVyc2NvcmV3YXZ5PTY1MTAzO2UudW5pb249ODc0NjtlLnVuaXZlcnNhbD04NzA0O2UudW9nb25laz0zNzE7ZS51cGFyZW49OTM5MjtlLnVwYmxvY2s9OTYwMDtlLnVwcGVyZG90aGVicmV3PTE0NzY7ZS51cHNpbG9uPTk2NTtlLnVwc2lsb25kaWVyZXNpcz05NzE7ZS51cHNpbG9uZGllcmVzaXN0b25vcz05NDQ7ZS51cHNpbG9ubGF0aW49NjUwO2UudXBzaWxvbnRvbm9zPTk3MztlLnVwdGFja2JlbG93Y21iPTc5NztlLnVwdGFja21vZD03MjQ7ZS51cmFndXJtdWtoaT0yNjc1O2UudXJpbmc9MzY3O2UudXNob3J0Y3lyaWxsaWM9MTExODtlLnVzbWFsbGhpcmFnYW5hPTEyMzU3O2UudXNtYWxsa2F0YWthbmE9MTI0NTM7ZS51c21hbGxrYXRha2FuYWhhbGZ3aWR0aD02NTM4NTtlLnVzdHJhaWdodGN5cmlsbGljPTExOTk7ZS51c3RyYWlnaHRzdHJva2VjeXJpbGxpYz0xMjAxO2UudXRpbGRlPTM2MTtlLnV0aWxkZWFjdXRlPTc4MDE7ZS51dGlsZGViZWxvdz03Nzk3O2UudXViZW5nYWxpPTI0NDI7ZS51dWRldmE9MjMxNDtlLnV1Z3VqYXJhdGk9MjY5ODtlLnV1Z3VybXVraGk9MjU3MDtlLnV1bWF0cmFndXJtdWtoaT0yNjI2O2UudXV2b3dlbHNpZ25iZW5nYWxpPTI0OTg7ZS51dXZvd2Vsc2lnbmRldmE9MjM3MDtlLnV1dm93ZWxzaWduZ3VqYXJhdGk9Mjc1NDtlLnV2b3dlbHNpZ25iZW5nYWxpPTI0OTc7ZS51dm93ZWxzaWduZGV2YT0yMzY5O2UudXZvd2Vsc2lnbmd1amFyYXRpPTI3NTM7ZS52PTExODtlLnZhZGV2YT0yMzU3O2UudmFndWphcmF0aT0yNzQxO2UudmFndXJtdWtoaT0yNjEzO2UudmFrYXRha2FuYT0xMjUzNTtlLnZhdj0xNDkzO2UudmF2ZGFnZXNoPTY0MzA5O2UudmF2ZGFnZXNoNjU9NjQzMDk7ZS52YXZkYWdlc2hoZWJyZXc9NjQzMDk7ZS52YXZoZWJyZXc9MTQ5MztlLnZhdmhvbGFtPTY0MzMxO2UudmF2aG9sYW1oZWJyZXc9NjQzMzE7ZS52YXZ2YXZoZWJyZXc9MTUyMDtlLnZhdnlvZGhlYnJldz0xNTIxO2UudmNpcmNsZT05NDQ1O2UudmRvdGJlbG93PTc4MDc7ZS52ZWN5cmlsbGljPTEwNzQ7ZS52ZWhhcmFiaWM9MTcwMDtlLnZlaGZpbmFsYXJhYmljPTY0MzYzO2UudmVoaW5pdGlhbGFyYWJpYz02NDM2NDtlLnZlaG1lZGlhbGFyYWJpYz02NDM2NTtlLnZla2F0YWthbmE9MTI1Mzc7ZS52ZW51cz05NzkyO2UudmVydGljYWxiYXI9MTI0O2UudmVydGljYWxsaW5lYWJvdmVjbWI9NzgxO2UudmVydGljYWxsaW5lYmVsb3djbWI9ODA5O2UudmVydGljYWxsaW5lbG93bW9kPTcxNjtlLnZlcnRpY2FsbGluZW1vZD03MTI7ZS52ZXdhcm1lbmlhbj0xNDA2O2Uudmhvb2s9NjUxO2UudmlrYXRha2FuYT0xMjUzNjtlLnZpcmFtYWJlbmdhbGk9MjUwOTtlLnZpcmFtYWRldmE9MjM4MTtlLnZpcmFtYWd1amFyYXRpPTI3NjU7ZS52aXNhcmdhYmVuZ2FsaT0yNDM1O2UudmlzYXJnYWRldmE9MjMwNztlLnZpc2FyZ2FndWphcmF0aT0yNjkxO2Uudm1vbm9zcGFjZT02NTM2NjtlLnZvYXJtZW5pYW49MTQwMDtlLnZvaWNlZGl0ZXJhdGlvbmhpcmFnYW5hPTEyNDQ2O2Uudm9pY2VkaXRlcmF0aW9ua2F0YWthbmE9MTI1NDI7ZS52b2ljZWRtYXJra2FuYT0xMjQ0MztlLnZvaWNlZG1hcmtrYW5haGFsZndpZHRoPTY1NDM4O2Uudm9rYXRha2FuYT0xMjUzODtlLnZwYXJlbj05MzkzO2UudnRpbGRlPTc4MDU7ZS52dHVybmVkPTY1MjtlLnZ1aGlyYWdhbmE9MTI0MzY7ZS52dWthdGFrYW5hPTEyNTMyO2Uudz0xMTk7ZS53YWN1dGU9NzgxMTtlLndhZWtvcmVhbj0xMjYzMztlLndhaGlyYWdhbmE9MTI0MzE7ZS53YWthdGFrYW5hPTEyNTI3O2Uud2FrYXRha2FuYWhhbGZ3aWR0aD02NTQzNjtlLndha29yZWFuPTEyNjMyO2Uud2FzbWFsbGhpcmFnYW5hPTEyNDMwO2Uud2FzbWFsbGthdGFrYW5hPTEyNTI2O2Uud2F0dG9zcXVhcmU9MTMxNDM7ZS53YXZlZGFzaD0xMjMxNjtlLndhdnl1bmRlcnNjb3JldmVydGljYWw9NjUwNzY7ZS53YXdhcmFiaWM9MTYwODtlLndhd2ZpbmFsYXJhYmljPTY1MjYyO2Uud2F3aGFtemFhYm92ZWFyYWJpYz0xNTcyO2Uud2F3aGFtemFhYm92ZWZpbmFsYXJhYmljPTY1MTU4O2Uud2JzcXVhcmU9MTMyNzc7ZS53Y2lyY2xlPTk0NDY7ZS53Y2lyY3VtZmxleD0zNzM7ZS53ZGllcmVzaXM9NzgxMztlLndkb3RhY2NlbnQ9NzgxNTtlLndkb3RiZWxvdz03ODE3O2Uud2VoaXJhZ2FuYT0xMjQzMztlLndlaWVyc3RyYXNzPTg0NzI7ZS53ZWthdGFrYW5hPTEyNTI5O2Uud2Vrb3JlYW49MTI2Mzg7ZS53ZW9rb3JlYW49MTI2Mzc7ZS53Z3JhdmU9NzgwOTtlLndoaXRlYnVsbGV0PTk3MDI7ZS53aGl0ZWNpcmNsZT05Njc1O2Uud2hpdGVjaXJjbGVpbnZlcnNlPTk2ODk7ZS53aGl0ZWNvcm5lcmJyYWNrZXRsZWZ0PTEyMzAyO2Uud2hpdGVjb3JuZXJicmFja2V0bGVmdHZlcnRpY2FsPTY1MDkxO2Uud2hpdGVjb3JuZXJicmFja2V0cmlnaHQ9MTIzMDM7ZS53aGl0ZWNvcm5lcmJyYWNrZXRyaWdodHZlcnRpY2FsPTY1MDkyO2Uud2hpdGVkaWFtb25kPTk2NzE7ZS53aGl0ZWRpYW1vbmRjb250YWluaW5nYmxhY2tzbWFsbGRpYW1vbmQ9OTY3MjtlLndoaXRlZG93bnBvaW50aW5nc21hbGx0cmlhbmdsZT05NjYzO2Uud2hpdGVkb3ducG9pbnRpbmd0cmlhbmdsZT05NjYxO2Uud2hpdGVsZWZ0cG9pbnRpbmdzbWFsbHRyaWFuZ2xlPTk2Njc7ZS53aGl0ZWxlZnRwb2ludGluZ3RyaWFuZ2xlPTk2NjU7ZS53aGl0ZWxlbnRpY3VsYXJicmFja2V0bGVmdD0xMjMxMDtlLndoaXRlbGVudGljdWxhcmJyYWNrZXRyaWdodD0xMjMxMTtlLndoaXRlcmlnaHRwb2ludGluZ3NtYWxsdHJpYW5nbGU9OTY1NztlLndoaXRlcmlnaHRwb2ludGluZ3RyaWFuZ2xlPTk2NTU7ZS53aGl0ZXNtYWxsc3F1YXJlPTk2NDM7ZS53aGl0ZXNtaWxpbmdmYWNlPTk3ODY7ZS53aGl0ZXNxdWFyZT05NjMzO2Uud2hpdGVzdGFyPTk3MzQ7ZS53aGl0ZXRlbGVwaG9uZT05NzQzO2Uud2hpdGV0b3J0b2lzZXNoZWxsYnJhY2tldGxlZnQ9MTIzMTI7ZS53aGl0ZXRvcnRvaXNlc2hlbGxicmFja2V0cmlnaHQ9MTIzMTM7ZS53aGl0ZXVwcG9pbnRpbmdzbWFsbHRyaWFuZ2xlPTk2NTM7ZS53aGl0ZXVwcG9pbnRpbmd0cmlhbmdsZT05NjUxO2Uud2loaXJhZ2FuYT0xMjQzMjtlLndpa2F0YWthbmE9MTI1Mjg7ZS53aWtvcmVhbj0xMjYzOTtlLndtb25vc3BhY2U9NjUzNjc7ZS53b2hpcmFnYW5hPTEyNDM0O2Uud29rYXRha2FuYT0xMjUzMDtlLndva2F0YWthbmFoYWxmd2lkdGg9NjUzODI7ZS53b249ODM2MTtlLndvbm1vbm9zcGFjZT02NTUxMDtlLndvd2FlbnRoYWk9MzYyMztlLndwYXJlbj05Mzk0O2Uud3Jpbmc9NzgzMjtlLndzdXBlcmlvcj02OTU7ZS53dHVybmVkPTY1MztlLnd5bm49NDQ3O2UueD0xMjA7ZS54YWJvdmVjbWI9ODI5O2UueGJvcG9tb2ZvPTEyNTYyO2UueGNpcmNsZT05NDQ3O2UueGRpZXJlc2lzPTc4MjE7ZS54ZG90YWNjZW50PTc4MTk7ZS54ZWhhcm1lbmlhbj0xMzg5O2UueGk9OTU4O2UueG1vbm9zcGFjZT02NTM2ODtlLnhwYXJlbj05Mzk1O2UueHN1cGVyaW9yPTczOTtlLnk9MTIxO2UueWFhZG9zcXVhcmU9MTMxMzQ7ZS55YWJlbmdhbGk9MjQ3OTtlLnlhY3V0ZT0yNTM7ZS55YWRldmE9MjM1MTtlLnlhZWtvcmVhbj0xMjYyNjtlLnlhZ3VqYXJhdGk9MjczNTtlLnlhZ3VybXVraGk9MjYwNztlLnlhaGlyYWdhbmE9MTI0MjA7ZS55YWthdGFrYW5hPTEyNTE2O2UueWFrYXRha2FuYWhhbGZ3aWR0aD02NTQyODtlLnlha29yZWFuPTEyNjI1O2UueWFtYWtrYW50aGFpPTM2NjI7ZS55YXNtYWxsaGlyYWdhbmE9MTI0MTk7ZS55YXNtYWxsa2F0YWthbmE9MTI1MTU7ZS55YXNtYWxsa2F0YWthbmFoYWxmd2lkdGg9NjUzODg7ZS55YXRjeXJpbGxpYz0xMTIzO2UueWNpcmNsZT05NDQ4O2UueWNpcmN1bWZsZXg9Mzc1O2UueWRpZXJlc2lzPTI1NTtlLnlkb3RhY2NlbnQ9NzgyMztlLnlkb3RiZWxvdz03OTI1O2UueWVoYXJhYmljPTE2MTA7ZS55ZWhiYXJyZWVhcmFiaWM9MTc0NjtlLnllaGJhcnJlZWZpbmFsYXJhYmljPTY0NDMxO2UueWVoZmluYWxhcmFiaWM9NjUyNjY7ZS55ZWhoYW16YWFib3ZlYXJhYmljPTE1NzQ7ZS55ZWhoYW16YWFib3ZlZmluYWxhcmFiaWM9NjUxNjI7ZS55ZWhoYW16YWFib3ZlaW5pdGlhbGFyYWJpYz02NTE2MztlLnllaGhhbXphYWJvdmVtZWRpYWxhcmFiaWM9NjUxNjQ7ZS55ZWhpbml0aWFsYXJhYmljPTY1MjY3O2UueWVobWVkaWFsYXJhYmljPTY1MjY4O2UueWVobWVlbWluaXRpYWxhcmFiaWM9NjQ3MzM7ZS55ZWhtZWVtaXNvbGF0ZWRhcmFiaWM9NjQ2MDA7ZS55ZWhub29uZmluYWxhcmFiaWM9NjQ2NjA7ZS55ZWh0aHJlZWRvdHNiZWxvd2FyYWJpYz0xNzQ1O2UueWVrb3JlYW49MTI2MzA7ZS55ZW49MTY1O2UueWVubW9ub3NwYWNlPTY1NTA5O2UueWVva29yZWFuPTEyNjI5O2UueWVvcmluaGlldWhrb3JlYW49MTI2Nzg7ZS55ZXJhaGJlbnlvbW9oZWJyZXc9MTQ1MDtlLnllcmFoYmVueW9tb2xlZnRoZWJyZXc9MTQ1MDtlLnllcmljeXJpbGxpYz0xMDk5O2UueWVydWRpZXJlc2lzY3lyaWxsaWM9MTI3MztlLnllc2lldW5na29yZWFuPTEyNjczO2UueWVzaWV1bmdwYW5zaW9za29yZWFuPTEyNjc1O2UueWVzaWV1bmdzaW9za29yZWFuPTEyNjc0O2UueWV0aXZoZWJyZXc9MTQzNDtlLnlncmF2ZT03OTIzO2UueWhvb2s9NDM2O2UueWhvb2thYm92ZT03OTI3O2UueWlhcm1lbmlhbj0xMzk3O2UueWljeXJpbGxpYz0xMTExO2UueWlrb3JlYW49MTI2NDI7ZS55aW55YW5nPTk3NzU7ZS55aXduYXJtZW5pYW49MTQxMDtlLnltb25vc3BhY2U9NjUzNjk7ZS55b2Q9MTQ5NztlLnlvZGRhZ2VzaD02NDMxMztlLnlvZGRhZ2VzaGhlYnJldz02NDMxMztlLnlvZGhlYnJldz0xNDk3O2UueW9keW9kaGVicmV3PTE1MjI7ZS55b2R5b2RwYXRhaGhlYnJldz02NDI4NztlLnlvaGlyYWdhbmE9MTI0MjQ7ZS55b2lrb3JlYW49MTI2ODE7ZS55b2thdGFrYW5hPTEyNTIwO2UueW9rYXRha2FuYWhhbGZ3aWR0aD02NTQzMDtlLnlva29yZWFuPTEyNjM1O2UueW9zbWFsbGhpcmFnYW5hPTEyNDIzO2UueW9zbWFsbGthdGFrYW5hPTEyNTE5O2UueW9zbWFsbGthdGFrYW5haGFsZndpZHRoPTY1MzkwO2UueW90Z3JlZWs9MTAxMTtlLnlveWFla29yZWFuPTEyNjgwO2UueW95YWtvcmVhbj0xMjY3OTtlLnlveWFrdGhhaT0zNjE4O2UueW95aW5ndGhhaT0zNTk3O2UueXBhcmVuPTkzOTY7ZS55cG9nZWdyYW1tZW5pPTg5MDtlLnlwb2dlZ3JhbW1lbmlncmVla2NtYj04Mzc7ZS55cj00MjI7ZS55cmluZz03ODMzO2UueXN1cGVyaW9yPTY5NjtlLnl0aWxkZT03OTI5O2UueXR1cm5lZD02NTQ7ZS55dWhpcmFnYW5hPTEyNDIyO2UueXVpa29yZWFuPTEyNjg0O2UueXVrYXRha2FuYT0xMjUxODtlLnl1a2F0YWthbmFoYWxmd2lkdGg9NjU0Mjk7ZS55dWtvcmVhbj0xMjY0MDtlLnl1c2JpZ2N5cmlsbGljPTExMzE7ZS55dXNiaWdpb3RpZmllZGN5cmlsbGljPTExMzM7ZS55dXNsaXR0bGVjeXJpbGxpYz0xMTI3O2UueXVzbGl0dGxlaW90aWZpZWRjeXJpbGxpYz0xMTI5O2UueXVzbWFsbGhpcmFnYW5hPTEyNDIxO2UueXVzbWFsbGthdGFrYW5hPTEyNTE3O2UueXVzbWFsbGthdGFrYW5haGFsZndpZHRoPTY1Mzg5O2UueXV5ZWtvcmVhbj0xMjY4MztlLnl1eWVva29yZWFuPTEyNjgyO2UueXlhYmVuZ2FsaT0yNTI3O2UueXlhZGV2YT0yMzk5O2Uuej0xMjI7ZS56YWFybWVuaWFuPTEzODI7ZS56YWN1dGU9Mzc4O2UuemFkZXZhPTIzOTU7ZS56YWd1cm11a2hpPTI2NTE7ZS56YWhhcmFiaWM9MTU5MjtlLnphaGZpbmFsYXJhYmljPTY1MjIyO2UuemFoaW5pdGlhbGFyYWJpYz02NTIyMztlLnphaGlyYWdhbmE9MTIzNzQ7ZS56YWhtZWRpYWxhcmFiaWM9NjUyMjQ7ZS56YWluYXJhYmljPTE1ODY7ZS56YWluZmluYWxhcmFiaWM9NjUyMDA7ZS56YWthdGFrYW5hPTEyNDcwO2UuemFxZWZnYWRvbGhlYnJldz0xNDI5O2UuemFxZWZxYXRhbmhlYnJldz0xNDI4O2UuemFycWFoZWJyZXc9MTQzMjtlLnpheWluPTE0OTQ7ZS56YXlpbmRhZ2VzaD02NDMxMDtlLnpheWluZGFnZXNoaGVicmV3PTY0MzEwO2UuemF5aW5oZWJyZXc9MTQ5NDtlLnpib3BvbW9mbz0xMjU2NztlLnpjYXJvbj0zODI7ZS56Y2lyY2xlPTk0NDk7ZS56Y2lyY3VtZmxleD03ODI1O2UuemN1cmw9NjU3O2UuemRvdD0zODA7ZS56ZG90YWNjZW50PTM4MDtlLnpkb3RiZWxvdz03ODI3O2UuemVjeXJpbGxpYz0xMDc5O2UuemVkZXNjZW5kZXJjeXJpbGxpYz0xMTc3O2UuemVkaWVyZXNpc2N5cmlsbGljPTEyNDc7ZS56ZWhpcmFnYW5hPTEyMzgwO2UuemVrYXRha2FuYT0xMjQ3NjtlLnplcm89NDg7ZS56ZXJvYXJhYmljPTE2MzI7ZS56ZXJvYmVuZ2FsaT0yNTM0O2UuemVyb2RldmE9MjQwNjtlLnplcm9ndWphcmF0aT0yNzkwO2UuemVyb2d1cm11a2hpPTI2NjI7ZS56ZXJvaGFja2FyYWJpYz0xNjMyO2UuemVyb2luZmVyaW9yPTgzMjA7ZS56ZXJvbW9ub3NwYWNlPTY1Mjk2O2UuemVyb29sZHN0eWxlPTYzMjgwO2UuemVyb3BlcnNpYW49MTc3NjtlLnplcm9zdXBlcmlvcj04MzA0O2UuemVyb3RoYWk9MzY2NDtlLnplcm93aWR0aGpvaW5lcj02NTI3OTtlLnplcm93aWR0aG5vbmpvaW5lcj04MjA0O2UuemVyb3dpZHRoc3BhY2U9ODIwMztlLnpldGE9OTUwO2Uuemhib3BvbW9mbz0xMjU2MztlLnpoZWFybWVuaWFuPTEzODY7ZS56aGVicmV2ZWN5cmlsbGljPTEyMTg7ZS56aGVjeXJpbGxpYz0xMDc4O2UuemhlZGVzY2VuZGVyY3lyaWxsaWM9MTE3NTtlLnpoZWRpZXJlc2lzY3lyaWxsaWM9MTI0NTtlLnppaGlyYWdhbmE9MTIzNzY7ZS56aWthdGFrYW5hPTEyNDcyO2Uuemlub3JoZWJyZXc9MTQ1NDtlLnpsaW5lYmVsb3c9NzgyOTtlLnptb25vc3BhY2U9NjUzNzA7ZS56b2hpcmFnYW5hPTEyMzgyO2Uuem9rYXRha2FuYT0xMjQ3ODtlLnpwYXJlbj05Mzk3O2UuenJldHJvZmxleGhvb2s9NjU2O2UuenN0cm9rZT00Mzg7ZS56dWhpcmFnYW5hPTEyMzc4O2UuenVrYXRha2FuYT0xMjQ3NDtlWyIubm90ZGVmIl09MDtlLmFuZ2JyYWNrZXRsZWZ0YmlnPTkwMDE7ZS5hbmdicmFja2V0bGVmdEJpZz05MDAxO2UuYW5nYnJhY2tldGxlZnRiaWdnPTkwMDE7ZS5hbmdicmFja2V0bGVmdEJpZ2c9OTAwMTtlLmFuZ2JyYWNrZXRyaWdodEJpZz05MDAyO2UuYW5nYnJhY2tldHJpZ2h0YmlnPTkwMDI7ZS5hbmdicmFja2V0cmlnaHRCaWdnPTkwMDI7ZS5hbmdicmFja2V0cmlnaHRiaWdnPTkwMDI7ZS5hcnJvd2hvb2tsZWZ0PTg2MTg7ZS5hcnJvd2hvb2tyaWdodD04NjE3O2UuYXJyb3dsZWZ0dG9waGFsZj04NjM2O2UuYXJyb3dsZWZ0Ym90aGFsZj04NjM3O2UuYXJyb3dub3J0aGVhc3Q9ODU5OTtlLmFycm93bm9ydGh3ZXN0PTg1OTg7ZS5hcnJvd3JpZ2h0dG9waGFsZj04NjQwO2UuYXJyb3dyaWdodGJvdGhhbGY9ODY0MTtlLmFycm93c291dGhlYXN0PTg2MDA7ZS5hcnJvd3NvdXRod2VzdD04NjAxO2UuYmFja3NsYXNoYmlnPTg3MjY7ZS5iYWNrc2xhc2hCaWc9ODcyNjtlLmJhY2tzbGFzaEJpZ2c9ODcyNjtlLmJhY2tzbGFzaGJpZ2c9ODcyNjtlLmJhcmRibD04MjE0O2UuYnJhY2VodGlwZG93bmxlZnQ9NjUwNzk7ZS5icmFjZWh0aXBkb3ducmlnaHQ9NjUwNzk7ZS5icmFjZWh0aXB1cGxlZnQ9NjUwODA7ZS5icmFjZWh0aXB1cHJpZ2h0PTY1MDgwO2UuYnJhY2VsZWZ0QmlnPTEyMztlLmJyYWNlbGVmdGJpZz0xMjM7ZS5icmFjZWxlZnRiaWdnPTEyMztlLmJyYWNlbGVmdEJpZ2c9MTIzO2UuYnJhY2VyaWdodEJpZz0xMjU7ZS5icmFjZXJpZ2h0YmlnPTEyNTtlLmJyYWNlcmlnaHRiaWdnPTEyNTtlLmJyYWNlcmlnaHRCaWdnPTEyNTtlLmJyYWNrZXRsZWZ0YmlnPTkxO2UuYnJhY2tldGxlZnRCaWc9OTE7ZS5icmFja2V0bGVmdGJpZ2c9OTE7ZS5icmFja2V0bGVmdEJpZ2c9OTE7ZS5icmFja2V0cmlnaHRCaWc9OTM7ZS5icmFja2V0cmlnaHRiaWc9OTM7ZS5icmFja2V0cmlnaHRiaWdnPTkzO2UuYnJhY2tldHJpZ2h0QmlnZz05MztlLmNlaWxpbmdsZWZ0YmlnPTg5Njg7ZS5jZWlsaW5nbGVmdEJpZz04OTY4O2UuY2VpbGluZ2xlZnRCaWdnPTg5Njg7ZS5jZWlsaW5nbGVmdGJpZ2c9ODk2ODtlLmNlaWxpbmdyaWdodGJpZz04OTY5O2UuY2VpbGluZ3JpZ2h0QmlnPTg5Njk7ZS5jZWlsaW5ncmlnaHRiaWdnPTg5Njk7ZS5jZWlsaW5ncmlnaHRCaWdnPTg5Njk7ZS5jaXJjbGVkb3RkaXNwbGF5PTg4NTc7ZS5jaXJjbGVkb3R0ZXh0PTg4NTc7ZS5jaXJjbGVtdWx0aXBseWRpc3BsYXk9ODg1NTtlLmNpcmNsZW11bHRpcGx5dGV4dD04ODU1O2UuY2lyY2xlcGx1c2Rpc3BsYXk9ODg1MztlLmNpcmNsZXBsdXN0ZXh0PTg4NTM7ZS5jb250aW50ZWdyYWxkaXNwbGF5PTg3NTA7ZS5jb250aW50ZWdyYWx0ZXh0PTg3NTA7ZS5jb3Byb2R1Y3RkaXNwbGF5PTg3MjA7ZS5jb3Byb2R1Y3R0ZXh0PTg3MjA7ZS5mbG9vcmxlZnRCaWc9ODk3MDtlLmZsb29ybGVmdGJpZz04OTcwO2UuZmxvb3JsZWZ0YmlnZz04OTcwO2UuZmxvb3JsZWZ0QmlnZz04OTcwO2UuZmxvb3JyaWdodGJpZz04OTcxO2UuZmxvb3JyaWdodEJpZz04OTcxO2UuZmxvb3JyaWdodEJpZ2c9ODk3MTtlLmZsb29ycmlnaHRiaWdnPTg5NzE7ZS5oYXR3aWRlPTc3MDtlLmhhdHdpZGVyPTc3MDtlLmhhdHdpZGVzdD03NzA7ZS5pbnRlcmNhbD03NDg4O2UuaW50ZWdyYWxkaXNwbGF5PTg3NDc7ZS5pbnRlZ3JhbHRleHQ9ODc0NztlLmludGVyc2VjdGlvbmRpc3BsYXk9ODg5ODtlLmludGVyc2VjdGlvbnRleHQ9ODg5ODtlLmxvZ2ljYWxhbmRkaXNwbGF5PTg3NDM7ZS5sb2dpY2FsYW5kdGV4dD04NzQzO2UubG9naWNhbG9yZGlzcGxheT04NzQ0O2UubG9naWNhbG9ydGV4dD04NzQ0O2UucGFyZW5sZWZ0QmlnPTQwO2UucGFyZW5sZWZ0YmlnPTQwO2UucGFyZW5sZWZ0QmlnZz00MDtlLnBhcmVubGVmdGJpZ2c9NDA7ZS5wYXJlbnJpZ2h0QmlnPTQxO2UucGFyZW5yaWdodGJpZz00MTtlLnBhcmVucmlnaHRCaWdnPTQxO2UucGFyZW5yaWdodGJpZ2c9NDE7ZS5wcmltZT04MjQyO2UucHJvZHVjdGRpc3BsYXk9ODcxOTtlLnByb2R1Y3R0ZXh0PTg3MTk7ZS5yYWRpY2FsYmlnPTg3MzA7ZS5yYWRpY2FsQmlnPTg3MzA7ZS5yYWRpY2FsQmlnZz04NzMwO2UucmFkaWNhbGJpZ2c9ODczMDtlLnJhZGljYWxidD04NzMwO2UucmFkaWNhbHRwPTg3MzA7ZS5yYWRpY2FsdmVydGV4PTg3MzA7ZS5zbGFzaGJpZz00NztlLnNsYXNoQmlnPTQ3O2Uuc2xhc2hCaWdnPTQ3O2Uuc2xhc2hiaWdnPTQ3O2Uuc3VtbWF0aW9uZGlzcGxheT04NzIxO2Uuc3VtbWF0aW9udGV4dD04NzIxO2UudGlsZGV3aWRlPTczMjtlLnRpbGRld2lkZXI9NzMyO2UudGlsZGV3aWRlc3Q9NzMyO2UudW5pb25kaXNwbGF5PTg4OTk7ZS51bmlvbm11bHRpZGlzcGxheT04ODQ2O2UudW5pb25tdWx0aXRleHQ9ODg0NjtlLnVuaW9uc3FkaXNwbGF5PTg4NTI7ZS51bmlvbnNxdGV4dD04ODUyO2UudW5pb250ZXh0PTg4OTk7ZS52ZXh0ZW5kZG91YmxlPTg3NDE7ZS52ZXh0ZW5kc2luZ2xlPTg3Mzl9KSksRmk9Z2V0TG9va3VwVGFibGVGYWN0b3J5KChmdW5jdGlvbihlKXtlLnNwYWNlPTMyO2UuYTE9OTk4NTtlLmEyPTk5ODY7ZS5hMjAyPTk5ODc7ZS5hMz05OTg4O2UuYTQ9OTc0MjtlLmE1PTk5OTA7ZS5hMTE5PTk5OTE7ZS5hMTE4PTk5OTI7ZS5hMTE3PTk5OTM7ZS5hMTE9OTc1NTtlLmExMj05NzU4O2UuYTEzPTk5OTY7ZS5hMTQ9OTk5NztlLmExNT05OTk4O2UuYTE2PTk5OTk7ZS5hMTA1PTFlNDtlLmExNz0xMDAwMTtlLmExOD0xMDAwMjtlLmExOT0xMDAwMztlLmEyMD0xMDAwNDtlLmEyMT0xMDAwNTtlLmEyMj0xMDAwNjtlLmEyMz0xMDAwNztlLmEyND0xMDAwODtlLmEyNT0xMDAwOTtlLmEyNj0xMDAxMDtlLmEyNz0xMDAxMTtlLmEyOD0xMDAxMjtlLmE2PTEwMDEzO2UuYTc9MTAwMTQ7ZS5hOD0xMDAxNTtlLmE5PTEwMDE2O2UuYTEwPTEwMDE3O2UuYTI5PTEwMDE4O2UuYTMwPTEwMDE5O2UuYTMxPTEwMDIwO2UuYTMyPTEwMDIxO2UuYTMzPTEwMDIyO2UuYTM0PTEwMDIzO2UuYTM1PTk3MzM7ZS5hMzY9MTAwMjU7ZS5hMzc9MTAwMjY7ZS5hMzg9MTAwMjc7ZS5hMzk9MTAwMjg7ZS5hNDA9MTAwMjk7ZS5hNDE9MTAwMzA7ZS5hNDI9MTAwMzE7ZS5hNDM9MTAwMzI7ZS5hNDQ9MTAwMzM7ZS5hNDU9MTAwMzQ7ZS5hNDY9MTAwMzU7ZS5hNDc9MTAwMzY7ZS5hNDg9MTAwMzc7ZS5hNDk9MTAwMzg7ZS5hNTA9MTAwMzk7ZS5hNTE9MTAwNDA7ZS5hNTI9MTAwNDE7ZS5hNTM9MTAwNDI7ZS5hNTQ9MTAwNDM7ZS5hNTU9MTAwNDQ7ZS5hNTY9MTAwNDU7ZS5hNTc9MTAwNDY7ZS5hNTg9MTAwNDc7ZS5hNTk9MTAwNDg7ZS5hNjA9MTAwNDk7ZS5hNjE9MTAwNTA7ZS5hNjI9MTAwNTE7ZS5hNjM9MTAwNTI7ZS5hNjQ9MTAwNTM7ZS5hNjU9MTAwNTQ7ZS5hNjY9MTAwNTU7ZS5hNjc9MTAwNTY7ZS5hNjg9MTAwNTc7ZS5hNjk9MTAwNTg7ZS5hNzA9MTAwNTk7ZS5hNzE9OTY3OTtlLmE3Mj0xMDA2MTtlLmE3Mz05NjMyO2UuYTc0PTEwMDYzO2UuYTIwMz0xMDA2NDtlLmE3NT0xMDA2NTtlLmEyMDQ9MTAwNjY7ZS5hNzY9OTY1MDtlLmE3Nz05NjYwO2UuYTc4PTk2NzA7ZS5hNzk9MTAwNzA7ZS5hODE9OTY4NztlLmE4Mj0xMDA3MjtlLmE4Mz0xMDA3MztlLmE4ND0xMDA3NDtlLmE5Nz0xMDA3NTtlLmE5OD0xMDA3NjtlLmE5OT0xMDA3NztlLmExMDA9MTAwNzg7ZS5hMTAxPTEwMDgxO2UuYTEwMj0xMDA4MjtlLmExMDM9MTAwODM7ZS5hMTA0PTEwMDg0O2UuYTEwNj0xMDA4NTtlLmExMDc9MTAwODY7ZS5hMTA4PTEwMDg3O2UuYTExMj05ODI3O2UuYTExMT05ODMwO2UuYTExMD05ODI5O2UuYTEwOT05ODI0O2UuYTEyMD05MzEyO2UuYTEyMT05MzEzO2UuYTEyMj05MzE0O2UuYTEyMz05MzE1O2UuYTEyND05MzE2O2UuYTEyNT05MzE3O2UuYTEyNj05MzE4O2UuYTEyNz05MzE5O2UuYTEyOD05MzIwO2UuYTEyOT05MzIxO2UuYTEzMD0xMDEwMjtlLmExMzE9MTAxMDM7ZS5hMTMyPTEwMTA0O2UuYTEzMz0xMDEwNTtlLmExMzQ9MTAxMDY7ZS5hMTM1PTEwMTA3O2UuYTEzNj0xMDEwODtlLmExMzc9MTAxMDk7ZS5hMTM4PTEwMTEwO2UuYTEzOT0xMDExMTtlLmExNDA9MTAxMTI7ZS5hMTQxPTEwMTEzO2UuYTE0Mj0xMDExNDtlLmExNDM9MTAxMTU7ZS5hMTQ0PTEwMTE2O2UuYTE0NT0xMDExNztlLmExNDY9MTAxMTg7ZS5hMTQ3PTEwMTE5O2UuYTE0OD0xMDEyMDtlLmExNDk9MTAxMjE7ZS5hMTUwPTEwMTIyO2UuYTE1MT0xMDEyMztlLmExNTI9MTAxMjQ7ZS5hMTUzPTEwMTI1O2UuYTE1ND0xMDEyNjtlLmExNTU9MTAxMjc7ZS5hMTU2PTEwMTI4O2UuYTE1Nz0xMDEyOTtlLmExNTg9MTAxMzA7ZS5hMTU5PTEwMTMxO2UuYTE2MD0xMDEzMjtlLmExNjE9ODU5NDtlLmExNjM9ODU5NjtlLmExNjQ9ODU5NztlLmExOTY9MTAxMzY7ZS5hMTY1PTEwMTM3O2UuYTE5Mj0xMDEzODtlLmExNjY9MTAxMzk7ZS5hMTY3PTEwMTQwO2UuYTE2OD0xMDE0MTtlLmExNjk9MTAxNDI7ZS5hMTcwPTEwMTQzO2UuYTE3MT0xMDE0NDtlLmExNzI9MTAxNDU7ZS5hMTczPTEwMTQ2O2UuYTE2Mj0xMDE0NztlLmExNzQ9MTAxNDg7ZS5hMTc1PTEwMTQ5O2UuYTE3Nj0xMDE1MDtlLmExNzc9MTAxNTE7ZS5hMTc4PTEwMTUyO2UuYTE3OT0xMDE1MztlLmExOTM9MTAxNTQ7ZS5hMTgwPTEwMTU1O2UuYTE5OT0xMDE1NjtlLmExODE9MTAxNTc7ZS5hMjAwPTEwMTU4O2UuYTE4Mj0xMDE1OTtlLmEyMDE9MTAxNjE7ZS5hMTgzPTEwMTYyO2UuYTE4ND0xMDE2MztlLmExOTc9MTAxNjQ7ZS5hMTg1PTEwMTY1O2UuYTE5ND0xMDE2NjtlLmExOTg9MTAxNjc7ZS5hMTg2PTEwMTY4O2UuYTE5NT0xMDE2OTtlLmExODc9MTAxNzA7ZS5hMTg4PTEwMTcxO2UuYTE4OT0xMDE3MjtlLmExOTA9MTAxNzM7ZS5hMTkxPTEwMTc0O2UuYTg5PTEwMDg4O2UuYTkwPTEwMDg5O2UuYTkzPTEwMDkwO2UuYTk0PTEwMDkxO2UuYTkxPTEwMDkyO2UuYTkyPTEwMDkzO2UuYTIwNT0xMDA5NDtlLmE4NT0xMDA5NTtlLmEyMDY9MTAwOTY7ZS5hODY9MTAwOTc7ZS5hODc9MTAwOTg7ZS5hODg9MTAwOTk7ZS5hOTU9MTAxMDA7ZS5hOTY9MTAxMDE7ZVsiLm5vdGRlZiJdPTB9KSksU2k9Z2V0TG9va3VwVGFibGVGYWN0b3J5KChmdW5jdGlvbihlKXtlWzYzNzIxXT0xNjk7ZVs2MzE5M109MTY5O2VbNjM3MjBdPTE3NDtlWzYzMTk0XT0xNzQ7ZVs2MzcyMl09ODQ4MjtlWzYzMTk1XT04NDgyO2VbNjM3MjldPTkxMjc7ZVs2MzczMF09OTEyODtlWzYzNzMxXT05MTI5O2VbNjM3NDBdPTkxMzE7ZVs2Mzc0MV09OTEzMjtlWzYzNzQyXT05MTMzO2VbNjM3MjZdPTkxMjE7ZVs2MzcyN109OTEyMjtlWzYzNzI4XT05MTIzO2VbNjM3MzddPTkxMjQ7ZVs2MzczOF09OTEyNTtlWzYzNzM5XT05MTI2O2VbNjM3MjNdPTkxMTU7ZVs2MzcyNF09OTExNjtlWzYzNzI1XT05MTE3O2VbNjM3MzRdPTkxMTg7ZVs2MzczNV09OTExOTtlWzYzNzM2XT05MTIwfSkpO2Z1bmN0aW9uIGdldFVuaWNvZGVGb3JHbHlwaChlLHQpe2xldCBpPXRbZV07aWYodm9pZCAwIT09aSlyZXR1cm4gaTtpZighZSlyZXR1cm4tMTtpZigidSI9PT1lWzBdKXtjb25zdCB0PWUubGVuZ3RoO2xldCBhO2lmKDc9PT10JiYibiI9PT1lWzFdJiYiaSI9PT1lWzJdKWE9ZS5zdWJzdHJpbmcoMyk7ZWxzZXtpZighKHQ+PTUmJnQ8PTcpKXJldHVybi0xO2E9ZS5zdWJzdHJpbmcoMSl9aWYoYT09PWEudG9VcHBlckNhc2UoKSl7aT1wYXJzZUludChhLDE2KTtpZihpPj0wKXJldHVybiBpfX1yZXR1cm4tMX1jb25zdCBraT1bWzAsMTI3XSxbMTI4LDI1NV0sWzI1NiwzODNdLFszODQsNTkxXSxbNTkyLDY4Nyw3NDI0LDc1NTEsNzU1Miw3NjE1XSxbNjg4LDc2Nyw0Mjc1Miw0Mjc4M10sWzc2OCw4NzksNzYxNiw3Njc5XSxbODgwLDEwMjNdLFsxMTM5MiwxMTUxOV0sWzEwMjQsMTI3OSwxMjgwLDEzMjcsMTE3NDQsMTE3NzUsNDI1NjAsNDI2NTVdLFsxMzI4LDE0MjNdLFsxNDI0LDE1MzVdLFs0MjI0MCw0MjU1OV0sWzE1MzYsMTc5MSwxODcyLDE5MTldLFsxOTg0LDIwNDddLFsyMzA0LDI0MzFdLFsyNDMyLDI1NTldLFsyNTYwLDI2ODddLFsyNjg4LDI4MTVdLFsyODE2LDI5NDNdLFsyOTQ0LDMwNzFdLFszMDcyLDMxOTldLFszMjAwLDMzMjddLFszMzI4LDM0NTVdLFszNTg0LDM3MTFdLFszNzEyLDM4MzldLFs0MjU2LDQzNTEsMTE1MjAsMTE1NjddLFs2OTEyLDcwMzldLFs0MzUyLDQ2MDddLFs3NjgwLDc5MzUsMTEzNjAsMTEzOTEsNDI3ODQsNDMwMDddLFs3OTM2LDgxOTFdLFs4MTkyLDgzMDMsMTE3NzYsMTE5MDNdLFs4MzA0LDgzNTFdLFs4MzUyLDgzOTldLFs4NDAwLDg0NDddLFs4NDQ4LDg1MjddLFs4NTI4LDg1OTFdLFs4NTkyLDg3MDMsMTAyMjQsMTAyMzksMTA0OTYsMTA2MjMsMTEwMDgsMTEyNjNdLFs4NzA0LDg5NTksMTA3NTIsMTEwMDcsMTAxNzYsMTAyMjMsMTA2MjQsMTA3NTFdLFs4OTYwLDkyMTVdLFs5MjE2LDkyNzldLFs5MjgwLDkzMTFdLFs5MzEyLDk0NzFdLFs5NDcyLDk1OTldLFs5NjAwLDk2MzFdLFs5NjMyLDk3MjddLFs5NzI4LDk5ODNdLFs5OTg0LDEwMTc1XSxbMTIyODgsMTIzNTFdLFsxMjM1MiwxMjQ0N10sWzEyNDQ4LDEyNTQzLDEyNzg0LDEyNzk5XSxbMTI1NDQsMTI1OTEsMTI3MDQsMTI3MzVdLFsxMjU5MiwxMjY4N10sWzQzMDcyLDQzMTM1XSxbMTI4MDAsMTMwNTVdLFsxMzA1NiwxMzMxMV0sWzQ0MDMyLDU1MjE1XSxbNTUyOTYsNTczNDNdLFs2Nzg0MCw2Nzg3MV0sWzE5OTY4LDQwOTU5LDExOTA0LDEyMDMxLDEyMDMyLDEyMjU1LDEyMjcyLDEyMjg3LDEzMzEyLDE5OTAzLDEzMTA3MiwxNzM3OTEsMTI2ODgsMTI3MDNdLFs1NzM0NCw2Mzc0M10sWzEyNzM2LDEyNzgzLDYzNzQ0LDY0MjU1LDE5NDU2MCwxOTUxMDNdLFs2NDI1Niw2NDMzNV0sWzY0MzM2LDY1MDIzXSxbNjUwNTYsNjUwNzFdLFs2NTA0MCw2NTA1NV0sWzY1MTA0LDY1MTM1XSxbNjUxMzYsNjUyNzldLFs2NTI4MCw2NTUxOV0sWzY1NTIwLDY1NTM1XSxbMzg0MCw0MDk1XSxbMTc5MiwxODcxXSxbMTkyMCwxOTgzXSxbMzQ1NiwzNTgzXSxbNDA5Niw0MjU1XSxbNDYwOCw0OTkxLDQ5OTIsNTAyMywxMTY0OCwxMTc0M10sWzUwMjQsNTExOV0sWzUxMjAsNTc1OV0sWzU3NjAsNTc5MV0sWzU3OTIsNTg4N10sWzYwMTYsNjE0M10sWzYxNDQsNjMxOV0sWzEwMjQwLDEwNDk1XSxbNDA5NjAsNDIxMjddLFs1ODg4LDU5MTksNTkyMCw1OTUxLDU5NTIsNTk4Myw1OTg0LDYwMTVdLFs2NjMwNCw2NjM1MV0sWzY2MzUyLDY2MzgzXSxbNjY1NjAsNjY2MzldLFsxMTg3ODQsMTE5MDM5LDExOTA0MCwxMTkyOTUsMTE5Mjk2LDExOTM3NV0sWzExOTgwOCwxMjA4MzFdLFsxMDQ0NDgwLDEwNDg1NzNdLFs2NTAyNCw2NTAzOSw5MTc3NjAsOTE3OTk5XSxbOTE3NTA0LDkxNzYzMV0sWzY0MDAsNjQ3OV0sWzY0ODAsNjUyN10sWzY1MjgsNjYyM10sWzY2NTYsNjY4N10sWzExMjY0LDExMzU5XSxbMTE1NjgsMTE2NDddLFsxOTkwNCwxOTk2N10sWzQzMDA4LDQzMDU1XSxbNjU1MzYsNjU2NjMsNjU2NjQsNjU3OTEsNjU3OTIsNjU4NTVdLFs2NTg1Niw2NTkzNV0sWzY2NDMyLDY2NDYzXSxbNjY0NjQsNjY1MjddLFs2NjY0MCw2NjY4N10sWzY2Njg4LDY2NzM1XSxbNjc1ODQsNjc2NDddLFs2ODA5Niw2ODE5MV0sWzExOTU1MiwxMTk2NDddLFs3MzcyOCw3NDc1MSw3NDc1Miw3NDg3OV0sWzExOTY0OCwxMTk2NzldLFs3MDQwLDcxMDNdLFs3MTY4LDcyNDddLFs3MjQ4LDcyOTVdLFs0MzEzNiw0MzIzMV0sWzQzMjY0LDQzMzExXSxbNDMzMTIsNDMzNTldLFs0MzUyMCw0MzYxNV0sWzY1OTM2LDY1OTk5XSxbNjZlMyw2NjA0N10sWzY2MjA4LDY2MjcxLDY2MTc2LDY2MjA3LDY3ODcyLDY3OTAzXSxbMTI3MDI0LDEyNzEzNSwxMjY5NzYsMTI3MDIzXV07ZnVuY3Rpb24gZ2V0VW5pY29kZVJhbmdlRm9yKGUsdD0tMSl7aWYoLTEhPT10KXtjb25zdCBpPWtpW3RdO2ZvcihsZXQgYT0wLHI9aS5sZW5ndGg7YTxyO2ErPTIpaWYoZT49aVthXSYmZTw9aVthKzFdKXJldHVybiB0fWZvcihsZXQgdD0wLGk9a2kubGVuZ3RoO3Q8aTt0Kyspe2NvbnN0IGk9a2lbdF07Zm9yKGxldCBhPTAscj1pLmxlbmd0aDthPHI7YSs9MilpZihlPj1pW2FdJiZlPD1pW2ErMV0pcmV0dXJuIHR9cmV0dXJuLTF9Y29uc3QgUmk9bmV3IFJlZ0V4cCgiXihcXHMpfChcXHB7TW59KXwoXFxwe0NmfSkkIiwidSIpLE5pPW5ldyBNYXA7Y29uc3QgR2k9ITAsTWk9MSx4aT0yLEhpPTQsSmk9MzIsdmk9WyIubm90ZGVmIiwiLm51bGwiLCJub25tYXJraW5ncmV0dXJuIiwic3BhY2UiLCJleGNsYW0iLCJxdW90ZWRibCIsIm51bWJlcnNpZ24iLCJkb2xsYXIiLCJwZXJjZW50IiwiYW1wZXJzYW5kIiwicXVvdGVzaW5nbGUiLCJwYXJlbmxlZnQiLCJwYXJlbnJpZ2h0IiwiYXN0ZXJpc2siLCJwbHVzIiwiY29tbWEiLCJoeXBoZW4iLCJwZXJpb2QiLCJzbGFzaCIsInplcm8iLCJvbmUiLCJ0d28iLCJ0aHJlZSIsImZvdXIiLCJmaXZlIiwic2l4Iiwic2V2ZW4iLCJlaWdodCIsIm5pbmUiLCJjb2xvbiIsInNlbWljb2xvbiIsImxlc3MiLCJlcXVhbCIsImdyZWF0ZXIiLCJxdWVzdGlvbiIsImF0IiwiQSIsIkIiLCJDIiwiRCIsIkUiLCJGIiwiRyIsIkgiLCJJIiwiSiIsIksiLCJMIiwiTSIsIk4iLCJPIiwiUCIsIlEiLCJSIiwiUyIsIlQiLCJVIiwiViIsIlciLCJYIiwiWSIsIloiLCJicmFja2V0bGVmdCIsImJhY2tzbGFzaCIsImJyYWNrZXRyaWdodCIsImFzY2lpY2lyY3VtIiwidW5kZXJzY29yZSIsImdyYXZlIiwiYSIsImIiLCJjIiwiZCIsImUiLCJmIiwiZyIsImgiLCJpIiwiaiIsImsiLCJsIiwibSIsIm4iLCJvIiwicCIsInEiLCJyIiwicyIsInQiLCJ1IiwidiIsInciLCJ4IiwieSIsInoiLCJicmFjZWxlZnQiLCJiYXIiLCJicmFjZXJpZ2h0IiwiYXNjaWl0aWxkZSIsIkFkaWVyZXNpcyIsIkFyaW5nIiwiQ2NlZGlsbGEiLCJFYWN1dGUiLCJOdGlsZGUiLCJPZGllcmVzaXMiLCJVZGllcmVzaXMiLCJhYWN1dGUiLCJhZ3JhdmUiLCJhY2lyY3VtZmxleCIsImFkaWVyZXNpcyIsImF0aWxkZSIsImFyaW5nIiwiY2NlZGlsbGEiLCJlYWN1dGUiLCJlZ3JhdmUiLCJlY2lyY3VtZmxleCIsImVkaWVyZXNpcyIsImlhY3V0ZSIsImlncmF2ZSIsImljaXJjdW1mbGV4IiwiaWRpZXJlc2lzIiwibnRpbGRlIiwib2FjdXRlIiwib2dyYXZlIiwib2NpcmN1bWZsZXgiLCJvZGllcmVzaXMiLCJvdGlsZGUiLCJ1YWN1dGUiLCJ1Z3JhdmUiLCJ1Y2lyY3VtZmxleCIsInVkaWVyZXNpcyIsImRhZ2dlciIsImRlZ3JlZSIsImNlbnQiLCJzdGVybGluZyIsInNlY3Rpb24iLCJidWxsZXQiLCJwYXJhZ3JhcGgiLCJnZXJtYW5kYmxzIiwicmVnaXN0ZXJlZCIsImNvcHlyaWdodCIsInRyYWRlbWFyayIsImFjdXRlIiwiZGllcmVzaXMiLCJub3RlcXVhbCIsIkFFIiwiT3NsYXNoIiwiaW5maW5pdHkiLCJwbHVzbWludXMiLCJsZXNzZXF1YWwiLCJncmVhdGVyZXF1YWwiLCJ5ZW4iLCJtdSIsInBhcnRpYWxkaWZmIiwic3VtbWF0aW9uIiwicHJvZHVjdCIsInBpIiwiaW50ZWdyYWwiLCJvcmRmZW1pbmluZSIsIm9yZG1hc2N1bGluZSIsIk9tZWdhIiwiYWUiLCJvc2xhc2giLCJxdWVzdGlvbmRvd24iLCJleGNsYW1kb3duIiwibG9naWNhbG5vdCIsInJhZGljYWwiLCJmbG9yaW4iLCJhcHByb3hlcXVhbCIsIkRlbHRhIiwiZ3VpbGxlbW90bGVmdCIsImd1aWxsZW1vdHJpZ2h0IiwiZWxsaXBzaXMiLCJub25icmVha2luZ3NwYWNlIiwiQWdyYXZlIiwiQXRpbGRlIiwiT3RpbGRlIiwiT0UiLCJvZSIsImVuZGFzaCIsImVtZGFzaCIsInF1b3RlZGJsbGVmdCIsInF1b3RlZGJscmlnaHQiLCJxdW90ZWxlZnQiLCJxdW90ZXJpZ2h0IiwiZGl2aWRlIiwibG96ZW5nZSIsInlkaWVyZXNpcyIsIllkaWVyZXNpcyIsImZyYWN0aW9uIiwiY3VycmVuY3kiLCJndWlsc2luZ2xsZWZ0IiwiZ3VpbHNpbmdscmlnaHQiLCJmaSIsImZsIiwiZGFnZ2VyZGJsIiwicGVyaW9kY2VudGVyZWQiLCJxdW90ZXNpbmdsYmFzZSIsInF1b3RlZGJsYmFzZSIsInBlcnRob3VzYW5kIiwiQWNpcmN1bWZsZXgiLCJFY2lyY3VtZmxleCIsIkFhY3V0ZSIsIkVkaWVyZXNpcyIsIkVncmF2ZSIsIklhY3V0ZSIsIkljaXJjdW1mbGV4IiwiSWRpZXJlc2lzIiwiSWdyYXZlIiwiT2FjdXRlIiwiT2NpcmN1bWZsZXgiLCJhcHBsZSIsIk9ncmF2ZSIsIlVhY3V0ZSIsIlVjaXJjdW1mbGV4IiwiVWdyYXZlIiwiZG90bGVzc2kiLCJjaXJjdW1mbGV4IiwidGlsZGUiLCJtYWNyb24iLCJicmV2ZSIsImRvdGFjY2VudCIsInJpbmciLCJjZWRpbGxhIiwiaHVuZ2FydW1sYXV0Iiwib2dvbmVrIiwiY2Fyb24iLCJMc2xhc2giLCJsc2xhc2giLCJTY2Fyb24iLCJzY2Fyb24iLCJaY2Fyb24iLCJ6Y2Fyb24iLCJicm9rZW5iYXIiLCJFdGgiLCJldGgiLCJZYWN1dGUiLCJ5YWN1dGUiLCJUaG9ybiIsInRob3JuIiwibWludXMiLCJtdWx0aXBseSIsIm9uZXN1cGVyaW9yIiwidHdvc3VwZXJpb3IiLCJ0aHJlZXN1cGVyaW9yIiwib25laGFsZiIsIm9uZXF1YXJ0ZXIiLCJ0aHJlZXF1YXJ0ZXJzIiwiZnJhbmMiLCJHYnJldmUiLCJnYnJldmUiLCJJZG90YWNjZW50IiwiU2NlZGlsbGEiLCJzY2VkaWxsYSIsIkNhY3V0ZSIsImNhY3V0ZSIsIkNjYXJvbiIsImNjYXJvbiIsImRjcm9hdCJdO2Z1bmN0aW9uIHJlY292ZXJHbHlwaE5hbWUoZSx0KXtpZih2b2lkIDAhPT10W2VdKXJldHVybiBlO2NvbnN0IGk9Z2V0VW5pY29kZUZvckdseXBoKGUsdCk7aWYoLTEhPT1pKWZvcihjb25zdCBlIGluIHQpaWYodFtlXT09PWkpcmV0dXJuIGU7aW5mbygiVW5hYmxlIHRvIHJlY292ZXIgYSBzdGFuZGFyZCBnbHlwaCBuYW1lIGZvcjogIitlKTtyZXR1cm4gZX1mdW5jdGlvbiB0eXBlMUZvbnRHbHlwaE1hcHBpbmcoZSx0LGkpe2NvbnN0IGE9T2JqZWN0LmNyZWF0ZShudWxsKTtsZXQgcixzLG47Y29uc3Qgbz0hIShlLmZsYWdzJkhpKTtpZihlLmlzSW50ZXJuYWxGb250KXtuPXQ7Zm9yKHM9MDtzPG4ubGVuZ3RoO3MrKyl7cj1pLmluZGV4T2YobltzXSk7YVtzXT1yPj0wP3I6MH19ZWxzZSBpZihlLmJhc2VFbmNvZGluZ05hbWUpe249Z2V0RW5jb2RpbmcoZS5iYXNlRW5jb2RpbmdOYW1lKTtmb3Iocz0wO3M8bi5sZW5ndGg7cysrKXtyPWkuaW5kZXhPZihuW3NdKTthW3NdPXI+PTA/cjowfX1lbHNlIGlmKG8pZm9yKHMgaW4gdClhW3NdPXRbc107ZWxzZXtuPUJpO2ZvcihzPTA7czxuLmxlbmd0aDtzKyspe3I9aS5pbmRleE9mKG5bc10pO2Fbc109cj49MD9yOjB9fWNvbnN0IGc9ZS5kaWZmZXJlbmNlcztsZXQgYztpZihnKWZvcihzIGluIGcpe2NvbnN0IGU9Z1tzXTtyPWkuaW5kZXhPZihlKTtpZigtMT09PXIpe2N8fChjPURpKCkpO2NvbnN0IHQ9cmVjb3ZlckdseXBoTmFtZShlLGMpO3QhPT1lJiYocj1pLmluZGV4T2YodCkpfWFbc109cj49MD9yOjB9cmV0dXJuIGF9ZnVuY3Rpb24gbm9ybWFsaXplRm9udE5hbWUoZSl7cmV0dXJuIGUucmVwbGFjZUFsbCgvWyxfXS9nLCItIikucmVwbGFjZUFsbCgvXHMvZywiIil9Y29uc3QgWWk9Z2V0TG9va3VwVGFibGVGYWN0b3J5KChlPT57ZVs4MjExXT02NTA3NDtlWzgyMTJdPTY1MDczO2VbODIyOV09NjUwNzI7ZVs4MjMwXT02NTA0OTtlWzEyMjg5XT02NTA0MTtlWzEyMjkwXT02NTA0MjtlWzEyMjk2XT02NTA4NztlWzEyMjk3XT02NTA4ODtlWzEyMjk4XT02NTA4NTtlWzEyMjk5XT02NTA4NjtlWzEyMzAwXT02NTA4OTtlWzEyMzAxXT02NTA5MDtlWzEyMzAyXT02NTA5MTtlWzEyMzAzXT02NTA5MjtlWzEyMzA0XT02NTA4MztlWzEyMzA1XT02NTA4NDtlWzEyMzA4XT02NTA4MTtlWzEyMzA5XT02NTA4MjtlWzEyMzEwXT02NTA0NztlWzEyMzExXT02NTA0ODtlWzY1MTAzXT02NTA3NjtlWzY1MjgxXT02NTA0NTtlWzY1Mjg4XT02NTA3NztlWzY1Mjg5XT02NTA3ODtlWzY1MjkyXT02NTA0MDtlWzY1MzA2XT02NTA0MztlWzY1MzA3XT02NTA0NDtlWzY1MzExXT02NTA0NjtlWzY1MzM5XT02NTA5NTtlWzY1MzQxXT02NTA5NjtlWzY1MzQzXT02NTA3NTtlWzY1MzcxXT02NTA3OTtlWzY1MzczXT02NTA4MH0pKSxLaT1nZXRMb29rdXBUYWJsZUZhY3RvcnkoKGZ1bmN0aW9uKGUpe2VbIlRpbWVzLVJvbWFuIl09IlRpbWVzLVJvbWFuIjtlLkhlbHZldGljYT0iSGVsdmV0aWNhIjtlLkNvdXJpZXI9IkNvdXJpZXIiO2UuU3ltYm9sPSJTeW1ib2wiO2VbIlRpbWVzLUJvbGQiXT0iVGltZXMtQm9sZCI7ZVsiSGVsdmV0aWNhLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiO2VbIkNvdXJpZXItQm9sZCJdPSJDb3VyaWVyLUJvbGQiO2UuWmFwZkRpbmdiYXRzPSJaYXBmRGluZ2JhdHMiO2VbIlRpbWVzLUl0YWxpYyJdPSJUaW1lcy1JdGFsaWMiO2VbIkhlbHZldGljYS1PYmxpcXVlIl09IkhlbHZldGljYS1PYmxpcXVlIjtlWyJDb3VyaWVyLU9ibGlxdWUiXT0iQ291cmllci1PYmxpcXVlIjtlWyJUaW1lcy1Cb2xkSXRhbGljIl09IlRpbWVzLUJvbGRJdGFsaWMiO2VbIkhlbHZldGljYS1Cb2xkT2JsaXF1ZSJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiO2VbIkNvdXJpZXItQm9sZE9ibGlxdWUiXT0iQ291cmllci1Cb2xkT2JsaXF1ZSI7ZS5BcmlhbE5hcnJvdz0iSGVsdmV0aWNhIjtlWyJBcmlhbE5hcnJvdy1Cb2xkIl09IkhlbHZldGljYS1Cb2xkIjtlWyJBcmlhbE5hcnJvdy1Cb2xkSXRhbGljIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSI7ZVsiQXJpYWxOYXJyb3ctSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIjtlLkFyaWFsQmxhY2s9IkhlbHZldGljYSI7ZVsiQXJpYWxCbGFjay1Cb2xkIl09IkhlbHZldGljYS1Cb2xkIjtlWyJBcmlhbEJsYWNrLUJvbGRJdGFsaWMiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIjtlWyJBcmlhbEJsYWNrLUl0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSI7ZVsiQXJpYWwtQmxhY2siXT0iSGVsdmV0aWNhIjtlWyJBcmlhbC1CbGFjay1Cb2xkIl09IkhlbHZldGljYS1Cb2xkIjtlWyJBcmlhbC1CbGFjay1Cb2xkSXRhbGljIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSI7ZVsiQXJpYWwtQmxhY2stSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIjtlLkFyaWFsPSJIZWx2ZXRpY2EiO2VbIkFyaWFsLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiO2VbIkFyaWFsLUJvbGRJdGFsaWMiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIjtlWyJBcmlhbC1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiO2UuQXJpYWxNVD0iSGVsdmV0aWNhIjtlWyJBcmlhbC1Cb2xkSXRhbGljTVQiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIjtlWyJBcmlhbC1Cb2xkTVQiXT0iSGVsdmV0aWNhLUJvbGQiO2VbIkFyaWFsLUl0YWxpY01UIl09IkhlbHZldGljYS1PYmxpcXVlIjtlWyJBcmlhbC1Cb2xkSXRhbGljTVQtQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiO2VbIkFyaWFsLUJvbGRNVC1Cb2xkIl09IkhlbHZldGljYS1Cb2xkIjtlWyJBcmlhbC1JdGFsaWNNVC1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiO2UuQXJpYWxVbmljb2RlTVM9IkhlbHZldGljYSI7ZVsiQXJpYWxVbmljb2RlTVMtQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCI7ZVsiQXJpYWxVbmljb2RlTVMtQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiO2VbIkFyaWFsVW5pY29kZU1TLUl0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSI7ZVsiQ291cmllci1Cb2xkSXRhbGljIl09IkNvdXJpZXItQm9sZE9ibGlxdWUiO2VbIkNvdXJpZXItSXRhbGljIl09IkNvdXJpZXItT2JsaXF1ZSI7ZS5Db3VyaWVyTmV3PSJDb3VyaWVyIjtlWyJDb3VyaWVyTmV3LUJvbGQiXT0iQ291cmllci1Cb2xkIjtlWyJDb3VyaWVyTmV3LUJvbGRJdGFsaWMiXT0iQ291cmllci1Cb2xkT2JsaXF1ZSI7ZVsiQ291cmllck5ldy1JdGFsaWMiXT0iQ291cmllci1PYmxpcXVlIjtlWyJDb3VyaWVyTmV3UFMtQm9sZEl0YWxpY01UIl09IkNvdXJpZXItQm9sZE9ibGlxdWUiO2VbIkNvdXJpZXJOZXdQUy1Cb2xkTVQiXT0iQ291cmllci1Cb2xkIjtlWyJDb3VyaWVyTmV3UFMtSXRhbGljTVQiXT0iQ291cmllci1PYmxpcXVlIjtlLkNvdXJpZXJOZXdQU01UPSJDb3VyaWVyIjtlWyJIZWx2ZXRpY2EtQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiO2VbIkhlbHZldGljYS1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiO2VbIkhlbHZldGljYUxUU3RkLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiO2VbIlN5bWJvbC1Cb2xkIl09IlN5bWJvbCI7ZVsiU3ltYm9sLUJvbGRJdGFsaWMiXT0iU3ltYm9sIjtlWyJTeW1ib2wtSXRhbGljIl09IlN5bWJvbCI7ZS5UaW1lc05ld1JvbWFuPSJUaW1lcy1Sb21hbiI7ZVsiVGltZXNOZXdSb21hbi1Cb2xkIl09IlRpbWVzLUJvbGQiO2VbIlRpbWVzTmV3Um9tYW4tQm9sZEl0YWxpYyJdPSJUaW1lcy1Cb2xkSXRhbGljIjtlWyJUaW1lc05ld1JvbWFuLUl0YWxpYyJdPSJUaW1lcy1JdGFsaWMiO2UuVGltZXNOZXdSb21hblBTPSJUaW1lcy1Sb21hbiI7ZVsiVGltZXNOZXdSb21hblBTLUJvbGQiXT0iVGltZXMtQm9sZCI7ZVsiVGltZXNOZXdSb21hblBTLUJvbGRJdGFsaWMiXT0iVGltZXMtQm9sZEl0YWxpYyI7ZVsiVGltZXNOZXdSb21hblBTLUJvbGRJdGFsaWNNVCJdPSJUaW1lcy1Cb2xkSXRhbGljIjtlWyJUaW1lc05ld1JvbWFuUFMtQm9sZE1UIl09IlRpbWVzLUJvbGQiO2VbIlRpbWVzTmV3Um9tYW5QUy1JdGFsaWMiXT0iVGltZXMtSXRhbGljIjtlWyJUaW1lc05ld1JvbWFuUFMtSXRhbGljTVQiXT0iVGltZXMtSXRhbGljIjtlLlRpbWVzTmV3Um9tYW5QU01UPSJUaW1lcy1Sb21hbiI7ZVsiVGltZXNOZXdSb21hblBTTVQtQm9sZCJdPSJUaW1lcy1Cb2xkIjtlWyJUaW1lc05ld1JvbWFuUFNNVC1Cb2xkSXRhbGljIl09IlRpbWVzLUJvbGRJdGFsaWMiO2VbIlRpbWVzTmV3Um9tYW5QU01ULUl0YWxpYyJdPSJUaW1lcy1JdGFsaWMifSkpLFRpPWdldExvb2t1cFRhYmxlRmFjdG9yeSgoZnVuY3Rpb24oZSl7ZS5Db3VyaWVyPSJGb3hpdEZpeGVkLnBmYiI7ZVsiQ291cmllci1Cb2xkIl09IkZveGl0Rml4ZWRCb2xkLnBmYiI7ZVsiQ291cmllci1Cb2xkT2JsaXF1ZSJdPSJGb3hpdEZpeGVkQm9sZEl0YWxpYy5wZmIiO2VbIkNvdXJpZXItT2JsaXF1ZSJdPSJGb3hpdEZpeGVkSXRhbGljLnBmYiI7ZS5IZWx2ZXRpY2E9IkxpYmVyYXRpb25TYW5zLVJlZ3VsYXIudHRmIjtlWyJIZWx2ZXRpY2EtQm9sZCJdPSJMaWJlcmF0aW9uU2Fucy1Cb2xkLnR0ZiI7ZVsiSGVsdmV0aWNhLUJvbGRPYmxpcXVlIl09IkxpYmVyYXRpb25TYW5zLUJvbGRJdGFsaWMudHRmIjtlWyJIZWx2ZXRpY2EtT2JsaXF1ZSJdPSJMaWJlcmF0aW9uU2Fucy1JdGFsaWMudHRmIjtlWyJUaW1lcy1Sb21hbiJdPSJGb3hpdFNlcmlmLnBmYiI7ZVsiVGltZXMtQm9sZCJdPSJGb3hpdFNlcmlmQm9sZC5wZmIiO2VbIlRpbWVzLUJvbGRJdGFsaWMiXT0iRm94aXRTZXJpZkJvbGRJdGFsaWMucGZiIjtlWyJUaW1lcy1JdGFsaWMiXT0iRm94aXRTZXJpZkl0YWxpYy5wZmIiO2UuU3ltYm9sPSJGb3hpdFN5bWJvbC5wZmIiO2UuWmFwZkRpbmdiYXRzPSJGb3hpdERpbmdiYXRzLnBmYiI7ZVsiTGliZXJhdGlvblNhbnMtUmVndWxhciJdPSJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyLnR0ZiI7ZVsiTGliZXJhdGlvblNhbnMtQm9sZCJdPSJMaWJlcmF0aW9uU2Fucy1Cb2xkLnR0ZiI7ZVsiTGliZXJhdGlvblNhbnMtSXRhbGljIl09IkxpYmVyYXRpb25TYW5zLUl0YWxpYy50dGYiO2VbIkxpYmVyYXRpb25TYW5zLUJvbGRJdGFsaWMiXT0iTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYy50dGYifSkpLHFpPWdldExvb2t1cFRhYmxlRmFjdG9yeSgoZnVuY3Rpb24oZSl7ZS5DYWxpYnJpPSJIZWx2ZXRpY2EiO2VbIkNhbGlicmktQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCI7ZVsiQ2FsaWJyaS1Cb2xkSXRhbGljIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSI7ZVsiQ2FsaWJyaS1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiO2UuQ2VudHVyeUdvdGhpYz0iSGVsdmV0aWNhIjtlWyJDZW50dXJ5R290aGljLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiO2VbIkNlbnR1cnlHb3RoaWMtQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiO2VbIkNlbnR1cnlHb3RoaWMtSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIjtlLkNvbWljU2Fuc01TPSJDb21pYyBTYW5zIE1TIjtlWyJDb21pY1NhbnNNUy1Cb2xkIl09IkNvbWljIFNhbnMgTVMtQm9sZCI7ZVsiQ29taWNTYW5zTVMtQm9sZEl0YWxpYyJdPSJDb21pYyBTYW5zIE1TLUJvbGRJdGFsaWMiO2VbIkNvbWljU2Fuc01TLUl0YWxpYyJdPSJDb21pYyBTYW5zIE1TLUl0YWxpYyI7ZS5HaWxsU2Fuc01UPSJIZWx2ZXRpY2EiO2VbIkdpbGxTYW5zTVQtQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCI7ZVsiR2lsbFNhbnNNVC1Cb2xkSXRhbGljIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSI7ZVsiR2lsbFNhbnNNVC1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiO2UuSW1wYWN0PSJIZWx2ZXRpY2EiO2VbIkl0Y1N5bWJvbC1Cb2xkIl09IkhlbHZldGljYS1Cb2xkIjtlWyJJdGNTeW1ib2wtQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiO2VbIkl0Y1N5bWJvbC1Cb29rIl09IkhlbHZldGljYSI7ZVsiSXRjU3ltYm9sLUJvb2tJdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiO2VbIkl0Y1N5bWJvbC1NZWRpdW0iXT0iSGVsdmV0aWNhIjtlWyJJdGNTeW1ib2wtTWVkaXVtSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIjtlLkx1Y2lkYUNvbnNvbGU9IkNvdXJpZXIiO2VbIkx1Y2lkYUNvbnNvbGUtQm9sZCJdPSJDb3VyaWVyLUJvbGQiO2VbIkx1Y2lkYUNvbnNvbGUtQm9sZEl0YWxpYyJdPSJDb3VyaWVyLUJvbGRPYmxpcXVlIjtlWyJMdWNpZGFDb25zb2xlLUl0YWxpYyJdPSJDb3VyaWVyLU9ibGlxdWUiO2VbIkx1Y2lkYVNhbnMtRGVtaSJdPSJIZWx2ZXRpY2EtQm9sZCI7ZVsiTVMtR290aGljIl09Ik1TIEdvdGhpYyI7ZVsiTVMtR290aGljLUJvbGQiXT0iTVMgR290aGljLUJvbGQiO2VbIk1TLUdvdGhpYy1Cb2xkSXRhbGljIl09Ik1TIEdvdGhpYy1Cb2xkSXRhbGljIjtlWyJNUy1Hb3RoaWMtSXRhbGljIl09Ik1TIEdvdGhpYy1JdGFsaWMiO2VbIk1TLU1pbmNobyJdPSJNUyBNaW5jaG8iO2VbIk1TLU1pbmNoby1Cb2xkIl09Ik1TIE1pbmNoby1Cb2xkIjtlWyJNUy1NaW5jaG8tQm9sZEl0YWxpYyJdPSJNUyBNaW5jaG8tQm9sZEl0YWxpYyI7ZVsiTVMtTWluY2hvLUl0YWxpYyJdPSJNUyBNaW5jaG8tSXRhbGljIjtlWyJNUy1QR290aGljIl09Ik1TIFBHb3RoaWMiO2VbIk1TLVBHb3RoaWMtQm9sZCJdPSJNUyBQR290aGljLUJvbGQiO2VbIk1TLVBHb3RoaWMtQm9sZEl0YWxpYyJdPSJNUyBQR290aGljLUJvbGRJdGFsaWMiO2VbIk1TLVBHb3RoaWMtSXRhbGljIl09Ik1TIFBHb3RoaWMtSXRhbGljIjtlWyJNUy1QTWluY2hvIl09Ik1TIFBNaW5jaG8iO2VbIk1TLVBNaW5jaG8tQm9sZCJdPSJNUyBQTWluY2hvLUJvbGQiO2VbIk1TLVBNaW5jaG8tQm9sZEl0YWxpYyJdPSJNUyBQTWluY2hvLUJvbGRJdGFsaWMiO2VbIk1TLVBNaW5jaG8tSXRhbGljIl09Ik1TIFBNaW5jaG8tSXRhbGljIjtlLk51cHRpYWxTY3JpcHQ9IlRpbWVzLUl0YWxpYyI7ZS5TZWdvZVVJU3ltYm9sPSJIZWx2ZXRpY2EifSkpLE9pPWdldExvb2t1cFRhYmxlRmFjdG9yeSgoZnVuY3Rpb24oZSl7ZVsiQWRvYmUgSmVuc29uIl09ITA7ZVsiQWRvYmUgVGV4dCJdPSEwO2UuQWxiZXJ0dXM9ITA7ZS5BbGR1cz0hMDtlLkFsZXhhbmRyaWE9ITA7ZS5BbGdlcmlhbj0hMDtlWyJBbWVyaWNhbiBUeXBld3JpdGVyIl09ITA7ZS5BbnRpcXVhPSEwO2UuQXBleD0hMDtlLkFybm89ITA7ZS5Bc3Rlcj0hMDtlLkF1cm9yYT0hMDtlLkJhc2tlcnZpbGxlPSEwO2UuQmVsbD0hMDtlLkJlbWJvPSEwO2VbIkJlbWJvIFNjaG9vbGJvb2siXT0hMDtlLkJlbmd1aWF0PSEwO2VbIkJlcmtlbGV5IE9sZCBTdHlsZSJdPSEwO2VbIkJlcm5oYXJkIE1vZGVybiJdPSEwO2VbIkJlcnRob2xkIENpdHkiXT0hMDtlLkJvZG9uaT0hMDtlWyJCYXVlciBCb2RvbmkiXT0hMDtlWyJCb29rIEFudGlxdWEiXT0hMDtlLkJvb2ttYW49ITA7ZVsiQm9yZGVhdXggUm9tYW4iXT0hMDtlWyJDYWxpZm9ybmlhbiBGQiJdPSEwO2UuQ2FsaXN0bz0hMDtlLkNhbHZlcnQ9ITA7ZS5DYXBpdGFscz0hMDtlLkNhbWJyaWE9ITA7ZS5DYXJ0aWVyPSEwO2UuQ2FzbG9uPSEwO2UuQ2F0dWxsPSEwO2UuQ2VudGF1cj0hMDtlWyJDZW50dXJ5IE9sZCBTdHlsZSJdPSEwO2VbIkNlbnR1cnkgU2Nob29sYm9vayJdPSEwO2UuQ2hhcGFycmFsPSEwO2VbIkNoYXJpcyBTSUwiXT0hMDtlLkNoZWx0ZW5oYW09ITA7ZVsiQ2hvbGxhIFNsYWIiXT0hMDtlLkNsYXJlbmRvbj0hMDtlLkNsZWFyZmFjZT0hMDtlLkNvY2hpbj0hMDtlLkNvbG9ubmE9ITA7ZVsiQ29tcHV0ZXIgTW9kZXJuIl09ITA7ZVsiQ29uY3JldGUgUm9tYW4iXT0hMDtlLkNvbnN0YW50aWE9ITA7ZVsiQ29vcGVyIEJsYWNrIl09ITA7ZS5Db3JvbmE9ITA7ZS5FY290eXBlPSEwO2UuRWd5cHRpZW5uZT0hMDtlLkVsZXBoYW50PSEwO2UuRXhjZWxzaW9yPSEwO2UuRmFpcmZpZWxkPSEwO2VbIkZGIFNjYWxhIl09ITA7ZS5Gb2xrYXJkPSEwO2UuRm9vdGxpZ2h0PSEwO2UuRnJlZVNlcmlmPSEwO2VbIkZyaXogUXVhZHJhdGEiXT0hMDtlLkdhcmFtb25kPSEwO2UuR2VudGl1bT0hMDtlLkdlb3JnaWE9ITA7ZS5HbG91Y2VzdGVyPSEwO2VbIkdvdWR5IE9sZCBTdHlsZSJdPSEwO2VbIkdvdWR5IFNjaG9vbGJvb2siXT0hMDtlWyJHb3VkeSBQcm8gRm9udCJdPSEwO2UuR3Jhbmpvbj0hMDtlWyJHdWFyZGlhbiBFZ3lwdGlhbiJdPSEwO2UuSGVhdGhlcj0hMDtlLkhlcmN1bGVzPSEwO2VbIkhpZ2ggVG93ZXIgVGV4dCJdPSEwO2UuSGlyb3NoaWdlPSEwO2VbIkhvZWZsZXIgVGV4dCJdPSEwO2VbIkh1bWFuYSBTZXJpZiJdPSEwO2UuSW1wcmludD0hMDtlWyJJb25pYyBOby4gNSJdPSEwO2UuSmFuc29uPSEwO2UuSm9hbm5hPSEwO2UuS29yaW5uYT0hMDtlLkxleGljb249ITA7ZS5MaWJlcmF0aW9uU2VyaWY9ITA7ZVsiTGliZXJhdGlvbiBTZXJpZiJdPSEwO2VbIkxpbnV4IExpYmVydGluZSJdPSEwO2UuTGl0ZXJhdHVybmF5YT0hMDtlLkx1Y2lkYT0hMDtlWyJMdWNpZGEgQnJpZ2h0Il09ITA7ZS5NZWxpb3I9ITA7ZS5NZW1waGlzPSEwO2UuTWlsbGVyPSEwO2UuTWluaW9uPSEwO2UuTW9kZXJuPSEwO2VbIk1vbmEgTGlzYSJdPSEwO2VbIk1ycyBFYXZlcyJdPSEwO2VbIk1TIFNlcmlmIl09ITA7ZVsiTXVzZW8gU2xhYiJdPSEwO2VbIk5ldyBZb3JrIl09ITA7ZVsiTmltYnVzIFJvbWFuIl09ITA7ZVsiTlBTIFJhd2xpbnNvbiBSb2Fkd2F5Il09ITA7ZS5OdXB0aWFsU2NyaXB0PSEwO2UuUGFsYXRpbm89ITA7ZS5QZXJwZXR1YT0hMDtlLlBsYW50aW49ITA7ZVsiUGxhbnRpbiBTY2hvb2xib29rIl09ITA7ZS5QbGF5YmlsbD0hMDtlWyJQb29yIFJpY2hhcmQiXT0hMDtlWyJSYXdsaW5zb24gUm9hZHdheSJdPSEwO2UuUmVuYXVsdD0hMDtlLlJlcXVpZW09ITA7ZS5Sb2Nrd2VsbD0hMDtlLlJvbWFuPSEwO2VbIlJvdGlzIFNlcmlmIl09ITA7ZS5TYWJvbj0hMDtlLlNjYWxhPSEwO2UuU2VhZ3VsbD0hMDtlLlNpc3RpbmE9ITA7ZS5Tb3V2ZW5pcj0hMDtlLlNUSVg9ITA7ZVsiU3RvbmUgSW5mb3JtYWwiXT0hMDtlWyJTdG9uZSBTZXJpZiJdPSEwO2UuU3lsZmFlbj0hMDtlLlRpbWVzPSEwO2UuVHJhamFuPSEwO2VbIlRyaW5pdMOpIl09ITA7ZVsiVHJ1bXAgTWVkaWFldmFsIl09ITA7ZS5VdG9waWE9ITA7ZVsiVmFsZSBUeXBlIl09ITA7ZVsiQml0c3RyZWFtIFZlcmEiXT0hMDtlWyJWZXJhIFNlcmlmIl09ITA7ZS5WZXJzYWlsbGVzPSEwO2UuV2FudGVkPSEwO2UuV2Vpc3M9ITA7ZVsiV2lkZSBMYXRpbiJdPSEwO2UuV2luZHNvcj0hMDtlLlhJVFM9ITB9KSksUGk9Z2V0TG9va3VwVGFibGVGYWN0b3J5KChmdW5jdGlvbihlKXtlLkRpbmdiYXRzPSEwO2UuU3ltYm9sPSEwO2UuWmFwZkRpbmdiYXRzPSEwO2UuV2luZ2RpbmdzPSEwO2VbIldpbmdkaW5ncy1Cb2xkIl09ITA7ZVsiV2luZ2RpbmdzLVJlZ3VsYXIiXT0hMH0pKSxXaT1nZXRMb29rdXBUYWJsZUZhY3RvcnkoKGZ1bmN0aW9uKGUpe2VbMl09MTA7ZVszXT0zMjtlWzRdPTMzO2VbNV09MzQ7ZVs2XT0zNTtlWzddPTM2O2VbOF09Mzc7ZVs5XT0zODtlWzEwXT0zOTtlWzExXT00MDtlWzEyXT00MTtlWzEzXT00MjtlWzE0XT00MztlWzE1XT00NDtlWzE2XT00NTtlWzE3XT00NjtlWzE4XT00NztlWzE5XT00ODtlWzIwXT00OTtlWzIxXT01MDtlWzIyXT01MTtlWzIzXT01MjtlWzI0XT01MztlWzI1XT01NDtlWzI2XT01NTtlWzI3XT01NjtlWzI4XT01NztlWzI5XT01ODtlWzMwXT04OTQ7ZVszMV09NjA7ZVszMl09NjE7ZVszM109NjI7ZVszNF09NjM7ZVszNV09NjQ7ZVszNl09NjU7ZVszN109NjY7ZVszOF09Njc7ZVszOV09Njg7ZVs0MF09Njk7ZVs0MV09NzA7ZVs0Ml09NzE7ZVs0M109NzI7ZVs0NF09NzM7ZVs0NV09NzQ7ZVs0Nl09NzU7ZVs0N109NzY7ZVs0OF09Nzc7ZVs0OV09Nzg7ZVs1MF09Nzk7ZVs1MV09ODA7ZVs1Ml09ODE7ZVs1M109ODI7ZVs1NF09ODM7ZVs1NV09ODQ7ZVs1Nl09ODU7ZVs1N109ODY7ZVs1OF09ODc7ZVs1OV09ODg7ZVs2MF09ODk7ZVs2MV09OTA7ZVs2Ml09OTE7ZVs2M109OTI7ZVs2NF09OTM7ZVs2NV09OTQ7ZVs2Nl09OTU7ZVs2N109OTY7ZVs2OF09OTc7ZVs2OV09OTg7ZVs3MF09OTk7ZVs3MV09MTAwO2VbNzJdPTEwMTtlWzczXT0xMDI7ZVs3NF09MTAzO2VbNzVdPTEwNDtlWzc2XT0xMDU7ZVs3N109MTA2O2VbNzhdPTEwNztlWzc5XT0xMDg7ZVs4MF09MTA5O2VbODFdPTExMDtlWzgyXT0xMTE7ZVs4M109MTEyO2VbODRdPTExMztlWzg1XT0xMTQ7ZVs4Nl09MTE1O2VbODddPTExNjtlWzg4XT0xMTc7ZVs4OV09MTE4O2VbOTBdPTExOTtlWzkxXT0xMjA7ZVs5Ml09MTIxO2VbOTNdPTEyMjtlWzk0XT0xMjM7ZVs5NV09MTI0O2VbOTZdPTEyNTtlWzk3XT0xMjY7ZVs5OF09MTk2O2VbOTldPTE5NztlWzEwMF09MTk5O2VbMTAxXT0yMDE7ZVsxMDJdPTIwOTtlWzEwM109MjE0O2VbMTA0XT0yMjA7ZVsxMDVdPTIyNTtlWzEwNl09MjI0O2VbMTA3XT0yMjY7ZVsxMDhdPTIyODtlWzEwOV09MjI3O2VbMTEwXT0yMjk7ZVsxMTFdPTIzMTtlWzExMl09MjMzO2VbMTEzXT0yMzI7ZVsxMTRdPTIzNDtlWzExNV09MjM1O2VbMTE2XT0yMzc7ZVsxMTddPTIzNjtlWzExOF09MjM4O2VbMTE5XT0yMzk7ZVsxMjBdPTI0MTtlWzEyMV09MjQzO2VbMTIyXT0yNDI7ZVsxMjNdPTI0NDtlWzEyNF09MjQ2O2VbMTI1XT0yNDU7ZVsxMjZdPTI1MDtlWzEyN109MjQ5O2VbMTI4XT0yNTE7ZVsxMjldPTI1MjtlWzEzMF09ODIyNDtlWzEzMV09MTc2O2VbMTMyXT0xNjI7ZVsxMzNdPTE2MztlWzEzNF09MTY3O2VbMTM1XT04MjI2O2VbMTM2XT0xODI7ZVsxMzddPTIyMztlWzEzOF09MTc0O2VbMTM5XT0xNjk7ZVsxNDBdPTg0ODI7ZVsxNDFdPTE4MDtlWzE0Ml09MTY4O2VbMTQzXT04ODAwO2VbMTQ0XT0xOTg7ZVsxNDVdPTIxNjtlWzE0Nl09ODczNDtlWzE0N109MTc3O2VbMTQ4XT04ODA0O2VbMTQ5XT04ODA1O2VbMTUwXT0xNjU7ZVsxNTFdPTE4MTtlWzE1Ml09ODcwNjtlWzE1M109ODcyMTtlWzE1NF09ODcxOTtlWzE1Nl09ODc0NztlWzE1N109MTcwO2VbMTU4XT0xODY7ZVsxNTldPTg0ODY7ZVsxNjBdPTIzMDtlWzE2MV09MjQ4O2VbMTYyXT0xOTE7ZVsxNjNdPTE2MTtlWzE2NF09MTcyO2VbMTY1XT04NzMwO2VbMTY2XT00MDI7ZVsxNjddPTg3NzY7ZVsxNjhdPTg3MTA7ZVsxNjldPTE3MTtlWzE3MF09MTg3O2VbMTcxXT04MjMwO2VbMTc5XT04MjIwO2VbMTgwXT04MjIxO2VbMTgxXT04MjE2O2VbMTgyXT04MjE3O2VbMjAwXT0xOTM7ZVsyMDNdPTIwNTtlWzIwN109MjExO2VbMjEwXT0yMTg7ZVsyMjNdPTcxMTtlWzIyNF09MzIxO2VbMjI1XT0zMjI7ZVsyMjZdPTM1MjtlWzIyN109MzUzO2VbMjI4XT0zODE7ZVsyMjldPTM4MjtlWzIzM109MjIxO2VbMjM0XT0yNTM7ZVsyNTJdPTI2MztlWzI1M109MjY4O2VbMjU0XT0yNjk7ZVsyNThdPTI1ODtlWzI2MF09MjYwO2VbMjYxXT0yNjE7ZVsyNjVdPTI4MDtlWzI2Nl09MjgxO2VbMjY3XT0yODI7ZVsyNjhdPTI4MztlWzI2OV09MzEzO2VbMjc1XT0zMjM7ZVsyNzZdPTMyNDtlWzI3OF09MzI4O2VbMjgzXT0zNDQ7ZVsyODRdPTM0NTtlWzI4NV09MzQ2O2VbMjg2XT0zNDc7ZVsyOTJdPTM2NztlWzI5NV09Mzc3O2VbMjk2XT0zNzg7ZVsyOThdPTM4MDtlWzMwNV09OTYzO2VbMzA2XT05NjQ7ZVszMDddPTk2NjtlWzMwOF09ODIxNTtlWzMwOV09ODI1MjtlWzMxMF09ODMxOTtlWzMxMV09ODM1OTtlWzMxMl09ODU5MjtlWzMxM109ODU5MztlWzMzN109OTU1MjtlWzQ5M109MTAzOTtlWzQ5NF09MTA0MDtlWzY3Ml09MTQ4ODtlWzY3M109MTQ4OTtlWzY3NF09MTQ5MDtlWzY3NV09MTQ5MTtlWzY3Nl09MTQ5MjtlWzY3N109MTQ5MztlWzY3OF09MTQ5NDtlWzY3OV09MTQ5NTtlWzY4MF09MTQ5NjtlWzY4MV09MTQ5NztlWzY4Ml09MTQ5ODtlWzY4M109MTQ5OTtlWzY4NF09MTUwMDtlWzY4NV09MTUwMTtlWzY4Nl09MTUwMjtlWzY4N109MTUwMztlWzY4OF09MTUwNDtlWzY4OV09MTUwNTtlWzY5MF09MTUwNjtlWzY5MV09MTUwNztlWzY5Ml09MTUwODtlWzY5M109MTUwOTtlWzY5NF09MTUxMDtlWzY5NV09MTUxMTtlWzY5Nl09MTUxMjtlWzY5N109MTUxMztlWzY5OF09MTUxNDtlWzcwNV09MTUyNDtlWzcwNl09ODM2MjtlWzcxMF09NjQyODg7ZVs3MTFdPTY0Mjk4O2VbNzU5XT0xNjE3O2VbNzYxXT0xNzc2O2VbNzYzXT0xNzc4O2VbNzc1XT0xNjUyO2VbNzc3XT0xNzY0O2VbNzc4XT0xNzgwO2VbNzc5XT0xNzgxO2VbNzgwXT0xNzgyO2VbNzgyXT03NzE7ZVs3ODNdPTY0NzI2O2VbNzg2XT04MzYzO2VbNzg4XT04NTMyO2VbNzkwXT03Njg7ZVs3OTFdPTc2OTtlWzc5Ml09NzY4O2VbNzk1XT04MDM7ZVs3OTddPTY0MzM2O2VbNzk4XT02NDMzNztlWzc5OV09NjQzNDI7ZVs4MDBdPTY0MzQzO2VbODAxXT02NDM0NDtlWzgwMl09NjQzNDU7ZVs4MDNdPTY0MzYyO2VbODA0XT02NDM2MztlWzgwNV09NjQzNjQ7ZVsyNDI0XT03ODIxO2VbMjQyNV09NzgyMjtlWzI0MjZdPTc4MjM7ZVsyNDI3XT03ODI0O2VbMjQyOF09NzgyNTtlWzI0MjldPTc4MjY7ZVsyNDMwXT03ODI3O2VbMjQzM109NzY4MjtlWzI2NzhdPTgwNDU7ZVsyNjc5XT04MDQ2O2VbMjgzMF09MTU1MjtlWzI4MzhdPTY4NjtlWzI4NDBdPTc1MTtlWzI4NDJdPTc1MztlWzI4NDNdPTc1NDtlWzI4NDRdPTc1NTtlWzI4NDZdPTc1NztlWzI4NTZdPTc2NztlWzI4NTddPTg0ODtlWzI4NThdPTg0OTtlWzI4NjJdPTg1MztlWzI4NjNdPTg1NDtlWzI4NjRdPTg1NTtlWzI4NjVdPTg2MTtlWzI4NjZdPTg2MjtlWzI5MDZdPTc0NjA7ZVsyOTA4XT03NDYyO2VbMjkwOV09NzQ2MztlWzI5MTBdPTc0NjQ7ZVsyOTEyXT03NDY2O2VbMjkxM109NzQ2NztlWzI5MTRdPTc0Njg7ZVsyOTE2XT03NDcwO2VbMjkxN109NzQ3MTtlWzI5MThdPTc0NzI7ZVsyOTIwXT03NDc0O2VbMjkyMV09NzQ3NTtlWzI5MjJdPTc0NzY7ZVsyOTI0XT03NDc4O2VbMjkyNV09NzQ3OTtlWzI5MjZdPTc0ODA7ZVsyOTI4XT03NDgyO2VbMjkyOV09NzQ4MztlWzI5MzBdPTc0ODQ7ZVsyOTMyXT03NDg2O2VbMjkzM109NzQ4NztlWzI5MzRdPTc0ODg7ZVsyOTM2XT03NDkwO2VbMjkzN109NzQ5MTtlWzI5MzhdPTc0OTI7ZVsyOTQwXT03NDk0O2VbMjk0MV09NzQ5NTtlWzI5NDJdPTc0OTY7ZVsyOTQ0XT03NDk4O2VbMjk0Nl09NzUwMDtlWzI5NDhdPTc1MDI7ZVsyOTUwXT03NTA0O2VbMjk1MV09NzUwNTtlWzI5NTJdPTc1MDY7ZVsyOTU0XT03NTA4O2VbMjk1NV09NzUwOTtlWzI5NTZdPTc1MTA7ZVsyOTU4XT03NTEyO2VbMjk1OV09NzUxMztlWzI5NjBdPTc1MTQ7ZVsyOTYyXT03NTE2O2VbMjk2M109NzUxNztlWzI5NjRdPTc1MTg7ZVsyOTY2XT03NTIwO2VbMjk2N109NzUyMTtlWzI5NjhdPTc1MjI7ZVsyOTcwXT03NTI0O2VbMjk3MV09NzUyNTtlWzI5NzJdPTc1MjY7ZVsyOTc0XT03NTI4O2VbMjk3NV09NzUyOTtlWzI5NzZdPTc1MzA7ZVsyOTc4XT0xNTM3O2VbMjk3OV09MTUzODtlWzI5ODBdPTE1Mzk7ZVsyOTgyXT0xNTQ5O2VbMjk4M109MTU1MTtlWzI5ODRdPTE1NTI7ZVsyOTg2XT0xNTU0O2VbMjk4N109MTU1NTtlWzI5ODhdPTE1NTY7ZVsyOTkwXT0xNjIzO2VbMjk5MV09MTYyNDtlWzI5OTVdPTE3NzU7ZVsyOTk5XT0xNzkxO2VbMzAwMl09NjQyOTA7ZVszMDAzXT02NDI5MTtlWzMwMDRdPTY0MjkyO2VbMzAwNl09NjQyOTQ7ZVszMDA3XT02NDI5NTtlWzMwMDhdPTY0Mjk2O2VbMzAxMV09MTkwMDtlWzMwMTRdPTgyMjM7ZVszMDE1XT04MjQ0O2VbMzAxN109NzUzMjtlWzMwMThdPTc1MzM7ZVszMDE5XT03NTM0O2VbMzA3NV09NzU5MDtlWzMwNzZdPTc1OTE7ZVszMDc5XT03NTk0O2VbMzA4MF09NzU5NTtlWzMwODNdPTc1OTg7ZVszMDg0XT03NTk5O2VbMzA4N109NzYwMjtlWzMwODhdPTc2MDM7ZVszMDkxXT03NjA2O2VbMzA5Ml09NzYwNztlWzMwOTVdPTc2MTA7ZVszMDk2XT03NjExO2VbMzA5OV09NzYxNDtlWzMxMDBdPTc2MTU7ZVszMTAzXT03NjE4O2VbMzEwNF09NzYxOTtlWzMxMDddPTgzMzc7ZVszMTA4XT04MzM4O2VbMzExNl09MTg4NDtlWzMxMTldPTE4ODU7ZVszMTIwXT0xODg1O2VbMzEyM109MTg4NjtlWzMxMjRdPTE4ODY7ZVszMTI3XT0xODg3O2VbMzEyOF09MTg4NztlWzMxMzFdPTE4ODg7ZVszMTMyXT0xODg4O2VbMzEzNV09MTg4OTtlWzMxMzZdPTE4ODk7ZVszMTM5XT0xODkwO2VbMzE0MF09MTg5MDtlWzMxNDNdPTE4OTE7ZVszMTQ0XT0xODkxO2VbMzE0N109MTg5MjtlWzMxNDhdPTE4OTI7ZVszMTUzXT01ODA7ZVszMTU0XT01ODE7ZVszMTU3XT01ODQ7ZVszMTU4XT01ODU7ZVszMTYxXT01ODg7ZVszMTYyXT01ODk7ZVszMTY1XT04OTE7ZVszMTY2XT04OTI7ZVszMTY5XT0xMjc0O2VbMzE3MF09MTI3NTtlWzMxNzNdPTEyNzg7ZVszMTc0XT0xMjc5O2VbMzE4MV09NzYyMjtlWzMxODJdPTc2MjM7ZVszMjgyXT0xMTc5OTtlWzMzMTZdPTU3ODtlWzMzNzldPTQyNzg1O2VbMzM5M109MTE1OTtlWzM0MTZdPTgzNzd9KSksamk9Z2V0TG9va3VwVGFibGVGYWN0b3J5KChmdW5jdGlvbihlKXtlWzIyN109MzIyO2VbMjY0XT0yNjE7ZVsyOTFdPTM0Nn0pKSxYaT1nZXRMb29rdXBUYWJsZUZhY3RvcnkoKGZ1bmN0aW9uKGUpe2VbMV09MzI7ZVs0XT02NTtlWzVdPTE5MjtlWzZdPTE5MztlWzldPTE5NjtlWzE3XT02NjtlWzE4XT02NztlWzIxXT0yNjg7ZVsyNF09Njg7ZVsyOF09Njk7ZVsyOV09MjAwO2VbMzBdPTIwMTtlWzMyXT0yODI7ZVszOF09NzA7ZVszOV09NzE7ZVs0NF09NzI7ZVs0N109NzM7ZVs0OF09MjA0O2VbNDldPTIwNTtlWzU4XT03NDtlWzYwXT03NTtlWzYyXT03NjtlWzY4XT03NztlWzY5XT03ODtlWzc1XT03OTtlWzc2XT0yMTA7ZVs4MF09MjE0O2VbODddPTgwO2VbODldPTgxO2VbOTBdPTgyO2VbOTJdPTM0NDtlWzk0XT04MztlWzk3XT0zNTI7ZVsxMDBdPTg0O2VbMTA0XT04NTtlWzEwOV09MjIwO2VbMTE1XT04NjtlWzExNl09ODc7ZVsxMjFdPTg4O2VbMTIyXT04OTtlWzEyNF09MjIxO2VbMTI3XT05MDtlWzEyOV09MzgxO2VbMjU4XT05NztlWzI1OV09MjI0O2VbMjYwXT0yMjU7ZVsyNjNdPTIyODtlWzI2OF09MjYxO2VbMjcxXT05ODtlWzI3Ml09OTk7ZVsyNzNdPTI2MztlWzI3NV09MjY5O2VbMjgyXT0xMDA7ZVsyODZdPTEwMTtlWzI4N109MjMyO2VbMjg4XT0yMzM7ZVsyOTBdPTI4MztlWzI5NV09MjgxO2VbMjk2XT0xMDI7ZVszMzZdPTEwMztlWzM0Nl09MTA0O2VbMzQ5XT0xMDU7ZVszNTBdPTIzNjtlWzM1MV09MjM3O2VbMzYxXT0xMDY7ZVszNjRdPTEwNztlWzM2N109MTA4O2VbMzcxXT0zMjI7ZVszNzNdPTEwOTtlWzM3NF09MTEwO2VbMzgxXT0xMTE7ZVszODJdPTI0MjtlWzM4M109MjQzO2VbMzg2XT0yNDY7ZVszOTNdPTExMjtlWzM5NV09MTEzO2VbMzk2XT0xMTQ7ZVszOThdPTM0NTtlWzQwMF09MTE1O2VbNDAxXT0zNDc7ZVs0MDNdPTM1MztlWzQxMF09MTE2O2VbNDM3XT0xMTc7ZVs0NDJdPTI1MjtlWzQ0OF09MTE4O2VbNDQ5XT0xMTk7ZVs0NTRdPTEyMDtlWzQ1NV09MTIxO2VbNDU3XT0yNTM7ZVs0NjBdPTEyMjtlWzQ2Ml09MzgyO2VbNDYzXT0zODA7ZVs4NTNdPTQ0O2VbODU1XT01ODtlWzg1Nl09NDY7ZVs4NzZdPTQ3O2VbODc4XT00NTtlWzg4Ml09NDU7ZVs4OTRdPTQwO2VbODk1XT00MTtlWzg5Nl09OTE7ZVs4OTddPTkzO2VbOTIzXT02NDtlWzEwMDRdPTQ4O2VbMTAwNV09NDk7ZVsxMDA2XT01MDtlWzEwMDddPTUxO2VbMTAwOF09NTI7ZVsxMDA5XT01MztlWzEwMTBdPTU0O2VbMTAxMV09NTU7ZVsxMDEyXT01NjtlWzEwMTNdPTU3O2VbMTA4MV09Mzc7ZVsxMDg1XT00MztlWzEwODZdPTQ1fSkpO2Z1bmN0aW9uIGdldFN0YW5kYXJkRm9udE5hbWUoZSl7Y29uc3QgdD1ub3JtYWxpemVGb250TmFtZShlKTtyZXR1cm4gS2koKVt0XX1mdW5jdGlvbiBpc0tub3duRm9udE5hbWUoZSl7Y29uc3QgdD1ub3JtYWxpemVGb250TmFtZShlKTtyZXR1cm4hIShLaSgpW3RdfHxxaSgpW3RdfHxPaSgpW3RdfHxQaSgpW3RdKX1jbGFzcyBUb1VuaWNvZGVNYXB7Y29uc3RydWN0b3IoZT1bXSl7dGhpcy5fbWFwPWV9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLl9tYXAubGVuZ3RofWZvckVhY2goZSl7Zm9yKGNvbnN0IHQgaW4gdGhpcy5fbWFwKWUodCx0aGlzLl9tYXBbdF0uY29kZVBvaW50QXQoMCkpfWhhcyhlKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fbWFwW2VdfWdldChlKXtyZXR1cm4gdGhpcy5fbWFwW2VdfWNoYXJDb2RlT2YoZSl7Y29uc3QgdD10aGlzLl9tYXA7aWYodC5sZW5ndGg8PTY1NTM2KXJldHVybiB0LmluZGV4T2YoZSk7Zm9yKGNvbnN0IGkgaW4gdClpZih0W2ldPT09ZSlyZXR1cm4gMHxpO3JldHVybi0xfWFtZW5kKGUpe2Zvcihjb25zdCB0IGluIGUpdGhpcy5fbWFwW3RdPWVbdF19fWNsYXNzIElkZW50aXR5VG9Vbmljb2RlTWFwe2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5maXJzdENoYXI9ZTt0aGlzLmxhc3RDaGFyPXR9Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLmxhc3RDaGFyKzEtdGhpcy5maXJzdENoYXJ9Zm9yRWFjaChlKXtmb3IobGV0IHQ9dGhpcy5maXJzdENoYXIsaT10aGlzLmxhc3RDaGFyO3Q8PWk7dCsrKWUodCx0KX1oYXMoZSl7cmV0dXJuIHRoaXMuZmlyc3RDaGFyPD1lJiZlPD10aGlzLmxhc3RDaGFyfWdldChlKXtpZih0aGlzLmZpcnN0Q2hhcjw9ZSYmZTw9dGhpcy5sYXN0Q2hhcilyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShlKX1jaGFyQ29kZU9mKGUpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGUpJiZlPj10aGlzLmZpcnN0Q2hhciYmZTw9dGhpcy5sYXN0Q2hhcj9lOi0xfWFtZW5kKGUpe3VucmVhY2hhYmxlKCJTaG91bGQgbm90IGNhbGwgYW1lbmQoKSIpfX1jbGFzcyBDRkZGb250e2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5wcm9wZXJ0aWVzPXQ7Y29uc3QgaT1uZXcgQ0ZGUGFyc2VyKGUsdCxHaSk7dGhpcy5jZmY9aS5wYXJzZSgpO3RoaXMuY2ZmLmR1cGxpY2F0ZUZpcnN0R2x5cGgoKTtjb25zdCBhPW5ldyBDRkZDb21waWxlcih0aGlzLmNmZik7dGhpcy5zZWFjcz10aGlzLmNmZi5zZWFjczt0cnl7dGhpcy5kYXRhPWEuY29tcGlsZSgpfWNhdGNoe3dhcm4oIkZhaWxlZCB0byBjb21waWxlIGZvbnQgIit0LmxvYWRlZE5hbWUpO3RoaXMuZGF0YT1lfXRoaXMuX2NyZWF0ZUJ1aWx0SW5FbmNvZGluZygpfWdldCBudW1HbHlwaHMoKXtyZXR1cm4gdGhpcy5jZmYuY2hhclN0cmluZ3MuY291bnR9Z2V0Q2hhcnNldCgpe3JldHVybiB0aGlzLmNmZi5jaGFyc2V0LmNoYXJzZXR9Z2V0R2x5cGhNYXBwaW5nKCl7Y29uc3QgZT10aGlzLmNmZix0PXRoaXMucHJvcGVydGllcyx7Y2lkVG9HaWRNYXA6aSxjTWFwOmF9PXQscj1lLmNoYXJzZXQuY2hhcnNldDtsZXQgcyxuO2lmKHQuY29tcG9zaXRlKXtsZXQgdCxvO2lmKGk/Lmxlbmd0aD4wKXt0PU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGxldCBlPTAsYT1pLmxlbmd0aDtlPGE7ZSsrKXtjb25zdCBhPWlbZV07dm9pZCAwIT09YSYmKHRbYV09ZSl9fXM9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihlLmlzQ0lERm9udClmb3Iobj0wO248ci5sZW5ndGg7bisrKXtjb25zdCBlPXJbbl07bz1hLmNoYXJDb2RlT2YoZSk7dm9pZCAwIT09dD8uW29dJiYobz10W29dKTtzW29dPW59ZWxzZSBmb3Iobj0wO248ZS5jaGFyU3RyaW5ncy5jb3VudDtuKyspe289YS5jaGFyQ29kZU9mKG4pO3Nbb109bn1yZXR1cm4gc31sZXQgbz1lLmVuY29kaW5nP2UuZW5jb2RpbmcuZW5jb2Rpbmc6bnVsbDt0LmlzSW50ZXJuYWxGb250JiYobz10LmRlZmF1bHRFbmNvZGluZyk7cz10eXBlMUZvbnRHbHlwaE1hcHBpbmcodCxvLHIpO3JldHVybiBzfWhhc0dseXBoSWQoZSl7cmV0dXJuIHRoaXMuY2ZmLmhhc0dseXBoSWQoZSl9X2NyZWF0ZUJ1aWx0SW5FbmNvZGluZygpe2NvbnN0e2NoYXJzZXQ6ZSxlbmNvZGluZzp0fT10aGlzLmNmZjtpZighZXx8IXQpcmV0dXJuO2NvbnN0IGk9ZS5jaGFyc2V0LGE9dC5lbmNvZGluZyxyPVtdO2Zvcihjb25zdCBlIGluIGEpe2NvbnN0IHQ9YVtlXTtpZih0Pj0wKXtjb25zdCBhPWlbdF07YSYmKHJbZV09YSl9fXIubGVuZ3RoPjAmJih0aGlzLnByb3BlcnRpZXMuYnVpbHRJbkVuY29kaW5nPXIpfX1mdW5jdGlvbiBnZXRVaW50MzIoZSx0KXtyZXR1cm4oZVt0XTw8MjR8ZVt0KzFdPDwxNnxlW3QrMl08PDh8ZVt0KzNdKT4+PjB9ZnVuY3Rpb24gZ2V0VWludDE2KGUsdCl7cmV0dXJuIGVbdF08PDh8ZVt0KzFdfWZ1bmN0aW9uIGdldEludDE2KGUsdCl7cmV0dXJuKGVbdF08PDI0fGVbdCsxXTw8MTYpPj4xNn1mdW5jdGlvbiBnZXRJbnQ4KGUsdCl7cmV0dXJuIGVbdF08PDI0Pj4yNH1mdW5jdGlvbiBnZXRGbG9hdDIxNChlLHQpe3JldHVybiBnZXRJbnQxNihlLHQpLzE2Mzg0fWZ1bmN0aW9uIGdldFN1YnJvdXRpbmVCaWFzKGUpe2NvbnN0IHQ9ZS5sZW5ndGg7bGV0IGk9MzI3Njg7dDwxMjQwP2k9MTA3OnQ8MzM5MDAmJihpPTExMzEpO3JldHVybiBpfWZ1bmN0aW9uIHBhcnNlQ21hcChlLHQsaSl7Y29uc3QgYT0xPT09Z2V0VWludDE2KGUsdCsyKT9nZXRVaW50MzIoZSx0KzgpOmdldFVpbnQzMihlLHQrMTYpLHI9Z2V0VWludDE2KGUsdCthKTtsZXQgcyxuLG87aWYoND09PXIpe2dldFVpbnQxNihlLHQrYSsyKTtjb25zdCBpPWdldFVpbnQxNihlLHQrYSs2KT4+MTtuPXQrYSsxNDtzPVtdO2ZvcihvPTA7bzxpO28rKyxuKz0yKXNbb109e2VuZDpnZXRVaW50MTYoZSxuKX07bis9Mjtmb3Iobz0wO288aTtvKyssbis9MilzW29dLnN0YXJ0PWdldFVpbnQxNihlLG4pO2ZvcihvPTA7bzxpO28rKyxuKz0yKXNbb10uaWREZWx0YT1nZXRVaW50MTYoZSxuKTtmb3Iobz0wO288aTtvKyssbis9Mil7bGV0IHQ9Z2V0VWludDE2KGUsbik7aWYoMCE9PXQpe3Nbb10uaWRzPVtdO2ZvcihsZXQgaT0wLGE9c1tvXS5lbmQtc1tvXS5zdGFydCsxO2k8YTtpKyspe3Nbb10uaWRzW2ldPWdldFVpbnQxNihlLG4rdCk7dCs9Mn19fXJldHVybiBzfWlmKDEyPT09cil7Y29uc3QgaT1nZXRVaW50MzIoZSx0K2ErMTIpO249dCthKzE2O3M9W107Zm9yKG89MDtvPGk7bysrKXt0PWdldFVpbnQzMihlLG4pO3MucHVzaCh7c3RhcnQ6dCxlbmQ6Z2V0VWludDMyKGUsbis0KSxpZERlbHRhOmdldFVpbnQzMihlLG4rOCktdH0pO24rPTEyfXJldHVybiBzfXRocm93IG5ldyBGb3JtYXRFcnJvcihgdW5zdXBwb3J0ZWQgY21hcDogJHtyfWApfWZ1bmN0aW9uIHBhcnNlQ2ZmKGUsdCxpLGEpe2NvbnN0IHI9bmV3IENGRlBhcnNlcihuZXcgU3RyZWFtKGUsdCxpLXQpLHt9LGEpLnBhcnNlKCk7cmV0dXJue2dseXBoczpyLmNoYXJTdHJpbmdzLm9iamVjdHMsc3VicnM6ci50b3BEaWN0LnByaXZhdGVEaWN0Py5zdWJyc0luZGV4Py5vYmplY3RzLGdzdWJyczpyLmdsb2JhbFN1YnJJbmRleD8ub2JqZWN0cyxpc0NGRkNJREZvbnQ6ci5pc0NJREZvbnQsZmRTZWxlY3Q6ci5mZFNlbGVjdCxmZEFycmF5OnIuZmRBcnJheX19ZnVuY3Rpb24gbG9va3VwQ21hcChlLHQpe2NvbnN0IGk9dC5jb2RlUG9pbnRBdCgwKTtsZXQgYT0wLHI9MCxzPWUubGVuZ3RoLTE7Zm9yKDtyPHM7KXtjb25zdCB0PXIrcysxPj4xO2k8ZVt0XS5zdGFydD9zPXQtMTpyPXR9ZVtyXS5zdGFydDw9aSYmaTw9ZVtyXS5lbmQmJihhPWVbcl0uaWREZWx0YSsoZVtyXS5pZHM/ZVtyXS5pZHNbaS1lW3JdLnN0YXJ0XTppKSY2NTUzNSk7cmV0dXJue2NoYXJDb2RlOmksZ2x5cGhJZDphfX1mdW5jdGlvbiBjb21waWxlR2x5ZihlLHQsaSl7ZnVuY3Rpb24gbW92ZVRvKGUsaSl7dC5hZGQoIk0iLFtlLGldKX1mdW5jdGlvbiBsaW5lVG8oZSxpKXt0LmFkZCgiTCIsW2UsaV0pfWZ1bmN0aW9uIHF1YWRyYXRpY0N1cnZlVG8oZSxpLGEscil7dC5hZGQoIlEiLFtlLGksYSxyXSl9bGV0IGE9MDtjb25zdCByPWdldEludDE2KGUsYSk7bGV0IHMsbj0wLG89MDthKz0xMDtpZihyPDApZG97cz1nZXRVaW50MTYoZSxhKTtjb25zdCByPWdldFVpbnQxNihlLGErMik7YSs9NDtsZXQgZyxjO2lmKDEmcyl7aWYoMiZzKXtnPWdldEludDE2KGUsYSk7Yz1nZXRJbnQxNihlLGErMil9ZWxzZXtnPWdldFVpbnQxNihlLGEpO2M9Z2V0VWludDE2KGUsYSsyKX1hKz00fWVsc2UgaWYoMiZzKXtnPWdldEludDgoZSxhKyspO2M9Z2V0SW50OChlLGErKyl9ZWxzZXtnPWVbYSsrXTtjPWVbYSsrXX1pZigyJnMpe249ZztvPWN9ZWxzZXtuPTA7bz0wfWxldCBsPTEsaD0xLEM9MCxRPTA7aWYoOCZzKXtsPWg9Z2V0RmxvYXQyMTQoZSxhKTthKz0yfWVsc2UgaWYoNjQmcyl7bD1nZXRGbG9hdDIxNChlLGEpO2g9Z2V0RmxvYXQyMTQoZSxhKzIpO2ErPTR9ZWxzZSBpZigxMjgmcyl7bD1nZXRGbG9hdDIxNChlLGEpO0M9Z2V0RmxvYXQyMTQoZSxhKzIpO1E9Z2V0RmxvYXQyMTQoZSxhKzQpO2g9Z2V0RmxvYXQyMTQoZSxhKzYpO2ErPTh9Y29uc3QgRT1pLmdseXBoc1tyXTtpZihFKXt0LnNhdmUoKTt0LnRyYW5zZm9ybShbbCxDLFEsaCxuLG9dKTtjb21waWxlR2x5ZihFLHQsaSk7dC5yZXN0b3JlKCl9fXdoaWxlKDMyJnMpO2Vsc2V7Y29uc3QgdD1bXTtsZXQgaSxnO2ZvcihpPTA7aTxyO2krKyl7dC5wdXNoKGdldFVpbnQxNihlLGEpKTthKz0yfWErPTIrZ2V0VWludDE2KGUsYSk7Y29uc3QgYz10LmF0KC0xKSsxLGw9W107Zm9yKDtsLmxlbmd0aDxjOyl7cz1lW2ErK107bGV0IHQ9MTs4JnMmJih0Kz1lW2ErK10pO2Zvcig7dC0tID4wOylsLnB1c2goe2ZsYWdzOnN9KX1mb3IoaT0wO2k8YztpKyspe3N3aXRjaCgxOCZsW2ldLmZsYWdzKXtjYXNlIDA6bis9Z2V0SW50MTYoZSxhKTthKz0yO2JyZWFrO2Nhc2UgMjpuLT1lW2ErK107YnJlYWs7Y2FzZSAxODpuKz1lW2ErK119bFtpXS54PW59Zm9yKGk9MDtpPGM7aSsrKXtzd2l0Y2goMzYmbFtpXS5mbGFncyl7Y2FzZSAwOm8rPWdldEludDE2KGUsYSk7YSs9MjticmVhaztjYXNlIDQ6by09ZVthKytdO2JyZWFrO2Nhc2UgMzY6bys9ZVthKytdfWxbaV0ueT1vfWxldCBoPTA7Zm9yKGE9MDthPHI7YSsrKXtjb25zdCBlPXRbYV0scj1sLnNsaWNlKGgsZSsxKTtpZigxJnJbMF0uZmxhZ3Mpci5wdXNoKHJbMF0pO2Vsc2UgaWYoMSZyLmF0KC0xKS5mbGFncylyLnVuc2hpZnQoci5hdCgtMSkpO2Vsc2V7Y29uc3QgZT17ZmxhZ3M6MSx4OihyWzBdLngrci5hdCgtMSkueCkvMix5OihyWzBdLnkrci5hdCgtMSkueSkvMn07ci51bnNoaWZ0KGUpO3IucHVzaChlKX1tb3ZlVG8oclswXS54LHJbMF0ueSk7Zm9yKGk9MSxnPXIubGVuZ3RoO2k8ZztpKyspaWYoMSZyW2ldLmZsYWdzKWxpbmVUbyhyW2ldLngscltpXS55KTtlbHNlIGlmKDEmcltpKzFdLmZsYWdzKXtxdWFkcmF0aWNDdXJ2ZVRvKHJbaV0ueCxyW2ldLnkscltpKzFdLngscltpKzFdLnkpO2krK31lbHNlIHF1YWRyYXRpY0N1cnZlVG8ocltpXS54LHJbaV0ueSwocltpXS54K3JbaSsxXS54KS8yLChyW2ldLnkrcltpKzFdLnkpLzIpO2g9ZSsxfX19ZnVuY3Rpb24gY29tcGlsZUNoYXJTdHJpbmcoZSx0LGksYSl7ZnVuY3Rpb24gbW92ZVRvKGUsaSl7dC5hZGQoIk0iLFtlLGldKX1mdW5jdGlvbiBsaW5lVG8oZSxpKXt0LmFkZCgiTCIsW2UsaV0pfWZ1bmN0aW9uIGJlemllckN1cnZlVG8oZSxpLGEscixzLG4pe3QuYWRkKCJDIixbZSxpLGEscixzLG5dKX1jb25zdCByPVtdO2xldCBzPTAsbj0wLG89MDshZnVuY3Rpb24gcGFyc2UoZSl7bGV0IGc9MDtmb3IoO2c8ZS5sZW5ndGg7KXtsZXQgYyxsLGgsQyxRLEUsdSxkLGYscD0hMSxtPWVbZysrXTtzd2l0Y2gobSl7Y2FzZSAxOmNhc2UgMzpjYXNlIDE4OmNhc2UgMjM6bys9ci5sZW5ndGg+PjE7cD0hMDticmVhaztjYXNlIDQ6bis9ci5wb3AoKTttb3ZlVG8ocyxuKTtwPSEwO2JyZWFrO2Nhc2UgNTpmb3IoO3IubGVuZ3RoPjA7KXtzKz1yLnNoaWZ0KCk7bis9ci5zaGlmdCgpO2xpbmVUbyhzLG4pfWJyZWFrO2Nhc2UgNjpmb3IoO3IubGVuZ3RoPjA7KXtzKz1yLnNoaWZ0KCk7bGluZVRvKHMsbik7aWYoMD09PXIubGVuZ3RoKWJyZWFrO24rPXIuc2hpZnQoKTtsaW5lVG8ocyxuKX1icmVhaztjYXNlIDc6Zm9yKDtyLmxlbmd0aD4wOyl7bis9ci5zaGlmdCgpO2xpbmVUbyhzLG4pO2lmKDA9PT1yLmxlbmd0aClicmVhaztzKz1yLnNoaWZ0KCk7bGluZVRvKHMsbil9YnJlYWs7Y2FzZSA4OmZvcig7ci5sZW5ndGg+MDspe2M9cytyLnNoaWZ0KCk7aD1uK3Iuc2hpZnQoKTtsPWMrci5zaGlmdCgpO0M9aCtyLnNoaWZ0KCk7cz1sK3Iuc2hpZnQoKTtuPUMrci5zaGlmdCgpO2JlemllckN1cnZlVG8oYyxoLGwsQyxzLG4pfWJyZWFrO2Nhc2UgMTA6ZD1yLnBvcCgpO2Y9bnVsbDtpZihpLmlzQ0ZGQ0lERm9udCl7Y29uc3QgZT1pLmZkU2VsZWN0LmdldEZESW5kZXgoYSk7aWYoZT49MCYmZTxpLmZkQXJyYXkubGVuZ3RoKXtjb25zdCB0PWkuZmRBcnJheVtlXTtsZXQgYTt0LnByaXZhdGVEaWN0Py5zdWJyc0luZGV4JiYoYT10LnByaXZhdGVEaWN0LnN1YnJzSW5kZXgub2JqZWN0cyk7aWYoYSl7ZCs9Z2V0U3Vicm91dGluZUJpYXMoYSk7Zj1hW2RdfX1lbHNlIHdhcm4oIkludmFsaWQgZmQgaW5kZXggZm9yIGdseXBoIGluZGV4LiIpfWVsc2UgZj1pLnN1YnJzW2QraS5zdWJyc0JpYXNdO2YmJnBhcnNlKGYpO2JyZWFrO2Nhc2UgMTE6cmV0dXJuO2Nhc2UgMTI6bT1lW2crK107c3dpdGNoKG0pe2Nhc2UgMzQ6Yz1zK3Iuc2hpZnQoKTtsPWMrci5zaGlmdCgpO1E9bityLnNoaWZ0KCk7cz1sK3Iuc2hpZnQoKTtiZXppZXJDdXJ2ZVRvKGMsbixsLFEscyxRKTtjPXMrci5zaGlmdCgpO2w9YytyLnNoaWZ0KCk7cz1sK3Iuc2hpZnQoKTtiZXppZXJDdXJ2ZVRvKGMsUSxsLG4scyxuKTticmVhaztjYXNlIDM1OmM9cytyLnNoaWZ0KCk7aD1uK3Iuc2hpZnQoKTtsPWMrci5zaGlmdCgpO0M9aCtyLnNoaWZ0KCk7cz1sK3Iuc2hpZnQoKTtuPUMrci5zaGlmdCgpO2JlemllckN1cnZlVG8oYyxoLGwsQyxzLG4pO2M9cytyLnNoaWZ0KCk7aD1uK3Iuc2hpZnQoKTtsPWMrci5zaGlmdCgpO0M9aCtyLnNoaWZ0KCk7cz1sK3Iuc2hpZnQoKTtuPUMrci5zaGlmdCgpO2JlemllckN1cnZlVG8oYyxoLGwsQyxzLG4pO3IucG9wKCk7YnJlYWs7Y2FzZSAzNjpjPXMrci5zaGlmdCgpO1E9bityLnNoaWZ0KCk7bD1jK3Iuc2hpZnQoKTtFPVErci5zaGlmdCgpO3M9bCtyLnNoaWZ0KCk7YmV6aWVyQ3VydmVUbyhjLFEsbCxFLHMsRSk7Yz1zK3Iuc2hpZnQoKTtsPWMrci5zaGlmdCgpO3U9RStyLnNoaWZ0KCk7cz1sK3Iuc2hpZnQoKTtiZXppZXJDdXJ2ZVRvKGMsRSxsLHUscyxuKTticmVhaztjYXNlIDM3OmNvbnN0IGU9cyx0PW47Yz1zK3Iuc2hpZnQoKTtoPW4rci5zaGlmdCgpO2w9YytyLnNoaWZ0KCk7Qz1oK3Iuc2hpZnQoKTtzPWwrci5zaGlmdCgpO249QytyLnNoaWZ0KCk7YmV6aWVyQ3VydmVUbyhjLGgsbCxDLHMsbik7Yz1zK3Iuc2hpZnQoKTtoPW4rci5zaGlmdCgpO2w9YytyLnNoaWZ0KCk7Qz1oK3Iuc2hpZnQoKTtzPWw7bj1DO01hdGguYWJzKHMtZSk+TWF0aC5hYnMobi10KT9zKz1yLnNoaWZ0KCk6bis9ci5zaGlmdCgpO2JlemllckN1cnZlVG8oYyxoLGwsQyxzLG4pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEZvcm1hdEVycm9yKGB1bmtub3duIG9wZXJhdG9yOiAxMiAke219YCl9YnJlYWs7Y2FzZSAxNDppZihyLmxlbmd0aD49NCl7Y29uc3QgZT1yLnBvcCgpLGE9ci5wb3AoKTtuPXIucG9wKCk7cz1yLnBvcCgpO3Quc2F2ZSgpO3QudHJhbnNsYXRlKHMsbik7bGV0IG89bG9va3VwQ21hcChpLmNtYXAsU3RyaW5nLmZyb21DaGFyQ29kZShpLmdseXBoTmFtZU1hcFtCaVtlXV0pKTtjb21waWxlQ2hhclN0cmluZyhpLmdseXBoc1tvLmdseXBoSWRdLHQsaSxvLmdseXBoSWQpO3QucmVzdG9yZSgpO289bG9va3VwQ21hcChpLmNtYXAsU3RyaW5nLmZyb21DaGFyQ29kZShpLmdseXBoTmFtZU1hcFtCaVthXV0pKTtjb21waWxlQ2hhclN0cmluZyhpLmdseXBoc1tvLmdseXBoSWRdLHQsaSxvLmdseXBoSWQpfXJldHVybjtjYXNlIDE5OmNhc2UgMjA6bys9ci5sZW5ndGg+PjE7Zys9bys3Pj4zO3A9ITA7YnJlYWs7Y2FzZSAyMTpuKz1yLnBvcCgpO3MrPXIucG9wKCk7bW92ZVRvKHMsbik7cD0hMDticmVhaztjYXNlIDIyOnMrPXIucG9wKCk7bW92ZVRvKHMsbik7cD0hMDticmVhaztjYXNlIDI0OmZvcig7ci5sZW5ndGg+Mjspe2M9cytyLnNoaWZ0KCk7aD1uK3Iuc2hpZnQoKTtsPWMrci5zaGlmdCgpO0M9aCtyLnNoaWZ0KCk7cz1sK3Iuc2hpZnQoKTtuPUMrci5zaGlmdCgpO2JlemllckN1cnZlVG8oYyxoLGwsQyxzLG4pfXMrPXIuc2hpZnQoKTtuKz1yLnNoaWZ0KCk7bGluZVRvKHMsbik7YnJlYWs7Y2FzZSAyNTpmb3IoO3IubGVuZ3RoPjY7KXtzKz1yLnNoaWZ0KCk7bis9ci5zaGlmdCgpO2xpbmVUbyhzLG4pfWM9cytyLnNoaWZ0KCk7aD1uK3Iuc2hpZnQoKTtsPWMrci5zaGlmdCgpO0M9aCtyLnNoaWZ0KCk7cz1sK3Iuc2hpZnQoKTtuPUMrci5zaGlmdCgpO2JlemllckN1cnZlVG8oYyxoLGwsQyxzLG4pO2JyZWFrO2Nhc2UgMjY6ci5sZW5ndGglMiYmKHMrPXIuc2hpZnQoKSk7Zm9yKDtyLmxlbmd0aD4wOyl7Yz1zO2g9bityLnNoaWZ0KCk7bD1jK3Iuc2hpZnQoKTtDPWgrci5zaGlmdCgpO3M9bDtuPUMrci5zaGlmdCgpO2JlemllckN1cnZlVG8oYyxoLGwsQyxzLG4pfWJyZWFrO2Nhc2UgMjc6ci5sZW5ndGglMiYmKG4rPXIuc2hpZnQoKSk7Zm9yKDtyLmxlbmd0aD4wOyl7Yz1zK3Iuc2hpZnQoKTtoPW47bD1jK3Iuc2hpZnQoKTtDPWgrci5zaGlmdCgpO3M9bCtyLnNoaWZ0KCk7bj1DO2JlemllckN1cnZlVG8oYyxoLGwsQyxzLG4pfWJyZWFrO2Nhc2UgMjg6ci5wdXNoKChlW2ddPDwyNHxlW2crMV08PDE2KT4+MTYpO2crPTI7YnJlYWs7Y2FzZSAyOTpkPXIucG9wKCkraS5nc3VicnNCaWFzO2Y9aS5nc3VicnNbZF07ZiYmcGFyc2UoZik7YnJlYWs7Y2FzZSAzMDpmb3IoO3IubGVuZ3RoPjA7KXtjPXM7aD1uK3Iuc2hpZnQoKTtsPWMrci5zaGlmdCgpO0M9aCtyLnNoaWZ0KCk7cz1sK3Iuc2hpZnQoKTtuPUMrKDE9PT1yLmxlbmd0aD9yLnNoaWZ0KCk6MCk7YmV6aWVyQ3VydmVUbyhjLGgsbCxDLHMsbik7aWYoMD09PXIubGVuZ3RoKWJyZWFrO2M9cytyLnNoaWZ0KCk7aD1uO2w9YytyLnNoaWZ0KCk7Qz1oK3Iuc2hpZnQoKTtuPUMrci5zaGlmdCgpO3M9bCsoMT09PXIubGVuZ3RoP3Iuc2hpZnQoKTowKTtiZXppZXJDdXJ2ZVRvKGMsaCxsLEMscyxuKX1icmVhaztjYXNlIDMxOmZvcig7ci5sZW5ndGg+MDspe2M9cytyLnNoaWZ0KCk7aD1uO2w9YytyLnNoaWZ0KCk7Qz1oK3Iuc2hpZnQoKTtuPUMrci5zaGlmdCgpO3M9bCsoMT09PXIubGVuZ3RoP3Iuc2hpZnQoKTowKTtiZXppZXJDdXJ2ZVRvKGMsaCxsLEMscyxuKTtpZigwPT09ci5sZW5ndGgpYnJlYWs7Yz1zO2g9bityLnNoaWZ0KCk7bD1jK3Iuc2hpZnQoKTtDPWgrci5zaGlmdCgpO3M9bCtyLnNoaWZ0KCk7bj1DKygxPT09ci5sZW5ndGg/ci5zaGlmdCgpOjApO2JlemllckN1cnZlVG8oYyxoLGwsQyxzLG4pfWJyZWFrO2RlZmF1bHQ6aWYobTwzMil0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYHVua25vd24gb3BlcmF0b3I6ICR7bX1gKTtpZihtPDI0NylyLnB1c2gobS0xMzkpO2Vsc2UgaWYobTwyNTEpci5wdXNoKDI1NioobS0yNDcpK2VbZysrXSsxMDgpO2Vsc2UgaWYobTwyNTUpci5wdXNoKDI1NiotKG0tMjUxKS1lW2crK10tMTA4KTtlbHNle3IucHVzaCgoZVtnXTw8MjR8ZVtnKzFdPDwxNnxlW2crMl08PDh8ZVtnKzNdKS82NTUzNik7Zys9NH19cCYmKHIubGVuZ3RoPTApfX0oZSl9Y2xhc3MgQ29tbWFuZHN7Y21kcz1bXTt0cmFuc2Zvcm1TdGFjaz1bXTtjdXJyZW50VHJhbnNmb3JtPVsxLDAsMCwxLDAsMF07YWRkKGUsdCl7aWYodCl7Y29uc3RbaSxhLHIscyxuLG9dPXRoaXMuY3VycmVudFRyYW5zZm9ybTtmb3IobGV0IGU9MCxnPXQubGVuZ3RoO2U8ZztlKz0yKXtjb25zdCBnPXRbZV0sYz10W2UrMV07dFtlXT1pKmcrcipjK247dFtlKzFdPWEqZytzKmMrb310aGlzLmNtZHMucHVzaChgJHtlfSR7dC5qb2luKCIgIil9YCl9ZWxzZSB0aGlzLmNtZHMucHVzaChlKX10cmFuc2Zvcm0oZSl7dGhpcy5jdXJyZW50VHJhbnNmb3JtPVV0aWwudHJhbnNmb3JtKHRoaXMuY3VycmVudFRyYW5zZm9ybSxlKX10cmFuc2xhdGUoZSx0KXt0aGlzLnRyYW5zZm9ybShbMSwwLDAsMSxlLHRdKX1zYXZlKCl7dGhpcy50cmFuc2Zvcm1TdGFjay5wdXNoKHRoaXMuY3VycmVudFRyYW5zZm9ybS5zbGljZSgpKX1yZXN0b3JlKCl7dGhpcy5jdXJyZW50VHJhbnNmb3JtPXRoaXMudHJhbnNmb3JtU3RhY2sucG9wKCl8fFsxLDAsMCwxLDAsMF19Z2V0U1ZHKCl7cmV0dXJuIHRoaXMuY21kcy5qb2luKCIiKX19Y2xhc3MgQ29tcGlsZWRGb250e2NvbnN0cnVjdG9yKGUpe3RoaXMuZm9udE1hdHJpeD1lO3RoaXMuY29tcGlsZWRHbHlwaHM9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzLmNvbXBpbGVkQ2hhckNvZGVUb0dseXBoSWQ9T2JqZWN0LmNyZWF0ZShudWxsKX1nZXRQYXRoSnMoZSl7Y29uc3R7Y2hhckNvZGU6dCxnbHlwaElkOml9PWxvb2t1cENtYXAodGhpcy5jbWFwLGUpO2xldCBhLHI9dGhpcy5jb21waWxlZEdseXBoc1tpXTtpZih2b2lkIDA9PT1yKXt0cnl7cj10aGlzLmNvbXBpbGVHbHlwaCh0aGlzLmdseXBoc1tpXSxpKX1jYXRjaChlKXtyPSIiO2E9ZX10aGlzLmNvbXBpbGVkR2x5cGhzW2ldPXJ9dGhpcy5jb21waWxlZENoYXJDb2RlVG9HbHlwaElkW3RdPz89aTtpZihhKXRocm93IGE7cmV0dXJuIHJ9Y29tcGlsZUdseXBoKGUsdCl7aWYoIWU/Lmxlbmd0aHx8MTQ9PT1lWzBdKXJldHVybiIiO2xldCBpPXRoaXMuZm9udE1hdHJpeDtpZih0aGlzLmlzQ0ZGQ0lERm9udCl7Y29uc3QgZT10aGlzLmZkU2VsZWN0LmdldEZESW5kZXgodCk7aWYoZT49MCYmZTx0aGlzLmZkQXJyYXkubGVuZ3RoKXtpPXRoaXMuZmRBcnJheVtlXS5nZXRCeU5hbWUoIkZvbnRNYXRyaXgiKXx8cn1lbHNlIHdhcm4oIkludmFsaWQgZmQgaW5kZXggZm9yIGdseXBoIGluZGV4LiIpfWFzc2VydChpc051bWJlckFycmF5KGksNiksIkV4cGVjdGVkIGEgdmFsaWQgZm9udE1hdHJpeC4iKTtjb25zdCBhPW5ldyBDb21tYW5kczthLnRyYW5zZm9ybShpLnNsaWNlKCkpO3RoaXMuY29tcGlsZUdseXBoSW1wbChlLGEsdCk7YS5hZGQoIloiKTtyZXR1cm4gYS5nZXRTVkcoKX1jb21waWxlR2x5cGhJbXBsKCl7dW5yZWFjaGFibGUoIkNoaWxkcmVuIGNsYXNzZXMgc2hvdWxkIGltcGxlbWVudCB0aGlzLiIpfWhhc0J1aWx0UGF0aChlKXtjb25zdHtjaGFyQ29kZTp0LGdseXBoSWQ6aX09bG9va3VwQ21hcCh0aGlzLmNtYXAsZSk7cmV0dXJuIHZvaWQgMCE9PXRoaXMuY29tcGlsZWRHbHlwaHNbaV0mJnZvaWQgMCE9PXRoaXMuY29tcGlsZWRDaGFyQ29kZVRvR2x5cGhJZFt0XX19Y2xhc3MgVHJ1ZVR5cGVDb21waWxlZCBleHRlbmRzIENvbXBpbGVkRm9udHtjb25zdHJ1Y3RvcihlLHQsaSl7c3VwZXIoaXx8WzQ4OGUtNiwwLDAsNDg4ZS02LDAsMF0pO3RoaXMuZ2x5cGhzPWU7dGhpcy5jbWFwPXR9Y29tcGlsZUdseXBoSW1wbChlLHQpe2NvbXBpbGVHbHlmKGUsdCx0aGlzKX19Y2xhc3MgVHlwZTJDb21waWxlZCBleHRlbmRzIENvbXBpbGVkRm9udHtjb25zdHJ1Y3RvcihlLHQsaSl7c3VwZXIoaXx8Wy4wMDEsMCwwLC4wMDEsMCwwXSk7dGhpcy5nbHlwaHM9ZS5nbHlwaHM7dGhpcy5nc3VicnM9ZS5nc3VicnN8fFtdO3RoaXMuc3VicnM9ZS5zdWJyc3x8W107dGhpcy5jbWFwPXQ7dGhpcy5nbHlwaE5hbWVNYXA9RGkoKTt0aGlzLmdzdWJyc0JpYXM9Z2V0U3Vicm91dGluZUJpYXModGhpcy5nc3VicnMpO3RoaXMuc3VicnNCaWFzPWdldFN1YnJvdXRpbmVCaWFzKHRoaXMuc3VicnMpO3RoaXMuaXNDRkZDSURGb250PWUuaXNDRkZDSURGb250O3RoaXMuZmRTZWxlY3Q9ZS5mZFNlbGVjdDt0aGlzLmZkQXJyYXk9ZS5mZEFycmF5fWNvbXBpbGVHbHlwaEltcGwoZSx0LGkpe2NvbXBpbGVDaGFyU3RyaW5nKGUsdCx0aGlzLGkpfX1jbGFzcyBGb250UmVuZGVyZXJGYWN0b3J5e3N0YXRpYyBjcmVhdGUoZSx0KXtjb25zdCBpPW5ldyBVaW50OEFycmF5KGUuZGF0YSk7bGV0IGEscixzLG4sbyxnO2NvbnN0IGM9Z2V0VWludDE2KGksNCk7Zm9yKGxldCBlPTAsbD0xMjtlPGM7ZSsrLGwrPTE2KXtjb25zdCBlPWJ5dGVzVG9TdHJpbmcoaS5zdWJhcnJheShsLGwrNCkpLGM9Z2V0VWludDMyKGksbCs4KSxoPWdldFVpbnQzMihpLGwrMTIpO3N3aXRjaChlKXtjYXNlImNtYXAiOmE9cGFyc2VDbWFwKGksYyk7YnJlYWs7Y2FzZSJnbHlmIjpyPWkuc3ViYXJyYXkoYyxjK2gpO2JyZWFrO2Nhc2UibG9jYSI6cz1pLnN1YmFycmF5KGMsYytoKTticmVhaztjYXNlImhlYWQiOmc9Z2V0VWludDE2KGksYysxOCk7bz1nZXRVaW50MTYoaSxjKzUwKTticmVhaztjYXNlIkNGRiAiOm49cGFyc2VDZmYoaSxjLGMraCx0KX19aWYocil7Y29uc3QgdD1nP1sxL2csMCwwLDEvZywwLDBdOmUuZm9udE1hdHJpeDtyZXR1cm4gbmV3IFRydWVUeXBlQ29tcGlsZWQoZnVuY3Rpb24gcGFyc2VHbHlmVGFibGUoZSx0LGkpe2xldCBhLHI7aWYoaSl7YT00O3I9Z2V0VWludDMyfWVsc2V7YT0yO3I9KGUsdCk9PjIqZ2V0VWludDE2KGUsdCl9Y29uc3Qgcz1bXTtsZXQgbj1yKHQsMCk7Zm9yKGxldCBpPWE7aTx0Lmxlbmd0aDtpKz1hKXtjb25zdCBhPXIodCxpKTtzLnB1c2goZS5zdWJhcnJheShuLGEpKTtuPWF9cmV0dXJuIHN9KHIscyxvKSxhLHQpfXJldHVybiBuZXcgVHlwZTJDb21waWxlZChuLGEsZS5mb250TWF0cml4KX19Y29uc3QgVmk9Z2V0TG9va3VwVGFibGVGYWN0b3J5KChmdW5jdGlvbihlKXtlLkNvdXJpZXI9NjAwO2VbIkNvdXJpZXItQm9sZCJdPTYwMDtlWyJDb3VyaWVyLUJvbGRPYmxpcXVlIl09NjAwO2VbIkNvdXJpZXItT2JsaXF1ZSJdPTYwMDtlLkhlbHZldGljYT1nZXRMb29rdXBUYWJsZUZhY3RvcnkoKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9Mjc4O2UuZXhjbGFtPTI3ODtlLnF1b3RlZGJsPTM1NTtlLm51bWJlcnNpZ249NTU2O2UuZG9sbGFyPTU1NjtlLnBlcmNlbnQ9ODg5O2UuYW1wZXJzYW5kPTY2NztlLnF1b3RlcmlnaHQ9MjIyO2UucGFyZW5sZWZ0PTMzMztlLnBhcmVucmlnaHQ9MzMzO2UuYXN0ZXJpc2s9Mzg5O2UucGx1cz01ODQ7ZS5jb21tYT0yNzg7ZS5oeXBoZW49MzMzO2UucGVyaW9kPTI3ODtlLnNsYXNoPTI3ODtlLnplcm89NTU2O2Uub25lPTU1NjtlLnR3bz01NTY7ZS50aHJlZT01NTY7ZS5mb3VyPTU1NjtlLmZpdmU9NTU2O2Uuc2l4PTU1NjtlLnNldmVuPTU1NjtlLmVpZ2h0PTU1NjtlLm5pbmU9NTU2O2UuY29sb249Mjc4O2Uuc2VtaWNvbG9uPTI3ODtlLmxlc3M9NTg0O2UuZXF1YWw9NTg0O2UuZ3JlYXRlcj01ODQ7ZS5xdWVzdGlvbj01NTY7ZS5hdD0xMDE1O2UuQT02Njc7ZS5CPTY2NztlLkM9NzIyO2UuRD03MjI7ZS5FPTY2NztlLkY9NjExO2UuRz03Nzg7ZS5IPTcyMjtlLkk9Mjc4O2UuSj01MDA7ZS5LPTY2NztlLkw9NTU2O2UuTT04MzM7ZS5OPTcyMjtlLk89Nzc4O2UuUD02Njc7ZS5RPTc3ODtlLlI9NzIyO2UuUz02Njc7ZS5UPTYxMTtlLlU9NzIyO2UuVj02Njc7ZS5XPTk0NDtlLlg9NjY3O2UuWT02Njc7ZS5aPTYxMTtlLmJyYWNrZXRsZWZ0PTI3ODtlLmJhY2tzbGFzaD0yNzg7ZS5icmFja2V0cmlnaHQ9Mjc4O2UuYXNjaWljaXJjdW09NDY5O2UudW5kZXJzY29yZT01NTY7ZS5xdW90ZWxlZnQ9MjIyO2UuYT01NTY7ZS5iPTU1NjtlLmM9NTAwO2UuZD01NTY7ZS5lPTU1NjtlLmY9Mjc4O2UuZz01NTY7ZS5oPTU1NjtlLmk9MjIyO2Uuaj0yMjI7ZS5rPTUwMDtlLmw9MjIyO2UubT04MzM7ZS5uPTU1NjtlLm89NTU2O2UucD01NTY7ZS5xPTU1NjtlLnI9MzMzO2Uucz01MDA7ZS50PTI3ODtlLnU9NTU2O2Uudj01MDA7ZS53PTcyMjtlLng9NTAwO2UueT01MDA7ZS56PTUwMDtlLmJyYWNlbGVmdD0zMzQ7ZS5iYXI9MjYwO2UuYnJhY2VyaWdodD0zMzQ7ZS5hc2NpaXRpbGRlPTU4NDtlLmV4Y2xhbWRvd249MzMzO2UuY2VudD01NTY7ZS5zdGVybGluZz01NTY7ZS5mcmFjdGlvbj0xNjc7ZS55ZW49NTU2O2UuZmxvcmluPTU1NjtlLnNlY3Rpb249NTU2O2UuY3VycmVuY3k9NTU2O2UucXVvdGVzaW5nbGU9MTkxO2UucXVvdGVkYmxsZWZ0PTMzMztlLmd1aWxsZW1vdGxlZnQ9NTU2O2UuZ3VpbHNpbmdsbGVmdD0zMzM7ZS5ndWlsc2luZ2xyaWdodD0zMzM7ZS5maT01MDA7ZS5mbD01MDA7ZS5lbmRhc2g9NTU2O2UuZGFnZ2VyPTU1NjtlLmRhZ2dlcmRibD01NTY7ZS5wZXJpb2RjZW50ZXJlZD0yNzg7ZS5wYXJhZ3JhcGg9NTM3O2UuYnVsbGV0PTM1MDtlLnF1b3Rlc2luZ2xiYXNlPTIyMjtlLnF1b3RlZGJsYmFzZT0zMzM7ZS5xdW90ZWRibHJpZ2h0PTMzMztlLmd1aWxsZW1vdHJpZ2h0PTU1NjtlLmVsbGlwc2lzPTFlMztlLnBlcnRob3VzYW5kPTFlMztlLnF1ZXN0aW9uZG93bj02MTE7ZS5ncmF2ZT0zMzM7ZS5hY3V0ZT0zMzM7ZS5jaXJjdW1mbGV4PTMzMztlLnRpbGRlPTMzMztlLm1hY3Jvbj0zMzM7ZS5icmV2ZT0zMzM7ZS5kb3RhY2NlbnQ9MzMzO2UuZGllcmVzaXM9MzMzO2UucmluZz0zMzM7ZS5jZWRpbGxhPTMzMztlLmh1bmdhcnVtbGF1dD0zMzM7ZS5vZ29uZWs9MzMzO2UuY2Fyb249MzMzO2UuZW1kYXNoPTFlMztlLkFFPTFlMztlLm9yZGZlbWluaW5lPTM3MDtlLkxzbGFzaD01NTY7ZS5Pc2xhc2g9Nzc4O2UuT0U9MWUzO2Uub3JkbWFzY3VsaW5lPTM2NTtlLmFlPTg4OTtlLmRvdGxlc3NpPTI3ODtlLmxzbGFzaD0yMjI7ZS5vc2xhc2g9NjExO2Uub2U9OTQ0O2UuZ2VybWFuZGJscz02MTE7ZS5JZGllcmVzaXM9Mjc4O2UuZWFjdXRlPTU1NjtlLmFicmV2ZT01NTY7ZS51aHVuZ2FydW1sYXV0PTU1NjtlLmVjYXJvbj01NTY7ZS5ZZGllcmVzaXM9NjY3O2UuZGl2aWRlPTU4NDtlLllhY3V0ZT02Njc7ZS5BY2lyY3VtZmxleD02Njc7ZS5hYWN1dGU9NTU2O2UuVWNpcmN1bWZsZXg9NzIyO2UueWFjdXRlPTUwMDtlLnNjb21tYWFjY2VudD01MDA7ZS5lY2lyY3VtZmxleD01NTY7ZS5VcmluZz03MjI7ZS5VZGllcmVzaXM9NzIyO2UuYW9nb25laz01NTY7ZS5VYWN1dGU9NzIyO2UudW9nb25laz01NTY7ZS5FZGllcmVzaXM9NjY3O2UuRGNyb2F0PTcyMjtlLmNvbW1hYWNjZW50PTI1MDtlLmNvcHlyaWdodD03Mzc7ZS5FbWFjcm9uPTY2NztlLmNjYXJvbj01MDA7ZS5hcmluZz01NTY7ZS5OY29tbWFhY2NlbnQ9NzIyO2UubGFjdXRlPTIyMjtlLmFncmF2ZT01NTY7ZS5UY29tbWFhY2NlbnQ9NjExO2UuQ2FjdXRlPTcyMjtlLmF0aWxkZT01NTY7ZS5FZG90YWNjZW50PTY2NztlLnNjYXJvbj01MDA7ZS5zY2VkaWxsYT01MDA7ZS5pYWN1dGU9Mjc4O2UubG96ZW5nZT00NzE7ZS5SY2Fyb249NzIyO2UuR2NvbW1hYWNjZW50PTc3ODtlLnVjaXJjdW1mbGV4PTU1NjtlLmFjaXJjdW1mbGV4PTU1NjtlLkFtYWNyb249NjY3O2UucmNhcm9uPTMzMztlLmNjZWRpbGxhPTUwMDtlLlpkb3RhY2NlbnQ9NjExO2UuVGhvcm49NjY3O2UuT21hY3Jvbj03Nzg7ZS5SYWN1dGU9NzIyO2UuU2FjdXRlPTY2NztlLmRjYXJvbj02NDM7ZS5VbWFjcm9uPTcyMjtlLnVyaW5nPTU1NjtlLnRocmVlc3VwZXJpb3I9MzMzO2UuT2dyYXZlPTc3ODtlLkFncmF2ZT02Njc7ZS5BYnJldmU9NjY3O2UubXVsdGlwbHk9NTg0O2UudWFjdXRlPTU1NjtlLlRjYXJvbj02MTE7ZS5wYXJ0aWFsZGlmZj00NzY7ZS55ZGllcmVzaXM9NTAwO2UuTmFjdXRlPTcyMjtlLmljaXJjdW1mbGV4PTI3ODtlLkVjaXJjdW1mbGV4PTY2NztlLmFkaWVyZXNpcz01NTY7ZS5lZGllcmVzaXM9NTU2O2UuY2FjdXRlPTUwMDtlLm5hY3V0ZT01NTY7ZS51bWFjcm9uPTU1NjtlLk5jYXJvbj03MjI7ZS5JYWN1dGU9Mjc4O2UucGx1c21pbnVzPTU4NDtlLmJyb2tlbmJhcj0yNjA7ZS5yZWdpc3RlcmVkPTczNztlLkdicmV2ZT03Nzg7ZS5JZG90YWNjZW50PTI3ODtlLnN1bW1hdGlvbj02MDA7ZS5FZ3JhdmU9NjY3O2UucmFjdXRlPTMzMztlLm9tYWNyb249NTU2O2UuWmFjdXRlPTYxMTtlLlpjYXJvbj02MTE7ZS5ncmVhdGVyZXF1YWw9NTQ5O2UuRXRoPTcyMjtlLkNjZWRpbGxhPTcyMjtlLmxjb21tYWFjY2VudD0yMjI7ZS50Y2Fyb249MzE3O2UuZW9nb25laz01NTY7ZS5Vb2dvbmVrPTcyMjtlLkFhY3V0ZT02Njc7ZS5BZGllcmVzaXM9NjY3O2UuZWdyYXZlPTU1NjtlLnphY3V0ZT01MDA7ZS5pb2dvbmVrPTIyMjtlLk9hY3V0ZT03Nzg7ZS5vYWN1dGU9NTU2O2UuYW1hY3Jvbj01NTY7ZS5zYWN1dGU9NTAwO2UuaWRpZXJlc2lzPTI3ODtlLk9jaXJjdW1mbGV4PTc3ODtlLlVncmF2ZT03MjI7ZS5EZWx0YT02MTI7ZS50aG9ybj01NTY7ZS50d29zdXBlcmlvcj0zMzM7ZS5PZGllcmVzaXM9Nzc4O2UubXU9NTU2O2UuaWdyYXZlPTI3ODtlLm9odW5nYXJ1bWxhdXQ9NTU2O2UuRW9nb25laz02Njc7ZS5kY3JvYXQ9NTU2O2UudGhyZWVxdWFydGVycz04MzQ7ZS5TY2VkaWxsYT02Njc7ZS5sY2Fyb249Mjk5O2UuS2NvbW1hYWNjZW50PTY2NztlLkxhY3V0ZT01NTY7ZS50cmFkZW1hcms9MWUzO2UuZWRvdGFjY2VudD01NTY7ZS5JZ3JhdmU9Mjc4O2UuSW1hY3Jvbj0yNzg7ZS5MY2Fyb249NTU2O2Uub25laGFsZj04MzQ7ZS5sZXNzZXF1YWw9NTQ5O2Uub2NpcmN1bWZsZXg9NTU2O2UubnRpbGRlPTU1NjtlLlVodW5nYXJ1bWxhdXQ9NzIyO2UuRWFjdXRlPTY2NztlLmVtYWNyb249NTU2O2UuZ2JyZXZlPTU1NjtlLm9uZXF1YXJ0ZXI9ODM0O2UuU2Nhcm9uPTY2NztlLlNjb21tYWFjY2VudD02Njc7ZS5PaHVuZ2FydW1sYXV0PTc3ODtlLmRlZ3JlZT00MDA7ZS5vZ3JhdmU9NTU2O2UuQ2Nhcm9uPTcyMjtlLnVncmF2ZT01NTY7ZS5yYWRpY2FsPTQ1MztlLkRjYXJvbj03MjI7ZS5yY29tbWFhY2NlbnQ9MzMzO2UuTnRpbGRlPTcyMjtlLm90aWxkZT01NTY7ZS5SY29tbWFhY2NlbnQ9NzIyO2UuTGNvbW1hYWNjZW50PTU1NjtlLkF0aWxkZT02Njc7ZS5Bb2dvbmVrPTY2NztlLkFyaW5nPTY2NztlLk90aWxkZT03Nzg7ZS56ZG90YWNjZW50PTUwMDtlLkVjYXJvbj02Njc7ZS5Jb2dvbmVrPTI3ODtlLmtjb21tYWFjY2VudD01MDA7ZS5taW51cz01ODQ7ZS5JY2lyY3VtZmxleD0yNzg7ZS5uY2Fyb249NTU2O2UudGNvbW1hYWNjZW50PTI3ODtlLmxvZ2ljYWxub3Q9NTg0O2Uub2RpZXJlc2lzPTU1NjtlLnVkaWVyZXNpcz01NTY7ZS5ub3RlcXVhbD01NDk7ZS5nY29tbWFhY2NlbnQ9NTU2O2UuZXRoPTU1NjtlLnpjYXJvbj01MDA7ZS5uY29tbWFhY2NlbnQ9NTU2O2Uub25lc3VwZXJpb3I9MzMzO2UuaW1hY3Jvbj0yNzg7ZS5FdXJvPTU1Nn0pKTtlWyJIZWx2ZXRpY2EtQm9sZCJdPWdldExvb2t1cFRhYmxlRmFjdG9yeSgoZnVuY3Rpb24oZSl7ZS5zcGFjZT0yNzg7ZS5leGNsYW09MzMzO2UucXVvdGVkYmw9NDc0O2UubnVtYmVyc2lnbj01NTY7ZS5kb2xsYXI9NTU2O2UucGVyY2VudD04ODk7ZS5hbXBlcnNhbmQ9NzIyO2UucXVvdGVyaWdodD0yNzg7ZS5wYXJlbmxlZnQ9MzMzO2UucGFyZW5yaWdodD0zMzM7ZS5hc3Rlcmlzaz0zODk7ZS5wbHVzPTU4NDtlLmNvbW1hPTI3ODtlLmh5cGhlbj0zMzM7ZS5wZXJpb2Q9Mjc4O2Uuc2xhc2g9Mjc4O2UuemVybz01NTY7ZS5vbmU9NTU2O2UudHdvPTU1NjtlLnRocmVlPTU1NjtlLmZvdXI9NTU2O2UuZml2ZT01NTY7ZS5zaXg9NTU2O2Uuc2V2ZW49NTU2O2UuZWlnaHQ9NTU2O2UubmluZT01NTY7ZS5jb2xvbj0zMzM7ZS5zZW1pY29sb249MzMzO2UubGVzcz01ODQ7ZS5lcXVhbD01ODQ7ZS5ncmVhdGVyPTU4NDtlLnF1ZXN0aW9uPTYxMTtlLmF0PTk3NTtlLkE9NzIyO2UuQj03MjI7ZS5DPTcyMjtlLkQ9NzIyO2UuRT02Njc7ZS5GPTYxMTtlLkc9Nzc4O2UuSD03MjI7ZS5JPTI3ODtlLko9NTU2O2UuSz03MjI7ZS5MPTYxMTtlLk09ODMzO2UuTj03MjI7ZS5PPTc3ODtlLlA9NjY3O2UuUT03Nzg7ZS5SPTcyMjtlLlM9NjY3O2UuVD02MTE7ZS5VPTcyMjtlLlY9NjY3O2UuVz05NDQ7ZS5YPTY2NztlLlk9NjY3O2UuWj02MTE7ZS5icmFja2V0bGVmdD0zMzM7ZS5iYWNrc2xhc2g9Mjc4O2UuYnJhY2tldHJpZ2h0PTMzMztlLmFzY2lpY2lyY3VtPTU4NDtlLnVuZGVyc2NvcmU9NTU2O2UucXVvdGVsZWZ0PTI3ODtlLmE9NTU2O2UuYj02MTE7ZS5jPTU1NjtlLmQ9NjExO2UuZT01NTY7ZS5mPTMzMztlLmc9NjExO2UuaD02MTE7ZS5pPTI3ODtlLmo9Mjc4O2Uuaz01NTY7ZS5sPTI3ODtlLm09ODg5O2Uubj02MTE7ZS5vPTYxMTtlLnA9NjExO2UucT02MTE7ZS5yPTM4OTtlLnM9NTU2O2UudD0zMzM7ZS51PTYxMTtlLnY9NTU2O2Uudz03Nzg7ZS54PTU1NjtlLnk9NTU2O2Uuej01MDA7ZS5icmFjZWxlZnQ9Mzg5O2UuYmFyPTI4MDtlLmJyYWNlcmlnaHQ9Mzg5O2UuYXNjaWl0aWxkZT01ODQ7ZS5leGNsYW1kb3duPTMzMztlLmNlbnQ9NTU2O2Uuc3Rlcmxpbmc9NTU2O2UuZnJhY3Rpb249MTY3O2UueWVuPTU1NjtlLmZsb3Jpbj01NTY7ZS5zZWN0aW9uPTU1NjtlLmN1cnJlbmN5PTU1NjtlLnF1b3Rlc2luZ2xlPTIzODtlLnF1b3RlZGJsbGVmdD01MDA7ZS5ndWlsbGVtb3RsZWZ0PTU1NjtlLmd1aWxzaW5nbGxlZnQ9MzMzO2UuZ3VpbHNpbmdscmlnaHQ9MzMzO2UuZmk9NjExO2UuZmw9NjExO2UuZW5kYXNoPTU1NjtlLmRhZ2dlcj01NTY7ZS5kYWdnZXJkYmw9NTU2O2UucGVyaW9kY2VudGVyZWQ9Mjc4O2UucGFyYWdyYXBoPTU1NjtlLmJ1bGxldD0zNTA7ZS5xdW90ZXNpbmdsYmFzZT0yNzg7ZS5xdW90ZWRibGJhc2U9NTAwO2UucXVvdGVkYmxyaWdodD01MDA7ZS5ndWlsbGVtb3RyaWdodD01NTY7ZS5lbGxpcHNpcz0xZTM7ZS5wZXJ0aG91c2FuZD0xZTM7ZS5xdWVzdGlvbmRvd249NjExO2UuZ3JhdmU9MzMzO2UuYWN1dGU9MzMzO2UuY2lyY3VtZmxleD0zMzM7ZS50aWxkZT0zMzM7ZS5tYWNyb249MzMzO2UuYnJldmU9MzMzO2UuZG90YWNjZW50PTMzMztlLmRpZXJlc2lzPTMzMztlLnJpbmc9MzMzO2UuY2VkaWxsYT0zMzM7ZS5odW5nYXJ1bWxhdXQ9MzMzO2Uub2dvbmVrPTMzMztlLmNhcm9uPTMzMztlLmVtZGFzaD0xZTM7ZS5BRT0xZTM7ZS5vcmRmZW1pbmluZT0zNzA7ZS5Mc2xhc2g9NjExO2UuT3NsYXNoPTc3ODtlLk9FPTFlMztlLm9yZG1hc2N1bGluZT0zNjU7ZS5hZT04ODk7ZS5kb3RsZXNzaT0yNzg7ZS5sc2xhc2g9Mjc4O2Uub3NsYXNoPTYxMTtlLm9lPTk0NDtlLmdlcm1hbmRibHM9NjExO2UuSWRpZXJlc2lzPTI3ODtlLmVhY3V0ZT01NTY7ZS5hYnJldmU9NTU2O2UudWh1bmdhcnVtbGF1dD02MTE7ZS5lY2Fyb249NTU2O2UuWWRpZXJlc2lzPTY2NztlLmRpdmlkZT01ODQ7ZS5ZYWN1dGU9NjY3O2UuQWNpcmN1bWZsZXg9NzIyO2UuYWFjdXRlPTU1NjtlLlVjaXJjdW1mbGV4PTcyMjtlLnlhY3V0ZT01NTY7ZS5zY29tbWFhY2NlbnQ9NTU2O2UuZWNpcmN1bWZsZXg9NTU2O2UuVXJpbmc9NzIyO2UuVWRpZXJlc2lzPTcyMjtlLmFvZ29uZWs9NTU2O2UuVWFjdXRlPTcyMjtlLnVvZ29uZWs9NjExO2UuRWRpZXJlc2lzPTY2NztlLkRjcm9hdD03MjI7ZS5jb21tYWFjY2VudD0yNTA7ZS5jb3B5cmlnaHQ9NzM3O2UuRW1hY3Jvbj02Njc7ZS5jY2Fyb249NTU2O2UuYXJpbmc9NTU2O2UuTmNvbW1hYWNjZW50PTcyMjtlLmxhY3V0ZT0yNzg7ZS5hZ3JhdmU9NTU2O2UuVGNvbW1hYWNjZW50PTYxMTtlLkNhY3V0ZT03MjI7ZS5hdGlsZGU9NTU2O2UuRWRvdGFjY2VudD02Njc7ZS5zY2Fyb249NTU2O2Uuc2NlZGlsbGE9NTU2O2UuaWFjdXRlPTI3ODtlLmxvemVuZ2U9NDk0O2UuUmNhcm9uPTcyMjtlLkdjb21tYWFjY2VudD03Nzg7ZS51Y2lyY3VtZmxleD02MTE7ZS5hY2lyY3VtZmxleD01NTY7ZS5BbWFjcm9uPTcyMjtlLnJjYXJvbj0zODk7ZS5jY2VkaWxsYT01NTY7ZS5aZG90YWNjZW50PTYxMTtlLlRob3JuPTY2NztlLk9tYWNyb249Nzc4O2UuUmFjdXRlPTcyMjtlLlNhY3V0ZT02Njc7ZS5kY2Fyb249NzQzO2UuVW1hY3Jvbj03MjI7ZS51cmluZz02MTE7ZS50aHJlZXN1cGVyaW9yPTMzMztlLk9ncmF2ZT03Nzg7ZS5BZ3JhdmU9NzIyO2UuQWJyZXZlPTcyMjtlLm11bHRpcGx5PTU4NDtlLnVhY3V0ZT02MTE7ZS5UY2Fyb249NjExO2UucGFydGlhbGRpZmY9NDk0O2UueWRpZXJlc2lzPTU1NjtlLk5hY3V0ZT03MjI7ZS5pY2lyY3VtZmxleD0yNzg7ZS5FY2lyY3VtZmxleD02Njc7ZS5hZGllcmVzaXM9NTU2O2UuZWRpZXJlc2lzPTU1NjtlLmNhY3V0ZT01NTY7ZS5uYWN1dGU9NjExO2UudW1hY3Jvbj02MTE7ZS5OY2Fyb249NzIyO2UuSWFjdXRlPTI3ODtlLnBsdXNtaW51cz01ODQ7ZS5icm9rZW5iYXI9MjgwO2UucmVnaXN0ZXJlZD03Mzc7ZS5HYnJldmU9Nzc4O2UuSWRvdGFjY2VudD0yNzg7ZS5zdW1tYXRpb249NjAwO2UuRWdyYXZlPTY2NztlLnJhY3V0ZT0zODk7ZS5vbWFjcm9uPTYxMTtlLlphY3V0ZT02MTE7ZS5aY2Fyb249NjExO2UuZ3JlYXRlcmVxdWFsPTU0OTtlLkV0aD03MjI7ZS5DY2VkaWxsYT03MjI7ZS5sY29tbWFhY2NlbnQ9Mjc4O2UudGNhcm9uPTM4OTtlLmVvZ29uZWs9NTU2O2UuVW9nb25laz03MjI7ZS5BYWN1dGU9NzIyO2UuQWRpZXJlc2lzPTcyMjtlLmVncmF2ZT01NTY7ZS56YWN1dGU9NTAwO2UuaW9nb25laz0yNzg7ZS5PYWN1dGU9Nzc4O2Uub2FjdXRlPTYxMTtlLmFtYWNyb249NTU2O2Uuc2FjdXRlPTU1NjtlLmlkaWVyZXNpcz0yNzg7ZS5PY2lyY3VtZmxleD03Nzg7ZS5VZ3JhdmU9NzIyO2UuRGVsdGE9NjEyO2UudGhvcm49NjExO2UudHdvc3VwZXJpb3I9MzMzO2UuT2RpZXJlc2lzPTc3ODtlLm11PTYxMTtlLmlncmF2ZT0yNzg7ZS5vaHVuZ2FydW1sYXV0PTYxMTtlLkVvZ29uZWs9NjY3O2UuZGNyb2F0PTYxMTtlLnRocmVlcXVhcnRlcnM9ODM0O2UuU2NlZGlsbGE9NjY3O2UubGNhcm9uPTQwMDtlLktjb21tYWFjY2VudD03MjI7ZS5MYWN1dGU9NjExO2UudHJhZGVtYXJrPTFlMztlLmVkb3RhY2NlbnQ9NTU2O2UuSWdyYXZlPTI3ODtlLkltYWNyb249Mjc4O2UuTGNhcm9uPTYxMTtlLm9uZWhhbGY9ODM0O2UubGVzc2VxdWFsPTU0OTtlLm9jaXJjdW1mbGV4PTYxMTtlLm50aWxkZT02MTE7ZS5VaHVuZ2FydW1sYXV0PTcyMjtlLkVhY3V0ZT02Njc7ZS5lbWFjcm9uPTU1NjtlLmdicmV2ZT02MTE7ZS5vbmVxdWFydGVyPTgzNDtlLlNjYXJvbj02Njc7ZS5TY29tbWFhY2NlbnQ9NjY3O2UuT2h1bmdhcnVtbGF1dD03Nzg7ZS5kZWdyZWU9NDAwO2Uub2dyYXZlPTYxMTtlLkNjYXJvbj03MjI7ZS51Z3JhdmU9NjExO2UucmFkaWNhbD01NDk7ZS5EY2Fyb249NzIyO2UucmNvbW1hYWNjZW50PTM4OTtlLk50aWxkZT03MjI7ZS5vdGlsZGU9NjExO2UuUmNvbW1hYWNjZW50PTcyMjtlLkxjb21tYWFjY2VudD02MTE7ZS5BdGlsZGU9NzIyO2UuQW9nb25laz03MjI7ZS5BcmluZz03MjI7ZS5PdGlsZGU9Nzc4O2UuemRvdGFjY2VudD01MDA7ZS5FY2Fyb249NjY3O2UuSW9nb25laz0yNzg7ZS5rY29tbWFhY2NlbnQ9NTU2O2UubWludXM9NTg0O2UuSWNpcmN1bWZsZXg9Mjc4O2UubmNhcm9uPTYxMTtlLnRjb21tYWFjY2VudD0zMzM7ZS5sb2dpY2Fsbm90PTU4NDtlLm9kaWVyZXNpcz02MTE7ZS51ZGllcmVzaXM9NjExO2Uubm90ZXF1YWw9NTQ5O2UuZ2NvbW1hYWNjZW50PTYxMTtlLmV0aD02MTE7ZS56Y2Fyb249NTAwO2UubmNvbW1hYWNjZW50PTYxMTtlLm9uZXN1cGVyaW9yPTMzMztlLmltYWNyb249Mjc4O2UuRXVybz01NTZ9KSk7ZVsiSGVsdmV0aWNhLUJvbGRPYmxpcXVlIl09Z2V0TG9va3VwVGFibGVGYWN0b3J5KChmdW5jdGlvbihlKXtlLnNwYWNlPTI3ODtlLmV4Y2xhbT0zMzM7ZS5xdW90ZWRibD00NzQ7ZS5udW1iZXJzaWduPTU1NjtlLmRvbGxhcj01NTY7ZS5wZXJjZW50PTg4OTtlLmFtcGVyc2FuZD03MjI7ZS5xdW90ZXJpZ2h0PTI3ODtlLnBhcmVubGVmdD0zMzM7ZS5wYXJlbnJpZ2h0PTMzMztlLmFzdGVyaXNrPTM4OTtlLnBsdXM9NTg0O2UuY29tbWE9Mjc4O2UuaHlwaGVuPTMzMztlLnBlcmlvZD0yNzg7ZS5zbGFzaD0yNzg7ZS56ZXJvPTU1NjtlLm9uZT01NTY7ZS50d289NTU2O2UudGhyZWU9NTU2O2UuZm91cj01NTY7ZS5maXZlPTU1NjtlLnNpeD01NTY7ZS5zZXZlbj01NTY7ZS5laWdodD01NTY7ZS5uaW5lPTU1NjtlLmNvbG9uPTMzMztlLnNlbWljb2xvbj0zMzM7ZS5sZXNzPTU4NDtlLmVxdWFsPTU4NDtlLmdyZWF0ZXI9NTg0O2UucXVlc3Rpb249NjExO2UuYXQ9OTc1O2UuQT03MjI7ZS5CPTcyMjtlLkM9NzIyO2UuRD03MjI7ZS5FPTY2NztlLkY9NjExO2UuRz03Nzg7ZS5IPTcyMjtlLkk9Mjc4O2UuSj01NTY7ZS5LPTcyMjtlLkw9NjExO2UuTT04MzM7ZS5OPTcyMjtlLk89Nzc4O2UuUD02Njc7ZS5RPTc3ODtlLlI9NzIyO2UuUz02Njc7ZS5UPTYxMTtlLlU9NzIyO2UuVj02Njc7ZS5XPTk0NDtlLlg9NjY3O2UuWT02Njc7ZS5aPTYxMTtlLmJyYWNrZXRsZWZ0PTMzMztlLmJhY2tzbGFzaD0yNzg7ZS5icmFja2V0cmlnaHQ9MzMzO2UuYXNjaWljaXJjdW09NTg0O2UudW5kZXJzY29yZT01NTY7ZS5xdW90ZWxlZnQ9Mjc4O2UuYT01NTY7ZS5iPTYxMTtlLmM9NTU2O2UuZD02MTE7ZS5lPTU1NjtlLmY9MzMzO2UuZz02MTE7ZS5oPTYxMTtlLmk9Mjc4O2Uuaj0yNzg7ZS5rPTU1NjtlLmw9Mjc4O2UubT04ODk7ZS5uPTYxMTtlLm89NjExO2UucD02MTE7ZS5xPTYxMTtlLnI9Mzg5O2Uucz01NTY7ZS50PTMzMztlLnU9NjExO2Uudj01NTY7ZS53PTc3ODtlLng9NTU2O2UueT01NTY7ZS56PTUwMDtlLmJyYWNlbGVmdD0zODk7ZS5iYXI9MjgwO2UuYnJhY2VyaWdodD0zODk7ZS5hc2NpaXRpbGRlPTU4NDtlLmV4Y2xhbWRvd249MzMzO2UuY2VudD01NTY7ZS5zdGVybGluZz01NTY7ZS5mcmFjdGlvbj0xNjc7ZS55ZW49NTU2O2UuZmxvcmluPTU1NjtlLnNlY3Rpb249NTU2O2UuY3VycmVuY3k9NTU2O2UucXVvdGVzaW5nbGU9MjM4O2UucXVvdGVkYmxsZWZ0PTUwMDtlLmd1aWxsZW1vdGxlZnQ9NTU2O2UuZ3VpbHNpbmdsbGVmdD0zMzM7ZS5ndWlsc2luZ2xyaWdodD0zMzM7ZS5maT02MTE7ZS5mbD02MTE7ZS5lbmRhc2g9NTU2O2UuZGFnZ2VyPTU1NjtlLmRhZ2dlcmRibD01NTY7ZS5wZXJpb2RjZW50ZXJlZD0yNzg7ZS5wYXJhZ3JhcGg9NTU2O2UuYnVsbGV0PTM1MDtlLnF1b3Rlc2luZ2xiYXNlPTI3ODtlLnF1b3RlZGJsYmFzZT01MDA7ZS5xdW90ZWRibHJpZ2h0PTUwMDtlLmd1aWxsZW1vdHJpZ2h0PTU1NjtlLmVsbGlwc2lzPTFlMztlLnBlcnRob3VzYW5kPTFlMztlLnF1ZXN0aW9uZG93bj02MTE7ZS5ncmF2ZT0zMzM7ZS5hY3V0ZT0zMzM7ZS5jaXJjdW1mbGV4PTMzMztlLnRpbGRlPTMzMztlLm1hY3Jvbj0zMzM7ZS5icmV2ZT0zMzM7ZS5kb3RhY2NlbnQ9MzMzO2UuZGllcmVzaXM9MzMzO2UucmluZz0zMzM7ZS5jZWRpbGxhPTMzMztlLmh1bmdhcnVtbGF1dD0zMzM7ZS5vZ29uZWs9MzMzO2UuY2Fyb249MzMzO2UuZW1kYXNoPTFlMztlLkFFPTFlMztlLm9yZGZlbWluaW5lPTM3MDtlLkxzbGFzaD02MTE7ZS5Pc2xhc2g9Nzc4O2UuT0U9MWUzO2Uub3JkbWFzY3VsaW5lPTM2NTtlLmFlPTg4OTtlLmRvdGxlc3NpPTI3ODtlLmxzbGFzaD0yNzg7ZS5vc2xhc2g9NjExO2Uub2U9OTQ0O2UuZ2VybWFuZGJscz02MTE7ZS5JZGllcmVzaXM9Mjc4O2UuZWFjdXRlPTU1NjtlLmFicmV2ZT01NTY7ZS51aHVuZ2FydW1sYXV0PTYxMTtlLmVjYXJvbj01NTY7ZS5ZZGllcmVzaXM9NjY3O2UuZGl2aWRlPTU4NDtlLllhY3V0ZT02Njc7ZS5BY2lyY3VtZmxleD03MjI7ZS5hYWN1dGU9NTU2O2UuVWNpcmN1bWZsZXg9NzIyO2UueWFjdXRlPTU1NjtlLnNjb21tYWFjY2VudD01NTY7ZS5lY2lyY3VtZmxleD01NTY7ZS5VcmluZz03MjI7ZS5VZGllcmVzaXM9NzIyO2UuYW9nb25laz01NTY7ZS5VYWN1dGU9NzIyO2UudW9nb25laz02MTE7ZS5FZGllcmVzaXM9NjY3O2UuRGNyb2F0PTcyMjtlLmNvbW1hYWNjZW50PTI1MDtlLmNvcHlyaWdodD03Mzc7ZS5FbWFjcm9uPTY2NztlLmNjYXJvbj01NTY7ZS5hcmluZz01NTY7ZS5OY29tbWFhY2NlbnQ9NzIyO2UubGFjdXRlPTI3ODtlLmFncmF2ZT01NTY7ZS5UY29tbWFhY2NlbnQ9NjExO2UuQ2FjdXRlPTcyMjtlLmF0aWxkZT01NTY7ZS5FZG90YWNjZW50PTY2NztlLnNjYXJvbj01NTY7ZS5zY2VkaWxsYT01NTY7ZS5pYWN1dGU9Mjc4O2UubG96ZW5nZT00OTQ7ZS5SY2Fyb249NzIyO2UuR2NvbW1hYWNjZW50PTc3ODtlLnVjaXJjdW1mbGV4PTYxMTtlLmFjaXJjdW1mbGV4PTU1NjtlLkFtYWNyb249NzIyO2UucmNhcm9uPTM4OTtlLmNjZWRpbGxhPTU1NjtlLlpkb3RhY2NlbnQ9NjExO2UuVGhvcm49NjY3O2UuT21hY3Jvbj03Nzg7ZS5SYWN1dGU9NzIyO2UuU2FjdXRlPTY2NztlLmRjYXJvbj03NDM7ZS5VbWFjcm9uPTcyMjtlLnVyaW5nPTYxMTtlLnRocmVlc3VwZXJpb3I9MzMzO2UuT2dyYXZlPTc3ODtlLkFncmF2ZT03MjI7ZS5BYnJldmU9NzIyO2UubXVsdGlwbHk9NTg0O2UudWFjdXRlPTYxMTtlLlRjYXJvbj02MTE7ZS5wYXJ0aWFsZGlmZj00OTQ7ZS55ZGllcmVzaXM9NTU2O2UuTmFjdXRlPTcyMjtlLmljaXJjdW1mbGV4PTI3ODtlLkVjaXJjdW1mbGV4PTY2NztlLmFkaWVyZXNpcz01NTY7ZS5lZGllcmVzaXM9NTU2O2UuY2FjdXRlPTU1NjtlLm5hY3V0ZT02MTE7ZS51bWFjcm9uPTYxMTtlLk5jYXJvbj03MjI7ZS5JYWN1dGU9Mjc4O2UucGx1c21pbnVzPTU4NDtlLmJyb2tlbmJhcj0yODA7ZS5yZWdpc3RlcmVkPTczNztlLkdicmV2ZT03Nzg7ZS5JZG90YWNjZW50PTI3ODtlLnN1bW1hdGlvbj02MDA7ZS5FZ3JhdmU9NjY3O2UucmFjdXRlPTM4OTtlLm9tYWNyb249NjExO2UuWmFjdXRlPTYxMTtlLlpjYXJvbj02MTE7ZS5ncmVhdGVyZXF1YWw9NTQ5O2UuRXRoPTcyMjtlLkNjZWRpbGxhPTcyMjtlLmxjb21tYWFjY2VudD0yNzg7ZS50Y2Fyb249Mzg5O2UuZW9nb25laz01NTY7ZS5Vb2dvbmVrPTcyMjtlLkFhY3V0ZT03MjI7ZS5BZGllcmVzaXM9NzIyO2UuZWdyYXZlPTU1NjtlLnphY3V0ZT01MDA7ZS5pb2dvbmVrPTI3ODtlLk9hY3V0ZT03Nzg7ZS5vYWN1dGU9NjExO2UuYW1hY3Jvbj01NTY7ZS5zYWN1dGU9NTU2O2UuaWRpZXJlc2lzPTI3ODtlLk9jaXJjdW1mbGV4PTc3ODtlLlVncmF2ZT03MjI7ZS5EZWx0YT02MTI7ZS50aG9ybj02MTE7ZS50d29zdXBlcmlvcj0zMzM7ZS5PZGllcmVzaXM9Nzc4O2UubXU9NjExO2UuaWdyYXZlPTI3ODtlLm9odW5nYXJ1bWxhdXQ9NjExO2UuRW9nb25laz02Njc7ZS5kY3JvYXQ9NjExO2UudGhyZWVxdWFydGVycz04MzQ7ZS5TY2VkaWxsYT02Njc7ZS5sY2Fyb249NDAwO2UuS2NvbW1hYWNjZW50PTcyMjtlLkxhY3V0ZT02MTE7ZS50cmFkZW1hcms9MWUzO2UuZWRvdGFjY2VudD01NTY7ZS5JZ3JhdmU9Mjc4O2UuSW1hY3Jvbj0yNzg7ZS5MY2Fyb249NjExO2Uub25laGFsZj04MzQ7ZS5sZXNzZXF1YWw9NTQ5O2Uub2NpcmN1bWZsZXg9NjExO2UubnRpbGRlPTYxMTtlLlVodW5nYXJ1bWxhdXQ9NzIyO2UuRWFjdXRlPTY2NztlLmVtYWNyb249NTU2O2UuZ2JyZXZlPTYxMTtlLm9uZXF1YXJ0ZXI9ODM0O2UuU2Nhcm9uPTY2NztlLlNjb21tYWFjY2VudD02Njc7ZS5PaHVuZ2FydW1sYXV0PTc3ODtlLmRlZ3JlZT00MDA7ZS5vZ3JhdmU9NjExO2UuQ2Nhcm9uPTcyMjtlLnVncmF2ZT02MTE7ZS5yYWRpY2FsPTU0OTtlLkRjYXJvbj03MjI7ZS5yY29tbWFhY2NlbnQ9Mzg5O2UuTnRpbGRlPTcyMjtlLm90aWxkZT02MTE7ZS5SY29tbWFhY2NlbnQ9NzIyO2UuTGNvbW1hYWNjZW50PTYxMTtlLkF0aWxkZT03MjI7ZS5Bb2dvbmVrPTcyMjtlLkFyaW5nPTcyMjtlLk90aWxkZT03Nzg7ZS56ZG90YWNjZW50PTUwMDtlLkVjYXJvbj02Njc7ZS5Jb2dvbmVrPTI3ODtlLmtjb21tYWFjY2VudD01NTY7ZS5taW51cz01ODQ7ZS5JY2lyY3VtZmxleD0yNzg7ZS5uY2Fyb249NjExO2UudGNvbW1hYWNjZW50PTMzMztlLmxvZ2ljYWxub3Q9NTg0O2Uub2RpZXJlc2lzPTYxMTtlLnVkaWVyZXNpcz02MTE7ZS5ub3RlcXVhbD01NDk7ZS5nY29tbWFhY2NlbnQ9NjExO2UuZXRoPTYxMTtlLnpjYXJvbj01MDA7ZS5uY29tbWFhY2NlbnQ9NjExO2Uub25lc3VwZXJpb3I9MzMzO2UuaW1hY3Jvbj0yNzg7ZS5FdXJvPTU1Nn0pKTtlWyJIZWx2ZXRpY2EtT2JsaXF1ZSJdPWdldExvb2t1cFRhYmxlRmFjdG9yeSgoZnVuY3Rpb24oZSl7ZS5zcGFjZT0yNzg7ZS5leGNsYW09Mjc4O2UucXVvdGVkYmw9MzU1O2UubnVtYmVyc2lnbj01NTY7ZS5kb2xsYXI9NTU2O2UucGVyY2VudD04ODk7ZS5hbXBlcnNhbmQ9NjY3O2UucXVvdGVyaWdodD0yMjI7ZS5wYXJlbmxlZnQ9MzMzO2UucGFyZW5yaWdodD0zMzM7ZS5hc3Rlcmlzaz0zODk7ZS5wbHVzPTU4NDtlLmNvbW1hPTI3ODtlLmh5cGhlbj0zMzM7ZS5wZXJpb2Q9Mjc4O2Uuc2xhc2g9Mjc4O2UuemVybz01NTY7ZS5vbmU9NTU2O2UudHdvPTU1NjtlLnRocmVlPTU1NjtlLmZvdXI9NTU2O2UuZml2ZT01NTY7ZS5zaXg9NTU2O2Uuc2V2ZW49NTU2O2UuZWlnaHQ9NTU2O2UubmluZT01NTY7ZS5jb2xvbj0yNzg7ZS5zZW1pY29sb249Mjc4O2UubGVzcz01ODQ7ZS5lcXVhbD01ODQ7ZS5ncmVhdGVyPTU4NDtlLnF1ZXN0aW9uPTU1NjtlLmF0PTEwMTU7ZS5BPTY2NztlLkI9NjY3O2UuQz03MjI7ZS5EPTcyMjtlLkU9NjY3O2UuRj02MTE7ZS5HPTc3ODtlLkg9NzIyO2UuST0yNzg7ZS5KPTUwMDtlLks9NjY3O2UuTD01NTY7ZS5NPTgzMztlLk49NzIyO2UuTz03Nzg7ZS5QPTY2NztlLlE9Nzc4O2UuUj03MjI7ZS5TPTY2NztlLlQ9NjExO2UuVT03MjI7ZS5WPTY2NztlLlc9OTQ0O2UuWD02Njc7ZS5ZPTY2NztlLlo9NjExO2UuYnJhY2tldGxlZnQ9Mjc4O2UuYmFja3NsYXNoPTI3ODtlLmJyYWNrZXRyaWdodD0yNzg7ZS5hc2NpaWNpcmN1bT00Njk7ZS51bmRlcnNjb3JlPTU1NjtlLnF1b3RlbGVmdD0yMjI7ZS5hPTU1NjtlLmI9NTU2O2UuYz01MDA7ZS5kPTU1NjtlLmU9NTU2O2UuZj0yNzg7ZS5nPTU1NjtlLmg9NTU2O2UuaT0yMjI7ZS5qPTIyMjtlLms9NTAwO2UubD0yMjI7ZS5tPTgzMztlLm49NTU2O2Uubz01NTY7ZS5wPTU1NjtlLnE9NTU2O2Uucj0zMzM7ZS5zPTUwMDtlLnQ9Mjc4O2UudT01NTY7ZS52PTUwMDtlLnc9NzIyO2UueD01MDA7ZS55PTUwMDtlLno9NTAwO2UuYnJhY2VsZWZ0PTMzNDtlLmJhcj0yNjA7ZS5icmFjZXJpZ2h0PTMzNDtlLmFzY2lpdGlsZGU9NTg0O2UuZXhjbGFtZG93bj0zMzM7ZS5jZW50PTU1NjtlLnN0ZXJsaW5nPTU1NjtlLmZyYWN0aW9uPTE2NztlLnllbj01NTY7ZS5mbG9yaW49NTU2O2Uuc2VjdGlvbj01NTY7ZS5jdXJyZW5jeT01NTY7ZS5xdW90ZXNpbmdsZT0xOTE7ZS5xdW90ZWRibGxlZnQ9MzMzO2UuZ3VpbGxlbW90bGVmdD01NTY7ZS5ndWlsc2luZ2xsZWZ0PTMzMztlLmd1aWxzaW5nbHJpZ2h0PTMzMztlLmZpPTUwMDtlLmZsPTUwMDtlLmVuZGFzaD01NTY7ZS5kYWdnZXI9NTU2O2UuZGFnZ2VyZGJsPTU1NjtlLnBlcmlvZGNlbnRlcmVkPTI3ODtlLnBhcmFncmFwaD01Mzc7ZS5idWxsZXQ9MzUwO2UucXVvdGVzaW5nbGJhc2U9MjIyO2UucXVvdGVkYmxiYXNlPTMzMztlLnF1b3RlZGJscmlnaHQ9MzMzO2UuZ3VpbGxlbW90cmlnaHQ9NTU2O2UuZWxsaXBzaXM9MWUzO2UucGVydGhvdXNhbmQ9MWUzO2UucXVlc3Rpb25kb3duPTYxMTtlLmdyYXZlPTMzMztlLmFjdXRlPTMzMztlLmNpcmN1bWZsZXg9MzMzO2UudGlsZGU9MzMzO2UubWFjcm9uPTMzMztlLmJyZXZlPTMzMztlLmRvdGFjY2VudD0zMzM7ZS5kaWVyZXNpcz0zMzM7ZS5yaW5nPTMzMztlLmNlZGlsbGE9MzMzO2UuaHVuZ2FydW1sYXV0PTMzMztlLm9nb25laz0zMzM7ZS5jYXJvbj0zMzM7ZS5lbWRhc2g9MWUzO2UuQUU9MWUzO2Uub3JkZmVtaW5pbmU9MzcwO2UuTHNsYXNoPTU1NjtlLk9zbGFzaD03Nzg7ZS5PRT0xZTM7ZS5vcmRtYXNjdWxpbmU9MzY1O2UuYWU9ODg5O2UuZG90bGVzc2k9Mjc4O2UubHNsYXNoPTIyMjtlLm9zbGFzaD02MTE7ZS5vZT05NDQ7ZS5nZXJtYW5kYmxzPTYxMTtlLklkaWVyZXNpcz0yNzg7ZS5lYWN1dGU9NTU2O2UuYWJyZXZlPTU1NjtlLnVodW5nYXJ1bWxhdXQ9NTU2O2UuZWNhcm9uPTU1NjtlLllkaWVyZXNpcz02Njc7ZS5kaXZpZGU9NTg0O2UuWWFjdXRlPTY2NztlLkFjaXJjdW1mbGV4PTY2NztlLmFhY3V0ZT01NTY7ZS5VY2lyY3VtZmxleD03MjI7ZS55YWN1dGU9NTAwO2Uuc2NvbW1hYWNjZW50PTUwMDtlLmVjaXJjdW1mbGV4PTU1NjtlLlVyaW5nPTcyMjtlLlVkaWVyZXNpcz03MjI7ZS5hb2dvbmVrPTU1NjtlLlVhY3V0ZT03MjI7ZS51b2dvbmVrPTU1NjtlLkVkaWVyZXNpcz02Njc7ZS5EY3JvYXQ9NzIyO2UuY29tbWFhY2NlbnQ9MjUwO2UuY29weXJpZ2h0PTczNztlLkVtYWNyb249NjY3O2UuY2Nhcm9uPTUwMDtlLmFyaW5nPTU1NjtlLk5jb21tYWFjY2VudD03MjI7ZS5sYWN1dGU9MjIyO2UuYWdyYXZlPTU1NjtlLlRjb21tYWFjY2VudD02MTE7ZS5DYWN1dGU9NzIyO2UuYXRpbGRlPTU1NjtlLkVkb3RhY2NlbnQ9NjY3O2Uuc2Nhcm9uPTUwMDtlLnNjZWRpbGxhPTUwMDtlLmlhY3V0ZT0yNzg7ZS5sb3plbmdlPTQ3MTtlLlJjYXJvbj03MjI7ZS5HY29tbWFhY2NlbnQ9Nzc4O2UudWNpcmN1bWZsZXg9NTU2O2UuYWNpcmN1bWZsZXg9NTU2O2UuQW1hY3Jvbj02Njc7ZS5yY2Fyb249MzMzO2UuY2NlZGlsbGE9NTAwO2UuWmRvdGFjY2VudD02MTE7ZS5UaG9ybj02Njc7ZS5PbWFjcm9uPTc3ODtlLlJhY3V0ZT03MjI7ZS5TYWN1dGU9NjY3O2UuZGNhcm9uPTY0MztlLlVtYWNyb249NzIyO2UudXJpbmc9NTU2O2UudGhyZWVzdXBlcmlvcj0zMzM7ZS5PZ3JhdmU9Nzc4O2UuQWdyYXZlPTY2NztlLkFicmV2ZT02Njc7ZS5tdWx0aXBseT01ODQ7ZS51YWN1dGU9NTU2O2UuVGNhcm9uPTYxMTtlLnBhcnRpYWxkaWZmPTQ3NjtlLnlkaWVyZXNpcz01MDA7ZS5OYWN1dGU9NzIyO2UuaWNpcmN1bWZsZXg9Mjc4O2UuRWNpcmN1bWZsZXg9NjY3O2UuYWRpZXJlc2lzPTU1NjtlLmVkaWVyZXNpcz01NTY7ZS5jYWN1dGU9NTAwO2UubmFjdXRlPTU1NjtlLnVtYWNyb249NTU2O2UuTmNhcm9uPTcyMjtlLklhY3V0ZT0yNzg7ZS5wbHVzbWludXM9NTg0O2UuYnJva2VuYmFyPTI2MDtlLnJlZ2lzdGVyZWQ9NzM3O2UuR2JyZXZlPTc3ODtlLklkb3RhY2NlbnQ9Mjc4O2Uuc3VtbWF0aW9uPTYwMDtlLkVncmF2ZT02Njc7ZS5yYWN1dGU9MzMzO2Uub21hY3Jvbj01NTY7ZS5aYWN1dGU9NjExO2UuWmNhcm9uPTYxMTtlLmdyZWF0ZXJlcXVhbD01NDk7ZS5FdGg9NzIyO2UuQ2NlZGlsbGE9NzIyO2UubGNvbW1hYWNjZW50PTIyMjtlLnRjYXJvbj0zMTc7ZS5lb2dvbmVrPTU1NjtlLlVvZ29uZWs9NzIyO2UuQWFjdXRlPTY2NztlLkFkaWVyZXNpcz02Njc7ZS5lZ3JhdmU9NTU2O2UuemFjdXRlPTUwMDtlLmlvZ29uZWs9MjIyO2UuT2FjdXRlPTc3ODtlLm9hY3V0ZT01NTY7ZS5hbWFjcm9uPTU1NjtlLnNhY3V0ZT01MDA7ZS5pZGllcmVzaXM9Mjc4O2UuT2NpcmN1bWZsZXg9Nzc4O2UuVWdyYXZlPTcyMjtlLkRlbHRhPTYxMjtlLnRob3JuPTU1NjtlLnR3b3N1cGVyaW9yPTMzMztlLk9kaWVyZXNpcz03Nzg7ZS5tdT01NTY7ZS5pZ3JhdmU9Mjc4O2Uub2h1bmdhcnVtbGF1dD01NTY7ZS5Fb2dvbmVrPTY2NztlLmRjcm9hdD01NTY7ZS50aHJlZXF1YXJ0ZXJzPTgzNDtlLlNjZWRpbGxhPTY2NztlLmxjYXJvbj0yOTk7ZS5LY29tbWFhY2NlbnQ9NjY3O2UuTGFjdXRlPTU1NjtlLnRyYWRlbWFyaz0xZTM7ZS5lZG90YWNjZW50PTU1NjtlLklncmF2ZT0yNzg7ZS5JbWFjcm9uPTI3ODtlLkxjYXJvbj01NTY7ZS5vbmVoYWxmPTgzNDtlLmxlc3NlcXVhbD01NDk7ZS5vY2lyY3VtZmxleD01NTY7ZS5udGlsZGU9NTU2O2UuVWh1bmdhcnVtbGF1dD03MjI7ZS5FYWN1dGU9NjY3O2UuZW1hY3Jvbj01NTY7ZS5nYnJldmU9NTU2O2Uub25lcXVhcnRlcj04MzQ7ZS5TY2Fyb249NjY3O2UuU2NvbW1hYWNjZW50PTY2NztlLk9odW5nYXJ1bWxhdXQ9Nzc4O2UuZGVncmVlPTQwMDtlLm9ncmF2ZT01NTY7ZS5DY2Fyb249NzIyO2UudWdyYXZlPTU1NjtlLnJhZGljYWw9NDUzO2UuRGNhcm9uPTcyMjtlLnJjb21tYWFjY2VudD0zMzM7ZS5OdGlsZGU9NzIyO2Uub3RpbGRlPTU1NjtlLlJjb21tYWFjY2VudD03MjI7ZS5MY29tbWFhY2NlbnQ9NTU2O2UuQXRpbGRlPTY2NztlLkFvZ29uZWs9NjY3O2UuQXJpbmc9NjY3O2UuT3RpbGRlPTc3ODtlLnpkb3RhY2NlbnQ9NTAwO2UuRWNhcm9uPTY2NztlLklvZ29uZWs9Mjc4O2Uua2NvbW1hYWNjZW50PTUwMDtlLm1pbnVzPTU4NDtlLkljaXJjdW1mbGV4PTI3ODtlLm5jYXJvbj01NTY7ZS50Y29tbWFhY2NlbnQ9Mjc4O2UubG9naWNhbG5vdD01ODQ7ZS5vZGllcmVzaXM9NTU2O2UudWRpZXJlc2lzPTU1NjtlLm5vdGVxdWFsPTU0OTtlLmdjb21tYWFjY2VudD01NTY7ZS5ldGg9NTU2O2UuemNhcm9uPTUwMDtlLm5jb21tYWFjY2VudD01NTY7ZS5vbmVzdXBlcmlvcj0zMzM7ZS5pbWFjcm9uPTI3ODtlLkV1cm89NTU2fSkpO2UuU3ltYm9sPWdldExvb2t1cFRhYmxlRmFjdG9yeSgoZnVuY3Rpb24oZSl7ZS5zcGFjZT0yNTA7ZS5leGNsYW09MzMzO2UudW5pdmVyc2FsPTcxMztlLm51bWJlcnNpZ249NTAwO2UuZXhpc3RlbnRpYWw9NTQ5O2UucGVyY2VudD04MzM7ZS5hbXBlcnNhbmQ9Nzc4O2Uuc3VjaHRoYXQ9NDM5O2UucGFyZW5sZWZ0PTMzMztlLnBhcmVucmlnaHQ9MzMzO2UuYXN0ZXJpc2ttYXRoPTUwMDtlLnBsdXM9NTQ5O2UuY29tbWE9MjUwO2UubWludXM9NTQ5O2UucGVyaW9kPTI1MDtlLnNsYXNoPTI3ODtlLnplcm89NTAwO2Uub25lPTUwMDtlLnR3bz01MDA7ZS50aHJlZT01MDA7ZS5mb3VyPTUwMDtlLmZpdmU9NTAwO2Uuc2l4PTUwMDtlLnNldmVuPTUwMDtlLmVpZ2h0PTUwMDtlLm5pbmU9NTAwO2UuY29sb249Mjc4O2Uuc2VtaWNvbG9uPTI3ODtlLmxlc3M9NTQ5O2UuZXF1YWw9NTQ5O2UuZ3JlYXRlcj01NDk7ZS5xdWVzdGlvbj00NDQ7ZS5jb25ncnVlbnQ9NTQ5O2UuQWxwaGE9NzIyO2UuQmV0YT02Njc7ZS5DaGk9NzIyO2UuRGVsdGE9NjEyO2UuRXBzaWxvbj02MTE7ZS5QaGk9NzYzO2UuR2FtbWE9NjAzO2UuRXRhPTcyMjtlLklvdGE9MzMzO2UudGhldGExPTYzMTtlLkthcHBhPTcyMjtlLkxhbWJkYT02ODY7ZS5NdT04ODk7ZS5OdT03MjI7ZS5PbWljcm9uPTcyMjtlLlBpPTc2ODtlLlRoZXRhPTc0MTtlLlJobz01NTY7ZS5TaWdtYT01OTI7ZS5UYXU9NjExO2UuVXBzaWxvbj02OTA7ZS5zaWdtYTE9NDM5O2UuT21lZ2E9NzY4O2UuWGk9NjQ1O2UuUHNpPTc5NTtlLlpldGE9NjExO2UuYnJhY2tldGxlZnQ9MzMzO2UudGhlcmVmb3JlPTg2MztlLmJyYWNrZXRyaWdodD0zMzM7ZS5wZXJwZW5kaWN1bGFyPTY1ODtlLnVuZGVyc2NvcmU9NTAwO2UucmFkaWNhbGV4PTUwMDtlLmFscGhhPTYzMTtlLmJldGE9NTQ5O2UuY2hpPTU0OTtlLmRlbHRhPTQ5NDtlLmVwc2lsb249NDM5O2UucGhpPTUyMTtlLmdhbW1hPTQxMTtlLmV0YT02MDM7ZS5pb3RhPTMyOTtlLnBoaTE9NjAzO2Uua2FwcGE9NTQ5O2UubGFtYmRhPTU0OTtlLm11PTU3NjtlLm51PTUyMTtlLm9taWNyb249NTQ5O2UucGk9NTQ5O2UudGhldGE9NTIxO2UucmhvPTU0OTtlLnNpZ21hPTYwMztlLnRhdT00Mzk7ZS51cHNpbG9uPTU3NjtlLm9tZWdhMT03MTM7ZS5vbWVnYT02ODY7ZS54aT00OTM7ZS5wc2k9Njg2O2UuemV0YT00OTQ7ZS5icmFjZWxlZnQ9NDgwO2UuYmFyPTIwMDtlLmJyYWNlcmlnaHQ9NDgwO2Uuc2ltaWxhcj01NDk7ZS5FdXJvPTc1MDtlLlVwc2lsb24xPTYyMDtlLm1pbnV0ZT0yNDc7ZS5sZXNzZXF1YWw9NTQ5O2UuZnJhY3Rpb249MTY3O2UuaW5maW5pdHk9NzEzO2UuZmxvcmluPTUwMDtlLmNsdWI9NzUzO2UuZGlhbW9uZD03NTM7ZS5oZWFydD03NTM7ZS5zcGFkZT03NTM7ZS5hcnJvd2JvdGg9MTA0MjtlLmFycm93bGVmdD05ODc7ZS5hcnJvd3VwPTYwMztlLmFycm93cmlnaHQ9OTg3O2UuYXJyb3dkb3duPTYwMztlLmRlZ3JlZT00MDA7ZS5wbHVzbWludXM9NTQ5O2Uuc2Vjb25kPTQxMTtlLmdyZWF0ZXJlcXVhbD01NDk7ZS5tdWx0aXBseT01NDk7ZS5wcm9wb3J0aW9uYWw9NzEzO2UucGFydGlhbGRpZmY9NDk0O2UuYnVsbGV0PTQ2MDtlLmRpdmlkZT01NDk7ZS5ub3RlcXVhbD01NDk7ZS5lcXVpdmFsZW5jZT01NDk7ZS5hcHByb3hlcXVhbD01NDk7ZS5lbGxpcHNpcz0xZTM7ZS5hcnJvd3ZlcnRleD02MDM7ZS5hcnJvd2hvcml6ZXg9MWUzO2UuY2FycmlhZ2VyZXR1cm49NjU4O2UuYWxlcGg9ODIzO2UuSWZyYWt0dXI9Njg2O2UuUmZyYWt0dXI9Nzk1O2Uud2VpZXJzdHJhc3M9OTg3O2UuY2lyY2xlbXVsdGlwbHk9NzY4O2UuY2lyY2xlcGx1cz03Njg7ZS5lbXB0eXNldD04MjM7ZS5pbnRlcnNlY3Rpb249NzY4O2UudW5pb249NzY4O2UucHJvcGVyc3VwZXJzZXQ9NzEzO2UucmVmbGV4c3VwZXJzZXQ9NzEzO2Uubm90c3Vic2V0PTcxMztlLnByb3BlcnN1YnNldD03MTM7ZS5yZWZsZXhzdWJzZXQ9NzEzO2UuZWxlbWVudD03MTM7ZS5ub3RlbGVtZW50PTcxMztlLmFuZ2xlPTc2ODtlLmdyYWRpZW50PTcxMztlLnJlZ2lzdGVyc2VyaWY9NzkwO2UuY29weXJpZ2h0c2VyaWY9NzkwO2UudHJhZGVtYXJrc2VyaWY9ODkwO2UucHJvZHVjdD04MjM7ZS5yYWRpY2FsPTU0OTtlLmRvdG1hdGg9MjUwO2UubG9naWNhbG5vdD03MTM7ZS5sb2dpY2FsYW5kPTYwMztlLmxvZ2ljYWxvcj02MDM7ZS5hcnJvd2RibGJvdGg9MTA0MjtlLmFycm93ZGJsbGVmdD05ODc7ZS5hcnJvd2RibHVwPTYwMztlLmFycm93ZGJscmlnaHQ9OTg3O2UuYXJyb3dkYmxkb3duPTYwMztlLmxvemVuZ2U9NDk0O2UuYW5nbGVsZWZ0PTMyOTtlLnJlZ2lzdGVyc2Fucz03OTA7ZS5jb3B5cmlnaHRzYW5zPTc5MDtlLnRyYWRlbWFya3NhbnM9Nzg2O2Uuc3VtbWF0aW9uPTcxMztlLnBhcmVubGVmdHRwPTM4NDtlLnBhcmVubGVmdGV4PTM4NDtlLnBhcmVubGVmdGJ0PTM4NDtlLmJyYWNrZXRsZWZ0dHA9Mzg0O2UuYnJhY2tldGxlZnRleD0zODQ7ZS5icmFja2V0bGVmdGJ0PTM4NDtlLmJyYWNlbGVmdHRwPTQ5NDtlLmJyYWNlbGVmdG1pZD00OTQ7ZS5icmFjZWxlZnRidD00OTQ7ZS5icmFjZWV4PTQ5NDtlLmFuZ2xlcmlnaHQ9MzI5O2UuaW50ZWdyYWw9Mjc0O2UuaW50ZWdyYWx0cD02ODY7ZS5pbnRlZ3JhbGV4PTY4NjtlLmludGVncmFsYnQ9Njg2O2UucGFyZW5yaWdodHRwPTM4NDtlLnBhcmVucmlnaHRleD0zODQ7ZS5wYXJlbnJpZ2h0YnQ9Mzg0O2UuYnJhY2tldHJpZ2h0dHA9Mzg0O2UuYnJhY2tldHJpZ2h0ZXg9Mzg0O2UuYnJhY2tldHJpZ2h0YnQ9Mzg0O2UuYnJhY2VyaWdodHRwPTQ5NDtlLmJyYWNlcmlnaHRtaWQ9NDk0O2UuYnJhY2VyaWdodGJ0PTQ5NDtlLmFwcGxlPTc5MH0pKTtlWyJUaW1lcy1Sb21hbiJdPWdldExvb2t1cFRhYmxlRmFjdG9yeSgoZnVuY3Rpb24oZSl7ZS5zcGFjZT0yNTA7ZS5leGNsYW09MzMzO2UucXVvdGVkYmw9NDA4O2UubnVtYmVyc2lnbj01MDA7ZS5kb2xsYXI9NTAwO2UucGVyY2VudD04MzM7ZS5hbXBlcnNhbmQ9Nzc4O2UucXVvdGVyaWdodD0zMzM7ZS5wYXJlbmxlZnQ9MzMzO2UucGFyZW5yaWdodD0zMzM7ZS5hc3Rlcmlzaz01MDA7ZS5wbHVzPTU2NDtlLmNvbW1hPTI1MDtlLmh5cGhlbj0zMzM7ZS5wZXJpb2Q9MjUwO2Uuc2xhc2g9Mjc4O2UuemVybz01MDA7ZS5vbmU9NTAwO2UudHdvPTUwMDtlLnRocmVlPTUwMDtlLmZvdXI9NTAwO2UuZml2ZT01MDA7ZS5zaXg9NTAwO2Uuc2V2ZW49NTAwO2UuZWlnaHQ9NTAwO2UubmluZT01MDA7ZS5jb2xvbj0yNzg7ZS5zZW1pY29sb249Mjc4O2UubGVzcz01NjQ7ZS5lcXVhbD01NjQ7ZS5ncmVhdGVyPTU2NDtlLnF1ZXN0aW9uPTQ0NDtlLmF0PTkyMTtlLkE9NzIyO2UuQj02Njc7ZS5DPTY2NztlLkQ9NzIyO2UuRT02MTE7ZS5GPTU1NjtlLkc9NzIyO2UuSD03MjI7ZS5JPTMzMztlLko9Mzg5O2UuSz03MjI7ZS5MPTYxMTtlLk09ODg5O2UuTj03MjI7ZS5PPTcyMjtlLlA9NTU2O2UuUT03MjI7ZS5SPTY2NztlLlM9NTU2O2UuVD02MTE7ZS5VPTcyMjtlLlY9NzIyO2UuVz05NDQ7ZS5YPTcyMjtlLlk9NzIyO2UuWj02MTE7ZS5icmFja2V0bGVmdD0zMzM7ZS5iYWNrc2xhc2g9Mjc4O2UuYnJhY2tldHJpZ2h0PTMzMztlLmFzY2lpY2lyY3VtPTQ2OTtlLnVuZGVyc2NvcmU9NTAwO2UucXVvdGVsZWZ0PTMzMztlLmE9NDQ0O2UuYj01MDA7ZS5jPTQ0NDtlLmQ9NTAwO2UuZT00NDQ7ZS5mPTMzMztlLmc9NTAwO2UuaD01MDA7ZS5pPTI3ODtlLmo9Mjc4O2Uuaz01MDA7ZS5sPTI3ODtlLm09Nzc4O2Uubj01MDA7ZS5vPTUwMDtlLnA9NTAwO2UucT01MDA7ZS5yPTMzMztlLnM9Mzg5O2UudD0yNzg7ZS51PTUwMDtlLnY9NTAwO2Uudz03MjI7ZS54PTUwMDtlLnk9NTAwO2Uuej00NDQ7ZS5icmFjZWxlZnQ9NDgwO2UuYmFyPTIwMDtlLmJyYWNlcmlnaHQ9NDgwO2UuYXNjaWl0aWxkZT01NDE7ZS5leGNsYW1kb3duPTMzMztlLmNlbnQ9NTAwO2Uuc3Rlcmxpbmc9NTAwO2UuZnJhY3Rpb249MTY3O2UueWVuPTUwMDtlLmZsb3Jpbj01MDA7ZS5zZWN0aW9uPTUwMDtlLmN1cnJlbmN5PTUwMDtlLnF1b3Rlc2luZ2xlPTE4MDtlLnF1b3RlZGJsbGVmdD00NDQ7ZS5ndWlsbGVtb3RsZWZ0PTUwMDtlLmd1aWxzaW5nbGxlZnQ9MzMzO2UuZ3VpbHNpbmdscmlnaHQ9MzMzO2UuZmk9NTU2O2UuZmw9NTU2O2UuZW5kYXNoPTUwMDtlLmRhZ2dlcj01MDA7ZS5kYWdnZXJkYmw9NTAwO2UucGVyaW9kY2VudGVyZWQ9MjUwO2UucGFyYWdyYXBoPTQ1MztlLmJ1bGxldD0zNTA7ZS5xdW90ZXNpbmdsYmFzZT0zMzM7ZS5xdW90ZWRibGJhc2U9NDQ0O2UucXVvdGVkYmxyaWdodD00NDQ7ZS5ndWlsbGVtb3RyaWdodD01MDA7ZS5lbGxpcHNpcz0xZTM7ZS5wZXJ0aG91c2FuZD0xZTM7ZS5xdWVzdGlvbmRvd249NDQ0O2UuZ3JhdmU9MzMzO2UuYWN1dGU9MzMzO2UuY2lyY3VtZmxleD0zMzM7ZS50aWxkZT0zMzM7ZS5tYWNyb249MzMzO2UuYnJldmU9MzMzO2UuZG90YWNjZW50PTMzMztlLmRpZXJlc2lzPTMzMztlLnJpbmc9MzMzO2UuY2VkaWxsYT0zMzM7ZS5odW5nYXJ1bWxhdXQ9MzMzO2Uub2dvbmVrPTMzMztlLmNhcm9uPTMzMztlLmVtZGFzaD0xZTM7ZS5BRT04ODk7ZS5vcmRmZW1pbmluZT0yNzY7ZS5Mc2xhc2g9NjExO2UuT3NsYXNoPTcyMjtlLk9FPTg4OTtlLm9yZG1hc2N1bGluZT0zMTA7ZS5hZT02Njc7ZS5kb3RsZXNzaT0yNzg7ZS5sc2xhc2g9Mjc4O2Uub3NsYXNoPTUwMDtlLm9lPTcyMjtlLmdlcm1hbmRibHM9NTAwO2UuSWRpZXJlc2lzPTMzMztlLmVhY3V0ZT00NDQ7ZS5hYnJldmU9NDQ0O2UudWh1bmdhcnVtbGF1dD01MDA7ZS5lY2Fyb249NDQ0O2UuWWRpZXJlc2lzPTcyMjtlLmRpdmlkZT01NjQ7ZS5ZYWN1dGU9NzIyO2UuQWNpcmN1bWZsZXg9NzIyO2UuYWFjdXRlPTQ0NDtlLlVjaXJjdW1mbGV4PTcyMjtlLnlhY3V0ZT01MDA7ZS5zY29tbWFhY2NlbnQ9Mzg5O2UuZWNpcmN1bWZsZXg9NDQ0O2UuVXJpbmc9NzIyO2UuVWRpZXJlc2lzPTcyMjtlLmFvZ29uZWs9NDQ0O2UuVWFjdXRlPTcyMjtlLnVvZ29uZWs9NTAwO2UuRWRpZXJlc2lzPTYxMTtlLkRjcm9hdD03MjI7ZS5jb21tYWFjY2VudD0yNTA7ZS5jb3B5cmlnaHQ9NzYwO2UuRW1hY3Jvbj02MTE7ZS5jY2Fyb249NDQ0O2UuYXJpbmc9NDQ0O2UuTmNvbW1hYWNjZW50PTcyMjtlLmxhY3V0ZT0yNzg7ZS5hZ3JhdmU9NDQ0O2UuVGNvbW1hYWNjZW50PTYxMTtlLkNhY3V0ZT02Njc7ZS5hdGlsZGU9NDQ0O2UuRWRvdGFjY2VudD02MTE7ZS5zY2Fyb249Mzg5O2Uuc2NlZGlsbGE9Mzg5O2UuaWFjdXRlPTI3ODtlLmxvemVuZ2U9NDcxO2UuUmNhcm9uPTY2NztlLkdjb21tYWFjY2VudD03MjI7ZS51Y2lyY3VtZmxleD01MDA7ZS5hY2lyY3VtZmxleD00NDQ7ZS5BbWFjcm9uPTcyMjtlLnJjYXJvbj0zMzM7ZS5jY2VkaWxsYT00NDQ7ZS5aZG90YWNjZW50PTYxMTtlLlRob3JuPTU1NjtlLk9tYWNyb249NzIyO2UuUmFjdXRlPTY2NztlLlNhY3V0ZT01NTY7ZS5kY2Fyb249NTg4O2UuVW1hY3Jvbj03MjI7ZS51cmluZz01MDA7ZS50aHJlZXN1cGVyaW9yPTMwMDtlLk9ncmF2ZT03MjI7ZS5BZ3JhdmU9NzIyO2UuQWJyZXZlPTcyMjtlLm11bHRpcGx5PTU2NDtlLnVhY3V0ZT01MDA7ZS5UY2Fyb249NjExO2UucGFydGlhbGRpZmY9NDc2O2UueWRpZXJlc2lzPTUwMDtlLk5hY3V0ZT03MjI7ZS5pY2lyY3VtZmxleD0yNzg7ZS5FY2lyY3VtZmxleD02MTE7ZS5hZGllcmVzaXM9NDQ0O2UuZWRpZXJlc2lzPTQ0NDtlLmNhY3V0ZT00NDQ7ZS5uYWN1dGU9NTAwO2UudW1hY3Jvbj01MDA7ZS5OY2Fyb249NzIyO2UuSWFjdXRlPTMzMztlLnBsdXNtaW51cz01NjQ7ZS5icm9rZW5iYXI9MjAwO2UucmVnaXN0ZXJlZD03NjA7ZS5HYnJldmU9NzIyO2UuSWRvdGFjY2VudD0zMzM7ZS5zdW1tYXRpb249NjAwO2UuRWdyYXZlPTYxMTtlLnJhY3V0ZT0zMzM7ZS5vbWFjcm9uPTUwMDtlLlphY3V0ZT02MTE7ZS5aY2Fyb249NjExO2UuZ3JlYXRlcmVxdWFsPTU0OTtlLkV0aD03MjI7ZS5DY2VkaWxsYT02Njc7ZS5sY29tbWFhY2NlbnQ9Mjc4O2UudGNhcm9uPTMyNjtlLmVvZ29uZWs9NDQ0O2UuVW9nb25laz03MjI7ZS5BYWN1dGU9NzIyO2UuQWRpZXJlc2lzPTcyMjtlLmVncmF2ZT00NDQ7ZS56YWN1dGU9NDQ0O2UuaW9nb25laz0yNzg7ZS5PYWN1dGU9NzIyO2Uub2FjdXRlPTUwMDtlLmFtYWNyb249NDQ0O2Uuc2FjdXRlPTM4OTtlLmlkaWVyZXNpcz0yNzg7ZS5PY2lyY3VtZmxleD03MjI7ZS5VZ3JhdmU9NzIyO2UuRGVsdGE9NjEyO2UudGhvcm49NTAwO2UudHdvc3VwZXJpb3I9MzAwO2UuT2RpZXJlc2lzPTcyMjtlLm11PTUwMDtlLmlncmF2ZT0yNzg7ZS5vaHVuZ2FydW1sYXV0PTUwMDtlLkVvZ29uZWs9NjExO2UuZGNyb2F0PTUwMDtlLnRocmVlcXVhcnRlcnM9NzUwO2UuU2NlZGlsbGE9NTU2O2UubGNhcm9uPTM0NDtlLktjb21tYWFjY2VudD03MjI7ZS5MYWN1dGU9NjExO2UudHJhZGVtYXJrPTk4MDtlLmVkb3RhY2NlbnQ9NDQ0O2UuSWdyYXZlPTMzMztlLkltYWNyb249MzMzO2UuTGNhcm9uPTYxMTtlLm9uZWhhbGY9NzUwO2UubGVzc2VxdWFsPTU0OTtlLm9jaXJjdW1mbGV4PTUwMDtlLm50aWxkZT01MDA7ZS5VaHVuZ2FydW1sYXV0PTcyMjtlLkVhY3V0ZT02MTE7ZS5lbWFjcm9uPTQ0NDtlLmdicmV2ZT01MDA7ZS5vbmVxdWFydGVyPTc1MDtlLlNjYXJvbj01NTY7ZS5TY29tbWFhY2NlbnQ9NTU2O2UuT2h1bmdhcnVtbGF1dD03MjI7ZS5kZWdyZWU9NDAwO2Uub2dyYXZlPTUwMDtlLkNjYXJvbj02Njc7ZS51Z3JhdmU9NTAwO2UucmFkaWNhbD00NTM7ZS5EY2Fyb249NzIyO2UucmNvbW1hYWNjZW50PTMzMztlLk50aWxkZT03MjI7ZS5vdGlsZGU9NTAwO2UuUmNvbW1hYWNjZW50PTY2NztlLkxjb21tYWFjY2VudD02MTE7ZS5BdGlsZGU9NzIyO2UuQW9nb25laz03MjI7ZS5BcmluZz03MjI7ZS5PdGlsZGU9NzIyO2UuemRvdGFjY2VudD00NDQ7ZS5FY2Fyb249NjExO2UuSW9nb25laz0zMzM7ZS5rY29tbWFhY2NlbnQ9NTAwO2UubWludXM9NTY0O2UuSWNpcmN1bWZsZXg9MzMzO2UubmNhcm9uPTUwMDtlLnRjb21tYWFjY2VudD0yNzg7ZS5sb2dpY2Fsbm90PTU2NDtlLm9kaWVyZXNpcz01MDA7ZS51ZGllcmVzaXM9NTAwO2Uubm90ZXF1YWw9NTQ5O2UuZ2NvbW1hYWNjZW50PTUwMDtlLmV0aD01MDA7ZS56Y2Fyb249NDQ0O2UubmNvbW1hYWNjZW50PTUwMDtlLm9uZXN1cGVyaW9yPTMwMDtlLmltYWNyb249Mjc4O2UuRXVybz01MDB9KSk7ZVsiVGltZXMtQm9sZCJdPWdldExvb2t1cFRhYmxlRmFjdG9yeSgoZnVuY3Rpb24oZSl7ZS5zcGFjZT0yNTA7ZS5leGNsYW09MzMzO2UucXVvdGVkYmw9NTU1O2UubnVtYmVyc2lnbj01MDA7ZS5kb2xsYXI9NTAwO2UucGVyY2VudD0xZTM7ZS5hbXBlcnNhbmQ9ODMzO2UucXVvdGVyaWdodD0zMzM7ZS5wYXJlbmxlZnQ9MzMzO2UucGFyZW5yaWdodD0zMzM7ZS5hc3Rlcmlzaz01MDA7ZS5wbHVzPTU3MDtlLmNvbW1hPTI1MDtlLmh5cGhlbj0zMzM7ZS5wZXJpb2Q9MjUwO2Uuc2xhc2g9Mjc4O2UuemVybz01MDA7ZS5vbmU9NTAwO2UudHdvPTUwMDtlLnRocmVlPTUwMDtlLmZvdXI9NTAwO2UuZml2ZT01MDA7ZS5zaXg9NTAwO2Uuc2V2ZW49NTAwO2UuZWlnaHQ9NTAwO2UubmluZT01MDA7ZS5jb2xvbj0zMzM7ZS5zZW1pY29sb249MzMzO2UubGVzcz01NzA7ZS5lcXVhbD01NzA7ZS5ncmVhdGVyPTU3MDtlLnF1ZXN0aW9uPTUwMDtlLmF0PTkzMDtlLkE9NzIyO2UuQj02Njc7ZS5DPTcyMjtlLkQ9NzIyO2UuRT02Njc7ZS5GPTYxMTtlLkc9Nzc4O2UuSD03Nzg7ZS5JPTM4OTtlLko9NTAwO2UuSz03Nzg7ZS5MPTY2NztlLk09OTQ0O2UuTj03MjI7ZS5PPTc3ODtlLlA9NjExO2UuUT03Nzg7ZS5SPTcyMjtlLlM9NTU2O2UuVD02Njc7ZS5VPTcyMjtlLlY9NzIyO2UuVz0xZTM7ZS5YPTcyMjtlLlk9NzIyO2UuWj02Njc7ZS5icmFja2V0bGVmdD0zMzM7ZS5iYWNrc2xhc2g9Mjc4O2UuYnJhY2tldHJpZ2h0PTMzMztlLmFzY2lpY2lyY3VtPTU4MTtlLnVuZGVyc2NvcmU9NTAwO2UucXVvdGVsZWZ0PTMzMztlLmE9NTAwO2UuYj01NTY7ZS5jPTQ0NDtlLmQ9NTU2O2UuZT00NDQ7ZS5mPTMzMztlLmc9NTAwO2UuaD01NTY7ZS5pPTI3ODtlLmo9MzMzO2Uuaz01NTY7ZS5sPTI3ODtlLm09ODMzO2Uubj01NTY7ZS5vPTUwMDtlLnA9NTU2O2UucT01NTY7ZS5yPTQ0NDtlLnM9Mzg5O2UudD0zMzM7ZS51PTU1NjtlLnY9NTAwO2Uudz03MjI7ZS54PTUwMDtlLnk9NTAwO2Uuej00NDQ7ZS5icmFjZWxlZnQ9Mzk0O2UuYmFyPTIyMDtlLmJyYWNlcmlnaHQ9Mzk0O2UuYXNjaWl0aWxkZT01MjA7ZS5leGNsYW1kb3duPTMzMztlLmNlbnQ9NTAwO2Uuc3Rlcmxpbmc9NTAwO2UuZnJhY3Rpb249MTY3O2UueWVuPTUwMDtlLmZsb3Jpbj01MDA7ZS5zZWN0aW9uPTUwMDtlLmN1cnJlbmN5PTUwMDtlLnF1b3Rlc2luZ2xlPTI3ODtlLnF1b3RlZGJsbGVmdD01MDA7ZS5ndWlsbGVtb3RsZWZ0PTUwMDtlLmd1aWxzaW5nbGxlZnQ9MzMzO2UuZ3VpbHNpbmdscmlnaHQ9MzMzO2UuZmk9NTU2O2UuZmw9NTU2O2UuZW5kYXNoPTUwMDtlLmRhZ2dlcj01MDA7ZS5kYWdnZXJkYmw9NTAwO2UucGVyaW9kY2VudGVyZWQ9MjUwO2UucGFyYWdyYXBoPTU0MDtlLmJ1bGxldD0zNTA7ZS5xdW90ZXNpbmdsYmFzZT0zMzM7ZS5xdW90ZWRibGJhc2U9NTAwO2UucXVvdGVkYmxyaWdodD01MDA7ZS5ndWlsbGVtb3RyaWdodD01MDA7ZS5lbGxpcHNpcz0xZTM7ZS5wZXJ0aG91c2FuZD0xZTM7ZS5xdWVzdGlvbmRvd249NTAwO2UuZ3JhdmU9MzMzO2UuYWN1dGU9MzMzO2UuY2lyY3VtZmxleD0zMzM7ZS50aWxkZT0zMzM7ZS5tYWNyb249MzMzO2UuYnJldmU9MzMzO2UuZG90YWNjZW50PTMzMztlLmRpZXJlc2lzPTMzMztlLnJpbmc9MzMzO2UuY2VkaWxsYT0zMzM7ZS5odW5nYXJ1bWxhdXQ9MzMzO2Uub2dvbmVrPTMzMztlLmNhcm9uPTMzMztlLmVtZGFzaD0xZTM7ZS5BRT0xZTM7ZS5vcmRmZW1pbmluZT0zMDA7ZS5Mc2xhc2g9NjY3O2UuT3NsYXNoPTc3ODtlLk9FPTFlMztlLm9yZG1hc2N1bGluZT0zMzA7ZS5hZT03MjI7ZS5kb3RsZXNzaT0yNzg7ZS5sc2xhc2g9Mjc4O2Uub3NsYXNoPTUwMDtlLm9lPTcyMjtlLmdlcm1hbmRibHM9NTU2O2UuSWRpZXJlc2lzPTM4OTtlLmVhY3V0ZT00NDQ7ZS5hYnJldmU9NTAwO2UudWh1bmdhcnVtbGF1dD01NTY7ZS5lY2Fyb249NDQ0O2UuWWRpZXJlc2lzPTcyMjtlLmRpdmlkZT01NzA7ZS5ZYWN1dGU9NzIyO2UuQWNpcmN1bWZsZXg9NzIyO2UuYWFjdXRlPTUwMDtlLlVjaXJjdW1mbGV4PTcyMjtlLnlhY3V0ZT01MDA7ZS5zY29tbWFhY2NlbnQ9Mzg5O2UuZWNpcmN1bWZsZXg9NDQ0O2UuVXJpbmc9NzIyO2UuVWRpZXJlc2lzPTcyMjtlLmFvZ29uZWs9NTAwO2UuVWFjdXRlPTcyMjtlLnVvZ29uZWs9NTU2O2UuRWRpZXJlc2lzPTY2NztlLkRjcm9hdD03MjI7ZS5jb21tYWFjY2VudD0yNTA7ZS5jb3B5cmlnaHQ9NzQ3O2UuRW1hY3Jvbj02Njc7ZS5jY2Fyb249NDQ0O2UuYXJpbmc9NTAwO2UuTmNvbW1hYWNjZW50PTcyMjtlLmxhY3V0ZT0yNzg7ZS5hZ3JhdmU9NTAwO2UuVGNvbW1hYWNjZW50PTY2NztlLkNhY3V0ZT03MjI7ZS5hdGlsZGU9NTAwO2UuRWRvdGFjY2VudD02Njc7ZS5zY2Fyb249Mzg5O2Uuc2NlZGlsbGE9Mzg5O2UuaWFjdXRlPTI3ODtlLmxvemVuZ2U9NDk0O2UuUmNhcm9uPTcyMjtlLkdjb21tYWFjY2VudD03Nzg7ZS51Y2lyY3VtZmxleD01NTY7ZS5hY2lyY3VtZmxleD01MDA7ZS5BbWFjcm9uPTcyMjtlLnJjYXJvbj00NDQ7ZS5jY2VkaWxsYT00NDQ7ZS5aZG90YWNjZW50PTY2NztlLlRob3JuPTYxMTtlLk9tYWNyb249Nzc4O2UuUmFjdXRlPTcyMjtlLlNhY3V0ZT01NTY7ZS5kY2Fyb249NjcyO2UuVW1hY3Jvbj03MjI7ZS51cmluZz01NTY7ZS50aHJlZXN1cGVyaW9yPTMwMDtlLk9ncmF2ZT03Nzg7ZS5BZ3JhdmU9NzIyO2UuQWJyZXZlPTcyMjtlLm11bHRpcGx5PTU3MDtlLnVhY3V0ZT01NTY7ZS5UY2Fyb249NjY3O2UucGFydGlhbGRpZmY9NDk0O2UueWRpZXJlc2lzPTUwMDtlLk5hY3V0ZT03MjI7ZS5pY2lyY3VtZmxleD0yNzg7ZS5FY2lyY3VtZmxleD02Njc7ZS5hZGllcmVzaXM9NTAwO2UuZWRpZXJlc2lzPTQ0NDtlLmNhY3V0ZT00NDQ7ZS5uYWN1dGU9NTU2O2UudW1hY3Jvbj01NTY7ZS5OY2Fyb249NzIyO2UuSWFjdXRlPTM4OTtlLnBsdXNtaW51cz01NzA7ZS5icm9rZW5iYXI9MjIwO2UucmVnaXN0ZXJlZD03NDc7ZS5HYnJldmU9Nzc4O2UuSWRvdGFjY2VudD0zODk7ZS5zdW1tYXRpb249NjAwO2UuRWdyYXZlPTY2NztlLnJhY3V0ZT00NDQ7ZS5vbWFjcm9uPTUwMDtlLlphY3V0ZT02Njc7ZS5aY2Fyb249NjY3O2UuZ3JlYXRlcmVxdWFsPTU0OTtlLkV0aD03MjI7ZS5DY2VkaWxsYT03MjI7ZS5sY29tbWFhY2NlbnQ9Mjc4O2UudGNhcm9uPTQxNjtlLmVvZ29uZWs9NDQ0O2UuVW9nb25laz03MjI7ZS5BYWN1dGU9NzIyO2UuQWRpZXJlc2lzPTcyMjtlLmVncmF2ZT00NDQ7ZS56YWN1dGU9NDQ0O2UuaW9nb25laz0yNzg7ZS5PYWN1dGU9Nzc4O2Uub2FjdXRlPTUwMDtlLmFtYWNyb249NTAwO2Uuc2FjdXRlPTM4OTtlLmlkaWVyZXNpcz0yNzg7ZS5PY2lyY3VtZmxleD03Nzg7ZS5VZ3JhdmU9NzIyO2UuRGVsdGE9NjEyO2UudGhvcm49NTU2O2UudHdvc3VwZXJpb3I9MzAwO2UuT2RpZXJlc2lzPTc3ODtlLm11PTU1NjtlLmlncmF2ZT0yNzg7ZS5vaHVuZ2FydW1sYXV0PTUwMDtlLkVvZ29uZWs9NjY3O2UuZGNyb2F0PTU1NjtlLnRocmVlcXVhcnRlcnM9NzUwO2UuU2NlZGlsbGE9NTU2O2UubGNhcm9uPTM5NDtlLktjb21tYWFjY2VudD03Nzg7ZS5MYWN1dGU9NjY3O2UudHJhZGVtYXJrPTFlMztlLmVkb3RhY2NlbnQ9NDQ0O2UuSWdyYXZlPTM4OTtlLkltYWNyb249Mzg5O2UuTGNhcm9uPTY2NztlLm9uZWhhbGY9NzUwO2UubGVzc2VxdWFsPTU0OTtlLm9jaXJjdW1mbGV4PTUwMDtlLm50aWxkZT01NTY7ZS5VaHVuZ2FydW1sYXV0PTcyMjtlLkVhY3V0ZT02Njc7ZS5lbWFjcm9uPTQ0NDtlLmdicmV2ZT01MDA7ZS5vbmVxdWFydGVyPTc1MDtlLlNjYXJvbj01NTY7ZS5TY29tbWFhY2NlbnQ9NTU2O2UuT2h1bmdhcnVtbGF1dD03Nzg7ZS5kZWdyZWU9NDAwO2Uub2dyYXZlPTUwMDtlLkNjYXJvbj03MjI7ZS51Z3JhdmU9NTU2O2UucmFkaWNhbD01NDk7ZS5EY2Fyb249NzIyO2UucmNvbW1hYWNjZW50PTQ0NDtlLk50aWxkZT03MjI7ZS5vdGlsZGU9NTAwO2UuUmNvbW1hYWNjZW50PTcyMjtlLkxjb21tYWFjY2VudD02Njc7ZS5BdGlsZGU9NzIyO2UuQW9nb25laz03MjI7ZS5BcmluZz03MjI7ZS5PdGlsZGU9Nzc4O2UuemRvdGFjY2VudD00NDQ7ZS5FY2Fyb249NjY3O2UuSW9nb25laz0zODk7ZS5rY29tbWFhY2NlbnQ9NTU2O2UubWludXM9NTcwO2UuSWNpcmN1bWZsZXg9Mzg5O2UubmNhcm9uPTU1NjtlLnRjb21tYWFjY2VudD0zMzM7ZS5sb2dpY2Fsbm90PTU3MDtlLm9kaWVyZXNpcz01MDA7ZS51ZGllcmVzaXM9NTU2O2Uubm90ZXF1YWw9NTQ5O2UuZ2NvbW1hYWNjZW50PTUwMDtlLmV0aD01MDA7ZS56Y2Fyb249NDQ0O2UubmNvbW1hYWNjZW50PTU1NjtlLm9uZXN1cGVyaW9yPTMwMDtlLmltYWNyb249Mjc4O2UuRXVybz01MDB9KSk7ZVsiVGltZXMtQm9sZEl0YWxpYyJdPWdldExvb2t1cFRhYmxlRmFjdG9yeSgoZnVuY3Rpb24oZSl7ZS5zcGFjZT0yNTA7ZS5leGNsYW09Mzg5O2UucXVvdGVkYmw9NTU1O2UubnVtYmVyc2lnbj01MDA7ZS5kb2xsYXI9NTAwO2UucGVyY2VudD04MzM7ZS5hbXBlcnNhbmQ9Nzc4O2UucXVvdGVyaWdodD0zMzM7ZS5wYXJlbmxlZnQ9MzMzO2UucGFyZW5yaWdodD0zMzM7ZS5hc3Rlcmlzaz01MDA7ZS5wbHVzPTU3MDtlLmNvbW1hPTI1MDtlLmh5cGhlbj0zMzM7ZS5wZXJpb2Q9MjUwO2Uuc2xhc2g9Mjc4O2UuemVybz01MDA7ZS5vbmU9NTAwO2UudHdvPTUwMDtlLnRocmVlPTUwMDtlLmZvdXI9NTAwO2UuZml2ZT01MDA7ZS5zaXg9NTAwO2Uuc2V2ZW49NTAwO2UuZWlnaHQ9NTAwO2UubmluZT01MDA7ZS5jb2xvbj0zMzM7ZS5zZW1pY29sb249MzMzO2UubGVzcz01NzA7ZS5lcXVhbD01NzA7ZS5ncmVhdGVyPTU3MDtlLnF1ZXN0aW9uPTUwMDtlLmF0PTgzMjtlLkE9NjY3O2UuQj02Njc7ZS5DPTY2NztlLkQ9NzIyO2UuRT02Njc7ZS5GPTY2NztlLkc9NzIyO2UuSD03Nzg7ZS5JPTM4OTtlLko9NTAwO2UuSz02Njc7ZS5MPTYxMTtlLk09ODg5O2UuTj03MjI7ZS5PPTcyMjtlLlA9NjExO2UuUT03MjI7ZS5SPTY2NztlLlM9NTU2O2UuVD02MTE7ZS5VPTcyMjtlLlY9NjY3O2UuVz04ODk7ZS5YPTY2NztlLlk9NjExO2UuWj02MTE7ZS5icmFja2V0bGVmdD0zMzM7ZS5iYWNrc2xhc2g9Mjc4O2UuYnJhY2tldHJpZ2h0PTMzMztlLmFzY2lpY2lyY3VtPTU3MDtlLnVuZGVyc2NvcmU9NTAwO2UucXVvdGVsZWZ0PTMzMztlLmE9NTAwO2UuYj01MDA7ZS5jPTQ0NDtlLmQ9NTAwO2UuZT00NDQ7ZS5mPTMzMztlLmc9NTAwO2UuaD01NTY7ZS5pPTI3ODtlLmo9Mjc4O2Uuaz01MDA7ZS5sPTI3ODtlLm09Nzc4O2Uubj01NTY7ZS5vPTUwMDtlLnA9NTAwO2UucT01MDA7ZS5yPTM4OTtlLnM9Mzg5O2UudD0yNzg7ZS51PTU1NjtlLnY9NDQ0O2Uudz02Njc7ZS54PTUwMDtlLnk9NDQ0O2Uuej0zODk7ZS5icmFjZWxlZnQ9MzQ4O2UuYmFyPTIyMDtlLmJyYWNlcmlnaHQ9MzQ4O2UuYXNjaWl0aWxkZT01NzA7ZS5leGNsYW1kb3duPTM4OTtlLmNlbnQ9NTAwO2Uuc3Rlcmxpbmc9NTAwO2UuZnJhY3Rpb249MTY3O2UueWVuPTUwMDtlLmZsb3Jpbj01MDA7ZS5zZWN0aW9uPTUwMDtlLmN1cnJlbmN5PTUwMDtlLnF1b3Rlc2luZ2xlPTI3ODtlLnF1b3RlZGJsbGVmdD01MDA7ZS5ndWlsbGVtb3RsZWZ0PTUwMDtlLmd1aWxzaW5nbGxlZnQ9MzMzO2UuZ3VpbHNpbmdscmlnaHQ9MzMzO2UuZmk9NTU2O2UuZmw9NTU2O2UuZW5kYXNoPTUwMDtlLmRhZ2dlcj01MDA7ZS5kYWdnZXJkYmw9NTAwO2UucGVyaW9kY2VudGVyZWQ9MjUwO2UucGFyYWdyYXBoPTUwMDtlLmJ1bGxldD0zNTA7ZS5xdW90ZXNpbmdsYmFzZT0zMzM7ZS5xdW90ZWRibGJhc2U9NTAwO2UucXVvdGVkYmxyaWdodD01MDA7ZS5ndWlsbGVtb3RyaWdodD01MDA7ZS5lbGxpcHNpcz0xZTM7ZS5wZXJ0aG91c2FuZD0xZTM7ZS5xdWVzdGlvbmRvd249NTAwO2UuZ3JhdmU9MzMzO2UuYWN1dGU9MzMzO2UuY2lyY3VtZmxleD0zMzM7ZS50aWxkZT0zMzM7ZS5tYWNyb249MzMzO2UuYnJldmU9MzMzO2UuZG90YWNjZW50PTMzMztlLmRpZXJlc2lzPTMzMztlLnJpbmc9MzMzO2UuY2VkaWxsYT0zMzM7ZS5odW5nYXJ1bWxhdXQ9MzMzO2Uub2dvbmVrPTMzMztlLmNhcm9uPTMzMztlLmVtZGFzaD0xZTM7ZS5BRT05NDQ7ZS5vcmRmZW1pbmluZT0yNjY7ZS5Mc2xhc2g9NjExO2UuT3NsYXNoPTcyMjtlLk9FPTk0NDtlLm9yZG1hc2N1bGluZT0zMDA7ZS5hZT03MjI7ZS5kb3RsZXNzaT0yNzg7ZS5sc2xhc2g9Mjc4O2Uub3NsYXNoPTUwMDtlLm9lPTcyMjtlLmdlcm1hbmRibHM9NTAwO2UuSWRpZXJlc2lzPTM4OTtlLmVhY3V0ZT00NDQ7ZS5hYnJldmU9NTAwO2UudWh1bmdhcnVtbGF1dD01NTY7ZS5lY2Fyb249NDQ0O2UuWWRpZXJlc2lzPTYxMTtlLmRpdmlkZT01NzA7ZS5ZYWN1dGU9NjExO2UuQWNpcmN1bWZsZXg9NjY3O2UuYWFjdXRlPTUwMDtlLlVjaXJjdW1mbGV4PTcyMjtlLnlhY3V0ZT00NDQ7ZS5zY29tbWFhY2NlbnQ9Mzg5O2UuZWNpcmN1bWZsZXg9NDQ0O2UuVXJpbmc9NzIyO2UuVWRpZXJlc2lzPTcyMjtlLmFvZ29uZWs9NTAwO2UuVWFjdXRlPTcyMjtlLnVvZ29uZWs9NTU2O2UuRWRpZXJlc2lzPTY2NztlLkRjcm9hdD03MjI7ZS5jb21tYWFjY2VudD0yNTA7ZS5jb3B5cmlnaHQ9NzQ3O2UuRW1hY3Jvbj02Njc7ZS5jY2Fyb249NDQ0O2UuYXJpbmc9NTAwO2UuTmNvbW1hYWNjZW50PTcyMjtlLmxhY3V0ZT0yNzg7ZS5hZ3JhdmU9NTAwO2UuVGNvbW1hYWNjZW50PTYxMTtlLkNhY3V0ZT02Njc7ZS5hdGlsZGU9NTAwO2UuRWRvdGFjY2VudD02Njc7ZS5zY2Fyb249Mzg5O2Uuc2NlZGlsbGE9Mzg5O2UuaWFjdXRlPTI3ODtlLmxvemVuZ2U9NDk0O2UuUmNhcm9uPTY2NztlLkdjb21tYWFjY2VudD03MjI7ZS51Y2lyY3VtZmxleD01NTY7ZS5hY2lyY3VtZmxleD01MDA7ZS5BbWFjcm9uPTY2NztlLnJjYXJvbj0zODk7ZS5jY2VkaWxsYT00NDQ7ZS5aZG90YWNjZW50PTYxMTtlLlRob3JuPTYxMTtlLk9tYWNyb249NzIyO2UuUmFjdXRlPTY2NztlLlNhY3V0ZT01NTY7ZS5kY2Fyb249NjA4O2UuVW1hY3Jvbj03MjI7ZS51cmluZz01NTY7ZS50aHJlZXN1cGVyaW9yPTMwMDtlLk9ncmF2ZT03MjI7ZS5BZ3JhdmU9NjY3O2UuQWJyZXZlPTY2NztlLm11bHRpcGx5PTU3MDtlLnVhY3V0ZT01NTY7ZS5UY2Fyb249NjExO2UucGFydGlhbGRpZmY9NDk0O2UueWRpZXJlc2lzPTQ0NDtlLk5hY3V0ZT03MjI7ZS5pY2lyY3VtZmxleD0yNzg7ZS5FY2lyY3VtZmxleD02Njc7ZS5hZGllcmVzaXM9NTAwO2UuZWRpZXJlc2lzPTQ0NDtlLmNhY3V0ZT00NDQ7ZS5uYWN1dGU9NTU2O2UudW1hY3Jvbj01NTY7ZS5OY2Fyb249NzIyO2UuSWFjdXRlPTM4OTtlLnBsdXNtaW51cz01NzA7ZS5icm9rZW5iYXI9MjIwO2UucmVnaXN0ZXJlZD03NDc7ZS5HYnJldmU9NzIyO2UuSWRvdGFjY2VudD0zODk7ZS5zdW1tYXRpb249NjAwO2UuRWdyYXZlPTY2NztlLnJhY3V0ZT0zODk7ZS5vbWFjcm9uPTUwMDtlLlphY3V0ZT02MTE7ZS5aY2Fyb249NjExO2UuZ3JlYXRlcmVxdWFsPTU0OTtlLkV0aD03MjI7ZS5DY2VkaWxsYT02Njc7ZS5sY29tbWFhY2NlbnQ9Mjc4O2UudGNhcm9uPTM2NjtlLmVvZ29uZWs9NDQ0O2UuVW9nb25laz03MjI7ZS5BYWN1dGU9NjY3O2UuQWRpZXJlc2lzPTY2NztlLmVncmF2ZT00NDQ7ZS56YWN1dGU9Mzg5O2UuaW9nb25laz0yNzg7ZS5PYWN1dGU9NzIyO2Uub2FjdXRlPTUwMDtlLmFtYWNyb249NTAwO2Uuc2FjdXRlPTM4OTtlLmlkaWVyZXNpcz0yNzg7ZS5PY2lyY3VtZmxleD03MjI7ZS5VZ3JhdmU9NzIyO2UuRGVsdGE9NjEyO2UudGhvcm49NTAwO2UudHdvc3VwZXJpb3I9MzAwO2UuT2RpZXJlc2lzPTcyMjtlLm11PTU3NjtlLmlncmF2ZT0yNzg7ZS5vaHVuZ2FydW1sYXV0PTUwMDtlLkVvZ29uZWs9NjY3O2UuZGNyb2F0PTUwMDtlLnRocmVlcXVhcnRlcnM9NzUwO2UuU2NlZGlsbGE9NTU2O2UubGNhcm9uPTM4MjtlLktjb21tYWFjY2VudD02Njc7ZS5MYWN1dGU9NjExO2UudHJhZGVtYXJrPTFlMztlLmVkb3RhY2NlbnQ9NDQ0O2UuSWdyYXZlPTM4OTtlLkltYWNyb249Mzg5O2UuTGNhcm9uPTYxMTtlLm9uZWhhbGY9NzUwO2UubGVzc2VxdWFsPTU0OTtlLm9jaXJjdW1mbGV4PTUwMDtlLm50aWxkZT01NTY7ZS5VaHVuZ2FydW1sYXV0PTcyMjtlLkVhY3V0ZT02Njc7ZS5lbWFjcm9uPTQ0NDtlLmdicmV2ZT01MDA7ZS5vbmVxdWFydGVyPTc1MDtlLlNjYXJvbj01NTY7ZS5TY29tbWFhY2NlbnQ9NTU2O2UuT2h1bmdhcnVtbGF1dD03MjI7ZS5kZWdyZWU9NDAwO2Uub2dyYXZlPTUwMDtlLkNjYXJvbj02Njc7ZS51Z3JhdmU9NTU2O2UucmFkaWNhbD01NDk7ZS5EY2Fyb249NzIyO2UucmNvbW1hYWNjZW50PTM4OTtlLk50aWxkZT03MjI7ZS5vdGlsZGU9NTAwO2UuUmNvbW1hYWNjZW50PTY2NztlLkxjb21tYWFjY2VudD02MTE7ZS5BdGlsZGU9NjY3O2UuQW9nb25laz02Njc7ZS5BcmluZz02Njc7ZS5PdGlsZGU9NzIyO2UuemRvdGFjY2VudD0zODk7ZS5FY2Fyb249NjY3O2UuSW9nb25laz0zODk7ZS5rY29tbWFhY2NlbnQ9NTAwO2UubWludXM9NjA2O2UuSWNpcmN1bWZsZXg9Mzg5O2UubmNhcm9uPTU1NjtlLnRjb21tYWFjY2VudD0yNzg7ZS5sb2dpY2Fsbm90PTYwNjtlLm9kaWVyZXNpcz01MDA7ZS51ZGllcmVzaXM9NTU2O2Uubm90ZXF1YWw9NTQ5O2UuZ2NvbW1hYWNjZW50PTUwMDtlLmV0aD01MDA7ZS56Y2Fyb249Mzg5O2UubmNvbW1hYWNjZW50PTU1NjtlLm9uZXN1cGVyaW9yPTMwMDtlLmltYWNyb249Mjc4O2UuRXVybz01MDB9KSk7ZVsiVGltZXMtSXRhbGljIl09Z2V0TG9va3VwVGFibGVGYWN0b3J5KChmdW5jdGlvbihlKXtlLnNwYWNlPTI1MDtlLmV4Y2xhbT0zMzM7ZS5xdW90ZWRibD00MjA7ZS5udW1iZXJzaWduPTUwMDtlLmRvbGxhcj01MDA7ZS5wZXJjZW50PTgzMztlLmFtcGVyc2FuZD03Nzg7ZS5xdW90ZXJpZ2h0PTMzMztlLnBhcmVubGVmdD0zMzM7ZS5wYXJlbnJpZ2h0PTMzMztlLmFzdGVyaXNrPTUwMDtlLnBsdXM9Njc1O2UuY29tbWE9MjUwO2UuaHlwaGVuPTMzMztlLnBlcmlvZD0yNTA7ZS5zbGFzaD0yNzg7ZS56ZXJvPTUwMDtlLm9uZT01MDA7ZS50d289NTAwO2UudGhyZWU9NTAwO2UuZm91cj01MDA7ZS5maXZlPTUwMDtlLnNpeD01MDA7ZS5zZXZlbj01MDA7ZS5laWdodD01MDA7ZS5uaW5lPTUwMDtlLmNvbG9uPTMzMztlLnNlbWljb2xvbj0zMzM7ZS5sZXNzPTY3NTtlLmVxdWFsPTY3NTtlLmdyZWF0ZXI9Njc1O2UucXVlc3Rpb249NTAwO2UuYXQ9OTIwO2UuQT02MTE7ZS5CPTYxMTtlLkM9NjY3O2UuRD03MjI7ZS5FPTYxMTtlLkY9NjExO2UuRz03MjI7ZS5IPTcyMjtlLkk9MzMzO2UuSj00NDQ7ZS5LPTY2NztlLkw9NTU2O2UuTT04MzM7ZS5OPTY2NztlLk89NzIyO2UuUD02MTE7ZS5RPTcyMjtlLlI9NjExO2UuUz01MDA7ZS5UPTU1NjtlLlU9NzIyO2UuVj02MTE7ZS5XPTgzMztlLlg9NjExO2UuWT01NTY7ZS5aPTU1NjtlLmJyYWNrZXRsZWZ0PTM4OTtlLmJhY2tzbGFzaD0yNzg7ZS5icmFja2V0cmlnaHQ9Mzg5O2UuYXNjaWljaXJjdW09NDIyO2UudW5kZXJzY29yZT01MDA7ZS5xdW90ZWxlZnQ9MzMzO2UuYT01MDA7ZS5iPTUwMDtlLmM9NDQ0O2UuZD01MDA7ZS5lPTQ0NDtlLmY9Mjc4O2UuZz01MDA7ZS5oPTUwMDtlLmk9Mjc4O2Uuaj0yNzg7ZS5rPTQ0NDtlLmw9Mjc4O2UubT03MjI7ZS5uPTUwMDtlLm89NTAwO2UucD01MDA7ZS5xPTUwMDtlLnI9Mzg5O2Uucz0zODk7ZS50PTI3ODtlLnU9NTAwO2Uudj00NDQ7ZS53PTY2NztlLng9NDQ0O2UueT00NDQ7ZS56PTM4OTtlLmJyYWNlbGVmdD00MDA7ZS5iYXI9Mjc1O2UuYnJhY2VyaWdodD00MDA7ZS5hc2NpaXRpbGRlPTU0MTtlLmV4Y2xhbWRvd249Mzg5O2UuY2VudD01MDA7ZS5zdGVybGluZz01MDA7ZS5mcmFjdGlvbj0xNjc7ZS55ZW49NTAwO2UuZmxvcmluPTUwMDtlLnNlY3Rpb249NTAwO2UuY3VycmVuY3k9NTAwO2UucXVvdGVzaW5nbGU9MjE0O2UucXVvdGVkYmxsZWZ0PTU1NjtlLmd1aWxsZW1vdGxlZnQ9NTAwO2UuZ3VpbHNpbmdsbGVmdD0zMzM7ZS5ndWlsc2luZ2xyaWdodD0zMzM7ZS5maT01MDA7ZS5mbD01MDA7ZS5lbmRhc2g9NTAwO2UuZGFnZ2VyPTUwMDtlLmRhZ2dlcmRibD01MDA7ZS5wZXJpb2RjZW50ZXJlZD0yNTA7ZS5wYXJhZ3JhcGg9NTIzO2UuYnVsbGV0PTM1MDtlLnF1b3Rlc2luZ2xiYXNlPTMzMztlLnF1b3RlZGJsYmFzZT01NTY7ZS5xdW90ZWRibHJpZ2h0PTU1NjtlLmd1aWxsZW1vdHJpZ2h0PTUwMDtlLmVsbGlwc2lzPTg4OTtlLnBlcnRob3VzYW5kPTFlMztlLnF1ZXN0aW9uZG93bj01MDA7ZS5ncmF2ZT0zMzM7ZS5hY3V0ZT0zMzM7ZS5jaXJjdW1mbGV4PTMzMztlLnRpbGRlPTMzMztlLm1hY3Jvbj0zMzM7ZS5icmV2ZT0zMzM7ZS5kb3RhY2NlbnQ9MzMzO2UuZGllcmVzaXM9MzMzO2UucmluZz0zMzM7ZS5jZWRpbGxhPTMzMztlLmh1bmdhcnVtbGF1dD0zMzM7ZS5vZ29uZWs9MzMzO2UuY2Fyb249MzMzO2UuZW1kYXNoPTg4OTtlLkFFPTg4OTtlLm9yZGZlbWluaW5lPTI3NjtlLkxzbGFzaD01NTY7ZS5Pc2xhc2g9NzIyO2UuT0U9OTQ0O2Uub3JkbWFzY3VsaW5lPTMxMDtlLmFlPTY2NztlLmRvdGxlc3NpPTI3ODtlLmxzbGFzaD0yNzg7ZS5vc2xhc2g9NTAwO2Uub2U9NjY3O2UuZ2VybWFuZGJscz01MDA7ZS5JZGllcmVzaXM9MzMzO2UuZWFjdXRlPTQ0NDtlLmFicmV2ZT01MDA7ZS51aHVuZ2FydW1sYXV0PTUwMDtlLmVjYXJvbj00NDQ7ZS5ZZGllcmVzaXM9NTU2O2UuZGl2aWRlPTY3NTtlLllhY3V0ZT01NTY7ZS5BY2lyY3VtZmxleD02MTE7ZS5hYWN1dGU9NTAwO2UuVWNpcmN1bWZsZXg9NzIyO2UueWFjdXRlPTQ0NDtlLnNjb21tYWFjY2VudD0zODk7ZS5lY2lyY3VtZmxleD00NDQ7ZS5VcmluZz03MjI7ZS5VZGllcmVzaXM9NzIyO2UuYW9nb25laz01MDA7ZS5VYWN1dGU9NzIyO2UudW9nb25laz01MDA7ZS5FZGllcmVzaXM9NjExO2UuRGNyb2F0PTcyMjtlLmNvbW1hYWNjZW50PTI1MDtlLmNvcHlyaWdodD03NjA7ZS5FbWFjcm9uPTYxMTtlLmNjYXJvbj00NDQ7ZS5hcmluZz01MDA7ZS5OY29tbWFhY2NlbnQ9NjY3O2UubGFjdXRlPTI3ODtlLmFncmF2ZT01MDA7ZS5UY29tbWFhY2NlbnQ9NTU2O2UuQ2FjdXRlPTY2NztlLmF0aWxkZT01MDA7ZS5FZG90YWNjZW50PTYxMTtlLnNjYXJvbj0zODk7ZS5zY2VkaWxsYT0zODk7ZS5pYWN1dGU9Mjc4O2UubG96ZW5nZT00NzE7ZS5SY2Fyb249NjExO2UuR2NvbW1hYWNjZW50PTcyMjtlLnVjaXJjdW1mbGV4PTUwMDtlLmFjaXJjdW1mbGV4PTUwMDtlLkFtYWNyb249NjExO2UucmNhcm9uPTM4OTtlLmNjZWRpbGxhPTQ0NDtlLlpkb3RhY2NlbnQ9NTU2O2UuVGhvcm49NjExO2UuT21hY3Jvbj03MjI7ZS5SYWN1dGU9NjExO2UuU2FjdXRlPTUwMDtlLmRjYXJvbj01NDQ7ZS5VbWFjcm9uPTcyMjtlLnVyaW5nPTUwMDtlLnRocmVlc3VwZXJpb3I9MzAwO2UuT2dyYXZlPTcyMjtlLkFncmF2ZT02MTE7ZS5BYnJldmU9NjExO2UubXVsdGlwbHk9Njc1O2UudWFjdXRlPTUwMDtlLlRjYXJvbj01NTY7ZS5wYXJ0aWFsZGlmZj00NzY7ZS55ZGllcmVzaXM9NDQ0O2UuTmFjdXRlPTY2NztlLmljaXJjdW1mbGV4PTI3ODtlLkVjaXJjdW1mbGV4PTYxMTtlLmFkaWVyZXNpcz01MDA7ZS5lZGllcmVzaXM9NDQ0O2UuY2FjdXRlPTQ0NDtlLm5hY3V0ZT01MDA7ZS51bWFjcm9uPTUwMDtlLk5jYXJvbj02Njc7ZS5JYWN1dGU9MzMzO2UucGx1c21pbnVzPTY3NTtlLmJyb2tlbmJhcj0yNzU7ZS5yZWdpc3RlcmVkPTc2MDtlLkdicmV2ZT03MjI7ZS5JZG90YWNjZW50PTMzMztlLnN1bW1hdGlvbj02MDA7ZS5FZ3JhdmU9NjExO2UucmFjdXRlPTM4OTtlLm9tYWNyb249NTAwO2UuWmFjdXRlPTU1NjtlLlpjYXJvbj01NTY7ZS5ncmVhdGVyZXF1YWw9NTQ5O2UuRXRoPTcyMjtlLkNjZWRpbGxhPTY2NztlLmxjb21tYWFjY2VudD0yNzg7ZS50Y2Fyb249MzAwO2UuZW9nb25laz00NDQ7ZS5Vb2dvbmVrPTcyMjtlLkFhY3V0ZT02MTE7ZS5BZGllcmVzaXM9NjExO2UuZWdyYXZlPTQ0NDtlLnphY3V0ZT0zODk7ZS5pb2dvbmVrPTI3ODtlLk9hY3V0ZT03MjI7ZS5vYWN1dGU9NTAwO2UuYW1hY3Jvbj01MDA7ZS5zYWN1dGU9Mzg5O2UuaWRpZXJlc2lzPTI3ODtlLk9jaXJjdW1mbGV4PTcyMjtlLlVncmF2ZT03MjI7ZS5EZWx0YT02MTI7ZS50aG9ybj01MDA7ZS50d29zdXBlcmlvcj0zMDA7ZS5PZGllcmVzaXM9NzIyO2UubXU9NTAwO2UuaWdyYXZlPTI3ODtlLm9odW5nYXJ1bWxhdXQ9NTAwO2UuRW9nb25laz02MTE7ZS5kY3JvYXQ9NTAwO2UudGhyZWVxdWFydGVycz03NTA7ZS5TY2VkaWxsYT01MDA7ZS5sY2Fyb249MzAwO2UuS2NvbW1hYWNjZW50PTY2NztlLkxhY3V0ZT01NTY7ZS50cmFkZW1hcms9OTgwO2UuZWRvdGFjY2VudD00NDQ7ZS5JZ3JhdmU9MzMzO2UuSW1hY3Jvbj0zMzM7ZS5MY2Fyb249NjExO2Uub25laGFsZj03NTA7ZS5sZXNzZXF1YWw9NTQ5O2Uub2NpcmN1bWZsZXg9NTAwO2UubnRpbGRlPTUwMDtlLlVodW5nYXJ1bWxhdXQ9NzIyO2UuRWFjdXRlPTYxMTtlLmVtYWNyb249NDQ0O2UuZ2JyZXZlPTUwMDtlLm9uZXF1YXJ0ZXI9NzUwO2UuU2Nhcm9uPTUwMDtlLlNjb21tYWFjY2VudD01MDA7ZS5PaHVuZ2FydW1sYXV0PTcyMjtlLmRlZ3JlZT00MDA7ZS5vZ3JhdmU9NTAwO2UuQ2Nhcm9uPTY2NztlLnVncmF2ZT01MDA7ZS5yYWRpY2FsPTQ1MztlLkRjYXJvbj03MjI7ZS5yY29tbWFhY2NlbnQ9Mzg5O2UuTnRpbGRlPTY2NztlLm90aWxkZT01MDA7ZS5SY29tbWFhY2NlbnQ9NjExO2UuTGNvbW1hYWNjZW50PTU1NjtlLkF0aWxkZT02MTE7ZS5Bb2dvbmVrPTYxMTtlLkFyaW5nPTYxMTtlLk90aWxkZT03MjI7ZS56ZG90YWNjZW50PTM4OTtlLkVjYXJvbj02MTE7ZS5Jb2dvbmVrPTMzMztlLmtjb21tYWFjY2VudD00NDQ7ZS5taW51cz02NzU7ZS5JY2lyY3VtZmxleD0zMzM7ZS5uY2Fyb249NTAwO2UudGNvbW1hYWNjZW50PTI3ODtlLmxvZ2ljYWxub3Q9Njc1O2Uub2RpZXJlc2lzPTUwMDtlLnVkaWVyZXNpcz01MDA7ZS5ub3RlcXVhbD01NDk7ZS5nY29tbWFhY2NlbnQ9NTAwO2UuZXRoPTUwMDtlLnpjYXJvbj0zODk7ZS5uY29tbWFhY2NlbnQ9NTAwO2Uub25lc3VwZXJpb3I9MzAwO2UuaW1hY3Jvbj0yNzg7ZS5FdXJvPTUwMH0pKTtlLlphcGZEaW5nYmF0cz1nZXRMb29rdXBUYWJsZUZhY3RvcnkoKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9Mjc4O2UuYTE9OTc0O2UuYTI9OTYxO2UuYTIwMj05NzQ7ZS5hMz05ODA7ZS5hND03MTk7ZS5hNT03ODk7ZS5hMTE5PTc5MDtlLmExMTg9NzkxO2UuYTExNz02OTA7ZS5hMTE9OTYwO2UuYTEyPTkzOTtlLmExMz01NDk7ZS5hMTQ9ODU1O2UuYTE1PTkxMTtlLmExNj05MzM7ZS5hMTA1PTkxMTtlLmExNz05NDU7ZS5hMTg9OTc0O2UuYTE5PTc1NTtlLmEyMD04NDY7ZS5hMjE9NzYyO2UuYTIyPTc2MTtlLmEyMz01NzE7ZS5hMjQ9Njc3O2UuYTI1PTc2MztlLmEyNj03NjA7ZS5hMjc9NzU5O2UuYTI4PTc1NDtlLmE2PTQ5NDtlLmE3PTU1MjtlLmE4PTUzNztlLmE5PTU3NztlLmExMD02OTI7ZS5hMjk9Nzg2O2UuYTMwPTc4ODtlLmEzMT03ODg7ZS5hMzI9NzkwO2UuYTMzPTc5MztlLmEzND03OTQ7ZS5hMzU9ODE2O2UuYTM2PTgyMztlLmEzNz03ODk7ZS5hMzg9ODQxO2UuYTM5PTgyMztlLmE0MD04MzM7ZS5hNDE9ODE2O2UuYTQyPTgzMTtlLmE0Mz05MjM7ZS5hNDQ9NzQ0O2UuYTQ1PTcyMztlLmE0Nj03NDk7ZS5hNDc9NzkwO2UuYTQ4PTc5MjtlLmE0OT02OTU7ZS5hNTA9Nzc2O2UuYTUxPTc2ODtlLmE1Mj03OTI7ZS5hNTM9NzU5O2UuYTU0PTcwNztlLmE1NT03MDg7ZS5hNTY9NjgyO2UuYTU3PTcwMTtlLmE1OD04MjY7ZS5hNTk9ODE1O2UuYTYwPTc4OTtlLmE2MT03ODk7ZS5hNjI9NzA3O2UuYTYzPTY4NztlLmE2ND02OTY7ZS5hNjU9Njg5O2UuYTY2PTc4NjtlLmE2Nz03ODc7ZS5hNjg9NzEzO2UuYTY5PTc5MTtlLmE3MD03ODU7ZS5hNzE9NzkxO2UuYTcyPTg3MztlLmE3Mz03NjE7ZS5hNzQ9NzYyO2UuYTIwMz03NjI7ZS5hNzU9NzU5O2UuYTIwND03NTk7ZS5hNzY9ODkyO2UuYTc3PTg5MjtlLmE3OD03ODg7ZS5hNzk9Nzg0O2UuYTgxPTQzODtlLmE4Mj0xMzg7ZS5hODM9Mjc3O2UuYTg0PTQxNTtlLmE5Nz0zOTI7ZS5hOTg9MzkyO2UuYTk5PTY2ODtlLmExMDA9NjY4O2UuYTg5PTM5MDtlLmE5MD0zOTA7ZS5hOTM9MzE3O2UuYTk0PTMxNztlLmE5MT0yNzY7ZS5hOTI9Mjc2O2UuYTIwNT01MDk7ZS5hODU9NTA5O2UuYTIwNj00MTA7ZS5hODY9NDEwO2UuYTg3PTIzNDtlLmE4OD0yMzQ7ZS5hOTU9MzM0O2UuYTk2PTMzNDtlLmExMDE9NzMyO2UuYTEwMj01NDQ7ZS5hMTAzPTU0NDtlLmExMDQ9OTEwO2UuYTEwNj02Njc7ZS5hMTA3PTc2MDtlLmExMDg9NzYwO2UuYTExMj03NzY7ZS5hMTExPTU5NTtlLmExMTA9Njk0O2UuYTEwOT02MjY7ZS5hMTIwPTc4ODtlLmExMjE9Nzg4O2UuYTEyMj03ODg7ZS5hMTIzPTc4ODtlLmExMjQ9Nzg4O2UuYTEyNT03ODg7ZS5hMTI2PTc4ODtlLmExMjc9Nzg4O2UuYTEyOD03ODg7ZS5hMTI5PTc4ODtlLmExMzA9Nzg4O2UuYTEzMT03ODg7ZS5hMTMyPTc4ODtlLmExMzM9Nzg4O2UuYTEzND03ODg7ZS5hMTM1PTc4ODtlLmExMzY9Nzg4O2UuYTEzNz03ODg7ZS5hMTM4PTc4ODtlLmExMzk9Nzg4O2UuYTE0MD03ODg7ZS5hMTQxPTc4ODtlLmExNDI9Nzg4O2UuYTE0Mz03ODg7ZS5hMTQ0PTc4ODtlLmExNDU9Nzg4O2UuYTE0Nj03ODg7ZS5hMTQ3PTc4ODtlLmExNDg9Nzg4O2UuYTE0OT03ODg7ZS5hMTUwPTc4ODtlLmExNTE9Nzg4O2UuYTE1Mj03ODg7ZS5hMTUzPTc4ODtlLmExNTQ9Nzg4O2UuYTE1NT03ODg7ZS5hMTU2PTc4ODtlLmExNTc9Nzg4O2UuYTE1OD03ODg7ZS5hMTU5PTc4ODtlLmExNjA9ODk0O2UuYTE2MT04Mzg7ZS5hMTYzPTEwMTY7ZS5hMTY0PTQ1ODtlLmExOTY9NzQ4O2UuYTE2NT05MjQ7ZS5hMTkyPTc0ODtlLmExNjY9OTE4O2UuYTE2Nz05Mjc7ZS5hMTY4PTkyODtlLmExNjk9OTI4O2UuYTE3MD04MzQ7ZS5hMTcxPTg3MztlLmExNzI9ODI4O2UuYTE3Mz05MjQ7ZS5hMTYyPTkyNDtlLmExNzQ9OTE3O2UuYTE3NT05MzA7ZS5hMTc2PTkzMTtlLmExNzc9NDYzO2UuYTE3OD04ODM7ZS5hMTc5PTgzNjtlLmExOTM9ODM2O2UuYTE4MD04Njc7ZS5hMTk5PTg2NztlLmExODE9Njk2O2UuYTIwMD02OTY7ZS5hMTgyPTg3NDtlLmEyMDE9ODc0O2UuYTE4Mz03NjA7ZS5hMTg0PTk0NjtlLmExOTc9NzcxO2UuYTE4NT04NjU7ZS5hMTk0PTc3MTtlLmExOTg9ODg4O2UuYTE4Nj05Njc7ZS5hMTk1PTg4ODtlLmExODc9ODMxO2UuYTE4OD04NzM7ZS5hMTg5PTkyNztlLmExOTA9OTcwO2UuYTE5MT05MTh9KSl9KSksWmk9Z2V0TG9va3VwVGFibGVGYWN0b3J5KChmdW5jdGlvbihlKXtlLkNvdXJpZXI9e2FzY2VudDo2MjksZGVzY2VudDotMTU3LGNhcEhlaWdodDo1NjIseEhlaWdodDotNDI2fTtlWyJDb3VyaWVyLUJvbGQiXT17YXNjZW50OjYyOSxkZXNjZW50Oi0xNTcsY2FwSGVpZ2h0OjU2Mix4SGVpZ2h0OjQzOX07ZVsiQ291cmllci1PYmxpcXVlIl09e2FzY2VudDo2MjksZGVzY2VudDotMTU3LGNhcEhlaWdodDo1NjIseEhlaWdodDo0MjZ9O2VbIkNvdXJpZXItQm9sZE9ibGlxdWUiXT17YXNjZW50OjYyOSxkZXNjZW50Oi0xNTcsY2FwSGVpZ2h0OjU2Mix4SGVpZ2h0OjQyNn07ZS5IZWx2ZXRpY2E9e2FzY2VudDo3MTgsZGVzY2VudDotMjA3LGNhcEhlaWdodDo3MTgseEhlaWdodDo1MjN9O2VbIkhlbHZldGljYS1Cb2xkIl09e2FzY2VudDo3MTgsZGVzY2VudDotMjA3LGNhcEhlaWdodDo3MTgseEhlaWdodDo1MzJ9O2VbIkhlbHZldGljYS1PYmxpcXVlIl09e2FzY2VudDo3MTgsZGVzY2VudDotMjA3LGNhcEhlaWdodDo3MTgseEhlaWdodDo1MjN9O2VbIkhlbHZldGljYS1Cb2xkT2JsaXF1ZSJdPXthc2NlbnQ6NzE4LGRlc2NlbnQ6LTIwNyxjYXBIZWlnaHQ6NzE4LHhIZWlnaHQ6NTMyfTtlWyJUaW1lcy1Sb21hbiJdPXthc2NlbnQ6NjgzLGRlc2NlbnQ6LTIxNyxjYXBIZWlnaHQ6NjYyLHhIZWlnaHQ6NDUwfTtlWyJUaW1lcy1Cb2xkIl09e2FzY2VudDo2ODMsZGVzY2VudDotMjE3LGNhcEhlaWdodDo2NzYseEhlaWdodDo0NjF9O2VbIlRpbWVzLUl0YWxpYyJdPXthc2NlbnQ6NjgzLGRlc2NlbnQ6LTIxNyxjYXBIZWlnaHQ6NjUzLHhIZWlnaHQ6NDQxfTtlWyJUaW1lcy1Cb2xkSXRhbGljIl09e2FzY2VudDo2ODMsZGVzY2VudDotMjE3LGNhcEhlaWdodDo2NjkseEhlaWdodDo0NjJ9O2UuU3ltYm9sPXthc2NlbnQ6TWF0aC5OYU4sZGVzY2VudDpNYXRoLk5hTixjYXBIZWlnaHQ6TWF0aC5OYU4seEhlaWdodDpNYXRoLk5hTn07ZS5aYXBmRGluZ2JhdHM9e2FzY2VudDpNYXRoLk5hTixkZXNjZW50Ok1hdGguTmFOLGNhcEhlaWdodDpNYXRoLk5hTix4SGVpZ2h0Ok1hdGguTmFOfX0pKTtjbGFzcyBHbHlmVGFibGV7Y29uc3RydWN0b3Ioe2dseWZUYWJsZTplLGlzR2x5cGhMb2NhdGlvbnNMb25nOnQsbG9jYVRhYmxlOmksbnVtR2x5cGhzOmF9KXt0aGlzLmdseXBocz1bXTtjb25zdCByPW5ldyBEYXRhVmlldyhpLmJ1ZmZlcixpLmJ5dGVPZmZzZXQsaS5ieXRlTGVuZ3RoKSxzPW5ldyBEYXRhVmlldyhlLmJ1ZmZlcixlLmJ5dGVPZmZzZXQsZS5ieXRlTGVuZ3RoKSxuPXQ/NDoyO2xldCBvPXQ/ci5nZXRVaW50MzIoMCk6MipyLmdldFVpbnQxNigwKSxnPTA7Zm9yKGxldCBlPTA7ZTxhO2UrKyl7Zys9bjtjb25zdCBlPXQ/ci5nZXRVaW50MzIoZyk6MipyLmdldFVpbnQxNihnKTtpZihlPT09byl7dGhpcy5nbHlwaHMucHVzaChuZXcgR2x5cGgoe30pKTtjb250aW51ZX1jb25zdCBpPUdseXBoLnBhcnNlKG8scyk7dGhpcy5nbHlwaHMucHVzaChpKTtvPWV9fWdldFNpemUoKXtyZXR1cm4gdGhpcy5nbHlwaHMucmVkdWNlKCgoZSx0KT0+ZSsodC5nZXRTaXplKCkrMyYtNCkpLDApfXdyaXRlKCl7Y29uc3QgZT10aGlzLmdldFNpemUoKSx0PW5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoZSkpLGk9ZT4xMzEwNzAsYT1pPzQ6MixyPW5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoKHRoaXMuZ2x5cGhzLmxlbmd0aCsxKSphKSk7aT9yLnNldFVpbnQzMigwLDApOnIuc2V0VWludDE2KDAsMCk7bGV0IHM9MCxuPTA7Zm9yKGNvbnN0IGUgb2YgdGhpcy5nbHlwaHMpe3MrPWUud3JpdGUocyx0KTtzPXMrMyYtNDtuKz1hO2k/ci5zZXRVaW50MzIobixzKTpyLnNldFVpbnQxNihuLHM+PjEpfXJldHVybntpc0xvY2F0aW9uTG9uZzppLGxvY2E6bmV3IFVpbnQ4QXJyYXkoci5idWZmZXIpLGdseWY6bmV3IFVpbnQ4QXJyYXkodC5idWZmZXIpfX1zY2FsZShlKXtmb3IobGV0IHQ9MCxpPXRoaXMuZ2x5cGhzLmxlbmd0aDt0PGk7dCsrKXRoaXMuZ2x5cGhzW3RdLnNjYWxlKGVbdF0pfX1jbGFzcyBHbHlwaHtjb25zdHJ1Y3Rvcih7aGVhZGVyOmU9bnVsbCxzaW1wbGU6dD1udWxsLGNvbXBvc2l0ZXM6aT1udWxsfSl7dGhpcy5oZWFkZXI9ZTt0aGlzLnNpbXBsZT10O3RoaXMuY29tcG9zaXRlcz1pfXN0YXRpYyBwYXJzZShlLHQpe2NvbnN0W2ksYV09R2x5cGhIZWFkZXIucGFyc2UoZSx0KTtlKz1pO2lmKGEubnVtYmVyT2ZDb250b3VyczwwKXtjb25zdCBpPVtdO2Zvcig7Oyl7Y29uc3RbYSxyXT1Db21wb3NpdGVHbHlwaC5wYXJzZShlLHQpO2UrPWE7aS5wdXNoKHIpO2lmKCEoMzImci5mbGFncykpYnJlYWt9cmV0dXJuIG5ldyBHbHlwaCh7aGVhZGVyOmEsY29tcG9zaXRlczppfSl9Y29uc3Qgcj1TaW1wbGVHbHlwaC5wYXJzZShlLHQsYS5udW1iZXJPZkNvbnRvdXJzKTtyZXR1cm4gbmV3IEdseXBoKHtoZWFkZXI6YSxzaW1wbGU6cn0pfWdldFNpemUoKXtpZighdGhpcy5oZWFkZXIpcmV0dXJuIDA7Y29uc3QgZT10aGlzLnNpbXBsZT90aGlzLnNpbXBsZS5nZXRTaXplKCk6dGhpcy5jb21wb3NpdGVzLnJlZHVjZSgoKGUsdCk9PmUrdC5nZXRTaXplKCkpLDApO3JldHVybiB0aGlzLmhlYWRlci5nZXRTaXplKCkrZX13cml0ZShlLHQpe2lmKCF0aGlzLmhlYWRlcilyZXR1cm4gMDtjb25zdCBpPWU7ZSs9dGhpcy5oZWFkZXIud3JpdGUoZSx0KTtpZih0aGlzLnNpbXBsZSllKz10aGlzLnNpbXBsZS53cml0ZShlLHQpO2Vsc2UgZm9yKGNvbnN0IGkgb2YgdGhpcy5jb21wb3NpdGVzKWUrPWkud3JpdGUoZSx0KTtyZXR1cm4gZS1pfXNjYWxlKGUpe2lmKCF0aGlzLmhlYWRlcilyZXR1cm47Y29uc3QgdD0odGhpcy5oZWFkZXIueE1pbit0aGlzLmhlYWRlci54TWF4KS8yO3RoaXMuaGVhZGVyLnNjYWxlKHQsZSk7aWYodGhpcy5zaW1wbGUpdGhpcy5zaW1wbGUuc2NhbGUodCxlKTtlbHNlIGZvcihjb25zdCBpIG9mIHRoaXMuY29tcG9zaXRlcylpLnNjYWxlKHQsZSl9fWNsYXNzIEdseXBoSGVhZGVye2NvbnN0cnVjdG9yKHtudW1iZXJPZkNvbnRvdXJzOmUseE1pbjp0LHlNaW46aSx4TWF4OmEseU1heDpyfSl7dGhpcy5udW1iZXJPZkNvbnRvdXJzPWU7dGhpcy54TWluPXQ7dGhpcy55TWluPWk7dGhpcy54TWF4PWE7dGhpcy55TWF4PXJ9c3RhdGljIHBhcnNlKGUsdCl7cmV0dXJuWzEwLG5ldyBHbHlwaEhlYWRlcih7bnVtYmVyT2ZDb250b3Vyczp0LmdldEludDE2KGUpLHhNaW46dC5nZXRJbnQxNihlKzIpLHlNaW46dC5nZXRJbnQxNihlKzQpLHhNYXg6dC5nZXRJbnQxNihlKzYpLHlNYXg6dC5nZXRJbnQxNihlKzgpfSldfWdldFNpemUoKXtyZXR1cm4gMTB9d3JpdGUoZSx0KXt0LnNldEludDE2KGUsdGhpcy5udW1iZXJPZkNvbnRvdXJzKTt0LnNldEludDE2KGUrMix0aGlzLnhNaW4pO3Quc2V0SW50MTYoZSs0LHRoaXMueU1pbik7dC5zZXRJbnQxNihlKzYsdGhpcy54TWF4KTt0LnNldEludDE2KGUrOCx0aGlzLnlNYXgpO3JldHVybiAxMH1zY2FsZShlLHQpe3RoaXMueE1pbj1NYXRoLnJvdW5kKGUrKHRoaXMueE1pbi1lKSp0KTt0aGlzLnhNYXg9TWF0aC5yb3VuZChlKyh0aGlzLnhNYXgtZSkqdCl9fWNsYXNzIENvbnRvdXJ7Y29uc3RydWN0b3Ioe2ZsYWdzOmUseENvb3JkaW5hdGVzOnQseUNvb3JkaW5hdGVzOml9KXt0aGlzLnhDb29yZGluYXRlcz10O3RoaXMueUNvb3JkaW5hdGVzPWk7dGhpcy5mbGFncz1lfX1jbGFzcyBTaW1wbGVHbHlwaHtjb25zdHJ1Y3Rvcih7Y29udG91cnM6ZSxpbnN0cnVjdGlvbnM6dH0pe3RoaXMuY29udG91cnM9ZTt0aGlzLmluc3RydWN0aW9ucz10fXN0YXRpYyBwYXJzZShlLHQsaSl7Y29uc3QgYT1bXTtmb3IobGV0IHI9MDtyPGk7cisrKXtjb25zdCBpPXQuZ2V0VWludDE2KGUpO2UrPTI7YS5wdXNoKGkpfWNvbnN0IHI9YVtpLTFdKzEscz10LmdldFVpbnQxNihlKTtlKz0yO2NvbnN0IG49bmV3IFVpbnQ4QXJyYXkodCkuc2xpY2UoZSxlK3MpO2UrPXM7Y29uc3Qgbz1bXTtmb3IobGV0IGk9MDtpPHI7ZSsrLGkrKyl7bGV0IGE9dC5nZXRVaW50OChlKTtvLnB1c2goYSk7aWYoOCZhKXtjb25zdCByPXQuZ2V0VWludDgoKytlKTthXj04O2ZvcihsZXQgZT0wO2U8cjtlKyspby5wdXNoKGEpO2krPXJ9fWNvbnN0IGc9W107bGV0IGM9W10sbD1bXSxoPVtdO2NvbnN0IEM9W107bGV0IFE9MCxFPTA7Zm9yKGxldCBpPTA7aTxyO2krKyl7Y29uc3Qgcj1vW2ldO2lmKDImcil7Y29uc3QgaT10LmdldFVpbnQ4KGUrKyk7RSs9MTYmcj9pOi1pO2MucHVzaChFKX1lbHNlIGlmKDE2JnIpYy5wdXNoKEUpO2Vsc2V7RSs9dC5nZXRJbnQxNihlKTtlKz0yO2MucHVzaChFKX1pZihhW1FdPT09aSl7USsrO2cucHVzaChjKTtjPVtdfX1FPTA7UT0wO2ZvcihsZXQgaT0wO2k8cjtpKyspe2NvbnN0IHI9b1tpXTtpZig0JnIpe2NvbnN0IGk9dC5nZXRVaW50OChlKyspO0UrPTMyJnI/aTotaTtsLnB1c2goRSl9ZWxzZSBpZigzMiZyKWwucHVzaChFKTtlbHNle0UrPXQuZ2V0SW50MTYoZSk7ZSs9MjtsLnB1c2goRSl9aC5wdXNoKDEmcnw2NCZyKTtpZihhW1FdPT09aSl7Yz1nW1FdO1ErKztDLnB1c2gobmV3IENvbnRvdXIoe2ZsYWdzOmgseENvb3JkaW5hdGVzOmMseUNvb3JkaW5hdGVzOmx9KSk7bD1bXTtoPVtdfX1yZXR1cm4gbmV3IFNpbXBsZUdseXBoKHtjb250b3VyczpDLGluc3RydWN0aW9uczpufSl9Z2V0U2l6ZSgpe2xldCBlPTIqdGhpcy5jb250b3Vycy5sZW5ndGgrMit0aGlzLmluc3RydWN0aW9ucy5sZW5ndGgsdD0wLGk9MDtmb3IoY29uc3QgYSBvZiB0aGlzLmNvbnRvdXJzKXtlKz1hLmZsYWdzLmxlbmd0aDtmb3IobGV0IHI9MCxzPWEueENvb3JkaW5hdGVzLmxlbmd0aDtyPHM7cisrKXtjb25zdCBzPWEueENvb3JkaW5hdGVzW3JdLG49YS55Q29vcmRpbmF0ZXNbcl07bGV0IG89TWF0aC5hYnMocy10KTtvPjI1NT9lKz0yOm8+MCYmKGUrPTEpO3Q9cztvPU1hdGguYWJzKG4taSk7bz4yNTU/ZSs9MjpvPjAmJihlKz0xKTtpPW59fXJldHVybiBlfXdyaXRlKGUsdCl7Y29uc3QgaT1lLGE9W10scj1bXSxzPVtdO2xldCBuPTAsbz0wO2Zvcihjb25zdCBpIG9mIHRoaXMuY29udG91cnMpe2ZvcihsZXQgZT0wLHQ9aS54Q29vcmRpbmF0ZXMubGVuZ3RoO2U8dDtlKyspe2xldCB0PWkuZmxhZ3NbZV07Y29uc3QgZz1pLnhDb29yZGluYXRlc1tlXTtsZXQgYz1nLW47aWYoMD09PWMpe3R8PTE2O2EucHVzaCgwKX1lbHNle2NvbnN0IGU9TWF0aC5hYnMoYyk7aWYoZTw9MjU1KXt0fD1jPj0wPzE4OjI7YS5wdXNoKGUpfWVsc2UgYS5wdXNoKGMpfW49Zztjb25zdCBsPWkueUNvb3JkaW5hdGVzW2VdO2M9bC1vO2lmKDA9PT1jKXt0fD0zMjtyLnB1c2goMCl9ZWxzZXtjb25zdCBlPU1hdGguYWJzKGMpO2lmKGU8PTI1NSl7dHw9Yz49MD8zNjo0O3IucHVzaChlKX1lbHNlIHIucHVzaChjKX1vPWw7cy5wdXNoKHQpfXQuc2V0VWludDE2KGUsYS5sZW5ndGgtMSk7ZSs9Mn10LnNldFVpbnQxNihlLHRoaXMuaW5zdHJ1Y3Rpb25zLmxlbmd0aCk7ZSs9MjtpZih0aGlzLmluc3RydWN0aW9ucy5sZW5ndGgpe25ldyBVaW50OEFycmF5KHQuYnVmZmVyLDAsdC5idWZmZXIuYnl0ZUxlbmd0aCkuc2V0KHRoaXMuaW5zdHJ1Y3Rpb25zLGUpO2UrPXRoaXMuaW5zdHJ1Y3Rpb25zLmxlbmd0aH1mb3IoY29uc3QgaSBvZiBzKXQuc2V0VWludDgoZSsrLGkpO2ZvcihsZXQgaT0wLHI9YS5sZW5ndGg7aTxyO2krKyl7Y29uc3Qgcj1hW2ldLG49c1tpXTtpZigyJm4pdC5zZXRVaW50OChlKysscik7ZWxzZSBpZighKDE2Jm4pKXt0LnNldEludDE2KGUscik7ZSs9Mn19Zm9yKGxldCBpPTAsYT1yLmxlbmd0aDtpPGE7aSsrKXtjb25zdCBhPXJbaV0sbj1zW2ldO2lmKDQmbil0LnNldFVpbnQ4KGUrKyxhKTtlbHNlIGlmKCEoMzImbikpe3Quc2V0SW50MTYoZSxhKTtlKz0yfX1yZXR1cm4gZS1pfXNjYWxlKGUsdCl7Zm9yKGNvbnN0IGkgb2YgdGhpcy5jb250b3VycylpZigwIT09aS54Q29vcmRpbmF0ZXMubGVuZ3RoKWZvcihsZXQgYT0wLHI9aS54Q29vcmRpbmF0ZXMubGVuZ3RoO2E8cjthKyspaS54Q29vcmRpbmF0ZXNbYV09TWF0aC5yb3VuZChlKyhpLnhDb29yZGluYXRlc1thXS1lKSp0KX19Y2xhc3MgQ29tcG9zaXRlR2x5cGh7Y29uc3RydWN0b3Ioe2ZsYWdzOmUsZ2x5cGhJbmRleDp0LGFyZ3VtZW50MTppLGFyZ3VtZW50MjphLHRyYW5zZjpyLGluc3RydWN0aW9uczpzfSl7dGhpcy5mbGFncz1lO3RoaXMuZ2x5cGhJbmRleD10O3RoaXMuYXJndW1lbnQxPWk7dGhpcy5hcmd1bWVudDI9YTt0aGlzLnRyYW5zZj1yO3RoaXMuaW5zdHJ1Y3Rpb25zPXN9c3RhdGljIHBhcnNlKGUsdCl7Y29uc3QgaT1lLGE9W107bGV0IHI9dC5nZXRVaW50MTYoZSk7Y29uc3Qgcz10LmdldFVpbnQxNihlKzIpO2UrPTQ7bGV0IG4sbztpZigxJnIpe2lmKDImcil7bj10LmdldEludDE2KGUpO289dC5nZXRJbnQxNihlKzIpfWVsc2V7bj10LmdldFVpbnQxNihlKTtvPXQuZ2V0VWludDE2KGUrMil9ZSs9NDtyXj0xfWVsc2V7aWYoMiZyKXtuPXQuZ2V0SW50OChlKTtvPXQuZ2V0SW50OChlKzEpfWVsc2V7bj10LmdldFVpbnQ4KGUpO289dC5nZXRVaW50OChlKzEpfWUrPTJ9aWYoOCZyKXthLnB1c2godC5nZXRVaW50MTYoZSkpO2UrPTJ9ZWxzZSBpZig2NCZyKXthLnB1c2godC5nZXRVaW50MTYoZSksdC5nZXRVaW50MTYoZSsyKSk7ZSs9NH1lbHNlIGlmKDEyOCZyKXthLnB1c2godC5nZXRVaW50MTYoZSksdC5nZXRVaW50MTYoZSsyKSx0LmdldFVpbnQxNihlKzQpLHQuZ2V0VWludDE2KGUrNikpO2UrPTh9bGV0IGc9bnVsbDtpZigyNTYmcil7Y29uc3QgaT10LmdldFVpbnQxNihlKTtlKz0yO2c9bmV3IFVpbnQ4QXJyYXkodCkuc2xpY2UoZSxlK2kpO2UrPWl9cmV0dXJuW2UtaSxuZXcgQ29tcG9zaXRlR2x5cGgoe2ZsYWdzOnIsZ2x5cGhJbmRleDpzLGFyZ3VtZW50MTpuLGFyZ3VtZW50MjpvLHRyYW5zZjphLGluc3RydWN0aW9uczpnfSldfWdldFNpemUoKXtsZXQgZT00KzIqdGhpcy50cmFuc2YubGVuZ3RoOzI1NiZ0aGlzLmZsYWdzJiYoZSs9Mit0aGlzLmluc3RydWN0aW9ucy5sZW5ndGgpO2UrPTI7MiZ0aGlzLmZsYWdzP3RoaXMuYXJndW1lbnQxPj0tMTI4JiZ0aGlzLmFyZ3VtZW50MTw9MTI3JiZ0aGlzLmFyZ3VtZW50Mj49LTEyOCYmdGhpcy5hcmd1bWVudDI8PTEyN3x8KGUrPTIpOnRoaXMuYXJndW1lbnQxPj0wJiZ0aGlzLmFyZ3VtZW50MTw9MjU1JiZ0aGlzLmFyZ3VtZW50Mj49MCYmdGhpcy5hcmd1bWVudDI8PTI1NXx8KGUrPTIpO3JldHVybiBlfXdyaXRlKGUsdCl7Y29uc3QgaT1lOzImdGhpcy5mbGFncz90aGlzLmFyZ3VtZW50MT49LTEyOCYmdGhpcy5hcmd1bWVudDE8PTEyNyYmdGhpcy5hcmd1bWVudDI+PS0xMjgmJnRoaXMuYXJndW1lbnQyPD0xMjd8fCh0aGlzLmZsYWdzfD0xKTp0aGlzLmFyZ3VtZW50MT49MCYmdGhpcy5hcmd1bWVudDE8PTI1NSYmdGhpcy5hcmd1bWVudDI+PTAmJnRoaXMuYXJndW1lbnQyPD0yNTV8fCh0aGlzLmZsYWdzfD0xKTt0LnNldFVpbnQxNihlLHRoaXMuZmxhZ3MpO3Quc2V0VWludDE2KGUrMix0aGlzLmdseXBoSW5kZXgpO2UrPTQ7aWYoMSZ0aGlzLmZsYWdzKXtpZigyJnRoaXMuZmxhZ3Mpe3Quc2V0SW50MTYoZSx0aGlzLmFyZ3VtZW50MSk7dC5zZXRJbnQxNihlKzIsdGhpcy5hcmd1bWVudDIpfWVsc2V7dC5zZXRVaW50MTYoZSx0aGlzLmFyZ3VtZW50MSk7dC5zZXRVaW50MTYoZSsyLHRoaXMuYXJndW1lbnQyKX1lKz00fWVsc2V7dC5zZXRVaW50OChlLHRoaXMuYXJndW1lbnQxKTt0LnNldFVpbnQ4KGUrMSx0aGlzLmFyZ3VtZW50Mik7ZSs9Mn1pZigyNTYmdGhpcy5mbGFncyl7dC5zZXRVaW50MTYoZSx0aGlzLmluc3RydWN0aW9ucy5sZW5ndGgpO2UrPTI7aWYodGhpcy5pbnN0cnVjdGlvbnMubGVuZ3RoKXtuZXcgVWludDhBcnJheSh0LmJ1ZmZlciwwLHQuYnVmZmVyLmJ5dGVMZW5ndGgpLnNldCh0aGlzLmluc3RydWN0aW9ucyxlKTtlKz10aGlzLmluc3RydWN0aW9ucy5sZW5ndGh9fXJldHVybiBlLWl9c2NhbGUoZSx0KXt9fWZ1bmN0aW9uIHdyaXRlSW50MTYoZSx0LGkpe2VbdF09aT4+OCYyNTU7ZVt0KzFdPTI1NSZpfWZ1bmN0aW9uIHdyaXRlSW50MzIoZSx0LGkpe2VbdF09aT4+MjQmMjU1O2VbdCsxXT1pPj4xNiYyNTU7ZVt0KzJdPWk+PjgmMjU1O2VbdCszXT0yNTUmaX1mdW5jdGlvbiB3cml0ZURhdGEoZSx0LGkpe2lmKGkgaW5zdGFuY2VvZiBVaW50OEFycmF5KWUuc2V0KGksdCk7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIGkpZm9yKGxldCBhPTAscj1pLmxlbmd0aDthPHI7YSsrKWVbdCsrXT0yNTUmaS5jaGFyQ29kZUF0KGEpO2Vsc2UgZm9yKGNvbnN0IGEgb2YgaSllW3QrK109MjU1JmF9Y2xhc3MgT3BlblR5cGVGaWxlQnVpbGRlcntjb25zdHJ1Y3RvcihlKXt0aGlzLnNmbnQ9ZTt0aGlzLnRhYmxlcz1PYmplY3QuY3JlYXRlKG51bGwpfXN0YXRpYyBnZXRTZWFyY2hQYXJhbXMoZSx0KXtsZXQgaT0xLGE9MDtmb3IoOyhpXmUpPmk7KXtpPDw9MTthKyt9Y29uc3Qgcj1pKnQ7cmV0dXJue3JhbmdlOnIsZW50cnk6YSxyYW5nZVNoaWZ0OnQqZS1yfX10b0FycmF5KCl7bGV0IGU9dGhpcy5zZm50O2NvbnN0IHQ9dGhpcy50YWJsZXMsaT1PYmplY3Qua2V5cyh0KTtpLnNvcnQoKTtjb25zdCBhPWkubGVuZ3RoO2xldCByLHMsbixvLGcsYz0xMisxNiphO2NvbnN0IGw9W2NdO2ZvcihyPTA7cjxhO3IrKyl7bz10W2lbcl1dO2MrPShvLmxlbmd0aCszJi00KT4+PjA7bC5wdXNoKGMpfWNvbnN0IGg9bmV3IFVpbnQ4QXJyYXkoYyk7Zm9yKHI9MDtyPGE7cisrKXtvPXRbaVtyXV07d3JpdGVEYXRhKGgsbFtyXSxvKX0idHJ1ZSI9PT1lJiYoZT1zdHJpbmczMig2NTUzNikpO2hbMF09MjU1JmUuY2hhckNvZGVBdCgwKTtoWzFdPTI1NSZlLmNoYXJDb2RlQXQoMSk7aFsyXT0yNTUmZS5jaGFyQ29kZUF0KDIpO2hbM109MjU1JmUuY2hhckNvZGVBdCgzKTt3cml0ZUludDE2KGgsNCxhKTtjb25zdCBDPU9wZW5UeXBlRmlsZUJ1aWxkZXIuZ2V0U2VhcmNoUGFyYW1zKGEsMTYpO3dyaXRlSW50MTYoaCw2LEMucmFuZ2UpO3dyaXRlSW50MTYoaCw4LEMuZW50cnkpO3dyaXRlSW50MTYoaCwxMCxDLnJhbmdlU2hpZnQpO2M9MTI7Zm9yKHI9MDtyPGE7cisrKXtnPWlbcl07aFtjXT0yNTUmZy5jaGFyQ29kZUF0KDApO2hbYysxXT0yNTUmZy5jaGFyQ29kZUF0KDEpO2hbYysyXT0yNTUmZy5jaGFyQ29kZUF0KDIpO2hbYyszXT0yNTUmZy5jaGFyQ29kZUF0KDMpO2xldCBlPTA7Zm9yKHM9bFtyXSxuPWxbcisxXTtzPG47cys9NCl7ZT1lK3JlYWRVaW50MzIoaCxzKT4+PjB9d3JpdGVJbnQzMihoLGMrNCxlKTt3cml0ZUludDMyKGgsYys4LGxbcl0pO3dyaXRlSW50MzIoaCxjKzEyLHRbZ10ubGVuZ3RoKTtjKz0xNn1yZXR1cm4gaH1hZGRUYWJsZShlLHQpe2lmKGUgaW4gdGhpcy50YWJsZXMpdGhyb3cgbmV3IEVycm9yKCJUYWJsZSAiK2UrIiBhbHJlYWR5IGV4aXN0cyIpO3RoaXMudGFibGVzW2VdPXR9fWNvbnN0IF9pPVs0XSx6aT1bNV0sJGk9WzZdLEFhPVs3XSxlYT1bOF0sdGE9WzEyLDM1XSxpYT1bMTRdLGFhPVsyMV0scmE9WzIyXSxzYT1bMzBdLG5hPVszMV07Y2xhc3MgVHlwZTFDaGFyU3RyaW5ne2NvbnN0cnVjdG9yKCl7dGhpcy53aWR0aD0wO3RoaXMubHNiPTA7dGhpcy5mbGV4aW5nPSExO3RoaXMub3V0cHV0PVtdO3RoaXMuc3RhY2s9W119Y29udmVydChlLHQsaSl7Y29uc3QgYT1lLmxlbmd0aDtsZXQgcixzLG4sbz0hMTtmb3IobGV0IGc9MDtnPGE7ZysrKXtsZXQgYT1lW2ddO2lmKGE8MzIpezEyPT09YSYmKGE9KGE8PDgpK2VbKytnXSk7c3dpdGNoKGEpe2Nhc2UgMTpjYXNlIDM6Y2FzZSA5OmNhc2UgMzA3MjpjYXNlIDMwNzM6Y2FzZSAzMDc0OmNhc2UgMzEwNTp0aGlzLnN0YWNrPVtdO2JyZWFrO2Nhc2UgNDppZih0aGlzLmZsZXhpbmcpe2lmKHRoaXMuc3RhY2subGVuZ3RoPDEpe289ITA7YnJlYWt9Y29uc3QgZT10aGlzLnN0YWNrLnBvcCgpO3RoaXMuc3RhY2sucHVzaCgwLGUpO2JyZWFrfW89dGhpcy5leGVjdXRlQ29tbWFuZCgxLF9pKTticmVhaztjYXNlIDU6bz10aGlzLmV4ZWN1dGVDb21tYW5kKDIsemkpO2JyZWFrO2Nhc2UgNjpvPXRoaXMuZXhlY3V0ZUNvbW1hbmQoMSwkaSk7YnJlYWs7Y2FzZSA3Om89dGhpcy5leGVjdXRlQ29tbWFuZCgxLEFhKTticmVhaztjYXNlIDg6bz10aGlzLmV4ZWN1dGVDb21tYW5kKDYsZWEpO2JyZWFrO2Nhc2UgMTA6aWYodGhpcy5zdGFjay5sZW5ndGg8MSl7bz0hMDticmVha31uPXRoaXMuc3RhY2sucG9wKCk7aWYoIXRbbl0pe289ITA7YnJlYWt9bz10aGlzLmNvbnZlcnQodFtuXSx0LGkpO2JyZWFrO2Nhc2UgMTE6cmV0dXJuIG87Y2FzZSAxMzppZih0aGlzLnN0YWNrLmxlbmd0aDwyKXtvPSEwO2JyZWFrfXI9dGhpcy5zdGFjay5wb3AoKTtzPXRoaXMuc3RhY2sucG9wKCk7dGhpcy5sc2I9czt0aGlzLndpZHRoPXI7dGhpcy5zdGFjay5wdXNoKHIscyk7bz10aGlzLmV4ZWN1dGVDb21tYW5kKDIscmEpO2JyZWFrO2Nhc2UgMTQ6dGhpcy5vdXRwdXQucHVzaChpYVswXSk7YnJlYWs7Y2FzZSAyMTppZih0aGlzLmZsZXhpbmcpYnJlYWs7bz10aGlzLmV4ZWN1dGVDb21tYW5kKDIsYWEpO2JyZWFrO2Nhc2UgMjI6aWYodGhpcy5mbGV4aW5nKXt0aGlzLnN0YWNrLnB1c2goMCk7YnJlYWt9bz10aGlzLmV4ZWN1dGVDb21tYW5kKDEscmEpO2JyZWFrO2Nhc2UgMzA6bz10aGlzLmV4ZWN1dGVDb21tYW5kKDQsc2EpO2JyZWFrO2Nhc2UgMzE6bz10aGlzLmV4ZWN1dGVDb21tYW5kKDQsbmEpO2JyZWFrO2Nhc2UgMzA3ODppZihpKXtjb25zdCBlPXRoaXMuc3RhY2suYXQoLTUpO3RoaXMuc2VhYz10aGlzLnN0YWNrLnNwbGljZSgtNCw0KTt0aGlzLnNlYWNbMF0rPXRoaXMubHNiLWU7bz10aGlzLmV4ZWN1dGVDb21tYW5kKDAsaWEpfWVsc2Ugbz10aGlzLmV4ZWN1dGVDb21tYW5kKDQsaWEpO2JyZWFrO2Nhc2UgMzA3OTppZih0aGlzLnN0YWNrLmxlbmd0aDw0KXtvPSEwO2JyZWFrfXRoaXMuc3RhY2sucG9wKCk7cj10aGlzLnN0YWNrLnBvcCgpO2NvbnN0IGU9dGhpcy5zdGFjay5wb3AoKTtzPXRoaXMuc3RhY2sucG9wKCk7dGhpcy5sc2I9czt0aGlzLndpZHRoPXI7dGhpcy5zdGFjay5wdXNoKHIscyxlKTtvPXRoaXMuZXhlY3V0ZUNvbW1hbmQoMyxhYSk7YnJlYWs7Y2FzZSAzMDg0OmlmKHRoaXMuc3RhY2subGVuZ3RoPDIpe289ITA7YnJlYWt9Y29uc3QgZz10aGlzLnN0YWNrLnBvcCgpLGM9dGhpcy5zdGFjay5wb3AoKTt0aGlzLnN0YWNrLnB1c2goYy9nKTticmVhaztjYXNlIDMwODg6aWYodGhpcy5zdGFjay5sZW5ndGg8Mil7bz0hMDticmVha31uPXRoaXMuc3RhY2sucG9wKCk7Y29uc3QgbD10aGlzLnN0YWNrLnBvcCgpO2lmKDA9PT1uJiYzPT09bCl7Y29uc3QgZT10aGlzLnN0YWNrLnNwbGljZSgtMTcsMTcpO3RoaXMuc3RhY2sucHVzaChlWzJdK2VbMF0sZVszXStlWzFdLGVbNF0sZVs1XSxlWzZdLGVbN10sZVs4XSxlWzldLGVbMTBdLGVbMTFdLGVbMTJdLGVbMTNdLGVbMTRdKTtvPXRoaXMuZXhlY3V0ZUNvbW1hbmQoMTMsdGEsITApO3RoaXMuZmxleGluZz0hMTt0aGlzLnN0YWNrLnB1c2goZVsxNV0sZVsxNl0pfWVsc2UgMT09PW4mJjA9PT1sJiYodGhpcy5mbGV4aW5nPSEwKTticmVhaztjYXNlIDMwODk6YnJlYWs7ZGVmYXVsdDp3YXJuKCdVbmtub3duIHR5cGUgMSBjaGFyc3RyaW5nIGNvbW1hbmQgb2YgIicrYSsnIicpfWlmKG8pYnJlYWt9ZWxzZXthPD0yNDY/YS09MTM5OmE9YTw9MjUwPzI1NiooYS0yNDcpK2VbKytnXSsxMDg6YTw9MjU0Py0yNTYqKGEtMjUxKS1lWysrZ10tMTA4OigyNTUmZVsrK2ddKTw8MjR8KDI1NSZlWysrZ10pPDwxNnwoMjU1JmVbKytnXSk8PDh8MjU1JmVbKytnXTt0aGlzLnN0YWNrLnB1c2goYSl9fXJldHVybiBvfWV4ZWN1dGVDb21tYW5kKGUsdCxpKXtjb25zdCBhPXRoaXMuc3RhY2subGVuZ3RoO2lmKGU+YSlyZXR1cm4hMDtjb25zdCByPWEtZTtmb3IobGV0IGU9cjtlPGE7ZSsrKXtsZXQgdD10aGlzLnN0YWNrW2VdO2lmKE51bWJlci5pc0ludGVnZXIodCkpdGhpcy5vdXRwdXQucHVzaCgyOCx0Pj44JjI1NSwyNTUmdCk7ZWxzZXt0PTY1NTM2KnR8MDt0aGlzLm91dHB1dC5wdXNoKDI1NSx0Pj4yNCYyNTUsdD4+MTYmMjU1LHQ+PjgmMjU1LDI1NSZ0KX19dGhpcy5vdXRwdXQucHVzaCguLi50KTtpP3RoaXMuc3RhY2suc3BsaWNlKHIsZSk6dGhpcy5zdGFjay5sZW5ndGg9MDtyZXR1cm4hMX19ZnVuY3Rpb24gaXNIZXhEaWdpdChlKXtyZXR1cm4gZT49NDgmJmU8PTU3fHxlPj02NSYmZTw9NzB8fGU+PTk3JiZlPD0xMDJ9ZnVuY3Rpb24gZGVjcnlwdChlLHQsaSl7aWYoaT49ZS5sZW5ndGgpcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO2xldCBhLHIscz0wfHQ7Zm9yKGE9MDthPGk7YSsrKXM9NTI4NDUqKGVbYV0rcykrMjI3MTkmNjU1MzU7Y29uc3Qgbj1lLmxlbmd0aC1pLG89bmV3IFVpbnQ4QXJyYXkobik7Zm9yKGE9aSxyPTA7cjxuO2ErKyxyKyspe2NvbnN0IHQ9ZVthXTtvW3JdPXRecz4+ODtzPTUyODQ1Kih0K3MpKzIyNzE5JjY1NTM1fXJldHVybiBvfWZ1bmN0aW9uIGlzU3BlY2lhbChlKXtyZXR1cm4gNDc9PT1lfHw5MT09PWV8fDkzPT09ZXx8MTIzPT09ZXx8MTI1PT09ZXx8NDA9PT1lfHw0MT09PWV9Y2xhc3MgVHlwZTFQYXJzZXJ7Y29uc3RydWN0b3IoZSx0LGkpe2lmKHQpe2NvbnN0IHQ9ZS5nZXRCeXRlcygpLGk9ISgoaXNIZXhEaWdpdCh0WzBdKXx8aXNXaGl0ZVNwYWNlKHRbMF0pKSYmaXNIZXhEaWdpdCh0WzFdKSYmaXNIZXhEaWdpdCh0WzJdKSYmaXNIZXhEaWdpdCh0WzNdKSYmaXNIZXhEaWdpdCh0WzRdKSYmaXNIZXhEaWdpdCh0WzVdKSYmaXNIZXhEaWdpdCh0WzZdKSYmaXNIZXhEaWdpdCh0WzddKSk7ZT1uZXcgU3RyZWFtKGk/ZGVjcnlwdCh0LDU1NjY1LDQpOmZ1bmN0aW9uIGRlY3J5cHRBc2NpaShlLHQsaSl7bGV0IGE9MHx0O2NvbnN0IHI9ZS5sZW5ndGgscz1uZXcgVWludDhBcnJheShyPj4+MSk7bGV0IG4sbztmb3Iobj0wLG89MDtuPHI7bisrKXtjb25zdCB0PWVbbl07aWYoIWlzSGV4RGlnaXQodCkpY29udGludWU7bisrO2xldCBpO2Zvcig7bjxyJiYhaXNIZXhEaWdpdChpPWVbbl0pOyluKys7aWYobjxyKXtjb25zdCBlPXBhcnNlSW50KFN0cmluZy5mcm9tQ2hhckNvZGUodCxpKSwxNik7c1tvKytdPWVeYT4+ODthPTUyODQ1KihlK2EpKzIyNzE5JjY1NTM1fX1yZXR1cm4gcy5zbGljZShpLG8pfSh0LDU1NjY1LDQpKX10aGlzLnNlYWNBbmFseXNpc0VuYWJsZWQ9ISFpO3RoaXMuc3RyZWFtPWU7dGhpcy5uZXh0Q2hhcigpfXJlYWROdW1iZXJBcnJheSgpe3RoaXMuZ2V0VG9rZW4oKTtjb25zdCBlPVtdO2Zvcig7Oyl7Y29uc3QgdD10aGlzLmdldFRva2VuKCk7aWYobnVsbD09PXR8fCJdIj09PXR8fCJ9Ij09PXQpYnJlYWs7ZS5wdXNoKHBhcnNlRmxvYXQodHx8MCkpfXJldHVybiBlfXJlYWROdW1iZXIoKXtjb25zdCBlPXRoaXMuZ2V0VG9rZW4oKTtyZXR1cm4gcGFyc2VGbG9hdChlfHwwKX1yZWFkSW50KCl7Y29uc3QgZT10aGlzLmdldFRva2VuKCk7cmV0dXJuIDB8cGFyc2VJbnQoZXx8MCwxMCl9cmVhZEJvb2xlYW4oKXtyZXR1cm4idHJ1ZSI9PT10aGlzLmdldFRva2VuKCk/MTowfW5leHRDaGFyKCl7cmV0dXJuIHRoaXMuY3VycmVudENoYXI9dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpfXByZXZDaGFyKCl7dGhpcy5zdHJlYW0uc2tpcCgtMik7cmV0dXJuIHRoaXMuY3VycmVudENoYXI9dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpfWdldFRva2VuKCl7bGV0IGU9ITEsdD10aGlzLmN1cnJlbnRDaGFyO2Zvcig7Oyl7aWYoLTE9PT10KXJldHVybiBudWxsO2lmKGUpMTAhPT10JiYxMyE9PXR8fChlPSExKTtlbHNlIGlmKDM3PT09dCllPSEwO2Vsc2UgaWYoIWlzV2hpdGVTcGFjZSh0KSlicmVhazt0PXRoaXMubmV4dENoYXIoKX1pZihpc1NwZWNpYWwodCkpe3RoaXMubmV4dENoYXIoKTtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSh0KX1sZXQgaT0iIjtkb3tpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpO3Q9dGhpcy5uZXh0Q2hhcigpfXdoaWxlKHQ+PTAmJiFpc1doaXRlU3BhY2UodCkmJiFpc1NwZWNpYWwodCkpO3JldHVybiBpfXJlYWRDaGFyU3RyaW5ncyhlLHQpe3JldHVybi0xPT09dD9lOmRlY3J5cHQoZSw0MzMwLHQpfWV4dHJhY3RGb250UHJvZ3JhbShlKXtjb25zdCB0PXRoaXMuc3RyZWFtLGk9W10sYT1bXSxyPU9iamVjdC5jcmVhdGUobnVsbCk7ci5sZW5JVj00O2NvbnN0IHM9e3N1YnJzOltdLGNoYXJzdHJpbmdzOltdLHByb3BlcnRpZXM6e3ByaXZhdGVEYXRhOnJ9fTtsZXQgbixvLGcsYztmb3IoO251bGwhPT0obj10aGlzLmdldFRva2VuKCkpOylpZigiLyI9PT1uKXtuPXRoaXMuZ2V0VG9rZW4oKTtzd2l0Y2gobil7Y2FzZSJDaGFyU3RyaW5ncyI6dGhpcy5nZXRUb2tlbigpO3RoaXMuZ2V0VG9rZW4oKTt0aGlzLmdldFRva2VuKCk7dGhpcy5nZXRUb2tlbigpO2Zvcig7Oyl7bj10aGlzLmdldFRva2VuKCk7aWYobnVsbD09PW58fCJlbmQiPT09bilicmVhaztpZigiLyIhPT1uKWNvbnRpbnVlO2NvbnN0IGU9dGhpcy5nZXRUb2tlbigpO289dGhpcy5yZWFkSW50KCk7dGhpcy5nZXRUb2tlbigpO2c9bz4wP3QuZ2V0Qnl0ZXMobyk6bmV3IFVpbnQ4QXJyYXkoMCk7Yz1zLnByb3BlcnRpZXMucHJpdmF0ZURhdGEubGVuSVY7Y29uc3QgaT10aGlzLnJlYWRDaGFyU3RyaW5ncyhnLGMpO3RoaXMubmV4dENoYXIoKTtuPXRoaXMuZ2V0VG9rZW4oKTsibm9hY2Nlc3MiPT09bj90aGlzLmdldFRva2VuKCk6Ii8iPT09biYmdGhpcy5wcmV2Q2hhcigpO2EucHVzaCh7Z2x5cGg6ZSxlbmNvZGVkOml9KX1icmVhaztjYXNlIlN1YnJzIjp0aGlzLnJlYWRJbnQoKTt0aGlzLmdldFRva2VuKCk7Zm9yKDsiZHVwIj09PXRoaXMuZ2V0VG9rZW4oKTspe2NvbnN0IGU9dGhpcy5yZWFkSW50KCk7bz10aGlzLnJlYWRJbnQoKTt0aGlzLmdldFRva2VuKCk7Zz1vPjA/dC5nZXRCeXRlcyhvKTpuZXcgVWludDhBcnJheSgwKTtjPXMucHJvcGVydGllcy5wcml2YXRlRGF0YS5sZW5JVjtjb25zdCBhPXRoaXMucmVhZENoYXJTdHJpbmdzKGcsYyk7dGhpcy5uZXh0Q2hhcigpO249dGhpcy5nZXRUb2tlbigpOyJub2FjY2VzcyI9PT1uJiZ0aGlzLmdldFRva2VuKCk7aVtlXT1hfWJyZWFrO2Nhc2UiQmx1ZVZhbHVlcyI6Y2FzZSJPdGhlckJsdWVzIjpjYXNlIkZhbWlseUJsdWVzIjpjYXNlIkZhbWlseU90aGVyQmx1ZXMiOmNvbnN0IGU9dGhpcy5yZWFkTnVtYmVyQXJyYXkoKTtlLmxlbmd0aD4wJiZlLmxlbmd0aCwwO2JyZWFrO2Nhc2UiU3RlbVNuYXBIIjpjYXNlIlN0ZW1TbmFwViI6cy5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhW25dPXRoaXMucmVhZE51bWJlckFycmF5KCk7YnJlYWs7Y2FzZSJTdGRIVyI6Y2FzZSJTdGRWVyI6cy5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhW25dPXRoaXMucmVhZE51bWJlckFycmF5KClbMF07YnJlYWs7Y2FzZSJCbHVlU2hpZnQiOmNhc2UibGVuSVYiOmNhc2UiQmx1ZUZ1enoiOmNhc2UiQmx1ZVNjYWxlIjpjYXNlIkxhbmd1YWdlR3JvdXAiOnMucHJvcGVydGllcy5wcml2YXRlRGF0YVtuXT10aGlzLnJlYWROdW1iZXIoKTticmVhaztjYXNlIkV4cGFuc2lvbkZhY3RvciI6cy5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhW25dPXRoaXMucmVhZE51bWJlcigpfHwuMDY7YnJlYWs7Y2FzZSJGb3JjZUJvbGQiOnMucHJvcGVydGllcy5wcml2YXRlRGF0YVtuXT10aGlzLnJlYWRCb29sZWFuKCl9fWZvcihjb25zdHtlbmNvZGVkOnQsZ2x5cGg6cn1vZiBhKXtjb25zdCBhPW5ldyBUeXBlMUNoYXJTdHJpbmcsbj1hLmNvbnZlcnQodCxpLHRoaXMuc2VhY0FuYWx5c2lzRW5hYmxlZCk7bGV0IG89YS5vdXRwdXQ7biYmKG89WzE0XSk7Y29uc3QgZz17Z2x5cGhOYW1lOnIsY2hhcnN0cmluZzpvLHdpZHRoOmEud2lkdGgsbHNiOmEubHNiLHNlYWM6YS5zZWFjfTsiLm5vdGRlZiI9PT1yP3MuY2hhcnN0cmluZ3MudW5zaGlmdChnKTpzLmNoYXJzdHJpbmdzLnB1c2goZyk7aWYoZS5idWlsdEluRW5jb2Rpbmcpe2NvbnN0IHQ9ZS5idWlsdEluRW5jb2RpbmcuaW5kZXhPZihyKTt0Pi0xJiZ2b2lkIDA9PT1lLndpZHRoc1t0XSYmdD49ZS5maXJzdENoYXImJnQ8PWUubGFzdENoYXImJihlLndpZHRoc1t0XT1hLndpZHRoKX19cmV0dXJuIHN9ZXh0cmFjdEZvbnRIZWFkZXIoZSl7bGV0IHQ7Zm9yKDtudWxsIT09KHQ9dGhpcy5nZXRUb2tlbigpKTspaWYoIi8iPT09dCl7dD10aGlzLmdldFRva2VuKCk7c3dpdGNoKHQpe2Nhc2UiRm9udE1hdHJpeCI6Y29uc3QgaT10aGlzLnJlYWROdW1iZXJBcnJheSgpO2UuZm9udE1hdHJpeD1pO2JyZWFrO2Nhc2UiRW5jb2RpbmciOmNvbnN0IGE9dGhpcy5nZXRUb2tlbigpO2xldCByO2lmKC9eXGQrJC8udGVzdChhKSl7cj1bXTtjb25zdCBlPTB8cGFyc2VJbnQoYSwxMCk7dGhpcy5nZXRUb2tlbigpO2ZvcihsZXQgaT0wO2k8ZTtpKyspe3Q9dGhpcy5nZXRUb2tlbigpO2Zvcig7ImR1cCIhPT10JiYiZGVmIiE9PXQ7KXt0PXRoaXMuZ2V0VG9rZW4oKTtpZihudWxsPT09dClyZXR1cm59aWYoImRlZiI9PT10KWJyZWFrO2NvbnN0IGU9dGhpcy5yZWFkSW50KCk7dGhpcy5nZXRUb2tlbigpO2NvbnN0IGk9dGhpcy5nZXRUb2tlbigpO3JbZV09aTt0aGlzLmdldFRva2VuKCl9fWVsc2Ugcj1nZXRFbmNvZGluZyhhKTtlLmJ1aWx0SW5FbmNvZGluZz1yO2JyZWFrO2Nhc2UiRm9udEJCb3giOmNvbnN0IHM9dGhpcy5yZWFkTnVtYmVyQXJyYXkoKTtlLmFzY2VudD1NYXRoLm1heChzWzNdLHNbMV0pO2UuZGVzY2VudD1NYXRoLm1pbihzWzFdLHNbM10pO2UuYXNjZW50U2NhbGVkPSEwfX19fWZ1bmN0aW9uIGZpbmRCbG9jayhlLHQsaSl7Y29uc3QgYT1lLmxlbmd0aCxyPXQubGVuZ3RoLHM9YS1yO2xldCBuPWksbz0hMTtmb3IoO248czspe2xldCBpPTA7Zm9yKDtpPHImJmVbbitpXT09PXRbaV07KWkrKztpZihpPj1yKXtuKz1pO2Zvcig7bjxhJiZpc1doaXRlU3BhY2UoZVtuXSk7KW4rKztvPSEwO2JyZWFrfW4rK31yZXR1cm57Zm91bmQ6byxsZW5ndGg6bn19Y2xhc3MgVHlwZTFGb250e2NvbnN0cnVjdG9yKGUsdCxpKXtsZXQgYT1pLmxlbmd0aDEscj1pLmxlbmd0aDIscz10LnBlZWtCeXRlcyg2KTtjb25zdCBuPTEyOD09PXNbMF0mJjE9PT1zWzFdO2lmKG4pe3Quc2tpcCg2KTthPXNbNV08PDI0fHNbNF08PDE2fHNbM108PDh8c1syXX1jb25zdCBvPWZ1bmN0aW9uIGdldEhlYWRlckJsb2NrKGUsdCl7Y29uc3QgaT1bMTAxLDEwMSwxMjAsMTAxLDk5XSxhPWUucG9zO2xldCByLHMsbixvO3RyeXtyPWUuZ2V0Qnl0ZXModCk7cz1yLmxlbmd0aH1jYXRjaHt9aWYocz09PXQpe249ZmluZEJsb2NrKHIsaSx0LTIqaS5sZW5ndGgpO2lmKG4uZm91bmQmJm4ubGVuZ3RoPT09dClyZXR1cm57c3RyZWFtOm5ldyBTdHJlYW0ociksbGVuZ3RoOnR9fXdhcm4oJ0ludmFsaWQgIkxlbmd0aDEiIHByb3BlcnR5IGluIFR5cGUxIGZvbnQgLS0gdHJ5aW5nIHRvIHJlY292ZXIuJyk7ZS5wb3M9YTtmb3IoOzspe249ZmluZEJsb2NrKGUucGVla0J5dGVzKDIwNDgpLGksMCk7aWYoMD09PW4ubGVuZ3RoKWJyZWFrO2UucG9zKz1uLmxlbmd0aDtpZihuLmZvdW5kKXtvPWUucG9zLWE7YnJlYWt9fWUucG9zPWE7aWYobylyZXR1cm57c3RyZWFtOm5ldyBTdHJlYW0oZS5nZXRCeXRlcyhvKSksbGVuZ3RoOm99O3dhcm4oJ1VuYWJsZSB0byByZWNvdmVyICJMZW5ndGgxIiBwcm9wZXJ0eSBpbiBUeXBlMSBmb250IC0tIHVzaW5nIGFzIGlzLicpO3JldHVybntzdHJlYW06bmV3IFN0cmVhbShlLmdldEJ5dGVzKHQpKSxsZW5ndGg6dH19KHQsYSk7bmV3IFR5cGUxUGFyc2VyKG8uc3RyZWFtLCExLEdpKS5leHRyYWN0Rm9udEhlYWRlcihpKTtpZihuKXtzPXQuZ2V0Qnl0ZXMoNik7cj1zWzVdPDwyNHxzWzRdPDwxNnxzWzNdPDw4fHNbMl19Y29uc3QgZz1mdW5jdGlvbiBnZXRFZXhlY0Jsb2NrKGUsdCl7Y29uc3QgaT1lLmdldEJ5dGVzKCk7aWYoMD09PWkubGVuZ3RoKXRocm93IG5ldyBGb3JtYXRFcnJvcigiZ2V0RWV4ZWNCbG9jayAtIG5vIGZvbnQgcHJvZ3JhbSBmb3VuZC4iKTtyZXR1cm57c3RyZWFtOm5ldyBTdHJlYW0oaSksbGVuZ3RoOmkubGVuZ3RofX0odCksYz1uZXcgVHlwZTFQYXJzZXIoZy5zdHJlYW0sITAsR2kpLmV4dHJhY3RGb250UHJvZ3JhbShpKTtmb3IoY29uc3QgZSBpbiBjLnByb3BlcnRpZXMpaVtlXT1jLnByb3BlcnRpZXNbZV07Y29uc3QgbD1jLmNoYXJzdHJpbmdzLGg9dGhpcy5nZXRUeXBlMkNoYXJzdHJpbmdzKGwpLEM9dGhpcy5nZXRUeXBlMlN1YnJzKGMuc3VicnMpO3RoaXMuY2hhcnN0cmluZ3M9bDt0aGlzLmRhdGE9dGhpcy53cmFwKGUsaCx0aGlzLmNoYXJzdHJpbmdzLEMsaSk7dGhpcy5zZWFjcz10aGlzLmdldFNlYWNzKGMuY2hhcnN0cmluZ3MpfWdldCBudW1HbHlwaHMoKXtyZXR1cm4gdGhpcy5jaGFyc3RyaW5ncy5sZW5ndGgrMX1nZXRDaGFyc2V0KCl7Y29uc3QgZT1bIi5ub3RkZWYiXTtmb3IoY29uc3R7Z2x5cGhOYW1lOnR9b2YgdGhpcy5jaGFyc3RyaW5ncyllLnB1c2godCk7cmV0dXJuIGV9Z2V0R2x5cGhNYXBwaW5nKGUpe2NvbnN0IHQ9dGhpcy5jaGFyc3RyaW5ncztpZihlLmNvbXBvc2l0ZSl7Y29uc3QgaT1PYmplY3QuY3JlYXRlKG51bGwpO2ZvcihsZXQgYT0wLHI9dC5sZW5ndGg7YTxyO2ErKyl7aVtlLmNNYXAuY2hhckNvZGVPZihhKV09YSsxfXJldHVybiBpfWNvbnN0IGk9WyIubm90ZGVmIl07bGV0IGEscjtmb3Iocj0wO3I8dC5sZW5ndGg7cisrKWkucHVzaCh0W3JdLmdseXBoTmFtZSk7Y29uc3Qgcz1lLmJ1aWx0SW5FbmNvZGluZztpZihzKXthPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKGNvbnN0IGUgaW4gcyl7cj1pLmluZGV4T2Yoc1tlXSk7cj49MCYmKGFbZV09cil9fXJldHVybiB0eXBlMUZvbnRHbHlwaE1hcHBpbmcoZSxhLGkpfWhhc0dseXBoSWQoZSl7aWYoZTwwfHxlPj10aGlzLm51bUdseXBocylyZXR1cm4hMTtpZigwPT09ZSlyZXR1cm4hMDtyZXR1cm4gdGhpcy5jaGFyc3RyaW5nc1tlLTFdLmNoYXJzdHJpbmcubGVuZ3RoPjB9Z2V0U2VhY3MoZSl7Y29uc3QgdD1bXTtmb3IobGV0IGk9MCxhPWUubGVuZ3RoO2k8YTtpKyspe2NvbnN0IGE9ZVtpXTthLnNlYWMmJih0W2krMV09YS5zZWFjKX1yZXR1cm4gdH1nZXRUeXBlMkNoYXJzdHJpbmdzKGUpe2NvbnN0IHQ9W107Zm9yKGNvbnN0IGkgb2YgZSl0LnB1c2goaS5jaGFyc3RyaW5nKTtyZXR1cm4gdH1nZXRUeXBlMlN1YnJzKGUpe2xldCB0PTA7Y29uc3QgaT1lLmxlbmd0aDt0PWk8MTEzMz8xMDc6aTwzMzc2OT8xMTMxOjMyNzY4O2NvbnN0IGE9W107bGV0IHI7Zm9yKHI9MDtyPHQ7cisrKWEucHVzaChbMTFdKTtmb3Iocj0wO3I8aTtyKyspYS5wdXNoKGVbcl0pO3JldHVybiBhfXdyYXAoZSx0LGksYSxyKXtjb25zdCBzPW5ldyBDRkY7cy5oZWFkZXI9bmV3IENGRkhlYWRlcigxLDAsNCw0KTtzLm5hbWVzPVtlXTtjb25zdCBuPW5ldyBDRkZUb3BEaWN0O24uc2V0QnlOYW1lKCJ2ZXJzaW9uIiwzOTEpO24uc2V0QnlOYW1lKCJOb3RpY2UiLDM5Mik7bi5zZXRCeU5hbWUoIkZ1bGxOYW1lIiwzOTMpO24uc2V0QnlOYW1lKCJGYW1pbHlOYW1lIiwzOTQpO24uc2V0QnlOYW1lKCJXZWlnaHQiLDM5NSk7bi5zZXRCeU5hbWUoIkVuY29kaW5nIixudWxsKTtuLnNldEJ5TmFtZSgiRm9udE1hdHJpeCIsci5mb250TWF0cml4KTtuLnNldEJ5TmFtZSgiRm9udEJCb3giLHIuYmJveCk7bi5zZXRCeU5hbWUoImNoYXJzZXQiLG51bGwpO24uc2V0QnlOYW1lKCJDaGFyU3RyaW5ncyIsbnVsbCk7bi5zZXRCeU5hbWUoIlByaXZhdGUiLG51bGwpO3MudG9wRGljdD1uO2NvbnN0IG89bmV3IENGRlN0cmluZ3M7by5hZGQoIlZlcnNpb24gMC4xMSIpO28uYWRkKCJTZWUgb3JpZ2luYWwgbm90aWNlIik7by5hZGQoZSk7by5hZGQoZSk7by5hZGQoIk1lZGl1bSIpO3Muc3RyaW5ncz1vO3MuZ2xvYmFsU3VickluZGV4PW5ldyBDRkZJbmRleDtjb25zdCBnPXQubGVuZ3RoLGM9WyIubm90ZGVmIl07bGV0IGwsaDtmb3IobD0wO2w8ZztsKyspe2NvbnN0IGU9aVtsXS5nbHlwaE5hbWU7LTE9PT1kaS5pbmRleE9mKGUpJiZvLmFkZChlKTtjLnB1c2goZSl9cy5jaGFyc2V0PW5ldyBDRkZDaGFyc2V0KCExLDAsYyk7Y29uc3QgQz1uZXcgQ0ZGSW5kZXg7Qy5hZGQoWzEzOSwxNF0pO2ZvcihsPTA7bDxnO2wrKylDLmFkZCh0W2xdKTtzLmNoYXJTdHJpbmdzPUM7Y29uc3QgUT1uZXcgQ0ZGUHJpdmF0ZURpY3Q7US5zZXRCeU5hbWUoIlN1YnJzIixudWxsKTtjb25zdCBFPVsiQmx1ZVZhbHVlcyIsIk90aGVyQmx1ZXMiLCJGYW1pbHlCbHVlcyIsIkZhbWlseU90aGVyQmx1ZXMiLCJTdGVtU25hcEgiLCJTdGVtU25hcFYiLCJCbHVlU2hpZnQiLCJCbHVlRnV6eiIsIkJsdWVTY2FsZSIsIkxhbmd1YWdlR3JvdXAiLCJFeHBhbnNpb25GYWN0b3IiLCJGb3JjZUJvbGQiLCJTdGRIVyIsIlN0ZFZXIl07Zm9yKGw9MCxoPUUubGVuZ3RoO2w8aDtsKyspe2NvbnN0IGU9RVtsXTtpZighKGUgaW4gci5wcml2YXRlRGF0YSkpY29udGludWU7Y29uc3QgdD1yLnByaXZhdGVEYXRhW2VdO2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKGxldCBlPXQubGVuZ3RoLTE7ZT4wO2UtLSl0W2VdLT10W2UtMV07US5zZXRCeU5hbWUoZSx0KX1zLnRvcERpY3QucHJpdmF0ZURpY3Q9UTtjb25zdCB1PW5ldyBDRkZJbmRleDtmb3IobD0wLGg9YS5sZW5ndGg7bDxoO2wrKyl1LmFkZChhW2xdKTtRLnN1YnJzSW5kZXg9dTtyZXR1cm4gbmV3IENGRkNvbXBpbGVyKHMpLmNvbXBpbGUoKX19Y29uc3Qgb2E9W1s1NzM0NCw2Mzc0M10sWzEwNDg1NzYsMTExNDEwOV1dLGdhPTFlMyxJYT1bImFzY2VudCIsImJib3giLCJibGFjayIsImJvbGQiLCJjaGFyUHJvY09wZXJhdG9yTGlzdCIsImNvbXBvc2l0ZSIsImNzc0ZvbnRJbmZvIiwiZGF0YSIsImRlZmF1bHRWTWV0cmljcyIsImRlZmF1bHRXaWR0aCIsImRlc2NlbnQiLCJmYWxsYmFja05hbWUiLCJmb250TWF0cml4IiwiaXNJbnZhbGlkUERGanNGb250IiwiaXNUeXBlM0ZvbnQiLCJpdGFsaWMiLCJsb2FkZWROYW1lIiwibWltZXR5cGUiLCJtaXNzaW5nRmlsZSIsIm5hbWUiLCJyZW1lYXN1cmUiLCJzdWJ0eXBlIiwic3lzdGVtRm9udEluZm8iLCJ0eXBlIiwidmVydGljYWwiXSxjYT1bImNNYXAiLCJkZWZhdWx0RW5jb2RpbmciLCJkaWZmZXJlbmNlcyIsImlzTW9ub3NwYWNlIiwiaXNTZXJpZkZvbnQiLCJpc1N5bWJvbGljRm9udCIsInNlYWNNYXAiLCJ0b0ZvbnRDaGFyIiwidG9Vbmljb2RlIiwidm1ldHJpY3MiLCJ3aWR0aHMiXTtmdW5jdGlvbiBhZGp1c3RXaWR0aHMoZSl7aWYoIWUuZm9udE1hdHJpeClyZXR1cm47aWYoZS5mb250TWF0cml4WzBdPT09clswXSlyZXR1cm47Y29uc3QgdD0uMDAxL2UuZm9udE1hdHJpeFswXSxpPWUud2lkdGhzO2Zvcihjb25zdCBlIGluIGkpaVtlXSo9dDtlLmRlZmF1bHRXaWR0aCo9dH1mdW5jdGlvbiBhbWVuZEZhbGxiYWNrVG9Vbmljb2RlKGUpe2lmKCFlLmZhbGxiYWNrVG9Vbmljb2RlKXJldHVybjtpZihlLnRvVW5pY29kZSBpbnN0YW5jZW9mIElkZW50aXR5VG9Vbmljb2RlTWFwKXJldHVybjtjb25zdCB0PVtdO2Zvcihjb25zdCBpIGluIGUuZmFsbGJhY2tUb1VuaWNvZGUpZS50b1VuaWNvZGUuaGFzKGkpfHwodFtpXT1lLmZhbGxiYWNrVG9Vbmljb2RlW2ldKTt0Lmxlbmd0aD4wJiZlLnRvVW5pY29kZS5hbWVuZCh0KX1jbGFzcyBmb250c19HbHlwaHtjb25zdHJ1Y3RvcihlLHQsaSxhLHIscyxuLG8sZyl7dGhpcy5vcmlnaW5hbENoYXJDb2RlPWU7dGhpcy5mb250Q2hhcj10O3RoaXMudW5pY29kZT1pO3RoaXMuYWNjZW50PWE7dGhpcy53aWR0aD1yO3RoaXMudm1ldHJpYz1zO3RoaXMub3BlcmF0b3JMaXN0SWQ9bjt0aGlzLmlzU3BhY2U9bzt0aGlzLmlzSW5Gb250PWd9Z2V0IGNhdGVnb3J5KCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJjYXRlZ29yeSIsZnVuY3Rpb24gZ2V0Q2hhclVuaWNvZGVDYXRlZ29yeShlKXtjb25zdCB0PU5pLmdldChlKTtpZih0KXJldHVybiB0O2NvbnN0IGk9ZS5tYXRjaChSaSksYT17aXNXaGl0ZXNwYWNlOiEhaT8uWzFdLGlzWmVyb1dpZHRoRGlhY3JpdGljOiEhaT8uWzJdLGlzSW52aXNpYmxlRm9ybWF0TWFyazohIWk/LlszXX07Tmkuc2V0KGUsYSk7cmV0dXJuIGF9KHRoaXMudW5pY29kZSksITApfX1mdW5jdGlvbiBpbnQxNihlLHQpe3JldHVybihlPDw4KSt0fWZ1bmN0aW9uIHdyaXRlU2lnbmVkSW50MTYoZSx0LGkpe2VbdCsxXT1pO2VbdF09aT4+Pjh9ZnVuY3Rpb24gc2lnbmVkSW50MTYoZSx0KXtjb25zdCBpPShlPDw4KSt0O3JldHVybiAzMjc2OCZpP2ktNjU1MzY6aX1mdW5jdGlvbiBzdHJpbmcxNihlKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShlPj44JjI1NSwyNTUmZSl9ZnVuY3Rpb24gc2FmZVN0cmluZzE2KGUpe2U+MzI3Njc/ZT0zMjc2NzplPC0zMjc2OCYmKGU9LTMyNzY4KTtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShlPj44JjI1NSwyNTUmZSl9ZnVuY3Rpb24gaXNUcnVlVHlwZUNvbGxlY3Rpb25GaWxlKGUpe3JldHVybiJ0dGNmIj09PWJ5dGVzVG9TdHJpbmcoZS5wZWVrQnl0ZXMoNCkpfWZ1bmN0aW9uIGdldEZvbnRGaWxlVHlwZShlLHt0eXBlOnQsc3VidHlwZTppLGNvbXBvc2l0ZTphfSl7bGV0IHIscztpZihmdW5jdGlvbiBpc1RydWVUeXBlRmlsZShlKXtjb25zdCB0PWUucGVla0J5dGVzKDQpO3JldHVybiA2NTUzNj09PXJlYWRVaW50MzIodCwwKXx8InRydWUiPT09Ynl0ZXNUb1N0cmluZyh0KX0oZSl8fGlzVHJ1ZVR5cGVDb2xsZWN0aW9uRmlsZShlKSlyPWE/IkNJREZvbnRUeXBlMiI6IlRydWVUeXBlIjtlbHNlIGlmKGZ1bmN0aW9uIGlzT3BlblR5cGVGaWxlKGUpe3JldHVybiJPVFRPIj09PWJ5dGVzVG9TdHJpbmcoZS5wZWVrQnl0ZXMoNCkpfShlKSlyPWE/IkNJREZvbnRUeXBlMiI6Ik9wZW5UeXBlIjtlbHNlIGlmKGZ1bmN0aW9uIGlzVHlwZTFGaWxlKGUpe2NvbnN0IHQ9ZS5wZWVrQnl0ZXMoMik7cmV0dXJuIDM3PT09dFswXSYmMzM9PT10WzFdfHwxMjg9PT10WzBdJiYxPT09dFsxXX0oZSkpcj1hPyJDSURGb250VHlwZTAiOiJNTVR5cGUxIj09PXQ/Ik1NVHlwZTEiOiJUeXBlMSI7ZWxzZSBpZihmdW5jdGlvbiBpc0NGRkZpbGUoZSl7Y29uc3QgdD1lLnBlZWtCeXRlcyg0KTtyZXR1cm4gdFswXT49MSYmdFszXT49MSYmdFszXTw9NH0oZSkpaWYoYSl7cj0iQ0lERm9udFR5cGUwIjtzPSJDSURGb250VHlwZTBDIn1lbHNle3I9Ik1NVHlwZTEiPT09dD8iTU1UeXBlMSI6IlR5cGUxIjtzPSJUeXBlMUMifWVsc2V7d2FybigiZ2V0Rm9udEZpbGVUeXBlOiBVbmFibGUgdG8gZGV0ZWN0IGNvcnJlY3QgZm9udCBmaWxlIFR5cGUvU3VidHlwZS4iKTtyPXQ7cz1pfXJldHVybltyLHNdfWZ1bmN0aW9uIGFwcGx5U3RhbmRhcmRGb250R2x5cGhNYXAoZSx0KXtmb3IoY29uc3QgaSBpbiB0KWVbK2ldPXRbaV19ZnVuY3Rpb24gYnVpbGRUb0ZvbnRDaGFyKGUsdCxpKXtjb25zdCBhPVtdO2xldCByO2ZvcihsZXQgaT0wLHM9ZS5sZW5ndGg7aTxzO2krKyl7cj1nZXRVbmljb2RlRm9yR2x5cGgoZVtpXSx0KTstMSE9PXImJihhW2ldPXIpfWZvcihjb25zdCBlIGluIGkpe3I9Z2V0VW5pY29kZUZvckdseXBoKGlbZV0sdCk7LTEhPT1yJiYoYVsrZV09cil9cmV0dXJuIGF9ZnVuY3Rpb24gaXNNYWNOYW1lUmVjb3JkKGUpe3JldHVybiAxPT09ZS5wbGF0Zm9ybSYmMD09PWUuZW5jb2RpbmcmJjA9PT1lLmxhbmd1YWdlfWZ1bmN0aW9uIGlzV2luTmFtZVJlY29yZChlKXtyZXR1cm4gMz09PWUucGxhdGZvcm0mJjE9PT1lLmVuY29kaW5nJiYxMDMzPT09ZS5sYW5ndWFnZX1mdW5jdGlvbiBjb252ZXJ0Q2lkU3RyaW5nKGUsdCxpPSExKXtzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMTpyZXR1cm4gdC5jaGFyQ29kZUF0KDApO2Nhc2UgMjpyZXR1cm4gdC5jaGFyQ29kZUF0KDApPDw4fHQuY2hhckNvZGVBdCgxKX1jb25zdCBhPWBVbnN1cHBvcnRlZCBDSUQgc3RyaW5nIChjaGFyQ29kZSAke2V9KTogIiR7dH0iLmA7aWYoaSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYSk7d2FybihhKTtyZXR1cm4gdH1mdW5jdGlvbiBhZGp1c3RNYXBwaW5nKGUsdCxpLGEpe2NvbnN0IHI9T2JqZWN0LmNyZWF0ZShudWxsKSxzPW5ldyBNYXAsbj1bXSxvPW5ldyBTZXQ7bGV0IGc9MDtsZXQgYz1vYVtnXVswXSxsPW9hW2ddWzFdO2Zvcihjb25zdCBDIGluIGUpe2xldCBRPWVbQ107aWYoIXQoUSkpY29udGludWU7aWYoYz5sKXtnKys7aWYoZz49b2EubGVuZ3RoKXt3YXJuKCJSYW4gb3V0IG9mIHNwYWNlIGluIGZvbnQgcHJpdmF0ZSB1c2UgYXJlYS4iKTticmVha31jPW9hW2ddWzBdO2w9b2FbZ11bMV19Y29uc3QgRT1jKys7MD09PVEmJihRPWkpO2xldCB1PWEuZ2V0KEMpOyJzdHJpbmciPT10eXBlb2YgdSYmKHU9dS5jb2RlUG9pbnRBdCgwKSk7aWYodSYmIShoPXUsb2FbMF1bMF08PWgmJmg8PW9hWzBdWzFdfHxvYVsxXVswXTw9aCYmaDw9b2FbMV1bMV0pJiYhby5oYXMoUSkpe3Muc2V0KHUsUSk7by5hZGQoUSl9cltFXT1RO25bQ109RX12YXIgaDtyZXR1cm57dG9Gb250Q2hhcjpuLGNoYXJDb2RlVG9HbHlwaElkOnIsdG9Vbmljb2RlRXh0cmFNYXA6cyxuZXh0QXZhaWxhYmxlRm9udENoYXJDb2RlOmN9fWZ1bmN0aW9uIGNyZWF0ZUNtYXBUYWJsZShlLHQsaSl7Y29uc3QgYT1mdW5jdGlvbiBnZXRSYW5nZXMoZSx0LGkpe2NvbnN0IGE9W107Zm9yKGNvbnN0IHQgaW4gZSllW3RdPj1pfHxhLnB1c2goe2ZvbnRDaGFyQ29kZTowfHQsZ2x5cGhJZDplW3RdfSk7aWYodClmb3IoY29uc3RbZSxyXW9mIHQpcj49aXx8YS5wdXNoKHtmb250Q2hhckNvZGU6ZSxnbHlwaElkOnJ9KTswPT09YS5sZW5ndGgmJmEucHVzaCh7Zm9udENoYXJDb2RlOjAsZ2x5cGhJZDowfSk7YS5zb3J0KChmdW5jdGlvbiBmb250R2V0UmFuZ2VzU29ydChlLHQpe3JldHVybiBlLmZvbnRDaGFyQ29kZS10LmZvbnRDaGFyQ29kZX0pKTtjb25zdCByPVtdLHM9YS5sZW5ndGg7Zm9yKGxldCBlPTA7ZTxzOyl7Y29uc3QgdD1hW2VdLmZvbnRDaGFyQ29kZSxpPVthW2VdLmdseXBoSWRdOysrZTtsZXQgbj10O2Zvcig7ZTxzJiZuKzE9PT1hW2VdLmZvbnRDaGFyQ29kZTspe2kucHVzaChhW2VdLmdseXBoSWQpOysrbjsrK2U7aWYoNjU1MzU9PT1uKWJyZWFrfXIucHVzaChbdCxuLGldKX1yZXR1cm4gcn0oZSx0LGkpLHI9YS5hdCgtMSlbMV0+NjU1MzU/MjoxO2xldCBzLG4sbyxnLGM9IlwwXDAiK3N0cmluZzE2KHIpKyJcMANcMAEiK3N0cmluZzMyKDQrOCpyKTtmb3Iocz1hLmxlbmd0aC0xO3M+PTAmJiEoYVtzXVswXTw9NjU1MzUpOy0tcyk7Y29uc3QgbD1zKzE7YVtzXVswXTw2NTUzNSYmNjU1MzU9PT1hW3NdWzFdJiYoYVtzXVsxXT02NTUzNCk7Y29uc3QgaD1hW3NdWzFdPDY1NTM1PzE6MCxDPWwraCxRPU9wZW5UeXBlRmlsZUJ1aWxkZXIuZ2V0U2VhcmNoUGFyYW1zKEMsMik7bGV0IEUsdSxkLGYscD0iIixtPSIiLHk9IiIsdz0iIixiPSIiLEQ9MDtmb3Iocz0wLG49bDtzPG47cysrKXtFPWFbc107dT1FWzBdO2Q9RVsxXTtwKz1zdHJpbmcxNih1KTttKz1zdHJpbmcxNihkKTtmPUVbMl07bGV0IGU9ITA7Zm9yKG89MSxnPWYubGVuZ3RoO288ZzsrK28paWYoZltvXSE9PWZbby0xXSsxKXtlPSExO2JyZWFrfWlmKGUpe3krPXN0cmluZzE2KGZbMF0tdSY2NTUzNSk7dys9c3RyaW5nMTYoMCl9ZWxzZXtjb25zdCBlPTIqKEMtcykrMipEO0QrPWQtdSsxO3krPXN0cmluZzE2KDApO3crPXN0cmluZzE2KGUpO2ZvcihvPTAsZz1mLmxlbmd0aDtvPGc7KytvKWIrPXN0cmluZzE2KGZbb10pfX1pZihoPjApe20rPSLDv8O/IjtwKz0iw7/DvyI7eSs9IlwwASI7dys9IlwwXDAifWNvbnN0IFM9IlwwXDAiK3N0cmluZzE2KDIqQykrc3RyaW5nMTYoUS5yYW5nZSkrc3RyaW5nMTYoUS5lbnRyeSkrc3RyaW5nMTYoUS5yYW5nZVNoaWZ0KSttKyJcMFwwIitwK3krdytiO2xldCBrPSIiLFI9IiI7aWYocj4xKXtjKz0iXDADXDBcbiIrc3RyaW5nMzIoNCs4KnIrNCtTLmxlbmd0aCk7az0iIjtmb3Iocz0wLG49YS5sZW5ndGg7czxuO3MrKyl7RT1hW3NdO3U9RVswXTtmPUVbMl07bGV0IGU9ZlswXTtmb3Iobz0xLGc9Zi5sZW5ndGg7bzxnOysrbylpZihmW29dIT09ZltvLTFdKzEpe2Q9RVswXStvLTE7ays9c3RyaW5nMzIodSkrc3RyaW5nMzIoZCkrc3RyaW5nMzIoZSk7dT1kKzE7ZT1mW29dfWsrPXN0cmluZzMyKHUpK3N0cmluZzMyKEVbMV0pK3N0cmluZzMyKGUpfVI9IlwwXGZcMFwwIitzdHJpbmczMihrLmxlbmd0aCsxNikrIlwwXDBcMFwwIitzdHJpbmczMihrLmxlbmd0aC8xMil9cmV0dXJuIGMrIlwwBCIrc3RyaW5nMTYoUy5sZW5ndGgrNCkrUytSK2t9ZnVuY3Rpb24gY3JlYXRlT1MyVGFibGUoZSx0LGkpe2l8fD17dW5pdHNQZXJFbTowLHlNYXg6MCx5TWluOjAsYXNjZW50OjAsZGVzY2VudDowfTtsZXQgYT0wLHI9MCxzPTAsbj0wLG89bnVsbCxnPTAsYz0tMTtpZih0KXtmb3IobGV0IGUgaW4gdCl7ZXw9MDsobz5lfHwhbykmJihvPWUpO2c8ZSYmKGc9ZSk7Yz1nZXRVbmljb2RlUmFuZ2VGb3IoZSxjKTtpZihjPDMyKWF8PTE8PGM7ZWxzZSBpZihjPDY0KXJ8PTE8PGMtMzI7ZWxzZSBpZihjPDk2KXN8PTE8PGMtNjQ7ZWxzZXtpZighKGM8MTIzKSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIlVuaWNvZGUgcmFuZ2VzIEJpdHMgPiAxMjMgYXJlIHJlc2VydmVkIGZvciBpbnRlcm5hbCB1c2FnZSIpO258PTE8PGMtOTZ9fWc+NjU1MzUmJihnPTY1NTM1KX1lbHNle289MDtnPTI1NX1jb25zdCBsPWUuYmJveHx8WzAsMCwwLDBdLGg9aS51bml0c1BlckVtfHwoZS5mb250TWF0cml4PzEvTWF0aC5tYXgoLi4uZS5mb250TWF0cml4LnNsaWNlKDAsNCkubWFwKE1hdGguYWJzKSk6MWUzKSxDPWUuYXNjZW50U2NhbGVkPzE6aC9nYSxRPWkuYXNjZW50fHxNYXRoLnJvdW5kKEMqKGUuYXNjZW50fHxsWzNdKSk7bGV0IEU9aS5kZXNjZW50fHxNYXRoLnJvdW5kKEMqKGUuZGVzY2VudHx8bFsxXSkpO0U+MCYmZS5kZXNjZW50PjAmJmxbMV08MCYmKEU9LUUpO2NvbnN0IHU9aS55TWF4fHxRLGQ9LWkueU1pbnx8LUU7cmV0dXJuIlwwAwIkAcO0XDAFXDBcMALCigLCu1wwXDBcMMKMAsKKAsK7XDBcMAHDn1x4MDAxAQJcMFwwXDBcMAYiK1N0cmluZy5mcm9tQ2hhckNvZGUoZS5maXhlZFBpdGNoPzk6MCkrIlwwXDBcMFwwXDBcMCIrc3RyaW5nMzIoYSkrc3RyaW5nMzIocikrc3RyaW5nMzIocykrc3RyaW5nMzIobikrIioyMSoiK3N0cmluZzE2KGUuaXRhbGljQW5nbGU/MTowKStzdHJpbmcxNihvfHxlLmZpcnN0Q2hhcikrc3RyaW5nMTYoZ3x8ZS5sYXN0Q2hhcikrc3RyaW5nMTYoUSkrc3RyaW5nMTYoRSkrIlwwZCIrc3RyaW5nMTYodSkrc3RyaW5nMTYoZCkrIlwwXDBcMFwwXDBcMFwwXDAiK3N0cmluZzE2KGUueEhlaWdodCkrc3RyaW5nMTYoZS5jYXBIZWlnaHQpK3N0cmluZzE2KDApK3N0cmluZzE2KG98fGUuZmlyc3RDaGFyKSsiXDADIn1mdW5jdGlvbiBjcmVhdGVQb3N0VGFibGUoZSl7cmV0dXJuIlwwA1wwXDAiK3N0cmluZzMyKE1hdGguZmxvb3IoNjU1MzYqZS5pdGFsaWNBbmdsZSkpKyJcMFwwXDBcMCIrc3RyaW5nMzIoZS5maXhlZFBpdGNoPzE6MCkrIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwIn1mdW5jdGlvbiBjcmVhdGVQb3N0c2NyaXB0TmFtZShlKXtyZXR1cm4gZS5yZXBsYWNlQWxsKC9bXlx4MjEtXHg3RV18W1tcXSgpe308Pi8lXS9nLCIiKS5zbGljZSgwLDYzKX1mdW5jdGlvbiBjcmVhdGVOYW1lVGFibGUoZSx0KXt0fHwodD1bW10sW11dKTtjb25zdCBpPVt0WzBdWzBdfHwiT3JpZ2luYWwgbGljZW5jZSIsdFswXVsxXXx8ZSx0WzBdWzJdfHwiVW5rbm93biIsdFswXVszXXx8InVuaXF1ZUlEIix0WzBdWzRdfHxlLHRbMF1bNV18fCJWZXJzaW9uIDAuMTEiLHRbMF1bNl18fGNyZWF0ZVBvc3RzY3JpcHROYW1lKGUpLHRbMF1bN118fCJVbmtub3duIix0WzBdWzhdfHwiVW5rbm93biIsdFswXVs5XXx8IlVua25vd24iXSxhPVtdO2xldCByLHMsbixvLGc7Zm9yKHI9MCxzPWkubGVuZ3RoO3I8cztyKyspe2c9dFsxXVtyXXx8aVtyXTtjb25zdCBlPVtdO2ZvcihuPTAsbz1nLmxlbmd0aDtuPG87bisrKWUucHVzaChzdHJpbmcxNihnLmNoYXJDb2RlQXQobikpKTthLnB1c2goZS5qb2luKCIiKSl9Y29uc3QgYz1baSxhXSxsPVsiXDABIiwiXDADIl0saD1bIlwwXDAiLCJcMAEiXSxDPVsiXDBcMCIsIgRcdCJdLFE9aS5sZW5ndGgqbC5sZW5ndGg7bGV0IEU9IlwwXDAiK3N0cmluZzE2KFEpK3N0cmluZzE2KDEyKlErNiksdT0wO2ZvcihyPTAscz1sLmxlbmd0aDtyPHM7cisrKXtjb25zdCBlPWNbcl07Zm9yKG49MCxvPWUubGVuZ3RoO248bztuKyspe2c9ZVtuXTtFKz1sW3JdK2hbcl0rQ1tyXStzdHJpbmcxNihuKStzdHJpbmcxNihnLmxlbmd0aCkrc3RyaW5nMTYodSk7dSs9Zy5sZW5ndGh9fUUrPWkuam9pbigiIikrYS5qb2luKCIiKTtyZXR1cm4gRX1jbGFzcyBGb250e2NvbnN0cnVjdG9yKGUsdCxpKXt0aGlzLm5hbWU9ZTt0aGlzLnBzTmFtZT1udWxsO3RoaXMubWltZXR5cGU9bnVsbDt0aGlzLmRpc2FibGVGb250RmFjZT0hMTt0aGlzLmxvYWRlZE5hbWU9aS5sb2FkZWROYW1lO3RoaXMuaXNUeXBlM0ZvbnQ9aS5pc1R5cGUzRm9udDt0aGlzLm1pc3NpbmdGaWxlPSExO3RoaXMuY3NzRm9udEluZm89aS5jc3NGb250SW5mbzt0aGlzLl9jaGFyc0NhY2hlPU9iamVjdC5jcmVhdGUobnVsbCk7dGhpcy5fZ2x5cGhDYWNoZT1PYmplY3QuY3JlYXRlKG51bGwpO2xldCBhPSEhKGkuZmxhZ3MmeGkpO2lmKCFhJiYhaS5pc1NpbXVsYXRlZEZsYWdzKXtjb25zdCB0PWUucmVwbGFjZUFsbCgvWyxfXS9nLCItIikuc3BsaXQoIi0iLDEpWzBdLGk9T2koKTtmb3IoY29uc3QgZSBvZiB0LnNwbGl0KCIrIikpaWYoaVtlXSl7YT0hMDticmVha319dGhpcy5pc1NlcmlmRm9udD1hO3RoaXMuaXNTeW1ib2xpY0ZvbnQ9ISEoaS5mbGFncyZIaSk7dGhpcy5pc01vbm9zcGFjZT0hIShpLmZsYWdzJk1pKTtsZXR7dHlwZTpyLHN1YnR5cGU6c309aTt0aGlzLnR5cGU9cjt0aGlzLnN1YnR5cGU9czt0aGlzLnN5c3RlbUZvbnRJbmZvPWkuc3lzdGVtRm9udEluZm87Y29uc3Qgbj1lLm1hdGNoKC9eSW52YWxpZFBERmpzRm9udF8oLiopX1xkKyQvKTt0aGlzLmlzSW52YWxpZFBERmpzRm9udD0hIW47dGhpcy5pc0ludmFsaWRQREZqc0ZvbnQ/dGhpcy5mYWxsYmFja05hbWU9blsxXTp0aGlzLmlzTW9ub3NwYWNlP3RoaXMuZmFsbGJhY2tOYW1lPSJtb25vc3BhY2UiOnRoaXMuaXNTZXJpZkZvbnQ/dGhpcy5mYWxsYmFja05hbWU9InNlcmlmIjp0aGlzLmZhbGxiYWNrTmFtZT0ic2Fucy1zZXJpZiI7aWYodGhpcy5zeXN0ZW1Gb250SW5mbz8uZ3Vlc3NGYWxsYmFjayl7dGhpcy5zeXN0ZW1Gb250SW5mby5ndWVzc0ZhbGxiYWNrPSExO3RoaXMuc3lzdGVtRm9udEluZm8uY3NzKz1gLCR7dGhpcy5mYWxsYmFja05hbWV9YH10aGlzLmRpZmZlcmVuY2VzPWkuZGlmZmVyZW5jZXM7dGhpcy53aWR0aHM9aS53aWR0aHM7dGhpcy5kZWZhdWx0V2lkdGg9aS5kZWZhdWx0V2lkdGg7dGhpcy5jb21wb3NpdGU9aS5jb21wb3NpdGU7dGhpcy5jTWFwPWkuY01hcDt0aGlzLmNhcEhlaWdodD1pLmNhcEhlaWdodC9nYTt0aGlzLmFzY2VudD1pLmFzY2VudC9nYTt0aGlzLmRlc2NlbnQ9aS5kZXNjZW50L2dhO3RoaXMubGluZUhlaWdodD10aGlzLmFzY2VudC10aGlzLmRlc2NlbnQ7dGhpcy5mb250TWF0cml4PWkuZm9udE1hdHJpeDt0aGlzLmJib3g9aS5iYm94O3RoaXMuZGVmYXVsdEVuY29kaW5nPWkuZGVmYXVsdEVuY29kaW5nO3RoaXMudG9Vbmljb2RlPWkudG9Vbmljb2RlO3RoaXMudG9Gb250Q2hhcj1bXTtpZigiVHlwZTMiPT09aS50eXBlKXtmb3IobGV0IGU9MDtlPDI1NjtlKyspdGhpcy50b0ZvbnRDaGFyW2VdPXRoaXMuZGlmZmVyZW5jZXNbZV18fGkuZGVmYXVsdEVuY29kaW5nW2VdO3JldHVybn10aGlzLmNpZEVuY29kaW5nPWkuY2lkRW5jb2Rpbmd8fCIiO3RoaXMudmVydGljYWw9ISFpLnZlcnRpY2FsO2lmKHRoaXMudmVydGljYWwpe3RoaXMudm1ldHJpY3M9aS52bWV0cmljczt0aGlzLmRlZmF1bHRWTWV0cmljcz1pLmRlZmF1bHRWTWV0cmljc31pZighdHx8dC5pc0VtcHR5KXt0JiZ3YXJuKCdGb250IGZpbGUgaXMgZW1wdHkgaW4gIicrZSsnIiAoJyt0aGlzLmxvYWRlZE5hbWUrIikiKTt0aGlzLmZhbGxiYWNrVG9TeXN0ZW1Gb250KGkpO3JldHVybn1bcixzXT1nZXRGb250RmlsZVR5cGUodCxpKTtyPT09dGhpcy50eXBlJiZzPT09dGhpcy5zdWJ0eXBlfHxpbmZvKGBJbmNvbnNpc3RlbnQgZm9udCBmaWxlIFR5cGUvU3ViVHlwZSwgZXhwZWN0ZWQ6ICR7dGhpcy50eXBlfS8ke3RoaXMuc3VidHlwZX0gYnV0IGZvdW5kOiAke3J9LyR7c30uYCk7bGV0IG87dHJ5e3N3aXRjaChyKXtjYXNlIk1NVHlwZTEiOmluZm8oIk1NVHlwZTEgZm9udCAoIitlKyIpLCBmYWxsaW5nIGJhY2sgdG8gVHlwZTEuIik7Y2FzZSJUeXBlMSI6Y2FzZSJDSURGb250VHlwZTAiOnRoaXMubWltZXR5cGU9ImZvbnQvb3BlbnR5cGUiO2NvbnN0IGE9IlR5cGUxQyI9PT1zfHwiQ0lERm9udFR5cGUwQyI9PT1zP25ldyBDRkZGb250KHQsaSk6bmV3IFR5cGUxRm9udChlLHQsaSk7YWRqdXN0V2lkdGhzKGkpO289dGhpcy5jb252ZXJ0KGUsYSxpKTticmVhaztjYXNlIk9wZW5UeXBlIjpjYXNlIlRydWVUeXBlIjpjYXNlIkNJREZvbnRUeXBlMiI6dGhpcy5taW1ldHlwZT0iZm9udC9vcGVudHlwZSI7bz10aGlzLmNoZWNrQW5kUmVwYWlyKGUsdCxpKTtpZih0aGlzLmlzT3BlblR5cGUpe2FkanVzdFdpZHRocyhpKTtyPSJPcGVuVHlwZSJ9YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYEZvbnQgJHtyfSBpcyBub3Qgc3VwcG9ydGVkYCl9fWNhdGNoKGUpe3dhcm4oZSk7dGhpcy5mYWxsYmFja1RvU3lzdGVtRm9udChpKTtyZXR1cm59YW1lbmRGYWxsYmFja1RvVW5pY29kZShpKTt0aGlzLmRhdGE9bzt0aGlzLnR5cGU9cjt0aGlzLnN1YnR5cGU9czt0aGlzLmZvbnRNYXRyaXg9aS5mb250TWF0cml4O3RoaXMud2lkdGhzPWkud2lkdGhzO3RoaXMuZGVmYXVsdFdpZHRoPWkuZGVmYXVsdFdpZHRoO3RoaXMudG9Vbmljb2RlPWkudG9Vbmljb2RlO3RoaXMuc2VhY01hcD1pLnNlYWNNYXB9Z2V0IHJlbmRlcmVyKCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJyZW5kZXJlciIsRm9udFJlbmRlcmVyRmFjdG9yeS5jcmVhdGUodGhpcyxHaSkpfWV4cG9ydERhdGEoZT0hMSl7Y29uc3QgdD1lP1suLi5JYSwuLi5jYV06SWEsaT1PYmplY3QuY3JlYXRlKG51bGwpO2xldCBhLHI7Zm9yKGEgb2YgdCl7cj10aGlzW2FdO3ZvaWQgMCE9PXImJihpW2FdPXIpfXJldHVybiBpfWZhbGxiYWNrVG9TeXN0ZW1Gb250KGUpe3RoaXMubWlzc2luZ0ZpbGU9ITA7Y29uc3R7bmFtZTp0LHR5cGU6aX09dGhpcztsZXQgYT1ub3JtYWxpemVGb250TmFtZSh0KTtjb25zdCByPUtpKCkscz1xaSgpLG49ISFyW2FdLG89ISghc1thXXx8IXJbc1thXV0pO2E9clthXXx8c1thXXx8YTtjb25zdCBnPVppKClbYV07aWYoZyl7aXNOYU4odGhpcy5hc2NlbnQpJiYodGhpcy5hc2NlbnQ9Zy5hc2NlbnQvZ2EpO2lzTmFOKHRoaXMuZGVzY2VudCkmJih0aGlzLmRlc2NlbnQ9Zy5kZXNjZW50L2dhKTtpc05hTih0aGlzLmNhcEhlaWdodCkmJih0aGlzLmNhcEhlaWdodD1nLmNhcEhlaWdodC9nYSl9dGhpcy5ib2xkPS9ib2xkL2dpLnRlc3QoYSk7dGhpcy5pdGFsaWM9L29ibGlxdWV8aXRhbGljL2dpLnRlc3QoYSk7dGhpcy5ibGFjaz0vQmxhY2svZy50ZXN0KHQpO2NvbnN0IGM9L05hcnJvdy9nLnRlc3QodCk7dGhpcy5yZW1lYXN1cmU9KCFufHxjKSYmT2JqZWN0LmtleXModGhpcy53aWR0aHMpLmxlbmd0aD4wO2lmKChufHxvKSYmIkNJREZvbnRUeXBlMiI9PT1pJiZ0aGlzLmNpZEVuY29kaW5nLnN0YXJ0c1dpdGgoIklkZW50aXR5LSIpKXtjb25zdCBpPWUuY2lkVG9HaWRNYXAsYT1bXTthcHBseVN0YW5kYXJkRm9udEdseXBoTWFwKGEsV2koKSk7L0FyaWFsLT9CbGFjay9pLnRlc3QodCk/YXBwbHlTdGFuZGFyZEZvbnRHbHlwaE1hcChhLGppKCkpOi9DYWxpYnJpL2kudGVzdCh0KSYmYXBwbHlTdGFuZGFyZEZvbnRHbHlwaE1hcChhLFhpKCkpO2lmKGkpe2Zvcihjb25zdCBlIGluIGEpe2NvbnN0IHQ9YVtlXTt2b2lkIDAhPT1pW3RdJiYoYVsrZV09aVt0XSl9aS5sZW5ndGghPT10aGlzLnRvVW5pY29kZS5sZW5ndGgmJmUuaGFzSW5jbHVkZWRUb1VuaWNvZGVNYXAmJnRoaXMudG9Vbmljb2RlIGluc3RhbmNlb2YgSWRlbnRpdHlUb1VuaWNvZGVNYXAmJnRoaXMudG9Vbmljb2RlLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7Y29uc3Qgcj1hW2VdO3ZvaWQgMD09PWlbcl0mJihhWytlXT10KX0pKX10aGlzLnRvVW5pY29kZSBpbnN0YW5jZW9mIElkZW50aXR5VG9Vbmljb2RlTWFwfHx0aGlzLnRvVW5pY29kZS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe2FbK2VdPXR9KSk7dGhpcy50b0ZvbnRDaGFyPWE7dGhpcy50b1VuaWNvZGU9bmV3IFRvVW5pY29kZU1hcChhKX1lbHNlIGlmKC9TeW1ib2wvaS50ZXN0KGEpKXRoaXMudG9Gb250Q2hhcj1idWlsZFRvRm9udENoYXIoRWksRGkoKSx0aGlzLmRpZmZlcmVuY2VzKTtlbHNlIGlmKC9EaW5nYmF0cy9pLnRlc3QoYSkpdGhpcy50b0ZvbnRDaGFyPWJ1aWxkVG9Gb250Q2hhcih1aSxGaSgpLHRoaXMuZGlmZmVyZW5jZXMpO2Vsc2UgaWYobnx8byl7Y29uc3QgZT1idWlsZFRvRm9udENoYXIodGhpcy5kZWZhdWx0RW5jb2RpbmcsRGkoKSx0aGlzLmRpZmZlcmVuY2VzKTsiQ0lERm9udFR5cGUyIiE9PWl8fHRoaXMuY2lkRW5jb2Rpbmcuc3RhcnRzV2l0aCgiSWRlbnRpdHktIil8fHRoaXMudG9Vbmljb2RlIGluc3RhbmNlb2YgSWRlbnRpdHlUb1VuaWNvZGVNYXB8fHRoaXMudG9Vbmljb2RlLmZvckVhY2goKGZ1bmN0aW9uKHQsaSl7ZVsrdF09aX0pKTt0aGlzLnRvRm9udENoYXI9ZX1lbHNle2NvbnN0IGU9RGkoKSxpPVtdO3RoaXMudG9Vbmljb2RlLmZvckVhY2goKCh0LGEpPT57aWYoIXRoaXMuY29tcG9zaXRlKXtjb25zdCBpPWdldFVuaWNvZGVGb3JHbHlwaCh0aGlzLmRpZmZlcmVuY2VzW3RdfHx0aGlzLmRlZmF1bHRFbmNvZGluZ1t0XSxlKTstMSE9PWkmJihhPWkpfWlbK3RdPWF9KSk7dGhpcy5jb21wb3NpdGUmJnRoaXMudG9Vbmljb2RlIGluc3RhbmNlb2YgSWRlbnRpdHlUb1VuaWNvZGVNYXAmJi9UYWhvbWF8VmVyZGFuYS9pLnRlc3QodCkmJmFwcGx5U3RhbmRhcmRGb250R2x5cGhNYXAoaSxXaSgpKTt0aGlzLnRvRm9udENoYXI9aX1hbWVuZEZhbGxiYWNrVG9Vbmljb2RlKGUpO3RoaXMubG9hZGVkTmFtZT1hLnNwbGl0KCItIiwxKVswXX1jaGVja0FuZFJlcGFpcihlLHQsaSl7Y29uc3QgYT1bIk9TLzIiLCJjbWFwIiwiaGVhZCIsImhoZWEiLCJobXR4IiwibWF4cCIsIm5hbWUiLCJwb3N0IiwibG9jYSIsImdseWYiLCJmcGdtIiwicHJlcCIsImN2dCAiLCJDRkYgIl07ZnVuY3Rpb24gcmVhZFRhYmxlcyhlLHQpe2NvbnN0IGk9T2JqZWN0LmNyZWF0ZShudWxsKTtpWyJPUy8yIl09bnVsbDtpLmNtYXA9bnVsbDtpLmhlYWQ9bnVsbDtpLmhoZWE9bnVsbDtpLmhtdHg9bnVsbDtpLm1heHA9bnVsbDtpLm5hbWU9bnVsbDtpLnBvc3Q9bnVsbDtmb3IobGV0IHI9MDtyPHQ7cisrKXtjb25zdCB0PXJlYWRUYWJsZUVudHJ5KGUpO2EuaW5jbHVkZXModC50YWcpJiYoMCE9PXQubGVuZ3RoJiYoaVt0LnRhZ109dCkpfXJldHVybiBpfWZ1bmN0aW9uIHJlYWRUYWJsZUVudHJ5KGUpe2NvbnN0IHQ9ZS5nZXRTdHJpbmcoNCksaT1lLmdldEludDMyKCk+Pj4wLGE9ZS5nZXRJbnQzMigpPj4+MCxyPWUuZ2V0SW50MzIoKT4+PjAscz1lLnBvcztlLnBvcz1lLnN0YXJ0fHwwO2Uuc2tpcChhKTtjb25zdCBuPWUuZ2V0Qnl0ZXMocik7ZS5wb3M9cztpZigiaGVhZCI9PT10KXtuWzhdPW5bOV09blsxMF09blsxMV09MDtuWzE3XXw9MzJ9cmV0dXJue3RhZzp0LGNoZWNrc3VtOmksbGVuZ3RoOnIsb2Zmc2V0OmEsZGF0YTpufX1mdW5jdGlvbiByZWFkT3BlblR5cGVIZWFkZXIoZSl7cmV0dXJue3ZlcnNpb246ZS5nZXRTdHJpbmcoNCksbnVtVGFibGVzOmUuZ2V0VWludDE2KCksc2VhcmNoUmFuZ2U6ZS5nZXRVaW50MTYoKSxlbnRyeVNlbGVjdG9yOmUuZ2V0VWludDE2KCkscmFuZ2VTaGlmdDplLmdldFVpbnQxNigpfX1mdW5jdGlvbiBzYW5pdGl6ZUdseXBoKGUsdCxpLGEscixzKXtjb25zdCBuPXtsZW5ndGg6MCxzaXplT2ZJbnN0cnVjdGlvbnM6MH07aWYodDwwfHx0Pj1lLmxlbmd0aHx8aT5lLmxlbmd0aHx8aS10PD0xMilyZXR1cm4gbjtjb25zdCBvPWUuc3ViYXJyYXkodCxpKSxnPXNpZ25lZEludDE2KG9bMl0sb1szXSksYz1zaWduZWRJbnQxNihvWzRdLG9bNV0pLGw9c2lnbmVkSW50MTYob1s2XSxvWzddKSxoPXNpZ25lZEludDE2KG9bOF0sb1s5XSk7aWYoZz5sKXt3cml0ZVNpZ25lZEludDE2KG8sMixsKTt3cml0ZVNpZ25lZEludDE2KG8sNixnKX1pZihjPmgpe3dyaXRlU2lnbmVkSW50MTYobyw0LGgpO3dyaXRlU2lnbmVkSW50MTYobyw4LGMpfWNvbnN0IEM9c2lnbmVkSW50MTYob1swXSxvWzFdKTtpZihDPDApe2lmKEM8LTEpcmV0dXJuIG47YS5zZXQobyxyKTtuLmxlbmd0aD1vLmxlbmd0aDtyZXR1cm4gbn1sZXQgUSxFPTEwLHU9MDtmb3IoUT0wO1E8QztRKyspe3U9KG9bRV08PDh8b1tFKzFdKSsxO0UrPTJ9Y29uc3QgZD1FLGY9b1tFXTw8OHxvW0UrMV07bi5zaXplT2ZJbnN0cnVjdGlvbnM9ZjtFKz0yK2Y7Y29uc3QgcD1FO2xldCBtPTA7Zm9yKFE9MDtRPHU7USsrKXtjb25zdCBlPW9bRSsrXTsxOTImZSYmKG9bRS0xXT02MyZlKTtsZXQgdD0yOzImZT90PTE6MTYmZSYmKHQ9MCk7bGV0IGk9Mjs0JmU/aT0xOjMyJmUmJihpPTApO2NvbnN0IGE9dCtpO20rPWE7aWYoOCZlKXtjb25zdCBlPW9bRSsrXTswPT09ZSYmKG9bRS0xXV49OCk7USs9ZTttKz1lKmF9fWlmKDA9PT1tKXJldHVybiBuO2xldCB5PUUrbTtpZih5Pm8ubGVuZ3RoKXJldHVybiBuO2lmKCFzJiZmPjApe2Euc2V0KG8uc3ViYXJyYXkoMCxkKSxyKTthLnNldChbMCwwXSxyK2QpO2Euc2V0KG8uc3ViYXJyYXkocCx5KSxyK2QrMik7eS09ZjtvLmxlbmd0aC15PjMmJih5PXkrMyYtNCk7bi5sZW5ndGg9eTtyZXR1cm4gbn1pZihvLmxlbmd0aC15PjMpe3k9eSszJi00O2Euc2V0KG8uc3ViYXJyYXkoMCx5KSxyKTtuLmxlbmd0aD15O3JldHVybiBufWEuc2V0KG8scik7bi5sZW5ndGg9by5sZW5ndGg7cmV0dXJuIG59ZnVuY3Rpb24gcmVhZE5hbWVUYWJsZShlKXtjb25zdCBpPSh0LnN0YXJ0fHwwKStlLm9mZnNldDt0LnBvcz1pO2NvbnN0IGE9W1tdLFtdXSxyPVtdLHM9ZS5sZW5ndGgsbj1pK3M7aWYoMCE9PXQuZ2V0VWludDE2KCl8fHM8NilyZXR1cm5bYSxyXTtjb25zdCBvPXQuZ2V0VWludDE2KCksZz10LmdldFVpbnQxNigpO2xldCBjLGw7Zm9yKGM9MDtjPG8mJnQucG9zKzEyPD1uO2MrKyl7Y29uc3QgZT17cGxhdGZvcm06dC5nZXRVaW50MTYoKSxlbmNvZGluZzp0LmdldFVpbnQxNigpLGxhbmd1YWdlOnQuZ2V0VWludDE2KCksbmFtZTp0LmdldFVpbnQxNigpLGxlbmd0aDp0LmdldFVpbnQxNigpLG9mZnNldDp0LmdldFVpbnQxNigpfTsoaXNNYWNOYW1lUmVjb3JkKGUpfHxpc1dpbk5hbWVSZWNvcmQoZSkpJiZyLnB1c2goZSl9Zm9yKGM9MCxsPXIubGVuZ3RoO2M8bDtjKyspe2NvbnN0IGU9cltjXTtpZihlLmxlbmd0aDw9MCljb250aW51ZTtjb25zdCBzPWkrZytlLm9mZnNldDtpZihzK2UubGVuZ3RoPm4pY29udGludWU7dC5wb3M9cztjb25zdCBvPWUubmFtZTtpZihlLmVuY29kaW5nKXtsZXQgaT0iIjtmb3IobGV0IGE9MCxyPWUubGVuZ3RoO2E8cjthKz0yKWkrPVN0cmluZy5mcm9tQ2hhckNvZGUodC5nZXRVaW50MTYoKSk7YVsxXVtvXT1pfWVsc2UgYVswXVtvXT10LmdldFN0cmluZyhlLmxlbmd0aCl9cmV0dXJuW2Escl19Y29uc3Qgcj1bMCwwLDAsMCwwLDAsMCwwLC0yLC0yLC0yLC0yLDAsMCwtMiwtNSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwwLDAsLTEsMCwtMSwtMSwtMSwtMSwxLC0xLC05OTksMCwxLDAsLTEsLTIsMCwtMSwtMiwtMSwtMSwwLC0xLC0xLDAsMCwtOTk5LC05OTksLTEsLTEsLTEsLTEsLTIsLTk5OSwtMiwtMiwtOTk5LDAsLTIsLTIsMCwwLC0yLDAsLTIsMCwwLDAsLTIsLTEsLTEsMSwxLDAsMCwtMSwtMSwtMSwtMSwtMSwtMSwtMSwwLDAsLTEsMCwtMSwtMSwwLC05OTksLTEsLTEsLTEsLTEsLTEsLTEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsLTIsLTk5OSwtOTk5LC05OTksLTk5OSwtOTk5LC0xLC0xLC0yLC0yLDAsMCwwLDAsLTEsLTEsLTk5OSwtMiwtMiwwLDAsLTEsLTIsLTIsMCwwLDAsLTEsLTEsLTEsLTJdO2Z1bmN0aW9uIHNhbml0aXplVFRQcm9ncmFtKGUsdCl7bGV0IGksYSxzLG4sbyxnPWUuZGF0YSxjPTAsbD0wLGg9MDtjb25zdCBDPVtdLFE9W10sRT1bXTtsZXQgdT10LnRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9ucyxkPSExLGY9MCxwPTA7Zm9yKGxldCBlPWcubGVuZ3RoO2M8ZTspe2NvbnN0IGU9Z1tjKytdO2lmKDY0PT09ZSl7YT1nW2MrK107aWYoZHx8cCljKz1hO2Vsc2UgZm9yKGk9MDtpPGE7aSsrKUMucHVzaChnW2MrK10pfWVsc2UgaWYoNjU9PT1lKXthPWdbYysrXTtpZihkfHxwKWMrPTIqYTtlbHNlIGZvcihpPTA7aTxhO2krKyl7cz1nW2MrK107Qy5wdXNoKHM8PDh8Z1tjKytdKX19ZWxzZSBpZigxNzY9PSgyNDgmZSkpe2E9ZS0xNzYrMTtpZihkfHxwKWMrPWE7ZWxzZSBmb3IoaT0wO2k8YTtpKyspQy5wdXNoKGdbYysrXSl9ZWxzZSBpZigxODQ9PSgyNDgmZSkpe2E9ZS0xODQrMTtpZihkfHxwKWMrPTIqYTtlbHNlIGZvcihpPTA7aTxhO2krKyl7cz1nW2MrK107Qy5wdXNoKHNpZ25lZEludDE2KHMsZ1tjKytdKSl9fWVsc2UgaWYoNDMhPT1lfHx1KWlmKDQ0IT09ZXx8dSl7aWYoNDU9PT1lKWlmKGQpe2Q9ITE7bD1jfWVsc2V7bz1RLnBvcCgpO2lmKCFvKXt3YXJuKCJUVDogRU5ERiBiYWQgc3RhY2siKTt0LmhpbnRzVmFsaWQ9ITE7cmV0dXJufW49RS5wb3AoKTtnPW8uZGF0YTtjPW8uaTt0LmZ1bmN0aW9uc1N0YWNrRGVsdGFzW25dPUMubGVuZ3RoLW8uc3RhY2tUb3B9ZWxzZSBpZigxMzc9PT1lKXtpZihkfHxwKXt3YXJuKCJUVDogbmVzdGVkIElERUZzIG5vdCBhbGxvd2VkIik7dT0hMH1kPSEwO2g9Y31lbHNlIGlmKDg4PT09ZSkrK2Y7ZWxzZSBpZigyNz09PWUpcD1mO2Vsc2UgaWYoODk9PT1lKXtwPT09ZiYmKHA9MCk7LS1mfWVsc2UgaWYoMjg9PT1lJiYhZCYmIXApe2NvbnN0IGU9Qy5hdCgtMSk7ZT4wJiYoYys9ZS0xKX19ZWxzZXtpZihkfHxwKXt3YXJuKCJUVDogbmVzdGVkIEZERUZzIG5vdCBhbGxvd2VkIik7dT0hMH1kPSEwO2g9YztuPUMucG9wKCk7dC5mdW5jdGlvbnNEZWZpbmVkW25dPXtkYXRhOmcsaTpjfX1lbHNlIGlmKCFkJiYhcCl7bj1DLmF0KC0xKTtpZihpc05hTihuKSlpbmZvKCJUVDogQ0FMTCBlbXB0eSBzdGFjayAob3IgaW52YWxpZCBlbnRyeSkuIik7ZWxzZXt0LmZ1bmN0aW9uc1VzZWRbbl09ITA7aWYobiBpbiB0LmZ1bmN0aW9uc1N0YWNrRGVsdGFzKXtjb25zdCBlPUMubGVuZ3RoK3QuZnVuY3Rpb25zU3RhY2tEZWx0YXNbbl07aWYoZTwwKXt3YXJuKCJUVDogQ0FMTCBpbnZhbGlkIGZ1bmN0aW9ucyBzdGFjayBkZWx0YS4iKTt0LmhpbnRzVmFsaWQ9ITE7cmV0dXJufUMubGVuZ3RoPWV9ZWxzZSBpZihuIGluIHQuZnVuY3Rpb25zRGVmaW5lZCYmIUUuaW5jbHVkZXMobikpe1EucHVzaCh7ZGF0YTpnLGk6YyxzdGFja1RvcDpDLmxlbmd0aC0xfSk7RS5wdXNoKG4pO289dC5mdW5jdGlvbnNEZWZpbmVkW25dO2lmKCFvKXt3YXJuKCJUVDogQ0FMTCBub24tZXhpc3RlbnQgZnVuY3Rpb24iKTt0LmhpbnRzVmFsaWQ9ITE7cmV0dXJufWc9by5kYXRhO2M9by5pfX19aWYoIWQmJiFwKXtsZXQgdD0wO2U8PTE0Mj90PXJbZV06ZT49MTkyJiZlPD0yMjM/dD0tMTplPj0yMjQmJih0PS0yKTtpZihlPj0xMTMmJmU8PTExNyl7YT1DLnBvcCgpO2lzTmFOKGEpfHwodD0yKi1hKX1mb3IoO3Q8MCYmQy5sZW5ndGg+MDspe0MucG9wKCk7dCsrfWZvcig7dD4wOyl7Qy5wdXNoKE5hTik7dC0tfX19dC50b29Db21wbGV4VG9Gb2xsb3dGdW5jdGlvbnM9dTtjb25zdCBtPVtnXTtjPmcubGVuZ3RoJiZtLnB1c2gobmV3IFVpbnQ4QXJyYXkoYy1nLmxlbmd0aCkpO2lmKGg+bCl7d2FybigiVFQ6IGNvbXBsZW1lbnRpbmcgYSBtaXNzaW5nIGZ1bmN0aW9uIHRhaWwiKTttLnB1c2gobmV3IFVpbnQ4QXJyYXkoWzM0LDQ1XSkpfSFmdW5jdGlvbiBmb2xkVFRUYWJsZShlLHQpe2lmKHQubGVuZ3RoPjEpe2xldCBpLGEscj0wO2ZvcihpPTAsYT10Lmxlbmd0aDtpPGE7aSsrKXIrPXRbaV0ubGVuZ3RoO3I9ciszJi00O2NvbnN0IHM9bmV3IFVpbnQ4QXJyYXkocik7bGV0IG49MDtmb3IoaT0wLGE9dC5sZW5ndGg7aTxhO2krKyl7cy5zZXQodFtpXSxuKTtuKz10W2ldLmxlbmd0aH1lLmRhdGE9cztlLmxlbmd0aD1yfX0oZSxtKX1sZXQgcyxuLG8sZztpZihpc1RydWVUeXBlQ29sbGVjdGlvbkZpbGUodD1uZXcgU3RyZWFtKG5ldyBVaW50OEFycmF5KHQuZ2V0Qnl0ZXMoKSkpKSl7Y29uc3QgZT1mdW5jdGlvbiByZWFkVHJ1ZVR5cGVDb2xsZWN0aW9uRGF0YShlLHQpe2NvbnN0e251bUZvbnRzOmksb2Zmc2V0VGFibGU6YX09ZnVuY3Rpb24gcmVhZFRydWVUeXBlQ29sbGVjdGlvbkhlYWRlcihlKXtjb25zdCB0PWUuZ2V0U3RyaW5nKDQpO2Fzc2VydCgidHRjZiI9PT10LCJNdXN0IGJlIGEgVHJ1ZVR5cGUgQ29sbGVjdGlvbiBmb250LiIpO2NvbnN0IGk9ZS5nZXRVaW50MTYoKSxhPWUuZ2V0VWludDE2KCkscj1lLmdldEludDMyKCk+Pj4wLHM9W107Zm9yKGxldCB0PTA7dDxyO3QrKylzLnB1c2goZS5nZXRJbnQzMigpPj4+MCk7Y29uc3Qgbj17dHRjVGFnOnQsbWFqb3JWZXJzaW9uOmksbWlub3JWZXJzaW9uOmEsbnVtRm9udHM6cixvZmZzZXRUYWJsZTpzfTtzd2l0Y2goaSl7Y2FzZSAxOnJldHVybiBuO2Nhc2UgMjpuLmRzaWdUYWc9ZS5nZXRJbnQzMigpPj4+MDtuLmRzaWdMZW5ndGg9ZS5nZXRJbnQzMigpPj4+MDtuLmRzaWdPZmZzZXQ9ZS5nZXRJbnQzMigpPj4+MDtyZXR1cm4gbn10aHJvdyBuZXcgRm9ybWF0RXJyb3IoYEludmFsaWQgVHJ1ZVR5cGUgQ29sbGVjdGlvbiBtYWpvclZlcnNpb246ICR7aX0uYCl9KGUpLHI9dC5zcGxpdCgiKyIpO2xldCBzO2ZvcihsZXQgbj0wO248aTtuKyspe2UucG9zPShlLnN0YXJ0fHwwKSthW25dO2NvbnN0IGk9cmVhZE9wZW5UeXBlSGVhZGVyKGUpLG89cmVhZFRhYmxlcyhlLGkubnVtVGFibGVzKTtpZighby5uYW1lKXRocm93IG5ldyBGb3JtYXRFcnJvcignVHJ1ZVR5cGUgQ29sbGVjdGlvbiBmb250IG11c3QgY29udGFpbiBhICJuYW1lIiB0YWJsZS4nKTtjb25zdFtnXT1yZWFkTmFtZVRhYmxlKG8ubmFtZSk7Zm9yKGxldCBlPTAsYT1nLmxlbmd0aDtlPGE7ZSsrKWZvcihsZXQgYT0wLG49Z1tlXS5sZW5ndGg7YTxuO2ErKyl7Y29uc3Qgbj1nW2VdW2FdPy5yZXBsYWNlQWxsKC9ccy9nLCIiKTtpZihuKXtpZihuPT09dClyZXR1cm57aGVhZGVyOmksdGFibGVzOm99O2lmKCEoci5sZW5ndGg8MikpZm9yKGNvbnN0IGUgb2YgciluPT09ZSYmKHM9e25hbWU6ZSxoZWFkZXI6aSx0YWJsZXM6b30pfX19aWYocyl7d2FybihgVHJ1ZVR5cGUgQ29sbGVjdGlvbiBkb2VzIG5vdCBjb250YWluICIke3R9IiBmb250LCBmYWxsaW5nIGJhY2sgdG8gIiR7cy5uYW1lfSIgZm9udCBpbnN0ZWFkLmApO3JldHVybntoZWFkZXI6cy5oZWFkZXIsdGFibGVzOnMudGFibGVzfX10aHJvdyBuZXcgRm9ybWF0RXJyb3IoYFRydWVUeXBlIENvbGxlY3Rpb24gZG9lcyBub3QgY29udGFpbiAiJHt0fSIgZm9udC5gKX0odCx0aGlzLm5hbWUpO3M9ZS5oZWFkZXI7bj1lLnRhYmxlc31lbHNle3M9cmVhZE9wZW5UeXBlSGVhZGVyKHQpO249cmVhZFRhYmxlcyh0LHMubnVtVGFibGVzKX1jb25zdCBjPSFuWyJDRkYgIl07aWYoYyl7aWYoIW4ubG9jYSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoJ1JlcXVpcmVkICJsb2NhIiB0YWJsZSBpcyBub3QgZm91bmQnKTtpZighbi5nbHlmKXt3YXJuKCdSZXF1aXJlZCAiZ2x5ZiIgdGFibGUgaXMgbm90IGZvdW5kIC0tIHRyeWluZyB0byByZWNvdmVyLicpO24uZ2x5Zj17dGFnOiJnbHlmIixkYXRhOm5ldyBVaW50OEFycmF5KDApfX10aGlzLmlzT3BlblR5cGU9ITF9ZWxzZXtjb25zdCB0PWkuY29tcG9zaXRlJiYoaS5jaWRUb0dpZE1hcD8ubGVuZ3RoPjB8fCEoaS5jTWFwIGluc3RhbmNlb2YgSWRlbnRpdHlDTWFwKSk7aWYoIk9UVE8iPT09cy52ZXJzaW9uJiYhdHx8IW4uaGVhZHx8IW4uaGhlYXx8IW4ubWF4cHx8IW4ucG9zdCl7Zz1uZXcgU3RyZWFtKG5bIkNGRiAiXS5kYXRhKTtvPW5ldyBDRkZGb250KGcsaSk7YWRqdXN0V2lkdGhzKGkpO3JldHVybiB0aGlzLmNvbnZlcnQoZSxvLGkpfWRlbGV0ZSBuLmdseWY7ZGVsZXRlIG4ubG9jYTtkZWxldGUgbi5mcGdtO2RlbGV0ZSBuLnByZXA7ZGVsZXRlIG5bImN2dCAiXTt0aGlzLmlzT3BlblR5cGU9ITB9aWYoIW4ubWF4cCl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoJ1JlcXVpcmVkICJtYXhwIiB0YWJsZSBpcyBub3QgZm91bmQnKTt0LnBvcz0odC5zdGFydHx8MCkrbi5tYXhwLm9mZnNldDtsZXQgbD10LmdldEludDMyKCk7Y29uc3QgaD10LmdldFVpbnQxNigpO2lmKDY1NTM2IT09bCYmMjA0ODAhPT1sKXtpZig2PT09bi5tYXhwLmxlbmd0aClsPTIwNDgwO2Vsc2V7aWYoIShuLm1heHAubGVuZ3RoPj0zMikpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCcibWF4cCIgdGFibGUgaGFzIGEgd3JvbmcgdmVyc2lvbiBudW1iZXInKTtsPTY1NTM2fSFmdW5jdGlvbiB3cml0ZVVpbnQzMihlLHQsaSl7ZVt0KzNdPTI1NSZpO2VbdCsyXT1pPj4+ODtlW3QrMV09aT4+PjE2O2VbdF09aT4+PjI0fShuLm1heHAuZGF0YSwwLGwpfWlmKGkuc2NhbGVGYWN0b3JzPy5sZW5ndGg9PT1oJiZjKXtjb25zdHtzY2FsZUZhY3RvcnM6ZX09aSx0PWludDE2KG4uaGVhZC5kYXRhWzUwXSxuLmhlYWQuZGF0YVs1MV0pLGE9bmV3IEdseWZUYWJsZSh7Z2x5ZlRhYmxlOm4uZ2x5Zi5kYXRhLGlzR2x5cGhMb2NhdGlvbnNMb25nOnQsbG9jYVRhYmxlOm4ubG9jYS5kYXRhLG51bUdseXBoczpofSk7YS5zY2FsZShlKTtjb25zdHtnbHlmOnIsbG9jYTpzLGlzTG9jYXRpb25Mb25nOm99PWEud3JpdGUoKTtuLmdseWYuZGF0YT1yO24ubG9jYS5kYXRhPXM7aWYobyE9PSEhdCl7bi5oZWFkLmRhdGFbNTBdPTA7bi5oZWFkLmRhdGFbNTFdPW8/MTowfWNvbnN0IGc9bi5obXR4LmRhdGE7Zm9yKGxldCB0PTA7dDxoO3QrKyl7Y29uc3QgaT00KnQsYT1NYXRoLnJvdW5kKGVbdF0qaW50MTYoZ1tpXSxnW2krMV0pKTtnW2ldPWE+PjgmMjU1O2dbaSsxXT0yNTUmYTt3cml0ZVNpZ25lZEludDE2KGcsaSsyLE1hdGgucm91bmQoZVt0XSpzaWduZWRJbnQxNihnW2krMl0sZ1tpKzNdKSkpfX1sZXQgQz1oKzEsUT0hMDtpZihDPjY1NTM1KXtRPSExO0M9aDt3YXJuKCJOb3QgZW5vdWdoIHNwYWNlIGluIGdseWZzIHRvIGR1cGxpY2F0ZSBmaXJzdCBnbHlwaC4iKX1sZXQgRT0wLHU9MDtpZihsPj02NTUzNiYmbi5tYXhwLmxlbmd0aD49MzIpe3QucG9zKz04O2lmKHQuZ2V0VWludDE2KCk+Mil7bi5tYXhwLmRhdGFbMTRdPTA7bi5tYXhwLmRhdGFbMTVdPTJ9dC5wb3MrPTQ7RT10LmdldFVpbnQxNigpO3QucG9zKz00O3U9dC5nZXRVaW50MTYoKX1uLm1heHAuZGF0YVs0XT1DPj44O24ubWF4cC5kYXRhWzVdPTI1NSZDO2NvbnN0IGQ9ZnVuY3Rpb24gc2FuaXRpemVUVFByb2dyYW1zKGUsdCxpLGEpe2NvbnN0IHI9e2Z1bmN0aW9uc0RlZmluZWQ6W10sZnVuY3Rpb25zVXNlZDpbXSxmdW5jdGlvbnNTdGFja0RlbHRhczpbXSx0b29Db21wbGV4VG9Gb2xsb3dGdW5jdGlvbnM6ITEsaGludHNWYWxpZDohMH07ZSYmc2FuaXRpemVUVFByb2dyYW0oZSxyKTt0JiZzYW5pdGl6ZVRUUHJvZ3JhbSh0LHIpO2UmJmZ1bmN0aW9uIGNoZWNrSW52YWxpZEZ1bmN0aW9ucyhlLHQpe2lmKCFlLnRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9ucylpZihlLmZ1bmN0aW9uc0RlZmluZWQubGVuZ3RoPnQpe3dhcm4oIlRUOiBtb3JlIGZ1bmN0aW9ucyBkZWZpbmVkIHRoYW4gZXhwZWN0ZWQiKTtlLmhpbnRzVmFsaWQ9ITF9ZWxzZSBmb3IobGV0IGk9MCxhPWUuZnVuY3Rpb25zVXNlZC5sZW5ndGg7aTxhO2krKyl7aWYoaT50KXt3YXJuKCJUVDogaW52YWxpZCBmdW5jdGlvbiBpZDogIitpKTtlLmhpbnRzVmFsaWQ9ITE7cmV0dXJufWlmKGUuZnVuY3Rpb25zVXNlZFtpXSYmIWUuZnVuY3Rpb25zRGVmaW5lZFtpXSl7d2FybigiVFQ6IHVuZGVmaW5lZCBmdW5jdGlvbjogIitpKTtlLmhpbnRzVmFsaWQ9ITE7cmV0dXJufX19KHIsYSk7aWYoaSYmMSZpLmxlbmd0aCl7Y29uc3QgZT1uZXcgVWludDhBcnJheShpLmxlbmd0aCsxKTtlLnNldChpLmRhdGEpO2kuZGF0YT1lfXJldHVybiByLmhpbnRzVmFsaWR9KG4uZnBnbSxuLnByZXAsblsiY3Z0ICJdLEUpO2lmKCFkKXtkZWxldGUgbi5mcGdtO2RlbGV0ZSBuLnByZXA7ZGVsZXRlIG5bImN2dCAiXX0hZnVuY3Rpb24gc2FuaXRpemVNZXRyaWNzKGUsdCxpLGEscixzKXtpZighdCl7aSYmKGkuZGF0YT1udWxsKTtyZXR1cm59ZS5wb3M9KGUuc3RhcnR8fDApK3Qub2Zmc2V0O2UucG9zKz00O2UucG9zKz0yO2UucG9zKz0yO2UucG9zKz0yO2UucG9zKz0yO2UucG9zKz0yO2UucG9zKz0yO2UucG9zKz0yO2UucG9zKz0yO2UucG9zKz0yO2NvbnN0IG49ZS5nZXRVaW50MTYoKTtlLnBvcys9ODtlLnBvcys9MjtsZXQgbz1lLmdldFVpbnQxNigpO2lmKDAhPT1uKXtpZighKDImaW50MTYoYS5kYXRhWzQ0XSxhLmRhdGFbNDVdKSkpe3QuZGF0YVsyMl09MDt0LmRhdGFbMjNdPTB9fWlmKG8+cil7aW5mbyhgVGhlIG51bU9mTWV0cmljcyAoJHtvfSkgc2hvdWxkIG5vdCBiZSBncmVhdGVyIHRoYW4gdGhlIG51bUdseXBocyAoJHtyfSkuYCk7bz1yO3QuZGF0YVszNF09KDY1MjgwJm8pPj44O3QuZGF0YVszNV09MjU1Jm99Y29uc3QgZz1yLW8tKGkubGVuZ3RoLTQqbz4+MSk7aWYoZz4wKXtjb25zdCBlPW5ldyBVaW50OEFycmF5KGkubGVuZ3RoKzIqZyk7ZS5zZXQoaS5kYXRhKTtpZihzKXtlW2kubGVuZ3RoXT1pLmRhdGFbMl07ZVtpLmxlbmd0aCsxXT1pLmRhdGFbM119aS5kYXRhPWV9fSh0LG4uaGhlYSxuLmhtdHgsbi5oZWFkLEMsUSk7aWYoIW4uaGVhZCl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoJ1JlcXVpcmVkICJoZWFkIiB0YWJsZSBpcyBub3QgZm91bmQnKTshZnVuY3Rpb24gc2FuaXRpemVIZWFkKGUsdCxpKXtjb25zdCBhPWUuZGF0YSxyPWZ1bmN0aW9uIGludDMyKGUsdCxpLGEpe3JldHVybihlPDwyNCkrKHQ8PDE2KSsoaTw8OCkrYX0oYVswXSxhWzFdLGFbMl0sYVszXSk7aWYocj4+MTYhPTEpe2luZm8oIkF0dGVtcHRpbmcgdG8gZml4IGludmFsaWQgdmVyc2lvbiBpbiBoZWFkIHRhYmxlOiAiK3IpO2FbMF09MDthWzFdPTE7YVsyXT0wO2FbM109MH1jb25zdCBzPWludDE2KGFbNTBdLGFbNTFdKTtpZihzPDB8fHM+MSl7aW5mbygiQXR0ZW1wdGluZyB0byBmaXggaW52YWxpZCBpbmRleFRvTG9jRm9ybWF0IGluIGhlYWQgdGFibGU6ICIrcyk7Y29uc3QgZT10KzE7aWYoaT09PWU8PDEpe2FbNTBdPTA7YVs1MV09MH1lbHNle2lmKGkhPT1lPDwyKXRocm93IG5ldyBGb3JtYXRFcnJvcigiQ291bGQgbm90IGZpeCBpbmRleFRvTG9jRm9ybWF0OiAiK3MpO2FbNTBdPTA7YVs1MV09MX19fShuLmhlYWQsaCxjP24ubG9jYS5sZW5ndGg6MCk7bGV0IGY9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihjKXtjb25zdCBlPWludDE2KG4uaGVhZC5kYXRhWzUwXSxuLmhlYWQuZGF0YVs1MV0pLHQ9ZnVuY3Rpb24gc2FuaXRpemVHbHlwaExvY2F0aW9ucyhlLHQsaSxhLHIscyxuKXtsZXQgbyxnLGM7aWYoYSl7bz00O2c9ZnVuY3Rpb24gZm9udEl0ZW1EZWNvZGVMb25nKGUsdCl7cmV0dXJuIGVbdF08PDI0fGVbdCsxXTw8MTZ8ZVt0KzJdPDw4fGVbdCszXX07Yz1mdW5jdGlvbiBmb250SXRlbUVuY29kZUxvbmcoZSx0LGkpe2VbdF09aT4+PjI0JjI1NTtlW3QrMV09aT4+MTYmMjU1O2VbdCsyXT1pPj44JjI1NTtlW3QrM109MjU1Jml9fWVsc2V7bz0yO2c9ZnVuY3Rpb24gZm9udEl0ZW1EZWNvZGUoZSx0KXtyZXR1cm4gZVt0XTw8OXxlW3QrMV08PDF9O2M9ZnVuY3Rpb24gZm9udEl0ZW1FbmNvZGUoZSx0LGkpe2VbdF09aT4+OSYyNTU7ZVt0KzFdPWk+PjEmMjU1fX1jb25zdCBsPXM/aSsxOmksaD1vKigxK2wpLEM9bmV3IFVpbnQ4QXJyYXkoaCk7Qy5zZXQoZS5kYXRhLnN1YmFycmF5KDAsaCkpO2UuZGF0YT1DO2NvbnN0IFE9dC5kYXRhLEU9US5sZW5ndGgsdT1uZXcgVWludDhBcnJheShFKTtsZXQgZCxmO2NvbnN0IHA9W107Zm9yKGQ9MCxmPTA7ZDxpKzE7ZCsrLGYrPW8pe2xldCBlPWcoQyxmKTtlPkUmJihlPUUpO3AucHVzaCh7aW5kZXg6ZCxvZmZzZXQ6ZSxlbmRPZmZzZXQ6MH0pfXAuc29ydCgoKGUsdCk9PmUub2Zmc2V0LXQub2Zmc2V0KSk7Zm9yKGQ9MDtkPGk7ZCsrKXBbZF0uZW5kT2Zmc2V0PXBbZCsxXS5vZmZzZXQ7cC5zb3J0KCgoZSx0KT0+ZS5pbmRleC10LmluZGV4KSk7Zm9yKGQ9MDtkPGk7ZCsrKXtjb25zdHtvZmZzZXQ6ZSxlbmRPZmZzZXQ6dH09cFtkXTtpZigwIT09ZXx8MCE9PXQpYnJlYWs7Y29uc3QgaT1wW2QrMV0ub2Zmc2V0O2lmKDAhPT1pKXtwW2RdLmVuZE9mZnNldD1pO2JyZWFrfX1jb25zdCBtPXAuYXQoLTIpOzAhPT1tLm9mZnNldCYmMD09PW0uZW5kT2Zmc2V0JiYobS5lbmRPZmZzZXQ9RSk7Y29uc3QgeT1PYmplY3QuY3JlYXRlKG51bGwpO2xldCB3PTA7YyhDLDAsdyk7Zm9yKGQ9MCxmPW87ZDxpO2QrKyxmKz1vKXtjb25zdCBlPXNhbml0aXplR2x5cGgoUSxwW2RdLm9mZnNldCxwW2RdLmVuZE9mZnNldCx1LHcsciksdD1lLmxlbmd0aDswPT09dCYmKHlbZF09ITApO2Uuc2l6ZU9mSW5zdHJ1Y3Rpb25zPm4mJihuPWUuc2l6ZU9mSW5zdHJ1Y3Rpb25zKTt3Kz10O2MoQyxmLHcpfWlmKDA9PT13KXtjb25zdCBlPW5ldyBVaW50OEFycmF5KFswLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsNDksMF0pO2ZvcihkPTAsZj1vO2Q8bDtkKyssZis9byljKEMsZixlLmxlbmd0aCk7dC5kYXRhPWV9ZWxzZSBpZihzKXtjb25zdCBpPWcoQyxvKTtpZih1Lmxlbmd0aD5pK3cpdC5kYXRhPXUuc3ViYXJyYXkoMCxpK3cpO2Vsc2V7dC5kYXRhPW5ldyBVaW50OEFycmF5KGkrdyk7dC5kYXRhLnNldCh1LnN1YmFycmF5KDAsdykpfXQuZGF0YS5zZXQodS5zdWJhcnJheSgwLGkpLHcpO2MoZS5kYXRhLEMubGVuZ3RoLW8sdytpKX1lbHNlIHQuZGF0YT11LnN1YmFycmF5KDAsdyk7cmV0dXJue21pc3NpbmdHbHlwaHM6eSxtYXhTaXplT2ZJbnN0cnVjdGlvbnM6bn19KG4ubG9jYSxuLmdseWYsaCxlLGQsUSx1KTtmPXQubWlzc2luZ0dseXBocztpZihsPj02NTUzNiYmbi5tYXhwLmxlbmd0aD49MzIpe24ubWF4cC5kYXRhWzI2XT10Lm1heFNpemVPZkluc3RydWN0aW9ucz4+ODtuLm1heHAuZGF0YVsyN109MjU1JnQubWF4U2l6ZU9mSW5zdHJ1Y3Rpb25zfX1pZighbi5oaGVhKXRocm93IG5ldyBGb3JtYXRFcnJvcignUmVxdWlyZWQgImhoZWEiIHRhYmxlIGlzIG5vdCBmb3VuZCcpO2lmKDA9PT1uLmhoZWEuZGF0YVsxMF0mJjA9PT1uLmhoZWEuZGF0YVsxMV0pe24uaGhlYS5kYXRhWzEwXT0yNTU7bi5oaGVhLmRhdGFbMTFdPTI1NX1jb25zdCBwPXt1bml0c1BlckVtOmludDE2KG4uaGVhZC5kYXRhWzE4XSxuLmhlYWQuZGF0YVsxOV0pLHlNYXg6c2lnbmVkSW50MTYobi5oZWFkLmRhdGFbNDJdLG4uaGVhZC5kYXRhWzQzXSkseU1pbjpzaWduZWRJbnQxNihuLmhlYWQuZGF0YVszOF0sbi5oZWFkLmRhdGFbMzldKSxhc2NlbnQ6c2lnbmVkSW50MTYobi5oaGVhLmRhdGFbNF0sbi5oaGVhLmRhdGFbNV0pLGRlc2NlbnQ6c2lnbmVkSW50MTYobi5oaGVhLmRhdGFbNl0sbi5oaGVhLmRhdGFbN10pLGxpbmVHYXA6c2lnbmVkSW50MTYobi5oaGVhLmRhdGFbOF0sbi5oaGVhLmRhdGFbOV0pfTt0aGlzLmFzY2VudD1wLmFzY2VudC9wLnVuaXRzUGVyRW07dGhpcy5kZXNjZW50PXAuZGVzY2VudC9wLnVuaXRzUGVyRW07dGhpcy5saW5lR2FwPXAubGluZUdhcC9wLnVuaXRzUGVyRW07aWYodGhpcy5jc3NGb250SW5mbz8ubGluZUhlaWdodCl7dGhpcy5saW5lSGVpZ2h0PXRoaXMuY3NzRm9udEluZm8ubWV0cmljcy5saW5lSGVpZ2h0O3RoaXMubGluZUdhcD10aGlzLmNzc0ZvbnRJbmZvLm1ldHJpY3MubGluZUdhcH1lbHNlIHRoaXMubGluZUhlaWdodD10aGlzLmFzY2VudC10aGlzLmRlc2NlbnQrdGhpcy5saW5lR2FwO24ucG9zdCYmZnVuY3Rpb24gcmVhZFBvc3RTY3JpcHRUYWJsZShlLGksYSl7Y29uc3Qgcj0odC5zdGFydHx8MCkrZS5vZmZzZXQ7dC5wb3M9cjtjb25zdCBzPXIrZS5sZW5ndGgsbj10LmdldEludDMyKCk7dC5za2lwKDI4KTtsZXQgbyxnLGM9ITA7c3dpdGNoKG4pe2Nhc2UgNjU1MzY6bz12aTticmVhaztjYXNlIDEzMTA3Mjpjb25zdCBlPXQuZ2V0VWludDE2KCk7aWYoZSE9PWEpe2M9ITE7YnJlYWt9Y29uc3Qgcj1bXTtmb3IoZz0wO2c8ZTsrK2cpe2NvbnN0IGU9dC5nZXRVaW50MTYoKTtpZihlPj0zMjc2OCl7Yz0hMTticmVha31yLnB1c2goZSl9aWYoIWMpYnJlYWs7Y29uc3QgbD1bXSxoPVtdO2Zvcig7dC5wb3M8czspe2NvbnN0IGU9dC5nZXRCeXRlKCk7aC5sZW5ndGg9ZTtmb3IoZz0wO2c8ZTsrK2cpaFtnXT1TdHJpbmcuZnJvbUNoYXJDb2RlKHQuZ2V0Qnl0ZSgpKTtsLnB1c2goaC5qb2luKCIiKSl9bz1bXTtmb3IoZz0wO2c8ZTsrK2cpe2NvbnN0IGU9cltnXTtlPDI1OD9vLnB1c2godmlbZV0pOm8ucHVzaChsW2UtMjU4XSl9YnJlYWs7Y2FzZSAxOTY2MDg6YnJlYWs7ZGVmYXVsdDp3YXJuKCJVbmtub3duL3Vuc3VwcG9ydGVkIHBvc3QgdGFibGUgdmVyc2lvbiAiK24pO2M9ITE7aS5kZWZhdWx0RW5jb2RpbmcmJihvPWkuZGVmYXVsdEVuY29kaW5nKX1pLmdseXBoTmFtZXM9bztyZXR1cm4gY30obi5wb3N0LGksaCk7bi5wb3N0PXt0YWc6InBvc3QiLGRhdGE6Y3JlYXRlUG9zdFRhYmxlKGkpfTtjb25zdCBtPU9iamVjdC5jcmVhdGUobnVsbCk7ZnVuY3Rpb24gaGFzR2x5cGgoZSl7cmV0dXJuIWZbZV19aWYoaS5jb21wb3NpdGUpe2NvbnN0IGU9aS5jaWRUb0dpZE1hcHx8W10sdD0wPT09ZS5sZW5ndGg7aS5jTWFwLmZvckVhY2goKGZ1bmN0aW9uKGksYSl7InN0cmluZyI9PXR5cGVvZiBhJiYoYT1jb252ZXJ0Q2lkU3RyaW5nKGksYSwhMCkpO2lmKGE+NjU1MzUpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJNYXggc2l6ZSBvZiBDSUQgaXMgNjUsNTM1Iik7bGV0IHI9LTE7dD9yPWE6dm9pZCAwIT09ZVthXSYmKHI9ZVthXSk7cj49MCYmcjxoJiZoYXNHbHlwaChyKSYmKG1baV09cil9KSl9ZWxzZXtjb25zdCBlPWZ1bmN0aW9uIHJlYWRDbWFwVGFibGUoZSx0LGksYSl7aWYoIWUpe3dhcm4oIk5vIGNtYXAgdGFibGUgYXZhaWxhYmxlLiIpO3JldHVybntwbGF0Zm9ybUlkOi0xLGVuY29kaW5nSWQ6LTEsbWFwcGluZ3M6W10saGFzU2hvcnRDbWFwOiExfX1sZXQgcixzPSh0LnN0YXJ0fHwwKStlLm9mZnNldDt0LnBvcz1zO3Quc2tpcCgyKTtjb25zdCBuPXQuZ2V0VWludDE2KCk7bGV0IG8sZz0hMTtmb3IobGV0IGU9MDtlPG47ZSsrKXtjb25zdCByPXQuZ2V0VWludDE2KCkscz10LmdldFVpbnQxNigpLGM9dC5nZXRJbnQzMigpPj4+MDtsZXQgbD0hMTtpZihvPy5wbGF0Zm9ybUlkIT09cnx8bz8uZW5jb2RpbmdJZCE9PXMpe2lmKDAhPT1yfHwwIT09cyYmMSE9PXMmJjMhPT1zKWlmKDE9PT1yJiYwPT09cylsPSEwO2Vsc2UgaWYoMyE9PXJ8fDEhPT1zfHwhYSYmbyl7aWYoaSYmMz09PXImJjA9PT1zKXtsPSEwO2xldCBpPSEwO2lmKGU8bi0xKXtjb25zdCBlPXQucGVla0J5dGVzKDIpO2ludDE2KGVbMF0sZVsxXSk8ciYmKGk9ITEpfWkmJihnPSEwKX19ZWxzZXtsPSEwO2l8fChnPSEwKX1lbHNlIGw9ITA7bCYmKG89e3BsYXRmb3JtSWQ6cixlbmNvZGluZ0lkOnMsb2Zmc2V0OmN9KTtpZihnKWJyZWFrfX1vJiYodC5wb3M9cytvLm9mZnNldCk7aWYoIW98fC0xPT09dC5wZWVrQnl0ZSgpKXt3YXJuKCJDb3VsZCBub3QgZmluZCBhIHByZWZlcnJlZCBjbWFwIHRhYmxlLiIpO3JldHVybntwbGF0Zm9ybUlkOi0xLGVuY29kaW5nSWQ6LTEsbWFwcGluZ3M6W10saGFzU2hvcnRDbWFwOiExfX1jb25zdCBjPXQuZ2V0VWludDE2KCk7bGV0IGw9ITE7Y29uc3QgaD1bXTtsZXQgQyxRO2lmKDA9PT1jKXt0LnNraXAoNCk7Zm9yKEM9MDtDPDI1NjtDKyspe2NvbnN0IGU9dC5nZXRCeXRlKCk7ZSYmaC5wdXNoKHtjaGFyQ29kZTpDLGdseXBoSWQ6ZX0pfWw9ITB9ZWxzZSBpZigyPT09Yyl7dC5za2lwKDQpO2NvbnN0IGU9W107bGV0IGk9MDtmb3IobGV0IGE9MDthPDI1NjthKyspe2NvbnN0IGE9dC5nZXRVaW50MTYoKT4+MztlLnB1c2goYSk7aT1NYXRoLm1heChhLGkpfWNvbnN0IGE9W107Zm9yKGxldCBlPTA7ZTw9aTtlKyspYS5wdXNoKHtmaXJzdENvZGU6dC5nZXRVaW50MTYoKSxlbnRyeUNvdW50OnQuZ2V0VWludDE2KCksaWREZWx0YTpzaWduZWRJbnQxNih0LmdldEJ5dGUoKSx0LmdldEJ5dGUoKSksaWRSYW5nZVBvczp0LnBvcyt0LmdldFVpbnQxNigpfSk7Zm9yKGxldCBpPTA7aTwyNTY7aSsrKWlmKDA9PT1lW2ldKXt0LnBvcz1hWzBdLmlkUmFuZ2VQb3MrMippO1E9dC5nZXRVaW50MTYoKTtoLnB1c2goe2NoYXJDb2RlOmksZ2x5cGhJZDpRfSl9ZWxzZXtjb25zdCByPWFbZVtpXV07Zm9yKEM9MDtDPHIuZW50cnlDb3VudDtDKyspe2NvbnN0IGU9KGk8PDgpK0Mrci5maXJzdENvZGU7dC5wb3M9ci5pZFJhbmdlUG9zKzIqQztRPXQuZ2V0VWludDE2KCk7MCE9PVEmJihRPShRK3IuaWREZWx0YSklNjU1MzYpO2gucHVzaCh7Y2hhckNvZGU6ZSxnbHlwaElkOlF9KX19fWVsc2UgaWYoND09PWMpe3Quc2tpcCg0KTtjb25zdCBlPXQuZ2V0VWludDE2KCk+PjE7dC5za2lwKDYpO2NvbnN0IGk9W107bGV0IGE7Zm9yKGE9MDthPGU7YSsrKWkucHVzaCh7ZW5kOnQuZ2V0VWludDE2KCl9KTt0LnNraXAoMik7Zm9yKGE9MDthPGU7YSsrKWlbYV0uc3RhcnQ9dC5nZXRVaW50MTYoKTtmb3IoYT0wO2E8ZTthKyspaVthXS5kZWx0YT10LmdldFVpbnQxNigpO2xldCBuLG89MDtmb3IoYT0wO2E8ZTthKyspe3I9aVthXTtjb25zdCBzPXQuZ2V0VWludDE2KCk7aWYocyl7bj0ocz4+MSktKGUtYSk7ci5vZmZzZXRJbmRleD1uO289TWF0aC5tYXgobyxuK3IuZW5kLXIuc3RhcnQrMSl9ZWxzZSByLm9mZnNldEluZGV4PS0xfWNvbnN0IGc9W107Zm9yKEM9MDtDPG87QysrKWcucHVzaCh0LmdldFVpbnQxNigpKTtmb3IoYT0wO2E8ZTthKyspe3I9aVthXTtzPXIuc3RhcnQ7Y29uc3QgZT1yLmVuZCx0PXIuZGVsdGE7bj1yLm9mZnNldEluZGV4O2ZvcihDPXM7Qzw9ZTtDKyspaWYoNjU1MzUhPT1DKXtRPW48MD9DOmdbbitDLXNdO1E9USt0JjY1NTM1O2gucHVzaCh7Y2hhckNvZGU6QyxnbHlwaElkOlF9KX19fWVsc2UgaWYoNj09PWMpe3Quc2tpcCg0KTtjb25zdCBlPXQuZ2V0VWludDE2KCksaT10LmdldFVpbnQxNigpO2ZvcihDPTA7QzxpO0MrKyl7UT10LmdldFVpbnQxNigpO2NvbnN0IGk9ZStDO2gucHVzaCh7Y2hhckNvZGU6aSxnbHlwaElkOlF9KX19ZWxzZXtpZigxMiE9PWMpe3dhcm4oImNtYXAgdGFibGUgaGFzIHVuc3VwcG9ydGVkIGZvcm1hdDogIitjKTtyZXR1cm57cGxhdGZvcm1JZDotMSxlbmNvZGluZ0lkOi0xLG1hcHBpbmdzOltdLGhhc1Nob3J0Q21hcDohMX19e3Quc2tpcCgxMCk7Y29uc3QgZT10LmdldEludDMyKCk+Pj4wO2ZvcihDPTA7QzxlO0MrKyl7Y29uc3QgZT10LmdldEludDMyKCk+Pj4wLGk9dC5nZXRJbnQzMigpPj4+MDtsZXQgYT10LmdldEludDMyKCk+Pj4wO2ZvcihsZXQgdD1lO3Q8PWk7dCsrKWgucHVzaCh7Y2hhckNvZGU6dCxnbHlwaElkOmErK30pfX19aC5zb3J0KChmdW5jdGlvbihlLHQpe3JldHVybiBlLmNoYXJDb2RlLXQuY2hhckNvZGV9KSk7Zm9yKGxldCBlPTE7ZTxoLmxlbmd0aDtlKyspaWYoaFtlLTFdLmNoYXJDb2RlPT09aFtlXS5jaGFyQ29kZSl7aC5zcGxpY2UoZSwxKTtlLS19cmV0dXJue3BsYXRmb3JtSWQ6by5wbGF0Zm9ybUlkLGVuY29kaW5nSWQ6by5lbmNvZGluZ0lkLG1hcHBpbmdzOmgsaGFzU2hvcnRDbWFwOmx9fShuLmNtYXAsdCx0aGlzLmlzU3ltYm9saWNGb250LGkuaGFzRW5jb2RpbmcpLGE9ZS5wbGF0Zm9ybUlkLHI9ZS5lbmNvZGluZ0lkLHM9ZS5tYXBwaW5ncztsZXQgbz1bXSxnPSExOyFpLmhhc0VuY29kaW5nfHwiTWFjUm9tYW5FbmNvZGluZyIhPT1pLmJhc2VFbmNvZGluZ05hbWUmJiJXaW5BbnNpRW5jb2RpbmciIT09aS5iYXNlRW5jb2RpbmdOYW1lfHwobz1nZXRFbmNvZGluZyhpLmJhc2VFbmNvZGluZ05hbWUpKTtpZihpLmhhc0VuY29kaW5nJiYhdGhpcy5pc1N5bWJvbGljRm9udCYmKDM9PT1hJiYxPT09cnx8MT09PWEmJjA9PT1yKSl7Y29uc3QgZT1EaSgpO2ZvcihsZXQgdD0wO3Q8MjU2O3QrKyl7bGV0IG47bj12b2lkIDAhPT10aGlzLmRpZmZlcmVuY2VzW3RdP3RoaXMuZGlmZmVyZW5jZXNbdF06by5sZW5ndGgmJiIiIT09b1t0XT9vW3RdOkJpW3RdO2lmKCFuKWNvbnRpbnVlO2NvbnN0IGc9cmVjb3ZlckdseXBoTmFtZShuLGUpO2xldCBjOzM9PT1hJiYxPT09cj9jPWVbZ106MT09PWEmJjA9PT1yJiYoYz1DaS5pbmRleE9mKGcpKTtpZih2b2lkIDA9PT1jKXtpZighaS5nbHlwaE5hbWVzJiZpLmhhc0luY2x1ZGVkVG9Vbmljb2RlTWFwJiYhKHRoaXMudG9Vbmljb2RlIGluc3RhbmNlb2YgSWRlbnRpdHlUb1VuaWNvZGVNYXApKXtjb25zdCBlPXRoaXMudG9Vbmljb2RlLmdldCh0KTtlJiYoYz1lLmNvZGVQb2ludEF0KDApKX1pZih2b2lkIDA9PT1jKWNvbnRpbnVlfWZvcihjb25zdCBlIG9mIHMpaWYoZS5jaGFyQ29kZT09PWMpe21bdF09ZS5nbHlwaElkO2JyZWFrfX19ZWxzZSBpZigwPT09YSl7Zm9yKGNvbnN0IGUgb2YgcyltW2UuY2hhckNvZGVdPWUuZ2x5cGhJZDtnPSEwfWVsc2UgaWYoMz09PWEmJjA9PT1yKWZvcihjb25zdCBlIG9mIHMpe2xldCB0PWUuY2hhckNvZGU7dD49NjE0NDAmJnQ8PTYxNjk1JiYodCY9MjU1KTttW3RdPWUuZ2x5cGhJZH1lbHNlIGZvcihjb25zdCBlIG9mIHMpbVtlLmNoYXJDb2RlXT1lLmdseXBoSWQ7aWYoaS5nbHlwaE5hbWVzJiYoby5sZW5ndGh8fHRoaXMuZGlmZmVyZW5jZXMubGVuZ3RoKSlmb3IobGV0IGU9MDtlPDI1NjsrK2Upe2lmKCFnJiZ2b2lkIDAhPT1tW2VdKWNvbnRpbnVlO2NvbnN0IHQ9dGhpcy5kaWZmZXJlbmNlc1tlXXx8b1tlXTtpZighdCljb250aW51ZTtjb25zdCBhPWkuZ2x5cGhOYW1lcy5pbmRleE9mKHQpO2E+MCYmaGFzR2x5cGgoYSkmJihtW2VdPWEpfX0wPT09bS5sZW5ndGgmJihtWzBdPTApO2xldCB5PUMtMTtRfHwoeT0wKTtpZighaS5jc3NGb250SW5mbyl7Y29uc3QgZT1hZGp1c3RNYXBwaW5nKG0saGFzR2x5cGgseSx0aGlzLnRvVW5pY29kZSk7dGhpcy50b0ZvbnRDaGFyPWUudG9Gb250Q2hhcjtuLmNtYXA9e3RhZzoiY21hcCIsZGF0YTpjcmVhdGVDbWFwVGFibGUoZS5jaGFyQ29kZVRvR2x5cGhJZCxlLnRvVW5pY29kZUV4dHJhTWFwLEMpfTtuWyJPUy8yIl0mJmZ1bmN0aW9uIHZhbGlkYXRlT1MyVGFibGUoZSx0KXt0LnBvcz0odC5zdGFydHx8MCkrZS5vZmZzZXQ7Y29uc3QgaT10LmdldFVpbnQxNigpO3Quc2tpcCg2MCk7Y29uc3QgYT10LmdldFVpbnQxNigpO2lmKGk8NCYmNzY4JmEpcmV0dXJuITE7aWYodC5nZXRVaW50MTYoKT50LmdldFVpbnQxNigpKXJldHVybiExO3Quc2tpcCg2KTtpZigwPT09dC5nZXRVaW50MTYoKSlyZXR1cm4hMTtlLmRhdGFbOF09ZS5kYXRhWzldPTA7cmV0dXJuITB9KG5bIk9TLzIiXSx0KXx8KG5bIk9TLzIiXT17dGFnOiJPUy8yIixkYXRhOmNyZWF0ZU9TMlRhYmxlKGksZS5jaGFyQ29kZVRvR2x5cGhJZCxwKX0pfWlmKCFjKXRyeXtnPW5ldyBTdHJlYW0oblsiQ0ZGICJdLmRhdGEpO289bmV3IENGRlBhcnNlcihnLGksR2kpLnBhcnNlKCk7by5kdXBsaWNhdGVGaXJzdEdseXBoKCk7Y29uc3QgZT1uZXcgQ0ZGQ29tcGlsZXIobyk7blsiQ0ZGICJdLmRhdGE9ZS5jb21waWxlKCl9Y2F0Y2h7d2FybigiRmFpbGVkIHRvIGNvbXBpbGUgZm9udCAiK2kubG9hZGVkTmFtZSl9aWYobi5uYW1lKXtjb25zdFt0LGFdPXJlYWROYW1lVGFibGUobi5uYW1lKTtuLm5hbWUuZGF0YT1jcmVhdGVOYW1lVGFibGUoZSx0KTt0aGlzLnBzTmFtZT10WzBdWzZdfHxudWxsO2kuY29tcG9zaXRlfHxmdW5jdGlvbiBhZGp1c3RUcnVlVHlwZVRvVW5pY29kZShlLHQsaSl7aWYoZS5pc0ludGVybmFsRm9udClyZXR1cm47aWYoZS5oYXNJbmNsdWRlZFRvVW5pY29kZU1hcClyZXR1cm47aWYoZS5oYXNFbmNvZGluZylyZXR1cm47aWYoZS50b1VuaWNvZGUgaW5zdGFuY2VvZiBJZGVudGl0eVRvVW5pY29kZU1hcClyZXR1cm47aWYoIXQpcmV0dXJuO2lmKDA9PT1pLmxlbmd0aClyZXR1cm47aWYoZS5kZWZhdWx0RW5jb2Rpbmc9PT1RaSlyZXR1cm47Zm9yKGNvbnN0IGUgb2YgaSlpZighaXNXaW5OYW1lUmVjb3JkKGUpKXJldHVybjtjb25zdCBhPVFpLHI9W10scz1EaSgpO2Zvcihjb25zdCBlIGluIGEpe2NvbnN0IHQ9YVtlXTtpZigiIj09PXQpY29udGludWU7Y29uc3QgaT1zW3RdO3ZvaWQgMCE9PWkmJihyW2VdPVN0cmluZy5mcm9tQ2hhckNvZGUoaSkpfXIubGVuZ3RoPjAmJmUudG9Vbmljb2RlLmFtZW5kKHIpfShpLHRoaXMuaXNTeW1ib2xpY0ZvbnQsYSl9ZWxzZSBuLm5hbWU9e3RhZzoibmFtZSIsZGF0YTpjcmVhdGVOYW1lVGFibGUodGhpcy5uYW1lKX07Y29uc3Qgdz1uZXcgT3BlblR5cGVGaWxlQnVpbGRlcihzLnZlcnNpb24pO2Zvcihjb25zdCBlIGluIG4pdy5hZGRUYWJsZShlLG5bZV0uZGF0YSk7cmV0dXJuIHcudG9BcnJheSgpfWNvbnZlcnQoZSx0LGkpe2kuZml4ZWRQaXRjaD0hMTtpLmJ1aWx0SW5FbmNvZGluZyYmZnVuY3Rpb24gYWRqdXN0VHlwZTFUb1VuaWNvZGUoZSx0KXtpZihlLmlzSW50ZXJuYWxGb250KXJldHVybjtpZihlLmhhc0luY2x1ZGVkVG9Vbmljb2RlTWFwKXJldHVybjtpZih0PT09ZS5kZWZhdWx0RW5jb2RpbmcpcmV0dXJuO2lmKGUudG9Vbmljb2RlIGluc3RhbmNlb2YgSWRlbnRpdHlUb1VuaWNvZGVNYXApcmV0dXJuO2NvbnN0IGk9W10sYT1EaSgpO2Zvcihjb25zdCByIGluIHQpe2lmKGUuaGFzRW5jb2RpbmcmJihlLmJhc2VFbmNvZGluZ05hbWV8fHZvaWQgMCE9PWUuZGlmZmVyZW5jZXNbcl0pKWNvbnRpbnVlO2NvbnN0IHM9Z2V0VW5pY29kZUZvckdseXBoKHRbcl0sYSk7LTEhPT1zJiYoaVtyXT1TdHJpbmcuZnJvbUNoYXJDb2RlKHMpKX1pLmxlbmd0aD4wJiZlLnRvVW5pY29kZS5hbWVuZChpKX0oaSxpLmJ1aWx0SW5FbmNvZGluZyk7bGV0IGE9MTt0IGluc3RhbmNlb2YgQ0ZGRm9udCYmKGE9dC5udW1HbHlwaHMtMSk7Y29uc3Qgcz10LmdldEdseXBoTWFwcGluZyhpKTtsZXQgbj1udWxsLG89cyxnPW51bGw7aWYoIWkuY3NzRm9udEluZm8pe249YWRqdXN0TWFwcGluZyhzLHQuaGFzR2x5cGhJZC5iaW5kKHQpLGEsdGhpcy50b1VuaWNvZGUpO3RoaXMudG9Gb250Q2hhcj1uLnRvRm9udENoYXI7bz1uLmNoYXJDb2RlVG9HbHlwaElkO2c9bi50b1VuaWNvZGVFeHRyYU1hcH1jb25zdCBjPXQubnVtR2x5cGhzO2Z1bmN0aW9uIGdldENoYXJDb2RlcyhlLHQpe2xldCBpPW51bGw7Zm9yKGNvbnN0IGEgaW4gZSl0PT09ZVthXSYmKGl8fD1bXSkucHVzaCgwfGEpO3JldHVybiBpfWZ1bmN0aW9uIGNyZWF0ZUNoYXJDb2RlKGUsdCl7Zm9yKGNvbnN0IGkgaW4gZSlpZih0PT09ZVtpXSlyZXR1cm4gMHxpO24uY2hhckNvZGVUb0dseXBoSWRbbi5uZXh0QXZhaWxhYmxlRm9udENoYXJDb2RlXT10O3JldHVybiBuLm5leHRBdmFpbGFibGVGb250Q2hhckNvZGUrK31jb25zdCBsPXQuc2VhY3M7aWYobiYmbD8ubGVuZ3RoKXtjb25zdCBlPWkuZm9udE1hdHJpeHx8cixhPXQuZ2V0Q2hhcnNldCgpLG89T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IobGV0IHQgaW4gbCl7dHw9MDtjb25zdCBpPWxbdF0scj1CaVtpWzJdXSxnPUJpW2lbM11dLGM9YS5pbmRleE9mKHIpLGg9YS5pbmRleE9mKGcpO2lmKGM8MHx8aDwwKWNvbnRpbnVlO2NvbnN0IEM9e3g6aVswXSplWzBdK2lbMV0qZVsyXStlWzRdLHk6aVswXSplWzFdK2lbMV0qZVszXStlWzVdfSxRPWdldENoYXJDb2RlcyhzLHQpO2lmKFEpZm9yKGNvbnN0IGUgb2YgUSl7Y29uc3QgdD1uLmNoYXJDb2RlVG9HbHlwaElkLGk9Y3JlYXRlQ2hhckNvZGUodCxjKSxhPWNyZWF0ZUNoYXJDb2RlKHQsaCk7b1tlXT17YmFzZUZvbnRDaGFyQ29kZTppLGFjY2VudEZvbnRDaGFyQ29kZTphLGFjY2VudE9mZnNldDpDfX19aS5zZWFjTWFwPW99Y29uc3QgaD1pLmZvbnRNYXRyaXg/MS9NYXRoLm1heCguLi5pLmZvbnRNYXRyaXguc2xpY2UoMCw0KS5tYXAoTWF0aC5hYnMpKToxZTMsQz1uZXcgT3BlblR5cGVGaWxlQnVpbGRlcigiT1RUTyIpO0MuYWRkVGFibGUoIkNGRiAiLHQuZGF0YSk7Qy5hZGRUYWJsZSgiT1MvMiIsY3JlYXRlT1MyVGFibGUoaSxvKSk7Qy5hZGRUYWJsZSgiY21hcCIsY3JlYXRlQ21hcFRhYmxlKG8sZyxjKSk7Qy5hZGRUYWJsZSgiaGVhZCIsIlwwAVwwXDBcMFwwEFwwXDBcMFwwXDBfDzzDtVwwXDAiK3NhZmVTdHJpbmcxNihoKSsiXDBcMFwwXDDCnlx2fidcMFwwXDBcMMKeXHZ+J1wwXDAiK3NhZmVTdHJpbmcxNihpLmRlc2NlbnQpKyIPw78iK3NhZmVTdHJpbmcxNihpLmFzY2VudCkrc3RyaW5nMTYoaS5pdGFsaWNBbmdsZT8yOjApKyJcMBFcMFwwXDBcMFwwXDAiKTtDLmFkZFRhYmxlKCJoaGVhIiwiXDABXDBcMCIrc2FmZVN0cmluZzE2KGkuYXNjZW50KStzYWZlU3RyaW5nMTYoaS5kZXNjZW50KSsiXDBcMMO/w79cMFwwXDBcMFwwXDAiK3NhZmVTdHJpbmcxNihpLmNhcEhlaWdodCkrc2FmZVN0cmluZzE2KE1hdGgudGFuKGkuaXRhbGljQW5nbGUpKmkueEhlaWdodCkrIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIrc3RyaW5nMTYoYykpO0MuYWRkVGFibGUoImhtdHgiLGZ1bmN0aW9uIGZvbnRGaWVsZHNIbXR4KCl7Y29uc3QgZT10LmNoYXJzdHJpbmdzLGk9dC5jZmY/dC5jZmYud2lkdGhzOm51bGw7bGV0IGE9IlwwXDBcMFwwIjtmb3IobGV0IHQ9MSxyPWM7dDxyO3QrKyl7bGV0IHI9MDtpZihlKXtjb25zdCBpPWVbdC0xXTtyPSJ3aWR0aCJpbiBpP2kud2lkdGg6MH1lbHNlIGkmJihyPU1hdGguY2VpbChpW3RdfHwwKSk7YSs9c3RyaW5nMTYocikrc3RyaW5nMTYoMCl9cmV0dXJuIGF9KCkpO0MuYWRkVGFibGUoIm1heHAiLCJcMFwwUFwwIitzdHJpbmcxNihjKSk7Qy5hZGRUYWJsZSgibmFtZSIsY3JlYXRlTmFtZVRhYmxlKGUpKTtDLmFkZFRhYmxlKCJwb3N0IixjcmVhdGVQb3N0VGFibGUoaSkpO3JldHVybiBDLnRvQXJyYXkoKX1nZXQgX3NwYWNlV2lkdGgoKXtjb25zdCBlPVsic3BhY2UiLCJtaW51cyIsIm9uZSIsImkiLCJJIl07bGV0IHQ7Zm9yKGNvbnN0IGkgb2YgZSl7aWYoaSBpbiB0aGlzLndpZHRocyl7dD10aGlzLndpZHRoc1tpXTticmVha31jb25zdCBlPURpKClbaV07bGV0IGE9MDtpZih0aGlzLmNvbXBvc2l0ZSYmdGhpcy5jTWFwLmNvbnRhaW5zKGUpKXthPXRoaXMuY01hcC5sb29rdXAoZSk7InN0cmluZyI9PXR5cGVvZiBhJiYoYT1jb252ZXJ0Q2lkU3RyaW5nKGUsYSkpfSFhJiZ0aGlzLnRvVW5pY29kZSYmKGE9dGhpcy50b1VuaWNvZGUuY2hhckNvZGVPZihlKSk7YTw9MCYmKGE9ZSk7dD10aGlzLndpZHRoc1thXTtpZih0KWJyZWFrfXJldHVybiBzaGFkb3codGhpcywiX3NwYWNlV2lkdGgiLHR8fHRoaXMuZGVmYXVsdFdpZHRoKX1fY2hhclRvR2x5cGgoZSx0PSExKXtsZXQgaSxhLHIscz10aGlzLl9nbHlwaENhY2hlW2VdO2lmKHM/LmlzU3BhY2U9PT10KXJldHVybiBzO2xldCBuPWU7aWYodGhpcy5jTWFwPy5jb250YWlucyhlKSl7bj10aGlzLmNNYXAubG9va3VwKGUpOyJzdHJpbmciPT10eXBlb2YgbiYmKG49Y29udmVydENpZFN0cmluZyhlLG4pKX1hPXRoaXMud2lkdGhzW25dOyJudW1iZXIiIT10eXBlb2YgYSYmKGE9dGhpcy5kZWZhdWx0V2lkdGgpO2NvbnN0IG89dGhpcy52bWV0cmljcz8uW25dO2xldCBnPXRoaXMudG9Vbmljb2RlLmdldChlKXx8ZTsibnVtYmVyIj09dHlwZW9mIGcmJihnPVN0cmluZy5mcm9tQ2hhckNvZGUoZykpO2xldCBjPXZvaWQgMCE9PXRoaXMudG9Gb250Q2hhcltlXTtpPXRoaXMudG9Gb250Q2hhcltlXXx8ZTtpZih0aGlzLm1pc3NpbmdGaWxlKXtjb25zdCB0PXRoaXMuZGlmZmVyZW5jZXNbZV18fHRoaXMuZGVmYXVsdEVuY29kaW5nW2VdO2lmKCgiLm5vdGRlZiI9PT10fHwiIj09PXQpJiYiVHlwZTEiPT09dGhpcy50eXBlKXtpPTMyO2lmKCIiPT09dCl7YXx8PXRoaXMuX3NwYWNlV2lkdGg7Zz1TdHJpbmcuZnJvbUNoYXJDb2RlKGkpfX1pPWZ1bmN0aW9uIG1hcFNwZWNpYWxVbmljb2RlVmFsdWVzKGUpe3JldHVybiBlPj02NTUyMCYmZTw9NjU1MzU/MDplPj02Mjk3NiYmZTw9NjM3NDM/U2koKVtlXXx8ZToxNzM9PT1lPzQ1OmV9KGkpfXRoaXMuaXNUeXBlM0ZvbnQmJihyPWkpO2xldCBsPW51bGw7aWYodGhpcy5zZWFjTWFwPy5bZV0pe2M9ITA7Y29uc3QgdD10aGlzLnNlYWNNYXBbZV07aT10LmJhc2VGb250Q2hhckNvZGU7bD17Zm9udENoYXI6U3RyaW5nLmZyb21Db2RlUG9pbnQodC5hY2NlbnRGb250Q2hhckNvZGUpLG9mZnNldDp0LmFjY2VudE9mZnNldH19bGV0IGg9IiI7Im51bWJlciI9PXR5cGVvZiBpJiYoaTw9MTExNDExMT9oPVN0cmluZy5mcm9tQ29kZVBvaW50KGkpOndhcm4oYGNoYXJUb0dseXBoIC0gaW52YWxpZCBmb250Q2hhckNvZGU6ICR7aX1gKSk7aWYodGhpcy5taXNzaW5nRmlsZSYmdGhpcy52ZXJ0aWNhbCYmMT09PWgubGVuZ3RoKXtjb25zdCBlPVlpKClbaC5jaGFyQ29kZUF0KDApXTtlJiYoaD1nPVN0cmluZy5mcm9tQ2hhckNvZGUoZSkpfXM9bmV3IGZvbnRzX0dseXBoKGUsaCxnLGwsYSxvLHIsdCxjKTtyZXR1cm4gdGhpcy5fZ2x5cGhDYWNoZVtlXT1zfWNoYXJzVG9HbHlwaHMoZSl7bGV0IHQ9dGhpcy5fY2hhcnNDYWNoZVtlXTtpZih0KXJldHVybiB0O3Q9W107aWYodGhpcy5jTWFwKXtjb25zdCBpPU9iamVjdC5jcmVhdGUobnVsbCksYT1lLmxlbmd0aDtsZXQgcj0wO2Zvcig7cjxhOyl7dGhpcy5jTWFwLnJlYWRDaGFyQ29kZShlLHIsaSk7Y29uc3R7Y2hhcmNvZGU6YSxsZW5ndGg6c309aTtyKz1zO2NvbnN0IG49dGhpcy5fY2hhclRvR2x5cGgoYSwxPT09cyYmMzI9PT1lLmNoYXJDb2RlQXQoci0xKSk7dC5wdXNoKG4pfX1lbHNlIGZvcihsZXQgaT0wLGE9ZS5sZW5ndGg7aTxhOysraSl7Y29uc3QgYT1lLmNoYXJDb2RlQXQoaSkscj10aGlzLl9jaGFyVG9HbHlwaChhLDMyPT09YSk7dC5wdXNoKHIpfXJldHVybiB0aGlzLl9jaGFyc0NhY2hlW2VdPXR9Z2V0Q2hhclBvc2l0aW9ucyhlKXtjb25zdCB0PVtdO2lmKHRoaXMuY01hcCl7Y29uc3QgaT1PYmplY3QuY3JlYXRlKG51bGwpO2xldCBhPTA7Zm9yKDthPGUubGVuZ3RoOyl7dGhpcy5jTWFwLnJlYWRDaGFyQ29kZShlLGEsaSk7Y29uc3Qgcj1pLmxlbmd0aDt0LnB1c2goW2EsYStyXSk7YSs9cn19ZWxzZSBmb3IobGV0IGk9MCxhPWUubGVuZ3RoO2k8YTsrK2kpdC5wdXNoKFtpLGkrMV0pO3JldHVybiB0fWdldCBnbHlwaENhY2hlVmFsdWVzKCl7cmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5fZ2x5cGhDYWNoZSl9ZW5jb2RlU3RyaW5nKGUpe2NvbnN0IHQ9W10saT1bXSxoYXNDdXJyZW50QnVmRXJyb3JzPSgpPT50Lmxlbmd0aCUyPT0xLGE9dGhpcy50b1VuaWNvZGUgaW5zdGFuY2VvZiBJZGVudGl0eVRvVW5pY29kZU1hcD9lPT50aGlzLnRvVW5pY29kZS5jaGFyQ29kZU9mKGUpOmU9PnRoaXMudG9Vbmljb2RlLmNoYXJDb2RlT2YoU3RyaW5nLmZyb21Db2RlUG9pbnQoZSkpO2ZvcihsZXQgcj0wLHM9ZS5sZW5ndGg7cjxzO3IrKyl7Y29uc3Qgcz1lLmNvZGVQb2ludEF0KHIpO3M+NTUyOTUmJihzPDU3MzQ0fHxzPjY1NTMzKSYmcisrO2lmKHRoaXMudG9Vbmljb2RlKXtjb25zdCBlPWEocyk7aWYoLTEhPT1lKXtpZihoYXNDdXJyZW50QnVmRXJyb3JzKCkpe3QucHVzaChpLmpvaW4oIiIpKTtpLmxlbmd0aD0wfWZvcihsZXQgdD0odGhpcy5jTWFwP3RoaXMuY01hcC5nZXRDaGFyQ29kZUxlbmd0aChlKToxKS0xO3Q+PTA7dC0tKWkucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGU+PjgqdCYyNTUpKTtjb250aW51ZX19aWYoIWhhc0N1cnJlbnRCdWZFcnJvcnMoKSl7dC5wdXNoKGkuam9pbigiIikpO2kubGVuZ3RoPTB9aS5wdXNoKFN0cmluZy5mcm9tQ29kZVBvaW50KHMpKX10LnB1c2goaS5qb2luKCIiKSk7cmV0dXJuIHR9fWNsYXNzIEVycm9yRm9udHtjb25zdHJ1Y3RvcihlKXt0aGlzLmVycm9yPWU7dGhpcy5sb2FkZWROYW1lPSJnX2ZvbnRfZXJyb3IiO3RoaXMubWlzc2luZ0ZpbGU9ITB9Y2hhcnNUb0dseXBocygpe3JldHVybltdfWVuY29kZVN0cmluZyhlKXtyZXR1cm5bZV19ZXhwb3J0RGF0YShlPSExKXtyZXR1cm57ZXJyb3I6dGhpcy5lcnJvcn19fWNvbnN0IGxhPTIsaGE9MyxDYT00LEJhPTUsUWE9NixFYT03O2NsYXNzIFBhdHRlcm57Y29uc3RydWN0b3IoKXt1bnJlYWNoYWJsZSgiQ2Fubm90IGluaXRpYWxpemUgUGF0dGVybi4iKX1zdGF0aWMgcGFyc2VTaGFkaW5nKGUsdCxpLGEscil7Y29uc3Qgcz1lIGluc3RhbmNlb2YgQmFzZVN0cmVhbT9lLmRpY3Q6ZSxuPXMuZ2V0KCJTaGFkaW5nVHlwZSIpO3RyeXtzd2l0Y2gobil7Y2FzZSBsYTpjYXNlIGhhOnJldHVybiBuZXcgUmFkaWFsQXhpYWxTaGFkaW5nKHMsdCxpLGEscik7Y2FzZSBDYTpjYXNlIEJhOmNhc2UgUWE6Y2FzZSBFYTpyZXR1cm4gbmV3IE1lc2hTaGFkaW5nKGUsdCxpLGEscik7ZGVmYXVsdDp0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIlVuc3VwcG9ydGVkIFNoYWRpbmdUeXBlOiAiK24pfX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTt3YXJuKGUpO3JldHVybiBuZXcgRHVtbXlTaGFkaW5nfX19Y2xhc3MgQmFzZVNoYWRpbmd7c3RhdGljIFNNQUxMX05VTUJFUj0xZS02O2dldElSKCl7dW5yZWFjaGFibGUoIkFic3RyYWN0IG1ldGhvZCBgZ2V0SVJgIGNhbGxlZC4iKX19Y2xhc3MgUmFkaWFsQXhpYWxTaGFkaW5nIGV4dGVuZHMgQmFzZVNoYWRpbmd7Y29uc3RydWN0b3IoZSx0LGksYSxyKXtzdXBlcigpO3RoaXMuc2hhZGluZ1R5cGU9ZS5nZXQoIlNoYWRpbmdUeXBlIik7bGV0IHM9MDt0aGlzLnNoYWRpbmdUeXBlPT09bGE/cz00OnRoaXMuc2hhZGluZ1R5cGU9PT1oYSYmKHM9Nik7dGhpcy5jb29yZHNBcnI9ZS5nZXRBcnJheSgiQ29vcmRzIik7aWYoIWlzTnVtYmVyQXJyYXkodGhpcy5jb29yZHNBcnIscykpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJSYWRpYWxBeGlhbFNoYWRpbmc6IEludmFsaWQgL0Nvb3JkcyBhcnJheS4iKTtjb25zdCBuPUNvbG9yU3BhY2UucGFyc2Uoe2NzOmUuZ2V0UmF3KCJDUyIpfHxlLmdldFJhdygiQ29sb3JTcGFjZSIpLHhyZWY6dCxyZXNvdXJjZXM6aSxwZGZGdW5jdGlvbkZhY3Rvcnk6YSxsb2NhbENvbG9yU3BhY2VDYWNoZTpyfSk7dGhpcy5iYm94PWxvb2t1cE5vcm1hbFJlY3QoZS5nZXRBcnJheSgiQkJveCIpLG51bGwpO2xldCBvPTAsZz0xO2NvbnN0IGM9ZS5nZXRBcnJheSgiRG9tYWluIik7aXNOdW1iZXJBcnJheShjLDIpJiYoW28sZ109Yyk7bGV0IGw9ITEsaD0hMTtjb25zdCBDPWUuZ2V0QXJyYXkoIkV4dGVuZCIpOyhmdW5jdGlvbiBpc0Jvb2xlYW5BcnJheShlLHQpe3JldHVybiBBcnJheS5pc0FycmF5KGUpJiYobnVsbD09PXR8fGUubGVuZ3RoPT09dCkmJmUuZXZlcnkoKGU9PiJib29sZWFuIj09dHlwZW9mIGUpKX0pKEMsMikmJihbbCxoXT1DKTtpZighKHRoaXMuc2hhZGluZ1R5cGUhPT1oYXx8bCYmaCkpe2NvbnN0W2UsdCxpLGEscixzXT10aGlzLmNvb3Jkc0FycixuPU1hdGguaHlwb3QoZS1hLHQtcik7aTw9cytuJiZzPD1pK24mJndhcm4oIlVuc3VwcG9ydGVkIHJhZGlhbCBncmFkaWVudC4iKX10aGlzLmV4dGVuZFN0YXJ0PWw7dGhpcy5leHRlbmRFbmQ9aDtjb25zdCBRPWUuZ2V0UmF3KCJGdW5jdGlvbiIpLEU9YS5jcmVhdGVGcm9tQXJyYXkoUSksdT0oZy1vKS84NDAsZD10aGlzLmNvbG9yU3RvcHM9W107aWYobz49Z3x8dTw9MCl7aW5mbygiQmFkIHNoYWRpbmcgZG9tYWluLiIpO3JldHVybn1jb25zdCBmPW5ldyBGbG9hdDMyQXJyYXkobi5udW1Db21wcykscD1uZXcgRmxvYXQzMkFycmF5KDEpO2xldCBtLHk9MDtwWzBdPW87RShwLDAsZiwwKTtsZXQgdz1uLmdldFJnYihmLDApO2NvbnN0IGI9VXRpbC5tYWtlSGV4Q29sb3Iod1swXSx3WzFdLHdbMl0pO2QucHVzaChbMCxiXSk7bGV0IEQ9MTtwWzBdPW8rdTtFKHAsMCxmLDApO2xldCBTPW4uZ2V0UmdiKGYsMCksaz1TWzBdLXdbMF0rMSxSPVNbMV0td1sxXSsxLE49U1syXS13WzJdKzEsRz1TWzBdLXdbMF0tMSxNPVNbMV0td1sxXS0xLFU9U1syXS13WzJdLTE7Zm9yKGxldCBlPTI7ZTw4NDA7ZSsrKXtwWzBdPW8rZSp1O0UocCwwLGYsMCk7bT1uLmdldFJnYihmLDApO2NvbnN0IHQ9ZS15O2s9TWF0aC5taW4oaywobVswXS13WzBdKzEpL3QpO1I9TWF0aC5taW4oUiwobVsxXS13WzFdKzEpL3QpO049TWF0aC5taW4oTiwobVsyXS13WzJdKzEpL3QpO0c9TWF0aC5tYXgoRywobVswXS13WzBdLTEpL3QpO009TWF0aC5tYXgoTSwobVsxXS13WzFdLTEpL3QpO1U9TWF0aC5tYXgoVSwobVsyXS13WzJdLTEpL3QpO2lmKCEoRzw9ayYmTTw9UiYmVTw9Tikpe2NvbnN0IGU9VXRpbC5tYWtlSGV4Q29sb3IoU1swXSxTWzFdLFNbMl0pO2QucHVzaChbRC84NDAsZV0pO2s9bVswXS1TWzBdKzE7Uj1tWzFdLVNbMV0rMTtOPW1bMl0tU1syXSsxO0c9bVswXS1TWzBdLTE7TT1tWzFdLVNbMV0tMTtVPW1bMl0tU1syXS0xO3k9RDt3PVN9RD1lO1M9bX1jb25zdCB4PVV0aWwubWFrZUhleENvbG9yKFNbMF0sU1sxXSxTWzJdKTtkLnB1c2goWzEseF0pO2xldCBMPSJ0cmFuc3BhcmVudCI7aWYoZS5oYXMoIkJhY2tncm91bmQiKSl7bT1uLmdldFJnYihlLmdldCgiQmFja2dyb3VuZCIpLDApO0w9VXRpbC5tYWtlSGV4Q29sb3IobVswXSxtWzFdLG1bMl0pfWlmKCFsKXtkLnVuc2hpZnQoWzAsTF0pO2RbMV1bMF0rPUJhc2VTaGFkaW5nLlNNQUxMX05VTUJFUn1pZighaCl7ZC5hdCgtMSlbMF0tPUJhc2VTaGFkaW5nLlNNQUxMX05VTUJFUjtkLnB1c2goWzEsTF0pfXRoaXMuY29sb3JTdG9wcz1kfWdldElSKCl7Y29uc3R7Y29vcmRzQXJyOmUsc2hhZGluZ1R5cGU6dH09dGhpcztsZXQgaSxhLHIscyxuO2lmKHQ9PT1sYSl7YT1bZVswXSxlWzFdXTtyPVtlWzJdLGVbM11dO3M9bnVsbDtuPW51bGw7aT0iYXhpYWwifWVsc2UgaWYodD09PWhhKXthPVtlWzBdLGVbMV1dO3I9W2VbM10sZVs0XV07cz1lWzJdO249ZVs1XTtpPSJyYWRpYWwifWVsc2UgdW5yZWFjaGFibGUoYGdldFBhdHRlcm4gdHlwZSB1bmtub3duOiAke3R9YCk7cmV0dXJuWyJSYWRpYWxBeGlhbCIsaSx0aGlzLmJib3gsdGhpcy5jb2xvclN0b3BzLGEscixzLG5dfX1jbGFzcyBNZXNoU3RyZWFtUmVhZGVye2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5zdHJlYW09ZTt0aGlzLmNvbnRleHQ9dDt0aGlzLmJ1ZmZlcj0wO3RoaXMuYnVmZmVyTGVuZ3RoPTA7Y29uc3QgaT10Lm51bUNvbXBzO3RoaXMudG1wQ29tcHNCdWY9bmV3IEZsb2F0MzJBcnJheShpKTtjb25zdCBhPXQuY29sb3JTcGFjZS5udW1Db21wczt0aGlzLnRtcENzQ29tcHNCdWY9dC5jb2xvckZuP25ldyBGbG9hdDMyQXJyYXkoYSk6dGhpcy50bXBDb21wc0J1Zn1nZXQgaGFzRGF0YSgpe2lmKHRoaXMuc3RyZWFtLmVuZClyZXR1cm4gdGhpcy5zdHJlYW0ucG9zPHRoaXMuc3RyZWFtLmVuZDtpZih0aGlzLmJ1ZmZlckxlbmd0aD4wKXJldHVybiEwO2NvbnN0IGU9dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpO2lmKGU8MClyZXR1cm4hMTt0aGlzLmJ1ZmZlcj1lO3RoaXMuYnVmZmVyTGVuZ3RoPTg7cmV0dXJuITB9cmVhZEJpdHMoZSl7bGV0IHQ9dGhpcy5idWZmZXIsaT10aGlzLmJ1ZmZlckxlbmd0aDtpZigzMj09PWUpe2lmKDA9PT1pKXJldHVybih0aGlzLnN0cmVhbS5nZXRCeXRlKCk8PDI0fHRoaXMuc3RyZWFtLmdldEJ5dGUoKTw8MTZ8dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpPDw4fHRoaXMuc3RyZWFtLmdldEJ5dGUoKSk+Pj4wO3Q9dDw8MjR8dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpPDwxNnx0aGlzLnN0cmVhbS5nZXRCeXRlKCk8PDh8dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpO2NvbnN0IGU9dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpO3RoaXMuYnVmZmVyPWUmKDE8PGkpLTE7cmV0dXJuKHQ8PDgtaXwoMjU1JmUpPj5pKT4+PjB9aWYoOD09PWUmJjA9PT1pKXJldHVybiB0aGlzLnN0cmVhbS5nZXRCeXRlKCk7Zm9yKDtpPGU7KXt0PXQ8PDh8dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpO2krPTh9aS09ZTt0aGlzLmJ1ZmZlckxlbmd0aD1pO3RoaXMuYnVmZmVyPXQmKDE8PGkpLTE7cmV0dXJuIHQ+Pml9YWxpZ24oKXt0aGlzLmJ1ZmZlcj0wO3RoaXMuYnVmZmVyTGVuZ3RoPTB9cmVhZEZsYWcoKXtyZXR1cm4gdGhpcy5yZWFkQml0cyh0aGlzLmNvbnRleHQuYml0c1BlckZsYWcpfXJlYWRDb29yZGluYXRlKCl7Y29uc3QgZT10aGlzLmNvbnRleHQuYml0c1BlckNvb3JkaW5hdGUsdD10aGlzLnJlYWRCaXRzKGUpLGk9dGhpcy5yZWFkQml0cyhlKSxhPXRoaXMuY29udGV4dC5kZWNvZGUscj1lPDMyPzEvKCgxPDxlKS0xKToyLjMyODMwNjQzNjUzODY5NjNlLTEwO3JldHVyblt0KnIqKGFbMV0tYVswXSkrYVswXSxpKnIqKGFbM10tYVsyXSkrYVsyXV19cmVhZENvbXBvbmVudHMoKXtjb25zdCBlPXRoaXMuY29udGV4dC5udW1Db21wcyx0PXRoaXMuY29udGV4dC5iaXRzUGVyQ29tcG9uZW50LGk9dDwzMj8xLygoMTw8dCktMSk6Mi4zMjgzMDY0MzY1Mzg2OTYzZS0xMCxhPXRoaXMuY29udGV4dC5kZWNvZGUscj10aGlzLnRtcENvbXBzQnVmO2ZvcihsZXQgcz0wLG49NDtzPGU7cysrLG4rPTIpe2NvbnN0IGU9dGhpcy5yZWFkQml0cyh0KTtyW3NdPWUqaSooYVtuKzFdLWFbbl0pK2Fbbl19Y29uc3Qgcz10aGlzLnRtcENzQ29tcHNCdWY7dGhpcy5jb250ZXh0LmNvbG9yRm4mJnRoaXMuY29udGV4dC5jb2xvckZuKHIsMCxzLDApO3JldHVybiB0aGlzLmNvbnRleHQuY29sb3JTcGFjZS5nZXRSZ2IocywwKX19bGV0IHVhPU9iamVjdC5jcmVhdGUobnVsbCk7ZnVuY3Rpb24gZ2V0QihlKXtyZXR1cm4gdWFbZV18fD1mdW5jdGlvbiBidWlsZEIoZSl7Y29uc3QgdD1bXTtmb3IobGV0IGk9MDtpPD1lO2krKyl7Y29uc3QgYT1pL2Uscj0xLWE7dC5wdXNoKG5ldyBGbG9hdDMyQXJyYXkoW3IqKjMsMyphKnIqKjIsMyphKioyKnIsYSoqM10pKX1yZXR1cm4gdH0oZSl9Y2xhc3MgTWVzaFNoYWRpbmcgZXh0ZW5kcyBCYXNlU2hhZGluZ3tzdGF0aWMgTUlOX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQ9MztzdGF0aWMgTUFYX1NQTElUX1BBVENIX0NIVU5LU19BTU9VTlQ9MjA7c3RhdGljIFRSSUFOR0xFX0RFTlNJVFk9MjA7Y29uc3RydWN0b3IoZSx0LGksYSxyKXtzdXBlcigpO2lmKCEoZSBpbnN0YW5jZW9mIEJhc2VTdHJlYW0pKXRocm93IG5ldyBGb3JtYXRFcnJvcigiTWVzaCBkYXRhIGlzIG5vdCBhIHN0cmVhbSIpO2NvbnN0IHM9ZS5kaWN0O3RoaXMuc2hhZGluZ1R5cGU9cy5nZXQoIlNoYWRpbmdUeXBlIik7dGhpcy5iYm94PWxvb2t1cE5vcm1hbFJlY3Qocy5nZXRBcnJheSgiQkJveCIpLG51bGwpO2NvbnN0IG49Q29sb3JTcGFjZS5wYXJzZSh7Y3M6cy5nZXRSYXcoIkNTIil8fHMuZ2V0UmF3KCJDb2xvclNwYWNlIikseHJlZjp0LHJlc291cmNlczppLHBkZkZ1bmN0aW9uRmFjdG9yeTphLGxvY2FsQ29sb3JTcGFjZUNhY2hlOnJ9KTt0aGlzLmJhY2tncm91bmQ9cy5oYXMoIkJhY2tncm91bmQiKT9uLmdldFJnYihzLmdldCgiQmFja2dyb3VuZCIpLDApOm51bGw7Y29uc3Qgbz1zLmdldFJhdygiRnVuY3Rpb24iKSxnPW8/YS5jcmVhdGVGcm9tQXJyYXkobyk6bnVsbDt0aGlzLmNvb3Jkcz1bXTt0aGlzLmNvbG9ycz1bXTt0aGlzLmZpZ3VyZXM9W107Y29uc3QgYz17Yml0c1BlckNvb3JkaW5hdGU6cy5nZXQoIkJpdHNQZXJDb29yZGluYXRlIiksYml0c1BlckNvbXBvbmVudDpzLmdldCgiQml0c1BlckNvbXBvbmVudCIpLGJpdHNQZXJGbGFnOnMuZ2V0KCJCaXRzUGVyRmxhZyIpLGRlY29kZTpzLmdldEFycmF5KCJEZWNvZGUiKSxjb2xvckZuOmcsY29sb3JTcGFjZTpuLG51bUNvbXBzOmc/MTpuLm51bUNvbXBzfSxsPW5ldyBNZXNoU3RyZWFtUmVhZGVyKGUsYyk7bGV0IGg9ITE7c3dpdGNoKHRoaXMuc2hhZGluZ1R5cGUpe2Nhc2UgQ2E6dGhpcy5fZGVjb2RlVHlwZTRTaGFkaW5nKGwpO2JyZWFrO2Nhc2UgQmE6Y29uc3QgZT0wfHMuZ2V0KCJWZXJ0aWNlc1BlclJvdyIpO2lmKGU8Mil0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkludmFsaWQgVmVydGljZXNQZXJSb3ciKTt0aGlzLl9kZWNvZGVUeXBlNVNoYWRpbmcobCxlKTticmVhaztjYXNlIFFhOnRoaXMuX2RlY29kZVR5cGU2U2hhZGluZyhsKTtoPSEwO2JyZWFrO2Nhc2UgRWE6dGhpcy5fZGVjb2RlVHlwZTdTaGFkaW5nKGwpO2g9ITA7YnJlYWs7ZGVmYXVsdDp1bnJlYWNoYWJsZSgiVW5zdXBwb3J0ZWQgbWVzaCB0eXBlLiIpfWlmKGgpe3RoaXMuX3VwZGF0ZUJvdW5kcygpO2ZvcihsZXQgZT0wLHQ9dGhpcy5maWd1cmVzLmxlbmd0aDtlPHQ7ZSsrKXRoaXMuX2J1aWxkRmlndXJlRnJvbVBhdGNoKGUpfXRoaXMuX3VwZGF0ZUJvdW5kcygpO3RoaXMuX3BhY2tEYXRhKCl9X2RlY29kZVR5cGU0U2hhZGluZyhlKXtjb25zdCB0PXRoaXMuY29vcmRzLGk9dGhpcy5jb2xvcnMsYT1bXSxyPVtdO2xldCBzPTA7Zm9yKDtlLmhhc0RhdGE7KXtjb25zdCBuPWUucmVhZEZsYWcoKSxvPWUucmVhZENvb3JkaW5hdGUoKSxnPWUucmVhZENvbXBvbmVudHMoKTtpZigwPT09cyl7aWYoISgwPD1uJiZuPD0yKSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIlVua25vd24gdHlwZTQgZmxhZyIpO3N3aXRjaChuKXtjYXNlIDA6cz0zO2JyZWFrO2Nhc2UgMTpyLnB1c2goci5hdCgtMiksci5hdCgtMSkpO3M9MTticmVhaztjYXNlIDI6ci5wdXNoKHIuYXQoLTMpLHIuYXQoLTEpKTtzPTF9YS5wdXNoKG4pfXIucHVzaCh0Lmxlbmd0aCk7dC5wdXNoKG8pO2kucHVzaChnKTtzLS07ZS5hbGlnbigpfXRoaXMuZmlndXJlcy5wdXNoKHt0eXBlOiJ0cmlhbmdsZXMiLGNvb3JkczpuZXcgSW50MzJBcnJheShyKSxjb2xvcnM6bmV3IEludDMyQXJyYXkocil9KX1fZGVjb2RlVHlwZTVTaGFkaW5nKGUsdCl7Y29uc3QgaT10aGlzLmNvb3JkcyxhPXRoaXMuY29sb3JzLHI9W107Zm9yKDtlLmhhc0RhdGE7KXtjb25zdCB0PWUucmVhZENvb3JkaW5hdGUoKSxzPWUucmVhZENvbXBvbmVudHMoKTtyLnB1c2goaS5sZW5ndGgpO2kucHVzaCh0KTthLnB1c2gocyl9dGhpcy5maWd1cmVzLnB1c2goe3R5cGU6ImxhdHRpY2UiLGNvb3JkczpuZXcgSW50MzJBcnJheShyKSxjb2xvcnM6bmV3IEludDMyQXJyYXkociksdmVydGljZXNQZXJSb3c6dH0pfV9kZWNvZGVUeXBlNlNoYWRpbmcoZSl7Y29uc3QgdD10aGlzLmNvb3JkcyxpPXRoaXMuY29sb3JzLGE9bmV3IEludDMyQXJyYXkoMTYpLHI9bmV3IEludDMyQXJyYXkoNCk7Zm9yKDtlLmhhc0RhdGE7KXtjb25zdCBzPWUucmVhZEZsYWcoKTtpZighKDA8PXMmJnM8PTMpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiVW5rbm93biB0eXBlNiBmbGFnIik7Y29uc3Qgbj10Lmxlbmd0aDtmb3IobGV0IGk9MCxhPTAhPT1zPzg6MTI7aTxhO2krKyl0LnB1c2goZS5yZWFkQ29vcmRpbmF0ZSgpKTtjb25zdCBvPWkubGVuZ3RoO2ZvcihsZXQgdD0wLGE9MCE9PXM/Mjo0O3Q8YTt0KyspaS5wdXNoKGUucmVhZENvbXBvbmVudHMoKSk7bGV0IGcsYyxsLGg7c3dpdGNoKHMpe2Nhc2UgMDphWzEyXT1uKzM7YVsxM109bis0O2FbMTRdPW4rNTthWzE1XT1uKzY7YVs4XT1uKzI7YVsxMV09bis3O2FbNF09bisxO2FbN109bis4O2FbMF09bjthWzFdPW4rMTE7YVsyXT1uKzEwO2FbM109bis5O3JbMl09bysxO3JbM109bysyO3JbMF09bztyWzFdPW8rMzticmVhaztjYXNlIDE6Zz1hWzEyXTtjPWFbMTNdO2w9YVsxNF07aD1hWzE1XTthWzEyXT1oO2FbMTNdPW4rMDthWzE0XT1uKzE7YVsxNV09bisyO2FbOF09bDthWzExXT1uKzM7YVs0XT1jO2FbN109bis0O2FbMF09ZzthWzFdPW4rNzthWzJdPW4rNjthWzNdPW4rNTtnPXJbMl07Yz1yWzNdO3JbMl09YztyWzNdPW87clswXT1nO3JbMV09bysxO2JyZWFrO2Nhc2UgMjpnPWFbMTVdO2M9YVsxMV07YVsxMl09YVszXTthWzEzXT1uKzA7YVsxNF09bisxO2FbMTVdPW4rMjthWzhdPWFbN107YVsxMV09biszO2FbNF09YzthWzddPW4rNDthWzBdPWc7YVsxXT1uKzc7YVsyXT1uKzY7YVszXT1uKzU7Zz1yWzNdO3JbMl09clsxXTtyWzNdPW87clswXT1nO3JbMV09bysxO2JyZWFrO2Nhc2UgMzphWzEyXT1hWzBdO2FbMTNdPW4rMDthWzE0XT1uKzE7YVsxNV09bisyO2FbOF09YVsxXTthWzExXT1uKzM7YVs0XT1hWzJdO2FbN109bis0O2FbMF09YVszXTthWzFdPW4rNzthWzJdPW4rNjthWzNdPW4rNTtyWzJdPXJbMF07clszXT1vO3JbMF09clsxXTtyWzFdPW8rMX1hWzVdPXQubGVuZ3RoO3QucHVzaChbKC00KnRbYVswXV1bMF0tdFthWzE1XV1bMF0rNioodFthWzRdXVswXSt0W2FbMV1dWzBdKS0yKih0W2FbMTJdXVswXSt0W2FbM11dWzBdKSszKih0W2FbMTNdXVswXSt0W2FbN11dWzBdKSkvOSwoLTQqdFthWzBdXVsxXS10W2FbMTVdXVsxXSs2Kih0W2FbNF1dWzFdK3RbYVsxXV1bMV0pLTIqKHRbYVsxMl1dWzFdK3RbYVszXV1bMV0pKzMqKHRbYVsxM11dWzFdK3RbYVs3XV1bMV0pKS85XSk7YVs2XT10Lmxlbmd0aDt0LnB1c2goWygtNCp0W2FbM11dWzBdLXRbYVsxMl1dWzBdKzYqKHRbYVsyXV1bMF0rdFthWzddXVswXSktMioodFthWzBdXVswXSt0W2FbMTVdXVswXSkrMyoodFthWzRdXVswXSt0W2FbMTRdXVswXSkpLzksKC00KnRbYVszXV1bMV0tdFthWzEyXV1bMV0rNioodFthWzJdXVsxXSt0W2FbN11dWzFdKS0yKih0W2FbMF1dWzFdK3RbYVsxNV1dWzFdKSszKih0W2FbNF1dWzFdK3RbYVsxNF1dWzFdKSkvOV0pO2FbOV09dC5sZW5ndGg7dC5wdXNoKFsoLTQqdFthWzEyXV1bMF0tdFthWzNdXVswXSs2Kih0W2FbOF1dWzBdK3RbYVsxM11dWzBdKS0yKih0W2FbMF1dWzBdK3RbYVsxNV1dWzBdKSszKih0W2FbMTFdXVswXSt0W2FbMV1dWzBdKSkvOSwoLTQqdFthWzEyXV1bMV0tdFthWzNdXVsxXSs2Kih0W2FbOF1dWzFdK3RbYVsxM11dWzFdKS0yKih0W2FbMF1dWzFdK3RbYVsxNV1dWzFdKSszKih0W2FbMTFdXVsxXSt0W2FbMV1dWzFdKSkvOV0pO2FbMTBdPXQubGVuZ3RoO3QucHVzaChbKC00KnRbYVsxNV1dWzBdLXRbYVswXV1bMF0rNioodFthWzExXV1bMF0rdFthWzE0XV1bMF0pLTIqKHRbYVsxMl1dWzBdK3RbYVszXV1bMF0pKzMqKHRbYVsyXV1bMF0rdFthWzhdXVswXSkpLzksKC00KnRbYVsxNV1dWzFdLXRbYVswXV1bMV0rNioodFthWzExXV1bMV0rdFthWzE0XV1bMV0pLTIqKHRbYVsxMl1dWzFdK3RbYVszXV1bMV0pKzMqKHRbYVsyXV1bMV0rdFthWzhdXVsxXSkpLzldKTt0aGlzLmZpZ3VyZXMucHVzaCh7dHlwZToicGF0Y2giLGNvb3JkczpuZXcgSW50MzJBcnJheShhKSxjb2xvcnM6bmV3IEludDMyQXJyYXkocil9KX19X2RlY29kZVR5cGU3U2hhZGluZyhlKXtjb25zdCB0PXRoaXMuY29vcmRzLGk9dGhpcy5jb2xvcnMsYT1uZXcgSW50MzJBcnJheSgxNikscj1uZXcgSW50MzJBcnJheSg0KTtmb3IoO2UuaGFzRGF0YTspe2NvbnN0IHM9ZS5yZWFkRmxhZygpO2lmKCEoMDw9cyYmczw9MykpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJVbmtub3duIHR5cGU3IGZsYWciKTtjb25zdCBuPXQubGVuZ3RoO2ZvcihsZXQgaT0wLGE9MCE9PXM/MTI6MTY7aTxhO2krKyl0LnB1c2goZS5yZWFkQ29vcmRpbmF0ZSgpKTtjb25zdCBvPWkubGVuZ3RoO2ZvcihsZXQgdD0wLGE9MCE9PXM/Mjo0O3Q8YTt0KyspaS5wdXNoKGUucmVhZENvbXBvbmVudHMoKSk7bGV0IGcsYyxsLGg7c3dpdGNoKHMpe2Nhc2UgMDphWzEyXT1uKzM7YVsxM109bis0O2FbMTRdPW4rNTthWzE1XT1uKzY7YVs4XT1uKzI7YVs5XT1uKzEzO2FbMTBdPW4rMTQ7YVsxMV09bis3O2FbNF09bisxO2FbNV09bisxMjthWzZdPW4rMTU7YVs3XT1uKzg7YVswXT1uO2FbMV09bisxMTthWzJdPW4rMTA7YVszXT1uKzk7clsyXT1vKzE7clszXT1vKzI7clswXT1vO3JbMV09byszO2JyZWFrO2Nhc2UgMTpnPWFbMTJdO2M9YVsxM107bD1hWzE0XTtoPWFbMTVdO2FbMTJdPWg7YVsxM109biswO2FbMTRdPW4rMTthWzE1XT1uKzI7YVs4XT1sO2FbOV09bis5O2FbMTBdPW4rMTA7YVsxMV09biszO2FbNF09YzthWzVdPW4rODthWzZdPW4rMTE7YVs3XT1uKzQ7YVswXT1nO2FbMV09bis3O2FbMl09bis2O2FbM109bis1O2c9clsyXTtjPXJbM107clsyXT1jO3JbM109bztyWzBdPWc7clsxXT1vKzE7YnJlYWs7Y2FzZSAyOmc9YVsxNV07Yz1hWzExXTthWzEyXT1hWzNdO2FbMTNdPW4rMDthWzE0XT1uKzE7YVsxNV09bisyO2FbOF09YVs3XTthWzldPW4rOTthWzEwXT1uKzEwO2FbMTFdPW4rMzthWzRdPWM7YVs1XT1uKzg7YVs2XT1uKzExO2FbN109bis0O2FbMF09ZzthWzFdPW4rNzthWzJdPW4rNjthWzNdPW4rNTtnPXJbM107clsyXT1yWzFdO3JbM109bztyWzBdPWc7clsxXT1vKzE7YnJlYWs7Y2FzZSAzOmFbMTJdPWFbMF07YVsxM109biswO2FbMTRdPW4rMTthWzE1XT1uKzI7YVs4XT1hWzFdO2FbOV09bis5O2FbMTBdPW4rMTA7YVsxMV09biszO2FbNF09YVsyXTthWzVdPW4rODthWzZdPW4rMTE7YVs3XT1uKzQ7YVswXT1hWzNdO2FbMV09bis3O2FbMl09bis2O2FbM109bis1O3JbMl09clswXTtyWzNdPW87clswXT1yWzFdO3JbMV09bysxfXRoaXMuZmlndXJlcy5wdXNoKHt0eXBlOiJwYXRjaCIsY29vcmRzOm5ldyBJbnQzMkFycmF5KGEpLGNvbG9yczpuZXcgSW50MzJBcnJheShyKX0pfX1fYnVpbGRGaWd1cmVGcm9tUGF0Y2goZSl7Y29uc3QgdD10aGlzLmZpZ3VyZXNbZV07YXNzZXJ0KCJwYXRjaCI9PT10LnR5cGUsIlVuZXhwZWN0ZWQgcGF0Y2ggbWVzaCBmaWd1cmUiKTtjb25zdCBpPXRoaXMuY29vcmRzLGE9dGhpcy5jb2xvcnMscj10LmNvb3JkcyxzPXQuY29sb3JzLG49TWF0aC5taW4oaVtyWzBdXVswXSxpW3JbM11dWzBdLGlbclsxMl1dWzBdLGlbclsxNV1dWzBdKSxvPU1hdGgubWluKGlbclswXV1bMV0saVtyWzNdXVsxXSxpW3JbMTJdXVsxXSxpW3JbMTVdXVsxXSksZz1NYXRoLm1heChpW3JbMF1dWzBdLGlbclszXV1bMF0saVtyWzEyXV1bMF0saVtyWzE1XV1bMF0pLGM9TWF0aC5tYXgoaVtyWzBdXVsxXSxpW3JbM11dWzFdLGlbclsxMl1dWzFdLGlbclsxNV1dWzFdKTtsZXQgbD1NYXRoLmNlaWwoKGctbikqTWVzaFNoYWRpbmcuVFJJQU5HTEVfREVOU0lUWS8odGhpcy5ib3VuZHNbMl0tdGhpcy5ib3VuZHNbMF0pKTtsPU1hdGgubWF4KE1lc2hTaGFkaW5nLk1JTl9TUExJVF9QQVRDSF9DSFVOS1NfQU1PVU5ULE1hdGgubWluKE1lc2hTaGFkaW5nLk1BWF9TUExJVF9QQVRDSF9DSFVOS1NfQU1PVU5ULGwpKTtsZXQgaD1NYXRoLmNlaWwoKGMtbykqTWVzaFNoYWRpbmcuVFJJQU5HTEVfREVOU0lUWS8odGhpcy5ib3VuZHNbM10tdGhpcy5ib3VuZHNbMV0pKTtoPU1hdGgubWF4KE1lc2hTaGFkaW5nLk1JTl9TUExJVF9QQVRDSF9DSFVOS1NfQU1PVU5ULE1hdGgubWluKE1lc2hTaGFkaW5nLk1BWF9TUExJVF9QQVRDSF9DSFVOS1NfQU1PVU5ULGgpKTtjb25zdCBDPWwrMSxRPW5ldyBJbnQzMkFycmF5KChoKzEpKkMpLEU9bmV3IEludDMyQXJyYXkoKGgrMSkqQyk7bGV0IHU9MDtjb25zdCBkPW5ldyBVaW50OEFycmF5KDMpLGY9bmV3IFVpbnQ4QXJyYXkoMykscD1hW3NbMF1dLG09YVtzWzFdXSx5PWFbc1syXV0sdz1hW3NbM11dLGI9Z2V0QihoKSxEPWdldEIobCk7Zm9yKGxldCBlPTA7ZTw9aDtlKyspe2RbMF09KHBbMF0qKGgtZSkreVswXSplKS9ofDA7ZFsxXT0ocFsxXSooaC1lKSt5WzFdKmUpL2h8MDtkWzJdPShwWzJdKihoLWUpK3lbMl0qZSkvaHwwO2ZbMF09KG1bMF0qKGgtZSkrd1swXSplKS9ofDA7ZlsxXT0obVsxXSooaC1lKSt3WzFdKmUpL2h8MDtmWzJdPShtWzJdKihoLWUpK3dbMl0qZSkvaHwwO2ZvcihsZXQgdD0wO3Q8PWw7dCsrLHUrKyl7aWYoISgwIT09ZSYmZSE9PWh8fDAhPT10JiZ0IT09bCkpY29udGludWU7bGV0IHM9MCxuPTAsbz0wO2ZvcihsZXQgYT0wO2E8PTM7YSsrKWZvcihsZXQgZz0wO2c8PTM7ZysrLG8rKyl7Y29uc3QgYz1iW2VdW2FdKkRbdF1bZ107cys9aVtyW29dXVswXSpjO24rPWlbcltvXV1bMV0qY31RW3VdPWkubGVuZ3RoO2kucHVzaChbcyxuXSk7RVt1XT1hLmxlbmd0aDtjb25zdCBnPW5ldyBVaW50OEFycmF5KDMpO2dbMF09KGRbMF0qKGwtdCkrZlswXSp0KS9sfDA7Z1sxXT0oZFsxXSoobC10KStmWzFdKnQpL2x8MDtnWzJdPShkWzJdKihsLXQpK2ZbMl0qdCkvbHwwO2EucHVzaChnKX19UVswXT1yWzBdO0VbMF09c1swXTtRW2xdPXJbM107RVtsXT1zWzFdO1FbQypoXT1yWzEyXTtFW0MqaF09c1syXTtRW0MqaCtsXT1yWzE1XTtFW0MqaCtsXT1zWzNdO3RoaXMuZmlndXJlc1tlXT17dHlwZToibGF0dGljZSIsY29vcmRzOlEsY29sb3JzOkUsdmVydGljZXNQZXJSb3c6Q319X3VwZGF0ZUJvdW5kcygpe2xldCBlPXRoaXMuY29vcmRzWzBdWzBdLHQ9dGhpcy5jb29yZHNbMF1bMV0saT1lLGE9dDtmb3IobGV0IHI9MSxzPXRoaXMuY29vcmRzLmxlbmd0aDtyPHM7cisrKXtjb25zdCBzPXRoaXMuY29vcmRzW3JdWzBdLG49dGhpcy5jb29yZHNbcl1bMV07ZT1lPnM/czplO3Q9dD5uP246dDtpPWk8cz9zOmk7YT1hPG4/bjphfXRoaXMuYm91bmRzPVtlLHQsaSxhXX1fcGFja0RhdGEoKXtsZXQgZSx0LGksYTtjb25zdCByPXRoaXMuY29vcmRzLHM9bmV3IEZsb2F0MzJBcnJheSgyKnIubGVuZ3RoKTtmb3IoZT0wLGk9MCx0PXIubGVuZ3RoO2U8dDtlKyspe2NvbnN0IHQ9cltlXTtzW2krK109dFswXTtzW2krK109dFsxXX10aGlzLmNvb3Jkcz1zO2NvbnN0IG49dGhpcy5jb2xvcnMsbz1uZXcgVWludDhBcnJheSgzKm4ubGVuZ3RoKTtmb3IoZT0wLGk9MCx0PW4ubGVuZ3RoO2U8dDtlKyspe2NvbnN0IHQ9bltlXTtvW2krK109dFswXTtvW2krK109dFsxXTtvW2krK109dFsyXX10aGlzLmNvbG9ycz1vO2NvbnN0IGc9dGhpcy5maWd1cmVzO2ZvcihlPTAsdD1nLmxlbmd0aDtlPHQ7ZSsrKXtjb25zdCB0PWdbZV0scj10LmNvb3JkcyxzPXQuY29sb3JzO2ZvcihpPTAsYT1yLmxlbmd0aDtpPGE7aSsrKXtyW2ldKj0yO3NbaV0qPTN9fX1nZXRJUigpe2NvbnN0e2JvdW5kczplfT10aGlzO2lmKGVbMl0tZVswXT09MHx8ZVszXS1lWzFdPT0wKXRocm93IG5ldyBGb3JtYXRFcnJvcihgSW52YWxpZCBNZXNoU2hhZGluZyBib3VuZHM6IFske2V9XS5gKTtyZXR1cm5bIk1lc2giLHRoaXMuc2hhZGluZ1R5cGUsdGhpcy5jb29yZHMsdGhpcy5jb2xvcnMsdGhpcy5maWd1cmVzLGUsdGhpcy5iYm94LHRoaXMuYmFja2dyb3VuZF19fWNsYXNzIER1bW15U2hhZGluZyBleHRlbmRzIEJhc2VTaGFkaW5ne2dldElSKCl7cmV0dXJuWyJEdW1teSJdfX1mdW5jdGlvbiBnZXRUaWxpbmdQYXR0ZXJuSVIoZSx0LGkpe2NvbnN0IHI9bG9va3VwTWF0cml4KHQuZ2V0QXJyYXkoIk1hdHJpeCIpLGEpLHM9bG9va3VwTm9ybWFsUmVjdCh0LmdldEFycmF5KCJCQm94IiksbnVsbCk7aWYoIXN8fHNbMl0tc1swXT09MHx8c1szXS1zWzFdPT0wKXRocm93IG5ldyBGb3JtYXRFcnJvcigiSW52YWxpZCBnZXRUaWxpbmdQYXR0ZXJuSVIgL0JCb3ggYXJyYXkuIik7Y29uc3Qgbj10LmdldCgiWFN0ZXAiKTtpZigibnVtYmVyIiE9dHlwZW9mIG4pdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJJbnZhbGlkIGdldFRpbGluZ1BhdHRlcm5JUiAvWFN0ZXAgdmFsdWUuIik7Y29uc3Qgbz10LmdldCgiWVN0ZXAiKTtpZigibnVtYmVyIiE9dHlwZW9mIG8pdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJJbnZhbGlkIGdldFRpbGluZ1BhdHRlcm5JUiAvWVN0ZXAgdmFsdWUuIik7Y29uc3QgZz10LmdldCgiUGFpbnRUeXBlIik7aWYoIU51bWJlci5pc0ludGVnZXIoZykpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJJbnZhbGlkIGdldFRpbGluZ1BhdHRlcm5JUiAvUGFpbnRUeXBlIHZhbHVlLiIpO2NvbnN0IGM9dC5nZXQoIlRpbGluZ1R5cGUiKTtpZighTnVtYmVyLmlzSW50ZWdlcihjKSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkludmFsaWQgZ2V0VGlsaW5nUGF0dGVybklSIC9UaWxpbmdUeXBlIHZhbHVlLiIpO3JldHVyblsiVGlsaW5nUGF0dGVybiIsaSxlLHIscyxuLG8sZyxjXX1jb25zdCBkYT1bMS4zODc3LDEsMSwxLC45NzgwMSwuOTI0ODIsLjg5NTUyLC45MTEzMywuODE5ODgsLjk3NTY2LC45ODE1MiwuOTM1NDgsLjkzNTQ4LDEuMjc5OCwuODUyODQsLjkyNzk0LDEsLjk2MTM0LDEuNTQ2NTcsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC44Mjg0NSwuODI4NDUsLjg1Mjg0LC44NTI4NCwuODUyODQsLjc1ODU5LC45MjEzOCwuODM5MDgsLjc3NjIsLjczMjkzLC44NzI4OSwuNzMxMzMsLjc1MTQsLjgxOTIxLC44NzM1NiwuOTU5NTgsLjU5NTI2LC43NTcyNywuNjkyMjUsMS4wNDkyNCwuOTEyMSwuODY5NDMsLjc5Nzk1LC44ODE5OCwuNzc5NTgsLjcwODY0LC44MTA1NSwuOTAzOTksLjg4NjUzLC45NjAxNywuODI1NzcsLjc3ODkyLC43ODI1NywuOTc1MDcsMS41NDY1NywuOTc1MDcsLjg1Mjg0LC44OTU1MiwuOTAxNzYsLjg4NzYyLC44Nzg1LC43NTI0MSwuODc4NSwuOTA1MTgsLjk1MDE1LC43NzYxOCwuODc4NSwuODg0MDEsLjkxOTE2LC44NjMwNCwuODg0MDEsLjkxNDg4LC44Nzg1LC44ODAxLC44Nzg1LC44Nzg1LC45MTM0MywuNzE3MywxLjA0MTA2LC44Nzg1LC44NTA3NSwuOTU3OTQsLjgyNjE2LC44NTE2MiwuNzk0OTIsLjg4MzMxLDEuNjk4MDgsLjg4MzMxLC44NTI4NCwuOTc4MDEsLjg5NTUyLC45MTEzMywuODk1NTIsLjkxMTMzLDEuNzgwMSwuODk1NTIsMS4yNDQ4NywxLjEzMjU0LDEuMTI0MDEsLjk2ODM5LC44NTI4NCwuNjg3ODcsLjcwNjQ1LC44NTU5MiwuOTA3NDcsMS4wMTQ2NiwxLjAwODgsLjkwMzIzLDEsMS4wNzQ2MywxLC45MTA1NiwuNzU4MDYsMS4xOTExOCwuOTY4MzksLjc4ODY0LC44Mjg0NSwuODQxMzMsLjc1ODU5LC44MzkwOCwuODM5MDgsLjgzOTA4LC44MzkwOCwuODM5MDgsLjgzOTA4LC43NzUzOSwuNzMyOTMsLjczMTMzLC43MzEzMywuNzMxMzMsLjczMTMzLC45NTk1OCwuOTU5NTgsLjk1OTU4LC45NTk1OCwuODg1MDYsLjkxMjEsLjg2OTQzLC44Njk0MywuODY5NDMsLjg2OTQzLC44Njk0MywuODUyODQsLjg3NTA4LC45MDM5OSwuOTAzOTksLjkwMzk5LC45MDM5OSwuNzc4OTIsLjc5Nzk1LC45MDgwNywuODg3NjIsLjg4NzYyLC44ODc2MiwuODg3NjIsLjg4NzYyLC44ODc2MiwuODcxNSwuNzUyNDEsLjkwNTE4LC45MDUxOCwuOTA1MTgsLjkwNTE4LC44ODQwMSwuODg0MDEsLjg4NDAxLC44ODQwMSwuODc4NSwuODc4NSwuODgwMSwuODgwMSwuODgwMSwuODgwMSwuODgwMSwuOTA3NDcsLjg5MDQ5LC44Nzg1LC44Nzg1LC44Nzg1LC44Nzg1LC44NTE2MiwuODc4NSwuODUxNjIsLjgzOTA4LC44ODc2MiwuODM5MDgsLjg4NzYyLC44MzkwOCwuODg3NjIsLjczMjkzLC43NTI0MSwuNzMyOTMsLjc1MjQxLC43MzI5MywuNzUyNDEsLjczMjkzLC43NTI0MSwuODcyODksLjgzMDE2LC44ODUwNiwuOTMxMjUsLjczMTMzLC45MDUxOCwuNzMxMzMsLjkwNTE4LC43MzEzMywuOTA1MTgsLjczMTMzLC45MDUxOCwuNzMxMzMsLjkwNTE4LC44MTkyMSwuNzc2MTgsLjgxOTIxLC43NzYxOCwuODE5MjEsLjc3NjE4LDEsMSwuODczNTYsLjg3ODUsLjkxMDc1LC44OTYwOCwuOTU5NTgsLjg4NDAxLC45NTk1OCwuODg0MDEsLjk1OTU4LC44ODQwMSwuOTU5NTgsLjg4NDAxLC45NTk1OCwuODg0MDEsLjc2MjI5LC45MDE2NywuNTk1MjYsLjkxOTE2LDEsMSwuODYzMDQsLjY5MjI1LC44ODQwMSwxLDEsLjcwNDI0LC43OTQ2OCwuOTE5MjYsLjg4MTc1LC43MDgyMywuOTQ5MDMsLjkxMjEsLjg3ODUsMSwxLC45MTIxLC44Nzg1LC44NzgwMiwuODg2NTYsLjg3ODUsLjg2OTQzLC44ODAxLC44Njk0MywuODgwMSwuODY5NDMsLjg4MDEsLjg3NDAyLC44OTI5MSwuNzc5NTgsLjkxMzQzLDEsMSwuNzc5NTgsLjkxMzQzLC43MDg2NCwuNzE3MywuNzA4NjQsLjcxNzMsLjcwODY0LC43MTczLC43MDg2NCwuNzE3MywxLDEsLjgxMDU1LC43NTg0MSwuODEwNTUsMS4wNjQ1MiwuOTAzOTksLjg3ODUsLjkwMzk5LC44Nzg1LC45MDM5OSwuODc4NSwuOTAzOTksLjg3ODUsLjkwMzk5LC44Nzg1LC45MDM5OSwuODc4NSwuOTYwMTcsLjk1Nzk0LC43Nzg5MiwuODUxNjIsLjc3ODkyLC43ODI1NywuNzk0OTIsLjc4MjU3LC43OTQ5MiwuNzgyNTcsLjc5NDkyLC45Mjk3LC41Njg5MiwuODM5MDgsLjg4NzYyLC43NzUzOSwuODcxNSwuODc1MDgsLjg5MDQ5LDEsMSwuODEwNTUsMS4wNDEwNiwxLjIwNTI4LDEuMjA1MjgsMSwxLjE1NTQzLC43MDY3NCwuOTgzODcsLjk0NzIxLDEuMzM0MzEsMS40NTg5NCwuOTUxNjEsMS4wNjMwMywuODM5MDgsLjgwMzUyLC41NzE4NCwuNjk2NSwuNTYyODksLjgyMDAxLC41NjAyOSwuODEyMzUsMS4wMjk4OCwuODM5MDgsLjc3NjIsLjY4MTU2LC44MDM2NywuNzMxMzMsLjc4MjU3LC44NzM1NiwuODY5NDMsLjk1OTU4LC43NTcyNywuODkwMTksMS4wNDkyNCwuOTEyMSwuNzY0OCwuODY5NDMsLjg3MzU2LC43OTc5NSwuNzgyNzUsLjgxMDU1LC43Nzg5MiwuOTc2MiwuODI1NzcsLjk5ODE5LC44NDg5NiwuOTU5NTgsLjc3ODkyLC45NjEwOCwxLjAxNDA3LC44OTA0OSwxLjAyOTg4LC45NDIxMSwuOTYxMDgsLjg5MzYsLjg0MDIxLC44Nzg0MiwuOTYzOTksLjc5MTA5LC44OTA0OSwxLjAwODEzLDEuMDI5ODgsLjg2MDc3LC44NzQ0NSwuOTIwOTksLjg0NzIzLC44NjUxMywuODgwMSwuNzU2MzgsLjg1NzE0LC43ODIxNiwuNzk1ODYsLjg3OTY1LC45NDIxMSwuOTc3NDcsLjc4Mjg3LC45NzkyNiwuODQ5NzEsMS4wMjk4OCwuOTQyMTEsLjg4MDEsLjk0MjExLC44NDk3MSwuNzMxMzMsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjkwMjY0LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45MDUxOCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTA1NDgsMSwxLDEsMSwxLDEsLjk2MDE3LC45NTc5NCwuOTYwMTcsLjk1Nzk0LC45NjAxNywuOTU3OTQsLjc3ODkyLC44NTE2MiwxLDEsLjg5NTUyLC45MDUyNywxLC45MDM2MywuOTI3OTQsLjkyNzk0LC45Mjc5NCwuOTI3OTQsLjg3MDEyLC44NzAxMiwuODcwMTIsLjg5NTUyLC44OTU1MiwxLjQyMjU5LC43MTE0MywxLjA2MTUyLDEsMSwxLjAzMzcyLDEuMDMzNzIsLjk3MTcxLDEuNDk1NiwyLjI4MDcsLjkzODM1LC44MzQwNiwuOTExMzMsLjg0MTA3LC45MTEzMywxLDEsMSwuNzIwMjEsMSwxLjIzMTA4LC44MzQ4OSwuODg1MjUsLjg4NTI1LC44MTQ5OSwuOTA1MjcsMS44MTA1NSwuOTA1MjcsMS44MTA1NSwxLjMxMDA2LDEuNTM3MTEsLjk0NDM0LDEuMDg2OTYsMSwuOTUwMTgsLjc3MTkyLC44NTI4NCwuOTA3NDcsMS4xNzUzNCwuNjk4MjUsLjk3MTYsMS4zNzA3NywuOTA3NDcsLjkwNzQ3LC44NTM1NiwuOTA3NDcsLjkwNzQ3LDEuNDQ5NDcsLjg1Mjg0LC44OTQxLC44OTQxLC43MDU3MiwuOCwuNzA1NzIsLjcwNTcyLC43MDU3MiwuNzA1NzIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45OTg2MiwuOTk4NjIsMSwxLDEsMSwxLDEuMDgwMDQsLjkxMDI3LDEsMSwxLC45OTg2MiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTA3MjcsLjkwNzI3LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXSxmYT17bGluZUhlaWdodDoxLjIyMDcsbGluZUdhcDouMjIwN30scGE9WzEuMzg3NywxLDEsMSwuOTc4MDEsLjkyNDgyLC44OTU1MiwuOTExMzMsLjgxOTg4LC45NzU2NiwuOTgxNTIsLjkzNTQ4LC45MzU0OCwxLjI3OTgsLjg1Mjg0LC45Mjc5NCwxLC45NjEzNCwxLjU2MjM5LC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuODI4NDUsLjgyODQ1LC44NTI4NCwuODUyODQsLjg1Mjg0LC43NTg1OSwuOTIxMzgsLjgzOTA4LC43NzYyLC43MTgwNSwuODcyODksLjczMTMzLC43NTE0LC44MTkyMSwuODczNTYsLjk1OTU4LC41OTUyNiwuNzU3MjcsLjY5MjI1LDEuMDQ5MjQsLjkwODcyLC44NTkzOCwuNzk3OTUsLjg3MDY4LC43Nzk1OCwuNjk3NjYsLjgxMDU1LC45MDM5OSwuODg2NTMsLjk2MDY4LC44MjU3NywuNzc4OTIsLjc4MjU3LC45NzUwNywxLjUyOSwuOTc1MDcsLjg1Mjg0LC44OTU1MiwuOTAxNzYsLjk0OTA4LC44NjQxMSwuNzQwMTIsLjg2NDExLC44ODMyMywuOTUwMTUsLjg2NDExLC44NjMzMSwuODg0MDEsLjkxOTE2LC44NjMwNCwuODg0MDEsLjkwMzksLjg2MzMxLC44NjMzMSwuODY0MTEsLjg2NDExLC45MDQ2NCwuNzA4NTIsMS4wNDEwNiwuODYzMzEsLjg0MzcyLC45NTc5NCwuODI2MTYsLjg0NTQ4LC43OTQ5MiwuODgzMzEsMS42OTgwOCwuODgzMzEsLjg1Mjg0LC45NzgwMSwuODk1NTIsLjkxMTMzLC44OTU1MiwuOTExMzMsMS43ODAxLC44OTU1MiwxLjI0NDg3LDEuMTMyNTQsMS4xOTEyOSwuOTY4MzksLjg1Mjg0LC42ODc4NywuNzA2NDUsLjg1NTkyLC45MDc0NywxLjAxNDY2LDEuMDA4OCwuOTAzMjMsMSwxLjA3NDYzLDEsLjkxMDU2LC43NTgwNiwxLjE5MTE4LC45NjgzOSwuNzg4NjQsLjgyODQ1LC44NDEzMywuNzU4NTksLjgzOTA4LC44MzkwOCwuODM5MDgsLjgzOTA4LC44MzkwOCwuODM5MDgsLjc3NTM5LC43MTgwNSwuNzMxMzMsLjczMTMzLC43MzEzMywuNzMxMzMsLjk1OTU4LC45NTk1OCwuOTU5NTgsLjk1OTU4LC44ODUwNiwuOTA4NzIsLjg1OTM4LC44NTkzOCwuODU5MzgsLjg1OTM4LC44NTkzOCwuODUyODQsLjg3MDY4LC45MDM5OSwuOTAzOTksLjkwMzk5LC45MDM5OSwuNzc4OTIsLjc5Nzk1LC45MDgwNywuOTQ5MDgsLjk0OTA4LC45NDkwOCwuOTQ5MDgsLjk0OTA4LC45NDkwOCwuODU4ODcsLjc0MDEyLC44ODMyMywuODgzMjMsLjg4MzIzLC44ODMyMywuODg0MDEsLjg4NDAxLC44ODQwMSwuODg0MDEsLjg3ODUsLjg2MzMxLC44NjMzMSwuODYzMzEsLjg2MzMxLC44NjMzMSwuODYzMzEsLjkwNzQ3LC44OTA0OSwuODYzMzEsLjg2MzMxLC44NjMzMSwuODYzMzEsLjg0NTQ4LC44NjQxMSwuODQ1NDgsLjgzOTA4LC45NDkwOCwuODM5MDgsLjk0OTA4LC44MzkwOCwuOTQ5MDgsLjcxODA1LC43NDAxMiwuNzE4MDUsLjc0MDEyLC43MTgwNSwuNzQwMTIsLjcxODA1LC43NDAxMiwuODcyODksLjc5NTM4LC44ODUwNiwuOTI3MjYsLjczMTMzLC44ODMyMywuNzMxMzMsLjg4MzIzLC43MzEzMywuODgzMjMsLjczMTMzLC44ODMyMywuNzMxMzMsLjg4MzIzLC44MTkyMSwuODY0MTEsLjgxOTIxLC44NjQxMSwuODE5MjEsLjg2NDExLDEsMSwuODczNTYsLjg2MzMxLC45MTA3NSwuODc3NywuOTU5NTgsLjg4NDAxLC45NTk1OCwuODg0MDEsLjk1OTU4LC44ODQwMSwuOTU5NTgsLjg4NDAxLC45NTk1OCwuODg0MDEsLjc2NDY3LC45MDE2NywuNTk1MjYsLjkxOTE2LDEsMSwuODYzMDQsLjY5MjI1LC44ODQwMSwxLDEsLjcwNDI0LC43NzMxMiwuOTE5MjYsLjg4MTc1LC43MDgyMywuOTQ5MDMsLjkwODcyLC44NjMzMSwxLDEsLjkwODcyLC44NjMzMSwuODY5MDYsLjg4MTE2LC44NjMzMSwuODU5MzgsLjg2MzMxLC44NTkzOCwuODYzMzEsLjg1OTM4LC44NjMzMSwuODc0MDIsLjg2NTQ5LC43Nzk1OCwuOTA0NjQsMSwxLC43Nzk1OCwuOTA0NjQsLjY5NzY2LC43MDg1MiwuNjk3NjYsLjcwODUyLC42OTc2NiwuNzA4NTIsLjY5NzY2LC43MDg1MiwxLDEsLjgxMDU1LC43NTg0MSwuODEwNTUsMS4wNjQ1MiwuOTAzOTksLjg2MzMxLC45MDM5OSwuODYzMzEsLjkwMzk5LC44NjMzMSwuOTAzOTksLjg2MzMxLC45MDM5OSwuODYzMzEsLjkwMzk5LC44NjMzMSwuOTYwNjgsLjk1Nzk0LC43Nzg5MiwuODQ1NDgsLjc3ODkyLC43ODI1NywuNzk0OTIsLjc4MjU3LC43OTQ5MiwuNzgyNTcsLjc5NDkyLC45Mjk3LC41Njg5MiwuODM5MDgsLjk0OTA4LC43NzUzOSwuODU4ODcsLjg3MDY4LC44OTA0OSwxLDEsLjgxMDU1LDEuMDQxMDYsMS4yMDUyOCwxLjIwNTI4LDEsMS4xNTU0MywuNzAwODgsLjk4Mzg3LC45NDcyMSwxLjMzNDMxLDEuNDU4OTQsLjk1MTYxLDEuNDgzODcsLjgzOTA4LC44MDM1MiwuNTcxMTgsLjY5NjUsLjU2MzQ3LC43OTE3OSwuNTU4NTMsLjgwMzQ2LDEuMDI5ODgsLjgzOTA4LC43NzYyLC42NzE3NCwuODYwMzYsLjczMTMzLC43ODI1NywuODczNTYsLjg2NDQxLC45NTk1OCwuNzU3MjcsLjg5MDE5LDEuMDQ5MjQsLjkwODcyLC43NDg4OSwuODU5MzgsLjg3ODkxLC43OTc5NSwuNzk1NywuODEwNTUsLjc3ODkyLC45NzQ0NywuODI1NzcsLjk3NDY2LC44NzE3OSwuOTU5NTgsLjc3ODkyLC45NDI1MiwuOTU2MTIsLjg3NTMsMS4wMjk4OCwuOTI3MzMsLjk0MjUyLC44NzQxMSwuODQwMjEsLjg3MjgsLjk1NjEyLC43NDA4MSwuODc1MywxLjAyMTg5LDEuMDI5ODgsLjg0ODE0LC44NzQ0NSwuOTE4MjIsLjg0NzIzLC44NTY2OCwuODYzMzEsLjgxMzQ0LC44NzU4MSwuNzY0MjIsLjgyMDQ2LC45NjA1NywuOTI3MzMsLjk5Mzc1LC43ODAyMiwuOTU0NTIsLjg2MDE1LDEuMDI5ODgsLjkyNzMzLC44NjMzMSwuOTI3MzMsLjg2MDE1LC43MzEzMywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTA2MzEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjg4MzIzLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC44NTE3NCwxLDEsMSwxLDEsMSwuOTYwNjgsLjk1Nzk0LC45NjA2OCwuOTU3OTQsLjk2MDY4LC45NTc5NCwuNzc4OTIsLjg0NTQ4LDEsMSwuODk1NTIsLjkwNTI3LDEsLjkwMzYzLC45Mjc5NCwuOTI3OTQsLjkyNzk0LC44OTgwNywuODcwMTIsLjg3MDEyLC44NzAxMiwuODk1NTIsLjg5NTUyLDEuNDIyNTksLjcxMDk0LDEuMDYxNTIsMSwxLDEuMDMzNzIsMS4wMzM3MiwuOTcxNzEsMS40OTU2LDIuMjgwNywuOTI5NzIsLjgzNDA2LC45MTEzMywuODMzMjYsLjkxMTMzLDEsMSwxLC43MjAyMSwxLDEuMjMxMDgsLjgzNDg5LC44ODUyNSwuODg1MjUsLjgxNDk5LC45MDYxNiwxLjgxMDU1LC45MDUyNywxLjgxMDU1LDEuMzEwNywxLjUzNzExLC45NDQzNCwxLjA4Njk2LDEsLjk1MDE4LC43NzE5MiwuODUyODQsLjkwNzQ3LDEuMTc1MzQsLjY5ODI1LC45NzE2LDEuMzcwNzcsLjkwNzQ3LC45MDc0NywuODUzNTYsLjkwNzQ3LC45MDc0NywxLjQ0OTQ3LC44NTI4NCwuODk0MSwuODk0MSwuNzA1NzIsLjgsLjcwNTcyLC43MDU3MiwuNzA1NzIsLjcwNTcyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTk4NjIsLjk5ODYyLDEsMSwxLDEsMSwxLjA4MDA0LC45MTAyNywxLDEsMSwuOTk4NjIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjkwNzI3LC45MDcyNywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV0sbWE9e2xpbmVIZWlnaHQ6MS4yMjA3LGxpbmVHYXA6LjIyMDd9LHlhPVsxLjM4NzcsMSwxLDEsMS4xNzIyMywxLjEyOTMsLjg5NTUyLC45MTEzMywuODAzOTUsMS4wMjI2OSwxLjE1NjAxLC45MTA1NiwuOTEwNTYsMS4yNzk4LC44NTI4NCwuODk4MDcsMSwuOTA4NjEsMS4zOTU0MywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjk2MzA5LC45NjMwOSwuODUyODQsLjg1Mjg0LC44NTI4NCwuODMzMTksLjg4MDcxLC44Njc1LC44MTU1MiwuNzIzNDYsLjg1MTkzLC43MzIwNiwuNzUyMiwuODExMDUsLjg2Mjc1LC45MDY4NSwuNjM3NywuNzc4OTIsLjc1NTkzLDEuMDI2MzgsLjg5MjQ5LC44NDExOCwuNzc0NTIsLjg1Mzc0LC43NTE4NiwuNjc3ODksLjc5Nzc2LC44ODg0NCwuODUwNjYsLjk0MzA5LC43NzgxOCwuNzMwNiwuNzY2NTksMS4xMDM2OSwxLjM4MzEzLDEuMTAzNjksMS4wNjEzOSwuODk1NTIsLjg3MzksLjkyNDUsLjkyNDUsLjgzMjAzLC45MjQ1LC44NTg2NSwxLjA5ODQyLC45MjQ1LC45MjQ1LDEuMDMyOTcsMS4wNzY5MiwuOTA5MTgsMS4wMzI5NywuOTQ5NTksLjkyNDUsLjkyMjc0LC45MjQ1LC45MjQ1LDEuMDI5MzMsLjc3ODMyLDEuMjA1NjIsLjkyNDUsLjg5MTYsLjk4OTg2LC44NjYyMSwuODk0NTMsLjc5MDA0LC45NDE1MiwxLjc3MjU2LC45NDE1MiwuODUyODQsLjk3ODAxLC44OTU1MiwuOTExMzMsLjg5NTUyLC45MTEzMywxLjkxNzI5LC44OTU1MiwxLjE3ODg5LDEuMTMyNTQsMS4xNjM1OSwuOTIwOTgsLjg1Mjg0LC42ODc4NywuNzEzNTMsLjg0NzM3LC45MDc0NywxLjAwODgsMS4wMDQ0LC44NzY4MywxLDEuMDkwOTEsMSwuOTIyMjksLjczOSwxLjE1NjQyLC45MjA5OCwuNzYyODgsLjgwNTA0LC44MDk3MiwuNzU4NTksLjg2NzUsLjg2NzUsLjg2NzUsLjg2NzUsLjg2NzUsLjg2NzUsLjc2MzE4LC43MjM0NiwuNzMyMDYsLjczMjA2LC43MzIwNiwuNzMyMDYsLjkwNjg1LC45MDY4NSwuOTA2ODUsLjkwNjg1LC44NjQ3NywuODkyNDksLjg0MTE4LC44NDExOCwuODQxMTgsLjg0MTE4LC44NDExOCwuODUyODQsLjg0NTU3LC44ODg0NCwuODg4NDQsLjg4ODQ0LC44ODg0NCwuNzMwNiwuNzc0NTIsLjg2MzMxLC45MjQ1LC45MjQ1LC45MjQ1LC45MjQ1LC45MjQ1LC45MjQ1LC44NDg0MywuODMyMDMsLjg1ODY1LC44NTg2NSwuODU4NjUsLjg1ODY1LC44MjYwMSwuODI2MDEsLjgyNjAxLC44MjYwMSwuOTQ0NjksLjkyNDUsLjkyMjc0LC45MjI3NCwuOTIyNzQsLjkyMjc0LC45MjI3NCwuOTA3NDcsLjg2NjUxLC45MjQ1LC45MjQ1LC45MjQ1LC45MjQ1LC44OTQ1MywuOTI0NSwuODk0NTMsLjg2NzUsLjkyNDUsLjg2NzUsLjkyNDUsLjg2NzUsLjkyNDUsLjcyMzQ2LC44MzIwMywuNzIzNDYsLjgzMjAzLC43MjM0NiwuODMyMDMsLjcyMzQ2LC44MzIwMywuODUxOTMsLjg4NzUsLjg2NDc3LC45OTAzNCwuNzMyMDYsLjg1ODY1LC43MzIwNiwuODU4NjUsLjczMjA2LC44NTg2NSwuNzMyMDYsLjg1ODY1LC43MzIwNiwuODU4NjUsLjgxMTA1LC45MjQ1LC44MTEwNSwuOTI0NSwuODExMDUsLjkyNDUsMSwxLC44NjI3NSwuOTI0NSwuOTA4NzIsLjkzNTkxLC45MDY4NSwuODI2MDEsLjkwNjg1LC44MjYwMSwuOTA2ODUsLjgyNjAxLC45MDY4NSwxLjAzMjk3LC45MDY4NSwuODI2MDEsLjc3ODk2LDEuMDU2MTEsLjYzNzcsMS4wNzY5MiwxLDEsLjkwOTE4LC43NTU5MywxLjAzMjk3LDEsMSwuNzYwMzIsLjkzNzUsLjk4MTU2LC45MzQwNywuNzcyNjEsMS4xMTQyOSwuODkyNDksLjkyNDUsMSwxLC44OTI0OSwuOTI0NSwuOTI1MzQsLjg2Njk4LC45MjQ1LC44NDExOCwuOTIyNzQsLjg0MTE4LC45MjI3NCwuODQxMTgsLjkyMjc0LC44NjY3LC44NjI5MSwuNzUxODYsMS4wMjkzMywxLDEsLjc1MTg2LDEuMDI5MzMsLjY3Nzg5LC43NzgzMiwuNjc3ODksLjc3ODMyLC42Nzc4OSwuNzc4MzIsLjY3Nzg5LC43NzgzMiwxLDEsLjc5Nzc2LC45NzY1NSwuNzk3NzYsMS4yMzAyMywuODg4NDQsLjkyNDUsLjg4ODQ0LC45MjQ1LC44ODg0NCwuOTI0NSwuODg4NDQsLjkyNDUsLjg4ODQ0LC45MjQ1LC44ODg0NCwuOTI0NSwuOTQzMDksLjk4OTg2LC43MzA2LC44OTQ1MywuNzMwNiwuNzY2NTksLjc5MDA0LC43NjY1OSwuNzkwMDQsLjc2NjU5LC43OTAwNCwxLjA5MjMxLC41NDg3MywuODY3NSwuOTI0NSwuNzYzMTgsLjg0ODQzLC44NDU1NywuODY2NTEsMSwxLC43OTc3NiwxLjIwNTYyLDEuMTg2MjIsMS4xODYyMiwxLDEuMTQzNywuNjcwMDksLjk2MzM0LC45MzY5NSwxLjM1MTkxLDEuNDA5MDksLjk1MTYxLDEuNDgzODcsLjg2NzUsLjkwODYxLC42MTkyLC43MzYzLC42NDgyNCwuODI0MTEsLjU2MzIxLC44NTY5NiwxLjIzNTE2LC44Njc1LC44MTU1MiwuNzI4NiwuODQxMzQsLjczMjA2LC43NjY1OSwuODYyNzUsLjg0MzY5LC45MDY4NSwuNzc4OTIsLjg1ODcxLDEuMDI2MzgsLjg5MjQ5LC43NTgyOCwuODQxMTgsLjg1OTg0LC43NzQ1MiwuNzY0NjYsLjc5Nzc2LC43MzA2LC45MDc4MiwuNzc4MTgsLjkwMywuODcyOTEsLjkwNjg1LC43MzA2LC45OTA1OCwxLjAzNjY3LC45NDYzNSwxLjIzNTE2LC45ODQ5LC45OTA1OCwuOTIzOTMsLjg5MTYsLjk0MiwxLjAzNjY3LC43NTAyNiwuOTQ2MzUsMS4wMjk3LDEuMjM1MTYsLjkwOTE4LC45NDA0OCwuOTgyMTcsLjg5NzQ2LC44NDE1MywuOTIyNzQsLjgyNTA3LC44ODgzMiwuODQ0MzgsLjg4MTc4LDEuMDM1MjUsLjk4NDksMS4wMDIyNSwuNzgwODYsLjk3MjQ4LC44OTQwNCwxLjIzNTE2LC45ODQ5LC45MjI3NCwuOTg0OSwuODk0MDQsLjczMjA2LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC44OTY5MywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuODU4NjUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjkwOTMzLDEsMSwxLDEsMSwxLC45NDMwOSwuOTg5ODYsLjk0MzA5LC45ODk4NiwuOTQzMDksLjk4OTg2LC43MzA2LC44OTQ1MywxLDEsLjg5NTUyLC45MDUyNywxLC45MDE4NiwxLjEyMzA4LDEuMTIzMDgsMS4xMjMwOCwxLjEyMzA4LDEuMjU2NiwxLjI1NjYsMS4yNTY2LC44OTU1MiwuODk1NTIsMS40MjI1OSwuNjg5OTQsMS4wMzgwOSwxLDEsMS4wMTc2LDEuMDE3NiwxLjExNTIzLDEuNDk1NiwyLjAxNDYyLC45Nzg1OCwuODI2MTYsLjkxMTMzLC44MzQzNywuOTExMzMsMSwxLDEsLjcwNTA4LDEsMS4yMzEwOCwuNzk4MDEsLjg0NDI2LC44NDQyNiwuNzc0LC45MDU3MiwxLjgxMDU1LC45MDc0OSwxLjgxMDU1LDEuMjg4MDksMS41NTQ2OSwuOTQ0MzQsMS4wNzgwNiwxLC45NzA5NCwuNzU4OSwuODUyODQsLjkwNzQ3LDEuMTk2NTgsLjY5ODI1LC45NzYyMiwxLjMzNTEyLC45MDc0NywuOTA3NDcsLjg1Mjg0LC45MDc0NywuOTA3NDcsMS40NDk0NywuODUyODQsLjg5NDEsLjg5NDEsLjcwNTcyLC44LC43MDU3MiwuNzA1NzIsLjcwNTcyLC43MDU3MiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjk5ODYyLC45OTg2MiwxLDEsMSwxLDEsMS4wMzM2LC45MTAyNywxLDEsMSwuOTk4NjIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wNTg1OSwxLjA1ODU5LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXSx3YT17bGluZUhlaWdodDoxLjIyMDcsbGluZUdhcDouMjIwN30sYmE9WzEuMzg3NywxLDEsMSwxLjE3MjIzLDEuMTI5MywuODk1NTIsLjkxMTMzLC44MDM5NSwxLjAyMjY5LDEuMTU2MDEsLjkxMDU2LC45MTA1NiwxLjI3OTgsLjg1Mjg0LC44OTgwNywxLC45MDg2MSwxLjM5MDE2LC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTExMzMsLjkxMTMzLC45MTEzMywuOTYzMDksLjk2MzA5LC44NTI4NCwuODUyODQsLjg1Mjg0LC44MzMxOSwuODgwNzEsLjg2NzUsLjgxNTUyLC43MzgzNCwuODUxOTMsLjczMjA2LC43NTIyLC44MTEwNSwuODYyNzUsLjkwNjg1LC42Mzc3LC43Nzg5MiwuNzU1OTMsMS4wMjYzOCwuODkzODUsLjg1MTIyLC43NzQ1MiwuODY1MDMsLjc1MTg2LC42ODg4NywuNzk3NzYsLjg4ODQ0LC44NTA2NiwuOTQyNTgsLjc3ODE4LC43MzA2LC43NjY1OSwxLjEwMzY5LDEuMzkwMTYsMS4xMDM2OSwxLjA2MTM5LC44OTU1MiwuODczOSwuODYxMjgsLjk0NDY5LC44NDU3LC45NDQ2OSwuODk0NjQsMS4wOTg0MiwuODQ2MzYsLjk0NDY5LDEuMDMyOTcsMS4wNzY5MiwuOTA5MTgsMS4wMzI5NywuOTU4OTcsLjk0NDY5LC45NDgyLC45NDQ2OSwuOTQ0NjksMS4wNDY5MiwuNzgyMjMsMS4yMDU2MiwuOTQ0NjksLjkwMzMyLC45ODk4NiwuODY2MjEsLjkwNTI3LC43OTAwNCwuOTQxNTIsMS43NzI1NiwuOTQxNTIsLjg1Mjg0LC45NzgwMSwuODk1NTIsLjkxMTMzLC44OTU1MiwuOTExMzMsMS45MTcyOSwuODk1NTIsMS4xNzg4OSwxLjEzMjU0LDEuMDg3MDcsLjkyMDk4LC44NTI4NCwuNjg3ODcsLjcxMzUzLC44NDczNywuOTA3NDcsMS4wMDg4LDEuMDA0NCwuODc2ODMsMSwxLjA5MDkxLDEsLjkyMjI5LC43MzksMS4xNTY0MiwuOTIwOTgsLjc2Mjg4LC44MDUwNCwuODA5NzIsLjc1ODU5LC44Njc1LC44Njc1LC44Njc1LC44Njc1LC44Njc1LC44Njc1LC43NjMxOCwuNzM4MzQsLjczMjA2LC43MzIwNiwuNzMyMDYsLjczMjA2LC45MDY4NSwuOTA2ODUsLjkwNjg1LC45MDY4NSwuODY0NzcsLjg5Mzg1LC44NTEyMiwuODUxMjIsLjg1MTIyLC44NTEyMiwuODUxMjIsLjg1Mjg0LC44NTMxMSwuODg4NDQsLjg4ODQ0LC44ODg0NCwuODg4NDQsLjczMDYsLjc3NDUyLC44NjMzMSwuODYxMjgsLjg2MTI4LC44NjEyOCwuODYxMjgsLjg2MTI4LC44NjEyOCwuODY5MywuODQ1NywuODk0NjQsLjg5NDY0LC44OTQ2NCwuODk0NjQsLjgyNjAxLC44MjYwMSwuODI2MDEsLjgyNjAxLC45NDQ2OSwuOTQ0NjksLjk0ODIsLjk0ODIsLjk0ODIsLjk0ODIsLjk0ODIsLjkwNzQ3LC44NjY1MSwuOTQ0NjksLjk0NDY5LC45NDQ2OSwuOTQ0NjksLjkwNTI3LC45NDQ2OSwuOTA1MjcsLjg2NzUsLjg2MTI4LC44Njc1LC44NjEyOCwuODY3NSwuODYxMjgsLjczODM0LC44NDU3LC43MzgzNCwuODQ1NywuNzM4MzQsLjg0NTcsLjczODM0LC44NDU3LC44NTE5MywuOTI0NTQsLjg2NDc3LC45OTIxLC43MzIwNiwuODk0NjQsLjczMjA2LC44OTQ2NCwuNzMyMDYsLjg5NDY0LC43MzIwNiwuODk0NjQsLjczMjA2LC44OTQ2NCwuODExMDUsLjg0NjM2LC44MTEwNSwuODQ2MzYsLjgxMTA1LC44NDYzNiwxLDEsLjg2Mjc1LC45NDQ2OSwuOTA4NzIsLjk1Nzg2LC45MDY4NSwuODI2MDEsLjkwNjg1LC44MjYwMSwuOTA2ODUsLjgyNjAxLC45MDY4NSwxLjAzMjk3LC45MDY4NSwuODI2MDEsLjc3NzQxLDEuMDU2MTEsLjYzNzcsMS4wNzY5MiwxLDEsLjkwOTE4LC43NTU5MywxLjAzMjk3LDEsMSwuNzYwMzIsLjkwNDUyLC45ODE1NiwxLjExODQyLC43NzI2MSwxLjExNDI5LC44OTM4NSwuOTQ0NjksMSwxLC44OTM4NSwuOTQ0NjksLjk1ODc3LC44NjkwMSwuOTQ0NjksLjg1MTIyLC45NDgyLC44NTEyMiwuOTQ4MiwuODUxMjIsLjk0ODIsLjg2NjcsLjkwMDE2LC43NTE4NiwxLjA0NjkyLDEsMSwuNzUxODYsMS4wNDY5MiwuNjg4ODcsLjc4MjIzLC42ODg4NywuNzgyMjMsLjY4ODg3LC43ODIyMywuNjg4ODcsLjc4MjIzLDEsMSwuNzk3NzYsLjkyMTg4LC43OTc3NiwxLjIzMDIzLC44ODg0NCwuOTQ0NjksLjg4ODQ0LC45NDQ2OSwuODg4NDQsLjk0NDY5LC44ODg0NCwuOTQ0NjksLjg4ODQ0LC45NDQ2OSwuODg4NDQsLjk0NDY5LC45NDI1OCwuOTg5ODYsLjczMDYsLjkwNTI3LC43MzA2LC43NjY1OSwuNzkwMDQsLjc2NjU5LC43OTAwNCwuNzY2NTksLjc5MDA0LDEuMDkyMzEsLjU0ODczLC44Njc1LC44NjEyOCwuNzYzMTgsLjg2OTMsLjg1MzExLC44NjY1MSwxLDEsLjc5Nzc2LDEuMjA1NjIsMS4xODYyMiwxLjE4NjIyLDEsMS4xNDM3LC42Nzc0MiwuOTYzMzQsLjkzNjk1LDEuMzUxOTEsMS40MDkwOSwuOTUxNjEsMS40ODM4NywuODY2ODYsLjkwODYxLC42MjI2NywuNzQzNTksLjY1NjQ5LC44NTQ5OCwuNTY5NjMsLjg4MjU0LDEuMjM1MTYsLjg2NzUsLjgxNTUyLC43NTQ0MywuODQ1MDMsLjczMjA2LC43NjY1OSwuODYyNzUsLjg1MTIyLC45MDY4NSwuNzc4OTIsLjg1NzQ2LDEuMDI2MzgsLjg5Mzg1LC43NTY1NywuODUxMjIsLjg2Mjc1LC43NzQ1MiwuNzQxNzEsLjc5Nzc2LC43MzA2LC45NTE2NSwuNzc4MTgsLjg5NzcyLC44ODgzMSwuOTA2ODUsLjczMDYsLjk4MTQyLDEuMDIxOTEsLjk2NTc2LDEuMjM1MTYsLjk5MDE4LC45ODE0MiwuOTIzNiwuODkyNTgsLjk0MDM1LDEuMDIxOTEsLjc4ODQ4LC45NjU3NiwuOTU2MSwxLjIzNTE2LC45MDkxOCwuOTI1NzgsLjk1NDI0LC44OTc0NiwuODM5NjksLjk0ODIsLjgwMTEzLC44OTQ0MiwuODUyMDgsLjg2MTU1LC45ODAyMiwuOTkwMTgsMS4wMDQ1MiwuODEyMDksLjk5MjQ3LC44OTE4MSwxLjIzNTE2LC45OTAxOCwuOTQ4MiwuOTkwMTgsLjg5MTgxLC43MzIwNiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuODg4NDQsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjg5NDY0LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45Njc2NiwxLDEsMSwxLDEsMSwuOTQyNTgsLjk4OTg2LC45NDI1OCwuOTg5ODYsLjk0MjU4LC45ODk4NiwuNzMwNiwuOTA1MjcsMSwxLC44OTU1MiwuOTA1MjcsMSwuOTAxODYsMS4xMjMwOCwxLjEyMzA4LDEuMTIzMDgsMS4xMjMwOCwxLjI1NjYsMS4yNTY2LDEuMjU2NiwuODk1NTIsLjg5NTUyLDEuNDIyNTksLjY5MDQzLDEuMDM4MDksMSwxLDEuMDE3NiwxLjAxNzYsMS4xMTUyMywxLjQ5NTYsMi4wMTQ2MiwuOTkzMzEsLjgyNjE2LC45MTEzMywuODQyODYsLjkxMTMzLDEsMSwxLC43MDUwOCwxLDEuMjMxMDgsLjc5ODAxLC44NDQyNiwuODQ0MjYsLjc3NCwuOTA1MjcsMS44MTA1NSwuOTA1MjcsMS44MTA1NSwxLjI4ODA5LDEuNTU0NjksLjk0NDM0LDEuMDc4MDYsMSwuOTcwOTQsLjc1ODksLjg1Mjg0LC45MDc0NywxLjE5NjU4LC42OTgyNSwuOTc2MjIsMS4zMzUxMiwuOTA3NDcsLjkwNzQ3LC44NTM1NiwuOTA3NDcsLjkwNzQ3LDEuNDQ5NDcsLjg1Mjg0LC44OTQxLC44OTQxLC43MDU3MiwuOCwuNzA1NzIsLjcwNTcyLC43MDU3MiwuNzA1NzIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45OTg2MiwuOTk4NjIsMSwxLDEsMSwxLDEuMDMzNiwuOTEwMjcsMSwxLDEsLjk5ODYyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDU4NTksMS4wNTg1OSwxLDEsMSwxLjA3MTg1LC45OTQxMywuOTYzMzQsMS4wODA2NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLERhPXtsaW5lSGVpZ2h0OjEuMjIwNyxsaW5lR2FwOi4yMjA3fSxGYT1bLjc2MTE2LDEsMSwxLjAwMDYsLjk5OTk4LC45OTk3NCwuOTk5NzMsLjk5OTczLC45OTk4MiwuOTk5NzcsMS4wMDA4NywuOTk5OTgsLjk5OTk4LC45OTk1OSwxLjAwMDAzLDEuMDAwNiwuOTk5OTgsMS4wMDA2LDEuMDAwNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTk4LDEsMS4wMDAwMywxLjAwMDAzLDEuMDAwMDMsMS4wMDAyNiwuOTk5OSwuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsMS4wMDAwMSwxLjAwMDI2LDEuMDAwMjIsLjk5OTc3LDEuMDAwNiwuOTk5NzMsLjk5OTc3LDEuMDAwMjYsLjk5OTk5LC45OTk3NywxLjAwMDIyLDEuMDAwMDEsMS4wMDAyMiwuOTk5NzcsMS4wMDAwMSwxLjAwMDI2LC45OTk3NywxLjAwMDAxLDEuMDAwMTYsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjYsLjk5OTk4LDEuMDAwNiwuOTk5OTgsMS4wMDAwMywuOTk5NzMsLjk5OTk4LC45OTk3MywxLjAwMDI2LC45OTk3MywxLjAwMDI2LC45OTk3MywuOTk5OTgsMS4wMDAyNiwxLjAwMDI2LDEuMDAwNiwxLjAwMDYsLjk5OTczLDEuMDAwNiwuOTk5ODIsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwuOTk5NTksLjk5OTczLC45OTk5OCwxLjAwMDI2LC45OTk3MywxLjAwMDIyLC45OTk3MywuOTk5NzMsMSwuOTk5NTksMS4wMDA3NywuOTk5NTksMS4wMDAwMywuOTk5OTgsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNzcsLjk5OTczLC45OTk5OCwxLjAwMDI1LC45OTk2OCwuOTk5NzMsMS4wMDAwMywxLjAwMDI1LC42MDI5OSwxLjAwMDI0LDEuMDY0MDksMSwxLC45OTk5OCwxLC45OTk3MywxLjAwMDYsLjk5OTk4LDEsLjk5OTM2LC45OTk3MywxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDI2LC45OTk3NywuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LDEsLjk5OTc3LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTk3NywuOTk5NzcsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMDMsMS4wMDAyMiwuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTgyLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wNjQwOSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsLjk5OTczLDEuMDAwMjYsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LDEuMDMzNzQsLjk5OTc3LDEuMDAwMjYsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDQyLC45OTk3MywuOTk5NzMsMS4wMDA2LC45OTk3NywuOTk5NzMsLjk5OTczLDEuMDAwMjYsMS4wMDA2LDEuMDAwMjYsMS4wMDA2LDEuMDAwMjYsMS4wMzgyOCwxLjAwMDI2LC45OTk5OSwxLjAwMDI2LDEuMDAwNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5MywuOTk5OCwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LDEsMS4wMDAxNiwuOTk5NzcsLjk5OTU5LC45OTk3NywuOTk5NTksLjk5OTc3LC45OTk1OSwxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDI2LC45OTk5OCwxLjAwMDI2LC44MTIxLDEuMDAwMjYsLjk5OTk4LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LC45OTk3NywxLjAwMDI2LDEuMDAwMTYsMS4wMDAyMiwxLjAwMDAxLC45OTk3MywxLjAwMDAxLDEuMDAwMjYsMSwxLjAwMDI2LDEsMS4wMDAyNiwxLDEuMDAwNiwuOTk5NzMsLjk5OTc3LC45OTk3MywxLC45OTk4MiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAwMSwuOTk5NzMsMS4wMDAyNiwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LDEuMDAwMzQsLjk5OTc3LDEsLjk5OTk3LDEuMDAwMjYsMS4wMDA3OCwxLjAwMDM2LC45OTk3MywxLjAwMDEzLDEuMDAwNiwuOTk5NzcsLjk5OTc3LC45OTk4OCwuODUxNDgsMS4wMDAwMSwxLjAwMDI2LC45OTk3NywxLjAwMDIyLDEuMDAwNiwuOTk5NzcsMS4wMDAwMSwuOTk5OTksLjk5OTc3LDEuMDAwNjksMS4wMDAyMiwuOTk5NzcsMS4wMDAwMSwuOTk5ODQsMS4wMDAyNiwxLjAwMDAxLDEuMDAwMjQsMS4wMDAwMSwuOTk5OSwxLDEuMDAwNiwxLjAwMDAxLDEuMDAwNDEsLjk5OTYyLDEuMDAwMjYsMS4wMDA2LC45OTk5NSwxLjAwMDQxLC45OTk0MiwuOTk5NzMsLjk5OTI3LDEuMDAwODIsLjk5OTAyLDEuMDAwMjYsMS4wMDA4NywxLjAwMDYsMS4wMDA2OSwuOTk5NzMsLjk5ODY3LC45OTk3MywuOTk5MywxLjAwMDI2LDEuMDAwNDksMS4wMDA1NiwxLC45OTk4OCwuOTk5MzUsLjk5OTk1LC45OTk1NCwxLjAwMDU1LC45OTk0NSwxLjAwMDMyLDEuMDAwNiwuOTk5OTUsMS4wMDAyNiwuOTk5OTUsMS4wMDAzMiwxLjAwMDAxLDEuMDAwMDgsLjk5OTcxLDEuMDAwMTksLjk5OTQsMS4wMDAwMSwxLjAwMDYsMS4wMDA0NCwuOTk5NzMsMS4wMDAyMywxLjAwMDQ3LDEsLjk5OTQyLC45OTU2MSwuOTk5ODksMS4wMDAzNSwuOTk5NzcsMS4wMDAzNSwuOTk5NzcsMS4wMDAxOSwuOTk5NDQsMS4wMDAwMSwxLjAwMDIxLC45OTkyNiwxLjAwMDM1LDEuMDAwMzUsLjk5OTQyLDEuMDAwNDgsLjk5OTk5LC45OTk3NywxLjAwMDIyLDEuMDAwMzUsMS4wMDAwMSwuOTk5NzcsMS4wMDAyNiwuOTk5ODksMS4wMDA1NywxLjAwMDAxLC45OTkzNiwxLjAwMDUyLDEuMDAwMTIsLjk5OTk2LDEuMDAwNDMsMSwxLjAwMDM1LC45OTk0LC45OTk3NiwxLjAwMDM1LC45OTk3MywxLjAwMDUyLDEuMDAwNDEsMS4wMDExOSwxLjAwMDM3LC45OTk3MywxLjAwMDAyLC45OTk4NiwxLjAwMDQxLDEuMDAwNDEsLjk5OTAyLC45OTk2LDEuMDAwMzQsLjk5OTk5LDEuMDAwMjYsLjk5OTk5LDEuMDAwMjYsLjk5OTczLDEuMDAwNTIsLjk5OTczLDEsLjk5OTczLDEuMDAwNDEsMS4wMDA3NSwuOTk5NCwxLjAwMDMsLjk5OTk5LDEsMS4wMDA0MSwuOTk5NTUsMSwuOTk5MTUsLjk5OTczLC45OTk3MywxLjAwMDI2LDEuMDAxMTksLjk5OTU1LC45OTk3MywxLjAwMDYsLjk5OTExLDEuMDAwNiwxLjAwMDI2LC45OTk3MiwxLjAwMDI2LC45OTkwMiwxLjAwMDQxLC45OTk3MywuOTk5OTksMSwxLDEuMDAwMzgsMS4wMDA1LDEuMDAwMTYsMS4wMDAyMiwxLjAwMDE2LDEuMDAwMjIsMS4wMDAxNiwxLjAwMDIyLDEuMDAwMDEsLjk5OTczLDEsMSwuOTk5NzMsMSwxLC45OTk1NSwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMSwxLDEsLjk5OTczLC45OTk3MywuOTk5NzIsMSwxLDEuMDAxMDYsLjk5OTk5LC45OTk5OCwuOTk5OTgsLjk5OTk5LC45OTk5OCwxLjY2NDc1LDEsLjk5OTczLC45OTk3MywxLjAwMDIzLC45OTk3MywuOTk5NzEsMS4wMDA0NywxLjAwMDIzLDEsLjk5OTkxLC45OTk4NCwxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEsMSwxLDEsMSwxLDEsLjk5OTcyLDEsMS4yMDk4NSwxLjM5NzEzLDEuMDAwMDMsMS4wMDAzMSwxLjAwMDE1LDEsLjk5NTYxLDEuMDAwMjcsMS4wMDAzMSwxLjAwMDMxLC45OTkxNSwxLjAwMDMxLDEuMDAwMzEsLjk5OTk5LDEuMDAwMDMsLjk5OTk5LC45OTk5OSwxLjQxMTQ0LDEuNiwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDA1NzksMS40MDU3OSwxLjM2NjI1LC45OTk5OSwxLC45OTg2MSwuOTk4NjEsMSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LC45OTk3MiwuOTk5OTksLjk5OTk5LC45OTk5OSwuOTk5OTksMS40MDQ4MywxLC45OTk3NywxLjAwMDU0LDEsMSwuOTk5NTMsLjk5OTYyLDEuMDAwNDIsLjk5OTUsMSwxLDEsMSwxLDEsMSwxLC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLFNhPXtsaW5lSGVpZ2h0OjEuMixsaW5lR2FwOi4yfSxrYT1bLjc2MTE2LDEsMSwxLjAwMDYsLjk5OTk4LC45OTk3NCwuOTk5NzMsLjk5OTczLC45OTk4MiwuOTk5NzcsMS4wMDA4NywuOTk5OTgsLjk5OTk4LC45OTk1OSwxLjAwMDAzLDEuMDAwNiwuOTk5OTgsMS4wMDA2LDEuMDAwNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTk4LDEsMS4wMDAwMywxLjAwMDAzLDEuMDAwMDMsMS4wMDAyNiwuOTk5OSwuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsMS4wMDAwMSwxLjAwMDI2LDEuMDAwMjIsLjk5OTc3LDEuMDAwNiwuOTk5NzMsLjk5OTc3LDEuMDAwMjYsLjk5OTk5LC45OTk3NywxLjAwMDIyLDEuMDAwMDEsMS4wMDAyMiwuOTk5NzcsMS4wMDAwMSwxLjAwMDI2LC45OTk3NywxLjAwMDAxLDEuMDAwMTYsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjYsLjk5OTk4LDEuMDAwNiwuOTk5OTgsMS4wMDAwMywuOTk5NzMsLjk5OTk4LC45OTk3MywxLjAwMDI2LC45OTk3MywxLjAwMDI2LC45OTk3MywuOTk5OTgsMS4wMDAyNiwxLjAwMDI2LDEuMDAwNiwxLjAwMDYsLjk5OTczLDEuMDAwNiwuOTk5ODIsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwuOTk5NTksLjk5OTczLC45OTk5OCwxLjAwMDI2LC45OTk3MywxLjAwMDIyLC45OTk3MywuOTk5NzMsMSwuOTk5NTksMS4wMDA3NywuOTk5NTksMS4wMDAwMywuOTk5OTgsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNzcsLjk5OTczLC45OTk5OCwxLjAwMDI1LC45OTk2OCwuOTk5NzMsMS4wMDAwMywxLjAwMDI1LC42MDI5OSwxLjAwMDI0LDEuMDY0MDksMSwxLC45OTk5OCwxLC45OTk3MywxLjAwMDYsLjk5OTk4LDEsLjk5OTM2LC45OTk3MywxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDI2LC45OTk3NywuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsLjk5OTc3LDEsLjk5OTc3LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTk3NywuOTk5NzcsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMDMsMS4wMDAyMiwuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTgyLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsMS4wNjQwOSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsLjk5OTczLDEuMDAwMjYsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LDEuMDA0NCwuOTk5NzcsMS4wMDAyNiwxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDIyLDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTk3MSwuOTk5NzMsLjk5OTczLDEuMDAwNiwuOTk5NzcsLjk5OTczLC45OTk3MywxLjAwMDI2LDEuMDAwNiwxLjAwMDI2LDEuMDAwNiwxLjAwMDI2LDEuMDEwMTEsMS4wMDAyNiwuOTk5OTksMS4wMDAyNiwxLjAwMDYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTc3LDEuMDAwMjYsLjk5OTMsLjk5OTgsMS4wMDAyNiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMjIsMS4wMDAyNiwxLDEuMDAwMTYsLjk5OTc3LC45OTk1OSwuOTk5NzcsLjk5OTU5LC45OTk3NywuOTk5NTksMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAyNiwuOTk5OTgsMS4wMDAyNiwuODEyMSwxLjAwMDI2LC45OTk5OCwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwuOTk5NzcsMS4wMDAyNiwxLjAwMDE2LDEuMDAwMjIsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwxLjAwMDI2LDEsMS4wMDAyNiwxLDEuMDAwMjYsMSwxLjAwMDYsLjk5OTczLC45OTk3NywuOTk5NzMsMSwuOTk5ODIsMS4wMDAyMiwxLjAwMDI2LDEuMDAwMDEsLjk5OTczLDEuMDAwMjYsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTc3LDEsMSwxLjAwMDI2LC45OTk2OSwuOTk5NzIsLjk5OTgxLC45OTk4LDEuMDAwNiwuOTk5NzcsLjk5OTc3LDEuMDAwMjIsLjkxMTU1LDEuMDAwMDEsMS4wMDAyNiwuOTk5NzcsMS4wMDAyMiwxLjAwMDYsLjk5OTc3LDEuMDAwMDEsLjk5OTk5LC45OTk3NywuOTk5NjYsMS4wMDAyMiwxLjAwMDMyLDEuMDAwMDEsLjk5OTQ0LDEuMDAwMjYsMS4wMDAwMSwuOTk5NjgsMS4wMDAwMSwxLjAwMDQ3LDEsMS4wMDA2LDEuMDAwMDEsLjk5OTgxLDEuMDAxMDEsMS4wMDAyNiwxLjAwMDYsLjk5OTQ4LC45OTk4MSwxLjAwMDY0LC45OTk3MywuOTk5NDIsMS4wMDEwMSwxLjAwMDYxLDEuMDAwMjYsMS4wMDA2OSwxLjAwMDYsMS4wMDAxNCwuOTk5NzMsMS4wMTMyMiwuOTk5NzMsMS4wMDA2NSwxLjAwMDI2LDEuMDAwMTIsLjk5OTIzLDEsMS4wMDA2NCwxLjAwMDc2LC45OTk0OCwxLjAwMDU1LDEuMDAwNjMsMS4wMDAwNywuOTk5NDMsMS4wMDA2LC45OTk0OCwxLjAwMDI2LC45OTk0OCwuOTk5NDMsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjksMS4wMDAzOCwxLjAwMDM1LDEuMDAwMDEsMS4wMDA2LDEuMDAwNiwuOTk5NzMsLjk5OTc4LDEuMDAwMDEsMS4wMDA1NywuOTk5ODksLjk5OTY3LC45OTk2NCwuOTk5NjcsLjk5OTc3LC45OTk5OSwuOTk5NzcsMS4wMDAzOCwuOTk5NzcsMS4wMDAwMSwuOTk5NzMsMS4wMDA2NiwuOTk5NjcsLjk5OTY3LDEuMDAwNDEsLjk5OTk4LC45OTk5OSwuOTk5NzcsMS4wMDAyMiwuOTk5NjcsMS4wMDAwMSwuOTk5NzcsMS4wMDAyNiwuOTk5NjQsMS4wMDAzMSwxLjAwMDAxLC45OTk5OSwuOTk5OTksMSwxLjAwMDIzLDEsMSwuOTk5OTksMS4wMDAzNSwxLjAwMDAxLC45OTk5OSwuOTk5NzMsLjk5OTc3LC45OTk5OSwxLjAwMDU4LC45OTk3MywuOTk5NzMsLjk5OTU1LC45OTk1LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDMyLC45OTk4OSwxLjAwMDM0LC45OTk5OSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwuOTk5NzMsLjQ1OTk4LC45OTk3MywxLjAwMDI2LC45OTk3MywxLjAwMDAxLC45OTk5OSwuOTk5ODIsLjk5OTk0LC45OTk5NiwxLDEuMDAwNDIsMS4wMDA0NCwxLjAwMDI5LDEuMDAwMjMsLjk5OTczLC45OTk3MywxLjAwMDI2LC45OTk0OSwxLjAwMDAyLC45OTk3MywxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NzUsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMzIsLjk4Njg1LC45OTk3MywxLjAwMDI2LDEsMSwuOTk5NjYsMS4wMDA0NCwxLjAwMDE2LDEuMDAwMjIsMS4wMDAxNiwxLjAwMDIyLDEuMDAwMTYsMS4wMDAyMiwxLjAwMDAxLC45OTk3MywxLDEsLjk5OTczLDEsMSwuOTk5NTUsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEsMSwxLC45OTk3MywuOTk5NzMsLjk5OTcyLDEsMSwxLjAwMTA2LC45OTk5OSwuOTk5OTgsLjk5OTk4LC45OTk5OSwuOTk5OTgsMS42NjQ3NSwxLC45OTk3MywuOTk5NzMsMSwuOTk5NzMsLjk5OTcxLC45OTk3OCwxLDEsLjk5OTkxLC45OTk4NCwxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEuMDAwOTgsMSwxLDEsMS4wMDA0OSwxLDEsLjk5OTcyLDEsMS4yMDk4NSwxLjM5NzEzLDEuMDAwMDMsMS4wMDAzMSwxLjAwMDE1LDEsLjk5NTYxLDEuMDAwMjcsMS4wMDAzMSwxLjAwMDMxLC45OTkxNSwxLjAwMDMxLDEuMDAwMzEsLjk5OTk5LDEuMDAwMDMsLjk5OTk5LC45OTk5OSwxLjQxMTQ0LDEuNiwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDA1NzksMS40MDU3OSwxLjM2NjI1LC45OTk5OSwxLC45OTg2MSwuOTk4NjEsMSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LC45OTk3MiwuOTk5OTksLjk5OTk5LC45OTk5OSwuOTk5OTksMS40MDQ4MywxLC45OTk3NywxLjAwMDU0LDEsMSwuOTk5NTMsLjk5OTYyLDEuMDAwNDIsLjk5OTUsMSwxLDEsMSwxLDEsMSwxLC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLFJhPXtsaW5lSGVpZ2h0OjEuMzUsbGluZUdhcDouMn0sTmE9Wy43NjExNiwxLDEsMS4wMDA2LDEuMDAwNiwxLjAwMDA2LC45OTk3MywuOTk5NzMsLjk5OTgyLDEuMDAwMDEsMS4wMDA0MywuOTk5OTgsLjk5OTk4LC45OTk1OSwxLjAwMDAzLDEuMDAwNiwuOTk5OTgsMS4wMDA2LDEuMDAwNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA2LDEsMS4wMDAwMywxLjAwMDAzLDEuMDAwMDMsLjk5OTczLC45OTk4NywxLjAwMDAxLDEuMDAwMDEsLjk5OTc3LC45OTk3NywxLjAwMDAxLDEuMDAwMjYsMS4wMDAyMiwuOTk5NzcsMS4wMDA2LDEsMS4wMDAwMSwuOTk5NzMsLjk5OTk5LC45OTk3NywxLjAwMDIyLDEuMDAwMDEsMS4wMDAyMiwuOTk5NzcsMS4wMDAwMSwxLjAwMDI2LC45OTk3NywxLjAwMDAxLDEuMDAwMTYsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsLjk5OTQ5LC45OTk3MywuOTk5OTgsLjk5OTczLC45OTk3MywxLC45OTk3MywuOTk5NzMsMS4wMDA2LC45OTk3MywuOTk5NzMsLjk5OTI0LC45OTkyNCwxLC45OTkyNCwuOTk5OTksLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk5OCwxLDEuMDAwNiwuOTk5NzMsMSwuOTk5NzcsMSwxLDEsMS4wMDAwNSwxLjAwMDksMS4wMDAwNSwxLjAwMDAzLC45OTk5OCwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA5LC45OTk3MywuOTk5OTgsMS4wMDAyNSwuOTk5NjgsLjk5OTczLDEuMDAwMDMsMS4wMDAyNSwuNjAyOTksMS4wMDAyNCwxLjA2NDA5LDEsMSwuOTk5OTgsMSwuOTk5OCwxLjAwMDYsLjk5OTk4LDEsLjk5OTM2LC45OTk3MywxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDI2LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEsLjk5OTc3LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTk3NywuOTk5NzcsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMDMsMS4wMDAyMiwuOTk5NzcsLjk5OTc3LC45OTk3NywuOTk5NzcsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTgyLDEsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wNjQwOSwxLjAwMDI2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLC45OTk3MywxLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLDEuMDAwMDEsLjk5OTczLC45OTk3NywxLC45OTk3NywxLC45OTk3NywxLC45OTk3NywxLC45OTk3NywxLjAyODgsLjk5OTc3LC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTkyNCwxLjAwMDYsMS4wMDA2LC45OTk0NiwxLjAwMDM0LDEsLjk5OTI0LDEuMDAwMDEsMSwxLC45OTk3MywuOTk5MjQsLjk5OTczLC45OTkyNCwuOTk5NzMsMS4wNjMxMSwuOTk5NzMsMS4wMDAyNCwuOTk5NzMsLjk5OTI0LC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLDEuMDAwNDEsLjk5OTgsLjk5OTczLDEuMDAwMjIsLjk5OTczLDEuMDAwMjIsLjk5OTczLDEuMDAwMjIsLjk5OTczLDEsMS4wMDAxNiwuOTk5NzcsLjk5OTk4LC45OTk3NywuOTk5OTgsLjk5OTc3LC45OTk5OCwxLjAwMDAxLDEsMS4wMDAwMSwxLDEuMDAwMDEsMSwxLjAwMDAxLDEsMS4wMDAyNiwxLjAwMDYsMS4wMDAyNiwuODk1NDcsMS4wMDAyNiwxLjAwMDYsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsMS4wMDAxNiwuOTk5NzcsMS4wMDAwMSwxLDEuMDAwMDEsMS4wMDAyNiwxLDEuMDAwMjYsMSwxLjAwMDI2LDEsLjk5OTI0LC45OTk3MywxLjAwMDAxLC45OTk3MywxLC45OTk4MiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAwMSwxLDEuMDAwMjYsMS4wMDA2LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsMS4wMDAwMSwxLDEuMDAwNTQsLjk5OTc3LDEuMDAwODQsMS4wMDAwNywuOTk5NzMsMS4wMDAxMywuOTk5MjQsMS4wMDAwMSwxLjAwMDAxLC45OTk0NSwuOTEyMjEsMS4wMDAwMSwxLjAwMDI2LC45OTk3NywxLjAwMDIyLDEuMDAwNiwxLjAwMDAxLDEuMDAwMDEsLjk5OTk5LC45OTk3NywuOTk5MzMsMS4wMDAyMiwxLjAwMDU0LDEuMDAwMDEsMS4wMDA2NSwxLjAwMDI2LDEuMDAwMDEsMS4wMDAxLDEuMDAwMDEsMS4wMDA1MiwxLDEuMDAwNiwxLjAwMDAxLC45OTk0NSwuOTk4OTcsLjk5OTY4LC45OTkyNCwxLjAwMDM2LC45OTk0NSwuOTk5NDksMSwxLjAwMDYsLjk5ODk3LC45OTkxOCwuOTk5NjgsLjk5OTExLC45OTkyNCwxLC45OTk2MiwxLjAxNDg3LDEsMS4wMDA1LC45OTk3MywxLjAwMDEyLDEuMDAwNDMsMSwuOTk5OTUsLjk5OTk0LDEuMDAwMzYsLjk5OTQ3LDEuMDAwMTksMS4wMDA2MywxLjAwMDI1LC45OTkyNCwxLjAwMDM2LC45OTk3MywxLjAwMDM2LDEuMDAwMjUsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMjcsMS4wMDAxLDEuMDAwNjgsMS4wMDAwMSwxLjAwMDYsMS4wMDA2LDEsMS4wMDAwOCwuOTk5NTcsLjk5OTcyLC45OTk0LC45OTk1NCwuOTk5NzUsMS4wMDA1MSwxLjAwMDAxLDEuMDAwMTksMS4wMDAwMSwxLjAwMDEsLjk5OTg2LDEuMDAwMDEsMS4wMDAwMSwxLjAwMDM4LC45OTk1NCwuOTk5NTQsLjk5OTQsMS4wMDA2NiwuOTk5OTksLjk5OTc3LDEuMDAwMjIsMS4wMDA1NCwxLjAwMDAxLC45OTk3NywxLjAwMDI2LC45OTk3NSwxLjAwMDEsMS4wMDAwMSwuOTk5OTMsLjk5OTUsLjk5OTU1LDEuMDAwMTYsLjk5OTc4LC45OTk3NCwxLjAwMDE5LDEuMDAwMjIsLjk5OTU1LDEuMDAwNTMsLjk5OTczLDEuMDAwODksMS4wMDAwNSwuOTk5NjcsMS4wMDA0OCwuOTk5NzMsMS4wMDAwMiwxLjAwMDM0LC45OTk3MywuOTk5NzMsLjk5OTY0LDEuMDAwMDYsMS4wMDA2NiwuOTk5NDcsLjk5OTczLC45ODg5NCwuOTk5NzMsMSwuNDQ4OTgsMSwuOTk5NDYsMSwxLjAwMDM5LDEuMDAwODIsLjk5OTkxLC45OTk5MSwuOTk5ODUsMS4wMDAyMiwxLjAwMDIzLDEuMDAwNjEsMS4wMDAwNiwuOTk5NjYsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDAxOSwxLjAwMDgsMSwuOTk5MjQsLjk5OTI0LC45OTkyNCwuOTk5ODMsMS4wMDA0NCwuOTk5NzMsLjk5OTY0LC45ODMzMiwxLC45OTk3MywxLDEsLjk5OTYyLC45OTg5NSwxLjAwMDE2LC45OTk3NywxLjAwMDE2LC45OTk3NywxLjAwMDE2LC45OTk3NywxLjAwMDAxLDEsMSwxLC45OTk3MywxLDEsLjk5OTU1LC45OTkyNCwuOTk5MjQsLjk5OTI0LC45OTkyNCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5NzMsLjk5OTczLC45OTk3MiwxLDEsMS4wMDI2NywuOTk5OTksLjk5OTk4LC45OTk5OCwxLC45OTk5OCwxLjY2NDc1LDEsLjk5OTczLC45OTk3MywxLjAwMDIzLC45OTk3MywxLjAwNDIzLC45OTkyNSwuOTk5OTksMSwuOTk5OTEsLjk5OTg0LDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMS4wMDA0OSwxLDEuMDAyNDUsMSwxLDEsMSwuOTYzMjksMSwxLjIwOTg1LDEuMzk3MTMsMS4wMDAwMywuODI1NCwxLjAwMDE1LDEsMS4wMDAzNSwxLjAwMDI3LDEuMDAwMzEsMS4wMDAzMSwxLjAwMDAzLDEuMDAwMzEsMS4wMDAzMSwuOTk5OTksMS4wMDAwMywuOTk5OTksLjk5OTk5LDEuNDExNDQsMS42LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MDU3OSwxLjQwNTc5LDEuMzY2MjUsLjk5OTk5LDEsLjk5ODYxLC45OTg2MSwxLDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LDEuMDAwMjYsLjk1MzE3LC45OTk5OSwuOTk5OTksLjk5OTk5LC45OTk5OSwxLjQwNDgzLDEsLjk5OTc3LDEuMDAwNTQsMSwxLC45OTk1MywuOTk5NjIsMS4wMDA0MiwuOTk5NSwxLDEsMSwxLDEsMSwxLDEsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LDEsMSwxLDEsMSwxLDEsMSwxLDEsMV0sR2E9e2xpbmVIZWlnaHQ6MS4zNSxsaW5lR2FwOi4yfSxNYT1bLjc2MTE2LDEsMSwxLjAwMDYsMS4wMDA2LDEuMDAwMDYsLjk5OTczLC45OTk3MywuOTk5ODIsMS4wMDAwMSwxLjAwMDQzLC45OTk5OCwuOTk5OTgsLjk5OTU5LDEuMDAwMDMsMS4wMDA2LC45OTk5OCwxLjAwMDYsMS4wMDA2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDYsMSwxLjAwMDAzLDEuMDAwMDMsMS4wMDAwMywuOTk5NzMsLjk5OTg3LDEuMDAwMDEsMS4wMDAwMSwuOTk5NzcsLjk5OTc3LDEuMDAwMDEsMS4wMDAyNiwxLjAwMDIyLC45OTk3NywxLjAwMDYsMSwxLjAwMDAxLC45OTk3MywuOTk5OTksLjk5OTc3LDEuMDAwMjIsMS4wMDAwMSwxLjAwMDIyLC45OTk3NywxLjAwMDAxLDEuMDAwMjYsLjk5OTc3LDEuMDAwMDEsMS4wMDAxNiwxLjAwMDAxLDEuMDAwMDEsMS4wMDAyNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwuOTk5NDksLjk5OTczLC45OTk5OCwuOTk5NzMsLjk5OTczLDEsLjk5OTczLC45OTk3MywxLjAwMDYsLjk5OTczLC45OTk3MywuOTk5MjQsLjk5OTI0LDEsLjk5OTI0LC45OTk5OSwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTk4LDEsMS4wMDA2LC45OTk3MywxLC45OTk3NywxLDEsMSwxLjAwMDA1LDEuMDAwOSwxLjAwMDA1LDEuMDAwMDMsLjk5OTk4LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLjAwMDksLjk5OTczLC45OTk5OCwxLjAwMDI1LC45OTk2OCwuOTk5NzMsMS4wMDAwMywxLjAwMDI1LC42MDI5OSwxLjAwMDI0LDEuMDY0MDksMSwxLC45OTk5OCwxLC45OTk4LDEuMDAwNiwuOTk5OTgsMSwuOTk5MzYsLjk5OTczLDEuMDAwMDIsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMjYsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMSwuOTk5NzcsMS4wMDAwMSwxLjAwMDAxLDEuMDAwMDEsMS4wMDAwMSwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsLjk5OTc3LC45OTk3NywxLjAwMDIyLDEuMDAwMjIsMS4wMDAyMiwxLjAwMDIyLDEuMDAwMjIsMS4wMDAwMywxLjAwMDIyLC45OTk3NywuOTk5NzcsLjk5OTc3LC45OTk3NywxLjAwMDAxLDEuMDAwMDEsMS4wMDAyNiwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5ODIsMSwuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLC45OTk3MywxLjA2NDA5LDEuMDAwMjYsLjk5OTczLC45OTk3MywuOTk5NzMsLjk5OTczLDEsLjk5OTczLDEsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsMS4wMDAwMSwuOTk5NzMsLjk5OTc3LDEsLjk5OTc3LDEsLjk5OTc3LDEsLjk5OTc3LDEsLjk5OTc3LDEuMDQ1OTYsLjk5OTc3LC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDAxLC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywxLjAwMDIyLC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LDEuMDAwNiwxLjAwMDYsMS4wMDA2LC45OTkyNCwxLjAwMDYsMS4wMDA2LDEuMDAwMTksMS4wMDAzNCwxLC45OTkyNCwxLjAwMDAxLDEsMSwuOTk5NzMsLjk5OTI0LC45OTk3MywuOTk5MjQsLjk5OTczLDEuMDI1NzIsLjk5OTczLDEuMDAwMDUsLjk5OTczLC45OTkyNCwuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5OTksLjk5OTgsLjk5OTczLDEuMDAwMjIsLjk5OTczLDEuMDAwMjIsLjk5OTczLDEuMDAwMjIsLjk5OTczLDEsMS4wMDAxNiwuOTk5NzcsLjk5OTk4LC45OTk3NywuOTk5OTgsLjk5OTc3LC45OTk5OCwxLjAwMDAxLDEsMS4wMDAwMSwxLDEuMDAwMDEsMSwxLjAwMDAxLDEsMS4wMDAyNiwxLjAwMDYsMS4wMDAyNiwuODQ1MzMsMS4wMDAyNiwxLjAwMDYsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsLjk5OTc3LC45OTk3MywuOTk5NzcsLjk5OTczLC45OTk3NywuOTk5NzMsMS4wMDAxNiwuOTk5NzcsMS4wMDAwMSwxLDEuMDAwMDEsMS4wMDAyNiwxLDEuMDAwMjYsMSwxLjAwMDI2LDEsLjk5OTI0LC45OTk3MywxLjAwMDAxLC45OTk3MywxLC45OTk4MiwxLjAwMDIyLDEuMDAwMjYsMS4wMDAwMSwxLDEuMDAwMjYsMS4wMDA2LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk5OCwuOTk5OTgsLjk5OTI4LDEsLjk5OTc3LDEuMDAwMTMsMS4wMDA1NSwuOTk5NDcsLjk5OTQ1LC45OTk0MSwuOTk5MjQsMS4wMDAwMSwxLjAwMDAxLDEuMDAwNCwuOTE2MjEsMS4wMDAwMSwxLjAwMDI2LC45OTk3NywxLjAwMDIyLDEuMDAwNiwxLjAwMDAxLDEuMDAwMDUsLjk5OTk5LC45OTk3NywxLjAwMDE1LDEuMDAwMjIsLjk5OTc3LDEuMDAwMDEsLjk5OTczLDEuMDAwMjYsMS4wMDAwMSwxLjAwMDE5LDEuMDAwMDEsLjk5OTQ2LDEsMS4wMDA2LDEuMDAwMDEsLjk5OTc4LDEuMDAwNDUsLjk5OTczLC45OTkyNCwxLjAwMDIzLC45OTk3OCwuOTk5NjYsMSwxLjAwMDY1LDEuMDAwNDUsMS4wMDAxOSwuOTk5NzMsLjk5OTczLC45OTkyNCwxLDEsLjk2NDk5LDEsMS4wMDA1NSwuOTk5NzMsMS4wMDAwOCwxLjAwMDI3LDEsLjk5OTcsLjk5OTk1LDEuMDAwMjMsLjk5OTMzLDEuMDAwMTksMS4wMDAxNSwxLjAwMDMxLC45OTkyNCwxLjAwMDIzLC45OTk3MywxLjAwMDIzLDEuMDAwMzEsMS4wMDAwMSwuOTk5MjgsMS4wMDAyOSwxLjAwMDkyLDEuMDAwMzUsMS4wMDAwMSwxLjAwMDYsMS4wMDA2LDEsLjk5OTg4LC45OTk3NSwxLDEuMDAwODIsLjk5NTYxLC45OTk2LDEuMDAwMzUsMS4wMDAwMSwuOTk5NjIsMS4wMDAwMSwxLjAwMDkyLC45OTk2NCwxLjAwMDAxLC45OTk2MywuOTk5OTksMS4wMDAzNSwxLjAwMDM1LDEuMDAwODIsLjk5OTYyLC45OTk5OSwuOTk5NzcsMS4wMDAyMiwxLjAwMDM1LDEuMDAwMDEsLjk5OTc3LDEuMDAwMjYsLjk5OTYsLjk5OTY3LDEuMDAwMDEsMS4wMDAzNCwxLjAwMDc0LDEuMDAwNTQsMS4wMDA1MywxLjAwMDYzLC45OTk3MSwuOTk5NjIsMS4wMDAzNSwuOTk5NzUsLjk5OTc3LC45OTk3MywxLjAwMDQzLC45OTk1MywxLjAwMDcsLjk5OTE1LC45OTk3MywxLjAwMDA4LC45OTg5MiwxLjAwMDczLDEuMDAwNzMsMS4wMDExNCwuOTk5MTUsMS4wMDA3MywuOTk5NTUsLjk5OTczLDEuMDAwOTIsLjk5OTczLDEsLjk5OTk4LDEsMS4wMDAzLDEsMS4wMDA0MywxLjAwMDAxLC45OTk2OSwxLjAwMDMsMSwxLjAwMDM1LDEuMDAwMDEsLjk5OTUsMSwxLjAwMDkyLC45OTk3MywuOTk5NzMsLjk5OTczLDEuMDAwNywuOTk5NSwxLC45OTkyNCwxLjAwMDYsLjk5OTI0LC45OTk3MiwxLjAwMDYyLC45OTk3MywxLjAwMTE0LDEuMDAwNzMsMSwuOTk5NTUsMSwxLDEuMDAwNDcsLjk5OTY4LDEuMDAwMTYsLjk5OTc3LDEuMDAwMTYsLjk5OTc3LDEuMDAwMTYsLjk5OTc3LDEuMDAwMDEsMSwxLDEsLjk5OTczLDEsMSwuOTk5NTUsLjk5OTI0LC45OTkyNCwuOTk5MjQsLjk5OTI0LC45OTk5OCwuOTk5OTgsLjk5OTk4LC45OTk3MywuOTk5NzMsLjk5OTcyLDEsMSwxLjAwMjY3LC45OTk5OSwuOTk5OTgsLjk5OTk4LDEsLjk5OTk4LDEuNjY0NzUsMSwuOTk5NzMsLjk5OTczLDEuMDAwMjMsLjk5OTczLC45OTk3MSwuOTk5MjUsMS4wMDAyMywxLC45OTk5MSwuOTk5ODQsMS4wMDAwMiwxLjAwMDAyLDEuMDAwMDIsMS4wMDAwMiwxLDEsMSwxLDEsMSwxLC45NjMyOSwxLDEuMjA5ODUsMS4zOTcxMywxLjAwMDAzLC44MjU0LDEuMDAwMTUsMSwxLjAwMDM1LDEuMDAwMjcsMS4wMDAzMSwxLjAwMDMxLC45OTkxNSwxLjAwMDMxLDEuMDAwMzEsLjk5OTk5LDEuMDAwMDMsLjk5OTk5LC45OTk5OSwxLjQxMTQ0LDEuNiwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDExNDQsMS40MTE0NCwxLjQxMTQ0LDEuNDA1NzksMS40MDU3OSwxLjM2NjI1LC45OTk5OSwxLC45OTg2MSwuOTk4NjEsMSwxLjAwMDI2LDEuMDAwMjYsMS4wMDAyNiwxLjAwMDI2LC45NTMxNywuOTk5OTksLjk5OTk5LC45OTk5OSwuOTk5OTksMS40MDQ4MywxLC45OTk3NywxLjAwMDU0LDEsMSwuOTk5NTMsLjk5OTYyLDEuMDAwNDIsLjk5OTUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXSxVYT17bGluZUhlaWdodDoxLjIsbGluZUdhcDouMn0seGE9WzM2NSwwLDMzMywyNzgsMzMzLDQ3NCw1NTYsNTU2LDg4OSw3MjIsMjM4LDMzMywzMzMsMzg5LDU4NCwyNzgsMzMzLDI3OCwyNzgsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDMzMywzMzMsNTg0LDU4NCw1ODQsNjExLDk3NSw3MjIsNzIyLDcyMiw3MjIsNjY3LDYxMSw3NzgsNzIyLDI3OCw1NTYsNzIyLDYxMSw4MzMsNzIyLDc3OCw2NjcsNzc4LDcyMiw2NjcsNjExLDcyMiw2NjcsOTQ0LDY2Nyw2NjcsNjExLDMzMywyNzgsMzMzLDU4NCw1NTYsMzMzLDU1Niw2MTEsNTU2LDYxMSw1NTYsMzMzLDYxMSw2MTEsMjc4LDI3OCw1NTYsMjc4LDg4OSw2MTEsNjExLDYxMSw2MTEsMzg5LDU1NiwzMzMsNjExLDU1Niw3NzgsNTU2LDU1Niw1MDAsMzg5LDI4MCwzODksNTg0LDMzMyw1NTYsNTU2LDU1Niw1NTYsMjgwLDU1NiwzMzMsNzM3LDM3MCw1NTYsNTg0LDczNyw1NTIsNDAwLDU0OSwzMzMsMzMzLDMzMyw1NzYsNTU2LDI3OCwzMzMsMzMzLDM2NSw1NTYsODM0LDgzNCw4MzQsNjExLDcyMiw3MjIsNzIyLDcyMiw3MjIsNzIyLDFlMyw3MjIsNjY3LDY2Nyw2NjcsNjY3LDI3OCwyNzgsMjc4LDI3OCw3MjIsNzIyLDc3OCw3NzgsNzc4LDc3OCw3NzgsNTg0LDc3OCw3MjIsNzIyLDcyMiw3MjIsNjY3LDY2Nyw2MTEsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsODg5LDU1Niw1NTYsNTU2LDU1Niw1NTYsMjc4LDI3OCwyNzgsMjc4LDYxMSw2MTEsNjExLDYxMSw2MTEsNjExLDYxMSw1NDksNjExLDYxMSw2MTEsNjExLDYxMSw1NTYsNjExLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw3MTksNzIyLDYxMSw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNzc4LDYxMSw3NzgsNjExLDc3OCw2MTEsNzc4LDYxMSw3MjIsNjExLDcyMiw2MTEsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDc4NSw1NTYsNTU2LDI3OCw3MjIsNTU2LDU1Niw2MTEsMjc4LDYxMSwyNzgsNjExLDM4NSw2MTEsNDc5LDYxMSwyNzgsNzIyLDYxMSw3MjIsNjExLDcyMiw2MTEsNzA4LDcyMyw2MTEsNzc4LDYxMSw3NzgsNjExLDc3OCw2MTEsMWUzLDk0NCw3MjIsMzg5LDcyMiwzODksNzIyLDM4OSw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDYxMSwzMzMsNjExLDQ3OSw2MTEsMzMzLDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDk0NCw3NzgsNjY3LDU1Niw2NjcsNjExLDUwMCw2MTEsNTAwLDYxMSw1MDAsMjc4LDU1Niw3MjIsNTU2LDFlMyw4ODksNzc4LDYxMSw2NjcsNTU2LDYxMSwzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDQ2NSw3MjIsMzMzLDg1Myw5MDYsNDc0LDgyNSw5MjcsODM4LDI3OCw3MjIsNzIyLDYwMSw3MTksNjY3LDYxMSw3MjIsNzc4LDI3OCw3MjIsNjY3LDgzMyw3MjIsNjQ0LDc3OCw3MjIsNjY3LDYwMCw2MTEsNjY3LDgyMSw2NjcsODA5LDgwMiwyNzgsNjY3LDYxNSw0NTEsNjExLDI3OCw1ODIsNjE1LDYxMCw1NTYsNjA2LDQ3NSw0NjAsNjExLDU0MSwyNzgsNTU4LDU1Niw2MTIsNTU2LDQ0NSw2MTEsNzY2LDYxOSw1MjAsNjg0LDQ0Niw1ODIsNzE1LDU3Niw3NTMsODQ1LDI3OCw1ODIsNjExLDU4Miw4NDUsNjY3LDY2OSw4ODUsNTY3LDcxMSw2NjcsMjc4LDI3Niw1NTYsMTA5NCwxMDYyLDg3NSw2MTAsNzIyLDYyMiw3MTksNzIyLDcxOSw3MjIsNTY3LDcxMiw2NjcsOTA0LDYyNiw3MTksNzE5LDYxMCw3MDIsODMzLDcyMiw3NzgsNzE5LDY2Nyw3MjIsNjExLDYyMiw4NTQsNjY3LDczMCw3MDMsMTAwNSwxMDE5LDg3MCw5NzksNzE5LDcxMSwxMDMxLDcxOSw1NTYsNjE4LDYxNSw0MTcsNjM1LDU1Niw3MDksNDk3LDYxNSw2MTUsNTAwLDYzNSw3NDAsNjA0LDYxMSw2MDQsNjExLDU1Niw0OTAsNTU2LDg3NSw1NTYsNjE1LDU4MSw4MzMsODQ0LDcyOSw4NTQsNjE1LDU1Miw4NTQsNTgzLDU1Niw1NTYsNjExLDQxNyw1NTIsNTU2LDI3OCwyODEsMjc4LDk2OSw5MDYsNjExLDUwMCw2MTUsNTU2LDYwNCw3NzgsNjExLDQ4Nyw0NDcsOTQ0LDc3OCw5NDQsNzc4LDk0NCw3NzgsNjY3LDU1NiwzMzMsMzMzLDU1NiwxZTMsMWUzLDU1MiwyNzgsMjc4LDI3OCwyNzgsNTAwLDUwMCw1MDAsNTU2LDU1NiwzNTAsMWUzLDFlMywyNDAsNDc5LDMzMywzMzMsNjA0LDMzMywxNjcsMzk2LDU1Niw1NTYsMTA5NCw1NTYsODg1LDQ4OSwxMTE1LDFlMyw3NjgsNjAwLDgzNCw4MzQsODM0LDgzNCwxZTMsNTAwLDFlMyw1MDAsMWUzLDUwMCw1MDAsNDk0LDYxMiw4MjMsNzEzLDU4NCw1NDksNzEzLDk3OSw3MjIsMjc0LDU0OSw1NDksNTgzLDU0OSw1NDksNjA0LDU4NCw2MDQsNjA0LDcwOCw2MjUsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzI5LDYwNCw2MDQsMzU0LDM1NCwxZTMsOTkwLDk5MCw5OTAsOTkwLDQ5NCw2MDQsNjA0LDYwNCw2MDQsMzU0LDEwMjEsMTA1Miw5MTcsNzUwLDc1MCw1MzEsNjU2LDU5NCw1MTAsNTAwLDc1MCw3NTAsNjExLDYxMSwzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDIyMiwyMjIsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzM10sTGE9Wy0xLC0xLC0xLDMyLDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLDUyLDUzLDU0LDU1LDU2LDU3LDU4LDU5LDYwLDYxLDYyLDYzLDY0LDY1LDY2LDY3LDY4LDY5LDcwLDcxLDcyLDczLDc0LDc1LDc2LDc3LDc4LDc5LDgwLDgxLDgyLDgzLDg0LDg1LDg2LDg3LDg4LDg5LDkwLDkxLDkyLDkzLDk0LDk1LDk2LDk3LDk4LDk5LDEwMCwxMDEsMTAyLDEwMywxMDQsMTA1LDEwNiwxMDcsMTA4LDEwOSwxMTAsMTExLDExMiwxMTMsMTE0LDExNSwxMTYsMTE3LDExOCwxMTksMTIwLDEyMSwxMjIsMTIzLDEyNCwxMjUsMTI2LDE2MSwxNjIsMTYzLDE2NCwxNjUsMTY2LDE2NywxNjgsMTY5LDE3MCwxNzEsMTcyLDE3NCwxNzUsMTc2LDE3NywxNzgsMTc5LDE4MCwxODEsMTgyLDE4MywxODQsMTg1LDE4NiwxODcsMTg4LDE4OSwxOTAsMTkxLDE5MiwxOTMsMTk0LDE5NSwxOTYsMTk3LDE5OCwxOTksMjAwLDIwMSwyMDIsMjAzLDIwNCwyMDUsMjA2LDIwNywyMDgsMjA5LDIxMCwyMTEsMjEyLDIxMywyMTQsMjE1LDIxNiwyMTcsMjE4LDIxOSwyMjAsMjIxLDIyMiwyMjMsMjI0LDIyNSwyMjYsMjI3LDIyOCwyMjksMjMwLDIzMSwyMzIsMjMzLDIzNCwyMzUsMjM2LDIzNywyMzgsMjM5LDI0MCwyNDEsMjQyLDI0MywyNDQsMjQ1LDI0NiwyNDcsMjQ4LDI0OSwyNTAsMjUxLDI1MiwyNTMsMjU0LDI1NSwyNTYsMjU3LDI1OCwyNTksMjYwLDI2MSwyNjIsMjYzLDI2NCwyNjUsMjY2LDI2NywyNjgsMjY5LDI3MCwyNzEsMjcyLDI3MywyNzQsMjc1LDI3NiwyNzcsMjc4LDI3OSwyODAsMjgxLDI4MiwyODMsMjg0LDI4NSwyODYsMjg3LDI4OCwyODksMjkwLDI5MSwyOTIsMjkzLDI5NCwyOTUsMjk2LDI5NywyOTgsMjk5LDMwMCwzMDEsMzAyLDMwMywzMDQsMzA1LDMwNiwzMDcsMzA4LDMwOSwzMTAsMzExLDMxMiwzMTMsMzE0LDMxNSwzMTYsMzE3LDMxOCwzMTksMzIwLDMyMSwzMjIsMzIzLDMyNCwzMjUsMzI2LDMyNywzMjgsMzI5LDMzMCwzMzEsMzMyLDMzMywzMzQsMzM1LDMzNiwzMzcsMzM4LDMzOSwzNDAsMzQxLDM0MiwzNDMsMzQ0LDM0NSwzNDYsMzQ3LDM0OCwzNDksMzUwLDM1MSwzNTIsMzUzLDM1NCwzNTUsMzU2LDM1NywzNTgsMzU5LDM2MCwzNjEsMzYyLDM2MywzNjQsMzY1LDM2NiwzNjcsMzY4LDM2OSwzNzAsMzcxLDM3MiwzNzMsMzc0LDM3NSwzNzYsMzc3LDM3OCwzNzksMzgwLDM4MSwzODIsMzgzLDQwMiw1MDYsNTA3LDUwOCw1MDksNTEwLDUxMSw1MzYsNTM3LDUzOCw1MzksNzEwLDcxMSw3MTMsNzI4LDcyOSw3MzAsNzMxLDczMiw3MzMsOTAwLDkwMSw5MDIsOTAzLDkwNCw5MDUsOTA2LDkwOCw5MTAsOTExLDkxMiw5MTMsOTE0LDkxNSw5MTYsOTE3LDkxOCw5MTksOTIwLDkyMSw5MjIsOTIzLDkyNCw5MjUsOTI2LDkyNyw5MjgsOTI5LDkzMSw5MzIsOTMzLDkzNCw5MzUsOTM2LDkzNyw5MzgsOTM5LDk0MCw5NDEsOTQyLDk0Myw5NDQsOTQ1LDk0Niw5NDcsOTQ4LDk0OSw5NTAsOTUxLDk1Miw5NTMsOTU0LDk1NSw5NTYsOTU3LDk1OCw5NTksOTYwLDk2MSw5NjIsOTYzLDk2NCw5NjUsOTY2LDk2Nyw5NjgsOTY5LDk3MCw5NzEsOTcyLDk3Myw5NzQsMTAyNCwxMDI1LDEwMjYsMTAyNywxMDI4LDEwMjksMTAzMCwxMDMxLDEwMzIsMTAzMywxMDM0LDEwMzUsMTAzNiwxMDM3LDEwMzgsMTAzOSwxMDQwLDEwNDEsMTA0MiwxMDQzLDEwNDQsMTA0NSwxMDQ2LDEwNDcsMTA0OCwxMDQ5LDEwNTAsMTA1MSwxMDUyLDEwNTMsMTA1NCwxMDU1LDEwNTYsMTA1NywxMDU4LDEwNTksMTA2MCwxMDYxLDEwNjIsMTA2MywxMDY0LDEwNjUsMTA2NiwxMDY3LDEwNjgsMTA2OSwxMDcwLDEwNzEsMTA3MiwxMDczLDEwNzQsMTA3NSwxMDc2LDEwNzcsMTA3OCwxMDc5LDEwODAsMTA4MSwxMDgyLDEwODMsMTA4NCwxMDg1LDEwODYsMTA4NywxMDg4LDEwODksMTA5MCwxMDkxLDEwOTIsMTA5MywxMDk0LDEwOTUsMTA5NiwxMDk3LDEwOTgsMTA5OSwxMTAwLDExMDEsMTEwMiwxMTAzLDExMDQsMTEwNSwxMTA2LDExMDcsMTEwOCwxMTA5LDExMTAsMTExMSwxMTEyLDExMTMsMTExNCwxMTE1LDExMTYsMTExNywxMTE4LDExMTksMTEzOCwxMTM5LDExNjgsMTE2OSw3ODA4LDc4MDksNzgxMCw3ODExLDc4MTIsNzgxMyw3OTIyLDc5MjMsODIwOCw4MjA5LDgyMTEsODIxMiw4MjEzLDgyMTUsODIxNiw4MjE3LDgyMTgsODIxOSw4MjIwLDgyMjEsODIyMiw4MjI0LDgyMjUsODIyNiw4MjMwLDgyNDAsODI0Miw4MjQzLDgyNDksODI1MCw4MjUyLDgyNTQsODI2MCw4MzE5LDgzNTUsODM1Niw4MzU5LDgzNjQsODQ1Myw4NDY3LDg0NzAsODQ4Miw4NDg2LDg0OTQsODUzOSw4NTQwLDg1NDEsODU0Miw4NTkyLDg1OTMsODU5NCw4NTk1LDg1OTYsODU5Nyw4NjE2LDg3MDYsODcxMCw4NzE5LDg3MjEsODcyMiw4NzMwLDg3MzQsODczNSw4NzQ1LDg3NDcsODc3Niw4ODAwLDg4MDEsODgwNCw4ODA1LDg5NjIsODk3Niw4OTkyLDg5OTMsOTQ3Miw5NDc0LDk0ODQsOTQ4OCw5NDkyLDk0OTYsOTUwMCw5NTA4LDk1MTYsOTUyNCw5NTMyLDk1NTIsOTU1Myw5NTU0LDk1NTUsOTU1Niw5NTU3LDk1NTgsOTU1OSw5NTYwLDk1NjEsOTU2Miw5NTYzLDk1NjQsOTU2NSw5NTY2LDk1NjcsOTU2OCw5NTY5LDk1NzAsOTU3MSw5NTcyLDk1NzMsOTU3NCw5NTc1LDk1NzYsOTU3Nyw5NTc4LDk1NzksOTU4MCw5NjAwLDk2MDQsOTYwOCw5NjEyLDk2MTYsOTYxNyw5NjE4LDk2MTksOTYzMiw5NjMzLDk2NDIsOTY0Myw5NjQ0LDk2NTAsOTY1OCw5NjYwLDk2NjgsOTY3NCw5Njc1LDk2NzksOTY4OCw5Njg5LDk3MDIsOTc4Niw5Nzg3LDk3ODgsOTc5Miw5Nzk0LDk4MjQsOTgyNyw5ODI5LDk4MzAsOTgzNCw5ODM1LDk4MzYsNjE0NDEsNjE0NDIsNjE0NDUsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTEsLTFdLEhhPVszNjUsMCwzMzMsMjc4LDMzMyw0NzQsNTU2LDU1Niw4ODksNzIyLDIzOCwzMzMsMzMzLDM4OSw1ODQsMjc4LDMzMywyNzgsMjc4LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1NiwzMzMsMzMzLDU4NCw1ODQsNTg0LDYxMSw5NzUsNzIyLDcyMiw3MjIsNzIyLDY2Nyw2MTEsNzc4LDcyMiwyNzgsNTU2LDcyMiw2MTEsODMzLDcyMiw3NzgsNjY3LDc3OCw3MjIsNjY3LDYxMSw3MjIsNjY3LDk0NCw2NjcsNjY3LDYxMSwzMzMsMjc4LDMzMyw1ODQsNTU2LDMzMyw1NTYsNjExLDU1Niw2MTEsNTU2LDMzMyw2MTEsNjExLDI3OCwyNzgsNTU2LDI3OCw4ODksNjExLDYxMSw2MTEsNjExLDM4OSw1NTYsMzMzLDYxMSw1NTYsNzc4LDU1Niw1NTYsNTAwLDM4OSwyODAsMzg5LDU4NCwzMzMsNTU2LDU1Niw1NTYsNTU2LDI4MCw1NTYsMzMzLDczNywzNzAsNTU2LDU4NCw3MzcsNTUyLDQwMCw1NDksMzMzLDMzMywzMzMsNTc2LDU1NiwyNzgsMzMzLDMzMywzNjUsNTU2LDgzNCw4MzQsODM0LDYxMSw3MjIsNzIyLDcyMiw3MjIsNzIyLDcyMiwxZTMsNzIyLDY2Nyw2NjcsNjY3LDY2NywyNzgsMjc4LDI3OCwyNzgsNzIyLDcyMiw3NzgsNzc4LDc3OCw3NzgsNzc4LDU4NCw3NzgsNzIyLDcyMiw3MjIsNzIyLDY2Nyw2NjcsNjExLDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDg4OSw1NTYsNTU2LDU1Niw1NTYsNTU2LDI3OCwyNzgsMjc4LDI3OCw2MTEsNjExLDYxMSw2MTEsNjExLDYxMSw2MTEsNTQ5LDYxMSw2MTEsNjExLDYxMSw2MTEsNTU2LDYxMSw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNzQwLDcyMiw2MTEsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDc3OCw2MTEsNzc4LDYxMSw3NzgsNjExLDc3OCw2MTEsNzIyLDYxMSw3MjIsNjExLDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCw3ODIsNTU2LDU1NiwyNzgsNzIyLDU1Niw1NTYsNjExLDI3OCw2MTEsMjc4LDYxMSwzOTYsNjExLDQ3OSw2MTEsMjc4LDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDcwOCw3MjMsNjExLDc3OCw2MTEsNzc4LDYxMSw3NzgsNjExLDFlMyw5NDQsNzIyLDM4OSw3MjIsMzg5LDcyMiwzODksNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2MTEsMzMzLDYxMSw0NzksNjExLDMzMyw3MjIsNjExLDcyMiw2MTEsNzIyLDYxMSw3MjIsNjExLDcyMiw2MTEsNzIyLDYxMSw5NDQsNzc4LDY2Nyw1NTYsNjY3LDYxMSw1MDAsNjExLDUwMCw2MTEsNTAwLDI3OCw1NTYsNzIyLDU1NiwxZTMsODg5LDc3OCw2MTEsNjY3LDU1Niw2MTEsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsNzIyLDMzMyw4NTQsOTA2LDQ3Myw4NDQsOTMwLDg0NywyNzgsNzIyLDcyMiw2MTAsNjcxLDY2Nyw2MTEsNzIyLDc3OCwyNzgsNzIyLDY2Nyw4MzMsNzIyLDY1Nyw3NzgsNzE4LDY2Nyw1OTAsNjExLDY2Nyw4MjIsNjY3LDgyOSw3ODEsMjc4LDY2Nyw2MjAsNDc5LDYxMSwyNzgsNTkxLDYyMCw2MjEsNTU2LDYxMCw0NzksNDkyLDYxMSw1NTgsMjc4LDU2Niw1NTYsNjAzLDU1Niw0NTAsNjExLDcxMiw2MDUsNTMyLDY2NCw0MDksNTkxLDcwNCw1NzgsNzczLDgzNCwyNzgsNTkxLDYxMSw1OTEsODM0LDY2Nyw2NjcsODg2LDYxNCw3MTksNjY3LDI3OCwyNzgsNTU2LDEwOTQsMTA0Miw4NTQsNjIyLDcxOSw2NzcsNzE5LDcyMiw3MDgsNzIyLDYxNCw3MjIsNjY3LDkyNyw2NDMsNzE5LDcxOSw2MTUsNjg3LDgzMyw3MjIsNzc4LDcxOSw2NjcsNzIyLDYxMSw2NzcsNzgxLDY2Nyw3MjksNzA4LDk3OSw5ODksODU0LDFlMyw3MDgsNzE5LDEwNDIsNzI5LDU1Niw2MTksNjA0LDUzNCw2MTgsNTU2LDczNiw1MTAsNjExLDYxMSw1MDcsNjIyLDc0MCw2MDQsNjExLDYxMSw2MTEsNTU2LDg4OSw1NTYsODg1LDU1Niw2NDYsNTgzLDg4OSw5MzUsNzA3LDg1NCw1OTQsNTUyLDg2NSw1ODksNTU2LDU1Niw2MTEsNDY5LDU2Myw1NTYsMjc4LDI3OCwyNzgsOTY5LDkwNiw2MTEsNTA3LDYxOSw1NTYsNjExLDc3OCw2MTEsNTc1LDQ2Nyw5NDQsNzc4LDk0NCw3NzgsOTQ0LDc3OCw2NjcsNTU2LDMzMywzMzMsNTU2LDFlMywxZTMsNTUyLDI3OCwyNzgsMjc4LDI3OCw1MDAsNTAwLDUwMCw1NTYsNTU2LDM1MCwxZTMsMWUzLDI0MCw0NzksMzMzLDMzMyw2MDQsMzMzLDE2NywzOTYsNTU2LDU1NiwxMTA0LDU1Niw4ODUsNTE2LDExNDYsMWUzLDc2OCw2MDAsODM0LDgzNCw4MzQsODM0LDk5OSw1MDAsMWUzLDUwMCwxZTMsNTAwLDUwMCw0OTQsNjEyLDgyMyw3MTMsNTg0LDU0OSw3MTMsOTc5LDcyMiwyNzQsNTQ5LDU0OSw1ODMsNTQ5LDU0OSw2MDQsNTg0LDYwNCw2MDQsNzA4LDYyNSw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MjksNjA0LDYwNCwzNTQsMzU0LDFlMyw5OTAsOTkwLDk5MCw5OTAsNDk0LDYwNCw2MDQsNjA0LDYwNCwzNTQsMTAyMSwxMDUyLDkxNyw3NTAsNzUwLDUzMSw2NTYsNTk0LDUxMCw1MDAsNzUwLDc1MCw2MTEsNjExLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMjIyLDIyMiwzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzXSxKYT1bLTEsLTEsLTEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMsNDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsNTIsNTMsNTQsNTUsNTYsNTcsNTgsNTksNjAsNjEsNjIsNjMsNjQsNjUsNjYsNjcsNjgsNjksNzAsNzEsNzIsNzMsNzQsNzUsNzYsNzcsNzgsNzksODAsODEsODIsODMsODQsODUsODYsODcsODgsODksOTAsOTEsOTIsOTMsOTQsOTUsOTYsOTcsOTgsOTksMTAwLDEwMSwxMDIsMTAzLDEwNCwxMDUsMTA2LDEwNywxMDgsMTA5LDExMCwxMTEsMTEyLDExMywxMTQsMTE1LDExNiwxMTcsMTE4LDExOSwxMjAsMTIxLDEyMiwxMjMsMTI0LDEyNSwxMjYsMTYxLDE2MiwxNjMsMTY0LDE2NSwxNjYsMTY3LDE2OCwxNjksMTcwLDE3MSwxNzIsMTc0LDE3NSwxNzYsMTc3LDE3OCwxNzksMTgwLDE4MSwxODIsMTgzLDE4NCwxODUsMTg2LDE4NywxODgsMTg5LDE5MCwxOTEsMTkyLDE5MywxOTQsMTk1LDE5NiwxOTcsMTk4LDE5OSwyMDAsMjAxLDIwMiwyMDMsMjA0LDIwNSwyMDYsMjA3LDIwOCwyMDksMjEwLDIxMSwyMTIsMjEzLDIxNCwyMTUsMjE2LDIxNywyMTgsMjE5LDIyMCwyMjEsMjIyLDIyMywyMjQsMjI1LDIyNiwyMjcsMjI4LDIyOSwyMzAsMjMxLDIzMiwyMzMsMjM0LDIzNSwyMzYsMjM3LDIzOCwyMzksMjQwLDI0MSwyNDIsMjQzLDI0NCwyNDUsMjQ2LDI0NywyNDgsMjQ5LDI1MCwyNTEsMjUyLDI1MywyNTQsMjU1LDI1NiwyNTcsMjU4LDI1OSwyNjAsMjYxLDI2MiwyNjMsMjY0LDI2NSwyNjYsMjY3LDI2OCwyNjksMjcwLDI3MSwyNzIsMjczLDI3NCwyNzUsMjc2LDI3NywyNzgsMjc5LDI4MCwyODEsMjgyLDI4MywyODQsMjg1LDI4NiwyODcsMjg4LDI4OSwyOTAsMjkxLDI5MiwyOTMsMjk0LDI5NSwyOTYsMjk3LDI5OCwyOTksMzAwLDMwMSwzMDIsMzAzLDMwNCwzMDUsMzA2LDMwNywzMDgsMzA5LDMxMCwzMTEsMzEyLDMxMywzMTQsMzE1LDMxNiwzMTcsMzE4LDMxOSwzMjAsMzIxLDMyMiwzMjMsMzI0LDMyNSwzMjYsMzI3LDMyOCwzMjksMzMwLDMzMSwzMzIsMzMzLDMzNCwzMzUsMzM2LDMzNywzMzgsMzM5LDM0MCwzNDEsMzQyLDM0MywzNDQsMzQ1LDM0NiwzNDcsMzQ4LDM0OSwzNTAsMzUxLDM1MiwzNTMsMzU0LDM1NSwzNTYsMzU3LDM1OCwzNTksMzYwLDM2MSwzNjIsMzYzLDM2NCwzNjUsMzY2LDM2NywzNjgsMzY5LDM3MCwzNzEsMzcyLDM3MywzNzQsMzc1LDM3NiwzNzcsMzc4LDM3OSwzODAsMzgxLDM4MiwzODMsNDAyLDUwNiw1MDcsNTA4LDUwOSw1MTAsNTExLDUzNiw1MzcsNTM4LDUzOSw3MTAsNzExLDcxMyw3MjgsNzI5LDczMCw3MzEsNzMyLDczMyw5MDAsOTAxLDkwMiw5MDMsOTA0LDkwNSw5MDYsOTA4LDkxMCw5MTEsOTEyLDkxMyw5MTQsOTE1LDkxNiw5MTcsOTE4LDkxOSw5MjAsOTIxLDkyMiw5MjMsOTI0LDkyNSw5MjYsOTI3LDkyOCw5MjksOTMxLDkzMiw5MzMsOTM0LDkzNSw5MzYsOTM3LDkzOCw5MzksOTQwLDk0MSw5NDIsOTQzLDk0NCw5NDUsOTQ2LDk0Nyw5NDgsOTQ5LDk1MCw5NTEsOTUyLDk1Myw5NTQsOTU1LDk1Niw5NTcsOTU4LDk1OSw5NjAsOTYxLDk2Miw5NjMsOTY0LDk2NSw5NjYsOTY3LDk2OCw5NjksOTcwLDk3MSw5NzIsOTczLDk3NCwxMDI0LDEwMjUsMTAyNiwxMDI3LDEwMjgsMTAyOSwxMDMwLDEwMzEsMTAzMiwxMDMzLDEwMzQsMTAzNSwxMDM2LDEwMzcsMTAzOCwxMDM5LDEwNDAsMTA0MSwxMDQyLDEwNDMsMTA0NCwxMDQ1LDEwNDYsMTA0NywxMDQ4LDEwNDksMTA1MCwxMDUxLDEwNTIsMTA1MywxMDU0LDEwNTUsMTA1NiwxMDU3LDEwNTgsMTA1OSwxMDYwLDEwNjEsMTA2MiwxMDYzLDEwNjQsMTA2NSwxMDY2LDEwNjcsMTA2OCwxMDY5LDEwNzAsMTA3MSwxMDcyLDEwNzMsMTA3NCwxMDc1LDEwNzYsMTA3NywxMDc4LDEwNzksMTA4MCwxMDgxLDEwODIsMTA4MywxMDg0LDEwODUsMTA4NiwxMDg3LDEwODgsMTA4OSwxMDkwLDEwOTEsMTA5MiwxMDkzLDEwOTQsMTA5NSwxMDk2LDEwOTcsMTA5OCwxMDk5LDExMDAsMTEwMSwxMTAyLDExMDMsMTEwNCwxMTA1LDExMDYsMTEwNywxMTA4LDExMDksMTExMCwxMTExLDExMTIsMTExMywxMTE0LDExMTUsMTExNiwxMTE3LDExMTgsMTExOSwxMTM4LDExMzksMTE2OCwxMTY5LDc4MDgsNzgwOSw3ODEwLDc4MTEsNzgxMiw3ODEzLDc5MjIsNzkyMyw4MjA4LDgyMDksODIxMSw4MjEyLDgyMTMsODIxNSw4MjE2LDgyMTcsODIxOCw4MjE5LDgyMjAsODIyMSw4MjIyLDgyMjQsODIyNSw4MjI2LDgyMzAsODI0MCw4MjQyLDgyNDMsODI0OSw4MjUwLDgyNTIsODI1NCw4MjYwLDgzMTksODM1NSw4MzU2LDgzNTksODM2NCw4NDUzLDg0NjcsODQ3MCw4NDgyLDg0ODYsODQ5NCw4NTM5LDg1NDAsODU0MSw4NTQyLDg1OTIsODU5Myw4NTk0LDg1OTUsODU5Niw4NTk3LDg2MTYsODcwNiw4NzEwLDg3MTksODcyMSw4NzIyLDg3MzAsODczNCw4NzM1LDg3NDUsODc0Nyw4Nzc2LDg4MDAsODgwMSw4ODA0LDg4MDUsODk2Miw4OTc2LDg5OTIsODk5Myw5NDcyLDk0NzQsOTQ4NCw5NDg4LDk0OTIsOTQ5Niw5NTAwLDk1MDgsOTUxNiw5NTI0LDk1MzIsOTU1Miw5NTUzLDk1NTQsOTU1NSw5NTU2LDk1NTcsOTU1OCw5NTU5LDk1NjAsOTU2MSw5NTYyLDk1NjMsOTU2NCw5NTY1LDk1NjYsOTU2Nyw5NTY4LDk1NjksOTU3MCw5NTcxLDk1NzIsOTU3Myw5NTc0LDk1NzUsOTU3Niw5NTc3LDk1NzgsOTU3OSw5NTgwLDk2MDAsOTYwNCw5NjA4LDk2MTIsOTYxNiw5NjE3LDk2MTgsOTYxOSw5NjMyLDk2MzMsOTY0Miw5NjQzLDk2NDQsOTY1MCw5NjU4LDk2NjAsOTY2OCw5Njc0LDk2NzUsOTY3OSw5Njg4LDk2ODksOTcwMiw5Nzg2LDk3ODcsOTc4OCw5NzkyLDk3OTQsOTgyNCw5ODI3LDk4MjksOTgzMCw5ODM0LDk4MzUsOTgzNiw2MTQ0MSw2MTQ0Miw2MTQ0NSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMV0sdmE9WzM2NSwwLDMzMywyNzgsMjc4LDM1NSw1NTYsNTU2LDg4OSw2NjcsMTkxLDMzMywzMzMsMzg5LDU4NCwyNzgsMzMzLDI3OCwyNzgsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDI3OCwyNzgsNTg0LDU4NCw1ODQsNTU2LDEwMTUsNjY3LDY2Nyw3MjIsNzIyLDY2Nyw2MTEsNzc4LDcyMiwyNzgsNTAwLDY2Nyw1NTYsODMzLDcyMiw3NzgsNjY3LDc3OCw3MjIsNjY3LDYxMSw3MjIsNjY3LDk0NCw2NjcsNjY3LDYxMSwyNzgsMjc4LDI3OCw0NjksNTU2LDMzMyw1NTYsNTU2LDUwMCw1NTYsNTU2LDI3OCw1NTYsNTU2LDIyMiwyMjIsNTAwLDIyMiw4MzMsNTU2LDU1Niw1NTYsNTU2LDMzMyw1MDAsMjc4LDU1Niw1MDAsNzIyLDUwMCw1MDAsNTAwLDMzNCwyNjAsMzM0LDU4NCwzMzMsNTU2LDU1Niw1NTYsNTU2LDI2MCw1NTYsMzMzLDczNywzNzAsNTU2LDU4NCw3MzcsNTUyLDQwMCw1NDksMzMzLDMzMywzMzMsNTc2LDUzNywyNzgsMzMzLDMzMywzNjUsNTU2LDgzNCw4MzQsODM0LDYxMSw2NjcsNjY3LDY2Nyw2NjcsNjY3LDY2NywxZTMsNzIyLDY2Nyw2NjcsNjY3LDY2NywyNzgsMjc4LDI3OCwyNzgsNzIyLDcyMiw3NzgsNzc4LDc3OCw3NzgsNzc4LDU4NCw3NzgsNzIyLDcyMiw3MjIsNzIyLDY2Nyw2NjcsNjExLDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDg4OSw1MDAsNTU2LDU1Niw1NTYsNTU2LDI3OCwyNzgsMjc4LDI3OCw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTQ5LDYxMSw1NTYsNTU2LDU1Niw1NTYsNTAwLDU1Niw1MDAsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNzIyLDUwMCw3MjIsNTAwLDcyMiw1MDAsNzIyLDUwMCw3MjIsNjI1LDcyMiw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDc3OCw1NTYsNzc4LDU1Niw3NzgsNTU2LDc3OCw1NTYsNzIyLDU1Niw3MjIsNTU2LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDI3OCwyMjIsMjc4LDI3OCw3MzMsNDQ0LDUwMCwyMjIsNjY3LDUwMCw1MDAsNTU2LDIyMiw1NTYsMjIyLDU1NiwyODEsNTU2LDQwMCw1NTYsMjIyLDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDYxNSw3MjMsNTU2LDc3OCw1NTYsNzc4LDU1Niw3NzgsNTU2LDFlMyw5NDQsNzIyLDMzMyw3MjIsMzMzLDcyMiwzMzMsNjY3LDUwMCw2NjcsNTAwLDY2Nyw1MDAsNjY3LDUwMCw2MTEsMjc4LDYxMSwzNTQsNjExLDI3OCw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw5NDQsNzIyLDY2Nyw1MDAsNjY3LDYxMSw1MDAsNjExLDUwMCw2MTEsNTAwLDIyMiw1NTYsNjY3LDU1NiwxZTMsODg5LDc3OCw2MTEsNjY3LDUwMCw2MTEsMjc4LDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsNjY3LDI3OCw3ODksODQ2LDM4OSw3OTQsODY1LDc3NSwyMjIsNjY3LDY2Nyw1NzAsNjcxLDY2Nyw2MTEsNzIyLDc3OCwyNzgsNjY3LDY2Nyw4MzMsNzIyLDY0OCw3NzgsNzI1LDY2Nyw2MDAsNjExLDY2Nyw4MzcsNjY3LDgzMSw3NjEsMjc4LDY2Nyw1NzAsNDM5LDU1NSwyMjIsNTUwLDU3MCw1NzEsNTAwLDU1Niw0MzksNDYzLDU1NSw1NDIsMjIyLDUwMCw0OTIsNTQ4LDUwMCw0NDcsNTU2LDY3MCw1NzMsNDg2LDYwMywzNzQsNTUwLDY1Miw1NDYsNzI4LDc3OSwyMjIsNTUwLDU1Niw1NTAsNzc5LDY2Nyw2NjcsODQzLDU0NCw3MDgsNjY3LDI3OCwyNzgsNTAwLDEwNjYsOTgyLDg0NCw1ODksNzE1LDYzOSw3MjQsNjY3LDY1MSw2NjcsNTQ0LDcwNCw2NjcsOTE3LDYxNCw3MTUsNzE1LDU4OSw2ODYsODMzLDcyMiw3NzgsNzI1LDY2Nyw3MjIsNjExLDYzOSw3OTUsNjY3LDcyNyw2NzMsOTIwLDkyMyw4MDUsODg2LDY1MSw2OTQsMTAyMiw2ODIsNTU2LDU2Miw1MjIsNDkzLDU1Myw1NTYsNjg4LDQ2NSw1NTYsNTU2LDQ3Miw1NjQsNjg2LDU1MCw1NTYsNTU2LDU1Niw1MDAsODMzLDUwMCw4MzUsNTAwLDU3Miw1MTgsODMwLDg1MSw2MjEsNzM2LDUyNiw0OTIsNzUyLDUzNCw1NTYsNTU2LDU1NiwzNzgsNDk2LDUwMCwyMjIsMjIyLDIyMiw5MTAsODI4LDU1Niw0NzIsNTY1LDUwMCw1NTYsNzc4LDU1Niw0OTIsMzM5LDk0NCw3MjIsOTQ0LDcyMiw5NDQsNzIyLDY2Nyw1MDAsMzMzLDMzMyw1NTYsMWUzLDFlMyw1NTIsMjIyLDIyMiwyMjIsMjIyLDMzMywzMzMsMzMzLDU1Niw1NTYsMzUwLDFlMywxZTMsMTg4LDM1NCwzMzMsMzMzLDUwMCwzMzMsMTY3LDM2NSw1NTYsNTU2LDEwOTQsNTU2LDg4NSwzMjMsMTA4MywxZTMsNzY4LDYwMCw4MzQsODM0LDgzNCw4MzQsMWUzLDUwMCw5OTgsNTAwLDFlMyw1MDAsNTAwLDQ5NCw2MTIsODIzLDcxMyw1ODQsNTQ5LDcxMyw5NzksNzE5LDI3NCw1NDksNTQ5LDU4NCw1NDksNTQ5LDYwNCw1ODQsNjA0LDYwNCw3MDgsNjI1LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcyOSw2MDQsNjA0LDM1NCwzNTQsMWUzLDk5MCw5OTAsOTkwLDk5MCw0OTQsNjA0LDYwNCw2MDQsNjA0LDM1NCwxMDIxLDEwNTIsOTE3LDc1MCw3NTAsNTMxLDY1Niw1OTQsNTEwLDUwMCw3NTAsNzUwLDUwMCw1MDAsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywyMjIsMjIyLDI5NCwyOTQsMzI0LDMyNCwzMTYsMzI4LDM5OCwyODVdLFlhPVstMSwtMSwtMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5Niw5Nyw5OCw5OSwxMDAsMTAxLDEwMiwxMDMsMTA0LDEwNSwxMDYsMTA3LDEwOCwxMDksMTEwLDExMSwxMTIsMTEzLDExNCwxMTUsMTE2LDExNywxMTgsMTE5LDEyMCwxMjEsMTIyLDEyMywxMjQsMTI1LDEyNiwxNjEsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwxNzAsMTcxLDE3MiwxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwxOTIsMTkzLDE5NCwxOTUsMTk2LDE5NywxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsMjA4LDIwOSwyMTAsMjExLDIxMiwyMTMsMjE0LDIxNSwyMTYsMjE3LDIxOCwyMTksMjIwLDIyMSwyMjIsMjIzLDIyNCwyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSwyNDAsMjQxLDI0MiwyNDMsMjQ0LDI0NSwyNDYsMjQ3LDI0OCwyNDksMjUwLDI1MSwyNTIsMjUzLDI1NCwyNTUsMjU2LDI1NywyNTgsMjU5LDI2MCwyNjEsMjYyLDI2MywyNjQsMjY1LDI2NiwyNjcsMjY4LDI2OSwyNzAsMjcxLDI3MiwyNzMsMjc0LDI3NSwyNzYsMjc3LDI3OCwyNzksMjgwLDI4MSwyODIsMjgzLDI4NCwyODUsMjg2LDI4NywyODgsMjg5LDI5MCwyOTEsMjkyLDI5MywyOTQsMjk1LDI5NiwyOTcsMjk4LDI5OSwzMDAsMzAxLDMwMiwzMDMsMzA0LDMwNSwzMDYsMzA3LDMwOCwzMDksMzEwLDMxMSwzMTIsMzEzLDMxNCwzMTUsMzE2LDMxNywzMTgsMzE5LDMyMCwzMjEsMzIyLDMyMywzMjQsMzI1LDMyNiwzMjcsMzI4LDMyOSwzMzAsMzMxLDMzMiwzMzMsMzM0LDMzNSwzMzYsMzM3LDMzOCwzMzksMzQwLDM0MSwzNDIsMzQzLDM0NCwzNDUsMzQ2LDM0NywzNDgsMzQ5LDM1MCwzNTEsMzUyLDM1MywzNTQsMzU1LDM1NiwzNTcsMzU4LDM1OSwzNjAsMzYxLDM2MiwzNjMsMzY0LDM2NSwzNjYsMzY3LDM2OCwzNjksMzcwLDM3MSwzNzIsMzczLDM3NCwzNzUsMzc2LDM3NywzNzgsMzc5LDM4MCwzODEsMzgyLDM4Myw0MDIsNTA2LDUwNyw1MDgsNTA5LDUxMCw1MTEsNTM2LDUzNyw1MzgsNTM5LDcxMCw3MTEsNzEzLDcyOCw3MjksNzMwLDczMSw3MzIsNzMzLDkwMCw5MDEsOTAyLDkwMyw5MDQsOTA1LDkwNiw5MDgsOTEwLDkxMSw5MTIsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsOTM4LDkzOSw5NDAsOTQxLDk0Miw5NDMsOTQ0LDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYyLDk2Myw5NjQsOTY1LDk2Niw5NjcsOTY4LDk2OSw5NzAsOTcxLDk3Miw5NzMsOTc0LDEwMjQsMTAyNSwxMDI2LDEwMjcsMTAyOCwxMDI5LDEwMzAsMTAzMSwxMDMyLDEwMzMsMTAzNCwxMDM1LDEwMzYsMTAzNywxMDM4LDEwMzksMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwMywxMTA0LDExMDUsMTEwNiwxMTA3LDExMDgsMTEwOSwxMTEwLDExMTEsMTExMiwxMTEzLDExMTQsMTExNSwxMTE2LDExMTcsMTExOCwxMTE5LDExMzgsMTEzOSwxMTY4LDExNjksNzgwOCw3ODA5LDc4MTAsNzgxMSw3ODEyLDc4MTMsNzkyMiw3OTIzLDgyMDgsODIwOSw4MjExLDgyMTIsODIxMyw4MjE1LDgyMTYsODIxNyw4MjE4LDgyMTksODIyMCw4MjIxLDgyMjIsODIyNCw4MjI1LDgyMjYsODIzMCw4MjQwLDgyNDIsODI0Myw4MjQ5LDgyNTAsODI1Miw4MjU0LDgyNjAsODMxOSw4MzU1LDgzNTYsODM1OSw4MzY0LDg0NTMsODQ2Nyw4NDcwLDg0ODIsODQ4Niw4NDk0LDg1MzksODU0MCw4NTQxLDg1NDIsODU5Miw4NTkzLDg1OTQsODU5NSw4NTk2LDg1OTcsODYxNiw4NzA2LDg3MTAsODcxOSw4NzIxLDg3MjIsODczMCw4NzM0LDg3MzUsODc0NSw4NzQ3LDg3NzYsODgwMCw4ODAxLDg4MDQsODgwNSw4OTYyLDg5NzYsODk5Miw4OTkzLDk0NzIsOTQ3NCw5NDg0LDk0ODgsOTQ5Miw5NDk2LDk1MDAsOTUwOCw5NTE2LDk1MjQsOTUzMiw5NTUyLDk1NTMsOTU1NCw5NTU1LDk1NTYsOTU1Nyw5NTU4LDk1NTksOTU2MCw5NTYxLDk1NjIsOTU2Myw5NTY0LDk1NjUsOTU2Niw5NTY3LDk1NjgsOTU2OSw5NTcwLDk1NzEsOTU3Miw5NTczLDk1NzQsOTU3NSw5NTc2LDk1NzcsOTU3OCw5NTc5LDk1ODAsOTYwMCw5NjA0LDk2MDgsOTYxMiw5NjE2LDk2MTcsOTYxOCw5NjE5LDk2MzIsOTYzMyw5NjQyLDk2NDMsOTY0NCw5NjUwLDk2NTgsOTY2MCw5NjY4LDk2NzQsOTY3NSw5Njc5LDk2ODgsOTY4OSw5NzAyLDk3ODYsOTc4Nyw5Nzg4LDk3OTIsOTc5NCw5ODI0LDk4MjcsOTgyOSw5ODMwLDk4MzQsOTgzNSw5ODM2LDYxNDQxLDYxNDQyLDYxNDQ1LC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xXSxLYT1bMzY1LDAsMzMzLDI3OCwyNzgsMzU1LDU1Niw1NTYsODg5LDY2NywxOTEsMzMzLDMzMywzODksNTg0LDI3OCwzMzMsMjc4LDI3OCw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsMjc4LDI3OCw1ODQsNTg0LDU4NCw1NTYsMTAxNSw2NjcsNjY3LDcyMiw3MjIsNjY3LDYxMSw3NzgsNzIyLDI3OCw1MDAsNjY3LDU1Niw4MzMsNzIyLDc3OCw2NjcsNzc4LDcyMiw2NjcsNjExLDcyMiw2NjcsOTQ0LDY2Nyw2NjcsNjExLDI3OCwyNzgsMjc4LDQ2OSw1NTYsMzMzLDU1Niw1NTYsNTAwLDU1Niw1NTYsMjc4LDU1Niw1NTYsMjIyLDIyMiw1MDAsMjIyLDgzMyw1NTYsNTU2LDU1Niw1NTYsMzMzLDUwMCwyNzgsNTU2LDUwMCw3MjIsNTAwLDUwMCw1MDAsMzM0LDI2MCwzMzQsNTg0LDMzMyw1NTYsNTU2LDU1Niw1NTYsMjYwLDU1NiwzMzMsNzM3LDM3MCw1NTYsNTg0LDczNyw1NTIsNDAwLDU0OSwzMzMsMzMzLDMzMyw1NzYsNTM3LDI3OCwzMzMsMzMzLDM2NSw1NTYsODM0LDgzNCw4MzQsNjExLDY2Nyw2NjcsNjY3LDY2Nyw2NjcsNjY3LDFlMyw3MjIsNjY3LDY2Nyw2NjcsNjY3LDI3OCwyNzgsMjc4LDI3OCw3MjIsNzIyLDc3OCw3NzgsNzc4LDc3OCw3NzgsNTg0LDc3OCw3MjIsNzIyLDcyMiw3MjIsNjY3LDY2Nyw2MTEsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NTYsODg5LDUwMCw1NTYsNTU2LDU1Niw1NTYsMjc4LDI3OCwyNzgsMjc4LDU1Niw1NTYsNTU2LDU1Niw1NTYsNTU2LDU1Niw1NDksNjExLDU1Niw1NTYsNTU2LDU1Niw1MDAsNTU2LDUwMCw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw3MjIsNTAwLDcyMiw1MDAsNzIyLDUwMCw3MjIsNTAwLDcyMiw2MTUsNzIyLDU1Niw2NjcsNTU2LDY2Nyw1NTYsNjY3LDU1Niw2NjcsNTU2LDY2Nyw1NTYsNzc4LDU1Niw3NzgsNTU2LDc3OCw1NTYsNzc4LDU1Niw3MjIsNTU2LDcyMiw1NTYsMjc4LDI3OCwyNzgsMjc4LDI3OCwyNzgsMjc4LDIyMiwyNzgsMjc4LDczNSw0NDQsNTAwLDIyMiw2NjcsNTAwLDUwMCw1NTYsMjIyLDU1NiwyMjIsNTU2LDI5Miw1NTYsMzM0LDU1NiwyMjIsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNjA0LDcyMyw1NTYsNzc4LDU1Niw3NzgsNTU2LDc3OCw1NTYsMWUzLDk0NCw3MjIsMzMzLDcyMiwzMzMsNzIyLDMzMyw2NjcsNTAwLDY2Nyw1MDAsNjY3LDUwMCw2NjcsNTAwLDYxMSwyNzgsNjExLDM3NSw2MTEsMjc4LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDcyMiw1NTYsNzIyLDU1Niw3MjIsNTU2LDk0NCw3MjIsNjY3LDUwMCw2NjcsNjExLDUwMCw2MTEsNTAwLDYxMSw1MDAsMjIyLDU1Niw2NjcsNTU2LDFlMyw4ODksNzc4LDYxMSw2NjcsNTAwLDYxMSwyNzgsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMyw2NjcsMjc4LDc4NCw4MzgsMzg0LDc3NCw4NTUsNzUyLDIyMiw2NjcsNjY3LDU1MSw2NjgsNjY3LDYxMSw3MjIsNzc4LDI3OCw2NjcsNjY4LDgzMyw3MjIsNjUwLDc3OCw3MjIsNjY3LDYxOCw2MTEsNjY3LDc5OCw2NjcsODM1LDc0OCwyNzgsNjY3LDU3OCw0NDYsNTU2LDIyMiw1NDcsNTc4LDU3NSw1MDAsNTU3LDQ0Niw0NDEsNTU2LDU1NiwyMjIsNTAwLDUwMCw1NzYsNTAwLDQ0OCw1NTYsNjkwLDU2OSw0ODIsNjE3LDM5NSw1NDcsNjQ4LDUyNSw3MTMsNzgxLDIyMiw1NDcsNTU2LDU0Nyw3ODEsNjY3LDY2Nyw4NjUsNTQyLDcxOSw2NjcsMjc4LDI3OCw1MDAsMTA1NywxMDEwLDg1NCw1ODMsNzIyLDYzNSw3MTksNjY3LDY1Niw2NjcsNTQyLDY3Nyw2NjcsOTIzLDYwNCw3MTksNzE5LDU4Myw2NTYsODMzLDcyMiw3NzgsNzE5LDY2Nyw3MjIsNjExLDYzNSw3NjAsNjY3LDc0MCw2NjcsOTE3LDkzOCw3OTIsODg1LDY1Niw3MTksMTAxMCw3MjIsNTU2LDU3Myw1MzEsMzY1LDU4Myw1NTYsNjY5LDQ1OCw1NTksNTU5LDQzOCw1ODMsNjg4LDU1Miw1NTYsNTQyLDU1Niw1MDAsNDU4LDUwMCw4MjMsNTAwLDU3Myw1MjEsODAyLDgyMyw2MjUsNzE5LDUyMSw1MTAsNzUwLDU0Miw1NTYsNTU2LDU1NiwzNjUsNTEwLDUwMCwyMjIsMjc4LDIyMiw5MDYsODEyLDU1Niw0MzgsNTU5LDUwMCw1NTIsNzc4LDU1Niw0ODksNDExLDk0NCw3MjIsOTQ0LDcyMiw5NDQsNzIyLDY2Nyw1MDAsMzMzLDMzMyw1NTYsMWUzLDFlMyw1NTIsMjIyLDIyMiwyMjIsMjIyLDMzMywzMzMsMzMzLDU1Niw1NTYsMzUwLDFlMywxZTMsMTg4LDM1NCwzMzMsMzMzLDUwMCwzMzMsMTY3LDM2NSw1NTYsNTU2LDEwOTQsNTU2LDg4NSwzMjMsMTA3MywxZTMsNzY4LDYwMCw4MzQsODM0LDgzNCw4MzQsMWUzLDUwMCwxZTMsNTAwLDFlMyw1MDAsNTAwLDQ5NCw2MTIsODIzLDcxMyw1ODQsNTQ5LDcxMyw5NzksNzE5LDI3NCw1NDksNTQ5LDU4Myw1NDksNTQ5LDYwNCw1ODQsNjA0LDYwNCw3MDgsNjI1LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcwOCw3MDgsNzA4LDcyOSw2MDQsNjA0LDM1NCwzNTQsMWUzLDk5MCw5OTAsOTkwLDk5MCw0OTQsNjA0LDYwNCw2MDQsNjA0LDM1NCwxMDIxLDEwNTIsOTE3LDc1MCw3NTAsNTMxLDY1Niw1OTQsNTEwLDUwMCw3NTAsNzUwLDUwMCw1MDAsMzMzLDMzMywzMzMsMzMzLDMzMywzMzMsMzMzLDMzMywyMjIsMjIyLDI5NCwyOTQsMzI0LDMyNCwzMTYsMzI4LDM5OCwyODVdLFRhPVstMSwtMSwtMSwzMiwzMywzNCwzNSwzNiwzNywzOCwzOSw0MCw0MSw0Miw0Myw0NCw0NSw0Niw0Nyw0OCw0OSw1MCw1MSw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSw2Miw2Myw2NCw2NSw2Niw2Nyw2OCw2OSw3MCw3MSw3Miw3Myw3NCw3NSw3Niw3Nyw3OCw3OSw4MCw4MSw4Miw4Myw4NCw4NSw4Niw4Nyw4OCw4OSw5MCw5MSw5Miw5Myw5NCw5NSw5Niw5Nyw5OCw5OSwxMDAsMTAxLDEwMiwxMDMsMTA0LDEwNSwxMDYsMTA3LDEwOCwxMDksMTEwLDExMSwxMTIsMTEzLDExNCwxMTUsMTE2LDExNywxMTgsMTE5LDEyMCwxMjEsMTIyLDEyMywxMjQsMTI1LDEyNiwxNjEsMTYyLDE2MywxNjQsMTY1LDE2NiwxNjcsMTY4LDE2OSwxNzAsMTcxLDE3MiwxNzQsMTc1LDE3NiwxNzcsMTc4LDE3OSwxODAsMTgxLDE4MiwxODMsMTg0LDE4NSwxODYsMTg3LDE4OCwxODksMTkwLDE5MSwxOTIsMTkzLDE5NCwxOTUsMTk2LDE5NywxOTgsMTk5LDIwMCwyMDEsMjAyLDIwMywyMDQsMjA1LDIwNiwyMDcsMjA4LDIwOSwyMTAsMjExLDIxMiwyMTMsMjE0LDIxNSwyMTYsMjE3LDIxOCwyMTksMjIwLDIyMSwyMjIsMjIzLDIyNCwyMjUsMjI2LDIyNywyMjgsMjI5LDIzMCwyMzEsMjMyLDIzMywyMzQsMjM1LDIzNiwyMzcsMjM4LDIzOSwyNDAsMjQxLDI0MiwyNDMsMjQ0LDI0NSwyNDYsMjQ3LDI0OCwyNDksMjUwLDI1MSwyNTIsMjUzLDI1NCwyNTUsMjU2LDI1NywyNTgsMjU5LDI2MCwyNjEsMjYyLDI2MywyNjQsMjY1LDI2NiwyNjcsMjY4LDI2OSwyNzAsMjcxLDI3MiwyNzMsMjc0LDI3NSwyNzYsMjc3LDI3OCwyNzksMjgwLDI4MSwyODIsMjgzLDI4NCwyODUsMjg2LDI4NywyODgsMjg5LDI5MCwyOTEsMjkyLDI5MywyOTQsMjk1LDI5NiwyOTcsMjk4LDI5OSwzMDAsMzAxLDMwMiwzMDMsMzA0LDMwNSwzMDYsMzA3LDMwOCwzMDksMzEwLDMxMSwzMTIsMzEzLDMxNCwzMTUsMzE2LDMxNywzMTgsMzE5LDMyMCwzMjEsMzIyLDMyMywzMjQsMzI1LDMyNiwzMjcsMzI4LDMyOSwzMzAsMzMxLDMzMiwzMzMsMzM0LDMzNSwzMzYsMzM3LDMzOCwzMzksMzQwLDM0MSwzNDIsMzQzLDM0NCwzNDUsMzQ2LDM0NywzNDgsMzQ5LDM1MCwzNTEsMzUyLDM1MywzNTQsMzU1LDM1NiwzNTcsMzU4LDM1OSwzNjAsMzYxLDM2MiwzNjMsMzY0LDM2NSwzNjYsMzY3LDM2OCwzNjksMzcwLDM3MSwzNzIsMzczLDM3NCwzNzUsMzc2LDM3NywzNzgsMzc5LDM4MCwzODEsMzgyLDM4Myw0MDIsNTA2LDUwNyw1MDgsNTA5LDUxMCw1MTEsNTM2LDUzNyw1MzgsNTM5LDcxMCw3MTEsNzEzLDcyOCw3MjksNzMwLDczMSw3MzIsNzMzLDkwMCw5MDEsOTAyLDkwMyw5MDQsOTA1LDkwNiw5MDgsOTEwLDkxMSw5MTIsOTEzLDkxNCw5MTUsOTE2LDkxNyw5MTgsOTE5LDkyMCw5MjEsOTIyLDkyMyw5MjQsOTI1LDkyNiw5MjcsOTI4LDkyOSw5MzEsOTMyLDkzMyw5MzQsOTM1LDkzNiw5MzcsOTM4LDkzOSw5NDAsOTQxLDk0Miw5NDMsOTQ0LDk0NSw5NDYsOTQ3LDk0OCw5NDksOTUwLDk1MSw5NTIsOTUzLDk1NCw5NTUsOTU2LDk1Nyw5NTgsOTU5LDk2MCw5NjEsOTYyLDk2Myw5NjQsOTY1LDk2Niw5NjcsOTY4LDk2OSw5NzAsOTcxLDk3Miw5NzMsOTc0LDEwMjQsMTAyNSwxMDI2LDEwMjcsMTAyOCwxMDI5LDEwMzAsMTAzMSwxMDMyLDEwMzMsMTAzNCwxMDM1LDEwMzYsMTAzNywxMDM4LDEwMzksMTA0MCwxMDQxLDEwNDIsMTA0MywxMDQ0LDEwNDUsMTA0NiwxMDQ3LDEwNDgsMTA0OSwxMDUwLDEwNTEsMTA1MiwxMDUzLDEwNTQsMTA1NSwxMDU2LDEwNTcsMTA1OCwxMDU5LDEwNjAsMTA2MSwxMDYyLDEwNjMsMTA2NCwxMDY1LDEwNjYsMTA2NywxMDY4LDEwNjksMTA3MCwxMDcxLDEwNzIsMTA3MywxMDc0LDEwNzUsMTA3NiwxMDc3LDEwNzgsMTA3OSwxMDgwLDEwODEsMTA4MiwxMDgzLDEwODQsMTA4NSwxMDg2LDEwODcsMTA4OCwxMDg5LDEwOTAsMTA5MSwxMDkyLDEwOTMsMTA5NCwxMDk1LDEwOTYsMTA5NywxMDk4LDEwOTksMTEwMCwxMTAxLDExMDIsMTEwMywxMTA0LDExMDUsMTEwNiwxMTA3LDExMDgsMTEwOSwxMTEwLDExMTEsMTExMiwxMTEzLDExMTQsMTExNSwxMTE2LDExMTcsMTExOCwxMTE5LDExMzgsMTEzOSwxMTY4LDExNjksNzgwOCw3ODA5LDc4MTAsNzgxMSw3ODEyLDc4MTMsNzkyMiw3OTIzLDgyMDgsODIwOSw4MjExLDgyMTIsODIxMyw4MjE1LDgyMTYsODIxNyw4MjE4LDgyMTksODIyMCw4MjIxLDgyMjIsODIyNCw4MjI1LDgyMjYsODIzMCw4MjQwLDgyNDIsODI0Myw4MjQ5LDgyNTAsODI1Miw4MjU0LDgyNjAsODMxOSw4MzU1LDgzNTYsODM1OSw4MzY0LDg0NTMsODQ2Nyw4NDcwLDg0ODIsODQ4Niw4NDk0LDg1MzksODU0MCw4NTQxLDg1NDIsODU5Miw4NTkzLDg1OTQsODU5NSw4NTk2LDg1OTcsODYxNiw4NzA2LDg3MTAsODcxOSw4NzIxLDg3MjIsODczMCw4NzM0LDg3MzUsODc0NSw4NzQ3LDg3NzYsODgwMCw4ODAxLDg4MDQsODgwNSw4OTYyLDg5NzYsODk5Miw4OTkzLDk0NzIsOTQ3NCw5NDg0LDk0ODgsOTQ5Miw5NDk2LDk1MDAsOTUwOCw5NTE2LDk1MjQsOTUzMiw5NTUyLDk1NTMsOTU1NCw5NTU1LDk1NTYsOTU1Nyw5NTU4LDk1NTksOTU2MCw5NTYxLDk1NjIsOTU2Myw5NTY0LDk1NjUsOTU2Niw5NTY3LDk1NjgsOTU2OSw5NTcwLDk1NzEsOTU3Miw5NTczLDk1NzQsOTU3NSw5NTc2LDk1NzcsOTU3OCw5NTc5LDk1ODAsOTYwMCw5NjA0LDk2MDgsOTYxMiw5NjE2LDk2MTcsOTYxOCw5NjE5LDk2MzIsOTYzMyw5NjQyLDk2NDMsOTY0NCw5NjUwLDk2NTgsOTY2MCw5NjY4LDk2NzQsOTY3NSw5Njc5LDk2ODgsOTY4OSw5NzAyLDk3ODYsOTc4Nyw5Nzg4LDk3OTIsOTc5NCw5ODI0LDk4MjcsOTgyOSw5ODMwLDk4MzQsOTgzNSw5ODM2LDYxNDQxLDYxNDQyLDYxNDQ1LC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xLC0xXSxxYT1bMS4zNjg5OCwxLDEsLjcyNzA2LC44MDQ3OSwuODM3MzQsLjk4ODk0LC45OTc5MywuOTg5NywuOTM4ODQsLjg2MjA5LC45NDI5MiwuOTQyOTIsMS4xNjY2MSwxLjAyMDU4LC45MzU4MiwuOTY2OTQsLjkzNTgyLDEuMTkxMzcsLjk5NzkzLC45OTc5MywuOTk3OTMsLjk5NzkzLC45OTc5MywuOTk3OTMsLjk5NzkzLC45OTc5MywuOTk3OTMsLjk5NzkzLC43ODA3NiwuNzgwNzYsMS4wMjA1OCwxLjAyMDU4LDEuMDIwNTgsLjcyODUxLC43ODk2NiwuOTA4MzgsLjgzNjM3LC44MjM5MSwuOTYzNzYsLjgwMDYxLC44NjI3NSwuODc2OCwuOTU0MDcsMS4wMjU4LC43MzkwMSwuODUwMjIsLjgzNjU1LDEuMDE1NiwuOTU1NDYsLjkyMTc5LC44NzEwNywuOTIxNzksLjgyMTE0LC44MDk2LC44OTcxMywuOTQ0MzgsLjk1MzUzLC45NDA4MywuOTE5MDUsLjkwNDA2LC45NDQ2LC45NDI5MiwxLjE4Nzc3LC45NDI5MiwxLjAyMDU4LC44OTkwMywuOTAwODgsLjk0OTM4LC45Nzg5OCwuODEwOTMsLjk3NTcxLC45NDkzOCwxLjAyNCwuOTU3NywuOTU5MzMsLjk4NjIxLDEuMDQ3NCwuOTc0NTUsLjk4OTgxLC45NjcyLC45NTkzMywuOTQ0NiwuOTc4OTgsLjk3NDA3LC45NzY0NiwuNzgwMzYsMS4xMDIwOCwuOTU0NDIsLjk1Mjk4LC45NzU3OSwuOTMzMiwuOTQwMzksLjkzOCwuODA2ODcsMS4wMTE0OSwuODA2ODcsMS4wMjA1OCwuODA0NzksLjk5NzkzLC45OTc5MywuOTk3OTMsLjk5NzkzLDEuMDExNDksMS4wMDg3MiwuOTAwODgsLjkxODgyLDEuMDIxMywuODM2MSwxLjAyMDU4LC42MjI5NSwuNTQzMjQsLjg5MDIyLDEuMDg1OTUsMSwxLC45MDA4OCwxLC45NzQ1NSwuOTM1ODIsLjkwMDg4LDEsMS4wNTY4NiwuODM2MSwuOTk2NDIsLjk5NjQyLC45OTY0MiwuNzI4NTEsLjkwODM4LC45MDgzOCwuOTA4MzgsLjkwODM4LC45MDgzOCwuOTA4MzgsLjg2OCwuODIzOTEsLjgwMDYxLC44MDA2MSwuODAwNjEsLjgwMDYxLDEuMDI1OCwxLjAyNTgsMS4wMjU4LDEuMDI1OCwuOTc0ODQsLjk1NTQ2LC45MjE3OSwuOTIxNzksLjkyMTc5LC45MjE3OSwuOTIxNzksMS4wMjA1OCwuOTIxNzksLjk0NDM4LC45NDQzOCwuOTQ0MzgsLjk0NDM4LC45MDQwNiwuODY5NTgsLjk4MjI1LC45NDkzOCwuOTQ5MzgsLjk0OTM4LC45NDkzOCwuOTQ5MzgsLjk0OTM4LC45MDMxLC44MTA5MywuOTQ5MzgsLjk0OTM4LC45NDkzOCwuOTQ5MzgsLjk4NjIxLC45ODYyMSwuOTg2MjEsLjk4NjIxLC45Mzk2OSwuOTU5MzMsLjk0NDYsLjk0NDYsLjk0NDYsLjk0NDYsLjk0NDYsMS4wODU5NSwuOTQ0NiwuOTU0NDIsLjk1NDQyLC45NTQ0MiwuOTU0NDIsLjk0MDM5LC45Nzg5OCwuOTQwMzksLjkwODM4LC45NDkzOCwuOTA4MzgsLjk0OTM4LC45MDgzOCwuOTQ5MzgsLjgyMzkxLC44MTA5MywuODIzOTEsLjgxMDkzLC44MjM5MSwuODEwOTMsLjgyMzkxLC44MTA5MywuOTYzNzYsLjg0MzEzLC45NzQ4NCwuOTc1NzEsLjgwMDYxLC45NDkzOCwuODAwNjEsLjk0OTM4LC44MDA2MSwuOTQ5MzgsLjgwMDYxLC45NDkzOCwuODAwNjEsLjk0OTM4LC44NzY4LC45NTc3LC44NzY4LC45NTc3LC44NzY4LC45NTc3LDEsMSwuOTU0MDcsLjk1OTMzLC45NzA2OSwuOTU5MzMsMS4wMjU4LC45ODYyMSwxLjAyNTgsLjk4NjIxLDEuMDI1OCwuOTg2MjEsMS4wMjU4LC45ODYyMSwxLjAyNTgsLjk4NjIxLC44ODcsMS4wMTU5MSwuNzM5MDEsMS4wNDc0LDEsMSwuOTc0NTUsLjgzNjU1LC45ODk4MSwxLDEsLjgzNjU1LC43Mzk3NywuODM2NTUsLjczOTAzLC44NDYzOCwxLjAzMywuOTU1NDYsLjk1OTMzLDEsMSwuOTU1NDYsLjk1OTMzLC44MjcxLC45NTQxNywuOTU5MzMsLjkyMTc5LC45NDQ2LC45MjE3OSwuOTQ0NiwuOTIxNzksLjk0NDYsLjkzNiwuOTE5NjQsLjgyMTE0LC45NzY0NiwxLDEsLjgyMTE0LC45NzY0NiwuODA5NiwuNzgwMzYsLjgwOTYsLjc4MDM2LDEsMSwuODA5NiwuNzgwMzYsMSwxLC44OTcxMywuNzc0NTIsLjg5NzEzLDEuMTAyMDgsLjk0NDM4LC45NTQ0MiwuOTQ0MzgsLjk1NDQyLC45NDQzOCwuOTU0NDIsLjk0NDM4LC45NTQ0MiwuOTQ0MzgsLjk1NDQyLC45NDQzOCwuOTU0NDIsLjk0MDgzLC45NzU3OSwuOTA0MDYsLjk0MDM5LC45MDQwNiwuOTQ0NiwuOTM4LC45NDQ2LC45MzgsLjk0NDYsLjkzOCwxLC45OTc5MywuOTA4MzgsLjk0OTM4LC44NjgsLjkwMzEsLjkyMTc5LC45NDQ2LDEsMSwuODk3MTMsMS4xMDIwOCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTA5ODksLjkzNTgsLjkxOTQ1LC44MzE4MSwuNzUyNjEsLjg3OTkyLC44Mjk3NiwuOTYwMzQsLjgzNjg5LC45NzI2OCwxLjAwNzgsLjkwODM4LC44MzYzNywuODAxOSwuOTAxNTcsLjgwMDYxLC45NDQ2LC45NTQwNywuOTI0MzYsMS4wMjU4LC44NTAyMiwuOTcxNTMsMS4wMTU2LC45NTU0NiwuODkxOTIsLjkyMTc5LC45MjM2MSwuODcxMDcsLjk2MzE4LC44OTcxMywuOTM3MDQsLjk1NjM4LC45MTkwNSwuOTE3MDksLjkyNzk2LDEuMDI1OCwuOTM3MDQsLjk0ODM2LDEuMDM3MywuOTU5MzMsMS4wMDc4LC45NTg3MSwuOTQ4MzYsLjk2MTc0LC45MjYwMSwuOTQ5OCwuOTg2MDcsLjk1Nzc2LC45NTkzMywxLjA1NDUzLDEuMDA3OCwuOTgyNzUsLjkzMTQsLjk1NjE3LC45MTcwMSwxLjA1OTkzLC45NDQ2LC43ODM2NywuOTU1MywxLC44NjgzMiwxLjAxMjgsLjk1ODcxLC45OTM5NCwuODc1NDgsLjk2MzYxLC44Njc3NCwxLjAwNzgsLjk1ODcxLC45NDQ2LC45NTg3MSwuODY3NzQsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTQwODMsLjk3NTc5LC45NDA4MywuOTc1NzksLjk0MDgzLC45NzU3OSwuOTA0MDYsLjk0MDM5LC45NjY5NCwxLC44OTkwMywxLDEsMSwuOTM1ODIsLjkzNTgyLC45MzU4MiwxLC45MDgsLjkwOCwuOTE4LC45NDIxOSwuOTQyMTksLjk2NTQ0LDEsMS4yODUsMSwxLC44MTA3OSwuODEwNzksMSwxLC43NDg1NCwxLDEsMSwxLC45OTc5MywxLDEsMSwuNjUsMSwxLjM2MTQ1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjE3MTczLDEsLjgwNTM1LC43NjE2OSwxLjAyMDU4LDEuMDczMiwxLjA1NDg2LDEsMSwxLjMwNjkyLDEuMDg1OTUsMS4wODU5NSwxLDEuMDg1OTUsMS4wODU5NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMTYxNjEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV0sT2E9e2xpbmVIZWlnaHQ6MS4yLGxpbmVHYXA6LjJ9LFBhPVsxLjM2ODk4LDEsMSwuNjYyMjcsLjgwNzc5LC44MTYyNSwuOTcyNzYsLjk3Mjc2LC45NzczMywuOTIyMjIsLjgzMjY2LC45NDI5MiwuOTQyOTIsMS4xNjE0OCwxLjAyMDU4LC45MzU4MiwuOTY2OTQsLjkzNTgyLDEuMTczMzcsLjk3Mjc2LC45NzI3NiwuOTcyNzYsLjk3Mjc2LC45NzI3NiwuOTcyNzYsLjk3Mjc2LC45NzI3NiwuOTcyNzYsLjk3Mjc2LC43ODA3NiwuNzgwNzYsMS4wMjA1OCwxLjAyMDU4LDEuMDIwNTgsLjcxNTQxLC43NjgxMywuODU1NzYsLjgwNTkxLC44MDcyOSwuOTQyOTksLjc3NTEyLC44MzY1NSwuODY1MjMsLjkyMjIyLC45ODYyMSwuNzE3NDMsLjgxNjk4LC43OTcyNiwuOTg1NTgsLjkyMjIyLC45MDYzNywuODM4MDksLjkwNjM3LC44MDcyOSwuNzY0NjMsLjg2Mjc1LC45MDY5OSwuOTE2MDUsLjkxNTQsLjg1MzA4LC44NTQ1OCwuOTA1MzEsLjk0MjkyLDEuMjEyOTYsLjk0MjkyLDEuMDIwNTgsLjg5OTAzLDEuMTg2MTYsLjk5NjEzLC45MTY3NywuNzgyMTYsLjkxNjc3LC45MDA4MywuOTg3OTYsLjkxMzUsLjkyMTY4LC45NTM4MSwuOTg5ODEsLjk1Mjk4LC45NTM4MSwuOTM0NTksLjkyMTY4LC45MTUxMywuOTIwMDQsLjkxNjc3LC45NTA3NywuNzQ4LDEuMDQ1MDIsLjkxNjc3LC45MjA2MSwuOTQyMzYsLjg5NTQ0LC44OTM2NCwuOSwuODA2ODcsLjg1NzgsLjgwNjg3LDEuMDIwNTgsLjgwNzc5LC45NzI3NiwuOTcyNzYsLjk3Mjc2LC45NzI3NiwuODU3OCwuOTk5NzMsMS4xODYxNiwuOTEzMzksMS4wODA3NCwuODI4OTEsMS4wMjA1OCwuNTU1MDksLjcxNTI2LC44OTAyMiwxLjA4NTk1LDEsMSwxLjE4NjE2LDEsLjk2NzM2LC45MzU4MiwxLjE4NjE2LDEsMS4wNDg2NCwuODI3MTEsLjk5MDQzLC45OTA0MywuOTkwNDMsLjcxNTQxLC44NTU3NiwuODU1NzYsLjg1NTc2LC44NTU3NiwuODU1NzYsLjg1NTc2LC44NDUsLjgwNzI5LC43NzUxMiwuNzc1MTIsLjc3NTEyLC43NzUxMiwuOTg2MjEsLjk4NjIxLC45ODYyMSwuOTg2MjEsLjk1OTYxLC45MjIyMiwuOTA2MzcsLjkwNjM3LC45MDYzNywuOTA2MzcsLjkwNjM3LDEuMDIwNTgsLjkwMjUxLC45MDY5OSwuOTA2OTksLjkwNjk5LC45MDY5OSwuODU0NTgsLjgzNjU5LC45NDk1MSwuOTk2MTMsLjk5NjEzLC45OTYxMywuOTk2MTMsLjk5NjEzLC45OTYxMywuODU4MTEsLjc4MjE2LC45MDA4MywuOTAwODMsLjkwMDgzLC45MDA4MywuOTUzODEsLjk1MzgxLC45NTM4MSwuOTUzODEsLjkxMzUsLjkyMTY4LC45MTUxMywuOTE1MTMsLjkxNTEzLC45MTUxMywuOTE1MTMsMS4wODU5NSwuOTE2NzcsLjkxNjc3LC45MTY3NywuOTE2NzcsLjkxNjc3LC44OTM2NCwuOTIzMzIsLjg5MzY0LC44NTU3NiwuOTk2MTMsLjg1NTc2LC45OTYxMywuODU1NzYsLjk5NjEzLC44MDcyOSwuNzgyMTYsLjgwNzI5LC43ODIxNiwuODA3MjksLjc4MjE2LC44MDcyOSwuNzgyMTYsLjk0Mjk5LC43Njc4MywuOTU5NjEsLjkxNjc3LC43NzUxMiwuOTAwODMsLjc3NTEyLC45MDA4MywuNzc1MTIsLjkwMDgzLC43NzUxMiwuOTAwODMsLjc3NTEyLC45MDA4MywuODY1MjMsLjkxMzUsLjg2NTIzLC45MTM1LC44NjUyMywuOTEzNSwxLDEsLjkyMjIyLC45MjE2OCwuOTIyMjIsLjkyMTY4LC45ODYyMSwuOTUzODEsLjk4NjIxLC45NTM4MSwuOTg2MjEsLjk1MzgxLC45ODYyMSwuOTUzODEsLjk4NjIxLC45NTM4MSwuODYwMzYsLjk3MDk2LC43MTc0MywuOTg5ODEsMSwxLC45NTI5OCwuNzk3MjYsLjk1MzgxLDEsMSwuNzk3MjYsLjY4OTQsLjc5NzI2LC43NDMyMSwuODE2OTEsMS4wMDA2LC45MjIyMiwuOTIxNjgsMSwxLC45MjIyMiwuOTIxNjgsLjc5NDY0LC45MjA5OCwuOTIxNjgsLjkwNjM3LC45MTUxMywuOTA2MzcsLjkxNTEzLC45MDYzNywuOTE1MTMsLjkwOSwuODc1MTQsLjgwNzI5LC45NTA3NywxLDEsLjgwNzI5LC45NTA3NywuNzY0NjMsLjc0OCwuNzY0NjMsLjc0OCwxLDEsLjc2NDYzLC43NDgsMSwxLC44NjI3NSwuNzI2NTEsLjg2Mjc1LDEuMDQ1MDIsLjkwNjk5LC45MTY3NywuOTA2OTksLjkxNjc3LC45MDY5OSwuOTE2NzcsLjkwNjk5LC45MTY3NywuOTA2OTksLjkxNjc3LC45MDY5OSwuOTE2NzcsLjkxNTQsLjk0MjM2LC44NTQ1OCwuODkzNjQsLjg1NDU4LC45MDUzMSwuOSwuOTA1MzEsLjksLjkwNTMxLC45LDEsLjk3Mjc2LC44NTU3NiwuOTk2MTMsLjg0NSwuODU4MTEsLjkwMjUxLC45MTY3NywxLDEsLjg2Mjc1LDEuMDQ1MDIsMS4xODYxNiwxLjE4NjE2LDEuMTg2MTYsMS4xODYxNiwxLjE4NjE2LDEuMTg2MTYsMS4xODYxNiwxLjE4NjE2LDEuMTg2MTYsMS4wMDg5OSwxLjMwNjI4LC44NTU3NiwuODAxNzgsLjY2ODYyLC43OTI3LC42OTMyMywuODgxMjcsLjcyNDU5LC44OTcxMSwuOTUzODEsLjg1NTc2LC44MDU5MSwuNzgwNSwuOTQ3MjksLjc3NTEyLC45MDUzMSwuOTIyMjIsLjkwNjM3LC45ODYyMSwuODE2OTgsLjkyNjU1LC45ODU1OCwuOTIyMjIsLjg1MzU5LC45MDYzNywuOTA5NzYsLjgzODA5LC45NDUyMywuODYyNzUsLjgzNTA5LC45MzE1NywuODUzMDgsLjgzMzkyLC45MjM0NiwuOTg2MjEsLjgzNTA5LC45Mjg4NiwuOTEzMjQsLjkyMTY4LC45NTM4MSwuOTA2NDYsLjkyODg2LC45MDU1NywuODY4NDcsLjkwMjc2LC45MTMyNCwuODY4NDIsLjkyMTY4LC45OTUzMSwuOTUzODEsLjkyMjQsLjg1NDA4LC45MjY5OSwuODY4NDcsMS4wMDUxLC45MTUxMywuODA0ODcsLjkzNDgxLDEsLjg4MTU5LDEuMDUyMTQsLjkwNjQ2LC45NzM1NSwuODE1MzksLjg5Mzk4LC44NTkyMywuOTUzODEsLjkwNjQ2LC45MTUxMywuOTA2NDYsLjg1OTIzLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjkxNTQsLjk0MjM2LC45MTU0LC45NDIzNiwuOTE1NCwuOTQyMzYsLjg1NDU4LC44OTM2NCwuOTY2OTQsMSwuODk5MDMsMSwxLDEsLjkxNzgyLC45MTc4MiwuOTE3ODIsMSwuODk2LC44OTYsLjg5NiwuOTMzMiwuOTMzMiwuOTU5NzMsMSwxLjI2LDEsMSwuODA0NzksLjgwMTc4LDEsMSwuODU2MzMsMSwxLDEsMSwuOTcyNzYsMSwxLDEsLjY5OCwxLDEuMzYxNDUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMTQ1NDIsMSwuNzkxOTksLjc4Njk0LDEuMDIwNTgsMS4wMzQ5MywxLjA1NDg2LDEsMSwxLjIzMDI2LDEuMDg1OTUsMS4wODU5NSwxLDEuMDg1OTUsMS4wODU5NSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMjAwMDYsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV0sV2E9e2xpbmVIZWlnaHQ6MS4yLGxpbmVHYXA6LjJ9LGphPVsxLjM2ODk4LDEsMSwuNjU1MDcsLjg0OTQzLC44NTYzOSwuODg0NjUsLjg4NDY1LC44NjkzNiwuODgzMDcsLjg2OTQ4LC44NTI4MywuODUyODMsMS4wNjM4MywxLjAyMDU4LC43NTk0NSwuOTIxOSwuNzU5NDUsMS4xNzMzNywuODg0NjUsLjg4NDY1LC44ODQ2NSwuODg0NjUsLjg4NDY1LC44ODQ2NSwuODg0NjUsLjg4NDY1LC44ODQ2NSwuODg0NjUsLjc1OTQ1LC43NTk0NSwxLjAyMDU4LDEuMDIwNTgsMS4wMjA1OCwuNjkwNDYsLjcwOTI2LC44NTE1OCwuNzc4MTIsLjc2ODUyLC44OTU5MSwuNzA0NjYsLjc2MTI1LC44MDA5NCwuODY4MjIsLjgzODY0LC43MjgsLjc3MjEyLC43OTQ3NSwuOTM2MzcsLjg3NTE0LC44NTg4LC43NjAxMywuODU4OCwuNzI0MjEsLjY5ODY2LC43NzU5OCwuODU5OTEsLjgwODExLC44NzgzMiwuNzgxMTIsLjc3NTEyLC44NTYyLDEuMDIyMiwxLjE4NDE3LDEuMDIyMiwxLjI3MDE0LC44OTkwMywxLjE1MDEyLC45Mzg1OSwuOTQzOTksLjg0NiwuOTQzOTksLjgxNDUzLDEuMDE4NiwuOTQyMTksLjk2MDE3LDEuMDMwNzUsMS4wMjE3NSwuOTEyLDEuMDMwNzUsLjk2OTk4LC45NjAxNywuOTM4NTksLjk0Mzk5LC45NDM5OSwuOTU0OTMsLjc0NiwxLjEyNjU4LC45NDU3OCwuOTEsLjk3OSwuODgyLC44ODIsLjgzLC44NTAzNCwuODM1MzcsLjg1MDM0LDEuMDIwNTgsLjcwODY5LC44ODQ2NSwuODg0NjUsLjg4NDY1LC44ODQ2NSwuODM1MzcsLjkwMDgzLDEuMTUwMTIsLjkxNjEsLjk0NTY1LC43MzU0MSwxLjAyMDU4LC41MzYwOSwuNjkzNTMsLjc5NTE5LDEuMDg1OTUsMSwxLDEuMTUwMTIsMSwuOTE5NzQsLjc1OTQ1LDEuMTUwMTIsMSwuOTQ0NiwuNzMzNjEsLjkwMDUsLjkwMDUsLjkwMDUsLjYyODY0LC44NTE1OCwuODUxNTgsLjg1MTU4LC44NTE1OCwuODUxNTgsLjg1MTU4LC43NzMsLjc2ODUyLC43MDQ2NiwuNzA0NjYsLjcwNDY2LC43MDQ2NiwuODM4NjQsLjgzODY0LC44Mzg2NCwuODM4NjQsLjkwNTYxLC44NzUxNCwuODU4OCwuODU4OCwuODU4OCwuODU4OCwuODU4OCwxLjAyMDU4LC44NTc1MSwuODU5OTEsLjg1OTkxLC44NTk5MSwuODU5OTEsLjc3NTEyLC43NjAxMywuODgwNzUsLjkzODU5LC45Mzg1OSwuOTM4NTksLjkzODU5LC45Mzg1OSwuOTM4NTksLjgwNzUsLjg0NiwuODE0NTMsLjgxNDUzLC44MTQ1MywuODE0NTMsLjgyNDI0LC44MjQyNCwuODI0MjQsLjgyNDI0LC45Mjc4LC45NjAxNywuOTM4NTksLjkzODU5LC45Mzg1OSwuOTM4NTksLjkzODU5LDEuMDg1OTUsLjg1NjIsLjk0NTc4LC45NDU3OCwuOTQ1NzgsLjk0NTc4LC44ODIsLjk0NTc4LC44ODIsLjg1MTU4LC45Mzg1OSwuODUxNTgsLjkzODU5LC44NTE1OCwuOTM4NTksLjc2ODUyLC44NDYsLjc2ODUyLC44NDYsLjc2ODUyLC44NDYsLjc2ODUyLC44NDYsLjg5NTkxLC44NTQ0LC45MDU2MSwuOTQzOTksLjcwNDY2LC44MTQ1MywuNzA0NjYsLjgxNDUzLC43MDQ2NiwuODE0NTMsLjcwNDY2LC44MTQ1MywuNzA0NjYsLjgxNDUzLC44MDA5NCwuOTQyMTksLjgwMDk0LC45NDIxOSwuODAwOTQsLjk0MjE5LDEsMSwuODY4MjIsLjk2MDE3LC44NjgyMiwuOTYwMTcsLjgzODY0LC44MjQyNCwuODM4NjQsLjgyNDI0LC44Mzg2NCwuODI0MjQsLjgzODY0LDEuMDMwNzUsLjgzODY0LC44MjQyNCwuODE0MDIsMS4wMjczOCwuNzI4LDEuMDIxNzUsMSwxLC45MTIsLjc5NDc1LDEuMDMwNzUsMSwxLC43OTQ3NSwuODM5MTEsLjc5NDc1LC42NjI2NiwuODA1NTMsMS4wNjY3NiwuODc1MTQsLjk2MDE3LDEsMSwuODc1MTQsLjk2MDE3LC44Njg2NSwuODczOTYsLjk2MDE3LC44NTg4LC45Mzg1OSwuODU4OCwuOTM4NTksLjg1ODgsLjkzODU5LC44NjcsLjg0NzU5LC43MjQyMSwuOTU0OTMsMSwxLC43MjQyMSwuOTU0OTMsLjY5ODY2LC43NDYsLjY5ODY2LC43NDYsMSwxLC42OTg2NiwuNzQ2LDEsMSwuNzc1OTgsLjg4NDE3LC43NzU5OCwxLjEyNjU4LC44NTk5MSwuOTQ1NzgsLjg1OTkxLC45NDU3OCwuODU5OTEsLjk0NTc4LC44NTk5MSwuOTQ1NzgsLjg1OTkxLC45NDU3OCwuODU5OTEsLjk0NTc4LC44NzgzMiwuOTc5LC43NzUxMiwuODgyLC43NzUxMiwuODU2MiwuODMsLjg1NjIsLjgzLC44NTYyLC44MywxLC44ODQ2NSwuODUxNTgsLjkzODU5LC43NzMsLjgwNzUsLjg1NzUxLC44NTYyLDEsMSwuNzc1OTgsMS4xMjY1OCwxLjE1MDEyLDEuMTUwMTIsMS4xNTAxMiwxLjE1MDEyLDEuMTUwMTIsMS4xNTMxMywxLjE1MDEyLDEuMTUwMTIsMS4xNTAxMiwxLjA4MTA2LDEuMDM5MDEsLjg1MTU4LC43NzAyNSwuNjIyNjQsLjc2NDYsLjY1MzUxLC44NjAyNiwuNjk0NjEsLjg5OTQ3LDEuMDMwNzUsLjg1MTU4LC43NzgxMiwuNzY0NDksLjg4ODM2LC43MDQ2NiwuODU2MiwuODY4MjIsLjg1ODgsLjgzODY0LC43NzIxMiwuODUzMDgsLjkzNjM3LC44NzUxNCwuODIzNTIsLjg1ODgsLjg1NzAxLC43NjAxMywuODkwNTgsLjc3NTk4LC44MTU2LC44MjU2NSwuNzgxMTIsLjc3ODk5LC44OTM4NiwuODM4NjQsLjgxNTYsLjk0ODYsLjkyMzg4LC45NjE4NiwxLjAzMDc1LC45MTEyMywuOTQ4NiwuOTMyOTgsLjg3OCwuOTM5NDIsLjkyMzg4LC44NDU5NiwuOTYxODYsLjk1MTE5LDEuMDMwNzUsLjkyMiwuODg3ODcsLjk1ODI5LC44OCwuOTM1NTksLjkzODU5LC43ODgxNSwuOTM3NTgsMSwuODkyMTcsMS4wMzczNywuOTExMjMsLjkzOTY5LC43NzQ4NywuODU3NjksLjg2Nzk5LDEuMDMwNzUsLjkxMTIzLC45Mzg1OSwuOTExMjMsLjg2Nzk5LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjg3ODMyLC45NzksLjg3ODMyLC45NzksLjg3ODMyLC45NzksLjc3NTEyLC44ODIsLjkyMTksMSwuODk5MDMsMSwxLDEsLjg3MzIxLC44NzMyMSwuODczMjEsMSwxLjAyNywxLjAyNywxLjAyNywuODY4NDcsLjg2ODQ3LC43OTEyMSwxLDEuMTI0LDEsMSwuNzM1NzIsLjczNTcyLDEsMSwuODUwMzQsMSwxLDEsMSwuODg0NjUsMSwxLDEsLjY2OSwxLDEuMzYxNDUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDQ4MjgsMSwuNzQ5NDgsLjc1MTg3LDEuMDIwNTgsLjk4MzkxLDEuMDIxMTksMSwxLDEuMDYyMzMsMS4wODU5NSwxLjA4NTk1LDEsMS4wODU5NSwxLjA4NTk1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wNTIzMywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXSxYYT17bGluZUhlaWdodDoxLjIsbGluZUdhcDouMn0sVmE9WzEuMzY4OTgsMSwxLC43NjMwNSwuODI3ODQsLjk0OTM1LC44OTM2NCwuOTIyNDEsLjg5MDczLC45MDcwNiwuOTg0NzIsLjg1MjgzLC44NTI4MywxLjA2NjQsMS4wMjA1OCwuNzQ1MDUsLjkyMTksLjc0NTA1LDEuMjM0NTYsLjkyMjQxLC45MjI0MSwuOTIyNDEsLjkyMjQxLC45MjI0MSwuOTIyNDEsLjkyMjQxLC45MjI0MSwuOTIyNDEsLjkyMjQxLC43NDUwNSwuNzQ1MDUsMS4wMjA1OCwxLjAyMDU4LDEuMDIwNTgsLjczMDAyLC43MjYwMSwuOTE3NTUsLjgxMjYsLjgwMzE0LC45MjIyMiwuNzM3NjQsLjc5NzI2LC44MzA1MSwuOTAyODQsLjg2MDIzLC43NCwuODEyNiwuODQ4NjksLjk2NTE4LC45MTExNSwuODg1OCwuNzk3NjEsLjg4NTgsLjc0NDk4LC43MzkxNCwuODEzNjMsLjg5NTkxLC44MzY1OSwuODk2MzMsLjg1NjA4LC44MTExLC45MDUzMSwxLjAyMjIsMS4yMjczNiwxLjAyMjIsMS4yNzAxNCwuODk5MDMsLjkwMDg4LC44NjY2NywxLjAyMzEsLjg5NiwxLjAxNDExLC45MDA4MywxLjA1MDk5LDEuMDA1MTIsLjk5NzkzLDEuMDUzMjYsMS4wOTM3NywuOTM4LDEuMDYyMjYsMS4wMDExOSwuOTk3OTMsLjk4NzE0LDEuMDIzMSwxLjAxMjMxLC45ODE5NiwuNzkyLDEuMTkxMzcsLjk5MDc0LC45NjIsMS4wMTkxNSwuOTI2LC45NDIsLjg1NiwuODUwMzQsLjkyMDA2LC44NTAzNCwxLjAyMDU4LC42OTA2NywuOTIyNDEsLjkyMjQxLC45MjI0MSwuOTIyNDEsLjkyMDA2LC45MzMyLC45MDA4OCwuOTE4ODIsLjkzNDg0LC43NTMzOSwxLjAyMDU4LC41Njg2NiwuNTQzMjQsLjc5NTE5LDEuMDg1OTUsMSwxLC45MDA4OCwxLC45NTMyNSwuNzQ1MDUsLjkwMDg4LDEsLjk3MTk4LC43NTMzOSwuOTEwMDksLjkxMDA5LC45MTAwOSwuNjY0NjYsLjkxNzU1LC45MTc1NSwuOTE3NTUsLjkxNzU1LC45MTc1NSwuOTE3NTUsLjc4OCwuODAzMTQsLjczNzY0LC43Mzc2NCwuNzM3NjQsLjczNzY0LC44NjAyMywuODYwMjMsLjg2MDIzLC44NjAyMywuOTI5MTUsLjkxMTE1LC44ODU4LC44ODU4LC44ODU4LC44ODU4LC44ODU4LDEuMDIwNTgsLjg4NTgsLjg5NTkxLC44OTU5MSwuODk1OTEsLjg5NTkxLC44MTExLC43OTYxMSwuODk3MTMsLjg2NjY3LC44NjY2NywuODY2NjcsLjg2NjY3LC44NjY2NywuODY2NjcsLjg2OTM2LC44OTYsLjkwMDgzLC45MDA4MywuOTAwODMsLjkwMDgzLC44NDIyNCwuODQyMjQsLjg0MjI0LC44NDIyNCwuOTcyNzYsLjk5NzkzLC45ODcxNCwuOTg3MTQsLjk4NzE0LC45ODcxNCwuOTg3MTQsMS4wODU5NSwuODk4NzYsLjk5MDc0LC45OTA3NCwuOTkwNzQsLjk5MDc0LC45NDIsMS4wMjMxLC45NDIsLjkxNzU1LC44NjY2NywuOTE3NTUsLjg2NjY3LC45MTc1NSwuODY2NjcsLjgwMzE0LC44OTYsLjgwMzE0LC44OTYsLjgwMzE0LC44OTYsLjgwMzE0LC44OTYsLjkyMjIyLC45MzM3MiwuOTI5MTUsMS4wMTQxMSwuNzM3NjQsLjkwMDgzLC43Mzc2NCwuOTAwODMsLjczNzY0LC45MDA4MywuNzM3NjQsLjkwMDgzLC43Mzc2NCwuOTAwODMsLjgzMDUxLDEuMDA1MTIsLjgzMDUxLDEuMDA1MTIsLjgzMDUxLDEuMDA1MTIsMSwxLC45MDI4NCwuOTk3OTMsLjkwOTc2LC45OTc5MywuODYwMjMsLjg0MjI0LC44NjAyMywuODQyMjQsLjg2MDIzLC44NDIyNCwuODYwMjMsMS4wNTMyNiwuODYwMjMsLjg0MjI0LC44Mjg3MywxLjA3NDY5LC43NCwxLjA5Mzc3LDEsMSwuOTM4LC44NDg2OSwxLjA2MjI2LDEsMSwuODQ4NjksLjgzNzA0LC44NDg2OSwuODE0NDEsLjg1NTg4LDEuMDg5MjcsLjkxMTE1LC45OTc5MywxLDEsLjkxMTE1LC45OTc5MywuOTE4ODcsLjkwOTkxLC45OTc5MywuODg1OCwuOTg3MTQsLjg4NTgsLjk4NzE0LC44ODU4LC45ODcxNCwuODk0LC45MTQzNCwuNzQ0OTgsLjk4MTk2LDEsMSwuNzQ0OTgsLjk4MTk2LC43MzkxNCwuNzkyLC43MzkxNCwuNzkyLDEsMSwuNzM5MTQsLjc5MiwxLDEsLjgxMzYzLC45MDQsLjgxMzYzLDEuMTkxMzcsLjg5NTkxLC45OTA3NCwuODk1OTEsLjk5MDc0LC44OTU5MSwuOTkwNzQsLjg5NTkxLC45OTA3NCwuODk1OTEsLjk5MDc0LC44OTU5MSwuOTkwNzQsLjg5NjMzLDEuMDE5MTUsLjgxMTEsLjk0MiwuODExMSwuOTA1MzEsLjg1NiwuOTA1MzEsLjg1NiwuOTA1MzEsLjg1NiwxLC45MjI0MSwuOTE3NTUsLjg2NjY3LC43ODgsLjg2OTM2LC44ODU4LC44OTg3NiwxLDEsLjgxMzYzLDEuMTkxMzcsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMDg4LC45MDA4OCwuOTAwODgsLjkwMzg4LDEuMDM5MDEsLjkyMTM4LC43ODEwNSwuNzE1NCwuODYxNjksLjgwNTEzLC45NDAwNywuODI1MjgsLjk4NjEyLDEuMDYyMjYsLjkxNzU1LC44MTI2LC44MTg4NCwuOTI4MTksLjczNzY0LC45MDUzMSwuOTAyODQsLjg4NTgsLjg2MDIzLC44MTI2LC45MTE3MiwuOTY1MTgsLjkxMTE1LC44MzA4OSwuODg1OCwuODc3OTEsLjc5NzYxLC44OTI5NywuODEzNjMsLjg4MTU3LC44OTk5MiwuODU2MDgsLjgxOTkyLC45NDMwNywuODYwMjMsLjg4MTU3LC45NTMwOCwuOTg2OTksLjk5NzkzLDEuMDYyMjYsLjk1ODE3LC45NTMwOCwuOTczNTgsLjkyOCwuOTgwODgsLjk4Njk5LC45Mjc2MSwuOTk3OTMsLjk2MDE3LDEuMDYyMjYsLjk4NiwuOTQ0LC45NTk3OCwuOTM4LC45NjcwNSwuOTg3MTQsLjgwNDQyLC45ODk3MiwxLC44OTc2MiwxLjA0NTUyLC45NTgxNywuOTkwMDcsLjg3MDY0LC45MTg3OSwuODg4ODgsMS4wNjIyNiwuOTU4MTcsLjk4NzE0LC45NTgxNywuODg4ODgsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuODk2MzMsMS4wMTkxNSwuODk2MzMsMS4wMTkxNSwuODk2MzMsMS4wMTkxNSwuODExMSwuOTQyLC45MjE5LDEsLjg5OTAzLDEsMSwxLC45MzE3MywuOTMxNzMsLjkzMTczLDEsMS4wNjMwNCwxLjA2MzA0LDEuMDY5MDQsLjg5OTAzLC44OTkwMywuODA1NDksMSwxLjE1NiwxLDEsLjc2NTc1LC43NjU3NSwxLDEsLjcyNDU4LDEsMSwxLDEsLjkyMjQxLDEsMSwxLC42MTksMSwxLjM2MTQ1LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjA3MjU3LDEsLjc0NzA1LC43MTExOSwxLjAyMDU4LDEuMDI0LDEuMDIxMTksMSwxLDEuMTUzNiwxLjA4NTk1LDEuMDg1OTUsMSwxLjA4NTk1LDEuMDg1OTUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjA1NjM4LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLFphPXtsaW5lSGVpZ2h0OjEuMixsaW5lR2FwOi4yfSxfYT1bMS43NjczOCwxLDEsLjk5Mjk3LC45ODI0LDEuMDQwMTYsMS4wNjQ5NywxLjAzNDI0LC45NzUyOSwxLjE3NjQ3LDEuMjMyMDMsMS4xMDg1LDEuMTA4NSwxLjE2OTM5LDEuMjEwNywuOTc1NCwxLjIxNDA4LC45NzU0LDEuNTk1NzgsMS4wMzQyNCwxLjAzNDI0LDEuMDM0MjQsMS4wMzQyNCwxLjAzNDI0LDEuMDM0MjQsMS4wMzQyNCwxLjAzNDI0LDEuMDM0MjQsMS4wMzQyNCwuODEzNzgsLjgxMzc4LDEuMjEwNywxLjIxMDcsMS4yMTA3LC43MTcwMywuOTc4NDcsLjk3MzYzLC44ODc3NiwuODY0MSwxLjAyMDk2LC43OTc5NSwuODUxMzIsLjkxNCwxLjA2MDg1LDEuMTQwNiwuODAwNywuODk4NTgsLjgzNjkzLDEuMTQ4ODksMS4wOTM5OCwuOTc0ODksLjkyMDk0LC45NzQ4OSwuOTAzOTksLjg0MDQxLC45NTkyMywxLjAwMTM1LDEsMS4wNjQ2NywuOTgyNDMsLjkwOTk2LC45OTM2MSwxLjEwODUsMS41Njk0MiwxLjEwODUsMS4yMTA3LC43NDYyNywuOTQyODIsLjk2NzUyLDEuMDE1MTksLjg2MzA0LDEuMDEzNTksLjk3Mjc4LDEuMTUxMDMsMS4wMTM1OSwuOTg1NjEsMS4wMjI4NSwxLjAyMjg1LDEuMDA1MjcsMS4wMjI4NSwxLjAzMDIsLjk5MDQxLDEuMDAwOCwxLjAxNTE5LDEuMDEzNTksMS4wMjI1OCwuNzkxMDQsMS4xNjg2MiwuOTkwNDEsLjk3NDU0LDEuMDI1MTEsLjk5Mjk4LC45Njc1MiwuOTU4MDEsLjk0ODU2LDEuMTY1NzksLjk0ODU2LDEuMjEwNywuOTgyNCwxLjAzNDI0LDEuMDM0MjQsMSwxLjAzNDI0LDEuMTY1NzksLjg3MjcsMS4zODcxLDEuMTg2MjIsMS4xMDgxOCwxLjA0NDc4LDEuMjEwNywxLjE4NjIyLC43NTE1NSwuOTQ5OTQsMS4yODgyNiwxLjIxNDA4LDEuMjE0MDgsLjkxMDU2LDEsLjkxNTcyLC45NzU0LC42NDY2MywxLjE4MzI4LDEuMjQ4NjYsMS4wNDQ3OCwxLjE0MTY5LDEuMTU3NDksMS4xNzM4OSwuNzE3MDMsLjk3MzYzLC45NzM2MywuOTczNjMsLjk3MzYzLC45NzM2MywuOTczNjMsLjkzNTA2LC44NjQxLC43OTc5NSwuNzk3OTUsLjc5Nzk1LC43OTc5NSwxLjE0MDYsMS4xNDA2LDEuMTQwNiwxLjE0MDYsMS4wMjA5NiwxLjA5Mzk4LC45NzQyNiwuOTc0MjYsLjk3NDI2LC45NzQyNiwuOTc0MjYsMS4yMTA3LC45NzQ4OSwxLjAwMTM1LDEuMDAxMzUsMS4wMDEzNSwxLjAwMTM1LC45MDk5NiwuOTIwOTQsMS4wMjc5OCwuOTY3NTIsLjk2NzUyLC45Njc1MiwuOTY3NTIsLjk2NzUyLC45Njc1MiwuOTMxMzYsLjg2MzA0LC45NzI3OCwuOTcyNzgsLjk3Mjc4LC45NzI3OCwxLjAyMjg1LDEuMDIyODUsMS4wMjI4NSwxLjAyMjg1LC45NzEyMiwuOTkwNDEsMSwxLDEsMSwxLDEuMjg4MjYsMS4wMDA4LC45OTA0MSwuOTkwNDEsLjk5MDQxLC45OTA0MSwuOTY3NTIsMS4wMTUxOSwuOTY3NTIsLjk3MzYzLC45Njc1MiwuOTczNjMsLjk2NzUyLC45NzM2MywuOTY3NTIsLjg2NDEsLjg2MzA0LC44NjQxLC44NjMwNCwuODY0MSwuODYzMDQsLjg2NDEsLjg2MzA0LDEuMDIwOTYsMS4wMzA1NywxLjAyMDk2LDEuMDM1MTcsLjc5Nzk1LC45NzI3OCwuNzk3OTUsLjk3Mjc4LC43OTc5NSwuOTcyNzgsLjc5Nzk1LC45NzI3OCwuNzk3OTUsLjk3Mjc4LC45MTQsMS4wMTM1OSwuOTE0LDEuMDEzNTksLjkxNCwxLjAxMzU5LDEsMSwxLjA2MDg1LC45ODU2MSwxLjA2MDg1LDEuMDA4NzksMS4xNDA2LDEuMDIyODUsMS4xNDA2LDEuMDIyODUsMS4xNDA2LDEuMDIyODUsMS4xNDA2LDEuMDIyODUsMS4xNDA2LDEuMDIyODUsLjk3MTM4LDEuMDg2OTIsLjgwMDcsMS4wMjI4NSwxLDEsMS4wMDUyNywuODM2OTMsMS4wMjI4NSwxLDEsLjgzNjkzLC45NDU1LC44MzY5MywuOTA0MTgsLjgzNjkzLDEuMTMwMDUsMS4wOTM5OCwuOTkwNDEsMSwxLDEuMDkzOTgsLjk5MDQxLC45NjY5MiwxLjA5MjUxLC45OTA0MSwuOTc0ODksMS4wMDA4LC45NzQ4OSwxLjAwMDgsLjk3NDg5LDEuMDAwOCwuOTM5OTQsLjk3OTMxLC45MDM5OSwxLjAyMjU4LDEsMSwuOTAzOTksMS4wMjI1OCwuODQwNDEsLjc5MTA0LC44NDA0MSwuNzkxMDQsLjg0MDQxLC43OTEwNCwuODQwNDEsLjc5MTA0LDEsMSwuOTU5MjMsMS4wNzAzNCwuOTU5MjMsMS4xNjg2MiwxLjAwMTM1LC45OTA0MSwxLjAwMTM1LC45OTA0MSwxLjAwMTM1LC45OTA0MSwxLjAwMTM1LC45OTA0MSwxLjAwMTM1LC45OTA0MSwxLjAwMTM1LC45OTA0MSwxLjA2NDY3LDEuMDI1MTEsLjkwOTk2LC45Njc1MiwuOTA5OTYsLjk5MzYxLC45NTgwMSwuOTkzNjEsLjk1ODAxLC45OTM2MSwuOTU4MDEsMS4wNzczMywxLjAzNDI0LC45NzM2MywuOTY3NTIsLjkzNTA2LC45MzEzNiwuOTc0ODksMS4wMDA4LDEsMSwuOTU5MjMsMS4xNjg2MiwxLjE1MTAzLDEuMTUxMDMsMS4wMTE3MywxLjAzOTU5LC43NTk1MywuODEzNzgsLjc5OTEyLDEuMTUxMDMsMS4yMTk5NCwuOTUxNjEsLjg3ODE1LDEuMDExNDksLjgxNTI1LC43Njc2LC45ODE2NywxLjAxMTM0LDEuMDI1NDYsLjg0MDk3LDEuMDMwODksMS4xODEwMiwuOTczNjMsLjg4Nzc2LC44NTEzNCwuOTc4MjYsLjc5Nzk1LC45OTM2MSwxLjA2MDg1LC45NzQ4OSwxLjE0MDYsLjg5ODU4LDEuMDM4OCwxLjE0ODg5LDEuMDkzOTgsLjg2MDM5LC45NzQ4OSwxLjA1OTUsLjkyMDk0LC45NDc5MywuOTU5MjMsLjkwOTk2LC45OTM0NiwuOTgyNDMsMS4wMjExMiwuOTU0OTMsMS4xNDA2LC45MDk5NiwxLjAzNTc0LDEuMDI1OTcsMS4wMDA4LDEuMTgxMDIsMS4wNjYyOCwxLjAzNTc0LDEuMDE5MiwxLjAxOTMyLDEuMDA4ODYsLjk3NTMxLDEuMDEwNiwxLjAwMDgsMS4xMzE4OSwxLjE4MTAyLDEuMDIyNzcsLjk4NjgzLDEuMDAxNiwuOTk1NjEsMS4wNzIzNywxLjAwMDgsLjkwNDM0LC45OTkyMSwuOTM4MDMsLjg5NjUsMS4yMzA4NSwxLjA2NjI4LDEuMDQ5ODMsLjk2MjY4LDEuMDQ5OSwuOTg0MzksMS4xODEwMiwxLjA2NjI4LDEuMDAwOCwxLjA2NjI4LC45ODQzOSwuNzk3OTUsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wOTQ2NiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTcyNzgsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS4wMjA2NSwxLDEsMSwxLDEsMSwxLjA2NDY3LDEuMDI1MTEsMS4wNjQ2NywxLjAyNTExLDEuMDY0NjcsMS4wMjUxMSwuOTA5OTYsLjk2NzUyLDEsMS4yMTQwOCwuODk5MDMsMSwxLC43NTE1NSwxLjA0Mzk0LDEuMDQzOTQsMS4wNDM5NCwxLjA0Mzk0LC45ODYzMywuOTg2MzMsLjk4NjMzLC43MzA0NywuNzMwNDcsMS4yMDY0MiwuOTEyMTEsMS4yNTYzNSwxLjIyMiwxLjAyOTU2LDEuMDMzNzIsMS4wMzM3MiwuOTYwMzksMS4yNDYzMywxLDEuMTI0NTQsLjkzNTAzLDEuMDM0MjQsMS4xOTY4NywxLjAzNDI0LDEsMSwxLC43NzEsMSwxLDEuMTU3NDksMS4xNTc0OSwxLjE1NzQ5LDEuMTA5NDgsLjg2Mjc5LC45NDQzNCwuODYyNzksLjk0NDM0LC44NjE4MiwxLDEsMS4xNjg5NywxLC45NjA4NSwuOTAxMzcsMS4yMTA3LDEuMTg0MTYsMS4xMzk3MywuNjk4MjUsLjk3MTYsMi4xMDMzOSwxLjI5MDA0LDEuMjkwMDQsMS4yMTE3MiwxLjI5MDA0LDEuMjkwMDQsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjQyNjAzLDEsLjk5ODYyLC45OTg2MiwxLC44NzAyNSwuODcwMjUsLjg3MDI1LC44NzAyNSwxLjE4ODc0LDEuNDI2MDMsMSwxLjQyNjAzLDEuNDI2MDMsLjk5ODYyLDEsMSwxLDEsMSwxLjI4ODYsMS4wNDMxNSwxLjE1Mjk2LDEuMzQxNjMsMSwxLDEsMS4wOTE5MywxLjA5MTkzLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxXSx6YT17bGluZUhlaWdodDoxLjMzMDA4LGxpbmVHYXA6MH0sJGE9WzEuNzY3MzgsMSwxLC45ODk0NiwxLjAzOTU5LDEuMDQwMTYsMS4wMjgwOSwxLjAzNiwuOTc2MzksMS4xMDk1MywxLjIzMjAzLDEuMTExNDQsMS4xMTE0NCwxLjE2OTM5LDEuMjEyMzcsLjk3NTQsMS4yMTI2MSwuOTc1NCwxLjU5NzU0LDEuMDM2LDEuMDM2LDEuMDM2LDEuMDM2LDEuMDM2LDEuMDM2LDEuMDM2LDEuMDM2LDEuMDM2LDEuMDM2LC44MTM3OCwuODEzNzgsMS4yMTIzNywxLjIxMjM3LDEuMjEyMzcsLjczNTQxLC45Nzg0NywuOTczNjMsLjg5NzIzLC44Nzg5NywxLjA0MjYsLjc5NDI5LC44NTI5MiwuOTExNDksMS4wNTgxNSwxLjE0MDYsLjc5NjMxLC45MDEyOCwuODM4NTMsMS4wNDM5NiwxLjEwNjE1LC45NzU1MiwuOTQ0MzYsLjk3NTUyLC44ODY0MSwuODA1MjcsLjk2MDgzLDEuMDAxMzUsMSwxLjA2Nzc3LC45ODE3LC45MTE0MiwuOTkzNjEsMS4xMTE0NCwxLjU3MjkzLDEuMTExNDQsMS4yMTIzNywuNzQ2MjcsMS4zMTgxOCwxLjA2NTg1LC45NzA0MiwuODMwNTUsLjk3MDQyLC45MzUwMywxLjEyNjEsLjk3MDQyLC45NzkyMiwxLjE0MjM2LC45NDU1MiwxLjAxMDU0LDEuMTQyMzYsMS4wMjQ3MSwuOTc5MjIsLjk0MTY1LC45NzA0MiwuOTcwNDIsMS4wMjc2LC43ODkyOSwxLjEyNjEsLjk3OTIyLC45NTg3NCwxLjAyMTk3LC45ODUwNywuOTY3NTIsLjk3MTY4LC45NTEwNywxLjE2NTc5LC45NTEwNywxLjIxMjM3LDEuMDM5NTksMS4wMzYsMS4wMzYsMSwxLjAzNiwxLjE2NTc5LC44NzM1NywxLjMxODE4LDEuMTg3NTQsMS4yNjc4MSwxLjA1MzU2LDEuMjEyMzcsMS4xODYyMiwuNzk0ODcsLjk0OTk0LDEuMjkwMDQsMS4yNDA0NywxLjI0MDQ3LDEuMzE4MTgsMSwuOTE0ODQsLjk3NTQsMS4zMTgxOCwxLjEzNDksMS4yNDg2NiwxLjA1MzU2LDEuMTM5MzQsMS4xNTU3NCwxLjE3Mzg5LC43MzU0MSwuOTczNjMsLjk3MzYzLC45NzM2MywuOTczNjMsLjk3MzYzLC45NzM2MywuOTQzODUsLjg3ODk3LC43OTQyOSwuNzk0MjksLjc5NDI5LC43OTQyOSwxLjE0MDYsMS4xNDA2LDEuMTQwNiwxLjE0MDYsMS4wNDI2LDEuMTA2MTUsLjk3NTUyLC45NzU1MiwuOTc1NTIsLjk3NTUyLC45NzU1MiwxLjIxMjM3LC45NzU1MiwxLjAwMTM1LDEuMDAxMzUsMS4wMDEzNSwxLjAwMTM1LC45MTE0MiwuOTQ0MzYsLjk4NzIxLDEuMDY1ODUsMS4wNjU4NSwxLjA2NTg1LDEuMDY1ODUsMS4wNjU4NSwxLjA2NTg1LC45NjcwNSwuODMwNTUsLjkzNTAzLC45MzUwMywuOTM1MDMsLjkzNTAzLDEuMTQyMzYsMS4xNDIzNiwxLjE0MjM2LDEuMTQyMzYsLjkzMTI1LC45NzkyMiwuOTQxNjUsLjk0MTY1LC45NDE2NSwuOTQxNjUsLjk0MTY1LDEuMjkwMDQsLjk0MTY1LC45NzkyMiwuOTc5MjIsLjk3OTIyLC45NzkyMiwuOTY3NTIsLjk3MDQyLC45Njc1MiwuOTczNjMsMS4wNjU4NSwuOTczNjMsMS4wNjU4NSwuOTczNjMsMS4wNjU4NSwuODc4OTcsLjgzMDU1LC44Nzg5NywuODMwNTUsLjg3ODk3LC44MzA1NSwuODc4OTcsLjgzMDU1LDEuMDQyNiwxLjAwMzMsMS4wNDI2LC45NzA0MiwuNzk0MjksLjkzNTAzLC43OTQyOSwuOTM1MDMsLjc5NDI5LC45MzUwMywuNzk0MjksLjkzNTAzLC43OTQyOSwuOTM1MDMsLjkxMTQ5LC45NzA0MiwuOTExNDksLjk3MDQyLC45MTE0OSwuOTcwNDIsMSwxLDEuMDU4MTUsLjk3OTIyLDEuMDU4MTUsLjk3OTIyLDEuMTQwNiwxLjE0MjM2LDEuMTQwNiwxLjE0MjM2LDEuMTQwNiwxLjE0MjM2LDEuMTQwNiwxLjE0MjM2LDEuMTQwNiwxLjE0MjM2LC45NzQ0MSwxLjA0MzAyLC43OTYzMSwxLjAxNTgyLDEsMSwxLjAxMDU0LC44Mzg1MywxLjE0MjM2LDEsMSwuODM4NTMsMS4wOTEyNSwuODM4NTMsLjkwNDE4LC44Mzg1MywxLjE5NTA4LDEuMTA2MTUsLjk3OTIyLDEsMSwxLjEwNjE1LC45NzkyMiwxLjAxMDM0LDEuMTA0NjYsLjk3OTIyLC45NzU1MiwuOTQxNjUsLjk3NTUyLC45NDE2NSwuOTc1NTIsLjk0MTY1LC45MTYwMiwuOTE5ODEsLjg4NjQxLDEuMDI3NiwxLDEsLjg4NjQxLDEuMDI3NiwuODA1MjcsLjc4OTI5LC44MDUyNywuNzg5MjksLjgwNTI3LC43ODkyOSwuODA1MjcsLjc4OTI5LDEsMSwuOTYwODMsMS4wNTQwMywuOTU5MjMsMS4xNjg2MiwxLjAwMTM1LC45NzkyMiwxLjAwMTM1LC45NzkyMiwxLjAwMTM1LC45NzkyMiwxLjAwMTM1LC45NzkyMiwxLjAwMTM1LC45NzkyMiwxLjAwMTM1LC45NzkyMiwxLjA2Nzc3LDEuMDIxOTcsLjkxMTQyLC45Njc1MiwuOTExNDIsLjk5MzYxLC45NzE2OCwuOTkzNjEsLjk3MTY4LC45OTM2MSwuOTcxNjgsMS4yMzE5OSwxLjAzNiwuOTczNjMsMS4wNjU4NSwuOTQzODUsLjk2NzA1LC45NzU1MiwuOTQxNjUsMSwxLC45NjA4MywxLjEyNjEsMS4zMTgxOCwxLjMxODE4LDEuMzE4MTgsMS4zMTgxOCwxLjMxODE4LDEuMzE4MTgsMS4zMTgxOCwxLjMxODE4LDEuMzE4MTgsLjk1MTYxLDEuMjcxMjYsMS4wMDgxMSwuODMyODQsLjc3NzAyLC45OTEzNywuOTUyNTMsMS4wMzQ3LC44NjE0MiwxLjA3MjA1LDEuMTQyMzYsLjk3MzYzLC44OTcyMywuODY4NjksMS4wOTgxOCwuNzk0MjksLjk5MzYxLDEuMDU4MTUsLjk3NTUyLDEuMTQwNiwuOTAxMjgsMS4wNjY2MiwxLjA0Mzk2LDEuMTA2MTUsLjg0OTE4LC45NzU1MiwxLjA0Njk0LC45NDQzNiwuOTgwMTUsLjk2MDgzLC45MTE0MiwxLjAwMzU2LC45ODE3LDEuMDE5NDUsLjk4OTk5LDEuMTQwNiwuOTExNDIsMS4wNDk2MSwuOTg5OCwxLjAwNjM5LDEuMTQyMzYsMS4wNzUxNCwxLjA0OTYxLC45OTYwNywxLjAyODk3LDEuMDA4LC45ODk4LC45NTEzNCwxLjAwNjM5LDEuMTExMjEsMS4xNDIzNiwxLjAwNTE4LC45Nzk4MSwxLjAyMTg2LDEsMS4wODU3OCwuOTQxNjUsLjk5MzE0LC45ODM4NywuOTMwMjgsLjkzMzc3LDEuMzUxMjUsMS4wNzUxNCwxLjEwNjg3LC45MzQ5MSwxLjA0MjMyLDEuMDAzNTEsMS4xNDIzNiwxLjA3NTE0LC45NDE2NSwxLjA3NTE0LDEuMDAzNTEsLjc5NDI5LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDkwOTcsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsLjkzNTAzLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45NjYwOSwxLDEsMSwxLDEsMSwxLjA2Nzc3LDEuMDIxOTcsMS4wNjc3NywxLjAyMTk3LDEuMDY3NzcsMS4wMjE5NywuOTExNDIsLjk2NzUyLDEsMS4yMTI2MSwuODk5MDMsMSwxLC43NTE1NSwxLjA0NzQ1LDEuMDQ3NDUsMS4wNDc0NSwxLjA0Mzk0LC45ODYzMywuOTg2MzMsLjk4NjMzLC43Mjk1OSwuNzI5NTksMS4yMDUwMiwuOTE0MDYsMS4yNjUxNCwxLjIyMiwxLjAyOTU2LDEuMDMzNzIsMS4wMzM3MiwuOTYwMzksMS4yNDYzMywxLDEuMDkxMjUsLjkzMzI3LDEuMDMzMzYsMS4xNjU0MSwxLjAzNiwxLDEsMSwuNzcxLDEsMSwxLjE1NTc0LDEuMTU1NzQsMS4xNTU3NCwxLjE1NTc0LC44NjM2NCwuOTQ0MzQsLjg2Mjc5LC45NDQzNCwuODYyMjQsMSwxLDEuMTY3OTgsMSwuOTYwODUsLjkwMDY4LDEuMjEyMzcsMS4xODQxNiwxLjEzOTA0LC42OTgyNSwuOTcxNiwyLjEwMzM5LDEuMjkwMDQsMS4yOTAwNCwxLjIxMzM5LDEuMjkwMDQsMS4yOTAwNCwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuNDI2MDMsMSwuOTk4NjIsLjk5ODYyLDEsLjg3MDI1LC44NzAyNSwuODcwMjUsLjg3MDI1LDEuMTg3NzUsMS40MjYwMywxLDEuNDI2MDMsMS40MjYwMywuOTk4NjIsMSwxLDEsMSwxLDEuMjg4NiwxLjA0MzE1LDEuMTUyOTYsMS4zNDE2MywxLDEsMSwxLjEzMjY5LDEuMTMyNjksMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLEFyPXtsaW5lSGVpZ2h0OjEuMzMwMDgsbGluZUdhcDowfSxlcj1bMS43NjczOCwxLDEsLjk4OTQ2LDEuMTQ3NjMsMS4wNTM2NSwxLjA2MjM0LC45NjkyNywuOTI1ODYsMS4xNTM3MywxLjE4NDE0LC45MTM0OSwuOTEzNDksMS4wNzQwMywxLjE3MzA4LC43ODM4MywxLjIwMDg4LC43ODM4MywxLjQyNTMxLC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuNzgzODMsLjc4MzgzLDEuMTczMDgsMS4xNzMwOCwxLjE3MzA4LC43NzM0OSwuOTQ1NjUsLjk0NzI5LC44NTk0NCwuODg1MDYsLjk4NTgsLjc0ODE3LC44MDAxNiwuODg0NDksLjk4MDM5LC45NTc4MiwuNjkyMzgsLjg5ODk4LC44MzIzMSwuOTgxODMsMS4wMzk4OSwuOTY5MjQsLjg2MjM3LC45NjkyNCwuODA1OTUsLjc0NTI0LC44NjA5MSwuOTU0MDIsLjk0MTQzLC45ODQ0OCwuODg1OCwuODMwODksLjkzMjg1LDEuMDk0OSwxLjM5MDE2LDEuMDk0OSwxLjQ1OTk0LC43NDYyNywxLjA0ODM5LC45NzQ1NCwuOTc0NTQsLjg3MjA3LC45NzQ1NCwuODc1MzMsMS4wNjE1MSwuOTc0NTQsMS4wMDE3NiwxLjE2NDg0LDEuMDgxMzIsLjk4MDQ3LDEuMTY0ODQsMS4wMjk4OSwxLjAxMDU0LC45NjIyNSwuOTc0NTQsLjk3NDU0LDEuMDY1OTgsLjc5MDA0LDEuMTYzNDQsMS4wMDM1MSwuOTQ2MjksLjk5NzMsLjkxMDE2LC45Njc3NywuOTA0MywuOTEwODIsLjkyNDgxLC45MTA4MiwxLjE3MzA4LC45NTc0OCwuOTY5MjcsLjk2OTI3LDEsLjk2OTI3LC45MjQ4MSwuODA1OTcsMS4wNDgzOSwxLjIzMzkzLDEuMTc4MSwuOTI0NSwxLjE3MzA4LDEuMjA4MDgsLjYzMjE4LC45NDI2MSwxLjI0ODIyLDEuMDk5NzEsMS4wOTk3MSwxLjA0ODM5LDEsLjg1MjczLC43ODAzMiwxLjA0ODM5LDEuMDk5NzEsMS4yMjMyNiwuOTI0NSwxLjA5ODM2LDEuMTM1MjUsMS4xNTIyMiwuNzA0MjQsLjk0NzI5LC45NDcyOSwuOTQ3MjksLjk0NzI5LC45NDcyOSwuOTQ3MjksLjg1NDk4LC44ODUwNiwuNzQ4MTcsLjc0ODE3LC43NDgxNywuNzQ4MTcsLjk1NzgyLC45NTc4MiwuOTU3ODIsLjk1NzgyLC45ODU4LDEuMDM5ODksLjk2OTI0LC45NjkyNCwuOTY5MjQsLjk2OTI0LC45NjkyNCwxLjE3MzA4LC45NjkyNCwuOTU0MDIsLjk1NDAyLC45NTQwMiwuOTU0MDIsLjgzMDg5LC44NjIzNywuODg0MDksLjk3NDU0LC45NzQ1NCwuOTc0NTQsLjk3NDU0LC45NzQ1NCwuOTc0NTQsLjkyOTE2LC44NzIwNywuODc1MzMsLjg3NTMzLC44NzUzMywuODc1MzMsLjkzMTQ2LC45MzE0NiwuOTMxNDYsLjkzMTQ2LC45Mzg1NCwxLjAxMDU0LC45NjIyNSwuOTYyMjUsLjk2MjI1LC45NjIyNSwuOTYyMjUsMS4yNDgyMiwuODc2MSwxLjAwMzUxLDEuMDAzNTEsMS4wMDM1MSwxLjAwMzUxLC45Njc3NywuOTc0NTQsLjk2Nzc3LC45NDcyOSwuOTc0NTQsLjk0NzI5LC45NzQ1NCwuOTQ3MjksLjk3NDU0LC44ODUwNiwuODcyMDcsLjg4NTA2LC44NzIwNywuODg1MDYsLjg3MjA3LC44ODUwNiwuODcyMDcsLjk4NTgsLjk1MzkxLC45ODU4LC45NzQ1NCwuNzQ4MTcsLjg3NTMzLC43NDgxNywuODc1MzMsLjc0ODE3LC44NzUzMywuNzQ4MTcsLjg3NTMzLC43NDgxNywuODc1MzMsLjg4NDQ5LC45NzQ1NCwuODg0NDksLjk3NDU0LC44ODQ0OSwuOTc0NTQsMSwxLC45ODAzOSwxLjAwMTc2LC45ODAzOSwxLjAwMTc2LC45NTc4MiwuOTMxNDYsLjk1NzgyLC45MzE0NiwuOTU3ODIsLjkzMTQ2LC45NTc4MiwxLjE2NDg0LC45NTc4MiwuOTMxNDYsLjg0NDIxLDEuMTI3NjEsLjY5MjM4LDEuMDgxMzIsMSwxLC45ODA0NywuODMyMzEsMS4xNjQ4NCwxLDEsLjg0NzIzLDEuMDQ4NjEsLjg0NzIzLC43ODc1NSwuODMyMzEsMS4yMzczNiwxLjAzOTg5LDEuMDEwNTQsMSwxLDEuMDM5ODksMS4wMTA1NCwuOTg1NywxLjAzODQ5LDEuMDEwNTQsLjk2OTI0LC45NjIyNSwuOTY5MjQsLjk2MjI1LC45NjkyNCwuOTYyMjUsLjkyMzgzLC45MDE3MSwuODA1OTUsMS4wNjU5OCwxLDEsLjgwNTk1LDEuMDY1OTgsLjc0NTI0LC43OTAwNCwuNzQ1MjQsLjc5MDA0LC43NDUyNCwuNzkwMDQsLjc0NTI0LC43OTAwNCwxLDEsLjg2MDkxLDEuMDI3NTksLjg1NzcxLDEuMTYzNDQsLjk1NDAyLDEuMDAzNTEsLjk1NDAyLDEuMDAzNTEsLjk1NDAyLDEuMDAzNTEsLjk1NDAyLDEuMDAzNTEsLjk1NDAyLDEuMDAzNTEsLjk1NDAyLDEuMDAzNTEsLjk4NDQ4LC45OTczLC44MzA4OSwuOTY3NzcsLjgzMDg5LC45MzI4NSwuOTA0MywuOTMyODUsLjkwNDMsLjkzMjg1LC45MDQzLDEuMzE4NjgsLjk2OTI3LC45NDcyOSwuOTc0NTQsLjg1NDk4LC45MjkxNiwuOTY5MjQsLjg3NjEsMSwxLC44NjA5MSwxLjE2MzQ0LDEuMDQ4MzksMS4wNDgzOSwxLjA0ODM5LDEuMDQ4MzksMS4wNDgzOSwxLjA0ODM5LDEuMDQ4MzksMS4wNDgzOSwxLjA0ODM5LC44MTk2NSwuODE5NjUsLjk0NzI5LC43ODAzMiwuNzEwMjIsLjkwODgzLC44NDE3MSwuOTk4NzcsLjc3NTk2LDEuMDU3MzQsMS4yLC45NDcyOSwuODU5NDQsLjgyNzkxLC45NjA3LC43NDgxNywuOTMyODUsLjk4MDM5LC45NjkyNCwuOTU3ODIsLjg5ODk4LC45ODMxNiwuOTgxODMsMS4wMzk4OSwuNzg2MTQsLjk2OTI0LC45NzY0MiwuODYyMzcsLjg2MDc1LC44NjA5MSwuODMwODksLjkwMDgyLC44ODU4LC45NzI5NiwxLjAxMjg0LC45NTc4MiwuODMwODksMS4wOTc2LDEuMDQsMS4wMzM0MiwxLjIsMS4wNjc1LDEuMDk3NiwuOTgyMDUsMS4wMzgwOSwxLjA1MDk3LDEuMDQsLjk1MzY0LDEuMDMzNDIsMS4wNTQwMSwxLjIsMS4wMjE0OCwxLjAxMTksMS4wNDcyNCwxLjAxMjcsMS4wMjczMiwuOTYyMjUsLjg5NjUsLjk3NzgzLC45MzU3NCwuOTQ4MTgsMS4zMDY3OSwxLjA2NzUsMS4xMTgyNiwuOTk4MjEsMS4wNTU3LDEuMDMyNiwxLjIsMS4wNjc1LC45NjIyNSwxLjA2NzUsMS4wMzI2LC43NDgxNywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjAzNzU0LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC44NzUzMywxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwuOTg3MDUsMSwxLDEsMSwxLDEsLjk4NDQ4LC45OTczLC45ODQ0OCwuOTk3MywuOTg0NDgsLjk5NzMsLjgzMDg5LC45Njc3NywxLDEuMjAwODgsLjg5OTAzLDEsMSwuNzUxNTUsLjk0OTQ1LC45NDk0NSwuOTQ5NDUsLjk0OTQ1LDEuMTIzMTcsMS4xMjMxNywxLjEyMzE3LC42NzYwMywuNjc2MDMsMS4xNTYyMSwuNzM1ODQsMS4yMTE5MSwxLjIyMTM1LDEuMDY0ODMsLjk0ODY4LC45NDg2OCwuOTU5OTYsMS4yNDYzMywxLDEuMDc0OTcsLjg3NzA5LC45NjkyNywxLjAxNDczLC45NjkyNywxLDEsMSwuNzcyOTUsMSwxLDEuMDk4MzYsMS4wOTgzNiwxLjA5ODM2LDEuMDE1MjIsLjg2MzIxLC45NDQzNCwuODY0OSwuOTQ0MzQsLjg2MTgyLDEsMSwxLjA4MywxLC45MTU3OCwuODY0MzgsMS4xNzMwOCwxLjE4NDE2LDEuMTQ1ODksLjY5ODI1LC45NzYyMiwxLjk2NzkxLDEuMjQ4MjIsMS4yNDgyMiwxLjE3MzA4LDEuMjQ4MjIsMS4yNDgyMiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuNDI2MDMsMSwuOTk4NjIsLjk5ODYyLDEsLjg3MDI1LC44NzAyNSwuODcwMjUsLjg3MDI1LDEuMTc5ODQsMS40MjYwMywxLDEuNDI2MDMsMS40MjYwMywuOTk4NjIsMSwxLDEsMSwxLDEuMjg4NiwxLjA0MzE1LDEuMTUyOTYsMS4zNDE2MywxLDEsMSwxLjEwNzQyLDEuMTA3NDIsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDFdLHRyPXtsaW5lSGVpZ2h0OjEuMzMwMDgsbGluZUdhcDowfSxpcj1bMS43NjczOCwxLDEsLjk4NTk0LDEuMDIyODUsMS4xMDQ1NCwxLjA2MjM0LC45NjkyNywuOTIwMzcsMS4xOTk4NSwxLjIwNDYsLjkwNjE2LC45MDYxNiwxLjA3MTUyLDEuMTcxNCwuNzgwMzIsMS4yMDA4OCwuNzgwMzIsMS40MDI0NiwuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjk2OTI3LC45NjkyNywuOTY5MjcsLjc4MDMyLC43ODAzMiwxLjE3MTQsMS4xNzE0LDEuMTcxNCwuODA1OTcsLjk0MDg0LC45NjcwNiwuODU5NDQsLjg1NzM0LC45NzA5MywuNzU4NDIsLjc5OTM2LC44ODE5OCwuOTgzMSwuOTU3ODIsLjcxMzg3LC44Njk2OSwuODQ2MzYsMS4wNzc5NiwxLjAzNTg0LC45NjkyNCwuODM5NjgsLjk2OTI0LC44MjgyNiwuNzk2NDksLjg1NzcxLC45NTEzMiwuOTMxMTksLjk4OTY1LC44ODQzMywuODI4NywuOTMzNjUsMS4wODYxMiwxLjM2MzgsMS4wODYxMiwxLjQ1Nzg2LC43NDYyNywuODA0OTksLjkxNDg0LDEuMDU3MDcsLjkyMzgzLDEuMDU4ODIsLjk0MDMsMS4xMjY1NCwxLjA1ODgyLDEuMDE3NTYsMS4wOTAxMSwxLjA5MDExLC45OTQxNCwxLjA5MDExLDEuMDM0LDEuMDE3NTYsMS4wNTM1NiwxLjA1NzA3LDEuMDU4ODIsMS4wNDM5OSwuODQ4NjMsMS4yMTk2OCwxLjAxNzU2LC45NTgwMSwxLjAwMDY4LC45MTc5NywuOTY3NzcsLjkwNDMsLjkwMzUxLC45MjEwNSwuOTAzNTEsMS4xNzE0LC44NTMzNywuOTY5MjcsLjk2OTI3LC45OTkxMiwuOTY5MjcsLjkyMTA1LC44MDU5NywxLjI0MzQsMS4yMDgwOCwxLjA1OTM3LC45MDk1NywxLjE3MTQsMS4yMDgwOCwuNzUxNTUsLjk0MjYxLDEuMjQ2NDQsMS4wOTk3MSwxLjA5OTcxLC44NDc1MSwxLC44NTI3MywuNzgwMzIsLjYxNTg0LDEuMDU0MjUsMS4xNzkxNCwuOTA5NTcsMS4wODY2NSwxLjExNTkzLDEuMTQxNjksLjczMzgxLC45NjcwNiwuOTY3MDYsLjk2NzA2LC45NjcwNiwuOTY3MDYsLjk2NzA2LC44NjAzNSwuODU3MzQsLjc1ODQyLC43NTg0MiwuNzU4NDIsLjc1ODQyLC45NTc4MiwuOTU3ODIsLjk1NzgyLC45NTc4MiwuOTcwOTMsMS4wMzU4NCwuOTY5MjQsLjk2OTI0LC45NjkyNCwuOTY5MjQsLjk2OTI0LDEuMTcxNCwuOTY5MjQsLjk1MTMyLC45NTEzMiwuOTUxMzIsLjk1MTMyLC44Mjg3LC44Mzk2OCwuODkwNDksLjkxNDg0LC45MTQ4NCwuOTE0ODQsLjkxNDg0LC45MTQ4NCwuOTE0ODQsLjkzNTc1LC45MjM4MywuOTQwMywuOTQwMywuOTQwMywuOTQwMywuODcxNywuODcxNywuODcxNywuODcxNywxLjAwNTI3LDEuMDE3NTYsMS4wNTM1NiwxLjA1MzU2LDEuMDUzNTYsMS4wNTM1NiwxLjA1MzU2LDEuMjQ2NDQsLjk1OTIzLDEuMDE3NTYsMS4wMTc1NiwxLjAxNzU2LDEuMDE3NTYsLjk2Nzc3LDEuMDU3MDcsLjk2Nzc3LC45NjcwNiwuOTE0ODQsLjk2NzA2LC45MTQ4NCwuOTY3MDYsLjkxNDg0LC44NTczNCwuOTIzODMsLjg1NzM0LC45MjM4MywuODU3MzQsLjkyMzgzLC44NTczNCwuOTIzODMsLjk3MDkzLDEuMDk2OSwuOTcwOTMsMS4wNTg4MiwuNzU4NDIsLjk0MDMsLjc1ODQyLC45NDAzLC43NTg0MiwuOTQwMywuNzU4NDIsLjk0MDMsLjc1ODQyLC45NDAzLC44ODE5OCwxLjA1ODgyLC44ODE5OCwxLjA1ODgyLC44ODE5OCwxLjA1ODgyLDEsMSwuOTgzMSwxLjAxNzU2LC45ODMxLDEuMDE3NTYsLjk1NzgyLC44NzE3LC45NTc4MiwuODcxNywuOTU3ODIsLjg3MTcsLjk1NzgyLDEuMDkwMTEsLjk1NzgyLC44NzE3LC44NDc4NCwxLjExNTUxLC43MTM4NywxLjA5MDExLDEsMSwuOTk0MTQsLjg0NjM2LDEuMDkwMTEsMSwxLC44NDYzNiwxLjA1MzYsLjg0NjM2LC45NDI5OCwuODQ2MzYsMS4yMzI5NywxLjAzNTg0LDEuMDE3NTYsMSwxLDEuMDM1ODQsMS4wMTc1NiwxLjAwMzIzLDEuMDM0NDQsMS4wMTc1NiwuOTY5MjQsMS4wNTM1NiwuOTY5MjQsMS4wNTM1NiwuOTY5MjQsMS4wNTM1NiwuOTMwNjYsLjk4MjkzLC44MjgyNiwxLjA0Mzk5LDEsMSwuODI4MjYsMS4wNDM5OSwuNzk2NDksLjg0ODYzLC43OTY0OSwuODQ4NjMsLjc5NjQ5LC44NDg2MywuNzk2NDksLjg0ODYzLDEsMSwuODU3NzEsMS4xNzMxOCwuODU3NzEsMS4yMTk2OCwuOTUxMzIsMS4wMTc1NiwuOTUxMzIsMS4wMTc1NiwuOTUxMzIsMS4wMTc1NiwuOTUxMzIsMS4wMTc1NiwuOTUxMzIsMS4wMTc1NiwuOTUxMzIsMS4wMTc1NiwuOTg5NjUsMS4wMDA2OCwuODI4NywuOTY3NzcsLjgyODcsLjkzMzY1LC45MDQzLC45MzM2NSwuOTA0MywuOTMzNjUsLjkwNDMsMS4wODU3MSwuOTY5MjcsLjk2NzA2LC45MTQ4NCwuODYwMzUsLjkzNTc1LC45NjkyNCwuOTU5MjMsMSwxLC44NTc3MSwxLjIxOTY4LDEuMTE0MzcsMS4xMTQzNywuOTMxMDksLjkxMjAyLC42MDQxMSwuODQxNjQsLjU1NTcyLDEuMDExNzMsLjk3MzYxLC44MTgxOCwuODE4MTgsLjk2NjM1LC43ODAzMiwuNzI3MjcsLjkyMzY2LC45ODYwMSwxLjAzNDA1LC43Nzk2OCwxLjA5Nzk5LDEuMiwuOTY3MDYsLjg1OTQ0LC44NTYzOCwuOTY0OTEsLjc1ODQyLC45MzM2NSwuOTgzMSwuOTY5MjQsLjk1NzgyLC44Njk2OSwuOTQxNTIsMS4wNzc5NiwxLjAzNTg0LC43ODQzNywuOTY5MjQsLjk4NzE1LC44Mzk2OCwuODM0OTEsLjg1NzcxLC44Mjg3LC45NDQ5MiwuODg0MzMsLjkyODcsMS4wMDk4LC45NTc4MiwuODI4NywxLjA2MjUsLjk4MjQ4LDEuMDM0MjQsMS4yLDEuMDEwNzEsMS4wNjI1LC45NTI0NiwxLjAzODA5LDEuMDQ5MTIsLjk4MjQ4LDEuMDAyMjEsMS4wMzQyNCwxLjA1NDQzLDEuMiwxLjA0Nzg1LC45OTYwOSwxLjAwMTY5LDEuMDUxNzYsLjk5MzQ2LDEuMDUzNTYsLjkwODcsMS4wMzAwNCwuOTU1NDIsLjkzMTE3LDEuMjMzNjIsMS4wMTA3MSwxLjA3ODMxLDEuMDI1MTIsMS4wNTIwNSwxLjAzNTAyLDEuMiwxLjAxMDcxLDEuMDUzNTYsMS4wMTA3MSwxLjAzNTAyLC43NTg0MiwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLjAzNzE5LDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLC45NDAzLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEuMDQwMjEsMSwxLDEsMSwxLDEsLjk4OTY1LDEuMDAwNjgsLjk4OTY1LDEuMDAwNjgsLjk4OTY1LDEuMDAwNjgsLjgyODcsLjk2Nzc3LDEsMS4yMDA4OCwuODk5MDMsMSwxLC43NTE1NSwxLjAzMDc3LDEuMDMwNzcsMS4wMzA3NywxLjAzMDc3LDEuMTMxOTYsMS4xMzE5NiwxLjEzMTk2LC42NzQyOCwuNjc0MjgsMS4xNjAzOSwuNzMyOTEsMS4yMDk5NiwxLjIyMTM1LDEuMDY0ODMsLjk0ODY4LC45NDg2OCwuOTU5OTYsMS4yNDYzMywxLDEuMDc0OTcsLjg3Nzk2LC45NjkyNywxLjAxNTE4LC45NjkyNywxLDEsMSwuNzcyOTUsMSwxLDEuMTA1MzksMS4xMDUzOSwxLjExMzU4LDEuMDY5NjcsLjg2Mjc5LC45NDQzNCwuODYyNzksLjk0NDM0LC44NjE4MiwxLDEsMS4wODMsMSwuOTE1NzgsLjg2NTA3LDEuMTcxNCwxLjE4NDE2LDEuMTQ1ODksLjY5ODI1LC45NzYyMiwxLjk2OTcsMS4yNDgyMiwxLjI0ODIyLDEuMTcyMzgsMS4yNDgyMiwxLjI0ODIyLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMS40MjYwMywxLC45OTg2MiwuOTk4NjIsMSwuODcwMjUsLjg3MDI1LC44NzAyNSwuODcwMjUsMS4xODA4MywxLjQyNjAzLDEsMS40MjYwMywxLjQyNjAzLC45OTg2MiwxLDEsMSwxLDEsMS4yODg2LDEuMDQzMTUsMS4xNTI5NiwxLjM0MTYzLDEsMSwxLDEuMTA5MzgsMS4xMDkzOCwxLDEsMSwxLjA1NDI1LDEuMDk5NzEsMS4wOTk3MSwxLjA5OTcxLDEsMSwxLDEsMSwxLDEsMSwxLDEsMV0sYXI9e2xpbmVIZWlnaHQ6MS4zMzAwOCxsaW5lR2FwOjB9LHJyPWdldExvb2t1cFRhYmxlRmFjdG9yeSgoZnVuY3Rpb24oZSl7ZVsiTXlyaWFkUHJvLVJlZ3VsYXIiXT1lWyJQZGZKUy1GYWxsYmFjay1SZWd1bGFyIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLVJlZ3VsYXIiLGZhY3RvcnM6VmEsYmFzZVdpZHRoczpLYSxiYXNlTWFwcGluZzpUYSxtZXRyaWNzOlphfTtlWyJNeXJpYWRQcm8tQm9sZCJdPWVbIlBkZkpTLUZhbGxiYWNrLUJvbGQiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZCIsZmFjdG9yczpxYSxiYXNlV2lkdGhzOnhhLGJhc2VNYXBwaW5nOkxhLG1ldHJpY3M6T2F9O2VbIk15cmlhZFByby1JdCJdPWVbIk15cmlhZFByby1JdGFsaWMiXT1lWyJQZGZKUy1GYWxsYmFjay1JdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtSXRhbGljIixmYWN0b3JzOmphLGJhc2VXaWR0aHM6dmEsYmFzZU1hcHBpbmc6WWEsbWV0cmljczpYYX07ZVsiTXlyaWFkUHJvLUJvbGRJdCJdPWVbIk15cmlhZFByby1Cb2xkSXRhbGljIl09ZVsiUGRmSlMtRmFsbGJhY2stQm9sZEl0YWxpYyJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkSXRhbGljIixmYWN0b3JzOlBhLGJhc2VXaWR0aHM6SGEsYmFzZU1hcHBpbmc6SmEsbWV0cmljczpXYX07ZS5BcmlhbE1UPWUuQXJpYWw9ZVsiQXJpYWwtUmVndWxhciJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyIixiYXNlV2lkdGhzOkthLGJhc2VNYXBwaW5nOlRhfTtlWyJBcmlhbC1Cb2xkTVQiXT1lWyJBcmlhbC1Cb2xkIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUJvbGQiLGJhc2VXaWR0aHM6eGEsYmFzZU1hcHBpbmc6TGF9O2VbIkFyaWFsLUl0YWxpY01UIl09ZVsiQXJpYWwtSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUl0YWxpYyIsYmFzZVdpZHRoczp2YSxiYXNlTWFwcGluZzpZYX07ZVsiQXJpYWwtQm9sZEl0YWxpY01UIl09ZVsiQXJpYWwtQm9sZEl0YWxpYyJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkSXRhbGljIixiYXNlV2lkdGhzOkhhLGJhc2VNYXBwaW5nOkphfTtlWyJDYWxpYnJpLVJlZ3VsYXIiXT17bmFtZToiTGliZXJhdGlvblNhbnMtUmVndWxhciIsZmFjdG9yczpiYSxiYXNlV2lkdGhzOkthLGJhc2VNYXBwaW5nOlRhLG1ldHJpY3M6RGF9O2VbIkNhbGlicmktQm9sZCJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkIixmYWN0b3JzOmRhLGJhc2VXaWR0aHM6eGEsYmFzZU1hcHBpbmc6TGEsbWV0cmljczpmYX07ZVsiQ2FsaWJyaS1JdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtSXRhbGljIixmYWN0b3JzOnlhLGJhc2VXaWR0aHM6dmEsYmFzZU1hcHBpbmc6WWEsbWV0cmljczp3YX07ZVsiQ2FsaWJyaS1Cb2xkSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUJvbGRJdGFsaWMiLGZhY3RvcnM6cGEsYmFzZVdpZHRoczpIYSxiYXNlTWFwcGluZzpKYSxtZXRyaWNzOm1hfTtlWyJTZWdvZXVpLVJlZ3VsYXIiXT17bmFtZToiTGliZXJhdGlvblNhbnMtUmVndWxhciIsZmFjdG9yczppcixiYXNlV2lkdGhzOkthLGJhc2VNYXBwaW5nOlRhLG1ldHJpY3M6YXJ9O2VbIlNlZ29ldWktQm9sZCJdPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1Cb2xkIixmYWN0b3JzOl9hLGJhc2VXaWR0aHM6eGEsYmFzZU1hcHBpbmc6TGEsbWV0cmljczp6YX07ZVsiU2Vnb2V1aS1JdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtSXRhbGljIixmYWN0b3JzOmVyLGJhc2VXaWR0aHM6dmEsYmFzZU1hcHBpbmc6WWEsbWV0cmljczp0cn07ZVsiU2Vnb2V1aS1Cb2xkSXRhbGljIl09e25hbWU6IkxpYmVyYXRpb25TYW5zLUJvbGRJdGFsaWMiLGZhY3RvcnM6JGEsYmFzZVdpZHRoczpIYSxiYXNlTWFwcGluZzpKYSxtZXRyaWNzOkFyfTtlWyJIZWx2ZXRpY2EtUmVndWxhciJdPWUuSGVsdmV0aWNhPXtuYW1lOiJMaWJlcmF0aW9uU2Fucy1SZWd1bGFyIixmYWN0b3JzOk1hLGJhc2VXaWR0aHM6S2EsYmFzZU1hcHBpbmc6VGEsbWV0cmljczpVYX07ZVsiSGVsdmV0aWNhLUJvbGQiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZCIsZmFjdG9yczpGYSxiYXNlV2lkdGhzOnhhLGJhc2VNYXBwaW5nOkxhLG1ldHJpY3M6U2F9O2VbIkhlbHZldGljYS1JdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtSXRhbGljIixmYWN0b3JzOk5hLGJhc2VXaWR0aHM6dmEsYmFzZU1hcHBpbmc6WWEsbWV0cmljczpHYX07ZVsiSGVsdmV0aWNhLUJvbGRJdGFsaWMiXT17bmFtZToiTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYyIsZmFjdG9yczprYSxiYXNlV2lkdGhzOkhhLGJhc2VNYXBwaW5nOkphLG1ldHJpY3M6UmF9fSkpO2Z1bmN0aW9uIGdldFhmYUZvbnROYW1lKGUpe2NvbnN0IHQ9bm9ybWFsaXplRm9udE5hbWUoZSk7cmV0dXJuIHJyKClbdF19ZnVuY3Rpb24gZ2V0WGZhRm9udERpY3QoZSl7Y29uc3QgdD1mdW5jdGlvbiBnZXRYZmFGb250V2lkdGhzKGUpe2NvbnN0IHQ9Z2V0WGZhRm9udE5hbWUoZSk7aWYoIXQpcmV0dXJuIG51bGw7Y29uc3R7YmFzZVdpZHRoczppLGJhc2VNYXBwaW5nOmEsZmFjdG9yczpyfT10LHM9cj9pLm1hcCgoKGUsdCk9PmUqclt0XSkpOmk7bGV0IG4sbz0tMjtjb25zdCBnPVtdO2Zvcihjb25zdFtlLHRdb2YgYS5tYXAoKChlLHQpPT5bZSx0XSkpLnNvcnQoKChbZV0sW3RdKT0+ZS10KSkpaWYoLTEhPT1lKWlmKGU9PT1vKzEpe24ucHVzaChzW3RdKTtvKz0xfWVsc2V7bz1lO249W3NbdF1dO2cucHVzaChlLG4pfXJldHVybiBnfShlKSxpPW5ldyBEaWN0KG51bGwpO2kuc2V0KCJCYXNlRm9udCIsTmFtZS5nZXQoZSkpO2kuc2V0KCJUeXBlIixOYW1lLmdldCgiRm9udCIpKTtpLnNldCgiU3VidHlwZSIsTmFtZS5nZXQoIkNJREZvbnRUeXBlMiIpKTtpLnNldCgiRW5jb2RpbmciLE5hbWUuZ2V0KCJJZGVudGl0eS1IIikpO2kuc2V0KCJDSURUb0dJRE1hcCIsTmFtZS5nZXQoIklkZW50aXR5IikpO2kuc2V0KCJXIix0KTtpLnNldCgiRmlyc3RDaGFyIix0WzBdKTtpLnNldCgiTGFzdENoYXIiLHQuYXQoLTIpK3QuYXQoLTEpLmxlbmd0aC0xKTtjb25zdCBhPW5ldyBEaWN0KG51bGwpO2kuc2V0KCJGb250RGVzY3JpcHRvciIsYSk7Y29uc3Qgcj1uZXcgRGljdChudWxsKTtyLnNldCgiT3JkZXJpbmciLCJJZGVudGl0eSIpO3Iuc2V0KCJSZWdpc3RyeSIsIkFkb2JlIik7ci5zZXQoIlN1cHBsZW1lbnQiLDApO2kuc2V0KCJDSURTeXN0ZW1JbmZvIixyKTtyZXR1cm4gaX1jbGFzcyBQb3N0U2NyaXB0UGFyc2Vye2NvbnN0cnVjdG9yKGUpe3RoaXMubGV4ZXI9ZTt0aGlzLm9wZXJhdG9ycz1bXTt0aGlzLnRva2VuPW51bGw7dGhpcy5wcmV2PW51bGx9bmV4dFRva2VuKCl7dGhpcy5wcmV2PXRoaXMudG9rZW47dGhpcy50b2tlbj10aGlzLmxleGVyLmdldFRva2VuKCl9YWNjZXB0KGUpe2lmKHRoaXMudG9rZW4udHlwZT09PWUpe3RoaXMubmV4dFRva2VuKCk7cmV0dXJuITB9cmV0dXJuITF9ZXhwZWN0KGUpe2lmKHRoaXMuYWNjZXB0KGUpKXJldHVybiEwO3Rocm93IG5ldyBGb3JtYXRFcnJvcihgVW5leHBlY3RlZCBzeW1ib2w6IGZvdW5kICR7dGhpcy50b2tlbi50eXBlfSBleHBlY3RlZCAke2V9LmApfXBhcnNlKCl7dGhpcy5uZXh0VG9rZW4oKTt0aGlzLmV4cGVjdChzci5MQlJBQ0UpO3RoaXMucGFyc2VCbG9jaygpO3RoaXMuZXhwZWN0KHNyLlJCUkFDRSk7cmV0dXJuIHRoaXMub3BlcmF0b3JzfXBhcnNlQmxvY2soKXtmb3IoOzspaWYodGhpcy5hY2NlcHQoc3IuTlVNQkVSKSl0aGlzLm9wZXJhdG9ycy5wdXNoKHRoaXMucHJldi52YWx1ZSk7ZWxzZSBpZih0aGlzLmFjY2VwdChzci5PUEVSQVRPUikpdGhpcy5vcGVyYXRvcnMucHVzaCh0aGlzLnByZXYudmFsdWUpO2Vsc2V7aWYoIXRoaXMuYWNjZXB0KHNyLkxCUkFDRSkpcmV0dXJuO3RoaXMucGFyc2VDb25kaXRpb24oKX19cGFyc2VDb25kaXRpb24oKXtjb25zdCBlPXRoaXMub3BlcmF0b3JzLmxlbmd0aDt0aGlzLm9wZXJhdG9ycy5wdXNoKG51bGwsbnVsbCk7dGhpcy5wYXJzZUJsb2NrKCk7dGhpcy5leHBlY3Qoc3IuUkJSQUNFKTtpZih0aGlzLmFjY2VwdChzci5JRikpe3RoaXMub3BlcmF0b3JzW2VdPXRoaXMub3BlcmF0b3JzLmxlbmd0aDt0aGlzLm9wZXJhdG9yc1tlKzFdPSJqeiJ9ZWxzZXtpZighdGhpcy5hY2NlcHQoc3IuTEJSQUNFKSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIlBTIEZ1bmN0aW9uOiBlcnJvciBwYXJzaW5nIGNvbmRpdGlvbmFsLiIpO3tjb25zdCB0PXRoaXMub3BlcmF0b3JzLmxlbmd0aDt0aGlzLm9wZXJhdG9ycy5wdXNoKG51bGwsbnVsbCk7Y29uc3QgaT10aGlzLm9wZXJhdG9ycy5sZW5ndGg7dGhpcy5wYXJzZUJsb2NrKCk7dGhpcy5leHBlY3Qoc3IuUkJSQUNFKTt0aGlzLmV4cGVjdChzci5JRkVMU0UpO3RoaXMub3BlcmF0b3JzW3RdPXRoaXMub3BlcmF0b3JzLmxlbmd0aDt0aGlzLm9wZXJhdG9yc1t0KzFdPSJqIjt0aGlzLm9wZXJhdG9yc1tlXT1pO3RoaXMub3BlcmF0b3JzW2UrMV09Imp6In19fX1jb25zdCBzcj17TEJSQUNFOjAsUkJSQUNFOjEsTlVNQkVSOjIsT1BFUkFUT1I6MyxJRjo0LElGRUxTRTo1fTtjbGFzcyBQb3N0U2NyaXB0VG9rZW57c3RhdGljIGdldCBvcENhY2hlKCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJvcENhY2hlIixPYmplY3QuY3JlYXRlKG51bGwpKX1jb25zdHJ1Y3RvcihlLHQpe3RoaXMudHlwZT1lO3RoaXMudmFsdWU9dH1zdGF0aWMgZ2V0T3BlcmF0b3IoZSl7cmV0dXJuIFBvc3RTY3JpcHRUb2tlbi5vcENhY2hlW2VdfHw9bmV3IFBvc3RTY3JpcHRUb2tlbihzci5PUEVSQVRPUixlKX1zdGF0aWMgZ2V0IExCUkFDRSgpe3JldHVybiBzaGFkb3codGhpcywiTEJSQUNFIixuZXcgUG9zdFNjcmlwdFRva2VuKHNyLkxCUkFDRSwieyIpKX1zdGF0aWMgZ2V0IFJCUkFDRSgpe3JldHVybiBzaGFkb3codGhpcywiUkJSQUNFIixuZXcgUG9zdFNjcmlwdFRva2VuKHNyLlJCUkFDRSwifSIpKX1zdGF0aWMgZ2V0IElGKCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJJRiIsbmV3IFBvc3RTY3JpcHRUb2tlbihzci5JRiwiSUYiKSl9c3RhdGljIGdldCBJRkVMU0UoKXtyZXR1cm4gc2hhZG93KHRoaXMsIklGRUxTRSIsbmV3IFBvc3RTY3JpcHRUb2tlbihzci5JRkVMU0UsIklGRUxTRSIpKX19Y2xhc3MgUG9zdFNjcmlwdExleGVye2NvbnN0cnVjdG9yKGUpe3RoaXMuc3RyZWFtPWU7dGhpcy5uZXh0Q2hhcigpO3RoaXMuc3RyQnVmPVtdfW5leHRDaGFyKCl7cmV0dXJuIHRoaXMuY3VycmVudENoYXI9dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpfWdldFRva2VuKCl7bGV0IGU9ITEsdD10aGlzLmN1cnJlbnRDaGFyO2Zvcig7Oyl7aWYodDwwKXJldHVybiBFdDtpZihlKTEwIT09dCYmMTMhPT10fHwoZT0hMSk7ZWxzZSBpZigzNz09PXQpZT0hMDtlbHNlIGlmKCFpc1doaXRlU3BhY2UodCkpYnJlYWs7dD10aGlzLm5leHRDaGFyKCl9c3dpdGNoKDB8dCl7Y2FzZSA0ODpjYXNlIDQ5OmNhc2UgNTA6Y2FzZSA1MTpjYXNlIDUyOmNhc2UgNTM6Y2FzZSA1NDpjYXNlIDU1OmNhc2UgNTY6Y2FzZSA1NzpjYXNlIDQzOmNhc2UgNDU6Y2FzZSA0NjpyZXR1cm4gbmV3IFBvc3RTY3JpcHRUb2tlbihzci5OVU1CRVIsdGhpcy5nZXROdW1iZXIoKSk7Y2FzZSAxMjM6dGhpcy5uZXh0Q2hhcigpO3JldHVybiBQb3N0U2NyaXB0VG9rZW4uTEJSQUNFO2Nhc2UgMTI1OnRoaXMubmV4dENoYXIoKTtyZXR1cm4gUG9zdFNjcmlwdFRva2VuLlJCUkFDRX1jb25zdCBpPXRoaXMuc3RyQnVmO2kubGVuZ3RoPTA7aVswXT1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpO2Zvcig7KHQ9dGhpcy5uZXh0Q2hhcigpKT49MCYmKHQ+PTY1JiZ0PD05MHx8dD49OTcmJnQ8PTEyMik7KWkucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHQpKTtjb25zdCBhPWkuam9pbigiIik7c3dpdGNoKGEudG9Mb3dlckNhc2UoKSl7Y2FzZSJpZiI6cmV0dXJuIFBvc3RTY3JpcHRUb2tlbi5JRjtjYXNlImlmZWxzZSI6cmV0dXJuIFBvc3RTY3JpcHRUb2tlbi5JRkVMU0U7ZGVmYXVsdDpyZXR1cm4gUG9zdFNjcmlwdFRva2VuLmdldE9wZXJhdG9yKGEpfX1nZXROdW1iZXIoKXtsZXQgZT10aGlzLmN1cnJlbnRDaGFyO2NvbnN0IHQ9dGhpcy5zdHJCdWY7dC5sZW5ndGg9MDt0WzBdPVN0cmluZy5mcm9tQ2hhckNvZGUoZSk7Zm9yKDsoZT10aGlzLm5leHRDaGFyKCkpPj0wJiYoZT49NDgmJmU8PTU3fHw0NT09PWV8fDQ2PT09ZSk7KXQucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGUpKTtjb25zdCBpPXBhcnNlRmxvYXQodC5qb2luKCIiKSk7aWYoaXNOYU4oaSkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKGBJbnZhbGlkIGZsb2F0aW5nIHBvaW50IG51bWJlcjogJHtpfWApO3JldHVybiBpfX1jbGFzcyBCYXNlTG9jYWxDYWNoZXtjb25zdHJ1Y3RvcihlKXt0aGlzLl9vbmx5UmVmcz0hMD09PWU/Lm9ubHlSZWZzO2lmKCF0aGlzLl9vbmx5UmVmcyl7dGhpcy5fbmFtZVJlZk1hcD1uZXcgTWFwO3RoaXMuX2ltYWdlTWFwPW5ldyBNYXB9dGhpcy5faW1hZ2VDYWNoZT1uZXcgUmVmU2V0Q2FjaGV9Z2V0QnlOYW1lKGUpe3RoaXMuX29ubHlSZWZzJiZ1bnJlYWNoYWJsZSgiU2hvdWxkIG5vdCBjYWxsIGBnZXRCeU5hbWVgIG1ldGhvZC4iKTtjb25zdCB0PXRoaXMuX25hbWVSZWZNYXAuZ2V0KGUpO3JldHVybiB0P3RoaXMuZ2V0QnlSZWYodCk6dGhpcy5faW1hZ2VNYXAuZ2V0KGUpfHxudWxsfWdldEJ5UmVmKGUpe3JldHVybiB0aGlzLl9pbWFnZUNhY2hlLmdldChlKXx8bnVsbH1zZXQoZSx0LGkpe3VucmVhY2hhYmxlKCJBYnN0cmFjdCBtZXRob2QgYHNldGAgY2FsbGVkLiIpfX1jbGFzcyBMb2NhbEltYWdlQ2FjaGUgZXh0ZW5kcyBCYXNlTG9jYWxDYWNoZXtzZXQoZSx0PW51bGwsaSl7aWYoInN0cmluZyIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcignTG9jYWxJbWFnZUNhY2hlLnNldCAtIGV4cGVjdGVkICJuYW1lIiBhcmd1bWVudC4nKTtpZih0KXtpZih0aGlzLl9pbWFnZUNhY2hlLmhhcyh0KSlyZXR1cm47dGhpcy5fbmFtZVJlZk1hcC5zZXQoZSx0KTt0aGlzLl9pbWFnZUNhY2hlLnB1dCh0LGkpfWVsc2UgdGhpcy5faW1hZ2VNYXAuaGFzKGUpfHx0aGlzLl9pbWFnZU1hcC5zZXQoZSxpKX19Y2xhc3MgTG9jYWxDb2xvclNwYWNlQ2FjaGUgZXh0ZW5kcyBCYXNlTG9jYWxDYWNoZXtzZXQoZT1udWxsLHQ9bnVsbCxpKXtpZigic3RyaW5nIiE9dHlwZW9mIGUmJiF0KXRocm93IG5ldyBFcnJvcignTG9jYWxDb2xvclNwYWNlQ2FjaGUuc2V0IC0gZXhwZWN0ZWQgIm5hbWUiIGFuZC9vciAicmVmIiBhcmd1bWVudC4nKTtpZih0KXtpZih0aGlzLl9pbWFnZUNhY2hlLmhhcyh0KSlyZXR1cm47bnVsbCE9PWUmJnRoaXMuX25hbWVSZWZNYXAuc2V0KGUsdCk7dGhpcy5faW1hZ2VDYWNoZS5wdXQodCxpKX1lbHNlIHRoaXMuX2ltYWdlTWFwLmhhcyhlKXx8dGhpcy5faW1hZ2VNYXAuc2V0KGUsaSl9fWNsYXNzIExvY2FsRnVuY3Rpb25DYWNoZSBleHRlbmRzIEJhc2VMb2NhbENhY2hle2NvbnN0cnVjdG9yKGUpe3N1cGVyKHtvbmx5UmVmczohMH0pfXNldChlPW51bGwsdCxpKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoJ0xvY2FsRnVuY3Rpb25DYWNoZS5zZXQgLSBleHBlY3RlZCAicmVmIiBhcmd1bWVudC4nKTt0aGlzLl9pbWFnZUNhY2hlLmhhcyh0KXx8dGhpcy5faW1hZ2VDYWNoZS5wdXQodCxpKX19Y2xhc3MgTG9jYWxHU3RhdGVDYWNoZSBleHRlbmRzIEJhc2VMb2NhbENhY2hle3NldChlLHQ9bnVsbCxpKXtpZigic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKCdMb2NhbEdTdGF0ZUNhY2hlLnNldCAtIGV4cGVjdGVkICJuYW1lIiBhcmd1bWVudC4nKTtpZih0KXtpZih0aGlzLl9pbWFnZUNhY2hlLmhhcyh0KSlyZXR1cm47dGhpcy5fbmFtZVJlZk1hcC5zZXQoZSx0KTt0aGlzLl9pbWFnZUNhY2hlLnB1dCh0LGkpfWVsc2UgdGhpcy5faW1hZ2VNYXAuaGFzKGUpfHx0aGlzLl9pbWFnZU1hcC5zZXQoZSxpKX19Y2xhc3MgTG9jYWxUaWxpbmdQYXR0ZXJuQ2FjaGUgZXh0ZW5kcyBCYXNlTG9jYWxDYWNoZXtjb25zdHJ1Y3RvcihlKXtzdXBlcih7b25seVJlZnM6ITB9KX1zZXQoZT1udWxsLHQsaSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKCdMb2NhbFRpbGluZ1BhdHRlcm5DYWNoZS5zZXQgLSBleHBlY3RlZCAicmVmIiBhcmd1bWVudC4nKTt0aGlzLl9pbWFnZUNhY2hlLmhhcyh0KXx8dGhpcy5faW1hZ2VDYWNoZS5wdXQodCxpKX19Y2xhc3MgUmVnaW9uYWxJbWFnZUNhY2hlIGV4dGVuZHMgQmFzZUxvY2FsQ2FjaGV7Y29uc3RydWN0b3IoZSl7c3VwZXIoe29ubHlSZWZzOiEwfSl9c2V0KGU9bnVsbCx0LGkpe2lmKCF0KXRocm93IG5ldyBFcnJvcignUmVnaW9uYWxJbWFnZUNhY2hlLnNldCAtIGV4cGVjdGVkICJyZWYiIGFyZ3VtZW50LicpO3RoaXMuX2ltYWdlQ2FjaGUuaGFzKHQpfHx0aGlzLl9pbWFnZUNhY2hlLnB1dCh0LGkpfX1jbGFzcyBHbG9iYWxJbWFnZUNhY2hle3N0YXRpYyBOVU1fUEFHRVNfVEhSRVNIT0xEPTI7c3RhdGljIE1JTl9JTUFHRVNfVE9fQ0FDSEU9MTA7c3RhdGljIE1BWF9CWVRFX1NJWkU9NWU3OyNGPW5ldyBSZWZTZXQ7Y29uc3RydWN0b3IoKXt0aGlzLl9yZWZDYWNoZT1uZXcgUmVmU2V0Q2FjaGU7dGhpcy5faW1hZ2VDYWNoZT1uZXcgUmVmU2V0Q2FjaGV9Z2V0I1MoKXtsZXQgZT0wO2Zvcihjb25zdCB0IG9mIHRoaXMuX2ltYWdlQ2FjaGUpZSs9dC5ieXRlU2l6ZTtyZXR1cm4gZX1nZXQjaygpe3JldHVybiEodGhpcy5faW1hZ2VDYWNoZS5zaXplPEdsb2JhbEltYWdlQ2FjaGUuTUlOX0lNQUdFU19UT19DQUNIRSkmJiEodGhpcy4jUzxHbG9iYWxJbWFnZUNhY2hlLk1BWF9CWVRFX1NJWkUpfXNob3VsZENhY2hlKGUsdCl7bGV0IGk9dGhpcy5fcmVmQ2FjaGUuZ2V0KGUpO2lmKCFpKXtpPW5ldyBTZXQ7dGhpcy5fcmVmQ2FjaGUucHV0KGUsaSl9aS5hZGQodCk7cmV0dXJuIShpLnNpemU8R2xvYmFsSW1hZ2VDYWNoZS5OVU1fUEFHRVNfVEhSRVNIT0xEKSYmISghdGhpcy5faW1hZ2VDYWNoZS5oYXMoZSkmJnRoaXMuI2spfWFkZERlY29kZUZhaWxlZChlKXt0aGlzLiNGLnB1dChlKX1oYXNEZWNvZGVGYWlsZWQoZSl7cmV0dXJuIHRoaXMuI0YuaGFzKGUpfWFkZEJ5dGVTaXplKGUsdCl7Y29uc3QgaT10aGlzLl9pbWFnZUNhY2hlLmdldChlKTtpJiYoaS5ieXRlU2l6ZXx8KGkuYnl0ZVNpemU9dCkpfWdldERhdGEoZSx0KXtjb25zdCBpPXRoaXMuX3JlZkNhY2hlLmdldChlKTtpZighaSlyZXR1cm4gbnVsbDtpZihpLnNpemU8R2xvYmFsSW1hZ2VDYWNoZS5OVU1fUEFHRVNfVEhSRVNIT0xEKXJldHVybiBudWxsO2NvbnN0IGE9dGhpcy5faW1hZ2VDYWNoZS5nZXQoZSk7aWYoIWEpcmV0dXJuIG51bGw7aS5hZGQodCk7cmV0dXJuIGF9c2V0RGF0YShlLHQpe2lmKCF0aGlzLl9yZWZDYWNoZS5oYXMoZSkpdGhyb3cgbmV3IEVycm9yKCdHbG9iYWxJbWFnZUNhY2hlLnNldERhdGEgLSBleHBlY3RlZCAic2hvdWxkQ2FjaGUiIHRvIGhhdmUgYmVlbiBjYWxsZWQuJyk7dGhpcy5faW1hZ2VDYWNoZS5oYXMoZSl8fCh0aGlzLiNrP3dhcm4oIkdsb2JhbEltYWdlQ2FjaGUuc2V0RGF0YSAtIGNhY2hlIGxpbWl0IHJlYWNoZWQuIik6dGhpcy5faW1hZ2VDYWNoZS5wdXQoZSx0KSl9Y2xlYXIoZT0hMSl7aWYoIWUpe3RoaXMuI0YuY2xlYXIoKTt0aGlzLl9yZWZDYWNoZS5jbGVhcigpfXRoaXMuX2ltYWdlQ2FjaGUuY2xlYXIoKX19Y2xhc3MgUERGRnVuY3Rpb25GYWN0b3J5e2NvbnN0cnVjdG9yKHt4cmVmOmUsaXNFdmFsU3VwcG9ydGVkOnQ9ITB9KXt0aGlzLnhyZWY9ZTt0aGlzLmlzRXZhbFN1cHBvcnRlZD0hMSE9PXR9Y3JlYXRlKGUpe2NvbnN0IHQ9dGhpcy5nZXRDYWNoZWQoZSk7aWYodClyZXR1cm4gdDtjb25zdCBpPVBERkZ1bmN0aW9uLnBhcnNlKHt4cmVmOnRoaXMueHJlZixpc0V2YWxTdXBwb3J0ZWQ6dGhpcy5pc0V2YWxTdXBwb3J0ZWQsZm46ZSBpbnN0YW5jZW9mIFJlZj90aGlzLnhyZWYuZmV0Y2goZSk6ZX0pO3RoaXMuX2NhY2hlKGUsaSk7cmV0dXJuIGl9Y3JlYXRlRnJvbUFycmF5KGUpe2NvbnN0IHQ9dGhpcy5nZXRDYWNoZWQoZSk7aWYodClyZXR1cm4gdDtjb25zdCBpPVBERkZ1bmN0aW9uLnBhcnNlQXJyYXkoe3hyZWY6dGhpcy54cmVmLGlzRXZhbFN1cHBvcnRlZDp0aGlzLmlzRXZhbFN1cHBvcnRlZCxmbk9iajplIGluc3RhbmNlb2YgUmVmP3RoaXMueHJlZi5mZXRjaChlKTplfSk7dGhpcy5fY2FjaGUoZSxpKTtyZXR1cm4gaX1nZXRDYWNoZWQoZSl7bGV0IHQ7ZSBpbnN0YW5jZW9mIFJlZj90PWU6ZSBpbnN0YW5jZW9mIERpY3Q/dD1lLm9iaklkOmUgaW5zdGFuY2VvZiBCYXNlU3RyZWFtJiYodD1lLmRpY3Q/Lm9iaklkKTtpZih0KXtjb25zdCBlPXRoaXMuX2xvY2FsRnVuY3Rpb25DYWNoZS5nZXRCeVJlZih0KTtpZihlKXJldHVybiBlfXJldHVybiBudWxsfV9jYWNoZShlLHQpe2lmKCF0KXRocm93IG5ldyBFcnJvcignUERGRnVuY3Rpb25GYWN0b3J5Ll9jYWNoZSAtIGV4cGVjdGVkICJwYXJzZWRGdW5jdGlvbiIgYXJndW1lbnQuJyk7bGV0IGk7ZSBpbnN0YW5jZW9mIFJlZj9pPWU6ZSBpbnN0YW5jZW9mIERpY3Q/aT1lLm9iaklkOmUgaW5zdGFuY2VvZiBCYXNlU3RyZWFtJiYoaT1lLmRpY3Q/Lm9iaklkKTtpJiZ0aGlzLl9sb2NhbEZ1bmN0aW9uQ2FjaGUuc2V0KG51bGwsaSx0KX1nZXQgX2xvY2FsRnVuY3Rpb25DYWNoZSgpe3JldHVybiBzaGFkb3codGhpcywiX2xvY2FsRnVuY3Rpb25DYWNoZSIsbmV3IExvY2FsRnVuY3Rpb25DYWNoZSl9fWZ1bmN0aW9uIHRvTnVtYmVyQXJyYXkoZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/aXNOdW1iZXJBcnJheShlLG51bGwpP2U6ZS5tYXAoKGU9PitlKSk6bnVsbH1jbGFzcyBQREZGdW5jdGlvbntzdGF0aWMgZ2V0U2FtcGxlQXJyYXkoZSx0LGksYSl7bGV0IHIscyxuPTE7Zm9yKHI9MCxzPWUubGVuZ3RoO3I8cztyKyspbio9ZVtyXTtuKj10O2NvbnN0IG89bmV3IEFycmF5KG4pO2xldCBnPTAsYz0wO2NvbnN0IGw9MS8oMioqaS0xKSxoPWEuZ2V0Qnl0ZXMoKG4qaSs3KS84KTtsZXQgQz0wO2ZvcihyPTA7cjxuO3IrKyl7Zm9yKDtnPGk7KXtjPDw9ODtjfD1oW0MrK107Zys9OH1nLT1pO29bcl09KGM+PmcpKmw7YyY9KDE8PGcpLTF9cmV0dXJuIG99c3RhdGljIHBhcnNlKHt4cmVmOmUsaXNFdmFsU3VwcG9ydGVkOnQsZm46aX0pe2NvbnN0IGE9aS5kaWN0fHxpO3N3aXRjaChhLmdldCgiRnVuY3Rpb25UeXBlIikpe2Nhc2UgMDpyZXR1cm4gdGhpcy5jb25zdHJ1Y3RTYW1wbGVkKHt4cmVmOmUsaXNFdmFsU3VwcG9ydGVkOnQsZm46aSxkaWN0OmF9KTtjYXNlIDE6YnJlYWs7Y2FzZSAyOnJldHVybiB0aGlzLmNvbnN0cnVjdEludGVycG9sYXRlZCh7eHJlZjplLGlzRXZhbFN1cHBvcnRlZDp0LGRpY3Q6YX0pO2Nhc2UgMzpyZXR1cm4gdGhpcy5jb25zdHJ1Y3RTdGljaGVkKHt4cmVmOmUsaXNFdmFsU3VwcG9ydGVkOnQsZGljdDphfSk7Y2FzZSA0OnJldHVybiB0aGlzLmNvbnN0cnVjdFBvc3RTY3JpcHQoe3hyZWY6ZSxpc0V2YWxTdXBwb3J0ZWQ6dCxmbjppLGRpY3Q6YX0pfXRocm93IG5ldyBGb3JtYXRFcnJvcigiVW5rbm93biB0eXBlIG9mIGZ1bmN0aW9uIil9c3RhdGljIHBhcnNlQXJyYXkoe3hyZWY6ZSxpc0V2YWxTdXBwb3J0ZWQ6dCxmbk9iajppfSl7aWYoIUFycmF5LmlzQXJyYXkoaSkpcmV0dXJuIHRoaXMucGFyc2Uoe3hyZWY6ZSxpc0V2YWxTdXBwb3J0ZWQ6dCxmbjppfSk7Y29uc3QgYT1bXTtmb3IoY29uc3QgciBvZiBpKWEucHVzaCh0aGlzLnBhcnNlKHt4cmVmOmUsaXNFdmFsU3VwcG9ydGVkOnQsZm46ZS5mZXRjaElmUmVmKHIpfSkpO3JldHVybiBmdW5jdGlvbihlLHQsaSxyKXtmb3IobGV0IHM9MCxuPWEubGVuZ3RoO3M8bjtzKyspYVtzXShlLHQsaSxyK3MpfX1zdGF0aWMgY29uc3RydWN0U2FtcGxlZCh7eHJlZjplLGlzRXZhbFN1cHBvcnRlZDp0LGZuOmksZGljdDphfSl7ZnVuY3Rpb24gdG9NdWx0aUFycmF5KGUpe2NvbnN0IHQ9ZS5sZW5ndGgsaT1bXTtsZXQgYT0wO2ZvcihsZXQgcj0wO3I8dDtyKz0yKWlbYSsrXT1bZVtyXSxlW3IrMV1dO3JldHVybiBpfWZ1bmN0aW9uIGludGVycG9sYXRlKGUsdCxpLGEscil7cmV0dXJuIGErKHItYSkvKGktdCkqKGUtdCl9bGV0IHI9dG9OdW1iZXJBcnJheShhLmdldEFycmF5KCJEb21haW4iKSkscz10b051bWJlckFycmF5KGEuZ2V0QXJyYXkoIlJhbmdlIikpO2lmKCFyfHwhcyl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIk5vIGRvbWFpbiBvciByYW5nZSIpO2NvbnN0IG49ci5sZW5ndGgvMixvPXMubGVuZ3RoLzI7cj10b011bHRpQXJyYXkocik7cz10b011bHRpQXJyYXkocyk7Y29uc3QgZz10b051bWJlckFycmF5KGEuZ2V0QXJyYXkoIlNpemUiKSksYz1hLmdldCgiQml0c1BlclNhbXBsZSIpLGw9YS5nZXQoIk9yZGVyIil8fDE7MSE9PWwmJmluZm8oIk5vIHN1cHBvcnQgZm9yIGN1YmljIHNwbGluZSBpbnRlcnBvbGF0aW9uOiAiK2wpO2xldCBoPXRvTnVtYmVyQXJyYXkoYS5nZXRBcnJheSgiRW5jb2RlIikpO2lmKGgpaD10b011bHRpQXJyYXkoaCk7ZWxzZXtoPVtdO2ZvcihsZXQgZT0wO2U8bjsrK2UpaC5wdXNoKFswLGdbZV0tMV0pfWxldCBDPXRvTnVtYmVyQXJyYXkoYS5nZXRBcnJheSgiRGVjb2RlIikpO0M9Qz90b011bHRpQXJyYXkoQyk6cztjb25zdCBRPXRoaXMuZ2V0U2FtcGxlQXJyYXkoZyxvLGMsaSk7cmV0dXJuIGZ1bmN0aW9uIGNvbnN0cnVjdFNhbXBsZWRGbihlLHQsaSxhKXtjb25zdCBjPTE8PG4sbD1uZXcgRmxvYXQ2NEFycmF5KGMpLEU9bmV3IFVpbnQzMkFycmF5KGMpO2xldCB1LGQ7Zm9yKGQ9MDtkPGM7ZCsrKWxbZF09MTtsZXQgZj1vLHA9MTtmb3IodT0wO3U8bjsrK3Upe2NvbnN0IGk9clt1XVswXSxhPXJbdV1bMV07bGV0IHM9aW50ZXJwb2xhdGUoTWF0aC5taW4oTWF0aC5tYXgoZVt0K3VdLGkpLGEpLGksYSxoW3VdWzBdLGhbdV1bMV0pO2NvbnN0IG49Z1t1XTtzPU1hdGgubWluKE1hdGgubWF4KHMsMCksbi0xKTtjb25zdCBvPXM8bi0xP01hdGguZmxvb3Iocyk6cy0xLEM9bysxLXMsUT1zLW8sbT1vKmYseT1tK2Y7Zm9yKGQ9MDtkPGM7ZCsrKWlmKGQmcCl7bFtkXSo9UTtFW2RdKz15fWVsc2V7bFtkXSo9QztFW2RdKz1tfWYqPW47cDw8PTF9Zm9yKGQ9MDtkPG87KytkKXtsZXQgZT0wO2Zvcih1PTA7dTxjO3UrKyllKz1RW0VbdV0rZF0qbFt1XTtlPWludGVycG9sYXRlKGUsMCwxLENbZF1bMF0sQ1tkXVsxXSk7aVthK2RdPU1hdGgubWluKE1hdGgubWF4KGUsc1tkXVswXSksc1tkXVsxXSl9fX1zdGF0aWMgY29uc3RydWN0SW50ZXJwb2xhdGVkKHt4cmVmOmUsaXNFdmFsU3VwcG9ydGVkOnQsZGljdDppfSl7Y29uc3QgYT10b051bWJlckFycmF5KGkuZ2V0QXJyYXkoIkMwIikpfHxbMF0scj10b051bWJlckFycmF5KGkuZ2V0QXJyYXkoIkMxIikpfHxbMV0scz1pLmdldCgiTiIpLG49W107Zm9yKGxldCBlPTAsdD1hLmxlbmd0aDtlPHQ7KytlKW4ucHVzaChyW2VdLWFbZV0pO2NvbnN0IG89bi5sZW5ndGg7cmV0dXJuIGZ1bmN0aW9uIGNvbnN0cnVjdEludGVycG9sYXRlZEZuKGUsdCxpLHIpe2NvbnN0IGc9MT09PXM/ZVt0XTplW3RdKipzO2ZvcihsZXQgZT0wO2U8bzsrK2UpaVtyK2VdPWFbZV0rZypuW2VdfX1zdGF0aWMgY29uc3RydWN0U3RpY2hlZCh7eHJlZjplLGlzRXZhbFN1cHBvcnRlZDp0LGRpY3Q6aX0pe2NvbnN0IGE9dG9OdW1iZXJBcnJheShpLmdldEFycmF5KCJEb21haW4iKSk7aWYoIWEpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJObyBkb21haW4iKTtpZigxIT09YS5sZW5ndGgvMil0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkJhZCBkb21haW4gZm9yIHN0aWNoZWQgZnVuY3Rpb24iKTtjb25zdCByPVtdO2Zvcihjb25zdCBhIG9mIGkuZ2V0KCJGdW5jdGlvbnMiKSlyLnB1c2godGhpcy5wYXJzZSh7eHJlZjplLGlzRXZhbFN1cHBvcnRlZDp0LGZuOmUuZmV0Y2hJZlJlZihhKX0pKTtjb25zdCBzPXRvTnVtYmVyQXJyYXkoaS5nZXRBcnJheSgiQm91bmRzIikpLG49dG9OdW1iZXJBcnJheShpLmdldEFycmF5KCJFbmNvZGUiKSksbz1uZXcgRmxvYXQzMkFycmF5KDEpO3JldHVybiBmdW5jdGlvbiBjb25zdHJ1Y3RTdGljaGVkRm4oZSx0LGksZyl7Y29uc3QgYz1mdW5jdGlvbiBjb25zdHJ1Y3RTdGljaGVkRnJvbUlSQ2xpcChlLHQsaSl7ZT5pP2U9aTplPHQmJihlPXQpO3JldHVybiBlfShlW3RdLGFbMF0sYVsxXSksbD1zLmxlbmd0aDtsZXQgaDtmb3IoaD0wO2g8bCYmIShjPHNbaF0pOysraCk7bGV0IEM9YVswXTtoPjAmJihDPXNbaC0xXSk7bGV0IFE9YVsxXTtoPHMubGVuZ3RoJiYoUT1zW2hdKTtjb25zdCBFPW5bMipoXSx1PW5bMipoKzFdO29bMF09Qz09PVE/RTpFKyhjLUMpKih1LUUpLyhRLUMpO3JbaF0obywwLGksZyl9fXN0YXRpYyBjb25zdHJ1Y3RQb3N0U2NyaXB0KHt4cmVmOmUsaXNFdmFsU3VwcG9ydGVkOnQsZm46aSxkaWN0OmF9KXtjb25zdCByPXRvTnVtYmVyQXJyYXkoYS5nZXRBcnJheSgiRG9tYWluIikpLHM9dG9OdW1iZXJBcnJheShhLmdldEFycmF5KCJSYW5nZSIpKTtpZighcil0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIk5vIGRvbWFpbi4iKTtpZighcyl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIk5vIHJhbmdlLiIpO2NvbnN0IG49bmV3IFBvc3RTY3JpcHRMZXhlcihpKSxvPW5ldyBQb3N0U2NyaXB0UGFyc2VyKG4pLnBhcnNlKCk7aWYodCYmRmVhdHVyZVRlc3QuaXNFdmFsU3VwcG9ydGVkKXtjb25zdCBlPShuZXcgUG9zdFNjcmlwdENvbXBpbGVyKS5jb21waWxlKG8scixzKTtpZihlKXJldHVybiBuZXcgRnVuY3Rpb24oInNyYyIsInNyY09mZnNldCIsImRlc3QiLCJkZXN0T2Zmc2V0IixlKX1pbmZvKCJVbmFibGUgdG8gY29tcGlsZSBQUyBmdW5jdGlvbiIpO2NvbnN0IGc9cy5sZW5ndGg+PjEsYz1yLmxlbmd0aD4+MSxsPW5ldyBQb3N0U2NyaXB0RXZhbHVhdG9yKG8pLGg9T2JqZWN0LmNyZWF0ZShudWxsKTtsZXQgQz04MTkyO2NvbnN0IFE9bmV3IEZsb2F0MzJBcnJheShjKTtyZXR1cm4gZnVuY3Rpb24gY29uc3RydWN0UG9zdFNjcmlwdEZuKGUsdCxpLGEpe2xldCByLG4sbz0iIjtjb25zdCBFPVE7Zm9yKHI9MDtyPGM7cisrKXtuPWVbdCtyXTtFW3JdPW47bys9bisiXyJ9Y29uc3QgdT1oW29dO2lmKHZvaWQgMCE9PXUpe2kuc2V0KHUsYSk7cmV0dXJufWNvbnN0IGQ9bmV3IEZsb2F0MzJBcnJheShnKSxmPWwuZXhlY3V0ZShFKSxwPWYubGVuZ3RoLWc7Zm9yKHI9MDtyPGc7cisrKXtuPWZbcCtyXTtsZXQgZT1zWzIqcl07aWYobjxlKW49ZTtlbHNle2U9c1syKnIrMV07bj5lJiYobj1lKX1kW3JdPW59aWYoQz4wKXtDLS07aFtvXT1kfWkuc2V0KGQsYSl9fX1mdW5jdGlvbiBpc1BERkZ1bmN0aW9uKGUpe2xldCB0O2lmKGUgaW5zdGFuY2VvZiBEaWN0KXQ9ZTtlbHNle2lmKCEoZSBpbnN0YW5jZW9mIEJhc2VTdHJlYW0pKXJldHVybiExO3Q9ZS5kaWN0fXJldHVybiB0LmhhcygiRnVuY3Rpb25UeXBlIil9Y2xhc3MgUG9zdFNjcmlwdFN0YWNre3N0YXRpYyBNQVhfU1RBQ0tfU0laRT0xMDA7Y29uc3RydWN0b3IoZSl7dGhpcy5zdGFjaz1lP0FycmF5LmZyb20oZSk6W119cHVzaChlKXtpZih0aGlzLnN0YWNrLmxlbmd0aD49UG9zdFNjcmlwdFN0YWNrLk1BWF9TVEFDS19TSVpFKXRocm93IG5ldyBFcnJvcigiUG9zdFNjcmlwdCBmdW5jdGlvbiBzdGFjayBvdmVyZmxvdy4iKTt0aGlzLnN0YWNrLnB1c2goZSl9cG9wKCl7aWYodGhpcy5zdGFjay5sZW5ndGg8PTApdGhyb3cgbmV3IEVycm9yKCJQb3N0U2NyaXB0IGZ1bmN0aW9uIHN0YWNrIHVuZGVyZmxvdy4iKTtyZXR1cm4gdGhpcy5zdGFjay5wb3AoKX1jb3B5KGUpe2lmKHRoaXMuc3RhY2subGVuZ3RoK2U+PVBvc3RTY3JpcHRTdGFjay5NQVhfU1RBQ0tfU0laRSl0aHJvdyBuZXcgRXJyb3IoIlBvc3RTY3JpcHQgZnVuY3Rpb24gc3RhY2sgb3ZlcmZsb3cuIik7Y29uc3QgdD10aGlzLnN0YWNrO2ZvcihsZXQgaT10Lmxlbmd0aC1lLGE9ZS0xO2E+PTA7YS0tLGkrKyl0LnB1c2godFtpXSl9aW5kZXgoZSl7dGhpcy5wdXNoKHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGgtZS0xXSl9cm9sbChlLHQpe2NvbnN0IGk9dGhpcy5zdGFjayxhPWkubGVuZ3RoLWUscj1pLmxlbmd0aC0xLHM9YSsodC1NYXRoLmZsb29yKHQvZSkqZSk7Zm9yKGxldCBlPWEsdD1yO2U8dDtlKyssdC0tKXtjb25zdCBhPWlbZV07aVtlXT1pW3RdO2lbdF09YX1mb3IobGV0IGU9YSx0PXMtMTtlPHQ7ZSsrLHQtLSl7Y29uc3QgYT1pW2VdO2lbZV09aVt0XTtpW3RdPWF9Zm9yKGxldCBlPXMsdD1yO2U8dDtlKyssdC0tKXtjb25zdCBhPWlbZV07aVtlXT1pW3RdO2lbdF09YX19fWNsYXNzIFBvc3RTY3JpcHRFdmFsdWF0b3J7Y29uc3RydWN0b3IoZSl7dGhpcy5vcGVyYXRvcnM9ZX1leGVjdXRlKGUpe2NvbnN0IHQ9bmV3IFBvc3RTY3JpcHRTdGFjayhlKTtsZXQgaT0wO2NvbnN0IGE9dGhpcy5vcGVyYXRvcnMscj1hLmxlbmd0aDtsZXQgcyxuLG87Zm9yKDtpPHI7KXtzPWFbaSsrXTtpZigibnVtYmVyIiE9dHlwZW9mIHMpc3dpdGNoKHMpe2Nhc2UianoiOm89dC5wb3AoKTtuPXQucG9wKCk7bnx8KGk9byk7YnJlYWs7Y2FzZSJqIjpuPXQucG9wKCk7aT1uO2JyZWFrO2Nhc2UiYWJzIjpuPXQucG9wKCk7dC5wdXNoKE1hdGguYWJzKG4pKTticmVhaztjYXNlImFkZCI6bz10LnBvcCgpO249dC5wb3AoKTt0LnB1c2gobitvKTticmVhaztjYXNlImFuZCI6bz10LnBvcCgpO249dC5wb3AoKTsiYm9vbGVhbiI9PXR5cGVvZiBuJiYiYm9vbGVhbiI9PXR5cGVvZiBvP3QucHVzaChuJiZvKTp0LnB1c2gobiZvKTticmVhaztjYXNlImF0YW4iOm89dC5wb3AoKTtuPXQucG9wKCk7bj1NYXRoLmF0YW4yKG4sbykvTWF0aC5QSSoxODA7bjwwJiYobis9MzYwKTt0LnB1c2gobik7YnJlYWs7Y2FzZSJiaXRzaGlmdCI6bz10LnBvcCgpO249dC5wb3AoKTtuPjA/dC5wdXNoKG48PG8pOnQucHVzaChuPj5vKTticmVhaztjYXNlImNlaWxpbmciOm49dC5wb3AoKTt0LnB1c2goTWF0aC5jZWlsKG4pKTticmVhaztjYXNlImNvcHkiOm49dC5wb3AoKTt0LmNvcHkobik7YnJlYWs7Y2FzZSJjb3MiOm49dC5wb3AoKTt0LnB1c2goTWF0aC5jb3MobiUzNjAvMTgwKk1hdGguUEkpKTticmVhaztjYXNlImN2aSI6bj0wfHQucG9wKCk7dC5wdXNoKG4pO2JyZWFrO2Nhc2UiY3ZyIjpicmVhaztjYXNlImRpdiI6bz10LnBvcCgpO249dC5wb3AoKTt0LnB1c2gobi9vKTticmVhaztjYXNlImR1cCI6dC5jb3B5KDEpO2JyZWFrO2Nhc2UiZXEiOm89dC5wb3AoKTtuPXQucG9wKCk7dC5wdXNoKG49PT1vKTticmVhaztjYXNlImV4Y2giOnQucm9sbCgyLDEpO2JyZWFrO2Nhc2UiZXhwIjpvPXQucG9wKCk7bj10LnBvcCgpO3QucHVzaChuKipvKTticmVhaztjYXNlImZhbHNlIjp0LnB1c2goITEpO2JyZWFrO2Nhc2UiZmxvb3IiOm49dC5wb3AoKTt0LnB1c2goTWF0aC5mbG9vcihuKSk7YnJlYWs7Y2FzZSJnZSI6bz10LnBvcCgpO249dC5wb3AoKTt0LnB1c2gobj49byk7YnJlYWs7Y2FzZSJndCI6bz10LnBvcCgpO249dC5wb3AoKTt0LnB1c2gobj5vKTticmVhaztjYXNlImlkaXYiOm89dC5wb3AoKTtuPXQucG9wKCk7dC5wdXNoKG4vb3wwKTticmVhaztjYXNlImluZGV4IjpuPXQucG9wKCk7dC5pbmRleChuKTticmVhaztjYXNlImxlIjpvPXQucG9wKCk7bj10LnBvcCgpO3QucHVzaChuPD1vKTticmVhaztjYXNlImxuIjpuPXQucG9wKCk7dC5wdXNoKE1hdGgubG9nKG4pKTticmVhaztjYXNlImxvZyI6bj10LnBvcCgpO3QucHVzaChNYXRoLmxvZzEwKG4pKTticmVhaztjYXNlImx0IjpvPXQucG9wKCk7bj10LnBvcCgpO3QucHVzaChuPG8pO2JyZWFrO2Nhc2UibW9kIjpvPXQucG9wKCk7bj10LnBvcCgpO3QucHVzaChuJW8pO2JyZWFrO2Nhc2UibXVsIjpvPXQucG9wKCk7bj10LnBvcCgpO3QucHVzaChuKm8pO2JyZWFrO2Nhc2UibmUiOm89dC5wb3AoKTtuPXQucG9wKCk7dC5wdXNoKG4hPT1vKTticmVhaztjYXNlIm5lZyI6bj10LnBvcCgpO3QucHVzaCgtbik7YnJlYWs7Y2FzZSJub3QiOm49dC5wb3AoKTsiYm9vbGVhbiI9PXR5cGVvZiBuP3QucHVzaCghbik6dC5wdXNoKH5uKTticmVhaztjYXNlIm9yIjpvPXQucG9wKCk7bj10LnBvcCgpOyJib29sZWFuIj09dHlwZW9mIG4mJiJib29sZWFuIj09dHlwZW9mIG8/dC5wdXNoKG58fG8pOnQucHVzaChufG8pO2JyZWFrO2Nhc2UicG9wIjp0LnBvcCgpO2JyZWFrO2Nhc2Uicm9sbCI6bz10LnBvcCgpO249dC5wb3AoKTt0LnJvbGwobixvKTticmVhaztjYXNlInJvdW5kIjpuPXQucG9wKCk7dC5wdXNoKE1hdGgucm91bmQobikpO2JyZWFrO2Nhc2Uic2luIjpuPXQucG9wKCk7dC5wdXNoKE1hdGguc2luKG4lMzYwLzE4MCpNYXRoLlBJKSk7YnJlYWs7Y2FzZSJzcXJ0IjpuPXQucG9wKCk7dC5wdXNoKE1hdGguc3FydChuKSk7YnJlYWs7Y2FzZSJzdWIiOm89dC5wb3AoKTtuPXQucG9wKCk7dC5wdXNoKG4tbyk7YnJlYWs7Y2FzZSJ0cnVlIjp0LnB1c2goITApO2JyZWFrO2Nhc2UidHJ1bmNhdGUiOm49dC5wb3AoKTtuPW48MD9NYXRoLmNlaWwobik6TWF0aC5mbG9vcihuKTt0LnB1c2gobik7YnJlYWs7Y2FzZSJ4b3IiOm89dC5wb3AoKTtuPXQucG9wKCk7ImJvb2xlYW4iPT10eXBlb2YgbiYmImJvb2xlYW4iPT10eXBlb2Ygbz90LnB1c2gobiE9PW8pOnQucHVzaChuXm8pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEZvcm1hdEVycm9yKGBVbmtub3duIG9wZXJhdG9yICR7c31gKX1lbHNlIHQucHVzaChzKX1yZXR1cm4gdC5zdGFja319Y2xhc3MgQXN0Tm9kZXtjb25zdHJ1Y3RvcihlKXt0aGlzLnR5cGU9ZX12aXNpdChlKXt1bnJlYWNoYWJsZSgiYWJzdHJhY3QgbWV0aG9kIil9fWNsYXNzIEFzdEFyZ3VtZW50IGV4dGVuZHMgQXN0Tm9kZXtjb25zdHJ1Y3RvcihlLHQsaSl7c3VwZXIoImFyZ3MiKTt0aGlzLmluZGV4PWU7dGhpcy5taW49dDt0aGlzLm1heD1pfXZpc2l0KGUpe2UudmlzaXRBcmd1bWVudCh0aGlzKX19Y2xhc3MgQXN0TGl0ZXJhbCBleHRlbmRzIEFzdE5vZGV7Y29uc3RydWN0b3IoZSl7c3VwZXIoImxpdGVyYWwiKTt0aGlzLm51bWJlcj1lO3RoaXMubWluPWU7dGhpcy5tYXg9ZX12aXNpdChlKXtlLnZpc2l0TGl0ZXJhbCh0aGlzKX19Y2xhc3MgQXN0QmluYXJ5T3BlcmF0aW9uIGV4dGVuZHMgQXN0Tm9kZXtjb25zdHJ1Y3RvcihlLHQsaSxhLHIpe3N1cGVyKCJiaW5hcnkiKTt0aGlzLm9wPWU7dGhpcy5hcmcxPXQ7dGhpcy5hcmcyPWk7dGhpcy5taW49YTt0aGlzLm1heD1yfXZpc2l0KGUpe2UudmlzaXRCaW5hcnlPcGVyYXRpb24odGhpcyl9fWNsYXNzIEFzdE1pbiBleHRlbmRzIEFzdE5vZGV7Y29uc3RydWN0b3IoZSx0KXtzdXBlcigibWF4Iik7dGhpcy5hcmc9ZTt0aGlzLm1pbj1lLm1pbjt0aGlzLm1heD10fXZpc2l0KGUpe2UudmlzaXRNaW4odGhpcyl9fWNsYXNzIEFzdFZhcmlhYmxlIGV4dGVuZHMgQXN0Tm9kZXtjb25zdHJ1Y3RvcihlLHQsaSl7c3VwZXIoInZhciIpO3RoaXMuaW5kZXg9ZTt0aGlzLm1pbj10O3RoaXMubWF4PWl9dmlzaXQoZSl7ZS52aXNpdFZhcmlhYmxlKHRoaXMpfX1jbGFzcyBBc3RWYXJpYWJsZURlZmluaXRpb24gZXh0ZW5kcyBBc3ROb2Rle2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoImRlZmluaXRpb24iKTt0aGlzLnZhcmlhYmxlPWU7dGhpcy5hcmc9dH12aXNpdChlKXtlLnZpc2l0VmFyaWFibGVEZWZpbml0aW9uKHRoaXMpfX1jbGFzcyBFeHByZXNzaW9uQnVpbGRlclZpc2l0b3J7Y29uc3RydWN0b3IoKXt0aGlzLnBhcnRzPVtdfXZpc2l0QXJndW1lbnQoZSl7dGhpcy5wYXJ0cy5wdXNoKCJNYXRoLm1heCgiLGUubWluLCIsIE1hdGgubWluKCIsZS5tYXgsIiwgc3JjW3NyY09mZnNldCArICIsZS5pbmRleCwiXSkpIil9dmlzaXRWYXJpYWJsZShlKXt0aGlzLnBhcnRzLnB1c2goInYiLGUuaW5kZXgpfXZpc2l0TGl0ZXJhbChlKXt0aGlzLnBhcnRzLnB1c2goZS5udW1iZXIpfXZpc2l0QmluYXJ5T3BlcmF0aW9uKGUpe3RoaXMucGFydHMucHVzaCgiKCIpO2UuYXJnMS52aXNpdCh0aGlzKTt0aGlzLnBhcnRzLnB1c2goIiAiLGUub3AsIiAiKTtlLmFyZzIudmlzaXQodGhpcyk7dGhpcy5wYXJ0cy5wdXNoKCIpIil9dmlzaXRWYXJpYWJsZURlZmluaXRpb24oZSl7dGhpcy5wYXJ0cy5wdXNoKCJ2YXIgIik7ZS52YXJpYWJsZS52aXNpdCh0aGlzKTt0aGlzLnBhcnRzLnB1c2goIiA9ICIpO2UuYXJnLnZpc2l0KHRoaXMpO3RoaXMucGFydHMucHVzaCgiOyIpfXZpc2l0TWluKGUpe3RoaXMucGFydHMucHVzaCgiTWF0aC5taW4oIik7ZS5hcmcudmlzaXQodGhpcyk7dGhpcy5wYXJ0cy5wdXNoKCIsICIsZS5tYXgsIikiKX10b1N0cmluZygpe3JldHVybiB0aGlzLnBhcnRzLmpvaW4oIiIpfX1mdW5jdGlvbiBidWlsZEFkZE9wZXJhdGlvbihlLHQpe3JldHVybiJsaXRlcmFsIj09PXQudHlwZSYmMD09PXQubnVtYmVyP2U6ImxpdGVyYWwiPT09ZS50eXBlJiYwPT09ZS5udW1iZXI/dDoibGl0ZXJhbCI9PT10LnR5cGUmJiJsaXRlcmFsIj09PWUudHlwZT9uZXcgQXN0TGl0ZXJhbChlLm51bWJlcit0Lm51bWJlcik6bmV3IEFzdEJpbmFyeU9wZXJhdGlvbigiKyIsZSx0LGUubWluK3QubWluLGUubWF4K3QubWF4KX1mdW5jdGlvbiBidWlsZE11bE9wZXJhdGlvbihlLHQpe2lmKCJsaXRlcmFsIj09PXQudHlwZSl7aWYoMD09PXQubnVtYmVyKXJldHVybiBuZXcgQXN0TGl0ZXJhbCgwKTtpZigxPT09dC5udW1iZXIpcmV0dXJuIGU7aWYoImxpdGVyYWwiPT09ZS50eXBlKXJldHVybiBuZXcgQXN0TGl0ZXJhbChlLm51bWJlcip0Lm51bWJlcil9aWYoImxpdGVyYWwiPT09ZS50eXBlKXtpZigwPT09ZS5udW1iZXIpcmV0dXJuIG5ldyBBc3RMaXRlcmFsKDApO2lmKDE9PT1lLm51bWJlcilyZXR1cm4gdH1jb25zdCBpPU1hdGgubWluKGUubWluKnQubWluLGUubWluKnQubWF4LGUubWF4KnQubWluLGUubWF4KnQubWF4KSxhPU1hdGgubWF4KGUubWluKnQubWluLGUubWluKnQubWF4LGUubWF4KnQubWluLGUubWF4KnQubWF4KTtyZXR1cm4gbmV3IEFzdEJpbmFyeU9wZXJhdGlvbigiKiIsZSx0LGksYSl9ZnVuY3Rpb24gYnVpbGRTdWJPcGVyYXRpb24oZSx0KXtpZigibGl0ZXJhbCI9PT10LnR5cGUpe2lmKDA9PT10Lm51bWJlcilyZXR1cm4gZTtpZigibGl0ZXJhbCI9PT1lLnR5cGUpcmV0dXJuIG5ldyBBc3RMaXRlcmFsKGUubnVtYmVyLXQubnVtYmVyKX1yZXR1cm4iYmluYXJ5Ij09PXQudHlwZSYmIi0iPT09dC5vcCYmImxpdGVyYWwiPT09ZS50eXBlJiYxPT09ZS5udW1iZXImJiJsaXRlcmFsIj09PXQuYXJnMS50eXBlJiYxPT09dC5hcmcxLm51bWJlcj90LmFyZzI6bmV3IEFzdEJpbmFyeU9wZXJhdGlvbigiLSIsZSx0LGUubWluLXQubWF4LGUubWF4LXQubWluKX1mdW5jdGlvbiBidWlsZE1pbk9wZXJhdGlvbihlLHQpe3JldHVybiBlLm1pbj49dD9uZXcgQXN0TGl0ZXJhbCh0KTplLm1heDw9dD9lOm5ldyBBc3RNaW4oZSx0KX1jbGFzcyBQb3N0U2NyaXB0Q29tcGlsZXJ7Y29tcGlsZShlLHQsaSl7Y29uc3QgYT1bXSxyPVtdLHM9dC5sZW5ndGg+PjEsbj1pLmxlbmd0aD4+MTtsZXQgbyxnLGMsbCxoLEMsUSxFLHU9MDtmb3IobGV0IGU9MDtlPHM7ZSsrKWEucHVzaChuZXcgQXN0QXJndW1lbnQoZSx0WzIqZV0sdFsyKmUrMV0pKTtmb3IobGV0IHQ9MCxpPWUubGVuZ3RoO3Q8aTt0Kyspe0U9ZVt0XTtpZigibnVtYmVyIiE9dHlwZW9mIEUpc3dpdGNoKEUpe2Nhc2UiYWRkIjppZihhLmxlbmd0aDwyKXJldHVybiBudWxsO2w9YS5wb3AoKTtjPWEucG9wKCk7YS5wdXNoKGJ1aWxkQWRkT3BlcmF0aW9uKGMsbCkpO2JyZWFrO2Nhc2UiY3ZyIjppZihhLmxlbmd0aDwxKXJldHVybiBudWxsO2JyZWFrO2Nhc2UibXVsIjppZihhLmxlbmd0aDwyKXJldHVybiBudWxsO2w9YS5wb3AoKTtjPWEucG9wKCk7YS5wdXNoKGJ1aWxkTXVsT3BlcmF0aW9uKGMsbCkpO2JyZWFrO2Nhc2Uic3ViIjppZihhLmxlbmd0aDwyKXJldHVybiBudWxsO2w9YS5wb3AoKTtjPWEucG9wKCk7YS5wdXNoKGJ1aWxkU3ViT3BlcmF0aW9uKGMsbCkpO2JyZWFrO2Nhc2UiZXhjaCI6aWYoYS5sZW5ndGg8MilyZXR1cm4gbnVsbDtoPWEucG9wKCk7Qz1hLnBvcCgpO2EucHVzaChoLEMpO2JyZWFrO2Nhc2UicG9wIjppZihhLmxlbmd0aDwxKXJldHVybiBudWxsO2EucG9wKCk7YnJlYWs7Y2FzZSJpbmRleCI6aWYoYS5sZW5ndGg8MSlyZXR1cm4gbnVsbDtjPWEucG9wKCk7aWYoImxpdGVyYWwiIT09Yy50eXBlKXJldHVybiBudWxsO289Yy5udW1iZXI7aWYobzwwfHwhTnVtYmVyLmlzSW50ZWdlcihvKXx8YS5sZW5ndGg8bylyZXR1cm4gbnVsbDtoPWFbYS5sZW5ndGgtby0xXTtpZigibGl0ZXJhbCI9PT1oLnR5cGV8fCJ2YXIiPT09aC50eXBlKXthLnB1c2goaCk7YnJlYWt9UT1uZXcgQXN0VmFyaWFibGUodSsrLGgubWluLGgubWF4KTthW2EubGVuZ3RoLW8tMV09UTthLnB1c2goUSk7ci5wdXNoKG5ldyBBc3RWYXJpYWJsZURlZmluaXRpb24oUSxoKSk7YnJlYWs7Y2FzZSJkdXAiOmlmKGEubGVuZ3RoPDEpcmV0dXJuIG51bGw7aWYoIm51bWJlciI9PXR5cGVvZiBlW3QrMV0mJiJndCI9PT1lW3QrMl0mJmVbdCszXT09PXQrNyYmImp6Ij09PWVbdCs0XSYmInBvcCI9PT1lW3QrNV0mJmVbdCs2XT09PWVbdCsxXSl7Yz1hLnBvcCgpO2EucHVzaChidWlsZE1pbk9wZXJhdGlvbihjLGVbdCsxXSkpO3QrPTY7YnJlYWt9aD1hLmF0KC0xKTtpZigibGl0ZXJhbCI9PT1oLnR5cGV8fCJ2YXIiPT09aC50eXBlKXthLnB1c2goaCk7YnJlYWt9UT1uZXcgQXN0VmFyaWFibGUodSsrLGgubWluLGgubWF4KTthW2EubGVuZ3RoLTFdPVE7YS5wdXNoKFEpO3IucHVzaChuZXcgQXN0VmFyaWFibGVEZWZpbml0aW9uKFEsaCkpO2JyZWFrO2Nhc2Uicm9sbCI6aWYoYS5sZW5ndGg8MilyZXR1cm4gbnVsbDtsPWEucG9wKCk7Yz1hLnBvcCgpO2lmKCJsaXRlcmFsIiE9PWwudHlwZXx8ImxpdGVyYWwiIT09Yy50eXBlKXJldHVybiBudWxsO2c9bC5udW1iZXI7bz1jLm51bWJlcjtpZihvPD0wfHwhTnVtYmVyLmlzSW50ZWdlcihvKXx8IU51bWJlci5pc0ludGVnZXIoZyl8fGEubGVuZ3RoPG8pcmV0dXJuIG51bGw7Zz0oZyVvK28pJW87aWYoMD09PWcpYnJlYWs7YS5wdXNoKC4uLmEuc3BsaWNlKGEubGVuZ3RoLW8sby1nKSk7YnJlYWs7ZGVmYXVsdDpyZXR1cm4gbnVsbH1lbHNlIGEucHVzaChuZXcgQXN0TGl0ZXJhbChFKSl9aWYoYS5sZW5ndGghPT1uKXJldHVybiBudWxsO2NvbnN0IGQ9W107Zm9yKGNvbnN0IGUgb2Ygcil7Y29uc3QgdD1uZXcgRXhwcmVzc2lvbkJ1aWxkZXJWaXNpdG9yO2UudmlzaXQodCk7ZC5wdXNoKHQudG9TdHJpbmcoKSl9Zm9yKGxldCBlPTAsdD1hLmxlbmd0aDtlPHQ7ZSsrKXtjb25zdCB0PWFbZV0scj1uZXcgRXhwcmVzc2lvbkJ1aWxkZXJWaXNpdG9yO3QudmlzaXQocik7Y29uc3Qgcz1pWzIqZV0sbj1pWzIqZSsxXSxvPVtyLnRvU3RyaW5nKCldO2lmKHM+dC5taW4pe28udW5zaGlmdCgiTWF0aC5tYXgoIixzLCIsICIpO28ucHVzaCgiKSIpfWlmKG48dC5tYXgpe28udW5zaGlmdCgiTWF0aC5taW4oIixuLCIsICIpO28ucHVzaCgiKSIpfW8udW5zaGlmdCgiZGVzdFtkZXN0T2Zmc2V0ICsgIixlLCJdID0gIik7by5wdXNoKCI7Iik7ZC5wdXNoKG8uam9pbigiIikpfXJldHVybiBkLmpvaW4oIlxuIil9fWNvbnN0IG5yPVsiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiUyIsIkIiLCJTIiwiV1MiLCJCIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkIiLCJCIiwiQiIsIlMiLCJXUyIsIk9OIiwiT04iLCJFVCIsIkVUIiwiRVQiLCJPTiIsIk9OIiwiT04iLCJPTiIsIk9OIiwiRVMiLCJDUyIsIkVTIiwiQ1MiLCJDUyIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiQ1MiLCJPTiIsIk9OIiwiT04iLCJPTiIsIk9OIiwiT04iLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIk9OIiwiT04iLCJPTiIsIk9OIiwiT04iLCJPTiIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiT04iLCJPTiIsIk9OIiwiT04iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkNTIiwiT04iLCJFVCIsIkVUIiwiRVQiLCJFVCIsIk9OIiwiT04iLCJPTiIsIk9OIiwiTCIsIk9OIiwiT04iLCJCTiIsIk9OIiwiT04iLCJFVCIsIkVUIiwiRU4iLCJFTiIsIk9OIiwiTCIsIk9OIiwiT04iLCJPTiIsIkVOIiwiTCIsIk9OIiwiT04iLCJPTiIsIk9OIiwiT04iLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIk9OIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIk9OIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiXSxvcj1bIkFOIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIk9OIiwiT04iLCJBTCIsIkVUIiwiRVQiLCJBTCIsIkNTIiwiQUwiLCJPTiIsIk9OIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiQUwiLCJBTCIsIiIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiRVQiLCJBTiIsIkFOIiwiQUwiLCJBTCIsIkFMIiwiTlNNIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIkFOIiwiT04iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJBTCIsIkFMIiwiTlNNIiwiTlNNIiwiT04iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJBTCIsIkFMIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiXTtmdW5jdGlvbiBpc09kZChlKXtyZXR1cm4hISgxJmUpfWZ1bmN0aW9uIGlzRXZlbihlKXtyZXR1cm4hKDEmZSl9ZnVuY3Rpb24gZmluZFVuZXF1YWwoZSx0LGkpe2xldCBhLHI7Zm9yKGE9dCxyPWUubGVuZ3RoO2E8cjsrK2EpaWYoZVthXSE9PWkpcmV0dXJuIGE7cmV0dXJuIGF9ZnVuY3Rpb24gc2V0VmFsdWVzKGUsdCxpLGEpe2ZvcihsZXQgcj10O3I8aTsrK3IpZVtyXT1hfWZ1bmN0aW9uIHJldmVyc2VWYWx1ZXMoZSx0LGkpe2ZvcihsZXQgYT10LHI9aS0xO2E8cjsrK2EsLS1yKXtjb25zdCB0PWVbYV07ZVthXT1lW3JdO2Vbcl09dH19ZnVuY3Rpb24gY3JlYXRlQmlkaVRleHQoZSx0LGk9ITEpe2xldCBhPSJsdHIiO2k/YT0idHRiIjp0fHwoYT0icnRsIik7cmV0dXJue3N0cjplLGRpcjphfX1jb25zdCBncj1bXSxJcj1bXTtmdW5jdGlvbiBiaWRpKGUsdD0tMSxpPSExKXtsZXQgYT0hMDtjb25zdCByPWUubGVuZ3RoO2lmKDA9PT1yfHxpKXJldHVybiBjcmVhdGVCaWRpVGV4dChlLGEsaSk7Z3IubGVuZ3RoPXI7SXIubGVuZ3RoPXI7bGV0IHMsbixvPTA7Zm9yKHM9MDtzPHI7KytzKXtncltzXT1lLmNoYXJBdChzKTtjb25zdCB0PWUuY2hhckNvZGVBdChzKTtsZXQgaT0iTCI7aWYodDw9MjU1KWk9bnJbdF07ZWxzZSBpZigxNDI0PD10JiZ0PD0xNTI0KWk9IlIiO2Vsc2UgaWYoMTUzNjw9dCYmdDw9MTc5MSl7aT1vclsyNTUmdF07aXx8d2FybigiQmlkaTogaW52YWxpZCBVbmljb2RlIGNoYXJhY3RlciAiK3QudG9TdHJpbmcoMTYpKX1lbHNlKDE3OTI8PXQmJnQ8PTIyMjB8fDY0MzM2PD10JiZ0PD02NTAyM3x8NjUxMzY8PXQmJnQ8PTY1Mjc5KSYmKGk9IkFMIik7IlIiIT09aSYmIkFMIiE9PWkmJiJBTiIhPT1pfHxvKys7SXJbc109aX1pZigwPT09byl7YT0hMDtyZXR1cm4gY3JlYXRlQmlkaVRleHQoZSxhKX1pZigtMT09PXQpaWYoby9yPC4zJiZyPjQpe2E9ITA7dD0wfWVsc2V7YT0hMTt0PTF9Y29uc3QgZz1bXTtmb3Iocz0wO3M8cjsrK3MpZ1tzXT10O2NvbnN0IGM9aXNPZGQodCk/IlIiOiJMIixsPWMsaD1sO2xldCBDLFE9bDtmb3Iocz0wO3M8cjsrK3MpIk5TTSI9PT1JcltzXT9JcltzXT1ROlE9SXJbc107UT1sO2ZvcihzPTA7czxyOysrcyl7Qz1JcltzXTsiRU4iPT09Qz9JcltzXT0iQUwiPT09UT8iQU4iOiJFTiI6IlIiIT09QyYmIkwiIT09QyYmIkFMIiE9PUN8fChRPUMpfWZvcihzPTA7czxyOysrcyl7Qz1JcltzXTsiQUwiPT09QyYmKElyW3NdPSJSIil9Zm9yKHM9MTtzPHItMTsrK3MpeyJFUyI9PT1JcltzXSYmIkVOIj09PUlyW3MtMV0mJiJFTiI9PT1JcltzKzFdJiYoSXJbc109IkVOIik7IkNTIiE9PUlyW3NdfHwiRU4iIT09SXJbcy0xXSYmIkFOIiE9PUlyW3MtMV18fElyW3MrMV0hPT1JcltzLTFdfHwoSXJbc109SXJbcy0xXSl9Zm9yKHM9MDtzPHI7KytzKWlmKCJFTiI9PT1JcltzXSl7Zm9yKGxldCBlPXMtMTtlPj0wJiYiRVQiPT09SXJbZV07LS1lKUlyW2VdPSJFTiI7Zm9yKGxldCBlPXMrMTtlPHImJiJFVCI9PT1JcltlXTsrK2UpSXJbZV09IkVOIn1mb3Iocz0wO3M8cjsrK3Mpe0M9SXJbc107IldTIiE9PUMmJiJFUyIhPT1DJiYiRVQiIT09QyYmIkNTIiE9PUN8fChJcltzXT0iT04iKX1RPWw7Zm9yKHM9MDtzPHI7KytzKXtDPUlyW3NdOyJFTiI9PT1DP0lyW3NdPSJMIj09PVE/IkwiOiJFTiI6IlIiIT09QyYmIkwiIT09Q3x8KFE9Qyl9Zm9yKHM9MDtzPHI7KytzKWlmKCJPTiI9PT1JcltzXSl7Y29uc3QgZT1maW5kVW5lcXVhbChJcixzKzEsIk9OIik7bGV0IHQ9bDtzPjAmJih0PUlyW3MtMV0pO2xldCBpPWg7ZSsxPHImJihpPUlyW2UrMV0pOyJMIiE9PXQmJih0PSJSIik7IkwiIT09aSYmKGk9IlIiKTt0PT09aSYmc2V0VmFsdWVzKElyLHMsZSx0KTtzPWUtMX1mb3Iocz0wO3M8cjsrK3MpIk9OIj09PUlyW3NdJiYoSXJbc109Yyk7Zm9yKHM9MDtzPHI7KytzKXtDPUlyW3NdO2lzRXZlbihnW3NdKT8iUiI9PT1DP2dbc10rPTE6IkFOIiE9PUMmJiJFTiIhPT1DfHwoZ1tzXSs9Mik6IkwiIT09QyYmIkFOIiE9PUMmJiJFTiIhPT1DfHwoZ1tzXSs9MSl9bGV0IEUsdT0tMSxkPTk5O2ZvcihzPTAsbj1nLmxlbmd0aDtzPG47KytzKXtFPWdbc107dTxFJiYodT1FKTtkPkUmJmlzT2RkKEUpJiYoZD1FKX1mb3IoRT11O0U+PWQ7LS1FKXtsZXQgZT0tMTtmb3Iocz0wLG49Zy5sZW5ndGg7czxuOysrcylpZihnW3NdPEUpe2lmKGU+PTApe3JldmVyc2VWYWx1ZXMoZ3IsZSxzKTtlPS0xfX1lbHNlIGU8MCYmKGU9cyk7ZT49MCYmcmV2ZXJzZVZhbHVlcyhncixlLGcubGVuZ3RoKX1mb3Iocz0wLG49Z3IubGVuZ3RoO3M8bjsrK3Mpe2NvbnN0IGU9Z3Jbc107IjwiIT09ZSYmIj4iIT09ZXx8KGdyW3NdPSIiKX1yZXR1cm4gY3JlYXRlQmlkaVRleHQoZ3Iuam9pbigiIiksYSl9Y29uc3QgY3I9e3N0eWxlOiJub3JtYWwiLHdlaWdodDoibm9ybWFsIn0sbHI9e3N0eWxlOiJub3JtYWwiLHdlaWdodDoiYm9sZCJ9LGhyPXtzdHlsZToiaXRhbGljIix3ZWlnaHQ6Im5vcm1hbCJ9LENyPXtzdHlsZToiaXRhbGljIix3ZWlnaHQ6ImJvbGQifSxRcj1uZXcgTWFwKFtbIlRpbWVzLVJvbWFuIix7bG9jYWw6WyJUaW1lcyBOZXcgUm9tYW4iLCJUaW1lcy1Sb21hbiIsIlRpbWVzIiwiTGliZXJhdGlvbiBTZXJpZiIsIk5pbWJ1cyBSb21hbiIsIk5pbWJ1cyBSb21hbiBMIiwiVGlub3MiLCJUaG9ybmRhbGUiLCJUZVggR3lyZSBUZXJtZXMiLCJGcmVlU2VyaWYiLCJMaW51eCBMaWJlcnRpbmUgTyIsIkxpYmVydGludXMgU2VyaWYiLCJEZWphVnUgU2VyaWYiLCJCaXRzdHJlYW0gVmVyYSBTZXJpZiIsIlVidW50dSJdLHN0eWxlOmNyLHVsdGltYXRlOiJzZXJpZiJ9XSxbIlRpbWVzLUJvbGQiLHthbGlhczoiVGltZXMtUm9tYW4iLHN0eWxlOmxyLHVsdGltYXRlOiJzZXJpZiJ9XSxbIlRpbWVzLUl0YWxpYyIse2FsaWFzOiJUaW1lcy1Sb21hbiIsc3R5bGU6aHIsdWx0aW1hdGU6InNlcmlmIn1dLFsiVGltZXMtQm9sZEl0YWxpYyIse2FsaWFzOiJUaW1lcy1Sb21hbiIsc3R5bGU6Q3IsdWx0aW1hdGU6InNlcmlmIn1dLFsiSGVsdmV0aWNhIix7bG9jYWw6WyJIZWx2ZXRpY2EiLCJIZWx2ZXRpY2EgTmV1ZSIsIkFyaWFsIiwiQXJpYWwgTm92YSIsIkxpYmVyYXRpb24gU2FucyIsIkFyaW1vIiwiTmltYnVzIFNhbnMiLCJOaW1idXMgU2FucyBMIiwiQTAzMCIsIlRlWCBHeXJlIEhlcm9zIiwiRnJlZVNhbnMiLCJEZWphVnUgU2FucyIsIkFsYmFueSIsIkJpdHN0cmVhbSBWZXJhIFNhbnMiLCJBcmlhbCBVbmljb2RlIE1TIiwiTWljcm9zb2Z0IFNhbnMgU2VyaWYiLCJBcHBsZSBTeW1ib2xzIiwiQ2FudGFyZWxsIl0scGF0aDoiTGliZXJhdGlvblNhbnMtUmVndWxhci50dGYiLHN0eWxlOmNyLHVsdGltYXRlOiJzYW5zLXNlcmlmIn1dLFsiSGVsdmV0aWNhLUJvbGQiLHthbGlhczoiSGVsdmV0aWNhIixwYXRoOiJMaWJlcmF0aW9uU2Fucy1Cb2xkLnR0ZiIsc3R5bGU6bHIsdWx0aW1hdGU6InNhbnMtc2VyaWYifV0sWyJIZWx2ZXRpY2EtT2JsaXF1ZSIse2FsaWFzOiJIZWx2ZXRpY2EiLHBhdGg6IkxpYmVyYXRpb25TYW5zLUl0YWxpYy50dGYiLHN0eWxlOmhyLHVsdGltYXRlOiJzYW5zLXNlcmlmIn1dLFsiSGVsdmV0aWNhLUJvbGRPYmxpcXVlIix7YWxpYXM6IkhlbHZldGljYSIscGF0aDoiTGliZXJhdGlvblNhbnMtQm9sZEl0YWxpYy50dGYiLHN0eWxlOkNyLHVsdGltYXRlOiJzYW5zLXNlcmlmIn1dLFsiQ291cmllciIse2xvY2FsOlsiQ291cmllciIsIkNvdXJpZXIgTmV3IiwiTGliZXJhdGlvbiBNb25vIiwiTmltYnVzIE1vbm8iLCJOaW1idXMgTW9ubyBMIiwiQ291c2luZSIsIkN1bWJlcmxhbmQiLCJUZVggR3lyZSBDdXJzb3IiLCJGcmVlTW9ubyIsIkxpbnV4IExpYmVydGluZSBNb25vIE8iLCJMaWJlcnRpbnVzIE1vbm8iXSxzdHlsZTpjcix1bHRpbWF0ZToibW9ub3NwYWNlIn1dLFsiQ291cmllci1Cb2xkIix7YWxpYXM6IkNvdXJpZXIiLHN0eWxlOmxyLHVsdGltYXRlOiJtb25vc3BhY2UifV0sWyJDb3VyaWVyLU9ibGlxdWUiLHthbGlhczoiQ291cmllciIsc3R5bGU6aHIsdWx0aW1hdGU6Im1vbm9zcGFjZSJ9XSxbIkNvdXJpZXItQm9sZE9ibGlxdWUiLHthbGlhczoiQ291cmllciIsc3R5bGU6Q3IsdWx0aW1hdGU6Im1vbm9zcGFjZSJ9XSxbIkFyaWFsQmxhY2siLHtsb2NhbDpbIkFyaWFsIEJsYWNrIl0sc3R5bGU6e3N0eWxlOiJub3JtYWwiLHdlaWdodDoiOTAwIn0sZmFsbGJhY2s6IkhlbHZldGljYS1Cb2xkIn1dLFsiQXJpYWxCbGFjay1Cb2xkIix7YWxpYXM6IkFyaWFsQmxhY2sifV0sWyJBcmlhbEJsYWNrLUl0YWxpYyIse2FsaWFzOiJBcmlhbEJsYWNrIixzdHlsZTp7c3R5bGU6Iml0YWxpYyIsd2VpZ2h0OiI5MDAifSxmYWxsYmFjazoiSGVsdmV0aWNhLUJvbGRPYmxpcXVlIn1dLFsiQXJpYWxCbGFjay1Cb2xkSXRhbGljIix7YWxpYXM6IkFyaWFsQmxhY2stSXRhbGljIn1dLFsiQXJpYWxOYXJyb3ciLHtsb2NhbDpbIkFyaWFsIE5hcnJvdyIsIkxpYmVyYXRpb24gU2FucyBOYXJyb3ciLCJIZWx2ZXRpY2EgQ29uZGVuc2VkIiwiTmltYnVzIFNhbnMgTmFycm93IiwiVGVYIEd5cmUgSGVyb3MgQ24iXSxzdHlsZTpjcixmYWxsYmFjazoiSGVsdmV0aWNhIn1dLFsiQXJpYWxOYXJyb3ctQm9sZCIse2FsaWFzOiJBcmlhbE5hcnJvdyIsc3R5bGU6bHIsZmFsbGJhY2s6IkhlbHZldGljYS1Cb2xkIn1dLFsiQXJpYWxOYXJyb3ctSXRhbGljIix7YWxpYXM6IkFyaWFsTmFycm93IixzdHlsZTpocixmYWxsYmFjazoiSGVsdmV0aWNhLU9ibGlxdWUifV0sWyJBcmlhbE5hcnJvdy1Cb2xkSXRhbGljIix7YWxpYXM6IkFyaWFsTmFycm93IixzdHlsZTpDcixmYWxsYmFjazoiSGVsdmV0aWNhLUJvbGRPYmxpcXVlIn1dLFsiQ2FsaWJyaSIse2xvY2FsOlsiQ2FsaWJyaSIsIkNhcmxpdG8iXSxzdHlsZTpjcixmYWxsYmFjazoiSGVsdmV0aWNhIn1dLFsiQ2FsaWJyaS1Cb2xkIix7YWxpYXM6IkNhbGlicmkiLHN0eWxlOmxyLGZhbGxiYWNrOiJIZWx2ZXRpY2EtQm9sZCJ9XSxbIkNhbGlicmktSXRhbGljIix7YWxpYXM6IkNhbGlicmkiLHN0eWxlOmhyLGZhbGxiYWNrOiJIZWx2ZXRpY2EtT2JsaXF1ZSJ9XSxbIkNhbGlicmktQm9sZEl0YWxpYyIse2FsaWFzOiJDYWxpYnJpIixzdHlsZTpDcixmYWxsYmFjazoiSGVsdmV0aWNhLUJvbGRPYmxpcXVlIn1dLFsiV2luZ2RpbmdzIix7bG9jYWw6WyJXaW5nZGluZ3MiLCJVUlcgRGluZ2JhdHMiXSxzdHlsZTpjcn1dLFsiV2luZ2RpbmdzLVJlZ3VsYXIiLHthbGlhczoiV2luZ2RpbmdzIn1dLFsiV2luZ2RpbmdzLUJvbGQiLHthbGlhczoiV2luZ2RpbmdzIn1dXSksRXI9bmV3IE1hcChbWyJBcmlhbC1CbGFjayIsIkFyaWFsQmxhY2siXV0pO2Z1bmN0aW9uIGdldEZhbWlseU5hbWUoZSl7Y29uc3QgdD1uZXcgU2V0KFsidGhpbiIsImV4dHJhbGlnaHQiLCJ1bHRyYWxpZ2h0IiwiZGVtaWxpZ2h0Iiwic2VtaWxpZ2h0IiwibGlnaHQiLCJib29rIiwicmVndWxhciIsIm5vcm1hbCIsIm1lZGl1bSIsImRlbWlib2xkIiwic2VtaWJvbGQiLCJib2xkIiwiZXh0cmFib2xkIiwidWx0cmFib2xkIiwiYmxhY2siLCJoZWF2eSIsImV4dHJhYmxhY2siLCJ1bHRyYWJsYWNrIiwicm9tYW4iLCJpdGFsaWMiLCJvYmxpcXVlIiwidWx0cmFjb25kZW5zZWQiLCJleHRyYWNvbmRlbnNlZCIsImNvbmRlbnNlZCIsInNlbWljb25kZW5zZWQiLCJub3JtYWwiLCJzZW1pZXhwYW5kZWQiLCJleHBhbmRlZCIsImV4dHJhZXhwYW5kZWQiLCJ1bHRyYWV4cGFuZGVkIiwiYm9sZGl0YWxpYyJdKTtyZXR1cm4gZS5zcGxpdCgvWy0gLCtdKy9nKS5maWx0ZXIoKGU9PiF0LmhhcyhlLnRvTG93ZXJDYXNlKCkpKSkuam9pbigiICIpfWZ1bmN0aW9uIGdlbmVyYXRlRm9udCh7YWxpYXM6ZSxsb2NhbDp0LHBhdGg6aSxmYWxsYmFjazphLHN0eWxlOnIsdWx0aW1hdGU6c30sbixvLGc9ITAsYz0hMCxsPSIiKXtjb25zdCBoPXtzdHlsZTpudWxsLHVsdGltYXRlOm51bGx9O2lmKHQpe2NvbnN0IGU9bD9gICR7bH1gOiIiO2Zvcihjb25zdCBpIG9mIHQpbi5wdXNoKGBsb2NhbCgke2l9JHtlfSlgKX1pZihlKXtjb25zdCB0PVFyLmdldChlKSxzPWx8fGZ1bmN0aW9uIGdldFN0eWxlVG9BcHBlbmQoZSl7c3dpdGNoKGUpe2Nhc2UgbHI6cmV0dXJuIkJvbGQiO2Nhc2UgaHI6cmV0dXJuIkl0YWxpYyI7Y2FzZSBDcjpyZXR1cm4iQm9sZCBJdGFsaWMiO2RlZmF1bHQ6aWYoImJvbGQiPT09ZT8ud2VpZ2h0KXJldHVybiJCb2xkIjtpZigiaXRhbGljIj09PWU/LnN0eWxlKXJldHVybiJJdGFsaWMifXJldHVybiIifShyKTtPYmplY3QuYXNzaWduKGgsZ2VuZXJhdGVGb250KHQsbixvLGcmJiFhLGMmJiFpLHMpKX1yJiYoaC5zdHlsZT1yKTtzJiYoaC51bHRpbWF0ZT1zKTtpZihnJiZhKXtjb25zdCBlPVFyLmdldChhKSx7dWx0aW1hdGU6dH09Z2VuZXJhdGVGb250KGUsbixvLGcsYyYmIWksbCk7aC51bHRpbWF0ZXx8PXR9YyYmaSYmbyYmbi5wdXNoKGB1cmwoJHtvfSR7aX0pYCk7cmV0dXJuIGh9ZnVuY3Rpb24gZ2V0Rm9udFN1YnN0aXR1dGlvbihlLHQsaSxhLHIscyl7aWYoYS5zdGFydHNXaXRoKCJJbnZhbGlkUERGanNGb250XyIpKXJldHVybiBudWxsOyJUcnVlVHlwZSIhPT1zJiYiVHlwZTEiIT09c3x8IS9eW0EtWl17Nn1cKy8udGVzdChhKXx8KGE9YS5zbGljZSg3KSk7Y29uc3Qgbj1hPW5vcm1hbGl6ZUZvbnROYW1lKGEpO2xldCBvPWUuZ2V0KG4pO2lmKG8pcmV0dXJuIG87bGV0IGc9UXIuZ2V0KGEpO2lmKCFnKWZvcihjb25zdFtlLHRdb2YgRXIpaWYoYS5zdGFydHNXaXRoKGUpKXthPWAke3R9JHthLnN1YnN0cmluZyhlLmxlbmd0aCl9YDtnPVFyLmdldChhKTticmVha31sZXQgYz0hMTtpZighZyl7Zz1Rci5nZXQocik7Yz0hMH1jb25zdCBsPWAke3QuZ2V0RG9jSWQoKX1fcyR7dC5jcmVhdGVGb250SWQoKX1gO2lmKCFnKXtpZighdmFsaWRhdGVGb250TmFtZShhKSl7d2FybihgQ2Fubm90IHN1YnN0aXR1dGUgdGhlIGZvbnQgYmVjYXVzZSBvZiBpdHMgbmFtZTogJHthfWApO2Uuc2V0KG4sbnVsbCk7cmV0dXJuIG51bGx9Y29uc3QgdD0vYm9sZC9naS50ZXN0KGEpLGk9L29ibGlxdWV8aXRhbGljL2dpLnRlc3QoYSkscj10JiZpJiZDcnx8dCYmbHJ8fGkmJmhyfHxjcjtvPXtjc3M6YCIke2dldEZhbWlseU5hbWUoYSl9Iiwke2x9YCxndWVzc0ZhbGxiYWNrOiEwLGxvYWRlZE5hbWU6bCxiYXNlRm9udE5hbWU6YSxzcmM6YGxvY2FsKCR7YX0pYCxzdHlsZTpyfTtlLnNldChuLG8pO3JldHVybiBvfWNvbnN0IGg9W107YyYmdmFsaWRhdGVGb250TmFtZShhKSYmaC5wdXNoKGBsb2NhbCgke2F9KWApO2NvbnN0e3N0eWxlOkMsdWx0aW1hdGU6UX09Z2VuZXJhdGVGb250KGcsaCxpKSxFPW51bGw9PT1RLHU9RT8iIjpgLCR7UX1gO289e2NzczpgIiR7Z2V0RmFtaWx5TmFtZShhKX0iLCR7bH0ke3V9YCxndWVzc0ZhbGxiYWNrOkUsbG9hZGVkTmFtZTpsLGJhc2VGb250TmFtZTphLHNyYzpoLmpvaW4oIiwiKSxzdHlsZTpDfTtlLnNldChuLG8pO3JldHVybiBvfWNsYXNzIEltYWdlUmVzaXplcntzdGF0aWMjUj0yMDQ4O3N0YXRpYyN5PUZlYXR1cmVUZXN0LmlzSW1hZ2VEZWNvZGVyU3VwcG9ydGVkO2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5faW1nRGF0YT1lO3RoaXMuX2lzTWFzaz10fXN0YXRpYyBnZXQgY2FuVXNlSW1hZ2VEZWNvZGVyKCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJjYW5Vc2VJbWFnZURlY29kZXIiLHRoaXMuI3k/SW1hZ2VEZWNvZGVyLmlzVHlwZVN1cHBvcnRlZCgiaW1hZ2UvYm1wIik6UHJvbWlzZS5yZXNvbHZlKCExKSl9c3RhdGljIG5lZWRzVG9CZVJlc2l6ZWQoZSx0KXtpZihlPD10aGlzLiNSJiZ0PD10aGlzLiNSKXJldHVybiExO2NvbnN0e01BWF9ESU06aX09dGhpcztpZihlPml8fHQ+aSlyZXR1cm4hMDtjb25zdCBhPWUqdDtpZih0aGlzLl9oYXNNYXhBcmVhKXJldHVybiBhPnRoaXMuTUFYX0FSRUE7aWYoYTx0aGlzLiNSKioyKXJldHVybiExO2lmKHRoaXMuX2FyZUdvb2REaW1zKGUsdCkpe3RoaXMuI1I9TWF0aC5tYXgodGhpcy4jUixNYXRoLmZsb29yKE1hdGguc3FydChlKnQpKSk7cmV0dXJuITF9dGhpcy4jUj10aGlzLl9ndWVzc01heCh0aGlzLiNSLGksMTI4LDApO3JldHVybiBhPih0aGlzLk1BWF9BUkVBPXRoaXMuI1IqKjIpfXN0YXRpYyBnZXQgTUFYX0RJTSgpe3JldHVybiBzaGFkb3codGhpcywiTUFYX0RJTSIsdGhpcy5fZ3Vlc3NNYXgoMjA0OCw2NTUzNywwLDEpKX1zdGF0aWMgZ2V0IE1BWF9BUkVBKCl7dGhpcy5faGFzTWF4QXJlYT0hMDtyZXR1cm4gc2hhZG93KHRoaXMsIk1BWF9BUkVBIix0aGlzLl9ndWVzc01heCh0aGlzLiNSLHRoaXMuTUFYX0RJTSwxMjgsMCkqKjIpfXN0YXRpYyBzZXQgTUFYX0FSRUEoZSl7aWYoZT49MCl7dGhpcy5faGFzTWF4QXJlYT0hMDtzaGFkb3codGhpcywiTUFYX0FSRUEiLGUpfX1zdGF0aWMgc2V0T3B0aW9ucyh7Y2FudmFzTWF4QXJlYUluQnl0ZXM6ZT0tMSxpc0ltYWdlRGVjb2RlclN1cHBvcnRlZDp0PSExfSl7dGhpcy5faGFzTWF4QXJlYXx8KHRoaXMuTUFYX0FSRUE9ZT4+Mik7dGhpcy4jeT10fXN0YXRpYyBfYXJlR29vZERpbXMoZSx0KXt0cnl7Y29uc3QgaT1uZXcgT2Zmc2NyZWVuQ2FudmFzKGUsdCksYT1pLmdldENvbnRleHQoIjJkIik7YS5maWxsUmVjdCgwLDAsMSwxKTtjb25zdCByPWEuZ2V0SW1hZ2VEYXRhKDAsMCwxLDEpLmRhdGFbM107aS53aWR0aD1pLmhlaWdodD0xO3JldHVybiAwIT09cn1jYXRjaHtyZXR1cm4hMX19c3RhdGljIF9ndWVzc01heChlLHQsaSxhKXtmb3IoO2UraSsxPHQ7KXtjb25zdCBpPU1hdGguZmxvb3IoKGUrdCkvMikscj1hfHxpO3RoaXMuX2FyZUdvb2REaW1zKGkscik/ZT1pOnQ9aX1yZXR1cm4gZX1zdGF0aWMgYXN5bmMgY3JlYXRlSW1hZ2UoZSx0PSExKXtyZXR1cm4gbmV3IEltYWdlUmVzaXplcihlLHQpLl9jcmVhdGVJbWFnZSgpfWFzeW5jIF9jcmVhdGVJbWFnZSgpe2NvbnN0e19pbWdEYXRhOmV9PXRoaXMse3dpZHRoOnQsaGVpZ2h0Oml9PWU7aWYodCppKjQ+eXQpe2NvbnN0IGU9dGhpcy4jTigpO2lmKGUpcmV0dXJuIGV9Y29uc3QgYT10aGlzLl9lbmNvZGVCTVAoKTtsZXQgcixzO2lmKGF3YWl0IEltYWdlUmVzaXplci5jYW5Vc2VJbWFnZURlY29kZXIpe3I9bmV3IEltYWdlRGVjb2Rlcih7ZGF0YTphLHR5cGU6ImltYWdlL2JtcCIscHJlZmVyQW5pbWF0aW9uOiExLHRyYW5zZmVyOlthLmJ1ZmZlcl19KTtzPXIuZGVjb2RlKCkuY2F0Y2goKGU9Pnt3YXJuKGBCTVAgaW1hZ2UgZGVjb2RpbmcgZmFpbGVkOiAke2V9YCk7cmV0dXJuIGNyZWF0ZUltYWdlQml0bWFwKG5ldyBCbG9iKFt0aGlzLl9lbmNvZGVCTVAoKS5idWZmZXJdLHt0eXBlOiJpbWFnZS9ibXAifSkpfSkpLmZpbmFsbHkoKCgpPT57ci5jbG9zZSgpfSkpfWVsc2Ugcz1jcmVhdGVJbWFnZUJpdG1hcChuZXcgQmxvYihbYS5idWZmZXJdLHt0eXBlOiJpbWFnZS9ibXAifSkpO2NvbnN0e01BWF9BUkVBOm4sTUFYX0RJTTpvfT1JbWFnZVJlc2l6ZXIsZz1NYXRoLm1heCh0L28saS9vLE1hdGguc3FydCh0KmkvbikpLGM9TWF0aC5tYXgoZywyKSxsPU1hdGgucm91bmQoMTAqKGcrMS4yNSkpLzEwL2MsaD1NYXRoLmZsb29yKE1hdGgubG9nMihsKSksQz1uZXcgQXJyYXkoaCsyKS5maWxsKDIpO0NbMF09YztDLnNwbGljZSgtMSwxLGwvKDE8PGgpKTtsZXQgUT10LEU9aTtjb25zdCB1PWF3YWl0IHM7bGV0IGQ9dS5pbWFnZXx8dTtmb3IoY29uc3QgZSBvZiBDKXtjb25zdCB0PVEsaT1FO1E9TWF0aC5mbG9vcihRL2UpLTE7RT1NYXRoLmZsb29yKEUvZSktMTtjb25zdCBhPW5ldyBPZmZzY3JlZW5DYW52YXMoUSxFKTthLmdldENvbnRleHQoIjJkIikuZHJhd0ltYWdlKGQsMCwwLHQsaSwwLDAsUSxFKTtkLmNsb3NlKCk7ZD1hLnRyYW5zZmVyVG9JbWFnZUJpdG1hcCgpfWUuZGF0YT1udWxsO2UuYml0bWFwPWQ7ZS53aWR0aD1RO2UuaGVpZ2h0PUU7cmV0dXJuIGV9I04oKXtjb25zdHtfaW1nRGF0YTplfT10aGlzLHtkYXRhOnQsd2lkdGg6aSxoZWlnaHQ6YSxraW5kOnJ9PWUscz1pKmEqNCxuPU1hdGguY2VpbChNYXRoLmxvZzIocy95dCkpLG89aT4+bixnPWE+Pm47bGV0IGMsbD1hO3RyeXtjPW5ldyBVaW50OEFycmF5KHMpfWNhdGNoe2xldCBlPU1hdGguZmxvb3IoTWF0aC5sb2cyKHMrMSkpO2Zvcig7Oyl0cnl7Yz1uZXcgVWludDhBcnJheSgyKiplLTEpO2JyZWFrfWNhdGNoe2UtPTF9bD1NYXRoLmZsb29yKCgyKiplLTEpLyg0KmkpKTtjb25zdCB0PWkqbCo0O3Q8Yy5sZW5ndGgmJihjPW5ldyBVaW50OEFycmF5KHQpKX1jb25zdCBoPW5ldyBVaW50MzJBcnJheShjLmJ1ZmZlciksQz1uZXcgVWludDMyQXJyYXkobypnKTtsZXQgUT0wLEU9MDtjb25zdCB1PU1hdGguY2VpbChhL2wpLGQ9YSVsPT0wP2E6YSVsO2ZvcihsZXQgZT0wO2U8dTtlKyspe2NvbnN0IGE9ZTx1LTE/bDpkOyh7c3JjUG9zOlF9PWNvbnZlcnRUb1JHQkEoe2tpbmQ6cixzcmM6dCxkZXN0Omgsd2lkdGg6aSxoZWlnaHQ6YSxpbnZlcnNlRGVjb2RlOnRoaXMuX2lzTWFzayxzcmNQb3M6UX0pKTtmb3IobGV0IGU9MCx0PWE+Pm47ZTx0O2UrKyl7Y29uc3QgdD1oLnN1YmFycmF5KChlPDxuKSppKTtmb3IobGV0IGU9MDtlPG87ZSsrKUNbRSsrXT10W2U8PG5dfX1pZihJbWFnZVJlc2l6ZXIubmVlZHNUb0JlUmVzaXplZChvLGcpKXtlLmRhdGE9QztlLndpZHRoPW87ZS5oZWlnaHQ9ZztlLmtpbmQ9UjtyZXR1cm4gbnVsbH1jb25zdCBmPW5ldyBPZmZzY3JlZW5DYW52YXMobyxnKTtmLmdldENvbnRleHQoIjJkIix7d2lsbFJlYWRGcmVxdWVudGx5OiEwfSkucHV0SW1hZ2VEYXRhKG5ldyBJbWFnZURhdGEobmV3IFVpbnQ4Q2xhbXBlZEFycmF5KEMuYnVmZmVyKSxvLGcpLDAsMCk7ZS5kYXRhPW51bGw7ZS5iaXRtYXA9Zi50cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKTtlLndpZHRoPW87ZS5oZWlnaHQ9ZztyZXR1cm4gZX1fZW5jb2RlQk1QKCl7Y29uc3R7d2lkdGg6ZSxoZWlnaHQ6dCxraW5kOml9PXRoaXMuX2ltZ0RhdGE7bGV0IGEscj10aGlzLl9pbWdEYXRhLmRhdGEscz1uZXcgVWludDhBcnJheSgwKSxuPXMsbz0wO3N3aXRjaChpKXtjYXNlIFM6e2E9MTtzPW5ldyBVaW50OEFycmF5KHRoaXMuX2lzTWFzaz9bMjU1LDI1NSwyNTUsMjU1LDAsMCwwLDBdOlswLDAsMCwwLDI1NSwyNTUsMjU1LDI1NV0pO2NvbnN0IGk9ZSs3Pj4zLG49aSszJi00O2lmKGkhPT1uKXtjb25zdCBlPW5ldyBVaW50OEFycmF5KG4qdCk7bGV0IGE9MDtmb3IobGV0IHM9MCxvPXQqaTtzPG87cys9aSxhKz1uKWUuc2V0KHIuc3ViYXJyYXkocyxzK2kpLGEpO3I9ZX1icmVha31jYXNlIGs6YT0yNDtpZigzJmUpe2NvbnN0IGk9MyplLGE9aSszJi00LHM9YS1pLG49bmV3IFVpbnQ4QXJyYXkoYSp0KTtsZXQgbz0wO2ZvcihsZXQgZT0wLGE9dCppO2U8YTtlKz1pKXtjb25zdCB0PXIuc3ViYXJyYXkoZSxlK2kpO2ZvcihsZXQgZT0wO2U8aTtlKz0zKXtuW28rK109dFtlKzJdO25bbysrXT10W2UrMV07bltvKytdPXRbZV19bys9c31yPW59ZWxzZSBmb3IobGV0IGU9MCx0PXIubGVuZ3RoO2U8dDtlKz0zKXtjb25zdCB0PXJbZV07cltlXT1yW2UrMl07cltlKzJdPXR9YnJlYWs7Y2FzZSBSOmE9MzI7bz0zO249bmV3IFVpbnQ4QXJyYXkoNjgpO2NvbnN0IGk9bmV3IERhdGFWaWV3KG4uYnVmZmVyKTtpZihGZWF0dXJlVGVzdC5pc0xpdHRsZUVuZGlhbil7aS5zZXRVaW50MzIoMCwyNTUsITApO2kuc2V0VWludDMyKDQsNjUyODAsITApO2kuc2V0VWludDMyKDgsMTY3MTE2ODAsITApO2kuc2V0VWludDMyKDEyLDQyNzgxOTAwODAsITApfWVsc2V7aS5zZXRVaW50MzIoMCw0Mjc4MTkwMDgwLCEwKTtpLnNldFVpbnQzMig0LDE2NzExNjgwLCEwKTtpLnNldFVpbnQzMig4LDY1MjgwLCEwKTtpLnNldFVpbnQzMigxMiwyNTUsITApfWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGZvcm1hdCIpfWxldCBnPTA7Y29uc3QgYz00MCtuLmxlbmd0aCxsPTE0K2Mrcy5sZW5ndGgrci5sZW5ndGgsaD1uZXcgVWludDhBcnJheShsKSxDPW5ldyBEYXRhVmlldyhoLmJ1ZmZlcik7Qy5zZXRVaW50MTYoZywxOTc3OCwhMCk7Zys9MjtDLnNldFVpbnQzMihnLGwsITApO2crPTQ7Qy5zZXRVaW50MzIoZywwLCEwKTtnKz00O0Muc2V0VWludDMyKGcsMTQrYytzLmxlbmd0aCwhMCk7Zys9NDtDLnNldFVpbnQzMihnLGMsITApO2crPTQ7Qy5zZXRJbnQzMihnLGUsITApO2crPTQ7Qy5zZXRJbnQzMihnLC10LCEwKTtnKz00O0Muc2V0VWludDE2KGcsMSwhMCk7Zys9MjtDLnNldFVpbnQxNihnLGEsITApO2crPTI7Qy5zZXRVaW50MzIoZyxvLCEwKTtnKz00O0Muc2V0VWludDMyKGcsMCwhMCk7Zys9NDtDLnNldEludDMyKGcsMCwhMCk7Zys9NDtDLnNldEludDMyKGcsMCwhMCk7Zys9NDtDLnNldFVpbnQzMihnLHMubGVuZ3RoLzQsITApO2crPTQ7Qy5zZXRVaW50MzIoZywwLCEwKTtnKz00O2guc2V0KG4sZyk7Zys9bi5sZW5ndGg7aC5zZXQocyxnKTtnKz1zLmxlbmd0aDtoLnNldChyLGcpO3JldHVybiBofX1jb25zdCB1cj0zMjg1Mzc3NTIwLGRyPTQyOTQ5MDE3NjAsZnI9NjU1MzU7Y2xhc3MgTXVybXVySGFzaDNfNjR7Y29uc3RydWN0b3IoZSl7dGhpcy5oMT1lPzQyOTQ5NjcyOTUmZTp1cjt0aGlzLmgyPWU/NDI5NDk2NzI5NSZlOnVyfXVwZGF0ZShlKXtsZXQgdCxpO2lmKCJzdHJpbmciPT10eXBlb2YgZSl7dD1uZXcgVWludDhBcnJheSgyKmUubGVuZ3RoKTtpPTA7Zm9yKGxldCBhPTAscj1lLmxlbmd0aDthPHI7YSsrKXtjb25zdCByPWUuY2hhckNvZGVBdChhKTtpZihyPD0yNTUpdFtpKytdPXI7ZWxzZXt0W2krK109cj4+Pjg7dFtpKytdPTI1NSZyfX19ZWxzZXtpZighQXJyYXlCdWZmZXIuaXNWaWV3KGUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBkYXRhIGZvcm1hdCwgbXVzdCBiZSBhIHN0cmluZyBvciBUeXBlZEFycmF5LiIpO3Q9ZS5zbGljZSgpO2k9dC5ieXRlTGVuZ3RofWNvbnN0IGE9aT4+MixyPWktNCphLHM9bmV3IFVpbnQzMkFycmF5KHQuYnVmZmVyLDAsYSk7bGV0IG49MCxvPTAsZz10aGlzLmgxLGM9dGhpcy5oMjtjb25zdCBsPTM0MzI5MTgzNTMsaD00NjE4NDU5MDcsQz0xMTYwMSxRPTEzNzE1O2ZvcihsZXQgZT0wO2U8YTtlKyspaWYoMSZlKXtuPXNbZV07bj1uKmwmZHJ8bipDJmZyO249bjw8MTV8bj4+PjE3O249bipoJmRyfG4qUSZmcjtnXj1uO2c9Zzw8MTN8Zz4+PjE5O2c9NSpnKzM4NjQyOTIxOTZ9ZWxzZXtvPXNbZV07bz1vKmwmZHJ8bypDJmZyO289bzw8MTV8bz4+PjE3O289bypoJmRyfG8qUSZmcjtjXj1vO2M9Yzw8MTN8Yz4+PjE5O2M9NSpjKzM4NjQyOTIxOTZ9bj0wO3N3aXRjaChyKXtjYXNlIDM6bl49dFs0KmErMl08PDE2O2Nhc2UgMjpuXj10WzQqYSsxXTw8ODtjYXNlIDE6bl49dFs0KmFdO249bipsJmRyfG4qQyZmcjtuPW48PDE1fG4+Pj4xNztuPW4qaCZkcnxuKlEmZnI7MSZhP2dePW46Y149bn10aGlzLmgxPWc7dGhpcy5oMj1jfWhleGRpZ2VzdCgpe2xldCBlPXRoaXMuaDEsdD10aGlzLmgyO2VePXQ+Pj4xO2U9Mzk4MTgwNjc5NyplJmRyfDM2MDQ1KmUmZnI7dD00MjgzNTQzNTExKnQmZHJ8KDI5NTAxNjM3OTcqKHQ8PDE2fGU+Pj4xNikmZHIpPj4+MTY7ZV49dD4+PjE7ZT00NDQ5ODQ0MDMqZSZkcnw2MDQ5OSplJmZyO3Q9MzMwMTg4MjM2Nip0JmRyfCgzMTIwNDM3ODkzKih0PDwxNnxlPj4+MTYpJmRyKT4+PjE2O2VePXQ+Pj4xO3JldHVybihlPj4+MCkudG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDgsIjAiKSsodD4+PjApLnRvU3RyaW5nKDE2KS5wYWRTdGFydCg4LCIwIil9fWZ1bmN0aW9uIGFkZFN0YXRlKGUsdCxpLGEscil7bGV0IHM9ZTtmb3IobGV0IGU9MCxpPXQubGVuZ3RoLTE7ZTxpO2UrKyl7Y29uc3QgaT10W2VdO3M9c1tpXXx8PVtdfXNbdC5hdCgtMSldPXtjaGVja0ZuOmksaXRlcmF0ZUZuOmEscHJvY2Vzc0ZuOnJ9fWNvbnN0IHByPVtdO2FkZFN0YXRlKHByLFt4QSxIQSxBdCxMQV0sbnVsbCwoZnVuY3Rpb24gaXRlcmF0ZUlubGluZUltYWdlR3JvdXAoZSx0KXtjb25zdCBpPWUuZm5BcnJheSxhPSh0LShlLmlDdXJyLTMpKSU0O3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuIGlbdF09PT14QTtjYXNlIDE6cmV0dXJuIGlbdF09PT1IQTtjYXNlIDI6cmV0dXJuIGlbdF09PT1BdDtjYXNlIDM6cmV0dXJuIGlbdF09PT1MQX10aHJvdyBuZXcgRXJyb3IoYGl0ZXJhdGVJbmxpbmVJbWFnZUdyb3VwIC0gaW52YWxpZCBwb3M6ICR7YX1gKX0pLChmdW5jdGlvbiBmb3VuZElubGluZUltYWdlR3JvdXAoZSx0KXtjb25zdCBpPWUuZm5BcnJheSxhPWUuYXJnc0FycmF5LHI9ZS5pQ3VycixzPXItMyxuPXItMixvPXItMSxnPU1hdGgubWluKE1hdGguZmxvb3IoKHQtcykvNCksMjAwKTtpZihnPDEwKXJldHVybiB0LSh0LXMpJTQ7bGV0IGM9MDtjb25zdCBsPVtdO2xldCBoPTAsQz0xLFE9MTtmb3IobGV0IGU9MDtlPGc7ZSsrKXtjb25zdCB0PWFbbisoZTw8MildLGk9YVtvKyhlPDwyKV1bMF07aWYoQytpLndpZHRoPjFlMyl7Yz1NYXRoLm1heChjLEMpO1ErPWgrMjtDPTA7aD0wfWwucHVzaCh7dHJhbnNmb3JtOnQseDpDLHk6USx3Omkud2lkdGgsaDppLmhlaWdodH0pO0MrPWkud2lkdGgrMjtoPU1hdGgubWF4KGgsaS5oZWlnaHQpfWNvbnN0IEU9TWF0aC5tYXgoYyxDKSsxLHU9UStoKzEsZD1uZXcgVWludDhBcnJheShFKnUqNCksZj1FPDwyO2ZvcihsZXQgZT0wO2U8ZztlKyspe2NvbnN0IHQ9YVtvKyhlPDwyKV1bMF0uZGF0YSxpPWxbZV0udzw8MjtsZXQgcj0wLHM9bFtlXS54K2xbZV0ueSpFPDwyO2Quc2V0KHQuc3ViYXJyYXkoMCxpKSxzLWYpO2ZvcihsZXQgYT0wLG49bFtlXS5oO2E8bjthKyspe2Quc2V0KHQuc3ViYXJyYXkocixyK2kpLHMpO3IrPWk7cys9Zn1kLnNldCh0LnN1YmFycmF5KHItaSxyKSxzKTtmb3IoO3M+PTA7KXt0W3MtNF09dFtzXTt0W3MtM109dFtzKzFdO3Rbcy0yXT10W3MrMl07dFtzLTFdPXRbcyszXTt0W3MraV09dFtzK2ktNF07dFtzK2krMV09dFtzK2ktM107dFtzK2krMl09dFtzK2ktMl07dFtzK2krM109dFtzK2ktMV07cy09Zn19Y29uc3QgcD17d2lkdGg6RSxoZWlnaHQ6dX07aWYoZS5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCl7Y29uc3QgZT1uZXcgT2Zmc2NyZWVuQ2FudmFzKEUsdSk7ZS5nZXRDb250ZXh0KCIyZCIpLnB1dEltYWdlRGF0YShuZXcgSW1hZ2VEYXRhKG5ldyBVaW50OENsYW1wZWRBcnJheShkLmJ1ZmZlciksRSx1KSwwLDApO3AuYml0bWFwPWUudHJhbnNmZXJUb0ltYWdlQml0bWFwKCk7cC5kYXRhPW51bGx9ZWxzZXtwLmtpbmQ9UjtwLmRhdGE9ZH1pLnNwbGljZShzLDQqZyxldCk7YS5zcGxpY2Uocyw0KmcsW3AsbF0pO3JldHVybiBzKzF9KSk7YWRkU3RhdGUocHIsW3hBLEhBLF9lLExBXSxudWxsLChmdW5jdGlvbiBpdGVyYXRlSW1hZ2VNYXNrR3JvdXAoZSx0KXtjb25zdCBpPWUuZm5BcnJheSxhPSh0LShlLmlDdXJyLTMpKSU0O3N3aXRjaChhKXtjYXNlIDA6cmV0dXJuIGlbdF09PT14QTtjYXNlIDE6cmV0dXJuIGlbdF09PT1IQTtjYXNlIDI6cmV0dXJuIGlbdF09PT1fZTtjYXNlIDM6cmV0dXJuIGlbdF09PT1MQX10aHJvdyBuZXcgRXJyb3IoYGl0ZXJhdGVJbWFnZU1hc2tHcm91cCAtIGludmFsaWQgcG9zOiAke2F9YCl9KSwoZnVuY3Rpb24gZm91bmRJbWFnZU1hc2tHcm91cChlLHQpe2NvbnN0IGk9ZS5mbkFycmF5LGE9ZS5hcmdzQXJyYXkscj1lLmlDdXJyLHM9ci0zLG49ci0yLG89ci0xO2xldCBnPU1hdGguZmxvb3IoKHQtcykvNCk7aWYoZzwxMClyZXR1cm4gdC0odC1zKSU0O2xldCBjLGwsaD0hMTtjb25zdCBDPWFbb11bMF0sUT1hW25dWzBdLEU9YVtuXVsxXSx1PWFbbl1bMl0sZD1hW25dWzNdO2lmKEU9PT11KXtoPSEwO2M9bis0O2xldCBlPW8rNDtmb3IobGV0IHQ9MTt0PGc7dCsrLGMrPTQsZSs9NCl7bD1hW2NdO2lmKGFbZV1bMF0hPT1DfHxsWzBdIT09UXx8bFsxXSE9PUV8fGxbMl0hPT11fHxsWzNdIT09ZCl7dDwxMD9oPSExOmc9dDticmVha319fWlmKGgpe2c9TWF0aC5taW4oZywxZTMpO2NvbnN0IGU9bmV3IEZsb2F0MzJBcnJheSgyKmcpO2M9bjtmb3IobGV0IHQ9MDt0PGc7dCsrLGMrPTQpe2w9YVtjXTtlW3Q8PDFdPWxbNF07ZVsxKyh0PDwxKV09bFs1XX1pLnNwbGljZShzLDQqZyxpdCk7YS5zcGxpY2Uocyw0KmcsW0MsUSxFLHUsZCxlXSl9ZWxzZXtnPU1hdGgubWluKGcsMTAwKTtjb25zdCBlPVtdO2ZvcihsZXQgdD0wO3Q8Zzt0Kyspe2w9YVtuKyh0PDwyKV07Y29uc3QgaT1hW28rKHQ8PDIpXVswXTtlLnB1c2goe2RhdGE6aS5kYXRhLHdpZHRoOmkud2lkdGgsaGVpZ2h0OmkuaGVpZ2h0LGludGVycG9sYXRlOmkuaW50ZXJwb2xhdGUsY291bnQ6aS5jb3VudCx0cmFuc2Zvcm06bH0pfWkuc3BsaWNlKHMsNCpnLHplKTthLnNwbGljZShzLDQqZyxbZV0pfXJldHVybiBzKzF9KSk7YWRkU3RhdGUocHIsW3hBLEhBLCRlLExBXSwoZnVuY3Rpb24oZSl7Y29uc3QgdD1lLmFyZ3NBcnJheSxpPWUuaUN1cnItMjtyZXR1cm4gMD09PXRbaV1bMV0mJjA9PT10W2ldWzJdfSksKGZ1bmN0aW9uIGl0ZXJhdGVJbWFnZUdyb3VwKGUsdCl7Y29uc3QgaT1lLmZuQXJyYXksYT1lLmFyZ3NBcnJheSxyPSh0LShlLmlDdXJyLTMpKSU0O3N3aXRjaChyKXtjYXNlIDA6cmV0dXJuIGlbdF09PT14QTtjYXNlIDE6aWYoaVt0XSE9PUhBKXJldHVybiExO2NvbnN0IHI9ZS5pQ3Vyci0yLHM9YVtyXVswXSxuPWFbcl1bM107cmV0dXJuIGFbdF1bMF09PT1zJiYwPT09YVt0XVsxXSYmMD09PWFbdF1bMl0mJmFbdF1bM109PT1uO2Nhc2UgMjppZihpW3RdIT09JGUpcmV0dXJuITE7Y29uc3Qgbz1hW2UuaUN1cnItMV1bMF07cmV0dXJuIGFbdF1bMF09PT1vO2Nhc2UgMzpyZXR1cm4gaVt0XT09PUxBfXRocm93IG5ldyBFcnJvcihgaXRlcmF0ZUltYWdlR3JvdXAgLSBpbnZhbGlkIHBvczogJHtyfWApfSksKGZ1bmN0aW9uKGUsdCl7Y29uc3QgaT1lLmZuQXJyYXksYT1lLmFyZ3NBcnJheSxyPWUuaUN1cnIscz1yLTMsbj1yLTIsbz1hW3ItMV1bMF0sZz1hW25dWzBdLGM9YVtuXVszXSxsPU1hdGgubWluKE1hdGguZmxvb3IoKHQtcykvNCksMWUzKTtpZihsPDMpcmV0dXJuIHQtKHQtcyklNDtjb25zdCBoPW5ldyBGbG9hdDMyQXJyYXkoMipsKTtsZXQgQz1uO2ZvcihsZXQgZT0wO2U8bDtlKyssQys9NCl7Y29uc3QgdD1hW0NdO2hbZTw8MV09dFs0XTtoWzErKGU8PDEpXT10WzVdfWNvbnN0IFE9W28sZyxjLGhdO2kuc3BsaWNlKHMsNCpsLHR0KTthLnNwbGljZShzLDQqbCxRKTtyZXR1cm4gcysxfSkpO2FkZFN0YXRlKHByLFt0ZSxvZSxoZSxCZSxpZV0sbnVsbCwoZnVuY3Rpb24gaXRlcmF0ZVNob3dUZXh0R3JvdXAoZSx0KXtjb25zdCBpPWUuZm5BcnJheSxhPWUuYXJnc0FycmF5LHI9KHQtKGUuaUN1cnItNCkpJTU7c3dpdGNoKHIpe2Nhc2UgMDpyZXR1cm4gaVt0XT09PXRlO2Nhc2UgMTpyZXR1cm4gaVt0XT09PW9lO2Nhc2UgMjpyZXR1cm4gaVt0XT09PWhlO2Nhc2UgMzppZihpW3RdIT09QmUpcmV0dXJuITE7Y29uc3Qgcj1lLmlDdXJyLTMscz1hW3JdWzBdLG49YVtyXVsxXTtyZXR1cm4gYVt0XVswXT09PXMmJmFbdF1bMV09PT1uO2Nhc2UgNDpyZXR1cm4gaVt0XT09PWllfXRocm93IG5ldyBFcnJvcihgaXRlcmF0ZVNob3dUZXh0R3JvdXAgLSBpbnZhbGlkIHBvczogJHtyfWApfSksKGZ1bmN0aW9uKGUsdCl7Y29uc3QgaT1lLmZuQXJyYXksYT1lLmFyZ3NBcnJheSxyPWUuaUN1cnIscz1yLTQsbj1yLTMsbz1yLTIsZz1yLTEsYz1yLGw9YVtuXVswXSxoPWFbbl1bMV07bGV0IEM9TWF0aC5taW4oTWF0aC5mbG9vcigodC1zKS81KSwxZTMpO2lmKEM8MylyZXR1cm4gdC0odC1zKSU1O2xldCBRPXM7aWYocz49NCYmaVtzLTRdPT09aVtuXSYmaVtzLTNdPT09aVtvXSYmaVtzLTJdPT09aVtnXSYmaVtzLTFdPT09aVtjXSYmYVtzLTRdWzBdPT09bCYmYVtzLTRdWzFdPT09aCl7QysrO1EtPTV9bGV0IEU9USs0O2ZvcihsZXQgZT0xO2U8QztlKyspe2kuc3BsaWNlKEUsMyk7YS5zcGxpY2UoRSwzKTtFKz0yfXJldHVybiBFKzF9KSk7Y2xhc3MgTnVsbE9wdGltaXplcntjb25zdHJ1Y3RvcihlKXt0aGlzLnF1ZXVlPWV9X29wdGltaXplKCl7fXB1c2goZSx0KXt0aGlzLnF1ZXVlLmZuQXJyYXkucHVzaChlKTt0aGlzLnF1ZXVlLmFyZ3NBcnJheS5wdXNoKHQpO3RoaXMuX29wdGltaXplKCl9Zmx1c2goKXt9cmVzZXQoKXt9fWNsYXNzIFF1ZXVlT3B0aW1pemVyIGV4dGVuZHMgTnVsbE9wdGltaXplcntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTt0aGlzLnN0YXRlPW51bGw7dGhpcy5jb250ZXh0PXtpQ3VycjowLGZuQXJyYXk6ZS5mbkFycmF5LGFyZ3NBcnJheTplLmFyZ3NBcnJheSxpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDohMX07dGhpcy5tYXRjaD1udWxsO3RoaXMubGFzdFByb2Nlc3NlZD0wfXNldCBpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZChlKXt0aGlzLmNvbnRleHQuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ9ZX1fb3B0aW1pemUoKXtjb25zdCBlPXRoaXMucXVldWUuZm5BcnJheTtsZXQgdD10aGlzLmxhc3RQcm9jZXNzZWQsaT1lLmxlbmd0aCxhPXRoaXMuc3RhdGUscj10aGlzLm1hdGNoO2lmKCFhJiYhciYmdCsxPT09aSYmIXByW2VbdF1dKXt0aGlzLmxhc3RQcm9jZXNzZWQ9aTtyZXR1cm59Y29uc3Qgcz10aGlzLmNvbnRleHQ7Zm9yKDt0PGk7KXtpZihyKXtpZigoMCxyLml0ZXJhdGVGbikocyx0KSl7dCsrO2NvbnRpbnVlfXQ9KDAsci5wcm9jZXNzRm4pKHMsdCsxKTtpPWUubGVuZ3RoO3I9bnVsbDthPW51bGw7aWYodD49aSlicmVha31hPShhfHxwcilbZVt0XV07aWYoYSYmIUFycmF5LmlzQXJyYXkoYSkpe3MuaUN1cnI9dDt0Kys7aWYoIWEuY2hlY2tGbnx8KDAsYS5jaGVja0ZuKShzKSl7cj1hO2E9bnVsbH1lbHNlIGE9bnVsbH1lbHNlIHQrK310aGlzLnN0YXRlPWE7dGhpcy5tYXRjaD1yO3RoaXMubGFzdFByb2Nlc3NlZD10fWZsdXNoKCl7Zm9yKDt0aGlzLm1hdGNoOyl7Y29uc3QgZT10aGlzLnF1ZXVlLmZuQXJyYXkubGVuZ3RoO3RoaXMubGFzdFByb2Nlc3NlZD0oMCx0aGlzLm1hdGNoLnByb2Nlc3NGbikodGhpcy5jb250ZXh0LGUpO3RoaXMubWF0Y2g9bnVsbDt0aGlzLnN0YXRlPW51bGw7dGhpcy5fb3B0aW1pemUoKX19cmVzZXQoKXt0aGlzLnN0YXRlPW51bGw7dGhpcy5tYXRjaD1udWxsO3RoaXMubGFzdFByb2Nlc3NlZD0wfX1jbGFzcyBPcGVyYXRvckxpc3R7c3RhdGljIENIVU5LX1NJWkU9MWUzO3N0YXRpYyBDSFVOS19TSVpFX0FCT1VUPXRoaXMuQ0hVTktfU0laRS01O2NvbnN0cnVjdG9yKGU9MCx0KXt0aGlzLl9zdHJlYW1TaW5rPXQ7dGhpcy5mbkFycmF5PVtdO3RoaXMuYXJnc0FycmF5PVtdO3RoaXMub3B0aW1pemVyPSF0fHxlJnU/bmV3IE51bGxPcHRpbWl6ZXIodGhpcyk6bmV3IFF1ZXVlT3B0aW1pemVyKHRoaXMpO3RoaXMuZGVwZW5kZW5jaWVzPW5ldyBTZXQ7dGhpcy5fdG90YWxMZW5ndGg9MDt0aGlzLndlaWdodD0wO3RoaXMuX3Jlc29sdmVkPXQ/bnVsbDpQcm9taXNlLnJlc29sdmUoKX1zZXQgaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQoZSl7dGhpcy5vcHRpbWl6ZXIuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ9ZX1nZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuYXJnc0FycmF5Lmxlbmd0aH1nZXQgcmVhZHkoKXtyZXR1cm4gdGhpcy5fcmVzb2x2ZWR8fHRoaXMuX3N0cmVhbVNpbmsucmVhZHl9Z2V0IHRvdGFsTGVuZ3RoKCl7cmV0dXJuIHRoaXMuX3RvdGFsTGVuZ3RoK3RoaXMubGVuZ3RofWFkZE9wKGUsdCl7dGhpcy5vcHRpbWl6ZXIucHVzaChlLHQpO3RoaXMud2VpZ2h0Kys7dGhpcy5fc3RyZWFtU2luayYmKHRoaXMud2VpZ2h0Pj1PcGVyYXRvckxpc3QuQ0hVTktfU0laRXx8dGhpcy53ZWlnaHQ+PU9wZXJhdG9yTGlzdC5DSFVOS19TSVpFX0FCT1VUJiYoZT09PUxBfHxlPT09aWUpKSYmdGhpcy5mbHVzaCgpfWFkZEltYWdlT3BzKGUsdCxpLGE9ITEpe2lmKGEpe3RoaXMuYWRkT3AoeEEpO3RoaXMuYWRkT3AoVUEsW1tbIlNNYXNrIiwhMV1dXSl9dm9pZCAwIT09aSYmdGhpcy5hZGRPcChLZSxbIk9DIixpXSk7dGhpcy5hZGRPcChlLHQpO3ZvaWQgMCE9PWkmJnRoaXMuYWRkT3AoVGUsW10pO2EmJnRoaXMuYWRkT3AoTEEpfWFkZERlcGVuZGVuY3koZSl7aWYoIXRoaXMuZGVwZW5kZW5jaWVzLmhhcyhlKSl7dGhpcy5kZXBlbmRlbmNpZXMuYWRkKGUpO3RoaXMuYWRkT3AoREEsW2VdKX19YWRkRGVwZW5kZW5jaWVzKGUpe2Zvcihjb25zdCB0IG9mIGUpdGhpcy5hZGREZXBlbmRlbmN5KHQpfWFkZE9wTGlzdChlKXtpZihlIGluc3RhbmNlb2YgT3BlcmF0b3JMaXN0KXtmb3IoY29uc3QgdCBvZiBlLmRlcGVuZGVuY2llcyl0aGlzLmRlcGVuZGVuY2llcy5hZGQodCk7Zm9yKGxldCB0PTAsaT1lLmxlbmd0aDt0PGk7dCsrKXRoaXMuYWRkT3AoZS5mbkFycmF5W3RdLGUuYXJnc0FycmF5W3RdKX1lbHNlIHdhcm4oJ2FkZE9wTGlzdCAtIGlnbm9yaW5nIGludmFsaWQgIm9wTGlzdCIgcGFyYW1ldGVyLicpfWdldElSKCl7cmV0dXJue2ZuQXJyYXk6dGhpcy5mbkFycmF5LGFyZ3NBcnJheTp0aGlzLmFyZ3NBcnJheSxsZW5ndGg6dGhpcy5sZW5ndGh9fWdldCBfdHJhbnNmZXJzKCl7Y29uc3QgZT1bXSx7Zm5BcnJheTp0LGFyZ3NBcnJheTppLGxlbmd0aDphfT10aGlzO2ZvcihsZXQgcj0wO3I8YTtyKyspc3dpdGNoKHRbcl0pe2Nhc2UgQXQ6Y2FzZSBldDpjYXNlIF9lOmNvbnN0IHQ9aVtyXVswXTshdC5jYWNoZWQmJnQuZGF0YT8uYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXImJmUucHVzaCh0LmRhdGEuYnVmZmVyKX1yZXR1cm4gZX1mbHVzaChlPSExLHQ9bnVsbCl7dGhpcy5vcHRpbWl6ZXIuZmx1c2goKTtjb25zdCBpPXRoaXMubGVuZ3RoO3RoaXMuX3RvdGFsTGVuZ3RoKz1pO3RoaXMuX3N0cmVhbVNpbmsuZW5xdWV1ZSh7Zm5BcnJheTp0aGlzLmZuQXJyYXksYXJnc0FycmF5OnRoaXMuYXJnc0FycmF5LGxhc3RDaHVuazplLHNlcGFyYXRlQW5ub3RzOnQsbGVuZ3RoOml9LDEsdGhpcy5fdHJhbnNmZXJzKTt0aGlzLmRlcGVuZGVuY2llcy5jbGVhcigpO3RoaXMuZm5BcnJheS5sZW5ndGg9MDt0aGlzLmFyZ3NBcnJheS5sZW5ndGg9MDt0aGlzLndlaWdodD0wO3RoaXMub3B0aW1pemVyLnJlc2V0KCl9fWZ1bmN0aW9uIGRlY29kZUFuZENsYW1wKGUsdCxpLGEpeyhlPXQrZSppKTwwP2U9MDplPmEmJihlPWEpO3JldHVybiBlfWZ1bmN0aW9uIHJlc2l6ZUltYWdlTWFzayhlLHQsaSxhLHIscyl7Y29uc3Qgbj1yKnM7bGV0IG87bz10PD04P25ldyBVaW50OEFycmF5KG4pOnQ8PTE2P25ldyBVaW50MTZBcnJheShuKTpuZXcgVWludDMyQXJyYXkobik7Y29uc3QgZz1pL3IsYz1hL3M7bGV0IGwsaCxDLFEsRT0wO2NvbnN0IHU9bmV3IFVpbnQxNkFycmF5KHIpLGQ9aTtmb3IobD0wO2w8cjtsKyspdVtsXT1NYXRoLmZsb29yKGwqZyk7Zm9yKGw9MDtsPHM7bCsrKXtDPU1hdGguZmxvb3IobCpjKSpkO2ZvcihoPTA7aDxyO2grKyl7UT1DK3VbaF07b1tFKytdPWVbUV19fXJldHVybiBvfWNsYXNzIFBERkltYWdle2NvbnN0cnVjdG9yKHt4cmVmOmUscmVzOnQsaW1hZ2U6aSxpc0lubGluZTphPSExLHNtYXNrOnI9bnVsbCxtYXNrOnM9bnVsbCxpc01hc2s6bj0hMSxwZGZGdW5jdGlvbkZhY3Rvcnk6byxsb2NhbENvbG9yU3BhY2VDYWNoZTpnfSl7dGhpcy5pbWFnZT1pO2NvbnN0IGM9aS5kaWN0LGw9Yy5nZXQoIkYiLCJGaWx0ZXIiKTtsZXQgaDtpZihsIGluc3RhbmNlb2YgTmFtZSloPWwubmFtZTtlbHNlIGlmKEFycmF5LmlzQXJyYXkobCkpe2NvbnN0IHQ9ZS5mZXRjaElmUmVmKGxbMF0pO3QgaW5zdGFuY2VvZiBOYW1lJiYoaD10Lm5hbWUpfXN3aXRjaChoKXtjYXNlIkpQWERlY29kZSI6KHt3aWR0aDppLndpZHRoLGhlaWdodDppLmhlaWdodCxjb21wb25lbnRzQ291bnQ6aS5udW1Db21wcyxiaXRzUGVyQ29tcG9uZW50OmkuYml0c1BlckNvbXBvbmVudH09SnB4SW1hZ2UucGFyc2VJbWFnZVByb3BlcnRpZXMoaS5zdHJlYW0pKTtpLnN0cmVhbS5yZXNldCgpO3RoaXMuanB4RGVjb2Rlck9wdGlvbnM9e251bUNvbXBvbmVudHM6MCxpc0luZGV4ZWRDb2xvcm1hcDohMSxzbWFza0luRGF0YTpjLmhhcygiU01hc2tJbkRhdGEiKX07YnJlYWs7Y2FzZSJKQklHMkRlY29kZSI6aS5iaXRzUGVyQ29tcG9uZW50PTE7aS5udW1Db21wcz0xfWxldCBDPWMuZ2V0KCJXIiwiV2lkdGgiKSxRPWMuZ2V0KCJIIiwiSGVpZ2h0Iik7aWYoTnVtYmVyLmlzSW50ZWdlcihpLndpZHRoKSYmaS53aWR0aD4wJiZOdW1iZXIuaXNJbnRlZ2VyKGkuaGVpZ2h0KSYmaS5oZWlnaHQ+MCYmKGkud2lkdGghPT1DfHxpLmhlaWdodCE9PVEpKXt3YXJuKCJQREZJbWFnZSAtIHVzaW5nIHRoZSBXaWR0aC9IZWlnaHQgb2YgdGhlIGltYWdlIGRhdGEsIHJhdGhlciB0aGFuIHRoZSBpbWFnZSBkaWN0aW9uYXJ5LiIpO0M9aS53aWR0aDtRPWkuaGVpZ2h0fWlmKEM8MXx8UTwxKXRocm93IG5ldyBGb3JtYXRFcnJvcihgSW52YWxpZCBpbWFnZSB3aWR0aDogJHtDfSBvciBoZWlnaHQ6ICR7UX1gKTt0aGlzLndpZHRoPUM7dGhpcy5oZWlnaHQ9UTt0aGlzLmludGVycG9sYXRlPWMuZ2V0KCJJIiwiSW50ZXJwb2xhdGUiKTt0aGlzLmltYWdlTWFzaz1jLmdldCgiSU0iLCJJbWFnZU1hc2siKXx8ITE7dGhpcy5tYXR0ZT1jLmdldCgiTWF0dGUiKXx8ITE7bGV0IEU9aS5iaXRzUGVyQ29tcG9uZW50O2lmKCFFKXtFPWMuZ2V0KCJCUEMiLCJCaXRzUGVyQ29tcG9uZW50Iik7aWYoIUUpe2lmKCF0aGlzLmltYWdlTWFzayl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYEJpdHMgcGVyIGNvbXBvbmVudCBtaXNzaW5nIGluIGltYWdlOiAke3RoaXMuaW1hZ2VNYXNrfWApO0U9MX19dGhpcy5icGM9RTtpZighdGhpcy5pbWFnZU1hc2spe2xldCByPWMuZ2V0UmF3KCJDUyIpfHxjLmdldFJhdygiQ29sb3JTcGFjZSIpO2NvbnN0IHM9ISFyO2lmKHMpdGhpcy5qcHhEZWNvZGVyT3B0aW9ucz8uc21hc2tJbkRhdGEmJihyPU5hbWUuZ2V0KCJEZXZpY2VSR0JBIikpO2Vsc2UgaWYodGhpcy5qcHhEZWNvZGVyT3B0aW9ucylyPU5hbWUuZ2V0KCJEZXZpY2VSR0JBIik7ZWxzZSBzd2l0Y2goaS5udW1Db21wcyl7Y2FzZSAxOnI9TmFtZS5nZXQoIkRldmljZUdyYXkiKTticmVhaztjYXNlIDM6cj1OYW1lLmdldCgiRGV2aWNlUkdCIik7YnJlYWs7Y2FzZSA0OnI9TmFtZS5nZXQoIkRldmljZUNNWUsiKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcihgSW1hZ2VzIHdpdGggJHtpLm51bUNvbXBzfSBjb2xvciBjb21wb25lbnRzIG5vdCBzdXBwb3J0ZWQuYCl9dGhpcy5jb2xvclNwYWNlPUNvbG9yU3BhY2UucGFyc2Uoe2NzOnIseHJlZjplLHJlc291cmNlczphP3Q6bnVsbCxwZGZGdW5jdGlvbkZhY3Rvcnk6byxsb2NhbENvbG9yU3BhY2VDYWNoZTpnfSk7dGhpcy5udW1Db21wcz10aGlzLmNvbG9yU3BhY2UubnVtQ29tcHM7aWYodGhpcy5qcHhEZWNvZGVyT3B0aW9ucyl7dGhpcy5qcHhEZWNvZGVyT3B0aW9ucy5udW1Db21wb25lbnRzPXM/dGhpcy5udW1Db21wOjA7dGhpcy5qcHhEZWNvZGVyT3B0aW9ucy5pc0luZGV4ZWRDb2xvcm1hcD0iSW5kZXhlZCI9PT10aGlzLmNvbG9yU3BhY2UubmFtZX19dGhpcy5kZWNvZGU9Yy5nZXRBcnJheSgiRCIsIkRlY29kZSIpO3RoaXMubmVlZHNEZWNvZGU9ITE7aWYodGhpcy5kZWNvZGUmJih0aGlzLmNvbG9yU3BhY2UmJiF0aGlzLmNvbG9yU3BhY2UuaXNEZWZhdWx0RGVjb2RlKHRoaXMuZGVjb2RlLEUpfHxuJiYhQ29sb3JTcGFjZS5pc0RlZmF1bHREZWNvZGUodGhpcy5kZWNvZGUsMSkpKXt0aGlzLm5lZWRzRGVjb2RlPSEwO2NvbnN0IGU9KDE8PEUpLTE7dGhpcy5kZWNvZGVDb2VmZmljaWVudHM9W107dGhpcy5kZWNvZGVBZGRlbmRzPVtdO2NvbnN0IHQ9IkluZGV4ZWQiPT09dGhpcy5jb2xvclNwYWNlPy5uYW1lO2ZvcihsZXQgaT0wLGE9MDtpPHRoaXMuZGVjb2RlLmxlbmd0aDtpKz0yLCsrYSl7Y29uc3Qgcj10aGlzLmRlY29kZVtpXSxzPXRoaXMuZGVjb2RlW2krMV07dGhpcy5kZWNvZGVDb2VmZmljaWVudHNbYV09dD8ocy1yKS9lOnMtcjt0aGlzLmRlY29kZUFkZGVuZHNbYV09dD9yOmUqcn19aWYocil0aGlzLnNtYXNrPW5ldyBQREZJbWFnZSh7eHJlZjplLHJlczp0LGltYWdlOnIsaXNJbmxpbmU6YSxwZGZGdW5jdGlvbkZhY3Rvcnk6byxsb2NhbENvbG9yU3BhY2VDYWNoZTpnfSk7ZWxzZSBpZihzKWlmKHMgaW5zdGFuY2VvZiBCYXNlU3RyZWFtKXtzLmRpY3QuZ2V0KCJJTSIsIkltYWdlTWFzayIpP3RoaXMubWFzaz1uZXcgUERGSW1hZ2Uoe3hyZWY6ZSxyZXM6dCxpbWFnZTpzLGlzSW5saW5lOmEsaXNNYXNrOiEwLHBkZkZ1bmN0aW9uRmFjdG9yeTpvLGxvY2FsQ29sb3JTcGFjZUNhY2hlOmd9KTp3YXJuKCJJZ25vcmluZyAvTWFzayBpbiBpbWFnZSB3aXRob3V0IC9JbWFnZU1hc2suIil9ZWxzZSB0aGlzLm1hc2s9c31zdGF0aWMgYXN5bmMgYnVpbGRJbWFnZSh7eHJlZjplLHJlczp0LGltYWdlOmksaXNJbmxpbmU6YT0hMSxwZGZGdW5jdGlvbkZhY3Rvcnk6cixsb2NhbENvbG9yU3BhY2VDYWNoZTpzfSl7Y29uc3Qgbj1pO2xldCBvPW51bGwsZz1udWxsO2NvbnN0IGM9aS5kaWN0LmdldCgiU01hc2siKSxsPWkuZGljdC5nZXQoIk1hc2siKTtjP2MgaW5zdGFuY2VvZiBCYXNlU3RyZWFtP289Yzp3YXJuKCJVbnN1cHBvcnRlZCAvU01hc2sgZm9ybWF0LiIpOmwmJihsIGluc3RhbmNlb2YgQmFzZVN0cmVhbXx8QXJyYXkuaXNBcnJheShsKT9nPWw6d2FybigiVW5zdXBwb3J0ZWQgL01hc2sgZm9ybWF0LiIpKTtyZXR1cm4gbmV3IFBERkltYWdlKHt4cmVmOmUscmVzOnQsaW1hZ2U6bixpc0lubGluZTphLHNtYXNrOm8sbWFzazpnLHBkZkZ1bmN0aW9uRmFjdG9yeTpyLGxvY2FsQ29sb3JTcGFjZUNhY2hlOnN9KX1zdGF0aWMgY3JlYXRlUmF3TWFzayh7aW1nQXJyYXk6ZSx3aWR0aDp0LGhlaWdodDppLGltYWdlSXNGcm9tRGVjb2RlU3RyZWFtOmEsaW52ZXJzZURlY29kZTpyLGludGVycG9sYXRlOnN9KXtjb25zdCBuPSh0Kzc+PjMpKmksbz1lLmJ5dGVMZW5ndGg7bGV0IGcsYztpZighYXx8ciYmIShuPT09bykpaWYocil7Zz1uZXcgVWludDhBcnJheShuKTtnLnNldChlKTtnLmZpbGwoMjU1LG8pfWVsc2UgZz1uZXcgVWludDhBcnJheShlKTtlbHNlIGc9ZTtpZihyKWZvcihjPTA7YzxvO2MrKylnW2NdXj0yNTU7cmV0dXJue2RhdGE6Zyx3aWR0aDp0LGhlaWdodDppLGludGVycG9sYXRlOnN9fXN0YXRpYyBhc3luYyBjcmVhdGVNYXNrKHtpbWdBcnJheTplLHdpZHRoOnQsaGVpZ2h0OmksaW1hZ2VJc0Zyb21EZWNvZGVTdHJlYW06YSxpbnZlcnNlRGVjb2RlOnIsaW50ZXJwb2xhdGU6cyxpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDpuPSExfSl7Y29uc3Qgbz0xPT09dCYmMT09PWkmJnI9PT0oMD09PWUubGVuZ3RofHwhISgxMjgmZVswXSkpO2lmKG8pcmV0dXJue2lzU2luZ2xlT3BhcXVlUGl4ZWw6b307aWYobil7aWYoSW1hZ2VSZXNpemVyLm5lZWRzVG9CZVJlc2l6ZWQodCxpKSl7Y29uc3QgYT1uZXcgVWludDhDbGFtcGVkQXJyYXkodCppKjQpO2NvbnZlcnRCbGFja0FuZFdoaXRlVG9SR0JBKHtzcmM6ZSxkZXN0OmEsd2lkdGg6dCxoZWlnaHQ6aSxub25CbGFja0NvbG9yOjAsaW52ZXJzZURlY29kZTpyfSk7cmV0dXJuIEltYWdlUmVzaXplci5jcmVhdGVJbWFnZSh7a2luZDpSLGRhdGE6YSx3aWR0aDp0LGhlaWdodDppLGludGVycG9sYXRlOnN9KX1jb25zdCBhPW5ldyBPZmZzY3JlZW5DYW52YXModCxpKSxuPWEuZ2V0Q29udGV4dCgiMmQiKSxvPW4uY3JlYXRlSW1hZ2VEYXRhKHQsaSk7Y29udmVydEJsYWNrQW5kV2hpdGVUb1JHQkEoe3NyYzplLGRlc3Q6by5kYXRhLHdpZHRoOnQsaGVpZ2h0Omksbm9uQmxhY2tDb2xvcjowLGludmVyc2VEZWNvZGU6cn0pO24ucHV0SW1hZ2VEYXRhKG8sMCwwKTtyZXR1cm57ZGF0YTpudWxsLHdpZHRoOnQsaGVpZ2h0OmksaW50ZXJwb2xhdGU6cyxiaXRtYXA6YS50cmFuc2ZlclRvSW1hZ2VCaXRtYXAoKX19cmV0dXJuIHRoaXMuY3JlYXRlUmF3TWFzayh7aW1nQXJyYXk6ZSx3aWR0aDp0LGhlaWdodDppLGludmVyc2VEZWNvZGU6cixpbWFnZUlzRnJvbURlY29kZVN0cmVhbTphLGludGVycG9sYXRlOnN9KX1nZXQgZHJhd1dpZHRoKCl7cmV0dXJuIE1hdGgubWF4KHRoaXMud2lkdGgsdGhpcy5zbWFzaz8ud2lkdGh8fDAsdGhpcy5tYXNrPy53aWR0aHx8MCl9Z2V0IGRyYXdIZWlnaHQoKXtyZXR1cm4gTWF0aC5tYXgodGhpcy5oZWlnaHQsdGhpcy5zbWFzaz8uaGVpZ2h0fHwwLHRoaXMubWFzaz8uaGVpZ2h0fHwwKX1kZWNvZGVCdWZmZXIoZSl7Y29uc3QgdD10aGlzLmJwYyxpPXRoaXMubnVtQ29tcHMsYT10aGlzLmRlY29kZUFkZGVuZHMscj10aGlzLmRlY29kZUNvZWZmaWNpZW50cyxzPSgxPDx0KS0xO2xldCBuLG87aWYoMT09PXQpe2ZvcihuPTAsbz1lLmxlbmd0aDtuPG87bisrKWVbbl09KyFlW25dO3JldHVybn1sZXQgZz0wO2ZvcihuPTAsbz10aGlzLndpZHRoKnRoaXMuaGVpZ2h0O248bztuKyspZm9yKGxldCB0PTA7dDxpO3QrKyl7ZVtnXT1kZWNvZGVBbmRDbGFtcChlW2ddLGFbdF0sclt0XSxzKTtnKyt9fWdldENvbXBvbmVudHMoZSl7Y29uc3QgdD10aGlzLmJwYztpZig4PT09dClyZXR1cm4gZTtjb25zdCBpPXRoaXMud2lkdGgsYT10aGlzLmhlaWdodCxyPXRoaXMubnVtQ29tcHMscz1pKmEqcjtsZXQgbixvPTA7bj10PD04P25ldyBVaW50OEFycmF5KHMpOnQ8PTE2P25ldyBVaW50MTZBcnJheShzKTpuZXcgVWludDMyQXJyYXkocyk7Y29uc3QgZz1pKnIsYz0oMTw8dCktMTtsZXQgbCxoLEM9MDtpZigxPT09dCl7bGV0IHQsaSxyO2ZvcihsZXQgcz0wO3M8YTtzKyspe2k9QysoLTgmZyk7cj1DK2c7Zm9yKDtDPGk7KXtoPWVbbysrXTtuW0NdPWg+PjcmMTtuW0MrMV09aD4+NiYxO25bQysyXT1oPj41JjE7bltDKzNdPWg+PjQmMTtuW0MrNF09aD4+MyYxO25bQys1XT1oPj4yJjE7bltDKzZdPWg+PjEmMTtuW0MrN109MSZoO0MrPTh9aWYoQzxyKXtoPWVbbysrXTt0PTEyODtmb3IoO0M8cjspe25bQysrXT0rISEoaCZ0KTt0Pj49MX19fX1lbHNle2xldCBpPTA7aD0wO2ZvcihDPTAsbD1zO0M8bDsrK0Mpe2lmKEMlZz09MCl7aD0wO2k9MH1mb3IoO2k8dDspe2g9aDw8OHxlW28rK107aSs9OH1jb25zdCBhPWktdDtsZXQgcj1oPj5hO3I8MD9yPTA6cj5jJiYocj1jKTtuW0NdPXI7aCY9KDE8PGEpLTE7aT1hfX1yZXR1cm4gbn1hc3luYyBmaWxsT3BhY2l0eShlLHQsaSxhLHIpe2NvbnN0IHM9dGhpcy5zbWFzayxuPXRoaXMubWFzaztsZXQgbyxnLGMsbCxoLEM7aWYocyl7Zz1zLndpZHRoO2M9cy5oZWlnaHQ7bz1uZXcgVWludDhDbGFtcGVkQXJyYXkoZypjKTthd2FpdCBzLmZpbGxHcmF5QnVmZmVyKG8pO2c9PT10JiZjPT09aXx8KG89cmVzaXplSW1hZ2VNYXNrKG8scy5icGMsZyxjLHQsaSkpfWVsc2UgaWYobilpZihuIGluc3RhbmNlb2YgUERGSW1hZ2Upe2c9bi53aWR0aDtjPW4uaGVpZ2h0O289bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGcqYyk7bi5udW1Db21wcz0xO2F3YWl0IG4uZmlsbEdyYXlCdWZmZXIobyk7Zm9yKGw9MCxoPWcqYztsPGg7KytsKW9bbF09MjU1LW9bbF07Zz09PXQmJmM9PT1pfHwobz1yZXNpemVJbWFnZU1hc2sobyxuLmJwYyxnLGMsdCxpKSl9ZWxzZXtpZighQXJyYXkuaXNBcnJheShuKSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIlVua25vd24gbWFzayBmb3JtYXQuIik7e289bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHQqaSk7Y29uc3QgZT10aGlzLm51bUNvbXBzO2ZvcihsPTAsaD10Kmk7bDxoOysrbCl7bGV0IHQ9MDtjb25zdCBpPWwqZTtmb3IoQz0wO0M8ZTsrK0Mpe2NvbnN0IGU9cltpK0NdLGE9MipDO2lmKGU8blthXXx8ZT5uW2ErMV0pe3Q9MjU1O2JyZWFrfX1vW2xdPXR9fX1pZihvKWZvcihsPTAsQz0zLGg9dCphO2w8aDsrK2wsQys9NCllW0NdPW9bbF07ZWxzZSBmb3IobD0wLEM9MyxoPXQqYTtsPGg7KytsLEMrPTQpZVtDXT0yNTV9dW5kb1ByZWJsZW5kKGUsdCxpKXtjb25zdCBhPXRoaXMuc21hc2s/Lm1hdHRlO2lmKCFhKXJldHVybjtjb25zdCByPXRoaXMuY29sb3JTcGFjZS5nZXRSZ2IoYSwwKSxzPXJbMF0sbj1yWzFdLG89clsyXSxnPXQqaSo0O2ZvcihsZXQgdD0wO3Q8Zzt0Kz00KXtjb25zdCBpPWVbdCszXTtpZigwPT09aSl7ZVt0XT0yNTU7ZVt0KzFdPTI1NTtlW3QrMl09MjU1O2NvbnRpbnVlfWNvbnN0IGE9MjU1L2k7ZVt0XT0oZVt0XS1zKSphK3M7ZVt0KzFdPShlW3QrMV0tbikqYStuO2VbdCsyXT0oZVt0KzJdLW8pKmErb319YXN5bmMgY3JlYXRlSW1hZ2VEYXRhKGU9ITEsdD0hMSl7Y29uc3QgaT10aGlzLmRyYXdXaWR0aCxhPXRoaXMuZHJhd0hlaWdodCxyPXt3aWR0aDppLGhlaWdodDphLGludGVycG9sYXRlOnRoaXMuaW50ZXJwb2xhdGUsa2luZDowLGRhdGE6bnVsbH0scz10aGlzLm51bUNvbXBzLG49dGhpcy53aWR0aCxvPXRoaXMuaGVpZ2h0LGc9dGhpcy5icGMsYz1uKnMqZys3Pj4zLGw9dCYmSW1hZ2VSZXNpemVyLm5lZWRzVG9CZVJlc2l6ZWQoaSxhKTtpZighdGhpcy5zbWFzayYmIXRoaXMubWFzayYmIkRldmljZVJHQkEiPT09dGhpcy5jb2xvclNwYWNlLm5hbWUpe3Iua2luZD1SO2NvbnN0IGU9ci5kYXRhPWF3YWl0IHRoaXMuZ2V0SW1hZ2VCeXRlcyhvKm4qNCx7fSk7cmV0dXJuIHQ/bD9JbWFnZVJlc2l6ZXIuY3JlYXRlSW1hZ2UociwhMSk6dGhpcy5jcmVhdGVCaXRtYXAoUixpLGEsZSk6cn1pZighZSl7bGV0IGU7IkRldmljZUdyYXkiPT09dGhpcy5jb2xvclNwYWNlLm5hbWUmJjE9PT1nP2U9UzoiRGV2aWNlUkdCIiE9PXRoaXMuY29sb3JTcGFjZS5uYW1lfHw4IT09Z3x8dGhpcy5uZWVkc0RlY29kZXx8KGU9ayk7aWYoZSYmIXRoaXMuc21hc2smJiF0aGlzLm1hc2smJmk9PT1uJiZhPT09byl7Y29uc3Qgcz1hd2FpdCB0aGlzLiNHKG4sbyk7aWYocylyZXR1cm4gcztjb25zdCBnPWF3YWl0IHRoaXMuZ2V0SW1hZ2VCeXRlcyhvKmMse30pO2lmKHQpcmV0dXJuIGw/SW1hZ2VSZXNpemVyLmNyZWF0ZUltYWdlKHtkYXRhOmcsa2luZDplLHdpZHRoOmksaGVpZ2h0OmEsaW50ZXJwb2xhdGU6dGhpcy5pbnRlcnBvbGF0ZX0sdGhpcy5uZWVkc0RlY29kZSk6dGhpcy5jcmVhdGVCaXRtYXAoZSxuLG8sZyk7ci5raW5kPWU7ci5kYXRhPWc7aWYodGhpcy5uZWVkc0RlY29kZSl7YXNzZXJ0KGU9PT1TLCJQREZJbWFnZS5jcmVhdGVJbWFnZURhdGE6IFRoZSBpbWFnZSBtdXN0IGJlIGdyYXlzY2FsZS4iKTtjb25zdCB0PXIuZGF0YTtmb3IobGV0IGU9MCxpPXQubGVuZ3RoO2U8aTtlKyspdFtlXV49MjU1fXJldHVybiByfWlmKHRoaXMuaW1hZ2UgaW5zdGFuY2VvZiBKcGVnU3RyZWFtJiYhdGhpcy5zbWFzayYmIXRoaXMubWFzayYmIXRoaXMubmVlZHNEZWNvZGUpe2xldCBlPW8qYztpZih0JiYhbCl7bGV0IHQ9ITE7c3dpdGNoKHRoaXMuY29sb3JTcGFjZS5uYW1lKXtjYXNlIkRldmljZUdyYXkiOmUqPTQ7dD0hMDticmVhaztjYXNlIkRldmljZVJHQiI6ZT1lLzMqNDt0PSEwO2JyZWFrO2Nhc2UiRGV2aWNlQ01ZSyI6dD0hMH1pZih0KXtjb25zdCB0PWF3YWl0IHRoaXMuI0coaSxhKTtpZih0KXJldHVybiB0O2NvbnN0IHI9YXdhaXQgdGhpcy5nZXRJbWFnZUJ5dGVzKGUse2RyYXdXaWR0aDppLGRyYXdIZWlnaHQ6YSxmb3JjZVJHQkE6ITB9KTtyZXR1cm4gdGhpcy5jcmVhdGVCaXRtYXAoUixpLGEscil9fWVsc2Ugc3dpdGNoKHRoaXMuY29sb3JTcGFjZS5uYW1lKXtjYXNlIkRldmljZUdyYXkiOmUqPTM7Y2FzZSJEZXZpY2VSR0IiOmNhc2UiRGV2aWNlQ01ZSyI6ci5raW5kPWs7ci5kYXRhPWF3YWl0IHRoaXMuZ2V0SW1hZ2VCeXRlcyhlLHtkcmF3V2lkdGg6aSxkcmF3SGVpZ2h0OmEsZm9yY2VSR0I6ITB9KTtyZXR1cm4gbD9JbWFnZVJlc2l6ZXIuY3JlYXRlSW1hZ2Uocik6cn19fWNvbnN0IGg9YXdhaXQgdGhpcy5nZXRJbWFnZUJ5dGVzKG8qYyx7aW50ZXJuYWw6ITB9KSxDPTB8aC5sZW5ndGgvYyphL28sUT10aGlzLmdldENvbXBvbmVudHMoaCk7bGV0IEUsdSxkLGYscCxtO2lmKHQmJiFsKXtkPW5ldyBPZmZzY3JlZW5DYW52YXMoaSxhKTtmPWQuZ2V0Q29udGV4dCgiMmQiKTtwPWYuY3JlYXRlSW1hZ2VEYXRhKGksYSk7bT1wLmRhdGF9ci5raW5kPVI7aWYoZXx8dGhpcy5zbWFza3x8dGhpcy5tYXNrKXt0JiYhbHx8KG09bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGkqYSo0KSk7RT0xO3U9ITA7YXdhaXQgdGhpcy5maWxsT3BhY2l0eShtLGksYSxDLFEpfWVsc2V7aWYoIXR8fGwpe3Iua2luZD1rO209bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGkqYSozKTtFPTB9ZWxzZXtuZXcgVWludDMyQXJyYXkobS5idWZmZXIpLmZpbGwoRmVhdHVyZVRlc3QuaXNMaXR0bGVFbmRpYW4/NDI3ODE5MDA4MDoyNTUpO0U9MX11PSExfXRoaXMubmVlZHNEZWNvZGUmJnRoaXMuZGVjb2RlQnVmZmVyKFEpO3RoaXMuY29sb3JTcGFjZS5maWxsUmdiKG0sbixvLGksYSxDLGcsUSxFKTt1JiZ0aGlzLnVuZG9QcmVibGVuZChtLGksQyk7aWYodCYmIWwpe2YucHV0SW1hZ2VEYXRhKHAsMCwwKTtyZXR1cm57ZGF0YTpudWxsLHdpZHRoOmksaGVpZ2h0OmEsYml0bWFwOmQudHJhbnNmZXJUb0ltYWdlQml0bWFwKCksaW50ZXJwb2xhdGU6dGhpcy5pbnRlcnBvbGF0ZX19ci5kYXRhPW07cmV0dXJuIGw/SW1hZ2VSZXNpemVyLmNyZWF0ZUltYWdlKHIpOnJ9YXN5bmMgZmlsbEdyYXlCdWZmZXIoZSl7Y29uc3QgdD10aGlzLm51bUNvbXBzO2lmKDEhPT10KXRocm93IG5ldyBGb3JtYXRFcnJvcihgUmVhZGluZyBncmF5IHNjYWxlIGZyb20gYSBjb2xvciBpbWFnZTogJHt0fWApO2NvbnN0IGk9dGhpcy53aWR0aCxhPXRoaXMuaGVpZ2h0LHI9dGhpcy5icGMscz1pKnQqcis3Pj4zLG49YXdhaXQgdGhpcy5nZXRJbWFnZUJ5dGVzKGEqcyx7aW50ZXJuYWw6ITB9KSxvPXRoaXMuZ2V0Q29tcG9uZW50cyhuKTtsZXQgZyxjO2lmKDE9PT1yKXtjPWkqYTtpZih0aGlzLm5lZWRzRGVjb2RlKWZvcihnPTA7ZzxjOysrZyllW2ddPW9bZ10tMSYyNTU7ZWxzZSBmb3IoZz0wO2c8YzsrK2cpZVtnXT0yNTUmLW9bZ107cmV0dXJufXRoaXMubmVlZHNEZWNvZGUmJnRoaXMuZGVjb2RlQnVmZmVyKG8pO2M9aSphO2NvbnN0IGw9MjU1LygoMTw8ciktMSk7Zm9yKGc9MDtnPGM7KytnKWVbZ109bCpvW2ddfWNyZWF0ZUJpdG1hcChlLHQsaSxhKXtjb25zdCByPW5ldyBPZmZzY3JlZW5DYW52YXModCxpKSxzPXIuZ2V0Q29udGV4dCgiMmQiKTtsZXQgbjtpZihlPT09UiluPW5ldyBJbWFnZURhdGEoYSx0LGkpO2Vsc2V7bj1zLmNyZWF0ZUltYWdlRGF0YSh0LGkpO2NvbnZlcnRUb1JHQkEoe2tpbmQ6ZSxzcmM6YSxkZXN0Om5ldyBVaW50MzJBcnJheShuLmRhdGEuYnVmZmVyKSx3aWR0aDp0LGhlaWdodDppLGludmVyc2VEZWNvZGU6dGhpcy5uZWVkc0RlY29kZX0pfXMucHV0SW1hZ2VEYXRhKG4sMCwwKTtyZXR1cm57ZGF0YTpudWxsLHdpZHRoOnQsaGVpZ2h0OmksYml0bWFwOnIudHJhbnNmZXJUb0ltYWdlQml0bWFwKCksaW50ZXJwb2xhdGU6dGhpcy5pbnRlcnBvbGF0ZX19YXN5bmMjRyhlLHQpe2NvbnN0IGk9YXdhaXQgdGhpcy5pbWFnZS5nZXRUcmFuc2ZlcmFibGVJbWFnZSgpO3JldHVybiBpP3tkYXRhOm51bGwsd2lkdGg6ZSxoZWlnaHQ6dCxiaXRtYXA6aSxpbnRlcnBvbGF0ZTp0aGlzLmludGVycG9sYXRlfTpudWxsfWFzeW5jIGdldEltYWdlQnl0ZXMoZSx7ZHJhd1dpZHRoOnQsZHJhd0hlaWdodDppLGZvcmNlUkdCQTphPSExLGZvcmNlUkdCOnI9ITEsaW50ZXJuYWw6cz0hMX0pe3RoaXMuaW1hZ2UucmVzZXQoKTt0aGlzLmltYWdlLmRyYXdXaWR0aD10fHx0aGlzLndpZHRoO3RoaXMuaW1hZ2UuZHJhd0hlaWdodD1pfHx0aGlzLmhlaWdodDt0aGlzLmltYWdlLmZvcmNlUkdCQT0hIWE7dGhpcy5pbWFnZS5mb3JjZVJHQj0hIXI7Y29uc3Qgbj1hd2FpdCB0aGlzLmltYWdlLmdldEltYWdlRGF0YShlLHRoaXMuanB4RGVjb2Rlck9wdGlvbnMpO2lmKHN8fHRoaXMuaW1hZ2UgaW5zdGFuY2VvZiBEZWNvZGVTdHJlYW0pcmV0dXJuIG47YXNzZXJ0KG4gaW5zdGFuY2VvZiBVaW50OEFycmF5LCdQREZJbWFnZS5nZXRJbWFnZUJ5dGVzOiBVbnN1cHBvcnRlZCAiaW1hZ2VCeXRlcyIgdHlwZS4nKTtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkobil9fWNvbnN0IG1yPU9iamVjdC5mcmVlemUoe21heEltYWdlU2l6ZTotMSxkaXNhYmxlRm9udEZhY2U6ITEsaWdub3JlRXJyb3JzOiExLGlzRXZhbFN1cHBvcnRlZDohMCxpc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDohMSxpc0ltYWdlRGVjb2RlclN1cHBvcnRlZDohMSxjYW52YXNNYXhBcmVhSW5CeXRlczotMSxmb250RXh0cmFQcm9wZXJ0aWVzOiExLHVzZVN5c3RlbUZvbnRzOiEwLGNNYXBVcmw6bnVsbCxzdGFuZGFyZEZvbnREYXRhVXJsOm51bGx9KSx5cj0xLHdyPTIsYnI9UHJvbWlzZS5yZXNvbHZlKCk7ZnVuY3Rpb24gbm9ybWFsaXplQmxlbmRNb2RlKGUsdD0hMSl7aWYoQXJyYXkuaXNBcnJheShlKSl7Zm9yKGNvbnN0IHQgb2YgZSl7Y29uc3QgZT1ub3JtYWxpemVCbGVuZE1vZGUodCwhMCk7aWYoZSlyZXR1cm4gZX13YXJuKGBVbnN1cHBvcnRlZCBibGVuZCBtb2RlIEFycmF5OiAke2V9YCk7cmV0dXJuInNvdXJjZS1vdmVyIn1pZighKGUgaW5zdGFuY2VvZiBOYW1lKSlyZXR1cm4gdD9udWxsOiJzb3VyY2Utb3ZlciI7c3dpdGNoKGUubmFtZSl7Y2FzZSJOb3JtYWwiOmNhc2UiQ29tcGF0aWJsZSI6cmV0dXJuInNvdXJjZS1vdmVyIjtjYXNlIk11bHRpcGx5IjpyZXR1cm4ibXVsdGlwbHkiO2Nhc2UiU2NyZWVuIjpyZXR1cm4ic2NyZWVuIjtjYXNlIk92ZXJsYXkiOnJldHVybiJvdmVybGF5IjtjYXNlIkRhcmtlbiI6cmV0dXJuImRhcmtlbiI7Y2FzZSJMaWdodGVuIjpyZXR1cm4ibGlnaHRlbiI7Y2FzZSJDb2xvckRvZGdlIjpyZXR1cm4iY29sb3ItZG9kZ2UiO2Nhc2UiQ29sb3JCdXJuIjpyZXR1cm4iY29sb3ItYnVybiI7Y2FzZSJIYXJkTGlnaHQiOnJldHVybiJoYXJkLWxpZ2h0IjtjYXNlIlNvZnRMaWdodCI6cmV0dXJuInNvZnQtbGlnaHQiO2Nhc2UiRGlmZmVyZW5jZSI6cmV0dXJuImRpZmZlcmVuY2UiO2Nhc2UiRXhjbHVzaW9uIjpyZXR1cm4iZXhjbHVzaW9uIjtjYXNlIkh1ZSI6cmV0dXJuImh1ZSI7Y2FzZSJTYXR1cmF0aW9uIjpyZXR1cm4ic2F0dXJhdGlvbiI7Y2FzZSJDb2xvciI6cmV0dXJuImNvbG9yIjtjYXNlIkx1bWlub3NpdHkiOnJldHVybiJsdW1pbm9zaXR5In1pZih0KXJldHVybiBudWxsO3dhcm4oYFVuc3VwcG9ydGVkIGJsZW5kIG1vZGU6ICR7ZS5uYW1lfWApO3JldHVybiJzb3VyY2Utb3ZlciJ9ZnVuY3Rpb24gYWRkTG9jYWxseUNhY2hlZEltYWdlT3BzKGUsdCl7dC5vYmpJZCYmZS5hZGREZXBlbmRlbmN5KHQub2JqSWQpO2UuYWRkSW1hZ2VPcHModC5mbix0LmFyZ3MsdC5vcHRpb25hbENvbnRlbnQsdC5oYXNNYXNrKTt0LmZuPT09X2UmJnQuYXJnc1swXT8uY291bnQ+MCYmdC5hcmdzWzBdLmNvdW50Kyt9Y2xhc3MgVGltZVNsb3RNYW5hZ2Vye3N0YXRpYyBUSU1FX1NMT1RfRFVSQVRJT05fTVM9MjA7c3RhdGljIENIRUNLX1RJTUVfRVZFUlk9MTAwO2NvbnN0cnVjdG9yKCl7dGhpcy5yZXNldCgpfWNoZWNrKCl7aWYoKyt0aGlzLmNoZWNrZWQ8VGltZVNsb3RNYW5hZ2VyLkNIRUNLX1RJTUVfRVZFUlkpcmV0dXJuITE7dGhpcy5jaGVja2VkPTA7cmV0dXJuIHRoaXMuZW5kVGltZTw9RGF0ZS5ub3coKX1yZXNldCgpe3RoaXMuZW5kVGltZT1EYXRlLm5vdygpK1RpbWVTbG90TWFuYWdlci5USU1FX1NMT1RfRFVSQVRJT05fTVM7dGhpcy5jaGVja2VkPTB9fWNsYXNzIFBhcnRpYWxFdmFsdWF0b3J7Y29uc3RydWN0b3Ioe3hyZWY6ZSxoYW5kbGVyOnQscGFnZUluZGV4OmksaWRGYWN0b3J5OmEsZm9udENhY2hlOnIsYnVpbHRJbkNNYXBDYWNoZTpzLHN0YW5kYXJkRm9udERhdGFDYWNoZTpuLGdsb2JhbEltYWdlQ2FjaGU6byxzeXN0ZW1Gb250Q2FjaGU6ZyxvcHRpb25zOmM9bnVsbH0pe3RoaXMueHJlZj1lO3RoaXMuaGFuZGxlcj10O3RoaXMucGFnZUluZGV4PWk7dGhpcy5pZEZhY3Rvcnk9YTt0aGlzLmZvbnRDYWNoZT1yO3RoaXMuYnVpbHRJbkNNYXBDYWNoZT1zO3RoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlPW47dGhpcy5nbG9iYWxJbWFnZUNhY2hlPW87dGhpcy5zeXN0ZW1Gb250Q2FjaGU9Zzt0aGlzLm9wdGlvbnM9Y3x8bXI7dGhpcy50eXBlM0ZvbnRSZWZzPW51bGw7dGhpcy5fcmVnaW9uYWxJbWFnZUNhY2hlPW5ldyBSZWdpb25hbEltYWdlQ2FjaGU7dGhpcy5fZmV0Y2hCdWlsdEluQ01hcEJvdW5kPXRoaXMuZmV0Y2hCdWlsdEluQ01hcC5iaW5kKHRoaXMpO0ltYWdlUmVzaXplci5zZXRPcHRpb25zKHRoaXMub3B0aW9ucyk7SnBlZ1N0cmVhbS5zZXRPcHRpb25zKHRoaXMub3B0aW9ucyl9Z2V0IF9wZGZGdW5jdGlvbkZhY3RvcnkoKXtyZXR1cm4gc2hhZG93KHRoaXMsIl9wZGZGdW5jdGlvbkZhY3RvcnkiLG5ldyBQREZGdW5jdGlvbkZhY3Rvcnkoe3hyZWY6dGhpcy54cmVmLGlzRXZhbFN1cHBvcnRlZDp0aGlzLm9wdGlvbnMuaXNFdmFsU3VwcG9ydGVkfSkpfWdldCBwYXJzaW5nVHlwZTNGb250KCl7cmV0dXJuISF0aGlzLnR5cGUzRm9udFJlZnN9Y2xvbmUoZT1udWxsKXtjb25zdCB0PU9iamVjdC5jcmVhdGUodGhpcyk7dC5vcHRpb25zPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLm9wdGlvbnMsZSk7cmV0dXJuIHR9aGFzQmxlbmRNb2RlcyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIERpY3QpKXJldHVybiExO2lmKGUub2JqSWQmJnQuaGFzKGUub2JqSWQpKXJldHVybiExO2NvbnN0IGk9bmV3IFJlZlNldCh0KTtlLm9iaklkJiZpLnB1dChlLm9iaklkKTtjb25zdCBhPVtlXSxyPXRoaXMueHJlZjtmb3IoO2EubGVuZ3RoOyl7Y29uc3QgZT1hLnNoaWZ0KCksdD1lLmdldCgiRXh0R1N0YXRlIik7aWYodCBpbnN0YW5jZW9mIERpY3QpZm9yKGxldCBlIG9mIHQuZ2V0UmF3VmFsdWVzKCkpe2lmKGUgaW5zdGFuY2VvZiBSZWYpe2lmKGkuaGFzKGUpKWNvbnRpbnVlO3RyeXtlPXIuZmV0Y2goZSl9Y2F0Y2godCl7aS5wdXQoZSk7aW5mbyhgaGFzQmxlbmRNb2RlcyAtIGlnbm9yaW5nIEV4dEdTdGF0ZTogIiR7dH0iLmApO2NvbnRpbnVlfX1pZighKGUgaW5zdGFuY2VvZiBEaWN0KSljb250aW51ZTtlLm9iaklkJiZpLnB1dChlLm9iaklkKTtjb25zdCB0PWUuZ2V0KCJCTSIpO2lmKHQgaW5zdGFuY2VvZiBOYW1lKXtpZigiTm9ybWFsIiE9PXQubmFtZSlyZXR1cm4hMH1lbHNlIGlmKHZvaWQgMCE9PXQmJkFycmF5LmlzQXJyYXkodCkpZm9yKGNvbnN0IGUgb2YgdClpZihlIGluc3RhbmNlb2YgTmFtZSYmIk5vcm1hbCIhPT1lLm5hbWUpcmV0dXJuITB9Y29uc3Qgcz1lLmdldCgiWE9iamVjdCIpO2lmKHMgaW5zdGFuY2VvZiBEaWN0KWZvcihsZXQgZSBvZiBzLmdldFJhd1ZhbHVlcygpKXtpZihlIGluc3RhbmNlb2YgUmVmKXtpZihpLmhhcyhlKSljb250aW51ZTt0cnl7ZT1yLmZldGNoKGUpfWNhdGNoKHQpe2kucHV0KGUpO2luZm8oYGhhc0JsZW5kTW9kZXMgLSBpZ25vcmluZyBYT2JqZWN0OiAiJHt0fSIuYCk7Y29udGludWV9fWlmKCEoZSBpbnN0YW5jZW9mIEJhc2VTdHJlYW0pKWNvbnRpbnVlO2UuZGljdC5vYmpJZCYmaS5wdXQoZS5kaWN0Lm9iaklkKTtjb25zdCB0PWUuZGljdC5nZXQoIlJlc291cmNlcyIpO2lmKHQgaW5zdGFuY2VvZiBEaWN0JiYoIXQub2JqSWR8fCFpLmhhcyh0Lm9iaklkKSkpe2EucHVzaCh0KTt0Lm9iaklkJiZpLnB1dCh0Lm9iaklkKX19fWZvcihjb25zdCBlIG9mIGkpdC5wdXQoZSk7cmV0dXJuITF9YXN5bmMjTShlKXtjb25zdCB0PWF3YWl0IGZldGNoKGUpO2lmKCF0Lm9rKXRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGZldGNoIGZpbGUgIiR7ZX0iIHdpdGggIiR7dC5zdGF0dXNUZXh0fSIuYCk7cmV0dXJuIG5ldyBVaW50OEFycmF5KGF3YWl0IHQuYXJyYXlCdWZmZXIoKSl9YXN5bmMgZmV0Y2hCdWlsdEluQ01hcChlKXtjb25zdCB0PXRoaXMuYnVpbHRJbkNNYXBDYWNoZS5nZXQoZSk7aWYodClyZXR1cm4gdDtsZXQgaTtpZihudWxsIT09dGhpcy5vcHRpb25zLmNNYXBVcmwpe2k9e2NNYXBEYXRhOmF3YWl0IHRoaXMuI00oYCR7dGhpcy5vcHRpb25zLmNNYXBVcmx9JHtlfS5iY21hcGApLGlzQ29tcHJlc3NlZDohMH19ZWxzZSBpPWF3YWl0IHRoaXMuaGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkZldGNoQnVpbHRJbkNNYXAiLHtuYW1lOmV9KTt0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUuc2V0KGUsaSk7cmV0dXJuIGl9YXN5bmMgZmV0Y2hTdGFuZGFyZEZvbnREYXRhKGUpe2NvbnN0IHQ9dGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGUuZ2V0KGUpO2lmKHQpcmV0dXJuIG5ldyBTdHJlYW0odCk7aWYodGhpcy5vcHRpb25zLnVzZVN5c3RlbUZvbnRzJiYiU3ltYm9sIiE9PWUmJiJaYXBmRGluZ2JhdHMiIT09ZSlyZXR1cm4gbnVsbDtjb25zdCBpPVRpKClbZV07bGV0IGE7dHJ5e2E9bnVsbCE9PXRoaXMub3B0aW9ucy5zdGFuZGFyZEZvbnREYXRhVXJsP2F3YWl0IHRoaXMuI00oYCR7dGhpcy5vcHRpb25zLnN0YW5kYXJkRm9udERhdGFVcmx9JHtpfWApOmF3YWl0IHRoaXMuaGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkZldGNoU3RhbmRhcmRGb250RGF0YSIse2ZpbGVuYW1lOml9KX1jYXRjaChlKXt3YXJuKGUpO3JldHVybiBudWxsfXRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlLnNldChlLGEpO3JldHVybiBuZXcgU3RyZWFtKGEpfWFzeW5jIGJ1aWxkRm9ybVhPYmplY3QoZSx0LGksYSxyLHMsbil7Y29uc3Qgbz10LmRpY3QsZz1sb29rdXBNYXRyaXgoby5nZXRBcnJheSgiTWF0cml4IiksbnVsbCksYz1sb29rdXBOb3JtYWxSZWN0KG8uZ2V0QXJyYXkoIkJCb3giKSxudWxsKTtsZXQgbCxoO28uaGFzKCJPQyIpJiYobD1hd2FpdCB0aGlzLnBhcnNlTWFya2VkQ29udGVudFByb3BzKG8uZ2V0KCJPQyIpLGUpKTt2b2lkIDAhPT1sJiZhLmFkZE9wKEtlLFsiT0MiLGxdKTtjb25zdCBDPW8uZ2V0KCJHcm91cCIpO2lmKEMpe2g9e21hdHJpeDpnLGJib3g6YyxzbWFzazppLGlzb2xhdGVkOiExLGtub2Nrb3V0OiExfTtsZXQgdD1udWxsO2lmKGlzTmFtZShDLmdldCgiUyIpLCJUcmFuc3BhcmVuY3kiKSl7aC5pc29sYXRlZD1DLmdldCgiSSIpfHwhMTtoLmtub2Nrb3V0PUMuZ2V0KCJLIil8fCExO2lmKEMuaGFzKCJDUyIpKXtjb25zdCBpPUMuZ2V0UmF3KCJDUyIpLGE9Q29sb3JTcGFjZS5nZXRDYWNoZWQoaSx0aGlzLnhyZWYsbik7dD1hfHxhd2FpdCB0aGlzLnBhcnNlQ29sb3JTcGFjZSh7Y3M6aSxyZXNvdXJjZXM6ZSxsb2NhbENvbG9yU3BhY2VDYWNoZTpufSl9fWlmKGk/LmJhY2tkcm9wKXt0fHw9Q29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYjtpLmJhY2tkcm9wPXQuZ2V0UmdiKGkuYmFja2Ryb3AsMCl9YS5hZGRPcChqZSxbaF0pfWNvbnN0IFE9Qz9bZyxudWxsXTpbZyxjXTthLmFkZE9wKFBlLFEpO2F3YWl0IHRoaXMuZ2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06dCx0YXNrOnIscmVzb3VyY2VzOm8uZ2V0KCJSZXNvdXJjZXMiKXx8ZSxvcGVyYXRvckxpc3Q6YSxpbml0aWFsU3RhdGU6c30pO2EuYWRkT3AoV2UsW10pO0MmJmEuYWRkT3AoWGUsW2hdKTt2b2lkIDAhPT1sJiZhLmFkZE9wKFRlLFtdKX1fc2VuZEltZ0RhdGEoZSx0LGk9ITEpe2NvbnN0IGE9dD9bdC5iaXRtYXB8fHQuZGF0YS5idWZmZXJdOm51bGw7cmV0dXJuIHRoaXMucGFyc2luZ1R5cGUzRm9udHx8aT90aGlzLmhhbmRsZXIuc2VuZCgiY29tbW9ub2JqIixbZSwiSW1hZ2UiLHRdLGEpOnRoaXMuaGFuZGxlci5zZW5kKCJvYmoiLFtlLHRoaXMucGFnZUluZGV4LCJJbWFnZSIsdF0sYSl9YXN5bmMgYnVpbGRQYWludEltYWdlWE9iamVjdCh7cmVzb3VyY2VzOmUsaW1hZ2U6dCxpc0lubGluZTppPSExLG9wZXJhdG9yTGlzdDphLGNhY2hlS2V5OnIsbG9jYWxJbWFnZUNhY2hlOnMsbG9jYWxDb2xvclNwYWNlQ2FjaGU6bn0pe2NvbnN0IG89dC5kaWN0LGc9by5vYmpJZCxjPW8uZ2V0KCJXIiwiV2lkdGgiKSxsPW8uZ2V0KCJIIiwiSGVpZ2h0Iik7aWYoIWN8fCJudW1iZXIiIT10eXBlb2YgY3x8IWx8fCJudW1iZXIiIT10eXBlb2YgbCl7d2FybigiSW1hZ2UgZGltZW5zaW9ucyBhcmUgbWlzc2luZywgb3Igbm90IG51bWJlcnMuIik7cmV0dXJufWNvbnN0IGg9dGhpcy5vcHRpb25zLm1heEltYWdlU2l6ZTtpZigtMSE9PWgmJmMqbD5oKXtjb25zdCBlPSJJbWFnZSBleGNlZWRlZCBtYXhpbXVtIGFsbG93ZWQgc2l6ZSBhbmQgd2FzIHJlbW92ZWQuIjtpZih0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKXt3YXJuKGUpO3JldHVybn10aHJvdyBuZXcgRXJyb3IoZSl9bGV0IEM7by5oYXMoIk9DIikmJihDPWF3YWl0IHRoaXMucGFyc2VNYXJrZWRDb250ZW50UHJvcHMoby5nZXQoIk9DIiksZSkpO2xldCBRLEU7aWYoby5nZXQoIklNIiwiSW1hZ2VNYXNrIil8fCExKXtjb25zdCBlPW8uZ2V0KCJJIiwiSW50ZXJwb2xhdGUiKSxpPWMrNz4+MyxuPXQuZ2V0Qnl0ZXMoaSpsKSxoPW8uZ2V0QXJyYXkoIkQiLCJEZWNvZGUiKTtpZih0aGlzLnBhcnNpbmdUeXBlM0ZvbnQpe1E9UERGSW1hZ2UuY3JlYXRlUmF3TWFzayh7aW1nQXJyYXk6bix3aWR0aDpjLGhlaWdodDpsLGltYWdlSXNGcm9tRGVjb2RlU3RyZWFtOnQgaW5zdGFuY2VvZiBEZWNvZGVTdHJlYW0saW52ZXJzZURlY29kZTpoPy5bMF0+MCxpbnRlcnBvbGF0ZTplfSk7US5jYWNoZWQ9ISFyO0U9W1FdO2EuYWRkSW1hZ2VPcHMoX2UsRSxDKTtpZihyKXtjb25zdCBlPXtmbjpfZSxhcmdzOkUsb3B0aW9uYWxDb250ZW50OkN9O3Muc2V0KHIsZyxlKTtnJiZ0aGlzLl9yZWdpb25hbEltYWdlQ2FjaGUuc2V0KG51bGwsZyxlKX1yZXR1cm59UT1hd2FpdCBQREZJbWFnZS5jcmVhdGVNYXNrKHtpbWdBcnJheTpuLHdpZHRoOmMsaGVpZ2h0OmwsaW1hZ2VJc0Zyb21EZWNvZGVTdHJlYW06dCBpbnN0YW5jZW9mIERlY29kZVN0cmVhbSxpbnZlcnNlRGVjb2RlOmg/LlswXT4wLGludGVycG9sYXRlOmUsaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ6dGhpcy5vcHRpb25zLmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkfSk7aWYoUS5pc1NpbmdsZU9wYXF1ZVBpeGVsKXthLmFkZEltYWdlT3BzKGF0LFtdLEMpO2lmKHIpe2NvbnN0IGU9e2ZuOmF0LGFyZ3M6W10sb3B0aW9uYWxDb250ZW50OkN9O3Muc2V0KHIsZyxlKTtnJiZ0aGlzLl9yZWdpb25hbEltYWdlQ2FjaGUuc2V0KG51bGwsZyxlKX1yZXR1cm59Y29uc3QgdT1gbWFza18ke3RoaXMuaWRGYWN0b3J5LmNyZWF0ZU9iaklkKCl9YDthLmFkZERlcGVuZGVuY3kodSk7US5kYXRhTGVuPVEuYml0bWFwP1Eud2lkdGgqUS5oZWlnaHQqNDpRLmRhdGEubGVuZ3RoO3RoaXMuX3NlbmRJbWdEYXRhKHUsUSk7RT1be2RhdGE6dSx3aWR0aDpRLndpZHRoLGhlaWdodDpRLmhlaWdodCxpbnRlcnBvbGF0ZTpRLmludGVycG9sYXRlLGNvdW50OjF9XTthLmFkZEltYWdlT3BzKF9lLEUsQyk7aWYocil7Y29uc3QgZT17b2JqSWQ6dSxmbjpfZSxhcmdzOkUsb3B0aW9uYWxDb250ZW50OkN9O3Muc2V0KHIsZyxlKTtnJiZ0aGlzLl9yZWdpb25hbEltYWdlQ2FjaGUuc2V0KG51bGwsZyxlKX1yZXR1cm59Y29uc3QgdT1vLmhhcygiU01hc2siKXx8by5oYXMoIk1hc2siKTtpZihpJiZjK2w8MjAwJiYhdSl7dHJ5e2NvbnN0IHI9bmV3IFBERkltYWdlKHt4cmVmOnRoaXMueHJlZixyZXM6ZSxpbWFnZTp0LGlzSW5saW5lOmkscGRmRnVuY3Rpb25GYWN0b3J5OnRoaXMuX3BkZkZ1bmN0aW9uRmFjdG9yeSxsb2NhbENvbG9yU3BhY2VDYWNoZTpufSk7UT1hd2FpdCByLmNyZWF0ZUltYWdlRGF0YSghMCwhMSk7YS5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZD10aGlzLm9wdGlvbnMuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ7YS5hZGRJbWFnZU9wcyhBdCxbUV0sQyl9Y2F0Y2goZSl7Y29uc3QgdD1gVW5hYmxlIHRvIGRlY29kZSBpbmxpbmUgaW1hZ2U6ICIke2V9Ii5gO2lmKCF0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKXRocm93IG5ldyBFcnJvcih0KTt3YXJuKHQpfXJldHVybn1sZXQgZD1gaW1nXyR7dGhpcy5pZEZhY3RvcnkuY3JlYXRlT2JqSWQoKX1gLGY9ITE7aWYodGhpcy5wYXJzaW5nVHlwZTNGb250KWQ9YCR7dGhpcy5pZEZhY3RvcnkuZ2V0RG9jSWQoKX1fdHlwZTNfJHtkfWA7ZWxzZSBpZihyJiZnKXtmPXRoaXMuZ2xvYmFsSW1hZ2VDYWNoZS5zaG91bGRDYWNoZShnLHRoaXMucGFnZUluZGV4KTtpZihmKXthc3NlcnQoIWksIkNhbm5vdCBjYWNoZSBhbiBpbmxpbmUgaW1hZ2UgZ2xvYmFsbHkuIik7ZD1gJHt0aGlzLmlkRmFjdG9yeS5nZXREb2NJZCgpfV8ke2R9YH19YS5hZGREZXBlbmRlbmN5KGQpO0U9W2QsYyxsXTthLmFkZEltYWdlT3BzKCRlLEUsQyx1KTtpZihmKXtpZih0aGlzLmdsb2JhbEltYWdlQ2FjaGUuaGFzRGVjb2RlRmFpbGVkKGcpKXt0aGlzLmdsb2JhbEltYWdlQ2FjaGUuc2V0RGF0YShnLHtvYmpJZDpkLGZuOiRlLGFyZ3M6RSxvcHRpb25hbENvbnRlbnQ6QyxoYXNNYXNrOnUsYnl0ZVNpemU6MH0pO3RoaXMuX3NlbmRJbWdEYXRhKGQsbnVsbCxmKTtyZXR1cm59aWYoYypsPjI1ZTR8fHUpe2NvbnN0IGU9YXdhaXQgdGhpcy5oYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiY29tbW9ub2JqIixbZCwiQ29weUxvY2FsSW1hZ2UiLHtpbWFnZVJlZjpnfV0pO2lmKGUpe3RoaXMuZ2xvYmFsSW1hZ2VDYWNoZS5zZXREYXRhKGcse29iaklkOmQsZm46JGUsYXJnczpFLG9wdGlvbmFsQ29udGVudDpDLGhhc01hc2s6dSxieXRlU2l6ZTowfSk7dGhpcy5nbG9iYWxJbWFnZUNhY2hlLmFkZEJ5dGVTaXplKGcsZSk7cmV0dXJufX19UERGSW1hZ2UuYnVpbGRJbWFnZSh7eHJlZjp0aGlzLnhyZWYscmVzOmUsaW1hZ2U6dCxpc0lubGluZTppLHBkZkZ1bmN0aW9uRmFjdG9yeTp0aGlzLl9wZGZGdW5jdGlvbkZhY3RvcnksbG9jYWxDb2xvclNwYWNlQ2FjaGU6bn0pLnRoZW4oKGFzeW5jIGU9PntRPWF3YWl0IGUuY3JlYXRlSW1hZ2VEYXRhKCExLHRoaXMub3B0aW9ucy5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCk7US5kYXRhTGVuPVEuYml0bWFwP1Eud2lkdGgqUS5oZWlnaHQqNDpRLmRhdGEubGVuZ3RoO1EucmVmPWc7ZiYmdGhpcy5nbG9iYWxJbWFnZUNhY2hlLmFkZEJ5dGVTaXplKGcsUS5kYXRhTGVuKTtyZXR1cm4gdGhpcy5fc2VuZEltZ0RhdGEoZCxRLGYpfSkpLmNhdGNoKChlPT57d2FybihgVW5hYmxlIHRvIGRlY29kZSBpbWFnZSAiJHtkfSI6ICIke2V9Ii5gKTtnJiZ0aGlzLmdsb2JhbEltYWdlQ2FjaGUuYWRkRGVjb2RlRmFpbGVkKGcpO3JldHVybiB0aGlzLl9zZW5kSW1nRGF0YShkLG51bGwsZil9KSk7aWYocil7Y29uc3QgZT17b2JqSWQ6ZCxmbjokZSxhcmdzOkUsb3B0aW9uYWxDb250ZW50OkMsaGFzTWFzazp1fTtzLnNldChyLGcsZSk7aWYoZyl7dGhpcy5fcmVnaW9uYWxJbWFnZUNhY2hlLnNldChudWxsLGcsZSk7ZiYmdGhpcy5nbG9iYWxJbWFnZUNhY2hlLnNldERhdGEoZyx7b2JqSWQ6ZCxmbjokZSxhcmdzOkUsb3B0aW9uYWxDb250ZW50OkMsaGFzTWFzazp1LGJ5dGVTaXplOjB9KX19fWhhbmRsZVNNYXNrKGUsdCxpLGEscixzKXtjb25zdCBuPWUuZ2V0KCJHIiksbz17c3VidHlwZTplLmdldCgiUyIpLm5hbWUsYmFja2Ryb3A6ZS5nZXQoIkJDIil9LGc9ZS5nZXQoIlRSIik7aWYoaXNQREZGdW5jdGlvbihnKSl7Y29uc3QgZT10aGlzLl9wZGZGdW5jdGlvbkZhY3RvcnkuY3JlYXRlKGcpLHQ9bmV3IFVpbnQ4QXJyYXkoMjU2KSxpPW5ldyBGbG9hdDMyQXJyYXkoMSk7Zm9yKGxldCBhPTA7YTwyNTY7YSsrKXtpWzBdPWEvMjU1O2UoaSwwLGksMCk7dFthXT0yNTUqaVswXXwwfW8udHJhbnNmZXJNYXA9dH1yZXR1cm4gdGhpcy5idWlsZEZvcm1YT2JqZWN0KHQsbixvLGksYSxyLnN0YXRlLmNsb25lKCkscyl9aGFuZGxlVHJhbnNmZXJGdW5jdGlvbihlKXtsZXQgdDtpZihBcnJheS5pc0FycmF5KGUpKXQ9ZTtlbHNle2lmKCFpc1BERkZ1bmN0aW9uKGUpKXJldHVybiBudWxsO3Q9W2VdfWNvbnN0IGk9W107bGV0IGE9MCxyPTA7Zm9yKGNvbnN0IGUgb2YgdCl7Y29uc3QgdD10aGlzLnhyZWYuZmV0Y2hJZlJlZihlKTthKys7aWYoaXNOYW1lKHQsIklkZW50aXR5Iikpe2kucHVzaChudWxsKTtjb250aW51ZX1pZighaXNQREZGdW5jdGlvbih0KSlyZXR1cm4gbnVsbDtjb25zdCBzPXRoaXMuX3BkZkZ1bmN0aW9uRmFjdG9yeS5jcmVhdGUodCksbj1uZXcgVWludDhBcnJheSgyNTYpLG89bmV3IEZsb2F0MzJBcnJheSgxKTtmb3IobGV0IGU9MDtlPDI1NjtlKyspe29bMF09ZS8yNTU7cyhvLDAsbywwKTtuW2VdPTI1NSpvWzBdfDB9aS5wdXNoKG4pO3IrK31yZXR1cm4gMSE9PWEmJjQhPT1hfHwwPT09cj9udWxsOml9aGFuZGxlVGlsaW5nVHlwZShlLHQsaSxhLHIscyxuLG8pe2NvbnN0IGc9bmV3IE9wZXJhdG9yTGlzdCxjPURpY3QubWVyZ2Uoe3hyZWY6dGhpcy54cmVmLGRpY3RBcnJheTpbci5nZXQoIlJlc291cmNlcyIpLGldfSk7cmV0dXJuIHRoaXMuZ2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06YSx0YXNrOm4scmVzb3VyY2VzOmMsb3BlcmF0b3JMaXN0Omd9KS50aGVuKChmdW5jdGlvbigpe2NvbnN0IGk9Zy5nZXRJUigpLGE9Z2V0VGlsaW5nUGF0dGVybklSKGkscix0KTtzLmFkZERlcGVuZGVuY2llcyhnLmRlcGVuZGVuY2llcyk7cy5hZGRPcChlLGEpO3Iub2JqSWQmJm8uc2V0KG51bGwsci5vYmpJZCx7b3BlcmF0b3JMaXN0SVI6aSxkaWN0OnJ9KX0pKS5jYXRjaCgoZT0+e2lmKCEoZSBpbnN0YW5jZW9mIEFib3J0RXhjZXB0aW9uKSl7aWYoIXRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMpdGhyb3cgZTt3YXJuKGBoYW5kbGVUaWxpbmdUeXBlIC0gaWdub3JpbmcgcGF0dGVybjogIiR7ZX0iLmApfX0pKX1hc3luYyBoYW5kbGVTZXRGb250KGUsdCxpLGEscixzLG49bnVsbCxvPW51bGwpe2NvbnN0IGc9dD8uWzBdaW5zdGFuY2VvZiBOYW1lP3RbMF0ubmFtZTpudWxsO2xldCBjPWF3YWl0IHRoaXMubG9hZEZvbnQoZyxpLGUsbixvKTtpZihjLmZvbnQuaXNUeXBlM0ZvbnQpdHJ5e2F3YWl0IGMubG9hZFR5cGUzRGF0YSh0aGlzLGUscik7YS5hZGREZXBlbmRlbmNpZXMoYy50eXBlM0RlcGVuZGVuY2llcyl9Y2F0Y2goZSl7Yz1uZXcgVHJhbnNsYXRlZEZvbnQoe2xvYWRlZE5hbWU6ImdfZm9udF9lcnJvciIsZm9udDpuZXcgRXJyb3JGb250KGBUeXBlMyBmb250IGxvYWQgZXJyb3I6ICR7ZX1gKSxkaWN0OmMuZm9udCxldmFsdWF0b3JPcHRpb25zOnRoaXMub3B0aW9uc30pfXMuZm9udD1jLmZvbnQ7Yy5zZW5kKHRoaXMuaGFuZGxlcik7cmV0dXJuIGMubG9hZGVkTmFtZX1oYW5kbGVUZXh0KGUsdCl7Y29uc3QgaT10LmZvbnQsYT1pLmNoYXJzVG9HbHlwaHMoZSk7aWYoaS5kYXRhKXsoISEodC50ZXh0UmVuZGVyaW5nTW9kZSZEKXx8IlBhdHRlcm4iPT09dC5maWxsQ29sb3JTcGFjZS5uYW1lfHxpLmRpc2FibGVGb250RmFjZXx8dGhpcy5vcHRpb25zLmRpc2FibGVGb250RmFjZSkmJlBhcnRpYWxFdmFsdWF0b3IuYnVpbGRGb250UGF0aHMoaSxhLHRoaXMuaGFuZGxlcix0aGlzLm9wdGlvbnMpfXJldHVybiBhfWVuc3VyZVN0YXRlRm9udChlKXtpZihlLmZvbnQpcmV0dXJuO2NvbnN0IHQ9bmV3IEZvcm1hdEVycm9yKCJNaXNzaW5nIHNldEZvbnQgKFRmKSBvcGVyYXRvciBiZWZvcmUgdGV4dCByZW5kZXJpbmcgb3BlcmF0b3IuIik7aWYoIXRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMpdGhyb3cgdDt3YXJuKGBlbnN1cmVTdGF0ZUZvbnQ6ICIke3R9Ii5gKX1hc3luYyBzZXRHU3RhdGUoe3Jlc291cmNlczplLGdTdGF0ZTp0LG9wZXJhdG9yTGlzdDppLGNhY2hlS2V5OmEsdGFzazpyLHN0YXRlTWFuYWdlcjpzLGxvY2FsR1N0YXRlQ2FjaGU6bixsb2NhbENvbG9yU3BhY2VDYWNoZTpvfSl7Y29uc3QgZz10Lm9iaklkO2xldCBjPSEwO2NvbnN0IGw9W107bGV0IGg9UHJvbWlzZS5yZXNvbHZlKCk7Zm9yKGNvbnN0IGEgb2YgdC5nZXRLZXlzKCkpe2NvbnN0IG49dC5nZXQoYSk7c3dpdGNoKGEpe2Nhc2UiVHlwZSI6YnJlYWs7Y2FzZSJMVyI6Y2FzZSJMQyI6Y2FzZSJMSiI6Y2FzZSJNTCI6Y2FzZSJEIjpjYXNlIlJJIjpjYXNlIkZMIjpjYXNlIkNBIjpjYXNlImNhIjpsLnB1c2goW2Esbl0pO2JyZWFrO2Nhc2UiRm9udCI6Yz0hMTtoPWgudGhlbigoKCk9PnRoaXMuaGFuZGxlU2V0Rm9udChlLG51bGwsblswXSxpLHIscy5zdGF0ZSkudGhlbigoZnVuY3Rpb24oZSl7aS5hZGREZXBlbmRlbmN5KGUpO2wucHVzaChbYSxbZSxuWzFdXV0pfSkpKSk7YnJlYWs7Y2FzZSJCTSI6bC5wdXNoKFthLG5vcm1hbGl6ZUJsZW5kTW9kZShuKV0pO2JyZWFrO2Nhc2UiU01hc2siOmlmKGlzTmFtZShuLCJOb25lIikpe2wucHVzaChbYSwhMV0pO2JyZWFrfWlmKG4gaW5zdGFuY2VvZiBEaWN0KXtjPSExO2g9aC50aGVuKCgoKT0+dGhpcy5oYW5kbGVTTWFzayhuLGUsaSxyLHMsbykpKTtsLnB1c2goW2EsITBdKX1lbHNlIHdhcm4oIlVuc3VwcG9ydGVkIFNNYXNrIHR5cGUiKTticmVhaztjYXNlIlRSIjpjb25zdCB0PXRoaXMuaGFuZGxlVHJhbnNmZXJGdW5jdGlvbihuKTtsLnB1c2goW2EsdF0pO2JyZWFrO2Nhc2UiT1AiOmNhc2Uib3AiOmNhc2UiT1BNIjpjYXNlIkJHIjpjYXNlIkJHMiI6Y2FzZSJVQ1IiOmNhc2UiVUNSMiI6Y2FzZSJUUjIiOmNhc2UiSFQiOmNhc2UiU00iOmNhc2UiU0EiOmNhc2UiQUlTIjpjYXNlIlRLIjppbmZvKCJncmFwaGljIHN0YXRlIG9wZXJhdG9yICIrYSk7YnJlYWs7ZGVmYXVsdDppbmZvKCJVbmtub3duIGdyYXBoaWMgc3RhdGUgb3BlcmF0b3IgIithKX19YXdhaXQgaDtsLmxlbmd0aD4wJiZpLmFkZE9wKFVBLFtsXSk7YyYmbi5zZXQoYSxnLGwpfWxvYWRGb250KGUsdCxpLGE9bnVsbCxyPW51bGwpe2NvbnN0IGVycm9yRm9udD1hc3luYygpPT5uZXcgVHJhbnNsYXRlZEZvbnQoe2xvYWRlZE5hbWU6ImdfZm9udF9lcnJvciIsZm9udDpuZXcgRXJyb3JGb250KGBGb250ICIke2V9IiBpcyBub3QgYXZhaWxhYmxlLmApLGRpY3Q6dCxldmFsdWF0b3JPcHRpb25zOnRoaXMub3B0aW9uc30pO2xldCBzO2lmKHQpdCBpbnN0YW5jZW9mIFJlZiYmKHM9dCk7ZWxzZXtjb25zdCB0PWkuZ2V0KCJGb250Iik7dCYmKHM9dC5nZXRSYXcoZSkpfWlmKHMpe2lmKHRoaXMudHlwZTNGb250UmVmcz8uaGFzKHMpKXJldHVybiBlcnJvckZvbnQoKTtpZih0aGlzLmZvbnRDYWNoZS5oYXMocykpcmV0dXJuIHRoaXMuZm9udENhY2hlLmdldChzKTt0cnl7dD10aGlzLnhyZWYuZmV0Y2hJZlJlZihzKX1jYXRjaChlKXt3YXJuKGBsb2FkRm9udCAtIGxvb2t1cCBmYWlsZWQ6ICIke2V9Ii5gKX19aWYoISh0IGluc3RhbmNlb2YgRGljdCkpe2lmKCF0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzJiYhdGhpcy5wYXJzaW5nVHlwZTNGb250KXt3YXJuKGBGb250ICIke2V9IiBpcyBub3QgYXZhaWxhYmxlLmApO3JldHVybiBlcnJvckZvbnQoKX13YXJuKGBGb250ICIke2V9IiBpcyBub3QgYXZhaWxhYmxlIC0tIGF0dGVtcHRpbmcgdG8gZmFsbGJhY2sgdG8gYSBkZWZhdWx0IGZvbnQuYCk7dD1hfHxQYXJ0aWFsRXZhbHVhdG9yLmZhbGxiYWNrRm9udERpY3R9aWYodC5jYWNoZUtleSYmdGhpcy5mb250Q2FjaGUuaGFzKHQuY2FjaGVLZXkpKXJldHVybiB0aGlzLmZvbnRDYWNoZS5nZXQodC5jYWNoZUtleSk7Y29uc3R7cHJvbWlzZTpuLHJlc29sdmU6b309UHJvbWlzZS53aXRoUmVzb2x2ZXJzKCk7bGV0IGc7dHJ5e2c9dGhpcy5wcmVFdmFsdWF0ZUZvbnQodCk7Zy5jc3NGb250SW5mbz1yfWNhdGNoKGUpe3dhcm4oYGxvYWRGb250IC0gcHJlRXZhbHVhdGVGb250IGZhaWxlZDogIiR7ZX0iLmApO3JldHVybiBlcnJvckZvbnQoKX1jb25zdHtkZXNjcmlwdG9yOmMsaGFzaDpsfT1nLGg9cyBpbnN0YW5jZW9mIFJlZjtsZXQgQztpZihsJiZjIGluc3RhbmNlb2YgRGljdCl7Y29uc3QgZT1jLmZvbnRBbGlhc2VzfHw9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihlW2xdKXtjb25zdCB0PWVbbF0uYWxpYXNSZWY7aWYoaCYmdCYmdGhpcy5mb250Q2FjaGUuaGFzKHQpKXt0aGlzLmZvbnRDYWNoZS5wdXRBbGlhcyhzLHQpO3JldHVybiB0aGlzLmZvbnRDYWNoZS5nZXQocyl9fWVsc2UgZVtsXT17Zm9udElEOnRoaXMuaWRGYWN0b3J5LmNyZWF0ZUZvbnRJZCgpfTtoJiYoZVtsXS5hbGlhc1JlZj1zKTtDPWVbbF0uZm9udElEfWVsc2UgQz10aGlzLmlkRmFjdG9yeS5jcmVhdGVGb250SWQoKTthc3NlcnQoQz8uc3RhcnRzV2l0aCgiZiIpLCdUaGUgImZvbnRJRCIgbXVzdCBiZSAoY29ycmVjdGx5KSBkZWZpbmVkLicpO2lmKGgpdGhpcy5mb250Q2FjaGUucHV0KHMsbik7ZWxzZXt0LmNhY2hlS2V5PWBjYWNoZUtleV8ke0N9YDt0aGlzLmZvbnRDYWNoZS5wdXQodC5jYWNoZUtleSxuKX10LmxvYWRlZE5hbWU9YCR7dGhpcy5pZEZhY3RvcnkuZ2V0RG9jSWQoKX1fJHtDfWA7dGhpcy50cmFuc2xhdGVGb250KGcpLnRoZW4oKGU9PntvKG5ldyBUcmFuc2xhdGVkRm9udCh7bG9hZGVkTmFtZTp0LmxvYWRlZE5hbWUsZm9udDplLGRpY3Q6dCxldmFsdWF0b3JPcHRpb25zOnRoaXMub3B0aW9uc30pKX0pKS5jYXRjaCgoZT0+e3dhcm4oYGxvYWRGb250IC0gdHJhbnNsYXRlRm9udCBmYWlsZWQ6ICIke2V9Ii5gKTtvKG5ldyBUcmFuc2xhdGVkRm9udCh7bG9hZGVkTmFtZTp0LmxvYWRlZE5hbWUsZm9udDpuZXcgRXJyb3JGb250KGUgaW5zdGFuY2VvZiBFcnJvcj9lLm1lc3NhZ2U6ZSksZGljdDp0LGV2YWx1YXRvck9wdGlvbnM6dGhpcy5vcHRpb25zfSkpfSkpO3JldHVybiBufWJ1aWxkUGF0aChlLHQsaSxhPSExKXtjb25zdCByPWUubGVuZ3RoLTE7aXx8KGk9W10pO2lmKHI8MHx8ZS5mbkFycmF5W3JdIT09cnQpe2lmKGEpe3dhcm4oYEVuY291bnRlcmVkIHBhdGggb3BlcmF0b3IgIiR7dH0iIGluc2lkZSBvZiBhIHRleHQgb2JqZWN0LmApO2UuYWRkT3AoeEEsbnVsbCl9bGV0IHI7c3dpdGNoKHQpe2Nhc2UgT0E6Y29uc3QgZT1pWzBdK2lbMl0sdD1pWzFdK2lbM107cj1bTWF0aC5taW4oaVswXSxlKSxNYXRoLm1pbihpWzFdLHQpLE1hdGgubWF4KGlbMF0sZSksTWF0aC5tYXgoaVsxXSx0KV07YnJlYWs7Y2FzZSBKQTpjYXNlIHZBOnI9W2lbMF0saVsxXSxpWzBdLGlbMV1dO2JyZWFrO2RlZmF1bHQ6cj1bMS8wLDEvMCwtMS8wLC0xLzBdfWUuYWRkT3AocnQsW1t0XSxpLHJdKTthJiZlLmFkZE9wKExBLG51bGwpfWVsc2V7Y29uc3QgYT1lLmFyZ3NBcnJheVtyXTthWzBdLnB1c2godCk7YVsxXS5wdXNoKC4uLmkpO2NvbnN0IHM9YVsyXTtzd2l0Y2godCl7Y2FzZSBPQTpjb25zdCBlPWlbMF0raVsyXSx0PWlbMV0raVszXTtzWzBdPU1hdGgubWluKHNbMF0saVswXSxlKTtzWzFdPU1hdGgubWluKHNbMV0saVsxXSx0KTtzWzJdPU1hdGgubWF4KHNbMl0saVswXSxlKTtzWzNdPU1hdGgubWF4KHNbM10saVsxXSx0KTticmVhaztjYXNlIEpBOmNhc2UgdkE6c1swXT1NYXRoLm1pbihzWzBdLGlbMF0pO3NbMV09TWF0aC5taW4oc1sxXSxpWzFdKTtzWzJdPU1hdGgubWF4KHNbMl0saVswXSk7c1szXT1NYXRoLm1heChzWzNdLGlbMV0pfX19cGFyc2VDb2xvclNwYWNlKHtjczplLHJlc291cmNlczp0LGxvY2FsQ29sb3JTcGFjZUNhY2hlOml9KXtyZXR1cm4gQ29sb3JTcGFjZS5wYXJzZUFzeW5jKHtjczplLHhyZWY6dGhpcy54cmVmLHJlc291cmNlczp0LHBkZkZ1bmN0aW9uRmFjdG9yeTp0aGlzLl9wZGZGdW5jdGlvbkZhY3RvcnksbG9jYWxDb2xvclNwYWNlQ2FjaGU6aX0pLmNhdGNoKChlPT57aWYoZSBpbnN0YW5jZW9mIEFib3J0RXhjZXB0aW9uKXJldHVybiBudWxsO2lmKHRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMpe3dhcm4oYHBhcnNlQ29sb3JTcGFjZSAtIGlnbm9yaW5nIENvbG9yU3BhY2U6ICIke2V9Ii5gKTtyZXR1cm4gbnVsbH10aHJvdyBlfSkpfXBhcnNlU2hhZGluZyh7c2hhZGluZzplLHJlc291cmNlczp0LGxvY2FsQ29sb3JTcGFjZUNhY2hlOmksbG9jYWxTaGFkaW5nUGF0dGVybkNhY2hlOmF9KXtsZXQgcixzPWEuZ2V0KGUpO2lmKHMpcmV0dXJuIHM7dHJ5e3I9UGF0dGVybi5wYXJzZVNoYWRpbmcoZSx0aGlzLnhyZWYsdCx0aGlzLl9wZGZGdW5jdGlvbkZhY3RvcnksaSkuZ2V0SVIoKX1jYXRjaCh0KXtpZih0IGluc3RhbmNlb2YgQWJvcnRFeGNlcHRpb24pcmV0dXJuIG51bGw7aWYodGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycyl7d2FybihgcGFyc2VTaGFkaW5nIC0gaWdub3Jpbmcgc2hhZGluZzogIiR7dH0iLmApO2Euc2V0KGUsbnVsbCk7cmV0dXJuIG51bGx9dGhyb3cgdH1zPWBwYXR0ZXJuXyR7dGhpcy5pZEZhY3RvcnkuY3JlYXRlT2JqSWQoKX1gO3RoaXMucGFyc2luZ1R5cGUzRm9udCYmKHM9YCR7dGhpcy5pZEZhY3RvcnkuZ2V0RG9jSWQoKX1fdHlwZTNfJHtzfWApO2Euc2V0KGUscyk7dGhpcy5wYXJzaW5nVHlwZTNGb250P3RoaXMuaGFuZGxlci5zZW5kKCJjb21tb25vYmoiLFtzLCJQYXR0ZXJuIixyXSk6dGhpcy5oYW5kbGVyLnNlbmQoIm9iaiIsW3MsdGhpcy5wYWdlSW5kZXgsIlBhdHRlcm4iLHJdKTtyZXR1cm4gc31oYW5kbGVDb2xvck4oZSx0LGksYSxyLHMsbixvLGcsYyl7Y29uc3QgbD1pLnBvcCgpO2lmKGwgaW5zdGFuY2VvZiBOYW1lKXtjb25zdCBoPXIuZ2V0UmF3KGwubmFtZSksQz1oIGluc3RhbmNlb2YgUmVmJiZnLmdldEJ5UmVmKGgpO2lmKEMpdHJ5e2NvbnN0IHI9YS5iYXNlP2EuYmFzZS5nZXRSZ2IoaSwwKTpudWxsLHM9Z2V0VGlsaW5nUGF0dGVybklSKEMub3BlcmF0b3JMaXN0SVIsQy5kaWN0LHIpO2UuYWRkT3AodCxzKTtyZXR1cm59Y2F0Y2h7fWNvbnN0IFE9dGhpcy54cmVmLmZldGNoSWZSZWYoaCk7aWYoUSl7Y29uc3Qgcj1RIGluc3RhbmNlb2YgQmFzZVN0cmVhbT9RLmRpY3Q6USxsPXIuZ2V0KCJQYXR0ZXJuVHlwZSIpO2lmKGw9PT15cil7Y29uc3Qgbz1hLmJhc2U/YS5iYXNlLmdldFJnYihpLDApOm51bGw7cmV0dXJuIHRoaXMuaGFuZGxlVGlsaW5nVHlwZSh0LG8scyxRLHIsZSxuLGcpfWlmKGw9PT13cil7Y29uc3QgaT1yLmdldCgiU2hhZGluZyIpLGE9dGhpcy5wYXJzZVNoYWRpbmcoe3NoYWRpbmc6aSxyZXNvdXJjZXM6cyxsb2NhbENvbG9yU3BhY2VDYWNoZTpvLGxvY2FsU2hhZGluZ1BhdHRlcm5DYWNoZTpjfSk7aWYoYSl7Y29uc3QgaT1sb29rdXBNYXRyaXgoci5nZXRBcnJheSgiTWF0cml4IiksbnVsbCk7ZS5hZGRPcCh0LFsiU2hhZGluZyIsYSxpXSl9cmV0dXJufXRocm93IG5ldyBGb3JtYXRFcnJvcihgVW5rbm93biBQYXR0ZXJuVHlwZTogJHtsfWApfX10aHJvdyBuZXcgRm9ybWF0RXJyb3IoYFVua25vd24gUGF0dGVybk5hbWU6ICR7bH1gKX1fcGFyc2VWaXNpYmlsaXR5RXhwcmVzc2lvbihlLHQsaSl7aWYoKyt0PjEwKXt3YXJuKCJWaXNpYmlsaXR5IGV4cHJlc3Npb24gaXMgdG9vIGRlZXBseSBuZXN0ZWQiKTtyZXR1cm59Y29uc3QgYT1lLmxlbmd0aCxyPXRoaXMueHJlZi5mZXRjaElmUmVmKGVbMF0pO2lmKCEoYTwyKSYmciBpbnN0YW5jZW9mIE5hbWUpe3N3aXRjaChyLm5hbWUpe2Nhc2UiQW5kIjpjYXNlIk9yIjpjYXNlIk5vdCI6aS5wdXNoKHIubmFtZSk7YnJlYWs7ZGVmYXVsdDp3YXJuKGBJbnZhbGlkIG9wZXJhdG9yICR7ci5uYW1lfSBpbiB2aXNpYmlsaXR5IGV4cHJlc3Npb25gKTtyZXR1cm59Zm9yKGxldCByPTE7cjxhO3IrKyl7Y29uc3QgYT1lW3JdLHM9dGhpcy54cmVmLmZldGNoSWZSZWYoYSk7aWYoQXJyYXkuaXNBcnJheShzKSl7Y29uc3QgZT1bXTtpLnB1c2goZSk7dGhpcy5fcGFyc2VWaXNpYmlsaXR5RXhwcmVzc2lvbihzLHQsZSl9ZWxzZSBhIGluc3RhbmNlb2YgUmVmJiZpLnB1c2goYS50b1N0cmluZygpKX19ZWxzZSB3YXJuKCJJbnZhbGlkIHZpc2liaWxpdHkgZXhwcmVzc2lvbiIpfWFzeW5jIHBhcnNlTWFya2VkQ29udGVudFByb3BzKGUsdCl7bGV0IGk7aWYoZSBpbnN0YW5jZW9mIE5hbWUpe2k9dC5nZXQoIlByb3BlcnRpZXMiKS5nZXQoZS5uYW1lKX1lbHNle2lmKCEoZSBpbnN0YW5jZW9mIERpY3QpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiT3B0aW9uYWwgY29udGVudCBwcm9wZXJ0aWVzIG1hbGZvcm1lZC4iKTtpPWV9Y29uc3QgYT1pLmdldCgiVHlwZSIpPy5uYW1lO2lmKCJPQ0ciPT09YSlyZXR1cm57dHlwZTphLGlkOmkub2JqSWR9O2lmKCJPQ01EIj09PWEpe2NvbnN0IGU9aS5nZXQoIlZFIik7aWYoQXJyYXkuaXNBcnJheShlKSl7Y29uc3QgdD1bXTt0aGlzLl9wYXJzZVZpc2liaWxpdHlFeHByZXNzaW9uKGUsMCx0KTtpZih0Lmxlbmd0aD4wKXJldHVybnt0eXBlOiJPQ01EIixleHByZXNzaW9uOnR9fWNvbnN0IHQ9aS5nZXQoIk9DR3MiKTtpZihBcnJheS5pc0FycmF5KHQpfHx0IGluc3RhbmNlb2YgRGljdCl7Y29uc3QgZT1bXTtpZihBcnJheS5pc0FycmF5KHQpKWZvcihjb25zdCBpIG9mIHQpZS5wdXNoKGkudG9TdHJpbmcoKSk7ZWxzZSBlLnB1c2godC5vYmpJZCk7cmV0dXJue3R5cGU6YSxpZHM6ZSxwb2xpY3k6aS5nZXQoIlAiKWluc3RhbmNlb2YgTmFtZT9pLmdldCgiUCIpLm5hbWU6bnVsbCxleHByZXNzaW9uOm51bGx9fWlmKHQgaW5zdGFuY2VvZiBSZWYpcmV0dXJue3R5cGU6YSxpZDp0LnRvU3RyaW5nKCl9fXJldHVybiBudWxsfWdldE9wZXJhdG9yTGlzdCh7c3RyZWFtOmUsdGFzazp0LHJlc291cmNlczppLG9wZXJhdG9yTGlzdDphLGluaXRpYWxTdGF0ZTpyPW51bGwsZmFsbGJhY2tGb250RGljdDpzPW51bGx9KXtpfHw9RGljdC5lbXB0eTtyfHw9bmV3IEV2YWxTdGF0ZTtpZighYSl0aHJvdyBuZXcgRXJyb3IoJ2dldE9wZXJhdG9yTGlzdDogbWlzc2luZyAib3BlcmF0b3JMaXN0IiBwYXJhbWV0ZXInKTtjb25zdCBuPXRoaXMsbz10aGlzLnhyZWY7bGV0IGc9ITE7Y29uc3QgYz1uZXcgTG9jYWxJbWFnZUNhY2hlLGw9bmV3IExvY2FsQ29sb3JTcGFjZUNhY2hlLGg9bmV3IExvY2FsR1N0YXRlQ2FjaGUsQz1uZXcgTG9jYWxUaWxpbmdQYXR0ZXJuQ2FjaGUsUT1uZXcgTWFwLEU9aS5nZXQoIlhPYmplY3QiKXx8RGljdC5lbXB0eSx1PWkuZ2V0KCJQYXR0ZXJuIil8fERpY3QuZW1wdHksZD1uZXcgU3RhdGVNYW5hZ2VyKHIpLGY9bmV3IEV2YWx1YXRvclByZXByb2Nlc3NvcihlLG8sZCkscD1uZXcgVGltZVNsb3RNYW5hZ2VyO2Z1bmN0aW9uIGNsb3NlUGVuZGluZ1Jlc3RvcmVPUFMoZSl7Zm9yKGxldCBlPTAsdD1mLnNhdmVkU3RhdGVzRGVwdGg7ZTx0O2UrKylhLmFkZE9wKExBLFtdKX1yZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uIHByb21pc2VCb2R5KGUscil7Y29uc3QgbmV4dD1mdW5jdGlvbih0KXtQcm9taXNlLmFsbChbdCxhLnJlYWR5XSkudGhlbigoZnVuY3Rpb24oKXt0cnl7cHJvbWlzZUJvZHkoZSxyKX1jYXRjaChlKXtyKGUpfX0pLHIpfTt0LmVuc3VyZU5vdFRlcm1pbmF0ZWQoKTtwLnJlc2V0KCk7Y29uc3QgbT17fTtsZXQgeSx3LGIsRCxTLGs7Zm9yKDshKHk9cC5jaGVjaygpKTspe20uYXJncz1udWxsO2lmKCFmLnJlYWQobSkpYnJlYWs7bGV0IGU9bS5hcmdzLHI9bS5mbjtzd2l0Y2goMHxyKXtjYXNlIEhlOms9ZVswXWluc3RhbmNlb2YgTmFtZTtTPWVbMF0ubmFtZTtpZihrKXtjb25zdCB0PWMuZ2V0QnlOYW1lKFMpO2lmKHQpe2FkZExvY2FsbHlDYWNoZWRJbWFnZU9wcyhhLHQpO2U9bnVsbDtjb250aW51ZX19bmV4dChuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSxyKXtpZighayl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIlhPYmplY3QgbXVzdCBiZSByZWZlcnJlZCB0byBieSBuYW1lLiIpO2xldCBzPUUuZ2V0UmF3KFMpO2lmKHMgaW5zdGFuY2VvZiBSZWYpe2NvbnN0IHQ9Yy5nZXRCeVJlZihzKXx8bi5fcmVnaW9uYWxJbWFnZUNhY2hlLmdldEJ5UmVmKHMpO2lmKHQpe2FkZExvY2FsbHlDYWNoZWRJbWFnZU9wcyhhLHQpO2UoKTtyZXR1cm59Y29uc3QgaT1uLmdsb2JhbEltYWdlQ2FjaGUuZ2V0RGF0YShzLG4ucGFnZUluZGV4KTtpZihpKXthLmFkZERlcGVuZGVuY3koaS5vYmpJZCk7YS5hZGRJbWFnZU9wcyhpLmZuLGkuYXJncyxpLm9wdGlvbmFsQ29udGVudCxpLmhhc01hc2spO2UoKTtyZXR1cm59cz1vLmZldGNoKHMpfWlmKCEocyBpbnN0YW5jZW9mIEJhc2VTdHJlYW0pKXRocm93IG5ldyBGb3JtYXRFcnJvcigiWE9iamVjdCBzaG91bGQgYmUgYSBzdHJlYW0iKTtjb25zdCBnPXMuZGljdC5nZXQoIlN1YnR5cGUiKTtpZighKGcgaW5zdGFuY2VvZiBOYW1lKSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIlhPYmplY3Qgc2hvdWxkIGhhdmUgYSBOYW1lIHN1YnR5cGUiKTtpZigiRm9ybSIhPT1nLm5hbWUpaWYoIkltYWdlIiE9PWcubmFtZSl7aWYoIlBTIiE9PWcubmFtZSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYFVuaGFuZGxlZCBYT2JqZWN0IHN1YnR5cGUgJHtnLm5hbWV9YCk7aW5mbygiSWdub3JlZCBYT2JqZWN0IHN1YnR5cGUgUFMiKTtlKCl9ZWxzZSBuLmJ1aWxkUGFpbnRJbWFnZVhPYmplY3Qoe3Jlc291cmNlczppLGltYWdlOnMsb3BlcmF0b3JMaXN0OmEsY2FjaGVLZXk6Uyxsb2NhbEltYWdlQ2FjaGU6Yyxsb2NhbENvbG9yU3BhY2VDYWNoZTpsfSkudGhlbihlLHIpO2Vsc2V7ZC5zYXZlKCk7bi5idWlsZEZvcm1YT2JqZWN0KGkscyxudWxsLGEsdCxkLnN0YXRlLmNsb25lKCksbCkudGhlbigoZnVuY3Rpb24oKXtkLnJlc3RvcmUoKTtlKCl9KSxyKX19KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe2lmKCEoZSBpbnN0YW5jZW9mIEFib3J0RXhjZXB0aW9uKSl7aWYoIW4ub3B0aW9ucy5pZ25vcmVFcnJvcnMpdGhyb3cgZTt3YXJuKGBnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBYT2JqZWN0OiAiJHtlfSIuYCl9fSkpKTtyZXR1cm47Y2FzZSBvZTpjb25zdCBmPWVbMV07bmV4dChuLmhhbmRsZVNldEZvbnQoaSxlLG51bGwsYSx0LGQuc3RhdGUscykudGhlbigoZnVuY3Rpb24oZSl7YS5hZGREZXBlbmRlbmN5KGUpO2EuYWRkT3Aob2UsW2UsZl0pfSkpKTtyZXR1cm47Y2FzZSB0ZTpnPSEwO2JyZWFrO2Nhc2UgaWU6Zz0hMTticmVhaztjYXNlIExlOmNvbnN0IHA9ZVswXS5jYWNoZUtleTtpZihwKXtjb25zdCB0PWMuZ2V0QnlOYW1lKHApO2lmKHQpe2FkZExvY2FsbHlDYWNoZWRJbWFnZU9wcyhhLHQpO2U9bnVsbDtjb250aW51ZX19bmV4dChuLmJ1aWxkUGFpbnRJbWFnZVhPYmplY3Qoe3Jlc291cmNlczppLGltYWdlOmVbMF0saXNJbmxpbmU6ITAsb3BlcmF0b3JMaXN0OmEsY2FjaGVLZXk6cCxsb2NhbEltYWdlQ2FjaGU6Yyxsb2NhbENvbG9yU3BhY2VDYWNoZTpsfSkpO3JldHVybjtjYXNlIEJlOmlmKCFkLnN0YXRlLmZvbnQpe24uZW5zdXJlU3RhdGVGb250KGQuc3RhdGUpO2NvbnRpbnVlfWVbMF09bi5oYW5kbGVUZXh0KGVbMF0sZC5zdGF0ZSk7YnJlYWs7Y2FzZSBRZTppZighZC5zdGF0ZS5mb250KXtuLmVuc3VyZVN0YXRlRm9udChkLnN0YXRlKTtjb250aW51ZX1jb25zdCBtPVtdLHk9ZC5zdGF0ZTtmb3IoY29uc3QgdCBvZiBlWzBdKSJzdHJpbmciPT10eXBlb2YgdD9tLnB1c2goLi4ubi5oYW5kbGVUZXh0KHQseSkpOiJudW1iZXIiPT10eXBlb2YgdCYmbS5wdXNoKHQpO2VbMF09bTtyPUJlO2JyZWFrO2Nhc2UgRWU6aWYoIWQuc3RhdGUuZm9udCl7bi5lbnN1cmVTdGF0ZUZvbnQoZC5zdGF0ZSk7Y29udGludWV9YS5hZGRPcChDZSk7ZVswXT1uLmhhbmRsZVRleHQoZVswXSxkLnN0YXRlKTtyPUJlO2JyZWFrO2Nhc2UgdWU6aWYoIWQuc3RhdGUuZm9udCl7bi5lbnN1cmVTdGF0ZUZvbnQoZC5zdGF0ZSk7Y29udGludWV9YS5hZGRPcChDZSk7YS5hZGRPcChyZSxbZS5zaGlmdCgpXSk7YS5hZGRPcChhZSxbZS5zaGlmdCgpXSk7ZVswXT1uLmhhbmRsZVRleHQoZVswXSxkLnN0YXRlKTtyPUJlO2JyZWFrO2Nhc2UgZ2U6ZC5zdGF0ZS50ZXh0UmVuZGVyaW5nTW9kZT1lWzBdO2JyZWFrO2Nhc2UgbWU6e2NvbnN0IHQ9Q29sb3JTcGFjZS5nZXRDYWNoZWQoZVswXSxvLGwpO2lmKHQpe2Quc3RhdGUuZmlsbENvbG9yU3BhY2U9dDtjb250aW51ZX1uZXh0KG4ucGFyc2VDb2xvclNwYWNlKHtjczplWzBdLHJlc291cmNlczppLGxvY2FsQ29sb3JTcGFjZUNhY2hlOmx9KS50aGVuKChmdW5jdGlvbihlKXtkLnN0YXRlLmZpbGxDb2xvclNwYWNlPWV8fENvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5fSkpKTtyZXR1cm59Y2FzZSBwZTp7Y29uc3QgdD1Db2xvclNwYWNlLmdldENhY2hlZChlWzBdLG8sbCk7aWYodCl7ZC5zdGF0ZS5zdHJva2VDb2xvclNwYWNlPXQ7Y29udGludWV9bmV4dChuLnBhcnNlQ29sb3JTcGFjZSh7Y3M6ZVswXSxyZXNvdXJjZXM6aSxsb2NhbENvbG9yU3BhY2VDYWNoZTpsfSkudGhlbigoZnVuY3Rpb24oZSl7ZC5zdGF0ZS5zdHJva2VDb2xvclNwYWNlPWV8fENvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5fSkpKTtyZXR1cm59Y2FzZSBiZTpEPWQuc3RhdGUuZmlsbENvbG9yU3BhY2U7ZT1ELmdldFJnYihlLDApO3I9UmU7YnJlYWs7Y2FzZSB5ZTpEPWQuc3RhdGUuc3Ryb2tlQ29sb3JTcGFjZTtlPUQuZ2V0UmdiKGUsMCk7cj1rZTticmVhaztjYXNlIFNlOmQuc3RhdGUuZmlsbENvbG9yU3BhY2U9Q29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXk7ZT1Db2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheS5nZXRSZ2IoZSwwKTtyPVJlO2JyZWFrO2Nhc2UgRmU6ZC5zdGF0ZS5zdHJva2VDb2xvclNwYWNlPUNvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5O2U9Q29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXkuZ2V0UmdiKGUsMCk7cj1rZTticmVhaztjYXNlIEdlOmQuc3RhdGUuZmlsbENvbG9yU3BhY2U9Q29sb3JTcGFjZS5zaW5nbGV0b25zLmNteWs7ZT1Db2xvclNwYWNlLnNpbmdsZXRvbnMuY215ay5nZXRSZ2IoZSwwKTtyPVJlO2JyZWFrO2Nhc2UgTmU6ZC5zdGF0ZS5zdHJva2VDb2xvclNwYWNlPUNvbG9yU3BhY2Uuc2luZ2xldG9ucy5jbXlrO2U9Q29sb3JTcGFjZS5zaW5nbGV0b25zLmNteWsuZ2V0UmdiKGUsMCk7cj1rZTticmVhaztjYXNlIFJlOmQuc3RhdGUuZmlsbENvbG9yU3BhY2U9Q29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYjtlPUNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2IuZ2V0UmdiKGUsMCk7YnJlYWs7Y2FzZSBrZTpkLnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U9Q29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYjtlPUNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2IuZ2V0UmdiKGUsMCk7YnJlYWs7Y2FzZSBEZTpEPWQuc3RhdGUucGF0dGVybkZpbGxDb2xvclNwYWNlO2lmKCFEKXtpZihpc051bWJlckFycmF5KGUsbnVsbCkpe2U9Q29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXkuZ2V0UmdiKGUsMCk7cj1SZTticmVha31lPVtdO3I9bnQ7YnJlYWt9aWYoIlBhdHRlcm4iPT09RC5uYW1lKXtuZXh0KG4uaGFuZGxlQ29sb3JOKGEsRGUsZSxELHUsaSx0LGwsQyxRKSk7cmV0dXJufWU9RC5nZXRSZ2IoZSwwKTtyPVJlO2JyZWFrO2Nhc2Ugd2U6RD1kLnN0YXRlLnBhdHRlcm5TdHJva2VDb2xvclNwYWNlO2lmKCFEKXtpZihpc051bWJlckFycmF5KGUsbnVsbCkpe2U9Q29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXkuZ2V0UmdiKGUsMCk7cj1rZTticmVha31lPVtdO3I9c3Q7YnJlYWt9aWYoIlBhdHRlcm4iPT09RC5uYW1lKXtuZXh0KG4uaGFuZGxlQ29sb3JOKGEsd2UsZSxELHUsaSx0LGwsQyxRKSk7cmV0dXJufWU9RC5nZXRSZ2IoZSwwKTtyPWtlO2JyZWFrO2Nhc2UgTWU6bGV0IFI7dHJ5e2NvbnN0IHQ9aS5nZXQoIlNoYWRpbmciKTtpZighdCl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIk5vIHNoYWRpbmcgcmVzb3VyY2UgZm91bmQiKTtSPXQuZ2V0KGVbMF0ubmFtZSk7aWYoIVIpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJObyBzaGFkaW5nIG9iamVjdCBmb3VuZCIpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBBYm9ydEV4Y2VwdGlvbiljb250aW51ZTtpZihuLm9wdGlvbnMuaWdub3JlRXJyb3JzKXt3YXJuKGBnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBTaGFkaW5nOiAiJHtlfSIuYCk7Y29udGludWV9dGhyb3cgZX1jb25zdCBOPW4ucGFyc2VTaGFkaW5nKHtzaGFkaW5nOlIscmVzb3VyY2VzOmksbG9jYWxDb2xvclNwYWNlQ2FjaGU6bCxsb2NhbFNoYWRpbmdQYXR0ZXJuQ2FjaGU6UX0pO2lmKCFOKWNvbnRpbnVlO2U9W05dO3I9TWU7YnJlYWs7Y2FzZSBVQTprPWVbMF1pbnN0YW5jZW9mIE5hbWU7Uz1lWzBdLm5hbWU7aWYoayl7Y29uc3QgdD1oLmdldEJ5TmFtZShTKTtpZih0KXt0Lmxlbmd0aD4wJiZhLmFkZE9wKFVBLFt0XSk7ZT1udWxsO2NvbnRpbnVlfX1uZXh0KG5ldyBQcm9taXNlKChmdW5jdGlvbihlLHIpe2lmKCFrKXRocm93IG5ldyBGb3JtYXRFcnJvcigiR1N0YXRlIG11c3QgYmUgcmVmZXJyZWQgdG8gYnkgbmFtZS4iKTtjb25zdCBzPWkuZ2V0KCJFeHRHU3RhdGUiKTtpZighKHMgaW5zdGFuY2VvZiBEaWN0KSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkV4dEdTdGF0ZSBzaG91bGQgYmUgYSBkaWN0aW9uYXJ5LiIpO2NvbnN0IG89cy5nZXQoUyk7aWYoIShvIGluc3RhbmNlb2YgRGljdCkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJHU3RhdGUgc2hvdWxkIGJlIGEgZGljdGlvbmFyeS4iKTtuLnNldEdTdGF0ZSh7cmVzb3VyY2VzOmksZ1N0YXRlOm8sb3BlcmF0b3JMaXN0OmEsY2FjaGVLZXk6Uyx0YXNrOnQsc3RhdGVNYW5hZ2VyOmQsbG9jYWxHU3RhdGVDYWNoZTpoLGxvY2FsQ29sb3JTcGFjZUNhY2hlOmx9KS50aGVuKGUscil9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe2lmKCEoZSBpbnN0YW5jZW9mIEFib3J0RXhjZXB0aW9uKSl7aWYoIW4ub3B0aW9ucy5pZ25vcmVFcnJvcnMpdGhyb3cgZTt3YXJuKGBnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBFeHRHU3RhdGU6ICIke2V9Ii5gKX19KSkpO3JldHVybjtjYXNlIEpBOmNhc2UgdkE6Y2FzZSBZQTpjYXNlIEtBOmNhc2UgVEE6Y2FzZSBxQTpjYXNlIE9BOm4uYnVpbGRQYXRoKGEscixlLGcpO2NvbnRpbnVlO2Nhc2UgSmU6Y2FzZSB2ZTpjYXNlIHFlOmNhc2UgT2U6Y29udGludWU7Y2FzZSBLZTppZighKGVbMF1pbnN0YW5jZW9mIE5hbWUpKXt3YXJuKGBFeHBlY3RlZCBuYW1lIGZvciBiZWdpbk1hcmtlZENvbnRlbnRQcm9wcyBhcmcwPSR7ZVswXX1gKTthLmFkZE9wKEtlLFsiT0MiLG51bGxdKTtjb250aW51ZX1pZigiT0MiPT09ZVswXS5uYW1lKXtuZXh0KG4ucGFyc2VNYXJrZWRDb250ZW50UHJvcHMoZVsxXSxpKS50aGVuKChlPT57YS5hZGRPcChLZSxbIk9DIixlXSl9KSkuY2F0Y2goKGU9PntpZighKGUgaW5zdGFuY2VvZiBBYm9ydEV4Y2VwdGlvbikpe2lmKCFuLm9wdGlvbnMuaWdub3JlRXJyb3JzKXRocm93IGU7d2FybihgZ2V0T3BlcmF0b3JMaXN0IC0gaWdub3JpbmcgYmVnaW5NYXJrZWRDb250ZW50UHJvcHM6ICIke2V9Ii5gKTthLmFkZE9wKEtlLFsiT0MiLG51bGxdKX19KSkpO3JldHVybn1lPVtlWzBdLm5hbWUsZVsxXWluc3RhbmNlb2YgRGljdD9lWzFdLmdldCgiTUNJRCIpOm51bGxdO2JyZWFrO2RlZmF1bHQ6aWYobnVsbCE9PWUpe2Zvcih3PTAsYj1lLmxlbmd0aDt3PGImJiEoZVt3XWluc3RhbmNlb2YgRGljdCk7dysrKTtpZih3PGIpe3dhcm4oImdldE9wZXJhdG9yTGlzdCAtIGlnbm9yaW5nIG9wZXJhdG9yOiAiK3IpO2NvbnRpbnVlfX19YS5hZGRPcChyLGUpfWlmKHkpbmV4dChicik7ZWxzZXtjbG9zZVBlbmRpbmdSZXN0b3JlT1BTKCk7ZSgpfX0pKS5jYXRjaCgoZT0+e2lmKCEoZSBpbnN0YW5jZW9mIEFib3J0RXhjZXB0aW9uKSl7aWYoIXRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMpdGhyb3cgZTt3YXJuKGBnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBlcnJvcnMgZHVyaW5nICIke3QubmFtZX0iIHRhc2s6ICIke2V9Ii5gKTtjbG9zZVBlbmRpbmdSZXN0b3JlT1BTKCl9fSkpfWdldFRleHRDb250ZW50KHtzdHJlYW06ZSx0YXNrOnQscmVzb3VyY2VzOmksc3RhdGVNYW5hZ2VyOnM9bnVsbCxpbmNsdWRlTWFya2VkQ29udGVudDpuPSExLHNpbms6byxzZWVuU3R5bGVzOmc9bmV3IFNldCx2aWV3Qm94OmMsbGFuZzpsPW51bGwsbWFya2VkQ29udGVudERhdGE6aD1udWxsLGRpc2FibGVOb3JtYWxpemF0aW9uOkM9ITEsa2VlcFdoaXRlU3BhY2U6UT0hMX0pe2l8fD1EaWN0LmVtcHR5O3N8fD1uZXcgU3RhdGVNYW5hZ2VyKG5ldyBUZXh0U3RhdGUpO24mJihofHw9e2xldmVsOjB9KTtjb25zdCBFPXtpdGVtczpbXSxzdHlsZXM6T2JqZWN0LmNyZWF0ZShudWxsKSxsYW5nOmx9LHU9e2luaXRpYWxpemVkOiExLHN0cjpbXSx0b3RhbFdpZHRoOjAsdG90YWxIZWlnaHQ6MCx3aWR0aDowLGhlaWdodDowLHZlcnRpY2FsOiExLHByZXZUcmFuc2Zvcm06bnVsbCx0ZXh0QWR2YW5jZVNjYWxlOjAsc3BhY2VJbkZsb3dNaW46MCxzcGFjZUluRmxvd01heDowLHRyYWNraW5nU3BhY2VNaW46MS8wLG5lZ2F0aXZlU3BhY2VNYXg6LTEvMCxub3RBU3BhY2U6LTEvMCx0cmFuc2Zvcm06bnVsbCxmb250TmFtZTpudWxsLGhhc0VPTDohMX0sZD1bIiAiLCIgIl07bGV0IGY9MDtmdW5jdGlvbiBzYXZlTGFzdENoYXIoZSl7Y29uc3QgdD0oZisxKSUyLGk9IiAiIT09ZFtmXSYmIiAiPT09ZFt0XTtkW2ZdPWU7Zj10O3JldHVybiFRJiZpfWZ1bmN0aW9uIHNob3VsZEFkZFdoaXRlcHNhY2UoKXtyZXR1cm4hUSYmIiAiIT09ZFtmXSYmIiAiPT09ZFsoZisxKSUyXX1mdW5jdGlvbiByZXNldExhc3RDaGFycygpe2RbMF09ZFsxXT0iICI7Zj0wfWNvbnN0IHA9dGhpcyxtPXRoaXMueHJlZix5PVtdO2xldCB3PW51bGw7Y29uc3QgYj1uZXcgTG9jYWxJbWFnZUNhY2hlLEQ9bmV3IExvY2FsR1N0YXRlQ2FjaGUsUz1uZXcgRXZhbHVhdG9yUHJlcHJvY2Vzc29yKGUsbSxzKTtsZXQgaztmdW5jdGlvbiBwdXNoV2hpdGVzcGFjZSh7d2lkdGg6ZT0wLGhlaWdodDp0PTAsdHJhbnNmb3JtOmk9dS5wcmV2VHJhbnNmb3JtLGZvbnROYW1lOmE9dS5mb250TmFtZX0pe0UuaXRlbXMucHVzaCh7c3RyOiIgIixkaXI6Imx0ciIsd2lkdGg6ZSxoZWlnaHQ6dCx0cmFuc2Zvcm06aSxmb250TmFtZTphLGhhc0VPTDohMX0pfWZ1bmN0aW9uIGdldEN1cnJlbnRUZXh0VHJhbnNmb3JtKCl7Y29uc3QgZT1rLmZvbnQsdD1bay5mb250U2l6ZSprLnRleHRIU2NhbGUsMCwwLGsuZm9udFNpemUsMCxrLnRleHRSaXNlXTtpZihlLmlzVHlwZTNGb250JiYoay5mb250U2l6ZTw9MXx8ZS5pc0NoYXJCQm94KSYmIWlzQXJyYXlFcXVhbChrLmZvbnRNYXRyaXgscikpe2NvbnN0IGk9ZS5iYm94WzNdLWUuYmJveFsxXTtpPjAmJih0WzNdKj1pKmsuZm9udE1hdHJpeFszXSl9cmV0dXJuIFV0aWwudHJhbnNmb3JtKGsuY3RtLFV0aWwudHJhbnNmb3JtKGsudGV4dE1hdHJpeCx0KSl9ZnVuY3Rpb24gZW5zdXJlVGV4dENvbnRlbnRJdGVtKCl7aWYodS5pbml0aWFsaXplZClyZXR1cm4gdTtjb25zdHtmb250OmUsbG9hZGVkTmFtZTp0fT1rO2lmKCFnLmhhcyh0KSl7Zy5hZGQodCk7RS5zdHlsZXNbdF09e2ZvbnRGYW1pbHk6ZS5mYWxsYmFja05hbWUsYXNjZW50OmUuYXNjZW50LGRlc2NlbnQ6ZS5kZXNjZW50LHZlcnRpY2FsOmUudmVydGljYWx9O2lmKHAub3B0aW9ucy5mb250RXh0cmFQcm9wZXJ0aWVzJiZlLnN5c3RlbUZvbnRJbmZvKXtjb25zdCBpPUUuc3R5bGVzW3RdO2kuZm9udFN1YnN0aXR1dGlvbj1lLnN5c3RlbUZvbnRJbmZvLmNzcztpLmZvbnRTdWJzdGl0dXRpb25Mb2FkZWROYW1lPWUuc3lzdGVtRm9udEluZm8ubG9hZGVkTmFtZX19dS5mb250TmFtZT10O2NvbnN0IGk9dS50cmFuc2Zvcm09Z2V0Q3VycmVudFRleHRUcmFuc2Zvcm0oKTtpZihlLnZlcnRpY2FsKXt1LndpZHRoPXUudG90YWxXaWR0aD1NYXRoLmh5cG90KGlbMF0saVsxXSk7dS5oZWlnaHQ9dS50b3RhbEhlaWdodD0wO3UudmVydGljYWw9ITB9ZWxzZXt1LndpZHRoPXUudG90YWxXaWR0aD0wO3UuaGVpZ2h0PXUudG90YWxIZWlnaHQ9TWF0aC5oeXBvdChpWzJdLGlbM10pO3UudmVydGljYWw9ITF9Y29uc3QgYT1NYXRoLmh5cG90KGsudGV4dExpbmVNYXRyaXhbMF0say50ZXh0TGluZU1hdHJpeFsxXSkscj1NYXRoLmh5cG90KGsuY3RtWzBdLGsuY3RtWzFdKTt1LnRleHRBZHZhbmNlU2NhbGU9ciphO2NvbnN0e2ZvbnRTaXplOnN9PWs7dS50cmFja2luZ1NwYWNlTWluPS4xMDIqczt1Lm5vdEFTcGFjZT0uMDMqczt1Lm5lZ2F0aXZlU3BhY2VNYXg9LS4yKnM7dS5zcGFjZUluRmxvd01pbj0uMTAyKnM7dS5zcGFjZUluRmxvd01heD0uNipzO3UuaGFzRU9MPSExO3UuaW5pdGlhbGl6ZWQ9ITA7cmV0dXJuIHV9ZnVuY3Rpb24gdXBkYXRlQWR2YW5jZVNjYWxlKCl7aWYoIXUuaW5pdGlhbGl6ZWQpcmV0dXJuO2NvbnN0IGU9TWF0aC5oeXBvdChrLnRleHRMaW5lTWF0cml4WzBdLGsudGV4dExpbmVNYXRyaXhbMV0pLHQ9TWF0aC5oeXBvdChrLmN0bVswXSxrLmN0bVsxXSkqZTtpZih0IT09dS50ZXh0QWR2YW5jZVNjYWxlKXtpZih1LnZlcnRpY2FsKXt1LnRvdGFsSGVpZ2h0Kz11LmhlaWdodCp1LnRleHRBZHZhbmNlU2NhbGU7dS5oZWlnaHQ9MH1lbHNle3UudG90YWxXaWR0aCs9dS53aWR0aCp1LnRleHRBZHZhbmNlU2NhbGU7dS53aWR0aD0wfXUudGV4dEFkdmFuY2VTY2FsZT10fX1mdW5jdGlvbiBydW5CaWRpVHJhbnNmb3JtKGUpe2xldCB0PWUuc3RyLmpvaW4oIiIpO0N8fCh0PWZ1bmN0aW9uIG5vcm1hbGl6ZVVuaWNvZGUoZSl7aWYoIUN0KXtDdD0vKFtcdTAwYTBcdTAwYjVcdTAzN2VcdTBlYjNcdTIwMDAtXHUyMDBhXHUyMDJmXHUyMTI2XHVmYjAwLVx1ZmIwNFx1ZmIwNlx1ZmIyMC1cdWZiMzZcdWZiMzgtXHVmYjNjXHVmYjNlXHVmYjQwLVx1ZmI0MVx1ZmI0My1cdWZiNDRcdWZiNDYtXHVmYmExXHVmYmE0LVx1ZmJhOVx1ZmJhZS1cdWZiYjFcdWZiZDMtXHVmYmRjXHVmYmRlLVx1ZmJlN1x1ZmJlYS1cdWZiZjhcdWZiZmMtXHVmYmZkXHVmYzAwLVx1ZmM1ZFx1ZmM2NC1cdWZjZjFcdWZjZjUtXHVmZDNkXHVmZDg4XHVmZGY0XHVmZGZhLVx1ZmRmYlx1ZmU3MVx1ZmU3N1x1ZmU3OVx1ZmU3Ylx1ZmU3ZF0rKXwoXHVmYjA1KykvZ3U7QnQ9bmV3IE1hcChbWyLvrIUiLCLFv3QiXV0pfXJldHVybiBlLnJlcGxhY2VBbGwoQ3QsKChlLHQsaSk9PnQ/dC5ub3JtYWxpemUoIk5GS0MiKTpCdC5nZXQoaSkpKX0odCkpO2NvbnN0IGk9YmlkaSh0LC0xLGUudmVydGljYWwpO3JldHVybntzdHI6aS5zdHIsZGlyOmkuZGlyLHdpZHRoOk1hdGguYWJzKGUudG90YWxXaWR0aCksaGVpZ2h0Ok1hdGguYWJzKGUudG90YWxIZWlnaHQpLHRyYW5zZm9ybTplLnRyYW5zZm9ybSxmb250TmFtZTplLmZvbnROYW1lLGhhc0VPTDplLmhhc0VPTH19YXN5bmMgZnVuY3Rpb24gaGFuZGxlU2V0Rm9udChlLGEpe2NvbnN0IHM9YXdhaXQgcC5sb2FkRm9udChlLGEsaSk7aWYocy5mb250LmlzVHlwZTNGb250KXRyeXthd2FpdCBzLmxvYWRUeXBlM0RhdGEocCxpLHQpfWNhdGNoe31rLmxvYWRlZE5hbWU9cy5sb2FkZWROYW1lO2suZm9udD1zLmZvbnQ7ay5mb250TWF0cml4PXMuZm9udC5mb250TWF0cml4fHxyfWZ1bmN0aW9uIGFwcGx5SW52ZXJzZVJvdGF0aW9uKGUsdCxpKXtjb25zdCBhPU1hdGguaHlwb3QoaVswXSxpWzFdKTtyZXR1cm5bKGlbMF0qZStpWzFdKnQpL2EsKGlbMl0qZStpWzNdKnQpL2FdfWZ1bmN0aW9uIGNvbXBhcmVXaXRoTGFzdFBvc2l0aW9uKGUpe2NvbnN0IHQ9Z2V0Q3VycmVudFRleHRUcmFuc2Zvcm0oKTtsZXQgaT10WzRdLGE9dFs1XTtpZihrLmZvbnQ/LnZlcnRpY2FsKXtpZihpPGNbMF18fGk+Y1syXXx8YStlPGNbMV18fGE+Y1szXSlyZXR1cm4hMX1lbHNlIGlmKGkrZTxjWzBdfHxpPmNbMl18fGE8Y1sxXXx8YT5jWzNdKXJldHVybiExO2lmKCFrLmZvbnR8fCF1LnByZXZUcmFuc2Zvcm0pcmV0dXJuITA7bGV0IHI9dS5wcmV2VHJhbnNmb3JtWzRdLHM9dS5wcmV2VHJhbnNmb3JtWzVdO2lmKHI9PT1pJiZzPT09YSlyZXR1cm4hMDtsZXQgbj0tMTt0WzBdJiYwPT09dFsxXSYmMD09PXRbMl0/bj10WzBdPjA/MDoxODA6dFsxXSYmMD09PXRbMF0mJjA9PT10WzNdJiYobj10WzFdPjA/OTA6MjcwKTtzd2l0Y2gobil7Y2FzZSAwOmJyZWFrO2Nhc2UgOTA6W2ksYV09W2EsaV07W3Isc109W3Mscl07YnJlYWs7Y2FzZSAxODA6W2ksYSxyLHNdPVstaSwtYSwtciwtc107YnJlYWs7Y2FzZSAyNzA6W2ksYV09Wy1hLC1pXTtbcixzXT1bLXMsLXJdO2JyZWFrO2RlZmF1bHQ6W2ksYV09YXBwbHlJbnZlcnNlUm90YXRpb24oaSxhLHQpO1tyLHNdPWFwcGx5SW52ZXJzZVJvdGF0aW9uKHIscyx1LnByZXZUcmFuc2Zvcm0pfWlmKGsuZm9udC52ZXJ0aWNhbCl7Y29uc3QgZT0ocy1hKS91LnRleHRBZHZhbmNlU2NhbGUsdD1pLXIsbj1NYXRoLnNpZ24odS5oZWlnaHQpO2lmKGU8bip1Lm5lZ2F0aXZlU3BhY2VNYXgpe2lmKE1hdGguYWJzKHQpPi41KnUud2lkdGgpe2FwcGVuZEVPTCgpO3JldHVybiEwfXJlc2V0TGFzdENoYXJzKCk7Zmx1c2hUZXh0Q29udGVudEl0ZW0oKTtyZXR1cm4hMH1pZihNYXRoLmFicyh0KT51LndpZHRoKXthcHBlbmRFT0woKTtyZXR1cm4hMH1lPD1uKnUubm90QVNwYWNlJiZyZXNldExhc3RDaGFycygpO2lmKGU8PW4qdS50cmFja2luZ1NwYWNlTWluKWlmKHNob3VsZEFkZFdoaXRlcHNhY2UoKSl7cmVzZXRMYXN0Q2hhcnMoKTtmbHVzaFRleHRDb250ZW50SXRlbSgpO3B1c2hXaGl0ZXNwYWNlKHtoZWlnaHQ6TWF0aC5hYnMoZSl9KX1lbHNlIHUuaGVpZ2h0Kz1lO2Vsc2UgaWYoIWFkZEZha2VTcGFjZXMoZSx1LnByZXZUcmFuc2Zvcm0sbikpaWYoMD09PXUuc3RyLmxlbmd0aCl7cmVzZXRMYXN0Q2hhcnMoKTtwdXNoV2hpdGVzcGFjZSh7aGVpZ2h0Ok1hdGguYWJzKGUpfSl9ZWxzZSB1LmhlaWdodCs9ZTtNYXRoLmFicyh0KT4uMjUqdS53aWR0aCYmZmx1c2hUZXh0Q29udGVudEl0ZW0oKTtyZXR1cm4hMH1jb25zdCBvPShpLXIpL3UudGV4dEFkdmFuY2VTY2FsZSxnPWEtcyxsPU1hdGguc2lnbih1LndpZHRoKTtpZihvPGwqdS5uZWdhdGl2ZVNwYWNlTWF4KXtpZihNYXRoLmFicyhnKT4uNSp1LmhlaWdodCl7YXBwZW5kRU9MKCk7cmV0dXJuITB9cmVzZXRMYXN0Q2hhcnMoKTtmbHVzaFRleHRDb250ZW50SXRlbSgpO3JldHVybiEwfWlmKE1hdGguYWJzKGcpPnUuaGVpZ2h0KXthcHBlbmRFT0woKTtyZXR1cm4hMH1vPD1sKnUubm90QVNwYWNlJiZyZXNldExhc3RDaGFycygpO2lmKG88PWwqdS50cmFja2luZ1NwYWNlTWluKWlmKHNob3VsZEFkZFdoaXRlcHNhY2UoKSl7cmVzZXRMYXN0Q2hhcnMoKTtmbHVzaFRleHRDb250ZW50SXRlbSgpO3B1c2hXaGl0ZXNwYWNlKHt3aWR0aDpNYXRoLmFicyhvKX0pfWVsc2UgdS53aWR0aCs9bztlbHNlIGlmKCFhZGRGYWtlU3BhY2VzKG8sdS5wcmV2VHJhbnNmb3JtLGwpKWlmKDA9PT11LnN0ci5sZW5ndGgpe3Jlc2V0TGFzdENoYXJzKCk7cHVzaFdoaXRlc3BhY2Uoe3dpZHRoOk1hdGguYWJzKG8pfSl9ZWxzZSB1LndpZHRoKz1vO01hdGguYWJzKGcpPi4yNSp1LmhlaWdodCYmZmx1c2hUZXh0Q29udGVudEl0ZW0oKTtyZXR1cm4hMH1mdW5jdGlvbiBidWlsZFRleHRDb250ZW50SXRlbSh7Y2hhcnM6ZSxleHRyYVNwYWNpbmc6dH0pe2NvbnN0IGk9ay5mb250O2lmKCFlKXtjb25zdCBlPWsuY2hhclNwYWNpbmcrdDtlJiYoaS52ZXJ0aWNhbD9rLnRyYW5zbGF0ZVRleHRNYXRyaXgoMCwtZSk6ay50cmFuc2xhdGVUZXh0TWF0cml4KGUqay50ZXh0SFNjYWxlLDApKTtRJiZjb21wYXJlV2l0aExhc3RQb3NpdGlvbigwKTtyZXR1cm59Y29uc3QgYT1pLmNoYXJzVG9HbHlwaHMoZSkscj1rLmZvbnRNYXRyaXhbMF0qay5mb250U2l6ZTtmb3IobGV0IGU9MCxzPWEubGVuZ3RoO2U8cztlKyspe2NvbnN0IG49YVtlXSx7Y2F0ZWdvcnk6b309bjtpZihvLmlzSW52aXNpYmxlRm9ybWF0TWFyayljb250aW51ZTtsZXQgZz1rLmNoYXJTcGFjaW5nKyhlKzE9PT1zP3Q6MCksYz1uLndpZHRoO2kudmVydGljYWwmJihjPW4udm1ldHJpYz9uLnZtZXRyaWNbMF06LWMpO2xldCBsPWMqcjtpZighUSYmby5pc1doaXRlc3BhY2Upe2lmKGkudmVydGljYWwpe2crPS1sK2sud29yZFNwYWNpbmc7ay50cmFuc2xhdGVUZXh0TWF0cml4KDAsLWcpfWVsc2V7Zys9bCtrLndvcmRTcGFjaW5nO2sudHJhbnNsYXRlVGV4dE1hdHJpeChnKmsudGV4dEhTY2FsZSwwKX1zYXZlTGFzdENoYXIoIiAiKTtjb250aW51ZX1pZighby5pc1plcm9XaWR0aERpYWNyaXRpYyYmIWNvbXBhcmVXaXRoTGFzdFBvc2l0aW9uKGwpKXtpLnZlcnRpY2FsP2sudHJhbnNsYXRlVGV4dE1hdHJpeCgwLGwpOmsudHJhbnNsYXRlVGV4dE1hdHJpeChsKmsudGV4dEhTY2FsZSwwKTtjb250aW51ZX1jb25zdCBoPWVuc3VyZVRleHRDb250ZW50SXRlbSgpO28uaXNaZXJvV2lkdGhEaWFjcml0aWMmJihsPTApO2lmKGkudmVydGljYWwpe2sudHJhbnNsYXRlVGV4dE1hdHJpeCgwLGwpO2w9TWF0aC5hYnMobCk7aC5oZWlnaHQrPWx9ZWxzZXtsKj1rLnRleHRIU2NhbGU7ay50cmFuc2xhdGVUZXh0TWF0cml4KGwsMCk7aC53aWR0aCs9bH1sJiYoaC5wcmV2VHJhbnNmb3JtPWdldEN1cnJlbnRUZXh0VHJhbnNmb3JtKCkpO2NvbnN0IEM9bi51bmljb2RlO3NhdmVMYXN0Q2hhcihDKSYmaC5zdHIucHVzaCgiICIpO2guc3RyLnB1c2goQyk7ZyYmKGkudmVydGljYWw/ay50cmFuc2xhdGVUZXh0TWF0cml4KDAsLWcpOmsudHJhbnNsYXRlVGV4dE1hdHJpeChnKmsudGV4dEhTY2FsZSwwKSl9fWZ1bmN0aW9uIGFwcGVuZEVPTCgpe3Jlc2V0TGFzdENoYXJzKCk7aWYodS5pbml0aWFsaXplZCl7dS5oYXNFT0w9ITA7Zmx1c2hUZXh0Q29udGVudEl0ZW0oKX1lbHNlIEUuaXRlbXMucHVzaCh7c3RyOiIiLGRpcjoibHRyIix3aWR0aDowLGhlaWdodDowLHRyYW5zZm9ybTpnZXRDdXJyZW50VGV4dFRyYW5zZm9ybSgpLGZvbnROYW1lOmsubG9hZGVkTmFtZSxoYXNFT0w6ITB9KX1mdW5jdGlvbiBhZGRGYWtlU3BhY2VzKGUsdCxpKXtpZihpKnUuc3BhY2VJbkZsb3dNaW48PWUmJmU8PWkqdS5zcGFjZUluRmxvd01heCl7aWYodS5pbml0aWFsaXplZCl7cmVzZXRMYXN0Q2hhcnMoKTt1LnN0ci5wdXNoKCIgIil9cmV0dXJuITF9Y29uc3QgYT11LmZvbnROYW1lO2xldCByPTA7aWYodS52ZXJ0aWNhbCl7cj1lO2U9MH1mbHVzaFRleHRDb250ZW50SXRlbSgpO3Jlc2V0TGFzdENoYXJzKCk7cHVzaFdoaXRlc3BhY2Uoe3dpZHRoOk1hdGguYWJzKGUpLGhlaWdodDpNYXRoLmFicyhyKSx0cmFuc2Zvcm06dHx8Z2V0Q3VycmVudFRleHRUcmFuc2Zvcm0oKSxmb250TmFtZTphfSk7cmV0dXJuITB9ZnVuY3Rpb24gZmx1c2hUZXh0Q29udGVudEl0ZW0oKXtpZih1LmluaXRpYWxpemVkJiZ1LnN0cil7dS52ZXJ0aWNhbD91LnRvdGFsSGVpZ2h0Kz11LmhlaWdodCp1LnRleHRBZHZhbmNlU2NhbGU6dS50b3RhbFdpZHRoKz11LndpZHRoKnUudGV4dEFkdmFuY2VTY2FsZTtFLml0ZW1zLnB1c2gocnVuQmlkaVRyYW5zZm9ybSh1KSk7dS5pbml0aWFsaXplZD0hMTt1LnN0ci5sZW5ndGg9MH19ZnVuY3Rpb24gZW5xdWV1ZUNodW5rKGU9ITEpe2NvbnN0IHQ9RS5pdGVtcy5sZW5ndGg7aWYoMCE9PXQmJiEoZSYmdDwxMCkpe28uZW5xdWV1ZShFLHQpO0UuaXRlbXM9W107RS5zdHlsZXM9T2JqZWN0LmNyZWF0ZShudWxsKX19Y29uc3QgUj1uZXcgVGltZVNsb3RNYW5hZ2VyO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24gcHJvbWlzZUJvZHkoZSxyKXtjb25zdCBuZXh0PWZ1bmN0aW9uKHQpe2VucXVldWVDaHVuayghMCk7UHJvbWlzZS5hbGwoW3Qsby5yZWFkeV0pLnRoZW4oKGZ1bmN0aW9uKCl7dHJ5e3Byb21pc2VCb2R5KGUscil9Y2F0Y2goZSl7cihlKX19KSxyKX07dC5lbnN1cmVOb3RUZXJtaW5hdGVkKCk7Ui5yZXNldCgpO2NvbnN0IHU9e307bGV0IGQsZixOLEc9W107Zm9yKDshKGQ9Ui5jaGVjaygpKTspe0cubGVuZ3RoPTA7dS5hcmdzPUc7aWYoIVMucmVhZCh1KSlicmVhaztjb25zdCBlPWs7az1zLnN0YXRlO2NvbnN0IHI9dS5mbjtHPXUuYXJncztzd2l0Y2goMHxyKXtjYXNlIG9lOmNvbnN0IHI9R1swXS5uYW1lLHU9R1sxXTtpZihrLmZvbnQmJnI9PT1rLmZvbnROYW1lJiZ1PT09ay5mb250U2l6ZSlicmVhaztmbHVzaFRleHRDb250ZW50SXRlbSgpO2suZm9udE5hbWU9cjtrLmZvbnRTaXplPXU7bmV4dChoYW5kbGVTZXRGb250KHIsbnVsbCkpO3JldHVybjtjYXNlIEllOmsudGV4dFJpc2U9R1swXTticmVhaztjYXNlIHNlOmsudGV4dEhTY2FsZT1HWzBdLzEwMDticmVhaztjYXNlIG5lOmsubGVhZGluZz1HWzBdO2JyZWFrO2Nhc2UgY2U6ay50cmFuc2xhdGVUZXh0TGluZU1hdHJpeChHWzBdLEdbMV0pO2sudGV4dE1hdHJpeD1rLnRleHRMaW5lTWF0cml4LnNsaWNlKCk7YnJlYWs7Y2FzZSBsZTprLmxlYWRpbmc9LUdbMV07ay50cmFuc2xhdGVUZXh0TGluZU1hdHJpeChHWzBdLEdbMV0pO2sudGV4dE1hdHJpeD1rLnRleHRMaW5lTWF0cml4LnNsaWNlKCk7YnJlYWs7Y2FzZSBDZTprLmNhcnJpYWdlUmV0dXJuKCk7YnJlYWs7Y2FzZSBoZTprLnNldFRleHRNYXRyaXgoR1swXSxHWzFdLEdbMl0sR1szXSxHWzRdLEdbNV0pO2suc2V0VGV4dExpbmVNYXRyaXgoR1swXSxHWzFdLEdbMl0sR1szXSxHWzRdLEdbNV0pO3VwZGF0ZUFkdmFuY2VTY2FsZSgpO2JyZWFrO2Nhc2UgYWU6ay5jaGFyU3BhY2luZz1HWzBdO2JyZWFrO2Nhc2UgcmU6ay53b3JkU3BhY2luZz1HWzBdO2JyZWFrO2Nhc2UgdGU6ay50ZXh0TWF0cml4PWEuc2xpY2UoKTtrLnRleHRMaW5lTWF0cml4PWEuc2xpY2UoKTticmVhaztjYXNlIFFlOmlmKCFzLnN0YXRlLmZvbnQpe3AuZW5zdXJlU3RhdGVGb250KHMuc3RhdGUpO2NvbnRpbnVlfWNvbnN0IGQ9KGsuZm9udC52ZXJ0aWNhbD8xOi0xKSprLmZvbnRTaXplLzFlMyxTPUdbMF07Zm9yKGxldCBlPTAsdD1TLmxlbmd0aDtlPHQ7ZSsrKXtjb25zdCB0PVNbZV07aWYoInN0cmluZyI9PXR5cGVvZiB0KXkucHVzaCh0KTtlbHNlIGlmKCJudW1iZXIiPT10eXBlb2YgdCYmMCE9PXQpe2NvbnN0IGU9eS5qb2luKCIiKTt5Lmxlbmd0aD0wO2J1aWxkVGV4dENvbnRlbnRJdGVtKHtjaGFyczplLGV4dHJhU3BhY2luZzp0KmR9KX19aWYoeS5sZW5ndGg+MCl7Y29uc3QgZT15LmpvaW4oIiIpO3kubGVuZ3RoPTA7YnVpbGRUZXh0Q29udGVudEl0ZW0oe2NoYXJzOmUsZXh0cmFTcGFjaW5nOjB9KX1icmVhaztjYXNlIEJlOmlmKCFzLnN0YXRlLmZvbnQpe3AuZW5zdXJlU3RhdGVGb250KHMuc3RhdGUpO2NvbnRpbnVlfWJ1aWxkVGV4dENvbnRlbnRJdGVtKHtjaGFyczpHWzBdLGV4dHJhU3BhY2luZzowfSk7YnJlYWs7Y2FzZSBFZTppZighcy5zdGF0ZS5mb250KXtwLmVuc3VyZVN0YXRlRm9udChzLnN0YXRlKTtjb250aW51ZX1rLmNhcnJpYWdlUmV0dXJuKCk7YnVpbGRUZXh0Q29udGVudEl0ZW0oe2NoYXJzOkdbMF0sZXh0cmFTcGFjaW5nOjB9KTticmVhaztjYXNlIHVlOmlmKCFzLnN0YXRlLmZvbnQpe3AuZW5zdXJlU3RhdGVGb250KHMuc3RhdGUpO2NvbnRpbnVlfWsud29yZFNwYWNpbmc9R1swXTtrLmNoYXJTcGFjaW5nPUdbMV07ay5jYXJyaWFnZVJldHVybigpO2J1aWxkVGV4dENvbnRlbnRJdGVtKHtjaGFyczpHWzJdLGV4dHJhU3BhY2luZzowfSk7YnJlYWs7Y2FzZSBIZTpmbHVzaFRleHRDb250ZW50SXRlbSgpO3c/Pz1pLmdldCgiWE9iamVjdCIpfHxEaWN0LmVtcHR5O049R1swXWluc3RhbmNlb2YgTmFtZTtmPUdbMF0ubmFtZTtpZihOJiZiLmdldEJ5TmFtZShmKSlicmVhaztuZXh0KG5ldyBQcm9taXNlKChmdW5jdGlvbihlLGEpe2lmKCFOKXRocm93IG5ldyBGb3JtYXRFcnJvcigiWE9iamVjdCBtdXN0IGJlIHJlZmVycmVkIHRvIGJ5IG5hbWUuIik7bGV0IHI9dy5nZXRSYXcoZik7aWYociBpbnN0YW5jZW9mIFJlZil7aWYoYi5nZXRCeVJlZihyKSl7ZSgpO3JldHVybn1pZihwLmdsb2JhbEltYWdlQ2FjaGUuZ2V0RGF0YShyLHAucGFnZUluZGV4KSl7ZSgpO3JldHVybn1yPW0uZmV0Y2gocil9aWYoIShyIGluc3RhbmNlb2YgQmFzZVN0cmVhbSkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJYT2JqZWN0IHNob3VsZCBiZSBhIHN0cmVhbSIpO2NvbnN0IEU9ci5kaWN0LmdldCgiU3VidHlwZSIpO2lmKCEoRSBpbnN0YW5jZW9mIE5hbWUpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiWE9iamVjdCBzaG91bGQgaGF2ZSBhIE5hbWUgc3VidHlwZSIpO2lmKCJGb3JtIiE9PUUubmFtZSl7Yi5zZXQoZixyLmRpY3Qub2JqSWQsITApO2UoKTtyZXR1cm59Y29uc3QgdT1zLnN0YXRlLmNsb25lKCksZD1uZXcgU3RhdGVNYW5hZ2VyKHUpLHk9bG9va3VwTWF0cml4KHIuZGljdC5nZXRBcnJheSgiTWF0cml4IiksbnVsbCk7eSYmZC50cmFuc2Zvcm0oeSk7ZW5xdWV1ZUNodW5rKCk7Y29uc3QgRD17ZW5xdWV1ZUludm9rZWQ6ITEsZW5xdWV1ZShlLHQpe3RoaXMuZW5xdWV1ZUludm9rZWQ9ITA7by5lbnF1ZXVlKGUsdCl9LGdldCBkZXNpcmVkU2l6ZSgpe3JldHVybiBvLmRlc2lyZWRTaXplfSxnZXQgcmVhZHkoKXtyZXR1cm4gby5yZWFkeX19O3AuZ2V0VGV4dENvbnRlbnQoe3N0cmVhbTpyLHRhc2s6dCxyZXNvdXJjZXM6ci5kaWN0LmdldCgiUmVzb3VyY2VzIil8fGksc3RhdGVNYW5hZ2VyOmQsaW5jbHVkZU1hcmtlZENvbnRlbnQ6bixzaW5rOkQsc2VlblN0eWxlczpnLHZpZXdCb3g6YyxsYW5nOmwsbWFya2VkQ29udGVudERhdGE6aCxkaXNhYmxlTm9ybWFsaXphdGlvbjpDLGtlZXBXaGl0ZVNwYWNlOlF9KS50aGVuKChmdW5jdGlvbigpe0QuZW5xdWV1ZUludm9rZWR8fGIuc2V0KGYsci5kaWN0Lm9iaklkLCEwKTtlKCl9KSxhKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7aWYoIShlIGluc3RhbmNlb2YgQWJvcnRFeGNlcHRpb24pKXtpZighcC5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlO3dhcm4oYGdldFRleHRDb250ZW50IC0gaWdub3JpbmcgWE9iamVjdDogIiR7ZX0iLmApfX0pKSk7cmV0dXJuO2Nhc2UgVUE6Tj1HWzBdaW5zdGFuY2VvZiBOYW1lO2Y9R1swXS5uYW1lO2lmKE4mJkQuZ2V0QnlOYW1lKGYpKWJyZWFrO25leHQobmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsdCl7aWYoIU4pdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJHU3RhdGUgbXVzdCBiZSByZWZlcnJlZCB0byBieSBuYW1lLiIpO2NvbnN0IGE9aS5nZXQoIkV4dEdTdGF0ZSIpO2lmKCEoYSBpbnN0YW5jZW9mIERpY3QpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiRXh0R1N0YXRlIHNob3VsZCBiZSBhIGRpY3Rpb25hcnkuIik7Y29uc3Qgcj1hLmdldChmKTtpZighKHIgaW5zdGFuY2VvZiBEaWN0KSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkdTdGF0ZSBzaG91bGQgYmUgYSBkaWN0aW9uYXJ5LiIpO2NvbnN0IHM9ci5nZXQoIkZvbnQiKTtpZihzKXtmbHVzaFRleHRDb250ZW50SXRlbSgpO2suZm9udE5hbWU9bnVsbDtrLmZvbnRTaXplPXNbMV07aGFuZGxlU2V0Rm9udChudWxsLHNbMF0pLnRoZW4oZSx0KX1lbHNle0Quc2V0KGYsci5vYmpJZCwhMCk7ZSgpfX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7aWYoIShlIGluc3RhbmNlb2YgQWJvcnRFeGNlcHRpb24pKXtpZighcC5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlO3dhcm4oYGdldFRleHRDb250ZW50IC0gaWdub3JpbmcgRXh0R1N0YXRlOiAiJHtlfSIuYCl9fSkpKTtyZXR1cm47Y2FzZSBZZTpmbHVzaFRleHRDb250ZW50SXRlbSgpO2lmKG4pe2gubGV2ZWwrKztFLml0ZW1zLnB1c2goe3R5cGU6ImJlZ2luTWFya2VkQ29udGVudCIsdGFnOkdbMF1pbnN0YW5jZW9mIE5hbWU/R1swXS5uYW1lOm51bGx9KX1icmVhaztjYXNlIEtlOmZsdXNoVGV4dENvbnRlbnRJdGVtKCk7aWYobil7aC5sZXZlbCsrO2xldCBlPW51bGw7R1sxXWluc3RhbmNlb2YgRGljdCYmKGU9R1sxXS5nZXQoIk1DSUQiKSk7RS5pdGVtcy5wdXNoKHt0eXBlOiJiZWdpbk1hcmtlZENvbnRlbnRQcm9wcyIsaWQ6TnVtYmVyLmlzSW50ZWdlcihlKT9gJHtwLmlkRmFjdG9yeS5nZXRQYWdlT2JqSWQoKX1fbWMke2V9YDpudWxsLHRhZzpHWzBdaW5zdGFuY2VvZiBOYW1lP0dbMF0ubmFtZTpudWxsfSl9YnJlYWs7Y2FzZSBUZTpmbHVzaFRleHRDb250ZW50SXRlbSgpO2lmKG4pe2lmKDA9PT1oLmxldmVsKWJyZWFrO2gubGV2ZWwtLTtFLml0ZW1zLnB1c2goe3R5cGU6ImVuZE1hcmtlZENvbnRlbnQifSl9YnJlYWs7Y2FzZSBMQTohZXx8ZS5mb250PT09ay5mb250JiZlLmZvbnRTaXplPT09ay5mb250U2l6ZSYmZS5mb250TmFtZT09PWsuZm9udE5hbWV8fGZsdXNoVGV4dENvbnRlbnRJdGVtKCl9aWYoRS5pdGVtcy5sZW5ndGg+PW8uZGVzaXJlZFNpemUpe2Q9ITA7YnJlYWt9fWlmKGQpbmV4dChicik7ZWxzZXtmbHVzaFRleHRDb250ZW50SXRlbSgpO2VucXVldWVDaHVuaygpO2UoKX19KSkuY2F0Y2goKGU9PntpZighKGUgaW5zdGFuY2VvZiBBYm9ydEV4Y2VwdGlvbikpe2lmKCF0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKXRocm93IGU7d2FybihgZ2V0VGV4dENvbnRlbnQgLSBpZ25vcmluZyBlcnJvcnMgZHVyaW5nICIke3QubmFtZX0iIHRhc2s6ICIke2V9Ii5gKTtmbHVzaFRleHRDb250ZW50SXRlbSgpO2VucXVldWVDaHVuaygpfX0pKX1hc3luYyBleHRyYWN0RGF0YVN0cnVjdHVyZXMoZSx0KXtjb25zdCBpPXRoaXMueHJlZjtsZXQgYTtjb25zdCByPXRoaXMucmVhZFRvVW5pY29kZSh0LnRvVW5pY29kZSk7aWYodC5jb21wb3NpdGUpe2NvbnN0IGk9ZS5nZXQoIkNJRFN5c3RlbUluZm8iKTtpIGluc3RhbmNlb2YgRGljdCYmKHQuY2lkU3lzdGVtSW5mbz17cmVnaXN0cnk6c3RyaW5nVG9QREZTdHJpbmcoaS5nZXQoIlJlZ2lzdHJ5IikpLG9yZGVyaW5nOnN0cmluZ1RvUERGU3RyaW5nKGkuZ2V0KCJPcmRlcmluZyIpKSxzdXBwbGVtZW50OmkuZ2V0KCJTdXBwbGVtZW50Iil9KTt0cnl7Y29uc3QgdD1lLmdldCgiQ0lEVG9HSURNYXAiKTt0IGluc3RhbmNlb2YgQmFzZVN0cmVhbSYmKGE9dC5nZXRCeXRlcygpKX1jYXRjaChlKXtpZighdGhpcy5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlO3dhcm4oYGV4dHJhY3REYXRhU3RydWN0dXJlcyAtIGlnbm9yaW5nIENJRFRvR0lETWFwIGRhdGE6ICIke2V9Ii5gKX19Y29uc3Qgcz1bXTtsZXQgbixvPW51bGw7aWYoZS5oYXMoIkVuY29kaW5nIikpe249ZS5nZXQoIkVuY29kaW5nIik7aWYobiBpbnN0YW5jZW9mIERpY3Qpe289bi5nZXQoIkJhc2VFbmNvZGluZyIpO289byBpbnN0YW5jZW9mIE5hbWU/by5uYW1lOm51bGw7aWYobi5oYXMoIkRpZmZlcmVuY2VzIikpe2NvbnN0IGU9bi5nZXQoIkRpZmZlcmVuY2VzIik7bGV0IHQ9MDtmb3IoY29uc3QgYSBvZiBlKXtjb25zdCBlPWkuZmV0Y2hJZlJlZihhKTtpZigibnVtYmVyIj09dHlwZW9mIGUpdD1lO2Vsc2V7aWYoIShlIGluc3RhbmNlb2YgTmFtZSkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKGBJbnZhbGlkIGVudHJ5IGluICdEaWZmZXJlbmNlcycgYXJyYXk6ICR7ZX1gKTtzW3QrK109ZS5uYW1lfX19fWVsc2UgaWYobiBpbnN0YW5jZW9mIE5hbWUpbz1uLm5hbWU7ZWxzZXtjb25zdCBlPSJFbmNvZGluZyBpcyBub3QgYSBOYW1lIG5vciBhIERpY3QiO2lmKCF0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKXRocm93IG5ldyBGb3JtYXRFcnJvcihlKTt3YXJuKGUpfSJNYWNSb21hbkVuY29kaW5nIiE9PW8mJiJNYWNFeHBlcnRFbmNvZGluZyIhPT1vJiYiV2luQW5zaUVuY29kaW5nIiE9PW8mJihvPW51bGwpfWNvbnN0IGc9IXQuZmlsZXx8dC5pc0ludGVybmFsRm9udCxjPVBpKClbdC5uYW1lXTtvJiZnJiZjJiYobz1udWxsKTtpZihvKXQuZGVmYXVsdEVuY29kaW5nPWdldEVuY29kaW5nKG8pO2Vsc2V7Y29uc3QgZT0hISh0LmZsYWdzJkhpKSxpPSEhKHQuZmxhZ3MmSmkpO249Qmk7IlRydWVUeXBlIiE9PXQudHlwZXx8aXx8KG49UWkpO2lmKGV8fGMpe249Q2k7ZyYmKC9TeW1ib2wvaS50ZXN0KHQubmFtZSk/bj1FaTovRGluZ2JhdHMvaS50ZXN0KHQubmFtZSk/bj11aTovV2luZ2RpbmdzL2kudGVzdCh0Lm5hbWUpJiYobj1RaSkpfXQuZGVmYXVsdEVuY29kaW5nPW59dC5kaWZmZXJlbmNlcz1zO3QuYmFzZUVuY29kaW5nTmFtZT1vO3QuaGFzRW5jb2Rpbmc9ISFvfHxzLmxlbmd0aD4wO3QuZGljdD1lO3QudG9Vbmljb2RlPWF3YWl0IHI7Y29uc3QgbD1hd2FpdCB0aGlzLmJ1aWxkVG9Vbmljb2RlKHQpO3QudG9Vbmljb2RlPWw7YSYmKHQuY2lkVG9HaWRNYXA9dGhpcy5yZWFkQ2lkVG9HaWRNYXAoYSxsKSk7cmV0dXJuIHR9X3NpbXBsZUZvbnRUb1VuaWNvZGUoZSx0PSExKXthc3NlcnQoIWUuY29tcG9zaXRlLCJNdXN0IGJlIGEgc2ltcGxlIGZvbnQuIik7Y29uc3QgaT1bXSxhPWUuZGVmYXVsdEVuY29kaW5nLnNsaWNlKCkscj1lLmJhc2VFbmNvZGluZ05hbWUscz1lLmRpZmZlcmVuY2VzO2Zvcihjb25zdCBlIGluIHMpe2NvbnN0IHQ9c1tlXTsiLm5vdGRlZiIhPT10JiYoYVtlXT10KX1jb25zdCBuPURpKCk7Zm9yKGNvbnN0IHMgaW4gYSl7bGV0IG89YVtzXTtpZigiIj09PW8pY29udGludWU7bGV0IGc9bltvXTtpZih2b2lkIDAhPT1nKXtpW3NdPVN0cmluZy5mcm9tQ2hhckNvZGUoZyk7Y29udGludWV9bGV0IGM9MDtzd2l0Y2gob1swXSl7Y2FzZSJHIjozPT09by5sZW5ndGgmJihjPXBhcnNlSW50KG8uc3Vic3RyaW5nKDEpLDE2KSk7YnJlYWs7Y2FzZSJnIjo1PT09by5sZW5ndGgmJihjPXBhcnNlSW50KG8uc3Vic3RyaW5nKDEpLDE2KSk7YnJlYWs7Y2FzZSJDIjpjYXNlImMiOmlmKG8ubGVuZ3RoPj0zJiZvLmxlbmd0aDw9NCl7Y29uc3QgaT1vLnN1YnN0cmluZygxKTtpZih0KXtjPXBhcnNlSW50KGksMTYpO2JyZWFrfWM9K2k7aWYoTnVtYmVyLmlzTmFOKGMpJiZOdW1iZXIuaXNJbnRlZ2VyKHBhcnNlSW50KGksMTYpKSlyZXR1cm4gdGhpcy5fc2ltcGxlRm9udFRvVW5pY29kZShlLCEwKX1icmVhaztjYXNlInUiOmc9Z2V0VW5pY29kZUZvckdseXBoKG8sbik7LTEhPT1nJiYoYz1nKTticmVhaztkZWZhdWx0OnN3aXRjaChvKXtjYXNlImZfaCI6Y2FzZSJmX3QiOmNhc2UiVF9oIjppW3NdPW8ucmVwbGFjZUFsbCgiXyIsIiIpO2NvbnRpbnVlfX1pZihjPjAmJmM8PTExMTQxMTEmJk51bWJlci5pc0ludGVnZXIoYykpe2lmKHImJmM9PT0rcyl7Y29uc3QgZT1nZXRFbmNvZGluZyhyKTtpZihlJiYobz1lW3NdKSl7aVtzXT1TdHJpbmcuZnJvbUNoYXJDb2RlKG5bb10pO2NvbnRpbnVlfX1pW3NdPVN0cmluZy5mcm9tQ29kZVBvaW50KGMpfX1yZXR1cm4gaX1hc3luYyBidWlsZFRvVW5pY29kZShlKXtlLmhhc0luY2x1ZGVkVG9Vbmljb2RlTWFwPWUudG9Vbmljb2RlPy5sZW5ndGg+MDtpZihlLmhhc0luY2x1ZGVkVG9Vbmljb2RlTWFwKXshZS5jb21wb3NpdGUmJmUuaGFzRW5jb2RpbmcmJihlLmZhbGxiYWNrVG9Vbmljb2RlPXRoaXMuX3NpbXBsZUZvbnRUb1VuaWNvZGUoZSkpO3JldHVybiBlLnRvVW5pY29kZX1pZighZS5jb21wb3NpdGUpcmV0dXJuIG5ldyBUb1VuaWNvZGVNYXAodGhpcy5fc2ltcGxlRm9udFRvVW5pY29kZShlKSk7aWYoZS5jb21wb3NpdGUmJihlLmNNYXAuYnVpbHRJbkNNYXAmJiEoZS5jTWFwIGluc3RhbmNlb2YgSWRlbnRpdHlDTWFwKXx8IkFkb2JlIj09PWUuY2lkU3lzdGVtSW5mbz8ucmVnaXN0cnkmJigiR0IxIj09PWUuY2lkU3lzdGVtSW5mby5vcmRlcmluZ3x8IkNOUzEiPT09ZS5jaWRTeXN0ZW1JbmZvLm9yZGVyaW5nfHwiSmFwYW4xIj09PWUuY2lkU3lzdGVtSW5mby5vcmRlcmluZ3x8IktvcmVhMSI9PT1lLmNpZFN5c3RlbUluZm8ub3JkZXJpbmcpKSl7Y29uc3R7cmVnaXN0cnk6dCxvcmRlcmluZzppfT1lLmNpZFN5c3RlbUluZm8sYT1OYW1lLmdldChgJHt0fS0ke2l9LVVDUzJgKSxyPWF3YWl0IENNYXBGYWN0b3J5LmNyZWF0ZSh7ZW5jb2Rpbmc6YSxmZXRjaEJ1aWx0SW5DTWFwOnRoaXMuX2ZldGNoQnVpbHRJbkNNYXBCb3VuZCx1c2VDTWFwOm51bGx9KSxzPVtdLG49W107ZS5jTWFwLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7aWYodD42NTUzNSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIk1heCBzaXplIG9mIENJRCBpcyA2NSw1MzUiKTtjb25zdCBpPXIubG9va3VwKHQpO2lmKGkpe24ubGVuZ3RoPTA7Zm9yKGxldCBlPTAsdD1pLmxlbmd0aDtlPHQ7ZSs9MiluLnB1c2goKGkuY2hhckNvZGVBdChlKTw8OCkraS5jaGFyQ29kZUF0KGUrMSkpO3NbZV09U3RyaW5nLmZyb21DaGFyQ29kZSguLi5uKX19KSk7cmV0dXJuIG5ldyBUb1VuaWNvZGVNYXAocyl9cmV0dXJuIG5ldyBJZGVudGl0eVRvVW5pY29kZU1hcChlLmZpcnN0Q2hhcixlLmxhc3RDaGFyKX1hc3luYyByZWFkVG9Vbmljb2RlKGUpe2lmKCFlKXJldHVybiBudWxsO2lmKGUgaW5zdGFuY2VvZiBOYW1lKXtjb25zdCB0PWF3YWl0IENNYXBGYWN0b3J5LmNyZWF0ZSh7ZW5jb2Rpbmc6ZSxmZXRjaEJ1aWx0SW5DTWFwOnRoaXMuX2ZldGNoQnVpbHRJbkNNYXBCb3VuZCx1c2VDTWFwOm51bGx9KTtyZXR1cm4gdCBpbnN0YW5jZW9mIElkZW50aXR5Q01hcD9uZXcgSWRlbnRpdHlUb1VuaWNvZGVNYXAoMCw2NTUzNSk6bmV3IFRvVW5pY29kZU1hcCh0LmdldE1hcCgpKX1pZihlIGluc3RhbmNlb2YgQmFzZVN0cmVhbSl0cnl7Y29uc3QgdD1hd2FpdCBDTWFwRmFjdG9yeS5jcmVhdGUoe2VuY29kaW5nOmUsZmV0Y2hCdWlsdEluQ01hcDp0aGlzLl9mZXRjaEJ1aWx0SW5DTWFwQm91bmQsdXNlQ01hcDpudWxsfSk7aWYodCBpbnN0YW5jZW9mIElkZW50aXR5Q01hcClyZXR1cm4gbmV3IElkZW50aXR5VG9Vbmljb2RlTWFwKDAsNjU1MzUpO2NvbnN0IGk9bmV3IEFycmF5KHQubGVuZ3RoKTt0LmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7aWYoIm51bWJlciI9PXR5cGVvZiB0KXtpW2VdPVN0cmluZy5mcm9tQ29kZVBvaW50KHQpO3JldHVybn10Lmxlbmd0aCUyIT0wJiYodD0iXDAiK3QpO2NvbnN0IGE9W107Zm9yKGxldCBlPTA7ZTx0Lmxlbmd0aDtlKz0yKXtjb25zdCBpPXQuY2hhckNvZGVBdChlKTw8OHx0LmNoYXJDb2RlQXQoZSsxKTtpZig1NTI5NiE9KDYzNDg4JmkpKXthLnB1c2goaSk7Y29udGludWV9ZSs9Mjtjb25zdCByPXQuY2hhckNvZGVBdChlKTw8OHx0LmNoYXJDb2RlQXQoZSsxKTthLnB1c2goKCgxMDIzJmkpPDwxMCkrKDEwMjMmcikrNjU1MzYpfWlbZV09U3RyaW5nLmZyb21Db2RlUG9pbnQoLi4uYSl9KSk7cmV0dXJuIG5ldyBUb1VuaWNvZGVNYXAoaSl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIEFib3J0RXhjZXB0aW9uKXJldHVybiBudWxsO2lmKHRoaXMub3B0aW9ucy5pZ25vcmVFcnJvcnMpe3dhcm4oYHJlYWRUb1VuaWNvZGUgLSBpZ25vcmluZyBUb1VuaWNvZGUgZGF0YTogIiR7ZX0iLmApO3JldHVybiBudWxsfXRocm93IGV9cmV0dXJuIG51bGx9cmVhZENpZFRvR2lkTWFwKGUsdCl7Y29uc3QgaT1bXTtmb3IobGV0IGE9MCxyPWUubGVuZ3RoO2E8cjthKyspe2NvbnN0IHI9ZVthKytdPDw4fGVbYV0scz1hPj4xOygwIT09cnx8dC5oYXMocykpJiYoaVtzXT1yKX1yZXR1cm4gaX1leHRyYWN0V2lkdGhzKGUsdCxpKXtjb25zdCBhPXRoaXMueHJlZjtsZXQgcj1bXSxzPTA7Y29uc3Qgbj1bXTtsZXQgbztpZihpLmNvbXBvc2l0ZSl7Y29uc3QgdD1lLmdldCgiRFciKTtzPSJudW1iZXIiPT10eXBlb2YgdD9NYXRoLmNlaWwodCk6MWUzO2NvbnN0IGc9ZS5nZXQoIlciKTtpZihBcnJheS5pc0FycmF5KGcpKWZvcihsZXQgZT0wLHQ9Zy5sZW5ndGg7ZTx0O2UrKyl7bGV0IHQ9YS5mZXRjaElmUmVmKGdbZSsrXSk7aWYoIU51bWJlci5pc0ludGVnZXIodCkpYnJlYWs7Y29uc3QgaT1hLmZldGNoSWZSZWYoZ1tlXSk7aWYoQXJyYXkuaXNBcnJheShpKSlmb3IoY29uc3QgZSBvZiBpKXtjb25zdCBpPWEuZmV0Y2hJZlJlZihlKTsibnVtYmVyIj09dHlwZW9mIGkmJihyW3RdPWkpO3QrK31lbHNle2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGkpKWJyZWFrO3tjb25zdCBzPWEuZmV0Y2hJZlJlZihnWysrZV0pO2lmKCJudW1iZXIiIT10eXBlb2Ygcyljb250aW51ZTtmb3IobGV0IGU9dDtlPD1pO2UrKylyW2VdPXN9fX1pZihpLnZlcnRpY2FsKXtjb25zdCB0PWUuZ2V0QXJyYXkoIkRXMiIpO2xldCBpPWlzTnVtYmVyQXJyYXkodCwyKT90Ols4ODAsLTFlM107bz1baVsxXSwuNSpzLGlbMF1dO2k9ZS5nZXQoIlcyIik7aWYoQXJyYXkuaXNBcnJheShpKSlmb3IobGV0IGU9MCx0PWkubGVuZ3RoO2U8dDtlKyspe2xldCB0PWEuZmV0Y2hJZlJlZihpW2UrK10pO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKHQpKWJyZWFrO2NvbnN0IHI9YS5mZXRjaElmUmVmKGlbZV0pO2lmKEFycmF5LmlzQXJyYXkocikpZm9yKGxldCBlPTAsaT1yLmxlbmd0aDtlPGk7ZSsrKXtjb25zdCBpPVthLmZldGNoSWZSZWYocltlKytdKSxhLmZldGNoSWZSZWYocltlKytdKSxhLmZldGNoSWZSZWYocltlXSldO2lzTnVtYmVyQXJyYXkoaSxudWxsKSYmKG5bdF09aSk7dCsrfWVsc2V7aWYoIU51bWJlci5pc0ludGVnZXIocikpYnJlYWs7e2NvbnN0IHM9W2EuZmV0Y2hJZlJlZihpWysrZV0pLGEuZmV0Y2hJZlJlZihpWysrZV0pLGEuZmV0Y2hJZlJlZihpWysrZV0pXTtpZighaXNOdW1iZXJBcnJheShzLG51bGwpKWNvbnRpbnVlO2ZvcihsZXQgZT10O2U8PXI7ZSsrKW5bZV09c319fX19ZWxzZXtjb25zdCBuPWUuZ2V0KCJXaWR0aHMiKTtpZihBcnJheS5pc0FycmF5KG4pKXtsZXQgZT1pLmZpcnN0Q2hhcjtmb3IoY29uc3QgdCBvZiBuKXtjb25zdCBpPWEuZmV0Y2hJZlJlZih0KTsibnVtYmVyIj09dHlwZW9mIGkmJihyW2VdPWkpO2UrK31jb25zdCBvPXQuZ2V0KCJNaXNzaW5nV2lkdGgiKTtzPSJudW1iZXIiPT10eXBlb2Ygbz9vOjB9ZWxzZXtjb25zdCB0PWUuZ2V0KCJCYXNlRm9udCIpO2lmKHQgaW5zdGFuY2VvZiBOYW1lKXtjb25zdCBlPXRoaXMuZ2V0QmFzZUZvbnRNZXRyaWNzKHQubmFtZSk7cj10aGlzLmJ1aWxkQ2hhckNvZGVUb1dpZHRoKGUud2lkdGhzLGkpO3M9ZS5kZWZhdWx0V2lkdGh9fX1sZXQgZz0hMCxjPXM7Zm9yKGNvbnN0IGUgaW4gcil7Y29uc3QgdD1yW2VdO2lmKHQpaWYoYyl7aWYoYyE9PXQpe2c9ITE7YnJlYWt9fWVsc2UgYz10fWc/aS5mbGFnc3w9TWk6aS5mbGFncyY9fk1pO2kuZGVmYXVsdFdpZHRoPXM7aS53aWR0aHM9cjtpLmRlZmF1bHRWTWV0cmljcz1vO2kudm1ldHJpY3M9bn1pc1NlcmlmRm9udChlKXtjb25zdCB0PWUuc3BsaXQoIi0iLDEpWzBdO3JldHVybiB0IGluIE9pKCl8fC9zZXJpZi9naS50ZXN0KHQpfWdldEJhc2VGb250TWV0cmljcyhlKXtsZXQgdD0wLGk9T2JqZWN0LmNyZWF0ZShudWxsKSxhPSExO2xldCByPUtpKClbZV18fGU7Y29uc3Qgcz1WaSgpO3IgaW4gc3x8KHI9dGhpcy5pc1NlcmlmRm9udChlKT8iVGltZXMtUm9tYW4iOiJIZWx2ZXRpY2EiKTtjb25zdCBuPXNbcl07aWYoIm51bWJlciI9PXR5cGVvZiBuKXt0PW47YT0hMH1lbHNlIGk9bigpO3JldHVybntkZWZhdWx0V2lkdGg6dCxtb25vc3BhY2U6YSx3aWR0aHM6aX19YnVpbGRDaGFyQ29kZVRvV2lkdGgoZSx0KXtjb25zdCBpPU9iamVjdC5jcmVhdGUobnVsbCksYT10LmRpZmZlcmVuY2VzLHI9dC5kZWZhdWx0RW5jb2Rpbmc7Zm9yKGxldCB0PTA7dDwyNTY7dCsrKXQgaW4gYSYmZVthW3RdXT9pW3RdPWVbYVt0XV06dCBpbiByJiZlW3JbdF1dJiYoaVt0XT1lW3JbdF1dKTtyZXR1cm4gaX1wcmVFdmFsdWF0ZUZvbnQoZSl7Y29uc3QgdD1lO2xldCBpPWUuZ2V0KCJTdWJ0eXBlIik7aWYoIShpIGluc3RhbmNlb2YgTmFtZSkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJpbnZhbGlkIGZvbnQgU3VidHlwZSIpO2xldCBhLHI9ITE7aWYoIlR5cGUwIj09PWkubmFtZSl7Y29uc3QgdD1lLmdldCgiRGVzY2VuZGFudEZvbnRzIik7aWYoIXQpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJEZXNjZW5kYW50IGZvbnRzIGFyZSBub3Qgc3BlY2lmaWVkIik7aWYoISgoZT1BcnJheS5pc0FycmF5KHQpP3RoaXMueHJlZi5mZXRjaElmUmVmKHRbMF0pOnQpaW5zdGFuY2VvZiBEaWN0KSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkRlc2NlbmRhbnQgZm9udCBpcyBub3QgYSBkaWN0aW9uYXJ5LiIpO2k9ZS5nZXQoIlN1YnR5cGUiKTtpZighKGkgaW5zdGFuY2VvZiBOYW1lKSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoImludmFsaWQgZm9udCBTdWJ0eXBlIik7cj0hMH1sZXQgcz1lLmdldCgiRmlyc3RDaGFyIik7TnVtYmVyLmlzSW50ZWdlcihzKXx8KHM9MCk7bGV0IG49ZS5nZXQoIkxhc3RDaGFyIik7TnVtYmVyLmlzSW50ZWdlcihuKXx8KG49cj82NTUzNToyNTUpO2NvbnN0IG89ZS5nZXQoIkZvbnREZXNjcmlwdG9yIiksZz1lLmdldCgiVG9Vbmljb2RlIil8fHQuZ2V0KCJUb1VuaWNvZGUiKTtpZihvKXthPW5ldyBNdXJtdXJIYXNoM182NDtjb25zdCBpPXQuZ2V0UmF3KCJFbmNvZGluZyIpO2lmKGkgaW5zdGFuY2VvZiBOYW1lKWEudXBkYXRlKGkubmFtZSk7ZWxzZSBpZihpIGluc3RhbmNlb2YgUmVmKWEudXBkYXRlKGkudG9TdHJpbmcoKSk7ZWxzZSBpZihpIGluc3RhbmNlb2YgRGljdClmb3IoY29uc3QgZSBvZiBpLmdldFJhd1ZhbHVlcygpKWlmKGUgaW5zdGFuY2VvZiBOYW1lKWEudXBkYXRlKGUubmFtZSk7ZWxzZSBpZihlIGluc3RhbmNlb2YgUmVmKWEudXBkYXRlKGUudG9TdHJpbmcoKSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KGUpKXtjb25zdCB0PWUubGVuZ3RoLGk9bmV3IEFycmF5KHQpO2ZvcihsZXQgYT0wO2E8dDthKyspe2NvbnN0IHQ9ZVthXTt0IGluc3RhbmNlb2YgTmFtZT9pW2FdPXQubmFtZTooIm51bWJlciI9PXR5cGVvZiB0fHx0IGluc3RhbmNlb2YgUmVmKSYmKGlbYV09dC50b1N0cmluZygpKX1hLnVwZGF0ZShpLmpvaW4oKSl9YS51cGRhdGUoYCR7c30tJHtufWApO2lmKGcgaW5zdGFuY2VvZiBCYXNlU3RyZWFtKXtjb25zdCBlPWcuc3RyfHxnLHQ9ZS5idWZmZXI/bmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIuYnVmZmVyLDAsZS5idWZmZXJMZW5ndGgpOm5ldyBVaW50OEFycmF5KGUuYnl0ZXMuYnVmZmVyLGUuc3RhcnQsZS5lbmQtZS5zdGFydCk7YS51cGRhdGUodCl9ZWxzZSBnIGluc3RhbmNlb2YgTmFtZSYmYS51cGRhdGUoZy5uYW1lKTtjb25zdCBvPWUuZ2V0KCJXaWR0aHMiKXx8dC5nZXQoIldpZHRocyIpO2lmKEFycmF5LmlzQXJyYXkobykpe2NvbnN0IGU9W107Zm9yKGNvbnN0IHQgb2YgbykoIm51bWJlciI9PXR5cGVvZiB0fHx0IGluc3RhbmNlb2YgUmVmKSYmZS5wdXNoKHQudG9TdHJpbmcoKSk7YS51cGRhdGUoZS5qb2luKCkpfWlmKHIpe2EudXBkYXRlKCJjb21wb3NpdGVGb250Iik7Y29uc3QgaT1lLmdldCgiVyIpfHx0LmdldCgiVyIpO2lmKEFycmF5LmlzQXJyYXkoaSkpe2NvbnN0IGU9W107Zm9yKGNvbnN0IHQgb2YgaSlpZigibnVtYmVyIj09dHlwZW9mIHR8fHQgaW5zdGFuY2VvZiBSZWYpZS5wdXNoKHQudG9TdHJpbmcoKSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKXtjb25zdCBpPVtdO2Zvcihjb25zdCBlIG9mIHQpKCJudW1iZXIiPT10eXBlb2YgZXx8ZSBpbnN0YW5jZW9mIFJlZikmJmkucHVzaChlLnRvU3RyaW5nKCkpO2UucHVzaChgWyR7aS5qb2luKCl9XWApfWEudXBkYXRlKGUuam9pbigpKX1jb25zdCByPWUuZ2V0UmF3KCJDSURUb0dJRE1hcCIpfHx0LmdldFJhdygiQ0lEVG9HSURNYXAiKTtyIGluc3RhbmNlb2YgTmFtZT9hLnVwZGF0ZShyLm5hbWUpOnIgaW5zdGFuY2VvZiBSZWY/YS51cGRhdGUoci50b1N0cmluZygpKTpyIGluc3RhbmNlb2YgQmFzZVN0cmVhbSYmYS51cGRhdGUoci5wZWVrQnl0ZXMoKSl9fXJldHVybntkZXNjcmlwdG9yOm8sZGljdDplLGJhc2VEaWN0OnQsY29tcG9zaXRlOnIsdHlwZTppLm5hbWUsZmlyc3RDaGFyOnMsbGFzdENoYXI6bix0b1VuaWNvZGU6ZyxoYXNoOmE/YS5oZXhkaWdlc3QoKToiIn19YXN5bmMgdHJhbnNsYXRlRm9udCh7ZGVzY3JpcHRvcjplLGRpY3Q6dCxiYXNlRGljdDppLGNvbXBvc2l0ZTphLHR5cGU6cyxmaXJzdENoYXI6bixsYXN0Q2hhcjpvLHRvVW5pY29kZTpnLGNzc0ZvbnRJbmZvOmN9KXtjb25zdCBsPSJUeXBlMyI9PT1zO2lmKCFlKXtpZighbCl7bGV0IGU9dC5nZXQoIkJhc2VGb250Iik7aWYoIShlIGluc3RhbmNlb2YgTmFtZSkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJCYXNlIGZvbnQgaXMgbm90IHNwZWNpZmllZCIpO2U9ZS5uYW1lLnJlcGxhY2VBbGwoL1ssX10vZywiLSIpO2NvbnN0IGE9dGhpcy5nZXRCYXNlRm9udE1ldHJpY3MoZSkscj1lLnNwbGl0KCItIiwxKVswXSxjPSh0aGlzLmlzU2VyaWZGb250KHIpP3hpOjApfChhLm1vbm9zcGFjZT9NaTowKXwoUGkoKVtyXT9IaTpKaSksaD17dHlwZTpzLG5hbWU6ZSxsb2FkZWROYW1lOmkubG9hZGVkTmFtZSxzeXN0ZW1Gb250SW5mbzpudWxsLHdpZHRoczphLndpZHRocyxkZWZhdWx0V2lkdGg6YS5kZWZhdWx0V2lkdGgsaXNTaW11bGF0ZWRGbGFnczohMCxmbGFnczpjLGZpcnN0Q2hhcjpuLGxhc3RDaGFyOm8sdG9Vbmljb2RlOmcseEhlaWdodDowLGNhcEhlaWdodDowLGl0YWxpY0FuZ2xlOjAsaXNUeXBlM0ZvbnQ6bH0sQz10LmdldCgiV2lkdGhzIiksUT1nZXRTdGFuZGFyZEZvbnROYW1lKGUpO2xldCBFPW51bGw7aWYoUSl7RT1hd2FpdCB0aGlzLmZldGNoU3RhbmRhcmRGb250RGF0YShRKTtoLmlzSW50ZXJuYWxGb250PSEhRX0haC5pc0ludGVybmFsRm9udCYmdGhpcy5vcHRpb25zLnVzZVN5c3RlbUZvbnRzJiYoaC5zeXN0ZW1Gb250SW5mbz1nZXRGb250U3Vic3RpdHV0aW9uKHRoaXMuc3lzdGVtRm9udENhY2hlLHRoaXMuaWRGYWN0b3J5LHRoaXMub3B0aW9ucy5zdGFuZGFyZEZvbnREYXRhVXJsLGUsUSxzKSk7Y29uc3QgdT1hd2FpdCB0aGlzLmV4dHJhY3REYXRhU3RydWN0dXJlcyh0LGgpO2lmKEFycmF5LmlzQXJyYXkoQykpe2NvbnN0IGU9W107bGV0IHQ9bjtmb3IoY29uc3QgaSBvZiBDKXtjb25zdCBhPXRoaXMueHJlZi5mZXRjaElmUmVmKGkpOyJudW1iZXIiPT10eXBlb2YgYSYmKGVbdF09YSk7dCsrfXUud2lkdGhzPWV9ZWxzZSB1LndpZHRocz10aGlzLmJ1aWxkQ2hhckNvZGVUb1dpZHRoKGEud2lkdGhzLHUpO3JldHVybiBuZXcgRm9udChlLEUsdSl9e2NvbnN0IGk9bG9va3VwTm9ybWFsUmVjdCh0LmdldEFycmF5KCJGb250QkJveCIpLFswLDAsMCwwXSk7KGU9bmV3IERpY3QobnVsbCkpLnNldCgiRm9udE5hbWUiLE5hbWUuZ2V0KHMpKTtlLnNldCgiRm9udEJCb3giLGkpfX1sZXQgaD1lLmdldCgiRm9udE5hbWUiKSxDPXQuZ2V0KCJCYXNlRm9udCIpOyJzdHJpbmciPT10eXBlb2YgaCYmKGg9TmFtZS5nZXQoaCkpOyJzdHJpbmciPT10eXBlb2YgQyYmKEM9TmFtZS5nZXQoQykpO2NvbnN0IFE9aD8ubmFtZSxFPUM/Lm5hbWU7aWYoIWwmJlEhPT1FKXtpbmZvKGBUaGUgRm9udERlc2NyaXB0b3IncyBGb250TmFtZSBpcyAiJHtRfSIgYnV0IHNob3VsZCBiZSB0aGUgc2FtZSBhcyB0aGUgRm9udCdzIEJhc2VGb250ICIke0V9Ii5gKTtRJiZFJiYoRS5zdGFydHNXaXRoKFEpfHwhaXNLbm93bkZvbnROYW1lKFEpJiZpc0tub3duRm9udE5hbWUoRSkpJiYoaD1udWxsKX1ofHw9QztpZighKGggaW5zdGFuY2VvZiBOYW1lKSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoImludmFsaWQgZm9udCBuYW1lIik7bGV0IHUsZCxmLHAsbTt0cnl7dT1lLmdldCgiRm9udEZpbGUiLCJGb250RmlsZTIiLCJGb250RmlsZTMiKTtpZih1KXtpZighKHUgaW5zdGFuY2VvZiBCYXNlU3RyZWFtKSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkZvbnRGaWxlIHNob3VsZCBiZSBhIHN0cmVhbSIpO2lmKHUuaXNFbXB0eSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkZvbnRGaWxlIGlzIGVtcHR5Iil9fWNhdGNoKGUpe2lmKCF0aGlzLm9wdGlvbnMuaWdub3JlRXJyb3JzKXRocm93IGU7d2FybihgdHJhbnNsYXRlRm9udCAtIGZldGNoaW5nICIke2gubmFtZX0iIGZvbnQgZmlsZTogIiR7ZX0iLmApO3U9bnVsbH1sZXQgeT0hMSx3PW51bGwsYj1udWxsO2lmKHUpe2lmKHUuZGljdCl7Y29uc3QgZT11LmRpY3QuZ2V0KCJTdWJ0eXBlIik7ZSBpbnN0YW5jZW9mIE5hbWUmJihkPWUubmFtZSk7Zj11LmRpY3QuZ2V0KCJMZW5ndGgxIik7cD11LmRpY3QuZ2V0KCJMZW5ndGgyIik7bT11LmRpY3QuZ2V0KCJMZW5ndGgzIil9fWVsc2UgaWYoYyl7Y29uc3QgZT1nZXRYZmFGb250TmFtZShoLm5hbWUpO2lmKGUpe2MuZm9udEZhbWlseT1gJHtjLmZvbnRGYW1pbHl9LVBkZkpTLVhGQWA7Yy5tZXRyaWNzPWUubWV0cmljc3x8bnVsbDt3PWUuZmFjdG9yc3x8bnVsbDt1PWF3YWl0IHRoaXMuZmV0Y2hTdGFuZGFyZEZvbnREYXRhKGUubmFtZSk7eT0hIXU7aT10PWdldFhmYUZvbnREaWN0KGgubmFtZSk7YT0hMH19ZWxzZSBpZighbCl7Y29uc3QgZT1nZXRTdGFuZGFyZEZvbnROYW1lKGgubmFtZSk7aWYoZSl7dT1hd2FpdCB0aGlzLmZldGNoU3RhbmRhcmRGb250RGF0YShlKTt5PSEhdX0heSYmdGhpcy5vcHRpb25zLnVzZVN5c3RlbUZvbnRzJiYoYj1nZXRGb250U3Vic3RpdHV0aW9uKHRoaXMuc3lzdGVtRm9udENhY2hlLHRoaXMuaWRGYWN0b3J5LHRoaXMub3B0aW9ucy5zdGFuZGFyZEZvbnREYXRhVXJsLGgubmFtZSxlLHMpKX1jb25zdCBEPWxvb2t1cE1hdHJpeCh0LmdldEFycmF5KCJGb250TWF0cml4IiksciksUz1sb29rdXBOb3JtYWxSZWN0KGUuZ2V0QXJyYXkoIkZvbnRCQm94Iil8fHQuZ2V0QXJyYXkoIkZvbnRCQm94Iiksdm9pZCAwKTtsZXQgaz1lLmdldCgiQXNjZW50Iik7Im51bWJlciIhPXR5cGVvZiBrJiYoaz12b2lkIDApO2xldCBSPWUuZ2V0KCJEZXNjZW50Iik7Im51bWJlciIhPXR5cGVvZiBSJiYoUj12b2lkIDApO2xldCBOPWUuZ2V0KCJYSGVpZ2h0Iik7Im51bWJlciIhPXR5cGVvZiBOJiYoTj0wKTtsZXQgRz1lLmdldCgiQ2FwSGVpZ2h0Iik7Im51bWJlciIhPXR5cGVvZiBHJiYoRz0wKTtsZXQgTT1lLmdldCgiRmxhZ3MiKTtOdW1iZXIuaXNJbnRlZ2VyKE0pfHwoTT0wKTtsZXQgVT1lLmdldCgiSXRhbGljQW5nbGUiKTsibnVtYmVyIiE9dHlwZW9mIFUmJihVPTApO2NvbnN0IHg9e3R5cGU6cyxuYW1lOmgubmFtZSxzdWJ0eXBlOmQsZmlsZTp1LGxlbmd0aDE6ZixsZW5ndGgyOnAsbGVuZ3RoMzptLGlzSW50ZXJuYWxGb250OnksbG9hZGVkTmFtZTppLmxvYWRlZE5hbWUsY29tcG9zaXRlOmEsZml4ZWRQaXRjaDohMSxmb250TWF0cml4OkQsZmlyc3RDaGFyOm4sbGFzdENoYXI6byx0b1VuaWNvZGU6ZyxiYm94OlMsYXNjZW50OmssZGVzY2VudDpSLHhIZWlnaHQ6TixjYXBIZWlnaHQ6RyxmbGFnczpNLGl0YWxpY0FuZ2xlOlUsaXNUeXBlM0ZvbnQ6bCxjc3NGb250SW5mbzpjLHNjYWxlRmFjdG9yczp3LHN5c3RlbUZvbnRJbmZvOmJ9O2lmKGEpe2NvbnN0IGU9aS5nZXQoIkVuY29kaW5nIik7ZSBpbnN0YW5jZW9mIE5hbWUmJih4LmNpZEVuY29kaW5nPWUubmFtZSk7Y29uc3QgdD1hd2FpdCBDTWFwRmFjdG9yeS5jcmVhdGUoe2VuY29kaW5nOmUsZmV0Y2hCdWlsdEluQ01hcDp0aGlzLl9mZXRjaEJ1aWx0SW5DTWFwQm91bmQsdXNlQ01hcDpudWxsfSk7eC5jTWFwPXQ7eC52ZXJ0aWNhbD14LmNNYXAudmVydGljYWx9Y29uc3QgTD1hd2FpdCB0aGlzLmV4dHJhY3REYXRhU3RydWN0dXJlcyh0LHgpO3RoaXMuZXh0cmFjdFdpZHRocyh0LGUsTCk7cmV0dXJuIG5ldyBGb250KGgubmFtZSx1LEwpfXN0YXRpYyBidWlsZEZvbnRQYXRocyhlLHQsaSxhKXtmdW5jdGlvbiBidWlsZFBhdGgodCl7Y29uc3Qgcj1gJHtlLmxvYWRlZE5hbWV9X3BhdGhfJHt0fWA7dHJ5e2lmKGUucmVuZGVyZXIuaGFzQnVpbHRQYXRoKHQpKXJldHVybjtpLnNlbmQoImNvbW1vbm9iaiIsW3IsIkZvbnRQYXRoIixlLnJlbmRlcmVyLmdldFBhdGhKcyh0KV0pfWNhdGNoKGUpe2lmKGEuaWdub3JlRXJyb3JzKXt3YXJuKGBidWlsZEZvbnRQYXRocyAtIGlnbm9yaW5nICR7cn0gZ2x5cGg6ICIke2V9Ii5gKTtyZXR1cm59dGhyb3cgZX19Zm9yKGNvbnN0IGUgb2YgdCl7YnVpbGRQYXRoKGUuZm9udENoYXIpO2NvbnN0IHQ9ZS5hY2NlbnQ7dD8uZm9udENoYXImJmJ1aWxkUGF0aCh0LmZvbnRDaGFyKX19c3RhdGljIGdldCBmYWxsYmFja0ZvbnREaWN0KCl7Y29uc3QgZT1uZXcgRGljdDtlLnNldCgiQmFzZUZvbnQiLE5hbWUuZ2V0KCJIZWx2ZXRpY2EiKSk7ZS5zZXQoIlR5cGUiLE5hbWUuZ2V0KCJGYWxsYmFja1R5cGUiKSk7ZS5zZXQoIlN1YnR5cGUiLE5hbWUuZ2V0KCJGYWxsYmFja1R5cGUiKSk7ZS5zZXQoIkVuY29kaW5nIixOYW1lLmdldCgiV2luQW5zaUVuY29kaW5nIikpO3JldHVybiBzaGFkb3codGhpcywiZmFsbGJhY2tGb250RGljdCIsZSl9fWNsYXNzIFRyYW5zbGF0ZWRGb250e2NvbnN0cnVjdG9yKHtsb2FkZWROYW1lOmUsZm9udDp0LGRpY3Q6aSxldmFsdWF0b3JPcHRpb25zOmF9KXt0aGlzLmxvYWRlZE5hbWU9ZTt0aGlzLmZvbnQ9dDt0aGlzLmRpY3Q9aTt0aGlzLl9ldmFsdWF0b3JPcHRpb25zPWF8fG1yO3RoaXMudHlwZTNMb2FkZWQ9bnVsbDt0aGlzLnR5cGUzRGVwZW5kZW5jaWVzPXQuaXNUeXBlM0ZvbnQ/bmV3IFNldDpudWxsO3RoaXMuc2VudD0hMX1zZW5kKGUpe2lmKCF0aGlzLnNlbnQpe3RoaXMuc2VudD0hMDtlLnNlbmQoImNvbW1vbm9iaiIsW3RoaXMubG9hZGVkTmFtZSwiRm9udCIsdGhpcy5mb250LmV4cG9ydERhdGEodGhpcy5fZXZhbHVhdG9yT3B0aW9ucy5mb250RXh0cmFQcm9wZXJ0aWVzKV0pfX1mYWxsYmFjayhlKXtpZih0aGlzLmZvbnQuZGF0YSl7dGhpcy5mb250LmRpc2FibGVGb250RmFjZT0hMDtQYXJ0aWFsRXZhbHVhdG9yLmJ1aWxkRm9udFBhdGhzKHRoaXMuZm9udCx0aGlzLmZvbnQuZ2x5cGhDYWNoZVZhbHVlcyxlLHRoaXMuX2V2YWx1YXRvck9wdGlvbnMpfX1sb2FkVHlwZTNEYXRhKGUsdCxpKXtpZih0aGlzLnR5cGUzTG9hZGVkKXJldHVybiB0aGlzLnR5cGUzTG9hZGVkO2lmKCF0aGlzLmZvbnQuaXNUeXBlM0ZvbnQpdGhyb3cgbmV3IEVycm9yKCJNdXN0IGJlIGEgVHlwZTMgZm9udC4iKTtjb25zdCBhPWUuY2xvbmUoe2lnbm9yZUVycm9yczohMX0pLHI9bmV3IFJlZlNldChlLnR5cGUzRm9udFJlZnMpO3RoaXMuZGljdC5vYmpJZCYmIXIuaGFzKHRoaXMuZGljdC5vYmpJZCkmJnIucHV0KHRoaXMuZGljdC5vYmpJZCk7YS50eXBlM0ZvbnRSZWZzPXI7Y29uc3Qgcz10aGlzLmZvbnQsbj10aGlzLnR5cGUzRGVwZW5kZW5jaWVzO2xldCBvPVByb21pc2UucmVzb2x2ZSgpO2NvbnN0IGc9dGhpcy5kaWN0LmdldCgiQ2hhclByb2NzIiksYz10aGlzLmRpY3QuZ2V0KCJSZXNvdXJjZXMiKXx8dCxsPU9iamVjdC5jcmVhdGUobnVsbCksaD1VdGlsLm5vcm1hbGl6ZVJlY3Qocy5iYm94fHxbMCwwLDAsMF0pLEM9aFsyXS1oWzBdLFE9aFszXS1oWzFdLEU9TWF0aC5oeXBvdChDLFEpO2Zvcihjb25zdCBlIG9mIGcuZ2V0S2V5cygpKW89by50aGVuKCgoKT0+e2NvbnN0IHQ9Zy5nZXQoZSkscj1uZXcgT3BlcmF0b3JMaXN0O3JldHVybiBhLmdldE9wZXJhdG9yTGlzdCh7c3RyZWFtOnQsdGFzazppLHJlc291cmNlczpjLG9wZXJhdG9yTGlzdDpyfSkudGhlbigoKCk9PntyLmZuQXJyYXlbMF09PT1mZSYmdGhpcy5fcmVtb3ZlVHlwZTNDb2xvck9wZXJhdG9ycyhyLEUpO2xbZV09ci5nZXRJUigpO2Zvcihjb25zdCBlIG9mIHIuZGVwZW5kZW5jaWVzKW4uYWRkKGUpfSkpLmNhdGNoKChmdW5jdGlvbih0KXt3YXJuKGBUeXBlMyBmb250IHJlc291cmNlICIke2V9IiBpcyBub3QgYXZhaWxhYmxlLmApO2NvbnN0IGk9bmV3IE9wZXJhdG9yTGlzdDtsW2VdPWkuZ2V0SVIoKX0pKX0pKTt0aGlzLnR5cGUzTG9hZGVkPW8udGhlbigoKCk9PntzLmNoYXJQcm9jT3BlcmF0b3JMaXN0PWw7aWYodGhpcy5fYmJveCl7cy5pc0NoYXJCQm94PSEwO3MuYmJveD10aGlzLl9iYm94fX0pKTtyZXR1cm4gdGhpcy50eXBlM0xvYWRlZH1fcmVtb3ZlVHlwZTNDb2xvck9wZXJhdG9ycyhlLHQ9TmFOKXtjb25zdCBpPVV0aWwubm9ybWFsaXplUmVjdChlLmFyZ3NBcnJheVswXS5zbGljZSgyKSksYT1pWzJdLWlbMF0scj1pWzNdLWlbMV0scz1NYXRoLmh5cG90KGEscik7aWYoMD09PWF8fDA9PT1yKXtlLmZuQXJyYXkuc3BsaWNlKDAsMSk7ZS5hcmdzQXJyYXkuc3BsaWNlKDAsMSl9ZWxzZSBpZigwPT09dHx8TWF0aC5yb3VuZChzL3QpPj0xMCl7dGhpcy5fYmJveHx8KHRoaXMuX2Jib3g9WzEvMCwxLzAsLTEvMCwtMS8wXSk7dGhpcy5fYmJveFswXT1NYXRoLm1pbih0aGlzLl9iYm94WzBdLGlbMF0pO3RoaXMuX2Jib3hbMV09TWF0aC5taW4odGhpcy5fYmJveFsxXSxpWzFdKTt0aGlzLl9iYm94WzJdPU1hdGgubWF4KHRoaXMuX2Jib3hbMl0saVsyXSk7dGhpcy5fYmJveFszXT1NYXRoLm1heCh0aGlzLl9iYm94WzNdLGlbM10pfWxldCBuPTAsbz1lLmxlbmd0aDtmb3IoO248bzspe3N3aXRjaChlLmZuQXJyYXlbbl0pe2Nhc2UgZmU6YnJlYWs7Y2FzZSBwZTpjYXNlIG1lOmNhc2UgeWU6Y2FzZSB3ZTpjYXNlIGJlOmNhc2UgRGU6Y2FzZSBGZTpjYXNlIFNlOmNhc2Uga2U6Y2FzZSBSZTpjYXNlIE5lOmNhc2UgR2U6Y2FzZSBNZTpjYXNlIEdBOmUuZm5BcnJheS5zcGxpY2UobiwxKTtlLmFyZ3NBcnJheS5zcGxpY2UobiwxKTtvLS07Y29udGludWU7Y2FzZSBVQTpjb25zdFt0XT1lLmFyZ3NBcnJheVtuXTtsZXQgaT0wLGE9dC5sZW5ndGg7Zm9yKDtpPGE7KXtjb25zdFtlXT10W2ldO3N3aXRjaChlKXtjYXNlIlRSIjpjYXNlIlRSMiI6Y2FzZSJIVCI6Y2FzZSJCRyI6Y2FzZSJCRzIiOmNhc2UiVUNSIjpjYXNlIlVDUjIiOnQuc3BsaWNlKGksMSk7YS0tO2NvbnRpbnVlfWkrK319bisrfX19Y2xhc3MgU3RhdGVNYW5hZ2Vye2NvbnN0cnVjdG9yKGU9bmV3IEV2YWxTdGF0ZSl7dGhpcy5zdGF0ZT1lO3RoaXMuc3RhdGVTdGFjaz1bXX1zYXZlKCl7Y29uc3QgZT10aGlzLnN0YXRlO3RoaXMuc3RhdGVTdGFjay5wdXNoKHRoaXMuc3RhdGUpO3RoaXMuc3RhdGU9ZS5jbG9uZSgpfXJlc3RvcmUoKXtjb25zdCBlPXRoaXMuc3RhdGVTdGFjay5wb3AoKTtlJiYodGhpcy5zdGF0ZT1lKX10cmFuc2Zvcm0oZSl7dGhpcy5zdGF0ZS5jdG09VXRpbC50cmFuc2Zvcm0odGhpcy5zdGF0ZS5jdG0sZSl9fWNsYXNzIFRleHRTdGF0ZXtjb25zdHJ1Y3Rvcigpe3RoaXMuY3RtPW5ldyBGbG9hdDMyQXJyYXkoYSk7dGhpcy5mb250TmFtZT1udWxsO3RoaXMuZm9udFNpemU9MDt0aGlzLmxvYWRlZE5hbWU9bnVsbDt0aGlzLmZvbnQ9bnVsbDt0aGlzLmZvbnRNYXRyaXg9cjt0aGlzLnRleHRNYXRyaXg9YS5zbGljZSgpO3RoaXMudGV4dExpbmVNYXRyaXg9YS5zbGljZSgpO3RoaXMuY2hhclNwYWNpbmc9MDt0aGlzLndvcmRTcGFjaW5nPTA7dGhpcy5sZWFkaW5nPTA7dGhpcy50ZXh0SFNjYWxlPTE7dGhpcy50ZXh0UmlzZT0wfXNldFRleHRNYXRyaXgoZSx0LGksYSxyLHMpe2NvbnN0IG49dGhpcy50ZXh0TWF0cml4O25bMF09ZTtuWzFdPXQ7blsyXT1pO25bM109YTtuWzRdPXI7bls1XT1zfXNldFRleHRMaW5lTWF0cml4KGUsdCxpLGEscixzKXtjb25zdCBuPXRoaXMudGV4dExpbmVNYXRyaXg7blswXT1lO25bMV09dDtuWzJdPWk7blszXT1hO25bNF09cjtuWzVdPXN9dHJhbnNsYXRlVGV4dE1hdHJpeChlLHQpe2NvbnN0IGk9dGhpcy50ZXh0TWF0cml4O2lbNF09aVswXSplK2lbMl0qdCtpWzRdO2lbNV09aVsxXSplK2lbM10qdCtpWzVdfXRyYW5zbGF0ZVRleHRMaW5lTWF0cml4KGUsdCl7Y29uc3QgaT10aGlzLnRleHRMaW5lTWF0cml4O2lbNF09aVswXSplK2lbMl0qdCtpWzRdO2lbNV09aVsxXSplK2lbM10qdCtpWzVdfWNhcnJpYWdlUmV0dXJuKCl7dGhpcy50cmFuc2xhdGVUZXh0TGluZU1hdHJpeCgwLC10aGlzLmxlYWRpbmcpO3RoaXMudGV4dE1hdHJpeD10aGlzLnRleHRMaW5lTWF0cml4LnNsaWNlKCl9Y2xvbmUoKXtjb25zdCBlPU9iamVjdC5jcmVhdGUodGhpcyk7ZS50ZXh0TWF0cml4PXRoaXMudGV4dE1hdHJpeC5zbGljZSgpO2UudGV4dExpbmVNYXRyaXg9dGhpcy50ZXh0TGluZU1hdHJpeC5zbGljZSgpO2UuZm9udE1hdHJpeD10aGlzLmZvbnRNYXRyaXguc2xpY2UoKTtyZXR1cm4gZX19Y2xhc3MgRXZhbFN0YXRle2NvbnN0cnVjdG9yKCl7dGhpcy5jdG09bmV3IEZsb2F0MzJBcnJheShhKTt0aGlzLmZvbnQ9bnVsbDt0aGlzLnRleHRSZW5kZXJpbmdNb2RlPWI7dGhpcy5fZmlsbENvbG9yU3BhY2U9Q29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXk7dGhpcy5fc3Ryb2tlQ29sb3JTcGFjZT1Db2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheTt0aGlzLnBhdHRlcm5GaWxsQ29sb3JTcGFjZT1udWxsO3RoaXMucGF0dGVyblN0cm9rZUNvbG9yU3BhY2U9bnVsbH1nZXQgZmlsbENvbG9yU3BhY2UoKXtyZXR1cm4gdGhpcy5fZmlsbENvbG9yU3BhY2V9c2V0IGZpbGxDb2xvclNwYWNlKGUpe3RoaXMuX2ZpbGxDb2xvclNwYWNlPXRoaXMucGF0dGVybkZpbGxDb2xvclNwYWNlPWV9Z2V0IHN0cm9rZUNvbG9yU3BhY2UoKXtyZXR1cm4gdGhpcy5fc3Ryb2tlQ29sb3JTcGFjZX1zZXQgc3Ryb2tlQ29sb3JTcGFjZShlKXt0aGlzLl9zdHJva2VDb2xvclNwYWNlPXRoaXMucGF0dGVyblN0cm9rZUNvbG9yU3BhY2U9ZX1jbG9uZSgpe3JldHVybiBPYmplY3QuY3JlYXRlKHRoaXMpfX1jbGFzcyBFdmFsdWF0b3JQcmVwcm9jZXNzb3J7c3RhdGljIGdldCBvcE1hcCgpe3JldHVybiBzaGFkb3codGhpcywib3BNYXAiLE9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShudWxsKSx7dzp7aWQ6RkEsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sSjp7aWQ6U0EsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sajp7aWQ6a0EsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sTTp7aWQ6UkEsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZDp7aWQ6TkEsbnVtQXJnczoyLHZhcmlhYmxlQXJnczohMX0scmk6e2lkOkdBLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGk6e2lkOk1BLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGdzOntpZDpVQSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxxOntpZDp4QSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxROntpZDpMQSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxjbTp7aWQ6SEEsbnVtQXJnczo2LHZhcmlhYmxlQXJnczohMX0sbTp7aWQ6SkEsbnVtQXJnczoyLHZhcmlhYmxlQXJnczohMX0sbDp7aWQ6dkEsbnVtQXJnczoyLHZhcmlhYmxlQXJnczohMX0sYzp7aWQ6WUEsbnVtQXJnczo2LHZhcmlhYmxlQXJnczohMX0sdjp7aWQ6S0EsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMX0seTp7aWQ6VEEsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMX0saDp7aWQ6cUEsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0scmU6e2lkOk9BLG51bUFyZ3M6NCx2YXJpYWJsZUFyZ3M6ITF9LFM6e2lkOlBBLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LHM6e2lkOldBLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGY6e2lkOmpBLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LEY6e2lkOmpBLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LCJmKiI6e2lkOlhBLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LEI6e2lkOlZBLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LCJCKiI6e2lkOlpBLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGI6e2lkOl9BLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LCJiKiI6e2lkOnpBLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LG46e2lkOiRBLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LFc6e2lkOkFlLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LCJXKiI6e2lkOmVlLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LEJUOntpZDp0ZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxFVDp7aWQ6aWUsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sVGM6e2lkOmFlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LFR3OntpZDpyZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxUejp7aWQ6c2UsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sVEw6e2lkOm5lLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LFRmOntpZDpvZSxudW1BcmdzOjIsdmFyaWFibGVBcmdzOiExfSxUcjp7aWQ6Z2UsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sVHM6e2lkOkllLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LFRkOntpZDpjZSxudW1BcmdzOjIsdmFyaWFibGVBcmdzOiExfSxURDp7aWQ6bGUsbnVtQXJnczoyLHZhcmlhYmxlQXJnczohMX0sVG06e2lkOmhlLG51bUFyZ3M6Nix2YXJpYWJsZUFyZ3M6ITF9LCJUKiI6e2lkOkNlLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LFRqOntpZDpCZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxUSjp7aWQ6UWUsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sIiciOntpZDpFZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSwnIic6e2lkOnVlLG51bUFyZ3M6Myx2YXJpYWJsZUFyZ3M6ITF9LGQwOntpZDpkZSxudW1BcmdzOjIsdmFyaWFibGVBcmdzOiExfSxkMTp7aWQ6ZmUsbnVtQXJnczo2LHZhcmlhYmxlQXJnczohMX0sQ1M6e2lkOnBlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGNzOntpZDptZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxTQzp7aWQ6eWUsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMH0sU0NOOntpZDp3ZSxudW1BcmdzOjMzLHZhcmlhYmxlQXJnczohMH0sc2M6e2lkOmJlLG51bUFyZ3M6NCx2YXJpYWJsZUFyZ3M6ITB9LHNjbjp7aWQ6RGUsbnVtQXJnczozMyx2YXJpYWJsZUFyZ3M6ITB9LEc6e2lkOkZlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGc6e2lkOlNlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LFJHOntpZDprZSxudW1BcmdzOjMsdmFyaWFibGVBcmdzOiExfSxyZzp7aWQ6UmUsbnVtQXJnczozLHZhcmlhYmxlQXJnczohMX0sSzp7aWQ6TmUsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMX0sazp7aWQ6R2UsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMX0sc2g6e2lkOk1lLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LEJJOntpZDpVZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxJRDp7aWQ6eGUsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sRUk6e2lkOkxlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LERvOntpZDpIZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxNUDp7aWQ6SmUsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sRFA6e2lkOnZlLG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LEJNQzp7aWQ6WWUsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sQkRDOntpZDpLZSxudW1BcmdzOjIsdmFyaWFibGVBcmdzOiExfSxFTUM6e2lkOlRlLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LEJYOntpZDpxZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxFWDp7aWQ6T2UsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sQk06bnVsbCxCRDpudWxsLHRydWU6bnVsbCxmYTpudWxsLGZhbDpudWxsLGZhbHM6bnVsbCxmYWxzZTpudWxsLG51Om51bGwsbnVsOm51bGwsbnVsbDpudWxsfSkpfXN0YXRpYyBNQVhfSU5WQUxJRF9QQVRIX09QUz0xMDtjb25zdHJ1Y3RvcihlLHQsaT1uZXcgU3RhdGVNYW5hZ2VyKXt0aGlzLnBhcnNlcj1uZXcgUGFyc2VyKHtsZXhlcjpuZXcgTGV4ZXIoZSxFdmFsdWF0b3JQcmVwcm9jZXNzb3Iub3BNYXApLHhyZWY6dH0pO3RoaXMuc3RhdGVNYW5hZ2VyPWk7dGhpcy5ub25Qcm9jZXNzZWRBcmdzPVtdO3RoaXMuX2lzUGF0aE9wPSExO3RoaXMuX251bUludmFsaWRQYXRoT1BTPTB9Z2V0IHNhdmVkU3RhdGVzRGVwdGgoKXtyZXR1cm4gdGhpcy5zdGF0ZU1hbmFnZXIuc3RhdGVTdGFjay5sZW5ndGh9cmVhZChlKXtsZXQgdD1lLmFyZ3M7Zm9yKDs7KXtjb25zdCBpPXRoaXMucGFyc2VyLmdldE9iaigpO2lmKGkgaW5zdGFuY2VvZiBDbWQpe2NvbnN0IGE9aS5jbWQscj1FdmFsdWF0b3JQcmVwcm9jZXNzb3Iub3BNYXBbYV07aWYoIXIpe3dhcm4oYFVua25vd24gY29tbWFuZCAiJHthfSIuYCk7Y29udGludWV9Y29uc3Qgcz1yLmlkLG49ci5udW1BcmdzO2xldCBvPW51bGwhPT10P3QubGVuZ3RoOjA7dGhpcy5faXNQYXRoT3B8fCh0aGlzLl9udW1JbnZhbGlkUGF0aE9QUz0wKTt0aGlzLl9pc1BhdGhPcD1zPj1KQSYmczw9JEE7aWYoci52YXJpYWJsZUFyZ3Mpbz5uJiZpbmZvKGBDb21tYW5kICR7YX06IGV4cGVjdGVkIFswLCAke259XSBhcmdzLCBidXQgcmVjZWl2ZWQgJHtvfSBhcmdzLmApO2Vsc2V7aWYobyE9PW4pe2NvbnN0IGU9dGhpcy5ub25Qcm9jZXNzZWRBcmdzO2Zvcig7bz5uOyl7ZS5wdXNoKHQuc2hpZnQoKSk7by0tfWZvcig7bzxuJiYwIT09ZS5sZW5ndGg7KXtudWxsPT09dCYmKHQ9W10pO3QudW5zaGlmdChlLnBvcCgpKTtvKyt9fWlmKG88bil7Y29uc3QgZT1gY29tbWFuZCAke2F9OiBleHBlY3RlZCAke259IGFyZ3MsIGJ1dCByZWNlaXZlZCAke299IGFyZ3MuYDtpZih0aGlzLl9pc1BhdGhPcCYmKyt0aGlzLl9udW1JbnZhbGlkUGF0aE9QUz5FdmFsdWF0b3JQcmVwcm9jZXNzb3IuTUFYX0lOVkFMSURfUEFUSF9PUFMpdGhyb3cgbmV3IEZvcm1hdEVycm9yKGBJbnZhbGlkICR7ZX1gKTt3YXJuKGBTa2lwcGluZyAke2V9YCk7bnVsbCE9PXQmJih0Lmxlbmd0aD0wKTtjb250aW51ZX19dGhpcy5wcmVwcm9jZXNzQ29tbWFuZChzLHQpO2UuZm49cztlLmFyZ3M9dDtyZXR1cm4hMH1pZihpPT09RXQpcmV0dXJuITE7aWYobnVsbCE9PWkpe251bGw9PT10JiYodD1bXSk7dC5wdXNoKGkpO2lmKHQubGVuZ3RoPjMzKXRocm93IG5ldyBGb3JtYXRFcnJvcigiVG9vIG1hbnkgYXJndW1lbnRzIil9fX1wcmVwcm9jZXNzQ29tbWFuZChlLHQpe3N3aXRjaCgwfGUpe2Nhc2UgeEE6dGhpcy5zdGF0ZU1hbmFnZXIuc2F2ZSgpO2JyZWFrO2Nhc2UgTEE6dGhpcy5zdGF0ZU1hbmFnZXIucmVzdG9yZSgpO2JyZWFrO2Nhc2UgSEE6dGhpcy5zdGF0ZU1hbmFnZXIudHJhbnNmb3JtKHQpfX19Y2xhc3MgRGVmYXVsdEFwcGVhcmFuY2VFdmFsdWF0b3IgZXh0ZW5kcyBFdmFsdWF0b3JQcmVwcm9jZXNzb3J7Y29uc3RydWN0b3IoZSl7c3VwZXIobmV3IFN0cmluZ1N0cmVhbShlKSl9cGFyc2UoKXtjb25zdCBlPXtmbjowLGFyZ3M6W119LHQ9e2ZvbnRTaXplOjAsZm9udE5hbWU6IiIsZm9udENvbG9yOm5ldyBVaW50OENsYW1wZWRBcnJheSgzKX07dHJ5e2Zvcig7Oyl7ZS5hcmdzLmxlbmd0aD0wO2lmKCF0aGlzLnJlYWQoZSkpYnJlYWs7aWYoMCE9PXRoaXMuc2F2ZWRTdGF0ZXNEZXB0aCljb250aW51ZTtjb25zdHtmbjppLGFyZ3M6YX09ZTtzd2l0Y2goMHxpKXtjYXNlIG9lOmNvbnN0W2UsaV09YTtlIGluc3RhbmNlb2YgTmFtZSYmKHQuZm9udE5hbWU9ZS5uYW1lKTsibnVtYmVyIj09dHlwZW9mIGkmJmk+MCYmKHQuZm9udFNpemU9aSk7YnJlYWs7Y2FzZSBSZTpDb2xvclNwYWNlLnNpbmdsZXRvbnMucmdiLmdldFJnYkl0ZW0oYSwwLHQuZm9udENvbG9yLDApO2JyZWFrO2Nhc2UgU2U6Q29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXkuZ2V0UmdiSXRlbShhLDAsdC5mb250Q29sb3IsMCk7YnJlYWs7Y2FzZSBHZTpDb2xvclNwYWNlLnNpbmdsZXRvbnMuY215ay5nZXRSZ2JJdGVtKGEsMCx0LmZvbnRDb2xvciwwKX19fWNhdGNoKGUpe3dhcm4oYHBhcnNlRGVmYXVsdEFwcGVhcmFuY2UgLSBpZ25vcmluZyBlcnJvcnM6ICIke2V9Ii5gKX1yZXR1cm4gdH19ZnVuY3Rpb24gcGFyc2VEZWZhdWx0QXBwZWFyYW5jZShlKXtyZXR1cm4gbmV3IERlZmF1bHRBcHBlYXJhbmNlRXZhbHVhdG9yKGUpLnBhcnNlKCl9Y2xhc3MgQXBwZWFyYW5jZVN0cmVhbUV2YWx1YXRvciBleHRlbmRzIEV2YWx1YXRvclByZXByb2Nlc3Nvcntjb25zdHJ1Y3RvcihlLHQsaSl7c3VwZXIoZSk7dGhpcy5zdHJlYW09ZTt0aGlzLmV2YWx1YXRvck9wdGlvbnM9dDt0aGlzLnhyZWY9aTt0aGlzLnJlc291cmNlcz1lLmRpY3Q/LmdldCgiUmVzb3VyY2VzIil9cGFyc2UoKXtjb25zdCBlPXtmbjowLGFyZ3M6W119O2xldCB0PXtzY2FsZUZhY3RvcjoxLGZvbnRTaXplOjAsZm9udE5hbWU6IiIsZm9udENvbG9yOm5ldyBVaW50OENsYW1wZWRBcnJheSgzKSxmaWxsQ29sb3JTcGFjZTpDb2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheX0saT0hMTtjb25zdCBhPVtdO3RyeXtmb3IoOzspe2UuYXJncy5sZW5ndGg9MDtpZihpfHwhdGhpcy5yZWFkKGUpKWJyZWFrO2NvbnN0e2ZuOnIsYXJnczpzfT1lO3N3aXRjaCgwfHIpe2Nhc2UgeEE6YS5wdXNoKHtzY2FsZUZhY3Rvcjp0LnNjYWxlRmFjdG9yLGZvbnRTaXplOnQuZm9udFNpemUsZm9udE5hbWU6dC5mb250TmFtZSxmb250Q29sb3I6dC5mb250Q29sb3Iuc2xpY2UoKSxmaWxsQ29sb3JTcGFjZTp0LmZpbGxDb2xvclNwYWNlfSk7YnJlYWs7Y2FzZSBMQTp0PWEucG9wKCl8fHQ7YnJlYWs7Y2FzZSBoZTp0LnNjYWxlRmFjdG9yKj1NYXRoLmh5cG90KHNbMF0sc1sxXSk7YnJlYWs7Y2FzZSBvZTpjb25zdFtlLHJdPXM7ZSBpbnN0YW5jZW9mIE5hbWUmJih0LmZvbnROYW1lPWUubmFtZSk7Im51bWJlciI9PXR5cGVvZiByJiZyPjAmJih0LmZvbnRTaXplPXIqdC5zY2FsZUZhY3Rvcik7YnJlYWs7Y2FzZSBtZTp0LmZpbGxDb2xvclNwYWNlPUNvbG9yU3BhY2UucGFyc2Uoe2NzOnNbMF0seHJlZjp0aGlzLnhyZWYscmVzb3VyY2VzOnRoaXMucmVzb3VyY2VzLHBkZkZ1bmN0aW9uRmFjdG9yeTp0aGlzLl9wZGZGdW5jdGlvbkZhY3RvcnksbG9jYWxDb2xvclNwYWNlQ2FjaGU6dGhpcy5fbG9jYWxDb2xvclNwYWNlQ2FjaGV9KTticmVhaztjYXNlIGJlOnQuZmlsbENvbG9yU3BhY2UuZ2V0UmdiSXRlbShzLDAsdC5mb250Q29sb3IsMCk7YnJlYWs7Y2FzZSBSZTpDb2xvclNwYWNlLnNpbmdsZXRvbnMucmdiLmdldFJnYkl0ZW0ocywwLHQuZm9udENvbG9yLDApO2JyZWFrO2Nhc2UgU2U6Q29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXkuZ2V0UmdiSXRlbShzLDAsdC5mb250Q29sb3IsMCk7YnJlYWs7Y2FzZSBHZTpDb2xvclNwYWNlLnNpbmdsZXRvbnMuY215ay5nZXRSZ2JJdGVtKHMsMCx0LmZvbnRDb2xvciwwKTticmVhaztjYXNlIEJlOmNhc2UgUWU6Y2FzZSBFZTpjYXNlIHVlOmk9ITB9fX1jYXRjaChlKXt3YXJuKGBwYXJzZUFwcGVhcmFuY2VTdHJlYW0gLSBpZ25vcmluZyBlcnJvcnM6ICIke2V9Ii5gKX10aGlzLnN0cmVhbS5yZXNldCgpO2RlbGV0ZSB0LnNjYWxlRmFjdG9yO2RlbGV0ZSB0LmZpbGxDb2xvclNwYWNlO3JldHVybiB0fWdldCBfbG9jYWxDb2xvclNwYWNlQ2FjaGUoKXtyZXR1cm4gc2hhZG93KHRoaXMsIl9sb2NhbENvbG9yU3BhY2VDYWNoZSIsbmV3IExvY2FsQ29sb3JTcGFjZUNhY2hlKX1nZXQgX3BkZkZ1bmN0aW9uRmFjdG9yeSgpe3JldHVybiBzaGFkb3codGhpcywiX3BkZkZ1bmN0aW9uRmFjdG9yeSIsbmV3IFBERkZ1bmN0aW9uRmFjdG9yeSh7eHJlZjp0aGlzLnhyZWYsaXNFdmFsU3VwcG9ydGVkOnRoaXMuZXZhbHVhdG9yT3B0aW9ucy5pc0V2YWxTdXBwb3J0ZWR9KSl9fWZ1bmN0aW9uIGdldFBkZkNvbG9yKGUsdCl7aWYoZVswXT09PWVbMV0mJmVbMV09PT1lWzJdKXtyZXR1cm5gJHtudW1iZXJUb1N0cmluZyhlWzBdLzI1NSl9ICR7dD8iZyI6IkcifWB9cmV0dXJuIEFycmF5LmZyb20oZSwoZT0+bnVtYmVyVG9TdHJpbmcoZS8yNTUpKSkuam9pbigiICIpKyIgIisodD8icmciOiJSRyIpfWNsYXNzIEZha2VVbmljb2RlRm9udHtjb25zdHJ1Y3RvcihlLHQpe3RoaXMueHJlZj1lO3RoaXMud2lkdGhzPW51bGw7dGhpcy5maXJzdENoYXI9MS8wO3RoaXMubGFzdENoYXI9LTEvMDt0aGlzLmZvbnRGYW1pbHk9dDtjb25zdCBpPW5ldyBPZmZzY3JlZW5DYW52YXMoMSwxKTt0aGlzLmN0eE1lYXN1cmU9aS5nZXRDb250ZXh0KCIyZCIse3dpbGxSZWFkRnJlcXVlbnRseTohMH0pO0Zha2VVbmljb2RlRm9udC5fZm9udE5hbWVJZHx8KEZha2VVbmljb2RlRm9udC5fZm9udE5hbWVJZD0xKTt0aGlzLmZvbnROYW1lPU5hbWUuZ2V0KGBJbnZhbGlkUERGanNGb250XyR7dH1fJHtGYWtlVW5pY29kZUZvbnQuX2ZvbnROYW1lSWQrK31gKX1nZXQgZm9udERlc2NyaXB0b3JSZWYoKXtpZighRmFrZVVuaWNvZGVGb250Ll9mb250RGVzY3JpcHRvclJlZil7Y29uc3QgZT1uZXcgRGljdCh0aGlzLnhyZWYpO2Uuc2V0KCJUeXBlIixOYW1lLmdldCgiRm9udERlc2NyaXB0b3IiKSk7ZS5zZXQoIkZvbnROYW1lIix0aGlzLmZvbnROYW1lKTtlLnNldCgiRm9udEZhbWlseSIsIk15cmlhZFBybyBSZWd1bGFyIik7ZS5zZXQoIkZvbnRCQm94IixbMCwwLDAsMF0pO2Uuc2V0KCJGb250U3RyZXRjaCIsTmFtZS5nZXQoIk5vcm1hbCIpKTtlLnNldCgiRm9udFdlaWdodCIsNDAwKTtlLnNldCgiSXRhbGljQW5nbGUiLDApO0Zha2VVbmljb2RlRm9udC5fZm9udERlc2NyaXB0b3JSZWY9dGhpcy54cmVmLmdldE5ld1BlcnNpc3RlbnRSZWYoZSl9cmV0dXJuIEZha2VVbmljb2RlRm9udC5fZm9udERlc2NyaXB0b3JSZWZ9Z2V0IGRlc2NlbmRhbnRGb250UmVmKCl7Y29uc3QgZT1uZXcgRGljdCh0aGlzLnhyZWYpO2Uuc2V0KCJCYXNlRm9udCIsdGhpcy5mb250TmFtZSk7ZS5zZXQoIlR5cGUiLE5hbWUuZ2V0KCJGb250IikpO2Uuc2V0KCJTdWJ0eXBlIixOYW1lLmdldCgiQ0lERm9udFR5cGUwIikpO2Uuc2V0KCJDSURUb0dJRE1hcCIsTmFtZS5nZXQoIklkZW50aXR5IikpO2Uuc2V0KCJGaXJzdENoYXIiLHRoaXMuZmlyc3RDaGFyKTtlLnNldCgiTGFzdENoYXIiLHRoaXMubGFzdENoYXIpO2Uuc2V0KCJGb250RGVzY3JpcHRvciIsdGhpcy5mb250RGVzY3JpcHRvclJlZik7ZS5zZXQoIkRXIiwxZTMpO2NvbnN0IHQ9W10saT1bLi4udGhpcy53aWR0aHMuZW50cmllcygpXS5zb3J0KCk7bGV0IGE9bnVsbCxyPW51bGw7Zm9yKGNvbnN0W2Usc11vZiBpKWlmKGEpaWYoZT09PWErci5sZW5ndGgpci5wdXNoKHMpO2Vsc2V7dC5wdXNoKGEscik7YT1lO3I9W3NdfWVsc2V7YT1lO3I9W3NdfWEmJnQucHVzaChhLHIpO2Uuc2V0KCJXIix0KTtjb25zdCBzPW5ldyBEaWN0KHRoaXMueHJlZik7cy5zZXQoIk9yZGVyaW5nIiwiSWRlbnRpdHkiKTtzLnNldCgiUmVnaXN0cnkiLCJBZG9iZSIpO3Muc2V0KCJTdXBwbGVtZW50IiwwKTtlLnNldCgiQ0lEU3lzdGVtSW5mbyIscyk7cmV0dXJuIHRoaXMueHJlZi5nZXROZXdQZXJzaXN0ZW50UmVmKGUpfWdldCBiYXNlRm9udFJlZigpe2NvbnN0IGU9bmV3IERpY3QodGhpcy54cmVmKTtlLnNldCgiQmFzZUZvbnQiLHRoaXMuZm9udE5hbWUpO2Uuc2V0KCJUeXBlIixOYW1lLmdldCgiRm9udCIpKTtlLnNldCgiU3VidHlwZSIsTmFtZS5nZXQoIlR5cGUwIikpO2Uuc2V0KCJFbmNvZGluZyIsTmFtZS5nZXQoIklkZW50aXR5LUgiKSk7ZS5zZXQoIkRlc2NlbmRhbnRGb250cyIsW3RoaXMuZGVzY2VuZGFudEZvbnRSZWZdKTtlLnNldCgiVG9Vbmljb2RlIixOYW1lLmdldCgiSWRlbnRpdHktSCIpKTtyZXR1cm4gdGhpcy54cmVmLmdldE5ld1BlcnNpc3RlbnRSZWYoZSl9Z2V0IHJlc291cmNlcygpe2NvbnN0IGU9bmV3IERpY3QodGhpcy54cmVmKSx0PW5ldyBEaWN0KHRoaXMueHJlZik7dC5zZXQodGhpcy5mb250TmFtZS5uYW1lLHRoaXMuYmFzZUZvbnRSZWYpO2Uuc2V0KCJGb250Iix0KTtyZXR1cm4gZX1fY3JlYXRlQ29udGV4dCgpe3RoaXMud2lkdGhzPW5ldyBNYXA7dGhpcy5jdHhNZWFzdXJlLmZvbnQ9YDEwMDBweCAke3RoaXMuZm9udEZhbWlseX1gO3JldHVybiB0aGlzLmN0eE1lYXN1cmV9Y3JlYXRlRm9udFJlc291cmNlcyhlKXtjb25zdCB0PXRoaXMuX2NyZWF0ZUNvbnRleHQoKTtmb3IoY29uc3QgaSBvZiBlLnNwbGl0KC9cclxuP3xcbi8pKWZvcihjb25zdCBlIG9mIGkuc3BsaXQoIiIpKXtjb25zdCBpPWUuY2hhckNvZGVBdCgwKTtpZih0aGlzLndpZHRocy5oYXMoaSkpY29udGludWU7Y29uc3QgYT10Lm1lYXN1cmVUZXh0KGUpLHI9TWF0aC5jZWlsKGEud2lkdGgpO3RoaXMud2lkdGhzLnNldChpLHIpO3RoaXMuZmlyc3RDaGFyPU1hdGgubWluKGksdGhpcy5maXJzdENoYXIpO3RoaXMubGFzdENoYXI9TWF0aC5tYXgoaSx0aGlzLmxhc3RDaGFyKX1yZXR1cm4gdGhpcy5yZXNvdXJjZXN9c3RhdGljIGdldEZpcnN0UG9zaXRpb25JbmZvKGUsdCxpKXtjb25zdFthLHIsbyxnXT1lO2xldCBjPW8tYSxsPWctcjt0JTE4MCE9MCYmKFtjLGxdPVtsLGNdKTtjb25zdCBoPXMqaTtyZXR1cm57Y29vcmRzOlswLGwrbippLWhdLGJib3g6WzAsMCxjLGxdLG1hdHJpeDowIT09dD9nZXRSb3RhdGlvbk1hdHJpeCh0LGwsaCk6dm9pZCAwfX1jcmVhdGVBcHBlYXJhbmNlKGUsdCxpLGEscixvKXtjb25zdCBnPXRoaXMuX2NyZWF0ZUNvbnRleHQoKSxjPVtdO2xldCBsPS0xLzA7Zm9yKGNvbnN0IHQgb2YgZS5zcGxpdCgvXHJcbj98XG4vKSl7Yy5wdXNoKHQpO2NvbnN0IGU9Zy5tZWFzdXJlVGV4dCh0KS53aWR0aDtsPU1hdGgubWF4KGwsZSk7Zm9yKGNvbnN0IGUgb2YgY29kZVBvaW50SXRlcih0KSl7Y29uc3QgdD1TdHJpbmcuZnJvbUNvZGVQb2ludChlKTtsZXQgaT10aGlzLndpZHRocy5nZXQoZSk7aWYodm9pZCAwPT09aSl7Y29uc3QgYT1nLm1lYXN1cmVUZXh0KHQpO2k9TWF0aC5jZWlsKGEud2lkdGgpO3RoaXMud2lkdGhzLnNldChlLGkpO3RoaXMuZmlyc3RDaGFyPU1hdGgubWluKGUsdGhpcy5maXJzdENoYXIpO3RoaXMubGFzdENoYXI9TWF0aC5tYXgoZSx0aGlzLmxhc3RDaGFyKX19fWwqPWEvMWUzO2NvbnN0W2gsQyxRLEVdPXQ7bGV0IHU9US1oLGQ9RS1DO2klMTgwIT0wJiYoW3UsZF09W2QsdV0pO2xldCBmPTE7bD51JiYoZj11L2wpO2xldCBwPTE7Y29uc3QgbT1zKmEseT1uKmEsdz1tKmMubGVuZ3RoO3c+ZCYmKHA9ZC93KTtjb25zdCBiPWEqTWF0aC5taW4oZixwKSxEPVsicSIsYDAgMCAke251bWJlclRvU3RyaW5nKHUpfSAke251bWJlclRvU3RyaW5nKGQpfSByZSBXIG5gLCJCVCIsYDEgMCAwIDEgMCAke251bWJlclRvU3RyaW5nKGQreSl9IFRtIDAgVGMgJHtnZXRQZGZDb2xvcihyLCEwKX1gLGAvJHt0aGlzLmZvbnROYW1lLm5hbWV9ICR7bnVtYmVyVG9TdHJpbmcoYil9IFRmYF0se3Jlc291cmNlczpTfT10aGlzO2lmKDEhPT0obz0ibnVtYmVyIj09dHlwZW9mIG8mJm8+PTAmJm88PTE/bzoxKSl7RC5wdXNoKCIvUjAgZ3MiKTtjb25zdCBlPW5ldyBEaWN0KHRoaXMueHJlZiksdD1uZXcgRGljdCh0aGlzLnhyZWYpO3Quc2V0KCJjYSIsbyk7dC5zZXQoIkNBIixvKTt0LnNldCgiVHlwZSIsTmFtZS5nZXQoIkV4dEdTdGF0ZSIpKTtlLnNldCgiUjAiLHQpO1Muc2V0KCJFeHRHU3RhdGUiLGUpfWNvbnN0IGs9bnVtYmVyVG9TdHJpbmcobSk7Zm9yKGNvbnN0IGUgb2YgYylELnB1c2goYDAgLSR7a30gVGQgPCR7c3RyaW5nVG9VVEYxNkhleFN0cmluZyhlKX0+IFRqYCk7RC5wdXNoKCJFVCIsIlEiKTtjb25zdCBSPUQuam9pbigiXG4iKSxOPW5ldyBEaWN0KHRoaXMueHJlZik7Ti5zZXQoIlN1YnR5cGUiLE5hbWUuZ2V0KCJGb3JtIikpO04uc2V0KCJUeXBlIixOYW1lLmdldCgiWE9iamVjdCIpKTtOLnNldCgiQkJveCIsWzAsMCx1LGRdKTtOLnNldCgiTGVuZ3RoIixSLmxlbmd0aCk7Ti5zZXQoIlJlc291cmNlcyIsUyk7aWYoaSl7Y29uc3QgZT1nZXRSb3RhdGlvbk1hdHJpeChpLHUsZCk7Ti5zZXQoIk1hdHJpeCIsZSl9Y29uc3QgRz1uZXcgU3RyaW5nU3RyZWFtKFIpO0cuZGljdD1OO3JldHVybiBHfX1jbGFzcyBOYW1lT3JOdW1iZXJUcmVle2NvbnN0cnVjdG9yKGUsdCxpKXt0aGlzLnJvb3Q9ZTt0aGlzLnhyZWY9dDt0aGlzLl90eXBlPWl9Z2V0QWxsKCl7Y29uc3QgZT1uZXcgTWFwO2lmKCF0aGlzLnJvb3QpcmV0dXJuIGU7Y29uc3QgdD10aGlzLnhyZWYsaT1uZXcgUmVmU2V0O2kucHV0KHRoaXMucm9vdCk7Y29uc3QgYT1bdGhpcy5yb290XTtmb3IoO2EubGVuZ3RoPjA7KXtjb25zdCByPXQuZmV0Y2hJZlJlZihhLnNoaWZ0KCkpO2lmKCEociBpbnN0YW5jZW9mIERpY3QpKWNvbnRpbnVlO2lmKHIuaGFzKCJLaWRzIikpe2NvbnN0IGU9ci5nZXQoIktpZHMiKTtpZighQXJyYXkuaXNBcnJheShlKSljb250aW51ZTtmb3IoY29uc3QgdCBvZiBlKXtpZihpLmhhcyh0KSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYER1cGxpY2F0ZSBlbnRyeSBpbiAiJHt0aGlzLl90eXBlfSIgdHJlZS5gKTthLnB1c2godCk7aS5wdXQodCl9Y29udGludWV9Y29uc3Qgcz1yLmdldCh0aGlzLl90eXBlKTtpZihBcnJheS5pc0FycmF5KHMpKWZvcihsZXQgaT0wLGE9cy5sZW5ndGg7aTxhO2krPTIpZS5zZXQodC5mZXRjaElmUmVmKHNbaV0pLHQuZmV0Y2hJZlJlZihzW2krMV0pKX1yZXR1cm4gZX1nZXRSYXcoZSl7aWYoIXRoaXMucm9vdClyZXR1cm4gbnVsbDtjb25zdCB0PXRoaXMueHJlZjtsZXQgaT10LmZldGNoSWZSZWYodGhpcy5yb290KSxhPTA7Zm9yKDtpLmhhcygiS2lkcyIpOyl7aWYoKythPjEwKXt3YXJuKGBTZWFyY2ggZGVwdGggbGltaXQgcmVhY2hlZCBmb3IgIiR7dGhpcy5fdHlwZX0iIHRyZWUuYCk7cmV0dXJuIG51bGx9Y29uc3Qgcj1pLmdldCgiS2lkcyIpO2lmKCFBcnJheS5pc0FycmF5KHIpKXJldHVybiBudWxsO2xldCBzPTAsbj1yLmxlbmd0aC0xO2Zvcig7czw9bjspe2NvbnN0IGE9cytuPj4xLG89dC5mZXRjaElmUmVmKHJbYV0pLGc9by5nZXQoIkxpbWl0cyIpO2lmKGU8dC5mZXRjaElmUmVmKGdbMF0pKW49YS0xO2Vsc2V7aWYoIShlPnQuZmV0Y2hJZlJlZihnWzFdKSkpe2k9bzticmVha31zPWErMX19aWYocz5uKXJldHVybiBudWxsfWNvbnN0IHI9aS5nZXQodGhpcy5fdHlwZSk7aWYoQXJyYXkuaXNBcnJheShyKSl7bGV0IGk9MCxhPXIubGVuZ3RoLTI7Zm9yKDtpPD1hOyl7Y29uc3Qgcz1pK2E+PjEsbj1zKygxJnMpLG89dC5mZXRjaElmUmVmKHJbbl0pO2lmKGU8bylhPW4tMjtlbHNle2lmKCEoZT5vKSlyZXR1cm4gcltuKzFdO2k9bisyfX19cmV0dXJuIG51bGx9Z2V0KGUpe3JldHVybiB0aGlzLnhyZWYuZmV0Y2hJZlJlZih0aGlzLmdldFJhdyhlKSl9fWNsYXNzIE5hbWVUcmVlIGV4dGVuZHMgTmFtZU9yTnVtYmVyVHJlZXtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsdCwiTmFtZXMiKX19Y2xhc3MgTnVtYmVyVHJlZSBleHRlbmRzIE5hbWVPck51bWJlclRyZWV7Y29uc3RydWN0b3IoZSx0KXtzdXBlcihlLHQsIk51bXMiKX19ZnVuY3Rpb24gY2xlYXJHbG9iYWxDYWNoZXMoKXshZnVuY3Rpb24gY2xlYXJQYXR0ZXJuQ2FjaGVzKCl7dWE9T2JqZWN0LmNyZWF0ZShudWxsKX0oKTshZnVuY3Rpb24gY2xlYXJQcmltaXRpdmVDYWNoZXMoKXt1dD1PYmplY3QuY3JlYXRlKG51bGwpO2R0PU9iamVjdC5jcmVhdGUobnVsbCk7ZnQ9T2JqZWN0LmNyZWF0ZShudWxsKX0oKTshZnVuY3Rpb24gY2xlYXJVbmljb2RlQ2FjaGVzKCl7TmkuY2xlYXIoKX0oKTtKcHhJbWFnZS5jbGVhbnVwKCl9ZnVuY3Rpb24gcGlja1BsYXRmb3JtSXRlbShlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIERpY3Q/ZS5oYXMoIlVGIik/ZS5nZXQoIlVGIik6ZS5oYXMoIkYiKT9lLmdldCgiRiIpOmUuaGFzKCJVbml4Iik/ZS5nZXQoIlVuaXgiKTplLmhhcygiTWFjIik/ZS5nZXQoIk1hYyIpOmUuaGFzKCJET1MiKT9lLmdldCgiRE9TIik6bnVsbDpudWxsfWNsYXNzIEZpbGVTcGVjeyNVPSExO2NvbnN0cnVjdG9yKGUsdCxpPSExKXtpZihlIGluc3RhbmNlb2YgRGljdCl7dGhpcy54cmVmPXQ7dGhpcy5yb290PWU7ZS5oYXMoIkZTIikmJih0aGlzLmZzPWUuZ2V0KCJGUyIpKTtlLmhhcygiUkYiKSYmd2FybigiUmVsYXRlZCBmaWxlIHNwZWNpZmljYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkIik7aXx8KGUuaGFzKCJFRiIpP3RoaXMuI1U9ITA6d2FybigiTm9uLWVtYmVkZGVkIGZpbGUgc3BlY2lmaWNhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQiKSl9fWdldCBmaWxlbmFtZSgpe2xldCBlPSIiO2NvbnN0IHQ9cGlja1BsYXRmb3JtSXRlbSh0aGlzLnJvb3QpO3QmJiJzdHJpbmciPT10eXBlb2YgdCYmKGU9c3RyaW5nVG9QREZTdHJpbmcodCkucmVwbGFjZUFsbCgiXFxcXCIsIlxcIikucmVwbGFjZUFsbCgiXFwvIiwiLyIpLnJlcGxhY2VBbGwoIlxcIiwiLyIpKTtyZXR1cm4gc2hhZG93KHRoaXMsImZpbGVuYW1lIixlfHwidW5uYW1lZCIpfWdldCBjb250ZW50KCl7aWYoIXRoaXMuI1UpcmV0dXJuIG51bGw7dGhpcy5fY29udGVudFJlZnx8PXBpY2tQbGF0Zm9ybUl0ZW0odGhpcy5yb290Py5nZXQoIkVGIikpO2xldCBlPW51bGw7aWYodGhpcy5fY29udGVudFJlZil7Y29uc3QgdD10aGlzLnhyZWYuZmV0Y2hJZlJlZih0aGlzLl9jb250ZW50UmVmKTt0IGluc3RhbmNlb2YgQmFzZVN0cmVhbT9lPXQuZ2V0Qnl0ZXMoKTp3YXJuKCJFbWJlZGRlZCBmaWxlIHNwZWNpZmljYXRpb24gcG9pbnRzIHRvIG5vbi1leGlzdGluZy9pbnZhbGlkIGNvbnRlbnQiKX1lbHNlIHdhcm4oIkVtYmVkZGVkIGZpbGUgc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBoYXZlIGFueSBjb250ZW50Iik7cmV0dXJuIGV9Z2V0IGRlc2NyaXB0aW9uKCl7bGV0IGU9IiI7Y29uc3QgdD10aGlzLnJvb3Q/LmdldCgiRGVzYyIpO3QmJiJzdHJpbmciPT10eXBlb2YgdCYmKGU9c3RyaW5nVG9QREZTdHJpbmcodCkpO3JldHVybiBzaGFkb3codGhpcywiZGVzY3JpcHRpb24iLGUpfWdldCBzZXJpYWxpemFibGUoKXtyZXR1cm57cmF3RmlsZW5hbWU6dGhpcy5maWxlbmFtZSxmaWxlbmFtZTooZT10aGlzLmZpbGVuYW1lLGUuc3Vic3RyaW5nKGUubGFzdEluZGV4T2YoIi8iKSsxKSksY29udGVudDp0aGlzLmNvbnRlbnQsZGVzY3JpcHRpb246dGhpcy5kZXNjcmlwdGlvbn07dmFyIGV9fWNvbnN0IERyPTAsRnI9LTIsU3I9LTMsa3I9LTQsUnI9LTUsTnI9LTYsR3I9LTk7ZnVuY3Rpb24gaXNXaGl0ZXNwYWNlKGUsdCl7Y29uc3QgaT1lW3RdO3JldHVybiIgIj09PWl8fCJcbiI9PT1pfHwiXHIiPT09aXx8Ilx0Ij09PWl9Y2xhc3MgWE1MUGFyc2VyQmFzZXtfcmVzb2x2ZUVudGl0aWVzKGUpe3JldHVybiBlLnJlcGxhY2VBbGwoLyYoW147XSspOy9nLCgoZSx0KT0+e2lmKCIjeCI9PT10LnN1YnN0cmluZygwLDIpKXJldHVybiBTdHJpbmcuZnJvbUNvZGVQb2ludChwYXJzZUludCh0LnN1YnN0cmluZygyKSwxNikpO2lmKCIjIj09PXQuc3Vic3RyaW5nKDAsMSkpcmV0dXJuIFN0cmluZy5mcm9tQ29kZVBvaW50KHBhcnNlSW50KHQuc3Vic3RyaW5nKDEpLDEwKSk7c3dpdGNoKHQpe2Nhc2UibHQiOnJldHVybiI8IjtjYXNlImd0IjpyZXR1cm4iPiI7Y2FzZSJhbXAiOnJldHVybiImIjtjYXNlInF1b3QiOnJldHVybiciJztjYXNlImFwb3MiOnJldHVybiInIn1yZXR1cm4gdGhpcy5vblJlc29sdmVFbnRpdHkodCl9KSl9X3BhcnNlQ29udGVudChlLHQpe2NvbnN0IGk9W107bGV0IGE9dDtmdW5jdGlvbiBza2lwV3MoKXtmb3IoO2E8ZS5sZW5ndGgmJmlzV2hpdGVzcGFjZShlLGEpOykrK2F9Zm9yKDthPGUubGVuZ3RoJiYhaXNXaGl0ZXNwYWNlKGUsYSkmJiI+IiE9PWVbYV0mJiIvIiE9PWVbYV07KSsrYTtjb25zdCByPWUuc3Vic3RyaW5nKHQsYSk7c2tpcFdzKCk7Zm9yKDthPGUubGVuZ3RoJiYiPiIhPT1lW2FdJiYiLyIhPT1lW2FdJiYiPyIhPT1lW2FdOyl7c2tpcFdzKCk7bGV0IHQ9IiIscj0iIjtmb3IoO2E8ZS5sZW5ndGgmJiFpc1doaXRlc3BhY2UoZSxhKSYmIj0iIT09ZVthXTspe3QrPWVbYV07KythfXNraXBXcygpO2lmKCI9IiE9PWVbYV0pcmV0dXJuIG51bGw7KythO3NraXBXcygpO2NvbnN0IHM9ZVthXTtpZignIichPT1zJiYiJyIhPT1zKXJldHVybiBudWxsO2NvbnN0IG49ZS5pbmRleE9mKHMsKythKTtpZihuPDApcmV0dXJuIG51bGw7cj1lLnN1YnN0cmluZyhhLG4pO2kucHVzaCh7bmFtZTp0LHZhbHVlOnRoaXMuX3Jlc29sdmVFbnRpdGllcyhyKX0pO2E9bisxO3NraXBXcygpfXJldHVybntuYW1lOnIsYXR0cmlidXRlczppLHBhcnNlZDphLXR9fV9wYXJzZVByb2Nlc3NpbmdJbnN0cnVjdGlvbihlLHQpe2xldCBpPXQ7Zm9yKDtpPGUubGVuZ3RoJiYhaXNXaGl0ZXNwYWNlKGUsaSkmJiI+IiE9PWVbaV0mJiI/IiE9PWVbaV0mJiIvIiE9PWVbaV07KSsraTtjb25zdCBhPWUuc3Vic3RyaW5nKHQsaSk7IWZ1bmN0aW9uIHNraXBXcygpe2Zvcig7aTxlLmxlbmd0aCYmaXNXaGl0ZXNwYWNlKGUsaSk7KSsraX0oKTtjb25zdCByPWk7Zm9yKDtpPGUubGVuZ3RoJiYoIj8iIT09ZVtpXXx8Ij4iIT09ZVtpKzFdKTspKytpO3JldHVybntuYW1lOmEsdmFsdWU6ZS5zdWJzdHJpbmcocixpKSxwYXJzZWQ6aS10fX1wYXJzZVhtbChlKXtsZXQgdD0wO2Zvcig7dDxlLmxlbmd0aDspe2xldCBpPXQ7aWYoIjwiPT09ZVt0XSl7KytpO2xldCB0O3N3aXRjaChlW2ldKXtjYXNlIi8iOisraTt0PWUuaW5kZXhPZigiPiIsaSk7aWYodDwwKXt0aGlzLm9uRXJyb3IoR3IpO3JldHVybn10aGlzLm9uRW5kRWxlbWVudChlLnN1YnN0cmluZyhpLHQpKTtpPXQrMTticmVhaztjYXNlIj8iOisraTtjb25zdCBhPXRoaXMuX3BhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9uKGUsaSk7aWYoIj8+IiE9PWUuc3Vic3RyaW5nKGkrYS5wYXJzZWQsaSthLnBhcnNlZCsyKSl7dGhpcy5vbkVycm9yKFNyKTtyZXR1cm59dGhpcy5vblBpKGEubmFtZSxhLnZhbHVlKTtpKz1hLnBhcnNlZCsyO2JyZWFrO2Nhc2UiISI6aWYoIi0tIj09PWUuc3Vic3RyaW5nKGkrMSxpKzMpKXt0PWUuaW5kZXhPZigiLS1ceDNlIixpKzMpO2lmKHQ8MCl7dGhpcy5vbkVycm9yKFJyKTtyZXR1cm59dGhpcy5vbkNvbW1lbnQoZS5zdWJzdHJpbmcoaSszLHQpKTtpPXQrM31lbHNlIGlmKCJbQ0RBVEFbIj09PWUuc3Vic3RyaW5nKGkrMSxpKzgpKXt0PWUuaW5kZXhPZigiXV0+IixpKzgpO2lmKHQ8MCl7dGhpcy5vbkVycm9yKEZyKTtyZXR1cm59dGhpcy5vbkNkYXRhKGUuc3Vic3RyaW5nKGkrOCx0KSk7aT10KzN9ZWxzZXtpZigiRE9DVFlQRSIhPT1lLnN1YnN0cmluZyhpKzEsaSs4KSl7dGhpcy5vbkVycm9yKE5yKTtyZXR1cm59e2NvbnN0IGE9ZS5pbmRleE9mKCJbIixpKzgpO2xldCByPSExO3Q9ZS5pbmRleE9mKCI+IixpKzgpO2lmKHQ8MCl7dGhpcy5vbkVycm9yKGtyKTtyZXR1cm59aWYoYT4wJiZ0PmEpe3Q9ZS5pbmRleE9mKCJdPiIsaSs4KTtpZih0PDApe3RoaXMub25FcnJvcihrcik7cmV0dXJufXI9ITB9Y29uc3Qgcz1lLnN1YnN0cmluZyhpKzgsdCsocj8xOjApKTt0aGlzLm9uRG9jdHlwZShzKTtpPXQrKHI/MjoxKX19YnJlYWs7ZGVmYXVsdDpjb25zdCByPXRoaXMuX3BhcnNlQ29udGVudChlLGkpO2lmKG51bGw9PT1yKXt0aGlzLm9uRXJyb3IoTnIpO3JldHVybn1sZXQgcz0hMTtpZigiLz4iPT09ZS5zdWJzdHJpbmcoaStyLnBhcnNlZCxpK3IucGFyc2VkKzIpKXM9ITA7ZWxzZSBpZigiPiIhPT1lLnN1YnN0cmluZyhpK3IucGFyc2VkLGkrci5wYXJzZWQrMSkpe3RoaXMub25FcnJvcihHcik7cmV0dXJufXRoaXMub25CZWdpbkVsZW1lbnQoci5uYW1lLHIuYXR0cmlidXRlcyxzKTtpKz1yLnBhcnNlZCsocz8yOjEpfX1lbHNle2Zvcig7aTxlLmxlbmd0aCYmIjwiIT09ZVtpXTspaSsrO2NvbnN0IGE9ZS5zdWJzdHJpbmcodCxpKTt0aGlzLm9uVGV4dCh0aGlzLl9yZXNvbHZlRW50aXRpZXMoYSkpfXQ9aX19b25SZXNvbHZlRW50aXR5KGUpe3JldHVybmAmJHtlfTtgfW9uUGkoZSx0KXt9b25Db21tZW50KGUpe31vbkNkYXRhKGUpe31vbkRvY3R5cGUoZSl7fW9uVGV4dChlKXt9b25CZWdpbkVsZW1lbnQoZSx0LGkpe31vbkVuZEVsZW1lbnQoZSl7fW9uRXJyb3IoZSl7fX1jbGFzcyBTaW1wbGVET01Ob2Rle2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5ub2RlTmFtZT1lO3RoaXMubm9kZVZhbHVlPXQ7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsInBhcmVudE5vZGUiLHt2YWx1ZTpudWxsLHdyaXRhYmxlOiEwfSl9Z2V0IGZpcnN0Q2hpbGQoKXtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzPy5bMF19Z2V0IG5leHRTaWJsaW5nKCl7Y29uc3QgZT10aGlzLnBhcmVudE5vZGUuY2hpbGROb2RlcztpZighZSlyZXR1cm47Y29uc3QgdD1lLmluZGV4T2YodGhpcyk7cmV0dXJuLTEhPT10P2VbdCsxXTp2b2lkIDB9Z2V0IHRleHRDb250ZW50KCl7cmV0dXJuIHRoaXMuY2hpbGROb2Rlcz90aGlzLmNoaWxkTm9kZXMubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZS50ZXh0Q29udGVudH0pKS5qb2luKCIiKTp0aGlzLm5vZGVWYWx1ZXx8IiJ9Z2V0IGNoaWxkcmVuKCl7cmV0dXJuIHRoaXMuY2hpbGROb2Rlc3x8W119aGFzQ2hpbGROb2Rlcygpe3JldHVybiB0aGlzLmNoaWxkTm9kZXM/Lmxlbmd0aD4wfXNlYXJjaE5vZGUoZSx0KXtpZih0Pj1lLmxlbmd0aClyZXR1cm4gdGhpcztjb25zdCBpPWVbdF07aWYoaS5uYW1lLnN0YXJ0c1dpdGgoIiMiKSYmdDxlLmxlbmd0aC0xKXJldHVybiB0aGlzLnNlYXJjaE5vZGUoZSx0KzEpO2NvbnN0IGE9W107bGV0IHI9dGhpcztmb3IoOzspe2lmKGkubmFtZT09PXIubm9kZU5hbWUpe2lmKDAhPT1pLnBvcyl7aWYoMD09PWEubGVuZ3RoKXJldHVybiBudWxsO3tjb25zdFtzXT1hLnBvcCgpO2xldCBuPTA7Zm9yKGNvbnN0IGEgb2Ygcy5jaGlsZE5vZGVzKWlmKGkubmFtZT09PWEubm9kZU5hbWUpe2lmKG49PT1pLnBvcylyZXR1cm4gYS5zZWFyY2hOb2RlKGUsdCsxKTtuKyt9cmV0dXJuIHIuc2VhcmNoTm9kZShlLHQrMSl9fXtjb25zdCBpPXIuc2VhcmNoTm9kZShlLHQrMSk7aWYobnVsbCE9PWkpcmV0dXJuIGl9fWlmKHIuY2hpbGROb2Rlcz8ubGVuZ3RoPjApe2EucHVzaChbciwwXSk7cj1yLmNoaWxkTm9kZXNbMF19ZWxzZXtpZigwPT09YS5sZW5ndGgpcmV0dXJuIG51bGw7Zm9yKDswIT09YS5sZW5ndGg7KXtjb25zdFtlLHRdPWEucG9wKCksaT10KzE7aWYoaTxlLmNoaWxkTm9kZXMubGVuZ3RoKXthLnB1c2goW2UsaV0pO3I9ZS5jaGlsZE5vZGVzW2ldO2JyZWFrfX1pZigwPT09YS5sZW5ndGgpcmV0dXJuIG51bGx9fX1kdW1wKGUpe2lmKCIjdGV4dCIhPT10aGlzLm5vZGVOYW1lKXtlLnB1c2goYDwke3RoaXMubm9kZU5hbWV9YCk7aWYodGhpcy5hdHRyaWJ1dGVzKWZvcihjb25zdCB0IG9mIHRoaXMuYXR0cmlidXRlcyllLnB1c2goYCAke3QubmFtZX09IiR7ZW5jb2RlVG9YbWxTdHJpbmcodC52YWx1ZSl9ImApO2lmKHRoaXMuaGFzQ2hpbGROb2RlcygpKXtlLnB1c2goIj4iKTtmb3IoY29uc3QgdCBvZiB0aGlzLmNoaWxkTm9kZXMpdC5kdW1wKGUpO2UucHVzaChgPC8ke3RoaXMubm9kZU5hbWV9PmApfWVsc2UgdGhpcy5ub2RlVmFsdWU/ZS5wdXNoKGA+JHtlbmNvZGVUb1htbFN0cmluZyh0aGlzLm5vZGVWYWx1ZSl9PC8ke3RoaXMubm9kZU5hbWV9PmApOmUucHVzaCgiLz4iKX1lbHNlIGUucHVzaChlbmNvZGVUb1htbFN0cmluZyh0aGlzLm5vZGVWYWx1ZSkpfX1jbGFzcyBTaW1wbGVYTUxQYXJzZXIgZXh0ZW5kcyBYTUxQYXJzZXJCYXNle2NvbnN0cnVjdG9yKHtoYXNBdHRyaWJ1dGVzOmU9ITEsbG93ZXJDYXNlTmFtZTp0PSExfSl7c3VwZXIoKTt0aGlzLl9jdXJyZW50RnJhZ21lbnQ9bnVsbDt0aGlzLl9zdGFjaz1udWxsO3RoaXMuX2Vycm9yQ29kZT1Ecjt0aGlzLl9oYXNBdHRyaWJ1dGVzPWU7dGhpcy5fbG93ZXJDYXNlTmFtZT10fXBhcnNlRnJvbVN0cmluZyhlKXt0aGlzLl9jdXJyZW50RnJhZ21lbnQ9W107dGhpcy5fc3RhY2s9W107dGhpcy5fZXJyb3JDb2RlPURyO3RoaXMucGFyc2VYbWwoZSk7aWYodGhpcy5fZXJyb3JDb2RlIT09RHIpcmV0dXJuO2NvbnN0W3RdPXRoaXMuX2N1cnJlbnRGcmFnbWVudDtyZXR1cm4gdD97ZG9jdW1lbnRFbGVtZW50OnR9OnZvaWQgMH1vblRleHQoZSl7aWYoZnVuY3Rpb24gaXNXaGl0ZXNwYWNlU3RyaW5nKGUpe2ZvcihsZXQgdD0wLGk9ZS5sZW5ndGg7dDxpO3QrKylpZighaXNXaGl0ZXNwYWNlKGUsdCkpcmV0dXJuITE7cmV0dXJuITB9KGUpKXJldHVybjtjb25zdCB0PW5ldyBTaW1wbGVET01Ob2RlKCIjdGV4dCIsZSk7dGhpcy5fY3VycmVudEZyYWdtZW50LnB1c2godCl9b25DZGF0YShlKXtjb25zdCB0PW5ldyBTaW1wbGVET01Ob2RlKCIjdGV4dCIsZSk7dGhpcy5fY3VycmVudEZyYWdtZW50LnB1c2godCl9b25CZWdpbkVsZW1lbnQoZSx0LGkpe3RoaXMuX2xvd2VyQ2FzZU5hbWUmJihlPWUudG9Mb3dlckNhc2UoKSk7Y29uc3QgYT1uZXcgU2ltcGxlRE9NTm9kZShlKTthLmNoaWxkTm9kZXM9W107dGhpcy5faGFzQXR0cmlidXRlcyYmKGEuYXR0cmlidXRlcz10KTt0aGlzLl9jdXJyZW50RnJhZ21lbnQucHVzaChhKTtpZighaSl7dGhpcy5fc3RhY2sucHVzaCh0aGlzLl9jdXJyZW50RnJhZ21lbnQpO3RoaXMuX2N1cnJlbnRGcmFnbWVudD1hLmNoaWxkTm9kZXN9fW9uRW5kRWxlbWVudChlKXt0aGlzLl9jdXJyZW50RnJhZ21lbnQ9dGhpcy5fc3RhY2sucG9wKCl8fFtdO2NvbnN0IHQ9dGhpcy5fY3VycmVudEZyYWdtZW50LmF0KC0xKTtpZighdClyZXR1cm4gbnVsbDtmb3IoY29uc3QgZSBvZiB0LmNoaWxkTm9kZXMpZS5wYXJlbnROb2RlPXQ7cmV0dXJuIHR9b25FcnJvcihlKXt0aGlzLl9lcnJvckNvZGU9ZX19Y2xhc3MgTWV0YWRhdGFQYXJzZXJ7Y29uc3RydWN0b3IoZSl7ZT10aGlzLl9yZXBhaXIoZSk7Y29uc3QgdD1uZXcgU2ltcGxlWE1MUGFyc2VyKHtsb3dlckNhc2VOYW1lOiEwfSkucGFyc2VGcm9tU3RyaW5nKGUpO3RoaXMuX21ldGFkYXRhTWFwPW5ldyBNYXA7dGhpcy5fZGF0YT1lO3QmJnRoaXMuX3BhcnNlKHQpfV9yZXBhaXIoZSl7cmV0dXJuIGUucmVwbGFjZSgvXltePF0rLywiIikucmVwbGFjZUFsbCgvPlxcMzc2XFwzNzcoW148XSspL2csKGZ1bmN0aW9uKGUsdCl7Y29uc3QgaT10LnJlcGxhY2VBbGwoL1xcKFswLTNdKShbMC03XSkoWzAtN10pL2csKGZ1bmN0aW9uKGUsdCxpLGEpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKDY0KnQrOCppKzEqYSl9KSkucmVwbGFjZUFsbCgvJihhbXB8YXBvc3xndHxsdHxxdW90KTsvZywoZnVuY3Rpb24oZSx0KXtzd2l0Y2godCl7Y2FzZSJhbXAiOnJldHVybiImIjtjYXNlImFwb3MiOnJldHVybiInIjtjYXNlImd0IjpyZXR1cm4iPiI7Y2FzZSJsdCI6cmV0dXJuIjwiO2Nhc2UicXVvdCI6cmV0dXJuJyInfXRocm93IG5ldyBFcnJvcihgX3JlcGFpcjogJHt0fSBpc24ndCBkZWZpbmVkLmApfSkpLGE9WyI+Il07Zm9yKGxldCBlPTAsdD1pLmxlbmd0aDtlPHQ7ZSs9Mil7Y29uc3QgdD0yNTYqaS5jaGFyQ29kZUF0KGUpK2kuY2hhckNvZGVBdChlKzEpO3Q+PTMyJiZ0PDEyNyYmNjAhPT10JiY2MiE9PXQmJjM4IT09dD9hLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSh0KSk6YS5wdXNoKCImI3giKyg2NTUzNit0KS50b1N0cmluZygxNikuc3Vic3RyaW5nKDEpKyI7Iil9cmV0dXJuIGEuam9pbigiIil9KSl9X2dldFNlcXVlbmNlKGUpe2NvbnN0IHQ9ZS5ub2RlTmFtZTtyZXR1cm4icmRmOmJhZyIhPT10JiYicmRmOnNlcSIhPT10JiYicmRmOmFsdCIhPT10P251bGw6ZS5jaGlsZE5vZGVzLmZpbHRlcigoZT0+InJkZjpsaSI9PT1lLm5vZGVOYW1lKSl9X3BhcnNlQXJyYXkoZSl7aWYoIWUuaGFzQ2hpbGROb2RlcygpKXJldHVybjtjb25zdFt0XT1lLmNoaWxkTm9kZXMsaT10aGlzLl9nZXRTZXF1ZW5jZSh0KXx8W107dGhpcy5fbWV0YWRhdGFNYXAuc2V0KGUubm9kZU5hbWUsaS5tYXAoKGU9PmUudGV4dENvbnRlbnQudHJpbSgpKSkpfV9wYXJzZShlKXtsZXQgdD1lLmRvY3VtZW50RWxlbWVudDtpZigicmRmOnJkZiIhPT10Lm5vZGVOYW1lKXt0PXQuZmlyc3RDaGlsZDtmb3IoO3QmJiJyZGY6cmRmIiE9PXQubm9kZU5hbWU7KXQ9dC5uZXh0U2libGluZ31pZih0JiYicmRmOnJkZiI9PT10Lm5vZGVOYW1lJiZ0Lmhhc0NoaWxkTm9kZXMoKSlmb3IoY29uc3QgZSBvZiB0LmNoaWxkTm9kZXMpaWYoInJkZjpkZXNjcmlwdGlvbiI9PT1lLm5vZGVOYW1lKWZvcihjb25zdCB0IG9mIGUuY2hpbGROb2Rlcyl7Y29uc3QgZT10Lm5vZGVOYW1lO3N3aXRjaChlKXtjYXNlIiN0ZXh0Ijpjb250aW51ZTtjYXNlImRjOmNyZWF0b3IiOmNhc2UiZGM6c3ViamVjdCI6dGhpcy5fcGFyc2VBcnJheSh0KTtjb250aW51ZX10aGlzLl9tZXRhZGF0YU1hcC5zZXQoZSx0LnRleHRDb250ZW50LnRyaW0oKSl9fWdldCBzZXJpYWxpemFibGUoKXtyZXR1cm57cGFyc2VkRGF0YTp0aGlzLl9tZXRhZGF0YU1hcCxyYXdEYXRhOnRoaXMuX2RhdGF9fX1jb25zdCBNcj0xLFVyPTIseHI9MyxMcj00LEhyPTU7Y2xhc3MgU3RydWN0VHJlZVJvb3R7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmRpY3Q9ZTt0aGlzLnJlZj10IGluc3RhbmNlb2YgUmVmP3Q6bnVsbDt0aGlzLnJvbGVNYXA9bmV3IE1hcDt0aGlzLnN0cnVjdFBhcmVudElkcz1udWxsfWluaXQoKXt0aGlzLnJlYWRSb2xlTWFwKCl9I3goZSx0LGkpe2lmKCEoZSBpbnN0YW5jZW9mIFJlZil8fHQ8MClyZXR1cm47dGhpcy5zdHJ1Y3RQYXJlbnRJZHN8fD1uZXcgUmVmU2V0Q2FjaGU7bGV0IGE9dGhpcy5zdHJ1Y3RQYXJlbnRJZHMuZ2V0KGUpO2lmKCFhKXthPVtdO3RoaXMuc3RydWN0UGFyZW50SWRzLnB1dChlLGEpfWEucHVzaChbdCxpXSl9YWRkQW5ub3RhdGlvbklkVG9QYWdlKGUsdCl7dGhpcy4jeChlLHQsTHIpfXJlYWRSb2xlTWFwKCl7Y29uc3QgZT10aGlzLmRpY3QuZ2V0KCJSb2xlTWFwIik7aWYoZSBpbnN0YW5jZW9mIERpY3QpZm9yKGNvbnN0W3QsaV1vZiBlKWkgaW5zdGFuY2VvZiBOYW1lJiZ0aGlzLnJvbGVNYXAuc2V0KHQsaS5uYW1lKX1zdGF0aWMgYXN5bmMgY2FuQ3JlYXRlU3RydWN0dXJlVHJlZSh7Y2F0YWxvZ1JlZjplLHBkZk1hbmFnZXI6dCxuZXdBbm5vdGF0aW9uc0J5UGFnZTppfSl7aWYoIShlIGluc3RhbmNlb2YgUmVmKSl7d2FybigiQ2Fubm90IHNhdmUgdGhlIHN0cnVjdCB0cmVlOiBubyBjYXRhbG9nIHJlZmVyZW5jZS4iKTtyZXR1cm4hMX1sZXQgYT0wLHI9ITA7Zm9yKGNvbnN0W2Usc11vZiBpKXtjb25zdHtyZWY6aX09YXdhaXQgdC5nZXRQYWdlKGUpO2lmKCEoaSBpbnN0YW5jZW9mIFJlZikpe3dhcm4oYENhbm5vdCBzYXZlIHRoZSBzdHJ1Y3QgdHJlZTogcGFnZSAke2V9IGhhcyBubyByZWYuYCk7cj0hMDticmVha31mb3IoY29uc3QgZSBvZiBzKWlmKGUuYWNjZXNzaWJpbGl0eURhdGE/LnR5cGUpe2UucGFyZW50VHJlZUlkPWErKztyPSExfX1pZihyKXtmb3IoY29uc3QgZSBvZiBpLnZhbHVlcygpKWZvcihjb25zdCB0IG9mIGUpZGVsZXRlIHQucGFyZW50VHJlZUlkO3JldHVybiExfXJldHVybiEwfXN0YXRpYyBhc3luYyBjcmVhdGVTdHJ1Y3R1cmVUcmVlKHtuZXdBbm5vdGF0aW9uc0J5UGFnZTplLHhyZWY6dCxjYXRhbG9nUmVmOmkscGRmTWFuYWdlcjphLGNoYW5nZXM6cn0pe2NvbnN0IHM9YS5jYXRhbG9nLmNsb25lRGljdCgpLG49bmV3IFJlZlNldENhY2hlO24ucHV0KGkscyk7Y29uc3Qgbz10LmdldE5ld1RlbXBvcmFyeVJlZigpO3Muc2V0KCJTdHJ1Y3RUcmVlUm9vdCIsbyk7Y29uc3QgZz1uZXcgRGljdCh0KTtnLnNldCgiVHlwZSIsTmFtZS5nZXQoIlN0cnVjdFRyZWVSb290IikpO2NvbnN0IGM9dC5nZXROZXdUZW1wb3JhcnlSZWYoKTtnLnNldCgiUGFyZW50VHJlZSIsYyk7Y29uc3QgbD1bXTtnLnNldCgiSyIsbCk7bi5wdXQobyxnKTtjb25zdCBoPW5ldyBEaWN0KHQpLEM9W107aC5zZXQoIk51bXMiLEMpO2NvbnN0IFE9YXdhaXQgdGhpcy4jTCh7bmV3QW5ub3RhdGlvbnNCeVBhZ2U6ZSxzdHJ1Y3RUcmVlUm9vdFJlZjpvLHN0cnVjdFRyZWVSb290Om51bGwsa2lkczpsLG51bXM6Qyx4cmVmOnQscGRmTWFuYWdlcjphLGNoYW5nZXM6cixjYWNoZTpufSk7Zy5zZXQoIlBhcmVudFRyZWVOZXh0S2V5IixRKTtuLnB1dChjLGgpO2Zvcihjb25zdFtlLHRdb2Ygbi5pdGVtcygpKXIucHV0KGUse2RhdGE6dH0pfWFzeW5jIGNhblVwZGF0ZVN0cnVjdFRyZWUoe3BkZk1hbmFnZXI6ZSx4cmVmOnQsbmV3QW5ub3RhdGlvbnNCeVBhZ2U6aX0pe2lmKCF0aGlzLnJlZil7d2FybigiQ2Fubm90IHVwZGF0ZSB0aGUgc3RydWN0IHRyZWU6IG5vIHJvb3QgcmVmZXJlbmNlLiIpO3JldHVybiExfWxldCBhPXRoaXMuZGljdC5nZXQoIlBhcmVudFRyZWVOZXh0S2V5Iik7aWYoIU51bWJlci5pc0ludGVnZXIoYSl8fGE8MCl7d2FybigiQ2Fubm90IHVwZGF0ZSB0aGUgc3RydWN0IHRyZWU6IGludmFsaWQgbmV4dCBrZXkuIik7cmV0dXJuITF9Y29uc3Qgcj10aGlzLmRpY3QuZ2V0KCJQYXJlbnRUcmVlIik7aWYoIShyIGluc3RhbmNlb2YgRGljdCkpe3dhcm4oIkNhbm5vdCB1cGRhdGUgdGhlIHN0cnVjdCB0cmVlOiBQYXJlbnRUcmVlIGlzbid0IGEgZGljdC4iKTtyZXR1cm4hMX1jb25zdCBzPXIuZ2V0KCJOdW1zIik7aWYoIUFycmF5LmlzQXJyYXkocykpe3dhcm4oIkNhbm5vdCB1cGRhdGUgdGhlIHN0cnVjdCB0cmVlOiBudW1zIGlzbid0IGFuIGFycmF5LiIpO3JldHVybiExfWNvbnN0IG49bmV3IE51bWJlclRyZWUocix0KTtmb3IoY29uc3QgdCBvZiBpLmtleXMoKSl7Y29uc3R7cGFnZURpY3Q6aX09YXdhaXQgZS5nZXRQYWdlKHQpO2lmKCFpLmhhcygiU3RydWN0UGFyZW50cyIpKWNvbnRpbnVlO2NvbnN0IGE9aS5nZXQoIlN0cnVjdFBhcmVudHMiKTtpZighTnVtYmVyLmlzSW50ZWdlcihhKXx8IUFycmF5LmlzQXJyYXkobi5nZXQoYSkpKXt3YXJuKGBDYW5ub3Qgc2F2ZSB0aGUgc3RydWN0IHRyZWU6IHBhZ2UgJHt0fSBoYXMgYSB3cm9uZyBpZC5gKTtyZXR1cm4hMX19bGV0IG89ITA7Zm9yKGNvbnN0W3Qscl1vZiBpKXtjb25zdHtwYWdlRGljdDppfT1hd2FpdCBlLmdldFBhZ2UodCk7U3RydWN0VHJlZVJvb3QuI0goe2VsZW1lbnRzOnIseHJlZjp0aGlzLmRpY3QueHJlZixwYWdlRGljdDppLG51bWJlclRyZWU6bn0pO2Zvcihjb25zdCBlIG9mIHIpaWYoZS5hY2Nlc3NpYmlsaXR5RGF0YT8udHlwZSl7ZS5hY2Nlc3NpYmlsaXR5RGF0YS5zdHJ1Y3RQYXJlbnQ+PTB8fChlLnBhcmVudFRyZWVJZD1hKyspO289ITF9fWlmKG8pe2Zvcihjb25zdCBlIG9mIGkudmFsdWVzKCkpZm9yKGNvbnN0IHQgb2YgZSl7ZGVsZXRlIHQucGFyZW50VHJlZUlkO2RlbGV0ZSB0LnN0cnVjdFRyZWVQYXJlbnR9cmV0dXJuITF9cmV0dXJuITB9YXN5bmMgdXBkYXRlU3RydWN0dXJlVHJlZSh7bmV3QW5ub3RhdGlvbnNCeVBhZ2U6ZSxwZGZNYW5hZ2VyOnQsY2hhbmdlczppfSl7Y29uc3QgYT10aGlzLmRpY3QueHJlZixyPXRoaXMuZGljdC5jbG9uZSgpLHM9dGhpcy5yZWYsbj1uZXcgUmVmU2V0Q2FjaGU7bi5wdXQocyxyKTtsZXQgbyxnPXIuZ2V0UmF3KCJQYXJlbnRUcmVlIik7aWYoZyBpbnN0YW5jZW9mIFJlZilvPWEuZmV0Y2goZyk7ZWxzZXtvPWc7Zz1hLmdldE5ld1RlbXBvcmFyeVJlZigpO3Iuc2V0KCJQYXJlbnRUcmVlIixnKX1vPW8uY2xvbmUoKTtuLnB1dChnLG8pO2xldCBjPW8uZ2V0UmF3KCJOdW1zIiksbD1udWxsO2lmKGMgaW5zdGFuY2VvZiBSZWYpe2w9YztjPWEuZmV0Y2gobCl9Yz1jLnNsaWNlKCk7bHx8by5zZXQoIk51bXMiLGMpO2NvbnN0IGg9YXdhaXQgU3RydWN0VHJlZVJvb3QuI0woe25ld0Fubm90YXRpb25zQnlQYWdlOmUsc3RydWN0VHJlZVJvb3RSZWY6cyxzdHJ1Y3RUcmVlUm9vdDp0aGlzLGtpZHM6bnVsbCxudW1zOmMseHJlZjphLHBkZk1hbmFnZXI6dCxjaGFuZ2VzOmksY2FjaGU6bn0pO2lmKC0xIT09aCl7ci5zZXQoIlBhcmVudFRyZWVOZXh0S2V5IixoKTtsJiZuLnB1dChsLGMpO2Zvcihjb25zdFtlLHRdb2Ygbi5pdGVtcygpKWkucHV0KGUse2RhdGE6dH0pfX1zdGF0aWMgYXN5bmMjTCh7bmV3QW5ub3RhdGlvbnNCeVBhZ2U6ZSxzdHJ1Y3RUcmVlUm9vdFJlZjp0LHN0cnVjdFRyZWVSb290Omksa2lkczphLG51bXM6cix4cmVmOnMscGRmTWFuYWdlcjpuLGNoYW5nZXM6byxjYWNoZTpnfSl7Y29uc3QgYz1OYW1lLmdldCgiT0JKUiIpO2xldCBsLGg9LTE7Zm9yKGNvbnN0W0MsUV1vZiBlKXtjb25zdCBlPWF3YWl0IG4uZ2V0UGFnZShDKSx7cmVmOkV9PWUsdT1FIGluc3RhbmNlb2YgUmVmO2Zvcihjb25zdHthY2Nlc3NpYmlsaXR5RGF0YTpuLHJlZjpkLHBhcmVudFRyZWVJZDpmLHN0cnVjdFRyZWVQYXJlbnQ6cH1vZiBRKXtpZighbj8udHlwZSljb250aW51ZTtjb25zdHtzdHJ1Y3RQYXJlbnQ6UX09bjtpZihpJiZOdW1iZXIuaXNJbnRlZ2VyKFEpJiZRPj0wKXtsZXQgdD0obHx8PW5ldyBNYXApLmdldChDKTtpZih2b2lkIDA9PT10KXt0PW5ldyBTdHJ1Y3RUcmVlUGFnZShpLGUucGFnZURpY3QpLmNvbGxlY3RPYmplY3RzKEUpO2wuc2V0KEMsdCl9Y29uc3QgYT10Py5nZXQoUSk7aWYoYSl7Y29uc3QgZT1zLmZldGNoKGEpLmNsb25lKCk7U3RydWN0VHJlZVJvb3QuI0ooZSxuKTtvLnB1dChhLHtkYXRhOmV9KTtjb250aW51ZX19aD1NYXRoLm1heChoLGYpO2NvbnN0IG09cy5nZXROZXdUZW1wb3JhcnlSZWYoKSx5PW5ldyBEaWN0KHMpO1N0cnVjdFRyZWVSb290LiNKKHksbik7YXdhaXQgdGhpcy4jdih7c3RydWN0VHJlZVBhcmVudDpwLHRhZ0RpY3Q6eSxuZXdUYWdSZWY6bSxzdHJ1Y3RUcmVlUm9vdFJlZjp0LGZhbGxiYWNrS2lkczphLHhyZWY6cyxjYWNoZTpnfSk7Y29uc3Qgdz1uZXcgRGljdChzKTt5LnNldCgiSyIsdyk7dy5zZXQoIlR5cGUiLGMpO3UmJncuc2V0KCJQZyIsRSk7dy5zZXQoIk9iaiIsZCk7Zy5wdXQobSx5KTtyLnB1c2goZixtKX19cmV0dXJuIGgrMX1zdGF0aWMjSihlLHt0eXBlOnQsdGl0bGU6aSxsYW5nOmEsYWx0OnIsZXhwYW5kZWQ6cyxhY3R1YWxUZXh0Om59KXtlLnNldCgiUyIsTmFtZS5nZXQodCkpO2kmJmUuc2V0KCJUIixzdHJpbmdUb0FzY2lpT3JVVEYxNkJFKGkpKTthJiZlLnNldCgiTGFuZyIsc3RyaW5nVG9Bc2NpaU9yVVRGMTZCRShhKSk7ciYmZS5zZXQoIkFsdCIsc3RyaW5nVG9Bc2NpaU9yVVRGMTZCRShyKSk7cyYmZS5zZXQoIkUiLHN0cmluZ1RvQXNjaWlPclVURjE2QkUocykpO24mJmUuc2V0KCJBY3R1YWxUZXh0IixzdHJpbmdUb0FzY2lpT3JVVEYxNkJFKG4pKX1zdGF0aWMjSCh7ZWxlbWVudHM6ZSx4cmVmOnQscGFnZURpY3Q6aSxudW1iZXJUcmVlOmF9KXtjb25zdCByPW5ldyBNYXA7Zm9yKGNvbnN0IHQgb2YgZSlpZih0LnN0cnVjdFRyZWVQYXJlbnRJZCl7Y29uc3QgZT1wYXJzZUludCh0LnN0cnVjdFRyZWVQYXJlbnRJZC5zcGxpdCgiX21jIilbMV0sMTApO2xldCBpPXIuZ2V0KGUpO2lmKCFpKXtpPVtdO3Iuc2V0KGUsaSl9aS5wdXNoKHQpfWNvbnN0IHM9aS5nZXQoIlN0cnVjdFBhcmVudHMiKTtpZighTnVtYmVyLmlzSW50ZWdlcihzKSlyZXR1cm47Y29uc3Qgbj1hLmdldChzKSx1cGRhdGVFbGVtZW50PShlLGksYSk9Pntjb25zdCBzPXIuZ2V0KGUpO2lmKHMpe2NvbnN0IGU9aS5nZXRSYXcoIlAiKSxyPXQuZmV0Y2hJZlJlZihlKTtpZihlIGluc3RhbmNlb2YgUmVmJiZyIGluc3RhbmNlb2YgRGljdCl7Y29uc3QgZT17cmVmOmEsZGljdDppfTtmb3IoY29uc3QgdCBvZiBzKXQuc3RydWN0VHJlZVBhcmVudD1lfXJldHVybiEwfXJldHVybiExfTtmb3IoY29uc3QgZSBvZiBuKXtpZighKGUgaW5zdGFuY2VvZiBSZWYpKWNvbnRpbnVlO2NvbnN0IGk9dC5mZXRjaChlKSxhPWkuZ2V0KCJLIik7aWYoTnVtYmVyLmlzSW50ZWdlcihhKSl1cGRhdGVFbGVtZW50KGEsaSxlKTtlbHNlIGlmKEFycmF5LmlzQXJyYXkoYSkpZm9yKGxldCByIG9mIGEpe3I9dC5mZXRjaElmUmVmKHIpO2lmKE51bWJlci5pc0ludGVnZXIocikmJnVwZGF0ZUVsZW1lbnQocixpLGUpKWJyZWFrO2lmKCEociBpbnN0YW5jZW9mIERpY3QpKWNvbnRpbnVlO2lmKCFpc05hbWUoci5nZXQoIlR5cGUiKSwiTUNSIikpYnJlYWs7Y29uc3QgYT1yLmdldCgiTUNJRCIpO2lmKE51bWJlci5pc0ludGVnZXIoYSkmJnVwZGF0ZUVsZW1lbnQoYSxpLGUpKWJyZWFrfX19c3RhdGljIGFzeW5jI3Yoe3N0cnVjdFRyZWVQYXJlbnQ6ZSx0YWdEaWN0OnQsbmV3VGFnUmVmOmksc3RydWN0VHJlZVJvb3RSZWY6YSxmYWxsYmFja0tpZHM6cix4cmVmOnMsY2FjaGU6bn0pe2xldCBvLGc9bnVsbDtpZihlKXsoe3JlZjpnfT1lKTtvPWUuZGljdC5nZXRSYXcoIlAiKXx8YX1lbHNlIG89YTt0LnNldCgiUCIsbyk7Y29uc3QgYz1zLmZldGNoSWZSZWYobyk7aWYoIWMpe3IucHVzaChpKTtyZXR1cm59bGV0IGw9bi5nZXQobyk7aWYoIWwpe2w9Yy5jbG9uZSgpO24ucHV0KG8sbCl9Y29uc3QgaD1sLmdldFJhdygiSyIpO2xldCBDPWggaW5zdGFuY2VvZiBSZWY/bi5nZXQoaCk6bnVsbDtpZighQyl7Qz1zLmZldGNoSWZSZWYoaCk7Qz1BcnJheS5pc0FycmF5KEMpP0Muc2xpY2UoKTpbaF07Y29uc3QgZT1zLmdldE5ld1RlbXBvcmFyeVJlZigpO2wuc2V0KCJLIixlKTtuLnB1dChlLEMpfWNvbnN0IFE9Qy5pbmRleE9mKGcpO0Muc3BsaWNlKFE+PTA/USsxOkMubGVuZ3RoLDAsaSl9fWNsYXNzIFN0cnVjdEVsZW1lbnROb2Rle2NvbnN0cnVjdG9yKGUsdCl7dGhpcy50cmVlPWU7dGhpcy5kaWN0PXQ7dGhpcy5raWRzPVtdO3RoaXMucGFyc2VLaWRzKCl9Z2V0IHJvbGUoKXtjb25zdCBlPXRoaXMuZGljdC5nZXQoIlMiKSx0PWUgaW5zdGFuY2VvZiBOYW1lP2UubmFtZToiIix7cm9vdDppfT10aGlzLnRyZWU7cmV0dXJuIGkucm9sZU1hcC5oYXModCk/aS5yb2xlTWFwLmdldCh0KTp0fXBhcnNlS2lkcygpe2xldCBlPW51bGw7Y29uc3QgdD10aGlzLmRpY3QuZ2V0UmF3KCJQZyIpO3QgaW5zdGFuY2VvZiBSZWYmJihlPXQudG9TdHJpbmcoKSk7Y29uc3QgaT10aGlzLmRpY3QuZ2V0KCJLIik7aWYoQXJyYXkuaXNBcnJheShpKSlmb3IoY29uc3QgdCBvZiBpKXtjb25zdCBpPXRoaXMucGFyc2VLaWQoZSx0KTtpJiZ0aGlzLmtpZHMucHVzaChpKX1lbHNle2NvbnN0IHQ9dGhpcy5wYXJzZUtpZChlLGkpO3QmJnRoaXMua2lkcy5wdXNoKHQpfX1wYXJzZUtpZChlLHQpe2lmKE51bWJlci5pc0ludGVnZXIodCkpcmV0dXJuIHRoaXMudHJlZS5wYWdlRGljdC5vYmpJZCE9PWU/bnVsbDpuZXcgU3RydWN0RWxlbWVudCh7dHlwZTpNcixtY2lkOnQscGFnZU9iaklkOmV9KTtsZXQgaT1udWxsO3QgaW5zdGFuY2VvZiBSZWY/aT10aGlzLmRpY3QueHJlZi5mZXRjaCh0KTp0IGluc3RhbmNlb2YgRGljdCYmKGk9dCk7aWYoIWkpcmV0dXJuIG51bGw7Y29uc3QgYT1pLmdldFJhdygiUGciKTthIGluc3RhbmNlb2YgUmVmJiYoZT1hLnRvU3RyaW5nKCkpO2NvbnN0IHI9aS5nZXQoIlR5cGUiKWluc3RhbmNlb2YgTmFtZT9pLmdldCgiVHlwZSIpLm5hbWU6bnVsbDtpZigiTUNSIj09PXIpe2lmKHRoaXMudHJlZS5wYWdlRGljdC5vYmpJZCE9PWUpcmV0dXJuIG51bGw7Y29uc3QgdD1pLmdldFJhdygiU3RtIik7cmV0dXJuIG5ldyBTdHJ1Y3RFbGVtZW50KHt0eXBlOlVyLHJlZk9iaklkOnQgaW5zdGFuY2VvZiBSZWY/dC50b1N0cmluZygpOm51bGwscGFnZU9iaklkOmUsbWNpZDppLmdldCgiTUNJRCIpfSl9aWYoIk9CSlIiPT09cil7aWYodGhpcy50cmVlLnBhZ2VEaWN0Lm9iaklkIT09ZSlyZXR1cm4gbnVsbDtjb25zdCB0PWkuZ2V0UmF3KCJPYmoiKTtyZXR1cm4gbmV3IFN0cnVjdEVsZW1lbnQoe3R5cGU6eHIscmVmT2JqSWQ6dCBpbnN0YW5jZW9mIFJlZj90LnRvU3RyaW5nKCk6bnVsbCxwYWdlT2JqSWQ6ZX0pfXJldHVybiBuZXcgU3RydWN0RWxlbWVudCh7dHlwZTpIcixkaWN0Oml9KX19Y2xhc3MgU3RydWN0RWxlbWVudHtjb25zdHJ1Y3Rvcih7dHlwZTplLGRpY3Q6dD1udWxsLG1jaWQ6aT1udWxsLHBhZ2VPYmpJZDphPW51bGwscmVmT2JqSWQ6cj1udWxsfSl7dGhpcy50eXBlPWU7dGhpcy5kaWN0PXQ7dGhpcy5tY2lkPWk7dGhpcy5wYWdlT2JqSWQ9YTt0aGlzLnJlZk9iaklkPXI7dGhpcy5wYXJlbnROb2RlPW51bGx9fWNsYXNzIFN0cnVjdFRyZWVQYWdle2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5yb290PWU7dGhpcy5yb290RGljdD1lP2UuZGljdDpudWxsO3RoaXMucGFnZURpY3Q9dDt0aGlzLm5vZGVzPVtdfWNvbGxlY3RPYmplY3RzKGUpe2lmKCEodGhpcy5yb290JiZ0aGlzLnJvb3REaWN0JiZlIGluc3RhbmNlb2YgUmVmKSlyZXR1cm4gbnVsbDtjb25zdCB0PXRoaXMucm9vdERpY3QuZ2V0KCJQYXJlbnRUcmVlIik7aWYoIXQpcmV0dXJuIG51bGw7Y29uc3QgaT10aGlzLnJvb3Quc3RydWN0UGFyZW50SWRzPy5nZXQoZSk7aWYoIWkpcmV0dXJuIG51bGw7Y29uc3QgYT1uZXcgTWFwLHI9bmV3IE51bWJlclRyZWUodCx0aGlzLnJvb3REaWN0LnhyZWYpO2Zvcihjb25zdFtlXW9mIGkpe2NvbnN0IHQ9ci5nZXRSYXcoZSk7dCBpbnN0YW5jZW9mIFJlZiYmYS5zZXQoZSx0KX1yZXR1cm4gYX1wYXJzZShlKXtpZighKHRoaXMucm9vdCYmdGhpcy5yb290RGljdCYmZSBpbnN0YW5jZW9mIFJlZikpcmV0dXJuO2NvbnN0IHQ9dGhpcy5yb290RGljdC5nZXQoIlBhcmVudFRyZWUiKTtpZighdClyZXR1cm47Y29uc3QgaT10aGlzLnBhZ2VEaWN0LmdldCgiU3RydWN0UGFyZW50cyIpLGE9dGhpcy5yb290LnN0cnVjdFBhcmVudElkcz8uZ2V0KGUpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGkpJiYhYSlyZXR1cm47Y29uc3Qgcj1uZXcgTWFwLHM9bmV3IE51bWJlclRyZWUodCx0aGlzLnJvb3REaWN0LnhyZWYpO2lmKE51bWJlci5pc0ludGVnZXIoaSkpe2NvbnN0IGU9cy5nZXQoaSk7aWYoQXJyYXkuaXNBcnJheShlKSlmb3IoY29uc3QgdCBvZiBlKXQgaW5zdGFuY2VvZiBSZWYmJnRoaXMuYWRkTm9kZSh0aGlzLnJvb3REaWN0LnhyZWYuZmV0Y2godCkscil9aWYoYSlmb3IoY29uc3RbZSx0XW9mIGEpe2NvbnN0IGk9cy5nZXQoZSk7aWYoaSl7Y29uc3QgZT10aGlzLmFkZE5vZGUodGhpcy5yb290RGljdC54cmVmLmZldGNoSWZSZWYoaSkscik7MT09PWU/LmtpZHM/Lmxlbmd0aCYmZS5raWRzWzBdLnR5cGU9PT14ciYmKGUua2lkc1swXS50eXBlPXQpfX19YWRkTm9kZShlLHQsaT0wKXtpZihpPjQwKXt3YXJuKCJTdHJ1Y3RUcmVlIE1BWF9ERVBUSCByZWFjaGVkLiIpO3JldHVybiBudWxsfWlmKCEoZSBpbnN0YW5jZW9mIERpY3QpKXJldHVybiBudWxsO2lmKHQuaGFzKGUpKXJldHVybiB0LmdldChlKTtjb25zdCBhPW5ldyBTdHJ1Y3RFbGVtZW50Tm9kZSh0aGlzLGUpO3Quc2V0KGUsYSk7Y29uc3Qgcj1lLmdldCgiUCIpO2lmKCFyfHxpc05hbWUoci5nZXQoIlR5cGUiKSwiU3RydWN0VHJlZVJvb3QiKSl7dGhpcy5hZGRUb3BMZXZlbE5vZGUoZSxhKXx8dC5kZWxldGUoZSk7cmV0dXJuIGF9Y29uc3Qgcz10aGlzLmFkZE5vZGUocix0LGkrMSk7aWYoIXMpcmV0dXJuIGE7bGV0IG49ITE7Zm9yKGNvbnN0IHQgb2Ygcy5raWRzKWlmKHQudHlwZT09PUhyJiZ0LmRpY3Q9PT1lKXt0LnBhcmVudE5vZGU9YTtuPSEwfW58fHQuZGVsZXRlKGUpO3JldHVybiBhfWFkZFRvcExldmVsTm9kZShlLHQpe2NvbnN0IGk9dGhpcy5yb290RGljdC5nZXQoIksiKTtpZighaSlyZXR1cm4hMTtpZihpIGluc3RhbmNlb2YgRGljdCl7aWYoaS5vYmpJZCE9PWUub2JqSWQpcmV0dXJuITE7dGhpcy5ub2Rlc1swXT10O3JldHVybiEwfWlmKCFBcnJheS5pc0FycmF5KGkpKXJldHVybiEwO2xldCBhPSExO2ZvcihsZXQgcj0wO3I8aS5sZW5ndGg7cisrKXtjb25zdCBzPWlbcl07aWYocz8udG9TdHJpbmcoKT09PWUub2JqSWQpe3RoaXMubm9kZXNbcl09dDthPSEwfX1yZXR1cm4gYX1nZXQgc2VyaWFsaXphYmxlKCl7ZnVuY3Rpb24gbm9kZVRvU2VyaWFsaXphYmxlKGUsdCxpPTApe2lmKGk+NDApe3dhcm4oIlN0cnVjdFRyZWUgdG9vIGRlZXAgdG8gYmUgZnVsbHkgc2VyaWFsaXplZC4iKTtyZXR1cm59Y29uc3QgYT1PYmplY3QuY3JlYXRlKG51bGwpO2Eucm9sZT1lLnJvbGU7YS5jaGlsZHJlbj1bXTt0LmNoaWxkcmVuLnB1c2goYSk7bGV0IHI9ZS5kaWN0LmdldCgiQWx0Iik7InN0cmluZyIhPXR5cGVvZiByJiYocj1lLmRpY3QuZ2V0KCJBY3R1YWxUZXh0IikpOyJzdHJpbmciPT10eXBlb2YgciYmKGEuYWx0PXN0cmluZ1RvUERGU3RyaW5nKHIpKTtjb25zdCBzPWUuZGljdC5nZXQoIkEiKTtpZihzIGluc3RhbmNlb2YgRGljdCl7Y29uc3QgZT1sb29rdXBOb3JtYWxSZWN0KHMuZ2V0QXJyYXkoIkJCb3giKSxudWxsKTtpZihlKWEuYmJveD1lO2Vsc2V7Y29uc3QgZT1zLmdldCgiV2lkdGgiKSx0PXMuZ2V0KCJIZWlnaHQiKTsibnVtYmVyIj09dHlwZW9mIGUmJmU+MCYmIm51bWJlciI9PXR5cGVvZiB0JiZ0PjAmJihhLmJib3g9WzAsMCxlLHRdKX19Y29uc3Qgbj1lLmRpY3QuZ2V0KCJMYW5nIik7InN0cmluZyI9PXR5cGVvZiBuJiYoYS5sYW5nPXN0cmluZ1RvUERGU3RyaW5nKG4pKTtmb3IoY29uc3QgdCBvZiBlLmtpZHMpe2NvbnN0IGU9dC50eXBlPT09SHI/dC5wYXJlbnROb2RlOm51bGw7ZT9ub2RlVG9TZXJpYWxpemFibGUoZSxhLGkrMSk6dC50eXBlPT09TXJ8fHQudHlwZT09PVVyP2EuY2hpbGRyZW4ucHVzaCh7dHlwZToiY29udGVudCIsaWQ6YHAke3QucGFnZU9iaklkfV9tYyR7dC5tY2lkfWB9KTp0LnR5cGU9PT14cj9hLmNoaWxkcmVuLnB1c2goe3R5cGU6Im9iamVjdCIsaWQ6dC5yZWZPYmpJZH0pOnQudHlwZT09PUxyJiZhLmNoaWxkcmVuLnB1c2goe3R5cGU6ImFubm90YXRpb24iLGlkOmBwZGZqc19pbnRlcm5hbF9pZF8ke3QucmVmT2JqSWR9YH0pfX1jb25zdCBlPU9iamVjdC5jcmVhdGUobnVsbCk7ZS5jaGlsZHJlbj1bXTtlLnJvbGU9IlJvb3QiO2Zvcihjb25zdCB0IG9mIHRoaXMubm9kZXMpdCYmbm9kZVRvU2VyaWFsaXphYmxlKHQsZSk7cmV0dXJuIGV9fWZ1bmN0aW9uIGlzVmFsaWRFeHBsaWNpdERlc3QoZSl7aWYoIUFycmF5LmlzQXJyYXkoZSl8fGUubGVuZ3RoPDIpcmV0dXJuITE7Y29uc3RbdCxpLC4uLmFdPWU7aWYoISh0IGluc3RhbmNlb2YgUmVmfHxOdW1iZXIuaXNJbnRlZ2VyKHQpKSlyZXR1cm4hMTtpZighKGkgaW5zdGFuY2VvZiBOYW1lKSlyZXR1cm4hMTtjb25zdCByPWEubGVuZ3RoO2xldCBzPSEwO3N3aXRjaChpLm5hbWUpe2Nhc2UiWFlaIjppZihyPDJ8fHI+MylyZXR1cm4hMTticmVhaztjYXNlIkZpdCI6Y2FzZSJGaXRCIjpyZXR1cm4gMD09PXI7Y2FzZSJGaXRIIjpjYXNlIkZpdEJIIjpjYXNlIkZpdFYiOmNhc2UiRml0QlYiOmlmKHI+MSlyZXR1cm4hMTticmVhaztjYXNlIkZpdFIiOmlmKDQhPT1yKXJldHVybiExO3M9ITE7YnJlYWs7ZGVmYXVsdDpyZXR1cm4hMX1mb3IoY29uc3QgZSBvZiBhKWlmKCEoIm51bWJlciI9PXR5cGVvZiBlfHxzJiZudWxsPT09ZSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gZmV0Y2hEZXN0KGUpe2UgaW5zdGFuY2VvZiBEaWN0JiYoZT1lLmdldCgiRCIpKTtyZXR1cm4gaXNWYWxpZEV4cGxpY2l0RGVzdChlKT9lOm51bGx9ZnVuY3Rpb24gZmV0Y2hSZW1vdGVEZXN0KGUpe2xldCB0PWUuZ2V0KCJEIik7aWYodCl7dCBpbnN0YW5jZW9mIE5hbWUmJih0PXQubmFtZSk7aWYoInN0cmluZyI9PXR5cGVvZiB0KXJldHVybiBzdHJpbmdUb1BERlN0cmluZyh0KTtpZihpc1ZhbGlkRXhwbGljaXREZXN0KHQpKXJldHVybiBKU09OLnN0cmluZ2lmeSh0KX1yZXR1cm4gbnVsbH1jbGFzcyBDYXRhbG9ne2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5wZGZNYW5hZ2VyPWU7dGhpcy54cmVmPXQ7dGhpcy5fY2F0RGljdD10LmdldENhdGFsb2dPYmooKTtpZighKHRoaXMuX2NhdERpY3QgaW5zdGFuY2VvZiBEaWN0KSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkNhdGFsb2cgb2JqZWN0IGlzIG5vdCBhIGRpY3Rpb25hcnkuIik7dGhpcy50b3BsZXZlbFBhZ2VzRGljdDt0aGlzLl9hY3R1YWxOdW1QYWdlcz1udWxsO3RoaXMuZm9udENhY2hlPW5ldyBSZWZTZXRDYWNoZTt0aGlzLmJ1aWx0SW5DTWFwQ2FjaGU9bmV3IE1hcDt0aGlzLnN0YW5kYXJkRm9udERhdGFDYWNoZT1uZXcgTWFwO3RoaXMuZ2xvYmFsSW1hZ2VDYWNoZT1uZXcgR2xvYmFsSW1hZ2VDYWNoZTt0aGlzLnBhZ2VLaWRzQ291bnRDYWNoZT1uZXcgUmVmU2V0Q2FjaGU7dGhpcy5wYWdlSW5kZXhDYWNoZT1uZXcgUmVmU2V0Q2FjaGU7dGhpcy5wYWdlRGljdENhY2hlPW5ldyBSZWZTZXRDYWNoZTt0aGlzLm5vbkJsZW5kTW9kZXNTZXQ9bmV3IFJlZlNldDt0aGlzLnN5c3RlbUZvbnRDYWNoZT1uZXcgTWFwfWNsb25lRGljdCgpe3JldHVybiB0aGlzLl9jYXREaWN0LmNsb25lKCl9Z2V0IHZlcnNpb24oKXtjb25zdCBlPXRoaXMuX2NhdERpY3QuZ2V0KCJWZXJzaW9uIik7aWYoZSBpbnN0YW5jZW9mIE5hbWUpe2lmKG10LnRlc3QoZS5uYW1lKSlyZXR1cm4gc2hhZG93KHRoaXMsInZlcnNpb24iLGUubmFtZSk7d2FybihgSW52YWxpZCBQREYgY2F0YWxvZyB2ZXJzaW9uOiAke2UubmFtZX1gKX1yZXR1cm4gc2hhZG93KHRoaXMsInZlcnNpb24iLG51bGwpfWdldCBsYW5nKCl7Y29uc3QgZT10aGlzLl9jYXREaWN0LmdldCgiTGFuZyIpO3JldHVybiBzaGFkb3codGhpcywibGFuZyIsZSYmInN0cmluZyI9PXR5cGVvZiBlP3N0cmluZ1RvUERGU3RyaW5nKGUpOm51bGwpfWdldCBuZWVkc1JlbmRlcmluZygpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXQoIk5lZWRzUmVuZGVyaW5nIik7cmV0dXJuIHNoYWRvdyh0aGlzLCJuZWVkc1JlbmRlcmluZyIsImJvb2xlYW4iPT10eXBlb2YgZSYmZSl9Z2V0IGNvbGxlY3Rpb24oKXtsZXQgZT1udWxsO3RyeXtjb25zdCB0PXRoaXMuX2NhdERpY3QuZ2V0KCJDb2xsZWN0aW9uIik7dCBpbnN0YW5jZW9mIERpY3QmJnQuc2l6ZT4wJiYoZT10KX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTtpbmZvKCJDYW5ub3QgZmV0Y2ggQ29sbGVjdGlvbiBlbnRyeTsgYXNzdW1pbmcgbm8gY29sbGVjdGlvbiBpcyBwcmVzZW50LiIpfXJldHVybiBzaGFkb3codGhpcywiY29sbGVjdGlvbiIsZSl9Z2V0IGFjcm9Gb3JtKCl7bGV0IGU9bnVsbDt0cnl7Y29uc3QgdD10aGlzLl9jYXREaWN0LmdldCgiQWNyb0Zvcm0iKTt0IGluc3RhbmNlb2YgRGljdCYmdC5zaXplPjAmJihlPXQpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBNaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlO2luZm8oIkNhbm5vdCBmZXRjaCBBY3JvRm9ybSBlbnRyeTsgYXNzdW1pbmcgbm8gZm9ybXMgYXJlIHByZXNlbnQuIil9cmV0dXJuIHNoYWRvdyh0aGlzLCJhY3JvRm9ybSIsZSl9Z2V0IGFjcm9Gb3JtUmVmKCl7Y29uc3QgZT10aGlzLl9jYXREaWN0LmdldFJhdygiQWNyb0Zvcm0iKTtyZXR1cm4gc2hhZG93KHRoaXMsImFjcm9Gb3JtUmVmIixlIGluc3RhbmNlb2YgUmVmP2U6bnVsbCl9Z2V0IG1ldGFkYXRhKCl7Y29uc3QgZT10aGlzLl9jYXREaWN0LmdldFJhdygiTWV0YWRhdGEiKTtpZighKGUgaW5zdGFuY2VvZiBSZWYpKXJldHVybiBzaGFkb3codGhpcywibWV0YWRhdGEiLG51bGwpO2xldCB0PW51bGw7dHJ5e2NvbnN0IGk9dGhpcy54cmVmLmZldGNoKGUsIXRoaXMueHJlZi5lbmNyeXB0Py5lbmNyeXB0TWV0YWRhdGEpO2lmKGkgaW5zdGFuY2VvZiBCYXNlU3RyZWFtJiZpLmRpY3QgaW5zdGFuY2VvZiBEaWN0KXtjb25zdCBlPWkuZGljdC5nZXQoIlR5cGUiKSxhPWkuZGljdC5nZXQoIlN1YnR5cGUiKTtpZihpc05hbWUoZSwiTWV0YWRhdGEiKSYmaXNOYW1lKGEsIlhNTCIpKXtjb25zdCBlPXN0cmluZ1RvVVRGOFN0cmluZyhpLmdldFN0cmluZygpKTtlJiYodD1uZXcgTWV0YWRhdGFQYXJzZXIoZSkuc2VyaWFsaXphYmxlKX19fWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBNaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlO2luZm8oYFNraXBwaW5nIGludmFsaWQgTWV0YWRhdGE6ICIke2V9Ii5gKX1yZXR1cm4gc2hhZG93KHRoaXMsIm1ldGFkYXRhIix0KX1nZXQgbWFya0luZm8oKXtsZXQgZT1udWxsO3RyeXtlPXRoaXMuX3JlYWRNYXJrSW5mbygpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBNaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlO3dhcm4oIlVuYWJsZSB0byByZWFkIG1hcmsgaW5mby4iKX1yZXR1cm4gc2hhZG93KHRoaXMsIm1hcmtJbmZvIixlKX1fcmVhZE1hcmtJbmZvKCl7Y29uc3QgZT10aGlzLl9jYXREaWN0LmdldCgiTWFya0luZm8iKTtpZighKGUgaW5zdGFuY2VvZiBEaWN0KSlyZXR1cm4gbnVsbDtjb25zdCB0PXtNYXJrZWQ6ITEsVXNlclByb3BlcnRpZXM6ITEsU3VzcGVjdHM6ITF9O2Zvcihjb25zdCBpIGluIHQpe2NvbnN0IGE9ZS5nZXQoaSk7ImJvb2xlYW4iPT10eXBlb2YgYSYmKHRbaV09YSl9cmV0dXJuIHR9Z2V0IHN0cnVjdFRyZWVSb290KCl7bGV0IGU9bnVsbDt0cnl7ZT10aGlzLl9yZWFkU3RydWN0VHJlZVJvb3QoKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTt3YXJuKCJVbmFibGUgcmVhZCB0byBzdHJ1Y3RUcmVlUm9vdCBpbmZvLiIpfXJldHVybiBzaGFkb3codGhpcywic3RydWN0VHJlZVJvb3QiLGUpfV9yZWFkU3RydWN0VHJlZVJvb3QoKXtjb25zdCBlPXRoaXMuX2NhdERpY3QuZ2V0UmF3KCJTdHJ1Y3RUcmVlUm9vdCIpLHQ9dGhpcy54cmVmLmZldGNoSWZSZWYoZSk7aWYoISh0IGluc3RhbmNlb2YgRGljdCkpcmV0dXJuIG51bGw7Y29uc3QgaT1uZXcgU3RydWN0VHJlZVJvb3QodCxlKTtpLmluaXQoKTtyZXR1cm4gaX1nZXQgdG9wbGV2ZWxQYWdlc0RpY3QoKXtjb25zdCBlPXRoaXMuX2NhdERpY3QuZ2V0KCJQYWdlcyIpO2lmKCEoZSBpbnN0YW5jZW9mIERpY3QpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiSW52YWxpZCB0b3AtbGV2ZWwgcGFnZXMgZGljdGlvbmFyeS4iKTtyZXR1cm4gc2hhZG93KHRoaXMsInRvcGxldmVsUGFnZXNEaWN0IixlKX1nZXQgZG9jdW1lbnRPdXRsaW5lKCl7bGV0IGU9bnVsbDt0cnl7ZT10aGlzLl9yZWFkRG9jdW1lbnRPdXRsaW5lKCl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIE1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7d2FybigiVW5hYmxlIHRvIHJlYWQgZG9jdW1lbnQgb3V0bGluZS4iKX1yZXR1cm4gc2hhZG93KHRoaXMsImRvY3VtZW50T3V0bGluZSIsZSl9X3JlYWREb2N1bWVudE91dGxpbmUoKXtsZXQgZT10aGlzLl9jYXREaWN0LmdldCgiT3V0bGluZXMiKTtpZighKGUgaW5zdGFuY2VvZiBEaWN0KSlyZXR1cm4gbnVsbDtlPWUuZ2V0UmF3KCJGaXJzdCIpO2lmKCEoZSBpbnN0YW5jZW9mIFJlZikpcmV0dXJuIG51bGw7Y29uc3QgdD17aXRlbXM6W119LGk9W3tvYmo6ZSxwYXJlbnQ6dH1dLGE9bmV3IFJlZlNldDthLnB1dChlKTtjb25zdCByPXRoaXMueHJlZixzPW5ldyBVaW50OENsYW1wZWRBcnJheSgzKTtmb3IoO2kubGVuZ3RoPjA7KXtjb25zdCB0PWkuc2hpZnQoKSxuPXIuZmV0Y2hJZlJlZih0Lm9iaik7aWYobnVsbD09PW4pY29udGludWU7bi5oYXMoIlRpdGxlIil8fHdhcm4oIkludmFsaWQgb3V0bGluZSBpdGVtIGVuY291bnRlcmVkLiIpO2NvbnN0IG89e3VybDpudWxsLGRlc3Q6bnVsbCxhY3Rpb246bnVsbH07Q2F0YWxvZy5wYXJzZURlc3REaWN0aW9uYXJ5KHtkZXN0RGljdDpuLHJlc3VsdE9iajpvLGRvY0Jhc2VVcmw6dGhpcy5iYXNlVXJsLGRvY0F0dGFjaG1lbnRzOnRoaXMuYXR0YWNobWVudHN9KTtjb25zdCBnPW4uZ2V0KCJUaXRsZSIpLGM9bi5nZXQoIkYiKXx8MCxsPW4uZ2V0QXJyYXkoIkMiKSxoPW4uZ2V0KCJDb3VudCIpO2xldCBDPXM7IWlzTnVtYmVyQXJyYXkobCwzKXx8MD09PWxbMF0mJjA9PT1sWzFdJiYwPT09bFsyXXx8KEM9Q29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYi5nZXRSZ2IobCwwKSk7Y29uc3QgUT17YWN0aW9uOm8uYWN0aW9uLGF0dGFjaG1lbnQ6by5hdHRhY2htZW50LGRlc3Q6by5kZXN0LHVybDpvLnVybCx1bnNhZmVVcmw6by51bnNhZmVVcmwsbmV3V2luZG93Om8ubmV3V2luZG93LHNldE9DR1N0YXRlOm8uc2V0T0NHU3RhdGUsdGl0bGU6InN0cmluZyI9PXR5cGVvZiBnP3N0cmluZ1RvUERGU3RyaW5nKGcpOiIiLGNvbG9yOkMsY291bnQ6TnVtYmVyLmlzSW50ZWdlcihoKT9oOnZvaWQgMCxib2xkOiEhKDImYyksaXRhbGljOiEhKDEmYyksaXRlbXM6W119O3QucGFyZW50Lml0ZW1zLnB1c2goUSk7ZT1uLmdldFJhdygiRmlyc3QiKTtpZihlIGluc3RhbmNlb2YgUmVmJiYhYS5oYXMoZSkpe2kucHVzaCh7b2JqOmUscGFyZW50OlF9KTthLnB1dChlKX1lPW4uZ2V0UmF3KCJOZXh0Iik7aWYoZSBpbnN0YW5jZW9mIFJlZiYmIWEuaGFzKGUpKXtpLnB1c2goe29iajplLHBhcmVudDp0LnBhcmVudH0pO2EucHV0KGUpfX1yZXR1cm4gdC5pdGVtcy5sZW5ndGg+MD90Lml0ZW1zOm51bGx9Z2V0IHBlcm1pc3Npb25zKCl7bGV0IGU9bnVsbDt0cnl7ZT10aGlzLl9yZWFkUGVybWlzc2lvbnMoKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTt3YXJuKCJVbmFibGUgdG8gcmVhZCBwZXJtaXNzaW9ucy4iKX1yZXR1cm4gc2hhZG93KHRoaXMsInBlcm1pc3Npb25zIixlKX1fcmVhZFBlcm1pc3Npb25zKCl7Y29uc3QgZT10aGlzLnhyZWYudHJhaWxlci5nZXQoIkVuY3J5cHQiKTtpZighKGUgaW5zdGFuY2VvZiBEaWN0KSlyZXR1cm4gbnVsbDtsZXQgdD1lLmdldCgiUCIpO2lmKCJudW1iZXIiIT10eXBlb2YgdClyZXR1cm4gbnVsbDt0Kz0yKiozMjtjb25zdCBpPVtdO2Zvcihjb25zdCBlIGluIHcpe2NvbnN0IGE9d1tlXTt0JmEmJmkucHVzaChhKX1yZXR1cm4gaX1nZXQgb3B0aW9uYWxDb250ZW50Q29uZmlnKCl7bGV0IGU9bnVsbDt0cnl7Y29uc3QgdD10aGlzLl9jYXREaWN0LmdldCgiT0NQcm9wZXJ0aWVzIik7aWYoIXQpcmV0dXJuIHNoYWRvdyh0aGlzLCJvcHRpb25hbENvbnRlbnRDb25maWciLG51bGwpO2NvbnN0IGk9dC5nZXQoIkQiKTtpZighaSlyZXR1cm4gc2hhZG93KHRoaXMsIm9wdGlvbmFsQ29udGVudENvbmZpZyIsbnVsbCk7Y29uc3QgYT10LmdldCgiT0NHcyIpO2lmKCFBcnJheS5pc0FycmF5KGEpKXJldHVybiBzaGFkb3codGhpcywib3B0aW9uYWxDb250ZW50Q29uZmlnIixudWxsKTtjb25zdCByPW5ldyBSZWZTZXRDYWNoZTtmb3IoY29uc3QgZSBvZiBhKWUgaW5zdGFuY2VvZiBSZWYmJiFyLmhhcyhlKSYmci5wdXQoZSx0aGlzLiNZKGUpKTtlPXRoaXMuI0soaSxyKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTt3YXJuKGBVbmFibGUgdG8gcmVhZCBvcHRpb25hbCBjb250ZW50IGNvbmZpZzogJHtlfWApfXJldHVybiBzaGFkb3codGhpcywib3B0aW9uYWxDb250ZW50Q29uZmlnIixlKX0jWShlKXtjb25zdCB0PXRoaXMueHJlZi5mZXRjaChlKSxpPXtpZDplLnRvU3RyaW5nKCksbmFtZTpudWxsLGludGVudDpudWxsLHVzYWdlOntwcmludDpudWxsLHZpZXc6bnVsbH0scmJHcm91cHM6W119LGE9dC5nZXQoIk5hbWUiKTsic3RyaW5nIj09dHlwZW9mIGEmJihpLm5hbWU9c3RyaW5nVG9QREZTdHJpbmcoYSkpO2xldCByPXQuZ2V0QXJyYXkoIkludGVudCIpO0FycmF5LmlzQXJyYXkocil8fChyPVtyXSk7ci5ldmVyeSgoZT0+ZSBpbnN0YW5jZW9mIE5hbWUpKSYmKGkuaW50ZW50PXIubWFwKChlPT5lLm5hbWUpKSk7Y29uc3Qgcz10LmdldCgiVXNhZ2UiKTtpZighKHMgaW5zdGFuY2VvZiBEaWN0KSlyZXR1cm4gaTtjb25zdCBuPWkudXNhZ2Usbz1zLmdldCgiUHJpbnQiKTtpZihvIGluc3RhbmNlb2YgRGljdCl7Y29uc3QgZT1vLmdldCgiUHJpbnRTdGF0ZSIpO2lmKGUgaW5zdGFuY2VvZiBOYW1lKXN3aXRjaChlLm5hbWUpe2Nhc2UiT04iOmNhc2UiT0ZGIjpuLnByaW50PXtwcmludFN0YXRlOmUubmFtZX19fWNvbnN0IGc9cy5nZXQoIlZpZXciKTtpZihnIGluc3RhbmNlb2YgRGljdCl7Y29uc3QgZT1nLmdldCgiVmlld1N0YXRlIik7aWYoZSBpbnN0YW5jZW9mIE5hbWUpc3dpdGNoKGUubmFtZSl7Y2FzZSJPTiI6Y2FzZSJPRkYiOm4udmlldz17dmlld1N0YXRlOmUubmFtZX19fXJldHVybiBpfSNLKGUsdCl7ZnVuY3Rpb24gcGFyc2VPbk9mZihlKXtjb25zdCBpPVtdO2lmKEFycmF5LmlzQXJyYXkoZSkpZm9yKGNvbnN0IGEgb2YgZSlhIGluc3RhbmNlb2YgUmVmJiZ0LmhhcyhhKSYmaS5wdXNoKGEudG9TdHJpbmcoKSk7cmV0dXJuIGl9ZnVuY3Rpb24gcGFyc2VPcmRlcihlLGk9MCl7aWYoIUFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIG51bGw7Y29uc3Qgcj1bXTtmb3IoY29uc3QgcyBvZiBlKXtpZihzIGluc3RhbmNlb2YgUmVmJiZ0LmhhcyhzKSl7YS5wdXQocyk7ci5wdXNoKHMudG9TdHJpbmcoKSk7Y29udGludWV9Y29uc3QgZT1wYXJzZU5lc3RlZE9yZGVyKHMsaSk7ZSYmci5wdXNoKGUpfWlmKGk+MClyZXR1cm4gcjtjb25zdCBzPVtdO2Zvcihjb25zdFtlXW9mIHQuaXRlbXMoKSlhLmhhcyhlKXx8cy5wdXNoKGUudG9TdHJpbmcoKSk7cy5sZW5ndGgmJnIucHVzaCh7bmFtZTpudWxsLG9yZGVyOnN9KTtyZXR1cm4gcn1mdW5jdGlvbiBwYXJzZU5lc3RlZE9yZGVyKGUsdCl7aWYoKyt0PnIpe3dhcm4oInBhcnNlTmVzdGVkT3JkZXIgLSByZWFjaGVkIE1BWF9ORVNURURfTEVWRUxTLiIpO3JldHVybiBudWxsfWNvbnN0IGE9aS5mZXRjaElmUmVmKGUpO2lmKCFBcnJheS5pc0FycmF5KGEpKXJldHVybiBudWxsO2NvbnN0IHM9aS5mZXRjaElmUmVmKGFbMF0pO2lmKCJzdHJpbmciIT10eXBlb2YgcylyZXR1cm4gbnVsbDtjb25zdCBuPXBhcnNlT3JkZXIoYS5zbGljZSgxKSx0KTtyZXR1cm4gbj8ubGVuZ3RoP3tuYW1lOnN0cmluZ1RvUERGU3RyaW5nKHMpLG9yZGVyOm59Om51bGx9Y29uc3QgaT10aGlzLnhyZWYsYT1uZXcgUmVmU2V0LHI9MTA7IWZ1bmN0aW9uIHBhcnNlUkJHcm91cHMoZSl7aWYoQXJyYXkuaXNBcnJheShlKSlmb3IoY29uc3QgYSBvZiBlKXtjb25zdCBlPWkuZmV0Y2hJZlJlZihhKTtpZighQXJyYXkuaXNBcnJheShlKXx8IWUubGVuZ3RoKWNvbnRpbnVlO2NvbnN0IHI9bmV3IFNldDtmb3IoY29uc3QgaSBvZiBlKWlmKGkgaW5zdGFuY2VvZiBSZWYmJnQuaGFzKGkpJiYhci5oYXMoaS50b1N0cmluZygpKSl7ci5hZGQoaS50b1N0cmluZygpKTt0LmdldChpKS5yYkdyb3Vwcy5wdXNoKHIpfX19KGUuZ2V0KCJSQkdyb3VwcyIpKTtyZXR1cm57bmFtZToic3RyaW5nIj09dHlwZW9mIGUuZ2V0KCJOYW1lIik/c3RyaW5nVG9QREZTdHJpbmcoZS5nZXQoIk5hbWUiKSk6bnVsbCxjcmVhdG9yOiJzdHJpbmciPT10eXBlb2YgZS5nZXQoIkNyZWF0b3IiKT9zdHJpbmdUb1BERlN0cmluZyhlLmdldCgiQ3JlYXRvciIpKTpudWxsLGJhc2VTdGF0ZTplLmdldCgiQmFzZVN0YXRlIilpbnN0YW5jZW9mIE5hbWU/ZS5nZXQoIkJhc2VTdGF0ZSIpLm5hbWU6bnVsbCxvbjpwYXJzZU9uT2ZmKGUuZ2V0KCJPTiIpKSxvZmY6cGFyc2VPbk9mZihlLmdldCgiT0ZGIikpLG9yZGVyOnBhcnNlT3JkZXIoZS5nZXQoIk9yZGVyIikpLGdyb3VwczpbLi4udF19fXNldEFjdHVhbE51bVBhZ2VzKGU9bnVsbCl7dGhpcy5fYWN0dWFsTnVtUGFnZXM9ZX1nZXQgaGFzQWN0dWFsTnVtUGFnZXMoKXtyZXR1cm4gbnVsbCE9PXRoaXMuX2FjdHVhbE51bVBhZ2VzfWdldCBfcGFnZXNDb3VudCgpe2NvbnN0IGU9dGhpcy50b3BsZXZlbFBhZ2VzRGljdC5nZXQoIkNvdW50Iik7aWYoIU51bWJlci5pc0ludGVnZXIoZSkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJQYWdlIGNvdW50IGluIHRvcC1sZXZlbCBwYWdlcyBkaWN0aW9uYXJ5IGlzIG5vdCBhbiBpbnRlZ2VyLiIpO3JldHVybiBzaGFkb3codGhpcywiX3BhZ2VzQ291bnQiLGUpfWdldCBudW1QYWdlcygpe3JldHVybiB0aGlzLmhhc0FjdHVhbE51bVBhZ2VzP3RoaXMuX2FjdHVhbE51bVBhZ2VzOnRoaXMuX3BhZ2VzQ291bnR9Z2V0IGRlc3RpbmF0aW9ucygpe2NvbnN0IGU9dGhpcy5fcmVhZERlc3RzKCksdD1PYmplY3QuY3JlYXRlKG51bGwpO2lmKGUgaW5zdGFuY2VvZiBOYW1lVHJlZSlmb3IoY29uc3RbaSxhXW9mIGUuZ2V0QWxsKCkpe2NvbnN0IGU9ZmV0Y2hEZXN0KGEpO2UmJih0W3N0cmluZ1RvUERGU3RyaW5nKGkpXT1lKX1lbHNlIGlmKGUgaW5zdGFuY2VvZiBEaWN0KWZvcihjb25zdFtpLGFdb2YgZSl7Y29uc3QgZT1mZXRjaERlc3QoYSk7ZSYmKHRbaV09ZSl9cmV0dXJuIHNoYWRvdyh0aGlzLCJkZXN0aW5hdGlvbnMiLHQpfWdldERlc3RpbmF0aW9uKGUpe2NvbnN0IHQ9dGhpcy5fcmVhZERlc3RzKCk7aWYodCBpbnN0YW5jZW9mIE5hbWVUcmVlKXtjb25zdCBpPWZldGNoRGVzdCh0LmdldChlKSk7aWYoaSlyZXR1cm4gaTtjb25zdCBhPXRoaXMuZGVzdGluYXRpb25zW2VdO2lmKGEpe3dhcm4oYEZvdW5kICIke2V9IiBhdCBhbiBpbmNvcnJlY3QgcG9zaXRpb24gaW4gdGhlIE5hbWVUcmVlLmApO3JldHVybiBhfX1lbHNlIGlmKHQgaW5zdGFuY2VvZiBEaWN0KXtjb25zdCBpPWZldGNoRGVzdCh0LmdldChlKSk7aWYoaSlyZXR1cm4gaX1yZXR1cm4gbnVsbH1fcmVhZERlc3RzKCl7Y29uc3QgZT10aGlzLl9jYXREaWN0LmdldCgiTmFtZXMiKTtyZXR1cm4gZT8uaGFzKCJEZXN0cyIpP25ldyBOYW1lVHJlZShlLmdldFJhdygiRGVzdHMiKSx0aGlzLnhyZWYpOnRoaXMuX2NhdERpY3QuaGFzKCJEZXN0cyIpP3RoaXMuX2NhdERpY3QuZ2V0KCJEZXN0cyIpOnZvaWQgMH1nZXQgcGFnZUxhYmVscygpe2xldCBlPW51bGw7dHJ5e2U9dGhpcy5fcmVhZFBhZ2VMYWJlbHMoKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTt3YXJuKCJVbmFibGUgdG8gcmVhZCBwYWdlIGxhYmVscy4iKX1yZXR1cm4gc2hhZG93KHRoaXMsInBhZ2VMYWJlbHMiLGUpfV9yZWFkUGFnZUxhYmVscygpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXRSYXcoIlBhZ2VMYWJlbHMiKTtpZighZSlyZXR1cm4gbnVsbDtjb25zdCB0PW5ldyBBcnJheSh0aGlzLm51bVBhZ2VzKTtsZXQgaT1udWxsLGE9IiI7Y29uc3Qgcj1uZXcgTnVtYmVyVHJlZShlLHRoaXMueHJlZikuZ2V0QWxsKCk7bGV0IHM9IiIsbj0xO2ZvcihsZXQgZT0wLG89dGhpcy5udW1QYWdlcztlPG87ZSsrKXtjb25zdCBvPXIuZ2V0KGUpO2lmKHZvaWQgMCE9PW8pe2lmKCEobyBpbnN0YW5jZW9mIERpY3QpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiUGFnZUxhYmVsIGlzIG5vdCBhIGRpY3Rpb25hcnkuIik7aWYoby5oYXMoIlR5cGUiKSYmIWlzTmFtZShvLmdldCgiVHlwZSIpLCJQYWdlTGFiZWwiKSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkludmFsaWQgdHlwZSBpbiBQYWdlTGFiZWwgZGljdGlvbmFyeS4iKTtpZihvLmhhcygiUyIpKXtjb25zdCBlPW8uZ2V0KCJTIik7aWYoIShlIGluc3RhbmNlb2YgTmFtZSkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJJbnZhbGlkIHN0eWxlIGluIFBhZ2VMYWJlbCBkaWN0aW9uYXJ5LiIpO2k9ZS5uYW1lfWVsc2UgaT1udWxsO2lmKG8uaGFzKCJQIikpe2NvbnN0IGU9by5nZXQoIlAiKTtpZigic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJJbnZhbGlkIHByZWZpeCBpbiBQYWdlTGFiZWwgZGljdGlvbmFyeS4iKTthPXN0cmluZ1RvUERGU3RyaW5nKGUpfWVsc2UgYT0iIjtpZihvLmhhcygiU3QiKSl7Y29uc3QgZT1vLmdldCgiU3QiKTtpZighKE51bWJlci5pc0ludGVnZXIoZSkmJmU+PTEpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiSW52YWxpZCBzdGFydCBpbiBQYWdlTGFiZWwgZGljdGlvbmFyeS4iKTtuPWV9ZWxzZSBuPTF9c3dpdGNoKGkpe2Nhc2UiRCI6cz1uO2JyZWFrO2Nhc2UiUiI6Y2FzZSJyIjpzPXRvUm9tYW5OdW1lcmFscyhuLCJyIj09PWkpO2JyZWFrO2Nhc2UiQSI6Y2FzZSJhIjpjb25zdCBlPTI2LHQ9ImEiPT09aT85Nzo2NSxhPW4tMTtzPVN0cmluZy5mcm9tQ2hhckNvZGUodCthJWUpLnJlcGVhdChNYXRoLmZsb29yKGEvZSkrMSk7YnJlYWs7ZGVmYXVsdDppZihpKXRocm93IG5ldyBGb3JtYXRFcnJvcihgSW52YWxpZCBzdHlsZSAiJHtpfSIgaW4gUGFnZUxhYmVsIGRpY3Rpb25hcnkuYCk7cz0iIn10W2VdPWErcztuKyt9cmV0dXJuIHR9Z2V0IHBhZ2VMYXlvdXQoKXtjb25zdCBlPXRoaXMuX2NhdERpY3QuZ2V0KCJQYWdlTGF5b3V0Iik7bGV0IHQ9IiI7aWYoZSBpbnN0YW5jZW9mIE5hbWUpc3dpdGNoKGUubmFtZSl7Y2FzZSJTaW5nbGVQYWdlIjpjYXNlIk9uZUNvbHVtbiI6Y2FzZSJUd29Db2x1bW5MZWZ0IjpjYXNlIlR3b0NvbHVtblJpZ2h0IjpjYXNlIlR3b1BhZ2VMZWZ0IjpjYXNlIlR3b1BhZ2VSaWdodCI6dD1lLm5hbWV9cmV0dXJuIHNoYWRvdyh0aGlzLCJwYWdlTGF5b3V0Iix0KX1nZXQgcGFnZU1vZGUoKXtjb25zdCBlPXRoaXMuX2NhdERpY3QuZ2V0KCJQYWdlTW9kZSIpO2xldCB0PSJVc2VOb25lIjtpZihlIGluc3RhbmNlb2YgTmFtZSlzd2l0Y2goZS5uYW1lKXtjYXNlIlVzZU5vbmUiOmNhc2UiVXNlT3V0bGluZXMiOmNhc2UiVXNlVGh1bWJzIjpjYXNlIkZ1bGxTY3JlZW4iOmNhc2UiVXNlT0MiOmNhc2UiVXNlQXR0YWNobWVudHMiOnQ9ZS5uYW1lfXJldHVybiBzaGFkb3codGhpcywicGFnZU1vZGUiLHQpfWdldCB2aWV3ZXJQcmVmZXJlbmNlcygpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXQoIlZpZXdlclByZWZlcmVuY2VzIik7aWYoIShlIGluc3RhbmNlb2YgRGljdCkpcmV0dXJuIHNoYWRvdyh0aGlzLCJ2aWV3ZXJQcmVmZXJlbmNlcyIsbnVsbCk7bGV0IHQ9bnVsbDtmb3IoY29uc3QgaSBvZiBlLmdldEtleXMoKSl7Y29uc3QgYT1lLmdldChpKTtsZXQgcjtzd2l0Y2goaSl7Y2FzZSJIaWRlVG9vbGJhciI6Y2FzZSJIaWRlTWVudWJhciI6Y2FzZSJIaWRlV2luZG93VUkiOmNhc2UiRml0V2luZG93IjpjYXNlIkNlbnRlcldpbmRvdyI6Y2FzZSJEaXNwbGF5RG9jVGl0bGUiOmNhc2UiUGlja1RyYXlCeVBERlNpemUiOiJib29sZWFuIj09dHlwZW9mIGEmJihyPWEpO2JyZWFrO2Nhc2UiTm9uRnVsbFNjcmVlblBhZ2VNb2RlIjppZihhIGluc3RhbmNlb2YgTmFtZSlzd2l0Y2goYS5uYW1lKXtjYXNlIlVzZU5vbmUiOmNhc2UiVXNlT3V0bGluZXMiOmNhc2UiVXNlVGh1bWJzIjpjYXNlIlVzZU9DIjpyPWEubmFtZTticmVhaztkZWZhdWx0OnI9IlVzZU5vbmUifWJyZWFrO2Nhc2UiRGlyZWN0aW9uIjppZihhIGluc3RhbmNlb2YgTmFtZSlzd2l0Y2goYS5uYW1lKXtjYXNlIkwyUiI6Y2FzZSJSMkwiOnI9YS5uYW1lO2JyZWFrO2RlZmF1bHQ6cj0iTDJSIn1icmVhaztjYXNlIlZpZXdBcmVhIjpjYXNlIlZpZXdDbGlwIjpjYXNlIlByaW50QXJlYSI6Y2FzZSJQcmludENsaXAiOmlmKGEgaW5zdGFuY2VvZiBOYW1lKXN3aXRjaChhLm5hbWUpe2Nhc2UiTWVkaWFCb3giOmNhc2UiQ3JvcEJveCI6Y2FzZSJCbGVlZEJveCI6Y2FzZSJUcmltQm94IjpjYXNlIkFydEJveCI6cj1hLm5hbWU7YnJlYWs7ZGVmYXVsdDpyPSJDcm9wQm94In1icmVhaztjYXNlIlByaW50U2NhbGluZyI6aWYoYSBpbnN0YW5jZW9mIE5hbWUpc3dpdGNoKGEubmFtZSl7Y2FzZSJOb25lIjpjYXNlIkFwcERlZmF1bHQiOnI9YS5uYW1lO2JyZWFrO2RlZmF1bHQ6cj0iQXBwRGVmYXVsdCJ9YnJlYWs7Y2FzZSJEdXBsZXgiOmlmKGEgaW5zdGFuY2VvZiBOYW1lKXN3aXRjaChhLm5hbWUpe2Nhc2UiU2ltcGxleCI6Y2FzZSJEdXBsZXhGbGlwU2hvcnRFZGdlIjpjYXNlIkR1cGxleEZsaXBMb25nRWRnZSI6cj1hLm5hbWU7YnJlYWs7ZGVmYXVsdDpyPSJOb25lIn1icmVhaztjYXNlIlByaW50UGFnZVJhbmdlIjppZihBcnJheS5pc0FycmF5KGEpJiZhLmxlbmd0aCUyPT0wKXthLmV2ZXJ5KCgoZSx0LGkpPT5OdW1iZXIuaXNJbnRlZ2VyKGUpJiZlPjAmJigwPT09dHx8ZT49aVt0LTFdKSYmZTw9dGhpcy5udW1QYWdlcykpJiYocj1hKX1icmVhaztjYXNlIk51bUNvcGllcyI6TnVtYmVyLmlzSW50ZWdlcihhKSYmYT4wJiYocj1hKTticmVhaztkZWZhdWx0Ondhcm4oYElnbm9yaW5nIG5vbi1zdGFuZGFyZCBrZXkgaW4gVmlld2VyUHJlZmVyZW5jZXM6ICR7aX0uYCk7Y29udGludWV9aWYodm9pZCAwIT09cil7dHx8KHQ9T2JqZWN0LmNyZWF0ZShudWxsKSk7dFtpXT1yfWVsc2Ugd2FybihgQmFkIHZhbHVlLCBmb3Iga2V5ICIke2l9IiwgaW4gVmlld2VyUHJlZmVyZW5jZXM6ICR7YX0uYCl9cmV0dXJuIHNoYWRvdyh0aGlzLCJ2aWV3ZXJQcmVmZXJlbmNlcyIsdCl9Z2V0IG9wZW5BY3Rpb24oKXtjb25zdCBlPXRoaXMuX2NhdERpY3QuZ2V0KCJPcGVuQWN0aW9uIiksdD1PYmplY3QuY3JlYXRlKG51bGwpO2lmKGUgaW5zdGFuY2VvZiBEaWN0KXtjb25zdCBpPW5ldyBEaWN0KHRoaXMueHJlZik7aS5zZXQoIkEiLGUpO2NvbnN0IGE9e3VybDpudWxsLGRlc3Q6bnVsbCxhY3Rpb246bnVsbH07Q2F0YWxvZy5wYXJzZURlc3REaWN0aW9uYXJ5KHtkZXN0RGljdDppLHJlc3VsdE9iajphfSk7QXJyYXkuaXNBcnJheShhLmRlc3QpP3QuZGVzdD1hLmRlc3Q6YS5hY3Rpb24mJih0LmFjdGlvbj1hLmFjdGlvbil9ZWxzZSBBcnJheS5pc0FycmF5KGUpJiYodC5kZXN0PWUpO3JldHVybiBzaGFkb3codGhpcywib3BlbkFjdGlvbiIsb2JqZWN0U2l6ZSh0KT4wP3Q6bnVsbCl9Z2V0IGF0dGFjaG1lbnRzKCl7Y29uc3QgZT10aGlzLl9jYXREaWN0LmdldCgiTmFtZXMiKTtsZXQgdD1udWxsO2lmKGUgaW5zdGFuY2VvZiBEaWN0JiZlLmhhcygiRW1iZWRkZWRGaWxlcyIpKXtjb25zdCBpPW5ldyBOYW1lVHJlZShlLmdldFJhdygiRW1iZWRkZWRGaWxlcyIpLHRoaXMueHJlZik7Zm9yKGNvbnN0W2UsYV1vZiBpLmdldEFsbCgpKXtjb25zdCBpPW5ldyBGaWxlU3BlYyhhLHRoaXMueHJlZik7dHx8KHQ9T2JqZWN0LmNyZWF0ZShudWxsKSk7dFtzdHJpbmdUb1BERlN0cmluZyhlKV09aS5zZXJpYWxpemFibGV9fXJldHVybiBzaGFkb3codGhpcywiYXR0YWNobWVudHMiLHQpfWdldCB4ZmFJbWFnZXMoKXtjb25zdCBlPXRoaXMuX2NhdERpY3QuZ2V0KCJOYW1lcyIpO2xldCB0PW51bGw7aWYoZSBpbnN0YW5jZW9mIERpY3QmJmUuaGFzKCJYRkFJbWFnZXMiKSl7Y29uc3QgaT1uZXcgTmFtZVRyZWUoZS5nZXRSYXcoIlhGQUltYWdlcyIpLHRoaXMueHJlZik7Zm9yKGNvbnN0W2UsYV1vZiBpLmdldEFsbCgpKXt0fHwodD1uZXcgRGljdCh0aGlzLnhyZWYpKTt0LnNldChzdHJpbmdUb1BERlN0cmluZyhlKSxhKX19cmV0dXJuIHNoYWRvdyh0aGlzLCJ4ZmFJbWFnZXMiLHQpfV9jb2xsZWN0SmF2YVNjcmlwdCgpe2NvbnN0IGU9dGhpcy5fY2F0RGljdC5nZXQoIk5hbWVzIik7bGV0IHQ9bnVsbDtmdW5jdGlvbiBhcHBlbmRJZkphdmFTY3JpcHREaWN0KGUsaSl7aWYoIShpIGluc3RhbmNlb2YgRGljdCkpcmV0dXJuO2lmKCFpc05hbWUoaS5nZXQoIlMiKSwiSmF2YVNjcmlwdCIpKXJldHVybjtsZXQgYT1pLmdldCgiSlMiKTtpZihhIGluc3RhbmNlb2YgQmFzZVN0cmVhbSlhPWEuZ2V0U3RyaW5nKCk7ZWxzZSBpZigic3RyaW5nIiE9dHlwZW9mIGEpcmV0dXJuO2E9c3RyaW5nVG9QREZTdHJpbmcoYSkucmVwbGFjZUFsbCgiXDAiLCIiKTthJiYodHx8PW5ldyBNYXApLnNldChlLGEpfWlmKGUgaW5zdGFuY2VvZiBEaWN0JiZlLmhhcygiSmF2YVNjcmlwdCIpKXtjb25zdCB0PW5ldyBOYW1lVHJlZShlLmdldFJhdygiSmF2YVNjcmlwdCIpLHRoaXMueHJlZik7Zm9yKGNvbnN0W2UsaV1vZiB0LmdldEFsbCgpKWFwcGVuZElmSmF2YVNjcmlwdERpY3Qoc3RyaW5nVG9QREZTdHJpbmcoZSksaSl9Y29uc3QgaT10aGlzLl9jYXREaWN0LmdldCgiT3BlbkFjdGlvbiIpO2kmJmFwcGVuZElmSmF2YVNjcmlwdERpY3QoIk9wZW5BY3Rpb24iLGkpO3JldHVybiB0fWdldCBqc0FjdGlvbnMoKXtjb25zdCBlPXRoaXMuX2NvbGxlY3RKYXZhU2NyaXB0KCk7bGV0IHQ9Y29sbGVjdEFjdGlvbnModGhpcy54cmVmLHRoaXMuX2NhdERpY3QsbUEpO2lmKGUpe3R8fD1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcihjb25zdFtpLGFdb2YgZSlpIGluIHQ/dFtpXS5wdXNoKGEpOnRbaV09W2FdfXJldHVybiBzaGFkb3codGhpcywianNBY3Rpb25zIix0KX1hc3luYyBmb250RmFsbGJhY2soZSx0KXtjb25zdCBpPWF3YWl0IFByb21pc2UuYWxsKHRoaXMuZm9udENhY2hlKTtmb3IoY29uc3QgYSBvZiBpKWlmKGEubG9hZGVkTmFtZT09PWUpe2EuZmFsbGJhY2sodCk7cmV0dXJufX1hc3luYyBjbGVhbnVwKGU9ITEpe2NsZWFyR2xvYmFsQ2FjaGVzKCk7dGhpcy5nbG9iYWxJbWFnZUNhY2hlLmNsZWFyKGUpO3RoaXMucGFnZUtpZHNDb3VudENhY2hlLmNsZWFyKCk7dGhpcy5wYWdlSW5kZXhDYWNoZS5jbGVhcigpO3RoaXMucGFnZURpY3RDYWNoZS5jbGVhcigpO3RoaXMubm9uQmxlbmRNb2Rlc1NldC5jbGVhcigpO2NvbnN0IHQ9YXdhaXQgUHJvbWlzZS5hbGwodGhpcy5mb250Q2FjaGUpO2Zvcihjb25zdHtkaWN0OmV9b2YgdClkZWxldGUgZS5jYWNoZUtleTt0aGlzLmZvbnRDYWNoZS5jbGVhcigpO3RoaXMuYnVpbHRJbkNNYXBDYWNoZS5jbGVhcigpO3RoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlLmNsZWFyKCk7dGhpcy5zeXN0ZW1Gb250Q2FjaGUuY2xlYXIoKX1hc3luYyBnZXRQYWdlRGljdChlKXtjb25zdCB0PVt0aGlzLnRvcGxldmVsUGFnZXNEaWN0XSxpPW5ldyBSZWZTZXQsYT10aGlzLl9jYXREaWN0LmdldFJhdygiUGFnZXMiKTthIGluc3RhbmNlb2YgUmVmJiZpLnB1dChhKTtjb25zdCByPXRoaXMueHJlZixzPXRoaXMucGFnZUtpZHNDb3VudENhY2hlLG49dGhpcy5wYWdlSW5kZXhDYWNoZSxvPXRoaXMucGFnZURpY3RDYWNoZTtsZXQgZz0wO2Zvcig7dC5sZW5ndGg7KXtjb25zdCBhPXQucG9wKCk7aWYoYSBpbnN0YW5jZW9mIFJlZil7Y29uc3QgYz1zLmdldChhKTtpZihjPj0wJiZnK2M8PWUpe2crPWM7Y29udGludWV9aWYoaS5oYXMoYSkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJQYWdlcyB0cmVlIGNvbnRhaW5zIGNpcmN1bGFyIHJlZmVyZW5jZS4iKTtpLnB1dChhKTtjb25zdCBsPWF3YWl0KG8uZ2V0KGEpfHxyLmZldGNoQXN5bmMoYSkpO2lmKGwgaW5zdGFuY2VvZiBEaWN0KXtsZXQgdD1sLmdldFJhdygiVHlwZSIpO3QgaW5zdGFuY2VvZiBSZWYmJih0PWF3YWl0IHIuZmV0Y2hBc3luYyh0KSk7aWYoaXNOYW1lKHQsIlBhZ2UiKXx8IWwuaGFzKCJLaWRzIikpe3MuaGFzKGEpfHxzLnB1dChhLDEpO24uaGFzKGEpfHxuLnB1dChhLGcpO2lmKGc9PT1lKXJldHVybltsLGFdO2crKztjb250aW51ZX19dC5wdXNoKGwpO2NvbnRpbnVlfWlmKCEoYSBpbnN0YW5jZW9mIERpY3QpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiUGFnZSBkaWN0aW9uYXJ5IGtpZCByZWZlcmVuY2UgcG9pbnRzIHRvIHdyb25nIHR5cGUgb2Ygb2JqZWN0LiIpO2NvbnN0e29iaklkOmN9PWE7bGV0IGw9YS5nZXRSYXcoIkNvdW50Iik7bCBpbnN0YW5jZW9mIFJlZiYmKGw9YXdhaXQgci5mZXRjaEFzeW5jKGwpKTtpZihOdW1iZXIuaXNJbnRlZ2VyKGwpJiZsPj0wKXtjJiYhcy5oYXMoYykmJnMucHV0KGMsbCk7aWYoZytsPD1lKXtnKz1sO2NvbnRpbnVlfX1sZXQgaD1hLmdldFJhdygiS2lkcyIpO2ggaW5zdGFuY2VvZiBSZWYmJihoPWF3YWl0IHIuZmV0Y2hBc3luYyhoKSk7aWYoIUFycmF5LmlzQXJyYXkoaCkpe2xldCB0PWEuZ2V0UmF3KCJUeXBlIik7dCBpbnN0YW5jZW9mIFJlZiYmKHQ9YXdhaXQgci5mZXRjaEFzeW5jKHQpKTtpZihpc05hbWUodCwiUGFnZSIpfHwhYS5oYXMoIktpZHMiKSl7aWYoZz09PWUpcmV0dXJuW2EsbnVsbF07ZysrO2NvbnRpbnVlfXRocm93IG5ldyBGb3JtYXRFcnJvcigiUGFnZSBkaWN0aW9uYXJ5IGtpZHMgb2JqZWN0IGlzIG5vdCBhbiBhcnJheS4iKX1mb3IobGV0IGU9aC5sZW5ndGgtMTtlPj0wO2UtLSl7Y29uc3QgaT1oW2VdO3QucHVzaChpKTthPT09dGhpcy50b3BsZXZlbFBhZ2VzRGljdCYmaSBpbnN0YW5jZW9mIFJlZiYmIW8uaGFzKGkpJiZvLnB1dChpLHIuZmV0Y2hBc3luYyhpKSl9fXRocm93IG5ldyBFcnJvcihgUGFnZSBpbmRleCAke2V9IG5vdCBmb3VuZC5gKX1hc3luYyBnZXRBbGxQYWdlRGljdHMoZT0hMSl7Y29uc3R7aWdub3JlRXJyb3JzOnR9PXRoaXMucGRmTWFuYWdlci5ldmFsdWF0b3JPcHRpb25zLGk9W3tjdXJyZW50Tm9kZTp0aGlzLnRvcGxldmVsUGFnZXNEaWN0LHBvc0luS2lkczowfV0sYT1uZXcgUmVmU2V0LHI9dGhpcy5fY2F0RGljdC5nZXRSYXcoIlBhZ2VzIik7ciBpbnN0YW5jZW9mIFJlZiYmYS5wdXQocik7Y29uc3Qgcz1uZXcgTWFwLG49dGhpcy54cmVmLG89dGhpcy5wYWdlSW5kZXhDYWNoZTtsZXQgZz0wO2Z1bmN0aW9uIGFkZFBhZ2VEaWN0KGUsdCl7dCYmIW8uaGFzKHQpJiZvLnB1dCh0LGcpO3Muc2V0KGcrKyxbZSx0XSl9ZnVuY3Rpb24gYWRkUGFnZUVycm9yKGkpe2lmKGkgaW5zdGFuY2VvZiBYUmVmRW50cnlFeGNlcHRpb24mJiFlKXRocm93IGk7aWYoZSYmdCYmMD09PWcpe3dhcm4oYGdldEFsbFBhZ2VEaWN0cyAtIFNraXBwaW5nIGludmFsaWQgZmlyc3QgcGFnZTogIiR7aX0iLmApO2k9RGljdC5lbXB0eX1zLnNldChnKyssW2ksbnVsbF0pfWZvcig7aS5sZW5ndGg+MDspe2NvbnN0IGU9aS5hdCgtMSkse2N1cnJlbnROb2RlOnQscG9zSW5LaWRzOnJ9PWU7bGV0IHM9dC5nZXRSYXcoIktpZHMiKTtpZihzIGluc3RhbmNlb2YgUmVmKXRyeXtzPWF3YWl0IG4uZmV0Y2hBc3luYyhzKX1jYXRjaChlKXthZGRQYWdlRXJyb3IoZSk7YnJlYWt9aWYoIUFycmF5LmlzQXJyYXkocykpe2FkZFBhZ2VFcnJvcihuZXcgRm9ybWF0RXJyb3IoIlBhZ2UgZGljdGlvbmFyeSBraWRzIG9iamVjdCBpcyBub3QgYW4gYXJyYXkuIikpO2JyZWFrfWlmKHI+PXMubGVuZ3RoKXtpLnBvcCgpO2NvbnRpbnVlfWNvbnN0IG89c1tyXTtsZXQgZztpZihvIGluc3RhbmNlb2YgUmVmKXtpZihhLmhhcyhvKSl7YWRkUGFnZUVycm9yKG5ldyBGb3JtYXRFcnJvcigiUGFnZXMgdHJlZSBjb250YWlucyBjaXJjdWxhciByZWZlcmVuY2UuIikpO2JyZWFrfWEucHV0KG8pO3RyeXtnPWF3YWl0IG4uZmV0Y2hBc3luYyhvKX1jYXRjaChlKXthZGRQYWdlRXJyb3IoZSk7YnJlYWt9fWVsc2UgZz1vO2lmKCEoZyBpbnN0YW5jZW9mIERpY3QpKXthZGRQYWdlRXJyb3IobmV3IEZvcm1hdEVycm9yKCJQYWdlIGRpY3Rpb25hcnkga2lkIHJlZmVyZW5jZSBwb2ludHMgdG8gd3JvbmcgdHlwZSBvZiBvYmplY3QuIikpO2JyZWFrfWxldCBjPWcuZ2V0UmF3KCJUeXBlIik7aWYoYyBpbnN0YW5jZW9mIFJlZil0cnl7Yz1hd2FpdCBuLmZldGNoQXN5bmMoYyl9Y2F0Y2goZSl7YWRkUGFnZUVycm9yKGUpO2JyZWFrfWlzTmFtZShjLCJQYWdlIil8fCFnLmhhcygiS2lkcyIpP2FkZFBhZ2VEaWN0KGcsbyBpbnN0YW5jZW9mIFJlZj9vOm51bGwpOmkucHVzaCh7Y3VycmVudE5vZGU6Zyxwb3NJbktpZHM6MH0pO2UucG9zSW5LaWRzKyt9cmV0dXJuIHN9Z2V0UGFnZUluZGV4KGUpe2NvbnN0IHQ9dGhpcy5wYWdlSW5kZXhDYWNoZS5nZXQoZSk7aWYodm9pZCAwIT09dClyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHQpO2NvbnN0IGk9dGhpcy54cmVmO2xldCBhPTA7Y29uc3QgbmV4dD10PT5mdW5jdGlvbiBwYWdlc0JlZm9yZVJlZih0KXtsZXQgYSxyPTA7cmV0dXJuIGkuZmV0Y2hBc3luYyh0KS50aGVuKChmdW5jdGlvbihpKXtpZihpc1JlZnNFcXVhbCh0LGUpJiYhaXNEaWN0KGksIlBhZ2UiKSYmIShpIGluc3RhbmNlb2YgRGljdCYmIWkuaGFzKCJUeXBlIikmJmkuaGFzKCJDb250ZW50cyIpKSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIlRoZSByZWZlcmVuY2UgZG9lcyBub3QgcG9pbnQgdG8gYSAvUGFnZSBkaWN0aW9uYXJ5LiIpO2lmKCFpKXJldHVybiBudWxsO2lmKCEoaSBpbnN0YW5jZW9mIERpY3QpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiTm9kZSBtdXN0IGJlIGEgZGljdGlvbmFyeS4iKTthPWkuZ2V0UmF3KCJQYXJlbnQiKTtyZXR1cm4gaS5nZXRBc3luYygiUGFyZW50Iil9KSkudGhlbigoZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuIG51bGw7aWYoIShlIGluc3RhbmNlb2YgRGljdCkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJQYXJlbnQgbXVzdCBiZSBhIGRpY3Rpb25hcnkuIik7cmV0dXJuIGUuZ2V0QXN5bmMoIktpZHMiKX0pKS50aGVuKChmdW5jdGlvbihlKXtpZighZSlyZXR1cm4gbnVsbDtjb25zdCBzPVtdO2xldCBuPSExO2Zvcihjb25zdCBhIG9mIGUpe2lmKCEoYSBpbnN0YW5jZW9mIFJlZikpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJLaWQgbXVzdCBiZSBhIHJlZmVyZW5jZS4iKTtpZihpc1JlZnNFcXVhbChhLHQpKXtuPSEwO2JyZWFrfXMucHVzaChpLmZldGNoQXN5bmMoYSkudGhlbigoZnVuY3Rpb24oZSl7aWYoIShlIGluc3RhbmNlb2YgRGljdCkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJLaWQgbm9kZSBtdXN0IGJlIGEgZGljdGlvbmFyeS4iKTtlLmhhcygiQ291bnQiKT9yKz1lLmdldCgiQ291bnQiKTpyKyt9KSkpfWlmKCFuKXRocm93IG5ldyBGb3JtYXRFcnJvcigiS2lkIHJlZmVyZW5jZSBub3QgZm91bmQgaW4gcGFyZW50J3Mga2lkcy4iKTtyZXR1cm4gUHJvbWlzZS5hbGwocykudGhlbigoZnVuY3Rpb24oKXtyZXR1cm5bcixhXX0pKX0pKX0odCkudGhlbigodD0+e2lmKCF0KXt0aGlzLnBhZ2VJbmRleENhY2hlLnB1dChlLGEpO3JldHVybiBhfWNvbnN0W2kscl09dDthKz1pO3JldHVybiBuZXh0KHIpfSkpO3JldHVybiBuZXh0KGUpfWdldCBiYXNlVXJsKCl7Y29uc3QgZT10aGlzLl9jYXREaWN0LmdldCgiVVJJIik7aWYoZSBpbnN0YW5jZW9mIERpY3Qpe2NvbnN0IHQ9ZS5nZXQoIkJhc2UiKTtpZigic3RyaW5nIj09dHlwZW9mIHQpe2NvbnN0IGU9Y3JlYXRlVmFsaWRBYnNvbHV0ZVVybCh0LG51bGwse3RyeUNvbnZlcnRFbmNvZGluZzohMH0pO2lmKGUpcmV0dXJuIHNoYWRvdyh0aGlzLCJiYXNlVXJsIixlLmhyZWYpfX1yZXR1cm4gc2hhZG93KHRoaXMsImJhc2VVcmwiLHRoaXMucGRmTWFuYWdlci5kb2NCYXNlVXJsKX1zdGF0aWMgcGFyc2VEZXN0RGljdGlvbmFyeSh7ZGVzdERpY3Q6ZSxyZXN1bHRPYmo6dCxkb2NCYXNlVXJsOmk9bnVsbCxkb2NBdHRhY2htZW50czphPW51bGx9KXtpZighKGUgaW5zdGFuY2VvZiBEaWN0KSl7d2FybigicGFyc2VEZXN0RGljdGlvbmFyeTogYGRlc3REaWN0YCBtdXN0IGJlIGEgZGljdGlvbmFyeS4iKTtyZXR1cm59bGV0IHIscyxuPWUuZ2V0KCJBIik7aWYoIShuIGluc3RhbmNlb2YgRGljdCkpaWYoZS5oYXMoIkRlc3QiKSluPWUuZ2V0KCJEZXN0Iik7ZWxzZXtuPWUuZ2V0KCJBQSIpO24gaW5zdGFuY2VvZiBEaWN0JiYobi5oYXMoIkQiKT9uPW4uZ2V0KCJEIik6bi5oYXMoIlUiKSYmKG49bi5nZXQoIlUiKSkpfWlmKG4gaW5zdGFuY2VvZiBEaWN0KXtjb25zdCBlPW4uZ2V0KCJTIik7aWYoIShlIGluc3RhbmNlb2YgTmFtZSkpe3dhcm4oInBhcnNlRGVzdERpY3Rpb25hcnk6IEludmFsaWQgdHlwZSBpbiBBY3Rpb24gZGljdGlvbmFyeS4iKTtyZXR1cm59Y29uc3QgaT1lLm5hbWU7c3dpdGNoKGkpe2Nhc2UiUmVzZXRGb3JtIjpjb25zdCBlPW4uZ2V0KCJGbGFncyIpLG89ISgxJigibnVtYmVyIj09dHlwZW9mIGU/ZTowKSksZz1bXSxjPVtdO2Zvcihjb25zdCBlIG9mIG4uZ2V0KCJGaWVsZHMiKXx8W10pZSBpbnN0YW5jZW9mIFJlZj9jLnB1c2goZS50b1N0cmluZygpKToic3RyaW5nIj09dHlwZW9mIGUmJmcucHVzaChzdHJpbmdUb1BERlN0cmluZyhlKSk7dC5yZXNldEZvcm09e2ZpZWxkczpnLHJlZnM6YyxpbmNsdWRlOm99O2JyZWFrO2Nhc2UiVVJJIjpyPW4uZ2V0KCJVUkkiKTtyIGluc3RhbmNlb2YgTmFtZSYmKHI9Ii8iK3IubmFtZSk7YnJlYWs7Y2FzZSJHb1RvIjpzPW4uZ2V0KCJEIik7YnJlYWs7Y2FzZSJMYXVuY2giOmNhc2UiR29Ub1IiOmNvbnN0IGw9bi5nZXQoIkYiKTtpZihsIGluc3RhbmNlb2YgRGljdCl7Y29uc3QgZT1uZXcgRmlsZVNwZWMobCxudWxsLCEwKSx7cmF3RmlsZW5hbWU6dH09ZS5zZXJpYWxpemFibGU7cj10fWVsc2Uic3RyaW5nIj09dHlwZW9mIGwmJihyPWwpO2NvbnN0IGg9ZmV0Y2hSZW1vdGVEZXN0KG4pO2gmJiJzdHJpbmciPT10eXBlb2YgciYmKHI9ci5zcGxpdCgiIyIsMSlbMF0rIiMiK2gpO2NvbnN0IEM9bi5nZXQoIk5ld1dpbmRvdyIpOyJib29sZWFuIj09dHlwZW9mIEMmJih0Lm5ld1dpbmRvdz1DKTticmVhaztjYXNlIkdvVG9FIjpjb25zdCBRPW4uZ2V0KCJUIik7bGV0IEU7aWYoYSYmUSBpbnN0YW5jZW9mIERpY3Qpe2NvbnN0IGU9US5nZXQoIlIiKSx0PVEuZ2V0KCJOIik7aXNOYW1lKGUsIkMiKSYmInN0cmluZyI9PXR5cGVvZiB0JiYoRT1hW3N0cmluZ1RvUERGU3RyaW5nKHQpXSl9aWYoRSl7dC5hdHRhY2htZW50PUU7Y29uc3QgZT1mZXRjaFJlbW90ZURlc3Qobik7ZSYmKHQuYXR0YWNobWVudERlc3Q9ZSl9ZWxzZSB3YXJuKCdwYXJzZURlc3REaWN0aW9uYXJ5IC0gdW5pbXBsZW1lbnRlZCAiR29Ub0UiIGFjdGlvbi4nKTticmVhaztjYXNlIk5hbWVkIjpjb25zdCB1PW4uZ2V0KCJOIik7dSBpbnN0YW5jZW9mIE5hbWUmJih0LmFjdGlvbj11Lm5hbWUpO2JyZWFrO2Nhc2UiU2V0T0NHU3RhdGUiOmNvbnN0IGQ9bi5nZXQoIlN0YXRlIiksZj1uLmdldCgiUHJlc2VydmVSQiIpO2lmKCFBcnJheS5pc0FycmF5KGQpfHwwPT09ZC5sZW5ndGgpYnJlYWs7Y29uc3QgcD1bXTtmb3IoY29uc3QgZSBvZiBkKWlmKGUgaW5zdGFuY2VvZiBOYW1lKXN3aXRjaChlLm5hbWUpe2Nhc2UiT04iOmNhc2UiT0ZGIjpjYXNlIlRvZ2dsZSI6cC5wdXNoKGUubmFtZSl9ZWxzZSBlIGluc3RhbmNlb2YgUmVmJiZwLnB1c2goZS50b1N0cmluZygpKTtpZihwLmxlbmd0aCE9PWQubGVuZ3RoKWJyZWFrO3Quc2V0T0NHU3RhdGU9e3N0YXRlOnAscHJlc2VydmVSQjoiYm9vbGVhbiIhPXR5cGVvZiBmfHxmfTticmVhaztjYXNlIkphdmFTY3JpcHQiOmNvbnN0IG09bi5nZXQoIkpTIik7bGV0IHk7bSBpbnN0YW5jZW9mIEJhc2VTdHJlYW0/eT1tLmdldFN0cmluZygpOiJzdHJpbmciPT10eXBlb2YgbSYmKHk9bSk7Y29uc3Qgdz15JiZyZWNvdmVySnNVUkwoc3RyaW5nVG9QREZTdHJpbmcoeSkpO2lmKHcpe3I9dy51cmw7dC5uZXdXaW5kb3c9dy5uZXdXaW5kb3c7YnJlYWt9ZGVmYXVsdDppZigiSmF2YVNjcmlwdCI9PT1pfHwiU3VibWl0Rm9ybSI9PT1pKWJyZWFrO3dhcm4oYHBhcnNlRGVzdERpY3Rpb25hcnkgLSB1bnN1cHBvcnRlZCBhY3Rpb246ICIke2l9Ii5gKX19ZWxzZSBlLmhhcygiRGVzdCIpJiYocz1lLmdldCgiRGVzdCIpKTtpZigic3RyaW5nIj09dHlwZW9mIHIpe2NvbnN0IGU9Y3JlYXRlVmFsaWRBYnNvbHV0ZVVybChyLGkse2FkZERlZmF1bHRQcm90b2NvbDohMCx0cnlDb252ZXJ0RW5jb2Rpbmc6ITB9KTtlJiYodC51cmw9ZS5ocmVmKTt0LnVuc2FmZVVybD1yfWlmKHMpe3MgaW5zdGFuY2VvZiBOYW1lJiYocz1zLm5hbWUpOyJzdHJpbmciPT10eXBlb2Ygcz90LmRlc3Q9c3RyaW5nVG9QREZTdHJpbmcocyk6aXNWYWxpZEV4cGxpY2l0RGVzdChzKSYmKHQuZGVzdD1zKX19fWZ1bmN0aW9uIGFkZENoaWxkcmVuKGUsdCl7aWYoZSBpbnN0YW5jZW9mIERpY3QpZT1lLmdldFJhd1ZhbHVlcygpO2Vsc2UgaWYoZSBpbnN0YW5jZW9mIEJhc2VTdHJlYW0pZT1lLmRpY3QuZ2V0UmF3VmFsdWVzKCk7ZWxzZSBpZighQXJyYXkuaXNBcnJheShlKSlyZXR1cm47Zm9yKGNvbnN0IGEgb2YgZSkoKGk9YSlpbnN0YW5jZW9mIFJlZnx8aSBpbnN0YW5jZW9mIERpY3R8fGkgaW5zdGFuY2VvZiBCYXNlU3RyZWFtfHxBcnJheS5pc0FycmF5KGkpKSYmdC5wdXNoKGEpO3ZhciBpfWNsYXNzIE9iamVjdExvYWRlcntjb25zdHJ1Y3RvcihlLHQsaSl7dGhpcy5kaWN0PWU7dGhpcy5rZXlzPXQ7dGhpcy54cmVmPWk7dGhpcy5yZWZTZXQ9bnVsbH1hc3luYyBsb2FkKCl7aWYodGhpcy54cmVmLnN0cmVhbS5pc0RhdGFMb2FkZWQpcmV0dXJuO2NvbnN0e2tleXM6ZSxkaWN0OnR9PXRoaXM7dGhpcy5yZWZTZXQ9bmV3IFJlZlNldDtjb25zdCBpPVtdO2Zvcihjb25zdCBhIG9mIGUpe2NvbnN0IGU9dC5nZXRSYXcoYSk7dm9pZCAwIT09ZSYmaS5wdXNoKGUpfXJldHVybiB0aGlzLl93YWxrKGkpfWFzeW5jIF93YWxrKGUpe2NvbnN0IHQ9W10saT1bXTtmb3IoO2UubGVuZ3RoOyl7bGV0IGE9ZS5wb3AoKTtpZihhIGluc3RhbmNlb2YgUmVmKXtpZih0aGlzLnJlZlNldC5oYXMoYSkpY29udGludWU7dHJ5e3RoaXMucmVmU2V0LnB1dChhKTthPXRoaXMueHJlZi5mZXRjaChhKX1jYXRjaChlKXtpZighKGUgaW5zdGFuY2VvZiBNaXNzaW5nRGF0YUV4Y2VwdGlvbikpe3dhcm4oYE9iamVjdExvYWRlci5fd2FsayAtIHJlcXVlc3RpbmcgYWxsIGRhdGE6ICIke2V9Ii5gKTt0aGlzLnJlZlNldD1udWxsO2NvbnN0e21hbmFnZXI6dH09dGhpcy54cmVmLnN0cmVhbTtyZXR1cm4gdC5yZXF1ZXN0QWxsQ2h1bmtzKCl9dC5wdXNoKGEpO2kucHVzaCh7YmVnaW46ZS5iZWdpbixlbmQ6ZS5lbmR9KX19aWYoYSBpbnN0YW5jZW9mIEJhc2VTdHJlYW0pe2NvbnN0IGU9YS5nZXRCYXNlU3RyZWFtcygpO2lmKGUpe2xldCByPSExO2Zvcihjb25zdCB0IG9mIGUpaWYoIXQuaXNEYXRhTG9hZGVkKXtyPSEwO2kucHVzaCh7YmVnaW46dC5zdGFydCxlbmQ6dC5lbmR9KX1yJiZ0LnB1c2goYSl9fWFkZENoaWxkcmVuKGEsZSl9aWYoaS5sZW5ndGgpe2F3YWl0IHRoaXMueHJlZi5zdHJlYW0ubWFuYWdlci5yZXF1ZXN0UmFuZ2VzKGkpO2Zvcihjb25zdCBlIG9mIHQpZSBpbnN0YW5jZW9mIFJlZiYmdGhpcy5yZWZTZXQucmVtb3ZlKGUpO3JldHVybiB0aGlzLl93YWxrKHQpfXRoaXMucmVmU2V0PW51bGx9fWNvbnN0IEpyPVN5bWJvbCgpLHZyPVN5bWJvbCgpLFlyPVN5bWJvbCgpLEtyPVN5bWJvbCgpLFRyPVN5bWJvbCgpLHFyPVN5bWJvbCgpLE9yPVN5bWJvbCgpLFByPVN5bWJvbCgpLFdyPVN5bWJvbCgpLGpyPVN5bWJvbCgiY29udGVudCIpLFhyPVN5bWJvbCgiZGF0YSIpLFZyPVN5bWJvbCgpLFpyPVN5bWJvbCgiZXh0cmEiKSxfcj1TeW1ib2woKSx6cj1TeW1ib2woKSwkcj1TeW1ib2woKSxBcz1TeW1ib2woKSxlcz1TeW1ib2woKSx0cz1TeW1ib2woKSxpcz1TeW1ib2woKSxhcz1TeW1ib2woKSxycz1TeW1ib2woKSxzcz1TeW1ib2woKSxucz1TeW1ib2woKSxvcz1TeW1ib2woKSxncz1TeW1ib2woKSxJcz1TeW1ib2woKSxjcz1TeW1ib2woKSxscz1TeW1ib2woKSxocz1TeW1ib2woKSxDcz1TeW1ib2woKSxCcz1TeW1ib2woKSxRcz1TeW1ib2woKSxFcz1TeW1ib2woKSx1cz1TeW1ib2woKSxkcz1TeW1ib2woKSxmcz1TeW1ib2woKSxwcz1TeW1ib2woKSxtcz1TeW1ib2woKSx5cz1TeW1ib2woKSx3cz1TeW1ib2woKSxicz1TeW1ib2woKSxEcz1TeW1ib2woKSxGcz1TeW1ib2woKSxTcz1TeW1ib2woKSxrcz1TeW1ib2woIm5hbWVzcGFjZUlkIiksUnM9U3ltYm9sKCJub2RlTmFtZSIpLE5zPVN5bWJvbCgpLEdzPVN5bWJvbCgpLE1zPVN5bWJvbCgpLFVzPVN5bWJvbCgpLHhzPVN5bWJvbCgpLExzPVN5bWJvbCgpLEhzPVN5bWJvbCgpLEpzPVN5bWJvbCgpLHZzPVN5bWJvbCgicm9vdCIpLFlzPVN5bWJvbCgpLEtzPVN5bWJvbCgpLFRzPVN5bWJvbCgpLHFzPVN5bWJvbCgpLE9zPVN5bWJvbCgpLFdzPVN5bWJvbCgpLGpzPVN5bWJvbCgpLFhzPVN5bWJvbCgpLFZzPVN5bWJvbCgpLFpzPVN5bWJvbCgpLF9zPVN5bWJvbCgpLHpzPVN5bWJvbCgidWlkIiksJHM9U3ltYm9sKCksQW49e2NvbmZpZzp7aWQ6MCxjaGVjazplPT5lLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGNpLyIpfSxjb25uZWN0aW9uU2V0OntpZDoxLGNoZWNrOmU9PmUuc3RhcnRzV2l0aCgiaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94ZmEtY29ubmVjdGlvbi1zZXQvIil9LGRhdGFzZXRzOntpZDoyLGNoZWNrOmU9PmUuc3RhcnRzV2l0aCgiaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94ZmEtZGF0YS8iKX0sZm9ybTp7aWQ6MyxjaGVjazplPT5lLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLWZvcm0vIil9LGxvY2FsZVNldDp7aWQ6NCxjaGVjazplPT5lLnN0YXJ0c1dpdGgoImh0dHA6Ly93d3cueGZhLm9yZy9zY2hlbWEveGZhLWxvY2FsZS1zZXQvIil9LHBkZjp7aWQ6NSxjaGVjazplPT4iaHR0cDovL25zLmFkb2JlLmNvbS94ZHAvcGRmLyI9PT1lfSxzaWduYXR1cmU6e2lkOjYsY2hlY2s6ZT0+Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMiPT09ZX0sc291cmNlU2V0OntpZDo3LGNoZWNrOmU9PmUuc3RhcnRzV2l0aCgiaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94ZmEtc291cmNlLXNldC8iKX0sc3R5bGVzaGVldDp7aWQ6OCxjaGVjazplPT4iaHR0cDovL3d3dy53My5vcmcvMTk5OS9YU0wvVHJhbnNmb3JtIj09PWV9LHRlbXBsYXRlOntpZDo5LGNoZWNrOmU9PmUuc3RhcnRzV2l0aCgiaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94ZmEtdGVtcGxhdGUvIil9LHhkYzp7aWQ6MTAsY2hlY2s6ZT0+ZS5zdGFydHNXaXRoKCJodHRwOi8vd3d3LnhmYS5vcmcvc2NoZW1hL3hkYy8iKX0seGRwOntpZDoxMSxjaGVjazplPT4iaHR0cDovL25zLmFkb2JlLmNvbS94ZHAvIj09PWV9LHhmZGY6e2lkOjEyLGNoZWNrOmU9PiJodHRwOi8vbnMuYWRvYmUuY29tL3hmZGYvIj09PWV9LHhodG1sOntpZDoxMyxjaGVjazplPT4iaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI9PT1lfSx4bXBtZXRhOntpZDoxNCxjaGVjazplPT4iaHR0cDovL25zLmFkb2JlLmNvbS94bXBtZXRhLyI9PT1lfX0sZW49e3B0OmU9PmUsY206ZT0+ZS8yLjU0KjcyLG1tOmU9PmUvMjUuNCo3MixpbjplPT43MiplLHB4OmU9PmV9LHRuPS8oWystXT9cZCtcLj9cZCopKC4qKS87ZnVuY3Rpb24gc3RyaXBRdW90ZXMoZSl7cmV0dXJuIGUuc3RhcnRzV2l0aCgiJyIpfHxlLnN0YXJ0c1dpdGgoJyInKT9lLnNsaWNlKDEsLTEpOmV9ZnVuY3Rpb24gZ2V0SW50ZWdlcih7ZGF0YTplLGRlZmF1bHRWYWx1ZTp0LHZhbGlkYXRlOml9KXtpZighZSlyZXR1cm4gdDtlPWUudHJpbSgpO2NvbnN0IGE9cGFyc2VJbnQoZSwxMCk7cmV0dXJuIWlzTmFOKGEpJiZpKGEpP2E6dH1mdW5jdGlvbiBnZXRGbG9hdCh7ZGF0YTplLGRlZmF1bHRWYWx1ZTp0LHZhbGlkYXRlOml9KXtpZighZSlyZXR1cm4gdDtlPWUudHJpbSgpO2NvbnN0IGE9cGFyc2VGbG9hdChlKTtyZXR1cm4haXNOYU4oYSkmJmkoYSk/YTp0fWZ1bmN0aW9uIGdldEtleXdvcmQoe2RhdGE6ZSxkZWZhdWx0VmFsdWU6dCx2YWxpZGF0ZTppfSl7cmV0dXJuIGUmJmkoZT1lLnRyaW0oKSk/ZTp0fWZ1bmN0aW9uIGdldFN0cmluZ09wdGlvbihlLHQpe3JldHVybiBnZXRLZXl3b3JkKHtkYXRhOmUsZGVmYXVsdFZhbHVlOnRbMF0sdmFsaWRhdGU6ZT0+dC5pbmNsdWRlcyhlKX0pfWZ1bmN0aW9uIGdldE1lYXN1cmVtZW50KGUsdD0iMCIpe3R8fD0iMCI7aWYoIWUpcmV0dXJuIGdldE1lYXN1cmVtZW50KHQpO2NvbnN0IGk9ZS50cmltKCkubWF0Y2godG4pO2lmKCFpKXJldHVybiBnZXRNZWFzdXJlbWVudCh0KTtjb25zdFssYSxyXT1pLHM9cGFyc2VGbG9hdChhKTtpZihpc05hTihzKSlyZXR1cm4gZ2V0TWVhc3VyZW1lbnQodCk7aWYoMD09PXMpcmV0dXJuIDA7Y29uc3Qgbj1lbltyXTtyZXR1cm4gbj9uKHMpOnN9ZnVuY3Rpb24gZ2V0UmF0aW8oZSl7aWYoIWUpcmV0dXJue251bToxLGRlbjoxfTtjb25zdCB0PWUudHJpbSgpLnNwbGl0KC9ccyo6XHMqLykubWFwKChlPT5wYXJzZUZsb2F0KGUpKSkuZmlsdGVyKChlPT4haXNOYU4oZSkpKTsxPT09dC5sZW5ndGgmJnQucHVzaCgxKTtpZigwPT09dC5sZW5ndGgpcmV0dXJue251bToxLGRlbjoxfTtjb25zdFtpLGFdPXQ7cmV0dXJue251bTppLGRlbjphfX1mdW5jdGlvbiBnZXRSZWxldmFudChlKXtyZXR1cm4gZT9lLnRyaW0oKS5zcGxpdCgvXHMrLykubWFwKChlPT4oe2V4Y2x1ZGVkOiItIj09PWVbMF0sdmlld25hbWU6ZS5zdWJzdHJpbmcoMSl9KSkpOltdfWNsYXNzIEhUTUxSZXN1bHR7c3RhdGljIGdldCBGQUlMVVJFKCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJGQUlMVVJFIixuZXcgSFRNTFJlc3VsdCghMSxudWxsLG51bGwsbnVsbCkpfXN0YXRpYyBnZXQgRU1QVFkoKXtyZXR1cm4gc2hhZG93KHRoaXMsIkVNUFRZIixuZXcgSFRNTFJlc3VsdCghMCxudWxsLG51bGwsbnVsbCkpfWNvbnN0cnVjdG9yKGUsdCxpLGEpe3RoaXMuc3VjY2Vzcz1lO3RoaXMuaHRtbD10O3RoaXMuYmJveD1pO3RoaXMuYnJlYWtOb2RlPWF9aXNCcmVhaygpe3JldHVybiEhdGhpcy5icmVha05vZGV9c3RhdGljIGJyZWFrTm9kZShlKXtyZXR1cm4gbmV3IEhUTUxSZXN1bHQoITEsbnVsbCxudWxsLGUpfXN0YXRpYyBzdWNjZXNzKGUsdD1udWxsKXtyZXR1cm4gbmV3IEhUTUxSZXN1bHQoITAsZSx0LG51bGwpfX1jbGFzcyBGb250RmluZGVye2NvbnN0cnVjdG9yKGUpe3RoaXMuZm9udHM9bmV3IE1hcDt0aGlzLmNhY2hlPW5ldyBNYXA7dGhpcy53YXJuZWQ9bmV3IFNldDt0aGlzLmRlZmF1bHRGb250PW51bGw7dGhpcy5hZGQoZSl9YWRkKGUsdD1udWxsKXtmb3IoY29uc3QgdCBvZiBlKXRoaXMuYWRkUGRmRm9udCh0KTtmb3IoY29uc3QgZSBvZiB0aGlzLmZvbnRzLnZhbHVlcygpKWUucmVndWxhcnx8KGUucmVndWxhcj1lLml0YWxpY3x8ZS5ib2xkfHxlLmJvbGRpdGFsaWMpO2lmKCF0fHwwPT09dC5zaXplKXJldHVybjtjb25zdCBpPXRoaXMuZm9udHMuZ2V0KCJQZGZKUy1GYWxsYmFjay1QZGZKUy1YRkEiKTtmb3IoY29uc3QgZSBvZiB0KXRoaXMuZm9udHMuc2V0KGUsaSl9YWRkUGRmRm9udChlKXtjb25zdCB0PWUuY3NzRm9udEluZm8saT10LmZvbnRGYW1pbHk7bGV0IGE9dGhpcy5mb250cy5nZXQoaSk7aWYoIWEpe2E9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzLmZvbnRzLnNldChpLGEpO3RoaXMuZGVmYXVsdEZvbnR8fCh0aGlzLmRlZmF1bHRGb250PWEpfWxldCByPSIiO2NvbnN0IHM9cGFyc2VGbG9hdCh0LmZvbnRXZWlnaHQpOzAhPT1wYXJzZUZsb2F0KHQuaXRhbGljQW5nbGUpP3I9cz49NzAwPyJib2xkaXRhbGljIjoiaXRhbGljIjpzPj03MDAmJihyPSJib2xkIik7aWYoIXIpeyhlLm5hbWUuaW5jbHVkZXMoIkJvbGQiKXx8ZS5wc05hbWU/LmluY2x1ZGVzKCJCb2xkIikpJiYocj0iYm9sZCIpOyhlLm5hbWUuaW5jbHVkZXMoIkl0YWxpYyIpfHxlLm5hbWUuZW5kc1dpdGgoIkl0Iil8fGUucHNOYW1lPy5pbmNsdWRlcygiSXRhbGljIil8fGUucHNOYW1lPy5lbmRzV2l0aCgiSXQiKSkmJihyKz0iaXRhbGljIil9cnx8KHI9InJlZ3VsYXIiKTthW3JdPWV9Z2V0RGVmYXVsdCgpe3JldHVybiB0aGlzLmRlZmF1bHRGb250fWZpbmQoZSx0PSEwKXtsZXQgaT10aGlzLmZvbnRzLmdldChlKXx8dGhpcy5jYWNoZS5nZXQoZSk7aWYoaSlyZXR1cm4gaTtjb25zdCBhPS8sfC18X3wgfGJvbGRpdGFsaWN8Ym9sZHxpdGFsaWN8cmVndWxhcnxpdC9naTtsZXQgcj1lLnJlcGxhY2VBbGwoYSwiIik7aT10aGlzLmZvbnRzLmdldChyKTtpZihpKXt0aGlzLmNhY2hlLnNldChlLGkpO3JldHVybiBpfXI9ci50b0xvd2VyQ2FzZSgpO2NvbnN0IHM9W107Zm9yKGNvbnN0W2UsdF1vZiB0aGlzLmZvbnRzLmVudHJpZXMoKSllLnJlcGxhY2VBbGwoYSwiIikudG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKHIpJiZzLnB1c2godCk7aWYoMD09PXMubGVuZ3RoKWZvcihjb25zdFssZV1vZiB0aGlzLmZvbnRzLmVudHJpZXMoKSllLnJlZ3VsYXIubmFtZT8ucmVwbGFjZUFsbChhLCIiKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgocikmJnMucHVzaChlKTtpZigwPT09cy5sZW5ndGgpe3I9ci5yZXBsYWNlQWxsKC9wc210fG10L2dpLCIiKTtmb3IoY29uc3RbZSx0XW9mIHRoaXMuZm9udHMuZW50cmllcygpKWUucmVwbGFjZUFsbChhLCIiKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgocikmJnMucHVzaCh0KX1pZigwPT09cy5sZW5ndGgpZm9yKGNvbnN0IGUgb2YgdGhpcy5mb250cy52YWx1ZXMoKSllLnJlZ3VsYXIubmFtZT8ucmVwbGFjZUFsbChhLCIiKS50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgocikmJnMucHVzaChlKTtpZihzLmxlbmd0aD49MSl7MSE9PXMubGVuZ3RoJiZ0JiZ3YXJuKGBYRkEgLSBUb28gbWFueSBjaG9pY2VzIHRvIGd1ZXNzIHRoZSBjb3JyZWN0IGZvbnQ6ICR7ZX1gKTt0aGlzLmNhY2hlLnNldChlLHNbMF0pO3JldHVybiBzWzBdfWlmKHQmJiF0aGlzLndhcm5lZC5oYXMoZSkpe3RoaXMud2FybmVkLmFkZChlKTt3YXJuKGBYRkEgLSBDYW5ub3QgZmluZCB0aGUgZm9udDogJHtlfWApfXJldHVybiBudWxsfX1mdW5jdGlvbiBzZWxlY3RGb250KGUsdCl7cmV0dXJuIml0YWxpYyI9PT1lLnBvc3R1cmU/ImJvbGQiPT09ZS53ZWlnaHQ/dC5ib2xkaXRhbGljOnQuaXRhbGljOiJib2xkIj09PWUud2VpZ2h0P3QuYm9sZDp0LnJlZ3VsYXJ9Y2xhc3MgRm9udEluZm97Y29uc3RydWN0b3IoZSx0LGksYSl7dGhpcy5saW5lSGVpZ2h0PWk7dGhpcy5wYXJhTWFyZ2luPXR8fHt0b3A6MCxib3R0b206MCxsZWZ0OjAscmlnaHQ6MH07aWYoIWUpe1t0aGlzLnBkZkZvbnQsdGhpcy54ZmFGb250XT10aGlzLmRlZmF1bHRGb250KGEpO3JldHVybn10aGlzLnhmYUZvbnQ9e3R5cGVmYWNlOmUudHlwZWZhY2UscG9zdHVyZTplLnBvc3R1cmUsd2VpZ2h0OmUud2VpZ2h0LHNpemU6ZS5zaXplLGxldHRlclNwYWNpbmc6ZS5sZXR0ZXJTcGFjaW5nfTtjb25zdCByPWEuZmluZChlLnR5cGVmYWNlKTtpZihyKXt0aGlzLnBkZkZvbnQ9c2VsZWN0Rm9udChlLHIpO3RoaXMucGRmRm9udHx8KFt0aGlzLnBkZkZvbnQsdGhpcy54ZmFGb250XT10aGlzLmRlZmF1bHRGb250KGEpKX1lbHNlW3RoaXMucGRmRm9udCx0aGlzLnhmYUZvbnRdPXRoaXMuZGVmYXVsdEZvbnQoYSl9ZGVmYXVsdEZvbnQoZSl7Y29uc3QgdD1lLmZpbmQoIkhlbHZldGljYSIsITEpfHxlLmZpbmQoIk15cmlhZCBQcm8iLCExKXx8ZS5maW5kKCJBcmlhbCIsITEpfHxlLmdldERlZmF1bHQoKTtpZih0Py5yZWd1bGFyKXtjb25zdCBlPXQucmVndWxhcjtyZXR1cm5bZSx7dHlwZWZhY2U6ZS5jc3NGb250SW5mby5mb250RmFtaWx5LHBvc3R1cmU6Im5vcm1hbCIsd2VpZ2h0OiJub3JtYWwiLHNpemU6MTAsbGV0dGVyU3BhY2luZzowfV19cmV0dXJuW251bGwse3R5cGVmYWNlOiJDb3VyaWVyIixwb3N0dXJlOiJub3JtYWwiLHdlaWdodDoibm9ybWFsIixzaXplOjEwLGxldHRlclNwYWNpbmc6MH1dfX1jbGFzcyBGb250U2VsZWN0b3J7Y29uc3RydWN0b3IoZSx0LGksYSl7dGhpcy5mb250RmluZGVyPWE7dGhpcy5zdGFjaz1bbmV3IEZvbnRJbmZvKGUsdCxpLGEpXX1wdXNoRGF0YShlLHQsaSl7Y29uc3QgYT10aGlzLnN0YWNrLmF0KC0xKTtmb3IoY29uc3QgdCBvZlsidHlwZWZhY2UiLCJwb3N0dXJlIiwid2VpZ2h0Iiwic2l6ZSIsImxldHRlclNwYWNpbmciXSllW3RdfHwoZVt0XT1hLnhmYUZvbnRbdF0pO2Zvcihjb25zdCBlIG9mWyJ0b3AiLCJib3R0b20iLCJsZWZ0IiwicmlnaHQiXSlpc05hTih0W2VdKSYmKHRbZV09YS5wYXJhTWFyZ2luW2VdKTtjb25zdCByPW5ldyBGb250SW5mbyhlLHQsaXx8YS5saW5lSGVpZ2h0LHRoaXMuZm9udEZpbmRlcik7ci5wZGZGb250fHwoci5wZGZGb250PWEucGRmRm9udCk7dGhpcy5zdGFjay5wdXNoKHIpfXBvcEZvbnQoKXt0aGlzLnN0YWNrLnBvcCgpfXRvcEZvbnQoKXtyZXR1cm4gdGhpcy5zdGFjay5hdCgtMSl9fWNsYXNzIFRleHRNZWFzdXJle2NvbnN0cnVjdG9yKGUsdCxpLGEpe3RoaXMuZ2x5cGhzPVtdO3RoaXMuZm9udFNlbGVjdG9yPW5ldyBGb250U2VsZWN0b3IoZSx0LGksYSk7dGhpcy5leHRyYUhlaWdodD0wfXB1c2hEYXRhKGUsdCxpKXt0aGlzLmZvbnRTZWxlY3Rvci5wdXNoRGF0YShlLHQsaSl9cG9wRm9udChlKXtyZXR1cm4gdGhpcy5mb250U2VsZWN0b3IucG9wRm9udCgpfWFkZFBhcmEoKXtjb25zdCBlPXRoaXMuZm9udFNlbGVjdG9yLnRvcEZvbnQoKTt0aGlzLmV4dHJhSGVpZ2h0Kz1lLnBhcmFNYXJnaW4udG9wK2UucGFyYU1hcmdpbi5ib3R0b219YWRkU3RyaW5nKGUpe2lmKCFlKXJldHVybjtjb25zdCB0PXRoaXMuZm9udFNlbGVjdG9yLnRvcEZvbnQoKSxpPXQueGZhRm9udC5zaXplO2lmKHQucGRmRm9udCl7Y29uc3QgYT10LnhmYUZvbnQubGV0dGVyU3BhY2luZyxyPXQucGRmRm9udCxzPXIubGluZUhlaWdodHx8MS4yLG49dC5saW5lSGVpZ2h0fHxNYXRoLm1heCgxLjIscykqaSxvPXMtKHZvaWQgMD09PXIubGluZUdhcD8uMjpyLmxpbmVHYXApLGc9TWF0aC5tYXgoMSxvKSppLGM9aS8xZTMsbD1yLmRlZmF1bHRXaWR0aHx8ci5jaGFyc1RvR2x5cGhzKCIgIilbMF0ud2lkdGg7Zm9yKGNvbnN0IHQgb2YgZS5zcGxpdCgvW1x1MjAyOVxuXS8pKXtjb25zdCBlPXIuZW5jb2RlU3RyaW5nKHQpLmpvaW4oIiIpLGk9ci5jaGFyc1RvR2x5cGhzKGUpO2Zvcihjb25zdCBlIG9mIGkpe2NvbnN0IHQ9ZS53aWR0aHx8bDt0aGlzLmdseXBocy5wdXNoKFt0KmMrYSxuLGcsZS51bmljb2RlLCExXSl9dGhpcy5nbHlwaHMucHVzaChbMCwwLDAsIlxuIiwhMF0pfXRoaXMuZ2x5cGhzLnBvcCgpfWVsc2V7Zm9yKGNvbnN0IHQgb2YgZS5zcGxpdCgvW1x1MjAyOVxuXS8pKXtmb3IoY29uc3QgZSBvZiB0LnNwbGl0KCIiKSl0aGlzLmdseXBocy5wdXNoKFtpLDEuMippLGksZSwhMV0pO3RoaXMuZ2x5cGhzLnB1c2goWzAsMCwwLCJcbiIsITBdKX10aGlzLmdseXBocy5wb3AoKX19Y29tcHV0ZShlKXtsZXQgdD0tMSxpPTAsYT0wLHI9MCxzPTAsbj0wLG89ITEsZz0hMDtmb3IobGV0IGM9MCxsPXRoaXMuZ2x5cGhzLmxlbmd0aDtjPGw7YysrKXtjb25zdFtsLGgsQyxRLEVdPXRoaXMuZ2x5cGhzW2NdLHU9IiAiPT09USxkPWc/QzpoO2lmKEUpe2E9TWF0aC5tYXgoYSxzKTtzPTA7cis9bjtuPWQ7dD0tMTtpPTA7Zz0hMX1lbHNlIGlmKHUpaWYocytsPmUpe2E9TWF0aC5tYXgoYSxzKTtzPTA7cis9bjtuPWQ7dD0tMTtpPTA7bz0hMDtnPSExfWVsc2V7bj1NYXRoLm1heChkLG4pO2k9cztzKz1sO3Q9Y31lbHNlIGlmKHMrbD5lKXtyKz1uO249ZDtpZigtMSE9PXQpe2M9dDthPU1hdGgubWF4KGEsaSk7cz0wO3Q9LTE7aT0wfWVsc2V7YT1NYXRoLm1heChhLHMpO3M9bH1vPSEwO2c9ITF9ZWxzZXtzKz1sO249TWF0aC5tYXgoZCxuKX19YT1NYXRoLm1heChhLHMpO3IrPW4rdGhpcy5leHRyYUhlaWdodDtyZXR1cm57d2lkdGg6MS4wMiphLGhlaWdodDpyLGlzQnJva2VuOm99fX1jb25zdCBhbj0vXlteLltdKy8scm49L15bXlxdXSsvLHNuPTAsbm49MSxvbj0yLGduPTMsSW49NCxjbj1uZXcgTWFwKFtbIiRkYXRhIiwoZSx0KT0+ZS5kYXRhc2V0cz9lLmRhdGFzZXRzLmRhdGE6ZV0sWyIkcmVjb3JkIiwoZSx0KT0+KGUuZGF0YXNldHM/ZS5kYXRhc2V0cy5kYXRhOmUpW29zXSgpWzBdXSxbIiR0ZW1wbGF0ZSIsKGUsdCk9PmUudGVtcGxhdGVdLFsiJGNvbm5lY3Rpb25TZXQiLChlLHQpPT5lLmNvbm5lY3Rpb25TZXRdLFsiJGZvcm0iLChlLHQpPT5lLmZvcm1dLFsiJGxheW91dCIsKGUsdCk9PmUubGF5b3V0XSxbIiRob3N0IiwoZSx0KT0+ZS5ob3N0XSxbIiRkYXRhV2luZG93IiwoZSx0KT0+ZS5kYXRhV2luZG93XSxbIiRldmVudCIsKGUsdCk9PmUuZXZlbnRdLFsiISIsKGUsdCk9PmUuZGF0YXNldHNdLFsiJHhmYSIsKGUsdCk9PmVdLFsieGZhIiwoZSx0KT0+ZV0sWyIkIiwoZSx0KT0+dF1dKSxsbj1uZXcgV2Vha01hcDtmdW5jdGlvbiBwYXJzZUV4cHJlc3Npb24oZSx0LGk9ITApe2xldCBhPWUubWF0Y2goYW4pO2lmKCFhKXJldHVybiBudWxsO2xldFtyXT1hO2NvbnN0IHM9W3tuYW1lOnIsY2FjaGVOYW1lOiIuIityLGluZGV4OjAsanM6bnVsbCxmb3JtQ2FsYzpudWxsLG9wZXJhdG9yOnNufV07bGV0IG49ci5sZW5ndGg7Zm9yKDtuPGUubGVuZ3RoOyl7Y29uc3QgZz1uO2lmKCJbIj09PWUuY2hhckF0KG4rKykpe2E9ZS5zbGljZShuKS5tYXRjaChybik7aWYoIWEpe3dhcm4oIlhGQSAtIEludmFsaWQgaW5kZXggaW4gU09NIGV4cHJlc3Npb24iKTtyZXR1cm4gbnVsbH1zLmF0KC0xKS5pbmRleD0iKiI9PT0obz0obz1hWzBdKS50cmltKCkpPzEvMDpwYXJzZUludChvLDEwKXx8MDtuKz1hWzBdLmxlbmd0aCsxO2NvbnRpbnVlfWxldCBjO3N3aXRjaChlLmNoYXJBdChuKSl7Y2FzZSIuIjppZighdClyZXR1cm4gbnVsbDtuKys7Yz1ubjticmVhaztjYXNlIiMiOm4rKztjPW9uO2JyZWFrO2Nhc2UiWyI6aWYoaSl7d2FybigiWEZBIC0gU09NIGV4cHJlc3Npb24gY29udGFpbnMgYSBGb3JtQ2FsYyBzdWJleHByZXNzaW9uIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIG5vdy4iKTtyZXR1cm4gbnVsbH1jPWduO2JyZWFrO2Nhc2UiKCI6aWYoaSl7d2FybigiWEZBIC0gU09NIGV4cHJlc3Npb24gY29udGFpbnMgYSBKYXZhU2NyaXB0IHN1YmV4cHJlc3Npb24gd2hpY2ggaXMgbm90IHN1cHBvcnRlZCBmb3Igbm93LiIpO3JldHVybiBudWxsfWM9SW47YnJlYWs7ZGVmYXVsdDpjPXNufWE9ZS5zbGljZShuKS5tYXRjaChhbik7aWYoIWEpYnJlYWs7W3JdPWE7bis9ci5sZW5ndGg7cy5wdXNoKHtuYW1lOnIsY2FjaGVOYW1lOmUuc2xpY2UoZyxuKSxvcGVyYXRvcjpjLGluZGV4OjAsanM6bnVsbCxmb3JtQ2FsYzpudWxsfSl9dmFyIG87cmV0dXJuIHN9ZnVuY3Rpb24gc2VhcmNoTm9kZShlLHQsaSxhPSEwLHI9ITApe2NvbnN0IHM9cGFyc2VFeHByZXNzaW9uKGksYSk7aWYoIXMpcmV0dXJuIG51bGw7Y29uc3Qgbj1jbi5nZXQoc1swXS5uYW1lKTtsZXQgbyxnPTA7aWYobil7bz0hMDtlPVtuKGUsdCldO2c9MX1lbHNle289bnVsbD09PXQ7ZT1bdHx8ZV19Zm9yKGxldCBpPXMubGVuZ3RoO2c8aTtnKyspe2NvbnN0e25hbWU6aSxjYWNoZU5hbWU6YSxvcGVyYXRvcjpuLGluZGV4OmN9PXNbZ10sbD1bXTtmb3IoY29uc3QgdCBvZiBlKXtpZighdC5pc1hGQU9iamVjdCljb250aW51ZTtsZXQgZSxzO2lmKHIpe3M9bG4uZ2V0KHQpO2lmKCFzKXtzPW5ldyBNYXA7bG4uc2V0KHQscyl9ZT1zLmdldChhKX1pZighZSl7c3dpdGNoKG4pe2Nhc2Ugc246ZT10W2lzXShpLCExKTticmVhaztjYXNlIG5uOmU9dFtpc10oaSwhMCk7YnJlYWs7Y2FzZSBvbjplPXRbdHNdKGkpO2U9ZS5pc1hGQU9iamVjdEFycmF5P2UuY2hpbGRyZW46W2VdfXImJnMuc2V0KGEsZSl9ZS5sZW5ndGg+MCYmbC5wdXNoKGUpfWlmKDAhPT1sLmxlbmd0aHx8b3x8MCE9PWcpZT1pc0Zpbml0ZShjKT9sLmZpbHRlcigoZT0+YzxlLmxlbmd0aCkpLm1hcCgoZT0+ZVtjXSkpOmwuZmxhdCgpO2Vsc2V7Y29uc3QgaT10W2xzXSgpO2lmKCEodD1pKSlyZXR1cm4gbnVsbDtnPS0xO2U9W3RdfX1yZXR1cm4gMD09PWUubGVuZ3RoP251bGw6ZX1mdW5jdGlvbiBjcmVhdGVEYXRhTm9kZShlLHQsaSl7Y29uc3QgYT1wYXJzZUV4cHJlc3Npb24oaSk7aWYoIWEpcmV0dXJuIG51bGw7aWYoYS5zb21lKChlPT5lLm9wZXJhdG9yPT09bm4pKSlyZXR1cm4gbnVsbDtjb25zdCByPWNuLmdldChhWzBdLm5hbWUpO2xldCBzPTA7aWYocil7ZT1yKGUsdCk7cz0xfWVsc2UgZT10fHxlO2ZvcihsZXQgdD1hLmxlbmd0aDtzPHQ7cysrKXtjb25zdHtuYW1lOnQsb3BlcmF0b3I6aSxpbmRleDpyfT1hW3NdO2lmKCFpc0Zpbml0ZShyKSl7YVtzXS5pbmRleD0wO3JldHVybiBlLmNyZWF0ZU5vZGVzKGEuc2xpY2UocykpfWxldCBuO3N3aXRjaChpKXtjYXNlIHNuOm49ZVtpc10odCwhMSk7YnJlYWs7Y2FzZSBubjpuPWVbaXNdKHQsITApO2JyZWFrO2Nhc2Ugb246bj1lW3RzXSh0KTtuPW4uaXNYRkFPYmplY3RBcnJheT9uLmNoaWxkcmVuOltuXX1pZigwPT09bi5sZW5ndGgpcmV0dXJuIGUuY3JlYXRlTm9kZXMoYS5zbGljZShzKSk7aWYoIShyPG4ubGVuZ3RoKSl7YVtzXS5pbmRleD1yLW4ubGVuZ3RoO3JldHVybiBlLmNyZWF0ZU5vZGVzKGEuc2xpY2UocykpfXtjb25zdCB0PW5bcl07aWYoIXQuaXNYRkFPYmplY3Qpe3dhcm4oIlhGQSAtIENhbm5vdCBjcmVhdGUgYSBub2RlLiIpO3JldHVybiBudWxsfWU9dH19cmV0dXJuIG51bGx9Y29uc3QgaG49U3ltYm9sKCksQ249U3ltYm9sKCksQm49U3ltYm9sKCksUW49U3ltYm9sKCJfY2hpbGRyZW4iKSxFbj1TeW1ib2woKSx1bj1TeW1ib2woKSxkbj1TeW1ib2woKSxmbj1TeW1ib2woKSxwbj1TeW1ib2woKSxtbj1TeW1ib2woKSx5bj1TeW1ib2woKSx3bj1TeW1ib2woKSxibj1TeW1ib2woKSxEbj1TeW1ib2woInBhcmVudCIpLEZuPVN5bWJvbCgpLFNuPVN5bWJvbCgpLGtuPVN5bWJvbCgpO2xldCBSbj0wO2NvbnN0IE5uPUFuLmRhdGFzZXRzLmlkO2NsYXNzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlLHQsaT0hMSl7dGhpc1trc109ZTt0aGlzW1JzXT10O3RoaXNbeW5dPWk7dGhpc1tEbl09bnVsbDt0aGlzW1FuXT1bXTt0aGlzW3pzXT1gJHt0fSR7Um4rK31gO3RoaXNbQ3NdPW51bGx9Z2V0IGlzWEZBT2JqZWN0KCl7cmV0dXJuITB9Z2V0IGlzWEZBT2JqZWN0QXJyYXkoKXtyZXR1cm4hMX1jcmVhdGVOb2RlcyhlKXtsZXQgdD10aGlzLGk9bnVsbDtmb3IoY29uc3R7bmFtZTphLGluZGV4OnJ9b2YgZSl7Zm9yKGxldCBlPTAscz1pc0Zpbml0ZShyKT9yOjA7ZTw9cztlKyspe2NvbnN0IGU9dFtrc109PT1Obj8tMTp0W2tzXTtpPW5ldyBYbWxPYmplY3QoZSxhKTt0W1lyXShpKX10PWl9cmV0dXJuIGl9W0dzXShlKXtpZighdGhpc1t5bl18fCF0aGlzW01zXShlKSlyZXR1cm4hMTtjb25zdCB0PWVbUnNdLGk9dGhpc1t0XTtpZighKGkgaW5zdGFuY2VvZiBYRkFPYmplY3RBcnJheSkpe251bGwhPT1pJiZ0aGlzW0pzXShpKTt0aGlzW3RdPWU7dGhpc1tZcl0oZSk7cmV0dXJuITB9aWYoaS5wdXNoKGUpKXt0aGlzW1lyXShlKTtyZXR1cm4hMH1sZXQgYT0iIjt0aGlzLmlkP2E9YCAoaWQ6ICR7dGhpcy5pZH0pYDp0aGlzLm5hbWUmJihhPWAgKG5hbWU6ICR7dGhpcy5uYW1lfSAke3RoaXMuaC52YWx1ZX0pYCk7d2FybihgWEZBIC0gbm9kZSAiJHt0aGlzW1JzXX0iJHthfSBoYXMgYWxyZWFkeSBlbm91Z2ggIiR7dH0iIWApO3JldHVybiExfVtNc10oZSl7cmV0dXJuIHRoaXMuaGFzT3duUHJvcGVydHkoZVtSc10pJiZlW2tzXT09PXRoaXNba3NdfVt5c10oKXtyZXR1cm4hMX1bSnJdKCl7cmV0dXJuITF9W2RzXSgpe3JldHVybiExfVtmc10oKXtyZXR1cm4hMX1bTHNdKCl7dGhpcy5wYXJhJiZ0aGlzW2hzXSgpW1pyXS5wYXJhU3RhY2sucG9wKCl9W0hzXSgpe3RoaXNbaHNdKClbWnJdLnBhcmFTdGFjay5wdXNoKHRoaXMucGFyYSl9W1RzXShlKXt0aGlzLmlkJiZ0aGlzW2tzXT09PUFuLnRlbXBsYXRlLmlkJiZlLnNldCh0aGlzLmlkLHRoaXMpfVtoc10oKXtyZXR1cm4gdGhpc1tDc10udGVtcGxhdGV9W3dzXSgpe3JldHVybiExfVtic10oKXtyZXR1cm4hMX1bWXJdKGUpe2VbRG5dPXRoaXM7dGhpc1tRbl0ucHVzaChlKTshZVtDc10mJnRoaXNbQ3NdJiYoZVtDc109dGhpc1tDc10pfVtKc10oZSl7Y29uc3QgdD10aGlzW1FuXS5pbmRleE9mKGUpO3RoaXNbUW5dLnNwbGljZSh0LDEpfVtCc10oKXtyZXR1cm4gdGhpcy5oYXNPd25Qcm9wZXJ0eSgidmFsdWUiKX1bT3NdKGUpe31bVXNdKGUpe31bX3JdKCl7fVtUcl0oZSl7ZGVsZXRlIHRoaXNbeW5dO2lmKHRoaXNbT3JdKXtlLmNsZWFuKHRoaXNbT3JdKTtkZWxldGUgdGhpc1tPcl19fVtFc10oZSl7cmV0dXJuIHRoaXNbUW5dLmluZGV4T2YoZSl9W3VzXShlLHQpe3RbRG5dPXRoaXM7dGhpc1tRbl0uc3BsaWNlKGUsMCx0KTshdFtDc10mJnRoaXNbQ3NdJiYodFtDc109dGhpc1tDc10pfVtEc10oKXtyZXR1cm4hdGhpcy5uYW1lfVtTc10oKXtyZXR1cm4iIn1banNdKCl7cmV0dXJuIDA9PT10aGlzW1FuXS5sZW5ndGg/dGhpc1tqcl06dGhpc1tRbl0ubWFwKChlPT5lW2pzXSgpKSkuam9pbigiIil9Z2V0W0JuXSgpe2NvbnN0IGU9T2JqZWN0LmdldFByb3RvdHlwZU9mKHRoaXMpO2lmKCFlLl9hdHRyaWJ1dGVzKXtjb25zdCB0PWUuX2F0dHJpYnV0ZXM9bmV3IFNldDtmb3IoY29uc3QgZSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSl7aWYobnVsbD09PXRoaXNbZV18fHRoaXNbZV1pbnN0YW5jZW9mIFhGQU9iamVjdHx8dGhpc1tlXWluc3RhbmNlb2YgWEZBT2JqZWN0QXJyYXkpYnJlYWs7dC5hZGQoZSl9fXJldHVybiBzaGFkb3codGhpcyxCbixlLl9hdHRyaWJ1dGVzKX1bbXNdKGUpe2xldCB0PXRoaXM7Zm9yKDt0Oyl7aWYodD09PWUpcmV0dXJuITA7dD10W2xzXSgpfXJldHVybiExfVtsc10oKXtyZXR1cm4gdGhpc1tEbl19W2NzXSgpe3JldHVybiB0aGlzW2xzXSgpfVtvc10oZT1udWxsKXtyZXR1cm4gZT90aGlzW2VdOnRoaXNbUW5dfVtWcl0oKXtjb25zdCBlPU9iamVjdC5jcmVhdGUobnVsbCk7dGhpc1tqcl0mJihlLiRjb250ZW50PXRoaXNbanJdKTtmb3IoY29uc3QgdCBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSl7Y29uc3QgaT10aGlzW3RdO251bGwhPT1pJiYoaSBpbnN0YW5jZW9mIFhGQU9iamVjdD9lW3RdPWlbVnJdKCk6aSBpbnN0YW5jZW9mIFhGQU9iamVjdEFycmF5P2kuaXNFbXB0eSgpfHwoZVt0XT1pLmR1bXAoKSk6ZVt0XT1pKX1yZXR1cm4gZX1bX3NdKCl7cmV0dXJuIG51bGx9W1ZzXSgpe3JldHVybiBIVE1MUmVzdWx0LkVNUFRZfSpbZ3NdKCl7Zm9yKGNvbnN0IGUgb2YgdGhpc1tvc10oKSl5aWVsZCBlfSpbZm5dKGUsdCl7Zm9yKGNvbnN0IGkgb2YgdGhpc1tnc10oKSlpZighZXx8dD09PWUuaGFzKGlbUnNdKSl7Y29uc3QgZT10aGlzW2VzXSgpLHQ9aVtWc10oZSk7dC5zdWNjZXNzfHwodGhpc1tacl0uZmFpbGluZ05vZGU9aSk7eWllbGQgdH19W3pyXSgpe3JldHVybiBudWxsfVt2cl0oZSx0KXt0aGlzW1pyXS5jaGlsZHJlbi5wdXNoKGUpfVtlc10oKXt9W0tyXSh7ZmlsdGVyOmU9bnVsbCxpbmNsdWRlOnQ9ITB9KXtpZih0aGlzW1pyXS5nZW5lcmF0b3Ipe2NvbnN0IGU9dGhpc1tlc10oKSx0PXRoaXNbWnJdLmZhaWxpbmdOb2RlW1ZzXShlKTtpZighdC5zdWNjZXNzKXJldHVybiB0O3QuaHRtbCYmdGhpc1t2cl0odC5odG1sLHQuYmJveCk7ZGVsZXRlIHRoaXNbWnJdLmZhaWxpbmdOb2RlfWVsc2UgdGhpc1tacl0uZ2VuZXJhdG9yPXRoaXNbZm5dKGUsdCk7Zm9yKDs7KXtjb25zdCBlPXRoaXNbWnJdLmdlbmVyYXRvci5uZXh0KCk7aWYoZS5kb25lKWJyZWFrO2NvbnN0IHQ9ZS52YWx1ZTtpZighdC5zdWNjZXNzKXJldHVybiB0O3QuaHRtbCYmdGhpc1t2cl0odC5odG1sLHQuYmJveCl9dGhpc1tacl0uZ2VuZXJhdG9yPW51bGw7cmV0dXJuIEhUTUxSZXN1bHQuRU1QVFl9W3FzXShlKXt0aGlzW1NuXT1uZXcgU2V0KE9iamVjdC5rZXlzKGUpKX1bbW5dKGUpe2NvbnN0IHQ9dGhpc1tCbl0saT10aGlzW1NuXTtyZXR1cm5bLi4uZV0uZmlsdGVyKChlPT50LmhhcyhlKSYmIWkuaGFzKGUpKSl9W1lzXShlLHQ9bmV3IFNldCl7Zm9yKGNvbnN0IGkgb2YgdGhpc1tRbl0paVtGbl0oZSx0KX1bRm5dKGUsdCl7Y29uc3QgaT10aGlzW3BuXShlLHQpO2k/dGhpc1tobl0oaSxlLHQpOnRoaXNbWXNdKGUsdCl9W3BuXShlLHQpe2NvbnN0e3VzZTppLHVzZWhyZWY6YX09dGhpcztpZighaSYmIWEpcmV0dXJuIG51bGw7bGV0IHI9bnVsbCxzPW51bGwsbj1udWxsLG89aTtpZihhKXtvPWE7YS5zdGFydHNXaXRoKCIjc29tKCIpJiZhLmVuZHNXaXRoKCIpIik/cz1hLnNsaWNlKDUsLTEpOmEuc3RhcnRzV2l0aCgiLiNzb20oIikmJmEuZW5kc1dpdGgoIikiKT9zPWEuc2xpY2UoNiwtMSk6YS5zdGFydHNXaXRoKCIjIik/bj1hLnNsaWNlKDEpOmEuc3RhcnRzV2l0aCgiLiMiKSYmKG49YS5zbGljZSgyKSl9ZWxzZSBpLnN0YXJ0c1dpdGgoIiMiKT9uPWkuc2xpY2UoMSk6cz1pO3RoaXMudXNlPXRoaXMudXNlaHJlZj0iIjtpZihuKXI9ZS5nZXQobik7ZWxzZXtyPXNlYXJjaE5vZGUoZS5nZXQodnMpLHRoaXMscywhMCwhMSk7ciYmKHI9clswXSl9aWYoIXIpe3dhcm4oYFhGQSAtIEludmFsaWQgcHJvdG90eXBlIHJlZmVyZW5jZTogJHtvfS5gKTtyZXR1cm4gbnVsbH1pZihyW1JzXSE9PXRoaXNbUnNdKXt3YXJuKGBYRkEgLSBJbmNvbXBhdGlibGUgcHJvdG90eXBlOiAke3JbUnNdfSAhPT0gJHt0aGlzW1JzXX0uYCk7cmV0dXJuIG51bGx9aWYodC5oYXMocikpe3dhcm4oIlhGQSAtIEN5Y2xlIGRldGVjdGVkIGluIHByb3RvdHlwZXMgdXNlLiIpO3JldHVybiBudWxsfXQuYWRkKHIpO2NvbnN0IGc9cltwbl0oZSx0KTtnJiZyW2huXShnLGUsdCk7cltZc10oZSx0KTt0LmRlbGV0ZShyKTtyZXR1cm4gcn1baG5dKGUsdCxpKXtpZihpLmhhcyhlKSl7d2FybigiWEZBIC0gQ3ljbGUgZGV0ZWN0ZWQgaW4gcHJvdG90eXBlcyB1c2UuIik7cmV0dXJufSF0aGlzW2pyXSYmZVtqcl0mJih0aGlzW2pyXT1lW2pyXSk7bmV3IFNldChpKS5hZGQoZSk7Zm9yKGNvbnN0IHQgb2YgdGhpc1ttbl0oZVtTbl0pKXt0aGlzW3RdPWVbdF07dGhpc1tTbl0mJnRoaXNbU25dLmFkZCh0KX1mb3IoY29uc3QgYSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSl7aWYodGhpc1tCbl0uaGFzKGEpKWNvbnRpbnVlO2NvbnN0IHI9dGhpc1thXSxzPWVbYV07aWYociBpbnN0YW5jZW9mIFhGQU9iamVjdEFycmF5KXtmb3IoY29uc3QgZSBvZiByW1FuXSllW0ZuXSh0LGkpO2ZvcihsZXQgYT1yW1FuXS5sZW5ndGgsbj1zW1FuXS5sZW5ndGg7YTxuO2ErKyl7Y29uc3Qgcz1lW1FuXVthXVtQcl0oKTtpZighci5wdXNoKHMpKWJyZWFrO3NbRG5dPXRoaXM7dGhpc1tRbl0ucHVzaChzKTtzW0ZuXSh0LGkpfX1lbHNlIGlmKG51bGw9PT1yKXtpZihudWxsIT09cyl7Y29uc3QgZT1zW1ByXSgpO2VbRG5dPXRoaXM7dGhpc1thXT1lO3RoaXNbUW5dLnB1c2goZSk7ZVtGbl0odCxpKX19ZWxzZXtyW1lzXSh0LGkpO3MmJnJbaG5dKHMsdCxpKX19fXN0YXRpY1tFbl0oZSl7cmV0dXJuIEFycmF5LmlzQXJyYXkoZSk/ZS5tYXAoKGU9PlhGQU9iamVjdFtFbl0oZSkpKToib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPT1lP09iamVjdC5hc3NpZ24oe30sZSk6ZX1bUHJdKCl7Y29uc3QgZT1PYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSk7Zm9yKGNvbnN0IHQgb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyh0aGlzKSl0cnl7ZVt0XT10aGlzW3RdfWNhdGNoe3NoYWRvdyhlLHQsdGhpc1t0XSl9ZVt6c109YCR7ZVtSc119JHtSbisrfWA7ZVtRbl09W107Zm9yKGNvbnN0IHQgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpe2lmKHRoaXNbQm5dLmhhcyh0KSl7ZVt0XT1YRkFPYmplY3RbRW5dKHRoaXNbdF0pO2NvbnRpbnVlfWNvbnN0IGk9dGhpc1t0XTtlW3RdPWkgaW5zdGFuY2VvZiBYRkFPYmplY3RBcnJheT9uZXcgWEZBT2JqZWN0QXJyYXkoaVt3bl0pOm51bGx9Zm9yKGNvbnN0IHQgb2YgdGhpc1tRbl0pe2NvbnN0IGk9dFtSc10sYT10W1ByXSgpO2VbUW5dLnB1c2goYSk7YVtEbl09ZTtudWxsPT09ZVtpXT9lW2ldPWE6ZVtpXVtRbl0ucHVzaChhKX1yZXR1cm4gZX1bb3NdKGU9bnVsbCl7cmV0dXJuIGU/dGhpc1tRbl0uZmlsdGVyKCh0PT50W1JzXT09PWUpKTp0aGlzW1FuXX1bdHNdKGUpe3JldHVybiB0aGlzW2VdfVtpc10oZSx0LGk9ITApe3JldHVybiBBcnJheS5mcm9tKHRoaXNbYXNdKGUsdCxpKSl9Klthc10oZSx0LGk9ITApe2lmKCJwYXJlbnQiIT09ZSl7Zm9yKGNvbnN0IGkgb2YgdGhpc1tRbl0pe2lbUnNdPT09ZSYmKHlpZWxkIGkpO2kubmFtZT09PWUmJih5aWVsZCBpKTsodHx8aVtEc10oKSkmJih5aWVsZCppW2FzXShlLHQsITEpKX1pJiZ0aGlzW0JuXS5oYXMoZSkmJih5aWVsZCBuZXcgWEZBQXR0cmlidXRlKHRoaXMsZSx0aGlzW2VdKSl9ZWxzZSB5aWVsZCB0aGlzW0RuXX19Y2xhc3MgWEZBT2JqZWN0QXJyYXl7Y29uc3RydWN0b3IoZT0xLzApe3RoaXNbd25dPWU7dGhpc1tRbl09W119Z2V0IGlzWEZBT2JqZWN0KCl7cmV0dXJuITF9Z2V0IGlzWEZBT2JqZWN0QXJyYXkoKXtyZXR1cm4hMH1wdXNoKGUpe2lmKHRoaXNbUW5dLmxlbmd0aDw9dGhpc1t3bl0pe3RoaXNbUW5dLnB1c2goZSk7cmV0dXJuITB9d2FybihgWEZBIC0gbm9kZSAiJHtlW1JzXX0iIGFjY2VwdHMgbm8gbW9yZSB0aGFuICR7dGhpc1t3bl19IGNoaWxkcmVuYCk7cmV0dXJuITF9aXNFbXB0eSgpe3JldHVybiAwPT09dGhpc1tRbl0ubGVuZ3RofWR1bXAoKXtyZXR1cm4gMT09PXRoaXNbUW5dLmxlbmd0aD90aGlzW1FuXVswXVtWcl0oKTp0aGlzW1FuXS5tYXAoKGU9PmVbVnJdKCkpKX1bUHJdKCl7Y29uc3QgZT1uZXcgWEZBT2JqZWN0QXJyYXkodGhpc1t3bl0pO2VbUW5dPXRoaXNbUW5dLm1hcCgoZT0+ZVtQcl0oKSkpO3JldHVybiBlfWdldCBjaGlsZHJlbigpe3JldHVybiB0aGlzW1FuXX1jbGVhcigpe3RoaXNbUW5dLmxlbmd0aD0wfX1jbGFzcyBYRkFBdHRyaWJ1dGV7Y29uc3RydWN0b3IoZSx0LGkpe3RoaXNbRG5dPWU7dGhpc1tSc109dDt0aGlzW2pyXT1pO3RoaXNbV3JdPSExO3RoaXNbenNdPSJhdHRyaWJ1dGUiK1JuKyt9W2xzXSgpe3JldHVybiB0aGlzW0RuXX1bcHNdKCl7cmV0dXJuITB9W3JzXSgpe3JldHVybiB0aGlzW2pyXS50cmltKCl9W09zXShlKXtlPWUudmFsdWV8fCIiO3RoaXNbanJdPWUudG9TdHJpbmcoKX1banNdKCl7cmV0dXJuIHRoaXNbanJdfVttc10oZSl7cmV0dXJuIHRoaXNbRG5dPT09ZXx8dGhpc1tEbl1bbXNdKGUpfX1jbGFzcyBYbWxPYmplY3QgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSx0LGk9e30pe3N1cGVyKGUsdCk7dGhpc1tqcl09IiI7dGhpc1t1bl09bnVsbDtpZigiI3RleHQiIT09dCl7Y29uc3QgZT1uZXcgTWFwO3RoaXNbQ25dPWU7Zm9yKGNvbnN0W3QsYV1vZiBPYmplY3QuZW50cmllcyhpKSllLnNldCh0LG5ldyBYRkFBdHRyaWJ1dGUodGhpcyx0LGEpKTtpZihpLmhhc093blByb3BlcnR5KE5zKSl7Y29uc3QgZT1pW05zXS54ZmEuZGF0YU5vZGU7dm9pZCAwIT09ZSYmKCJkYXRhR3JvdXAiPT09ZT90aGlzW3VuXT0hMToiZGF0YVZhbHVlIj09PWUmJih0aGlzW3VuXT0hMCkpfX10aGlzW1dyXT0hMX1bWnNdKGUpe2NvbnN0IHQ9dGhpc1tSc107aWYoIiN0ZXh0Ij09PXQpe2UucHVzaChlbmNvZGVUb1htbFN0cmluZyh0aGlzW2pyXSkpO3JldHVybn1jb25zdCBpPXV0ZjhTdHJpbmdUb1N0cmluZyh0KSxhPXRoaXNba3NdPT09Tm4/InhmYToiOiIiO2UucHVzaChgPCR7YX0ke2l9YCk7Zm9yKGNvbnN0W3QsaV1vZiB0aGlzW0NuXS5lbnRyaWVzKCkpe2NvbnN0IGE9dXRmOFN0cmluZ1RvU3RyaW5nKHQpO2UucHVzaChgICR7YX09IiR7ZW5jb2RlVG9YbWxTdHJpbmcoaVtqcl0pfSJgKX1udWxsIT09dGhpc1t1bl0mJih0aGlzW3VuXT9lLnB1c2goJyB4ZmE6ZGF0YU5vZGU9ImRhdGFWYWx1ZSInKTplLnB1c2goJyB4ZmE6ZGF0YU5vZGU9ImRhdGFHcm91cCInKSk7aWYodGhpc1tqcl18fDAhPT10aGlzW1FuXS5sZW5ndGgpe2UucHVzaCgiPiIpO2lmKHRoaXNbanJdKSJzdHJpbmciPT10eXBlb2YgdGhpc1tqcl0/ZS5wdXNoKGVuY29kZVRvWG1sU3RyaW5nKHRoaXNbanJdKSk6dGhpc1tqcl1bWnNdKGUpO2Vsc2UgZm9yKGNvbnN0IHQgb2YgdGhpc1tRbl0pdFtac10oZSk7ZS5wdXNoKGA8LyR7YX0ke2l9PmApfWVsc2UgZS5wdXNoKCIvPiIpfVtHc10oZSl7aWYodGhpc1tqcl0pe2NvbnN0IGU9bmV3IFhtbE9iamVjdCh0aGlzW2tzXSwiI3RleHQiKTt0aGlzW1lyXShlKTtlW2pyXT10aGlzW2pyXTt0aGlzW2pyXT0iIn10aGlzW1lyXShlKTtyZXR1cm4hMH1bVXNdKGUpe3RoaXNbanJdKz1lfVtfcl0oKXtpZih0aGlzW2pyXSYmdGhpc1tRbl0ubGVuZ3RoPjApe2NvbnN0IGU9bmV3IFhtbE9iamVjdCh0aGlzW2tzXSwiI3RleHQiKTt0aGlzW1lyXShlKTtlW2pyXT10aGlzW2pyXTtkZWxldGUgdGhpc1tqcl19fVtWc10oKXtyZXR1cm4iI3RleHQiPT09dGhpc1tSc10/SFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiIjdGV4dCIsdmFsdWU6dGhpc1tqcl19KTpIVE1MUmVzdWx0LkVNUFRZfVtvc10oZT1udWxsKXtyZXR1cm4gZT90aGlzW1FuXS5maWx0ZXIoKHQ9PnRbUnNdPT09ZSkpOnRoaXNbUW5dfVtBc10oKXtyZXR1cm4gdGhpc1tDbl19W3RzXShlKXtjb25zdCB0PXRoaXNbQ25dLmdldChlKTtyZXR1cm4gdm9pZCAwIT09dD90OnRoaXNbb3NdKGUpfSpbYXNdKGUsdCl7Y29uc3QgaT10aGlzW0NuXS5nZXQoZSk7aSYmKHlpZWxkIGkpO2Zvcihjb25zdCBpIG9mIHRoaXNbUW5dKXtpW1JzXT09PWUmJih5aWVsZCBpKTt0JiYoeWllbGQqaVthc10oZSx0KSl9fSpbJHJdKGUsdCl7Y29uc3QgaT10aGlzW0NuXS5nZXQoZSk7IWl8fHQmJmlbV3JdfHwoeWllbGQgaSk7Zm9yKGNvbnN0IGkgb2YgdGhpc1tRbl0peWllbGQqaVskcl0oZSx0KX0qW25zXShlLHQsaSl7Zm9yKGNvbnN0IGEgb2YgdGhpc1tRbl0pe2FbUnNdIT09ZXx8aSYmYVtXcl18fCh5aWVsZCBhKTt0JiYoeWllbGQqYVtuc10oZSx0LGkpKX19W3BzXSgpe3JldHVybiBudWxsPT09dGhpc1t1bl0/MD09PXRoaXNbUW5dLmxlbmd0aHx8dGhpc1tRbl1bMF1ba3NdPT09QW4ueGh0bWwuaWQ6dGhpc1t1bl19W3JzXSgpe3JldHVybiBudWxsPT09dGhpc1t1bl0/MD09PXRoaXNbUW5dLmxlbmd0aD90aGlzW2pyXS50cmltKCk6dGhpc1tRbl1bMF1ba3NdPT09QW4ueGh0bWwuaWQ/dGhpc1tRbl1bMF1banNdKCkudHJpbSgpOm51bGw6dGhpc1tqcl0udHJpbSgpfVtPc10oZSl7ZT1lLnZhbHVlfHwiIjt0aGlzW2pyXT1lLnRvU3RyaW5nKCl9W1ZyXShlPSExKXtjb25zdCB0PU9iamVjdC5jcmVhdGUobnVsbCk7ZSYmKHQuJG5zPXRoaXNba3NdKTt0aGlzW2pyXSYmKHQuJGNvbnRlbnQ9dGhpc1tqcl0pO3QuJG5hbWU9dGhpc1tSc107dC5jaGlsZHJlbj1bXTtmb3IoY29uc3QgaSBvZiB0aGlzW1FuXSl0LmNoaWxkcmVuLnB1c2goaVtWcl0oZSkpO3QuYXR0cmlidXRlcz1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcihjb25zdFtlLGldb2YgdGhpc1tDbl0pdC5hdHRyaWJ1dGVzW2VdPWlbanJdO3JldHVybiB0fX1jbGFzcyBDb250ZW50T2JqZWN0IGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSx0KTt0aGlzW2pyXT0iIn1bVXNdKGUpe3RoaXNbanJdKz1lfVtfcl0oKXt9fWNsYXNzIE9wdGlvbk9iamVjdCBleHRlbmRzIENvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSx0LGkpe3N1cGVyKGUsdCk7dGhpc1tibl09aX1bX3JdKCl7dGhpc1tqcl09Z2V0S2V5d29yZCh7ZGF0YTp0aGlzW2pyXSxkZWZhdWx0VmFsdWU6dGhpc1tibl1bMF0sdmFsaWRhdGU6ZT0+dGhpc1tibl0uaW5jbHVkZXMoZSl9KX1bVHJdKGUpe3N1cGVyW1RyXShlKTtkZWxldGUgdGhpc1tibl19fWNsYXNzIFN0cmluZ09iamVjdCBleHRlbmRzIENvbnRlbnRPYmplY3R7W19yXSgpe3RoaXNbanJdPXRoaXNbanJdLnRyaW0oKX19Y2xhc3MgSW50ZWdlck9iamVjdCBleHRlbmRzIENvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSx0LGksYSl7c3VwZXIoZSx0KTt0aGlzW2RuXT1pO3RoaXNba25dPWF9W19yXSgpe3RoaXNbanJdPWdldEludGVnZXIoe2RhdGE6dGhpc1tqcl0sZGVmYXVsdFZhbHVlOnRoaXNbZG5dLHZhbGlkYXRlOnRoaXNba25dfSl9W1RyXShlKXtzdXBlcltUcl0oZSk7ZGVsZXRlIHRoaXNbZG5dO2RlbGV0ZSB0aGlzW2tuXX19Y2xhc3MgT3B0aW9uMDEgZXh0ZW5kcyBJbnRlZ2VyT2JqZWN0e2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoZSx0LDAsKGU9PjE9PT1lKSl9fWNsYXNzIE9wdGlvbjEwIGV4dGVuZHMgSW50ZWdlck9iamVjdHtjb25zdHJ1Y3RvcihlLHQpe3N1cGVyKGUsdCwxLChlPT4wPT09ZSkpfX1mdW5jdGlvbiBtZWFzdXJlVG9TdHJpbmcoZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlPyIwcHgiOk51bWJlci5pc0ludGVnZXIoZSk/YCR7ZX1weGA6YCR7ZS50b0ZpeGVkKDIpfXB4YH1jb25zdCBHbj17YW5jaG9yVHlwZShlLHQpe2NvbnN0IGk9ZVtjc10oKTtpZihpJiYoIWkubGF5b3V0fHwicG9zaXRpb24iPT09aS5sYXlvdXQpKXsidHJhbnNmb3JtImluIHR8fCh0LnRyYW5zZm9ybT0iIik7c3dpdGNoKGUuYW5jaG9yVHlwZSl7Y2FzZSJib3R0b21DZW50ZXIiOnQudHJhbnNmb3JtKz0idHJhbnNsYXRlKC01MCUsIC0xMDAlKSI7YnJlYWs7Y2FzZSJib3R0b21MZWZ0Ijp0LnRyYW5zZm9ybSs9InRyYW5zbGF0ZSgwLC0xMDAlKSI7YnJlYWs7Y2FzZSJib3R0b21SaWdodCI6dC50cmFuc2Zvcm0rPSJ0cmFuc2xhdGUoLTEwMCUsLTEwMCUpIjticmVhaztjYXNlIm1pZGRsZUNlbnRlciI6dC50cmFuc2Zvcm0rPSJ0cmFuc2xhdGUoLTUwJSwtNTAlKSI7YnJlYWs7Y2FzZSJtaWRkbGVMZWZ0Ijp0LnRyYW5zZm9ybSs9InRyYW5zbGF0ZSgwLC01MCUpIjticmVhaztjYXNlIm1pZGRsZVJpZ2h0Ijp0LnRyYW5zZm9ybSs9InRyYW5zbGF0ZSgtMTAwJSwtNTAlKSI7YnJlYWs7Y2FzZSJ0b3BDZW50ZXIiOnQudHJhbnNmb3JtKz0idHJhbnNsYXRlKC01MCUsMCkiO2JyZWFrO2Nhc2UidG9wUmlnaHQiOnQudHJhbnNmb3JtKz0idHJhbnNsYXRlKC0xMDAlLDApIn19fSxkaW1lbnNpb25zKGUsdCl7Y29uc3QgaT1lW2NzXSgpO2xldCBhPWUudztjb25zdCByPWUuaDtpZihpLmxheW91dD8uaW5jbHVkZXMoInJvdyIpKXtjb25zdCB0PWlbWnJdLHI9ZS5jb2xTcGFuO2xldCBzO2lmKC0xPT09cil7cz10LmNvbHVtbldpZHRocy5zbGljZSh0LmN1cnJlbnRDb2x1bW4pLnJlZHVjZSgoKGUsdCk9PmUrdCksMCk7dC5jdXJyZW50Q29sdW1uPTB9ZWxzZXtzPXQuY29sdW1uV2lkdGhzLnNsaWNlKHQuY3VycmVudENvbHVtbix0LmN1cnJlbnRDb2x1bW4rcikucmVkdWNlKCgoZSx0KT0+ZSt0KSwwKTt0LmN1cnJlbnRDb2x1bW49KHQuY3VycmVudENvbHVtbitlLmNvbFNwYW4pJXQuY29sdW1uV2lkdGhzLmxlbmd0aH1pc05hTihzKXx8KGE9ZS53PXMpfXQud2lkdGg9IiIhPT1hP21lYXN1cmVUb1N0cmluZyhhKToiYXV0byI7dC5oZWlnaHQ9IiIhPT1yP21lYXN1cmVUb1N0cmluZyhyKToiYXV0byJ9LHBvc2l0aW9uKGUsdCl7Y29uc3QgaT1lW2NzXSgpO2lmKCFpPy5sYXlvdXR8fCJwb3NpdGlvbiI9PT1pLmxheW91dCl7dC5wb3NpdGlvbj0iYWJzb2x1dGUiO3QubGVmdD1tZWFzdXJlVG9TdHJpbmcoZS54KTt0LnRvcD1tZWFzdXJlVG9TdHJpbmcoZS55KX19LHJvdGF0ZShlLHQpe2lmKGUucm90YXRlKXsidHJhbnNmb3JtImluIHR8fCh0LnRyYW5zZm9ybT0iIik7dC50cmFuc2Zvcm0rPWByb3RhdGUoLSR7ZS5yb3RhdGV9ZGVnKWA7dC50cmFuc2Zvcm1PcmlnaW49InRvcCBsZWZ0In19LHByZXNlbmNlKGUsdCl7c3dpdGNoKGUucHJlc2VuY2Upe2Nhc2UiaW52aXNpYmxlIjp0LnZpc2liaWxpdHk9ImhpZGRlbiI7YnJlYWs7Y2FzZSJoaWRkZW4iOmNhc2UiaW5hY3RpdmUiOnQuZGlzcGxheT0ibm9uZSJ9fSxoQWxpZ24oZSx0KXtpZigicGFyYSI9PT1lW1JzXSlzd2l0Y2goZS5oQWxpZ24pe2Nhc2UianVzdGlmeUFsbCI6dC50ZXh0QWxpZ249Imp1c3RpZnktYWxsIjticmVhaztjYXNlInJhZGl4Ijp0LnRleHRBbGlnbj0ibGVmdCI7YnJlYWs7ZGVmYXVsdDp0LnRleHRBbGlnbj1lLmhBbGlnbn1lbHNlIHN3aXRjaChlLmhBbGlnbil7Y2FzZSJsZWZ0Ijp0LmFsaWduU2VsZj0ic3RhcnQiO2JyZWFrO2Nhc2UiY2VudGVyIjp0LmFsaWduU2VsZj0iY2VudGVyIjticmVhaztjYXNlInJpZ2h0Ijp0LmFsaWduU2VsZj0iZW5kIn19LG1hcmdpbihlLHQpe2UubWFyZ2luJiYodC5tYXJnaW49ZS5tYXJnaW5bX3NdKCkubWFyZ2luKX19O2Z1bmN0aW9uIHNldE1pbk1heERpbWVuc2lvbnMoZSx0KXtpZigicG9zaXRpb24iPT09ZVtjc10oKS5sYXlvdXQpe2UubWluVz4wJiYodC5taW5XaWR0aD1tZWFzdXJlVG9TdHJpbmcoZS5taW5XKSk7ZS5tYXhXPjAmJih0Lm1heFdpZHRoPW1lYXN1cmVUb1N0cmluZyhlLm1heFcpKTtlLm1pbkg+MCYmKHQubWluSGVpZ2h0PW1lYXN1cmVUb1N0cmluZyhlLm1pbkgpKTtlLm1heEg+MCYmKHQubWF4SGVpZ2h0PW1lYXN1cmVUb1N0cmluZyhlLm1heEgpKX19ZnVuY3Rpb24gbGF5b3V0VGV4dChlLHQsaSxhLHIscyl7Y29uc3Qgbj1uZXcgVGV4dE1lYXN1cmUodCxpLGEscik7InN0cmluZyI9PXR5cGVvZiBlP24uYWRkU3RyaW5nKGUpOmVbeHNdKG4pO3JldHVybiBuLmNvbXB1dGUocyl9ZnVuY3Rpb24gbGF5b3V0Tm9kZShlLHQpe2xldCBpPW51bGwsYT1udWxsLHI9ITE7aWYoKCFlLnd8fCFlLmgpJiZlLnZhbHVlKXtsZXQgcz0wLG49MDtpZihlLm1hcmdpbil7cz1lLm1hcmdpbi5sZWZ0SW5zZXQrZS5tYXJnaW4ucmlnaHRJbnNldDtuPWUubWFyZ2luLnRvcEluc2V0K2UubWFyZ2luLmJvdHRvbUluc2V0fWxldCBvPW51bGwsZz1udWxsO2lmKGUucGFyYSl7Zz1PYmplY3QuY3JlYXRlKG51bGwpO289IiI9PT1lLnBhcmEubGluZUhlaWdodD9udWxsOmUucGFyYS5saW5lSGVpZ2h0O2cudG9wPSIiPT09ZS5wYXJhLnNwYWNlQWJvdmU/MDplLnBhcmEuc3BhY2VBYm92ZTtnLmJvdHRvbT0iIj09PWUucGFyYS5zcGFjZUJlbG93PzA6ZS5wYXJhLnNwYWNlQmVsb3c7Zy5sZWZ0PSIiPT09ZS5wYXJhLm1hcmdpbkxlZnQ/MDplLnBhcmEubWFyZ2luTGVmdDtnLnJpZ2h0PSIiPT09ZS5wYXJhLm1hcmdpblJpZ2h0PzA6ZS5wYXJhLm1hcmdpblJpZ2h0fWxldCBjPWUuZm9udDtpZighYyl7Y29uc3QgdD1lW2hzXSgpO2xldCBpPWVbbHNdKCk7Zm9yKDtpJiZpIT09dDspe2lmKGkuZm9udCl7Yz1pLmZvbnQ7YnJlYWt9aT1pW2xzXSgpfX1jb25zdCBsPShlLnd8fHQud2lkdGgpLXMsaD1lW0NzXS5mb250RmluZGVyO2lmKGUudmFsdWUuZXhEYXRhJiZlLnZhbHVlLmV4RGF0YVtqcl0mJiJ0ZXh0L2h0bWwiPT09ZS52YWx1ZS5leERhdGEuY29udGVudFR5cGUpe2NvbnN0IHQ9bGF5b3V0VGV4dChlLnZhbHVlLmV4RGF0YVtqcl0sYyxnLG8saCxsKTthPXQud2lkdGg7aT10LmhlaWdodDtyPXQuaXNCcm9rZW59ZWxzZXtjb25zdCB0PWUudmFsdWVbanNdKCk7aWYodCl7Y29uc3QgZT1sYXlvdXRUZXh0KHQsYyxnLG8saCxsKTthPWUud2lkdGg7aT1lLmhlaWdodDtyPWUuaXNCcm9rZW59fW51bGw9PT1hfHxlLnd8fChhKz1zKTtudWxsPT09aXx8ZS5ofHwoaSs9bil9cmV0dXJue3c6YSxoOmksaXNCcm9rZW46cn19ZnVuY3Rpb24gY29tcHV0ZUJib3goZSx0LGkpe2xldCBhO2lmKCIiIT09ZS53JiYiIiE9PWUuaClhPVtlLngsZS55LGUudyxlLmhdO2Vsc2V7aWYoIWkpcmV0dXJuIG51bGw7bGV0IHI9ZS53O2lmKCIiPT09cil7aWYoMD09PWUubWF4Vyl7Y29uc3QgdD1lW2NzXSgpO3I9InBvc2l0aW9uIj09PXQubGF5b3V0JiYiIiE9PXQudz8wOmUubWluV31lbHNlIHI9TWF0aC5taW4oZS5tYXhXLGkud2lkdGgpO3QuYXR0cmlidXRlcy5zdHlsZS53aWR0aD1tZWFzdXJlVG9TdHJpbmcocil9bGV0IHM9ZS5oO2lmKCIiPT09cyl7aWYoMD09PWUubWF4SCl7Y29uc3QgdD1lW2NzXSgpO3M9InBvc2l0aW9uIj09PXQubGF5b3V0JiYiIiE9PXQuaD8wOmUubWluSH1lbHNlIHM9TWF0aC5taW4oZS5tYXhILGkuaGVpZ2h0KTt0LmF0dHJpYnV0ZXMuc3R5bGUuaGVpZ2h0PW1lYXN1cmVUb1N0cmluZyhzKX1hPVtlLngsZS55LHIsc119cmV0dXJuIGF9ZnVuY3Rpb24gZml4RGltZW5zaW9ucyhlKXtjb25zdCB0PWVbY3NdKCk7aWYodC5sYXlvdXQ/LmluY2x1ZGVzKCJyb3ciKSl7Y29uc3QgaT10W1pyXSxhPWUuY29sU3BhbjtsZXQgcjtyPS0xPT09YT9pLmNvbHVtbldpZHRocy5zbGljZShpLmN1cnJlbnRDb2x1bW4pLnJlZHVjZSgoKGUsdCk9PmUrdCksMCk6aS5jb2x1bW5XaWR0aHMuc2xpY2UoaS5jdXJyZW50Q29sdW1uLGkuY3VycmVudENvbHVtbithKS5yZWR1Y2UoKChlLHQpPT5lK3QpLDApO2lzTmFOKHIpfHwoZS53PXIpfXQubGF5b3V0JiYicG9zaXRpb24iIT09dC5sYXlvdXQmJihlLng9ZS55PTApOyJ0YWJsZSI9PT1lLmxheW91dCYmIiI9PT1lLncmJkFycmF5LmlzQXJyYXkoZS5jb2x1bW5XaWR0aHMpJiYoZS53PWUuY29sdW1uV2lkdGhzLnJlZHVjZSgoKGUsdCk9PmUrdCksMCkpfWZ1bmN0aW9uIGxheW91dENsYXNzKGUpe3N3aXRjaChlLmxheW91dCl7Y2FzZSJwb3NpdGlvbiI6ZGVmYXVsdDpyZXR1cm4ieGZhUG9zaXRpb24iO2Nhc2UibHItdGIiOnJldHVybiJ4ZmFMclRiIjtjYXNlInJsLXJvdyI6cmV0dXJuInhmYVJsUm93IjtjYXNlInJsLXRiIjpyZXR1cm4ieGZhUmxUYiI7Y2FzZSJyb3ciOnJldHVybiJ4ZmFSb3ciO2Nhc2UidGFibGUiOnJldHVybiJ4ZmFUYWJsZSI7Y2FzZSJ0YiI6cmV0dXJuInhmYVRiIn19ZnVuY3Rpb24gdG9TdHlsZShlLC4uLnQpe2NvbnN0IGk9T2JqZWN0LmNyZWF0ZShudWxsKTtmb3IoY29uc3QgYSBvZiB0KXtjb25zdCB0PWVbYV07aWYobnVsbCE9PXQpaWYoR24uaGFzT3duUHJvcGVydHkoYSkpR25bYV0oZSxpKTtlbHNlIGlmKHQgaW5zdGFuY2VvZiBYRkFPYmplY3Qpe2NvbnN0IGU9dFtfc10oKTtlP09iamVjdC5hc3NpZ24oaSxlKTp3YXJuKGAoREVCVUcpIC0gWEZBIC0gc3R5bGUgZm9yICR7YX0gbm90IGltcGxlbWVudGVkIHlldGApfX1yZXR1cm4gaX1mdW5jdGlvbiBjcmVhdGVXcmFwcGVyKGUsdCl7Y29uc3R7YXR0cmlidXRlczppfT10LHtzdHlsZTphfT1pLHI9e25hbWU6ImRpdiIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFXcmFwcGVyIl0sc3R5bGU6T2JqZWN0LmNyZWF0ZShudWxsKX0sY2hpbGRyZW46W119O2kuY2xhc3MucHVzaCgieGZhV3JhcHBlZCIpO2lmKGUuYm9yZGVyKXtjb25zdHt3aWR0aHM6aSxpbnNldHM6c309ZS5ib3JkZXJbWnJdO2xldCBuLG8sZz1zWzBdLGM9c1szXTtjb25zdCBsPXNbMF0rc1syXSxoPXNbMV0rc1szXTtzd2l0Y2goZS5ib3JkZXIuaGFuZCl7Y2FzZSJldmVuIjpnLT1pWzBdLzI7Yy09aVszXS8yO249YGNhbGMoMTAwJSArICR7KGlbMV0raVszXSkvMi1ofXB4KWA7bz1gY2FsYygxMDAlICsgJHsoaVswXStpWzJdKS8yLWx9cHgpYDticmVhaztjYXNlImxlZnQiOmctPWlbMF07Yy09aVszXTtuPWBjYWxjKDEwMCUgKyAke2lbMV0raVszXS1ofXB4KWA7bz1gY2FsYygxMDAlICsgJHtpWzBdK2lbMl0tbH1weClgO2JyZWFrO2Nhc2UicmlnaHQiOm49aD9gY2FsYygxMDAlIC0gJHtofXB4KWA6IjEwMCUiO289bD9gY2FsYygxMDAlIC0gJHtsfXB4KWA6IjEwMCUifWNvbnN0IEM9WyJ4ZmFCb3JkZXIiXTtpc1ByaW50T25seShlLmJvcmRlcikmJkMucHVzaCgieGZhUHJpbnRPbmx5Iik7Y29uc3QgUT17bmFtZToiZGl2IixhdHRyaWJ1dGVzOntjbGFzczpDLHN0eWxlOnt0b3A6YCR7Z31weGAsbGVmdDpgJHtjfXB4YCx3aWR0aDpuLGhlaWdodDpvfX0sY2hpbGRyZW46W119O2Zvcihjb25zdCBlIG9mWyJib3JkZXIiLCJib3JkZXJXaWR0aCIsImJvcmRlckNvbG9yIiwiYm9yZGVyUmFkaXVzIiwiYm9yZGVyU3R5bGUiXSlpZih2b2lkIDAhPT1hW2VdKXtRLmF0dHJpYnV0ZXMuc3R5bGVbZV09YVtlXTtkZWxldGUgYVtlXX1yLmNoaWxkcmVuLnB1c2goUSx0KX1lbHNlIHIuY2hpbGRyZW4ucHVzaCh0KTtmb3IoY29uc3QgZSBvZlsiYmFja2dyb3VuZCIsImJhY2tncm91bmRDbGlwIiwidG9wIiwibGVmdCIsIndpZHRoIiwiaGVpZ2h0IiwibWluV2lkdGgiLCJtaW5IZWlnaHQiLCJtYXhXaWR0aCIsIm1heEhlaWdodCIsInRyYW5zZm9ybSIsInRyYW5zZm9ybU9yaWdpbiIsInZpc2liaWxpdHkiXSlpZih2b2lkIDAhPT1hW2VdKXtyLmF0dHJpYnV0ZXMuc3R5bGVbZV09YVtlXTtkZWxldGUgYVtlXX1yLmF0dHJpYnV0ZXMuc3R5bGUucG9zaXRpb249ImFic29sdXRlIj09PWEucG9zaXRpb24/ImFic29sdXRlIjoicmVsYXRpdmUiO2RlbGV0ZSBhLnBvc2l0aW9uO2lmKGEuYWxpZ25TZWxmKXtyLmF0dHJpYnV0ZXMuc3R5bGUuYWxpZ25TZWxmPWEuYWxpZ25TZWxmO2RlbGV0ZSBhLmFsaWduU2VsZn1yZXR1cm4gcn1mdW5jdGlvbiBmaXhUZXh0SW5kZW50KGUpe2NvbnN0IHQ9Z2V0TWVhc3VyZW1lbnQoZS50ZXh0SW5kZW50LCIwcHgiKTtpZih0Pj0wKXJldHVybjtjb25zdCBpPSJwYWRkaW5nIisoImxlZnQiPT09KCJyaWdodCI9PT1lLnRleHRBbGlnbj8icmlnaHQiOiJsZWZ0Iik/IkxlZnQiOiJSaWdodCIpLGE9Z2V0TWVhc3VyZW1lbnQoZVtpXSwiMHB4Iik7ZVtpXT1hLXQrInB4In1mdW5jdGlvbiBzZXRBY2Nlc3MoZSx0KXtzd2l0Y2goZS5hY2Nlc3Mpe2Nhc2Uibm9uSW50ZXJhY3RpdmUiOnQucHVzaCgieGZhTm9uSW50ZXJhY3RpdmUiKTticmVhaztjYXNlInJlYWRPbmx5Ijp0LnB1c2goInhmYVJlYWRPbmx5Iik7YnJlYWs7Y2FzZSJwcm90ZWN0ZWQiOnQucHVzaCgieGZhRGlzYWJsZWQiKX19ZnVuY3Rpb24gaXNQcmludE9ubHkoZSl7cmV0dXJuIGUucmVsZXZhbnQubGVuZ3RoPjAmJiFlLnJlbGV2YW50WzBdLmV4Y2x1ZGVkJiYicHJpbnQiPT09ZS5yZWxldmFudFswXS52aWV3bmFtZX1mdW5jdGlvbiBnZXRDdXJyZW50UGFyYShlKXtjb25zdCB0PWVbaHNdKClbWnJdLnBhcmFTdGFjaztyZXR1cm4gdC5sZW5ndGg/dC5hdCgtMSk6bnVsbH1mdW5jdGlvbiBzZXRQYXJhKGUsdCxpKXtpZihpLmF0dHJpYnV0ZXMuY2xhc3M/LmluY2x1ZGVzKCJ4ZmFSaWNoIikpe2lmKHQpeyIiPT09ZS5oJiYodC5oZWlnaHQ9ImF1dG8iKTsiIj09PWUudyYmKHQud2lkdGg9ImF1dG8iKX1jb25zdCBhPWdldEN1cnJlbnRQYXJhKGUpO2lmKGEpe2NvbnN0IGU9aS5hdHRyaWJ1dGVzLnN0eWxlO2UuZGlzcGxheT0iZmxleCI7ZS5mbGV4RGlyZWN0aW9uPSJjb2x1bW4iO3N3aXRjaChhLnZBbGlnbil7Y2FzZSJ0b3AiOmUuanVzdGlmeUNvbnRlbnQ9InN0YXJ0IjticmVhaztjYXNlImJvdHRvbSI6ZS5qdXN0aWZ5Q29udGVudD0iZW5kIjticmVhaztjYXNlIm1pZGRsZSI6ZS5qdXN0aWZ5Q29udGVudD0iY2VudGVyIn1jb25zdCB0PWFbX3NdKCk7Zm9yKGNvbnN0W2ksYV1vZiBPYmplY3QuZW50cmllcyh0KSlpIGluIGV8fChlW2ldPWEpfX19ZnVuY3Rpb24gc2V0Rm9udEZhbWlseShlLHQsaSxhKXtpZighaSl7ZGVsZXRlIGEuZm9udEZhbWlseTtyZXR1cm59Y29uc3Qgcj1zdHJpcFF1b3RlcyhlLnR5cGVmYWNlKTthLmZvbnRGYW1pbHk9YCIke3J9ImA7Y29uc3Qgcz1pLmZpbmQocik7aWYocyl7Y29uc3R7Zm9udEZhbWlseTppfT1zLnJlZ3VsYXIuY3NzRm9udEluZm87aSE9PXImJihhLmZvbnRGYW1pbHk9YCIke2l9ImApO2NvbnN0IG49Z2V0Q3VycmVudFBhcmEodCk7aWYobiYmIiIhPT1uLmxpbmVIZWlnaHQpcmV0dXJuO2lmKGEubGluZUhlaWdodClyZXR1cm47Y29uc3Qgbz1zZWxlY3RGb250KGUscyk7byYmKGEubGluZUhlaWdodD1NYXRoLm1heCgxLjIsby5saW5lSGVpZ2h0KSl9fWZ1bmN0aW9uIGZpeFVSTChlKXtjb25zdCB0PWNyZWF0ZVZhbGlkQWJzb2x1dGVVcmwoZSxudWxsLHthZGREZWZhdWx0UHJvdG9jb2w6ITAsdHJ5Q29udmVydEVuY29kaW5nOiEwfSk7cmV0dXJuIHQ/dC5ocmVmOm51bGx9ZnVuY3Rpb24gY3JlYXRlTGluZShlLHQpe3JldHVybntuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e2NsYXNzOlsibHItdGIiPT09ZS5sYXlvdXQ/InhmYUxyIjoieGZhUmwiXX0sY2hpbGRyZW46dH19ZnVuY3Rpb24gZmx1c2hIVE1MKGUpe2lmKCFlW1pyXSlyZXR1cm4gbnVsbDtjb25zdCB0PXtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6ZVtacl0uYXR0cmlidXRlcyxjaGlsZHJlbjplW1pyXS5jaGlsZHJlbn07aWYoZVtacl0uZmFpbGluZ05vZGUpe2NvbnN0IGk9ZVtacl0uZmFpbGluZ05vZGVbenJdKCk7aSYmKGUubGF5b3V0LmVuZHNXaXRoKCItdGIiKT90LmNoaWxkcmVuLnB1c2goY3JlYXRlTGluZShlLFtpXSkpOnQuY2hpbGRyZW4ucHVzaChpKSl9cmV0dXJuIDA9PT10LmNoaWxkcmVuLmxlbmd0aD9udWxsOnR9ZnVuY3Rpb24gYWRkSFRNTChlLHQsaSl7Y29uc3QgYT1lW1pyXSxyPWEuYXZhaWxhYmxlU3BhY2UsW3MsbixvLGddPWk7c3dpdGNoKGUubGF5b3V0KXtjYXNlInBvc2l0aW9uIjphLndpZHRoPU1hdGgubWF4KGEud2lkdGgscytvKTthLmhlaWdodD1NYXRoLm1heChhLmhlaWdodCxuK2cpO2EuY2hpbGRyZW4ucHVzaCh0KTticmVhaztjYXNlImxyLXRiIjpjYXNlInJsLXRiIjppZighYS5saW5lfHwxPT09YS5hdHRlbXB0KXthLmxpbmU9Y3JlYXRlTGluZShlLFtdKTthLmNoaWxkcmVuLnB1c2goYS5saW5lKTthLm51bWJlckluTGluZT0wfWEubnVtYmVySW5MaW5lKz0xO2EubGluZS5jaGlsZHJlbi5wdXNoKHQpO2lmKDA9PT1hLmF0dGVtcHQpe2EuY3VycmVudFdpZHRoKz1vO2EuaGVpZ2h0PU1hdGgubWF4KGEuaGVpZ2h0LGEucHJldkhlaWdodCtnKX1lbHNle2EuY3VycmVudFdpZHRoPW87YS5wcmV2SGVpZ2h0PWEuaGVpZ2h0O2EuaGVpZ2h0Kz1nO2EuYXR0ZW1wdD0wfWEud2lkdGg9TWF0aC5tYXgoYS53aWR0aCxhLmN1cnJlbnRXaWR0aCk7YnJlYWs7Y2FzZSJybC1yb3ciOmNhc2Uicm93Ijp7YS5jaGlsZHJlbi5wdXNoKHQpO2Eud2lkdGgrPW87YS5oZWlnaHQ9TWF0aC5tYXgoYS5oZWlnaHQsZyk7Y29uc3QgZT1tZWFzdXJlVG9TdHJpbmcoYS5oZWlnaHQpO2Zvcihjb25zdCB0IG9mIGEuY2hpbGRyZW4pdC5hdHRyaWJ1dGVzLnN0eWxlLmhlaWdodD1lO2JyZWFrfWNhc2UidGFibGUiOmNhc2UidGIiOmEud2lkdGg9TWF0aC5taW4oci53aWR0aCxNYXRoLm1heChhLndpZHRoLG8pKTthLmhlaWdodCs9ZzthLmNoaWxkcmVuLnB1c2godCl9fWZ1bmN0aW9uIGdldEF2YWlsYWJsZVNwYWNlKGUpe2NvbnN0IHQ9ZVtacl0uYXZhaWxhYmxlU3BhY2UsaT1lLm1hcmdpbj9lLm1hcmdpbi50b3BJbnNldCtlLm1hcmdpbi5ib3R0b21JbnNldDowLGE9ZS5tYXJnaW4/ZS5tYXJnaW4ubGVmdEluc2V0K2UubWFyZ2luLnJpZ2h0SW5zZXQ6MDtzd2l0Y2goZS5sYXlvdXQpe2Nhc2UibHItdGIiOmNhc2UicmwtdGIiOnJldHVybiAwPT09ZVtacl0uYXR0ZW1wdD97d2lkdGg6dC53aWR0aC1hLWVbWnJdLmN1cnJlbnRXaWR0aCxoZWlnaHQ6dC5oZWlnaHQtaS1lW1pyXS5wcmV2SGVpZ2h0fTp7d2lkdGg6dC53aWR0aC1hLGhlaWdodDp0LmhlaWdodC1pLWVbWnJdLmhlaWdodH07Y2FzZSJybC1yb3ciOmNhc2Uicm93IjpyZXR1cm57d2lkdGg6ZVtacl0uY29sdW1uV2lkdGhzLnNsaWNlKGVbWnJdLmN1cnJlbnRDb2x1bW4pLnJlZHVjZSgoKGUsdCk9PmUrdCkpLGhlaWdodDp0LmhlaWdodC1hfTtjYXNlInRhYmxlIjpjYXNlInRiIjpyZXR1cm57d2lkdGg6dC53aWR0aC1hLGhlaWdodDp0LmhlaWdodC1pLWVbWnJdLmhlaWdodH07ZGVmYXVsdDpyZXR1cm4gdH19ZnVuY3Rpb24gY2hlY2tEaW1lbnNpb25zKGUsdCl7aWYobnVsbD09PWVbaHNdKClbWnJdLmZpcnN0VW5zcGxpdHRhYmxlKXJldHVybiEwO2lmKDA9PT1lLnd8fDA9PT1lLmgpcmV0dXJuITA7Y29uc3QgaT1lW2NzXSgpLGE9aVtacl0/LmF0dGVtcHR8fDAsWyxyLHMsbl09ZnVuY3Rpb24gZ2V0VHJhbnNmb3JtZWRCQm94KGUpe2xldCB0LGksYT0iIj09PWUudz9OYU46ZS53LHI9IiI9PT1lLmg/TmFOOmUuaCxbcyxuXT1bMCwwXTtzd2l0Y2goZS5hbmNob3JUeXBlfHwiIil7Y2FzZSJib3R0b21DZW50ZXIiOltzLG5dPVthLzIscl07YnJlYWs7Y2FzZSJib3R0b21MZWZ0IjpbcyxuXT1bMCxyXTticmVhaztjYXNlImJvdHRvbVJpZ2h0IjpbcyxuXT1bYSxyXTticmVhaztjYXNlIm1pZGRsZUNlbnRlciI6W3Msbl09W2EvMixyLzJdO2JyZWFrO2Nhc2UibWlkZGxlTGVmdCI6W3Msbl09WzAsci8yXTticmVhaztjYXNlIm1pZGRsZVJpZ2h0IjpbcyxuXT1bYSxyLzJdO2JyZWFrO2Nhc2UidG9wQ2VudGVyIjpbcyxuXT1bYS8yLDBdO2JyZWFrO2Nhc2UidG9wUmlnaHQiOltzLG5dPVthLDBdfXN3aXRjaChlLnJvdGF0ZXx8MCl7Y2FzZSAwOlt0LGldPVstcywtbl07YnJlYWs7Y2FzZSA5MDpbdCxpXT1bLW4sc107W2Escl09W3IsLWFdO2JyZWFrO2Nhc2UgMTgwOlt0LGldPVtzLG5dO1thLHJdPVstYSwtcl07YnJlYWs7Y2FzZSAyNzA6W3QsaV09W24sLXNdO1thLHJdPVstcixhXX1yZXR1cm5bZS54K3QrTWF0aC5taW4oMCxhKSxlLnkraStNYXRoLm1pbigwLHIpLE1hdGguYWJzKGEpLE1hdGguYWJzKHIpXX0oZSk7c3dpdGNoKGkubGF5b3V0KXtjYXNlImxyLXRiIjpjYXNlInJsLXRiIjpyZXR1cm4gMD09PWE/ZVtoc10oKVtacl0ubm9MYXlvdXRGYWlsdXJlPyIiIT09ZS53P01hdGgucm91bmQocy10LndpZHRoKTw9Mjp0LndpZHRoPjI6ISgiIiE9PWUuaCYmTWF0aC5yb3VuZChuLXQuaGVpZ2h0KT4yKSYmKCIiIT09ZS53P01hdGgucm91bmQocy10LndpZHRoKTw9Mnx8MD09PWlbWnJdLm51bWJlckluTGluZSYmdC5oZWlnaHQ+Mjp0LndpZHRoPjIpOiEhZVtoc10oKVtacl0ubm9MYXlvdXRGYWlsdXJlfHwhKCIiIT09ZS5oJiZNYXRoLnJvdW5kKG4tdC5oZWlnaHQpPjIpJiYoKCIiPT09ZS53fHxNYXRoLnJvdW5kKHMtdC53aWR0aCk8PTJ8fCFpW2JzXSgpKSYmdC5oZWlnaHQ+Mik7Y2FzZSJ0YWJsZSI6Y2FzZSJ0YiI6cmV0dXJuISFlW2hzXSgpW1pyXS5ub0xheW91dEZhaWx1cmV8fCgiIj09PWUuaHx8ZVt3c10oKT8oIiI9PT1lLnd8fE1hdGgucm91bmQocy10LndpZHRoKTw9Mnx8IWlbYnNdKCkpJiZ0LmhlaWdodD4yOk1hdGgucm91bmQobi10LmhlaWdodCk8PTIpO2Nhc2UicG9zaXRpb24iOmlmKGVbaHNdKClbWnJdLm5vTGF5b3V0RmFpbHVyZSlyZXR1cm4hMDtpZigiIj09PWUuaHx8TWF0aC5yb3VuZChuK3ItdC5oZWlnaHQpPD0yKXJldHVybiEwO3JldHVybiBuK3I+ZVtoc10oKVtacl0uY3VycmVudENvbnRlbnRBcmVhLmg7Y2FzZSJybC1yb3ciOmNhc2Uicm93IjpyZXR1cm4hIWVbaHNdKClbWnJdLm5vTGF5b3V0RmFpbHVyZXx8KCIiPT09ZS5ofHxNYXRoLnJvdW5kKG4tdC5oZWlnaHQpPD0yKTtkZWZhdWx0OnJldHVybiEwfX1jb25zdCBNbj1Bbi50ZW1wbGF0ZS5pZCxVbj0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHhuPS9eSChcZCspJC8sTG49bmV3IFNldChbImltYWdlL2dpZiIsImltYWdlL2pwZWciLCJpbWFnZS9qcGciLCJpbWFnZS9wanBlZyIsImltYWdlL3BuZyIsImltYWdlL2FwbmciLCJpbWFnZS94LXBuZyIsImltYWdlL2JtcCIsImltYWdlL3gtbXMtYm1wIiwiaW1hZ2UvdGlmZiIsImltYWdlL3RpZiIsImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSJdKSxIbj1bW1s2Niw3N10sImltYWdlL2JtcCJdLFtbMjU1LDIxNiwyNTVdLCJpbWFnZS9qcGVnIl0sW1s3Myw3Myw0MiwwXSwiaW1hZ2UvdGlmZiJdLFtbNzcsNzcsMCw0Ml0sImltYWdlL3RpZmYiXSxbWzcxLDczLDcwLDU2LDU3LDk3XSwiaW1hZ2UvZ2lmIl0sW1sxMzcsODAsNzgsNzEsMTMsMTAsMjYsMTBdLCJpbWFnZS9wbmciXV07ZnVuY3Rpb24gZ2V0Qm9yZGVyRGltcyhlKXtpZighZXx8IWUuYm9yZGVyKXJldHVybnt3OjAsaDowfTtjb25zdCB0PWUuYm9yZGVyW3NzXSgpO3JldHVybiB0P3t3OnQud2lkdGhzWzBdK3Qud2lkdGhzWzJdK3QuaW5zZXRzWzBdK3QuaW5zZXRzWzJdLGg6dC53aWR0aHNbMV0rdC53aWR0aHNbM10rdC5pbnNldHNbMV0rdC5pbnNldHNbM119Ont3OjAsaDowfX1mdW5jdGlvbiBoYXNNYXJnaW4oZSl7cmV0dXJuIGUubWFyZ2luJiYoZS5tYXJnaW4udG9wSW5zZXR8fGUubWFyZ2luLnJpZ2h0SW5zZXR8fGUubWFyZ2luLmJvdHRvbUluc2V0fHxlLm1hcmdpbi5sZWZ0SW5zZXQpfWZ1bmN0aW9uIF9zZXRWYWx1ZShlLHQpe2lmKCFlLnZhbHVlKXtjb25zdCB0PW5ldyBWYWx1ZSh7fSk7ZVtZcl0odCk7ZS52YWx1ZT10fWUudmFsdWVbT3NdKHQpfWZ1bmN0aW9uKmdldENvbnRhaW5lZENoaWxkcmVuKGUpe2Zvcihjb25zdCB0IG9mIGVbb3NdKCkpdCBpbnN0YW5jZW9mIFN1YmZvcm1TZXQ/eWllbGQqdFtnc10oKTp5aWVsZCB0fWZ1bmN0aW9uIGlzUmVxdWlyZWQoZSl7cmV0dXJuImVycm9yIj09PWUudmFsaWRhdGU/Lm51bGxUZXN0fWZ1bmN0aW9uIHNldFRhYkluZGV4KGUpe2Zvcig7ZTspe2lmKCFlLnRyYXZlcnNhbCl7ZVtXc109ZVtsc10oKVtXc107cmV0dXJufWlmKGVbV3NdKXJldHVybjtsZXQgdD1udWxsO2Zvcihjb25zdCBpIG9mIGUudHJhdmVyc2FsW29zXSgpKWlmKCJuZXh0Ij09PWkub3BlcmF0aW9uKXt0PWk7YnJlYWt9aWYoIXR8fCF0LnJlZil7ZVtXc109ZVtsc10oKVtXc107cmV0dXJufWNvbnN0IGk9ZVtoc10oKTtlW1dzXT0rK2lbV3NdO2NvbnN0IGE9aVtLc10odC5yZWYsZSk7aWYoIWEpcmV0dXJuO2U9YVswXX19ZnVuY3Rpb24gYXBwbHlBc3Npc3QoZSx0KXtjb25zdCBpPWUuYXNzaXN0O2lmKGkpe2NvbnN0IGU9aVtWc10oKTtlJiYodC50aXRsZT1lKTtjb25zdCBhPWkucm9sZS5tYXRjaCh4bik7aWYoYSl7Y29uc3QgZT0iaGVhZGluZyIsaT1hWzFdO3Qucm9sZT1lO3RbImFyaWEtbGV2ZWwiXT1pfX1pZigidGFibGUiPT09ZS5sYXlvdXQpdC5yb2xlPSJ0YWJsZSI7ZWxzZSBpZigicm93Ij09PWUubGF5b3V0KXQucm9sZT0icm93IjtlbHNle2NvbnN0IGk9ZVtsc10oKTsicm93Ij09PWkubGF5b3V0JiYodC5yb2xlPSJUSCI9PT1pLmFzc2lzdD8ucm9sZT8iY29sdW1uaGVhZGVyIjoiY2VsbCIpfX1mdW5jdGlvbiBhcmlhTGFiZWwoZSl7aWYoIWUuYXNzaXN0KXJldHVybiBudWxsO2NvbnN0IHQ9ZS5hc3Npc3Q7cmV0dXJuIHQuc3BlYWsmJiIiIT09dC5zcGVha1tqcl0/dC5zcGVha1tqcl06dC50b29sVGlwP3QudG9vbFRpcFtqcl06bnVsbH1mdW5jdGlvbiB2YWx1ZVRvSHRtbChlKXtyZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhUmljaCJdLHN0eWxlOk9iamVjdC5jcmVhdGUobnVsbCl9LGNoaWxkcmVuOlt7bmFtZToic3BhbiIsYXR0cmlidXRlczp7c3R5bGU6T2JqZWN0LmNyZWF0ZShudWxsKX0sdmFsdWU6ZX1dfSl9ZnVuY3Rpb24gc2V0Rmlyc3RVbnNwbGl0dGFibGUoZSl7Y29uc3QgdD1lW2hzXSgpO2lmKG51bGw9PT10W1pyXS5maXJzdFVuc3BsaXR0YWJsZSl7dFtacl0uZmlyc3RVbnNwbGl0dGFibGU9ZTt0W1pyXS5ub0xheW91dEZhaWx1cmU9ITB9fWZ1bmN0aW9uIHVuc2V0Rmlyc3RVbnNwbGl0dGFibGUoZSl7Y29uc3QgdD1lW2hzXSgpO3RbWnJdLmZpcnN0VW5zcGxpdHRhYmxlPT09ZSYmKHRbWnJdLm5vTGF5b3V0RmFpbHVyZT0hMSl9ZnVuY3Rpb24gaGFuZGxlQnJlYWsoZSl7aWYoZVtacl0pcmV0dXJuITE7ZVtacl09T2JqZWN0LmNyZWF0ZShudWxsKTtpZigiYXV0byI9PT1lLnRhcmdldFR5cGUpcmV0dXJuITE7Y29uc3QgdD1lW2hzXSgpO2xldCBpPW51bGw7aWYoZS50YXJnZXQpe2k9dFtLc10oZS50YXJnZXQsZVtsc10oKSk7aWYoIWkpcmV0dXJuITE7aT1pWzBdfWNvbnN0e2N1cnJlbnRQYWdlQXJlYTphLGN1cnJlbnRDb250ZW50QXJlYTpyfT10W1pyXTtpZigicGFnZUFyZWEiPT09ZS50YXJnZXRUeXBlKXtpIGluc3RhbmNlb2YgUGFnZUFyZWF8fChpPW51bGwpO2lmKGUuc3RhcnROZXcpe2VbWnJdLnRhcmdldD1pfHxhO3JldHVybiEwfWlmKGkmJmkhPT1hKXtlW1pyXS50YXJnZXQ9aTtyZXR1cm4hMH1yZXR1cm4hMX1pIGluc3RhbmNlb2YgQ29udGVudEFyZWF8fChpPW51bGwpO2NvbnN0IHM9aSYmaVtsc10oKTtsZXQgbixvPXM7aWYoZS5zdGFydE5ldylpZihpKXtjb25zdCBlPXMuY29udGVudEFyZWEuY2hpbGRyZW4sdD1lLmluZGV4T2YociksYT1lLmluZGV4T2YoaSk7LTEhPT10JiZ0PGEmJihvPW51bGwpO249YS0xfWVsc2Ugbj1hLmNvbnRlbnRBcmVhLmNoaWxkcmVuLmluZGV4T2Yocik7ZWxzZXtpZighaXx8aT09PXIpcmV0dXJuITE7bj1zLmNvbnRlbnRBcmVhLmNoaWxkcmVuLmluZGV4T2YoaSktMTtvPXM9PT1hP251bGw6c31lW1pyXS50YXJnZXQ9bztlW1pyXS5pbmRleD1uO3JldHVybiEwfWZ1bmN0aW9uIGhhbmRsZU92ZXJmbG93KGUsdCxpKXtjb25zdCBhPWVbaHNdKCkscj1hW1pyXS5ub0xheW91dEZhaWx1cmUscz10W2NzXTt0W2NzXT0oKT0+ZTthW1pyXS5ub0xheW91dEZhaWx1cmU9ITA7Y29uc3Qgbj10W1ZzXShpKTtlW3ZyXShuLmh0bWwsbi5iYm94KTthW1pyXS5ub0xheW91dEZhaWx1cmU9cjt0W2NzXT1zfWNsYXNzIEFwcGVhcmFuY2VGaWx0ZXIgZXh0ZW5kcyBTdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTW4sImFwcGVhcmFuY2VGaWx0ZXIiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudHlwZT1nZXRTdHJpbmdPcHRpb24oZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIEFyYyBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihNbiwiYXJjIiwhMCk7dGhpcy5jaXJjdWxhcj1nZXRJbnRlZ2VyKHtkYXRhOmUuY2lyY3VsYXIsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLmhhbmQ9Z2V0U3RyaW5nT3B0aW9uKGUuaGFuZCxbImV2ZW4iLCJsZWZ0IiwicmlnaHQiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnN0YXJ0QW5nbGU9Z2V0RmxvYXQoe2RhdGE6ZS5zdGFydEFuZ2xlLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PiEwfSk7dGhpcy5zd2VlcEFuZ2xlPWdldEZsb2F0KHtkYXRhOmUuc3dlZXBBbmdsZSxkZWZhdWx0VmFsdWU6MzYwLHZhbGlkYXRlOmU9PiEwfSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZWRnZT1udWxsO3RoaXMuZmlsbD1udWxsfVtWc10oKXtjb25zdCBlPXRoaXMuZWRnZXx8bmV3IEVkZ2Uoe30pLHQ9ZVtfc10oKSxpPU9iamVjdC5jcmVhdGUobnVsbCk7InZpc2libGUiPT09dGhpcy5maWxsPy5wcmVzZW5jZT9PYmplY3QuYXNzaWduKGksdGhpcy5maWxsW19zXSgpKTppLmZpbGw9InRyYW5zcGFyZW50IjtpLnN0cm9rZVdpZHRoPW1lYXN1cmVUb1N0cmluZygidmlzaWJsZSI9PT1lLnByZXNlbmNlP2UudGhpY2tuZXNzOjApO2kuc3Ryb2tlPXQuY29sb3I7bGV0IGE7Y29uc3Qgcj17eG1sbnM6VW4sc3R5bGU6e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLG92ZXJmbG93OiJ2aXNpYmxlIn19O2lmKDM2MD09PXRoaXMuc3dlZXBBbmdsZSlhPXtuYW1lOiJlbGxpcHNlIixhdHRyaWJ1dGVzOnt4bWxuczpVbixjeDoiNTAlIixjeToiNTAlIixyeDoiNTAlIixyeToiNTAlIixzdHlsZTppfX07ZWxzZXtjb25zdCBlPXRoaXMuc3RhcnRBbmdsZSpNYXRoLlBJLzE4MCx0PXRoaXMuc3dlZXBBbmdsZSpNYXRoLlBJLzE4MCxzPXRoaXMuc3dlZXBBbmdsZT4xODA/MTowLFtuLG8sZyxjXT1bNTAqKDErTWF0aC5jb3MoZSkpLDUwKigxLU1hdGguc2luKGUpKSw1MCooMStNYXRoLmNvcyhlK3QpKSw1MCooMS1NYXRoLnNpbihlK3QpKV07YT17bmFtZToicGF0aCIsYXR0cmlidXRlczp7eG1sbnM6VW4sZDpgTSAke259ICR7b30gQSA1MCA1MCAwICR7c30gMCAke2d9ICR7Y31gLHZlY3RvckVmZmVjdDoibm9uLXNjYWxpbmctc3Ryb2tlIixzdHlsZTppfX07T2JqZWN0LmFzc2lnbihyLHt2aWV3Qm94OiIwIDAgMTAwIDEwMCIscHJlc2VydmVBc3BlY3RSYXRpbzoibm9uZSJ9KX1jb25zdCBzPXtuYW1lOiJzdmciLGNoaWxkcmVuOlthXSxhdHRyaWJ1dGVzOnJ9O2lmKGhhc01hcmdpbih0aGlzW2xzXSgpW2xzXSgpKSlyZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e3N0eWxlOntkaXNwbGF5OiJpbmxpbmUiLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifX0sY2hpbGRyZW46W3NdfSk7cy5hdHRyaWJ1dGVzLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSI7cmV0dXJuIEhUTUxSZXN1bHQuc3VjY2VzcyhzKX19Y2xhc3MgQXJlYSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihNbiwiYXJlYSIsITApO3RoaXMuY29sU3Bhbj1nZXRJbnRlZ2VyKHtkYXRhOmUuY29sU3BhbixkZWZhdWx0VmFsdWU6MSx2YWxpZGF0ZTplPT5lPj0xfHwtMT09PWV9KTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMucmVsZXZhbnQ9Z2V0UmVsZXZhbnQoZS5yZWxldmFudCk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMueD1nZXRNZWFzdXJlbWVudChlLngsIjBwdCIpO3RoaXMueT1nZXRNZWFzdXJlbWVudChlLnksIjBwdCIpO3RoaXMuZGVzYz1udWxsO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5hcmVhPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmRyYXc9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZXhPYmplY3Q9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZXhjbEdyb3VwPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmZpZWxkPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnN1YmZvcm09bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuc3ViZm9ybVNldD1uZXcgWEZBT2JqZWN0QXJyYXl9Kltnc10oKXt5aWVsZCpnZXRDb250YWluZWRDaGlsZHJlbih0aGlzKX1bRHNdKCl7cmV0dXJuITB9W2ZzXSgpe3JldHVybiEwfVt2cl0oZSx0KXtjb25zdFtpLGEscixzXT10O3RoaXNbWnJdLndpZHRoPU1hdGgubWF4KHRoaXNbWnJdLndpZHRoLGkrcik7dGhpc1tacl0uaGVpZ2h0PU1hdGgubWF4KHRoaXNbWnJdLmhlaWdodCxhK3MpO3RoaXNbWnJdLmNoaWxkcmVuLnB1c2goZSl9W2VzXSgpe3JldHVybiB0aGlzW1pyXS5hdmFpbGFibGVTcGFjZX1bVnNdKGUpe2NvbnN0IHQ9dG9TdHlsZSh0aGlzLCJwb3NpdGlvbiIpLGk9e3N0eWxlOnQsaWQ6dGhpc1t6c10sY2xhc3M6WyJ4ZmFBcmVhIl19O2lzUHJpbnRPbmx5KHRoaXMpJiZpLmNsYXNzLnB1c2goInhmYVByaW50T25seSIpO3RoaXMubmFtZSYmKGkueGZhTmFtZT10aGlzLm5hbWUpO2NvbnN0IGE9W107dGhpc1tacl09e2NoaWxkcmVuOmEsd2lkdGg6MCxoZWlnaHQ6MCxhdmFpbGFibGVTcGFjZTplfTtjb25zdCByPXRoaXNbS3JdKHtmaWx0ZXI6bmV3IFNldChbImFyZWEiLCJkcmF3IiwiZmllbGQiLCJleGNsR3JvdXAiLCJzdWJmb3JtIiwic3ViZm9ybVNldCJdKSxpbmNsdWRlOiEwfSk7aWYoIXIuc3VjY2Vzcyl7aWYoci5pc0JyZWFrKCkpcmV0dXJuIHI7ZGVsZXRlIHRoaXNbWnJdO3JldHVybiBIVE1MUmVzdWx0LkZBSUxVUkV9dC53aWR0aD1tZWFzdXJlVG9TdHJpbmcodGhpc1tacl0ud2lkdGgpO3QuaGVpZ2h0PW1lYXN1cmVUb1N0cmluZyh0aGlzW1pyXS5oZWlnaHQpO2NvbnN0IHM9e25hbWU6ImRpdiIsYXR0cmlidXRlczppLGNoaWxkcmVuOmF9LG49W3RoaXMueCx0aGlzLnksdGhpc1tacl0ud2lkdGgsdGhpc1tacl0uaGVpZ2h0XTtkZWxldGUgdGhpc1tacl07cmV0dXJuIEhUTUxSZXN1bHQuc3VjY2VzcyhzLG4pfX1jbGFzcyBBc3Npc3QgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTW4sImFzc2lzdCIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5yb2xlPWUucm9sZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuc3BlYWs9bnVsbDt0aGlzLnRvb2xUaXA9bnVsbH1bVnNdKCl7cmV0dXJuIHRoaXMudG9vbFRpcD8uW2pyXXx8bnVsbH19Y2xhc3MgQmFyY29kZSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihNbiwiYmFyY29kZSIsITApO3RoaXMuY2hhckVuY29kaW5nPWdldEtleXdvcmQoe2RhdGE6ZS5jaGFyRW5jb2Rpbmc/ZS5jaGFyRW5jb2RpbmcudG9Mb3dlckNhc2UoKToiIixkZWZhdWx0VmFsdWU6IiIsdmFsaWRhdGU6ZT0+WyJ1dGYtOCIsImJpZy1maXZlIiwiZm9udHNwZWNpZmljIiwiZ2JrIiwiZ2ItMTgwMzAiLCJnYi0yMzEyIiwia3NjLTU2MDEiLCJub25lIiwic2hpZnQtamlzIiwidWNzLTIiLCJ1dGYtMTYiXS5pbmNsdWRlcyhlKXx8ZS5tYXRjaCgvaXNvLTg4NTktXGR7Mn0vKX0pO3RoaXMuY2hlY2tzdW09Z2V0U3RyaW5nT3B0aW9uKGUuY2hlY2tzdW0sWyJub25lIiwiMW1vZDEwIiwiMW1vZDEwXzFtb2QxMSIsIjJtb2QxMCIsImF1dG8iXSk7dGhpcy5kYXRhQ29sdW1uQ291bnQ9Z2V0SW50ZWdlcih7ZGF0YTplLmRhdGFDb2x1bW5Db3VudCxkZWZhdWx0VmFsdWU6LTEsdmFsaWRhdGU6ZT0+ZT49MH0pO3RoaXMuZGF0YUxlbmd0aD1nZXRJbnRlZ2VyKHtkYXRhOmUuZGF0YUxlbmd0aCxkZWZhdWx0VmFsdWU6LTEsdmFsaWRhdGU6ZT0+ZT49MH0pO3RoaXMuZGF0YVByZXA9Z2V0U3RyaW5nT3B0aW9uKGUuZGF0YVByZXAsWyJub25lIiwiZmxhdGVDb21wcmVzcyJdKTt0aGlzLmRhdGFSb3dDb3VudD1nZXRJbnRlZ2VyKHtkYXRhOmUuZGF0YVJvd0NvdW50LGRlZmF1bHRWYWx1ZTotMSx2YWxpZGF0ZTplPT5lPj0wfSk7dGhpcy5lbmRDaGFyPWUuZW5kQ2hhcnx8IiI7dGhpcy5lcnJvckNvcnJlY3Rpb25MZXZlbD1nZXRJbnRlZ2VyKHtkYXRhOmUuZXJyb3JDb3JyZWN0aW9uTGV2ZWwsZGVmYXVsdFZhbHVlOi0xLHZhbGlkYXRlOmU9PmU+PTAmJmU8PTh9KTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubW9kdWxlSGVpZ2h0PWdldE1lYXN1cmVtZW50KGUubW9kdWxlSGVpZ2h0LCI1bW0iKTt0aGlzLm1vZHVsZVdpZHRoPWdldE1lYXN1cmVtZW50KGUubW9kdWxlV2lkdGgsIjAuMjVtbSIpO3RoaXMucHJpbnRDaGVja0RpZ2l0PWdldEludGVnZXIoe2RhdGE6ZS5wcmludENoZWNrRGlnaXQsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLnJvd0NvbHVtblJhdGlvPWdldFJhdGlvKGUucm93Q29sdW1uUmF0aW8pO3RoaXMuc3RhcnRDaGFyPWUuc3RhcnRDaGFyfHwiIjt0aGlzLnRleHRMb2NhdGlvbj1nZXRTdHJpbmdPcHRpb24oZS50ZXh0TG9jYXRpb24sWyJiZWxvdyIsImFib3ZlIiwiYWJvdmVFbWJlZGRlZCIsImJlbG93RW1iZWRkZWQiLCJub25lIl0pO3RoaXMudHJ1bmNhdGU9Z2V0SW50ZWdlcih7ZGF0YTplLnRydW5jYXRlLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSk7dGhpcy50eXBlPWdldFN0cmluZ09wdGlvbihlLnR5cGU/ZS50eXBlLnRvTG93ZXJDYXNlKCk6IiIsWyJhenRlYyIsImNvZGFiYXIiLCJjb2RlMm9mNWluZHVzdHJpYWwiLCJjb2RlMm9mNWludGVybGVhdmVkIiwiY29kZTJvZjVtYXRyaXgiLCJjb2RlMm9mNXN0YW5kYXJkIiwiY29kZTNvZjkiLCJjb2RlM29mOWV4dGVuZGVkIiwiY29kZTExIiwiY29kZTQ5IiwiY29kZTkzIiwiY29kZTEyOCIsImNvZGUxMjhhIiwiY29kZTEyOGIiLCJjb2RlMTI4YyIsImNvZGUxMjhzc2NjIiwiZGF0YW1hdHJpeCIsImVhbjgiLCJlYW44YWRkMiIsImVhbjhhZGQ1IiwiZWFuMTMiLCJlYW4xM2FkZDIiLCJlYW4xM2FkZDUiLCJlYW4xM3B3Y2QiLCJmaW0iLCJsb2dtYXJzIiwibWF4aWNvZGUiLCJtc2kiLCJwZGY0MTciLCJwZGY0MTdtYWNybyIsInBsZXNzZXkiLCJwb3N0YXVzY3VzdDIiLCJwb3N0YXVzY3VzdDMiLCJwb3N0YXVzcmVwbHlwYWlkIiwicG9zdGF1c3N0YW5kYXJkIiwicG9zdHVrcm00c2NjIiwicG9zdHVzZHBiYyIsInBvc3R1c2ltYiIsInBvc3R1c3N0YW5kYXJkIiwicG9zdHVzNXppcCIsInFyY29kZSIsInJmaWQiLCJyc3MxNCIsInJzczE0ZXhwYW5kZWQiLCJyc3MxNGxpbWl0ZWQiLCJyc3MxNHN0YWNrZWQiLCJyc3MxNHN0YWNrZWRvbW5pIiwicnNzMTR0cnVuY2F0ZWQiLCJ0ZWxlcGVuIiwidWNjMTI4IiwidWNjMTI4cmFuZG9tIiwidWNjMTI4c3NjYyIsInVwY2EiLCJ1cGNhYWRkMiIsInVwY2FhZGQ1IiwidXBjYXB3Y2QiLCJ1cGNlIiwidXBjZWFkZDIiLCJ1cGNlYWRkNSIsInVwY2VhbjIiLCJ1cGNlYW41IiwidXBzbWF4aWNvZGUiXSk7dGhpcy51cHNNb2RlPWdldFN0cmluZ09wdGlvbihlLnVwc01vZGUsWyJ1c0NhcnJpZXIiLCJpbnRlcm5hdGlvbmFsQ2FycmllciIsInNlY3VyZVN5bWJvbCIsInN0YW5kYXJkU3ltYm9sIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLndpZGVOYXJyb3dSYXRpbz1nZXRSYXRpbyhlLndpZGVOYXJyb3dSYXRpbyk7dGhpcy5lbmNyeXB0PW51bGw7dGhpcy5leHRyYXM9bnVsbH19Y2xhc3MgQmluZCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihNbiwiYmluZCIsITApO3RoaXMubWF0Y2g9Z2V0U3RyaW5nT3B0aW9uKGUubWF0Y2gsWyJvbmNlIiwiZGF0YVJlZiIsImdsb2JhbCIsIm5vbmUiXSk7dGhpcy5yZWY9ZS5yZWZ8fCIiO3RoaXMucGljdHVyZT1udWxsfX1jbGFzcyBCaW5kSXRlbXMgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTW4sImJpbmRJdGVtcyIpO3RoaXMuY29ubmVjdGlvbj1lLmNvbm5lY3Rpb258fCIiO3RoaXMubGFiZWxSZWY9ZS5sYWJlbFJlZnx8IiI7dGhpcy5yZWY9ZS5yZWZ8fCIiO3RoaXMudmFsdWVSZWY9ZS52YWx1ZVJlZnx8IiJ9fWNsYXNzIEJvb2tlbmQgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTW4sImJvb2tlbmQiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubGVhZGVyPWUubGVhZGVyfHwiIjt0aGlzLnRyYWlsZXI9ZS50cmFpbGVyfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIEJvb2xlYW5FbGVtZW50IGV4dGVuZHMgT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIoTW4sImJvb2xlYW4iKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn1bVnNdKGUpe3JldHVybiB2YWx1ZVRvSHRtbCgxPT09dGhpc1tqcl0/IjEiOiIwIil9fWNsYXNzIEJvcmRlciBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihNbiwiYm9yZGVyIiwhMCk7dGhpcy5icmVhaz1nZXRTdHJpbmdPcHRpb24oZS5icmVhayxbImNsb3NlIiwib3BlbiJdKTt0aGlzLmhhbmQ9Z2V0U3RyaW5nT3B0aW9uKGUuaGFuZCxbImV2ZW4iLCJsZWZ0IiwicmlnaHQiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnByZXNlbmNlPWdldFN0cmluZ09wdGlvbihlLnByZXNlbmNlLFsidmlzaWJsZSIsImhpZGRlbiIsImluYWN0aXZlIiwiaW52aXNpYmxlIl0pO3RoaXMucmVsZXZhbnQ9Z2V0UmVsZXZhbnQoZS5yZWxldmFudCk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuY29ybmVyPW5ldyBYRkFPYmplY3RBcnJheSg0KTt0aGlzLmVkZ2U9bmV3IFhGQU9iamVjdEFycmF5KDQpO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5maWxsPW51bGw7dGhpcy5tYXJnaW49bnVsbH1bc3NdKCl7aWYoIXRoaXNbWnJdKXtjb25zdCBlPXRoaXMuZWRnZS5jaGlsZHJlbi5zbGljZSgpO2lmKGUubGVuZ3RoPDQpe2NvbnN0IHQ9ZS5hdCgtMSl8fG5ldyBFZGdlKHt9KTtmb3IobGV0IGk9ZS5sZW5ndGg7aTw0O2krKyllLnB1c2godCl9Y29uc3QgdD1lLm1hcCgoZT0+ZS50aGlja25lc3MpKSxpPVswLDAsMCwwXTtpZih0aGlzLm1hcmdpbil7aVswXT10aGlzLm1hcmdpbi50b3BJbnNldDtpWzFdPXRoaXMubWFyZ2luLnJpZ2h0SW5zZXQ7aVsyXT10aGlzLm1hcmdpbi5ib3R0b21JbnNldDtpWzNdPXRoaXMubWFyZ2luLmxlZnRJbnNldH10aGlzW1pyXT17d2lkdGhzOnQsaW5zZXRzOmksZWRnZXM6ZX19cmV0dXJuIHRoaXNbWnJdfVtfc10oKXtjb25zdHtlZGdlczplfT10aGlzW3NzXSgpLHQ9ZS5tYXAoKGU9Pntjb25zdCB0PWVbX3NdKCk7dC5jb2xvcnx8PSIjMDAwMDAwIjtyZXR1cm4gdH0pKSxpPU9iamVjdC5jcmVhdGUobnVsbCk7dGhpcy5tYXJnaW4mJk9iamVjdC5hc3NpZ24oaSx0aGlzLm1hcmdpbltfc10oKSk7InZpc2libGUiPT09dGhpcy5maWxsPy5wcmVzZW5jZSYmT2JqZWN0LmFzc2lnbihpLHRoaXMuZmlsbFtfc10oKSk7aWYodGhpcy5jb3JuZXIuY2hpbGRyZW4uc29tZSgoZT0+MCE9PWUucmFkaXVzKSkpe2NvbnN0IGU9dGhpcy5jb3JuZXIuY2hpbGRyZW4ubWFwKChlPT5lW19zXSgpKSk7aWYoMj09PWUubGVuZ3RofHwzPT09ZS5sZW5ndGgpe2NvbnN0IHQ9ZS5hdCgtMSk7Zm9yKGxldCBpPWUubGVuZ3RoO2k8NDtpKyspZS5wdXNoKHQpfWkuYm9yZGVyUmFkaXVzPWUubWFwKChlPT5lLnJhZGl1cykpLmpvaW4oIiAiKX1zd2l0Y2godGhpcy5wcmVzZW5jZSl7Y2FzZSJpbnZpc2libGUiOmNhc2UiaGlkZGVuIjppLmJvcmRlclN0eWxlPSIiO2JyZWFrO2Nhc2UiaW5hY3RpdmUiOmkuYm9yZGVyU3R5bGU9Im5vbmUiO2JyZWFrO2RlZmF1bHQ6aS5ib3JkZXJTdHlsZT10Lm1hcCgoZT0+ZS5zdHlsZSkpLmpvaW4oIiAiKX1pLmJvcmRlcldpZHRoPXQubWFwKChlPT5lLndpZHRoKSkuam9pbigiICIpO2kuYm9yZGVyQ29sb3I9dC5tYXAoKGU9PmUuY29sb3IpKS5qb2luKCIgIik7cmV0dXJuIGl9fWNsYXNzIEJyZWFrIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE1uLCJicmVhayIsITApO3RoaXMuYWZ0ZXI9Z2V0U3RyaW5nT3B0aW9uKGUuYWZ0ZXIsWyJhdXRvIiwiY29udGVudEFyZWEiLCJwYWdlQXJlYSIsInBhZ2VFdmVuIiwicGFnZU9kZCJdKTt0aGlzLmFmdGVyVGFyZ2V0PWUuYWZ0ZXJUYXJnZXR8fCIiO3RoaXMuYmVmb3JlPWdldFN0cmluZ09wdGlvbihlLmJlZm9yZSxbImF1dG8iLCJjb250ZW50QXJlYSIsInBhZ2VBcmVhIiwicGFnZUV2ZW4iLCJwYWdlT2RkIl0pO3RoaXMuYmVmb3JlVGFyZ2V0PWUuYmVmb3JlVGFyZ2V0fHwiIjt0aGlzLmJvb2tlbmRMZWFkZXI9ZS5ib29rZW5kTGVhZGVyfHwiIjt0aGlzLmJvb2tlbmRUcmFpbGVyPWUuYm9va2VuZFRyYWlsZXJ8fCIiO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5vdmVyZmxvd0xlYWRlcj1lLm92ZXJmbG93TGVhZGVyfHwiIjt0aGlzLm92ZXJmbG93VGFyZ2V0PWUub3ZlcmZsb3dUYXJnZXR8fCIiO3RoaXMub3ZlcmZsb3dUcmFpbGVyPWUub3ZlcmZsb3dUcmFpbGVyfHwiIjt0aGlzLnN0YXJ0TmV3PWdldEludGVnZXIoe2RhdGE6ZS5zdGFydE5ldyxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmV4dHJhcz1udWxsfX1jbGFzcyBCcmVha0FmdGVyIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE1uLCJicmVha0FmdGVyIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLmxlYWRlcj1lLmxlYWRlcnx8IiI7dGhpcy5zdGFydE5ldz1nZXRJbnRlZ2VyKHtkYXRhOmUuc3RhcnROZXcsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLnRhcmdldD1lLnRhcmdldHx8IiI7dGhpcy50YXJnZXRUeXBlPWdldFN0cmluZ09wdGlvbihlLnRhcmdldFR5cGUsWyJhdXRvIiwiY29udGVudEFyZWEiLCJwYWdlQXJlYSJdKTt0aGlzLnRyYWlsZXI9ZS50cmFpbGVyfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5zY3JpcHQ9bnVsbH19Y2xhc3MgQnJlYWtCZWZvcmUgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTW4sImJyZWFrQmVmb3JlIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLmxlYWRlcj1lLmxlYWRlcnx8IiI7dGhpcy5zdGFydE5ldz1nZXRJbnRlZ2VyKHtkYXRhOmUuc3RhcnROZXcsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLnRhcmdldD1lLnRhcmdldHx8IiI7dGhpcy50YXJnZXRUeXBlPWdldFN0cmluZ09wdGlvbihlLnRhcmdldFR5cGUsWyJhdXRvIiwiY29udGVudEFyZWEiLCJwYWdlQXJlYSJdKTt0aGlzLnRyYWlsZXI9ZS50cmFpbGVyfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5zY3JpcHQ9bnVsbH1bVnNdKGUpe3RoaXNbWnJdPXt9O3JldHVybiBIVE1MUmVzdWx0LkZBSUxVUkV9fWNsYXNzIEJ1dHRvbiBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihNbiwiYnV0dG9uIiwhMCk7dGhpcy5oaWdobGlnaHQ9Z2V0U3RyaW5nT3B0aW9uKGUuaGlnaGxpZ2h0LFsiaW52ZXJ0ZWQiLCJub25lIiwib3V0bGluZSIsInB1c2giXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbH1bVnNdKGUpe2NvbnN0IHQ9dGhpc1tsc10oKVtsc10oKSxpPXtuYW1lOiJidXR0b24iLGF0dHJpYnV0ZXM6e2lkOnRoaXNbenNdLGNsYXNzOlsieGZhQnV0dG9uIl0sc3R5bGU6e319LGNoaWxkcmVuOltdfTtmb3IoY29uc3QgZSBvZiB0LmV2ZW50LmNoaWxkcmVuKXtpZigiY2xpY2siIT09ZS5hY3Rpdml0eXx8IWUuc2NyaXB0KWNvbnRpbnVlO2NvbnN0IHQ9cmVjb3ZlckpzVVJMKGUuc2NyaXB0W2pyXSk7aWYoIXQpY29udGludWU7Y29uc3QgYT1maXhVUkwodC51cmwpO2EmJmkuY2hpbGRyZW4ucHVzaCh7bmFtZToiYSIsYXR0cmlidXRlczp7aWQ6ImxpbmsiK3RoaXNbenNdLGhyZWY6YSxuZXdXaW5kb3c6dC5uZXdXaW5kb3csY2xhc3M6WyJ4ZmFMaW5rIl0sc3R5bGU6e319LGNoaWxkcmVuOltdfSl9cmV0dXJuIEhUTUxSZXN1bHQuc3VjY2VzcyhpKX19Y2xhc3MgQ2FsY3VsYXRlIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE1uLCJjYWxjdWxhdGUiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMub3ZlcnJpZGU9Z2V0U3RyaW5nT3B0aW9uKGUub3ZlcnJpZGUsWyJkaXNhYmxlZCIsImVycm9yIiwiaWdub3JlIiwid2FybmluZyJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbDt0aGlzLm1lc3NhZ2U9bnVsbDt0aGlzLnNjcmlwdD1udWxsfX1jbGFzcyBDYXB0aW9uIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE1uLCJjYXB0aW9uIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnBsYWNlbWVudD1nZXRTdHJpbmdPcHRpb24oZS5wbGFjZW1lbnQsWyJsZWZ0IiwiYm90dG9tIiwiaW5saW5lIiwicmlnaHQiLCJ0b3AiXSk7dGhpcy5wcmVzZW5jZT1nZXRTdHJpbmdPcHRpb24oZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKTt0aGlzLnJlc2VydmU9TWF0aC5jZWlsKGdldE1lYXN1cmVtZW50KGUucmVzZXJ2ZSkpO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmV4dHJhcz1udWxsO3RoaXMuZm9udD1udWxsO3RoaXMubWFyZ2luPW51bGw7dGhpcy5wYXJhPW51bGw7dGhpcy52YWx1ZT1udWxsfVtPc10oZSl7X3NldFZhbHVlKHRoaXMsZSl9W3NzXShlKXtpZighdGhpc1tacl0pe2xldHt3aWR0aDp0LGhlaWdodDppfT1lO3N3aXRjaCh0aGlzLnBsYWNlbWVudCl7Y2FzZSJsZWZ0IjpjYXNlInJpZ2h0IjpjYXNlImlubGluZSI6dD10aGlzLnJlc2VydmU8PTA/dDp0aGlzLnJlc2VydmU7YnJlYWs7Y2FzZSJ0b3AiOmNhc2UiYm90dG9tIjppPXRoaXMucmVzZXJ2ZTw9MD9pOnRoaXMucmVzZXJ2ZX10aGlzW1pyXT1sYXlvdXROb2RlKHRoaXMse3dpZHRoOnQsaGVpZ2h0Oml9KX1yZXR1cm4gdGhpc1tacl19W1ZzXShlKXtpZighdGhpcy52YWx1ZSlyZXR1cm4gSFRNTFJlc3VsdC5FTVBUWTt0aGlzW0hzXSgpO2NvbnN0IHQ9dGhpcy52YWx1ZVtWc10oZSkuaHRtbDtpZighdCl7dGhpc1tMc10oKTtyZXR1cm4gSFRNTFJlc3VsdC5FTVBUWX1jb25zdCBpPXRoaXMucmVzZXJ2ZTtpZih0aGlzLnJlc2VydmU8PTApe2NvbnN0e3c6dCxoOml9PXRoaXNbc3NdKGUpO3N3aXRjaCh0aGlzLnBsYWNlbWVudCl7Y2FzZSJsZWZ0IjpjYXNlInJpZ2h0IjpjYXNlImlubGluZSI6dGhpcy5yZXNlcnZlPXQ7YnJlYWs7Y2FzZSJ0b3AiOmNhc2UiYm90dG9tIjp0aGlzLnJlc2VydmU9aX19Y29uc3QgYT1bXTsic3RyaW5nIj09dHlwZW9mIHQ/YS5wdXNoKHtuYW1lOiIjdGV4dCIsdmFsdWU6dH0pOmEucHVzaCh0KTtjb25zdCByPXRvU3R5bGUodGhpcywiZm9udCIsIm1hcmdpbiIsInZpc2liaWxpdHkiKTtzd2l0Y2godGhpcy5wbGFjZW1lbnQpe2Nhc2UibGVmdCI6Y2FzZSJyaWdodCI6dGhpcy5yZXNlcnZlPjAmJihyLndpZHRoPW1lYXN1cmVUb1N0cmluZyh0aGlzLnJlc2VydmUpKTticmVhaztjYXNlInRvcCI6Y2FzZSJib3R0b20iOnRoaXMucmVzZXJ2ZT4wJiYoci5oZWlnaHQ9bWVhc3VyZVRvU3RyaW5nKHRoaXMucmVzZXJ2ZSkpfXNldFBhcmEodGhpcyxudWxsLHQpO3RoaXNbTHNdKCk7dGhpcy5yZXNlcnZlPWk7cmV0dXJuIEhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiZGl2IixhdHRyaWJ1dGVzOntzdHlsZTpyLGNsYXNzOlsieGZhQ2FwdGlvbiJdfSxjaGlsZHJlbjphfSl9fWNsYXNzIENlcnRpZmljYXRlIGV4dGVuZHMgU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE1uLCJjZXJ0aWZpY2F0ZSIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBDZXJ0aWZpY2F0ZXMgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTW4sImNlcnRpZmljYXRlcyIsITApO3RoaXMuY3JlZGVudGlhbFNlcnZlclBvbGljeT1nZXRTdHJpbmdPcHRpb24oZS5jcmVkZW50aWFsU2VydmVyUG9saWN5LFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXJsPWUudXJsfHwiIjt0aGlzLnVybFBvbGljeT1lLnVybFBvbGljeXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZW5jcnlwdGlvbj1udWxsO3RoaXMuaXNzdWVycz1udWxsO3RoaXMua2V5VXNhZ2U9bnVsbDt0aGlzLm9pZHM9bnVsbDt0aGlzLnNpZ25pbmc9bnVsbDt0aGlzLnN1YmplY3RETnM9bnVsbH19Y2xhc3MgQ2hlY2tCdXR0b24gZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTW4sImNoZWNrQnV0dG9uIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm1hcms9Z2V0U3RyaW5nT3B0aW9uKGUubWFyayxbImRlZmF1bHQiLCJjaGVjayIsImNpcmNsZSIsImNyb3NzIiwiZGlhbW9uZCIsInNxdWFyZSIsInN0YXIiXSk7dGhpcy5zaGFwZT1nZXRTdHJpbmdPcHRpb24oZS5zaGFwZSxbInNxdWFyZSIsInJvdW5kIl0pO3RoaXMuc2l6ZT1nZXRNZWFzdXJlbWVudChlLnNpemUsIjEwcHQiKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5ib3JkZXI9bnVsbDt0aGlzLmV4dHJhcz1udWxsO3RoaXMubWFyZ2luPW51bGx9W1ZzXShlKXtjb25zdCB0PXRvU3R5bGUoIm1hcmdpbiIpLGk9bWVhc3VyZVRvU3RyaW5nKHRoaXMuc2l6ZSk7dC53aWR0aD10LmhlaWdodD1pO2xldCBhLHIscztjb25zdCBuPXRoaXNbbHNdKClbbHNdKCksbz1uLml0ZW1zLmNoaWxkcmVuLmxlbmd0aCYmbi5pdGVtcy5jaGlsZHJlblswXVtWc10oKS5odG1sfHxbXSxnPXtvbjoodm9pZCAwIT09b1swXT9vWzBdOiJvbiIpLnRvU3RyaW5nKCksb2ZmOih2b2lkIDAhPT1vWzFdP29bMV06Im9mZiIpLnRvU3RyaW5nKCl9LGM9KG4udmFsdWU/Lltqc10oKXx8Im9mZiIpPT09Zy5vbnx8dm9pZCAwLGw9bltjc10oKSxoPW5benNdO2xldCBDO2lmKGwgaW5zdGFuY2VvZiBFeGNsR3JvdXApe3M9bFt6c107YT0icmFkaW8iO3I9InhmYVJhZGlvIjtDPWxbWHJdPy5benNdfHxsW3pzXX1lbHNle2E9ImNoZWNrYm94IjtyPSJ4ZmFDaGVja2JveCI7Qz1uW1hyXT8uW3pzXXx8blt6c119Y29uc3QgUT17bmFtZToiaW5wdXQiLGF0dHJpYnV0ZXM6e2NsYXNzOltyXSxzdHlsZTp0LGZpZWxkSWQ6aCxkYXRhSWQ6Qyx0eXBlOmEsY2hlY2tlZDpjLHhmYU9uOmcub24seGZhT2ZmOmcub2ZmLCJhcmlhLWxhYmVsIjphcmlhTGFiZWwobiksImFyaWEtcmVxdWlyZWQiOiExfX07cyYmKFEuYXR0cmlidXRlcy5uYW1lPXMpO2lmKGlzUmVxdWlyZWQobikpe1EuYXR0cmlidXRlc1siYXJpYS1yZXF1aXJlZCJdPSEwO1EuYXR0cmlidXRlcy5yZXF1aXJlZD0hMH1yZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJsYWJlbCIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFMYWJlbCJdfSxjaGlsZHJlbjpbUV19KX19Y2xhc3MgQ2hvaWNlTGlzdCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihNbiwiY2hvaWNlTGlzdCIsITApO3RoaXMuY29tbWl0T249Z2V0U3RyaW5nT3B0aW9uKGUuY29tbWl0T24sWyJzZWxlY3QiLCJleGl0Il0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5vcGVuPWdldFN0cmluZ09wdGlvbihlLm9wZW4sWyJ1c2VyQ29udHJvbCIsImFsd2F5cyIsIm11bHRpU2VsZWN0Iiwib25FbnRyeSJdKTt0aGlzLnRleHRFbnRyeT1nZXRJbnRlZ2VyKHtkYXRhOmUudGV4dEVudHJ5LGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuYm9yZGVyPW51bGw7dGhpcy5leHRyYXM9bnVsbDt0aGlzLm1hcmdpbj1udWxsfVtWc10oZSl7Y29uc3QgdD10b1N0eWxlKHRoaXMsImJvcmRlciIsIm1hcmdpbiIpLGk9dGhpc1tsc10oKVtsc10oKSxhPXtmb250U2l6ZTpgY2FsYygke2kuZm9udD8uc2l6ZXx8MTB9cHggKiB2YXIoLS1zY2FsZS1mYWN0b3IpKWB9LHI9W107aWYoaS5pdGVtcy5jaGlsZHJlbi5sZW5ndGg+MCl7Y29uc3QgZT1pLml0ZW1zO2xldCB0PTAscz0wO2lmKDI9PT1lLmNoaWxkcmVuLmxlbmd0aCl7dD1lLmNoaWxkcmVuWzBdLnNhdmU7cz0xLXR9Y29uc3Qgbj1lLmNoaWxkcmVuW3RdW1ZzXSgpLmh0bWwsbz1lLmNoaWxkcmVuW3NdW1ZzXSgpLmh0bWw7bGV0IGc9ITE7Y29uc3QgYz1pLnZhbHVlPy5banNdKCl8fCIiO2ZvcihsZXQgZT0wLHQ9bi5sZW5ndGg7ZTx0O2UrKyl7Y29uc3QgdD17bmFtZToib3B0aW9uIixhdHRyaWJ1dGVzOnt2YWx1ZTpvW2VdfHxuW2VdLHN0eWxlOmF9LHZhbHVlOm5bZV19O29bZV09PT1jJiYodC5hdHRyaWJ1dGVzLnNlbGVjdGVkPWc9ITApO3IucHVzaCh0KX1nfHxyLnNwbGljZSgwLDAse25hbWU6Im9wdGlvbiIsYXR0cmlidXRlczp7aGlkZGVuOiEwLHNlbGVjdGVkOiEwfSx2YWx1ZToiICJ9KX1jb25zdCBzPXtjbGFzczpbInhmYVNlbGVjdCJdLGZpZWxkSWQ6aVt6c10sZGF0YUlkOmlbWHJdPy5benNdfHxpW3pzXSxzdHlsZTp0LCJhcmlhLWxhYmVsIjphcmlhTGFiZWwoaSksImFyaWEtcmVxdWlyZWQiOiExfTtpZihpc1JlcXVpcmVkKGkpKXtzWyJhcmlhLXJlcXVpcmVkIl09ITA7cy5yZXF1aXJlZD0hMH0ibXVsdGlTZWxlY3QiPT09dGhpcy5vcGVuJiYocy5tdWx0aXBsZT0hMCk7cmV0dXJuIEhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToibGFiZWwiLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhTGFiZWwiXX0sY2hpbGRyZW46W3tuYW1lOiJzZWxlY3QiLGNoaWxkcmVuOnIsYXR0cmlidXRlczpzfV19KX19Y2xhc3MgQ29sb3IgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTW4sImNvbG9yIiwhMCk7dGhpcy5jU3BhY2U9Z2V0U3RyaW5nT3B0aW9uKGUuY1NwYWNlLFsiU1JHQiJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLnZhbHVlPWUudmFsdWU/ZnVuY3Rpb24gZ2V0Q29sb3IoZSx0PVswLDAsMF0pe2xldFtpLGEscl09dDtpZighZSlyZXR1cm57cjppLGc6YSxiOnJ9O2NvbnN0IHM9ZS50cmltKCkuc3BsaXQoL1xzKixccyovKS5tYXAoKGU9Pk1hdGgubWluKE1hdGgubWF4KDAscGFyc2VJbnQoZS50cmltKCksMTApKSwyNTUpKSkubWFwKChlPT5pc05hTihlKT8wOmUpKTtpZihzLmxlbmd0aDwzKXJldHVybntyOmksZzphLGI6cn07W2ksYSxyXT1zO3JldHVybntyOmksZzphLGI6cn19KGUudmFsdWUpOiIiO3RoaXMuZXh0cmFzPW51bGx9W0JzXSgpe3JldHVybiExfVtfc10oKXtyZXR1cm4gdGhpcy52YWx1ZT9VdGlsLm1ha2VIZXhDb2xvcih0aGlzLnZhbHVlLnIsdGhpcy52YWx1ZS5nLHRoaXMudmFsdWUuYik6bnVsbH19Y2xhc3MgQ29tYiBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihNbiwiY29tYiIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5udW1iZXJPZkNlbGxzPWdldEludGVnZXIoe2RhdGE6ZS5udW1iZXJPZkNlbGxzLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PmU+PTB9KTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIENvbm5lY3QgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTW4sImNvbm5lY3QiLCEwKTt0aGlzLmNvbm5lY3Rpb249ZS5jb25uZWN0aW9ufHwiIjt0aGlzLmlkPWUuaWR8fCIiO3RoaXMucmVmPWUucmVmfHwiIjt0aGlzLnVzYWdlPWdldFN0cmluZ09wdGlvbihlLnVzYWdlLFsiZXhwb3J0QW5kSW1wb3J0IiwiZXhwb3J0T25seSIsImltcG9ydE9ubHkiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMucGljdHVyZT1udWxsfX1jbGFzcyBDb250ZW50QXJlYSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihNbiwiY29udGVudEFyZWEiLCEwKTt0aGlzLmg9Z2V0TWVhc3VyZW1lbnQoZS5oKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMucmVsZXZhbnQ9Z2V0UmVsZXZhbnQoZS5yZWxldmFudCk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMudz1nZXRNZWFzdXJlbWVudChlLncpO3RoaXMueD1nZXRNZWFzdXJlbWVudChlLngsIjBwdCIpO3RoaXMueT1nZXRNZWFzdXJlbWVudChlLnksIjBwdCIpO3RoaXMuZGVzYz1udWxsO3RoaXMuZXh0cmFzPW51bGx9W1ZzXShlKXtjb25zdCB0PXtsZWZ0Om1lYXN1cmVUb1N0cmluZyh0aGlzLngpLHRvcDptZWFzdXJlVG9TdHJpbmcodGhpcy55KSx3aWR0aDptZWFzdXJlVG9TdHJpbmcodGhpcy53KSxoZWlnaHQ6bWVhc3VyZVRvU3RyaW5nKHRoaXMuaCl9LGk9WyJ4ZmFDb250ZW50YXJlYSJdO2lzUHJpbnRPbmx5KHRoaXMpJiZpLnB1c2goInhmYVByaW50T25seSIpO3JldHVybiBIVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsY2hpbGRyZW46W10sYXR0cmlidXRlczp7c3R5bGU6dCxjbGFzczppLGlkOnRoaXNbenNdfX0pfX1jbGFzcyBDb3JuZXIgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTW4sImNvcm5lciIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5pbnZlcnRlZD1nZXRJbnRlZ2VyKHtkYXRhOmUuaW52ZXJ0ZWQsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLmpvaW49Z2V0U3RyaW5nT3B0aW9uKGUuam9pbixbInNxdWFyZSIsInJvdW5kIl0pO3RoaXMucHJlc2VuY2U9Z2V0U3RyaW5nT3B0aW9uKGUucHJlc2VuY2UsWyJ2aXNpYmxlIiwiaGlkZGVuIiwiaW5hY3RpdmUiLCJpbnZpc2libGUiXSk7dGhpcy5yYWRpdXM9Z2V0TWVhc3VyZW1lbnQoZS5yYWRpdXMpO3RoaXMuc3Ryb2tlPWdldFN0cmluZ09wdGlvbihlLnN0cm9rZSxbInNvbGlkIiwiZGFzaERvdCIsImRhc2hEb3REb3QiLCJkYXNoZWQiLCJkb3R0ZWQiLCJlbWJvc3NlZCIsImV0Y2hlZCIsImxvd2VyZWQiLCJyYWlzZWQiXSk7dGhpcy50aGlja25lc3M9Z2V0TWVhc3VyZW1lbnQoZS50aGlja25lc3MsIjAuNXB0Iik7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuY29sb3I9bnVsbDt0aGlzLmV4dHJhcz1udWxsfVtfc10oKXtjb25zdCBlPXRvU3R5bGUodGhpcywidmlzaWJpbGl0eSIpO2UucmFkaXVzPW1lYXN1cmVUb1N0cmluZygic3F1YXJlIj09PXRoaXMuam9pbj8wOnRoaXMucmFkaXVzKTtyZXR1cm4gZX19Y2xhc3MgRGF0ZUVsZW1lbnQgZXh0ZW5kcyBDb250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE1uLCJkYXRlIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9W19yXSgpe2NvbnN0IGU9dGhpc1tqcl0udHJpbSgpO3RoaXNbanJdPWU/bmV3IERhdGUoZSk6bnVsbH1bVnNdKGUpe3JldHVybiB2YWx1ZVRvSHRtbCh0aGlzW2pyXT90aGlzW2pyXS50b1N0cmluZygpOiIiKX19Y2xhc3MgRGF0ZVRpbWUgZXh0ZW5kcyBDb250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE1uLCJkYXRlVGltZSIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifVtfcl0oKXtjb25zdCBlPXRoaXNbanJdLnRyaW0oKTt0aGlzW2pyXT1lP25ldyBEYXRlKGUpOm51bGx9W1ZzXShlKXtyZXR1cm4gdmFsdWVUb0h0bWwodGhpc1tqcl0/dGhpc1tqcl0udG9TdHJpbmcoKToiIil9fWNsYXNzIERhdGVUaW1lRWRpdCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihNbiwiZGF0ZVRpbWVFZGl0IiwhMCk7dGhpcy5oU2Nyb2xsUG9saWN5PWdldFN0cmluZ09wdGlvbihlLmhTY3JvbGxQb2xpY3ksWyJhdXRvIiwib2ZmIiwib24iXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnBpY2tlcj1nZXRTdHJpbmdPcHRpb24oZS5waWNrZXIsWyJob3N0Iiwibm9uZSJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5ib3JkZXI9bnVsbDt0aGlzLmNvbWI9bnVsbDt0aGlzLmV4dHJhcz1udWxsO3RoaXMubWFyZ2luPW51bGx9W1ZzXShlKXtjb25zdCB0PXRvU3R5bGUodGhpcywiYm9yZGVyIiwiZm9udCIsIm1hcmdpbiIpLGk9dGhpc1tsc10oKVtsc10oKSxhPXtuYW1lOiJpbnB1dCIsYXR0cmlidXRlczp7dHlwZToidGV4dCIsZmllbGRJZDppW3pzXSxkYXRhSWQ6aVtYcl0/Llt6c118fGlbenNdLGNsYXNzOlsieGZhVGV4dGZpZWxkIl0sc3R5bGU6dCwiYXJpYS1sYWJlbCI6YXJpYUxhYmVsKGkpLCJhcmlhLXJlcXVpcmVkIjohMX19O2lmKGlzUmVxdWlyZWQoaSkpe2EuYXR0cmlidXRlc1siYXJpYS1yZXF1aXJlZCJdPSEwO2EuYXR0cmlidXRlcy5yZXF1aXJlZD0hMH1yZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJsYWJlbCIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFMYWJlbCJdfSxjaGlsZHJlbjpbYV19KX19Y2xhc3MgRGVjaW1hbCBleHRlbmRzIENvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTW4sImRlY2ltYWwiKTt0aGlzLmZyYWNEaWdpdHM9Z2V0SW50ZWdlcih7ZGF0YTplLmZyYWNEaWdpdHMsZGVmYXVsdFZhbHVlOjIsdmFsaWRhdGU6ZT0+ITB9KTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubGVhZERpZ2l0cz1nZXRJbnRlZ2VyKHtkYXRhOmUubGVhZERpZ2l0cyxkZWZhdWx0VmFsdWU6LTEsdmFsaWRhdGU6ZT0+ITB9KTt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9W19yXSgpe2NvbnN0IGU9cGFyc2VGbG9hdCh0aGlzW2pyXS50cmltKCkpO3RoaXNbanJdPWlzTmFOKGUpP251bGw6ZX1bVnNdKGUpe3JldHVybiB2YWx1ZVRvSHRtbChudWxsIT09dGhpc1tqcl0/dGhpc1tqcl0udG9TdHJpbmcoKToiIil9fWNsYXNzIERlZmF1bHRVaSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihNbiwiZGVmYXVsdFVpIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbH19Y2xhc3MgRGVzYyBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihNbiwiZGVzYyIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuYm9vbGVhbj1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5kYXRlPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmRhdGVUaW1lPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmRlY2ltYWw9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZXhEYXRhPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmZsb2F0PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmltYWdlPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmludGVnZXI9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMudGV4dD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy50aW1lPW5ldyBYRkFPYmplY3RBcnJheX19Y2xhc3MgRGlnZXN0TWV0aG9kIGV4dGVuZHMgT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE1uLCJkaWdlc3RNZXRob2QiLFsiIiwiU0hBMSIsIlNIQTI1NiIsIlNIQTUxMiIsIlJJUEVNRDE2MCJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgRGlnZXN0TWV0aG9kcyBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihNbiwiZGlnZXN0TWV0aG9kcyIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy50eXBlPWdldFN0cmluZ09wdGlvbihlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmRpZ2VzdE1ldGhvZD1uZXcgWEZBT2JqZWN0QXJyYXl9fWNsYXNzIERyYXcgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTW4sImRyYXciLCEwKTt0aGlzLmFuY2hvclR5cGU9Z2V0U3RyaW5nT3B0aW9uKGUuYW5jaG9yVHlwZSxbInRvcExlZnQiLCJib3R0b21DZW50ZXIiLCJib3R0b21MZWZ0IiwiYm90dG9tUmlnaHQiLCJtaWRkbGVDZW50ZXIiLCJtaWRkbGVMZWZ0IiwibWlkZGxlUmlnaHQiLCJ0b3BDZW50ZXIiLCJ0b3BSaWdodCJdKTt0aGlzLmNvbFNwYW49Z2V0SW50ZWdlcih7ZGF0YTplLmNvbFNwYW4sZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZT0+ZT49MXx8LTE9PT1lfSk7dGhpcy5oPWUuaD9nZXRNZWFzdXJlbWVudChlLmgpOiIiO3RoaXMuaEFsaWduPWdldFN0cmluZ09wdGlvbihlLmhBbGlnbixbImxlZnQiLCJjZW50ZXIiLCJqdXN0aWZ5IiwianVzdGlmeUFsbCIsInJhZGl4IiwicmlnaHQiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLmxvY2FsZT1lLmxvY2FsZXx8IiI7dGhpcy5tYXhIPWdldE1lYXN1cmVtZW50KGUubWF4SCwiMHB0Iik7dGhpcy5tYXhXPWdldE1lYXN1cmVtZW50KGUubWF4VywiMHB0Iik7dGhpcy5taW5IPWdldE1lYXN1cmVtZW50KGUubWluSCwiMHB0Iik7dGhpcy5taW5XPWdldE1lYXN1cmVtZW50KGUubWluVywiMHB0Iik7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5wcmVzZW5jZT1nZXRTdHJpbmdPcHRpb24oZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKTt0aGlzLnJlbGV2YW50PWdldFJlbGV2YW50KGUucmVsZXZhbnQpO3RoaXMucm90YXRlPWdldEludGVnZXIoe2RhdGE6ZS5yb3RhdGUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+ZSU5MD09MH0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLnc9ZS53P2dldE1lYXN1cmVtZW50KGUudyk6IiI7dGhpcy54PWdldE1lYXN1cmVtZW50KGUueCwiMHB0Iik7dGhpcy55PWdldE1lYXN1cmVtZW50KGUueSwiMHB0Iik7dGhpcy5hc3Npc3Q9bnVsbDt0aGlzLmJvcmRlcj1udWxsO3RoaXMuY2FwdGlvbj1udWxsO3RoaXMuZGVzYz1udWxsO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5mb250PW51bGw7dGhpcy5rZWVwPW51bGw7dGhpcy5tYXJnaW49bnVsbDt0aGlzLnBhcmE9bnVsbDt0aGlzLnRyYXZlcnNhbD1udWxsO3RoaXMudWk9bnVsbDt0aGlzLnZhbHVlPW51bGw7dGhpcy5zZXRQcm9wZXJ0eT1uZXcgWEZBT2JqZWN0QXJyYXl9W09zXShlKXtfc2V0VmFsdWUodGhpcyxlKX1bVnNdKGUpe3NldFRhYkluZGV4KHRoaXMpO2lmKCJoaWRkZW4iPT09dGhpcy5wcmVzZW5jZXx8ImluYWN0aXZlIj09PXRoaXMucHJlc2VuY2UpcmV0dXJuIEhUTUxSZXN1bHQuRU1QVFk7Zml4RGltZW5zaW9ucyh0aGlzKTt0aGlzW0hzXSgpO2NvbnN0IHQ9dGhpcy53LGk9dGhpcy5oLHt3OmEsaDpyLGlzQnJva2VuOnN9PWxheW91dE5vZGUodGhpcyxlKTtpZihhJiYiIj09PXRoaXMudyl7aWYocyYmdGhpc1tjc10oKVtic10oKSl7dGhpc1tMc10oKTtyZXR1cm4gSFRNTFJlc3VsdC5GQUlMVVJFfXRoaXMudz1hfXImJiIiPT09dGhpcy5oJiYodGhpcy5oPXIpO3NldEZpcnN0VW5zcGxpdHRhYmxlKHRoaXMpO2lmKCFjaGVja0RpbWVuc2lvbnModGhpcyxlKSl7dGhpcy53PXQ7dGhpcy5oPWk7dGhpc1tMc10oKTtyZXR1cm4gSFRNTFJlc3VsdC5GQUlMVVJFfXVuc2V0Rmlyc3RVbnNwbGl0dGFibGUodGhpcyk7Y29uc3Qgbj10b1N0eWxlKHRoaXMsImZvbnQiLCJoQWxpZ24iLCJkaW1lbnNpb25zIiwicG9zaXRpb24iLCJwcmVzZW5jZSIsInJvdGF0ZSIsImFuY2hvclR5cGUiLCJib3JkZXIiLCJtYXJnaW4iKTtzZXRNaW5NYXhEaW1lbnNpb25zKHRoaXMsbik7aWYobi5tYXJnaW4pe24ucGFkZGluZz1uLm1hcmdpbjtkZWxldGUgbi5tYXJnaW59Y29uc3Qgbz1bInhmYURyYXciXTt0aGlzLmZvbnQmJm8ucHVzaCgieGZhRm9udCIpO2lzUHJpbnRPbmx5KHRoaXMpJiZvLnB1c2goInhmYVByaW50T25seSIpO2NvbnN0IGc9e3N0eWxlOm4saWQ6dGhpc1t6c10sY2xhc3M6b307dGhpcy5uYW1lJiYoZy54ZmFOYW1lPXRoaXMubmFtZSk7Y29uc3QgYz17bmFtZToiZGl2IixhdHRyaWJ1dGVzOmcsY2hpbGRyZW46W119O2FwcGx5QXNzaXN0KHRoaXMsZyk7Y29uc3QgbD1jb21wdXRlQmJveCh0aGlzLGMsZSksaD10aGlzLnZhbHVlP3RoaXMudmFsdWVbVnNdKGUpLmh0bWw6bnVsbDtpZihudWxsPT09aCl7dGhpcy53PXQ7dGhpcy5oPWk7dGhpc1tMc10oKTtyZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKGNyZWF0ZVdyYXBwZXIodGhpcyxjKSxsKX1jLmNoaWxkcmVuLnB1c2goaCk7c2V0UGFyYSh0aGlzLG4saCk7dGhpcy53PXQ7dGhpcy5oPWk7dGhpc1tMc10oKTtyZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKGNyZWF0ZVdyYXBwZXIodGhpcyxjKSxsKX19Y2xhc3MgRWRnZSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihNbiwiZWRnZSIsITApO3RoaXMuY2FwPWdldFN0cmluZ09wdGlvbihlLmNhcCxbInNxdWFyZSIsImJ1dHQiLCJyb3VuZCJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMucHJlc2VuY2U9Z2V0U3RyaW5nT3B0aW9uKGUucHJlc2VuY2UsWyJ2aXNpYmxlIiwiaGlkZGVuIiwiaW5hY3RpdmUiLCJpbnZpc2libGUiXSk7dGhpcy5zdHJva2U9Z2V0U3RyaW5nT3B0aW9uKGUuc3Ryb2tlLFsic29saWQiLCJkYXNoRG90IiwiZGFzaERvdERvdCIsImRhc2hlZCIsImRvdHRlZCIsImVtYm9zc2VkIiwiZXRjaGVkIiwibG93ZXJlZCIsInJhaXNlZCJdKTt0aGlzLnRoaWNrbmVzcz1nZXRNZWFzdXJlbWVudChlLnRoaWNrbmVzcywiMC41cHQiKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5jb2xvcj1udWxsO3RoaXMuZXh0cmFzPW51bGx9W19zXSgpe2NvbnN0IGU9dG9TdHlsZSh0aGlzLCJ2aXNpYmlsaXR5Iik7T2JqZWN0LmFzc2lnbihlLHtsaW5lY2FwOnRoaXMuY2FwLHdpZHRoOm1lYXN1cmVUb1N0cmluZyh0aGlzLnRoaWNrbmVzcyksY29sb3I6dGhpcy5jb2xvcj90aGlzLmNvbG9yW19zXSgpOiIjMDAwMDAwIixzdHlsZToiIn0pO2lmKCJ2aXNpYmxlIiE9PXRoaXMucHJlc2VuY2UpZS5zdHlsZT0ibm9uZSI7ZWxzZSBzd2l0Y2godGhpcy5zdHJva2Upe2Nhc2Uic29saWQiOmUuc3R5bGU9InNvbGlkIjticmVhaztjYXNlImRhc2hEb3QiOmNhc2UiZGFzaERvdERvdCI6Y2FzZSJkYXNoZWQiOmUuc3R5bGU9ImRhc2hlZCI7YnJlYWs7Y2FzZSJkb3R0ZWQiOmUuc3R5bGU9ImRvdHRlZCI7YnJlYWs7Y2FzZSJlbWJvc3NlZCI6ZS5zdHlsZT0icmlkZ2UiO2JyZWFrO2Nhc2UiZXRjaGVkIjplLnN0eWxlPSJncm9vdmUiO2JyZWFrO2Nhc2UibG93ZXJlZCI6ZS5zdHlsZT0iaW5zZXQiO2JyZWFrO2Nhc2UicmFpc2VkIjplLnN0eWxlPSJvdXRzZXQifXJldHVybiBlfX1jbGFzcyBFbmNvZGluZyBleHRlbmRzIE9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihNbiwiZW5jb2RpbmciLFsiYWRiZS54NTA5LnJzYV9zaGExIiwiYWRiZS5wa2NzNy5kZXRhY2hlZCIsImFkYmUucGtjczcuc2hhMSJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgRW5jb2RpbmdzIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE1uLCJlbmNvZGluZ3MiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudHlwZT1nZXRTdHJpbmdPcHRpb24oZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5lbmNvZGluZz1uZXcgWEZBT2JqZWN0QXJyYXl9fWNsYXNzIEVuY3J5cHQgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTW4sImVuY3J5cHQiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmNlcnRpZmljYXRlPW51bGx9fWNsYXNzIEVuY3J5cHREYXRhIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE1uLCJlbmNyeXB0RGF0YSIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5vcGVyYXRpb249Z2V0U3RyaW5nT3B0aW9uKGUub3BlcmF0aW9uLFsiZW5jcnlwdCIsImRlY3J5cHQiXSk7dGhpcy50YXJnZXQ9ZS50YXJnZXR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmZpbHRlcj1udWxsO3RoaXMubWFuaWZlc3Q9bnVsbH19Y2xhc3MgRW5jcnlwdGlvbiBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihNbiwiZW5jcnlwdGlvbiIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy50eXBlPWdldFN0cmluZ09wdGlvbihlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmNlcnRpZmljYXRlPW5ldyBYRkFPYmplY3RBcnJheX19Y2xhc3MgRW5jcnlwdGlvbk1ldGhvZCBleHRlbmRzIE9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihNbiwiZW5jcnlwdGlvbk1ldGhvZCIsWyIiLCJBRVMyNTYtQ0JDIiwiVFJJUExFREVTLUNCQyIsIkFFUzEyOC1DQkMiLCJBRVMxOTItQ0JDIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBFbmNyeXB0aW9uTWV0aG9kcyBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihNbiwiZW5jcnlwdGlvbk1ldGhvZHMiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudHlwZT1nZXRTdHJpbmdPcHRpb24oZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5lbmNyeXB0aW9uTWV0aG9kPW5ldyBYRkFPYmplY3RBcnJheX19Y2xhc3MgRXZlbnQgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTW4sImV2ZW50IiwhMCk7dGhpcy5hY3Rpdml0eT1nZXRTdHJpbmdPcHRpb24oZS5hY3Rpdml0eSxbImNsaWNrIiwiY2hhbmdlIiwiZG9jQ2xvc2UiLCJkb2NSZWFkeSIsImVudGVyIiwiZXhpdCIsImZ1bGwiLCJpbmRleENoYW5nZSIsImluaXRpYWxpemUiLCJtb3VzZURvd24iLCJtb3VzZUVudGVyIiwibW91c2VFeGl0IiwibW91c2VVcCIsInBvc3RFeGVjdXRlIiwicG9zdE9wZW4iLCJwb3N0UHJpbnQiLCJwb3N0U2F2ZSIsInBvc3RTaWduIiwicG9zdFN1Ym1pdCIsInByZUV4ZWN1dGUiLCJwcmVPcGVuIiwicHJlUHJpbnQiLCJwcmVTYXZlIiwicHJlU2lnbiIsInByZVN1Ym1pdCIsInJlYWR5IiwidmFsaWRhdGlvblN0YXRlIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5saXN0ZW49Z2V0U3RyaW5nT3B0aW9uKGUubGlzdGVuLFsicmVmT25seSIsInJlZkFuZERlc2NlbmRlbnRzIl0pO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMucmVmPWUucmVmfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbDt0aGlzLmVuY3J5cHREYXRhPW51bGw7dGhpcy5leGVjdXRlPW51bGw7dGhpcy5zY3JpcHQ9bnVsbDt0aGlzLnNpZ25EYXRhPW51bGw7dGhpcy5zdWJtaXQ9bnVsbH19Y2xhc3MgRXhEYXRhIGV4dGVuZHMgQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihNbiwiZXhEYXRhIik7dGhpcy5jb250ZW50VHlwZT1lLmNvbnRlbnRUeXBlfHwiIjt0aGlzLmhyZWY9ZS5ocmVmfHwiIjt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubWF4TGVuZ3RoPWdldEludGVnZXIoe2RhdGE6ZS5tYXhMZW5ndGgsZGVmYXVsdFZhbHVlOi0xLHZhbGlkYXRlOmU9PmU+PS0xfSk7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5yaWQ9ZS5yaWR8fCIiO3RoaXMudHJhbnNmZXJFbmNvZGluZz1nZXRTdHJpbmdPcHRpb24oZS50cmFuc2ZlckVuY29kaW5nLFsibm9uZSIsImJhc2U2NCIsInBhY2thZ2UiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifVtkc10oKXtyZXR1cm4idGV4dC9odG1sIj09PXRoaXMuY29udGVudFR5cGV9W0dzXShlKXtpZigidGV4dC9odG1sIj09PXRoaXMuY29udGVudFR5cGUmJmVba3NdPT09QW4ueGh0bWwuaWQpe3RoaXNbanJdPWU7cmV0dXJuITB9aWYoInRleHQveG1sIj09PXRoaXMuY29udGVudFR5cGUpe3RoaXNbanJdPWU7cmV0dXJuITB9cmV0dXJuITF9W1ZzXShlKXtyZXR1cm4idGV4dC9odG1sIj09PXRoaXMuY29udGVudFR5cGUmJnRoaXNbanJdP3RoaXNbanJdW1ZzXShlKTpIVE1MUmVzdWx0LkVNUFRZfX1jbGFzcyBFeE9iamVjdCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihNbiwiZXhPYmplY3QiLCEwKTt0aGlzLmFyY2hpdmU9ZS5hcmNoaXZlfHwiIjt0aGlzLmNsYXNzSWQ9ZS5jbGFzc0lkfHwiIjt0aGlzLmNvZGVCYXNlPWUuY29kZUJhc2V8fCIiO3RoaXMuY29kZVR5cGU9ZS5jb2RlVHlwZXx8IiI7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5leHRyYXM9bnVsbDt0aGlzLmJvb2xlYW49bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZGF0ZT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5kYXRlVGltZT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5kZWNpbWFsPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmV4RGF0YT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5leE9iamVjdD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5mbG9hdD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5pbWFnZT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5pbnRlZ2VyPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnRleHQ9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMudGltZT1uZXcgWEZBT2JqZWN0QXJyYXl9fWNsYXNzIEV4Y2xHcm91cCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihNbiwiZXhjbEdyb3VwIiwhMCk7dGhpcy5hY2Nlc3M9Z2V0U3RyaW5nT3B0aW9uKGUuYWNjZXNzLFsib3BlbiIsIm5vbkludGVyYWN0aXZlIiwicHJvdGVjdGVkIiwicmVhZE9ubHkiXSk7dGhpcy5hY2Nlc3NLZXk9ZS5hY2Nlc3NLZXl8fCIiO3RoaXMuYW5jaG9yVHlwZT1nZXRTdHJpbmdPcHRpb24oZS5hbmNob3JUeXBlLFsidG9wTGVmdCIsImJvdHRvbUNlbnRlciIsImJvdHRvbUxlZnQiLCJib3R0b21SaWdodCIsIm1pZGRsZUNlbnRlciIsIm1pZGRsZUxlZnQiLCJtaWRkbGVSaWdodCIsInRvcENlbnRlciIsInRvcFJpZ2h0Il0pO3RoaXMuY29sU3Bhbj1nZXRJbnRlZ2VyKHtkYXRhOmUuY29sU3BhbixkZWZhdWx0VmFsdWU6MSx2YWxpZGF0ZTplPT5lPj0xfHwtMT09PWV9KTt0aGlzLmg9ZS5oP2dldE1lYXN1cmVtZW50KGUuaCk6IiI7dGhpcy5oQWxpZ249Z2V0U3RyaW5nT3B0aW9uKGUuaEFsaWduLFsibGVmdCIsImNlbnRlciIsImp1c3RpZnkiLCJqdXN0aWZ5QWxsIiwicmFkaXgiLCJyaWdodCJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubGF5b3V0PWdldFN0cmluZ09wdGlvbihlLmxheW91dCxbInBvc2l0aW9uIiwibHItdGIiLCJybC1yb3ciLCJybC10YiIsInJvdyIsInRhYmxlIiwidGIiXSk7dGhpcy5tYXhIPWdldE1lYXN1cmVtZW50KGUubWF4SCwiMHB0Iik7dGhpcy5tYXhXPWdldE1lYXN1cmVtZW50KGUubWF4VywiMHB0Iik7dGhpcy5taW5IPWdldE1lYXN1cmVtZW50KGUubWluSCwiMHB0Iik7dGhpcy5taW5XPWdldE1lYXN1cmVtZW50KGUubWluVywiMHB0Iik7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5wcmVzZW5jZT1nZXRTdHJpbmdPcHRpb24oZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKTt0aGlzLnJlbGV2YW50PWdldFJlbGV2YW50KGUucmVsZXZhbnQpO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLnc9ZS53P2dldE1lYXN1cmVtZW50KGUudyk6IiI7dGhpcy54PWdldE1lYXN1cmVtZW50KGUueCwiMHB0Iik7dGhpcy55PWdldE1lYXN1cmVtZW50KGUueSwiMHB0Iik7dGhpcy5hc3Npc3Q9bnVsbDt0aGlzLmJpbmQ9bnVsbDt0aGlzLmJvcmRlcj1udWxsO3RoaXMuY2FsY3VsYXRlPW51bGw7dGhpcy5jYXB0aW9uPW51bGw7dGhpcy5kZXNjPW51bGw7dGhpcy5leHRyYXM9bnVsbDt0aGlzLm1hcmdpbj1udWxsO3RoaXMucGFyYT1udWxsO3RoaXMudHJhdmVyc2FsPW51bGw7dGhpcy52YWxpZGF0ZT1udWxsO3RoaXMuY29ubmVjdD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5ldmVudD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5maWVsZD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5zZXRQcm9wZXJ0eT1uZXcgWEZBT2JqZWN0QXJyYXl9W2ZzXSgpe3JldHVybiEwfVtCc10oKXtyZXR1cm4hMH1bT3NdKGUpe2Zvcihjb25zdCB0IG9mIHRoaXMuZmllbGQuY2hpbGRyZW4pe2lmKCF0LnZhbHVlKXtjb25zdCBlPW5ldyBWYWx1ZSh7fSk7dFtZcl0oZSk7dC52YWx1ZT1lfXQudmFsdWVbT3NdKGUpfX1bYnNdKCl7cmV0dXJuIHRoaXMubGF5b3V0LmVuZHNXaXRoKCItdGIiKSYmMD09PXRoaXNbWnJdLmF0dGVtcHQmJnRoaXNbWnJdLm51bWJlckluTGluZT4wfHx0aGlzW2xzXSgpW2JzXSgpfVt3c10oKXtjb25zdCBlPXRoaXNbY3NdKCk7aWYoIWVbd3NdKCkpcmV0dXJuITE7aWYodm9pZCAwIT09dGhpc1tacl0uX2lzU3BsaXR0YWJsZSlyZXR1cm4gdGhpc1tacl0uX2lzU3BsaXR0YWJsZTtpZigicG9zaXRpb24iPT09dGhpcy5sYXlvdXR8fHRoaXMubGF5b3V0LmluY2x1ZGVzKCJyb3ciKSl7dGhpc1tacl0uX2lzU3BsaXR0YWJsZT0hMTtyZXR1cm4hMX1pZihlLmxheW91dD8uZW5kc1dpdGgoIi10YiIpJiYwIT09ZVtacl0ubnVtYmVySW5MaW5lKXJldHVybiExO3RoaXNbWnJdLl9pc1NwbGl0dGFibGU9ITA7cmV0dXJuITB9W3pyXSgpe3JldHVybiBmbHVzaEhUTUwodGhpcyl9W3ZyXShlLHQpe2FkZEhUTUwodGhpcyxlLHQpfVtlc10oKXtyZXR1cm4gZ2V0QXZhaWxhYmxlU3BhY2UodGhpcyl9W1ZzXShlKXtzZXRUYWJJbmRleCh0aGlzKTtpZigiaGlkZGVuIj09PXRoaXMucHJlc2VuY2V8fCJpbmFjdGl2ZSI9PT10aGlzLnByZXNlbmNlfHwwPT09dGhpcy5ofHwwPT09dGhpcy53KXJldHVybiBIVE1MUmVzdWx0LkVNUFRZO2ZpeERpbWVuc2lvbnModGhpcyk7Y29uc3QgdD1bXSxpPXtpZDp0aGlzW3pzXSxjbGFzczpbXX07c2V0QWNjZXNzKHRoaXMsaS5jbGFzcyk7dGhpc1tacl18fCh0aGlzW1pyXT1PYmplY3QuY3JlYXRlKG51bGwpKTtPYmplY3QuYXNzaWduKHRoaXNbWnJdLHtjaGlsZHJlbjp0LGF0dHJpYnV0ZXM6aSxhdHRlbXB0OjAsbGluZTpudWxsLG51bWJlckluTGluZTowLGF2YWlsYWJsZVNwYWNlOnt3aWR0aDpNYXRoLm1pbih0aGlzLnd8fDEvMCxlLndpZHRoKSxoZWlnaHQ6TWF0aC5taW4odGhpcy5ofHwxLzAsZS5oZWlnaHQpfSx3aWR0aDowLGhlaWdodDowLHByZXZIZWlnaHQ6MCxjdXJyZW50V2lkdGg6MH0pO2NvbnN0IGE9dGhpc1t3c10oKTthfHxzZXRGaXJzdFVuc3BsaXR0YWJsZSh0aGlzKTtpZighY2hlY2tEaW1lbnNpb25zKHRoaXMsZSkpcmV0dXJuIEhUTUxSZXN1bHQuRkFJTFVSRTtjb25zdCByPW5ldyBTZXQoWyJmaWVsZCJdKTtpZih0aGlzLmxheW91dC5pbmNsdWRlcygicm93Iikpe2NvbnN0IGU9dGhpc1tjc10oKS5jb2x1bW5XaWR0aHM7aWYoQXJyYXkuaXNBcnJheShlKSYmZS5sZW5ndGg+MCl7dGhpc1tacl0uY29sdW1uV2lkdGhzPWU7dGhpc1tacl0uY3VycmVudENvbHVtbj0wfX1jb25zdCBzPXRvU3R5bGUodGhpcywiYW5jaG9yVHlwZSIsImRpbWVuc2lvbnMiLCJwb3NpdGlvbiIsInByZXNlbmNlIiwiYm9yZGVyIiwibWFyZ2luIiwiaEFsaWduIiksbj1bInhmYUV4Y2xncm91cCJdLG89bGF5b3V0Q2xhc3ModGhpcyk7byYmbi5wdXNoKG8pO2lzUHJpbnRPbmx5KHRoaXMpJiZuLnB1c2goInhmYVByaW50T25seSIpO2kuc3R5bGU9cztpLmNsYXNzPW47dGhpcy5uYW1lJiYoaS54ZmFOYW1lPXRoaXMubmFtZSk7dGhpc1tIc10oKTtjb25zdCBnPSJsci10YiI9PT10aGlzLmxheW91dHx8InJsLXRiIj09PXRoaXMubGF5b3V0LGM9Zz8yOjE7Zm9yKDt0aGlzW1pyXS5hdHRlbXB0PGM7dGhpc1tacl0uYXR0ZW1wdCsrKXtnJiYxPT09dGhpc1tacl0uYXR0ZW1wdCYmKHRoaXNbWnJdLm51bWJlckluTGluZT0wKTtjb25zdCBlPXRoaXNbS3JdKHtmaWx0ZXI6cixpbmNsdWRlOiEwfSk7aWYoZS5zdWNjZXNzKWJyZWFrO2lmKGUuaXNCcmVhaygpKXt0aGlzW0xzXSgpO3JldHVybiBlfWlmKGcmJjA9PT10aGlzW1pyXS5hdHRlbXB0JiYwPT09dGhpc1tacl0ubnVtYmVySW5MaW5lJiYhdGhpc1toc10oKVtacl0ubm9MYXlvdXRGYWlsdXJlKXt0aGlzW1pyXS5hdHRlbXB0PWM7YnJlYWt9fXRoaXNbTHNdKCk7YXx8dW5zZXRGaXJzdFVuc3BsaXR0YWJsZSh0aGlzKTtpZih0aGlzW1pyXS5hdHRlbXB0PT09Yyl7YXx8ZGVsZXRlIHRoaXNbWnJdO3JldHVybiBIVE1MUmVzdWx0LkZBSUxVUkV9bGV0IGw9MCxoPTA7aWYodGhpcy5tYXJnaW4pe2w9dGhpcy5tYXJnaW4ubGVmdEluc2V0K3RoaXMubWFyZ2luLnJpZ2h0SW5zZXQ7aD10aGlzLm1hcmdpbi50b3BJbnNldCt0aGlzLm1hcmdpbi5ib3R0b21JbnNldH1jb25zdCBDPU1hdGgubWF4KHRoaXNbWnJdLndpZHRoK2wsdGhpcy53fHwwKSxRPU1hdGgubWF4KHRoaXNbWnJdLmhlaWdodCtoLHRoaXMuaHx8MCksRT1bdGhpcy54LHRoaXMueSxDLFFdOyIiPT09dGhpcy53JiYocy53aWR0aD1tZWFzdXJlVG9TdHJpbmcoQykpOyIiPT09dGhpcy5oJiYocy5oZWlnaHQ9bWVhc3VyZVRvU3RyaW5nKFEpKTtjb25zdCB1PXtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6aSxjaGlsZHJlbjp0fTthcHBseUFzc2lzdCh0aGlzLGkpO2RlbGV0ZSB0aGlzW1pyXTtyZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKGNyZWF0ZVdyYXBwZXIodGhpcyx1KSxFKX19Y2xhc3MgRXhlY3V0ZSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihNbiwiZXhlY3V0ZSIpO3RoaXMuY29ubmVjdGlvbj1lLmNvbm5lY3Rpb258fCIiO3RoaXMuZXhlY3V0ZVR5cGU9Z2V0U3RyaW5nT3B0aW9uKGUuZXhlY3V0ZVR5cGUsWyJpbXBvcnQiLCJyZW1lcmdlIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5ydW5BdD1nZXRTdHJpbmdPcHRpb24oZS5ydW5BdCxbImNsaWVudCIsImJvdGgiLCJzZXJ2ZXIiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBFeHRyYXMgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTW4sImV4dHJhcyIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuYm9vbGVhbj1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5kYXRlPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmRhdGVUaW1lPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmRlY2ltYWw9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZXhEYXRhPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmV4dHJhcz1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5mbG9hdD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5pbWFnZT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5pbnRlZ2VyPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnRleHQ9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMudGltZT1uZXcgWEZBT2JqZWN0QXJyYXl9fWNsYXNzIEZpZWxkIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE1uLCJmaWVsZCIsITApO3RoaXMuYWNjZXNzPWdldFN0cmluZ09wdGlvbihlLmFjY2VzcyxbIm9wZW4iLCJub25JbnRlcmFjdGl2ZSIsInByb3RlY3RlZCIsInJlYWRPbmx5Il0pO3RoaXMuYWNjZXNzS2V5PWUuYWNjZXNzS2V5fHwiIjt0aGlzLmFuY2hvclR5cGU9Z2V0U3RyaW5nT3B0aW9uKGUuYW5jaG9yVHlwZSxbInRvcExlZnQiLCJib3R0b21DZW50ZXIiLCJib3R0b21MZWZ0IiwiYm90dG9tUmlnaHQiLCJtaWRkbGVDZW50ZXIiLCJtaWRkbGVMZWZ0IiwibWlkZGxlUmlnaHQiLCJ0b3BDZW50ZXIiLCJ0b3BSaWdodCJdKTt0aGlzLmNvbFNwYW49Z2V0SW50ZWdlcih7ZGF0YTplLmNvbFNwYW4sZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZT0+ZT49MXx8LTE9PT1lfSk7dGhpcy5oPWUuaD9nZXRNZWFzdXJlbWVudChlLmgpOiIiO3RoaXMuaEFsaWduPWdldFN0cmluZ09wdGlvbihlLmhBbGlnbixbImxlZnQiLCJjZW50ZXIiLCJqdXN0aWZ5IiwianVzdGlmeUFsbCIsInJhZGl4IiwicmlnaHQiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLmxvY2FsZT1lLmxvY2FsZXx8IiI7dGhpcy5tYXhIPWdldE1lYXN1cmVtZW50KGUubWF4SCwiMHB0Iik7dGhpcy5tYXhXPWdldE1lYXN1cmVtZW50KGUubWF4VywiMHB0Iik7dGhpcy5taW5IPWdldE1lYXN1cmVtZW50KGUubWluSCwiMHB0Iik7dGhpcy5taW5XPWdldE1lYXN1cmVtZW50KGUubWluVywiMHB0Iik7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5wcmVzZW5jZT1nZXRTdHJpbmdPcHRpb24oZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKTt0aGlzLnJlbGV2YW50PWdldFJlbGV2YW50KGUucmVsZXZhbnQpO3RoaXMucm90YXRlPWdldEludGVnZXIoe2RhdGE6ZS5yb3RhdGUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+ZSU5MD09MH0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLnc9ZS53P2dldE1lYXN1cmVtZW50KGUudyk6IiI7dGhpcy54PWdldE1lYXN1cmVtZW50KGUueCwiMHB0Iik7dGhpcy55PWdldE1lYXN1cmVtZW50KGUueSwiMHB0Iik7dGhpcy5hc3Npc3Q9bnVsbDt0aGlzLmJpbmQ9bnVsbDt0aGlzLmJvcmRlcj1udWxsO3RoaXMuY2FsY3VsYXRlPW51bGw7dGhpcy5jYXB0aW9uPW51bGw7dGhpcy5kZXNjPW51bGw7dGhpcy5leHRyYXM9bnVsbDt0aGlzLmZvbnQ9bnVsbDt0aGlzLmZvcm1hdD1udWxsO3RoaXMuaXRlbXM9bmV3IFhGQU9iamVjdEFycmF5KDIpO3RoaXMua2VlcD1udWxsO3RoaXMubWFyZ2luPW51bGw7dGhpcy5wYXJhPW51bGw7dGhpcy50cmF2ZXJzYWw9bnVsbDt0aGlzLnVpPW51bGw7dGhpcy52YWxpZGF0ZT1udWxsO3RoaXMudmFsdWU9bnVsbDt0aGlzLmJpbmRJdGVtcz1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5jb25uZWN0PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmV2ZW50PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnNldFByb3BlcnR5PW5ldyBYRkFPYmplY3RBcnJheX1bZnNdKCl7cmV0dXJuITB9W09zXShlKXtfc2V0VmFsdWUodGhpcyxlKX1bVnNdKGUpe3NldFRhYkluZGV4KHRoaXMpO2lmKCF0aGlzLnVpKXt0aGlzLnVpPW5ldyBVaSh7fSk7dGhpcy51aVtDc109dGhpc1tDc107dGhpc1tZcl0odGhpcy51aSk7bGV0IGU7c3dpdGNoKHRoaXMuaXRlbXMuY2hpbGRyZW4ubGVuZ3RoKXtjYXNlIDA6ZT1uZXcgVGV4dEVkaXQoe30pO3RoaXMudWkudGV4dEVkaXQ9ZTticmVhaztjYXNlIDE6ZT1uZXcgQ2hlY2tCdXR0b24oe30pO3RoaXMudWkuY2hlY2tCdXR0b249ZTticmVhaztjYXNlIDI6ZT1uZXcgQ2hvaWNlTGlzdCh7fSk7dGhpcy51aS5jaG9pY2VMaXN0PWV9dGhpcy51aVtZcl0oZSl9aWYoIXRoaXMudWl8fCJoaWRkZW4iPT09dGhpcy5wcmVzZW5jZXx8ImluYWN0aXZlIj09PXRoaXMucHJlc2VuY2V8fDA9PT10aGlzLmh8fDA9PT10aGlzLncpcmV0dXJuIEhUTUxSZXN1bHQuRU1QVFk7dGhpcy5jYXB0aW9uJiZkZWxldGUgdGhpcy5jYXB0aW9uW1pyXTt0aGlzW0hzXSgpO2NvbnN0IHQ9dGhpcy5jYXB0aW9uP3RoaXMuY2FwdGlvbltWc10oZSkuaHRtbDpudWxsLGk9dGhpcy53LGE9dGhpcy5oO2xldCByPTAscz0wO2lmKHRoaXMubWFyZ2luKXtyPXRoaXMubWFyZ2luLmxlZnRJbnNldCt0aGlzLm1hcmdpbi5yaWdodEluc2V0O3M9dGhpcy5tYXJnaW4udG9wSW5zZXQrdGhpcy5tYXJnaW4uYm90dG9tSW5zZXR9bGV0IG49bnVsbDtpZigiIj09PXRoaXMud3x8IiI9PT10aGlzLmgpe2xldCB0PW51bGwsaT1udWxsLGE9MCxvPTA7aWYodGhpcy51aS5jaGVja0J1dHRvbilhPW89dGhpcy51aS5jaGVja0J1dHRvbi5zaXplO2Vsc2V7Y29uc3R7dzp0LGg6aX09bGF5b3V0Tm9kZSh0aGlzLGUpO2lmKG51bGwhPT10KXthPXQ7bz1pfWVsc2Ugbz1mdW5jdGlvbiBmb250c19nZXRNZXRyaWNzKGUsdD0hMSl7bGV0IGk9bnVsbDtpZihlKXtjb25zdCB0PXN0cmlwUXVvdGVzKGUudHlwZWZhY2UpLGE9ZVtDc10uZm9udEZpbmRlci5maW5kKHQpO2k9c2VsZWN0Rm9udChlLGEpfWlmKCFpKXJldHVybntsaW5lSGVpZ2h0OjEyLGxpbmVHYXA6MixsaW5lTm9HYXA6MTB9O2NvbnN0IGE9ZS5zaXplfHwxMCxyPWkubGluZUhlaWdodD9NYXRoLm1heCh0PzA6MS4yLGkubGluZUhlaWdodCk6MS4yLHM9dm9pZCAwPT09aS5saW5lR2FwPy4yOmkubGluZUdhcDtyZXR1cm57bGluZUhlaWdodDpyKmEsbGluZUdhcDpzKmEsbGluZU5vR2FwOk1hdGgubWF4KDEsci1zKSphfX0odGhpcy5mb250LCEwKS5saW5lTm9HYXB9bj1nZXRCb3JkZXJEaW1zKHRoaXMudWlbc3NdKCkpO2ErPW4udztvKz1uLmg7aWYodGhpcy5jYXB0aW9uKXtjb25zdHt3OnIsaDpzLGlzQnJva2VuOm59PXRoaXMuY2FwdGlvbltzc10oZSk7aWYobiYmdGhpc1tjc10oKVtic10oKSl7dGhpc1tMc10oKTtyZXR1cm4gSFRNTFJlc3VsdC5GQUlMVVJFfXQ9cjtpPXM7c3dpdGNoKHRoaXMuY2FwdGlvbi5wbGFjZW1lbnQpe2Nhc2UibGVmdCI6Y2FzZSJyaWdodCI6Y2FzZSJpbmxpbmUiOnQrPWE7YnJlYWs7Y2FzZSJ0b3AiOmNhc2UiYm90dG9tIjppKz1vfX1lbHNle3Q9YTtpPW99aWYodCYmIiI9PT10aGlzLncpe3QrPXI7dGhpcy53PU1hdGgubWluKHRoaXMubWF4Vzw9MD8xLzA6dGhpcy5tYXhXLHRoaXMubWluVysxPHQ/dDp0aGlzLm1pblcpfWlmKGkmJiIiPT09dGhpcy5oKXtpKz1zO3RoaXMuaD1NYXRoLm1pbih0aGlzLm1heEg8PTA/MS8wOnRoaXMubWF4SCx0aGlzLm1pbkgrMTxpP2k6dGhpcy5taW5IKX19dGhpc1tMc10oKTtmaXhEaW1lbnNpb25zKHRoaXMpO3NldEZpcnN0VW5zcGxpdHRhYmxlKHRoaXMpO2lmKCFjaGVja0RpbWVuc2lvbnModGhpcyxlKSl7dGhpcy53PWk7dGhpcy5oPWE7dGhpc1tMc10oKTtyZXR1cm4gSFRNTFJlc3VsdC5GQUlMVVJFfXVuc2V0Rmlyc3RVbnNwbGl0dGFibGUodGhpcyk7Y29uc3Qgbz10b1N0eWxlKHRoaXMsImZvbnQiLCJkaW1lbnNpb25zIiwicG9zaXRpb24iLCJyb3RhdGUiLCJhbmNob3JUeXBlIiwicHJlc2VuY2UiLCJtYXJnaW4iLCJoQWxpZ24iKTtzZXRNaW5NYXhEaW1lbnNpb25zKHRoaXMsbyk7Y29uc3QgZz1bInhmYUZpZWxkIl07dGhpcy5mb250JiZnLnB1c2goInhmYUZvbnQiKTtpc1ByaW50T25seSh0aGlzKSYmZy5wdXNoKCJ4ZmFQcmludE9ubHkiKTtjb25zdCBjPXtzdHlsZTpvLGlkOnRoaXNbenNdLGNsYXNzOmd9O2lmKG8ubWFyZ2luKXtvLnBhZGRpbmc9by5tYXJnaW47ZGVsZXRlIG8ubWFyZ2lufXNldEFjY2Vzcyh0aGlzLGcpO3RoaXMubmFtZSYmKGMueGZhTmFtZT10aGlzLm5hbWUpO2NvbnN0IGw9W10saD17bmFtZToiZGl2IixhdHRyaWJ1dGVzOmMsY2hpbGRyZW46bH07YXBwbHlBc3Npc3QodGhpcyxjKTtjb25zdCBDPXRoaXMuYm9yZGVyP3RoaXMuYm9yZGVyW19zXSgpOm51bGwsUT1jb21wdXRlQmJveCh0aGlzLGgsZSksRT10aGlzLnVpW1ZzXSgpLmh0bWw7aWYoIUUpe09iamVjdC5hc3NpZ24obyxDKTtyZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKGNyZWF0ZVdyYXBwZXIodGhpcyxoKSxRKX10aGlzW1dzXSYmKEUuY2hpbGRyZW4/LlswXT9FLmNoaWxkcmVuWzBdLmF0dHJpYnV0ZXMudGFiaW5kZXg9dGhpc1tXc106RS5hdHRyaWJ1dGVzLnRhYmluZGV4PXRoaXNbV3NdKTtFLmF0dHJpYnV0ZXMuc3R5bGV8fChFLmF0dHJpYnV0ZXMuc3R5bGU9T2JqZWN0LmNyZWF0ZShudWxsKSk7bGV0IHU9bnVsbDtpZih0aGlzLnVpLmJ1dHRvbil7MT09PUUuY2hpbGRyZW4ubGVuZ3RoJiYoW3VdPUUuY2hpbGRyZW4uc3BsaWNlKDAsMSkpO09iamVjdC5hc3NpZ24oRS5hdHRyaWJ1dGVzLnN0eWxlLEMpfWVsc2UgT2JqZWN0LmFzc2lnbihvLEMpO2wucHVzaChFKTtpZih0aGlzLnZhbHVlKWlmKHRoaXMudWkuaW1hZ2VFZGl0KUUuY2hpbGRyZW4ucHVzaCh0aGlzLnZhbHVlW1ZzXSgpLmh0bWwpO2Vsc2UgaWYoIXRoaXMudWkuYnV0dG9uKXtsZXQgZT0iIjtpZih0aGlzLnZhbHVlLmV4RGF0YSllPXRoaXMudmFsdWUuZXhEYXRhW2pzXSgpO2Vsc2UgaWYodGhpcy52YWx1ZS50ZXh0KWU9dGhpcy52YWx1ZS50ZXh0W3NzXSgpO2Vsc2V7Y29uc3QgdD10aGlzLnZhbHVlW1ZzXSgpLmh0bWw7bnVsbCE9PXQmJihlPXQuY2hpbGRyZW5bMF0udmFsdWUpfXRoaXMudWkudGV4dEVkaXQmJnRoaXMudmFsdWUudGV4dD8ubWF4Q2hhcnMmJihFLmNoaWxkcmVuWzBdLmF0dHJpYnV0ZXMubWF4TGVuZ3RoPXRoaXMudmFsdWUudGV4dC5tYXhDaGFycyk7aWYoZSl7aWYodGhpcy51aS5udW1lcmljRWRpdCl7ZT1wYXJzZUZsb2F0KGUpO2U9aXNOYU4oZSk/IiI6ZS50b1N0cmluZygpfSJ0ZXh0YXJlYSI9PT1FLmNoaWxkcmVuWzBdLm5hbWU/RS5jaGlsZHJlblswXS5hdHRyaWJ1dGVzLnRleHRDb250ZW50PWU6RS5jaGlsZHJlblswXS5hdHRyaWJ1dGVzLnZhbHVlPWV9fWlmKCF0aGlzLnVpLmltYWdlRWRpdCYmRS5jaGlsZHJlbj8uWzBdJiZ0aGlzLmgpe249bnx8Z2V0Qm9yZGVyRGltcyh0aGlzLnVpW3NzXSgpKTtsZXQgdD0wO2lmKHRoaXMuY2FwdGlvbiYmWyJ0b3AiLCJib3R0b20iXS5pbmNsdWRlcyh0aGlzLmNhcHRpb24ucGxhY2VtZW50KSl7dD10aGlzLmNhcHRpb24ucmVzZXJ2ZTt0PD0wJiYodD10aGlzLmNhcHRpb25bc3NdKGUpLmgpO2NvbnN0IGk9dGhpcy5oLXQtcy1uLmg7RS5jaGlsZHJlblswXS5hdHRyaWJ1dGVzLnN0eWxlLmhlaWdodD1tZWFzdXJlVG9TdHJpbmcoaSl9ZWxzZSBFLmNoaWxkcmVuWzBdLmF0dHJpYnV0ZXMuc3R5bGUuaGVpZ2h0PSIxMDAlIn11JiZFLmNoaWxkcmVuLnB1c2godSk7aWYoIXQpe0UuYXR0cmlidXRlcy5jbGFzcyYmRS5hdHRyaWJ1dGVzLmNsYXNzLnB1c2goInhmYUxlZnQiKTt0aGlzLnc9aTt0aGlzLmg9YTtyZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKGNyZWF0ZVdyYXBwZXIodGhpcyxoKSxRKX1pZih0aGlzLnVpLmJ1dHRvbil7by5wYWRkaW5nJiZkZWxldGUgby5wYWRkaW5nOyJkaXYiPT09dC5uYW1lJiYodC5uYW1lPSJzcGFuIik7RS5jaGlsZHJlbi5wdXNoKHQpO3JldHVybiBIVE1MUmVzdWx0LnN1Y2Nlc3MoaCxRKX10aGlzLnVpLmNoZWNrQnV0dG9uJiYodC5hdHRyaWJ1dGVzLmNsYXNzWzBdPSJ4ZmFDYXB0aW9uRm9yQ2hlY2tCdXR0b24iKTtFLmF0dHJpYnV0ZXMuY2xhc3N8fChFLmF0dHJpYnV0ZXMuY2xhc3M9W10pO0UuY2hpbGRyZW4uc3BsaWNlKDAsMCx0KTtzd2l0Y2godGhpcy5jYXB0aW9uLnBsYWNlbWVudCl7Y2FzZSJsZWZ0IjpjYXNlImlubGluZSI6RS5hdHRyaWJ1dGVzLmNsYXNzLnB1c2goInhmYUxlZnQiKTticmVhaztjYXNlInJpZ2h0IjpFLmF0dHJpYnV0ZXMuY2xhc3MucHVzaCgieGZhUmlnaHQiKTticmVhaztjYXNlInRvcCI6RS5hdHRyaWJ1dGVzLmNsYXNzLnB1c2goInhmYVRvcCIpO2JyZWFrO2Nhc2UiYm90dG9tIjpFLmF0dHJpYnV0ZXMuY2xhc3MucHVzaCgieGZhQm90dG9tIil9dGhpcy53PWk7dGhpcy5oPWE7cmV0dXJuIEhUTUxSZXN1bHQuc3VjY2VzcyhjcmVhdGVXcmFwcGVyKHRoaXMsaCksUSl9fWNsYXNzIEZpbGwgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTW4sImZpbGwiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMucHJlc2VuY2U9Z2V0U3RyaW5nT3B0aW9uKGUucHJlc2VuY2UsWyJ2aXNpYmxlIiwiaGlkZGVuIiwiaW5hY3RpdmUiLCJpbnZpc2libGUiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuY29sb3I9bnVsbDt0aGlzLmV4dHJhcz1udWxsO3RoaXMubGluZWFyPW51bGw7dGhpcy5wYXR0ZXJuPW51bGw7dGhpcy5yYWRpYWw9bnVsbDt0aGlzLnNvbGlkPW51bGw7dGhpcy5zdGlwcGxlPW51bGx9W19zXSgpe2NvbnN0IGU9dGhpc1tsc10oKSx0PWVbbHNdKClbbHNdKCksaT1PYmplY3QuY3JlYXRlKG51bGwpO2xldCBhPSJjb2xvciIscj1hO2lmKGUgaW5zdGFuY2VvZiBCb3JkZXIpe2E9ImJhY2tncm91bmQtY29sb3IiO3I9ImJhY2tncm91bmQiO3QgaW5zdGFuY2VvZiBVaSYmKGkuYmFja2dyb3VuZENvbG9yPSJ3aGl0ZSIpfWlmKGUgaW5zdGFuY2VvZiBSZWN0YW5nbGV8fGUgaW5zdGFuY2VvZiBBcmMpe2E9cj0iZmlsbCI7aS5maWxsPSJ3aGl0ZSJ9Zm9yKGNvbnN0IGUgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpe2lmKCJleHRyYXMiPT09ZXx8ImNvbG9yIj09PWUpY29udGludWU7Y29uc3QgdD10aGlzW2VdO2lmKCEodCBpbnN0YW5jZW9mIFhGQU9iamVjdCkpY29udGludWU7Y29uc3Qgcz10W19zXSh0aGlzLmNvbG9yKTtzJiYoaVtzLnN0YXJ0c1dpdGgoIiMiKT9hOnJdPXMpO3JldHVybiBpfWlmKHRoaXMuY29sb3I/LnZhbHVlKXtjb25zdCBlPXRoaXMuY29sb3JbX3NdKCk7aVtlLnN0YXJ0c1dpdGgoIiMiKT9hOnJdPWV9cmV0dXJuIGl9fWNsYXNzIEZpbHRlciBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihNbiwiZmlsdGVyIiwhMCk7dGhpcy5hZGRSZXZvY2F0aW9uSW5mbz1nZXRTdHJpbmdPcHRpb24oZS5hZGRSZXZvY2F0aW9uSW5mbyxbIiIsInJlcXVpcmVkIiwib3B0aW9uYWwiLCJub25lIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMudmVyc2lvbj1nZXRJbnRlZ2VyKHtkYXRhOnRoaXMudmVyc2lvbixkZWZhdWx0VmFsdWU6NSx2YWxpZGF0ZTplPT5lPj0xJiZlPD01fSk7dGhpcy5hcHBlYXJhbmNlRmlsdGVyPW51bGw7dGhpcy5jZXJ0aWZpY2F0ZXM9bnVsbDt0aGlzLmRpZ2VzdE1ldGhvZHM9bnVsbDt0aGlzLmVuY29kaW5ncz1udWxsO3RoaXMuZW5jcnlwdGlvbk1ldGhvZHM9bnVsbDt0aGlzLmhhbmRsZXI9bnVsbDt0aGlzLmxvY2tEb2N1bWVudD1udWxsO3RoaXMubWRwPW51bGw7dGhpcy5yZWFzb25zPW51bGw7dGhpcy50aW1lU3RhbXA9bnVsbH19Y2xhc3MgRmxvYXQgZXh0ZW5kcyBDb250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE1uLCJmbG9hdCIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifVtfcl0oKXtjb25zdCBlPXBhcnNlRmxvYXQodGhpc1tqcl0udHJpbSgpKTt0aGlzW2pyXT1pc05hTihlKT9udWxsOmV9W1ZzXShlKXtyZXR1cm4gdmFsdWVUb0h0bWwobnVsbCE9PXRoaXNbanJdP3RoaXNbanJdLnRvU3RyaW5nKCk6IiIpfX1jbGFzcyB0ZW1wbGF0ZV9Gb250IGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE1uLCJmb250IiwhMCk7dGhpcy5iYXNlbGluZVNoaWZ0PWdldE1lYXN1cmVtZW50KGUuYmFzZWxpbmVTaGlmdCk7dGhpcy5mb250SG9yaXpvbnRhbFNjYWxlPWdldEZsb2F0KHtkYXRhOmUuZm9udEhvcml6b250YWxTY2FsZSxkZWZhdWx0VmFsdWU6MTAwLHZhbGlkYXRlOmU9PmU+PTB9KTt0aGlzLmZvbnRWZXJ0aWNhbFNjYWxlPWdldEZsb2F0KHtkYXRhOmUuZm9udFZlcnRpY2FsU2NhbGUsZGVmYXVsdFZhbHVlOjEwMCx2YWxpZGF0ZTplPT5lPj0wfSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLmtlcm5pbmdNb2RlPWdldFN0cmluZ09wdGlvbihlLmtlcm5pbmdNb2RlLFsibm9uZSIsInBhaXIiXSk7dGhpcy5sZXR0ZXJTcGFjaW5nPWdldE1lYXN1cmVtZW50KGUubGV0dGVyU3BhY2luZywiMCIpO3RoaXMubGluZVRocm91Z2g9Z2V0SW50ZWdlcih7ZGF0YTplLmxpbmVUaHJvdWdoLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfHwyPT09ZX0pO3RoaXMubGluZVRocm91Z2hQZXJpb2Q9Z2V0U3RyaW5nT3B0aW9uKGUubGluZVRocm91Z2hQZXJpb2QsWyJhbGwiLCJ3b3JkIl0pO3RoaXMub3ZlcmxpbmU9Z2V0SW50ZWdlcih7ZGF0YTplLm92ZXJsaW5lLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfHwyPT09ZX0pO3RoaXMub3ZlcmxpbmVQZXJpb2Q9Z2V0U3RyaW5nT3B0aW9uKGUub3ZlcmxpbmVQZXJpb2QsWyJhbGwiLCJ3b3JkIl0pO3RoaXMucG9zdHVyZT1nZXRTdHJpbmdPcHRpb24oZS5wb3N0dXJlLFsibm9ybWFsIiwiaXRhbGljIl0pO3RoaXMuc2l6ZT1nZXRNZWFzdXJlbWVudChlLnNpemUsIjEwcHQiKTt0aGlzLnR5cGVmYWNlPWUudHlwZWZhY2V8fCJDb3VyaWVyIjt0aGlzLnVuZGVybGluZT1nZXRJbnRlZ2VyKHtkYXRhOmUudW5kZXJsaW5lLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfHwyPT09ZX0pO3RoaXMudW5kZXJsaW5lUGVyaW9kPWdldFN0cmluZ09wdGlvbihlLnVuZGVybGluZVBlcmlvZCxbImFsbCIsIndvcmQiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMud2VpZ2h0PWdldFN0cmluZ09wdGlvbihlLndlaWdodCxbIm5vcm1hbCIsImJvbGQiXSk7dGhpcy5leHRyYXM9bnVsbDt0aGlzLmZpbGw9bnVsbH1bVHJdKGUpe3N1cGVyW1RyXShlKTt0aGlzW0NzXS51c2VkVHlwZWZhY2VzLmFkZCh0aGlzLnR5cGVmYWNlKX1bX3NdKCl7Y29uc3QgZT10b1N0eWxlKHRoaXMsImZpbGwiKSx0PWUuY29sb3I7aWYodClpZigiIzAwMDAwMCI9PT10KWRlbGV0ZSBlLmNvbG9yO2Vsc2UgaWYoIXQuc3RhcnRzV2l0aCgiIyIpKXtlLmJhY2tncm91bmQ9dDtlLmJhY2tncm91bmRDbGlwPSJ0ZXh0IjtlLmNvbG9yPSJ0cmFuc3BhcmVudCJ9dGhpcy5iYXNlbGluZVNoaWZ0JiYoZS52ZXJ0aWNhbEFsaWduPW1lYXN1cmVUb1N0cmluZyh0aGlzLmJhc2VsaW5lU2hpZnQpKTtlLmZvbnRLZXJuaW5nPSJub25lIj09PXRoaXMua2VybmluZ01vZGU/Im5vbmUiOiJub3JtYWwiO2UubGV0dGVyU3BhY2luZz1tZWFzdXJlVG9TdHJpbmcodGhpcy5sZXR0ZXJTcGFjaW5nKTtpZigwIT09dGhpcy5saW5lVGhyb3VnaCl7ZS50ZXh0RGVjb3JhdGlvbj0ibGluZS10aHJvdWdoIjsyPT09dGhpcy5saW5lVGhyb3VnaCYmKGUudGV4dERlY29yYXRpb25TdHlsZT0iZG91YmxlIil9aWYoMCE9PXRoaXMub3ZlcmxpbmUpe2UudGV4dERlY29yYXRpb249Im92ZXJsaW5lIjsyPT09dGhpcy5vdmVybGluZSYmKGUudGV4dERlY29yYXRpb25TdHlsZT0iZG91YmxlIil9ZS5mb250U3R5bGU9dGhpcy5wb3N0dXJlO2UuZm9udFNpemU9bWVhc3VyZVRvU3RyaW5nKC45OSp0aGlzLnNpemUpO3NldEZvbnRGYW1pbHkodGhpcyx0aGlzLHRoaXNbQ3NdLmZvbnRGaW5kZXIsZSk7aWYoMCE9PXRoaXMudW5kZXJsaW5lKXtlLnRleHREZWNvcmF0aW9uPSJ1bmRlcmxpbmUiOzI9PT10aGlzLnVuZGVybGluZSYmKGUudGV4dERlY29yYXRpb25TdHlsZT0iZG91YmxlIil9ZS5mb250V2VpZ2h0PXRoaXMud2VpZ2h0O3JldHVybiBlfX1jbGFzcyBGb3JtYXQgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTW4sImZvcm1hdCIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5waWN0dXJlPW51bGx9fWNsYXNzIEhhbmRsZXIgZXh0ZW5kcyBTdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTW4sImhhbmRsZXIiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudHlwZT1nZXRTdHJpbmdPcHRpb24oZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIEh5cGhlbmF0aW9uIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE1uLCJoeXBoZW5hdGlvbiIpO3RoaXMuZXhjbHVkZUFsbENhcHM9Z2V0SW50ZWdlcih7ZGF0YTplLmV4Y2x1ZGVBbGxDYXBzLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSk7dGhpcy5leGNsdWRlSW5pdGlhbENhcD1nZXRJbnRlZ2VyKHtkYXRhOmUuZXhjbHVkZUluaXRpYWxDYXAsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLmh5cGhlbmF0ZT1nZXRJbnRlZ2VyKHtkYXRhOmUuaHlwaGVuYXRlLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnB1c2hDaGFyYWN0ZXJDb3VudD1nZXRJbnRlZ2VyKHtkYXRhOmUucHVzaENoYXJhY3RlckNvdW50LGRlZmF1bHRWYWx1ZTozLHZhbGlkYXRlOmU9PmU+PTB9KTt0aGlzLnJlbWFpbkNoYXJhY3RlckNvdW50PWdldEludGVnZXIoe2RhdGE6ZS5yZW1haW5DaGFyYWN0ZXJDb3VudCxkZWZhdWx0VmFsdWU6Myx2YWxpZGF0ZTplPT5lPj0wfSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMud29yZENoYXJhY3RlckNvdW50PWdldEludGVnZXIoe2RhdGE6ZS53b3JkQ2hhcmFjdGVyQ291bnQsZGVmYXVsdFZhbHVlOjcsdmFsaWRhdGU6ZT0+ZT49MH0pfX1jbGFzcyBJbWFnZSBleHRlbmRzIFN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihNbiwiaW1hZ2UiKTt0aGlzLmFzcGVjdD1nZXRTdHJpbmdPcHRpb24oZS5hc3BlY3QsWyJmaXQiLCJhY3R1YWwiLCJoZWlnaHQiLCJub25lIiwid2lkdGgiXSk7dGhpcy5jb250ZW50VHlwZT1lLmNvbnRlbnRUeXBlfHwiIjt0aGlzLmhyZWY9ZS5ocmVmfHwiIjt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudHJhbnNmZXJFbmNvZGluZz1nZXRTdHJpbmdPcHRpb24oZS50cmFuc2ZlckVuY29kaW5nLFsiYmFzZTY0Iiwibm9uZSIsInBhY2thZ2UiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifVtWc10oKXtpZih0aGlzLmNvbnRlbnRUeXBlJiYhTG4uaGFzKHRoaXMuY29udGVudFR5cGUudG9Mb3dlckNhc2UoKSkpcmV0dXJuIEhUTUxSZXN1bHQuRU1QVFk7bGV0IGU9dGhpc1tDc10uaW1hZ2VzJiZ0aGlzW0NzXS5pbWFnZXMuZ2V0KHRoaXMuaHJlZik7aWYoIWUmJih0aGlzLmhyZWZ8fCF0aGlzW2pyXSkpcmV0dXJuIEhUTUxSZXN1bHQuRU1QVFk7ZXx8ImJhc2U2NCIhPT10aGlzLnRyYW5zZmVyRW5jb2Rpbmd8fChlPWZ1bmN0aW9uIGZyb21CYXNlNjRVdGlsKGUpe3JldHVybiBVaW50OEFycmF5LmZyb21CYXNlNjQ/VWludDhBcnJheS5mcm9tQmFzZTY0KGUpOnN0cmluZ1RvQnl0ZXMoYXRvYihlKSl9KHRoaXNbanJdKSk7aWYoIWUpcmV0dXJuIEhUTUxSZXN1bHQuRU1QVFk7aWYoIXRoaXMuY29udGVudFR5cGUpe2Zvcihjb25zdFt0LGldb2YgSG4paWYoZS5sZW5ndGg+dC5sZW5ndGgmJnQuZXZlcnkoKCh0LGkpPT50PT09ZVtpXSkpKXt0aGlzLmNvbnRlbnRUeXBlPWk7YnJlYWt9aWYoIXRoaXMuY29udGVudFR5cGUpcmV0dXJuIEhUTUxSZXN1bHQuRU1QVFl9Y29uc3QgdD1uZXcgQmxvYihbZV0se3R5cGU6dGhpcy5jb250ZW50VHlwZX0pO2xldCBpO3N3aXRjaCh0aGlzLmFzcGVjdCl7Y2FzZSJmaXQiOmNhc2UiYWN0dWFsIjpicmVhaztjYXNlImhlaWdodCI6aT17aGVpZ2h0OiIxMDAlIixvYmplY3RGaXQ6ImZpbGwifTticmVhaztjYXNlIm5vbmUiOmk9e3dpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLG9iamVjdEZpdDoiZmlsbCJ9O2JyZWFrO2Nhc2Uid2lkdGgiOmk9e3dpZHRoOiIxMDAlIixvYmplY3RGaXQ6ImZpbGwifX1jb25zdCBhPXRoaXNbbHNdKCk7cmV0dXJuIEhUTUxSZXN1bHQuc3VjY2Vzcyh7bmFtZToiaW1nIixhdHRyaWJ1dGVzOntjbGFzczpbInhmYUltYWdlIl0sc3R5bGU6aSxzcmM6VVJMLmNyZWF0ZU9iamVjdFVSTCh0KSxhbHQ6YT9hcmlhTGFiZWwoYVtsc10oKSk6bnVsbH19KX19Y2xhc3MgSW1hZ2VFZGl0IGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE1uLCJpbWFnZUVkaXQiLCEwKTt0aGlzLmRhdGE9Z2V0U3RyaW5nT3B0aW9uKGUuZGF0YSxbImxpbmsiLCJlbWJlZCJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmJvcmRlcj1udWxsO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5tYXJnaW49bnVsbH1bVnNdKGUpe3JldHVybiJlbWJlZCI9PT10aGlzLmRhdGE/SFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGNoaWxkcmVuOltdLGF0dHJpYnV0ZXM6e319KTpIVE1MUmVzdWx0LkVNUFRZfX1jbGFzcyBJbnRlZ2VyIGV4dGVuZHMgQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihNbiwiaW50ZWdlciIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifVtfcl0oKXtjb25zdCBlPXBhcnNlSW50KHRoaXNbanJdLnRyaW0oKSwxMCk7dGhpc1tqcl09aXNOYU4oZSk/bnVsbDplfVtWc10oZSl7cmV0dXJuIHZhbHVlVG9IdG1sKG51bGwhPT10aGlzW2pyXT90aGlzW2pyXS50b1N0cmluZygpOiIiKX19Y2xhc3MgSXNzdWVycyBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihNbiwiaXNzdWVycyIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy50eXBlPWdldFN0cmluZ09wdGlvbihlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmNlcnRpZmljYXRlPW5ldyBYRkFPYmplY3RBcnJheX19Y2xhc3MgSXRlbXMgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTW4sIml0ZW1zIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnByZXNlbmNlPWdldFN0cmluZ09wdGlvbihlLnByZXNlbmNlLFsidmlzaWJsZSIsImhpZGRlbiIsImluYWN0aXZlIiwiaW52aXNpYmxlIl0pO3RoaXMucmVmPWUucmVmfHwiIjt0aGlzLnNhdmU9Z2V0SW50ZWdlcih7ZGF0YTplLnNhdmUsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5ib29sZWFuPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmRhdGU9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZGF0ZVRpbWU9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZGVjaW1hbD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5leERhdGE9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZmxvYXQ9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuaW1hZ2U9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuaW50ZWdlcj1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy50ZXh0PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnRpbWU9bmV3IFhGQU9iamVjdEFycmF5fVtWc10oKXtjb25zdCBlPVtdO2Zvcihjb25zdCB0IG9mIHRoaXNbb3NdKCkpZS5wdXNoKHRbanNdKCkpO3JldHVybiBIVE1MUmVzdWx0LnN1Y2Nlc3MoZSl9fWNsYXNzIEtlZXAgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTW4sImtlZXAiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO2NvbnN0IHQ9WyJub25lIiwiY29udGVudEFyZWEiLCJwYWdlQXJlYSJdO3RoaXMuaW50YWN0PWdldFN0cmluZ09wdGlvbihlLmludGFjdCx0KTt0aGlzLm5leHQ9Z2V0U3RyaW5nT3B0aW9uKGUubmV4dCx0KTt0aGlzLnByZXZpb3VzPWdldFN0cmluZ09wdGlvbihlLnByZXZpb3VzLHQpO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmV4dHJhcz1udWxsfX1jbGFzcyBLZXlVc2FnZSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihNbiwia2V5VXNhZ2UiKTtjb25zdCB0PVsiIiwieWVzIiwibm8iXTt0aGlzLmNybFNpZ249Z2V0U3RyaW5nT3B0aW9uKGUuY3JsU2lnbix0KTt0aGlzLmRhdGFFbmNpcGhlcm1lbnQ9Z2V0U3RyaW5nT3B0aW9uKGUuZGF0YUVuY2lwaGVybWVudCx0KTt0aGlzLmRlY2lwaGVyT25seT1nZXRTdHJpbmdPcHRpb24oZS5kZWNpcGhlck9ubHksdCk7dGhpcy5kaWdpdGFsU2lnbmF0dXJlPWdldFN0cmluZ09wdGlvbihlLmRpZ2l0YWxTaWduYXR1cmUsdCk7dGhpcy5lbmNpcGhlck9ubHk9Z2V0U3RyaW5nT3B0aW9uKGUuZW5jaXBoZXJPbmx5LHQpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5rZXlBZ3JlZW1lbnQ9Z2V0U3RyaW5nT3B0aW9uKGUua2V5QWdyZWVtZW50LHQpO3RoaXMua2V5Q2VydFNpZ249Z2V0U3RyaW5nT3B0aW9uKGUua2V5Q2VydFNpZ24sdCk7dGhpcy5rZXlFbmNpcGhlcm1lbnQ9Z2V0U3RyaW5nT3B0aW9uKGUua2V5RW5jaXBoZXJtZW50LHQpO3RoaXMubm9uUmVwdWRpYXRpb249Z2V0U3RyaW5nT3B0aW9uKGUubm9uUmVwdWRpYXRpb24sdCk7dGhpcy50eXBlPWdldFN0cmluZ09wdGlvbihlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgTGluZSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihNbiwibGluZSIsITApO3RoaXMuaGFuZD1nZXRTdHJpbmdPcHRpb24oZS5oYW5kLFsiZXZlbiIsImxlZnQiLCJyaWdodCJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMuc2xvcGU9Z2V0U3RyaW5nT3B0aW9uKGUuc2xvcGUsWyJcXCIsIi8iXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZWRnZT1udWxsfVtWc10oKXtjb25zdCBlPXRoaXNbbHNdKClbbHNdKCksdD10aGlzLmVkZ2V8fG5ldyBFZGdlKHt9KSxpPXRbX3NdKCksYT1PYmplY3QuY3JlYXRlKG51bGwpLHI9InZpc2libGUiPT09dC5wcmVzZW5jZT90LnRoaWNrbmVzczowO2Euc3Ryb2tlV2lkdGg9bWVhc3VyZVRvU3RyaW5nKHIpO2Euc3Ryb2tlPWkuY29sb3I7bGV0IHMsbixvLGcsYz0iMTAwJSIsbD0iMTAwJSI7aWYoZS53PD1yKXtbcyxuLG8sZ109WyI1MCUiLDAsIjUwJSIsIjEwMCUiXTtjPWEuc3Ryb2tlV2lkdGh9ZWxzZSBpZihlLmg8PXIpe1tzLG4sbyxnXT1bMCwiNTAlIiwiMTAwJSIsIjUwJSJdO2w9YS5zdHJva2VXaWR0aH1lbHNlIlxcIj09PXRoaXMuc2xvcGU/W3MsbixvLGddPVswLDAsIjEwMCUiLCIxMDAlIl06W3MsbixvLGddPVswLCIxMDAlIiwiMTAwJSIsMF07Y29uc3QgaD17bmFtZToic3ZnIixjaGlsZHJlbjpbe25hbWU6ImxpbmUiLGF0dHJpYnV0ZXM6e3htbG5zOlVuLHgxOnMseTE6bix4MjpvLHkyOmcsc3R5bGU6YX19XSxhdHRyaWJ1dGVzOnt4bWxuczpVbix3aWR0aDpjLGhlaWdodDpsLHN0eWxlOntvdmVyZmxvdzoidmlzaWJsZSJ9fX07aWYoaGFzTWFyZ2luKGUpKXJldHVybiBIVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImRpdiIsYXR0cmlidXRlczp7c3R5bGU6e2Rpc3BsYXk6ImlubGluZSIsd2lkdGg6IjEwMCUiLGhlaWdodDoiMTAwJSJ9fSxjaGlsZHJlbjpbaF19KTtoLmF0dHJpYnV0ZXMuc3R5bGUucG9zaXRpb249ImFic29sdXRlIjtyZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKGgpfX1jbGFzcyBMaW5lYXIgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTW4sImxpbmVhciIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy50eXBlPWdldFN0cmluZ09wdGlvbihlLnR5cGUsWyJ0b1JpZ2h0IiwidG9Cb3R0b20iLCJ0b0xlZnQiLCJ0b1RvcCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5jb2xvcj1udWxsO3RoaXMuZXh0cmFzPW51bGx9W19zXShlKXtlPWU/ZVtfc10oKToiI0ZGRkZGRiI7cmV0dXJuYGxpbmVhci1ncmFkaWVudCgke3RoaXMudHlwZS5yZXBsYWNlKC8oW1JCTFRdKS8sIiAkMSIpLnRvTG93ZXJDYXNlKCl9LCAke2V9LCAke3RoaXMuY29sb3I/dGhpcy5jb2xvcltfc10oKToiIzAwMDAwMCJ9KWB9fWNsYXNzIExvY2tEb2N1bWVudCBleHRlbmRzIENvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTW4sImxvY2tEb2N1bWVudCIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy50eXBlPWdldFN0cmluZ09wdGlvbihlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn1bX3JdKCl7dGhpc1tqcl09Z2V0U3RyaW5nT3B0aW9uKHRoaXNbanJdLFsiYXV0byIsIjAiLCIxIl0pfX1jbGFzcyBNYW5pZmVzdCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihNbiwibWFuaWZlc3QiLCEwKTt0aGlzLmFjdGlvbj1nZXRTdHJpbmdPcHRpb24oZS5hY3Rpb24sWyJpbmNsdWRlIiwiYWxsIiwiZXhjbHVkZSJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmV4dHJhcz1udWxsO3RoaXMucmVmPW5ldyBYRkFPYmplY3RBcnJheX19Y2xhc3MgTWFyZ2luIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE1uLCJtYXJnaW4iLCEwKTt0aGlzLmJvdHRvbUluc2V0PWdldE1lYXN1cmVtZW50KGUuYm90dG9tSW5zZXQsIjAiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubGVmdEluc2V0PWdldE1lYXN1cmVtZW50KGUubGVmdEluc2V0LCIwIik7dGhpcy5yaWdodEluc2V0PWdldE1lYXN1cmVtZW50KGUucmlnaHRJbnNldCwiMCIpO3RoaXMudG9wSW5zZXQ9Z2V0TWVhc3VyZW1lbnQoZS50b3BJbnNldCwiMCIpO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmV4dHJhcz1udWxsfVtfc10oKXtyZXR1cm57bWFyZ2luOm1lYXN1cmVUb1N0cmluZyh0aGlzLnRvcEluc2V0KSsiICIrbWVhc3VyZVRvU3RyaW5nKHRoaXMucmlnaHRJbnNldCkrIiAiK21lYXN1cmVUb1N0cmluZyh0aGlzLmJvdHRvbUluc2V0KSsiICIrbWVhc3VyZVRvU3RyaW5nKHRoaXMubGVmdEluc2V0KX19fWNsYXNzIE1kcCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihNbiwibWRwIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnBlcm1pc3Npb25zPWdldEludGVnZXIoe2RhdGE6ZS5wZXJtaXNzaW9ucyxkZWZhdWx0VmFsdWU6Mix2YWxpZGF0ZTplPT4xPT09ZXx8Mz09PWV9KTt0aGlzLnNpZ25hdHVyZVR5cGU9Z2V0U3RyaW5nT3B0aW9uKGUuc2lnbmF0dXJlVHlwZSxbImZpbGxlciIsImF1dGhvciJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIE1lZGl1bSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihNbiwibWVkaXVtIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLmltYWdpbmdCQm94PWZ1bmN0aW9uIGdldEJCb3goZSl7Y29uc3QgdD0tMTtpZighZSlyZXR1cm57eDp0LHk6dCx3aWR0aDp0LGhlaWdodDp0fTtjb25zdCBpPWUudHJpbSgpLnNwbGl0KC9ccyosXHMqLykubWFwKChlPT5nZXRNZWFzdXJlbWVudChlLCItMSIpKSk7aWYoaS5sZW5ndGg8NHx8aVsyXTwwfHxpWzNdPDApcmV0dXJue3g6dCx5OnQsd2lkdGg6dCxoZWlnaHQ6dH07Y29uc3RbYSxyLHMsbl09aTtyZXR1cm57eDphLHk6cix3aWR0aDpzLGhlaWdodDpufX0oZS5pbWFnaW5nQkJveCk7dGhpcy5sb25nPWdldE1lYXN1cmVtZW50KGUubG9uZyk7dGhpcy5vcmllbnRhdGlvbj1nZXRTdHJpbmdPcHRpb24oZS5vcmllbnRhdGlvbixbInBvcnRyYWl0IiwibGFuZHNjYXBlIl0pO3RoaXMuc2hvcnQ9Z2V0TWVhc3VyZW1lbnQoZS5zaG9ydCk7dGhpcy5zdG9jaz1lLnN0b2NrfHwiIjt0aGlzLnRyYXlJbj1nZXRTdHJpbmdPcHRpb24oZS50cmF5SW4sWyJhdXRvIiwiZGVsZWdhdGUiLCJwYWdlRnJvbnQiXSk7dGhpcy50cmF5T3V0PWdldFN0cmluZ09wdGlvbihlLnRyYXlPdXQsWyJhdXRvIiwiZGVsZWdhdGUiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBNZXNzYWdlIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE1uLCJtZXNzYWdlIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy50ZXh0PW5ldyBYRkFPYmplY3RBcnJheX19Y2xhc3MgTnVtZXJpY0VkaXQgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTW4sIm51bWVyaWNFZGl0IiwhMCk7dGhpcy5oU2Nyb2xsUG9saWN5PWdldFN0cmluZ09wdGlvbihlLmhTY3JvbGxQb2xpY3ksWyJhdXRvIiwib2ZmIiwib24iXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5ib3JkZXI9bnVsbDt0aGlzLmNvbWI9bnVsbDt0aGlzLmV4dHJhcz1udWxsO3RoaXMubWFyZ2luPW51bGx9W1ZzXShlKXtjb25zdCB0PXRvU3R5bGUodGhpcywiYm9yZGVyIiwiZm9udCIsIm1hcmdpbiIpLGk9dGhpc1tsc10oKVtsc10oKSxhPXtuYW1lOiJpbnB1dCIsYXR0cmlidXRlczp7dHlwZToidGV4dCIsZmllbGRJZDppW3pzXSxkYXRhSWQ6aVtYcl0/Llt6c118fGlbenNdLGNsYXNzOlsieGZhVGV4dGZpZWxkIl0sc3R5bGU6dCwiYXJpYS1sYWJlbCI6YXJpYUxhYmVsKGkpLCJhcmlhLXJlcXVpcmVkIjohMX19O2lmKGlzUmVxdWlyZWQoaSkpe2EuYXR0cmlidXRlc1siYXJpYS1yZXF1aXJlZCJdPSEwO2EuYXR0cmlidXRlcy5yZXF1aXJlZD0hMH1yZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJsYWJlbCIsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFMYWJlbCJdfSxjaGlsZHJlbjpbYV19KX19Y2xhc3MgT2NjdXIgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTW4sIm9jY3VyIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLmluaXRpYWw9IiIhPT1lLmluaXRpYWw/Z2V0SW50ZWdlcih7ZGF0YTplLmluaXRpYWwsZGVmYXVsdFZhbHVlOiIiLHZhbGlkYXRlOmU9PiEwfSk6IiI7dGhpcy5tYXg9IiIhPT1lLm1heD9nZXRJbnRlZ2VyKHtkYXRhOmUubWF4LGRlZmF1bHRWYWx1ZToxLHZhbGlkYXRlOmU9PiEwfSk6IiI7dGhpcy5taW49IiIhPT1lLm1pbj9nZXRJbnRlZ2VyKHtkYXRhOmUubWluLGRlZmF1bHRWYWx1ZToxLHZhbGlkYXRlOmU9PiEwfSk6IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGx9W1RyXSgpe2NvbnN0IGU9dGhpc1tsc10oKSx0PXRoaXMubWluOyIiPT09dGhpcy5taW4mJih0aGlzLm1pbj1lIGluc3RhbmNlb2YgUGFnZUFyZWF8fGUgaW5zdGFuY2VvZiBQYWdlU2V0PzA6MSk7IiI9PT10aGlzLm1heCYmKHRoaXMubWF4PSIiPT09dD9lIGluc3RhbmNlb2YgUGFnZUFyZWF8fGUgaW5zdGFuY2VvZiBQYWdlU2V0Py0xOjE6dGhpcy5taW4pOy0xIT09dGhpcy5tYXgmJnRoaXMubWF4PHRoaXMubWluJiYodGhpcy5tYXg9dGhpcy5taW4pOyIiPT09dGhpcy5pbml0aWFsJiYodGhpcy5pbml0aWFsPWUgaW5zdGFuY2VvZiBUZW1wbGF0ZT8xOnRoaXMubWluKX19Y2xhc3MgT2lkIGV4dGVuZHMgU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE1uLCJvaWQiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgT2lkcyBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihNbiwib2lkcyIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy50eXBlPWdldFN0cmluZ09wdGlvbihlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLm9pZD1uZXcgWEZBT2JqZWN0QXJyYXl9fWNsYXNzIE92ZXJmbG93IGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE1uLCJvdmVyZmxvdyIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5sZWFkZXI9ZS5sZWFkZXJ8fCIiO3RoaXMudGFyZ2V0PWUudGFyZ2V0fHwiIjt0aGlzLnRyYWlsZXI9ZS50cmFpbGVyfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9W3NzXSgpe2lmKCF0aGlzW1pyXSl7Y29uc3QgZT10aGlzW2xzXSgpLHQ9dGhpc1toc10oKSxpPXRbS3NdKHRoaXMudGFyZ2V0LGUpLGE9dFtLc10odGhpcy5sZWFkZXIsZSkscj10W0tzXSh0aGlzLnRyYWlsZXIsZSk7dGhpc1tacl09e3RhcmdldDppPy5bMF18fG51bGwsbGVhZGVyOmE/LlswXXx8bnVsbCx0cmFpbGVyOnI/LlswXXx8bnVsbCxhZGRMZWFkZXI6ITEsYWRkVHJhaWxlcjohMX19cmV0dXJuIHRoaXNbWnJdfX1jbGFzcyBQYWdlQXJlYSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihNbiwicGFnZUFyZWEiLCEwKTt0aGlzLmJsYW5rT3JOb3RCbGFuaz1nZXRTdHJpbmdPcHRpb24oZS5ibGFua09yTm90QmxhbmssWyJhbnkiLCJibGFuayIsIm5vdEJsYW5rIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5pbml0aWFsTnVtYmVyPWdldEludGVnZXIoe2RhdGE6ZS5pbml0aWFsTnVtYmVyLGRlZmF1bHRWYWx1ZToxLHZhbGlkYXRlOmU9PiEwfSk7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5udW1iZXJlZD1nZXRJbnRlZ2VyKHtkYXRhOmUubnVtYmVyZWQsZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZT0+ITB9KTt0aGlzLm9kZE9yRXZlbj1nZXRTdHJpbmdPcHRpb24oZS5vZGRPckV2ZW4sWyJhbnkiLCJldmVuIiwib2RkIl0pO3RoaXMucGFnZVBvc2l0aW9uPWdldFN0cmluZ09wdGlvbihlLnBhZ2VQb3NpdGlvbixbImFueSIsImZpcnN0IiwibGFzdCIsIm9ubHkiLCJyZXN0Il0pO3RoaXMucmVsZXZhbnQ9Z2V0UmVsZXZhbnQoZS5yZWxldmFudCk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZGVzYz1udWxsO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5tZWRpdW09bnVsbDt0aGlzLm9jY3VyPW51bGw7dGhpcy5hcmVhPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmNvbnRlbnRBcmVhPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmRyYXc9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZXhjbEdyb3VwPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmZpZWxkPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnN1YmZvcm09bmV3IFhGQU9iamVjdEFycmF5fVtGc10oKXtpZighdGhpc1tacl0pe3RoaXNbWnJdPXtudW1iZXJPZlVzZTowfTtyZXR1cm4hMH1yZXR1cm4hdGhpcy5vY2N1cnx8LTE9PT10aGlzLm9jY3VyLm1heHx8dGhpc1tacl0ubnVtYmVyT2ZVc2U8dGhpcy5vY2N1ci5tYXh9W3FyXSgpe2RlbGV0ZSB0aGlzW1pyXX1bSXNdKCl7dGhpc1tacl18fCh0aGlzW1pyXT17bnVtYmVyT2ZVc2U6MH0pO2NvbnN0IGU9dGhpc1tsc10oKTtpZigib3JkZXJlZE9jY3VycmVuY2UiPT09ZS5yZWxhdGlvbiYmdGhpc1tGc10oKSl7dGhpc1tacl0ubnVtYmVyT2ZVc2UrPTE7cmV0dXJuIHRoaXN9cmV0dXJuIGVbSXNdKCl9W2VzXSgpe3JldHVybiB0aGlzW1pyXS5zcGFjZXx8e3dpZHRoOjAsaGVpZ2h0OjB9fVtWc10oKXt0aGlzW1pyXXx8KHRoaXNbWnJdPXtudW1iZXJPZlVzZToxfSk7Y29uc3QgZT1bXTt0aGlzW1pyXS5jaGlsZHJlbj1lO2NvbnN0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtpZih0aGlzLm1lZGl1bSYmdGhpcy5tZWRpdW0uc2hvcnQmJnRoaXMubWVkaXVtLmxvbmcpe3Qud2lkdGg9bWVhc3VyZVRvU3RyaW5nKHRoaXMubWVkaXVtLnNob3J0KTt0LmhlaWdodD1tZWFzdXJlVG9TdHJpbmcodGhpcy5tZWRpdW0ubG9uZyk7dGhpc1tacl0uc3BhY2U9e3dpZHRoOnRoaXMubWVkaXVtLnNob3J0LGhlaWdodDp0aGlzLm1lZGl1bS5sb25nfTtpZigibGFuZHNjYXBlIj09PXRoaXMubWVkaXVtLm9yaWVudGF0aW9uKXtjb25zdCBlPXQud2lkdGg7dC53aWR0aD10LmhlaWdodDt0LmhlaWdodD1lO3RoaXNbWnJdLnNwYWNlPXt3aWR0aDp0aGlzLm1lZGl1bS5sb25nLGhlaWdodDp0aGlzLm1lZGl1bS5zaG9ydH19fWVsc2Ugd2FybigiWEZBIC0gTm8gbWVkaXVtIHNwZWNpZmllZCBpbiBwYWdlQXJlYTogcGxlYXNlIGZpbGUgYSBidWcuIik7dGhpc1tLcl0oe2ZpbHRlcjpuZXcgU2V0KFsiYXJlYSIsImRyYXciLCJmaWVsZCIsInN1YmZvcm0iXSksaW5jbHVkZTohMH0pO3RoaXNbS3JdKHtmaWx0ZXI6bmV3IFNldChbImNvbnRlbnRBcmVhIl0pLGluY2x1ZGU6ITB9KTtyZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGNoaWxkcmVuOmUsYXR0cmlidXRlczp7Y2xhc3M6WyJ4ZmFQYWdlIl0saWQ6dGhpc1t6c10sc3R5bGU6dCx4ZmFOYW1lOnRoaXMubmFtZX19KX19Y2xhc3MgUGFnZVNldCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihNbiwicGFnZVNldCIsITApO3RoaXMuZHVwbGV4SW1wb3NpdGlvbj1nZXRTdHJpbmdPcHRpb24oZS5kdXBsZXhJbXBvc2l0aW9uLFsibG9uZ0VkZ2UiLCJzaG9ydEVkZ2UiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnJlbGF0aW9uPWdldFN0cmluZ09wdGlvbihlLnJlbGF0aW9uLFsib3JkZXJlZE9jY3VycmVuY2UiLCJkdXBsZXhQYWdpbmF0ZWQiLCJzaW1wbGV4UGFnaW5hdGVkIl0pO3RoaXMucmVsZXZhbnQ9Z2V0UmVsZXZhbnQoZS5yZWxldmFudCk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5vY2N1cj1udWxsO3RoaXMucGFnZUFyZWE9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMucGFnZVNldD1uZXcgWEZBT2JqZWN0QXJyYXl9W3FyXSgpe2Zvcihjb25zdCBlIG9mIHRoaXMucGFnZUFyZWEuY2hpbGRyZW4pZVtxcl0oKTtmb3IoY29uc3QgZSBvZiB0aGlzLnBhZ2VTZXQuY2hpbGRyZW4pZVtxcl0oKX1bRnNdKCl7cmV0dXJuIXRoaXMub2NjdXJ8fC0xPT09dGhpcy5vY2N1ci5tYXh8fHRoaXNbWnJdLm51bWJlck9mVXNlPHRoaXMub2NjdXIubWF4fVtJc10oKXt0aGlzW1pyXXx8KHRoaXNbWnJdPXtudW1iZXJPZlVzZToxLHBhZ2VJbmRleDotMSxwYWdlU2V0SW5kZXg6LTF9KTtpZigib3JkZXJlZE9jY3VycmVuY2UiPT09dGhpcy5yZWxhdGlvbil7aWYodGhpc1tacl0ucGFnZUluZGV4KzE8dGhpcy5wYWdlQXJlYS5jaGlsZHJlbi5sZW5ndGgpe3RoaXNbWnJdLnBhZ2VJbmRleCs9MTtyZXR1cm4gdGhpcy5wYWdlQXJlYS5jaGlsZHJlblt0aGlzW1pyXS5wYWdlSW5kZXhdW0lzXSgpfWlmKHRoaXNbWnJdLnBhZ2VTZXRJbmRleCsxPHRoaXMucGFnZVNldC5jaGlsZHJlbi5sZW5ndGgpe3RoaXNbWnJdLnBhZ2VTZXRJbmRleCs9MTtyZXR1cm4gdGhpcy5wYWdlU2V0LmNoaWxkcmVuW3RoaXNbWnJdLnBhZ2VTZXRJbmRleF1bSXNdKCl9aWYodGhpc1tGc10oKSl7dGhpc1tacl0ubnVtYmVyT2ZVc2UrPTE7dGhpc1tacl0ucGFnZUluZGV4PS0xO3RoaXNbWnJdLnBhZ2VTZXRJbmRleD0tMTtyZXR1cm4gdGhpc1tJc10oKX1jb25zdCBlPXRoaXNbbHNdKCk7aWYoZSBpbnN0YW5jZW9mIFBhZ2VTZXQpcmV0dXJuIGVbSXNdKCk7dGhpc1txcl0oKTtyZXR1cm4gdGhpc1tJc10oKX1jb25zdCBlPXRoaXNbaHNdKClbWnJdLnBhZ2VOdW1iZXIsdD1lJTI9PTA/ImV2ZW4iOiJvZGQiLGk9MD09PWU/ImZpcnN0IjoicmVzdCI7bGV0IGE9dGhpcy5wYWdlQXJlYS5jaGlsZHJlbi5maW5kKChlPT5lLm9kZE9yRXZlbj09PXQmJmUucGFnZVBvc2l0aW9uPT09aSkpO2lmKGEpcmV0dXJuIGE7YT10aGlzLnBhZ2VBcmVhLmNoaWxkcmVuLmZpbmQoKGU9PiJhbnkiPT09ZS5vZGRPckV2ZW4mJmUucGFnZVBvc2l0aW9uPT09aSkpO2lmKGEpcmV0dXJuIGE7YT10aGlzLnBhZ2VBcmVhLmNoaWxkcmVuLmZpbmQoKGU9PiJhbnkiPT09ZS5vZGRPckV2ZW4mJiJhbnkiPT09ZS5wYWdlUG9zaXRpb24pKTtyZXR1cm4gYXx8dGhpcy5wYWdlQXJlYS5jaGlsZHJlblswXX19Y2xhc3MgUGFyYSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihNbiwicGFyYSIsITApO3RoaXMuaEFsaWduPWdldFN0cmluZ09wdGlvbihlLmhBbGlnbixbImxlZnQiLCJjZW50ZXIiLCJqdXN0aWZ5IiwianVzdGlmeUFsbCIsInJhZGl4IiwicmlnaHQiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLmxpbmVIZWlnaHQ9ZS5saW5lSGVpZ2h0P2dldE1lYXN1cmVtZW50KGUubGluZUhlaWdodCwiMHB0Iik6IiI7dGhpcy5tYXJnaW5MZWZ0PWUubWFyZ2luTGVmdD9nZXRNZWFzdXJlbWVudChlLm1hcmdpbkxlZnQsIjBwdCIpOiIiO3RoaXMubWFyZ2luUmlnaHQ9ZS5tYXJnaW5SaWdodD9nZXRNZWFzdXJlbWVudChlLm1hcmdpblJpZ2h0LCIwcHQiKToiIjt0aGlzLm9ycGhhbnM9Z2V0SW50ZWdlcih7ZGF0YTplLm9ycGhhbnMsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+ZT49MH0pO3RoaXMucHJlc2VydmU9ZS5wcmVzZXJ2ZXx8IiI7dGhpcy5yYWRpeE9mZnNldD1lLnJhZGl4T2Zmc2V0P2dldE1lYXN1cmVtZW50KGUucmFkaXhPZmZzZXQsIjBwdCIpOiIiO3RoaXMuc3BhY2VBYm92ZT1lLnNwYWNlQWJvdmU/Z2V0TWVhc3VyZW1lbnQoZS5zcGFjZUFib3ZlLCIwcHQiKToiIjt0aGlzLnNwYWNlQmVsb3c9ZS5zcGFjZUJlbG93P2dldE1lYXN1cmVtZW50KGUuc3BhY2VCZWxvdywiMHB0Iik6IiI7dGhpcy50YWJEZWZhdWx0PWUudGFiRGVmYXVsdD9nZXRNZWFzdXJlbWVudCh0aGlzLnRhYkRlZmF1bHQpOiIiO3RoaXMudGFiU3RvcHM9KGUudGFiU3RvcHN8fCIiKS50cmltKCkuc3BsaXQoL1xzKy8pLm1hcCgoKGUsdCk9PnQlMj09MT9nZXRNZWFzdXJlbWVudChlKTplKSk7dGhpcy50ZXh0SW5kZW50PWUudGV4dEluZGVudD9nZXRNZWFzdXJlbWVudChlLnRleHRJbmRlbnQsIjBwdCIpOiIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLnZBbGlnbj1nZXRTdHJpbmdPcHRpb24oZS52QWxpZ24sWyJ0b3AiLCJib3R0b20iLCJtaWRkbGUiXSk7dGhpcy53aWRvd3M9Z2V0SW50ZWdlcih7ZGF0YTplLndpZG93cyxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT5lPj0wfSk7dGhpcy5oeXBoZW5hdGlvbj1udWxsfVtfc10oKXtjb25zdCBlPXRvU3R5bGUodGhpcywiaEFsaWduIik7IiIhPT10aGlzLm1hcmdpbkxlZnQmJihlLnBhZGRpbmdMZWZ0PW1lYXN1cmVUb1N0cmluZyh0aGlzLm1hcmdpbkxlZnQpKTsiIiE9PXRoaXMubWFyZ2luUmlnaHQmJihlLnBhZGRpbmdSaWdodD1tZWFzdXJlVG9TdHJpbmcodGhpcy5tYXJnaW5SaWdodCkpOyIiIT09dGhpcy5zcGFjZUFib3ZlJiYoZS5wYWRkaW5nVG9wPW1lYXN1cmVUb1N0cmluZyh0aGlzLnNwYWNlQWJvdmUpKTsiIiE9PXRoaXMuc3BhY2VCZWxvdyYmKGUucGFkZGluZ0JvdHRvbT1tZWFzdXJlVG9TdHJpbmcodGhpcy5zcGFjZUJlbG93KSk7aWYoIiIhPT10aGlzLnRleHRJbmRlbnQpe2UudGV4dEluZGVudD1tZWFzdXJlVG9TdHJpbmcodGhpcy50ZXh0SW5kZW50KTtmaXhUZXh0SW5kZW50KGUpfXRoaXMubGluZUhlaWdodD4wJiYoZS5saW5lSGVpZ2h0PW1lYXN1cmVUb1N0cmluZyh0aGlzLmxpbmVIZWlnaHQpKTsiIiE9PXRoaXMudGFiRGVmYXVsdCYmKGUudGFiU2l6ZT1tZWFzdXJlVG9TdHJpbmcodGhpcy50YWJEZWZhdWx0KSk7dGhpcy50YWJTdG9wcy5sZW5ndGg7dGhpcy5oeXBoZW5hdGF0aW9uJiZPYmplY3QuYXNzaWduKGUsdGhpcy5oeXBoZW5hdGF0aW9uW19zXSgpKTtyZXR1cm4gZX19Y2xhc3MgUGFzc3dvcmRFZGl0IGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE1uLCJwYXNzd29yZEVkaXQiLCEwKTt0aGlzLmhTY3JvbGxQb2xpY3k9Z2V0U3RyaW5nT3B0aW9uKGUuaFNjcm9sbFBvbGljeSxbImF1dG8iLCJvZmYiLCJvbiJdKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMucGFzc3dvcmRDaGFyPWUucGFzc3dvcmRDaGFyfHwiKiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuYm9yZGVyPW51bGw7dGhpcy5leHRyYXM9bnVsbDt0aGlzLm1hcmdpbj1udWxsfX1jbGFzcyB0ZW1wbGF0ZV9QYXR0ZXJuIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE1uLCJwYXR0ZXJuIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnR5cGU9Z2V0U3RyaW5nT3B0aW9uKGUudHlwZSxbImNyb3NzSGF0Y2giLCJjcm9zc0RpYWdvbmFsIiwiZGlhZ29uYWxMZWZ0IiwiZGlhZ29uYWxSaWdodCIsImhvcml6b250YWwiLCJ2ZXJ0aWNhbCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5jb2xvcj1udWxsO3RoaXMuZXh0cmFzPW51bGx9W19zXShlKXtlPWU/ZVtfc10oKToiI0ZGRkZGRiI7Y29uc3QgdD10aGlzLmNvbG9yP3RoaXMuY29sb3JbX3NdKCk6IiMwMDAwMDAiLGk9InJlcGVhdGluZy1saW5lYXItZ3JhZGllbnQiLGE9YCR7ZX0sJHtlfSA1cHgsJHt0fSA1cHgsJHt0fSAxMHB4YDtzd2l0Y2godGhpcy50eXBlKXtjYXNlImNyb3NzSGF0Y2giOnJldHVybmAke2l9KHRvIHRvcCwke2F9KSAke2l9KHRvIHJpZ2h0LCR7YX0pYDtjYXNlImNyb3NzRGlhZ29uYWwiOnJldHVybmAke2l9KDQ1ZGVnLCR7YX0pICR7aX0oLTQ1ZGVnLCR7YX0pYDtjYXNlImRpYWdvbmFsTGVmdCI6cmV0dXJuYCR7aX0oNDVkZWcsJHthfSlgO2Nhc2UiZGlhZ29uYWxSaWdodCI6cmV0dXJuYCR7aX0oLTQ1ZGVnLCR7YX0pYDtjYXNlImhvcml6b250YWwiOnJldHVybmAke2l9KHRvIHRvcCwke2F9KWA7Y2FzZSJ2ZXJ0aWNhbCI6cmV0dXJuYCR7aX0odG8gcmlnaHQsJHthfSlgfXJldHVybiIifX1jbGFzcyBQaWN0dXJlIGV4dGVuZHMgU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE1uLCJwaWN0dXJlIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIFByb3RvIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE1uLCJwcm90byIsITApO3RoaXMuYXBwZWFyYW5jZUZpbHRlcj1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5hcmM9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuYXJlYT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5hc3Npc3Q9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuYmFyY29kZT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5iaW5kSXRlbXM9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuYm9va2VuZD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5ib29sZWFuPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmJvcmRlcj1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5icmVhaz1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5icmVha0FmdGVyPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmJyZWFrQmVmb3JlPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmJ1dHRvbj1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5jYWxjdWxhdGU9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuY2FwdGlvbj1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5jZXJ0aWZpY2F0ZT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5jZXJ0aWZpY2F0ZXM9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuY2hlY2tCdXR0b249bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuY2hvaWNlTGlzdD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5jb2xvcj1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5jb21iPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmNvbm5lY3Q9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuY29udGVudEFyZWE9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuY29ybmVyPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmRhdGU9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZGF0ZVRpbWU9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZGF0ZVRpbWVFZGl0PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmRlY2ltYWw9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZGVmYXVsdFVpPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmRlc2M9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZGlnZXN0TWV0aG9kPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmRpZ2VzdE1ldGhvZHM9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZHJhdz1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5lZGdlPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmVuY29kaW5nPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmVuY29kaW5ncz1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5lbmNyeXB0PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmVuY3J5cHREYXRhPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmVuY3J5cHRpb249bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZW5jcnlwdGlvbk1ldGhvZD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5lbmNyeXB0aW9uTWV0aG9kcz1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5ldmVudD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5leERhdGE9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZXhPYmplY3Q9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZXhjbEdyb3VwPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmV4ZWN1dGU9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZXh0cmFzPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmZpZWxkPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmZpbGw9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZmlsdGVyPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmZsb2F0PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmZvbnQ9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZm9ybWF0PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmhhbmRsZXI9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuaHlwaGVuYXRpb249bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuaW1hZ2U9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuaW1hZ2VFZGl0PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmludGVnZXI9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuaXNzdWVycz1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5pdGVtcz1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5rZWVwPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmtleVVzYWdlPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmxpbmU9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMubGluZWFyPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmxvY2tEb2N1bWVudD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5tYW5pZmVzdD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5tYXJnaW49bmV3IFhGQU9iamVjdEFycmF5O3RoaXMubWRwPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLm1lZGl1bT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5tZXNzYWdlPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLm51bWVyaWNFZGl0PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLm9jY3VyPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLm9pZD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5vaWRzPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLm92ZXJmbG93PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnBhZ2VBcmVhPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnBhZ2VTZXQ9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMucGFyYT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5wYXNzd29yZEVkaXQ9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMucGF0dGVybj1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5waWN0dXJlPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnJhZGlhbD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5yZWFzb249bmV3IFhGQU9iamVjdEFycmF5O3RoaXMucmVhc29ucz1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5yZWN0YW5nbGU9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMucmVmPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnNjcmlwdD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5zZXRQcm9wZXJ0eT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5zaWduRGF0YT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5zaWduYXR1cmU9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuc2lnbmluZz1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5zb2xpZD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5zcGVhaz1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5zdGlwcGxlPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnN1YmZvcm09bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuc3ViZm9ybVNldD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5zdWJqZWN0RE49bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuc3ViamVjdEROcz1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5zdWJtaXQ9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMudGV4dD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy50ZXh0RWRpdD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy50aW1lPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnRpbWVTdGFtcD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy50b29sVGlwPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnRyYXZlcnNhbD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy50cmF2ZXJzZT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy51aT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy52YWxpZGF0ZT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy52YWx1ZT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy52YXJpYWJsZXM9bmV3IFhGQU9iamVjdEFycmF5fX1jbGFzcyBSYWRpYWwgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTW4sInJhZGlhbCIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy50eXBlPWdldFN0cmluZ09wdGlvbihlLnR5cGUsWyJ0b0VkZ2UiLCJ0b0NlbnRlciJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5jb2xvcj1udWxsO3RoaXMuZXh0cmFzPW51bGx9W19zXShlKXtlPWU/ZVtfc10oKToiI0ZGRkZGRiI7Y29uc3QgdD10aGlzLmNvbG9yP3RoaXMuY29sb3JbX3NdKCk6IiMwMDAwMDAiO3JldHVybmByYWRpYWwtZ3JhZGllbnQoY2lyY2xlIGF0IGNlbnRlciwgJHsidG9FZGdlIj09PXRoaXMudHlwZT9gJHtlfSwke3R9YDpgJHt0fSwke2V9YH0pYH19Y2xhc3MgUmVhc29uIGV4dGVuZHMgU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE1uLCJyZWFzb24iKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgUmVhc29ucyBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihNbiwicmVhc29ucyIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy50eXBlPWdldFN0cmluZ09wdGlvbihlLnR5cGUsWyJvcHRpb25hbCIsInJlcXVpcmVkIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLnJlYXNvbj1uZXcgWEZBT2JqZWN0QXJyYXl9fWNsYXNzIFJlY3RhbmdsZSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihNbiwicmVjdGFuZ2xlIiwhMCk7dGhpcy5oYW5kPWdldFN0cmluZ09wdGlvbihlLmhhbmQsWyJldmVuIiwibGVmdCIsInJpZ2h0Il0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuY29ybmVyPW5ldyBYRkFPYmplY3RBcnJheSg0KTt0aGlzLmVkZ2U9bmV3IFhGQU9iamVjdEFycmF5KDQpO3RoaXMuZmlsbD1udWxsfVtWc10oKXtjb25zdCBlPXRoaXMuZWRnZS5jaGlsZHJlbi5sZW5ndGg/dGhpcy5lZGdlLmNoaWxkcmVuWzBdOm5ldyBFZGdlKHt9KSx0PWVbX3NdKCksaT1PYmplY3QuY3JlYXRlKG51bGwpOyJ2aXNpYmxlIj09PXRoaXMuZmlsbD8ucHJlc2VuY2U/T2JqZWN0LmFzc2lnbihpLHRoaXMuZmlsbFtfc10oKSk6aS5maWxsPSJ0cmFuc3BhcmVudCI7aS5zdHJva2VXaWR0aD1tZWFzdXJlVG9TdHJpbmcoInZpc2libGUiPT09ZS5wcmVzZW5jZT9lLnRoaWNrbmVzczowKTtpLnN0cm9rZT10LmNvbG9yO2NvbnN0IGE9KHRoaXMuY29ybmVyLmNoaWxkcmVuLmxlbmd0aD90aGlzLmNvcm5lci5jaGlsZHJlblswXTpuZXcgQ29ybmVyKHt9KSlbX3NdKCkscj17bmFtZToic3ZnIixjaGlsZHJlbjpbe25hbWU6InJlY3QiLGF0dHJpYnV0ZXM6e3htbG5zOlVuLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUiLHg6MCx5OjAscng6YS5yYWRpdXMscnk6YS5yYWRpdXMsc3R5bGU6aX19XSxhdHRyaWJ1dGVzOnt4bWxuczpVbixzdHlsZTp7b3ZlcmZsb3c6InZpc2libGUifSx3aWR0aDoiMTAwJSIsaGVpZ2h0OiIxMDAlIn19O2lmKGhhc01hcmdpbih0aGlzW2xzXSgpW2xzXSgpKSlyZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e3N0eWxlOntkaXNwbGF5OiJpbmxpbmUiLHdpZHRoOiIxMDAlIixoZWlnaHQ6IjEwMCUifX0sY2hpbGRyZW46W3JdfSk7ci5hdHRyaWJ1dGVzLnN0eWxlLnBvc2l0aW9uPSJhYnNvbHV0ZSI7cmV0dXJuIEhUTUxSZXN1bHQuc3VjY2VzcyhyKX19Y2xhc3MgUmVmRWxlbWVudCBleHRlbmRzIFN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihNbiwicmVmIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIFNjcmlwdCBleHRlbmRzIFN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihNbiwic2NyaXB0Iik7dGhpcy5iaW5kaW5nPWUuYmluZGluZ3x8IiI7dGhpcy5jb250ZW50VHlwZT1lLmNvbnRlbnRUeXBlfHwiIjt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMucnVuQXQ9Z2V0U3RyaW5nT3B0aW9uKGUucnVuQXQsWyJjbGllbnQiLCJib3RoIiwic2VydmVyIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgU2V0UHJvcGVydHkgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTW4sInNldFByb3BlcnR5Iik7dGhpcy5jb25uZWN0aW9uPWUuY29ubmVjdGlvbnx8IiI7dGhpcy5yZWY9ZS5yZWZ8fCIiO3RoaXMudGFyZ2V0PWUudGFyZ2V0fHwiIn19Y2xhc3MgU2lnbkRhdGEgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTW4sInNpZ25EYXRhIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm9wZXJhdGlvbj1nZXRTdHJpbmdPcHRpb24oZS5vcGVyYXRpb24sWyJzaWduIiwiY2xlYXIiLCJ2ZXJpZnkiXSk7dGhpcy5yZWY9ZS5yZWZ8fCIiO3RoaXMudGFyZ2V0PWUudGFyZ2V0fHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5maWx0ZXI9bnVsbDt0aGlzLm1hbmlmZXN0PW51bGx9fWNsYXNzIFNpZ25hdHVyZSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihNbiwic2lnbmF0dXJlIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnR5cGU9Z2V0U3RyaW5nT3B0aW9uKGUudHlwZSxbIlBERjEuMyIsIlBERjEuNiJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5ib3JkZXI9bnVsbDt0aGlzLmV4dHJhcz1udWxsO3RoaXMuZmlsdGVyPW51bGw7dGhpcy5tYW5pZmVzdD1udWxsO3RoaXMubWFyZ2luPW51bGx9fWNsYXNzIFNpZ25pbmcgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTW4sInNpZ25pbmciLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudHlwZT1nZXRTdHJpbmdPcHRpb24oZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5jZXJ0aWZpY2F0ZT1uZXcgWEZBT2JqZWN0QXJyYXl9fWNsYXNzIFNvbGlkIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE1uLCJzb2xpZCIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGx9W19zXShlKXtyZXR1cm4gZT9lW19zXSgpOiIjRkZGRkZGIn19Y2xhc3MgU3BlYWsgZXh0ZW5kcyBTdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTW4sInNwZWFrIik7dGhpcy5kaXNhYmxlPWdldEludGVnZXIoe2RhdGE6ZS5kaXNhYmxlLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnByaW9yaXR5PWdldFN0cmluZ09wdGlvbihlLnByaW9yaXR5LFsiY3VzdG9tIiwiY2FwdGlvbiIsIm5hbWUiLCJ0b29sVGlwIl0pO3RoaXMucmlkPWUucmlkfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIFN0aXBwbGUgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTW4sInN0aXBwbGUiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMucmF0ZT1nZXRJbnRlZ2VyKHtkYXRhOmUucmF0ZSxkZWZhdWx0VmFsdWU6NTAsdmFsaWRhdGU6ZT0+ZT49MCYmZTw9MTAwfSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuY29sb3I9bnVsbDt0aGlzLmV4dHJhcz1udWxsfVtfc10oZSl7Y29uc3QgdD10aGlzLnJhdGUvMTAwO3JldHVybiBVdGlsLm1ha2VIZXhDb2xvcihNYXRoLnJvdW5kKGUudmFsdWUuciooMS10KSt0aGlzLnZhbHVlLnIqdCksTWF0aC5yb3VuZChlLnZhbHVlLmcqKDEtdCkrdGhpcy52YWx1ZS5nKnQpLE1hdGgucm91bmQoZS52YWx1ZS5iKigxLXQpK3RoaXMudmFsdWUuYip0KSl9fWNsYXNzIFN1YmZvcm0gZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTW4sInN1YmZvcm0iLCEwKTt0aGlzLmFjY2Vzcz1nZXRTdHJpbmdPcHRpb24oZS5hY2Nlc3MsWyJvcGVuIiwibm9uSW50ZXJhY3RpdmUiLCJwcm90ZWN0ZWQiLCJyZWFkT25seSJdKTt0aGlzLmFsbG93TWFjcm89Z2V0SW50ZWdlcih7ZGF0YTplLmFsbG93TWFjcm8sZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLmFuY2hvclR5cGU9Z2V0U3RyaW5nT3B0aW9uKGUuYW5jaG9yVHlwZSxbInRvcExlZnQiLCJib3R0b21DZW50ZXIiLCJib3R0b21MZWZ0IiwiYm90dG9tUmlnaHQiLCJtaWRkbGVDZW50ZXIiLCJtaWRkbGVMZWZ0IiwibWlkZGxlUmlnaHQiLCJ0b3BDZW50ZXIiLCJ0b3BSaWdodCJdKTt0aGlzLmNvbFNwYW49Z2V0SW50ZWdlcih7ZGF0YTplLmNvbFNwYW4sZGVmYXVsdFZhbHVlOjEsdmFsaWRhdGU6ZT0+ZT49MXx8LTE9PT1lfSk7dGhpcy5jb2x1bW5XaWR0aHM9KGUuY29sdW1uV2lkdGhzfHwiIikudHJpbSgpLnNwbGl0KC9ccysvKS5tYXAoKGU9PiItMSI9PT1lPy0xOmdldE1lYXN1cmVtZW50KGUpKSk7dGhpcy5oPWUuaD9nZXRNZWFzdXJlbWVudChlLmgpOiIiO3RoaXMuaEFsaWduPWdldFN0cmluZ09wdGlvbihlLmhBbGlnbixbImxlZnQiLCJjZW50ZXIiLCJqdXN0aWZ5IiwianVzdGlmeUFsbCIsInJhZGl4IiwicmlnaHQiXSk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLmxheW91dD1nZXRTdHJpbmdPcHRpb24oZS5sYXlvdXQsWyJwb3NpdGlvbiIsImxyLXRiIiwicmwtcm93IiwicmwtdGIiLCJyb3ciLCJ0YWJsZSIsInRiIl0pO3RoaXMubG9jYWxlPWUubG9jYWxlfHwiIjt0aGlzLm1heEg9Z2V0TWVhc3VyZW1lbnQoZS5tYXhILCIwcHQiKTt0aGlzLm1heFc9Z2V0TWVhc3VyZW1lbnQoZS5tYXhXLCIwcHQiKTt0aGlzLm1lcmdlTW9kZT1nZXRTdHJpbmdPcHRpb24oZS5tZXJnZU1vZGUsWyJjb25zdW1lRGF0YSIsIm1hdGNoVGVtcGxhdGUiXSk7dGhpcy5taW5IPWdldE1lYXN1cmVtZW50KGUubWluSCwiMHB0Iik7dGhpcy5taW5XPWdldE1lYXN1cmVtZW50KGUubWluVywiMHB0Iik7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5wcmVzZW5jZT1nZXRTdHJpbmdPcHRpb24oZS5wcmVzZW5jZSxbInZpc2libGUiLCJoaWRkZW4iLCJpbmFjdGl2ZSIsImludmlzaWJsZSJdKTt0aGlzLnJlbGV2YW50PWdldFJlbGV2YW50KGUucmVsZXZhbnQpO3RoaXMucmVzdG9yZVN0YXRlPWdldFN0cmluZ09wdGlvbihlLnJlc3RvcmVTdGF0ZSxbIm1hbnVhbCIsImF1dG8iXSk7dGhpcy5zY29wZT1nZXRTdHJpbmdPcHRpb24oZS5zY29wZSxbIm5hbWUiLCJub25lIl0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLnc9ZS53P2dldE1lYXN1cmVtZW50KGUudyk6IiI7dGhpcy54PWdldE1lYXN1cmVtZW50KGUueCwiMHB0Iik7dGhpcy55PWdldE1lYXN1cmVtZW50KGUueSwiMHB0Iik7dGhpcy5hc3Npc3Q9bnVsbDt0aGlzLmJpbmQ9bnVsbDt0aGlzLmJvb2tlbmQ9bnVsbDt0aGlzLmJvcmRlcj1udWxsO3RoaXMuYnJlYWs9bnVsbDt0aGlzLmNhbGN1bGF0ZT1udWxsO3RoaXMuZGVzYz1udWxsO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5rZWVwPW51bGw7dGhpcy5tYXJnaW49bnVsbDt0aGlzLm9jY3VyPW51bGw7dGhpcy5vdmVyZmxvdz1udWxsO3RoaXMucGFnZVNldD1udWxsO3RoaXMucGFyYT1udWxsO3RoaXMudHJhdmVyc2FsPW51bGw7dGhpcy52YWxpZGF0ZT1udWxsO3RoaXMudmFyaWFibGVzPW51bGw7dGhpcy5hcmVhPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmJyZWFrQWZ0ZXI9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuYnJlYWtCZWZvcmU9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuY29ubmVjdD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5kcmF3PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmV2ZW50PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmV4T2JqZWN0PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmV4Y2xHcm91cD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5maWVsZD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5wcm90bz1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5zZXRQcm9wZXJ0eT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5zdWJmb3JtPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnN1YmZvcm1TZXQ9bmV3IFhGQU9iamVjdEFycmF5fVtjc10oKXtjb25zdCBlPXRoaXNbbHNdKCk7cmV0dXJuIGUgaW5zdGFuY2VvZiBTdWJmb3JtU2V0P2VbY3NdKCk6ZX1bZnNdKCl7cmV0dXJuITB9W2JzXSgpe3JldHVybiB0aGlzLmxheW91dC5lbmRzV2l0aCgiLXRiIikmJjA9PT10aGlzW1pyXS5hdHRlbXB0JiZ0aGlzW1pyXS5udW1iZXJJbkxpbmU+MHx8dGhpc1tsc10oKVtic10oKX0qW2dzXSgpe3lpZWxkKmdldENvbnRhaW5lZENoaWxkcmVuKHRoaXMpfVt6cl0oKXtyZXR1cm4gZmx1c2hIVE1MKHRoaXMpfVt2cl0oZSx0KXthZGRIVE1MKHRoaXMsZSx0KX1bZXNdKCl7cmV0dXJuIGdldEF2YWlsYWJsZVNwYWNlKHRoaXMpfVt3c10oKXtjb25zdCBlPXRoaXNbY3NdKCk7aWYoIWVbd3NdKCkpcmV0dXJuITE7aWYodm9pZCAwIT09dGhpc1tacl0uX2lzU3BsaXR0YWJsZSlyZXR1cm4gdGhpc1tacl0uX2lzU3BsaXR0YWJsZTtpZigicG9zaXRpb24iPT09dGhpcy5sYXlvdXR8fHRoaXMubGF5b3V0LmluY2x1ZGVzKCJyb3ciKSl7dGhpc1tacl0uX2lzU3BsaXR0YWJsZT0hMTtyZXR1cm4hMX1pZih0aGlzLmtlZXAmJiJub25lIiE9PXRoaXMua2VlcC5pbnRhY3Qpe3RoaXNbWnJdLl9pc1NwbGl0dGFibGU9ITE7cmV0dXJuITF9aWYoZS5sYXlvdXQ/LmVuZHNXaXRoKCItdGIiKSYmMCE9PWVbWnJdLm51bWJlckluTGluZSlyZXR1cm4hMTt0aGlzW1pyXS5faXNTcGxpdHRhYmxlPSEwO3JldHVybiEwfVtWc10oZSl7c2V0VGFiSW5kZXgodGhpcyk7aWYodGhpcy5icmVhayl7aWYoImF1dG8iIT09dGhpcy5icmVhay5hZnRlcnx8IiIhPT10aGlzLmJyZWFrLmFmdGVyVGFyZ2V0KXtjb25zdCBlPW5ldyBCcmVha0FmdGVyKHt0YXJnZXRUeXBlOnRoaXMuYnJlYWsuYWZ0ZXIsdGFyZ2V0OnRoaXMuYnJlYWsuYWZ0ZXJUYXJnZXQsc3RhcnROZXc6dGhpcy5icmVhay5zdGFydE5ldy50b1N0cmluZygpfSk7ZVtDc109dGhpc1tDc107dGhpc1tZcl0oZSk7dGhpcy5icmVha0FmdGVyLnB1c2goZSl9aWYoImF1dG8iIT09dGhpcy5icmVhay5iZWZvcmV8fCIiIT09dGhpcy5icmVhay5iZWZvcmVUYXJnZXQpe2NvbnN0IGU9bmV3IEJyZWFrQmVmb3JlKHt0YXJnZXRUeXBlOnRoaXMuYnJlYWsuYmVmb3JlLHRhcmdldDp0aGlzLmJyZWFrLmJlZm9yZVRhcmdldCxzdGFydE5ldzp0aGlzLmJyZWFrLnN0YXJ0TmV3LnRvU3RyaW5nKCl9KTtlW0NzXT10aGlzW0NzXTt0aGlzW1lyXShlKTt0aGlzLmJyZWFrQmVmb3JlLnB1c2goZSl9aWYoIiIhPT10aGlzLmJyZWFrLm92ZXJmbG93VGFyZ2V0KXtjb25zdCBlPW5ldyBPdmVyZmxvdyh7dGFyZ2V0OnRoaXMuYnJlYWsub3ZlcmZsb3dUYXJnZXQsbGVhZGVyOnRoaXMuYnJlYWsub3ZlcmZsb3dMZWFkZXIsdHJhaWxlcjp0aGlzLmJyZWFrLm92ZXJmbG93VHJhaWxlcn0pO2VbQ3NdPXRoaXNbQ3NdO3RoaXNbWXJdKGUpO3RoaXMub3ZlcmZsb3cucHVzaChlKX10aGlzW0pzXSh0aGlzLmJyZWFrKTt0aGlzLmJyZWFrPW51bGx9aWYoImhpZGRlbiI9PT10aGlzLnByZXNlbmNlfHwiaW5hY3RpdmUiPT09dGhpcy5wcmVzZW5jZSlyZXR1cm4gSFRNTFJlc3VsdC5FTVBUWTsodGhpcy5icmVha0JlZm9yZS5jaGlsZHJlbi5sZW5ndGg+MXx8dGhpcy5icmVha0FmdGVyLmNoaWxkcmVuLmxlbmd0aD4xKSYmd2FybigiWEZBIC0gU2V2ZXJhbCBicmVha0JlZm9yZSBvciBicmVha0FmdGVyIGluIHN1YmZvcm1zOiBwbGVhc2UgZmlsZSBhIGJ1Zy4iKTtpZih0aGlzLmJyZWFrQmVmb3JlLmNoaWxkcmVuLmxlbmd0aD49MSl7Y29uc3QgZT10aGlzLmJyZWFrQmVmb3JlLmNoaWxkcmVuWzBdO2lmKGhhbmRsZUJyZWFrKGUpKXJldHVybiBIVE1MUmVzdWx0LmJyZWFrTm9kZShlKX1pZih0aGlzW1pyXT8uYWZ0ZXJCcmVha0FmdGVyKXJldHVybiBIVE1MUmVzdWx0LkVNUFRZO2ZpeERpbWVuc2lvbnModGhpcyk7Y29uc3QgdD1bXSxpPXtpZDp0aGlzW3pzXSxjbGFzczpbXX07c2V0QWNjZXNzKHRoaXMsaS5jbGFzcyk7dGhpc1tacl18fCh0aGlzW1pyXT1PYmplY3QuY3JlYXRlKG51bGwpKTtPYmplY3QuYXNzaWduKHRoaXNbWnJdLHtjaGlsZHJlbjp0LGxpbmU6bnVsbCxhdHRyaWJ1dGVzOmksYXR0ZW1wdDowLG51bWJlckluTGluZTowLGF2YWlsYWJsZVNwYWNlOnt3aWR0aDpNYXRoLm1pbih0aGlzLnd8fDEvMCxlLndpZHRoKSxoZWlnaHQ6TWF0aC5taW4odGhpcy5ofHwxLzAsZS5oZWlnaHQpfSx3aWR0aDowLGhlaWdodDowLHByZXZIZWlnaHQ6MCxjdXJyZW50V2lkdGg6MH0pO2NvbnN0IGE9dGhpc1toc10oKSxyPWFbWnJdLm5vTGF5b3V0RmFpbHVyZSxzPXRoaXNbd3NdKCk7c3x8c2V0Rmlyc3RVbnNwbGl0dGFibGUodGhpcyk7aWYoIWNoZWNrRGltZW5zaW9ucyh0aGlzLGUpKXJldHVybiBIVE1MUmVzdWx0LkZBSUxVUkU7Y29uc3Qgbj1uZXcgU2V0KFsiYXJlYSIsImRyYXciLCJleGNsR3JvdXAiLCJmaWVsZCIsInN1YmZvcm0iLCJzdWJmb3JtU2V0Il0pO2lmKHRoaXMubGF5b3V0LmluY2x1ZGVzKCJyb3ciKSl7Y29uc3QgZT10aGlzW2NzXSgpLmNvbHVtbldpZHRocztpZihBcnJheS5pc0FycmF5KGUpJiZlLmxlbmd0aD4wKXt0aGlzW1pyXS5jb2x1bW5XaWR0aHM9ZTt0aGlzW1pyXS5jdXJyZW50Q29sdW1uPTB9fWNvbnN0IG89dG9TdHlsZSh0aGlzLCJhbmNob3JUeXBlIiwiZGltZW5zaW9ucyIsInBvc2l0aW9uIiwicHJlc2VuY2UiLCJib3JkZXIiLCJtYXJnaW4iLCJoQWxpZ24iKSxnPVsieGZhU3ViZm9ybSJdLGM9bGF5b3V0Q2xhc3ModGhpcyk7YyYmZy5wdXNoKGMpO2kuc3R5bGU9bztpLmNsYXNzPWc7dGhpcy5uYW1lJiYoaS54ZmFOYW1lPXRoaXMubmFtZSk7aWYodGhpcy5vdmVyZmxvdyl7Y29uc3QgdD10aGlzLm92ZXJmbG93W3NzXSgpO2lmKHQuYWRkTGVhZGVyKXt0LmFkZExlYWRlcj0hMTtoYW5kbGVPdmVyZmxvdyh0aGlzLHQubGVhZGVyLGUpfX10aGlzW0hzXSgpO2NvbnN0IGw9ImxyLXRiIj09PXRoaXMubGF5b3V0fHwicmwtdGIiPT09dGhpcy5sYXlvdXQsaD1sPzI6MTtmb3IoO3RoaXNbWnJdLmF0dGVtcHQ8aDt0aGlzW1pyXS5hdHRlbXB0Kyspe2wmJjE9PT10aGlzW1pyXS5hdHRlbXB0JiYodGhpc1tacl0ubnVtYmVySW5MaW5lPTApO2NvbnN0IGU9dGhpc1tLcl0oe2ZpbHRlcjpuLGluY2x1ZGU6ITB9KTtpZihlLnN1Y2Nlc3MpYnJlYWs7aWYoZS5pc0JyZWFrKCkpe3RoaXNbTHNdKCk7cmV0dXJuIGV9aWYobCYmMD09PXRoaXNbWnJdLmF0dGVtcHQmJjA9PT10aGlzW1pyXS5udW1iZXJJbkxpbmUmJiFhW1pyXS5ub0xheW91dEZhaWx1cmUpe3RoaXNbWnJdLmF0dGVtcHQ9aDticmVha319dGhpc1tMc10oKTtzfHx1bnNldEZpcnN0VW5zcGxpdHRhYmxlKHRoaXMpO2FbWnJdLm5vTGF5b3V0RmFpbHVyZT1yO2lmKHRoaXNbWnJdLmF0dGVtcHQ9PT1oKXt0aGlzLm92ZXJmbG93JiYodGhpc1toc10oKVtacl0ub3ZlcmZsb3dOb2RlPXRoaXMub3ZlcmZsb3cpO3N8fGRlbGV0ZSB0aGlzW1pyXTtyZXR1cm4gSFRNTFJlc3VsdC5GQUlMVVJFfWlmKHRoaXMub3ZlcmZsb3cpe2NvbnN0IHQ9dGhpcy5vdmVyZmxvd1tzc10oKTtpZih0LmFkZFRyYWlsZXIpe3QuYWRkVHJhaWxlcj0hMTtoYW5kbGVPdmVyZmxvdyh0aGlzLHQudHJhaWxlcixlKX19bGV0IEM9MCxRPTA7aWYodGhpcy5tYXJnaW4pe0M9dGhpcy5tYXJnaW4ubGVmdEluc2V0K3RoaXMubWFyZ2luLnJpZ2h0SW5zZXQ7UT10aGlzLm1hcmdpbi50b3BJbnNldCt0aGlzLm1hcmdpbi5ib3R0b21JbnNldH1jb25zdCBFPU1hdGgubWF4KHRoaXNbWnJdLndpZHRoK0MsdGhpcy53fHwwKSx1PU1hdGgubWF4KHRoaXNbWnJdLmhlaWdodCtRLHRoaXMuaHx8MCksZD1bdGhpcy54LHRoaXMueSxFLHVdOyIiPT09dGhpcy53JiYoby53aWR0aD1tZWFzdXJlVG9TdHJpbmcoRSkpOyIiPT09dGhpcy5oJiYoby5oZWlnaHQ9bWVhc3VyZVRvU3RyaW5nKHUpKTtpZigoIjBweCI9PT1vLndpZHRofHwiMHB4Ij09PW8uaGVpZ2h0KSYmMD09PXQubGVuZ3RoKXJldHVybiBIVE1MUmVzdWx0LkVNUFRZO2NvbnN0IGY9e25hbWU6ImRpdiIsYXR0cmlidXRlczppLGNoaWxkcmVuOnR9O2FwcGx5QXNzaXN0KHRoaXMsaSk7Y29uc3QgcD1IVE1MUmVzdWx0LnN1Y2Nlc3MoY3JlYXRlV3JhcHBlcih0aGlzLGYpLGQpO2lmKHRoaXMuYnJlYWtBZnRlci5jaGlsZHJlbi5sZW5ndGg+PTEpe2NvbnN0IGU9dGhpcy5icmVha0FmdGVyLmNoaWxkcmVuWzBdO2lmKGhhbmRsZUJyZWFrKGUpKXt0aGlzW1pyXS5hZnRlckJyZWFrQWZ0ZXI9cDtyZXR1cm4gSFRNTFJlc3VsdC5icmVha05vZGUoZSl9fWRlbGV0ZSB0aGlzW1pyXTtyZXR1cm4gcH19Y2xhc3MgU3ViZm9ybVNldCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihNbiwic3ViZm9ybVNldCIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5yZWxhdGlvbj1nZXRTdHJpbmdPcHRpb24oZS5yZWxhdGlvbixbIm9yZGVyZWQiLCJjaG9pY2UiLCJ1bm9yZGVyZWQiXSk7dGhpcy5yZWxldmFudD1nZXRSZWxldmFudChlLnJlbGV2YW50KTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5ib29rZW5kPW51bGw7dGhpcy5icmVhaz1udWxsO3RoaXMuZGVzYz1udWxsO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5vY2N1cj1udWxsO3RoaXMub3ZlcmZsb3c9bnVsbDt0aGlzLmJyZWFrQWZ0ZXI9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuYnJlYWtCZWZvcmU9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuc3ViZm9ybT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5zdWJmb3JtU2V0PW5ldyBYRkFPYmplY3RBcnJheX0qW2dzXSgpe3lpZWxkKmdldENvbnRhaW5lZENoaWxkcmVuKHRoaXMpfVtjc10oKXtsZXQgZT10aGlzW2xzXSgpO2Zvcig7IShlIGluc3RhbmNlb2YgU3ViZm9ybSk7KWU9ZVtsc10oKTtyZXR1cm4gZX1bZnNdKCl7cmV0dXJuITB9fWNsYXNzIFN1YmplY3RETiBleHRlbmRzIENvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTW4sInN1YmplY3RETiIpO3RoaXMuZGVsaW1pdGVyPWUuZGVsaW1pdGVyfHwiLCI7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9W19yXSgpe3RoaXNbanJdPW5ldyBNYXAodGhpc1tqcl0uc3BsaXQodGhpcy5kZWxpbWl0ZXIpLm1hcCgoZT0+eyhlPWUuc3BsaXQoIj0iLDIpKVswXT1lWzBdLnRyaW0oKTtyZXR1cm4gZX0pKSl9fWNsYXNzIFN1YmplY3RETnMgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTW4sInN1YmplY3RETnMiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudHlwZT1nZXRTdHJpbmdPcHRpb24oZS50eXBlLFsib3B0aW9uYWwiLCJyZXF1aXJlZCJdKTt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiI7dGhpcy5zdWJqZWN0RE49bmV3IFhGQU9iamVjdEFycmF5fX1jbGFzcyBTdWJtaXQgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTW4sInN1Ym1pdCIsITApO3RoaXMuZW1iZWRQREY9Z2V0SW50ZWdlcih7ZGF0YTplLmVtYmVkUERGLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PjE9PT1lfSk7dGhpcy5mb3JtYXQ9Z2V0U3RyaW5nT3B0aW9uKGUuZm9ybWF0LFsieGRwIiwiZm9ybWRhdGEiLCJwZGYiLCJ1cmxlbmNvZGVkIiwieGZkIiwieG1sIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy50YXJnZXQ9ZS50YXJnZXR8fCIiO3RoaXMudGV4dEVuY29kaW5nPWdldEtleXdvcmQoe2RhdGE6ZS50ZXh0RW5jb2Rpbmc/ZS50ZXh0RW5jb2RpbmcudG9Mb3dlckNhc2UoKToiIixkZWZhdWx0VmFsdWU6IiIsdmFsaWRhdGU6ZT0+WyJ1dGYtOCIsImJpZy1maXZlIiwiZm9udHNwZWNpZmljIiwiZ2JrIiwiZ2ItMTgwMzAiLCJnYi0yMzEyIiwia3NjLTU2MDEiLCJub25lIiwic2hpZnQtamlzIiwidWNzLTIiLCJ1dGYtMTYiXS5pbmNsdWRlcyhlKXx8ZS5tYXRjaCgvaXNvLTg4NTktXGR7Mn0vKX0pO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLnhkcENvbnRlbnQ9ZS54ZHBDb250ZW50fHwiIjt0aGlzLmVuY3J5cHQ9bnVsbDt0aGlzLmVuY3J5cHREYXRhPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnNpZ25EYXRhPW5ldyBYRkFPYmplY3RBcnJheX19Y2xhc3MgVGVtcGxhdGUgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTW4sInRlbXBsYXRlIiwhMCk7dGhpcy5iYXNlUHJvZmlsZT1nZXRTdHJpbmdPcHRpb24oZS5iYXNlUHJvZmlsZSxbImZ1bGwiLCJpbnRlcmFjdGl2ZUZvcm1zIl0pO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5zdWJmb3JtPW5ldyBYRkFPYmplY3RBcnJheX1bX3JdKCl7MD09PXRoaXMuc3ViZm9ybS5jaGlsZHJlbi5sZW5ndGgmJndhcm4oIlhGQSAtIE5vIHN1YmZvcm1zIGluIHRlbXBsYXRlIG5vZGUuIik7dGhpcy5zdWJmb3JtLmNoaWxkcmVuLmxlbmd0aD49MiYmd2FybigiWEZBIC0gU2V2ZXJhbCBzdWJmb3JtcyBpbiB0ZW1wbGF0ZSBub2RlOiBwbGVhc2UgZmlsZSBhIGJ1Zy4iKTt0aGlzW1dzXT01ZTN9W3dzXSgpe3JldHVybiEwfVtLc10oZSx0KXtyZXR1cm4gZS5zdGFydHNXaXRoKCIjIik/W3RoaXNbUXNdLmdldChlLnNsaWNlKDEpKV06c2VhcmNoTm9kZSh0aGlzLHQsZSwhMCwhMCl9KltYc10oKXtpZighdGhpcy5zdWJmb3JtLmNoaWxkcmVuLmxlbmd0aClyZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGNoaWxkcmVuOltdfSk7dGhpc1tacl09e292ZXJmbG93Tm9kZTpudWxsLGZpcnN0VW5zcGxpdHRhYmxlOm51bGwsY3VycmVudENvbnRlbnRBcmVhOm51bGwsY3VycmVudFBhZ2VBcmVhOm51bGwsbm9MYXlvdXRGYWlsdXJlOiExLHBhZ2VOdW1iZXI6MSxwYWdlUG9zaXRpb246ImZpcnN0IixvZGRPckV2ZW46Im9kZCIsYmxhbmtPck5vdEJsYW5rOiJub25CbGFuayIscGFyYVN0YWNrOltdfTtjb25zdCBlPXRoaXMuc3ViZm9ybS5jaGlsZHJlblswXTtlLnBhZ2VTZXRbcXJdKCk7Y29uc3QgdD1lLnBhZ2VTZXQucGFnZUFyZWEuY2hpbGRyZW4saT17bmFtZToiZGl2IixjaGlsZHJlbjpbXX07bGV0IGE9bnVsbCxyPW51bGwscz1udWxsO2lmKGUuYnJlYWtCZWZvcmUuY2hpbGRyZW4ubGVuZ3RoPj0xKXtyPWUuYnJlYWtCZWZvcmUuY2hpbGRyZW5bMF07cz1yLnRhcmdldH1lbHNlIGlmKGUuc3ViZm9ybS5jaGlsZHJlbi5sZW5ndGg+PTEmJmUuc3ViZm9ybS5jaGlsZHJlblswXS5icmVha0JlZm9yZS5jaGlsZHJlbi5sZW5ndGg+PTEpe3I9ZS5zdWJmb3JtLmNoaWxkcmVuWzBdLmJyZWFrQmVmb3JlLmNoaWxkcmVuWzBdO3M9ci50YXJnZXR9ZWxzZSBpZihlLmJyZWFrPy5iZWZvcmVUYXJnZXQpe3I9ZS5icmVhaztzPXIuYmVmb3JlVGFyZ2V0fWVsc2UgaWYoZS5zdWJmb3JtLmNoaWxkcmVuLmxlbmd0aD49MSYmZS5zdWJmb3JtLmNoaWxkcmVuWzBdLmJyZWFrPy5iZWZvcmVUYXJnZXQpe3I9ZS5zdWJmb3JtLmNoaWxkcmVuWzBdLmJyZWFrO3M9ci5iZWZvcmVUYXJnZXR9aWYocil7Y29uc3QgZT10aGlzW0tzXShzLHJbbHNdKCkpO2lmKGUgaW5zdGFuY2VvZiBQYWdlQXJlYSl7YT1lO3JbWnJdPXt9fX1hfHwoYT10WzBdKTthW1pyXT17bnVtYmVyT2ZVc2U6MX07Y29uc3Qgbj1hW2xzXSgpO25bWnJdPXtudW1iZXJPZlVzZToxLHBhZ2VJbmRleDpuLnBhZ2VBcmVhLmNoaWxkcmVuLmluZGV4T2YoYSkscGFnZVNldEluZGV4OjB9O2xldCBvLGc9bnVsbCxjPW51bGwsbD0hMCxoPTAsQz0wO2Zvcig7Oyl7aWYobCloPTA7ZWxzZXtpLmNoaWxkcmVuLnBvcCgpO2lmKDM9PSsraCl7d2FybigiWEZBIC0gU29tZXRoaW5nIGdvZXMgd3Jvbmc6IHBsZWFzZSBmaWxlIGEgYnVnLiIpO3JldHVybiBpfX1vPW51bGw7dGhpc1tacl0uY3VycmVudFBhZ2VBcmVhPWE7Y29uc3QgdD1hW1ZzXSgpLmh0bWw7aS5jaGlsZHJlbi5wdXNoKHQpO2lmKGcpe3RoaXNbWnJdLm5vTGF5b3V0RmFpbHVyZT0hMDt0LmNoaWxkcmVuLnB1c2goZ1tWc10oYVtacl0uc3BhY2UpLmh0bWwpO2c9bnVsbH1pZihjKXt0aGlzW1pyXS5ub0xheW91dEZhaWx1cmU9ITA7dC5jaGlsZHJlbi5wdXNoKGNbVnNdKGFbWnJdLnNwYWNlKS5odG1sKTtjPW51bGx9Y29uc3Qgcj1hLmNvbnRlbnRBcmVhLmNoaWxkcmVuLHM9dC5jaGlsZHJlbi5maWx0ZXIoKGU9PmUuYXR0cmlidXRlcy5jbGFzcy5pbmNsdWRlcygieGZhQ29udGVudGFyZWEiKSkpO2w9ITE7dGhpc1tacl0uZmlyc3RVbnNwbGl0dGFibGU9bnVsbDt0aGlzW1pyXS5ub0xheW91dEZhaWx1cmU9ITE7Y29uc3QgZmx1c2g9dD0+e2NvbnN0IGk9ZVt6cl0oKTtpZihpKXtsfHw9aS5jaGlsZHJlbj8ubGVuZ3RoPjA7c1t0XS5jaGlsZHJlbi5wdXNoKGkpfX07Zm9yKGxldCB0PUMsYT1yLmxlbmd0aDt0PGE7dCsrKXtjb25zdCBhPXRoaXNbWnJdLmN1cnJlbnRDb250ZW50QXJlYT1yW3RdLG49e3dpZHRoOmEudyxoZWlnaHQ6YS5ofTtDPTA7aWYoZyl7c1t0XS5jaGlsZHJlbi5wdXNoKGdbVnNdKG4pLmh0bWwpO2c9bnVsbH1pZihjKXtzW3RdLmNoaWxkcmVuLnB1c2goY1tWc10obikuaHRtbCk7Yz1udWxsfWNvbnN0IGg9ZVtWc10obik7aWYoaC5zdWNjZXNzKXtpZihoLmh0bWwpe2x8fD1oLmh0bWwuY2hpbGRyZW4/Lmxlbmd0aD4wO3NbdF0uY2hpbGRyZW4ucHVzaChoLmh0bWwpfWVsc2UhbCYmaS5jaGlsZHJlbi5sZW5ndGg+MSYmaS5jaGlsZHJlbi5wb3AoKTtyZXR1cm4gaX1pZihoLmlzQnJlYWsoKSl7Y29uc3QgZT1oLmJyZWFrTm9kZTtmbHVzaCh0KTtpZigiYXV0byI9PT1lLnRhcmdldFR5cGUpY29udGludWU7aWYoZS5sZWFkZXIpe2c9dGhpc1tLc10oZS5sZWFkZXIsZVtsc10oKSk7Zz1nP2dbMF06bnVsbH1pZihlLnRyYWlsZXIpe2M9dGhpc1tLc10oZS50cmFpbGVyLGVbbHNdKCkpO2M9Yz9jWzBdOm51bGx9aWYoInBhZ2VBcmVhIj09PWUudGFyZ2V0VHlwZSl7bz1lW1pyXS50YXJnZXQ7dD0xLzB9ZWxzZSBpZihlW1pyXS50YXJnZXQpe289ZVtacl0udGFyZ2V0O0M9ZVtacl0uaW5kZXgrMTt0PTEvMH1lbHNlIHQ9ZVtacl0uaW5kZXh9ZWxzZSBpZih0aGlzW1pyXS5vdmVyZmxvd05vZGUpe2NvbnN0IGU9dGhpc1tacl0ub3ZlcmZsb3dOb2RlO3RoaXNbWnJdLm92ZXJmbG93Tm9kZT1udWxsO2NvbnN0IGk9ZVtzc10oKSxhPWkudGFyZ2V0O2kuYWRkTGVhZGVyPW51bGwhPT1pLmxlYWRlcjtpLmFkZFRyYWlsZXI9bnVsbCE9PWkudHJhaWxlcjtmbHVzaCh0KTtjb25zdCBzPXQ7dD0xLzA7aWYoYSBpbnN0YW5jZW9mIFBhZ2VBcmVhKW89YTtlbHNlIGlmKGEgaW5zdGFuY2VvZiBDb250ZW50QXJlYSl7Y29uc3QgZT1yLmluZGV4T2YoYSk7aWYoLTEhPT1lKWU+cz90PWUtMTpDPWU7ZWxzZXtvPWFbbHNdKCk7Qz1vLmNvbnRlbnRBcmVhLmNoaWxkcmVuLmluZGV4T2YoYSl9fX1lbHNlIGZsdXNoKHQpfXRoaXNbWnJdLnBhZ2VOdW1iZXIrPTE7byYmKG9bRnNdKCk/b1tacl0ubnVtYmVyT2ZVc2UrPTE6bz1udWxsKTthPW98fGFbSXNdKCk7eWllbGQgbnVsbH19fWNsYXNzIFRleHQgZXh0ZW5kcyBDb250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE1uLCJ0ZXh0Iik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm1heENoYXJzPWdldEludGVnZXIoe2RhdGE6ZS5tYXhDaGFycyxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT5lPj0wfSk7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5yaWQ9ZS5yaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn1bSnJdKCl7cmV0dXJuITB9W0dzXShlKXtpZihlW2tzXT09PUFuLnhodG1sLmlkKXt0aGlzW2pyXT1lO3JldHVybiEwfXdhcm4oYFhGQSAtIEludmFsaWQgY29udGVudCBpbiBUZXh0OiAke2VbUnNdfS5gKTtyZXR1cm4hMX1bVXNdKGUpe3RoaXNbanJdaW5zdGFuY2VvZiBYRkFPYmplY3R8fHN1cGVyW1VzXShlKX1bX3JdKCl7InN0cmluZyI9PXR5cGVvZiB0aGlzW2pyXSYmKHRoaXNbanJdPXRoaXNbanJdLnJlcGxhY2VBbGwoIlxyXG4iLCJcbiIpKX1bc3NdKCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0aGlzW2pyXT90aGlzW2pyXS5zcGxpdCgvW1x1MjAyOVx1MjAyOFxuXS8pLnJlZHVjZSgoKGUsdCk9Pnt0JiZlLnB1c2godCk7cmV0dXJuIGV9KSxbXSkuam9pbigiXG4iKTp0aGlzW2pyXVtqc10oKX1bVnNdKGUpe2lmKCJzdHJpbmciPT10eXBlb2YgdGhpc1tqcl0pe2NvbnN0IGU9dmFsdWVUb0h0bWwodGhpc1tqcl0pLmh0bWw7aWYodGhpc1tqcl0uaW5jbHVkZXMoIlx1MjAyOSIpKXtlLm5hbWU9ImRpdiI7ZS5jaGlsZHJlbj1bXTt0aGlzW2pyXS5zcGxpdCgiXHUyMDI5IikubWFwKChlPT5lLnNwbGl0KC9bXHUyMDI4XG5dLykucmVkdWNlKCgoZSx0KT0+e2UucHVzaCh7bmFtZToic3BhbiIsdmFsdWU6dH0se25hbWU6ImJyIn0pO3JldHVybiBlfSksW10pKSkuZm9yRWFjaCgodD0+e2UuY2hpbGRyZW4ucHVzaCh7bmFtZToicCIsY2hpbGRyZW46dH0pfSkpfWVsc2UgaWYoL1tcdTIwMjhcbl0vLnRlc3QodGhpc1tqcl0pKXtlLm5hbWU9ImRpdiI7ZS5jaGlsZHJlbj1bXTt0aGlzW2pyXS5zcGxpdCgvW1x1MjAyOFxuXS8pLmZvckVhY2goKHQ9PntlLmNoaWxkcmVuLnB1c2goe25hbWU6InNwYW4iLHZhbHVlOnR9LHtuYW1lOiJiciJ9KX0pKX1yZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKGUpfXJldHVybiB0aGlzW2pyXVtWc10oZSl9fWNsYXNzIFRleHRFZGl0IGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE1uLCJ0ZXh0RWRpdCIsITApO3RoaXMuYWxsb3dSaWNoVGV4dD1nZXRJbnRlZ2VyKHtkYXRhOmUuYWxsb3dSaWNoVGV4dCxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMuaFNjcm9sbFBvbGljeT1nZXRTdHJpbmdPcHRpb24oZS5oU2Nyb2xsUG9saWN5LFsiYXV0byIsIm9mZiIsIm9uIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5tdWx0aUxpbmU9Z2V0SW50ZWdlcih7ZGF0YTplLm11bHRpTGluZSxkZWZhdWx0VmFsdWU6IiIsdmFsaWRhdGU6ZT0+MD09PWV8fDE9PT1lfSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMudlNjcm9sbFBvbGljeT1nZXRTdHJpbmdPcHRpb24oZS52U2Nyb2xsUG9saWN5LFsiYXV0byIsIm9mZiIsIm9uIl0pO3RoaXMuYm9yZGVyPW51bGw7dGhpcy5jb21iPW51bGw7dGhpcy5leHRyYXM9bnVsbDt0aGlzLm1hcmdpbj1udWxsfVtWc10oZSl7Y29uc3QgdD10b1N0eWxlKHRoaXMsImJvcmRlciIsImZvbnQiLCJtYXJnaW4iKTtsZXQgaTtjb25zdCBhPXRoaXNbbHNdKClbbHNdKCk7IiI9PT10aGlzLm11bHRpTGluZSYmKHRoaXMubXVsdGlMaW5lPWEgaW5zdGFuY2VvZiBEcmF3PzE6MCk7aT0xPT09dGhpcy5tdWx0aUxpbmU/e25hbWU6InRleHRhcmVhIixhdHRyaWJ1dGVzOntkYXRhSWQ6YVtYcl0/Llt6c118fGFbenNdLGZpZWxkSWQ6YVt6c10sY2xhc3M6WyJ4ZmFUZXh0ZmllbGQiXSxzdHlsZTp0LCJhcmlhLWxhYmVsIjphcmlhTGFiZWwoYSksImFyaWEtcmVxdWlyZWQiOiExfX06e25hbWU6ImlucHV0IixhdHRyaWJ1dGVzOnt0eXBlOiJ0ZXh0IixkYXRhSWQ6YVtYcl0/Llt6c118fGFbenNdLGZpZWxkSWQ6YVt6c10sY2xhc3M6WyJ4ZmFUZXh0ZmllbGQiXSxzdHlsZTp0LCJhcmlhLWxhYmVsIjphcmlhTGFiZWwoYSksImFyaWEtcmVxdWlyZWQiOiExfX07aWYoaXNSZXF1aXJlZChhKSl7aS5hdHRyaWJ1dGVzWyJhcmlhLXJlcXVpcmVkIl09ITA7aS5hdHRyaWJ1dGVzLnJlcXVpcmVkPSEwfXJldHVybiBIVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImxhYmVsIixhdHRyaWJ1dGVzOntjbGFzczpbInhmYUxhYmVsIl19LGNoaWxkcmVuOltpXX0pfX1jbGFzcyBUaW1lIGV4dGVuZHMgU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE1uLCJ0aW1lIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9W19yXSgpe2NvbnN0IGU9dGhpc1tqcl0udHJpbSgpO3RoaXNbanJdPWU/bmV3IERhdGUoZSk6bnVsbH1bVnNdKGUpe3JldHVybiB2YWx1ZVRvSHRtbCh0aGlzW2pyXT90aGlzW2pyXS50b1N0cmluZygpOiIiKX19Y2xhc3MgVGltZVN0YW1wIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE1uLCJ0aW1lU3RhbXAiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMuc2VydmVyPWUuc2VydmVyfHwiIjt0aGlzLnR5cGU9Z2V0U3RyaW5nT3B0aW9uKGUudHlwZSxbIm9wdGlvbmFsIiwicmVxdWlyZWQiXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBUb29sVGlwIGV4dGVuZHMgU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE1uLCJ0b29sVGlwIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLnJpZD1lLnJpZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBUcmF2ZXJzYWwgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTW4sInRyYXZlcnNhbCIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGw7dGhpcy50cmF2ZXJzZT1uZXcgWEZBT2JqZWN0QXJyYXl9fWNsYXNzIFRyYXZlcnNlIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE1uLCJ0cmF2ZXJzZSIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5vcGVyYXRpb249Z2V0U3RyaW5nT3B0aW9uKGUub3BlcmF0aW9uLFsibmV4dCIsImJhY2siLCJkb3duIiwiZmlyc3QiLCJsZWZ0IiwicmlnaHQiLCJ1cCJdKTt0aGlzLnJlZj1lLnJlZnx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5zY3JpcHQ9bnVsbH1nZXQgbmFtZSgpe3JldHVybiB0aGlzLm9wZXJhdGlvbn1bRHNdKCl7cmV0dXJuITF9fWNsYXNzIFVpIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE1uLCJ1aSIsITApO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5waWN0dXJlPW51bGw7dGhpcy5iYXJjb2RlPW51bGw7dGhpcy5idXR0b249bnVsbDt0aGlzLmNoZWNrQnV0dG9uPW51bGw7dGhpcy5jaG9pY2VMaXN0PW51bGw7dGhpcy5kYXRlVGltZUVkaXQ9bnVsbDt0aGlzLmRlZmF1bHRVaT1udWxsO3RoaXMuaW1hZ2VFZGl0PW51bGw7dGhpcy5udW1lcmljRWRpdD1udWxsO3RoaXMucGFzc3dvcmRFZGl0PW51bGw7dGhpcy5zaWduYXR1cmU9bnVsbDt0aGlzLnRleHRFZGl0PW51bGx9W3NzXSgpe2lmKHZvaWQgMD09PXRoaXNbWnJdKXtmb3IoY29uc3QgZSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSl7aWYoImV4dHJhcyI9PT1lfHwicGljdHVyZSI9PT1lKWNvbnRpbnVlO2NvbnN0IHQ9dGhpc1tlXTtpZih0IGluc3RhbmNlb2YgWEZBT2JqZWN0KXt0aGlzW1pyXT10O3JldHVybiB0fX10aGlzW1pyXT1udWxsfXJldHVybiB0aGlzW1pyXX1bVnNdKGUpe2NvbnN0IHQ9dGhpc1tzc10oKTtyZXR1cm4gdD90W1ZzXShlKTpIVE1MUmVzdWx0LkVNUFRZfX1jbGFzcyBWYWxpZGF0ZSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihNbiwidmFsaWRhdGUiLCEwKTt0aGlzLmZvcm1hdFRlc3Q9Z2V0U3RyaW5nT3B0aW9uKGUuZm9ybWF0VGVzdCxbIndhcm5pbmciLCJkaXNhYmxlZCIsImVycm9yIl0pO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5udWxsVGVzdD1nZXRTdHJpbmdPcHRpb24oZS5udWxsVGVzdCxbImRpc2FibGVkIiwiZXJyb3IiLCJ3YXJuaW5nIl0pO3RoaXMuc2NyaXB0VGVzdD1nZXRTdHJpbmdPcHRpb24oZS5zY3JpcHRUZXN0LFsiZXJyb3IiLCJkaXNhYmxlZCIsIndhcm5pbmciXSk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuZXh0cmFzPW51bGw7dGhpcy5tZXNzYWdlPW51bGw7dGhpcy5waWN0dXJlPW51bGw7dGhpcy5zY3JpcHQ9bnVsbH19Y2xhc3MgVmFsdWUgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoTW4sInZhbHVlIiwhMCk7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm92ZXJyaWRlPWdldEludGVnZXIoe2RhdGE6ZS5vdmVycmlkZSxkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMucmVsZXZhbnQ9Z2V0UmVsZXZhbnQoZS5yZWxldmFudCk7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIiO3RoaXMuYXJjPW51bGw7dGhpcy5ib29sZWFuPW51bGw7dGhpcy5kYXRlPW51bGw7dGhpcy5kYXRlVGltZT1udWxsO3RoaXMuZGVjaW1hbD1udWxsO3RoaXMuZXhEYXRhPW51bGw7dGhpcy5mbG9hdD1udWxsO3RoaXMuaW1hZ2U9bnVsbDt0aGlzLmludGVnZXI9bnVsbDt0aGlzLmxpbmU9bnVsbDt0aGlzLnJlY3RhbmdsZT1udWxsO3RoaXMudGV4dD1udWxsO3RoaXMudGltZT1udWxsfVtPc10oZSl7Y29uc3QgdD10aGlzW2xzXSgpO2lmKHQgaW5zdGFuY2VvZiBGaWVsZCYmdC51aT8uaW1hZ2VFZGl0KXtpZighdGhpcy5pbWFnZSl7dGhpcy5pbWFnZT1uZXcgSW1hZ2Uoe30pO3RoaXNbWXJdKHRoaXMuaW1hZ2UpfXRoaXMuaW1hZ2VbanJdPWVbanJdO3JldHVybn1jb25zdCBpPWVbUnNdO2lmKG51bGw9PT10aGlzW2ldKXtmb3IoY29uc3QgZSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKSl7Y29uc3QgdD10aGlzW2VdO2lmKHQgaW5zdGFuY2VvZiBYRkFPYmplY3Qpe3RoaXNbZV09bnVsbDt0aGlzW0pzXSh0KX19dGhpc1tlW1JzXV09ZTt0aGlzW1lyXShlKX1lbHNlIHRoaXNbaV1banJdPWVbanJdfVtqc10oKXtpZih0aGlzLmV4RGF0YSlyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHRoaXMuZXhEYXRhW2pyXT90aGlzLmV4RGF0YVtqcl0udHJpbSgpOnRoaXMuZXhEYXRhW2pyXVtqc10oKS50cmltKCk7Zm9yKGNvbnN0IGUgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpe2lmKCJpbWFnZSI9PT1lKWNvbnRpbnVlO2NvbnN0IHQ9dGhpc1tlXTtpZih0IGluc3RhbmNlb2YgWEZBT2JqZWN0KXJldHVybih0W2pyXXx8IiIpLnRvU3RyaW5nKCkudHJpbSgpfXJldHVybiBudWxsfVtWc10oZSl7Zm9yKGNvbnN0IHQgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcykpe2NvbnN0IGk9dGhpc1t0XTtpZihpIGluc3RhbmNlb2YgWEZBT2JqZWN0KXJldHVybiBpW1ZzXShlKX1yZXR1cm4gSFRNTFJlc3VsdC5FTVBUWX19Y2xhc3MgVmFyaWFibGVzIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKE1uLCJ2YXJpYWJsZXMiLCEwKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIjt0aGlzLmJvb2xlYW49bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZGF0ZT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5kYXRlVGltZT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5kZWNpbWFsPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLmV4RGF0YT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5mbG9hdD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5pbWFnZT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5pbnRlZ2VyPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLm1hbmlmZXN0PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnNjcmlwdD1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy50ZXh0PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnRpbWU9bmV3IFhGQU9iamVjdEFycmF5fVtEc10oKXtyZXR1cm4hMH19Y2xhc3MgVGVtcGxhdGVOYW1lc3BhY2V7c3RhdGljWyRzXShlLHQpe2lmKFRlbXBsYXRlTmFtZXNwYWNlLmhhc093blByb3BlcnR5KGUpKXtjb25zdCBpPVRlbXBsYXRlTmFtZXNwYWNlW2VdKHQpO2lbcXNdKHQpO3JldHVybiBpfX1zdGF0aWMgYXBwZWFyYW5jZUZpbHRlcihlKXtyZXR1cm4gbmV3IEFwcGVhcmFuY2VGaWx0ZXIoZSl9c3RhdGljIGFyYyhlKXtyZXR1cm4gbmV3IEFyYyhlKX1zdGF0aWMgYXJlYShlKXtyZXR1cm4gbmV3IEFyZWEoZSl9c3RhdGljIGFzc2lzdChlKXtyZXR1cm4gbmV3IEFzc2lzdChlKX1zdGF0aWMgYmFyY29kZShlKXtyZXR1cm4gbmV3IEJhcmNvZGUoZSl9c3RhdGljIGJpbmQoZSl7cmV0dXJuIG5ldyBCaW5kKGUpfXN0YXRpYyBiaW5kSXRlbXMoZSl7cmV0dXJuIG5ldyBCaW5kSXRlbXMoZSl9c3RhdGljIGJvb2tlbmQoZSl7cmV0dXJuIG5ldyBCb29rZW5kKGUpfXN0YXRpYyBib29sZWFuKGUpe3JldHVybiBuZXcgQm9vbGVhbkVsZW1lbnQoZSl9c3RhdGljIGJvcmRlcihlKXtyZXR1cm4gbmV3IEJvcmRlcihlKX1zdGF0aWMgYnJlYWsoZSl7cmV0dXJuIG5ldyBCcmVhayhlKX1zdGF0aWMgYnJlYWtBZnRlcihlKXtyZXR1cm4gbmV3IEJyZWFrQWZ0ZXIoZSl9c3RhdGljIGJyZWFrQmVmb3JlKGUpe3JldHVybiBuZXcgQnJlYWtCZWZvcmUoZSl9c3RhdGljIGJ1dHRvbihlKXtyZXR1cm4gbmV3IEJ1dHRvbihlKX1zdGF0aWMgY2FsY3VsYXRlKGUpe3JldHVybiBuZXcgQ2FsY3VsYXRlKGUpfXN0YXRpYyBjYXB0aW9uKGUpe3JldHVybiBuZXcgQ2FwdGlvbihlKX1zdGF0aWMgY2VydGlmaWNhdGUoZSl7cmV0dXJuIG5ldyBDZXJ0aWZpY2F0ZShlKX1zdGF0aWMgY2VydGlmaWNhdGVzKGUpe3JldHVybiBuZXcgQ2VydGlmaWNhdGVzKGUpfXN0YXRpYyBjaGVja0J1dHRvbihlKXtyZXR1cm4gbmV3IENoZWNrQnV0dG9uKGUpfXN0YXRpYyBjaG9pY2VMaXN0KGUpe3JldHVybiBuZXcgQ2hvaWNlTGlzdChlKX1zdGF0aWMgY29sb3IoZSl7cmV0dXJuIG5ldyBDb2xvcihlKX1zdGF0aWMgY29tYihlKXtyZXR1cm4gbmV3IENvbWIoZSl9c3RhdGljIGNvbm5lY3QoZSl7cmV0dXJuIG5ldyBDb25uZWN0KGUpfXN0YXRpYyBjb250ZW50QXJlYShlKXtyZXR1cm4gbmV3IENvbnRlbnRBcmVhKGUpfXN0YXRpYyBjb3JuZXIoZSl7cmV0dXJuIG5ldyBDb3JuZXIoZSl9c3RhdGljIGRhdGUoZSl7cmV0dXJuIG5ldyBEYXRlRWxlbWVudChlKX1zdGF0aWMgZGF0ZVRpbWUoZSl7cmV0dXJuIG5ldyBEYXRlVGltZShlKX1zdGF0aWMgZGF0ZVRpbWVFZGl0KGUpe3JldHVybiBuZXcgRGF0ZVRpbWVFZGl0KGUpfXN0YXRpYyBkZWNpbWFsKGUpe3JldHVybiBuZXcgRGVjaW1hbChlKX1zdGF0aWMgZGVmYXVsdFVpKGUpe3JldHVybiBuZXcgRGVmYXVsdFVpKGUpfXN0YXRpYyBkZXNjKGUpe3JldHVybiBuZXcgRGVzYyhlKX1zdGF0aWMgZGlnZXN0TWV0aG9kKGUpe3JldHVybiBuZXcgRGlnZXN0TWV0aG9kKGUpfXN0YXRpYyBkaWdlc3RNZXRob2RzKGUpe3JldHVybiBuZXcgRGlnZXN0TWV0aG9kcyhlKX1zdGF0aWMgZHJhdyhlKXtyZXR1cm4gbmV3IERyYXcoZSl9c3RhdGljIGVkZ2UoZSl7cmV0dXJuIG5ldyBFZGdlKGUpfXN0YXRpYyBlbmNvZGluZyhlKXtyZXR1cm4gbmV3IEVuY29kaW5nKGUpfXN0YXRpYyBlbmNvZGluZ3MoZSl7cmV0dXJuIG5ldyBFbmNvZGluZ3MoZSl9c3RhdGljIGVuY3J5cHQoZSl7cmV0dXJuIG5ldyBFbmNyeXB0KGUpfXN0YXRpYyBlbmNyeXB0RGF0YShlKXtyZXR1cm4gbmV3IEVuY3J5cHREYXRhKGUpfXN0YXRpYyBlbmNyeXB0aW9uKGUpe3JldHVybiBuZXcgRW5jcnlwdGlvbihlKX1zdGF0aWMgZW5jcnlwdGlvbk1ldGhvZChlKXtyZXR1cm4gbmV3IEVuY3J5cHRpb25NZXRob2QoZSl9c3RhdGljIGVuY3J5cHRpb25NZXRob2RzKGUpe3JldHVybiBuZXcgRW5jcnlwdGlvbk1ldGhvZHMoZSl9c3RhdGljIGV2ZW50KGUpe3JldHVybiBuZXcgRXZlbnQoZSl9c3RhdGljIGV4RGF0YShlKXtyZXR1cm4gbmV3IEV4RGF0YShlKX1zdGF0aWMgZXhPYmplY3QoZSl7cmV0dXJuIG5ldyBFeE9iamVjdChlKX1zdGF0aWMgZXhjbEdyb3VwKGUpe3JldHVybiBuZXcgRXhjbEdyb3VwKGUpfXN0YXRpYyBleGVjdXRlKGUpe3JldHVybiBuZXcgRXhlY3V0ZShlKX1zdGF0aWMgZXh0cmFzKGUpe3JldHVybiBuZXcgRXh0cmFzKGUpfXN0YXRpYyBmaWVsZChlKXtyZXR1cm4gbmV3IEZpZWxkKGUpfXN0YXRpYyBmaWxsKGUpe3JldHVybiBuZXcgRmlsbChlKX1zdGF0aWMgZmlsdGVyKGUpe3JldHVybiBuZXcgRmlsdGVyKGUpfXN0YXRpYyBmbG9hdChlKXtyZXR1cm4gbmV3IEZsb2F0KGUpfXN0YXRpYyBmb250KGUpe3JldHVybiBuZXcgdGVtcGxhdGVfRm9udChlKX1zdGF0aWMgZm9ybWF0KGUpe3JldHVybiBuZXcgRm9ybWF0KGUpfXN0YXRpYyBoYW5kbGVyKGUpe3JldHVybiBuZXcgSGFuZGxlcihlKX1zdGF0aWMgaHlwaGVuYXRpb24oZSl7cmV0dXJuIG5ldyBIeXBoZW5hdGlvbihlKX1zdGF0aWMgaW1hZ2UoZSl7cmV0dXJuIG5ldyBJbWFnZShlKX1zdGF0aWMgaW1hZ2VFZGl0KGUpe3JldHVybiBuZXcgSW1hZ2VFZGl0KGUpfXN0YXRpYyBpbnRlZ2VyKGUpe3JldHVybiBuZXcgSW50ZWdlcihlKX1zdGF0aWMgaXNzdWVycyhlKXtyZXR1cm4gbmV3IElzc3VlcnMoZSl9c3RhdGljIGl0ZW1zKGUpe3JldHVybiBuZXcgSXRlbXMoZSl9c3RhdGljIGtlZXAoZSl7cmV0dXJuIG5ldyBLZWVwKGUpfXN0YXRpYyBrZXlVc2FnZShlKXtyZXR1cm4gbmV3IEtleVVzYWdlKGUpfXN0YXRpYyBsaW5lKGUpe3JldHVybiBuZXcgTGluZShlKX1zdGF0aWMgbGluZWFyKGUpe3JldHVybiBuZXcgTGluZWFyKGUpfXN0YXRpYyBsb2NrRG9jdW1lbnQoZSl7cmV0dXJuIG5ldyBMb2NrRG9jdW1lbnQoZSl9c3RhdGljIG1hbmlmZXN0KGUpe3JldHVybiBuZXcgTWFuaWZlc3QoZSl9c3RhdGljIG1hcmdpbihlKXtyZXR1cm4gbmV3IE1hcmdpbihlKX1zdGF0aWMgbWRwKGUpe3JldHVybiBuZXcgTWRwKGUpfXN0YXRpYyBtZWRpdW0oZSl7cmV0dXJuIG5ldyBNZWRpdW0oZSl9c3RhdGljIG1lc3NhZ2UoZSl7cmV0dXJuIG5ldyBNZXNzYWdlKGUpfXN0YXRpYyBudW1lcmljRWRpdChlKXtyZXR1cm4gbmV3IE51bWVyaWNFZGl0KGUpfXN0YXRpYyBvY2N1cihlKXtyZXR1cm4gbmV3IE9jY3VyKGUpfXN0YXRpYyBvaWQoZSl7cmV0dXJuIG5ldyBPaWQoZSl9c3RhdGljIG9pZHMoZSl7cmV0dXJuIG5ldyBPaWRzKGUpfXN0YXRpYyBvdmVyZmxvdyhlKXtyZXR1cm4gbmV3IE92ZXJmbG93KGUpfXN0YXRpYyBwYWdlQXJlYShlKXtyZXR1cm4gbmV3IFBhZ2VBcmVhKGUpfXN0YXRpYyBwYWdlU2V0KGUpe3JldHVybiBuZXcgUGFnZVNldChlKX1zdGF0aWMgcGFyYShlKXtyZXR1cm4gbmV3IFBhcmEoZSl9c3RhdGljIHBhc3N3b3JkRWRpdChlKXtyZXR1cm4gbmV3IFBhc3N3b3JkRWRpdChlKX1zdGF0aWMgcGF0dGVybihlKXtyZXR1cm4gbmV3IHRlbXBsYXRlX1BhdHRlcm4oZSl9c3RhdGljIHBpY3R1cmUoZSl7cmV0dXJuIG5ldyBQaWN0dXJlKGUpfXN0YXRpYyBwcm90byhlKXtyZXR1cm4gbmV3IFByb3RvKGUpfXN0YXRpYyByYWRpYWwoZSl7cmV0dXJuIG5ldyBSYWRpYWwoZSl9c3RhdGljIHJlYXNvbihlKXtyZXR1cm4gbmV3IFJlYXNvbihlKX1zdGF0aWMgcmVhc29ucyhlKXtyZXR1cm4gbmV3IFJlYXNvbnMoZSl9c3RhdGljIHJlY3RhbmdsZShlKXtyZXR1cm4gbmV3IFJlY3RhbmdsZShlKX1zdGF0aWMgcmVmKGUpe3JldHVybiBuZXcgUmVmRWxlbWVudChlKX1zdGF0aWMgc2NyaXB0KGUpe3JldHVybiBuZXcgU2NyaXB0KGUpfXN0YXRpYyBzZXRQcm9wZXJ0eShlKXtyZXR1cm4gbmV3IFNldFByb3BlcnR5KGUpfXN0YXRpYyBzaWduRGF0YShlKXtyZXR1cm4gbmV3IFNpZ25EYXRhKGUpfXN0YXRpYyBzaWduYXR1cmUoZSl7cmV0dXJuIG5ldyBTaWduYXR1cmUoZSl9c3RhdGljIHNpZ25pbmcoZSl7cmV0dXJuIG5ldyBTaWduaW5nKGUpfXN0YXRpYyBzb2xpZChlKXtyZXR1cm4gbmV3IFNvbGlkKGUpfXN0YXRpYyBzcGVhayhlKXtyZXR1cm4gbmV3IFNwZWFrKGUpfXN0YXRpYyBzdGlwcGxlKGUpe3JldHVybiBuZXcgU3RpcHBsZShlKX1zdGF0aWMgc3ViZm9ybShlKXtyZXR1cm4gbmV3IFN1YmZvcm0oZSl9c3RhdGljIHN1YmZvcm1TZXQoZSl7cmV0dXJuIG5ldyBTdWJmb3JtU2V0KGUpfXN0YXRpYyBzdWJqZWN0RE4oZSl7cmV0dXJuIG5ldyBTdWJqZWN0RE4oZSl9c3RhdGljIHN1YmplY3RETnMoZSl7cmV0dXJuIG5ldyBTdWJqZWN0RE5zKGUpfXN0YXRpYyBzdWJtaXQoZSl7cmV0dXJuIG5ldyBTdWJtaXQoZSl9c3RhdGljIHRlbXBsYXRlKGUpe3JldHVybiBuZXcgVGVtcGxhdGUoZSl9c3RhdGljIHRleHQoZSl7cmV0dXJuIG5ldyBUZXh0KGUpfXN0YXRpYyB0ZXh0RWRpdChlKXtyZXR1cm4gbmV3IFRleHRFZGl0KGUpfXN0YXRpYyB0aW1lKGUpe3JldHVybiBuZXcgVGltZShlKX1zdGF0aWMgdGltZVN0YW1wKGUpe3JldHVybiBuZXcgVGltZVN0YW1wKGUpfXN0YXRpYyB0b29sVGlwKGUpe3JldHVybiBuZXcgVG9vbFRpcChlKX1zdGF0aWMgdHJhdmVyc2FsKGUpe3JldHVybiBuZXcgVHJhdmVyc2FsKGUpfXN0YXRpYyB0cmF2ZXJzZShlKXtyZXR1cm4gbmV3IFRyYXZlcnNlKGUpfXN0YXRpYyB1aShlKXtyZXR1cm4gbmV3IFVpKGUpfXN0YXRpYyB2YWxpZGF0ZShlKXtyZXR1cm4gbmV3IFZhbGlkYXRlKGUpfXN0YXRpYyB2YWx1ZShlKXtyZXR1cm4gbmV3IFZhbHVlKGUpfXN0YXRpYyB2YXJpYWJsZXMoZSl7cmV0dXJuIG5ldyBWYXJpYWJsZXMoZSl9fWNvbnN0IEpuPUFuLmRhdGFzZXRzLmlkO2Z1bmN0aW9uIGNyZWF0ZVRleHQoZSl7Y29uc3QgdD1uZXcgVGV4dCh7fSk7dFtqcl09ZTtyZXR1cm4gdH1jbGFzcyBCaW5kZXJ7Y29uc3RydWN0b3IoZSl7dGhpcy5yb290PWU7dGhpcy5kYXRhc2V0cz1lLmRhdGFzZXRzO3RoaXMuZGF0YT1lLmRhdGFzZXRzPy5kYXRhfHxuZXcgWG1sT2JqZWN0KEFuLmRhdGFzZXRzLmlkLCJkYXRhIik7dGhpcy5lbXB0eU1lcmdlPTA9PT10aGlzLmRhdGFbb3NdKCkubGVuZ3RoO3RoaXMucm9vdC5mb3JtPXRoaXMuZm9ybT1lLnRlbXBsYXRlW1ByXSgpfV9pc0NvbnN1bWVEYXRhKCl7cmV0dXJuIXRoaXMuZW1wdHlNZXJnZSYmdGhpcy5fbWVyZ2VNb2RlfV9pc01hdGNoVGVtcGxhdGUoKXtyZXR1cm4hdGhpcy5faXNDb25zdW1lRGF0YSgpfWJpbmQoKXt0aGlzLl9iaW5kRWxlbWVudCh0aGlzLmZvcm0sdGhpcy5kYXRhKTtyZXR1cm4gdGhpcy5mb3JtfWdldERhdGEoKXtyZXR1cm4gdGhpcy5kYXRhfV9iaW5kVmFsdWUoZSx0LGkpe2VbWHJdPXQ7aWYoZVtCc10oKSlpZih0W3BzXSgpKXtjb25zdCBpPXRbcnNdKCk7ZVtPc10oY3JlYXRlVGV4dChpKSl9ZWxzZSBpZihlIGluc3RhbmNlb2YgRmllbGQmJiJtdWx0aVNlbGVjdCI9PT1lLnVpPy5jaG9pY2VMaXN0Py5vcGVuKXtjb25zdCBpPXRbb3NdKCkubWFwKChlPT5lW2pyXS50cmltKCkpKS5qb2luKCJcbiIpO2VbT3NdKGNyZWF0ZVRleHQoaSkpfWVsc2UgdGhpcy5faXNDb25zdW1lRGF0YSgpJiZ3YXJuKCJYRkEgLSBOb2RlcyBoYXZlbid0IHRoZSBzYW1lIHR5cGUuIik7ZWxzZSF0W3BzXSgpfHx0aGlzLl9pc01hdGNoVGVtcGxhdGUoKT90aGlzLl9iaW5kRWxlbWVudChlLHQpOndhcm4oIlhGQSAtIE5vZGVzIGhhdmVuJ3QgdGhlIHNhbWUgdHlwZS4iKX1fZmluZERhdGFCeU5hbWVUb0NvbnN1bWUoZSx0LGksYSl7aWYoIWUpcmV0dXJuIG51bGw7bGV0IHIscztmb3IobGV0IGE9MDthPDM7YSsrKXtyPWlbbnNdKGUsITEsITApO2Zvcig7Oyl7cz1yLm5leHQoKS52YWx1ZTtpZighcylicmVhaztpZih0PT09c1twc10oKSlyZXR1cm4gc31pZihpW2tzXT09PUFuLmRhdGFzZXRzLmlkJiYiZGF0YSI9PT1pW1JzXSlicmVhaztpPWlbbHNdKCl9aWYoIWEpcmV0dXJuIG51bGw7cj10aGlzLmRhdGFbbnNdKGUsITAsITEpO3M9ci5uZXh0KCkudmFsdWU7aWYocylyZXR1cm4gcztyPXRoaXMuZGF0YVskcl0oZSwhMCk7cz1yLm5leHQoKS52YWx1ZTtyZXR1cm4gcz8uW3BzXSgpP3M6bnVsbH1fc2V0UHJvcGVydGllcyhlLHQpe2lmKGUuaGFzT3duUHJvcGVydHkoInNldFByb3BlcnR5IikpZm9yKGNvbnN0e3JlZjppLHRhcmdldDphLGNvbm5lY3Rpb246cn1vZiBlLnNldFByb3BlcnR5LmNoaWxkcmVuKXtpZihyKWNvbnRpbnVlO2lmKCFpKWNvbnRpbnVlO2NvbnN0IHM9c2VhcmNoTm9kZSh0aGlzLnJvb3QsdCxpLCExLCExKTtpZighcyl7d2FybihgWEZBIC0gSW52YWxpZCByZWZlcmVuY2U6ICR7aX0uYCk7Y29udGludWV9Y29uc3Rbbl09cztpZighblttc10odGhpcy5kYXRhKSl7d2FybigiWEZBIC0gSW52YWxpZCBub2RlOiBtdXN0IGJlIGEgZGF0YSBub2RlLiIpO2NvbnRpbnVlfWNvbnN0IG89c2VhcmNoTm9kZSh0aGlzLnJvb3QsZSxhLCExLCExKTtpZighbyl7d2FybihgWEZBIC0gSW52YWxpZCB0YXJnZXQ6ICR7YX0uYCk7Y29udGludWV9Y29uc3RbZ109bztpZighZ1ttc10oZSkpe3dhcm4oIlhGQSAtIEludmFsaWQgdGFyZ2V0OiBtdXN0IGJlIGEgcHJvcGVydHkgb3Igc3VicHJvcGVydHkuIik7Y29udGludWV9Y29uc3QgYz1nW2xzXSgpO2lmKGcgaW5zdGFuY2VvZiBTZXRQcm9wZXJ0eXx8YyBpbnN0YW5jZW9mIFNldFByb3BlcnR5KXt3YXJuKCJYRkEgLSBJbnZhbGlkIHRhcmdldDogY2Fubm90IGJlIGEgc2V0UHJvcGVydHkgb3Igb25lIG9mIGl0cyBwcm9wZXJ0aWVzLiIpO2NvbnRpbnVlfWlmKGcgaW5zdGFuY2VvZiBCaW5kSXRlbXN8fGMgaW5zdGFuY2VvZiBCaW5kSXRlbXMpe3dhcm4oIlhGQSAtIEludmFsaWQgdGFyZ2V0OiBjYW5ub3QgYmUgYSBiaW5kSXRlbXMgb3Igb25lIG9mIGl0cyBwcm9wZXJ0aWVzLiIpO2NvbnRpbnVlfWNvbnN0IGw9bltqc10oKSxoPWdbUnNdO2lmKGcgaW5zdGFuY2VvZiBYRkFBdHRyaWJ1dGUpe2NvbnN0IGU9T2JqZWN0LmNyZWF0ZShudWxsKTtlW2hdPWw7Y29uc3QgdD1SZWZsZWN0LmNvbnN0cnVjdChPYmplY3QuZ2V0UHJvdG90eXBlT2YoYykuY29uc3RydWN0b3IsW2VdKTtjW2hdPXRbaF19ZWxzZSBpZihnLmhhc093blByb3BlcnR5KGpyKSl7Z1tYcl09bjtnW2pyXT1sO2dbX3JdKCl9ZWxzZSB3YXJuKCJYRkEgLSBJbnZhbGlkIG5vZGUgdG8gdXNlIGluIHNldFByb3BlcnR5Iil9fV9iaW5kSXRlbXMoZSx0KXtpZighZS5oYXNPd25Qcm9wZXJ0eSgiaXRlbXMiKXx8IWUuaGFzT3duUHJvcGVydHkoImJpbmRJdGVtcyIpfHxlLmJpbmRJdGVtcy5pc0VtcHR5KCkpcmV0dXJuO2Zvcihjb25zdCB0IG9mIGUuaXRlbXMuY2hpbGRyZW4pZVtKc10odCk7ZS5pdGVtcy5jbGVhcigpO2NvbnN0IGk9bmV3IEl0ZW1zKHt9KSxhPW5ldyBJdGVtcyh7fSk7ZVtZcl0oaSk7ZS5pdGVtcy5wdXNoKGkpO2VbWXJdKGEpO2UuaXRlbXMucHVzaChhKTtmb3IoY29uc3R7cmVmOnIsbGFiZWxSZWY6cyx2YWx1ZVJlZjpuLGNvbm5lY3Rpb246b31vZiBlLmJpbmRJdGVtcy5jaGlsZHJlbil7aWYobyljb250aW51ZTtpZighciljb250aW51ZTtjb25zdCBlPXNlYXJjaE5vZGUodGhpcy5yb290LHQsciwhMSwhMSk7aWYoZSlmb3IoY29uc3QgdCBvZiBlKXtpZighdFttc10odGhpcy5kYXRhc2V0cykpe3dhcm4oYFhGQSAtIEludmFsaWQgcmVmICgke3J9KTogbXVzdCBiZSBhIGRhdGFzZXRzIGNoaWxkLmApO2NvbnRpbnVlfWNvbnN0IGU9c2VhcmNoTm9kZSh0aGlzLnJvb3QsdCxzLCEwLCExKTtpZighZSl7d2FybihgWEZBIC0gSW52YWxpZCBsYWJlbDogJHtzfS5gKTtjb250aW51ZX1jb25zdFtvXT1lO2lmKCFvW21zXSh0aGlzLmRhdGFzZXRzKSl7d2FybigiWEZBIC0gSW52YWxpZCBsYWJlbDogbXVzdCBiZSBhIGRhdGFzZXRzIGNoaWxkLiIpO2NvbnRpbnVlfWNvbnN0IGc9c2VhcmNoTm9kZSh0aGlzLnJvb3QsdCxuLCEwLCExKTtpZighZyl7d2FybihgWEZBIC0gSW52YWxpZCB2YWx1ZTogJHtufS5gKTtjb250aW51ZX1jb25zdFtjXT1nO2lmKCFjW21zXSh0aGlzLmRhdGFzZXRzKSl7d2FybigiWEZBIC0gSW52YWxpZCB2YWx1ZTogbXVzdCBiZSBhIGRhdGFzZXRzIGNoaWxkLiIpO2NvbnRpbnVlfWNvbnN0IGw9Y3JlYXRlVGV4dChvW2pzXSgpKSxoPWNyZWF0ZVRleHQoY1tqc10oKSk7aVtZcl0obCk7aS50ZXh0LnB1c2gobCk7YVtZcl0oaCk7YS50ZXh0LnB1c2goaCl9ZWxzZSB3YXJuKGBYRkEgLSBJbnZhbGlkIHJlZmVyZW5jZTogJHtyfS5gKX19X2JpbmRPY2N1cnJlbmNlcyhlLHQsaSl7bGV0IGE7aWYodC5sZW5ndGg+MSl7YT1lW1ByXSgpO2FbSnNdKGEub2NjdXIpO2Eub2NjdXI9bnVsbH10aGlzLl9iaW5kVmFsdWUoZSx0WzBdLGkpO3RoaXMuX3NldFByb3BlcnRpZXMoZSx0WzBdKTt0aGlzLl9iaW5kSXRlbXMoZSx0WzBdKTtpZigxPT09dC5sZW5ndGgpcmV0dXJuO2NvbnN0IHI9ZVtsc10oKSxzPWVbUnNdLG49cltFc10oZSk7Zm9yKGxldCBlPTEsbz10Lmxlbmd0aDtlPG87ZSsrKXtjb25zdCBvPXRbZV0sZz1hW1ByXSgpO3Jbc10ucHVzaChnKTtyW3VzXShuK2UsZyk7dGhpcy5fYmluZFZhbHVlKGcsbyxpKTt0aGlzLl9zZXRQcm9wZXJ0aWVzKGcsbyk7dGhpcy5fYmluZEl0ZW1zKGcsbyl9fV9jcmVhdGVPY2N1cnJlbmNlcyhlKXtpZighdGhpcy5lbXB0eU1lcmdlKXJldHVybjtjb25zdHtvY2N1cjp0fT1lO2lmKCF0fHx0LmluaXRpYWw8PTEpcmV0dXJuO2NvbnN0IGk9ZVtsc10oKSxhPWVbUnNdO2lmKCEoaVthXWluc3RhbmNlb2YgWEZBT2JqZWN0QXJyYXkpKXJldHVybjtsZXQgcjtyPWUubmFtZT9pW2FdLmNoaWxkcmVuLmZpbHRlcigodD0+dC5uYW1lPT09ZS5uYW1lKSkubGVuZ3RoOmlbYV0uY2hpbGRyZW4ubGVuZ3RoO2NvbnN0IHM9aVtFc10oZSkrMSxuPXQuaW5pdGlhbC1yO2lmKG4pe2NvbnN0IHQ9ZVtQcl0oKTt0W0pzXSh0Lm9jY3VyKTt0Lm9jY3VyPW51bGw7aVthXS5wdXNoKHQpO2lbdXNdKHMsdCk7Zm9yKGxldCBlPTE7ZTxuO2UrKyl7Y29uc3Qgcj10W1ByXSgpO2lbYV0ucHVzaChyKTtpW3VzXShzK2Uscil9fX1fZ2V0T2NjdXJJbmZvKGUpe2NvbnN0e25hbWU6dCxvY2N1cjppfT1lO2lmKCFpfHwhdClyZXR1cm5bMSwxXTtjb25zdCBhPS0xPT09aS5tYXg/MS8wOmkubWF4O3JldHVybltpLm1pbixhXX1fc2V0QW5kQmluZChlLHQpe3RoaXMuX3NldFByb3BlcnRpZXMoZSx0KTt0aGlzLl9iaW5kSXRlbXMoZSx0KTt0aGlzLl9iaW5kRWxlbWVudChlLHQpfV9iaW5kRWxlbWVudChlLHQpe2NvbnN0IGk9W107dGhpcy5fY3JlYXRlT2NjdXJyZW5jZXMoZSk7Zm9yKGNvbnN0IGEgb2YgZVtvc10oKSl7aWYoYVtYcl0pY29udGludWU7aWYodm9pZCAwPT09dGhpcy5fbWVyZ2VNb2RlJiYic3ViZm9ybSI9PT1hW1JzXSl7dGhpcy5fbWVyZ2VNb2RlPSJjb25zdW1lRGF0YSI9PT1hLm1lcmdlTW9kZTtjb25zdCBlPXRbb3NdKCk7aWYoZS5sZW5ndGg+MCl0aGlzLl9iaW5kT2NjdXJyZW5jZXMoYSxbZVswXV0sbnVsbCk7ZWxzZSBpZih0aGlzLmVtcHR5TWVyZ2Upe2NvbnN0IGU9dFtrc109PT1Kbj8tMTp0W2tzXSxpPWFbWHJdPW5ldyBYbWxPYmplY3QoZSxhLm5hbWV8fCJyb290Iik7dFtZcl0oaSk7dGhpcy5fYmluZEVsZW1lbnQoYSxpKX1jb250aW51ZX1pZighYVtmc10oKSljb250aW51ZTtsZXQgZT0hMSxyPW51bGwscz1udWxsLG49bnVsbDtpZihhLmJpbmQpe3N3aXRjaChhLmJpbmQubWF0Y2gpe2Nhc2Uibm9uZSI6dGhpcy5fc2V0QW5kQmluZChhLHQpO2NvbnRpbnVlO2Nhc2UiZ2xvYmFsIjplPSEwO2JyZWFrO2Nhc2UiZGF0YVJlZiI6aWYoIWEuYmluZC5yZWYpe3dhcm4oYFhGQSAtIHJlZiBpcyBlbXB0eSBpbiBub2RlICR7YVtSc119LmApO3RoaXMuX3NldEFuZEJpbmQoYSx0KTtjb250aW51ZX1zPWEuYmluZC5yZWZ9YS5iaW5kLnBpY3R1cmUmJihyPWEuYmluZC5waWN0dXJlW2pyXSl9Y29uc3RbbyxnXT10aGlzLl9nZXRPY2N1ckluZm8oYSk7aWYocyl7bj1zZWFyY2hOb2RlKHRoaXMucm9vdCx0LHMsITAsITEpO2lmKG51bGw9PT1uKXtuPWNyZWF0ZURhdGFOb2RlKHRoaXMuZGF0YSx0LHMpO2lmKCFuKWNvbnRpbnVlO3RoaXMuX2lzQ29uc3VtZURhdGEoKSYmKG5bV3JdPSEwKTt0aGlzLl9zZXRBbmRCaW5kKGEsbik7Y29udGludWV9dGhpcy5faXNDb25zdW1lRGF0YSgpJiYobj1uLmZpbHRlcigoZT0+IWVbV3JdKSkpO24ubGVuZ3RoPmc/bj1uLnNsaWNlKDAsZyk6MD09PW4ubGVuZ3RoJiYobj1udWxsKTtuJiZ0aGlzLl9pc0NvbnN1bWVEYXRhKCkmJm4uZm9yRWFjaCgoZT0+e2VbV3JdPSEwfSkpfWVsc2V7aWYoIWEubmFtZSl7dGhpcy5fc2V0QW5kQmluZChhLHQpO2NvbnRpbnVlfWlmKHRoaXMuX2lzQ29uc3VtZURhdGEoKSl7Y29uc3QgaT1bXTtmb3IoO2kubGVuZ3RoPGc7KXtjb25zdCByPXRoaXMuX2ZpbmREYXRhQnlOYW1lVG9Db25zdW1lKGEubmFtZSxhW0JzXSgpLHQsZSk7aWYoIXIpYnJlYWs7cltXcl09ITA7aS5wdXNoKHIpfW49aS5sZW5ndGg+MD9pOm51bGx9ZWxzZXtuPXRbbnNdKGEubmFtZSwhMSx0aGlzLmVtcHR5TWVyZ2UpLm5leHQoKS52YWx1ZTtpZighbil7aWYoMD09PW8pe2kucHVzaChhKTtjb250aW51ZX1jb25zdCBlPXRba3NdPT09Sm4/LTE6dFtrc107bj1hW1hyXT1uZXcgWG1sT2JqZWN0KGUsYS5uYW1lKTt0aGlzLmVtcHR5TWVyZ2UmJihuW1dyXT0hMCk7dFtZcl0obik7dGhpcy5fc2V0QW5kQmluZChhLG4pO2NvbnRpbnVlfXRoaXMuZW1wdHlNZXJnZSYmKG5bV3JdPSEwKTtuPVtuXX19bj90aGlzLl9iaW5kT2NjdXJyZW5jZXMoYSxuLHIpOm8+MD90aGlzLl9zZXRBbmRCaW5kKGEsdCk6aS5wdXNoKGEpfWkuZm9yRWFjaCgoZT0+ZVtsc10oKVtKc10oZSkpKX19Y2xhc3MgRGF0YUhhbmRsZXJ7Y29uc3RydWN0b3IoZSx0KXt0aGlzLmRhdGE9dDt0aGlzLmRhdGFzZXQ9ZS5kYXRhc2V0c3x8bnVsbH1zZXJpYWxpemUoZSl7Y29uc3QgdD1bWy0xLHRoaXMuZGF0YVtvc10oKV1dO2Zvcig7dC5sZW5ndGg+MDspe2NvbnN0IGk9dC5hdCgtMSksW2Escl09aTtpZihhKzE9PT1yLmxlbmd0aCl7dC5wb3AoKTtjb250aW51ZX1jb25zdCBzPXJbKytpWzBdXSxuPWUuZ2V0KHNbenNdKTtpZihuKXNbT3NdKG4pO2Vsc2V7Y29uc3QgdD1zW0FzXSgpO2Zvcihjb25zdCBpIG9mIHQudmFsdWVzKCkpe2NvbnN0IHQ9ZS5nZXQoaVt6c10pO2lmKHQpe2lbT3NdKHQpO2JyZWFrfX19Y29uc3Qgbz1zW29zXSgpO28ubGVuZ3RoPjAmJnQucHVzaChbLTEsb10pfWNvbnN0IGk9Wyc8eGZhOmRhdGFzZXRzIHhtbG5zOnhmYT0iaHR0cDovL3d3dy54ZmEub3JnL3NjaGVtYS94ZmEtZGF0YS8xLjAvIj4nXTtpZih0aGlzLmRhdGFzZXQpZm9yKGNvbnN0IGUgb2YgdGhpcy5kYXRhc2V0W29zXSgpKSJkYXRhIiE9PWVbUnNdJiZlW1pzXShpKTt0aGlzLmRhdGFbWnNdKGkpO2kucHVzaCgiPC94ZmE6ZGF0YXNldHM+Iik7cmV0dXJuIGkuam9pbigiIil9fWNvbnN0IHZuPUFuLmNvbmZpZy5pZDtjbGFzcyBBY3JvYmF0IGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHZuLCJhY3JvYmF0IiwhMCk7dGhpcy5hY3JvYmF0Nz1udWxsO3RoaXMuYXV0b1NhdmU9bnVsbDt0aGlzLmNvbW1vbj1udWxsO3RoaXMudmFsaWRhdGU9bnVsbDt0aGlzLnZhbGlkYXRlQXBwcm92YWxTaWduYXR1cmVzPW51bGw7dGhpcy5zdWJtaXRVcmw9bmV3IFhGQU9iamVjdEFycmF5fX1jbGFzcyBBY3JvYmF0NyBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwiYWNyb2JhdDciLCEwKTt0aGlzLmR5bmFtaWNSZW5kZXI9bnVsbH19Y2xhc3MgQURCRV9KU0NvbnNvbGUgZXh0ZW5kcyBPcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sIkFEQkVfSlNDb25zb2xlIixbImRlbGVnYXRlIiwiRW5hYmxlIiwiRGlzYWJsZSJdKX19Y2xhc3MgQURCRV9KU0RlYnVnZ2VyIGV4dGVuZHMgT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHZuLCJBREJFX0pTRGVidWdnZXIiLFsiZGVsZWdhdGUiLCJFbmFibGUiLCJEaXNhYmxlIl0pfX1jbGFzcyBBZGRTaWxlbnRQcmludCBleHRlbmRzIE9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKHZuLCJhZGRTaWxlbnRQcmludCIpfX1jbGFzcyBBZGRWaWV3ZXJQcmVmZXJlbmNlcyBleHRlbmRzIE9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKHZuLCJhZGRWaWV3ZXJQcmVmZXJlbmNlcyIpfX1jbGFzcyBBZGp1c3REYXRhIGV4dGVuZHMgT3B0aW9uMTB7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sImFkanVzdERhdGEiKX19Y2xhc3MgQWRvYmVFeHRlbnNpb25MZXZlbCBleHRlbmRzIEludGVnZXJPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sImFkb2JlRXh0ZW5zaW9uTGV2ZWwiLDAsKGU9PmU+PTEmJmU8PTgpKX19Y2xhc3MgQWdlbnQgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sImFnZW50IiwhMCk7dGhpcy5uYW1lPWUubmFtZT9lLm5hbWUudHJpbSgpOiIiO3RoaXMuY29tbW9uPW5ldyBYRkFPYmplY3RBcnJheX19Y2xhc3MgQWx3YXlzRW1iZWQgZXh0ZW5kcyBDb250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHZuLCJhbHdheXNFbWJlZCIpfX1jbGFzcyBBbWQgZXh0ZW5kcyBTdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sImFtZCIpfX1jbGFzcyBjb25maWdfQXJlYSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwiYXJlYSIpO3RoaXMubGV2ZWw9Z2V0SW50ZWdlcih7ZGF0YTplLmxldmVsLGRlZmF1bHRWYWx1ZTowLHZhbGlkYXRlOmU9PmU+PTEmJmU8PTN9KTt0aGlzLm5hbWU9Z2V0U3RyaW5nT3B0aW9uKGUubmFtZSxbIiIsImJhcmNvZGUiLCJjb3JlaW5pdCIsImRldmljZURyaXZlciIsImZvbnQiLCJnZW5lcmFsIiwibGF5b3V0IiwibWVyZ2UiLCJzY3JpcHQiLCJzaWduYXR1cmUiLCJzb3VyY2VTZXQiLCJ0ZW1wbGF0ZUNhY2hlIl0pfX1jbGFzcyBBdHRyaWJ1dGVzIGV4dGVuZHMgT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHZuLCJhdHRyaWJ1dGVzIixbInByZXNlcnZlIiwiZGVsZWdhdGUiLCJpZ25vcmUiXSl9fWNsYXNzIEF1dG9TYXZlIGV4dGVuZHMgT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHZuLCJhdXRvU2F2ZSIsWyJkaXNhYmxlZCIsImVuYWJsZWQiXSl9fWNsYXNzIEJhc2UgZXh0ZW5kcyBTdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sImJhc2UiKX19Y2xhc3MgQmF0Y2hPdXRwdXQgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sImJhdGNoT3V0cHV0Iik7dGhpcy5mb3JtYXQ9Z2V0U3RyaW5nT3B0aW9uKGUuZm9ybWF0LFsibm9uZSIsImNvbmNhdCIsInppcCIsInppcENvbXByZXNzIl0pfX1jbGFzcyBCZWhhdmlvck92ZXJyaWRlIGV4dGVuZHMgQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwiYmVoYXZpb3JPdmVycmlkZSIpfVtfcl0oKXt0aGlzW2pyXT1uZXcgTWFwKHRoaXNbanJdLnRyaW0oKS5zcGxpdCgvXHMrLykuZmlsdGVyKChlPT5lLmluY2x1ZGVzKCI6IikpKS5tYXAoKGU9PmUuc3BsaXQoIjoiLDIpKSkpfX1jbGFzcyBDYWNoZSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwiY2FjaGUiLCEwKTt0aGlzLnRlbXBsYXRlQ2FjaGU9bnVsbH19Y2xhc3MgQ2hhbmdlIGV4dGVuZHMgT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sImNoYW5nZSIpfX1jbGFzcyBDb21tb24gZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sImNvbW1vbiIsITApO3RoaXMuZGF0YT1udWxsO3RoaXMubG9jYWxlPW51bGw7dGhpcy5sb2NhbGVTZXQ9bnVsbDt0aGlzLm1lc3NhZ2luZz1udWxsO3RoaXMuc3VwcHJlc3NCYW5uZXI9bnVsbDt0aGlzLnRlbXBsYXRlPW51bGw7dGhpcy52YWxpZGF0aW9uTWVzc2FnaW5nPW51bGw7dGhpcy52ZXJzaW9uQ29udHJvbD1udWxsO3RoaXMubG9nPW5ldyBYRkFPYmplY3RBcnJheX19Y2xhc3MgQ29tcHJlc3MgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sImNvbXByZXNzIik7dGhpcy5zY29wZT1nZXRTdHJpbmdPcHRpb24oZS5zY29wZSxbImltYWdlT25seSIsImRvY3VtZW50Il0pfX1jbGFzcyBDb21wcmVzc0xvZ2ljYWxTdHJ1Y3R1cmUgZXh0ZW5kcyBPcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwiY29tcHJlc3NMb2dpY2FsU3RydWN0dXJlIil9fWNsYXNzIENvbXByZXNzT2JqZWN0U3RyZWFtIGV4dGVuZHMgT3B0aW9uMTB7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sImNvbXByZXNzT2JqZWN0U3RyZWFtIil9fWNsYXNzIENvbXByZXNzaW9uIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHZuLCJjb21wcmVzc2lvbiIsITApO3RoaXMuY29tcHJlc3NMb2dpY2FsU3RydWN0dXJlPW51bGw7dGhpcy5jb21wcmVzc09iamVjdFN0cmVhbT1udWxsO3RoaXMubGV2ZWw9bnVsbDt0aGlzLnR5cGU9bnVsbH19Y2xhc3MgQ29uZmlnIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHZuLCJjb25maWciLCEwKTt0aGlzLmFjcm9iYXQ9bnVsbDt0aGlzLnByZXNlbnQ9bnVsbDt0aGlzLnRyYWNlPW51bGw7dGhpcy5hZ2VudD1uZXcgWEZBT2JqZWN0QXJyYXl9fWNsYXNzIENvbmZvcm1hbmNlIGV4dGVuZHMgT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHZuLCJjb25mb3JtYW5jZSIsWyJBIiwiQiJdKX19Y2xhc3MgQ29udGVudENvcHkgZXh0ZW5kcyBPcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwiY29udGVudENvcHkiKX19Y2xhc3MgQ29waWVzIGV4dGVuZHMgSW50ZWdlck9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwiY29waWVzIiwxLChlPT5lPj0xKSl9fWNsYXNzIENyZWF0b3IgZXh0ZW5kcyBTdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sImNyZWF0b3IiKX19Y2xhc3MgQ3VycmVudFBhZ2UgZXh0ZW5kcyBJbnRlZ2VyT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHZuLCJjdXJyZW50UGFnZSIsMCwoZT0+ZT49MCkpfX1jbGFzcyBEYXRhIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHZuLCJkYXRhIiwhMCk7dGhpcy5hZGp1c3REYXRhPW51bGw7dGhpcy5hdHRyaWJ1dGVzPW51bGw7dGhpcy5pbmNyZW1lbnRhbExvYWQ9bnVsbDt0aGlzLm91dHB1dFhTTD1udWxsO3RoaXMucmFuZ2U9bnVsbDt0aGlzLnJlY29yZD1udWxsO3RoaXMuc3RhcnROb2RlPW51bGw7dGhpcy51cmk9bnVsbDt0aGlzLndpbmRvdz1udWxsO3RoaXMueHNsPW51bGw7dGhpcy5leGNsdWRlTlM9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMudHJhbnNmb3JtPW5ldyBYRkFPYmplY3RBcnJheX19Y2xhc3MgRGVidWcgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sImRlYnVnIiwhMCk7dGhpcy51cmk9bnVsbH19Y2xhc3MgRGVmYXVsdFR5cGVmYWNlIGV4dGVuZHMgQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwiZGVmYXVsdFR5cGVmYWNlIik7dGhpcy53cml0aW5nU2NyaXB0PWdldFN0cmluZ09wdGlvbihlLndyaXRpbmdTY3JpcHQsWyIqIiwiQXJhYmljIiwiQ3lyaWxsaWMiLCJFYXN0RXVyb3BlYW5Sb21hbiIsIkdyZWVrIiwiSGVicmV3IiwiSmFwYW5lc2UiLCJLb3JlYW4iLCJSb21hbiIsIlNpbXBsaWZpZWRDaGluZXNlIiwiVGhhaSIsIlRyYWRpdGlvbmFsQ2hpbmVzZSIsIlZpZXRuYW1lc2UiXSl9fWNsYXNzIERlc3RpbmF0aW9uIGV4dGVuZHMgT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHZuLCJkZXN0aW5hdGlvbiIsWyJwZGYiLCJwY2wiLCJwcyIsIndlYkNsaWVudCIsInpwbCJdKX19Y2xhc3MgRG9jdW1lbnRBc3NlbWJseSBleHRlbmRzIE9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKHZuLCJkb2N1bWVudEFzc2VtYmx5Iil9fWNsYXNzIERyaXZlciBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwiZHJpdmVyIiwhMCk7dGhpcy5uYW1lPWUubmFtZT9lLm5hbWUudHJpbSgpOiIiO3RoaXMuZm9udEluZm89bnVsbDt0aGlzLnhkYz1udWxsfX1jbGFzcyBEdXBsZXhPcHRpb24gZXh0ZW5kcyBPcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sImR1cGxleE9wdGlvbiIsWyJzaW1wbGV4IiwiZHVwbGV4RmxpcExvbmdFZGdlIiwiZHVwbGV4RmxpcFNob3J0RWRnZSJdKX19Y2xhc3MgRHluYW1pY1JlbmRlciBleHRlbmRzIE9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwiZHluYW1pY1JlbmRlciIsWyJmb3JiaWRkZW4iLCJyZXF1aXJlZCJdKX19Y2xhc3MgRW1iZWQgZXh0ZW5kcyBPcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwiZW1iZWQiKX19Y2xhc3MgY29uZmlnX0VuY3J5cHQgZXh0ZW5kcyBPcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwiZW5jcnlwdCIpfX1jbGFzcyBjb25maWdfRW5jcnlwdGlvbiBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwiZW5jcnlwdGlvbiIsITApO3RoaXMuZW5jcnlwdD1udWxsO3RoaXMuZW5jcnlwdGlvbkxldmVsPW51bGw7dGhpcy5wZXJtaXNzaW9ucz1udWxsfX1jbGFzcyBFbmNyeXB0aW9uTGV2ZWwgZXh0ZW5kcyBPcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sImVuY3J5cHRpb25MZXZlbCIsWyI0MGJpdCIsIjEyOGJpdCJdKX19Y2xhc3MgRW5mb3JjZSBleHRlbmRzIFN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwiZW5mb3JjZSIpfX1jbGFzcyBFcXVhdGUgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sImVxdWF0ZSIpO3RoaXMuZm9yY2U9Z2V0SW50ZWdlcih7ZGF0YTplLmZvcmNlLGRlZmF1bHRWYWx1ZToxLHZhbGlkYXRlOmU9PjA9PT1lfSk7dGhpcy5mcm9tPWUuZnJvbXx8IiI7dGhpcy50bz1lLnRvfHwiIn19Y2xhc3MgRXF1YXRlUmFuZ2UgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sImVxdWF0ZVJhbmdlIik7dGhpcy5mcm9tPWUuZnJvbXx8IiI7dGhpcy50bz1lLnRvfHwiIjt0aGlzLl91bmljb2RlUmFuZ2U9ZS51bmljb2RlUmFuZ2V8fCIifWdldCB1bmljb2RlUmFuZ2UoKXtjb25zdCBlPVtdLHQ9L1VcKyhbMC05YS1mQS1GXSspLyxpPXRoaXMuX3VuaWNvZGVSYW5nZTtmb3IobGV0IGEgb2YgaS5zcGxpdCgiLCIpLm1hcCgoZT0+ZS50cmltKCkpKS5maWx0ZXIoKGU9PiEhZSkpKXthPWEuc3BsaXQoIi0iLDIpLm1hcCgoZT0+e2NvbnN0IGk9ZS5tYXRjaCh0KTtyZXR1cm4gaT9wYXJzZUludChpWzFdLDE2KTowfSkpOzE9PT1hLmxlbmd0aCYmYS5wdXNoKGFbMF0pO2UucHVzaChhKX1yZXR1cm4gc2hhZG93KHRoaXMsInVuaWNvZGVSYW5nZSIsZSl9fWNsYXNzIEV4Y2x1ZGUgZXh0ZW5kcyBDb250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHZuLCJleGNsdWRlIil9W19yXSgpe3RoaXNbanJdPXRoaXNbanJdLnRyaW0oKS5zcGxpdCgvXHMrLykuZmlsdGVyKChlPT5lJiZbImNhbGN1bGF0ZSIsImNsb3NlIiwiZW50ZXIiLCJleGl0IiwiaW5pdGlhbGl6ZSIsInJlYWR5IiwidmFsaWRhdGUiXS5pbmNsdWRlcyhlKSkpfX1jbGFzcyBFeGNsdWRlTlMgZXh0ZW5kcyBTdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sImV4Y2x1ZGVOUyIpfX1jbGFzcyBGbGlwTGFiZWwgZXh0ZW5kcyBPcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sImZsaXBMYWJlbCIsWyJ1c2VQcmludGVyU2V0dGluZyIsIm9uIiwib2ZmIl0pfX1jbGFzcyBjb25maWdfRm9udEluZm8gZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sImZvbnRJbmZvIiwhMCk7dGhpcy5lbWJlZD1udWxsO3RoaXMubWFwPW51bGw7dGhpcy5zdWJzZXRCZWxvdz1udWxsO3RoaXMuYWx3YXlzRW1iZWQ9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMuZGVmYXVsdFR5cGVmYWNlPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLm5ldmVyRW1iZWQ9bmV3IFhGQU9iamVjdEFycmF5fX1jbGFzcyBGb3JtRmllbGRGaWxsaW5nIGV4dGVuZHMgT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sImZvcm1GaWVsZEZpbGxpbmciKX19Y2xhc3MgR3JvdXBQYXJlbnQgZXh0ZW5kcyBTdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sImdyb3VwUGFyZW50Iil9fWNsYXNzIElmRW1wdHkgZXh0ZW5kcyBPcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sImlmRW1wdHkiLFsiZGF0YVZhbHVlIiwiZGF0YUdyb3VwIiwiaWdub3JlIiwicmVtb3ZlIl0pfX1jbGFzcyBJbmNsdWRlWERQQ29udGVudCBleHRlbmRzIFN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwiaW5jbHVkZVhEUENvbnRlbnQiKX19Y2xhc3MgSW5jcmVtZW50YWxMb2FkIGV4dGVuZHMgT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHZuLCJpbmNyZW1lbnRhbExvYWQiLFsibm9uZSIsImZvcndhcmRPbmx5Il0pfX1jbGFzcyBJbmNyZW1lbnRhbE1lcmdlIGV4dGVuZHMgT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sImluY3JlbWVudGFsTWVyZ2UiKX19Y2xhc3MgSW50ZXJhY3RpdmUgZXh0ZW5kcyBPcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwiaW50ZXJhY3RpdmUiKX19Y2xhc3MgSm9nIGV4dGVuZHMgT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHZuLCJqb2ciLFsidXNlUHJpbnRlclNldHRpbmciLCJub25lIiwicGFnZVNldCJdKX19Y2xhc3MgTGFiZWxQcmludGVyIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHZuLCJsYWJlbFByaW50ZXIiLCEwKTt0aGlzLm5hbWU9Z2V0U3RyaW5nT3B0aW9uKGUubmFtZSxbInpwbCIsImRwbCIsImlwbCIsInRjcGwiXSk7dGhpcy5iYXRjaE91dHB1dD1udWxsO3RoaXMuZmxpcExhYmVsPW51bGw7dGhpcy5mb250SW5mbz1udWxsO3RoaXMueGRjPW51bGx9fWNsYXNzIExheW91dCBleHRlbmRzIE9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwibGF5b3V0IixbInBhZ2luYXRlIiwicGFuZWwiXSl9fWNsYXNzIExldmVsIGV4dGVuZHMgSW50ZWdlck9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwibGV2ZWwiLDAsKGU9PmU+MCkpfX1jbGFzcyBMaW5lYXJpemVkIGV4dGVuZHMgT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sImxpbmVhcml6ZWQiKX19Y2xhc3MgTG9jYWxlIGV4dGVuZHMgU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHZuLCJsb2NhbGUiKX19Y2xhc3MgTG9jYWxlU2V0IGV4dGVuZHMgU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHZuLCJsb2NhbGVTZXQiKX19Y2xhc3MgTG9nIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHZuLCJsb2ciLCEwKTt0aGlzLm1vZGU9bnVsbDt0aGlzLnRocmVzaG9sZD1udWxsO3RoaXMudG89bnVsbDt0aGlzLnVyaT1udWxsfX1jbGFzcyBNYXBFbGVtZW50IGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHZuLCJtYXAiLCEwKTt0aGlzLmVxdWF0ZT1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5lcXVhdGVSYW5nZT1uZXcgWEZBT2JqZWN0QXJyYXl9fWNsYXNzIE1lZGl1bUluZm8gZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sIm1lZGl1bUluZm8iLCEwKTt0aGlzLm1hcD1udWxsfX1jbGFzcyBjb25maWdfTWVzc2FnZSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwibWVzc2FnZSIsITApO3RoaXMubXNnSWQ9bnVsbDt0aGlzLnNldmVyaXR5PW51bGx9fWNsYXNzIE1lc3NhZ2luZyBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwibWVzc2FnaW5nIiwhMCk7dGhpcy5tZXNzYWdlPW5ldyBYRkFPYmplY3RBcnJheX19Y2xhc3MgTW9kZSBleHRlbmRzIE9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwibW9kZSIsWyJhcHBlbmQiLCJvdmVyd3JpdGUiXSl9fWNsYXNzIE1vZGlmeUFubm90cyBleHRlbmRzIE9wdGlvbjAxe2NvbnN0cnVjdG9yKGUpe3N1cGVyKHZuLCJtb2RpZnlBbm5vdHMiKX19Y2xhc3MgTXNnSWQgZXh0ZW5kcyBJbnRlZ2VyT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHZuLCJtc2dJZCIsMSwoZT0+ZT49MSkpfX1jbGFzcyBOYW1lQXR0ciBleHRlbmRzIFN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwibmFtZUF0dHIiKX19Y2xhc3MgTmV2ZXJFbWJlZCBleHRlbmRzIENvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sIm5ldmVyRW1iZWQiKX19Y2xhc3MgTnVtYmVyT2ZDb3BpZXMgZXh0ZW5kcyBJbnRlZ2VyT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHZuLCJudW1iZXJPZkNvcGllcyIsbnVsbCwoZT0+ZT49MiYmZTw9NSkpfX1jbGFzcyBPcGVuQWN0aW9uIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHZuLCJvcGVuQWN0aW9uIiwhMCk7dGhpcy5kZXN0aW5hdGlvbj1udWxsfX1jbGFzcyBPdXRwdXQgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sIm91dHB1dCIsITApO3RoaXMudG89bnVsbDt0aGlzLnR5cGU9bnVsbDt0aGlzLnVyaT1udWxsfX1jbGFzcyBPdXRwdXRCaW4gZXh0ZW5kcyBTdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sIm91dHB1dEJpbiIpfX1jbGFzcyBPdXRwdXRYU0wgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sIm91dHB1dFhTTCIsITApO3RoaXMudXJpPW51bGx9fWNsYXNzIE92ZXJwcmludCBleHRlbmRzIE9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwib3ZlcnByaW50IixbIm5vbmUiLCJib3RoIiwiZHJhdyIsImZpZWxkIl0pfX1jbGFzcyBQYWNrZXRzIGV4dGVuZHMgU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHZuLCJwYWNrZXRzIil9W19yXSgpeyIqIiE9PXRoaXNbanJdJiYodGhpc1tqcl09dGhpc1tqcl0udHJpbSgpLnNwbGl0KC9ccysvKS5maWx0ZXIoKGU9PlsiY29uZmlnIiwiZGF0YXNldHMiLCJ0ZW1wbGF0ZSIsInhmZGYiLCJ4c2x0Il0uaW5jbHVkZXMoZSkpKSl9fWNsYXNzIFBhZ2VPZmZzZXQgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sInBhZ2VPZmZzZXQiKTt0aGlzLng9Z2V0SW50ZWdlcih7ZGF0YTplLngsZGVmYXVsdFZhbHVlOiJ1c2VYRENTZXR0aW5nIix2YWxpZGF0ZTplPT4hMH0pO3RoaXMueT1nZXRJbnRlZ2VyKHtkYXRhOmUueSxkZWZhdWx0VmFsdWU6InVzZVhEQ1NldHRpbmciLHZhbGlkYXRlOmU9PiEwfSl9fWNsYXNzIFBhZ2VSYW5nZSBleHRlbmRzIFN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwicGFnZVJhbmdlIil9W19yXSgpe2NvbnN0IGU9dGhpc1tqcl0udHJpbSgpLnNwbGl0KC9ccysvKS5tYXAoKGU9PnBhcnNlSW50KGUsMTApKSksdD1bXTtmb3IobGV0IGk9MCxhPWUubGVuZ3RoO2k8YTtpKz0yKXQucHVzaChlLnNsaWNlKGksaSsyKSk7dGhpc1tqcl09dH19Y2xhc3MgUGFnaW5hdGlvbiBleHRlbmRzIE9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwicGFnaW5hdGlvbiIsWyJzaW1wbGV4IiwiZHVwbGV4U2hvcnRFZGdlIiwiZHVwbGV4TG9uZ0VkZ2UiXSl9fWNsYXNzIFBhZ2luYXRpb25PdmVycmlkZSBleHRlbmRzIE9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwicGFnaW5hdGlvbk92ZXJyaWRlIixbIm5vbmUiLCJmb3JjZUR1cGxleCIsImZvcmNlRHVwbGV4TG9uZ0VkZ2UiLCJmb3JjZUR1cGxleFNob3J0RWRnZSIsImZvcmNlU2ltcGxleCJdKX19Y2xhc3MgUGFydCBleHRlbmRzIEludGVnZXJPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sInBhcnQiLDEsKGU9PiExKSl9fWNsYXNzIFBjbCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwicGNsIiwhMCk7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy5iYXRjaE91dHB1dD1udWxsO3RoaXMuZm9udEluZm89bnVsbDt0aGlzLmpvZz1udWxsO3RoaXMubWVkaXVtSW5mbz1udWxsO3RoaXMub3V0cHV0QmluPW51bGw7dGhpcy5wYWdlT2Zmc2V0PW51bGw7dGhpcy5zdGFwbGU9bnVsbDt0aGlzLnhkYz1udWxsfX1jbGFzcyBQZGYgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sInBkZiIsITApO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMuYWRvYmVFeHRlbnNpb25MZXZlbD1udWxsO3RoaXMuYmF0Y2hPdXRwdXQ9bnVsbDt0aGlzLmNvbXByZXNzaW9uPW51bGw7dGhpcy5jcmVhdG9yPW51bGw7dGhpcy5lbmNyeXB0aW9uPW51bGw7dGhpcy5mb250SW5mbz1udWxsO3RoaXMuaW50ZXJhY3RpdmU9bnVsbDt0aGlzLmxpbmVhcml6ZWQ9bnVsbDt0aGlzLm9wZW5BY3Rpb249bnVsbDt0aGlzLnBkZmE9bnVsbDt0aGlzLnByb2R1Y2VyPW51bGw7dGhpcy5yZW5kZXJQb2xpY3k9bnVsbDt0aGlzLnNjcmlwdE1vZGVsPW51bGw7dGhpcy5zaWxlbnRQcmludD1udWxsO3RoaXMuc3VibWl0Rm9ybWF0PW51bGw7dGhpcy50YWdnZWQ9bnVsbDt0aGlzLnZlcnNpb249bnVsbDt0aGlzLnZpZXdlclByZWZlcmVuY2VzPW51bGw7dGhpcy54ZGM9bnVsbH19Y2xhc3MgUGRmYSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwicGRmYSIsITApO3RoaXMuYW1kPW51bGw7dGhpcy5jb25mb3JtYW5jZT1udWxsO3RoaXMuaW5jbHVkZVhEUENvbnRlbnQ9bnVsbDt0aGlzLnBhcnQ9bnVsbH19Y2xhc3MgUGVybWlzc2lvbnMgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sInBlcm1pc3Npb25zIiwhMCk7dGhpcy5hY2Nlc3NpYmxlQ29udGVudD1udWxsO3RoaXMuY2hhbmdlPW51bGw7dGhpcy5jb250ZW50Q29weT1udWxsO3RoaXMuZG9jdW1lbnRBc3NlbWJseT1udWxsO3RoaXMuZm9ybUZpZWxkRmlsbGluZz1udWxsO3RoaXMubW9kaWZ5QW5ub3RzPW51bGw7dGhpcy5wbGFpbnRleHRNZXRhZGF0YT1udWxsO3RoaXMucHJpbnQ9bnVsbDt0aGlzLnByaW50SGlnaFF1YWxpdHk9bnVsbH19Y2xhc3MgUGlja1RyYXlCeVBERlNpemUgZXh0ZW5kcyBPcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwicGlja1RyYXlCeVBERlNpemUiKX19Y2xhc3MgY29uZmlnX1BpY3R1cmUgZXh0ZW5kcyBTdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sInBpY3R1cmUiKX19Y2xhc3MgUGxhaW50ZXh0TWV0YWRhdGEgZXh0ZW5kcyBPcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwicGxhaW50ZXh0TWV0YWRhdGEiKX19Y2xhc3MgUHJlc2VuY2UgZXh0ZW5kcyBPcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sInByZXNlbmNlIixbInByZXNlcnZlIiwiZGlzc29sdmUiLCJkaXNzb2x2ZVN0cnVjdHVyZSIsImlnbm9yZSIsInJlbW92ZSJdKX19Y2xhc3MgUHJlc2VudCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwicHJlc2VudCIsITApO3RoaXMuYmVoYXZpb3JPdmVycmlkZT1udWxsO3RoaXMuY2FjaGU9bnVsbDt0aGlzLmNvbW1vbj1udWxsO3RoaXMuY29waWVzPW51bGw7dGhpcy5kZXN0aW5hdGlvbj1udWxsO3RoaXMuaW5jcmVtZW50YWxNZXJnZT1udWxsO3RoaXMubGF5b3V0PW51bGw7dGhpcy5vdXRwdXQ9bnVsbDt0aGlzLm92ZXJwcmludD1udWxsO3RoaXMucGFnaW5hdGlvbj1udWxsO3RoaXMucGFnaW5hdGlvbk92ZXJyaWRlPW51bGw7dGhpcy5zY3JpcHQ9bnVsbDt0aGlzLnZhbGlkYXRlPW51bGw7dGhpcy54ZHA9bnVsbDt0aGlzLmRyaXZlcj1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5sYWJlbFByaW50ZXI9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMucGNsPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnBkZj1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5wcz1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy5zdWJtaXRVcmw9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMud2ViQ2xpZW50PW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnpwbD1uZXcgWEZBT2JqZWN0QXJyYXl9fWNsYXNzIFByaW50IGV4dGVuZHMgT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sInByaW50Iil9fWNsYXNzIFByaW50SGlnaFF1YWxpdHkgZXh0ZW5kcyBPcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwicHJpbnRIaWdoUXVhbGl0eSIpfX1jbGFzcyBQcmludFNjYWxpbmcgZXh0ZW5kcyBPcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sInByaW50U2NhbGluZyIsWyJhcHBkZWZhdWx0Iiwibm9TY2FsaW5nIl0pfX1jbGFzcyBQcmludGVyTmFtZSBleHRlbmRzIFN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwicHJpbnRlck5hbWUiKX19Y2xhc3MgUHJvZHVjZXIgZXh0ZW5kcyBTdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sInByb2R1Y2VyIil9fWNsYXNzIFBzIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHZuLCJwcyIsITApO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMuYmF0Y2hPdXRwdXQ9bnVsbDt0aGlzLmZvbnRJbmZvPW51bGw7dGhpcy5qb2c9bnVsbDt0aGlzLm1lZGl1bUluZm89bnVsbDt0aGlzLm91dHB1dEJpbj1udWxsO3RoaXMuc3RhcGxlPW51bGw7dGhpcy54ZGM9bnVsbH19Y2xhc3MgUmFuZ2UgZXh0ZW5kcyBDb250ZW50T2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHZuLCJyYW5nZSIpfVtfcl0oKXt0aGlzW2pyXT10aGlzW2pyXS50cmltKCkuc3BsaXQoL1xzKixccyovLDIpLm1hcCgoZT0+ZS5zcGxpdCgiLSIpLm1hcCgoZT0+cGFyc2VJbnQoZS50cmltKCksMTApKSkpKS5maWx0ZXIoKGU9PmUuZXZlcnkoKGU9PiFpc05hTihlKSkpKSkubWFwKChlPT57MT09PWUubGVuZ3RoJiZlLnB1c2goZVswXSk7cmV0dXJuIGV9KSl9fWNsYXNzIFJlY29yZCBleHRlbmRzIENvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sInJlY29yZCIpfVtfcl0oKXt0aGlzW2pyXT10aGlzW2pyXS50cmltKCk7Y29uc3QgZT1wYXJzZUludCh0aGlzW2pyXSwxMCk7IWlzTmFOKGUpJiZlPj0wJiYodGhpc1tqcl09ZSl9fWNsYXNzIFJlbGV2YW50IGV4dGVuZHMgQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwicmVsZXZhbnQiKX1bX3JdKCl7dGhpc1tqcl09dGhpc1tqcl0udHJpbSgpLnNwbGl0KC9ccysvKX19Y2xhc3MgUmVuYW1lIGV4dGVuZHMgQ29udGVudE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwicmVuYW1lIil9W19yXSgpe3RoaXNbanJdPXRoaXNbanJdLnRyaW0oKTsodGhpc1tqcl0udG9Mb3dlckNhc2UoKS5zdGFydHNXaXRoKCJ4bWwiKXx8bmV3IFJlZ0V4cCgiW1xccHtMfV9dW1xccHtMfVxcZC5fXFxwe019LV0qIiwidSIpLnRlc3QodGhpc1tqcl0pKSYmd2FybigiWEZBIC0gUmVuYW1lOiBpbnZhbGlkIFhGQSBuYW1lIil9fWNsYXNzIFJlbmRlclBvbGljeSBleHRlbmRzIE9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwicmVuZGVyUG9saWN5IixbInNlcnZlciIsImNsaWVudCJdKX19Y2xhc3MgUnVuU2NyaXB0cyBleHRlbmRzIE9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwicnVuU2NyaXB0cyIsWyJib3RoIiwiY2xpZW50Iiwibm9uZSIsInNlcnZlciJdKX19Y2xhc3MgY29uZmlnX1NjcmlwdCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwic2NyaXB0IiwhMCk7dGhpcy5jdXJyZW50UGFnZT1udWxsO3RoaXMuZXhjbHVkZT1udWxsO3RoaXMucnVuU2NyaXB0cz1udWxsfX1jbGFzcyBTY3JpcHRNb2RlbCBleHRlbmRzIE9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwic2NyaXB0TW9kZWwiLFsiWEZBIiwibm9uZSJdKX19Y2xhc3MgU2V2ZXJpdHkgZXh0ZW5kcyBPcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sInNldmVyaXR5IixbImlnbm9yZSIsImVycm9yIiwiaW5mb3JtYXRpb24iLCJ0cmFjZSIsIndhcm5pbmciXSl9fWNsYXNzIFNpbGVudFByaW50IGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHZuLCJzaWxlbnRQcmludCIsITApO3RoaXMuYWRkU2lsZW50UHJpbnQ9bnVsbDt0aGlzLnByaW50ZXJOYW1lPW51bGx9fWNsYXNzIFN0YXBsZSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwic3RhcGxlIik7dGhpcy5tb2RlPWdldFN0cmluZ09wdGlvbihlLm1vZGUsWyJ1c2VQcmludGVyU2V0dGluZyIsIm9uIiwib2ZmIl0pfX1jbGFzcyBTdGFydE5vZGUgZXh0ZW5kcyBTdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sInN0YXJ0Tm9kZSIpfX1jbGFzcyBTdGFydFBhZ2UgZXh0ZW5kcyBJbnRlZ2VyT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHZuLCJzdGFydFBhZ2UiLDAsKGU9PiEwKSl9fWNsYXNzIFN1Ym1pdEZvcm1hdCBleHRlbmRzIE9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwic3VibWl0Rm9ybWF0IixbImh0bWwiLCJkZWxlZ2F0ZSIsImZkZiIsInhtbCIsInBkZiJdKX19Y2xhc3MgU3VibWl0VXJsIGV4dGVuZHMgU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHZuLCJzdWJtaXRVcmwiKX19Y2xhc3MgU3Vic2V0QmVsb3cgZXh0ZW5kcyBJbnRlZ2VyT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHZuLCJzdWJzZXRCZWxvdyIsMTAwLChlPT5lPj0wJiZlPD0xMDApKX19Y2xhc3MgU3VwcHJlc3NCYW5uZXIgZXh0ZW5kcyBPcHRpb24wMXtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwic3VwcHJlc3NCYW5uZXIiKX19Y2xhc3MgVGFnZ2VkIGV4dGVuZHMgT3B0aW9uMDF7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sInRhZ2dlZCIpfX1jbGFzcyBjb25maWdfVGVtcGxhdGUgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sInRlbXBsYXRlIiwhMCk7dGhpcy5iYXNlPW51bGw7dGhpcy5yZWxldmFudD1udWxsO3RoaXMuc3RhcnRQYWdlPW51bGw7dGhpcy51cmk9bnVsbDt0aGlzLnhzbD1udWxsfX1jbGFzcyBUaHJlc2hvbGQgZXh0ZW5kcyBPcHRpb25PYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sInRocmVzaG9sZCIsWyJ0cmFjZSIsImVycm9yIiwiaW5mb3JtYXRpb24iLCJ3YXJuaW5nIl0pfX1jbGFzcyBUbyBleHRlbmRzIE9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwidG8iLFsibnVsbCIsIm1lbW9yeSIsInN0ZGVyciIsInN0ZG91dCIsInN5c3RlbSIsInVyaSJdKX19Y2xhc3MgVGVtcGxhdGVDYWNoZSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwidGVtcGxhdGVDYWNoZSIpO3RoaXMubWF4RW50cmllcz1nZXRJbnRlZ2VyKHtkYXRhOmUubWF4RW50cmllcyxkZWZhdWx0VmFsdWU6NSx2YWxpZGF0ZTplPT5lPj0wfSl9fWNsYXNzIFRyYWNlIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHZuLCJ0cmFjZSIsITApO3RoaXMuYXJlYT1uZXcgWEZBT2JqZWN0QXJyYXl9fWNsYXNzIFRyYW5zZm9ybSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwidHJhbnNmb3JtIiwhMCk7dGhpcy5ncm91cFBhcmVudD1udWxsO3RoaXMuaWZFbXB0eT1udWxsO3RoaXMubmFtZUF0dHI9bnVsbDt0aGlzLnBpY3R1cmU9bnVsbDt0aGlzLnByZXNlbmNlPW51bGw7dGhpcy5yZW5hbWU9bnVsbDt0aGlzLndoaXRlc3BhY2U9bnVsbH19Y2xhc3MgVHlwZSBleHRlbmRzIE9wdGlvbk9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwidHlwZSIsWyJub25lIiwiYXNjaWk4NSIsImFzY2lpSGV4IiwiY2NpdHRmYXgiLCJmbGF0ZSIsImx6dyIsInJ1bkxlbmd0aCIsIm5hdGl2ZSIsInhkcCIsIm1lcmdlZFhEUCJdKX19Y2xhc3MgVXJpIGV4dGVuZHMgU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHZuLCJ1cmkiKX19Y2xhc3MgY29uZmlnX1ZhbGlkYXRlIGV4dGVuZHMgT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHZuLCJ2YWxpZGF0ZSIsWyJwcmVTdWJtaXQiLCJwcmVQcmludCIsInByZUV4ZWN1dGUiLCJwcmVTYXZlIl0pfX1jbGFzcyBWYWxpZGF0ZUFwcHJvdmFsU2lnbmF0dXJlcyBleHRlbmRzIENvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sInZhbGlkYXRlQXBwcm92YWxTaWduYXR1cmVzIil9W19yXSgpe3RoaXNbanJdPXRoaXNbanJdLnRyaW0oKS5zcGxpdCgvXHMrLykuZmlsdGVyKChlPT5bImRvY1JlYWR5IiwicG9zdFNpZ24iXS5pbmNsdWRlcyhlKSkpfX1jbGFzcyBWYWxpZGF0aW9uTWVzc2FnaW5nIGV4dGVuZHMgT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHZuLCJ2YWxpZGF0aW9uTWVzc2FnaW5nIixbImFsbE1lc3NhZ2VzSW5kaXZpZHVhbGx5IiwiYWxsTWVzc2FnZXNUb2dldGhlciIsImZpcnN0TWVzc2FnZU9ubHkiLCJub01lc3NhZ2VzIl0pfX1jbGFzcyBWZXJzaW9uIGV4dGVuZHMgT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHZuLCJ2ZXJzaW9uIixbIjEuNyIsIjEuNiIsIjEuNSIsIjEuNCIsIjEuMyIsIjEuMiJdKX19Y2xhc3MgVmVyc2lvbkNvbnRyb2wgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sIlZlcnNpb25Db250cm9sIik7dGhpcy5vdXRwdXRCZWxvdz1nZXRTdHJpbmdPcHRpb24oZS5vdXRwdXRCZWxvdyxbIndhcm4iLCJlcnJvciIsInVwZGF0ZSJdKTt0aGlzLnNvdXJjZUFib3ZlPWdldFN0cmluZ09wdGlvbihlLnNvdXJjZUFib3ZlLFsid2FybiIsImVycm9yIl0pO3RoaXMuc291cmNlQmVsb3c9Z2V0U3RyaW5nT3B0aW9uKGUuc291cmNlQmVsb3csWyJ1cGRhdGUiLCJtYWludGFpbiJdKX19Y2xhc3MgVmlld2VyUHJlZmVyZW5jZXMgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sInZpZXdlclByZWZlcmVuY2VzIiwhMCk7dGhpcy5BREJFX0pTQ29uc29sZT1udWxsO3RoaXMuQURCRV9KU0RlYnVnZ2VyPW51bGw7dGhpcy5hZGRWaWV3ZXJQcmVmZXJlbmNlcz1udWxsO3RoaXMuZHVwbGV4T3B0aW9uPW51bGw7dGhpcy5lbmZvcmNlPW51bGw7dGhpcy5udW1iZXJPZkNvcGllcz1udWxsO3RoaXMucGFnZVJhbmdlPW51bGw7dGhpcy5waWNrVHJheUJ5UERGU2l6ZT1udWxsO3RoaXMucHJpbnRTY2FsaW5nPW51bGx9fWNsYXNzIFdlYkNsaWVudCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwid2ViQ2xpZW50IiwhMCk7dGhpcy5uYW1lPWUubmFtZT9lLm5hbWUudHJpbSgpOiIiO3RoaXMuZm9udEluZm89bnVsbDt0aGlzLnhkYz1udWxsfX1jbGFzcyBXaGl0ZXNwYWNlIGV4dGVuZHMgT3B0aW9uT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKHZuLCJ3aGl0ZXNwYWNlIixbInByZXNlcnZlIiwibHRyaW0iLCJub3JtYWxpemUiLCJydHJpbSIsInRyaW0iXSl9fWNsYXNzIFdpbmRvdyBleHRlbmRzIENvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sIndpbmRvdyIpfVtfcl0oKXtjb25zdCBlPXRoaXNbanJdLnRyaW0oKS5zcGxpdCgvXHMqLFxzKi8sMikubWFwKChlPT5wYXJzZUludChlLDEwKSkpO2lmKGUuc29tZSgoZT0+aXNOYU4oZSkpKSl0aGlzW2pyXT1bMCwwXTtlbHNlezE9PT1lLmxlbmd0aCYmZS5wdXNoKGVbMF0pO3RoaXNbanJdPWV9fX1jbGFzcyBYZGMgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIodm4sInhkYyIsITApO3RoaXMudXJpPW5ldyBYRkFPYmplY3RBcnJheTt0aGlzLnhzbD1uZXcgWEZBT2JqZWN0QXJyYXl9fWNsYXNzIFhkcCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwieGRwIiwhMCk7dGhpcy5wYWNrZXRzPW51bGx9fWNsYXNzIFhzbCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwieHNsIiwhMCk7dGhpcy5kZWJ1Zz1udWxsO3RoaXMudXJpPW51bGx9fWNsYXNzIFpwbCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcih2biwienBsIiwhMCk7dGhpcy5uYW1lPWUubmFtZT9lLm5hbWUudHJpbSgpOiIiO3RoaXMuYmF0Y2hPdXRwdXQ9bnVsbDt0aGlzLmZsaXBMYWJlbD1udWxsO3RoaXMuZm9udEluZm89bnVsbDt0aGlzLnhkYz1udWxsfX1jbGFzcyBDb25maWdOYW1lc3BhY2V7c3RhdGljWyRzXShlLHQpe2lmKENvbmZpZ05hbWVzcGFjZS5oYXNPd25Qcm9wZXJ0eShlKSlyZXR1cm4gQ29uZmlnTmFtZXNwYWNlW2VdKHQpfXN0YXRpYyBhY3JvYmF0KGUpe3JldHVybiBuZXcgQWNyb2JhdChlKX1zdGF0aWMgYWNyb2JhdDcoZSl7cmV0dXJuIG5ldyBBY3JvYmF0NyhlKX1zdGF0aWMgQURCRV9KU0NvbnNvbGUoZSl7cmV0dXJuIG5ldyBBREJFX0pTQ29uc29sZShlKX1zdGF0aWMgQURCRV9KU0RlYnVnZ2VyKGUpe3JldHVybiBuZXcgQURCRV9KU0RlYnVnZ2VyKGUpfXN0YXRpYyBhZGRTaWxlbnRQcmludChlKXtyZXR1cm4gbmV3IEFkZFNpbGVudFByaW50KGUpfXN0YXRpYyBhZGRWaWV3ZXJQcmVmZXJlbmNlcyhlKXtyZXR1cm4gbmV3IEFkZFZpZXdlclByZWZlcmVuY2VzKGUpfXN0YXRpYyBhZGp1c3REYXRhKGUpe3JldHVybiBuZXcgQWRqdXN0RGF0YShlKX1zdGF0aWMgYWRvYmVFeHRlbnNpb25MZXZlbChlKXtyZXR1cm4gbmV3IEFkb2JlRXh0ZW5zaW9uTGV2ZWwoZSl9c3RhdGljIGFnZW50KGUpe3JldHVybiBuZXcgQWdlbnQoZSl9c3RhdGljIGFsd2F5c0VtYmVkKGUpe3JldHVybiBuZXcgQWx3YXlzRW1iZWQoZSl9c3RhdGljIGFtZChlKXtyZXR1cm4gbmV3IEFtZChlKX1zdGF0aWMgYXJlYShlKXtyZXR1cm4gbmV3IGNvbmZpZ19BcmVhKGUpfXN0YXRpYyBhdHRyaWJ1dGVzKGUpe3JldHVybiBuZXcgQXR0cmlidXRlcyhlKX1zdGF0aWMgYXV0b1NhdmUoZSl7cmV0dXJuIG5ldyBBdXRvU2F2ZShlKX1zdGF0aWMgYmFzZShlKXtyZXR1cm4gbmV3IEJhc2UoZSl9c3RhdGljIGJhdGNoT3V0cHV0KGUpe3JldHVybiBuZXcgQmF0Y2hPdXRwdXQoZSl9c3RhdGljIGJlaGF2aW9yT3ZlcnJpZGUoZSl7cmV0dXJuIG5ldyBCZWhhdmlvck92ZXJyaWRlKGUpfXN0YXRpYyBjYWNoZShlKXtyZXR1cm4gbmV3IENhY2hlKGUpfXN0YXRpYyBjaGFuZ2UoZSl7cmV0dXJuIG5ldyBDaGFuZ2UoZSl9c3RhdGljIGNvbW1vbihlKXtyZXR1cm4gbmV3IENvbW1vbihlKX1zdGF0aWMgY29tcHJlc3MoZSl7cmV0dXJuIG5ldyBDb21wcmVzcyhlKX1zdGF0aWMgY29tcHJlc3NMb2dpY2FsU3RydWN0dXJlKGUpe3JldHVybiBuZXcgQ29tcHJlc3NMb2dpY2FsU3RydWN0dXJlKGUpfXN0YXRpYyBjb21wcmVzc09iamVjdFN0cmVhbShlKXtyZXR1cm4gbmV3IENvbXByZXNzT2JqZWN0U3RyZWFtKGUpfXN0YXRpYyBjb21wcmVzc2lvbihlKXtyZXR1cm4gbmV3IENvbXByZXNzaW9uKGUpfXN0YXRpYyBjb25maWcoZSl7cmV0dXJuIG5ldyBDb25maWcoZSl9c3RhdGljIGNvbmZvcm1hbmNlKGUpe3JldHVybiBuZXcgQ29uZm9ybWFuY2UoZSl9c3RhdGljIGNvbnRlbnRDb3B5KGUpe3JldHVybiBuZXcgQ29udGVudENvcHkoZSl9c3RhdGljIGNvcGllcyhlKXtyZXR1cm4gbmV3IENvcGllcyhlKX1zdGF0aWMgY3JlYXRvcihlKXtyZXR1cm4gbmV3IENyZWF0b3IoZSl9c3RhdGljIGN1cnJlbnRQYWdlKGUpe3JldHVybiBuZXcgQ3VycmVudFBhZ2UoZSl9c3RhdGljIGRhdGEoZSl7cmV0dXJuIG5ldyBEYXRhKGUpfXN0YXRpYyBkZWJ1ZyhlKXtyZXR1cm4gbmV3IERlYnVnKGUpfXN0YXRpYyBkZWZhdWx0VHlwZWZhY2UoZSl7cmV0dXJuIG5ldyBEZWZhdWx0VHlwZWZhY2UoZSl9c3RhdGljIGRlc3RpbmF0aW9uKGUpe3JldHVybiBuZXcgRGVzdGluYXRpb24oZSl9c3RhdGljIGRvY3VtZW50QXNzZW1ibHkoZSl7cmV0dXJuIG5ldyBEb2N1bWVudEFzc2VtYmx5KGUpfXN0YXRpYyBkcml2ZXIoZSl7cmV0dXJuIG5ldyBEcml2ZXIoZSl9c3RhdGljIGR1cGxleE9wdGlvbihlKXtyZXR1cm4gbmV3IER1cGxleE9wdGlvbihlKX1zdGF0aWMgZHluYW1pY1JlbmRlcihlKXtyZXR1cm4gbmV3IER5bmFtaWNSZW5kZXIoZSl9c3RhdGljIGVtYmVkKGUpe3JldHVybiBuZXcgRW1iZWQoZSl9c3RhdGljIGVuY3J5cHQoZSl7cmV0dXJuIG5ldyBjb25maWdfRW5jcnlwdChlKX1zdGF0aWMgZW5jcnlwdGlvbihlKXtyZXR1cm4gbmV3IGNvbmZpZ19FbmNyeXB0aW9uKGUpfXN0YXRpYyBlbmNyeXB0aW9uTGV2ZWwoZSl7cmV0dXJuIG5ldyBFbmNyeXB0aW9uTGV2ZWwoZSl9c3RhdGljIGVuZm9yY2UoZSl7cmV0dXJuIG5ldyBFbmZvcmNlKGUpfXN0YXRpYyBlcXVhdGUoZSl7cmV0dXJuIG5ldyBFcXVhdGUoZSl9c3RhdGljIGVxdWF0ZVJhbmdlKGUpe3JldHVybiBuZXcgRXF1YXRlUmFuZ2UoZSl9c3RhdGljIGV4Y2x1ZGUoZSl7cmV0dXJuIG5ldyBFeGNsdWRlKGUpfXN0YXRpYyBleGNsdWRlTlMoZSl7cmV0dXJuIG5ldyBFeGNsdWRlTlMoZSl9c3RhdGljIGZsaXBMYWJlbChlKXtyZXR1cm4gbmV3IEZsaXBMYWJlbChlKX1zdGF0aWMgZm9udEluZm8oZSl7cmV0dXJuIG5ldyBjb25maWdfRm9udEluZm8oZSl9c3RhdGljIGZvcm1GaWVsZEZpbGxpbmcoZSl7cmV0dXJuIG5ldyBGb3JtRmllbGRGaWxsaW5nKGUpfXN0YXRpYyBncm91cFBhcmVudChlKXtyZXR1cm4gbmV3IEdyb3VwUGFyZW50KGUpfXN0YXRpYyBpZkVtcHR5KGUpe3JldHVybiBuZXcgSWZFbXB0eShlKX1zdGF0aWMgaW5jbHVkZVhEUENvbnRlbnQoZSl7cmV0dXJuIG5ldyBJbmNsdWRlWERQQ29udGVudChlKX1zdGF0aWMgaW5jcmVtZW50YWxMb2FkKGUpe3JldHVybiBuZXcgSW5jcmVtZW50YWxMb2FkKGUpfXN0YXRpYyBpbmNyZW1lbnRhbE1lcmdlKGUpe3JldHVybiBuZXcgSW5jcmVtZW50YWxNZXJnZShlKX1zdGF0aWMgaW50ZXJhY3RpdmUoZSl7cmV0dXJuIG5ldyBJbnRlcmFjdGl2ZShlKX1zdGF0aWMgam9nKGUpe3JldHVybiBuZXcgSm9nKGUpfXN0YXRpYyBsYWJlbFByaW50ZXIoZSl7cmV0dXJuIG5ldyBMYWJlbFByaW50ZXIoZSl9c3RhdGljIGxheW91dChlKXtyZXR1cm4gbmV3IExheW91dChlKX1zdGF0aWMgbGV2ZWwoZSl7cmV0dXJuIG5ldyBMZXZlbChlKX1zdGF0aWMgbGluZWFyaXplZChlKXtyZXR1cm4gbmV3IExpbmVhcml6ZWQoZSl9c3RhdGljIGxvY2FsZShlKXtyZXR1cm4gbmV3IExvY2FsZShlKX1zdGF0aWMgbG9jYWxlU2V0KGUpe3JldHVybiBuZXcgTG9jYWxlU2V0KGUpfXN0YXRpYyBsb2coZSl7cmV0dXJuIG5ldyBMb2coZSl9c3RhdGljIG1hcChlKXtyZXR1cm4gbmV3IE1hcEVsZW1lbnQoZSl9c3RhdGljIG1lZGl1bUluZm8oZSl7cmV0dXJuIG5ldyBNZWRpdW1JbmZvKGUpfXN0YXRpYyBtZXNzYWdlKGUpe3JldHVybiBuZXcgY29uZmlnX01lc3NhZ2UoZSl9c3RhdGljIG1lc3NhZ2luZyhlKXtyZXR1cm4gbmV3IE1lc3NhZ2luZyhlKX1zdGF0aWMgbW9kZShlKXtyZXR1cm4gbmV3IE1vZGUoZSl9c3RhdGljIG1vZGlmeUFubm90cyhlKXtyZXR1cm4gbmV3IE1vZGlmeUFubm90cyhlKX1zdGF0aWMgbXNnSWQoZSl7cmV0dXJuIG5ldyBNc2dJZChlKX1zdGF0aWMgbmFtZUF0dHIoZSl7cmV0dXJuIG5ldyBOYW1lQXR0cihlKX1zdGF0aWMgbmV2ZXJFbWJlZChlKXtyZXR1cm4gbmV3IE5ldmVyRW1iZWQoZSl9c3RhdGljIG51bWJlck9mQ29waWVzKGUpe3JldHVybiBuZXcgTnVtYmVyT2ZDb3BpZXMoZSl9c3RhdGljIG9wZW5BY3Rpb24oZSl7cmV0dXJuIG5ldyBPcGVuQWN0aW9uKGUpfXN0YXRpYyBvdXRwdXQoZSl7cmV0dXJuIG5ldyBPdXRwdXQoZSl9c3RhdGljIG91dHB1dEJpbihlKXtyZXR1cm4gbmV3IE91dHB1dEJpbihlKX1zdGF0aWMgb3V0cHV0WFNMKGUpe3JldHVybiBuZXcgT3V0cHV0WFNMKGUpfXN0YXRpYyBvdmVycHJpbnQoZSl7cmV0dXJuIG5ldyBPdmVycHJpbnQoZSl9c3RhdGljIHBhY2tldHMoZSl7cmV0dXJuIG5ldyBQYWNrZXRzKGUpfXN0YXRpYyBwYWdlT2Zmc2V0KGUpe3JldHVybiBuZXcgUGFnZU9mZnNldChlKX1zdGF0aWMgcGFnZVJhbmdlKGUpe3JldHVybiBuZXcgUGFnZVJhbmdlKGUpfXN0YXRpYyBwYWdpbmF0aW9uKGUpe3JldHVybiBuZXcgUGFnaW5hdGlvbihlKX1zdGF0aWMgcGFnaW5hdGlvbk92ZXJyaWRlKGUpe3JldHVybiBuZXcgUGFnaW5hdGlvbk92ZXJyaWRlKGUpfXN0YXRpYyBwYXJ0KGUpe3JldHVybiBuZXcgUGFydChlKX1zdGF0aWMgcGNsKGUpe3JldHVybiBuZXcgUGNsKGUpfXN0YXRpYyBwZGYoZSl7cmV0dXJuIG5ldyBQZGYoZSl9c3RhdGljIHBkZmEoZSl7cmV0dXJuIG5ldyBQZGZhKGUpfXN0YXRpYyBwZXJtaXNzaW9ucyhlKXtyZXR1cm4gbmV3IFBlcm1pc3Npb25zKGUpfXN0YXRpYyBwaWNrVHJheUJ5UERGU2l6ZShlKXtyZXR1cm4gbmV3IFBpY2tUcmF5QnlQREZTaXplKGUpfXN0YXRpYyBwaWN0dXJlKGUpe3JldHVybiBuZXcgY29uZmlnX1BpY3R1cmUoZSl9c3RhdGljIHBsYWludGV4dE1ldGFkYXRhKGUpe3JldHVybiBuZXcgUGxhaW50ZXh0TWV0YWRhdGEoZSl9c3RhdGljIHByZXNlbmNlKGUpe3JldHVybiBuZXcgUHJlc2VuY2UoZSl9c3RhdGljIHByZXNlbnQoZSl7cmV0dXJuIG5ldyBQcmVzZW50KGUpfXN0YXRpYyBwcmludChlKXtyZXR1cm4gbmV3IFByaW50KGUpfXN0YXRpYyBwcmludEhpZ2hRdWFsaXR5KGUpe3JldHVybiBuZXcgUHJpbnRIaWdoUXVhbGl0eShlKX1zdGF0aWMgcHJpbnRTY2FsaW5nKGUpe3JldHVybiBuZXcgUHJpbnRTY2FsaW5nKGUpfXN0YXRpYyBwcmludGVyTmFtZShlKXtyZXR1cm4gbmV3IFByaW50ZXJOYW1lKGUpfXN0YXRpYyBwcm9kdWNlcihlKXtyZXR1cm4gbmV3IFByb2R1Y2VyKGUpfXN0YXRpYyBwcyhlKXtyZXR1cm4gbmV3IFBzKGUpfXN0YXRpYyByYW5nZShlKXtyZXR1cm4gbmV3IFJhbmdlKGUpfXN0YXRpYyByZWNvcmQoZSl7cmV0dXJuIG5ldyBSZWNvcmQoZSl9c3RhdGljIHJlbGV2YW50KGUpe3JldHVybiBuZXcgUmVsZXZhbnQoZSl9c3RhdGljIHJlbmFtZShlKXtyZXR1cm4gbmV3IFJlbmFtZShlKX1zdGF0aWMgcmVuZGVyUG9saWN5KGUpe3JldHVybiBuZXcgUmVuZGVyUG9saWN5KGUpfXN0YXRpYyBydW5TY3JpcHRzKGUpe3JldHVybiBuZXcgUnVuU2NyaXB0cyhlKX1zdGF0aWMgc2NyaXB0KGUpe3JldHVybiBuZXcgY29uZmlnX1NjcmlwdChlKX1zdGF0aWMgc2NyaXB0TW9kZWwoZSl7cmV0dXJuIG5ldyBTY3JpcHRNb2RlbChlKX1zdGF0aWMgc2V2ZXJpdHkoZSl7cmV0dXJuIG5ldyBTZXZlcml0eShlKX1zdGF0aWMgc2lsZW50UHJpbnQoZSl7cmV0dXJuIG5ldyBTaWxlbnRQcmludChlKX1zdGF0aWMgc3RhcGxlKGUpe3JldHVybiBuZXcgU3RhcGxlKGUpfXN0YXRpYyBzdGFydE5vZGUoZSl7cmV0dXJuIG5ldyBTdGFydE5vZGUoZSl9c3RhdGljIHN0YXJ0UGFnZShlKXtyZXR1cm4gbmV3IFN0YXJ0UGFnZShlKX1zdGF0aWMgc3VibWl0Rm9ybWF0KGUpe3JldHVybiBuZXcgU3VibWl0Rm9ybWF0KGUpfXN0YXRpYyBzdWJtaXRVcmwoZSl7cmV0dXJuIG5ldyBTdWJtaXRVcmwoZSl9c3RhdGljIHN1YnNldEJlbG93KGUpe3JldHVybiBuZXcgU3Vic2V0QmVsb3coZSl9c3RhdGljIHN1cHByZXNzQmFubmVyKGUpe3JldHVybiBuZXcgU3VwcHJlc3NCYW5uZXIoZSl9c3RhdGljIHRhZ2dlZChlKXtyZXR1cm4gbmV3IFRhZ2dlZChlKX1zdGF0aWMgdGVtcGxhdGUoZSl7cmV0dXJuIG5ldyBjb25maWdfVGVtcGxhdGUoZSl9c3RhdGljIHRlbXBsYXRlQ2FjaGUoZSl7cmV0dXJuIG5ldyBUZW1wbGF0ZUNhY2hlKGUpfXN0YXRpYyB0aHJlc2hvbGQoZSl7cmV0dXJuIG5ldyBUaHJlc2hvbGQoZSl9c3RhdGljIHRvKGUpe3JldHVybiBuZXcgVG8oZSl9c3RhdGljIHRyYWNlKGUpe3JldHVybiBuZXcgVHJhY2UoZSl9c3RhdGljIHRyYW5zZm9ybShlKXtyZXR1cm4gbmV3IFRyYW5zZm9ybShlKX1zdGF0aWMgdHlwZShlKXtyZXR1cm4gbmV3IFR5cGUoZSl9c3RhdGljIHVyaShlKXtyZXR1cm4gbmV3IFVyaShlKX1zdGF0aWMgdmFsaWRhdGUoZSl7cmV0dXJuIG5ldyBjb25maWdfVmFsaWRhdGUoZSl9c3RhdGljIHZhbGlkYXRlQXBwcm92YWxTaWduYXR1cmVzKGUpe3JldHVybiBuZXcgVmFsaWRhdGVBcHByb3ZhbFNpZ25hdHVyZXMoZSl9c3RhdGljIHZhbGlkYXRpb25NZXNzYWdpbmcoZSl7cmV0dXJuIG5ldyBWYWxpZGF0aW9uTWVzc2FnaW5nKGUpfXN0YXRpYyB2ZXJzaW9uKGUpe3JldHVybiBuZXcgVmVyc2lvbihlKX1zdGF0aWMgdmVyc2lvbkNvbnRyb2woZSl7cmV0dXJuIG5ldyBWZXJzaW9uQ29udHJvbChlKX1zdGF0aWMgdmlld2VyUHJlZmVyZW5jZXMoZSl7cmV0dXJuIG5ldyBWaWV3ZXJQcmVmZXJlbmNlcyhlKX1zdGF0aWMgd2ViQ2xpZW50KGUpe3JldHVybiBuZXcgV2ViQ2xpZW50KGUpfXN0YXRpYyB3aGl0ZXNwYWNlKGUpe3JldHVybiBuZXcgV2hpdGVzcGFjZShlKX1zdGF0aWMgd2luZG93KGUpe3JldHVybiBuZXcgV2luZG93KGUpfXN0YXRpYyB4ZGMoZSl7cmV0dXJuIG5ldyBYZGMoZSl9c3RhdGljIHhkcChlKXtyZXR1cm4gbmV3IFhkcChlKX1zdGF0aWMgeHNsKGUpe3JldHVybiBuZXcgWHNsKGUpfXN0YXRpYyB6cGwoZSl7cmV0dXJuIG5ldyBacGwoZSl9fWNvbnN0IFluPUFuLmNvbm5lY3Rpb25TZXQuaWQ7Y2xhc3MgQ29ubmVjdGlvblNldCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihZbiwiY29ubmVjdGlvblNldCIsITApO3RoaXMud3NkbENvbm5lY3Rpb249bmV3IFhGQU9iamVjdEFycmF5O3RoaXMueG1sQ29ubmVjdGlvbj1uZXcgWEZBT2JqZWN0QXJyYXk7dGhpcy54c2RDb25uZWN0aW9uPW5ldyBYRkFPYmplY3RBcnJheX19Y2xhc3MgRWZmZWN0aXZlSW5wdXRQb2xpY3kgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoWW4sImVmZmVjdGl2ZUlucHV0UG9saWN5Iik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIEVmZmVjdGl2ZU91dHB1dFBvbGljeSBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihZbiwiZWZmZWN0aXZlT3V0cHV0UG9saWN5Iik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIE9wZXJhdGlvbiBleHRlbmRzIFN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihZbiwib3BlcmF0aW9uIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLmlucHV0PWUuaW5wdXR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMub3V0cHV0PWUub3V0cHV0fHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIFJvb3RFbGVtZW50IGV4dGVuZHMgU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFluLCJyb290RWxlbWVudCIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBTb2FwQWN0aW9uIGV4dGVuZHMgU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFluLCJzb2FwQWN0aW9uIik7dGhpcy5pZD1lLmlkfHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVzZT1lLnVzZXx8IiI7dGhpcy51c2VocmVmPWUudXNlaHJlZnx8IiJ9fWNsYXNzIFNvYXBBZGRyZXNzIGV4dGVuZHMgU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFluLCJzb2FwQWRkcmVzcyIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBjb25uZWN0aW9uX3NldF9VcmkgZXh0ZW5kcyBTdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoWW4sInVyaSIpO3RoaXMuaWQ9ZS5pZHx8IiI7dGhpcy5uYW1lPWUubmFtZXx8IiI7dGhpcy51c2U9ZS51c2V8fCIiO3RoaXMudXNlaHJlZj1lLnVzZWhyZWZ8fCIifX1jbGFzcyBXc2RsQWRkcmVzcyBleHRlbmRzIFN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihZbiwid3NkbEFkZHJlc3MiKTt0aGlzLmlkPWUuaWR8fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMudXNlPWUudXNlfHwiIjt0aGlzLnVzZWhyZWY9ZS51c2VocmVmfHwiIn19Y2xhc3MgV3NkbENvbm5lY3Rpb24gZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoWW4sIndzZGxDb25uZWN0aW9uIiwhMCk7dGhpcy5kYXRhRGVzY3JpcHRpb249ZS5kYXRhRGVzY3JpcHRpb258fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMuZWZmZWN0aXZlSW5wdXRQb2xpY3k9bnVsbDt0aGlzLmVmZmVjdGl2ZU91dHB1dFBvbGljeT1udWxsO3RoaXMub3BlcmF0aW9uPW51bGw7dGhpcy5zb2FwQWN0aW9uPW51bGw7dGhpcy5zb2FwQWRkcmVzcz1udWxsO3RoaXMud3NkbEFkZHJlc3M9bnVsbH19Y2xhc3MgWG1sQ29ubmVjdGlvbiBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihZbiwieG1sQ29ubmVjdGlvbiIsITApO3RoaXMuZGF0YURlc2NyaXB0aW9uPWUuZGF0YURlc2NyaXB0aW9ufHwiIjt0aGlzLm5hbWU9ZS5uYW1lfHwiIjt0aGlzLnVyaT1udWxsfX1jbGFzcyBYc2RDb25uZWN0aW9uIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFluLCJ4c2RDb25uZWN0aW9uIiwhMCk7dGhpcy5kYXRhRGVzY3JpcHRpb249ZS5kYXRhRGVzY3JpcHRpb258fCIiO3RoaXMubmFtZT1lLm5hbWV8fCIiO3RoaXMucm9vdEVsZW1lbnQ9bnVsbDt0aGlzLnVyaT1udWxsfX1jbGFzcyBDb25uZWN0aW9uU2V0TmFtZXNwYWNle3N0YXRpY1skc10oZSx0KXtpZihDb25uZWN0aW9uU2V0TmFtZXNwYWNlLmhhc093blByb3BlcnR5KGUpKXJldHVybiBDb25uZWN0aW9uU2V0TmFtZXNwYWNlW2VdKHQpfXN0YXRpYyBjb25uZWN0aW9uU2V0KGUpe3JldHVybiBuZXcgQ29ubmVjdGlvblNldChlKX1zdGF0aWMgZWZmZWN0aXZlSW5wdXRQb2xpY3koZSl7cmV0dXJuIG5ldyBFZmZlY3RpdmVJbnB1dFBvbGljeShlKX1zdGF0aWMgZWZmZWN0aXZlT3V0cHV0UG9saWN5KGUpe3JldHVybiBuZXcgRWZmZWN0aXZlT3V0cHV0UG9saWN5KGUpfXN0YXRpYyBvcGVyYXRpb24oZSl7cmV0dXJuIG5ldyBPcGVyYXRpb24oZSl9c3RhdGljIHJvb3RFbGVtZW50KGUpe3JldHVybiBuZXcgUm9vdEVsZW1lbnQoZSl9c3RhdGljIHNvYXBBY3Rpb24oZSl7cmV0dXJuIG5ldyBTb2FwQWN0aW9uKGUpfXN0YXRpYyBzb2FwQWRkcmVzcyhlKXtyZXR1cm4gbmV3IFNvYXBBZGRyZXNzKGUpfXN0YXRpYyB1cmkoZSl7cmV0dXJuIG5ldyBjb25uZWN0aW9uX3NldF9VcmkoZSl9c3RhdGljIHdzZGxBZGRyZXNzKGUpe3JldHVybiBuZXcgV3NkbEFkZHJlc3MoZSl9c3RhdGljIHdzZGxDb25uZWN0aW9uKGUpe3JldHVybiBuZXcgV3NkbENvbm5lY3Rpb24oZSl9c3RhdGljIHhtbENvbm5lY3Rpb24oZSl7cmV0dXJuIG5ldyBYbWxDb25uZWN0aW9uKGUpfXN0YXRpYyB4c2RDb25uZWN0aW9uKGUpe3JldHVybiBuZXcgWHNkQ29ubmVjdGlvbihlKX19Y29uc3QgS249QW4uZGF0YXNldHMuaWQ7Y2xhc3MgZGF0YXNldHNfRGF0YSBleHRlbmRzIFhtbE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihLbiwiZGF0YSIsZSl9W3lzXSgpe3JldHVybiEwfX1jbGFzcyBEYXRhc2V0cyBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihLbiwiZGF0YXNldHMiLCEwKTt0aGlzLmRhdGE9bnVsbDt0aGlzLlNpZ25hdHVyZT1udWxsfVtHc10oZSl7Y29uc3QgdD1lW1JzXTsoImRhdGEiPT09dCYmZVtrc109PT1Lbnx8IlNpZ25hdHVyZSI9PT10JiZlW2tzXT09PUFuLnNpZ25hdHVyZS5pZCkmJih0aGlzW3RdPWUpO3RoaXNbWXJdKGUpfX1jbGFzcyBEYXRhc2V0c05hbWVzcGFjZXtzdGF0aWNbJHNdKGUsdCl7aWYoRGF0YXNldHNOYW1lc3BhY2UuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIERhdGFzZXRzTmFtZXNwYWNlW2VdKHQpfXN0YXRpYyBkYXRhc2V0cyhlKXtyZXR1cm4gbmV3IERhdGFzZXRzKGUpfXN0YXRpYyBkYXRhKGUpe3JldHVybiBuZXcgZGF0YXNldHNfRGF0YShlKX19Y29uc3QgVG49QW4ubG9jYWxlU2V0LmlkO2NsYXNzIENhbGVuZGFyU3ltYm9scyBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihUbiwiY2FsZW5kYXJTeW1ib2xzIiwhMCk7dGhpcy5uYW1lPSJncmVnb3JpYW4iO3RoaXMuZGF5TmFtZXM9bmV3IFhGQU9iamVjdEFycmF5KDIpO3RoaXMuZXJhTmFtZXM9bnVsbDt0aGlzLm1lcmlkaWVtTmFtZXM9bnVsbDt0aGlzLm1vbnRoTmFtZXM9bmV3IFhGQU9iamVjdEFycmF5KDIpfX1jbGFzcyBDdXJyZW5jeVN5bWJvbCBleHRlbmRzIFN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihUbiwiY3VycmVuY3lTeW1ib2wiKTt0aGlzLm5hbWU9Z2V0U3RyaW5nT3B0aW9uKGUubmFtZSxbInN5bWJvbCIsImlzb25hbWUiLCJkZWNpbWFsIl0pfX1jbGFzcyBDdXJyZW5jeVN5bWJvbHMgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoVG4sImN1cnJlbmN5U3ltYm9scyIsITApO3RoaXMuY3VycmVuY3lTeW1ib2w9bmV3IFhGQU9iamVjdEFycmF5KDMpfX1jbGFzcyBEYXRlUGF0dGVybiBleHRlbmRzIFN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihUbiwiZGF0ZVBhdHRlcm4iKTt0aGlzLm5hbWU9Z2V0U3RyaW5nT3B0aW9uKGUubmFtZSxbImZ1bGwiLCJsb25nIiwibWVkIiwic2hvcnQiXSl9fWNsYXNzIERhdGVQYXR0ZXJucyBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihUbiwiZGF0ZVBhdHRlcm5zIiwhMCk7dGhpcy5kYXRlUGF0dGVybj1uZXcgWEZBT2JqZWN0QXJyYXkoNCl9fWNsYXNzIERhdGVUaW1lU3ltYm9scyBleHRlbmRzIENvbnRlbnRPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoVG4sImRhdGVUaW1lU3ltYm9scyIpfX1jbGFzcyBEYXkgZXh0ZW5kcyBTdHJpbmdPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoVG4sImRheSIpfX1jbGFzcyBEYXlOYW1lcyBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihUbiwiZGF5TmFtZXMiLCEwKTt0aGlzLmFiYnI9Z2V0SW50ZWdlcih7ZGF0YTplLmFiYnIsZGVmYXVsdFZhbHVlOjAsdmFsaWRhdGU6ZT0+MT09PWV9KTt0aGlzLmRheT1uZXcgWEZBT2JqZWN0QXJyYXkoNyl9fWNsYXNzIEVyYSBleHRlbmRzIFN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihUbiwiZXJhIil9fWNsYXNzIEVyYU5hbWVzIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFRuLCJlcmFOYW1lcyIsITApO3RoaXMuZXJhPW5ldyBYRkFPYmplY3RBcnJheSgyKX19Y2xhc3MgbG9jYWxlX3NldF9Mb2NhbGUgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoVG4sImxvY2FsZSIsITApO3RoaXMuZGVzYz1lLmRlc2N8fCIiO3RoaXMubmFtZT0iaXNvbmFtZSI7dGhpcy5jYWxlbmRhclN5bWJvbHM9bnVsbDt0aGlzLmN1cnJlbmN5U3ltYm9scz1udWxsO3RoaXMuZGF0ZVBhdHRlcm5zPW51bGw7dGhpcy5kYXRlVGltZVN5bWJvbHM9bnVsbDt0aGlzLm51bWJlclBhdHRlcm5zPW51bGw7dGhpcy5udW1iZXJTeW1ib2xzPW51bGw7dGhpcy50aW1lUGF0dGVybnM9bnVsbDt0aGlzLnR5cGVGYWNlcz1udWxsfX1jbGFzcyBsb2NhbGVfc2V0X0xvY2FsZVNldCBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihUbiwibG9jYWxlU2V0IiwhMCk7dGhpcy5sb2NhbGU9bmV3IFhGQU9iamVjdEFycmF5fX1jbGFzcyBNZXJpZGllbSBleHRlbmRzIFN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihUbiwibWVyaWRpZW0iKX19Y2xhc3MgTWVyaWRpZW1OYW1lcyBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihUbiwibWVyaWRpZW1OYW1lcyIsITApO3RoaXMubWVyaWRpZW09bmV3IFhGQU9iamVjdEFycmF5KDIpfX1jbGFzcyBNb250aCBleHRlbmRzIFN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihUbiwibW9udGgiKX19Y2xhc3MgTW9udGhOYW1lcyBleHRlbmRzIFhGQU9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihUbiwibW9udGhOYW1lcyIsITApO3RoaXMuYWJicj1nZXRJbnRlZ2VyKHtkYXRhOmUuYWJicixkZWZhdWx0VmFsdWU6MCx2YWxpZGF0ZTplPT4xPT09ZX0pO3RoaXMubW9udGg9bmV3IFhGQU9iamVjdEFycmF5KDEyKX19Y2xhc3MgTnVtYmVyUGF0dGVybiBleHRlbmRzIFN0cmluZ09iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihUbiwibnVtYmVyUGF0dGVybiIpO3RoaXMubmFtZT1nZXRTdHJpbmdPcHRpb24oZS5uYW1lLFsiZnVsbCIsImxvbmciLCJtZWQiLCJzaG9ydCJdKX19Y2xhc3MgTnVtYmVyUGF0dGVybnMgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoVG4sIm51bWJlclBhdHRlcm5zIiwhMCk7dGhpcy5udW1iZXJQYXR0ZXJuPW5ldyBYRkFPYmplY3RBcnJheSg0KX19Y2xhc3MgTnVtYmVyU3ltYm9sIGV4dGVuZHMgU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFRuLCJudW1iZXJTeW1ib2wiKTt0aGlzLm5hbWU9Z2V0U3RyaW5nT3B0aW9uKGUubmFtZSxbImRlY2ltYWwiLCJncm91cGluZyIsInBlcmNlbnQiLCJtaW51cyIsInplcm8iXSl9fWNsYXNzIE51bWJlclN5bWJvbHMgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoVG4sIm51bWJlclN5bWJvbHMiLCEwKTt0aGlzLm51bWJlclN5bWJvbD1uZXcgWEZBT2JqZWN0QXJyYXkoNSl9fWNsYXNzIFRpbWVQYXR0ZXJuIGV4dGVuZHMgU3RyaW5nT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFRuLCJ0aW1lUGF0dGVybiIpO3RoaXMubmFtZT1nZXRTdHJpbmdPcHRpb24oZS5uYW1lLFsiZnVsbCIsImxvbmciLCJtZWQiLCJzaG9ydCJdKX19Y2xhc3MgVGltZVBhdHRlcm5zIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFRuLCJ0aW1lUGF0dGVybnMiLCEwKTt0aGlzLnRpbWVQYXR0ZXJuPW5ldyBYRkFPYmplY3RBcnJheSg0KX19Y2xhc3MgVHlwZUZhY2UgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoVG4sInR5cGVGYWNlIiwhMCk7dGhpcy5uYW1lPSIifGUubmFtZX19Y2xhc3MgVHlwZUZhY2VzIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFRuLCJ0eXBlRmFjZXMiLCEwKTt0aGlzLnR5cGVGYWNlPW5ldyBYRkFPYmplY3RBcnJheX19Y2xhc3MgTG9jYWxlU2V0TmFtZXNwYWNle3N0YXRpY1skc10oZSx0KXtpZihMb2NhbGVTZXROYW1lc3BhY2UuaGFzT3duUHJvcGVydHkoZSkpcmV0dXJuIExvY2FsZVNldE5hbWVzcGFjZVtlXSh0KX1zdGF0aWMgY2FsZW5kYXJTeW1ib2xzKGUpe3JldHVybiBuZXcgQ2FsZW5kYXJTeW1ib2xzKGUpfXN0YXRpYyBjdXJyZW5jeVN5bWJvbChlKXtyZXR1cm4gbmV3IEN1cnJlbmN5U3ltYm9sKGUpfXN0YXRpYyBjdXJyZW5jeVN5bWJvbHMoZSl7cmV0dXJuIG5ldyBDdXJyZW5jeVN5bWJvbHMoZSl9c3RhdGljIGRhdGVQYXR0ZXJuKGUpe3JldHVybiBuZXcgRGF0ZVBhdHRlcm4oZSl9c3RhdGljIGRhdGVQYXR0ZXJucyhlKXtyZXR1cm4gbmV3IERhdGVQYXR0ZXJucyhlKX1zdGF0aWMgZGF0ZVRpbWVTeW1ib2xzKGUpe3JldHVybiBuZXcgRGF0ZVRpbWVTeW1ib2xzKGUpfXN0YXRpYyBkYXkoZSl7cmV0dXJuIG5ldyBEYXkoZSl9c3RhdGljIGRheU5hbWVzKGUpe3JldHVybiBuZXcgRGF5TmFtZXMoZSl9c3RhdGljIGVyYShlKXtyZXR1cm4gbmV3IEVyYShlKX1zdGF0aWMgZXJhTmFtZXMoZSl7cmV0dXJuIG5ldyBFcmFOYW1lcyhlKX1zdGF0aWMgbG9jYWxlKGUpe3JldHVybiBuZXcgbG9jYWxlX3NldF9Mb2NhbGUoZSl9c3RhdGljIGxvY2FsZVNldChlKXtyZXR1cm4gbmV3IGxvY2FsZV9zZXRfTG9jYWxlU2V0KGUpfXN0YXRpYyBtZXJpZGllbShlKXtyZXR1cm4gbmV3IE1lcmlkaWVtKGUpfXN0YXRpYyBtZXJpZGllbU5hbWVzKGUpe3JldHVybiBuZXcgTWVyaWRpZW1OYW1lcyhlKX1zdGF0aWMgbW9udGgoZSl7cmV0dXJuIG5ldyBNb250aChlKX1zdGF0aWMgbW9udGhOYW1lcyhlKXtyZXR1cm4gbmV3IE1vbnRoTmFtZXMoZSl9c3RhdGljIG51bWJlclBhdHRlcm4oZSl7cmV0dXJuIG5ldyBOdW1iZXJQYXR0ZXJuKGUpfXN0YXRpYyBudW1iZXJQYXR0ZXJucyhlKXtyZXR1cm4gbmV3IE51bWJlclBhdHRlcm5zKGUpfXN0YXRpYyBudW1iZXJTeW1ib2woZSl7cmV0dXJuIG5ldyBOdW1iZXJTeW1ib2woZSl9c3RhdGljIG51bWJlclN5bWJvbHMoZSl7cmV0dXJuIG5ldyBOdW1iZXJTeW1ib2xzKGUpfXN0YXRpYyB0aW1lUGF0dGVybihlKXtyZXR1cm4gbmV3IFRpbWVQYXR0ZXJuKGUpfXN0YXRpYyB0aW1lUGF0dGVybnMoZSl7cmV0dXJuIG5ldyBUaW1lUGF0dGVybnMoZSl9c3RhdGljIHR5cGVGYWNlKGUpe3JldHVybiBuZXcgVHlwZUZhY2UoZSl9c3RhdGljIHR5cGVGYWNlcyhlKXtyZXR1cm4gbmV3IFR5cGVGYWNlcyhlKX19Y29uc3QgcW49QW4uc2lnbmF0dXJlLmlkO2NsYXNzIHNpZ25hdHVyZV9TaWduYXR1cmUgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIocW4sInNpZ25hdHVyZSIsITApfX1jbGFzcyBTaWduYXR1cmVOYW1lc3BhY2V7c3RhdGljWyRzXShlLHQpe2lmKFNpZ25hdHVyZU5hbWVzcGFjZS5oYXNPd25Qcm9wZXJ0eShlKSlyZXR1cm4gU2lnbmF0dXJlTmFtZXNwYWNlW2VdKHQpfXN0YXRpYyBzaWduYXR1cmUoZSl7cmV0dXJuIG5ldyBzaWduYXR1cmVfU2lnbmF0dXJlKGUpfX1jb25zdCBPbj1Bbi5zdHlsZXNoZWV0LmlkO2NsYXNzIFN0eWxlc2hlZXQgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoT24sInN0eWxlc2hlZXQiLCEwKX19Y2xhc3MgU3R5bGVzaGVldE5hbWVzcGFjZXtzdGF0aWNbJHNdKGUsdCl7aWYoU3R5bGVzaGVldE5hbWVzcGFjZS5oYXNPd25Qcm9wZXJ0eShlKSlyZXR1cm4gU3R5bGVzaGVldE5hbWVzcGFjZVtlXSh0KX1zdGF0aWMgc3R5bGVzaGVldChlKXtyZXR1cm4gbmV3IFN0eWxlc2hlZXQoZSl9fWNvbnN0IFBuPUFuLnhkcC5pZDtjbGFzcyB4ZHBfWGRwIGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKFBuLCJ4ZHAiLCEwKTt0aGlzLnV1aWQ9ZS51dWlkfHwiIjt0aGlzLnRpbWVTdGFtcD1lLnRpbWVTdGFtcHx8IiI7dGhpcy5jb25maWc9bnVsbDt0aGlzLmNvbm5lY3Rpb25TZXQ9bnVsbDt0aGlzLmRhdGFzZXRzPW51bGw7dGhpcy5sb2NhbGVTZXQ9bnVsbDt0aGlzLnN0eWxlc2hlZXQ9bmV3IFhGQU9iamVjdEFycmF5O3RoaXMudGVtcGxhdGU9bnVsbH1bTXNdKGUpe2NvbnN0IHQ9QW5bZVtSc11dO3JldHVybiB0JiZlW2tzXT09PXQuaWR9fWNsYXNzIFhkcE5hbWVzcGFjZXtzdGF0aWNbJHNdKGUsdCl7aWYoWGRwTmFtZXNwYWNlLmhhc093blByb3BlcnR5KGUpKXJldHVybiBYZHBOYW1lc3BhY2VbZV0odCl9c3RhdGljIHhkcChlKXtyZXR1cm4gbmV3IHhkcF9YZHAoZSl9fWNvbnN0IFduPUFuLnhodG1sLmlkLGpuPVN5bWJvbCgpLFhuPW5ldyBTZXQoWyJjb2xvciIsImZvbnQiLCJmb250LWZhbWlseSIsImZvbnQtc2l6ZSIsImZvbnQtc3RyZXRjaCIsImZvbnQtc3R5bGUiLCJmb250LXdlaWdodCIsIm1hcmdpbiIsIm1hcmdpbi1ib3R0b20iLCJtYXJnaW4tbGVmdCIsIm1hcmdpbi1yaWdodCIsIm1hcmdpbi10b3AiLCJsZXR0ZXItc3BhY2luZyIsImxpbmUtaGVpZ2h0Iiwib3JwaGFucyIsInBhZ2UtYnJlYWstYWZ0ZXIiLCJwYWdlLWJyZWFrLWJlZm9yZSIsInBhZ2UtYnJlYWstaW5zaWRlIiwidGFiLWludGVydmFsIiwidGFiLXN0b3AiLCJ0ZXh0LWFsaWduIiwidGV4dC1kZWNvcmF0aW9uIiwidGV4dC1pbmRlbnQiLCJ2ZXJ0aWNhbC1hbGlnbiIsIndpZG93cyIsImtlcm5pbmctbW9kZSIsInhmYS1mb250LWhvcml6b250YWwtc2NhbGUiLCJ4ZmEtZm9udC12ZXJ0aWNhbC1zY2FsZSIsInhmYS1zcGFjZXJ1biIsInhmYS10YWItc3RvcHMiXSksVm49bmV3IE1hcChbWyJwYWdlLWJyZWFrLWFmdGVyIiwiYnJlYWtBZnRlciJdLFsicGFnZS1icmVhay1iZWZvcmUiLCJicmVha0JlZm9yZSJdLFsicGFnZS1icmVhay1pbnNpZGUiLCJicmVha0luc2lkZSJdLFsia2VybmluZy1tb2RlIixlPT4ibm9uZSI9PT1lPyJub25lIjoibm9ybWFsIl0sWyJ4ZmEtZm9udC1ob3Jpem9udGFsLXNjYWxlIixlPT5gc2NhbGVYKCR7TWF0aC5tYXgoMCxNYXRoLm1pbihwYXJzZUludChlKS8xMDApKS50b0ZpeGVkKDIpfSlgXSxbInhmYS1mb250LXZlcnRpY2FsLXNjYWxlIixlPT5gc2NhbGVZKCR7TWF0aC5tYXgoMCxNYXRoLm1pbihwYXJzZUludChlKS8xMDApKS50b0ZpeGVkKDIpfSlgXSxbInhmYS1zcGFjZXJ1biIsIiJdLFsieGZhLXRhYi1zdG9wcyIsIiJdLFsiZm9udC1zaXplIiwoZSx0KT0+bWVhc3VyZVRvU3RyaW5nKC45OSooZT10LmZvbnRTaXplPU1hdGguYWJzKGdldE1lYXN1cmVtZW50KGUpKSkpXSxbImxldHRlci1zcGFjaW5nIixlPT5tZWFzdXJlVG9TdHJpbmcoZ2V0TWVhc3VyZW1lbnQoZSkpXSxbImxpbmUtaGVpZ2h0IixlPT5tZWFzdXJlVG9TdHJpbmcoZ2V0TWVhc3VyZW1lbnQoZSkpXSxbIm1hcmdpbiIsZT0+bWVhc3VyZVRvU3RyaW5nKGdldE1lYXN1cmVtZW50KGUpKV0sWyJtYXJnaW4tYm90dG9tIixlPT5tZWFzdXJlVG9TdHJpbmcoZ2V0TWVhc3VyZW1lbnQoZSkpXSxbIm1hcmdpbi1sZWZ0IixlPT5tZWFzdXJlVG9TdHJpbmcoZ2V0TWVhc3VyZW1lbnQoZSkpXSxbIm1hcmdpbi1yaWdodCIsZT0+bWVhc3VyZVRvU3RyaW5nKGdldE1lYXN1cmVtZW50KGUpKV0sWyJtYXJnaW4tdG9wIixlPT5tZWFzdXJlVG9TdHJpbmcoZ2V0TWVhc3VyZW1lbnQoZSkpXSxbInRleHQtaW5kZW50IixlPT5tZWFzdXJlVG9TdHJpbmcoZ2V0TWVhc3VyZW1lbnQoZSkpXSxbImZvbnQtZmFtaWx5IixlPT5lXSxbInZlcnRpY2FsLWFsaWduIixlPT5tZWFzdXJlVG9TdHJpbmcoZ2V0TWVhc3VyZW1lbnQoZSkpXV0pLFpuPS9ccysvZyxfbj0vW1xyXG5dKy9nLHpuPS9cclxuPy9nO2Z1bmN0aW9uIG1hcFN0eWxlKGUsdCxpKXtjb25zdCBhPU9iamVjdC5jcmVhdGUobnVsbCk7aWYoIWUpcmV0dXJuIGE7Y29uc3Qgcj1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcihjb25zdFt0LGldb2YgZS5zcGxpdCgiOyIpLm1hcCgoZT0+ZS5zcGxpdCgiOiIsMikpKSl7Y29uc3QgZT1Wbi5nZXQodCk7aWYoIiI9PT1lKWNvbnRpbnVlO2xldCBzPWk7ZSYmKHM9InN0cmluZyI9PXR5cGVvZiBlP2U6ZShpLHIpKTt0LmVuZHNXaXRoKCJzY2FsZSIpP2EudHJhbnNmb3JtPWEudHJhbnNmb3JtP2Ake2FbdF19ICR7c31gOnM6YVt0LnJlcGxhY2VBbGwoLy0oW2EtekEtWl0pL2csKChlLHQpPT50LnRvVXBwZXJDYXNlKCkpKV09c31hLmZvbnRGYW1pbHkmJnNldEZvbnRGYW1pbHkoe3R5cGVmYWNlOmEuZm9udEZhbWlseSx3ZWlnaHQ6YS5mb250V2VpZ2h0fHwibm9ybWFsIixwb3N0dXJlOmEuZm9udFN0eWxlfHwibm9ybWFsIixzaXplOnIuZm9udFNpemV8fDB9LHQsdFtDc10uZm9udEZpbmRlcixhKTtpZihpJiZhLnZlcnRpY2FsQWxpZ24mJiIwcHgiIT09YS52ZXJ0aWNhbEFsaWduJiZhLmZvbnRTaXplKXtjb25zdCBlPS41ODMsdD0uMzMzLGk9Z2V0TWVhc3VyZW1lbnQoYS5mb250U2l6ZSk7YS5mb250U2l6ZT1tZWFzdXJlVG9TdHJpbmcoaSplKTthLnZlcnRpY2FsQWxpZ249bWVhc3VyZVRvU3RyaW5nKE1hdGguc2lnbihnZXRNZWFzdXJlbWVudChhLnZlcnRpY2FsQWxpZ24pKSppKnQpfWkmJmEuZm9udFNpemUmJihhLmZvbnRTaXplPWBjYWxjKCR7YS5mb250U2l6ZX0gKiB2YXIoLS1zY2FsZS1mYWN0b3IpKWApO2ZpeFRleHRJbmRlbnQoYSk7cmV0dXJuIGF9Y29uc3QgJG49bmV3IFNldChbImJvZHkiLCJodG1sIl0pO2NsYXNzIFhodG1sT2JqZWN0IGV4dGVuZHMgWG1sT2JqZWN0e2NvbnN0cnVjdG9yKGUsdCl7c3VwZXIoV24sdCk7dGhpc1tqbl09ITE7dGhpcy5zdHlsZT1lLnN0eWxlfHwiIn1bVHJdKGUpe3N1cGVyW1RyXShlKTt0aGlzLnN0eWxlPWZ1bmN0aW9uIGNoZWNrU3R5bGUoZSl7cmV0dXJuIGUuc3R5bGU/ZS5zdHlsZS50cmltKCkuc3BsaXQoL1xzKjtccyovKS5maWx0ZXIoKGU9PiEhZSkpLm1hcCgoZT0+ZS5zcGxpdCgvXHMqOlxzKi8sMikpKS5maWx0ZXIoKChbdCxpXSk9PnsiZm9udC1mYW1pbHkiPT09dCYmZVtDc10udXNlZFR5cGVmYWNlcy5hZGQoaSk7cmV0dXJuIFhuLmhhcyh0KX0pKS5tYXAoKGU9PmUuam9pbigiOiIpKSkuam9pbigiOyIpOiIifSh0aGlzKX1bSnJdKCl7cmV0dXJuISRuLmhhcyh0aGlzW1JzXSl9W1VzXShlLHQ9ITEpe2lmKHQpdGhpc1tqbl09ITA7ZWxzZXtlPWUucmVwbGFjZUFsbChfbiwiIik7dGhpcy5zdHlsZS5pbmNsdWRlcygieGZhLXNwYWNlcnVuOnllcyIpfHwoZT1lLnJlcGxhY2VBbGwoWm4sIiAiKSl9ZSYmKHRoaXNbanJdKz1lKX1beHNdKGUsdD0hMCl7Y29uc3QgaT1PYmplY3QuY3JlYXRlKG51bGwpLGE9e3RvcDpOYU4sYm90dG9tOk5hTixsZWZ0Ok5hTixyaWdodDpOYU59O2xldCByPW51bGw7Zm9yKGNvbnN0W2UsdF1vZiB0aGlzLnN0eWxlLnNwbGl0KCI7IikubWFwKChlPT5lLnNwbGl0KCI6IiwyKSkpKXN3aXRjaChlKXtjYXNlImZvbnQtZmFtaWx5IjppLnR5cGVmYWNlPXN0cmlwUXVvdGVzKHQpO2JyZWFrO2Nhc2UiZm9udC1zaXplIjppLnNpemU9Z2V0TWVhc3VyZW1lbnQodCk7YnJlYWs7Y2FzZSJmb250LXdlaWdodCI6aS53ZWlnaHQ9dDticmVhaztjYXNlImZvbnQtc3R5bGUiOmkucG9zdHVyZT10O2JyZWFrO2Nhc2UibGV0dGVyLXNwYWNpbmciOmkubGV0dGVyU3BhY2luZz1nZXRNZWFzdXJlbWVudCh0KTticmVhaztjYXNlIm1hcmdpbiI6Y29uc3QgZT10LnNwbGl0KC8gXHQvKS5tYXAoKGU9PmdldE1lYXN1cmVtZW50KGUpKSk7c3dpdGNoKGUubGVuZ3RoKXtjYXNlIDE6YS50b3A9YS5ib3R0b209YS5sZWZ0PWEucmlnaHQ9ZVswXTticmVhaztjYXNlIDI6YS50b3A9YS5ib3R0b209ZVswXTthLmxlZnQ9YS5yaWdodD1lWzFdO2JyZWFrO2Nhc2UgMzphLnRvcD1lWzBdO2EuYm90dG9tPWVbMl07YS5sZWZ0PWEucmlnaHQ9ZVsxXTticmVhaztjYXNlIDQ6YS50b3A9ZVswXTthLmxlZnQ9ZVsxXTthLmJvdHRvbT1lWzJdO2EucmlnaHQ9ZVszXX1icmVhaztjYXNlIm1hcmdpbi10b3AiOmEudG9wPWdldE1lYXN1cmVtZW50KHQpO2JyZWFrO2Nhc2UibWFyZ2luLWJvdHRvbSI6YS5ib3R0b209Z2V0TWVhc3VyZW1lbnQodCk7YnJlYWs7Y2FzZSJtYXJnaW4tbGVmdCI6YS5sZWZ0PWdldE1lYXN1cmVtZW50KHQpO2JyZWFrO2Nhc2UibWFyZ2luLXJpZ2h0IjphLnJpZ2h0PWdldE1lYXN1cmVtZW50KHQpO2JyZWFrO2Nhc2UibGluZS1oZWlnaHQiOnI9Z2V0TWVhc3VyZW1lbnQodCl9ZS5wdXNoRGF0YShpLGEscik7aWYodGhpc1tqcl0pZS5hZGRTdHJpbmcodGhpc1tqcl0pO2Vsc2UgZm9yKGNvbnN0IHQgb2YgdGhpc1tvc10oKSkiI3RleHQiIT09dFtSc10/dFt4c10oZSk6ZS5hZGRTdHJpbmcodFtqcl0pO3QmJmUucG9wRm9udCgpfVtWc10oZSl7Y29uc3QgdD1bXTt0aGlzW1pyXT17Y2hpbGRyZW46dH07dGhpc1tLcl0oe30pO2lmKDA9PT10Lmxlbmd0aCYmIXRoaXNbanJdKXJldHVybiBIVE1MUmVzdWx0LkVNUFRZO2xldCBpO2k9dGhpc1tqbl0/dGhpc1tqcl0/dGhpc1tqcl0ucmVwbGFjZUFsbCh6biwiXG4iKTp2b2lkIDA6dGhpc1tqcl18fHZvaWQgMDtyZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOnRoaXNbUnNdLGF0dHJpYnV0ZXM6e2hyZWY6dGhpcy5ocmVmLHN0eWxlOm1hcFN0eWxlKHRoaXMuc3R5bGUsdGhpcyx0aGlzW2puXSl9LGNoaWxkcmVuOnQsdmFsdWU6aX0pfX1jbGFzcyBBIGV4dGVuZHMgWGh0bWxPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwiYSIpO3RoaXMuaHJlZj1maXhVUkwoZS5ocmVmKXx8IiJ9fWNsYXNzIEIgZXh0ZW5kcyBYaHRtbE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJiIil9W3hzXShlKXtlLnB1c2hGb250KHt3ZWlnaHQ6ImJvbGQifSk7c3VwZXJbeHNdKGUpO2UucG9wRm9udCgpfX1jbGFzcyBCb2R5IGV4dGVuZHMgWGh0bWxPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwiYm9keSIpfVtWc10oZSl7Y29uc3QgdD1zdXBlcltWc10oZSkse2h0bWw6aX09dDtpZighaSlyZXR1cm4gSFRNTFJlc3VsdC5FTVBUWTtpLm5hbWU9ImRpdiI7aS5hdHRyaWJ1dGVzLmNsYXNzPVsieGZhUmljaCJdO3JldHVybiB0fX1jbGFzcyBCciBleHRlbmRzIFhodG1sT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsImJyIil9W2pzXSgpe3JldHVybiJcbiJ9W3hzXShlKXtlLmFkZFN0cmluZygiXG4iKX1bVnNdKGUpe3JldHVybiBIVE1MUmVzdWx0LnN1Y2Nlc3Moe25hbWU6ImJyIn0pfX1jbGFzcyBIdG1sIGV4dGVuZHMgWGh0bWxPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwiaHRtbCIpfVtWc10oZSl7Y29uc3QgdD1bXTt0aGlzW1pyXT17Y2hpbGRyZW46dH07dGhpc1tLcl0oe30pO2lmKDA9PT10Lmxlbmd0aClyZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhUmljaCJdLHN0eWxlOnt9fSx2YWx1ZTp0aGlzW2pyXXx8IiJ9KTtpZigxPT09dC5sZW5ndGgpe2NvbnN0IGU9dFswXTtpZihlLmF0dHJpYnV0ZXM/LmNsYXNzLmluY2x1ZGVzKCJ4ZmFSaWNoIikpcmV0dXJuIEhUTUxSZXN1bHQuc3VjY2VzcyhlKX1yZXR1cm4gSFRNTFJlc3VsdC5zdWNjZXNzKHtuYW1lOiJkaXYiLGF0dHJpYnV0ZXM6e2NsYXNzOlsieGZhUmljaCJdLHN0eWxlOnt9fSxjaGlsZHJlbjp0fSl9fWNsYXNzIEkgZXh0ZW5kcyBYaHRtbE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJpIil9W3hzXShlKXtlLnB1c2hGb250KHtwb3N0dXJlOiJpdGFsaWMifSk7c3VwZXJbeHNdKGUpO2UucG9wRm9udCgpfX1jbGFzcyBMaSBleHRlbmRzIFhodG1sT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsImxpIil9fWNsYXNzIE9sIGV4dGVuZHMgWGh0bWxPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwib2wiKX19Y2xhc3MgUCBleHRlbmRzIFhodG1sT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUsInAiKX1beHNdKGUpe3N1cGVyW3hzXShlLCExKTtlLmFkZFN0cmluZygiXG4iKTtlLmFkZFBhcmEoKTtlLnBvcEZvbnQoKX1banNdKCl7cmV0dXJuIHRoaXNbbHNdKClbb3NdKCkuYXQoLTEpPT09dGhpcz9zdXBlcltqc10oKTpzdXBlcltqc10oKSsiXG4ifX1jbGFzcyBTcGFuIGV4dGVuZHMgWGh0bWxPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwic3BhbiIpfX1jbGFzcyBTdWIgZXh0ZW5kcyBYaHRtbE9iamVjdHtjb25zdHJ1Y3RvcihlKXtzdXBlcihlLCJzdWIiKX19Y2xhc3MgU3VwIGV4dGVuZHMgWGh0bWxPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwic3VwIil9fWNsYXNzIFVsIGV4dGVuZHMgWGh0bWxPYmplY3R7Y29uc3RydWN0b3IoZSl7c3VwZXIoZSwidWwiKX19Y2xhc3MgWGh0bWxOYW1lc3BhY2V7c3RhdGljWyRzXShlLHQpe2lmKFhodG1sTmFtZXNwYWNlLmhhc093blByb3BlcnR5KGUpKXJldHVybiBYaHRtbE5hbWVzcGFjZVtlXSh0KX1zdGF0aWMgYShlKXtyZXR1cm4gbmV3IEEoZSl9c3RhdGljIGIoZSl7cmV0dXJuIG5ldyBCKGUpfXN0YXRpYyBib2R5KGUpe3JldHVybiBuZXcgQm9keShlKX1zdGF0aWMgYnIoZSl7cmV0dXJuIG5ldyBCcihlKX1zdGF0aWMgaHRtbChlKXtyZXR1cm4gbmV3IEh0bWwoZSl9c3RhdGljIGkoZSl7cmV0dXJuIG5ldyBJKGUpfXN0YXRpYyBsaShlKXtyZXR1cm4gbmV3IExpKGUpfXN0YXRpYyBvbChlKXtyZXR1cm4gbmV3IE9sKGUpfXN0YXRpYyBwKGUpe3JldHVybiBuZXcgUChlKX1zdGF0aWMgc3BhbihlKXtyZXR1cm4gbmV3IFNwYW4oZSl9c3RhdGljIHN1YihlKXtyZXR1cm4gbmV3IFN1YihlKX1zdGF0aWMgc3VwKGUpe3JldHVybiBuZXcgU3VwKGUpfXN0YXRpYyB1bChlKXtyZXR1cm4gbmV3IFVsKGUpfX1jb25zdCBBbz17Y29uZmlnOkNvbmZpZ05hbWVzcGFjZSxjb25uZWN0aW9uOkNvbm5lY3Rpb25TZXROYW1lc3BhY2UsZGF0YXNldHM6RGF0YXNldHNOYW1lc3BhY2UsbG9jYWxlU2V0OkxvY2FsZVNldE5hbWVzcGFjZSxzaWduYXR1cmU6U2lnbmF0dXJlTmFtZXNwYWNlLHN0eWxlc2hlZXQ6U3R5bGVzaGVldE5hbWVzcGFjZSx0ZW1wbGF0ZTpUZW1wbGF0ZU5hbWVzcGFjZSx4ZHA6WGRwTmFtZXNwYWNlLHhodG1sOlhodG1sTmFtZXNwYWNlfTtjbGFzcyBVbmtub3duTmFtZXNwYWNle2NvbnN0cnVjdG9yKGUpe3RoaXMubmFtZXNwYWNlSWQ9ZX1bJHNdKGUsdCl7cmV0dXJuIG5ldyBYbWxPYmplY3QodGhpcy5uYW1lc3BhY2VJZCxlLHQpfX1jbGFzcyBSb290IGV4dGVuZHMgWEZBT2JqZWN0e2NvbnN0cnVjdG9yKGUpe3N1cGVyKC0xLCJyb290IixPYmplY3QuY3JlYXRlKG51bGwpKTt0aGlzLmVsZW1lbnQ9bnVsbDt0aGlzW1FzXT1lfVtHc10oZSl7dGhpcy5lbGVtZW50PWU7cmV0dXJuITB9W19yXSgpe3N1cGVyW19yXSgpO2lmKHRoaXMuZWxlbWVudC50ZW1wbGF0ZSBpbnN0YW5jZW9mIFRlbXBsYXRlKXt0aGlzW1FzXS5zZXQodnMsdGhpcy5lbGVtZW50KTt0aGlzLmVsZW1lbnQudGVtcGxhdGVbWXNdKHRoaXNbUXNdKTt0aGlzLmVsZW1lbnQudGVtcGxhdGVbUXNdPXRoaXNbUXNdfX19Y2xhc3MgRW1wdHkgZXh0ZW5kcyBYRkFPYmplY3R7Y29uc3RydWN0b3IoKXtzdXBlcigtMSwiIixPYmplY3QuY3JlYXRlKG51bGwpKX1bR3NdKGUpe3JldHVybiExfX1jbGFzcyBCdWlsZGVye2NvbnN0cnVjdG9yKGU9bnVsbCl7dGhpcy5fbmFtZXNwYWNlU3RhY2s9W107dGhpcy5fbnNBZ25vc3RpY0xldmVsPTA7dGhpcy5fbmFtZXNwYWNlUHJlZml4ZXM9bmV3IE1hcDt0aGlzLl9uYW1lc3BhY2VzPW5ldyBNYXA7dGhpcy5fbmV4dE5zSWQ9TWF0aC5tYXgoLi4uT2JqZWN0LnZhbHVlcyhBbikubWFwKCgoe2lkOmV9KT0+ZSkpKTt0aGlzLl9jdXJyZW50TmFtZXNwYWNlPWV8fG5ldyBVbmtub3duTmFtZXNwYWNlKCsrdGhpcy5fbmV4dE5zSWQpfWJ1aWxkUm9vdChlKXtyZXR1cm4gbmV3IFJvb3QoZSl9YnVpbGQoe25zUHJlZml4OmUsbmFtZTp0LGF0dHJpYnV0ZXM6aSxuYW1lc3BhY2U6YSxwcmVmaXhlczpyfSl7Y29uc3Qgcz1udWxsIT09YTtpZihzKXt0aGlzLl9uYW1lc3BhY2VTdGFjay5wdXNoKHRoaXMuX2N1cnJlbnROYW1lc3BhY2UpO3RoaXMuX2N1cnJlbnROYW1lc3BhY2U9dGhpcy5fc2VhcmNoTmFtZXNwYWNlKGEpfXImJnRoaXMuX2FkZE5hbWVzcGFjZVByZWZpeChyKTtpZihpLmhhc093blByb3BlcnR5KE5zKSl7Y29uc3QgZT1Bby5kYXRhc2V0cyx0PWlbTnNdO2xldCBhPW51bGw7Zm9yKGNvbnN0W2kscl1vZiBPYmplY3QuZW50cmllcyh0KSl7aWYodGhpcy5fZ2V0TmFtZXNwYWNlVG9Vc2UoaSk9PT1lKXthPXt4ZmE6cn07YnJlYWt9fWE/aVtOc109YTpkZWxldGUgaVtOc119Y29uc3Qgbj10aGlzLl9nZXROYW1lc3BhY2VUb1VzZShlKSxvPW4/Llskc10odCxpKXx8bmV3IEVtcHR5O29beXNdKCkmJnRoaXMuX25zQWdub3N0aWNMZXZlbCsrOyhzfHxyfHxvW3lzXSgpKSYmKG9bT3JdPXtoYXNOYW1lc3BhY2U6cyxwcmVmaXhlczpyLG5zQWdub3N0aWM6b1t5c10oKX0pO3JldHVybiBvfWlzTnNBZ25vc3RpYygpe3JldHVybiB0aGlzLl9uc0Fnbm9zdGljTGV2ZWw+MH1fc2VhcmNoTmFtZXNwYWNlKGUpe2xldCB0PXRoaXMuX25hbWVzcGFjZXMuZ2V0KGUpO2lmKHQpcmV0dXJuIHQ7Zm9yKGNvbnN0W2kse2NoZWNrOmF9XW9mIE9iamVjdC5lbnRyaWVzKEFuKSlpZihhKGUpKXt0PUFvW2ldO2lmKHQpe3RoaXMuX25hbWVzcGFjZXMuc2V0KGUsdCk7cmV0dXJuIHR9YnJlYWt9dD1uZXcgVW5rbm93bk5hbWVzcGFjZSgrK3RoaXMuX25leHROc0lkKTt0aGlzLl9uYW1lc3BhY2VzLnNldChlLHQpO3JldHVybiB0fV9hZGROYW1lc3BhY2VQcmVmaXgoZSl7Zm9yKGNvbnN0e3ByZWZpeDp0LHZhbHVlOml9b2YgZSl7Y29uc3QgZT10aGlzLl9zZWFyY2hOYW1lc3BhY2UoaSk7bGV0IGE9dGhpcy5fbmFtZXNwYWNlUHJlZml4ZXMuZ2V0KHQpO2lmKCFhKXthPVtdO3RoaXMuX25hbWVzcGFjZVByZWZpeGVzLnNldCh0LGEpfWEucHVzaChlKX19X2dldE5hbWVzcGFjZVRvVXNlKGUpe2lmKCFlKXJldHVybiB0aGlzLl9jdXJyZW50TmFtZXNwYWNlO2NvbnN0IHQ9dGhpcy5fbmFtZXNwYWNlUHJlZml4ZXMuZ2V0KGUpO2lmKHQ/Lmxlbmd0aD4wKXJldHVybiB0LmF0KC0xKTt3YXJuKGBVbmtub3duIG5hbWVzcGFjZSBwcmVmaXg6ICR7ZX0uYCk7cmV0dXJuIG51bGx9Y2xlYW4oZSl7Y29uc3R7aGFzTmFtZXNwYWNlOnQscHJlZml4ZXM6aSxuc0Fnbm9zdGljOmF9PWU7dCYmKHRoaXMuX2N1cnJlbnROYW1lc3BhY2U9dGhpcy5fbmFtZXNwYWNlU3RhY2sucG9wKCkpO2kmJmkuZm9yRWFjaCgoKHtwcmVmaXg6ZX0pPT57dGhpcy5fbmFtZXNwYWNlUHJlZml4ZXMuZ2V0KGUpLnBvcCgpfSkpO2EmJnRoaXMuX25zQWdub3N0aWNMZXZlbC0tfX1jbGFzcyBYRkFQYXJzZXIgZXh0ZW5kcyBYTUxQYXJzZXJCYXNle2NvbnN0cnVjdG9yKGU9bnVsbCx0PSExKXtzdXBlcigpO3RoaXMuX2J1aWxkZXI9bmV3IEJ1aWxkZXIoZSk7dGhpcy5fc3RhY2s9W107dGhpcy5fZ2xvYmFsRGF0YT17dXNlZFR5cGVmYWNlczpuZXcgU2V0fTt0aGlzLl9pZHM9bmV3IE1hcDt0aGlzLl9jdXJyZW50PXRoaXMuX2J1aWxkZXIuYnVpbGRSb290KHRoaXMuX2lkcyk7dGhpcy5fZXJyb3JDb2RlPURyO3RoaXMuX3doaXRlUmVnZXg9L15ccyskLzt0aGlzLl9uYnNwcz0vXHhhMCsvZzt0aGlzLl9yaWNoVGV4dD10fXBhcnNlKGUpe3RoaXMucGFyc2VYbWwoZSk7aWYodGhpcy5fZXJyb3JDb2RlPT09RHIpe3RoaXMuX2N1cnJlbnRbX3JdKCk7cmV0dXJuIHRoaXMuX2N1cnJlbnQuZWxlbWVudH19b25UZXh0KGUpe2U9ZS5yZXBsYWNlKHRoaXMuX25ic3BzLChlPT5lLnNsaWNlKDEpKyIgIikpO3RoaXMuX3JpY2hUZXh0fHx0aGlzLl9jdXJyZW50W0pyXSgpP3RoaXMuX2N1cnJlbnRbVXNdKGUsdGhpcy5fcmljaFRleHQpOnRoaXMuX3doaXRlUmVnZXgudGVzdChlKXx8dGhpcy5fY3VycmVudFtVc10oZS50cmltKCkpfW9uQ2RhdGEoZSl7dGhpcy5fY3VycmVudFtVc10oZSl9X21rQXR0cmlidXRlcyhlLHQpe2xldCBpPW51bGwsYT1udWxsO2NvbnN0IHI9T2JqZWN0LmNyZWF0ZSh7fSk7Zm9yKGNvbnN0e25hbWU6cyx2YWx1ZTpufW9mIGUpaWYoInhtbG5zIj09PXMpaT93YXJuKGBYRkEgLSBtdWx0aXBsZSBuYW1lc3BhY2UgZGVmaW5pdGlvbiBpbiA8JHt0fT5gKTppPW47ZWxzZSBpZihzLnN0YXJ0c1dpdGgoInhtbG5zOiIpKXtjb25zdCBlPXMuc3Vic3RyaW5nKDYpO2F8fChhPVtdKTthLnB1c2goe3ByZWZpeDplLHZhbHVlOm59KX1lbHNle2NvbnN0IGU9cy5pbmRleE9mKCI6Iik7aWYoLTE9PT1lKXJbc109bjtlbHNle2xldCB0PXJbTnNdO3R8fCh0PXJbTnNdPU9iamVjdC5jcmVhdGUobnVsbCkpO2NvbnN0W2ksYV09W3Muc2xpY2UoMCxlKSxzLnNsaWNlKGUrMSldOyh0W2ldfHw9T2JqZWN0LmNyZWF0ZShudWxsKSlbYV09bn19cmV0dXJuW2ksYSxyXX1fZ2V0TmFtZUFuZFByZWZpeChlLHQpe2NvbnN0IGk9ZS5pbmRleE9mKCI6Iik7cmV0dXJuLTE9PT1pP1tlLG51bGxdOltlLnN1YnN0cmluZyhpKzEpLHQ/IiI6ZS5zdWJzdHJpbmcoMCxpKV19b25CZWdpbkVsZW1lbnQoZSx0LGkpe2NvbnN0W2EscixzXT10aGlzLl9ta0F0dHJpYnV0ZXModCxlKSxbbixvXT10aGlzLl9nZXROYW1lQW5kUHJlZml4KGUsdGhpcy5fYnVpbGRlci5pc05zQWdub3N0aWMoKSksZz10aGlzLl9idWlsZGVyLmJ1aWxkKHtuc1ByZWZpeDpvLG5hbWU6bixhdHRyaWJ1dGVzOnMsbmFtZXNwYWNlOmEscHJlZml4ZXM6cn0pO2dbQ3NdPXRoaXMuX2dsb2JhbERhdGE7aWYoaSl7Z1tfcl0oKTt0aGlzLl9jdXJyZW50W0dzXShnKSYmZ1tUc10odGhpcy5faWRzKTtnW1RyXSh0aGlzLl9idWlsZGVyKX1lbHNle3RoaXMuX3N0YWNrLnB1c2godGhpcy5fY3VycmVudCk7dGhpcy5fY3VycmVudD1nfX1vbkVuZEVsZW1lbnQoZSl7Y29uc3QgdD10aGlzLl9jdXJyZW50O2lmKHRbZHNdKCkmJiJzdHJpbmciPT10eXBlb2YgdFtqcl0pe2NvbnN0IGU9bmV3IFhGQVBhcnNlcjtlLl9nbG9iYWxEYXRhPXRoaXMuX2dsb2JhbERhdGE7Y29uc3QgaT1lLnBhcnNlKHRbanJdKTt0W2pyXT1udWxsO3RbR3NdKGkpfXRbX3JdKCk7dGhpcy5fY3VycmVudD10aGlzLl9zdGFjay5wb3AoKTt0aGlzLl9jdXJyZW50W0dzXSh0KSYmdFtUc10odGhpcy5faWRzKTt0W1RyXSh0aGlzLl9idWlsZGVyKX1vbkVycm9yKGUpe3RoaXMuX2Vycm9yQ29kZT1lfX1jbGFzcyBYRkFGYWN0b3J5e2NvbnN0cnVjdG9yKGUpe3RyeXt0aGlzLnJvb3Q9KG5ldyBYRkFQYXJzZXIpLnBhcnNlKFhGQUZhY3RvcnkuX2NyZWF0ZURvY3VtZW50KGUpKTtjb25zdCB0PW5ldyBCaW5kZXIodGhpcy5yb290KTt0aGlzLmZvcm09dC5iaW5kKCk7dGhpcy5kYXRhSGFuZGxlcj1uZXcgRGF0YUhhbmRsZXIodGhpcy5yb290LHQuZ2V0RGF0YSgpKTt0aGlzLmZvcm1bQ3NdLnRlbXBsYXRlPXRoaXMuZm9ybX1jYXRjaChlKXt3YXJuKGBYRkEgLSBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgcGFyc2luZyBhbmQgYmluZGluZzogJHtlfWApfX1pc1ZhbGlkKCl7cmV0dXJuIHRoaXMucm9vdCYmdGhpcy5mb3JtfV9jcmVhdGVQYWdlc0hlbHBlcigpe2NvbnN0IGU9dGhpcy5mb3JtW1hzXSgpO3JldHVybiBuZXcgUHJvbWlzZSgoKHQsaSk9Pntjb25zdCBuZXh0SXRlcmF0aW9uPSgpPT57dHJ5e2NvbnN0IGk9ZS5uZXh0KCk7aS5kb25lP3QoaS52YWx1ZSk6c2V0VGltZW91dChuZXh0SXRlcmF0aW9uLDApfWNhdGNoKGUpe2koZSl9fTtzZXRUaW1lb3V0KG5leHRJdGVyYXRpb24sMCl9KSl9YXN5bmMgX2NyZWF0ZVBhZ2VzKCl7dHJ5e3RoaXMucGFnZXM9YXdhaXQgdGhpcy5fY3JlYXRlUGFnZXNIZWxwZXIoKTt0aGlzLmRpbXM9dGhpcy5wYWdlcy5jaGlsZHJlbi5tYXAoKGU9Pntjb25zdHt3aWR0aDp0LGhlaWdodDppfT1lLmF0dHJpYnV0ZXMuc3R5bGU7cmV0dXJuWzAsMCxwYXJzZUludCh0KSxwYXJzZUludChpKV19KSl9Y2F0Y2goZSl7d2FybihgWEZBIC0gYW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIGxheW91dDogJHtlfWApfX1nZXRCb3VuZGluZ0JveChlKXtyZXR1cm4gdGhpcy5kaW1zW2VdfWFzeW5jIGdldE51bVBhZ2VzKCl7dGhpcy5wYWdlc3x8YXdhaXQgdGhpcy5fY3JlYXRlUGFnZXMoKTtyZXR1cm4gdGhpcy5kaW1zLmxlbmd0aH1zZXRJbWFnZXMoZSl7dGhpcy5mb3JtW0NzXS5pbWFnZXM9ZX1zZXRGb250cyhlKXt0aGlzLmZvcm1bQ3NdLmZvbnRGaW5kZXI9bmV3IEZvbnRGaW5kZXIoZSk7Y29uc3QgdD1bXTtmb3IobGV0IGUgb2YgdGhpcy5mb3JtW0NzXS51c2VkVHlwZWZhY2VzKXtlPXN0cmlwUXVvdGVzKGUpO3RoaXMuZm9ybVtDc10uZm9udEZpbmRlci5maW5kKGUpfHx0LnB1c2goZSl9cmV0dXJuIHQubGVuZ3RoPjA/dDpudWxsfWFwcGVuZEZvbnRzKGUsdCl7dGhpcy5mb3JtW0NzXS5mb250RmluZGVyLmFkZChlLHQpfWFzeW5jIGdldFBhZ2VzKCl7dGhpcy5wYWdlc3x8YXdhaXQgdGhpcy5fY3JlYXRlUGFnZXMoKTtjb25zdCBlPXRoaXMucGFnZXM7dGhpcy5wYWdlcz1udWxsO3JldHVybiBlfXNlcmlhbGl6ZURhdGEoZSl7cmV0dXJuIHRoaXMuZGF0YUhhbmRsZXIuc2VyaWFsaXplKGUpfXN0YXRpYyBfY3JlYXRlRG9jdW1lbnQoZSl7cmV0dXJuIGVbIi94ZHA6eGRwIl0/T2JqZWN0LnZhbHVlcyhlKS5qb2luKCIiKTplWyJ4ZHA6eGRwIl19c3RhdGljIGdldFJpY2hUZXh0QXNIdG1sKGUpe2lmKCFlfHwic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIG51bGw7dHJ5e2xldCB0PW5ldyBYRkFQYXJzZXIoWGh0bWxOYW1lc3BhY2UsITApLnBhcnNlKGUpO2lmKCFbImJvZHkiLCJ4aHRtbCJdLmluY2x1ZGVzKHRbUnNdKSl7Y29uc3QgZT1YaHRtbE5hbWVzcGFjZS5ib2R5KHt9KTtlW1lyXSh0KTt0PWV9Y29uc3QgaT10W1ZzXSgpO2lmKCFpLnN1Y2Nlc3MpcmV0dXJuIG51bGw7Y29uc3R7aHRtbDphfT1pLHthdHRyaWJ1dGVzOnJ9PWE7aWYocil7ci5jbGFzcyYmKHIuY2xhc3M9ci5jbGFzcy5maWx0ZXIoKGU9PiFlLnN0YXJ0c1dpdGgoInhmYSIpKSkpO3IuZGlyPSJhdXRvIn1yZXR1cm57aHRtbDphLHN0cjp0W2pzXSgpfX1jYXRjaChlKXt3YXJuKGBYRkEgLSBhbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgcGFyc2luZyBvZiByaWNoIHRleHQ6ICR7ZX1gKX1yZXR1cm4gbnVsbH19Y2xhc3MgQW5ub3RhdGlvbkZhY3Rvcnl7c3RhdGljIGNyZWF0ZUdsb2JhbHMoZSl7cmV0dXJuIFByb21pc2UuYWxsKFtlLmVuc3VyZUNhdGFsb2coImFjcm9Gb3JtIiksZS5lbnN1cmVEb2MoInhmYURhdGFzZXRzIiksZS5lbnN1cmVDYXRhbG9nKCJzdHJ1Y3RUcmVlUm9vdCIpLGUuZW5zdXJlQ2F0YWxvZygiYmFzZVVybCIpLGUuZW5zdXJlQ2F0YWxvZygiYXR0YWNobWVudHMiKV0pLnRoZW4oKChbdCxpLGEscixzXSk9Pih7cGRmTWFuYWdlcjplLGFjcm9Gb3JtOnQgaW5zdGFuY2VvZiBEaWN0P3Q6RGljdC5lbXB0eSx4ZmFEYXRhc2V0czppLHN0cnVjdFRyZWVSb290OmEsYmFzZVVybDpyLGF0dGFjaG1lbnRzOnN9KSksKGU9Pnt3YXJuKGBjcmVhdGVHbG9iYWxzOiAiJHtlfSIuYCk7cmV0dXJuIG51bGx9KSl9c3RhdGljIGFzeW5jIGNyZWF0ZShlLHQsaSxhLHIscyxuKXtjb25zdCBvPXI/YXdhaXQgdGhpcy5fZ2V0UGFnZUluZGV4KGUsdCxpLnBkZk1hbmFnZXIpOm51bGw7cmV0dXJuIGkucGRmTWFuYWdlci5lbnN1cmUodGhpcywiX2NyZWF0ZSIsW2UsdCxpLGEscixzLG8sbl0pfXN0YXRpYyBfY3JlYXRlKGUsdCxpLGEscj0hMSxzPW51bGwsbj1udWxsLG89bnVsbCl7Y29uc3QgZz1lLmZldGNoSWZSZWYodCk7aWYoIShnIGluc3RhbmNlb2YgRGljdCkpcmV0dXJuO2NvbnN0e2Fjcm9Gb3JtOmMscGRmTWFuYWdlcjpsfT1pLGg9dCBpbnN0YW5jZW9mIFJlZj90LnRvU3RyaW5nKCk6YGFubm90XyR7YS5jcmVhdGVPYmpJZCgpfWA7bGV0IEM9Zy5nZXQoIlN1YnR5cGUiKTtDPUMgaW5zdGFuY2VvZiBOYW1lP0MubmFtZTpudWxsO2NvbnN0IFE9e3hyZWY6ZSxyZWY6dCxkaWN0Omcsc3VidHlwZTpDLGlkOmgsYW5ub3RhdGlvbkdsb2JhbHM6aSxjb2xsZWN0RmllbGRzOnIsb3JwaGFuRmllbGRzOnMsbmVlZEFwcGVhcmFuY2VzOiFyJiYhMD09PWMuZ2V0KCJOZWVkQXBwZWFyYW5jZXMiKSxwYWdlSW5kZXg6bixldmFsdWF0b3JPcHRpb25zOmwuZXZhbHVhdG9yT3B0aW9ucyxwYWdlUmVmOm99O3N3aXRjaChDKXtjYXNlIkxpbmsiOnJldHVybiBuZXcgTGlua0Fubm90YXRpb24oUSk7Y2FzZSJUZXh0IjpyZXR1cm4gbmV3IFRleHRBbm5vdGF0aW9uKFEpO2Nhc2UiV2lkZ2V0IjpsZXQgZT1nZXRJbmhlcml0YWJsZVByb3BlcnR5KHtkaWN0Omcsa2V5OiJGVCJ9KTtlPWUgaW5zdGFuY2VvZiBOYW1lP2UubmFtZTpudWxsO3N3aXRjaChlKXtjYXNlIlR4IjpyZXR1cm4gbmV3IFRleHRXaWRnZXRBbm5vdGF0aW9uKFEpO2Nhc2UiQnRuIjpyZXR1cm4gbmV3IEJ1dHRvbldpZGdldEFubm90YXRpb24oUSk7Y2FzZSJDaCI6cmV0dXJuIG5ldyBDaG9pY2VXaWRnZXRBbm5vdGF0aW9uKFEpO2Nhc2UiU2lnIjpyZXR1cm4gbmV3IFNpZ25hdHVyZVdpZGdldEFubm90YXRpb24oUSl9d2FybihgVW5pbXBsZW1lbnRlZCB3aWRnZXQgZmllbGQgdHlwZSAiJHtlfSIsIGZhbGxpbmcgYmFjayB0byBiYXNlIGZpZWxkIHR5cGUuYCk7cmV0dXJuIG5ldyBXaWRnZXRBbm5vdGF0aW9uKFEpO2Nhc2UiUG9wdXAiOnJldHVybiBuZXcgUG9wdXBBbm5vdGF0aW9uKFEpO2Nhc2UiRnJlZVRleHQiOnJldHVybiBuZXcgRnJlZVRleHRBbm5vdGF0aW9uKFEpO2Nhc2UiTGluZSI6cmV0dXJuIG5ldyBMaW5lQW5ub3RhdGlvbihRKTtjYXNlIlNxdWFyZSI6cmV0dXJuIG5ldyBTcXVhcmVBbm5vdGF0aW9uKFEpO2Nhc2UiQ2lyY2xlIjpyZXR1cm4gbmV3IENpcmNsZUFubm90YXRpb24oUSk7Y2FzZSJQb2x5TGluZSI6cmV0dXJuIG5ldyBQb2x5bGluZUFubm90YXRpb24oUSk7Y2FzZSJQb2x5Z29uIjpyZXR1cm4gbmV3IFBvbHlnb25Bbm5vdGF0aW9uKFEpO2Nhc2UiQ2FyZXQiOnJldHVybiBuZXcgQ2FyZXRBbm5vdGF0aW9uKFEpO2Nhc2UiSW5rIjpyZXR1cm4gbmV3IElua0Fubm90YXRpb24oUSk7Y2FzZSJIaWdobGlnaHQiOnJldHVybiBuZXcgSGlnaGxpZ2h0QW5ub3RhdGlvbihRKTtjYXNlIlVuZGVybGluZSI6cmV0dXJuIG5ldyBVbmRlcmxpbmVBbm5vdGF0aW9uKFEpO2Nhc2UiU3F1aWdnbHkiOnJldHVybiBuZXcgU3F1aWdnbHlBbm5vdGF0aW9uKFEpO2Nhc2UiU3RyaWtlT3V0IjpyZXR1cm4gbmV3IFN0cmlrZU91dEFubm90YXRpb24oUSk7Y2FzZSJTdGFtcCI6cmV0dXJuIG5ldyBTdGFtcEFubm90YXRpb24oUSk7Y2FzZSJGaWxlQXR0YWNobWVudCI6cmV0dXJuIG5ldyBGaWxlQXR0YWNobWVudEFubm90YXRpb24oUSk7ZGVmYXVsdDpyfHx3YXJuKEM/YFVuaW1wbGVtZW50ZWQgYW5ub3RhdGlvbiB0eXBlICIke0N9IiwgZmFsbGluZyBiYWNrIHRvIGJhc2UgYW5ub3RhdGlvbi5gOiJBbm5vdGF0aW9uIGlzIG1pc3NpbmcgdGhlIHJlcXVpcmVkIC9TdWJ0eXBlLiIpO3JldHVybiBuZXcgQW5ub3RhdGlvbihRKX19c3RhdGljIGFzeW5jIF9nZXRQYWdlSW5kZXgoZSx0LGkpe3RyeXtjb25zdCBhPWF3YWl0IGUuZmV0Y2hJZlJlZkFzeW5jKHQpO2lmKCEoYSBpbnN0YW5jZW9mIERpY3QpKXJldHVybi0xO2NvbnN0IHI9YS5nZXRSYXcoIlAiKTtpZihyIGluc3RhbmNlb2YgUmVmKXRyeXtyZXR1cm4gYXdhaXQgaS5lbnN1cmVDYXRhbG9nKCJnZXRQYWdlSW5kZXgiLFtyXSl9Y2F0Y2goZSl7aW5mbyhgX2dldFBhZ2VJbmRleCAtLSBub3QgYSB2YWxpZCBwYWdlIHJlZmVyZW5jZTogIiR7ZX0iLmApfWlmKGEuaGFzKCJLaWRzIikpcmV0dXJuLTE7Y29uc3Qgcz1hd2FpdCBpLmVuc3VyZURvYygibnVtUGFnZXMiKTtmb3IobGV0IGU9MDtlPHM7ZSsrKXtjb25zdCBhPWF3YWl0IGkuZ2V0UGFnZShlKSxyPWF3YWl0IGkuZW5zdXJlKGEsImFubm90YXRpb25zIik7Zm9yKGNvbnN0IGkgb2YgcilpZihpIGluc3RhbmNlb2YgUmVmJiZpc1JlZnNFcXVhbChpLHQpKXJldHVybiBlfX1jYXRjaChlKXt3YXJuKGBfZ2V0UGFnZUluZGV4OiAiJHtlfSIuYCl9cmV0dXJuLTF9c3RhdGljIGdlbmVyYXRlSW1hZ2VzKGUsdCxpKXtpZighaSl7d2FybigiZ2VuZXJhdGVJbWFnZXM6IE9mZnNjcmVlbkNhbnZhcyBpcyBub3Qgc3VwcG9ydGVkLCBjYW5ub3Qgc2F2ZSBvciBwcmludCBzb21lIGFubm90YXRpb25zIHdpdGggaW1hZ2VzLiIpO3JldHVybiBudWxsfWxldCBhO2Zvcihjb25zdHtiaXRtYXBJZDppLGJpdG1hcDpyfW9mIGUpaWYocil7YXx8PW5ldyBNYXA7YS5zZXQoaSxTdGFtcEFubm90YXRpb24uY3JlYXRlSW1hZ2Uocix0KSl9cmV0dXJuIGF9c3RhdGljIGFzeW5jIHNhdmVOZXdBbm5vdGF0aW9ucyhlLHQsaSxhLHIpe2NvbnN0IHM9ZS54cmVmO2xldCBuO2NvbnN0IG89W10se2lzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkOmd9PWUub3B0aW9ucztmb3IoY29uc3QgYyBvZiBpKWlmKCFjLmRlbGV0ZWQpc3dpdGNoKGMuYW5ub3RhdGlvblR5cGUpe2Nhc2UgZjppZighbil7Y29uc3QgZT1uZXcgRGljdChzKTtlLnNldCgiQmFzZUZvbnQiLE5hbWUuZ2V0KCJIZWx2ZXRpY2EiKSk7ZS5zZXQoIlR5cGUiLE5hbWUuZ2V0KCJGb250IikpO2Uuc2V0KCJTdWJ0eXBlIixOYW1lLmdldCgiVHlwZTEiKSk7ZS5zZXQoIkVuY29kaW5nIixOYW1lLmdldCgiV2luQW5zaUVuY29kaW5nIikpO249cy5nZXROZXdUZW1wb3JhcnlSZWYoKTtyLnB1dChuLHtkYXRhOmV9KX1vLnB1c2goRnJlZVRleHRBbm5vdGF0aW9uLmNyZWF0ZU5ld0Fubm90YXRpb24ocyxjLHIse2V2YWx1YXRvcjplLHRhc2s6dCxiYXNlRm9udFJlZjpufSkpO2JyZWFrO2Nhc2UgcDpjLnF1YWRQb2ludHM/by5wdXNoKEhpZ2hsaWdodEFubm90YXRpb24uY3JlYXRlTmV3QW5ub3RhdGlvbihzLGMscikpOm8ucHVzaChJbmtBbm5vdGF0aW9uLmNyZWF0ZU5ld0Fubm90YXRpb24ocyxjLHIpKTticmVhaztjYXNlIHk6by5wdXNoKElua0Fubm90YXRpb24uY3JlYXRlTmV3QW5ub3RhdGlvbihzLGMscikpO2JyZWFrO2Nhc2UgbTpjb25zdCBpPWc/YXdhaXQoYT8uZ2V0KGMuYml0bWFwSWQpKTpudWxsO2lmKGk/LmltYWdlU3RyZWFtKXtjb25zdHtpbWFnZVN0cmVhbTplLHNtYXNrU3RyZWFtOnR9PWk7aWYodCl7Y29uc3QgaT1zLmdldE5ld1RlbXBvcmFyeVJlZigpO3IucHV0KGkse2RhdGE6dH0pO2UuZGljdC5zZXQoIlNNYXNrIixpKX1jb25zdCBhPWkuaW1hZ2VSZWY9cy5nZXROZXdUZW1wb3JhcnlSZWYoKTtyLnB1dChhLHtkYXRhOmV9KTtpLmltYWdlU3RyZWFtPWkuc21hc2tTdHJlYW09bnVsbH1vLnB1c2goU3RhbXBBbm5vdGF0aW9uLmNyZWF0ZU5ld0Fubm90YXRpb24ocyxjLHIse2ltYWdlOml9KSl9cmV0dXJue2Fubm90YXRpb25zOmF3YWl0IFByb21pc2UuYWxsKG8pfX1zdGF0aWMgYXN5bmMgcHJpbnROZXdBbm5vdGF0aW9ucyhlLHQsaSxhLHIpe2lmKCFhKXJldHVybiBudWxsO2NvbnN0e29wdGlvbnM6cyx4cmVmOm59PXQsbz1bXTtmb3IoY29uc3QgZyBvZiBhKWlmKCFnLmRlbGV0ZWQpc3dpdGNoKGcuYW5ub3RhdGlvblR5cGUpe2Nhc2UgZjpvLnB1c2goRnJlZVRleHRBbm5vdGF0aW9uLmNyZWF0ZU5ld1ByaW50QW5ub3RhdGlvbihlLG4sZyx7ZXZhbHVhdG9yOnQsdGFzazppLGV2YWx1YXRvck9wdGlvbnM6c30pKTticmVhaztjYXNlIHA6Zy5xdWFkUG9pbnRzP28ucHVzaChIaWdobGlnaHRBbm5vdGF0aW9uLmNyZWF0ZU5ld1ByaW50QW5ub3RhdGlvbihlLG4sZyx7ZXZhbHVhdG9yT3B0aW9uczpzfSkpOm8ucHVzaChJbmtBbm5vdGF0aW9uLmNyZWF0ZU5ld1ByaW50QW5ub3RhdGlvbihlLG4sZyx7ZXZhbHVhdG9yT3B0aW9uczpzfSkpO2JyZWFrO2Nhc2UgeTpvLnB1c2goSW5rQW5ub3RhdGlvbi5jcmVhdGVOZXdQcmludEFubm90YXRpb24oZSxuLGcse2V2YWx1YXRvck9wdGlvbnM6c30pKTticmVhaztjYXNlIG06Y29uc3QgYT1zLmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkP2F3YWl0KHI/LmdldChnLmJpdG1hcElkKSk6bnVsbDtpZihhPy5pbWFnZVN0cmVhbSl7Y29uc3R7aW1hZ2VTdHJlYW06ZSxzbWFza1N0cmVhbTp0fT1hO3QmJmUuZGljdC5zZXQoIlNNYXNrIix0KTthLmltYWdlUmVmPW5ldyBKcGVnU3RyZWFtKGUsZS5sZW5ndGgpO2EuaW1hZ2VTdHJlYW09YS5zbWFza1N0cmVhbT1udWxsfW8ucHVzaChTdGFtcEFubm90YXRpb24uY3JlYXRlTmV3UHJpbnRBbm5vdGF0aW9uKGUsbixnLHtpbWFnZTphLGV2YWx1YXRvck9wdGlvbnM6c30pKX1yZXR1cm4gUHJvbWlzZS5hbGwobyl9fWZ1bmN0aW9uIGdldFJnYkNvbG9yKGUsdD1uZXcgVWludDhDbGFtcGVkQXJyYXkoMykpe2lmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybiB0O2NvbnN0IGk9dHx8bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMpO3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBudWxsO2Nhc2UgMTpDb2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheS5nZXRSZ2JJdGVtKGUsMCxpLDApO3JldHVybiBpO2Nhc2UgMzpDb2xvclNwYWNlLnNpbmdsZXRvbnMucmdiLmdldFJnYkl0ZW0oZSwwLGksMCk7cmV0dXJuIGk7Y2FzZSA0OkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5jbXlrLmdldFJnYkl0ZW0oZSwwLGksMCk7cmV0dXJuIGk7ZGVmYXVsdDpyZXR1cm4gdH19ZnVuY3Rpb24gZ2V0UGRmQ29sb3JBcnJheShlKXtyZXR1cm4gQXJyYXkuZnJvbShlLChlPT5lLzI1NSkpfWZ1bmN0aW9uIGdldFF1YWRQb2ludHMoZSx0KXtjb25zdCBpPWUuZ2V0QXJyYXkoIlF1YWRQb2ludHMiKTtpZighaXNOdW1iZXJBcnJheShpLG51bGwpfHwwPT09aS5sZW5ndGh8fGkubGVuZ3RoJTg+MClyZXR1cm4gbnVsbDtjb25zdCBhPW5ldyBGbG9hdDMyQXJyYXkoaS5sZW5ndGgpO2ZvcihsZXQgZT0wLHI9aS5sZW5ndGg7ZTxyO2UrPTgpe2NvbnN0W3IscyxuLG8sZyxjLGwsaF09aS5zbGljZShlLGUrOCksQz1NYXRoLm1pbihyLG4sZyxsKSxRPU1hdGgubWF4KHIsbixnLGwpLEU9TWF0aC5taW4ocyxvLGMsaCksdT1NYXRoLm1heChzLG8sYyxoKTtpZihudWxsIT09dCYmKEM8dFswXXx8UT50WzJdfHxFPHRbMV18fHU+dFszXSkpcmV0dXJuIG51bGw7YS5zZXQoW0MsdSxRLHUsQyxFLFEsRV0sZSl9cmV0dXJuIGF9ZnVuY3Rpb24gZ2V0VHJhbnNmb3JtTWF0cml4KGUsdCxpKXtjb25zdFthLHIscyxuXT1VdGlsLmdldEF4aWFsQWxpZ25lZEJvdW5kaW5nQm94KHQsaSk7aWYoYT09PXN8fHI9PT1uKXJldHVyblsxLDAsMCwxLGVbMF0sZVsxXV07Y29uc3Qgbz0oZVsyXS1lWzBdKS8ocy1hKSxnPShlWzNdLWVbMV0pLyhuLXIpO3JldHVybltvLDAsMCxnLGVbMF0tYSpvLGVbMV0tcipnXX1jbGFzcyBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe2NvbnN0e2RpY3Q6dCx4cmVmOmksYW5ub3RhdGlvbkdsb2JhbHM6YSxyZWY6cixvcnBoYW5GaWVsZHM6c309ZSxuPXM/LmdldChyKTtuJiZ0LnNldCgiUGFyZW50IixuKTt0aGlzLnNldFRpdGxlKHQuZ2V0KCJUIikpO3RoaXMuc2V0Q29udGVudHModC5nZXQoIkNvbnRlbnRzIikpO3RoaXMuc2V0TW9kaWZpY2F0aW9uRGF0ZSh0LmdldCgiTSIpKTt0aGlzLnNldEZsYWdzKHQuZ2V0KCJGIikpO3RoaXMuc2V0UmVjdGFuZ2xlKHQuZ2V0QXJyYXkoIlJlY3QiKSk7dGhpcy5zZXRDb2xvcih0LmdldEFycmF5KCJDIikpO3RoaXMuc2V0Qm9yZGVyU3R5bGUodCk7dGhpcy5zZXRBcHBlYXJhbmNlKHQpO3RoaXMuc2V0T3B0aW9uYWxDb250ZW50KHQpO2NvbnN0IG89dC5nZXQoIk1LIik7dGhpcy5zZXRCb3JkZXJBbmRCYWNrZ3JvdW5kQ29sb3JzKG8pO3RoaXMuc2V0Um90YXRpb24obyx0KTt0aGlzLnJlZj1lLnJlZiBpbnN0YW5jZW9mIFJlZj9lLnJlZjpudWxsO3RoaXMuX3N0cmVhbXM9W107dGhpcy5hcHBlYXJhbmNlJiZ0aGlzLl9zdHJlYW1zLnB1c2godGhpcy5hcHBlYXJhbmNlKTtjb25zdCBnPSEhKHRoaXMuZmxhZ3MmaUEpLGM9ISEodGhpcy5mbGFncyZhQSk7dGhpcy5kYXRhPXthbm5vdGF0aW9uRmxhZ3M6dGhpcy5mbGFncyxib3JkZXJTdHlsZTp0aGlzLmJvcmRlclN0eWxlLGNvbG9yOnRoaXMuY29sb3IsYmFja2dyb3VuZENvbG9yOnRoaXMuYmFja2dyb3VuZENvbG9yLGJvcmRlckNvbG9yOnRoaXMuYm9yZGVyQ29sb3Iscm90YXRpb246dGhpcy5yb3RhdGlvbixjb250ZW50c09iajp0aGlzLl9jb250ZW50cyxoYXNBcHBlYXJhbmNlOiEhdGhpcy5hcHBlYXJhbmNlLGlkOmUuaWQsbW9kaWZpY2F0aW9uRGF0ZTp0aGlzLm1vZGlmaWNhdGlvbkRhdGUscmVjdDp0aGlzLnJlY3RhbmdsZSxzdWJ0eXBlOmUuc3VidHlwZSxoYXNPd25DYW52YXM6ITEsbm9Sb3RhdGU6ISEodGhpcy5mbGFncyZlQSksbm9IVE1MOmcmJmMsaXNFZGl0YWJsZTohMSxzdHJ1Y3RQYXJlbnQ6LTF9O2lmKGEuc3RydWN0VHJlZVJvb3Qpe2xldCBpPXQuZ2V0KCJTdHJ1Y3RQYXJlbnQiKTt0aGlzLmRhdGEuc3RydWN0UGFyZW50PWk9TnVtYmVyLmlzSW50ZWdlcihpKSYmaT49MD9pOi0xO2Euc3RydWN0VHJlZVJvb3QuYWRkQW5ub3RhdGlvbklkVG9QYWdlKGUucGFnZVJlZixpKX1pZihlLmNvbGxlY3RGaWVsZHMpe2NvbnN0IGE9dC5nZXQoIktpZHMiKTtpZihBcnJheS5pc0FycmF5KGEpKXtjb25zdCBlPVtdO2Zvcihjb25zdCB0IG9mIGEpdCBpbnN0YW5jZW9mIFJlZiYmZS5wdXNoKHQudG9TdHJpbmcoKSk7MCE9PWUubGVuZ3RoJiYodGhpcy5kYXRhLmtpZElkcz1lKX10aGlzLmRhdGEuYWN0aW9ucz1jb2xsZWN0QWN0aW9ucyhpLHQscEEpO3RoaXMuZGF0YS5maWVsZE5hbWU9dGhpcy5fY29uc3RydWN0RmllbGROYW1lKHQpO3RoaXMuZGF0YS5wYWdlSW5kZXg9ZS5wYWdlSW5kZXh9Y29uc3QgbD10LmdldCgiSVQiKTtsIGluc3RhbmNlb2YgTmFtZSYmKHRoaXMuZGF0YS5pdD1sLm5hbWUpO3RoaXMuX2lzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkPWUuZXZhbHVhdG9yT3B0aW9ucy5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZDt0aGlzLl9mYWxsYmFja0ZvbnREaWN0PW51bGw7dGhpcy5fbmVlZEFwcGVhcmFuY2VzPSExfV9oYXNGbGFnKGUsdCl7cmV0dXJuISEoZSZ0KX1fYnVpbGRGbGFncyhlLHQpe2xldHtmbGFnczppfT10aGlzO2lmKHZvaWQgMD09PWUpe2lmKHZvaWQgMD09PXQpcmV0dXJuO3JldHVybiB0P2kmfkFBOmkmfiR8QUF9aWYoZSl7aXw9QUE7cmV0dXJuIHQ/aSZ+dEF8JDppJn4kfHRBfWkmPX4oJHx0QSk7cmV0dXJuIHQ/aSZ+QUE6aXxBQX1faXNWaWV3YWJsZShlKXtyZXR1cm4hdGhpcy5faGFzRmxhZyhlLHopJiYhdGhpcy5faGFzRmxhZyhlLHRBKX1faXNQcmludGFibGUoZSl7cmV0dXJuIHRoaXMuX2hhc0ZsYWcoZSxBQSkmJiF0aGlzLl9oYXNGbGFnKGUsJCkmJiF0aGlzLl9oYXNGbGFnKGUseil9bXVzdEJlVmlld2VkKGUsdCl7Y29uc3QgaT1lPy5nZXQodGhpcy5kYXRhLmlkKT8ubm9WaWV3O3JldHVybiB2b2lkIDAhPT1pPyFpOnRoaXMudmlld2FibGUmJiF0aGlzLl9oYXNGbGFnKHRoaXMuZmxhZ3MsJCl9bXVzdEJlUHJpbnRlZChlKXtjb25zdCB0PWU/LmdldCh0aGlzLmRhdGEuaWQpPy5ub1ByaW50O3JldHVybiB2b2lkIDAhPT10PyF0OnRoaXMucHJpbnRhYmxlfW11c3RCZVZpZXdlZFdoZW5FZGl0aW5nKGUsdD1udWxsKXtyZXR1cm4gZT8hdGhpcy5kYXRhLmlzRWRpdGFibGU6IXQ/Lmhhcyh0aGlzLmRhdGEuaWQpfWdldCB2aWV3YWJsZSgpe3JldHVybiBudWxsIT09dGhpcy5kYXRhLnF1YWRQb2ludHMmJigwPT09dGhpcy5mbGFnc3x8dGhpcy5faXNWaWV3YWJsZSh0aGlzLmZsYWdzKSl9Z2V0IHByaW50YWJsZSgpe3JldHVybiBudWxsIT09dGhpcy5kYXRhLnF1YWRQb2ludHMmJigwIT09dGhpcy5mbGFncyYmdGhpcy5faXNQcmludGFibGUodGhpcy5mbGFncykpfV9wYXJzZVN0cmluZ0hlbHBlcihlKXtjb25zdCB0PSJzdHJpbmciPT10eXBlb2YgZT9zdHJpbmdUb1BERlN0cmluZyhlKToiIjtyZXR1cm57c3RyOnQsZGlyOnQmJiJydGwiPT09YmlkaSh0KS5kaXI/InJ0bCI6Imx0ciJ9fXNldERlZmF1bHRBcHBlYXJhbmNlKGUpe2NvbnN0e2RpY3Q6dCxhbm5vdGF0aW9uR2xvYmFsczppfT1lLGE9Z2V0SW5oZXJpdGFibGVQcm9wZXJ0eSh7ZGljdDp0LGtleToiREEifSl8fGkuYWNyb0Zvcm0uZ2V0KCJEQSIpO3RoaXMuX2RlZmF1bHRBcHBlYXJhbmNlPSJzdHJpbmciPT10eXBlb2YgYT9hOiIiO3RoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGE9cGFyc2VEZWZhdWx0QXBwZWFyYW5jZSh0aGlzLl9kZWZhdWx0QXBwZWFyYW5jZSl9c2V0VGl0bGUoZSl7dGhpcy5fdGl0bGU9dGhpcy5fcGFyc2VTdHJpbmdIZWxwZXIoZSl9c2V0Q29udGVudHMoZSl7dGhpcy5fY29udGVudHM9dGhpcy5fcGFyc2VTdHJpbmdIZWxwZXIoZSl9c2V0TW9kaWZpY2F0aW9uRGF0ZShlKXt0aGlzLm1vZGlmaWNhdGlvbkRhdGU9InN0cmluZyI9PXR5cGVvZiBlP2U6bnVsbH1zZXRGbGFncyhlKXt0aGlzLmZsYWdzPU51bWJlci5pc0ludGVnZXIoZSkmJmU+MD9lOjA7dGhpcy5mbGFncyZ6JiYiQW5ub3RhdGlvbiIhPT10aGlzLmNvbnN0cnVjdG9yLm5hbWUmJih0aGlzLmZsYWdzXj16KX1oYXNGbGFnKGUpe3JldHVybiB0aGlzLl9oYXNGbGFnKHRoaXMuZmxhZ3MsZSl9c2V0UmVjdGFuZ2xlKGUpe3RoaXMucmVjdGFuZ2xlPWxvb2t1cE5vcm1hbFJlY3QoZSxbMCwwLDAsMF0pfXNldENvbG9yKGUpe3RoaXMuY29sb3I9Z2V0UmdiQ29sb3IoZSl9c2V0TGluZUVuZGluZ3MoZSl7dGhpcy5saW5lRW5kaW5ncz1bIk5vbmUiLCJOb25lIl07aWYoQXJyYXkuaXNBcnJheShlKSYmMj09PWUubGVuZ3RoKWZvcihsZXQgdD0wO3Q8Mjt0Kyspe2NvbnN0IGk9ZVt0XTtpZihpIGluc3RhbmNlb2YgTmFtZSlzd2l0Y2goaS5uYW1lKXtjYXNlIk5vbmUiOmNvbnRpbnVlO2Nhc2UiU3F1YXJlIjpjYXNlIkNpcmNsZSI6Y2FzZSJEaWFtb25kIjpjYXNlIk9wZW5BcnJvdyI6Y2FzZSJDbG9zZWRBcnJvdyI6Y2FzZSJCdXR0IjpjYXNlIlJPcGVuQXJyb3ciOmNhc2UiUkNsb3NlZEFycm93IjpjYXNlIlNsYXNoIjp0aGlzLmxpbmVFbmRpbmdzW3RdPWkubmFtZTtjb250aW51ZX13YXJuKGBJZ25vcmluZyBpbnZhbGlkIGxpbmVFbmRpbmc6ICR7aX1gKX19c2V0Um90YXRpb24oZSx0KXt0aGlzLnJvdGF0aW9uPTA7bGV0IGk9ZSBpbnN0YW5jZW9mIERpY3Q/ZS5nZXQoIlIiKXx8MDp0LmdldCgiUm90YXRlIil8fDA7aWYoTnVtYmVyLmlzSW50ZWdlcihpKSYmMCE9PWkpe2klPTM2MDtpPDAmJihpKz0zNjApO2klOTA9PTAmJih0aGlzLnJvdGF0aW9uPWkpfX1zZXRCb3JkZXJBbmRCYWNrZ3JvdW5kQ29sb3JzKGUpe2lmKGUgaW5zdGFuY2VvZiBEaWN0KXt0aGlzLmJvcmRlckNvbG9yPWdldFJnYkNvbG9yKGUuZ2V0QXJyYXkoIkJDIiksbnVsbCk7dGhpcy5iYWNrZ3JvdW5kQ29sb3I9Z2V0UmdiQ29sb3IoZS5nZXRBcnJheSgiQkciKSxudWxsKX1lbHNlIHRoaXMuYm9yZGVyQ29sb3I9dGhpcy5iYWNrZ3JvdW5kQ29sb3I9bnVsbH1zZXRCb3JkZXJTdHlsZShlKXt0aGlzLmJvcmRlclN0eWxlPW5ldyBBbm5vdGF0aW9uQm9yZGVyU3R5bGU7aWYoZSBpbnN0YW5jZW9mIERpY3QpaWYoZS5oYXMoIkJTIikpe2NvbnN0IHQ9ZS5nZXQoIkJTIik7aWYodCBpbnN0YW5jZW9mIERpY3Qpe2NvbnN0IGU9dC5nZXQoIlR5cGUiKTtpZighZXx8aXNOYW1lKGUsIkJvcmRlciIpKXt0aGlzLmJvcmRlclN0eWxlLnNldFdpZHRoKHQuZ2V0KCJXIiksdGhpcy5yZWN0YW5nbGUpO3RoaXMuYm9yZGVyU3R5bGUuc2V0U3R5bGUodC5nZXQoIlMiKSk7dGhpcy5ib3JkZXJTdHlsZS5zZXREYXNoQXJyYXkodC5nZXRBcnJheSgiRCIpKX19fWVsc2UgaWYoZS5oYXMoIkJvcmRlciIpKXtjb25zdCB0PWUuZ2V0QXJyYXkoIkJvcmRlciIpO2lmKEFycmF5LmlzQXJyYXkodCkmJnQubGVuZ3RoPj0zKXt0aGlzLmJvcmRlclN0eWxlLnNldEhvcml6b250YWxDb3JuZXJSYWRpdXModFswXSk7dGhpcy5ib3JkZXJTdHlsZS5zZXRWZXJ0aWNhbENvcm5lclJhZGl1cyh0WzFdKTt0aGlzLmJvcmRlclN0eWxlLnNldFdpZHRoKHRbMl0sdGhpcy5yZWN0YW5nbGUpOzQ9PT10Lmxlbmd0aCYmdGhpcy5ib3JkZXJTdHlsZS5zZXREYXNoQXJyYXkodFszXSwhMCl9fWVsc2UgdGhpcy5ib3JkZXJTdHlsZS5zZXRXaWR0aCgwKX1zZXRBcHBlYXJhbmNlKGUpe3RoaXMuYXBwZWFyYW5jZT1udWxsO2NvbnN0IHQ9ZS5nZXQoIkFQIik7aWYoISh0IGluc3RhbmNlb2YgRGljdCkpcmV0dXJuO2NvbnN0IGk9dC5nZXQoIk4iKTtpZihpIGluc3RhbmNlb2YgQmFzZVN0cmVhbSl7dGhpcy5hcHBlYXJhbmNlPWk7cmV0dXJufWlmKCEoaSBpbnN0YW5jZW9mIERpY3QpKXJldHVybjtjb25zdCBhPWUuZ2V0KCJBUyIpO2lmKCEoYSBpbnN0YW5jZW9mIE5hbWUmJmkuaGFzKGEubmFtZSkpKXJldHVybjtjb25zdCByPWkuZ2V0KGEubmFtZSk7ciBpbnN0YW5jZW9mIEJhc2VTdHJlYW0mJih0aGlzLmFwcGVhcmFuY2U9cil9c2V0T3B0aW9uYWxDb250ZW50KGUpe3RoaXMub2M9bnVsbDtjb25zdCB0PWUuZ2V0KCJPQyIpO3QgaW5zdGFuY2VvZiBOYW1lP3dhcm4oInNldE9wdGlvbmFsQ29udGVudDogU3VwcG9ydCBmb3IgL05hbWUtZW50cnkgaXMgbm90IGltcGxlbWVudGVkLiIpOnQgaW5zdGFuY2VvZiBEaWN0JiYodGhpcy5vYz10KX1sb2FkUmVzb3VyY2VzKGUsdCl7cmV0dXJuIHQuZGljdC5nZXRBc3luYygiUmVzb3VyY2VzIikudGhlbigodD0+e2lmKCF0KXJldHVybjtyZXR1cm4gbmV3IE9iamVjdExvYWRlcih0LGUsdC54cmVmKS5sb2FkKCkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gdH0pKX0pKX1hc3luYyBnZXRPcGVyYXRvckxpc3QoZSx0LGkscil7Y29uc3R7aGFzT3duQ2FudmFzOnMsaWQ6bixyZWN0Om99PXRoaXMuZGF0YTtsZXQgZz10aGlzLmFwcGVhcmFuY2U7Y29uc3QgbD0hIShzJiZpJmMpO2lmKGwmJihvWzBdPT09b1syXXx8b1sxXT09PW9bM10pKXt0aGlzLmRhdGEuaGFzT3duQ2FudmFzPSExO3JldHVybntvcExpc3Q6bmV3IE9wZXJhdG9yTGlzdCxzZXBhcmF0ZUZvcm06ITEsc2VwYXJhdGVDYW52YXM6ITF9fWlmKCFnKXtpZighbClyZXR1cm57b3BMaXN0Om5ldyBPcGVyYXRvckxpc3Qsc2VwYXJhdGVGb3JtOiExLHNlcGFyYXRlQ2FudmFzOiExfTtnPW5ldyBTdHJpbmdTdHJlYW0oIiIpO2cuZGljdD1uZXcgRGljdH1jb25zdCBoPWcuZGljdCxDPWF3YWl0IHRoaXMubG9hZFJlc291cmNlcyhbIkV4dEdTdGF0ZSIsIkNvbG9yU3BhY2UiLCJQYXR0ZXJuIiwiU2hhZGluZyIsIlhPYmplY3QiLCJGb250Il0sZyksUT1sb29rdXBSZWN0KGguZ2V0QXJyYXkoIkJCb3giKSxbMCwwLDEsMV0pLEU9bG9va3VwTWF0cml4KGguZ2V0QXJyYXkoIk1hdHJpeCIpLGEpLHU9Z2V0VHJhbnNmb3JtTWF0cml4KG8sUSxFKSxkPW5ldyBPcGVyYXRvckxpc3Q7bGV0IGY7dGhpcy5vYyYmKGY9YXdhaXQgZS5wYXJzZU1hcmtlZENvbnRlbnRQcm9wcyh0aGlzLm9jLG51bGwpKTt2b2lkIDAhPT1mJiZkLmFkZE9wKEtlLFsiT0MiLGZdKTtkLmFkZE9wKFZlLFtuLG8sdSxFLGxdKTthd2FpdCBlLmdldE9wZXJhdG9yTGlzdCh7c3RyZWFtOmcsdGFzazp0LHJlc291cmNlczpDLG9wZXJhdG9yTGlzdDpkLGZhbGxiYWNrRm9udERpY3Q6dGhpcy5fZmFsbGJhY2tGb250RGljdH0pO2QuYWRkT3AoWmUsW10pO3ZvaWQgMCE9PWYmJmQuYWRkT3AoVGUsW10pO3RoaXMucmVzZXQoKTtyZXR1cm57b3BMaXN0OmQsc2VwYXJhdGVGb3JtOiExLHNlcGFyYXRlQ2FudmFzOmx9fWFzeW5jIHNhdmUoZSx0LGksYSl7cmV0dXJuIG51bGx9Z2V0IGhhc1RleHRDb250ZW50KCl7cmV0dXJuITF9YXN5bmMgZXh0cmFjdFRleHRDb250ZW50KGUsdCxpKXtpZighdGhpcy5hcHBlYXJhbmNlKXJldHVybjtjb25zdCBhPWF3YWl0IHRoaXMubG9hZFJlc291cmNlcyhbIkV4dEdTdGF0ZSIsIkZvbnQiLCJQcm9wZXJ0aWVzIiwiWE9iamVjdCJdLHRoaXMuYXBwZWFyYW5jZSkscj1bXSxzPVtdO2xldCBuPW51bGw7Y29uc3Qgbz17ZGVzaXJlZFNpemU6TWF0aC5JbmZpbml0eSxyZWFkeTohMCxlbnF1ZXVlKGUsdCl7Zm9yKGNvbnN0IHQgb2YgZS5pdGVtcylpZih2b2lkIDAhPT10LnN0cil7bnx8PXQudHJhbnNmb3JtLnNsaWNlKC0yKTtzLnB1c2godC5zdHIpO2lmKHQuaGFzRU9MKXtyLnB1c2gocy5qb2luKCIiKS50cmltRW5kKCkpO3MubGVuZ3RoPTB9fX19O2F3YWl0IGUuZ2V0VGV4dENvbnRlbnQoe3N0cmVhbTp0aGlzLmFwcGVhcmFuY2UsdGFzazp0LHJlc291cmNlczphLGluY2x1ZGVNYXJrZWRDb250ZW50OiEwLGtlZXBXaGl0ZVNwYWNlOiEwLHNpbms6byx2aWV3Qm94Oml9KTt0aGlzLnJlc2V0KCk7cy5sZW5ndGgmJnIucHVzaChzLmpvaW4oIiIpLnRyaW1FbmQoKSk7aWYoci5sZW5ndGg+MXx8clswXSl7Y29uc3QgZT10aGlzLmFwcGVhcmFuY2UuZGljdCx0PWxvb2t1cFJlY3QoZS5nZXRBcnJheSgiQkJveCIpLG51bGwpLGk9bG9va3VwTWF0cml4KGUuZ2V0QXJyYXkoIk1hdHJpeCIpLG51bGwpO3RoaXMuZGF0YS50ZXh0UG9zaXRpb249dGhpcy5fdHJhbnNmb3JtUG9pbnQobix0LGkpO3RoaXMuZGF0YS50ZXh0Q29udGVudD1yfX1fdHJhbnNmb3JtUG9pbnQoZSx0LGkpe2NvbnN0e3JlY3Q6YX09dGhpcy5kYXRhO3R8fD1bMCwwLDEsMV07aXx8PVsxLDAsMCwxLDAsMF07Y29uc3Qgcj1nZXRUcmFuc2Zvcm1NYXRyaXgoYSx0LGkpO3JbNF0tPWFbMF07cls1XS09YVsxXTtlPVV0aWwuYXBwbHlUcmFuc2Zvcm0oZSxyKTtyZXR1cm4gVXRpbC5hcHBseVRyYW5zZm9ybShlLGkpfWdldEZpZWxkT2JqZWN0KCl7cmV0dXJuIHRoaXMuZGF0YS5raWRJZHM/e2lkOnRoaXMuZGF0YS5pZCxhY3Rpb25zOnRoaXMuZGF0YS5hY3Rpb25zLG5hbWU6dGhpcy5kYXRhLmZpZWxkTmFtZSxzdHJva2VDb2xvcjp0aGlzLmRhdGEuYm9yZGVyQ29sb3IsZmlsbENvbG9yOnRoaXMuZGF0YS5iYWNrZ3JvdW5kQ29sb3IsdHlwZToiIixraWRJZHM6dGhpcy5kYXRhLmtpZElkcyxwYWdlOnRoaXMuZGF0YS5wYWdlSW5kZXgscm90YXRpb246dGhpcy5yb3RhdGlvbn06bnVsbH1yZXNldCgpe2Zvcihjb25zdCBlIG9mIHRoaXMuX3N0cmVhbXMpZS5yZXNldCgpfV9jb25zdHJ1Y3RGaWVsZE5hbWUoZSl7aWYoIWUuaGFzKCJUIikmJiFlLmhhcygiUGFyZW50Iikpe3dhcm4oIlVua25vd24gZmllbGQgbmFtZSwgZmFsbGluZyBiYWNrIHRvIGVtcHR5IGZpZWxkIG5hbWUuIik7cmV0dXJuIiJ9aWYoIWUuaGFzKCJQYXJlbnQiKSlyZXR1cm4gc3RyaW5nVG9QREZTdHJpbmcoZS5nZXQoIlQiKSk7Y29uc3QgdD1bXTtlLmhhcygiVCIpJiZ0LnVuc2hpZnQoc3RyaW5nVG9QREZTdHJpbmcoZS5nZXQoIlQiKSkpO2xldCBpPWU7Y29uc3QgYT1uZXcgUmVmU2V0O2Uub2JqSWQmJmEucHV0KGUub2JqSWQpO2Zvcig7aS5oYXMoIlBhcmVudCIpOyl7aT1pLmdldCgiUGFyZW50Iik7aWYoIShpIGluc3RhbmNlb2YgRGljdCl8fGkub2JqSWQmJmEuaGFzKGkub2JqSWQpKWJyZWFrO2kub2JqSWQmJmEucHV0KGkub2JqSWQpO2kuaGFzKCJUIikmJnQudW5zaGlmdChzdHJpbmdUb1BERlN0cmluZyhpLmdldCgiVCIpKSl9cmV0dXJuIHQuam9pbigiLiIpfX1jbGFzcyBBbm5vdGF0aW9uQm9yZGVyU3R5bGV7Y29uc3RydWN0b3IoKXt0aGlzLndpZHRoPTE7dGhpcy5yYXdXaWR0aD0xO3RoaXMuc3R5bGU9UUE7dGhpcy5kYXNoQXJyYXk9WzNdO3RoaXMuaG9yaXpvbnRhbENvcm5lclJhZGl1cz0wO3RoaXMudmVydGljYWxDb3JuZXJSYWRpdXM9MH1zZXRXaWR0aChlLHQ9WzAsMCwwLDBdKXtpZihlIGluc3RhbmNlb2YgTmFtZSl0aGlzLndpZHRoPTA7ZWxzZSBpZigibnVtYmVyIj09dHlwZW9mIGUpe2lmKGU+MCl7dGhpcy5yYXdXaWR0aD1lO2NvbnN0IGk9KHRbMl0tdFswXSkvMixhPSh0WzNdLXRbMV0pLzI7aWYoaT4wJiZhPjAmJihlPml8fGU+YSkpe3dhcm4oYEFubm90YXRpb25Cb3JkZXJTdHlsZS5zZXRXaWR0aCAtIGlnbm9yaW5nIHdpZHRoOiAke2V9YCk7ZT0xfX10aGlzLndpZHRoPWV9fXNldFN0eWxlKGUpe2lmKGUgaW5zdGFuY2VvZiBOYW1lKXN3aXRjaChlLm5hbWUpe2Nhc2UiUyI6dGhpcy5zdHlsZT1RQTticmVhaztjYXNlIkQiOnRoaXMuc3R5bGU9RUE7YnJlYWs7Y2FzZSJCIjp0aGlzLnN0eWxlPXVBO2JyZWFrO2Nhc2UiSSI6dGhpcy5zdHlsZT1kQTticmVhaztjYXNlIlUiOnRoaXMuc3R5bGU9ZkF9fXNldERhc2hBcnJheShlLHQ9ITEpe2lmKEFycmF5LmlzQXJyYXkoZSkpe2xldCBpPSEwLGE9ITA7Zm9yKGNvbnN0IHQgb2YgZSl7aWYoISgrdD49MCkpe2k9ITE7YnJlYWt9dD4wJiYoYT0hMSl9aWYoMD09PWUubGVuZ3RofHxpJiYhYSl7dGhpcy5kYXNoQXJyYXk9ZTt0JiZ0aGlzLnNldFN0eWxlKE5hbWUuZ2V0KCJEIikpfWVsc2UgdGhpcy53aWR0aD0wfWVsc2UgZSYmKHRoaXMud2lkdGg9MCl9c2V0SG9yaXpvbnRhbENvcm5lclJhZGl1cyhlKXtOdW1iZXIuaXNJbnRlZ2VyKGUpJiYodGhpcy5ob3Jpem9udGFsQ29ybmVyUmFkaXVzPWUpfXNldFZlcnRpY2FsQ29ybmVyUmFkaXVzKGUpe051bWJlci5pc0ludGVnZXIoZSkmJih0aGlzLnZlcnRpY2FsQ29ybmVyUmFkaXVzPWUpfX1jbGFzcyBNYXJrdXBBbm5vdGF0aW9uIGV4dGVuZHMgQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTtjb25zdHtkaWN0OnR9PWU7aWYodC5oYXMoIklSVCIpKXtjb25zdCBlPXQuZ2V0UmF3KCJJUlQiKTt0aGlzLmRhdGEuaW5SZXBseVRvPWUgaW5zdGFuY2VvZiBSZWY/ZS50b1N0cmluZygpOm51bGw7Y29uc3QgaT10LmdldCgiUlQiKTt0aGlzLmRhdGEucmVwbHlUeXBlPWkgaW5zdGFuY2VvZiBOYW1lP2kubmFtZTpffWxldCBpPW51bGw7aWYodGhpcy5kYXRhLnJlcGx5VHlwZT09PVope2NvbnN0IGU9dC5nZXQoIklSVCIpO3RoaXMuc2V0VGl0bGUoZS5nZXQoIlQiKSk7dGhpcy5kYXRhLnRpdGxlT2JqPXRoaXMuX3RpdGxlO3RoaXMuc2V0Q29udGVudHMoZS5nZXQoIkNvbnRlbnRzIikpO3RoaXMuZGF0YS5jb250ZW50c09iaj10aGlzLl9jb250ZW50cztpZihlLmhhcygiQ3JlYXRpb25EYXRlIikpe3RoaXMuc2V0Q3JlYXRpb25EYXRlKGUuZ2V0KCJDcmVhdGlvbkRhdGUiKSk7dGhpcy5kYXRhLmNyZWF0aW9uRGF0ZT10aGlzLmNyZWF0aW9uRGF0ZX1lbHNlIHRoaXMuZGF0YS5jcmVhdGlvbkRhdGU9bnVsbDtpZihlLmhhcygiTSIpKXt0aGlzLnNldE1vZGlmaWNhdGlvbkRhdGUoZS5nZXQoIk0iKSk7dGhpcy5kYXRhLm1vZGlmaWNhdGlvbkRhdGU9dGhpcy5tb2RpZmljYXRpb25EYXRlfWVsc2UgdGhpcy5kYXRhLm1vZGlmaWNhdGlvbkRhdGU9bnVsbDtpPWUuZ2V0UmF3KCJQb3B1cCIpO2lmKGUuaGFzKCJDIikpe3RoaXMuc2V0Q29sb3IoZS5nZXRBcnJheSgiQyIpKTt0aGlzLmRhdGEuY29sb3I9dGhpcy5jb2xvcn1lbHNlIHRoaXMuZGF0YS5jb2xvcj1udWxsfWVsc2V7dGhpcy5kYXRhLnRpdGxlT2JqPXRoaXMuX3RpdGxlO3RoaXMuc2V0Q3JlYXRpb25EYXRlKHQuZ2V0KCJDcmVhdGlvbkRhdGUiKSk7dGhpcy5kYXRhLmNyZWF0aW9uRGF0ZT10aGlzLmNyZWF0aW9uRGF0ZTtpPXQuZ2V0UmF3KCJQb3B1cCIpO3QuaGFzKCJDIil8fCh0aGlzLmRhdGEuY29sb3I9bnVsbCl9dGhpcy5kYXRhLnBvcHVwUmVmPWkgaW5zdGFuY2VvZiBSZWY/aS50b1N0cmluZygpOm51bGw7dC5oYXMoIlJDIikmJih0aGlzLmRhdGEucmljaFRleHQ9WEZBRmFjdG9yeS5nZXRSaWNoVGV4dEFzSHRtbCh0LmdldCgiUkMiKSkpfXNldENyZWF0aW9uRGF0ZShlKXt0aGlzLmNyZWF0aW9uRGF0ZT0ic3RyaW5nIj09dHlwZW9mIGU/ZTpudWxsfV9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjplLGV4dHJhOnQsc3Ryb2tlQ29sb3I6aSxmaWxsQ29sb3I6YSxibGVuZE1vZGU6cixzdHJva2VBbHBoYTpzLGZpbGxBbHBoYTpuLHBvaW50c0NhbGxiYWNrOm99KXtsZXQgZz1OdW1iZXIuTUFYX1ZBTFVFLGM9TnVtYmVyLk1BWF9WQUxVRSxsPU51bWJlci5NSU5fVkFMVUUsaD1OdW1iZXIuTUlOX1ZBTFVFO2NvbnN0IEM9WyJxIl07dCYmQy5wdXNoKHQpO2kmJkMucHVzaChgJHtpWzBdfSAke2lbMV19ICR7aVsyXX0gUkdgKTthJiZDLnB1c2goYCR7YVswXX0gJHthWzFdfSAke2FbMl19IHJnYCk7Y29uc3QgUT10aGlzLmRhdGEucXVhZFBvaW50c3x8RmxvYXQzMkFycmF5LmZyb20oW3RoaXMucmVjdGFuZ2xlWzBdLHRoaXMucmVjdGFuZ2xlWzNdLHRoaXMucmVjdGFuZ2xlWzJdLHRoaXMucmVjdGFuZ2xlWzNdLHRoaXMucmVjdGFuZ2xlWzBdLHRoaXMucmVjdGFuZ2xlWzFdLHRoaXMucmVjdGFuZ2xlWzJdLHRoaXMucmVjdGFuZ2xlWzFdXSk7Zm9yKGxldCBlPTAsdD1RLmxlbmd0aDtlPHQ7ZSs9OCl7Y29uc3RbdCxpLGEscl09byhDLFEuc3ViYXJyYXkoZSxlKzgpKTtnPU1hdGgubWluKGcsdCk7bD1NYXRoLm1heChsLGkpO2M9TWF0aC5taW4oYyxhKTtoPU1hdGgubWF4KGgscil9Qy5wdXNoKCJRIik7Y29uc3QgRT1uZXcgRGljdChlKSx1PW5ldyBEaWN0KGUpO3Uuc2V0KCJTdWJ0eXBlIixOYW1lLmdldCgiRm9ybSIpKTtjb25zdCBkPW5ldyBTdHJpbmdTdHJlYW0oQy5qb2luKCIgIikpO2QuZGljdD11O0Uuc2V0KCJGbTAiLGQpO2NvbnN0IGY9bmV3IERpY3QoZSk7ciYmZi5zZXQoIkJNIixOYW1lLmdldChyKSk7Im51bWJlciI9PXR5cGVvZiBzJiZmLnNldCgiQ0EiLHMpOyJudW1iZXIiPT10eXBlb2YgbiYmZi5zZXQoImNhIixuKTtjb25zdCBwPW5ldyBEaWN0KGUpO3Auc2V0KCJHUzAiLGYpO2NvbnN0IG09bmV3IERpY3QoZSk7bS5zZXQoIkV4dEdTdGF0ZSIscCk7bS5zZXQoIlhPYmplY3QiLEUpO2NvbnN0IHk9bmV3IERpY3QoZSk7eS5zZXQoIlJlc291cmNlcyIsbSk7Y29uc3Qgdz10aGlzLmRhdGEucmVjdD1bZyxjLGwsaF07eS5zZXQoIkJCb3giLHcpO3RoaXMuYXBwZWFyYW5jZT1uZXcgU3RyaW5nU3RyZWFtKCIvR1MwIGdzIC9GbTAgRG8iKTt0aGlzLmFwcGVhcmFuY2UuZGljdD15O3RoaXMuX3N0cmVhbXMucHVzaCh0aGlzLmFwcGVhcmFuY2UsZCl9c3RhdGljIGFzeW5jIGNyZWF0ZU5ld0Fubm90YXRpb24oZSx0LGksYSl7Y29uc3Qgcj10LnJlZnx8PWUuZ2V0TmV3VGVtcG9yYXJ5UmVmKCkscz1hd2FpdCB0aGlzLmNyZWF0ZU5ld0FwcGVhcmFuY2VTdHJlYW0odCxlLGEpO2xldCBuO2lmKHMpe2NvbnN0IGE9ZS5nZXROZXdUZW1wb3JhcnlSZWYoKTtuPXRoaXMuY3JlYXRlTmV3RGljdCh0LGUse2FwUmVmOmF9KTtpLnB1dChhLHtkYXRhOnN9KX1lbHNlIG49dGhpcy5jcmVhdGVOZXdEaWN0KHQsZSx7fSk7TnVtYmVyLmlzSW50ZWdlcih0LnBhcmVudFRyZWVJZCkmJm4uc2V0KCJTdHJ1Y3RQYXJlbnQiLHQucGFyZW50VHJlZUlkKTtpLnB1dChyLHtkYXRhOm59KTtyZXR1cm57cmVmOnJ9fXN0YXRpYyBhc3luYyBjcmVhdGVOZXdQcmludEFubm90YXRpb24oZSx0LGksYSl7Y29uc3Qgcj1hd2FpdCB0aGlzLmNyZWF0ZU5ld0FwcGVhcmFuY2VTdHJlYW0oaSx0LGEpLHM9dGhpcy5jcmVhdGVOZXdEaWN0KGksdCxyP3thcDpyfTp7fSksbj1uZXcgdGhpcy5wcm90b3R5cGUuY29uc3RydWN0b3Ioe2RpY3Q6cyx4cmVmOnQsYW5ub3RhdGlvbkdsb2JhbHM6ZSxldmFsdWF0b3JPcHRpb25zOmEuZXZhbHVhdG9yT3B0aW9uc30pO2kucmVmJiYobi5yZWY9bi5yZWZUb1JlcGxhY2U9aS5yZWYpO3JldHVybiBufX1jbGFzcyBXaWRnZXRBbm5vdGF0aW9uIGV4dGVuZHMgQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTtjb25zdHtkaWN0OnQseHJlZjppLGFubm90YXRpb25HbG9iYWxzOmF9PWUscj10aGlzLmRhdGE7dGhpcy5fbmVlZEFwcGVhcmFuY2VzPWUubmVlZEFwcGVhcmFuY2VzO3IuYW5ub3RhdGlvblR5cGU9Vjt2b2lkIDA9PT1yLmZpZWxkTmFtZSYmKHIuZmllbGROYW1lPXRoaXMuX2NvbnN0cnVjdEZpZWxkTmFtZSh0KSk7dm9pZCAwPT09ci5hY3Rpb25zJiYoci5hY3Rpb25zPWNvbGxlY3RBY3Rpb25zKGksdCxwQSkpO2xldCBzPWdldEluaGVyaXRhYmxlUHJvcGVydHkoe2RpY3Q6dCxrZXk6IlYiLGdldEFycmF5OiEwfSk7ci5maWVsZFZhbHVlPXRoaXMuX2RlY29kZUZvcm1WYWx1ZShzKTtjb25zdCBuPWdldEluaGVyaXRhYmxlUHJvcGVydHkoe2RpY3Q6dCxrZXk6IkRWIixnZXRBcnJheTohMH0pO3IuZGVmYXVsdEZpZWxkVmFsdWU9dGhpcy5fZGVjb2RlRm9ybVZhbHVlKG4pO2lmKHZvaWQgMD09PXMmJmEueGZhRGF0YXNldHMpe2NvbnN0IGU9dGhpcy5fdGl0bGUuc3RyO2lmKGUpe3RoaXMuX2hhc1ZhbHVlRnJvbVhGQT0hMDtyLmZpZWxkVmFsdWU9cz1hLnhmYURhdGFzZXRzLmdldFZhbHVlKGUpfX12b2lkIDA9PT1zJiZudWxsIT09ci5kZWZhdWx0RmllbGRWYWx1ZSYmKHIuZmllbGRWYWx1ZT1yLmRlZmF1bHRGaWVsZFZhbHVlKTtyLmFsdGVybmF0aXZlVGV4dD1zdHJpbmdUb1BERlN0cmluZyh0LmdldCgiVFUiKXx8IiIpO3RoaXMuc2V0RGVmYXVsdEFwcGVhcmFuY2UoZSk7ci5oYXNBcHBlYXJhbmNlfHw9dGhpcy5fbmVlZEFwcGVhcmFuY2VzJiZ2b2lkIDAhPT1yLmZpZWxkVmFsdWUmJm51bGwhPT1yLmZpZWxkVmFsdWU7Y29uc3Qgbz1nZXRJbmhlcml0YWJsZVByb3BlcnR5KHtkaWN0OnQsa2V5OiJGVCJ9KTtyLmZpZWxkVHlwZT1vIGluc3RhbmNlb2YgTmFtZT9vLm5hbWU6bnVsbDtjb25zdCBnPWdldEluaGVyaXRhYmxlUHJvcGVydHkoe2RpY3Q6dCxrZXk6IkRSIn0pLGM9YS5hY3JvRm9ybS5nZXQoIkRSIiksbD10aGlzLmFwcGVhcmFuY2U/LmRpY3QuZ2V0KCJSZXNvdXJjZXMiKTt0aGlzLl9maWVsZFJlc291cmNlcz17bG9jYWxSZXNvdXJjZXM6ZyxhY3JvRm9ybVJlc291cmNlczpjLGFwcGVhcmFuY2VSZXNvdXJjZXM6bCxtZXJnZWRSZXNvdXJjZXM6RGljdC5tZXJnZSh7eHJlZjppLGRpY3RBcnJheTpbZyxsLGNdLG1lcmdlU3ViRGljdHM6ITB9KX07ci5maWVsZEZsYWdzPWdldEluaGVyaXRhYmxlUHJvcGVydHkoe2RpY3Q6dCxrZXk6IkZmIn0pOyghTnVtYmVyLmlzSW50ZWdlcihyLmZpZWxkRmxhZ3MpfHxyLmZpZWxkRmxhZ3M8MCkmJihyLmZpZWxkRmxhZ3M9MCk7ci5yZWFkT25seT10aGlzLmhhc0ZpZWxkRmxhZyhyQSk7ci5yZXF1aXJlZD10aGlzLmhhc0ZpZWxkRmxhZyhzQSk7ci5oaWRkZW49dGhpcy5faGFzRmxhZyhyLmFubm90YXRpb25GbGFncywkKXx8dGhpcy5faGFzRmxhZyhyLmFubm90YXRpb25GbGFncyx0QSl9X2RlY29kZUZvcm1WYWx1ZShlKXtyZXR1cm4gQXJyYXkuaXNBcnJheShlKT9lLmZpbHRlcigoZT0+InN0cmluZyI9PXR5cGVvZiBlKSkubWFwKChlPT5zdHJpbmdUb1BERlN0cmluZyhlKSkpOmUgaW5zdGFuY2VvZiBOYW1lP3N0cmluZ1RvUERGU3RyaW5nKGUubmFtZSk6InN0cmluZyI9PXR5cGVvZiBlP3N0cmluZ1RvUERGU3RyaW5nKGUpOm51bGx9aGFzRmllbGRGbGFnKGUpe3JldHVybiEhKHRoaXMuZGF0YS5maWVsZEZsYWdzJmUpfV9pc1ZpZXdhYmxlKGUpe3JldHVybiEwfW11c3RCZVZpZXdlZChlLHQpe3JldHVybiB0P3RoaXMudmlld2FibGU6c3VwZXIubXVzdEJlVmlld2VkKGUsdCkmJiF0aGlzLl9oYXNGbGFnKHRoaXMuZmxhZ3MsdEEpfWdldFJvdGF0aW9uTWF0cml4KGUpe2xldCB0PWU/LmdldCh0aGlzLmRhdGEuaWQpPy5yb3RhdGlvbjt2b2lkIDA9PT10JiYodD10aGlzLnJvdGF0aW9uKTtpZigwPT09dClyZXR1cm4gYTtyZXR1cm4gZ2V0Um90YXRpb25NYXRyaXgodCx0aGlzLmRhdGEucmVjdFsyXS10aGlzLmRhdGEucmVjdFswXSx0aGlzLmRhdGEucmVjdFszXS10aGlzLmRhdGEucmVjdFsxXSl9Z2V0Qm9yZGVyQW5kQmFja2dyb3VuZEFwcGVhcmFuY2VzKGUpe2xldCB0PWU/LmdldCh0aGlzLmRhdGEuaWQpPy5yb3RhdGlvbjt2b2lkIDA9PT10JiYodD10aGlzLnJvdGF0aW9uKTtpZighdGhpcy5iYWNrZ3JvdW5kQ29sb3ImJiF0aGlzLmJvcmRlckNvbG9yKXJldHVybiIiO2NvbnN0IGk9dGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF0sYT10aGlzLmRhdGEucmVjdFszXS10aGlzLmRhdGEucmVjdFsxXSxyPTA9PT10fHwxODA9PT10P2AwIDAgJHtpfSAke2F9IHJlYDpgMCAwICR7YX0gJHtpfSByZWA7bGV0IHM9IiI7dGhpcy5iYWNrZ3JvdW5kQ29sb3ImJihzPWAke2dldFBkZkNvbG9yKHRoaXMuYmFja2dyb3VuZENvbG9yLCEwKX0gJHtyfSBmIGApO2lmKHRoaXMuYm9yZGVyQ29sb3Ipe3MrPWAke3RoaXMuYm9yZGVyU3R5bGUud2lkdGh8fDF9IHcgJHtnZXRQZGZDb2xvcih0aGlzLmJvcmRlckNvbG9yLCExKX0gJHtyfSBTIGB9cmV0dXJuIHN9YXN5bmMgZ2V0T3BlcmF0b3JMaXN0KGUsdCxpLGEpe2lmKGkmQyYmISh0aGlzIGluc3RhbmNlb2YgU2lnbmF0dXJlV2lkZ2V0QW5ub3RhdGlvbikmJiF0aGlzLmRhdGEubm9IVE1MJiYhdGhpcy5kYXRhLmhhc093bkNhbnZhcylyZXR1cm57b3BMaXN0Om5ldyBPcGVyYXRvckxpc3Qsc2VwYXJhdGVGb3JtOiEwLHNlcGFyYXRlQ2FudmFzOiExfTtpZighdGhpcy5faGFzVGV4dClyZXR1cm4gc3VwZXIuZ2V0T3BlcmF0b3JMaXN0KGUsdCxpLGEpO2NvbnN0IHI9YXdhaXQgdGhpcy5fZ2V0QXBwZWFyYW5jZShlLHQsaSxhKTtpZih0aGlzLmFwcGVhcmFuY2UmJm51bGw9PT1yKXJldHVybiBzdXBlci5nZXRPcGVyYXRvckxpc3QoZSx0LGksYSk7Y29uc3Qgcz1uZXcgT3BlcmF0b3JMaXN0O2lmKCF0aGlzLl9kZWZhdWx0QXBwZWFyYW5jZXx8bnVsbD09PXIpcmV0dXJue29wTGlzdDpzLHNlcGFyYXRlRm9ybTohMSxzZXBhcmF0ZUNhbnZhczohMX07Y29uc3Qgbj0hISh0aGlzLmRhdGEuaGFzT3duQ2FudmFzJiZpJmMpLG89WzAsMCx0aGlzLmRhdGEucmVjdFsyXS10aGlzLmRhdGEucmVjdFswXSx0aGlzLmRhdGEucmVjdFszXS10aGlzLmRhdGEucmVjdFsxXV0sZz1nZXRUcmFuc2Zvcm1NYXRyaXgodGhpcy5kYXRhLnJlY3QsbyxbMSwwLDAsMSwwLDBdKTtsZXQgbDt0aGlzLm9jJiYobD1hd2FpdCBlLnBhcnNlTWFya2VkQ29udGVudFByb3BzKHRoaXMub2MsbnVsbCkpO3ZvaWQgMCE9PWwmJnMuYWRkT3AoS2UsWyJPQyIsbF0pO3MuYWRkT3AoVmUsW3RoaXMuZGF0YS5pZCx0aGlzLmRhdGEucmVjdCxnLHRoaXMuZ2V0Um90YXRpb25NYXRyaXgoYSksbl0pO2NvbnN0IGg9bmV3IFN0cmluZ1N0cmVhbShyKTthd2FpdCBlLmdldE9wZXJhdG9yTGlzdCh7c3RyZWFtOmgsdGFzazp0LHJlc291cmNlczp0aGlzLl9maWVsZFJlc291cmNlcy5tZXJnZWRSZXNvdXJjZXMsb3BlcmF0b3JMaXN0OnN9KTtzLmFkZE9wKFplLFtdKTt2b2lkIDAhPT1sJiZzLmFkZE9wKFRlLFtdKTtyZXR1cm57b3BMaXN0OnMsc2VwYXJhdGVGb3JtOiExLHNlcGFyYXRlQ2FudmFzOm59fV9nZXRNS0RpY3QoZSl7Y29uc3QgdD1uZXcgRGljdChudWxsKTtlJiZ0LnNldCgiUiIsZSk7dGhpcy5ib3JkZXJDb2xvciYmdC5zZXQoIkJDIixnZXRQZGZDb2xvckFycmF5KHRoaXMuYm9yZGVyQ29sb3IpKTt0aGlzLmJhY2tncm91bmRDb2xvciYmdC5zZXQoIkJHIixnZXRQZGZDb2xvckFycmF5KHRoaXMuYmFja2dyb3VuZENvbG9yKSk7cmV0dXJuIHQuc2l6ZT4wP3Q6bnVsbH1hbWVuZFNhdmVkRGljdChlLHQpe31zZXRWYWx1ZShlLHQsaSxhKXtjb25zdHtkaWN0OnIscmVmOnN9PWZ1bmN0aW9uIGdldFBhcmVudFRvVXBkYXRlKGUsdCxpKXtjb25zdCBhPW5ldyBSZWZTZXQscj1lLHM9e2RpY3Q6bnVsbCxyZWY6bnVsbH07Zm9yKDtlIGluc3RhbmNlb2YgRGljdCYmIWEuaGFzKHQpOyl7YS5wdXQodCk7aWYoZS5oYXMoIlQiKSlicmVhaztpZighKCh0PWUuZ2V0UmF3KCJQYXJlbnQiKSlpbnN0YW5jZW9mIFJlZikpcmV0dXJuIHM7ZT1pLmZldGNoKHQpfWlmKGUgaW5zdGFuY2VvZiBEaWN0JiZlIT09cil7cy5kaWN0PWU7cy5yZWY9dH1yZXR1cm4gc30oZSx0aGlzLnJlZixpKTtpZihyKXtpZighYS5oYXMocykpe2NvbnN0IGU9ci5jbG9uZSgpO2Uuc2V0KCJWIix0KTthLnB1dChzLHtkYXRhOmV9KTtyZXR1cm4gZX19ZWxzZSBlLnNldCgiViIsdCk7cmV0dXJuIG51bGx9YXN5bmMgc2F2ZShlLHQsaSxyKXtjb25zdCBzPWk/LmdldCh0aGlzLmRhdGEuaWQpLG49dGhpcy5fYnVpbGRGbGFncyhzPy5ub1ZpZXcscz8ubm9QcmludCk7bGV0IG89cz8udmFsdWUsZz1zPy5yb3RhdGlvbjtpZihvPT09dGhpcy5kYXRhLmZpZWxkVmFsdWV8fHZvaWQgMD09PW8pe2lmKCF0aGlzLl9oYXNWYWx1ZUZyb21YRkEmJnZvaWQgMD09PWcmJnZvaWQgMD09PW4pcmV0dXJuO298fD10aGlzLmRhdGEuZmllbGRWYWx1ZX1pZih2b2lkIDA9PT1nJiYhdGhpcy5faGFzVmFsdWVGcm9tWEZBJiZBcnJheS5pc0FycmF5KG8pJiZBcnJheS5pc0FycmF5KHRoaXMuZGF0YS5maWVsZFZhbHVlKSYmaXNBcnJheUVxdWFsKG8sdGhpcy5kYXRhLmZpZWxkVmFsdWUpJiZ2b2lkIDA9PT1uKXJldHVybjt2b2lkIDA9PT1nJiYoZz10aGlzLnJvdGF0aW9uKTtsZXQgYz1udWxsO2lmKCF0aGlzLl9uZWVkQXBwZWFyYW5jZXMpe2M9YXdhaXQgdGhpcy5fZ2V0QXBwZWFyYW5jZShlLHQsaCxpKTtpZihudWxsPT09YyYmdm9pZCAwPT09bilyZXR1cm59bGV0IGw9ITE7aWYoYz8ubmVlZEFwcGVhcmFuY2VzKXtsPSEwO2M9bnVsbH1jb25zdHt4cmVmOkN9PWUsUT1DLmZldGNoSWZSZWYodGhpcy5yZWYpO2lmKCEoUSBpbnN0YW5jZW9mIERpY3QpKXJldHVybjtjb25zdCBFPW5ldyBEaWN0KEMpO2Zvcihjb25zdCBlIG9mIFEuZ2V0S2V5cygpKSJBUCIhPT1lJiZFLnNldChlLFEuZ2V0UmF3KGUpKTtpZih2b2lkIDAhPT1uKXtFLnNldCgiRiIsbik7aWYobnVsbD09PWMmJiFsKXtjb25zdCBlPVEuZ2V0UmF3KCJBUCIpO2UmJkUuc2V0KCJBUCIsZSl9fWNvbnN0IHU9e3BhdGg6dGhpcy5kYXRhLmZpZWxkTmFtZSx2YWx1ZTpvfSxkPXRoaXMuc2V0VmFsdWUoRSxBcnJheS5pc0FycmF5KG8pP28ubWFwKHN0cmluZ1RvQXNjaWlPclVURjE2QkUpOnN0cmluZ1RvQXNjaWlPclVURjE2QkUobyksQyxyKTt0aGlzLmFtZW5kU2F2ZWREaWN0KGksZHx8RSk7Y29uc3QgZj10aGlzLl9nZXRNS0RpY3QoZyk7ZiYmRS5zZXQoIk1LIixmKTtyLnB1dCh0aGlzLnJlZix7ZGF0YTpFLHhmYTp1LG5lZWRBcHBlYXJhbmNlczpsfSk7aWYobnVsbCE9PWMpe2NvbnN0IGU9Qy5nZXROZXdUZW1wb3JhcnlSZWYoKSx0PW5ldyBEaWN0KEMpO0Uuc2V0KCJBUCIsdCk7dC5zZXQoIk4iLGUpO2NvbnN0IHM9dGhpcy5fZ2V0U2F2ZUZpZWxkUmVzb3VyY2VzKEMpLG49bmV3IFN0cmluZ1N0cmVhbShjKSxvPW4uZGljdD1uZXcgRGljdChDKTtvLnNldCgiU3VidHlwZSIsTmFtZS5nZXQoIkZvcm0iKSk7by5zZXQoIlJlc291cmNlcyIscyk7by5zZXQoIkJCb3giLFswLDAsdGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF0sdGhpcy5kYXRhLnJlY3RbM10tdGhpcy5kYXRhLnJlY3RbMV1dKTtjb25zdCBnPXRoaXMuZ2V0Um90YXRpb25NYXRyaXgoaSk7ZyE9PWEmJm8uc2V0KCJNYXRyaXgiLGcpO3IucHV0KGUse2RhdGE6bix4ZmE6bnVsbCxuZWVkQXBwZWFyYW5jZXM6ITF9KX1FLnNldCgiTSIsYEQ6JHtnZXRNb2RpZmljYXRpb25EYXRlKCl9YCl9YXN5bmMgX2dldEFwcGVhcmFuY2UoZSx0LGksYSl7aWYodGhpcy5oYXNGaWVsZEZsYWcob0EpKXJldHVybiBudWxsO2NvbnN0IHI9YT8uZ2V0KHRoaXMuZGF0YS5pZCk7bGV0IHMsbjtpZihyKXtzPXIuZm9ybWF0dGVkVmFsdWV8fHIudmFsdWU7bj1yLnJvdGF0aW9ufWlmKHZvaWQgMD09PW4mJnZvaWQgMD09PXMmJiF0aGlzLl9uZWVkQXBwZWFyYW5jZXMmJighdGhpcy5faGFzVmFsdWVGcm9tWEZBfHx0aGlzLmFwcGVhcmFuY2UpKXJldHVybiBudWxsO2NvbnN0IGc9dGhpcy5nZXRCb3JkZXJBbmRCYWNrZ3JvdW5kQXBwZWFyYW5jZXMoYSk7aWYodm9pZCAwPT09cyl7cz10aGlzLmRhdGEuZmllbGRWYWx1ZTtpZighcylyZXR1cm5gL1R4IEJNQyBxICR7Z31RIEVNQ2B9QXJyYXkuaXNBcnJheShzKSYmMT09PXMubGVuZ3RoJiYocz1zWzBdKTthc3NlcnQoInN0cmluZyI9PXR5cGVvZiBzLCJFeHBlY3RlZCBgdmFsdWVgIHRvIGJlIGEgc3RyaW5nLiIpO3M9cy50cmltRW5kKCk7aWYodGhpcy5kYXRhLmNvbWJvKXtjb25zdCBlPXRoaXMuZGF0YS5vcHRpb25zLmZpbmQoKCh7ZXhwb3J0VmFsdWU6ZX0pPT5zPT09ZSkpO3M9ZT8uZGlzcGxheVZhbHVlfHxzfWlmKCIiPT09cylyZXR1cm5gL1R4IEJNQyBxICR7Z31RIEVNQ2A7dm9pZCAwPT09biYmKG49dGhpcy5yb3RhdGlvbik7bGV0IGMsbD0tMTtpZih0aGlzLmRhdGEubXVsdGlMaW5lKXtjPXMuc3BsaXQoL1xyXG4/fFxuLykubWFwKChlPT5lLm5vcm1hbGl6ZSgiTkZDIikpKTtsPWMubGVuZ3RofWVsc2UgYz1bcy5yZXBsYWNlKC9cclxuP3xcbi8sIiIpLm5vcm1hbGl6ZSgiTkZDIildO2xldCBDPXRoaXMuZGF0YS5yZWN0WzNdLXRoaXMuZGF0YS5yZWN0WzFdLFE9dGhpcy5kYXRhLnJlY3RbMl0tdGhpcy5kYXRhLnJlY3RbMF07OTAhPT1uJiYyNzAhPT1ufHwoW1EsQ109W0MsUV0pO3RoaXMuX2RlZmF1bHRBcHBlYXJhbmNlfHwodGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YT1wYXJzZURlZmF1bHRBcHBlYXJhbmNlKHRoaXMuX2RlZmF1bHRBcHBlYXJhbmNlPSIvSGVsdmV0aWNhIDAgVGYgMCBnIikpO2xldCBFLHUsZCxmPWF3YWl0IFdpZGdldEFubm90YXRpb24uX2dldEZvbnREYXRhKGUsdCx0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhLHRoaXMuX2ZpZWxkUmVzb3VyY2VzLm1lcmdlZFJlc291cmNlcyk7Y29uc3QgcD1bXTtsZXQgbT0hMTtmb3IoY29uc3QgZSBvZiBjKXtjb25zdCB0PWYuZW5jb2RlU3RyaW5nKGUpO3QubGVuZ3RoPjEmJihtPSEwKTtwLnB1c2godC5qb2luKCIiKSl9aWYobSYmaSZoKXJldHVybntuZWVkQXBwZWFyYW5jZXM6ITB9O2lmKG0mJnRoaXMuX2lzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkKXtjb25zdCBpPXRoaXMuZGF0YS5jb21iPyJtb25vc3BhY2UiOiJzYW5zLXNlcmlmIixhPW5ldyBGYWtlVW5pY29kZUZvbnQoZS54cmVmLGkpLHI9YS5jcmVhdGVGb250UmVzb3VyY2VzKGMuam9pbigiIikpLG49ci5nZXRSYXcoIkZvbnQiKTtpZih0aGlzLl9maWVsZFJlc291cmNlcy5tZXJnZWRSZXNvdXJjZXMuaGFzKCJGb250Iikpe2NvbnN0IGU9dGhpcy5fZmllbGRSZXNvdXJjZXMubWVyZ2VkUmVzb3VyY2VzLmdldCgiRm9udCIpO2Zvcihjb25zdCB0IG9mIG4uZ2V0S2V5cygpKWUuc2V0KHQsbi5nZXRSYXcodCkpfWVsc2UgdGhpcy5fZmllbGRSZXNvdXJjZXMubWVyZ2VkUmVzb3VyY2VzLnNldCgiRm9udCIsbik7Y29uc3Qgbz1hLmZvbnROYW1lLm5hbWU7Zj1hd2FpdCBXaWRnZXRBbm5vdGF0aW9uLl9nZXRGb250RGF0YShlLHQse2ZvbnROYW1lOm8sZm9udFNpemU6MH0scik7Zm9yKGxldCBlPTAsdD1wLmxlbmd0aDtlPHQ7ZSsrKXBbZV09c3RyaW5nVG9VVEYxNlN0cmluZyhjW2VdKTtjb25zdCBnPU9iamVjdC5hc3NpZ24oT2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhKTt0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhLmZvbnRTaXplPTA7dGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YS5mb250TmFtZT1vO1tFLHUsZF09dGhpcy5fY29tcHV0ZUZvbnRTaXplKEMtMixRLTQscyxmLGwpO3RoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGE9Z31lbHNle3RoaXMuX2lzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkfHx3YXJuKCJfZ2V0QXBwZWFyYW5jZTogT2Zmc2NyZWVuQ2FudmFzIGlzIG5vdCBzdXBwb3J0ZWQsIGFubm90YXRpb24gbWF5IG5vdCByZW5kZXIgY29ycmVjdGx5LiIpO1tFLHUsZF09dGhpcy5fY29tcHV0ZUZvbnRTaXplKEMtMixRLTQscyxmLGwpfWxldCB5PWYuZGVzY2VudDt5PWlzTmFOKHkpP28qZDpNYXRoLm1heChvKmQsTWF0aC5hYnMoeSkqdSk7Y29uc3Qgdz1NYXRoLm1pbihNYXRoLmZsb29yKChDLXUpLzIpLDEpLGI9dGhpcy5kYXRhLnRleHRBbGlnbm1lbnQ7aWYodGhpcy5kYXRhLm11bHRpTGluZSlyZXR1cm4gdGhpcy5fZ2V0TXVsdGlsaW5lQXBwZWFyYW5jZShFLHAsZix1LFEsQyxiLDIsdyx5LGQsYSk7aWYodGhpcy5kYXRhLmNvbWIpcmV0dXJuIHRoaXMuX2dldENvbWJBcHBlYXJhbmNlKEUsZixwWzBdLHUsUSxDLDIsdyx5LGQsYSk7Y29uc3QgRD13K3k7aWYoMD09PWJ8fGI+MilyZXR1cm5gL1R4IEJNQyBxICR7Z31CVCBgK0UrYCAxIDAgMCAxICR7bnVtYmVyVG9TdHJpbmcoMil9ICR7bnVtYmVyVG9TdHJpbmcoRCl9IFRtICgke2VzY2FwZVN0cmluZyhwWzBdKX0pIFRqIEVUIFEgRU1DYDtyZXR1cm5gL1R4IEJNQyBxICR7Z31CVCBgK0UrYCAxIDAgMCAxIDAgMCBUbSAke3RoaXMuX3JlbmRlclRleHQocFswXSxmLHUsUSxiLHtzaGlmdDowfSwyLEQpfSBFVCBRIEVNQ2B9c3RhdGljIGFzeW5jIF9nZXRGb250RGF0YShlLHQsaSxhKXtjb25zdCByPW5ldyBPcGVyYXRvckxpc3Qscz17Zm9udDpudWxsLGNsb25lKCl7cmV0dXJuIHRoaXN9fSx7Zm9udE5hbWU6bixmb250U2l6ZTpvfT1pO2F3YWl0IGUuaGFuZGxlU2V0Rm9udChhLFtuJiZOYW1lLmdldChuKSxvXSxudWxsLHIsdCxzLG51bGwpO3JldHVybiBzLmZvbnR9X2dldFRleHRXaWR0aChlLHQpe3JldHVybiB0LmNoYXJzVG9HbHlwaHMoZSkucmVkdWNlKCgoZSx0KT0+ZSt0LndpZHRoKSwwKS8xZTN9X2NvbXB1dGVGb250U2l6ZShlLHQsaSxhLHIpe2xldHtmb250U2l6ZTpufT10aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhLG89KG58fDEyKSpzLGc9TWF0aC5yb3VuZChlL28pO2lmKCFuKXtjb25zdCByb3VuZFdpdGhUd29EaWdpdHM9ZT0+TWF0aC5mbG9vcigxMDAqZSkvMTAwO2lmKC0xPT09cil7Y29uc3Qgcj10aGlzLl9nZXRUZXh0V2lkdGgoaSxhKTtuPXJvdW5kV2l0aFR3b0RpZ2l0cyhNYXRoLm1pbihlL3MsdC9yKSk7Zz0xfWVsc2V7Y29uc3QgYz1pLnNwbGl0KC9cclxuP3xcbi8pLGw9W107Zm9yKGNvbnN0IGUgb2YgYyl7Y29uc3QgdD1hLmVuY29kZVN0cmluZyhlKS5qb2luKCIiKSxpPWEuY2hhcnNUb0dseXBocyh0KSxyPWEuZ2V0Q2hhclBvc2l0aW9ucyh0KTtsLnB1c2goe2xpbmU6dCxnbHlwaHM6aSxwb3NpdGlvbnM6cn0pfWNvbnN0IGlzVG9vQmlnPWk9PntsZXQgcj0wO2Zvcihjb25zdCBzIG9mIGwpe3IrPXRoaXMuX3NwbGl0TGluZShudWxsLGEsaSx0LHMpLmxlbmd0aCppO2lmKHI+ZSlyZXR1cm4hMH1yZXR1cm4hMX07Zz1NYXRoLm1heChnLHIpO2Zvcig7Oyl7bz1lL2c7bj1yb3VuZFdpdGhUd29EaWdpdHMoby9zKTtpZighaXNUb29CaWcobikpYnJlYWs7ZysrfX1jb25zdHtmb250TmFtZTpjLGZvbnRDb2xvcjpsfT10aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhO3RoaXMuX2RlZmF1bHRBcHBlYXJhbmNlPWZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRBcHBlYXJhbmNlKHtmb250U2l6ZTplLGZvbnROYW1lOnQsZm9udENvbG9yOml9KXtyZXR1cm5gLyR7ZXNjYXBlUERGTmFtZSh0KX0gJHtlfSBUZiAke2dldFBkZkNvbG9yKGksITApfWB9KHtmb250U2l6ZTpuLGZvbnROYW1lOmMsZm9udENvbG9yOmx9KX1yZXR1cm5bdGhpcy5fZGVmYXVsdEFwcGVhcmFuY2UsbixlL2ddfV9yZW5kZXJUZXh0KGUsdCxpLGEscixzLG4sbyl7bGV0IGc7aWYoMT09PXIpe2c9KGEtdGhpcy5fZ2V0VGV4dFdpZHRoKGUsdCkqaSkvMn1lbHNlIGlmKDI9PT1yKXtnPWEtdGhpcy5fZ2V0VGV4dFdpZHRoKGUsdCkqaS1ufWVsc2UgZz1uO2NvbnN0IGM9bnVtYmVyVG9TdHJpbmcoZy1zLnNoaWZ0KTtzLnNoaWZ0PWc7cmV0dXJuYCR7Y30gJHtvPW51bWJlclRvU3RyaW5nKG8pfSBUZCAoJHtlc2NhcGVTdHJpbmcoZSl9KSBUamB9X2dldFNhdmVGaWVsZFJlc291cmNlcyhlKXtjb25zdHtsb2NhbFJlc291cmNlczp0LGFwcGVhcmFuY2VSZXNvdXJjZXM6aSxhY3JvRm9ybVJlc291cmNlczphfT10aGlzLl9maWVsZFJlc291cmNlcyxyPXRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGE/LmZvbnROYW1lO2lmKCFyKXJldHVybiB0fHxEaWN0LmVtcHR5O2Zvcihjb25zdCBlIG9mW3QsaV0paWYoZSBpbnN0YW5jZW9mIERpY3Qpe2NvbnN0IHQ9ZS5nZXQoIkZvbnQiKTtpZih0IGluc3RhbmNlb2YgRGljdCYmdC5oYXMocikpcmV0dXJuIGV9aWYoYSBpbnN0YW5jZW9mIERpY3Qpe2NvbnN0IGk9YS5nZXQoIkZvbnQiKTtpZihpIGluc3RhbmNlb2YgRGljdCYmaS5oYXMocikpe2NvbnN0IGE9bmV3IERpY3QoZSk7YS5zZXQocixpLmdldFJhdyhyKSk7Y29uc3Qgcz1uZXcgRGljdChlKTtzLnNldCgiRm9udCIsYSk7cmV0dXJuIERpY3QubWVyZ2Uoe3hyZWY6ZSxkaWN0QXJyYXk6W3MsdF0sbWVyZ2VTdWJEaWN0czohMH0pfX1yZXR1cm4gdHx8RGljdC5lbXB0eX1nZXRGaWVsZE9iamVjdCgpe3JldHVybiBudWxsfX1jbGFzcyBUZXh0V2lkZ2V0QW5ub3RhdGlvbiBleHRlbmRzIFdpZGdldEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7Y29uc3R7ZGljdDp0fT1lO2lmKHQuaGFzKCJQTUQiKSl7dGhpcy5mbGFnc3w9JDt0aGlzLmRhdGEuaGlkZGVuPSEwO3dhcm4oIkJhcmNvZGVzIGFyZSBub3Qgc3VwcG9ydGVkIil9dGhpcy5kYXRhLmhhc093bkNhbnZhcz10aGlzLmRhdGEucmVhZE9ubHkmJiF0aGlzLmRhdGEubm9IVE1MO3RoaXMuX2hhc1RleHQ9ITA7InN0cmluZyIhPXR5cGVvZiB0aGlzLmRhdGEuZmllbGRWYWx1ZSYmKHRoaXMuZGF0YS5maWVsZFZhbHVlPSIiKTtsZXQgaT1nZXRJbmhlcml0YWJsZVByb3BlcnR5KHtkaWN0OnQsa2V5OiJRIn0pOyghTnVtYmVyLmlzSW50ZWdlcihpKXx8aTwwfHxpPjIpJiYoaT1udWxsKTt0aGlzLmRhdGEudGV4dEFsaWdubWVudD1pO2xldCBhPWdldEluaGVyaXRhYmxlUHJvcGVydHkoe2RpY3Q6dCxrZXk6Ik1heExlbiJ9KTsoIU51bWJlci5pc0ludGVnZXIoYSl8fGE8MCkmJihhPTApO3RoaXMuZGF0YS5tYXhMZW49YTt0aGlzLmRhdGEubXVsdGlMaW5lPXRoaXMuaGFzRmllbGRGbGFnKG5BKTt0aGlzLmRhdGEuY29tYj10aGlzLmhhc0ZpZWxkRmxhZyhCQSkmJiF0aGlzLmhhc0ZpZWxkRmxhZyhuQSkmJiF0aGlzLmhhc0ZpZWxkRmxhZyhvQSkmJiF0aGlzLmhhc0ZpZWxkRmxhZyhsQSkmJjAhPT10aGlzLmRhdGEubWF4TGVuO3RoaXMuZGF0YS5kb05vdFNjcm9sbD10aGlzLmhhc0ZpZWxkRmxhZyhDQSl9Z2V0IGhhc1RleHRDb250ZW50KCl7cmV0dXJuISF0aGlzLmFwcGVhcmFuY2UmJiF0aGlzLl9uZWVkQXBwZWFyYW5jZXN9X2dldENvbWJBcHBlYXJhbmNlKGUsdCxpLGEscixzLG4sbyxnLGMsbCl7Y29uc3QgaD1yL3RoaXMuZGF0YS5tYXhMZW4sQz10aGlzLmdldEJvcmRlckFuZEJhY2tncm91bmRBcHBlYXJhbmNlcyhsKSxRPVtdLEU9dC5nZXRDaGFyUG9zaXRpb25zKGkpO2Zvcihjb25zdFtlLHRdb2YgRSlRLnB1c2goYCgke2VzY2FwZVN0cmluZyhpLnN1YnN0cmluZyhlLHQpKX0pIFRqYCk7Y29uc3QgdT1RLmpvaW4oYCAke251bWJlclRvU3RyaW5nKGgpfSAwIFRkIGApO3JldHVybmAvVHggQk1DIHEgJHtDfUJUIGArZStgIDEgMCAwIDEgJHtudW1iZXJUb1N0cmluZyhuKX0gJHtudW1iZXJUb1N0cmluZyhvK2cpfSBUbSAke3V9IEVUIFEgRU1DYH1fZ2V0TXVsdGlsaW5lQXBwZWFyYW5jZShlLHQsaSxhLHIscyxuLG8sZyxjLGwsaCl7Y29uc3QgQz1bXSxRPXItMipvLEU9e3NoaWZ0OjB9O2ZvcihsZXQgZT0wLHM9dC5sZW5ndGg7ZTxzO2UrKyl7Y29uc3Qgcz10W2VdLGg9dGhpcy5fc3BsaXRMaW5lKHMsaSxhLFEpO2ZvcihsZXQgdD0wLHM9aC5sZW5ndGg7dDxzO3QrKyl7Y29uc3Qgcz1oW3RdLFE9MD09PWUmJjA9PT10Py1nLShsLWMpOi1sO0MucHVzaCh0aGlzLl9yZW5kZXJUZXh0KHMsaSxhLHIsbixFLG8sUSkpfX1jb25zdCB1PXRoaXMuZ2V0Qm9yZGVyQW5kQmFja2dyb3VuZEFwcGVhcmFuY2VzKGgpLGQ9Qy5qb2luKCJcbiIpO3JldHVybmAvVHggQk1DIHEgJHt1fUJUIGArZStgIDEgMCAwIDEgMCAke251bWJlclRvU3RyaW5nKHMpfSBUbSAke2R9IEVUIFEgRU1DYH1fc3BsaXRMaW5lKGUsdCxpLGEscj17fSl7ZT1yLmxpbmV8fGU7Y29uc3Qgcz1yLmdseXBoc3x8dC5jaGFyc1RvR2x5cGhzKGUpO2lmKHMubGVuZ3RoPD0xKXJldHVybltlXTtjb25zdCBuPXIucG9zaXRpb25zfHx0LmdldENoYXJQb3NpdGlvbnMoZSksbz1pLzFlMyxnPVtdO2xldCBjPS0xLGw9LTEsaD0tMSxDPTAsUT0wO2ZvcihsZXQgdD0wLGk9cy5sZW5ndGg7dDxpO3QrKyl7Y29uc3RbaSxyXT1uW3RdLEU9c1t0XSx1PUUud2lkdGgqbztpZigiICI9PT1FLnVuaWNvZGUpaWYoUSt1PmEpe2cucHVzaChlLnN1YnN0cmluZyhDLGkpKTtDPWk7UT11O2M9LTE7aD0tMX1lbHNle1ErPXU7Yz1pO2w9cjtoPXR9ZWxzZSBpZihRK3U+YSlpZigtMSE9PWMpe2cucHVzaChlLnN1YnN0cmluZyhDLGwpKTtDPWw7dD1oKzE7Yz0tMTtRPTB9ZWxzZXtnLnB1c2goZS5zdWJzdHJpbmcoQyxpKSk7Qz1pO1E9dX1lbHNlIFErPXV9QzxlLmxlbmd0aCYmZy5wdXNoKGUuc3Vic3RyaW5nKEMsZS5sZW5ndGgpKTtyZXR1cm4gZ31hc3luYyBleHRyYWN0VGV4dENvbnRlbnQoZSx0LGkpe2F3YWl0IHN1cGVyLmV4dHJhY3RUZXh0Q29udGVudChlLHQsaSk7Y29uc3QgYT10aGlzLmRhdGEudGV4dENvbnRlbnQ7aWYoIWEpcmV0dXJuO2NvbnN0IHI9YS5qb2luKCJcbiIpO2lmKHI9PT10aGlzLmRhdGEuZmllbGRWYWx1ZSlyZXR1cm47Y29uc3Qgcz1yLnJlcGxhY2VBbGwoLyhbLiorP14ke30oKXxbXF1cXF0pfChccyspL2csKChlLHQpPT50P2BcXCR7dH1gOiJcXHMrIikpO25ldyBSZWdFeHAoYF5cXHMqJHtzfVxccyokYCkudGVzdCh0aGlzLmRhdGEuZmllbGRWYWx1ZSkmJih0aGlzLmRhdGEudGV4dENvbnRlbnQ9dGhpcy5kYXRhLmZpZWxkVmFsdWUuc3BsaXQoIlxuIikpfWdldEZpZWxkT2JqZWN0KCl7cmV0dXJue2lkOnRoaXMuZGF0YS5pZCx2YWx1ZTp0aGlzLmRhdGEuZmllbGRWYWx1ZSxkZWZhdWx0VmFsdWU6dGhpcy5kYXRhLmRlZmF1bHRGaWVsZFZhbHVlfHwiIixtdWx0aWxpbmU6dGhpcy5kYXRhLm11bHRpTGluZSxwYXNzd29yZDp0aGlzLmhhc0ZpZWxkRmxhZyhvQSksY2hhckxpbWl0OnRoaXMuZGF0YS5tYXhMZW4sY29tYjp0aGlzLmRhdGEuY29tYixlZGl0YWJsZTohdGhpcy5kYXRhLnJlYWRPbmx5LGhpZGRlbjp0aGlzLmRhdGEuaGlkZGVuLG5hbWU6dGhpcy5kYXRhLmZpZWxkTmFtZSxyZWN0OnRoaXMuZGF0YS5yZWN0LGFjdGlvbnM6dGhpcy5kYXRhLmFjdGlvbnMscGFnZTp0aGlzLmRhdGEucGFnZUluZGV4LHN0cm9rZUNvbG9yOnRoaXMuZGF0YS5ib3JkZXJDb2xvcixmaWxsQ29sb3I6dGhpcy5kYXRhLmJhY2tncm91bmRDb2xvcixyb3RhdGlvbjp0aGlzLnJvdGF0aW9uLHR5cGU6InRleHQifX19Y2xhc3MgQnV0dG9uV2lkZ2V0QW5ub3RhdGlvbiBleHRlbmRzIFdpZGdldEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7dGhpcy5jaGVja2VkQXBwZWFyYW5jZT1udWxsO3RoaXMudW5jaGVja2VkQXBwZWFyYW5jZT1udWxsO3RoaXMuZGF0YS5jaGVja0JveD0hdGhpcy5oYXNGaWVsZEZsYWcoZ0EpJiYhdGhpcy5oYXNGaWVsZEZsYWcoSUEpO3RoaXMuZGF0YS5yYWRpb0J1dHRvbj10aGlzLmhhc0ZpZWxkRmxhZyhnQSkmJiF0aGlzLmhhc0ZpZWxkRmxhZyhJQSk7dGhpcy5kYXRhLnB1c2hCdXR0b249dGhpcy5oYXNGaWVsZEZsYWcoSUEpO3RoaXMuZGF0YS5pc1Rvb2x0aXBPbmx5PSExO2lmKHRoaXMuZGF0YS5jaGVja0JveCl0aGlzLl9wcm9jZXNzQ2hlY2tCb3goZSk7ZWxzZSBpZih0aGlzLmRhdGEucmFkaW9CdXR0b24pdGhpcy5fcHJvY2Vzc1JhZGlvQnV0dG9uKGUpO2Vsc2UgaWYodGhpcy5kYXRhLnB1c2hCdXR0b24pe3RoaXMuZGF0YS5oYXNPd25DYW52YXM9ITA7dGhpcy5kYXRhLm5vSFRNTD0hMTt0aGlzLl9wcm9jZXNzUHVzaEJ1dHRvbihlKX1lbHNlIHdhcm4oIkludmFsaWQgZmllbGQgZmxhZ3MgZm9yIGJ1dHRvbiB3aWRnZXQgYW5ub3RhdGlvbiIpfWFzeW5jIGdldE9wZXJhdG9yTGlzdChlLHQsaSxyKXtpZih0aGlzLmRhdGEucHVzaEJ1dHRvbilyZXR1cm4gc3VwZXIuZ2V0T3BlcmF0b3JMaXN0KGUsdCxpLCExLHIpO2xldCBzPW51bGwsbj1udWxsO2lmKHIpe2NvbnN0IGU9ci5nZXQodGhpcy5kYXRhLmlkKTtzPWU/ZS52YWx1ZTpudWxsO249ZT9lLnJvdGF0aW9uOm51bGx9aWYobnVsbD09PXMmJnRoaXMuYXBwZWFyYW5jZSlyZXR1cm4gc3VwZXIuZ2V0T3BlcmF0b3JMaXN0KGUsdCxpLHIpO251bGw9PXMmJihzPXRoaXMuZGF0YS5jaGVja0JveD90aGlzLmRhdGEuZmllbGRWYWx1ZT09PXRoaXMuZGF0YS5leHBvcnRWYWx1ZTp0aGlzLmRhdGEuZmllbGRWYWx1ZT09PXRoaXMuZGF0YS5idXR0b25WYWx1ZSk7Y29uc3Qgbz1zP3RoaXMuY2hlY2tlZEFwcGVhcmFuY2U6dGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlO2lmKG8pe2NvbnN0IHM9dGhpcy5hcHBlYXJhbmNlLGc9bG9va3VwTWF0cml4KG8uZGljdC5nZXRBcnJheSgiTWF0cml4IiksYSk7biYmby5kaWN0LnNldCgiTWF0cml4Iix0aGlzLmdldFJvdGF0aW9uTWF0cml4KHIpKTt0aGlzLmFwcGVhcmFuY2U9bztjb25zdCBjPXN1cGVyLmdldE9wZXJhdG9yTGlzdChlLHQsaSxyKTt0aGlzLmFwcGVhcmFuY2U9cztvLmRpY3Quc2V0KCJNYXRyaXgiLGcpO3JldHVybiBjfXJldHVybntvcExpc3Q6bmV3IE9wZXJhdG9yTGlzdCxzZXBhcmF0ZUZvcm06ITEsc2VwYXJhdGVDYW52YXM6ITF9fWFzeW5jIHNhdmUoZSx0LGksYSl7dGhpcy5kYXRhLmNoZWNrQm94P3RoaXMuX3NhdmVDaGVja2JveChlLHQsaSxhKTp0aGlzLmRhdGEucmFkaW9CdXR0b24mJnRoaXMuX3NhdmVSYWRpb0J1dHRvbihlLHQsaSxhKX1hc3luYyBfc2F2ZUNoZWNrYm94KGUsdCxpLGEpe2lmKCFpKXJldHVybjtjb25zdCByPWkuZ2V0KHRoaXMuZGF0YS5pZCkscz10aGlzLl9idWlsZEZsYWdzKHI/Lm5vVmlldyxyPy5ub1ByaW50KTtsZXQgbj1yPy5yb3RhdGlvbixvPXI/LnZhbHVlO2lmKHZvaWQgMD09PW4mJnZvaWQgMD09PXMpe2lmKHZvaWQgMD09PW8pcmV0dXJuO2lmKHRoaXMuZGF0YS5maWVsZFZhbHVlPT09dGhpcy5kYXRhLmV4cG9ydFZhbHVlPT09bylyZXR1cm59bGV0IGc9ZS54cmVmLmZldGNoSWZSZWYodGhpcy5yZWYpO2lmKCEoZyBpbnN0YW5jZW9mIERpY3QpKXJldHVybjtnPWcuY2xvbmUoKTt2b2lkIDA9PT1uJiYobj10aGlzLnJvdGF0aW9uKTt2b2lkIDA9PT1vJiYobz10aGlzLmRhdGEuZmllbGRWYWx1ZT09PXRoaXMuZGF0YS5leHBvcnRWYWx1ZSk7Y29uc3QgYz17cGF0aDp0aGlzLmRhdGEuZmllbGROYW1lLHZhbHVlOm8/dGhpcy5kYXRhLmV4cG9ydFZhbHVlOiIifSxsPU5hbWUuZ2V0KG8/dGhpcy5kYXRhLmV4cG9ydFZhbHVlOiJPZmYiKTt0aGlzLnNldFZhbHVlKGcsbCxlLnhyZWYsYSk7Zy5zZXQoIkFTIixsKTtnLnNldCgiTSIsYEQ6JHtnZXRNb2RpZmljYXRpb25EYXRlKCl9YCk7dm9pZCAwIT09cyYmZy5zZXQoIkYiLHMpO2NvbnN0IGg9dGhpcy5fZ2V0TUtEaWN0KG4pO2gmJmcuc2V0KCJNSyIsaCk7YS5wdXQodGhpcy5yZWYse2RhdGE6Zyx4ZmE6YyxuZWVkQXBwZWFyYW5jZXM6ITF9KX1hc3luYyBfc2F2ZVJhZGlvQnV0dG9uKGUsdCxpLGEpe2lmKCFpKXJldHVybjtjb25zdCByPWkuZ2V0KHRoaXMuZGF0YS5pZCkscz10aGlzLl9idWlsZEZsYWdzKHI/Lm5vVmlldyxyPy5ub1ByaW50KTtsZXQgbj1yPy5yb3RhdGlvbixvPXI/LnZhbHVlO2lmKHZvaWQgMD09PW4mJnZvaWQgMD09PXMpe2lmKHZvaWQgMD09PW8pcmV0dXJuO2lmKHRoaXMuZGF0YS5maWVsZFZhbHVlPT09dGhpcy5kYXRhLmJ1dHRvblZhbHVlPT09bylyZXR1cm59bGV0IGc9ZS54cmVmLmZldGNoSWZSZWYodGhpcy5yZWYpO2lmKCEoZyBpbnN0YW5jZW9mIERpY3QpKXJldHVybjtnPWcuY2xvbmUoKTt2b2lkIDA9PT1vJiYobz10aGlzLmRhdGEuZmllbGRWYWx1ZT09PXRoaXMuZGF0YS5idXR0b25WYWx1ZSk7dm9pZCAwPT09biYmKG49dGhpcy5yb3RhdGlvbik7Y29uc3QgYz17cGF0aDp0aGlzLmRhdGEuZmllbGROYW1lLHZhbHVlOm8/dGhpcy5kYXRhLmJ1dHRvblZhbHVlOiIifSxsPU5hbWUuZ2V0KG8/dGhpcy5kYXRhLmJ1dHRvblZhbHVlOiJPZmYiKTtvJiZ0aGlzLnNldFZhbHVlKGcsbCxlLnhyZWYsYSk7Zy5zZXQoIkFTIixsKTtnLnNldCgiTSIsYEQ6JHtnZXRNb2RpZmljYXRpb25EYXRlKCl9YCk7dm9pZCAwIT09cyYmZy5zZXQoIkYiLHMpO2NvbnN0IGg9dGhpcy5fZ2V0TUtEaWN0KG4pO2gmJmcuc2V0KCJNSyIsaCk7YS5wdXQodGhpcy5yZWYse2RhdGE6Zyx4ZmE6YyxuZWVkQXBwZWFyYW5jZXM6ITF9KX1fZ2V0RGVmYXVsdENoZWNrZWRBcHBlYXJhbmNlKGUsdCl7Y29uc3QgaT10aGlzLmRhdGEucmVjdFsyXS10aGlzLmRhdGEucmVjdFswXSxhPXRoaXMuZGF0YS5yZWN0WzNdLXRoaXMuZGF0YS5yZWN0WzFdLHI9WzAsMCxpLGFdLHM9LjgqTWF0aC5taW4oaSxhKTtsZXQgbixvO2lmKCJjaGVjayI9PT10KXtuPXt3aWR0aDouNzU1KnMsaGVpZ2h0Oi43MDUqc307bz0iMyJ9ZWxzZSBpZigiZGlzYyI9PT10KXtuPXt3aWR0aDouNzkxKnMsaGVpZ2h0Oi43MDUqc307bz0ibCJ9ZWxzZSB1bnJlYWNoYWJsZShgX2dldERlZmF1bHRDaGVja2VkQXBwZWFyYW5jZSAtIHVuc3VwcG9ydGVkIHR5cGU6ICR7dH1gKTtjb25zdCBnPWBxIEJUIC9QZGZKc1phRGIgJHtzfSBUZiAwIGcgJHtudW1iZXJUb1N0cmluZygoaS1uLndpZHRoKS8yKX0gJHtudW1iZXJUb1N0cmluZygoYS1uLmhlaWdodCkvMil9IFRkICgke299KSBUaiBFVCBRYCxjPW5ldyBEaWN0KGUueHJlZik7Yy5zZXQoIkZvcm1UeXBlIiwxKTtjLnNldCgiU3VidHlwZSIsTmFtZS5nZXQoIkZvcm0iKSk7Yy5zZXQoIlR5cGUiLE5hbWUuZ2V0KCJYT2JqZWN0IikpO2Muc2V0KCJCQm94IixyKTtjLnNldCgiTWF0cml4IixbMSwwLDAsMSwwLDBdKTtjLnNldCgiTGVuZ3RoIixnLmxlbmd0aCk7Y29uc3QgbD1uZXcgRGljdChlLnhyZWYpLGg9bmV3IERpY3QoZS54cmVmKTtoLnNldCgiUGRmSnNaYURiIix0aGlzLmZhbGxiYWNrRm9udERpY3QpO2wuc2V0KCJGb250IixoKTtjLnNldCgiUmVzb3VyY2VzIixsKTt0aGlzLmNoZWNrZWRBcHBlYXJhbmNlPW5ldyBTdHJpbmdTdHJlYW0oZyk7dGhpcy5jaGVja2VkQXBwZWFyYW5jZS5kaWN0PWM7dGhpcy5fc3RyZWFtcy5wdXNoKHRoaXMuY2hlY2tlZEFwcGVhcmFuY2UpfV9wcm9jZXNzQ2hlY2tCb3goZSl7Y29uc3QgdD1lLmRpY3QuZ2V0KCJBUCIpO2lmKCEodCBpbnN0YW5jZW9mIERpY3QpKXJldHVybjtjb25zdCBpPXQuZ2V0KCJOIik7aWYoIShpIGluc3RhbmNlb2YgRGljdCkpcmV0dXJuO2NvbnN0IGE9dGhpcy5fZGVjb2RlRm9ybVZhbHVlKGUuZGljdC5nZXQoIkFTIikpOyJzdHJpbmciPT10eXBlb2YgYSYmKHRoaXMuZGF0YS5maWVsZFZhbHVlPWEpO2NvbnN0IHI9bnVsbCE9PXRoaXMuZGF0YS5maWVsZFZhbHVlJiYiT2ZmIiE9PXRoaXMuZGF0YS5maWVsZFZhbHVlP3RoaXMuZGF0YS5maWVsZFZhbHVlOiJZZXMiLHM9aS5nZXRLZXlzKCk7aWYoMD09PXMubGVuZ3RoKXMucHVzaCgiT2ZmIixyKTtlbHNlIGlmKDE9PT1zLmxlbmd0aCkiT2ZmIj09PXNbMF0/cy5wdXNoKHIpOnMudW5zaGlmdCgiT2ZmIik7ZWxzZSBpZihzLmluY2x1ZGVzKHIpKXtzLmxlbmd0aD0wO3MucHVzaCgiT2ZmIixyKX1lbHNle2NvbnN0IGU9cy5maW5kKChlPT4iT2ZmIiE9PWUpKTtzLmxlbmd0aD0wO3MucHVzaCgiT2ZmIixlKX1zLmluY2x1ZGVzKHRoaXMuZGF0YS5maWVsZFZhbHVlKXx8KHRoaXMuZGF0YS5maWVsZFZhbHVlPSJPZmYiKTt0aGlzLmRhdGEuZXhwb3J0VmFsdWU9c1sxXTtjb25zdCBuPWkuZ2V0KHRoaXMuZGF0YS5leHBvcnRWYWx1ZSk7dGhpcy5jaGVja2VkQXBwZWFyYW5jZT1uIGluc3RhbmNlb2YgQmFzZVN0cmVhbT9uOm51bGw7Y29uc3Qgbz1pLmdldCgiT2ZmIik7dGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlPW8gaW5zdGFuY2VvZiBCYXNlU3RyZWFtP286bnVsbDt0aGlzLmNoZWNrZWRBcHBlYXJhbmNlP3RoaXMuX3N0cmVhbXMucHVzaCh0aGlzLmNoZWNrZWRBcHBlYXJhbmNlKTp0aGlzLl9nZXREZWZhdWx0Q2hlY2tlZEFwcGVhcmFuY2UoZSwiY2hlY2siKTt0aGlzLnVuY2hlY2tlZEFwcGVhcmFuY2UmJnRoaXMuX3N0cmVhbXMucHVzaCh0aGlzLnVuY2hlY2tlZEFwcGVhcmFuY2UpO3RoaXMuX2ZhbGxiYWNrRm9udERpY3Q9dGhpcy5mYWxsYmFja0ZvbnREaWN0O251bGw9PT10aGlzLmRhdGEuZGVmYXVsdEZpZWxkVmFsdWUmJih0aGlzLmRhdGEuZGVmYXVsdEZpZWxkVmFsdWU9Ik9mZiIpfV9wcm9jZXNzUmFkaW9CdXR0b24oZSl7dGhpcy5kYXRhLmJ1dHRvblZhbHVlPW51bGw7Y29uc3QgdD1lLmRpY3QuZ2V0KCJQYXJlbnQiKTtpZih0IGluc3RhbmNlb2YgRGljdCl7dGhpcy5wYXJlbnQ9ZS5kaWN0LmdldFJhdygiUGFyZW50Iik7Y29uc3QgaT10LmdldCgiViIpO2kgaW5zdGFuY2VvZiBOYW1lJiYodGhpcy5kYXRhLmZpZWxkVmFsdWU9dGhpcy5fZGVjb2RlRm9ybVZhbHVlKGkpKX1jb25zdCBpPWUuZGljdC5nZXQoIkFQIik7aWYoIShpIGluc3RhbmNlb2YgRGljdCkpcmV0dXJuO2NvbnN0IGE9aS5nZXQoIk4iKTtpZighKGEgaW5zdGFuY2VvZiBEaWN0KSlyZXR1cm47Zm9yKGNvbnN0IGUgb2YgYS5nZXRLZXlzKCkpaWYoIk9mZiIhPT1lKXt0aGlzLmRhdGEuYnV0dG9uVmFsdWU9dGhpcy5fZGVjb2RlRm9ybVZhbHVlKGUpO2JyZWFrfWNvbnN0IHI9YS5nZXQodGhpcy5kYXRhLmJ1dHRvblZhbHVlKTt0aGlzLmNoZWNrZWRBcHBlYXJhbmNlPXIgaW5zdGFuY2VvZiBCYXNlU3RyZWFtP3I6bnVsbDtjb25zdCBzPWEuZ2V0KCJPZmYiKTt0aGlzLnVuY2hlY2tlZEFwcGVhcmFuY2U9cyBpbnN0YW5jZW9mIEJhc2VTdHJlYW0/czpudWxsO3RoaXMuY2hlY2tlZEFwcGVhcmFuY2U/dGhpcy5fc3RyZWFtcy5wdXNoKHRoaXMuY2hlY2tlZEFwcGVhcmFuY2UpOnRoaXMuX2dldERlZmF1bHRDaGVja2VkQXBwZWFyYW5jZShlLCJkaXNjIik7dGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlJiZ0aGlzLl9zdHJlYW1zLnB1c2godGhpcy51bmNoZWNrZWRBcHBlYXJhbmNlKTt0aGlzLl9mYWxsYmFja0ZvbnREaWN0PXRoaXMuZmFsbGJhY2tGb250RGljdDtudWxsPT09dGhpcy5kYXRhLmRlZmF1bHRGaWVsZFZhbHVlJiYodGhpcy5kYXRhLmRlZmF1bHRGaWVsZFZhbHVlPSJPZmYiKX1fcHJvY2Vzc1B1c2hCdXR0b24oZSl7Y29uc3R7ZGljdDp0LGFubm90YXRpb25HbG9iYWxzOml9PWU7aWYodC5oYXMoIkEiKXx8dC5oYXMoIkFBIil8fHRoaXMuZGF0YS5hbHRlcm5hdGl2ZVRleHQpe3RoaXMuZGF0YS5pc1Rvb2x0aXBPbmx5PSF0LmhhcygiQSIpJiYhdC5oYXMoIkFBIik7Q2F0YWxvZy5wYXJzZURlc3REaWN0aW9uYXJ5KHtkZXN0RGljdDp0LHJlc3VsdE9iajp0aGlzLmRhdGEsZG9jQmFzZVVybDppLmJhc2VVcmwsZG9jQXR0YWNobWVudHM6aS5hdHRhY2htZW50c30pfWVsc2Ugd2FybigiUHVzaCBidXR0b25zIHdpdGhvdXQgYWN0aW9uIGRpY3Rpb25hcmllcyBhcmUgbm90IHN1cHBvcnRlZCIpfWdldEZpZWxkT2JqZWN0KCl7bGV0IGUsdD0iYnV0dG9uIjtpZih0aGlzLmRhdGEuY2hlY2tCb3gpe3Q9ImNoZWNrYm94IjtlPXRoaXMuZGF0YS5leHBvcnRWYWx1ZX1lbHNlIGlmKHRoaXMuZGF0YS5yYWRpb0J1dHRvbil7dD0icmFkaW9idXR0b24iO2U9dGhpcy5kYXRhLmJ1dHRvblZhbHVlfXJldHVybntpZDp0aGlzLmRhdGEuaWQsdmFsdWU6dGhpcy5kYXRhLmZpZWxkVmFsdWV8fCJPZmYiLGRlZmF1bHRWYWx1ZTp0aGlzLmRhdGEuZGVmYXVsdEZpZWxkVmFsdWUsZXhwb3J0VmFsdWVzOmUsZWRpdGFibGU6IXRoaXMuZGF0YS5yZWFkT25seSxuYW1lOnRoaXMuZGF0YS5maWVsZE5hbWUscmVjdDp0aGlzLmRhdGEucmVjdCxoaWRkZW46dGhpcy5kYXRhLmhpZGRlbixhY3Rpb25zOnRoaXMuZGF0YS5hY3Rpb25zLHBhZ2U6dGhpcy5kYXRhLnBhZ2VJbmRleCxzdHJva2VDb2xvcjp0aGlzLmRhdGEuYm9yZGVyQ29sb3IsZmlsbENvbG9yOnRoaXMuZGF0YS5iYWNrZ3JvdW5kQ29sb3Iscm90YXRpb246dGhpcy5yb3RhdGlvbix0eXBlOnR9fWdldCBmYWxsYmFja0ZvbnREaWN0KCl7Y29uc3QgZT1uZXcgRGljdDtlLnNldCgiQmFzZUZvbnQiLE5hbWUuZ2V0KCJaYXBmRGluZ2JhdHMiKSk7ZS5zZXQoIlR5cGUiLE5hbWUuZ2V0KCJGYWxsYmFja1R5cGUiKSk7ZS5zZXQoIlN1YnR5cGUiLE5hbWUuZ2V0KCJGYWxsYmFja1R5cGUiKSk7ZS5zZXQoIkVuY29kaW5nIixOYW1lLmdldCgiWmFwZkRpbmdiYXRzRW5jb2RpbmciKSk7cmV0dXJuIHNoYWRvdyh0aGlzLCJmYWxsYmFja0ZvbnREaWN0IixlKX19Y2xhc3MgQ2hvaWNlV2lkZ2V0QW5ub3RhdGlvbiBleHRlbmRzIFdpZGdldEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7Y29uc3R7ZGljdDp0LHhyZWY6aX09ZTt0aGlzLmluZGljZXM9dC5nZXRBcnJheSgiSSIpO3RoaXMuaGFzSW5kaWNlcz1BcnJheS5pc0FycmF5KHRoaXMuaW5kaWNlcykmJnRoaXMuaW5kaWNlcy5sZW5ndGg+MDt0aGlzLmRhdGEub3B0aW9ucz1bXTtjb25zdCBhPWdldEluaGVyaXRhYmxlUHJvcGVydHkoe2RpY3Q6dCxrZXk6Ik9wdCJ9KTtpZihBcnJheS5pc0FycmF5KGEpKWZvcihsZXQgZT0wLHQ9YS5sZW5ndGg7ZTx0O2UrKyl7Y29uc3QgdD1pLmZldGNoSWZSZWYoYVtlXSkscj1BcnJheS5pc0FycmF5KHQpO3RoaXMuZGF0YS5vcHRpb25zW2VdPXtleHBvcnRWYWx1ZTp0aGlzLl9kZWNvZGVGb3JtVmFsdWUocj9pLmZldGNoSWZSZWYodFswXSk6dCksZGlzcGxheVZhbHVlOnRoaXMuX2RlY29kZUZvcm1WYWx1ZShyP2kuZmV0Y2hJZlJlZih0WzFdKTp0KX19aWYodGhpcy5oYXNJbmRpY2VzKXt0aGlzLmRhdGEuZmllbGRWYWx1ZT1bXTtjb25zdCBlPXRoaXMuZGF0YS5vcHRpb25zLmxlbmd0aDtmb3IoY29uc3QgdCBvZiB0aGlzLmluZGljZXMpTnVtYmVyLmlzSW50ZWdlcih0KSYmdD49MCYmdDxlJiZ0aGlzLmRhdGEuZmllbGRWYWx1ZS5wdXNoKHRoaXMuZGF0YS5vcHRpb25zW3RdLmV4cG9ydFZhbHVlKX1lbHNlInN0cmluZyI9PXR5cGVvZiB0aGlzLmRhdGEuZmllbGRWYWx1ZT90aGlzLmRhdGEuZmllbGRWYWx1ZT1bdGhpcy5kYXRhLmZpZWxkVmFsdWVdOnRoaXMuZGF0YS5maWVsZFZhbHVlfHwodGhpcy5kYXRhLmZpZWxkVmFsdWU9W10pOzA9PT10aGlzLmRhdGEub3B0aW9ucy5sZW5ndGgmJnRoaXMuZGF0YS5maWVsZFZhbHVlLmxlbmd0aD4wJiYodGhpcy5kYXRhLm9wdGlvbnM9dGhpcy5kYXRhLmZpZWxkVmFsdWUubWFwKChlPT4oe2V4cG9ydFZhbHVlOmUsZGlzcGxheVZhbHVlOmV9KSkpKTt0aGlzLmRhdGEuY29tYm89dGhpcy5oYXNGaWVsZEZsYWcoY0EpO3RoaXMuZGF0YS5tdWx0aVNlbGVjdD10aGlzLmhhc0ZpZWxkRmxhZyhoQSk7dGhpcy5faGFzVGV4dD0hMH1nZXRGaWVsZE9iamVjdCgpe2NvbnN0IGU9dGhpcy5kYXRhLmNvbWJvPyJjb21ib2JveCI6Imxpc3Rib3giLHQ9dGhpcy5kYXRhLmZpZWxkVmFsdWUubGVuZ3RoPjA/dGhpcy5kYXRhLmZpZWxkVmFsdWVbMF06bnVsbDtyZXR1cm57aWQ6dGhpcy5kYXRhLmlkLHZhbHVlOnQsZGVmYXVsdFZhbHVlOnRoaXMuZGF0YS5kZWZhdWx0RmllbGRWYWx1ZSxlZGl0YWJsZTohdGhpcy5kYXRhLnJlYWRPbmx5LG5hbWU6dGhpcy5kYXRhLmZpZWxkTmFtZSxyZWN0OnRoaXMuZGF0YS5yZWN0LG51bUl0ZW1zOnRoaXMuZGF0YS5maWVsZFZhbHVlLmxlbmd0aCxtdWx0aXBsZVNlbGVjdGlvbjp0aGlzLmRhdGEubXVsdGlTZWxlY3QsaGlkZGVuOnRoaXMuZGF0YS5oaWRkZW4sYWN0aW9uczp0aGlzLmRhdGEuYWN0aW9ucyxpdGVtczp0aGlzLmRhdGEub3B0aW9ucyxwYWdlOnRoaXMuZGF0YS5wYWdlSW5kZXgsc3Ryb2tlQ29sb3I6dGhpcy5kYXRhLmJvcmRlckNvbG9yLGZpbGxDb2xvcjp0aGlzLmRhdGEuYmFja2dyb3VuZENvbG9yLHJvdGF0aW9uOnRoaXMucm90YXRpb24sdHlwZTplfX1hbWVuZFNhdmVkRGljdChlLHQpe2lmKCF0aGlzLmhhc0luZGljZXMpcmV0dXJuO2xldCBpPWU/LmdldCh0aGlzLmRhdGEuaWQpPy52YWx1ZTtBcnJheS5pc0FycmF5KGkpfHwoaT1baV0pO2NvbnN0IGE9W10se29wdGlvbnM6cn09dGhpcy5kYXRhO2ZvcihsZXQgZT0wLHQ9MCxzPXIubGVuZ3RoO2U8cztlKyspaWYocltlXS5leHBvcnRWYWx1ZT09PWlbdF0pe2EucHVzaChlKTt0Kz0xfXQuc2V0KCJJIixhKX1hc3luYyBfZ2V0QXBwZWFyYW5jZShlLHQsaSxhKXtpZih0aGlzLmRhdGEuY29tYm8pcmV0dXJuIHN1cGVyLl9nZXRBcHBlYXJhbmNlKGUsdCxpLGEpO2xldCByLG47Y29uc3Qgbz1hPy5nZXQodGhpcy5kYXRhLmlkKTtpZihvKXtuPW8ucm90YXRpb247cj1vLnZhbHVlfWlmKHZvaWQgMD09PW4mJnZvaWQgMD09PXImJiF0aGlzLl9uZWVkQXBwZWFyYW5jZXMpcmV0dXJuIG51bGw7dm9pZCAwPT09cj9yPXRoaXMuZGF0YS5maWVsZFZhbHVlOkFycmF5LmlzQXJyYXkocil8fChyPVtyXSk7bGV0IGc9dGhpcy5kYXRhLnJlY3RbM10tdGhpcy5kYXRhLnJlY3RbMV0sYz10aGlzLmRhdGEucmVjdFsyXS10aGlzLmRhdGEucmVjdFswXTs5MCE9PW4mJjI3MCE9PW58fChbYyxnXT1bZyxjXSk7Y29uc3QgbD10aGlzLmRhdGEub3B0aW9ucy5sZW5ndGgsaD1bXTtmb3IobGV0IGU9MDtlPGw7ZSsrKXtjb25zdHtleHBvcnRWYWx1ZTp0fT10aGlzLmRhdGEub3B0aW9uc1tlXTtyLmluY2x1ZGVzKHQpJiZoLnB1c2goZSl9dGhpcy5fZGVmYXVsdEFwcGVhcmFuY2V8fCh0aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhPXBhcnNlRGVmYXVsdEFwcGVhcmFuY2UodGhpcy5fZGVmYXVsdEFwcGVhcmFuY2U9Ii9IZWx2ZXRpY2EgMCBUZiAwIGciKSk7Y29uc3QgQz1hd2FpdCBXaWRnZXRBbm5vdGF0aW9uLl9nZXRGb250RGF0YShlLHQsdGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YSx0aGlzLl9maWVsZFJlc291cmNlcy5tZXJnZWRSZXNvdXJjZXMpO2xldCBRLHtmb250U2l6ZTpFfT10aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhO2lmKEUpUT10aGlzLl9kZWZhdWx0QXBwZWFyYW5jZTtlbHNle2NvbnN0IGU9KGctMSkvbDtsZXQgdCxpPS0xO2Zvcihjb25zdHtkaXNwbGF5VmFsdWU6ZX1vZiB0aGlzLmRhdGEub3B0aW9ucyl7Y29uc3QgYT10aGlzLl9nZXRUZXh0V2lkdGgoZSxDKTtpZihhPmkpe2k9YTt0PWV9fVtRLEVdPXRoaXMuX2NvbXB1dGVGb250U2l6ZShlLGMtNCx0LEMsLTEpfWNvbnN0IHU9RSpzLGQ9KHUtRSkvMixmPU1hdGguZmxvb3IoZy91KTtsZXQgcD0wO2lmKGgubGVuZ3RoPjApe2NvbnN0IGU9TWF0aC5taW4oLi4uaCksdD1NYXRoLm1heCguLi5oKTtwPU1hdGgubWF4KDAsdC1mKzEpO3A+ZSYmKHA9ZSl9Y29uc3QgbT1NYXRoLm1pbihwK2YrMSxsKSx5PVsiL1R4IEJNQyBxIixgMSAxICR7Y30gJHtnfSByZSBXIG5gXTtpZihoLmxlbmd0aCl7eS5wdXNoKCIwLjYwMDAwNiAwLjc1Njg2NiAwLjg1NDkwNCByZyIpO2Zvcihjb25zdCBlIG9mIGgpcDw9ZSYmZTxtJiZ5LnB1c2goYDEgJHtnLShlLXArMSkqdX0gJHtjfSAke3V9IHJlIGZgKX15LnB1c2goIkJUIixRLGAxIDAgMCAxIDAgJHtnfSBUbWApO2NvbnN0IHc9e3NoaWZ0OjB9O2ZvcihsZXQgZT1wO2U8bTtlKyspe2NvbnN0e2Rpc3BsYXlWYWx1ZTp0fT10aGlzLmRhdGEub3B0aW9uc1tlXSxpPWU9PT1wP2Q6MDt5LnB1c2godGhpcy5fcmVuZGVyVGV4dCh0LEMsRSxjLDAsdywyLC11K2kpKX15LnB1c2goIkVUIFEgRU1DIik7cmV0dXJuIHkuam9pbigiXG4iKX19Y2xhc3MgU2lnbmF0dXJlV2lkZ2V0QW5ub3RhdGlvbiBleHRlbmRzIFdpZGdldEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7dGhpcy5kYXRhLmZpZWxkVmFsdWU9bnVsbDt0aGlzLmRhdGEuaGFzT3duQ2FudmFzPXRoaXMuZGF0YS5ub1JvdGF0ZTt0aGlzLmRhdGEubm9IVE1MPSF0aGlzLmRhdGEuaGFzT3duQ2FudmFzfWdldEZpZWxkT2JqZWN0KCl7cmV0dXJue2lkOnRoaXMuZGF0YS5pZCx2YWx1ZTpudWxsLHBhZ2U6dGhpcy5kYXRhLnBhZ2VJbmRleCx0eXBlOiJzaWduYXR1cmUifX19Y2xhc3MgVGV4dEFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO3RoaXMuZGF0YS5ub1JvdGF0ZT0hMDt0aGlzLmRhdGEuaGFzT3duQ2FudmFzPXRoaXMuZGF0YS5ub1JvdGF0ZTt0aGlzLmRhdGEubm9IVE1MPSExO2NvbnN0e2RpY3Q6dH09ZTt0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGU9TjtpZih0aGlzLmRhdGEuaGFzQXBwZWFyYW5jZSl0aGlzLmRhdGEubmFtZT0iTm9JY29uIjtlbHNle3RoaXMuZGF0YS5yZWN0WzFdPXRoaXMuZGF0YS5yZWN0WzNdLTIyO3RoaXMuZGF0YS5yZWN0WzJdPXRoaXMuZGF0YS5yZWN0WzBdKzIyO3RoaXMuZGF0YS5uYW1lPXQuaGFzKCJOYW1lIik/dC5nZXQoIk5hbWUiKS5uYW1lOiJOb3RlIn1pZih0LmhhcygiU3RhdGUiKSl7dGhpcy5kYXRhLnN0YXRlPXQuZ2V0KCJTdGF0ZSIpfHxudWxsO3RoaXMuZGF0YS5zdGF0ZU1vZGVsPXQuZ2V0KCJTdGF0ZU1vZGVsIil8fG51bGx9ZWxzZXt0aGlzLmRhdGEuc3RhdGU9bnVsbDt0aGlzLmRhdGEuc3RhdGVNb2RlbD1udWxsfX19Y2xhc3MgTGlua0Fubm90YXRpb24gZXh0ZW5kcyBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO2NvbnN0e2RpY3Q6dCxhbm5vdGF0aW9uR2xvYmFsczppfT1lO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1HO3RoaXMuZGF0YS5ub0hUTUw9ITE7Y29uc3QgYT1nZXRRdWFkUG9pbnRzKHQsdGhpcy5yZWN0YW5nbGUpO2EmJih0aGlzLmRhdGEucXVhZFBvaW50cz1hKTt0aGlzLmRhdGEuYm9yZGVyQ29sb3J8fD10aGlzLmRhdGEuY29sb3I7Q2F0YWxvZy5wYXJzZURlc3REaWN0aW9uYXJ5KHtkZXN0RGljdDp0LHJlc3VsdE9iajp0aGlzLmRhdGEsZG9jQmFzZVVybDppLmJhc2VVcmwsZG9jQXR0YWNobWVudHM6aS5hdHRhY2htZW50c30pfX1jbGFzcyBQb3B1cEFubm90YXRpb24gZXh0ZW5kcyBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO2NvbnN0e2RpY3Q6dH09ZTt0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGU9ajt0aGlzLmRhdGEubm9IVE1MPSExO3RoaXMuZGF0YS5yZWN0WzBdIT09dGhpcy5kYXRhLnJlY3RbMl0mJnRoaXMuZGF0YS5yZWN0WzFdIT09dGhpcy5kYXRhLnJlY3RbM118fCh0aGlzLmRhdGEucmVjdD1udWxsKTtsZXQgaT10LmdldCgiUGFyZW50Iik7aWYoIWkpe3dhcm4oIlBvcHVwIGFubm90YXRpb24gaGFzIGEgbWlzc2luZyBvciBpbnZhbGlkIHBhcmVudCBhbm5vdGF0aW9uLiIpO3JldHVybn10aGlzLmRhdGEucGFyZW50UmVjdD1sb29rdXBOb3JtYWxSZWN0KGkuZ2V0QXJyYXkoIlJlY3QiKSxudWxsKTtpc05hbWUoaS5nZXQoIlJUIiksWikmJihpPWkuZ2V0KCJJUlQiKSk7aWYoaS5oYXMoIk0iKSl7dGhpcy5zZXRNb2RpZmljYXRpb25EYXRlKGkuZ2V0KCJNIikpO3RoaXMuZGF0YS5tb2RpZmljYXRpb25EYXRlPXRoaXMubW9kaWZpY2F0aW9uRGF0ZX1lbHNlIHRoaXMuZGF0YS5tb2RpZmljYXRpb25EYXRlPW51bGw7aWYoaS5oYXMoIkMiKSl7dGhpcy5zZXRDb2xvcihpLmdldEFycmF5KCJDIikpO3RoaXMuZGF0YS5jb2xvcj10aGlzLmNvbG9yfWVsc2UgdGhpcy5kYXRhLmNvbG9yPW51bGw7aWYoIXRoaXMudmlld2FibGUpe2NvbnN0IGU9aS5nZXQoIkYiKTt0aGlzLl9pc1ZpZXdhYmxlKGUpJiZ0aGlzLnNldEZsYWdzKGUpfXRoaXMuc2V0VGl0bGUoaS5nZXQoIlQiKSk7dGhpcy5kYXRhLnRpdGxlT2JqPXRoaXMuX3RpdGxlO3RoaXMuc2V0Q29udGVudHMoaS5nZXQoIkNvbnRlbnRzIikpO3RoaXMuZGF0YS5jb250ZW50c09iaj10aGlzLl9jb250ZW50cztpLmhhcygiUkMiKSYmKHRoaXMuZGF0YS5yaWNoVGV4dD1YRkFGYWN0b3J5LmdldFJpY2hUZXh0QXNIdG1sKGkuZ2V0KCJSQyIpKSk7dGhpcy5kYXRhLm9wZW49ISF0LmdldCgiT3BlbiIpfX1jbGFzcyBGcmVlVGV4dEFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO3RoaXMuZGF0YS5oYXNPd25DYW52YXM9dGhpcy5kYXRhLm5vUm90YXRlO3RoaXMuZGF0YS5pc0VkaXRhYmxlPSF0aGlzLmRhdGEubm9IVE1MO3RoaXMuZGF0YS5ub0hUTUw9ITE7Y29uc3R7ZXZhbHVhdG9yT3B0aW9uczp0LHhyZWY6aX09ZTt0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGU9TTt0aGlzLnNldERlZmF1bHRBcHBlYXJhbmNlKGUpO3RoaXMuX2hhc0FwcGVhcmFuY2U9ISF0aGlzLmFwcGVhcmFuY2U7aWYodGhpcy5faGFzQXBwZWFyYW5jZSl7Y29uc3R7Zm9udENvbG9yOmUsZm9udFNpemU6YX09ZnVuY3Rpb24gcGFyc2VBcHBlYXJhbmNlU3RyZWFtKGUsdCxpKXtyZXR1cm4gbmV3IEFwcGVhcmFuY2VTdHJlYW1FdmFsdWF0b3IoZSx0LGkpLnBhcnNlKCl9KHRoaXMuYXBwZWFyYW5jZSx0LGkpO3RoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEuZm9udENvbG9yPWU7dGhpcy5kYXRhLmRlZmF1bHRBcHBlYXJhbmNlRGF0YS5mb250U2l6ZT1hfHwxMH1lbHNle3RoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZURhdGEuZm9udFNpemV8fD0xMDtjb25zdHtmb250Q29sb3I6dCxmb250U2l6ZTphfT10aGlzLmRhdGEuZGVmYXVsdEFwcGVhcmFuY2VEYXRhO2lmKHRoaXMuX2NvbnRlbnRzLnN0cil7dGhpcy5kYXRhLnRleHRDb250ZW50PXRoaXMuX2NvbnRlbnRzLnN0ci5zcGxpdCgvXHJcbj98XG4vKS5tYXAoKGU9PmUudHJpbUVuZCgpKSk7Y29uc3R7Y29vcmRzOmUsYmJveDp0LG1hdHJpeDppfT1GYWtlVW5pY29kZUZvbnQuZ2V0Rmlyc3RQb3NpdGlvbkluZm8odGhpcy5yZWN0YW5nbGUsdGhpcy5yb3RhdGlvbixhKTt0aGlzLmRhdGEudGV4dFBvc2l0aW9uPXRoaXMuX3RyYW5zZm9ybVBvaW50KGUsdCxpKX1pZih0aGlzLl9pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCl7Y29uc3Qgcj1lLmRpY3QuZ2V0KCJDQSIpLHM9bmV3IEZha2VVbmljb2RlRm9udChpLCJzYW5zLXNlcmlmIik7dGhpcy5hcHBlYXJhbmNlPXMuY3JlYXRlQXBwZWFyYW5jZSh0aGlzLl9jb250ZW50cy5zdHIsdGhpcy5yZWN0YW5nbGUsdGhpcy5yb3RhdGlvbixhLHQscik7dGhpcy5fc3RyZWFtcy5wdXNoKHRoaXMuYXBwZWFyYW5jZSl9ZWxzZSB3YXJuKCJGcmVlVGV4dEFubm90YXRpb246IE9mZnNjcmVlbkNhbnZhcyBpcyBub3Qgc3VwcG9ydGVkLCBhbm5vdGF0aW9uIG1heSBub3QgcmVuZGVyIGNvcnJlY3RseS4iKX19Z2V0IGhhc1RleHRDb250ZW50KCl7cmV0dXJuIHRoaXMuX2hhc0FwcGVhcmFuY2V9c3RhdGljIGNyZWF0ZU5ld0RpY3QoZSx0LHthcFJlZjppLGFwOmF9KXtjb25zdHtjb2xvcjpyLGZvbnRTaXplOnMsb2xkQW5ub3RhdGlvbjpuLHJlY3Q6byxyb3RhdGlvbjpnLHVzZXI6Yyx2YWx1ZTpsfT1lLGg9bnx8bmV3IERpY3QodCk7aC5zZXQoIlR5cGUiLE5hbWUuZ2V0KCJBbm5vdCIpKTtoLnNldCgiU3VidHlwZSIsTmFtZS5nZXQoIkZyZWVUZXh0IikpO2lmKG4pe2guc2V0KCJNIixgRDoke2dldE1vZGlmaWNhdGlvbkRhdGUoKX1gKTtoLmRlbGV0ZSgiUkMiKX1lbHNlIGguc2V0KCJDcmVhdGlvbkRhdGUiLGBEOiR7Z2V0TW9kaWZpY2F0aW9uRGF0ZSgpfWApO2guc2V0KCJSZWN0IixvKTtjb25zdCBDPWAvSGVsdiAke3N9IFRmICR7Z2V0UGRmQ29sb3IociwhMCl9YDtoLnNldCgiREEiLEMpO2guc2V0KCJDb250ZW50cyIsc3RyaW5nVG9Bc2NpaU9yVVRGMTZCRShsKSk7aC5zZXQoIkYiLDQpO2guc2V0KCJCb3JkZXIiLFswLDAsMF0pO2guc2V0KCJSb3RhdGUiLGcpO2MmJmguc2V0KCJUIixzdHJpbmdUb0FzY2lpT3JVVEYxNkJFKGMpKTtpZihpfHxhKXtjb25zdCBlPW5ldyBEaWN0KHQpO2guc2V0KCJBUCIsZSk7aT9lLnNldCgiTiIsaSk6ZS5zZXQoIk4iLGEpfXJldHVybiBofXN0YXRpYyBhc3luYyBjcmVhdGVOZXdBcHBlYXJhbmNlU3RyZWFtKGUsdCxpKXtjb25zdHtiYXNlRm9udFJlZjphLGV2YWx1YXRvcjpyLHRhc2s6bn09aSx7Y29sb3I6byxmb250U2l6ZTpnLHJlY3Q6Yyxyb3RhdGlvbjpsLHZhbHVlOmh9PWUsQz1uZXcgRGljdCh0KSxRPW5ldyBEaWN0KHQpO2lmKGEpUS5zZXQoIkhlbHYiLGEpO2Vsc2V7Y29uc3QgZT1uZXcgRGljdCh0KTtlLnNldCgiQmFzZUZvbnQiLE5hbWUuZ2V0KCJIZWx2ZXRpY2EiKSk7ZS5zZXQoIlR5cGUiLE5hbWUuZ2V0KCJGb250IikpO2Uuc2V0KCJTdWJ0eXBlIixOYW1lLmdldCgiVHlwZTEiKSk7ZS5zZXQoIkVuY29kaW5nIixOYW1lLmdldCgiV2luQW5zaUVuY29kaW5nIikpO1Euc2V0KCJIZWx2IixlKX1DLnNldCgiRm9udCIsUSk7Y29uc3QgRT1hd2FpdCBXaWRnZXRBbm5vdGF0aW9uLl9nZXRGb250RGF0YShyLG4se2ZvbnROYW1lOiJIZWx2Iixmb250U2l6ZTpnfSxDKSxbdSxkLGYscF09YztsZXQgbT1mLXUseT1wLWQ7bCUxODAhPTAmJihbbSx5XT1beSxtXSk7Y29uc3Qgdz1oLnNwbGl0KCJcbiIpLGI9Zy8xZTM7bGV0IEQ9LTEvMDtjb25zdCBTPVtdO2ZvcihsZXQgZSBvZiB3KXtjb25zdCB0PUUuZW5jb2RlU3RyaW5nKGUpO2lmKHQubGVuZ3RoPjEpcmV0dXJuIG51bGw7ZT10LmpvaW4oIiIpO1MucHVzaChlKTtsZXQgaT0wO2NvbnN0IGE9RS5jaGFyc1RvR2x5cGhzKGUpO2Zvcihjb25zdCBlIG9mIGEpaSs9ZS53aWR0aCpiO0Q9TWF0aC5tYXgoRCxpKX1sZXQgaz0xO0Q+bSYmKGs9bS9EKTtsZXQgUj0xO2NvbnN0IE49cypnLEc9MSpnLE09Tip3Lmxlbmd0aDtNPnkmJihSPXkvTSk7Y29uc3QgVT1nKk1hdGgubWluKGssUik7bGV0IHgsTCxIO3N3aXRjaChsKXtjYXNlIDA6SD1bMSwwLDAsMV07TD1bY1swXSxjWzFdLG0seV07eD1bY1swXSxjWzNdLUddO2JyZWFrO2Nhc2UgOTA6SD1bMCwxLC0xLDBdO0w9W2NbMV0sLWNbMl0sbSx5XTt4PVtjWzFdLC1jWzBdLUddO2JyZWFrO2Nhc2UgMTgwOkg9Wy0xLDAsMCwtMV07TD1bLWNbMl0sLWNbM10sbSx5XTt4PVstY1syXSwtY1sxXS1HXTticmVhaztjYXNlIDI3MDpIPVswLC0xLDEsMF07TD1bLWNbM10sY1swXSxtLHldO3g9Wy1jWzNdLGNbMl0tR119Y29uc3QgSj1bInEiLGAke0guam9pbigiICIpfSAwIDAgY21gLGAke0wuam9pbigiICIpfSByZSBXIG5gLCJCVCIsYCR7Z2V0UGRmQ29sb3IobywhMCl9YCxgMCBUYyAvSGVsdiAke251bWJlclRvU3RyaW5nKFUpfSBUZmBdO0oucHVzaChgJHt4LmpvaW4oIiAiKX0gVGQgKCR7ZXNjYXBlU3RyaW5nKFNbMF0pfSkgVGpgKTtjb25zdCB2PW51bWJlclRvU3RyaW5nKE4pO2ZvcihsZXQgZT0xLHQ9Uy5sZW5ndGg7ZTx0O2UrKyl7Y29uc3QgdD1TW2VdO0oucHVzaChgMCAtJHt2fSBUZCAoJHtlc2NhcGVTdHJpbmcodCl9KSBUamApfUoucHVzaCgiRVQiLCJRIik7Y29uc3QgWT1KLmpvaW4oIlxuIiksSz1uZXcgRGljdCh0KTtLLnNldCgiRm9ybVR5cGUiLDEpO0suc2V0KCJTdWJ0eXBlIixOYW1lLmdldCgiRm9ybSIpKTtLLnNldCgiVHlwZSIsTmFtZS5nZXQoIlhPYmplY3QiKSk7Sy5zZXQoIkJCb3giLGMpO0suc2V0KCJSZXNvdXJjZXMiLEMpO0suc2V0KCJNYXRyaXgiLFsxLDAsMCwxLC1jWzBdLC1jWzFdXSk7Y29uc3QgVD1uZXcgU3RyaW5nU3RyZWFtKFkpO1QuZGljdD1LO3JldHVybiBUfX1jbGFzcyBMaW5lQW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7Y29uc3R7ZGljdDp0LHhyZWY6aX09ZTt0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGU9VTt0aGlzLmRhdGEuaGFzT3duQ2FudmFzPXRoaXMuZGF0YS5ub1JvdGF0ZTt0aGlzLmRhdGEubm9IVE1MPSExO2NvbnN0IGE9bG9va3VwUmVjdCh0LmdldEFycmF5KCJMIiksWzAsMCwwLDBdKTt0aGlzLmRhdGEubGluZUNvb3JkaW5hdGVzPVV0aWwubm9ybWFsaXplUmVjdChhKTt0aGlzLnNldExpbmVFbmRpbmdzKHQuZ2V0QXJyYXkoIkxFIikpO3RoaXMuZGF0YS5saW5lRW5kaW5ncz10aGlzLmxpbmVFbmRpbmdzO2lmKCF0aGlzLmFwcGVhcmFuY2Upe2NvbnN0IGU9dGhpcy5jb2xvcj9nZXRQZGZDb2xvckFycmF5KHRoaXMuY29sb3IpOlswLDAsMF0scj10LmdldCgiQ0EiKSxzPWdldFJnYkNvbG9yKHQuZ2V0QXJyYXkoIklDIiksbnVsbCksbj1zP2dldFBkZkNvbG9yQXJyYXkocyk6bnVsbCxvPW4/cjpudWxsLGc9dGhpcy5ib3JkZXJTdHlsZS53aWR0aHx8MSxjPTIqZyxsPVt0aGlzLmRhdGEubGluZUNvb3JkaW5hdGVzWzBdLWMsdGhpcy5kYXRhLmxpbmVDb29yZGluYXRlc1sxXS1jLHRoaXMuZGF0YS5saW5lQ29vcmRpbmF0ZXNbMl0rYyx0aGlzLmRhdGEubGluZUNvb3JkaW5hdGVzWzNdK2NdO1V0aWwuaW50ZXJzZWN0KHRoaXMucmVjdGFuZ2xlLGwpfHwodGhpcy5yZWN0YW5nbGU9bCk7dGhpcy5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6aSxleHRyYTpgJHtnfSB3YCxzdHJva2VDb2xvcjplLGZpbGxDb2xvcjpuLHN0cm9rZUFscGhhOnIsZmlsbEFscGhhOm8scG9pbnRzQ2FsbGJhY2s6KGUsdCk9PntlLnB1c2goYCR7YVswXX0gJHthWzFdfSBtYCxgJHthWzJdfSAke2FbM119IGxgLCJTIik7cmV0dXJuW3RbMF0tZyx0WzJdK2csdFs3XS1nLHRbM10rZ119fSl9fX1jbGFzcyBTcXVhcmVBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTtjb25zdHtkaWN0OnQseHJlZjppfT1lO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT14O3RoaXMuZGF0YS5oYXNPd25DYW52YXM9dGhpcy5kYXRhLm5vUm90YXRlO3RoaXMuZGF0YS5ub0hUTUw9ITE7aWYoIXRoaXMuYXBwZWFyYW5jZSl7Y29uc3QgZT10aGlzLmNvbG9yP2dldFBkZkNvbG9yQXJyYXkodGhpcy5jb2xvcik6WzAsMCwwXSxhPXQuZ2V0KCJDQSIpLHI9Z2V0UmdiQ29sb3IodC5nZXRBcnJheSgiSUMiKSxudWxsKSxzPXI/Z2V0UGRmQ29sb3JBcnJheShyKTpudWxsLG49cz9hOm51bGw7aWYoMD09PXRoaXMuYm9yZGVyU3R5bGUud2lkdGgmJiFzKXJldHVybjt0aGlzLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjppLGV4dHJhOmAke3RoaXMuYm9yZGVyU3R5bGUud2lkdGh9IHdgLHN0cm9rZUNvbG9yOmUsZmlsbENvbG9yOnMsc3Ryb2tlQWxwaGE6YSxmaWxsQWxwaGE6bixwb2ludHNDYWxsYmFjazooZSx0KT0+e2NvbnN0IGk9dFs0XSt0aGlzLmJvcmRlclN0eWxlLndpZHRoLzIsYT10WzVdK3RoaXMuYm9yZGVyU3R5bGUud2lkdGgvMixyPXRbNl0tdFs0XS10aGlzLmJvcmRlclN0eWxlLndpZHRoLG49dFszXS10WzddLXRoaXMuYm9yZGVyU3R5bGUud2lkdGg7ZS5wdXNoKGAke2l9ICR7YX0gJHtyfSAke259IHJlYCk7cz9lLnB1c2goIkIiKTplLnB1c2goIlMiKTtyZXR1cm5bdFswXSx0WzJdLHRbN10sdFszXV19fSl9fX1jbGFzcyBDaXJjbGVBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTtjb25zdHtkaWN0OnQseHJlZjppfT1lO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1MO2lmKCF0aGlzLmFwcGVhcmFuY2Upe2NvbnN0IGU9dGhpcy5jb2xvcj9nZXRQZGZDb2xvckFycmF5KHRoaXMuY29sb3IpOlswLDAsMF0sYT10LmdldCgiQ0EiKSxyPWdldFJnYkNvbG9yKHQuZ2V0QXJyYXkoIklDIiksbnVsbCkscz1yP2dldFBkZkNvbG9yQXJyYXkocik6bnVsbCxuPXM/YTpudWxsO2lmKDA9PT10aGlzLmJvcmRlclN0eWxlLndpZHRoJiYhcylyZXR1cm47Y29uc3Qgbz00LzMqTWF0aC50YW4oTWF0aC5QSS84KTt0aGlzLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjppLGV4dHJhOmAke3RoaXMuYm9yZGVyU3R5bGUud2lkdGh9IHdgLHN0cm9rZUNvbG9yOmUsZmlsbENvbG9yOnMsc3Ryb2tlQWxwaGE6YSxmaWxsQWxwaGE6bixwb2ludHNDYWxsYmFjazooZSx0KT0+e2NvbnN0IGk9dFswXSt0aGlzLmJvcmRlclN0eWxlLndpZHRoLzIsYT10WzFdLXRoaXMuYm9yZGVyU3R5bGUud2lkdGgvMixyPXRbNl0tdGhpcy5ib3JkZXJTdHlsZS53aWR0aC8yLG49dFs3XSt0aGlzLmJvcmRlclN0eWxlLndpZHRoLzIsZz1pKyhyLWkpLzIsYz1hKyhuLWEpLzIsbD0oci1pKS8yKm8saD0obi1hKS8yKm87ZS5wdXNoKGAke2d9ICR7bn0gbWAsYCR7ZytsfSAke259ICR7cn0gJHtjK2h9ICR7cn0gJHtjfSBjYCxgJHtyfSAke2MtaH0gJHtnK2x9ICR7YX0gJHtnfSAke2F9IGNgLGAke2ctbH0gJHthfSAke2l9ICR7Yy1ofSAke2l9ICR7Y30gY2AsYCR7aX0gJHtjK2h9ICR7Zy1sfSAke259ICR7Z30gJHtufSBjYCwiaCIpO3M/ZS5wdXNoKCJCIik6ZS5wdXNoKCJTIik7cmV0dXJuW3RbMF0sdFsyXSx0WzddLHRbM11dfX0pfX19Y2xhc3MgUG9seWxpbmVBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTtjb25zdHtkaWN0OnQseHJlZjppfT1lO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1KO3RoaXMuZGF0YS5oYXNPd25DYW52YXM9dGhpcy5kYXRhLm5vUm90YXRlO3RoaXMuZGF0YS5ub0hUTUw9ITE7dGhpcy5kYXRhLnZlcnRpY2VzPW51bGw7aWYoISh0aGlzIGluc3RhbmNlb2YgUG9seWdvbkFubm90YXRpb24pKXt0aGlzLnNldExpbmVFbmRpbmdzKHQuZ2V0QXJyYXkoIkxFIikpO3RoaXMuZGF0YS5saW5lRW5kaW5ncz10aGlzLmxpbmVFbmRpbmdzfWNvbnN0IGE9dC5nZXRBcnJheSgiVmVydGljZXMiKTtpZighaXNOdW1iZXJBcnJheShhLG51bGwpKXJldHVybjtjb25zdCByPXRoaXMuZGF0YS52ZXJ0aWNlcz1GbG9hdDMyQXJyYXkuZnJvbShhKTtpZighdGhpcy5hcHBlYXJhbmNlKXtjb25zdCBlPXRoaXMuY29sb3I/Z2V0UGRmQ29sb3JBcnJheSh0aGlzLmNvbG9yKTpbMCwwLDBdLGE9dC5nZXQoIkNBIikscz10aGlzLmJvcmRlclN0eWxlLndpZHRofHwxLG49MipzLG89WzEvMCwxLzAsLTEvMCwtMS8wXTtmb3IobGV0IGU9MCx0PXIubGVuZ3RoO2U8dDtlKz0yKXtvWzBdPU1hdGgubWluKG9bMF0scltlXS1uKTtvWzFdPU1hdGgubWluKG9bMV0scltlKzFdLW4pO29bMl09TWF0aC5tYXgob1syXSxyW2VdK24pO29bM109TWF0aC5tYXgob1szXSxyW2UrMV0rbil9VXRpbC5pbnRlcnNlY3QodGhpcy5yZWN0YW5nbGUsbyl8fCh0aGlzLnJlY3RhbmdsZT1vKTt0aGlzLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjppLGV4dHJhOmAke3N9IHdgLHN0cm9rZUNvbG9yOmUsc3Ryb2tlQWxwaGE6YSxwb2ludHNDYWxsYmFjazooZSx0KT0+e2ZvcihsZXQgdD0wLGk9ci5sZW5ndGg7dDxpO3QrPTIpZS5wdXNoKGAke3JbdF19ICR7clt0KzFdfSAkezA9PT10PyJtIjoibCJ9YCk7ZS5wdXNoKCJTIik7cmV0dXJuW3RbMF0sdFsyXSx0WzddLHRbM11dfX0pfX19Y2xhc3MgUG9seWdvbkFubm90YXRpb24gZXh0ZW5kcyBQb2x5bGluZUFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7dGhpcy5kYXRhLmFubm90YXRpb25UeXBlPUh9fWNsYXNzIENhcmV0QW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7dGhpcy5kYXRhLmFubm90YXRpb25UeXBlPU99fWNsYXNzIElua0Fubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO3RoaXMuZGF0YS5oYXNPd25DYW52YXM9dGhpcy5kYXRhLm5vUm90YXRlO3RoaXMuZGF0YS5ub0hUTUw9ITE7Y29uc3R7ZGljdDp0LHhyZWY6aX09ZTt0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGU9Vzt0aGlzLmRhdGEuaW5rTGlzdHM9W107dGhpcy5kYXRhLmlzRWRpdGFibGU9IXRoaXMuZGF0YS5ub0hUTUw7dGhpcy5kYXRhLm5vSFRNTD0hMTt0aGlzLmRhdGEub3BhY2l0eT10LmdldCgiQ0EiKXx8MTtjb25zdCBhPXQuZ2V0QXJyYXkoIklua0xpc3QiKTtpZihBcnJheS5pc0FycmF5KGEpKXtmb3IobGV0IGU9MCx0PWEubGVuZ3RoO2U8dDsrK2Upe2lmKCFBcnJheS5pc0FycmF5KGFbZV0pKWNvbnRpbnVlO2NvbnN0IHQ9bmV3IEZsb2F0MzJBcnJheShhW2VdLmxlbmd0aCk7dGhpcy5kYXRhLmlua0xpc3RzLnB1c2godCk7Zm9yKGxldCByPTAscz1hW2VdLmxlbmd0aDtyPHM7cis9Mil7Y29uc3Qgcz1pLmZldGNoSWZSZWYoYVtlXVtyXSksbj1pLmZldGNoSWZSZWYoYVtlXVtyKzFdKTtpZigibnVtYmVyIj09dHlwZW9mIHMmJiJudW1iZXIiPT10eXBlb2Ygbil7dFtyXT1zO3RbcisxXT1ufX19aWYoIXRoaXMuYXBwZWFyYW5jZSl7Y29uc3QgZT10aGlzLmNvbG9yP2dldFBkZkNvbG9yQXJyYXkodGhpcy5jb2xvcik6WzAsMCwwXSxhPXQuZ2V0KCJDQSIpLHI9dGhpcy5ib3JkZXJTdHlsZS53aWR0aHx8MSxzPTIqcixuPVsxLzAsMS8wLC0xLzAsLTEvMF07Zm9yKGNvbnN0IGUgb2YgdGhpcy5kYXRhLmlua0xpc3RzKWZvcihsZXQgdD0wLGk9ZS5sZW5ndGg7dDxpO3QrPTIpe25bMF09TWF0aC5taW4oblswXSxlW3RdLXMpO25bMV09TWF0aC5taW4oblsxXSxlW3QrMV0tcyk7blsyXT1NYXRoLm1heChuWzJdLGVbdF0rcyk7blszXT1NYXRoLm1heChuWzNdLGVbdCsxXStzKX1VdGlsLmludGVyc2VjdCh0aGlzLnJlY3RhbmdsZSxuKXx8KHRoaXMucmVjdGFuZ2xlPW4pO3RoaXMuX3NldERlZmF1bHRBcHBlYXJhbmNlKHt4cmVmOmksZXh0cmE6YCR7cn0gd2Asc3Ryb2tlQ29sb3I6ZSxzdHJva2VBbHBoYTphLHBvaW50c0NhbGxiYWNrOihlLHQpPT57Zm9yKGNvbnN0IHQgb2YgdGhpcy5kYXRhLmlua0xpc3RzKXtmb3IobGV0IGk9MCxhPXQubGVuZ3RoO2k8YTtpKz0yKWUucHVzaChgJHt0W2ldfSAke3RbaSsxXX0gJHswPT09aT8ibSI6ImwifWApO2UucHVzaCgiUyIpfXJldHVyblt0WzBdLHRbMl0sdFs3XSx0WzNdXX19KX19fXN0YXRpYyBjcmVhdGVOZXdEaWN0KGUsdCx7YXBSZWY6aSxhcDphfSl7Y29uc3R7b2xkQW5ub3RhdGlvbjpyLGNvbG9yOnMsb3BhY2l0eTpuLHBhdGhzOm8sb3V0bGluZXM6ZyxyZWN0OmMscm90YXRpb246bCx0aGlja25lc3M6aCx1c2VyOkN9PWUsUT1yfHxuZXcgRGljdCh0KTtRLnNldCgiVHlwZSIsTmFtZS5nZXQoIkFubm90IikpO1Euc2V0KCJTdWJ0eXBlIixOYW1lLmdldCgiSW5rIikpO1Euc2V0KHI/Ik0iOiJDcmVhdGlvbkRhdGUiLGBEOiR7Z2V0TW9kaWZpY2F0aW9uRGF0ZSgpfWApO1Euc2V0KCJSZWN0IixjKTtRLnNldCgiSW5rTGlzdCIsZz8ucG9pbnRzfHxvLnBvaW50cyk7US5zZXQoIkYiLDQpO1Euc2V0KCJSb3RhdGUiLGwpO0MmJlEuc2V0KCJUIixzdHJpbmdUb0FzY2lpT3JVVEYxNkJFKEMpKTtnJiZRLnNldCgiSVQiLE5hbWUuZ2V0KCJJbmtIaWdobGlnaHQiKSk7Y29uc3QgRT1uZXcgRGljdCh0KTtRLnNldCgiQlMiLEUpO0Uuc2V0KCJXIixoKTtRLnNldCgiQyIsQXJyYXkuZnJvbShzLChlPT5lLzI1NSkpKTtRLnNldCgiQ0EiLG4pO2NvbnN0IHU9bmV3IERpY3QodCk7US5zZXQoIkFQIix1KTtpP3Uuc2V0KCJOIixpKTp1LnNldCgiTiIsYSk7cmV0dXJuIFF9c3RhdGljIGFzeW5jIGNyZWF0ZU5ld0FwcGVhcmFuY2VTdHJlYW0oZSx0LGkpe2lmKGUub3V0bGluZXMpcmV0dXJuIHRoaXMuY3JlYXRlTmV3QXBwZWFyYW5jZVN0cmVhbUZvckhpZ2hsaWdodChlLHQsaSk7Y29uc3R7Y29sb3I6YSxyZWN0OnIscGF0aHM6cyx0aGlja25lc3M6bixvcGFjaXR5Om99PWUsZz1bYCR7bn0gdyAxIEogMSBqYCxgJHtnZXRQZGZDb2xvcihhLCExKX1gXTsxIT09byYmZy5wdXNoKCIvUjAgZ3MiKTtmb3IoY29uc3QgZSBvZiBzLmxpbmVzKXtnLnB1c2goYCR7bnVtYmVyVG9TdHJpbmcoZVs0XSl9ICR7bnVtYmVyVG9TdHJpbmcoZVs1XSl9IG1gKTtmb3IobGV0IHQ9NixpPWUubGVuZ3RoO3Q8aTt0Kz02KWlmKGlzTmFOKGVbdF0pKWcucHVzaChgJHtudW1iZXJUb1N0cmluZyhlW3QrNF0pfSAke251bWJlclRvU3RyaW5nKGVbdCs1XSl9IGxgKTtlbHNle2NvbnN0W2ksYSxyLHMsbixvXT1lLnNsaWNlKHQsdCs2KTtnLnB1c2goW2ksYSxyLHMsbixvXS5tYXAobnVtYmVyVG9TdHJpbmcpLmpvaW4oIiAiKSsiIGMiKX02PT09ZS5sZW5ndGgmJmcucHVzaChgJHtudW1iZXJUb1N0cmluZyhlWzRdKX0gJHtudW1iZXJUb1N0cmluZyhlWzVdKX0gbGApfWcucHVzaCgiUyIpO2NvbnN0IGM9Zy5qb2luKCJcbiIpLGw9bmV3IERpY3QodCk7bC5zZXQoIkZvcm1UeXBlIiwxKTtsLnNldCgiU3VidHlwZSIsTmFtZS5nZXQoIkZvcm0iKSk7bC5zZXQoIlR5cGUiLE5hbWUuZ2V0KCJYT2JqZWN0IikpO2wuc2V0KCJCQm94IixyKTtsLnNldCgiTGVuZ3RoIixjLmxlbmd0aCk7aWYoMSE9PW8pe2NvbnN0IGU9bmV3IERpY3QodCksaT1uZXcgRGljdCh0KSxhPW5ldyBEaWN0KHQpO2Euc2V0KCJDQSIsbyk7YS5zZXQoIlR5cGUiLE5hbWUuZ2V0KCJFeHRHU3RhdGUiKSk7aS5zZXQoIlIwIixhKTtlLnNldCgiRXh0R1N0YXRlIixpKTtsLnNldCgiUmVzb3VyY2VzIixlKX1jb25zdCBoPW5ldyBTdHJpbmdTdHJlYW0oYyk7aC5kaWN0PWw7cmV0dXJuIGh9c3RhdGljIGFzeW5jIGNyZWF0ZU5ld0FwcGVhcmFuY2VTdHJlYW1Gb3JIaWdobGlnaHQoZSx0LGkpe2NvbnN0e2NvbG9yOmEscmVjdDpyLG91dGxpbmVzOntvdXRsaW5lOnN9LG9wYWNpdHk6bn09ZSxvPVtgJHtnZXRQZGZDb2xvcihhLCEwKX1gLCIvUjAgZ3MiXTtvLnB1c2goYCR7bnVtYmVyVG9TdHJpbmcoc1s0XSl9ICR7bnVtYmVyVG9TdHJpbmcoc1s1XSl9IG1gKTtmb3IobGV0IGU9Nix0PXMubGVuZ3RoO2U8dDtlKz02KWlmKGlzTmFOKHNbZV0pKW8ucHVzaChgJHtudW1iZXJUb1N0cmluZyhzW2UrNF0pfSAke251bWJlclRvU3RyaW5nKHNbZSs1XSl9IGxgKTtlbHNle2NvbnN0W3QsaSxhLHIsbixnXT1zLnNsaWNlKGUsZSs2KTtvLnB1c2goW3QsaSxhLHIsbixnXS5tYXAobnVtYmVyVG9TdHJpbmcpLmpvaW4oIiAiKSsiIGMiKX1vLnB1c2goImggZiIpO2NvbnN0IGc9by5qb2luKCJcbiIpLGM9bmV3IERpY3QodCk7Yy5zZXQoIkZvcm1UeXBlIiwxKTtjLnNldCgiU3VidHlwZSIsTmFtZS5nZXQoIkZvcm0iKSk7Yy5zZXQoIlR5cGUiLE5hbWUuZ2V0KCJYT2JqZWN0IikpO2Muc2V0KCJCQm94IixyKTtjLnNldCgiTGVuZ3RoIixnLmxlbmd0aCk7Y29uc3QgbD1uZXcgRGljdCh0KSxoPW5ldyBEaWN0KHQpO2wuc2V0KCJFeHRHU3RhdGUiLGgpO2Muc2V0KCJSZXNvdXJjZXMiLGwpO2NvbnN0IEM9bmV3IERpY3QodCk7aC5zZXQoIlIwIixDKTtDLnNldCgiQk0iLE5hbWUuZ2V0KCJNdWx0aXBseSIpKTtpZigxIT09bil7Qy5zZXQoImNhIixuKTtDLnNldCgiVHlwZSIsTmFtZS5nZXQoIkV4dEdTdGF0ZSIpKX1jb25zdCBRPW5ldyBTdHJpbmdTdHJlYW0oZyk7US5kaWN0PWM7cmV0dXJuIFF9fWNsYXNzIEhpZ2hsaWdodEFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO2NvbnN0e2RpY3Q6dCx4cmVmOml9PWU7dGhpcy5kYXRhLmFubm90YXRpb25UeXBlPXY7dGhpcy5kYXRhLmlzRWRpdGFibGU9IXRoaXMuZGF0YS5ub0hUTUw7dGhpcy5kYXRhLm5vSFRNTD0hMTt0aGlzLmRhdGEub3BhY2l0eT10LmdldCgiQ0EiKXx8MTtpZih0aGlzLmRhdGEucXVhZFBvaW50cz1nZXRRdWFkUG9pbnRzKHQsbnVsbCkpe2NvbnN0IGU9dGhpcy5hcHBlYXJhbmNlPy5kaWN0LmdldCgiUmVzb3VyY2VzIik7aWYoIXRoaXMuYXBwZWFyYW5jZXx8IWU/LmhhcygiRXh0R1N0YXRlIikpe3RoaXMuYXBwZWFyYW5jZSYmd2FybigiSGlnaGxpZ2h0QW5ub3RhdGlvbiAtIGlnbm9yaW5nIGJ1aWx0LWluIGFwcGVhcmFuY2Ugc3RyZWFtLiIpO2NvbnN0IGU9dGhpcy5jb2xvcj9nZXRQZGZDb2xvckFycmF5KHRoaXMuY29sb3IpOlsxLDEsMF0sYT10LmdldCgiQ0EiKTt0aGlzLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjppLGZpbGxDb2xvcjplLGJsZW5kTW9kZToiTXVsdGlwbHkiLGZpbGxBbHBoYTphLHBvaW50c0NhbGxiYWNrOihlLHQpPT57ZS5wdXNoKGAke3RbMF19ICR7dFsxXX0gbWAsYCR7dFsyXX0gJHt0WzNdfSBsYCxgJHt0WzZdfSAke3RbN119IGxgLGAke3RbNF19ICR7dFs1XX0gbGAsImYiKTtyZXR1cm5bdFswXSx0WzJdLHRbN10sdFszXV19fSl9fWVsc2UgdGhpcy5kYXRhLnBvcHVwUmVmPW51bGx9c3RhdGljIGNyZWF0ZU5ld0RpY3QoZSx0LHthcFJlZjppLGFwOmF9KXtjb25zdHtjb2xvcjpyLG9sZEFubm90YXRpb246cyxvcGFjaXR5Om4scmVjdDpvLHJvdGF0aW9uOmcsdXNlcjpjLHF1YWRQb2ludHM6bH09ZSxoPXN8fG5ldyBEaWN0KHQpO2guc2V0KCJUeXBlIixOYW1lLmdldCgiQW5ub3QiKSk7aC5zZXQoIlN1YnR5cGUiLE5hbWUuZ2V0KCJIaWdobGlnaHQiKSk7aC5zZXQocz8iTSI6IkNyZWF0aW9uRGF0ZSIsYEQ6JHtnZXRNb2RpZmljYXRpb25EYXRlKCl9YCk7aC5zZXQoIkNyZWF0aW9uRGF0ZSIsYEQ6JHtnZXRNb2RpZmljYXRpb25EYXRlKCl9YCk7aC5zZXQoIlJlY3QiLG8pO2guc2V0KCJGIiw0KTtoLnNldCgiQm9yZGVyIixbMCwwLDBdKTtoLnNldCgiUm90YXRlIixnKTtoLnNldCgiUXVhZFBvaW50cyIsbCk7aC5zZXQoIkMiLEFycmF5LmZyb20ociwoZT0+ZS8yNTUpKSk7aC5zZXQoIkNBIixuKTtjJiZoLnNldCgiVCIsc3RyaW5nVG9Bc2NpaU9yVVRGMTZCRShjKSk7aWYoaXx8YSl7Y29uc3QgZT1uZXcgRGljdCh0KTtoLnNldCgiQVAiLGUpO2Uuc2V0KCJOIixpfHxhKX1yZXR1cm4gaH1zdGF0aWMgYXN5bmMgY3JlYXRlTmV3QXBwZWFyYW5jZVN0cmVhbShlLHQsaSl7Y29uc3R7Y29sb3I6YSxyZWN0OnIsb3V0bGluZXM6cyxvcGFjaXR5Om59PWUsbz1bYCR7Z2V0UGRmQ29sb3IoYSwhMCl9YCwiL1IwIGdzIl0sZz1bXTtmb3IoY29uc3QgZSBvZiBzKXtnLmxlbmd0aD0wO2cucHVzaChgJHtudW1iZXJUb1N0cmluZyhlWzBdKX0gJHtudW1iZXJUb1N0cmluZyhlWzFdKX0gbWApO2ZvcihsZXQgdD0yLGk9ZS5sZW5ndGg7dDxpO3QrPTIpZy5wdXNoKGAke251bWJlclRvU3RyaW5nKGVbdF0pfSAke251bWJlclRvU3RyaW5nKGVbdCsxXSl9IGxgKTtnLnB1c2goImgiKTtvLnB1c2goZy5qb2luKCJcbiIpKX1vLnB1c2goImYqIik7Y29uc3QgYz1vLmpvaW4oIlxuIiksbD1uZXcgRGljdCh0KTtsLnNldCgiRm9ybVR5cGUiLDEpO2wuc2V0KCJTdWJ0eXBlIixOYW1lLmdldCgiRm9ybSIpKTtsLnNldCgiVHlwZSIsTmFtZS5nZXQoIlhPYmplY3QiKSk7bC5zZXQoIkJCb3giLHIpO2wuc2V0KCJMZW5ndGgiLGMubGVuZ3RoKTtjb25zdCBoPW5ldyBEaWN0KHQpLEM9bmV3IERpY3QodCk7aC5zZXQoIkV4dEdTdGF0ZSIsQyk7bC5zZXQoIlJlc291cmNlcyIsaCk7Y29uc3QgUT1uZXcgRGljdCh0KTtDLnNldCgiUjAiLFEpO1Euc2V0KCJCTSIsTmFtZS5nZXQoIk11bHRpcGx5IikpO2lmKDEhPT1uKXtRLnNldCgiY2EiLG4pO1Euc2V0KCJUeXBlIixOYW1lLmdldCgiRXh0R1N0YXRlIikpfWNvbnN0IEU9bmV3IFN0cmluZ1N0cmVhbShjKTtFLmRpY3Q9bDtyZXR1cm4gRX19Y2xhc3MgVW5kZXJsaW5lQW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7Y29uc3R7ZGljdDp0LHhyZWY6aX09ZTt0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGU9WTtpZih0aGlzLmRhdGEucXVhZFBvaW50cz1nZXRRdWFkUG9pbnRzKHQsbnVsbCkpe2lmKCF0aGlzLmFwcGVhcmFuY2Upe2NvbnN0IGU9dGhpcy5jb2xvcj9nZXRQZGZDb2xvckFycmF5KHRoaXMuY29sb3IpOlswLDAsMF0sYT10LmdldCgiQ0EiKTt0aGlzLl9zZXREZWZhdWx0QXBwZWFyYW5jZSh7eHJlZjppLGV4dHJhOiJbXSAwIGQgMC41NzEgdyIsc3Ryb2tlQ29sb3I6ZSxzdHJva2VBbHBoYTphLHBvaW50c0NhbGxiYWNrOihlLHQpPT57ZS5wdXNoKGAke3RbNF19ICR7dFs1XSsxLjN9IG1gLGAke3RbNl19ICR7dFs3XSsxLjN9IGxgLCJTIik7cmV0dXJuW3RbMF0sdFsyXSx0WzddLHRbM11dfX0pfX1lbHNlIHRoaXMuZGF0YS5wb3B1cFJlZj1udWxsfX1jbGFzcyBTcXVpZ2dseUFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9ue2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO2NvbnN0e2RpY3Q6dCx4cmVmOml9PWU7dGhpcy5kYXRhLmFubm90YXRpb25UeXBlPUs7aWYodGhpcy5kYXRhLnF1YWRQb2ludHM9Z2V0UXVhZFBvaW50cyh0LG51bGwpKXtpZighdGhpcy5hcHBlYXJhbmNlKXtjb25zdCBlPXRoaXMuY29sb3I/Z2V0UGRmQ29sb3JBcnJheSh0aGlzLmNvbG9yKTpbMCwwLDBdLGE9dC5nZXQoIkNBIik7dGhpcy5fc2V0RGVmYXVsdEFwcGVhcmFuY2Uoe3hyZWY6aSxleHRyYToiW10gMCBkIDEgdyIsc3Ryb2tlQ29sb3I6ZSxzdHJva2VBbHBoYTphLHBvaW50c0NhbGxiYWNrOihlLHQpPT57Y29uc3QgaT0odFsxXS10WzVdKS82O2xldCBhPWkscj10WzRdO2NvbnN0IHM9dFs1XSxuPXRbNl07ZS5wdXNoKGAke3J9ICR7cythfSBtYCk7ZG97cis9MjthPTA9PT1hP2k6MDtlLnB1c2goYCR7cn0gJHtzK2F9IGxgKX13aGlsZShyPG4pO2UucHVzaCgiUyIpO3JldHVyblt0WzRdLG4scy0yKmkscysyKmldfX0pfX1lbHNlIHRoaXMuZGF0YS5wb3B1cFJlZj1udWxsfX1jbGFzcyBTdHJpa2VPdXRBbm5vdGF0aW9uIGV4dGVuZHMgTWFya3VwQW5ub3RhdGlvbntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTtjb25zdHtkaWN0OnQseHJlZjppfT1lO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1UO2lmKHRoaXMuZGF0YS5xdWFkUG9pbnRzPWdldFF1YWRQb2ludHModCxudWxsKSl7aWYoIXRoaXMuYXBwZWFyYW5jZSl7Y29uc3QgZT10aGlzLmNvbG9yP2dldFBkZkNvbG9yQXJyYXkodGhpcy5jb2xvcik6WzAsMCwwXSxhPXQuZ2V0KCJDQSIpO3RoaXMuX3NldERlZmF1bHRBcHBlYXJhbmNlKHt4cmVmOmksZXh0cmE6IltdIDAgZCAxIHciLHN0cm9rZUNvbG9yOmUsc3Ryb2tlQWxwaGE6YSxwb2ludHNDYWxsYmFjazooZSx0KT0+e2UucHVzaCgodFswXSt0WzRdKS8yKyIgIisodFsxXSt0WzVdKS8yKyIgbSIsKHRbMl0rdFs2XSkvMisiICIrKHRbM10rdFs3XSkvMisiIGwiLCJTIik7cmV0dXJuW3RbMF0sdFsyXSx0WzddLHRbM11dfX0pfX1lbHNlIHRoaXMuZGF0YS5wb3B1cFJlZj1udWxsfX1jbGFzcyBTdGFtcEFubm90YXRpb24gZXh0ZW5kcyBNYXJrdXBBbm5vdGF0aW9ueyNUO2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO3RoaXMuZGF0YS5hbm5vdGF0aW9uVHlwZT1xO3RoaXMuI1Q9dGhpcy5kYXRhLmhhc093bkNhbnZhcz10aGlzLmRhdGEubm9Sb3RhdGU7dGhpcy5kYXRhLmlzRWRpdGFibGU9IXRoaXMuZGF0YS5ub0hUTUw7dGhpcy5kYXRhLm5vSFRNTD0hMX1tdXN0QmVWaWV3ZWRXaGVuRWRpdGluZyhlLHQ9bnVsbCl7aWYoZSl7aWYoIXRoaXMuZGF0YS5pc0VkaXRhYmxlKXJldHVybiExO3RoaXMuI1Q9dGhpcy5kYXRhLmhhc093bkNhbnZhczt0aGlzLmRhdGEuaGFzT3duQ2FudmFzPSEwO3JldHVybiEwfXRoaXMuZGF0YS5oYXNPd25DYW52YXM9dGhpcy4jVDtyZXR1cm4hdD8uaGFzKHRoaXMuZGF0YS5pZCl9c3RhdGljIGFzeW5jIGNyZWF0ZUltYWdlKGUsdCl7Y29uc3R7d2lkdGg6aSxoZWlnaHQ6YX09ZSxyPW5ldyBPZmZzY3JlZW5DYW52YXMoaSxhKSxzPXIuZ2V0Q29udGV4dCgiMmQiLHthbHBoYTohMH0pO3MuZHJhd0ltYWdlKGUsMCwwKTtjb25zdCBuPXMuZ2V0SW1hZ2VEYXRhKDAsMCxpLGEpLmRhdGEsbz1uZXcgVWludDMyQXJyYXkobi5idWZmZXIpLGc9by5zb21lKEZlYXR1cmVUZXN0LmlzTGl0dGxlRW5kaWFuP2U9PmU+Pj4yNCE9MjU1OmU9PiEhKDI1NSZ+ZSkpO2lmKGcpe3MuZmlsbFN0eWxlPSJ3aGl0ZSI7cy5maWxsUmVjdCgwLDAsaSxhKTtzLmRyYXdJbWFnZShlLDAsMCl9Y29uc3QgYz1yLmNvbnZlcnRUb0Jsb2Ioe3R5cGU6ImltYWdlL2pwZWciLHF1YWxpdHk6MX0pLnRoZW4oKGU9PmUuYXJyYXlCdWZmZXIoKSkpLGw9TmFtZS5nZXQoIlhPYmplY3QiKSxoPU5hbWUuZ2V0KCJJbWFnZSIpLEM9bmV3IERpY3QodCk7Qy5zZXQoIlR5cGUiLGwpO0Muc2V0KCJTdWJ0eXBlIixoKTtDLnNldCgiQml0c1BlckNvbXBvbmVudCIsOCk7Qy5zZXQoIkNvbG9yU3BhY2UiLE5hbWUuZ2V0KCJEZXZpY2VSR0IiKSk7Qy5zZXQoIkZpbHRlciIsTmFtZS5nZXQoIkRDVERlY29kZSIpKTtDLnNldCgiQkJveCIsWzAsMCxpLGFdKTtDLnNldCgiV2lkdGgiLGkpO0Muc2V0KCJIZWlnaHQiLGEpO2xldCBRPW51bGw7aWYoZyl7Y29uc3QgZT1uZXcgVWludDhBcnJheShvLmxlbmd0aCk7aWYoRmVhdHVyZVRlc3QuaXNMaXR0bGVFbmRpYW4pZm9yKGxldCB0PTAsaT1vLmxlbmd0aDt0PGk7dCsrKWVbdF09b1t0XT4+PjI0O2Vsc2UgZm9yKGxldCB0PTAsaT1vLmxlbmd0aDt0PGk7dCsrKWVbdF09MjU1Jm9bdF07Y29uc3Qgcj1uZXcgRGljdCh0KTtyLnNldCgiVHlwZSIsbCk7ci5zZXQoIlN1YnR5cGUiLGgpO3Iuc2V0KCJCaXRzUGVyQ29tcG9uZW50Iiw4KTtyLnNldCgiQ29sb3JTcGFjZSIsTmFtZS5nZXQoIkRldmljZUdyYXkiKSk7ci5zZXQoIldpZHRoIixpKTtyLnNldCgiSGVpZ2h0IixhKTtRPW5ldyBTdHJlYW0oZSwwLDAscil9cmV0dXJue2ltYWdlU3RyZWFtOm5ldyBTdHJlYW0oYXdhaXQgYywwLDAsQyksc21hc2tTdHJlYW06USx3aWR0aDppLGhlaWdodDphfX1zdGF0aWMgY3JlYXRlTmV3RGljdChlLHQse2FwUmVmOmksYXA6YX0pe2NvbnN0e29sZEFubm90YXRpb246cixyZWN0OnMscm90YXRpb246bix1c2VyOm99PWUsZz1yfHxuZXcgRGljdCh0KTtnLnNldCgiVHlwZSIsTmFtZS5nZXQoIkFubm90IikpO2cuc2V0KCJTdWJ0eXBlIixOYW1lLmdldCgiU3RhbXAiKSk7Zy5zZXQocj8iTSI6IkNyZWF0aW9uRGF0ZSIsYEQ6JHtnZXRNb2RpZmljYXRpb25EYXRlKCl9YCk7Zy5zZXQoIlJlY3QiLHMpO2cuc2V0KCJGIiw0KTtnLnNldCgiQm9yZGVyIixbMCwwLDBdKTtnLnNldCgiUm90YXRlIixuKTtvJiZnLnNldCgiVCIsc3RyaW5nVG9Bc2NpaU9yVVRGMTZCRShvKSk7aWYoaXx8YSl7Y29uc3QgZT1uZXcgRGljdCh0KTtnLnNldCgiQVAiLGUpO2k/ZS5zZXQoIk4iLGkpOmUuc2V0KCJOIixhKX1yZXR1cm4gZ31zdGF0aWMgYXN5bmMgY3JlYXRlTmV3QXBwZWFyYW5jZVN0cmVhbShlLHQsaSl7aWYoZS5vbGRBbm5vdGF0aW9uKXJldHVybiBudWxsO2NvbnN0e3JvdGF0aW9uOmF9PWUse2ltYWdlUmVmOnIsd2lkdGg6cyxoZWlnaHQ6bn09aS5pbWFnZSxvPW5ldyBEaWN0KHQpLGc9bmV3IERpY3QodCk7by5zZXQoIlhPYmplY3QiLGcpO2cuc2V0KCJJbTAiLHIpO2NvbnN0IGM9YHEgJHtzfSAwIDAgJHtufSAwIDAgY20gL0ltMCBEbyBRYCxsPW5ldyBEaWN0KHQpO2wuc2V0KCJGb3JtVHlwZSIsMSk7bC5zZXQoIlN1YnR5cGUiLE5hbWUuZ2V0KCJGb3JtIikpO2wuc2V0KCJUeXBlIixOYW1lLmdldCgiWE9iamVjdCIpKTtsLnNldCgiQkJveCIsWzAsMCxzLG5dKTtsLnNldCgiUmVzb3VyY2VzIixvKTtpZihhKXtjb25zdCBlPWdldFJvdGF0aW9uTWF0cml4KGEscyxuKTtsLnNldCgiTWF0cml4IixlKX1jb25zdCBoPW5ldyBTdHJpbmdTdHJlYW0oYyk7aC5kaWN0PWw7cmV0dXJuIGh9fWNsYXNzIEZpbGVBdHRhY2htZW50QW5ub3RhdGlvbiBleHRlbmRzIE1hcmt1cEFubm90YXRpb257Y29uc3RydWN0b3IoZSl7c3VwZXIoZSk7Y29uc3R7ZGljdDp0LHhyZWY6aX09ZSxhPW5ldyBGaWxlU3BlYyh0LmdldCgiRlMiKSxpKTt0aGlzLmRhdGEuYW5ub3RhdGlvblR5cGU9WDt0aGlzLmRhdGEuaGFzT3duQ2FudmFzPXRoaXMuZGF0YS5ub1JvdGF0ZTt0aGlzLmRhdGEubm9IVE1MPSExO3RoaXMuZGF0YS5maWxlPWEuc2VyaWFsaXphYmxlO2NvbnN0IHI9dC5nZXQoIk5hbWUiKTt0aGlzLmRhdGEubmFtZT1yIGluc3RhbmNlb2YgTmFtZT9zdHJpbmdUb1BERlN0cmluZyhyLm5hbWUpOiJQdXNoUGluIjtjb25zdCBzPXQuZ2V0KCJjYSIpO3RoaXMuZGF0YS5maWxsQWxwaGE9Im51bWJlciI9PXR5cGVvZiBzJiZzPj0wJiZzPD0xP3M6bnVsbH19Y2xhc3MgRGVjcnlwdFN0cmVhbSBleHRlbmRzIERlY29kZVN0cmVhbXtjb25zdHJ1Y3RvcihlLHQsaSl7c3VwZXIodCk7dGhpcy5zdHI9ZTt0aGlzLmRpY3Q9ZS5kaWN0O3RoaXMuZGVjcnlwdD1pO3RoaXMubmV4dENodW5rPW51bGw7dGhpcy5pbml0aWFsaXplZD0hMX1yZWFkQmxvY2soKXtsZXQgZTtpZih0aGlzLmluaXRpYWxpemVkKWU9dGhpcy5uZXh0Q2h1bms7ZWxzZXtlPXRoaXMuc3RyLmdldEJ5dGVzKDUxMik7dGhpcy5pbml0aWFsaXplZD0hMH1pZighZT8ubGVuZ3RoKXt0aGlzLmVvZj0hMDtyZXR1cm59dGhpcy5uZXh0Q2h1bms9dGhpcy5zdHIuZ2V0Qnl0ZXMoNTEyKTtjb25zdCB0PXRoaXMubmV4dENodW5rPy5sZW5ndGg+MDtlPSgwLHRoaXMuZGVjcnlwdCkoZSwhdCk7Y29uc3QgaT10aGlzLmJ1ZmZlckxlbmd0aCxhPWkrZS5sZW5ndGg7dGhpcy5lbnN1cmVCdWZmZXIoYSkuc2V0KGUsaSk7dGhpcy5idWZmZXJMZW5ndGg9YX19Y2xhc3MgQVJDRm91ckNpcGhlcntjb25zdHJ1Y3RvcihlKXt0aGlzLmE9MDt0aGlzLmI9MDtjb25zdCB0PW5ldyBVaW50OEFycmF5KDI1NiksaT1lLmxlbmd0aDtmb3IobGV0IGU9MDtlPDI1NjsrK2UpdFtlXT1lO2ZvcihsZXQgYT0wLHI9MDthPDI1NjsrK2Epe2NvbnN0IHM9dFthXTtyPXIrcytlW2ElaV0mMjU1O3RbYV09dFtyXTt0W3JdPXN9dGhpcy5zPXR9ZW5jcnlwdEJsb2NrKGUpe2xldCB0PXRoaXMuYSxpPXRoaXMuYjtjb25zdCBhPXRoaXMucyxyPWUubGVuZ3RoLHM9bmV3IFVpbnQ4QXJyYXkocik7Zm9yKGxldCBuPTA7bjxyOysrbil7dD10KzEmMjU1O2NvbnN0IHI9YVt0XTtpPWkrciYyNTU7Y29uc3Qgbz1hW2ldO2FbdF09bzthW2ldPXI7c1tuXT1lW25dXmFbcitvJjI1NV19dGhpcy5hPXQ7dGhpcy5iPWk7cmV0dXJuIHN9ZGVjcnlwdEJsb2NrKGUpe3JldHVybiB0aGlzLmVuY3J5cHRCbG9jayhlKX1lbmNyeXB0KGUpe3JldHVybiB0aGlzLmVuY3J5cHRCbG9jayhlKX19Y29uc3QgZW89ZnVuY3Rpb24gY2FsY3VsYXRlTUQ1Q2xvc3VyZSgpe2NvbnN0IGU9bmV3IFVpbnQ4QXJyYXkoWzcsMTIsMTcsMjIsNywxMiwxNywyMiw3LDEyLDE3LDIyLDcsMTIsMTcsMjIsNSw5LDE0LDIwLDUsOSwxNCwyMCw1LDksMTQsMjAsNSw5LDE0LDIwLDQsMTEsMTYsMjMsNCwxMSwxNiwyMyw0LDExLDE2LDIzLDQsMTEsMTYsMjMsNiwxMCwxNSwyMSw2LDEwLDE1LDIxLDYsMTAsMTUsMjEsNiwxMCwxNSwyMV0pLHQ9bmV3IEludDMyQXJyYXkoWy02ODA4NzY5MzYsLTM4OTU2NDU4Niw2MDYxMDU4MTksLTEwNDQ1MjUzMzAsLTE3NjQxODg5NywxMjAwMDgwNDI2LC0xNDczMjMxMzQxLC00NTcwNTk4MywxNzcwMDM1NDE2LC0xOTU4NDE0NDE3LC00MjA2MywtMTk5MDQwNDE2MiwxODA0NjAzNjgyLC00MDM0MTEwMSwtMTUwMjAwMjI5MCwxMjM2NTM1MzI5LC0xNjU3OTY1MTAsLTEwNjk1MDE2MzIsNjQzNzE3NzEzLC0zNzM4OTczMDIsLTcwMTU1ODY5MSwzODAxNjA4MywtNjYwNDc4MzM1LC00MDU1Mzc4NDgsNTY4NDQ2NDM4LC0xMDE5ODAzNjkwLC0xODczNjM5NjEsMTE2MzUzMTUwMSwtMTQ0NDY4MTQ2NywtNTE0MDM3ODQsMTczNTMyODQ3MywtMTkyNjYwNzczNCwtMzc4NTU4LC0yMDIyNTc0NDYzLDE4MzkwMzA1NjIsLTM1MzA5NTU2LC0xNTMwOTkyMDYwLDEyNzI4OTMzNTMsLTE1NTQ5NzYzMiwtMTA5NDczMDY0MCw2ODEyNzkxNzQsLTM1ODUzNzIyMiwtNzIyNTIxOTc5LDc2MDI5MTg5LC02NDAzNjQ0ODcsLTQyMTgxNTgzNSw1MzA3NDI1MjAsLTk5NTMzODY1MSwtMTk4NjMwODQ0LDExMjY4OTE0MTUsLTE0MTYzNTQ5MDUsLTU3NDM0MDU1LDE3MDA0ODU1NzEsLTE4OTQ5ODY2MDYsLTEwNTE1MjMsLTIwNTQ5MjI3OTksMTg3MzMxMzM1OSwtMzA2MTE3NDQsLTE1NjAxOTgzODAsMTMwOTE1MTY0OSwtMTQ1NTIzMDcwLC0xMTIwMjEwMzc5LDcxODc4NzI1OSwtMzQzNDg1NTUxXSk7cmV0dXJuIGZ1bmN0aW9uIGhhc2goaSxhLHIpe2xldCBzPTE3MzI1ODQxOTMsbj0tMjcxNzMzODc5LG89LTE3MzI1ODQxOTQsZz0yNzE3MzM4Nzg7Y29uc3QgYz1yKzcyJi02NCxsPW5ldyBVaW50OEFycmF5KGMpO2xldCBoLEM7Zm9yKGg9MDtoPHI7KytoKWxbaF09aVthKytdO2xbaCsrXT0xMjg7Y29uc3QgUT1jLTg7Zm9yKDtoPFE7KWxbaCsrXT0wO2xbaCsrXT1yPDwzJjI1NTtsW2grK109cj4+NSYyNTU7bFtoKytdPXI+PjEzJjI1NTtsW2grK109cj4+MjEmMjU1O2xbaCsrXT1yPj4+MjkmMjU1O2xbaCsrXT0wO2xbaCsrXT0wO2xbaCsrXT0wO2NvbnN0IEU9bmV3IEludDMyQXJyYXkoMTYpO2ZvcihoPTA7aDxjOyl7Zm9yKEM9MDtDPDE2OysrQyxoKz00KUVbQ109bFtoXXxsW2grMV08PDh8bFtoKzJdPDwxNnxsW2grM108PDI0O2xldCBpLGEscj1zLGM9bixRPW8sdT1nO2ZvcihDPTA7Qzw2NDsrK0Mpe2lmKEM8MTYpe2k9YyZRfH5jJnU7YT1DfWVsc2UgaWYoQzwzMil7aT11JmN8fnUmUTthPTUqQysxJjE1fWVsc2UgaWYoQzw0OCl7aT1jXlFedTthPTMqQys1JjE1fWVsc2V7aT1RXihjfH51KTthPTcqQyYxNX1jb25zdCBzPXUsbj1yK2krdFtDXStFW2FdfDAsbz1lW0NdO3U9UTtRPWM7Yz1jKyhuPDxvfG4+Pj4zMi1vKXwwO3I9c31zPXMrcnwwO249bitjfDA7bz1vK1F8MDtnPWcrdXwwfXJldHVybiBuZXcgVWludDhBcnJheShbMjU1JnMscz4+OCYyNTUscz4+MTYmMjU1LHM+Pj4yNCYyNTUsMjU1Jm4sbj4+OCYyNTUsbj4+MTYmMjU1LG4+Pj4yNCYyNTUsMjU1Jm8sbz4+OCYyNTUsbz4+MTYmMjU1LG8+Pj4yNCYyNTUsMjU1JmcsZz4+OCYyNTUsZz4+MTYmMjU1LGc+Pj4yNCYyNTVdKX19KCk7Y2xhc3MgV29yZDY0e2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5oaWdoPTB8ZTt0aGlzLmxvdz0wfHR9YW5kKGUpe3RoaXMuaGlnaCY9ZS5oaWdoO3RoaXMubG93Jj1lLmxvd314b3IoZSl7dGhpcy5oaWdoXj1lLmhpZ2g7dGhpcy5sb3dePWUubG93fW9yKGUpe3RoaXMuaGlnaHw9ZS5oaWdoO3RoaXMubG93fD1lLmxvd31zaGlmdFJpZ2h0KGUpe2lmKGU+PTMyKXt0aGlzLmxvdz10aGlzLmhpZ2g+Pj5lLTMyfDA7dGhpcy5oaWdoPTB9ZWxzZXt0aGlzLmxvdz10aGlzLmxvdz4+PmV8dGhpcy5oaWdoPDwzMi1lO3RoaXMuaGlnaD10aGlzLmhpZ2g+Pj5lfDB9fXNoaWZ0TGVmdChlKXtpZihlPj0zMil7dGhpcy5oaWdoPXRoaXMubG93PDxlLTMyO3RoaXMubG93PTB9ZWxzZXt0aGlzLmhpZ2g9dGhpcy5oaWdoPDxlfHRoaXMubG93Pj4+MzItZTt0aGlzLmxvdzw8PWV9fXJvdGF0ZVJpZ2h0KGUpe2xldCB0LGk7aWYoMzImZSl7aT10aGlzLmxvdzt0PXRoaXMuaGlnaH1lbHNle3Q9dGhpcy5sb3c7aT10aGlzLmhpZ2h9ZSY9MzE7dGhpcy5sb3c9dD4+PmV8aTw8MzItZTt0aGlzLmhpZ2g9aT4+PmV8dDw8MzItZX1ub3QoKXt0aGlzLmhpZ2g9fnRoaXMuaGlnaDt0aGlzLmxvdz1+dGhpcy5sb3d9YWRkKGUpe2NvbnN0IHQ9KHRoaXMubG93Pj4+MCkrKGUubG93Pj4+MCk7bGV0IGk9KHRoaXMuaGlnaD4+PjApKyhlLmhpZ2g+Pj4wKTt0PjQyOTQ5NjcyOTUmJihpKz0xKTt0aGlzLmxvdz0wfHQ7dGhpcy5oaWdoPTB8aX1jb3B5VG8oZSx0KXtlW3RdPXRoaXMuaGlnaD4+PjI0JjI1NTtlW3QrMV09dGhpcy5oaWdoPj4xNiYyNTU7ZVt0KzJdPXRoaXMuaGlnaD4+OCYyNTU7ZVt0KzNdPTI1NSZ0aGlzLmhpZ2g7ZVt0KzRdPXRoaXMubG93Pj4+MjQmMjU1O2VbdCs1XT10aGlzLmxvdz4+MTYmMjU1O2VbdCs2XT10aGlzLmxvdz4+OCYyNTU7ZVt0KzddPTI1NSZ0aGlzLmxvd31hc3NpZ24oZSl7dGhpcy5oaWdoPWUuaGlnaDt0aGlzLmxvdz1lLmxvd319Y29uc3QgdG89ZnVuY3Rpb24gY2FsY3VsYXRlU0hBMjU2Q2xvc3VyZSgpe2Z1bmN0aW9uIHJvdHIoZSx0KXtyZXR1cm4gZT4+PnR8ZTw8MzItdH1mdW5jdGlvbiBjaChlLHQsaSl7cmV0dXJuIGUmdF5+ZSZpfWZ1bmN0aW9uIG1haihlLHQsaSl7cmV0dXJuIGUmdF5lJmledCZpfWZ1bmN0aW9uIHNpZ21hKGUpe3JldHVybiByb3RyKGUsMilecm90cihlLDEzKV5yb3RyKGUsMjIpfWZ1bmN0aW9uIHNpZ21hUHJpbWUoZSl7cmV0dXJuIHJvdHIoZSw2KV5yb3RyKGUsMTEpXnJvdHIoZSwyNSl9ZnVuY3Rpb24gbGl0dGxlU2lnbWEoZSl7cmV0dXJuIHJvdHIoZSw3KV5yb3RyKGUsMTgpXmU+Pj4zfWNvbnN0IGU9WzExMTYzNTI0MDgsMTg5OTQ0NzQ0MSwzMDQ5MzIzNDcxLDM5MjEwMDk1NzMsOTYxOTg3MTYzLDE1MDg5NzA5OTMsMjQ1MzYzNTc0OCwyODcwNzYzMjIxLDM2MjQzODEwODAsMzEwNTk4NDAxLDYwNzIyNTI3OCwxNDI2ODgxOTg3LDE5MjUwNzgzODgsMjE2MjA3ODIwNiwyNjE0ODg4MTAzLDMyNDgyMjI1ODAsMzgzNTM5MDQwMSw0MDIyMjI0Nzc0LDI2NDM0NzA3OCw2MDQ4MDc2MjgsNzcwMjU1OTgzLDEyNDkxNTAxMjIsMTU1NTA4MTY5MiwxOTk2MDY0OTg2LDI1NTQyMjA4ODIsMjgyMTgzNDM0OSwyOTUyOTk2ODA4LDMyMTAzMTM2NzEsMzMzNjU3MTg5MSwzNTg0NTI4NzExLDExMzkyNjk5MywzMzgyNDE4OTUsNjY2MzA3MjA1LDc3MzUyOTkxMiwxMjk0NzU3MzcyLDEzOTYxODIyOTEsMTY5NTE4MzcwMCwxOTg2NjYxMDUxLDIxNzcwMjYzNTAsMjQ1Njk1NjAzNywyNzMwNDg1OTIxLDI4MjAzMDI0MTEsMzI1OTczMDgwMCwzMzQ1NzY0NzcxLDM1MTYwNjU4MTcsMzYwMDM1MjgwNCw0MDk0NTcxOTA5LDI3NTQyMzM0NCw0MzAyMjc3MzQsNTA2OTQ4NjE2LDY1OTA2MDU1Niw4ODM5OTc4NzcsOTU4MTM5NTcxLDEzMjI4MjIyMTgsMTUzNzAwMjA2MywxNzQ3ODczNzc5LDE5NTU1NjIyMjIsMjAyNDEwNDgxNSwyMjI3NzMwNDUyLDIzNjE4NTI0MjQsMjQyODQzNjQ3NCwyNzU2NzM0MTg3LDMyMDQwMzE0NzksMzMyOTMyNTI5OF07cmV0dXJuIGZ1bmN0aW9uIGhhc2godCxpLGEpe2xldCByPTE3NzkwMzM3MDMscz0zMTQ0MTM0Mjc3LG49MTAxMzkwNDI0MixvPTI3NzM0ODA3NjIsZz0xMzU5ODkzMTE5LGM9MjYwMDgyMjkyNCxsPTUyODczNDYzNSxoPTE1NDE0NTkyMjU7Y29uc3QgQz02NCpNYXRoLmNlaWwoKGErOSkvNjQpLFE9bmV3IFVpbnQ4QXJyYXkoQyk7bGV0IEUsdTtmb3IoRT0wO0U8YTsrK0UpUVtFXT10W2krK107UVtFKytdPTEyODtjb25zdCBkPUMtODtmb3IoO0U8ZDspUVtFKytdPTA7UVtFKytdPTA7UVtFKytdPTA7UVtFKytdPTA7UVtFKytdPWE+Pj4yOSYyNTU7UVtFKytdPWE+PjIxJjI1NTtRW0UrK109YT4+MTMmMjU1O1FbRSsrXT1hPj41JjI1NTtRW0UrK109YTw8MyYyNTU7Y29uc3QgZj1uZXcgVWludDMyQXJyYXkoNjQpO2ZvcihFPTA7RTxDOyl7Zm9yKHU9MDt1PDE2OysrdSl7Zlt1XT1RW0VdPDwyNHxRW0UrMV08PDE2fFFbRSsyXTw8OHxRW0UrM107RSs9NH1mb3IodT0xNjt1PDY0OysrdSlmW3VdPShyb3RyKHA9Zlt1LTJdLDE3KV5yb3RyKHAsMTkpXnA+Pj4xMCkrZlt1LTddK2xpdHRsZVNpZ21hKGZbdS0xNV0pK2ZbdS0xNl18MDtsZXQgdCxpLGE9cixDPXMsZD1uLG09byx5PWcsdz1jLGI9bCxEPWg7Zm9yKHU9MDt1PDY0OysrdSl7dD1EK3NpZ21hUHJpbWUoeSkrY2goeSx3LGIpK2VbdV0rZlt1XTtpPXNpZ21hKGEpK21haihhLEMsZCk7RD1iO2I9dzt3PXk7eT1tK3R8MDttPWQ7ZD1DO0M9YTthPXQraXwwfXI9cithfDA7cz1zK0N8MDtuPW4rZHwwO289byttfDA7Zz1nK3l8MDtjPWMrd3wwO2w9bCtifDA7aD1oK0R8MH12YXIgcDtyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoW3I+PjI0JjI1NSxyPj4xNiYyNTUscj4+OCYyNTUsMjU1JnIscz4+MjQmMjU1LHM+PjE2JjI1NSxzPj44JjI1NSwyNTUmcyxuPj4yNCYyNTUsbj4+MTYmMjU1LG4+PjgmMjU1LDI1NSZuLG8+PjI0JjI1NSxvPj4xNiYyNTUsbz4+OCYyNTUsMjU1Jm8sZz4+MjQmMjU1LGc+PjE2JjI1NSxnPj44JjI1NSwyNTUmZyxjPj4yNCYyNTUsYz4+MTYmMjU1LGM+PjgmMjU1LDI1NSZjLGw+PjI0JjI1NSxsPj4xNiYyNTUsbD4+OCYyNTUsMjU1JmwsaD4+MjQmMjU1LGg+PjE2JjI1NSxoPj44JjI1NSwyNTUmaF0pfX0oKSxpbz1mdW5jdGlvbiBjYWxjdWxhdGVTSEE1MTJDbG9zdXJlKCl7ZnVuY3Rpb24gY2goZSx0LGksYSxyKXtlLmFzc2lnbih0KTtlLmFuZChpKTtyLmFzc2lnbih0KTtyLm5vdCgpO3IuYW5kKGEpO2UueG9yKHIpfWZ1bmN0aW9uIG1haihlLHQsaSxhLHIpe2UuYXNzaWduKHQpO2UuYW5kKGkpO3IuYXNzaWduKHQpO3IuYW5kKGEpO2UueG9yKHIpO3IuYXNzaWduKGkpO3IuYW5kKGEpO2UueG9yKHIpfWZ1bmN0aW9uIHNpZ21hKGUsdCxpKXtlLmFzc2lnbih0KTtlLnJvdGF0ZVJpZ2h0KDI4KTtpLmFzc2lnbih0KTtpLnJvdGF0ZVJpZ2h0KDM0KTtlLnhvcihpKTtpLmFzc2lnbih0KTtpLnJvdGF0ZVJpZ2h0KDM5KTtlLnhvcihpKX1mdW5jdGlvbiBzaWdtYVByaW1lKGUsdCxpKXtlLmFzc2lnbih0KTtlLnJvdGF0ZVJpZ2h0KDE0KTtpLmFzc2lnbih0KTtpLnJvdGF0ZVJpZ2h0KDE4KTtlLnhvcihpKTtpLmFzc2lnbih0KTtpLnJvdGF0ZVJpZ2h0KDQxKTtlLnhvcihpKX1mdW5jdGlvbiBsaXR0bGVTaWdtYShlLHQsaSl7ZS5hc3NpZ24odCk7ZS5yb3RhdGVSaWdodCgxKTtpLmFzc2lnbih0KTtpLnJvdGF0ZVJpZ2h0KDgpO2UueG9yKGkpO2kuYXNzaWduKHQpO2kuc2hpZnRSaWdodCg3KTtlLnhvcihpKX1mdW5jdGlvbiBsaXR0bGVTaWdtYVByaW1lKGUsdCxpKXtlLmFzc2lnbih0KTtlLnJvdGF0ZVJpZ2h0KDE5KTtpLmFzc2lnbih0KTtpLnJvdGF0ZVJpZ2h0KDYxKTtlLnhvcihpKTtpLmFzc2lnbih0KTtpLnNoaWZ0UmlnaHQoNik7ZS54b3IoaSl9Y29uc3QgZT1bbmV3IFdvcmQ2NCgxMTE2MzUyNDA4LDM2MDk3Njc0NTgpLG5ldyBXb3JkNjQoMTg5OTQ0NzQ0MSw2MDI4OTE3MjUpLG5ldyBXb3JkNjQoMzA0OTMyMzQ3MSwzOTY0NDg0Mzk5KSxuZXcgV29yZDY0KDM5MjEwMDk1NzMsMjE3MzI5NTU0OCksbmV3IFdvcmQ2NCg5NjE5ODcxNjMsNDA4MTYyODQ3MiksbmV3IFdvcmQ2NCgxNTA4OTcwOTkzLDMwNTM4MzQyNjUpLG5ldyBXb3JkNjQoMjQ1MzYzNTc0OCwyOTM3NjcxNTc5KSxuZXcgV29yZDY0KDI4NzA3NjMyMjEsMzY2NDYwOTU2MCksbmV3IFdvcmQ2NCgzNjI0MzgxMDgwLDI3MzQ4ODMzOTQpLG5ldyBXb3JkNjQoMzEwNTk4NDAxLDExNjQ5OTY1NDIpLG5ldyBXb3JkNjQoNjA3MjI1Mjc4LDEzMjM2MTA3NjQpLG5ldyBXb3JkNjQoMTQyNjg4MTk4NywzNTkwMzA0OTk0KSxuZXcgV29yZDY0KDE5MjUwNzgzODgsNDA2ODE4MjM4MyksbmV3IFdvcmQ2NCgyMTYyMDc4MjA2LDk5MTMzNjExMyksbmV3IFdvcmQ2NCgyNjE0ODg4MTAzLDYzMzgwMzMxNyksbmV3IFdvcmQ2NCgzMjQ4MjIyNTgwLDM0Nzk3NzQ4NjgpLG5ldyBXb3JkNjQoMzgzNTM5MDQwMSwyNjY2NjEzNDU4KSxuZXcgV29yZDY0KDQwMjIyMjQ3NzQsOTQ0NzExMTM5KSxuZXcgV29yZDY0KDI2NDM0NzA3OCwyMzQxMjYyNzczKSxuZXcgV29yZDY0KDYwNDgwNzYyOCwyMDA3ODAwOTMzKSxuZXcgV29yZDY0KDc3MDI1NTk4MywxNDk1OTkwOTAxKSxuZXcgV29yZDY0KDEyNDkxNTAxMjIsMTg1NjQzMTIzNSksbmV3IFdvcmQ2NCgxNTU1MDgxNjkyLDMxNzUyMTgxMzIpLG5ldyBXb3JkNjQoMTk5NjA2NDk4NiwyMTk4OTUwODM3KSxuZXcgV29yZDY0KDI1NTQyMjA4ODIsMzk5OTcxOTMzOSksbmV3IFdvcmQ2NCgyODIxODM0MzQ5LDc2Njc4NDAxNiksbmV3IFdvcmQ2NCgyOTUyOTk2ODA4LDI1NjY1OTQ4NzkpLG5ldyBXb3JkNjQoMzIxMDMxMzY3MSwzMjAzMzM3OTU2KSxuZXcgV29yZDY0KDMzMzY1NzE4OTEsMTAzNDQ1NzAyNiksbmV3IFdvcmQ2NCgzNTg0NTI4NzExLDI0NjY5NDg5MDEpLG5ldyBXb3JkNjQoMTEzOTI2OTkzLDM3NTgzMjYzODMpLG5ldyBXb3JkNjQoMzM4MjQxODk1LDE2ODcxNzkzNiksbmV3IFdvcmQ2NCg2NjYzMDcyMDUsMTE4ODE3OTk2NCksbmV3IFdvcmQ2NCg3NzM1Mjk5MTIsMTU0NjA0NTczNCksbmV3IFdvcmQ2NCgxMjk0NzU3MzcyLDE1MjI4MDU0ODUpLG5ldyBXb3JkNjQoMTM5NjE4MjI5MSwyNjQzODMzODIzKSxuZXcgV29yZDY0KDE2OTUxODM3MDAsMjM0MzUyNzM5MCksbmV3IFdvcmQ2NCgxOTg2NjYxMDUxLDEwMTQ0Nzc0ODApLG5ldyBXb3JkNjQoMjE3NzAyNjM1MCwxMjA2NzU5MTQyKSxuZXcgV29yZDY0KDI0NTY5NTYwMzcsMzQ0MDc3NjI3KSxuZXcgV29yZDY0KDI3MzA0ODU5MjEsMTI5MDg2MzQ2MCksbmV3IFdvcmQ2NCgyODIwMzAyNDExLDMxNTg0NTQyNzMpLG5ldyBXb3JkNjQoMzI1OTczMDgwMCwzNTA1OTUyNjU3KSxuZXcgV29yZDY0KDMzNDU3NjQ3NzEsMTA2MjE3MDA4KSxuZXcgV29yZDY0KDM1MTYwNjU4MTcsMzYwNjAwODM0NCksbmV3IFdvcmQ2NCgzNjAwMzUyODA0LDE0MzI3MjU3NzYpLG5ldyBXb3JkNjQoNDA5NDU3MTkwOSwxNDY3MDMxNTk0KSxuZXcgV29yZDY0KDI3NTQyMzM0NCw4NTExNjk3MjApLG5ldyBXb3JkNjQoNDMwMjI3NzM0LDMxMDA4MjM3NTIpLG5ldyBXb3JkNjQoNTA2OTQ4NjE2LDEzNjMyNTgxOTUpLG5ldyBXb3JkNjQoNjU5MDYwNTU2LDM3NTA2ODU1OTMpLG5ldyBXb3JkNjQoODgzOTk3ODc3LDM3ODUwNTAyODApLG5ldyBXb3JkNjQoOTU4MTM5NTcxLDMzMTgzMDc0MjcpLG5ldyBXb3JkNjQoMTMyMjgyMjIxOCwzODEyNzIzNDAzKSxuZXcgV29yZDY0KDE1MzcwMDIwNjMsMjAwMzAzNDk5NSksbmV3IFdvcmQ2NCgxNzQ3ODczNzc5LDM2MDIwMzY4OTkpLG5ldyBXb3JkNjQoMTk1NTU2MjIyMiwxNTc1OTkwMDEyKSxuZXcgV29yZDY0KDIwMjQxMDQ4MTUsMTEyNTU5MjkyOCksbmV3IFdvcmQ2NCgyMjI3NzMwNDUyLDI3MTY5MDQzMDYpLG5ldyBXb3JkNjQoMjM2MTg1MjQyNCw0NDI3NzYwNDQpLG5ldyBXb3JkNjQoMjQyODQzNjQ3NCw1OTM2OTgzNDQpLG5ldyBXb3JkNjQoMjc1NjczNDE4NywzNzMzMTEwMjQ5KSxuZXcgV29yZDY0KDMyMDQwMzE0NzksMjk5OTM1MTU3MyksbmV3IFdvcmQ2NCgzMzI5MzI1Mjk4LDM4MTU5MjA0MjcpLG5ldyBXb3JkNjQoMzM5MTU2OTYxNCwzOTI4MzgzOTAwKSxuZXcgV29yZDY0KDM1MTUyNjcyNzEsNTY2MjgwNzExKSxuZXcgV29yZDY0KDM5NDAxODc2MDYsMzQ1NDA2OTUzNCksbmV3IFdvcmQ2NCg0MTE4NjMwMjcxLDQwMDAyMzk5OTIpLG5ldyBXb3JkNjQoMTE2NDE4NDc0LDE5MTQxMzg1NTQpLG5ldyBXb3JkNjQoMTc0MjkyNDIxLDI3MzEwNTUyNzApLG5ldyBXb3JkNjQoMjg5MzgwMzU2LDMyMDM5OTMwMDYpLG5ldyBXb3JkNjQoNDYwMzkzMjY5LDMyMDYyMDMxNSksbmV3IFdvcmQ2NCg2ODU0NzE3MzMsNTg3NDk2ODM2KSxuZXcgV29yZDY0KDg1MjE0Mjk3MSwxMDg2NzkyODUxKSxuZXcgV29yZDY0KDEwMTcwMzYyOTgsMzY1NTQzMTAwKSxuZXcgV29yZDY0KDExMjYwMDA1ODAsMjYxODI5NzY3NiksbmV3IFdvcmQ2NCgxMjg4MDMzNDcwLDM0MDk4NTUxNTgpLG5ldyBXb3JkNjQoMTUwMTUwNTk0OCw0MjM0NTA5ODY2KSxuZXcgV29yZDY0KDE2MDcxNjc5MTUsOTg3MTY3NDY4KSxuZXcgV29yZDY0KDE4MTY0MDIzMTYsMTI0NjE4OTU5MSldO3JldHVybiBmdW5jdGlvbiBoYXNoKHQsaSxhLHI9ITEpe2xldCBzLG4sbyxnLGMsbCxoLEM7aWYocil7cz1uZXcgV29yZDY0KDM0MTgwNzAzNjUsMzIzODM3MTAzMik7bj1uZXcgV29yZDY0KDE2NTQyNzAyNTAsOTE0MTUwNjYzKTtvPW5ldyBXb3JkNjQoMjQzODUyOTM3MCw4MTI3MDI5OTkpO2c9bmV3IFdvcmQ2NCgzNTU0NjIzNjAsNDE0NDkxMjY5Nyk7Yz1uZXcgV29yZDY0KDE3MzE0MDU0MTUsNDI5MDc3NTg1Nyk7bD1uZXcgV29yZDY0KDIzOTQxODAyMzEsMTc1MDYwMzAyNSk7aD1uZXcgV29yZDY0KDM2NzUwMDg1MjUsMTY5NDA3NjgzOSk7Qz1uZXcgV29yZDY0KDEyMDMwNjI4MTMsMzIwNDA3NTQyOCl9ZWxzZXtzPW5ldyBXb3JkNjQoMTc3OTAzMzcwMyw0MDg5MjM1NzIwKTtuPW5ldyBXb3JkNjQoMzE0NDEzNDI3NywyMjI3ODczNTk1KTtvPW5ldyBXb3JkNjQoMTAxMzkwNDI0Miw0MjcxMTc1NzIzKTtnPW5ldyBXb3JkNjQoMjc3MzQ4MDc2MiwxNTk1NzUwMTI5KTtjPW5ldyBXb3JkNjQoMTM1OTg5MzExOSwyOTE3NTY1MTM3KTtsPW5ldyBXb3JkNjQoMjYwMDgyMjkyNCw3MjU1MTExOTkpO2g9bmV3IFdvcmQ2NCg1Mjg3MzQ2MzUsNDIxNTM4OTU0Nyk7Qz1uZXcgV29yZDY0KDE1NDE0NTkyMjUsMzI3MDMzMjA5KX1jb25zdCBRPTEyOCpNYXRoLmNlaWwoKGErMTcpLzEyOCksRT1uZXcgVWludDhBcnJheShRKTtsZXQgdSxkO2Zvcih1PTA7dTxhOysrdSlFW3VdPXRbaSsrXTtFW3UrK109MTI4O2NvbnN0IGY9US0xNjtmb3IoO3U8ZjspRVt1KytdPTA7RVt1KytdPTA7RVt1KytdPTA7RVt1KytdPTA7RVt1KytdPTA7RVt1KytdPTA7RVt1KytdPTA7RVt1KytdPTA7RVt1KytdPTA7RVt1KytdPTA7RVt1KytdPTA7RVt1KytdPTA7RVt1KytdPWE+Pj4yOSYyNTU7RVt1KytdPWE+PjIxJjI1NTtFW3UrK109YT4+MTMmMjU1O0VbdSsrXT1hPj41JjI1NTtFW3UrK109YTw8MyYyNTU7Y29uc3QgcD1uZXcgQXJyYXkoODApO2Zvcih1PTA7dTw4MDt1KyspcFt1XT1uZXcgV29yZDY0KDAsMCk7bGV0IG09bmV3IFdvcmQ2NCgwLDApLHk9bmV3IFdvcmQ2NCgwLDApLHc9bmV3IFdvcmQ2NCgwLDApLGI9bmV3IFdvcmQ2NCgwLDApLEQ9bmV3IFdvcmQ2NCgwLDApLFM9bmV3IFdvcmQ2NCgwLDApLGs9bmV3IFdvcmQ2NCgwLDApLFI9bmV3IFdvcmQ2NCgwLDApO2NvbnN0IE49bmV3IFdvcmQ2NCgwLDApLEc9bmV3IFdvcmQ2NCgwLDApLE09bmV3IFdvcmQ2NCgwLDApLFU9bmV3IFdvcmQ2NCgwLDApO2xldCB4LEw7Zm9yKHU9MDt1PFE7KXtmb3IoZD0wO2Q8MTY7KytkKXtwW2RdLmhpZ2g9RVt1XTw8MjR8RVt1KzFdPDwxNnxFW3UrMl08PDh8RVt1KzNdO3BbZF0ubG93PUVbdSs0XTw8MjR8RVt1KzVdPDwxNnxFW3UrNl08PDh8RVt1KzddO3UrPTh9Zm9yKGQ9MTY7ZDw4MDsrK2Qpe3g9cFtkXTtsaXR0bGVTaWdtYVByaW1lKHgscFtkLTJdLFUpO3guYWRkKHBbZC03XSk7bGl0dGxlU2lnbWEoTSxwW2QtMTVdLFUpO3guYWRkKE0pO3guYWRkKHBbZC0xNl0pfW0uYXNzaWduKHMpO3kuYXNzaWduKG4pO3cuYXNzaWduKG8pO2IuYXNzaWduKGcpO0QuYXNzaWduKGMpO1MuYXNzaWduKGwpO2suYXNzaWduKGgpO1IuYXNzaWduKEMpO2ZvcihkPTA7ZDw4MDsrK2Qpe04uYXNzaWduKFIpO3NpZ21hUHJpbWUoTSxELFUpO04uYWRkKE0pO2NoKE0sRCxTLGssVSk7Ti5hZGQoTSk7Ti5hZGQoZVtkXSk7Ti5hZGQocFtkXSk7c2lnbWEoRyxtLFUpO21haihNLG0seSx3LFUpO0cuYWRkKE0pO3g9UjtSPWs7az1TO1M9RDtiLmFkZChOKTtEPWI7Yj13O3c9eTt5PW07eC5hc3NpZ24oTik7eC5hZGQoRyk7bT14fXMuYWRkKG0pO24uYWRkKHkpO28uYWRkKHcpO2cuYWRkKGIpO2MuYWRkKEQpO2wuYWRkKFMpO2guYWRkKGspO0MuYWRkKFIpfWlmKHIpe0w9bmV3IFVpbnQ4QXJyYXkoNDgpO3MuY29weVRvKEwsMCk7bi5jb3B5VG8oTCw4KTtvLmNvcHlUbyhMLDE2KTtnLmNvcHlUbyhMLDI0KTtjLmNvcHlUbyhMLDMyKTtsLmNvcHlUbyhMLDQwKX1lbHNle0w9bmV3IFVpbnQ4QXJyYXkoNjQpO3MuY29weVRvKEwsMCk7bi5jb3B5VG8oTCw4KTtvLmNvcHlUbyhMLDE2KTtnLmNvcHlUbyhMLDI0KTtjLmNvcHlUbyhMLDMyKTtsLmNvcHlUbyhMLDQwKTtoLmNvcHlUbyhMLDQ4KTtDLmNvcHlUbyhMLDU2KX1yZXR1cm4gTH19KCk7Y2xhc3MgTnVsbENpcGhlcntkZWNyeXB0QmxvY2soZSl7cmV0dXJuIGV9ZW5jcnlwdChlKXtyZXR1cm4gZX19Y2xhc3MgQUVTQmFzZUNpcGhlcntjb25zdHJ1Y3Rvcigpe3RoaXMuX3M9bmV3IFVpbnQ4QXJyYXkoWzk5LDEyNCwxMTksMTIzLDI0MiwxMDcsMTExLDE5Nyw0OCwxLDEwMyw0MywyNTQsMjE1LDE3MSwxMTgsMjAyLDEzMCwyMDEsMTI1LDI1MCw4OSw3MSwyNDAsMTczLDIxMiwxNjIsMTc1LDE1NiwxNjQsMTE0LDE5MiwxODMsMjUzLDE0NywzOCw1NCw2MywyNDcsMjA0LDUyLDE2NSwyMjksMjQxLDExMywyMTYsNDksMjEsNCwxOTksMzUsMTk1LDI0LDE1MCw1LDE1NCw3LDE4LDEyOCwyMjYsMjM1LDM5LDE3OCwxMTcsOSwxMzEsNDQsMjYsMjcsMTEwLDkwLDE2MCw4Miw1OSwyMTQsMTc5LDQxLDIyNyw0NywxMzIsODMsMjA5LDAsMjM3LDMyLDI1MiwxNzcsOTEsMTA2LDIwMywxOTAsNTcsNzQsNzYsODgsMjA3LDIwOCwyMzksMTcwLDI1MSw2Nyw3Nyw1MSwxMzMsNjksMjQ5LDIsMTI3LDgwLDYwLDE1OSwxNjgsODEsMTYzLDY0LDE0MywxNDYsMTU3LDU2LDI0NSwxODgsMTgyLDIxOCwzMywxNiwyNTUsMjQzLDIxMCwyMDUsMTIsMTksMjM2LDk1LDE1MSw2OCwyMywxOTYsMTY3LDEyNiw2MSwxMDAsOTMsMjUsMTE1LDk2LDEyOSw3OSwyMjAsMzQsNDIsMTQ0LDEzNiw3MCwyMzgsMTg0LDIwLDIyMiw5NCwxMSwyMTksMjI0LDUwLDU4LDEwLDczLDYsMzYsOTIsMTk0LDIxMSwxNzIsOTgsMTQ1LDE0OSwyMjgsMTIxLDIzMSwyMDAsNTUsMTA5LDE0MSwyMTMsNzgsMTY5LDEwOCw4NiwyNDQsMjM0LDEwMSwxMjIsMTc0LDgsMTg2LDEyMCwzNyw0NiwyOCwxNjYsMTgwLDE5OCwyMzIsMjIxLDExNiwzMSw3NSwxODksMTM5LDEzOCwxMTIsNjIsMTgxLDEwMiw3MiwzLDI0NiwxNCw5Nyw1Myw4NywxODUsMTM0LDE5MywyOSwxNTgsMjI1LDI0OCwxNTIsMTcsMTA1LDIxNywxNDIsMTQ4LDE1NSwzMCwxMzUsMjMzLDIwNiw4NSw0MCwyMjMsMTQwLDE2MSwxMzcsMTMsMTkxLDIzMCw2NiwxMDQsNjUsMTUzLDQ1LDE1LDE3Niw4NCwxODcsMjJdKTt0aGlzLl9pbnZfcz1uZXcgVWludDhBcnJheShbODIsOSwxMDYsMjEzLDQ4LDU0LDE2NSw1NiwxOTEsNjQsMTYzLDE1OCwxMjksMjQzLDIxNSwyNTEsMTI0LDIyNyw1NywxMzAsMTU1LDQ3LDI1NSwxMzUsNTIsMTQyLDY3LDY4LDE5NiwyMjIsMjMzLDIwMyw4NCwxMjMsMTQ4LDUwLDE2NiwxOTQsMzUsNjEsMjM4LDc2LDE0OSwxMSw2NiwyNTAsMTk1LDc4LDgsNDYsMTYxLDEwMiw0MCwyMTcsMzYsMTc4LDExOCw5MSwxNjIsNzMsMTA5LDEzOSwyMDksMzcsMTE0LDI0OCwyNDYsMTAwLDEzNCwxMDQsMTUyLDIyLDIxMiwxNjQsOTIsMjA0LDkzLDEwMSwxODIsMTQ2LDEwOCwxMTIsNzIsODAsMjUzLDIzNywxODUsMjE4LDk0LDIxLDcwLDg3LDE2NywxNDEsMTU3LDEzMiwxNDQsMjE2LDE3MSwwLDE0MCwxODgsMjExLDEwLDI0NywyMjgsODgsNSwxODQsMTc5LDY5LDYsMjA4LDQ0LDMwLDE0MywyMDIsNjMsMTUsMiwxOTMsMTc1LDE4OSwzLDEsMTksMTM4LDEwNyw1OCwxNDUsMTcsNjUsNzksMTAzLDIyMCwyMzQsMTUxLDI0MiwyMDcsMjA2LDI0MCwxODAsMjMwLDExNSwxNTAsMTcyLDExNiwzNCwyMzEsMTczLDUzLDEzMywyMjYsMjQ5LDU1LDIzMiwyOCwxMTcsMjIzLDExMCw3MSwyNDEsMjYsMTEzLDI5LDQxLDE5NywxMzcsMTExLDE4Myw5OCwxNCwxNzAsMjQsMTkwLDI3LDI1Miw4Niw2Miw3NSwxOTgsMjEwLDEyMSwzMiwxNTQsMjE5LDE5MiwyNTQsMTIwLDIwNSw5MCwyNDQsMzEsMjIxLDE2OCw1MSwxMzYsNywxOTksNDksMTc3LDE4LDE2LDg5LDM5LDEyOCwyMzYsOTUsOTYsODEsMTI3LDE2OSwyNSwxODEsNzQsMTMsNDUsMjI5LDEyMiwxNTksMTQ3LDIwMSwxNTYsMjM5LDE2MCwyMjQsNTksNzcsMTc0LDQyLDI0NSwxNzYsMjAwLDIzNSwxODcsNjAsMTMxLDgzLDE1Myw5NywyMyw0Myw0LDEyNiwxODYsMTE5LDIxNCwzOCwyMjUsMTA1LDIwLDk5LDg1LDMzLDEyLDEyNV0pO3RoaXMuX21peD1uZXcgVWludDMyQXJyYXkoWzAsMjM1NDc0MTg3LDQ3MDk0ODM3NCwzMDM3NjUyNzcsOTQxODk2NzQ4LDkwODkzMzQxNSw2MDc1MzA1NTQsNzA4NzgwODQ5LDE4ODM3OTM0OTYsMjExODIxNDk5NSwxODE3ODY2ODMwLDE2NDk2MzkyMzcsMTIxNTA2MTEwOCwxMTgxMDQ1MTE5LDE0MTc1NjE2OTgsMTUxNzc2NzUyOSwzNzY3NTg2OTkyLDQwMDMwNjExNzksNDIzNjQyOTk5MCw0MDY5MjQ2ODkzLDM2MzU3MzM2NjAsMzYwMjc3MDMyNywzMjk5Mjc4NDc0LDM0MDA1Mjg3NjksMjQzMDEyMjIxNiwyNjY0NTQzNzE1LDIzNjIwOTAyMzgsMjE5Mzg2MjY0NSwyODM1MTIzMzk2LDI4MDExMDc0MDcsMzAzNTUzNTA1OCwzMTM1NzQwODg5LDM2NzgxMjQ5MjMsMzU3Njg3MDUxMiwzMzQxMzk0Mjg1LDMzNzQzNjE3MDIsMzgxMDQ5NjM0MywzOTc3Njc1MzU2LDQyNzkwODAyNTcsNDA0MzYxMDE4NiwyODc2NDk0NjI3LDI3NzYyOTI5MDQsMzA3NjYzOTAyOSwzMTEwNjUwOTQyLDI0NzIwMTE1MzUsMjY0MDI0MzIwNCwyNDAzNzI4NjY1LDIxNjkzMDMwNTgsMTAwMTA4OTk5NSw4OTk4MzU1ODQsNjY2NDY0NzMzLDY5OTQzMjE1MCw1OTcyNzg0NywyMjY5MDY4NjAsNTMwNDAwNzUzLDI5NDkzMDY4MiwxMjczMTY4Nzg3LDExNzI5NjcwNjQsMTQ3NTQxODUwMSwxNTA5NDMwNDE0LDE5NDI0MzU3NzUsMjExMDY2NzQ0NCwxODc2MjQxODMzLDE2NDE4MTYyMjYsMjkxMDIxOTc2NiwyNzQzMDM0MTA5LDI5NzYxNTE1MjAsMzIxMTYyMzE0NywyNTA1MjAyMTM4LDI2MDY0NTM5NjksMjMwMjY5MDI1MiwyMjY5NzI4NDU1LDM3MTE4Mjk0MjIsMzU0MzU5OTI2OSwzMjQwODk0MzkyLDM0NzUzMTMzMzEsMzg0MzY5OTA3NCwzOTQzOTA2NDQxLDQxNzgwNjIyMjgsNDE0NDA0Nzc3NSwxMzA2OTY3MzY2LDExMzk3ODE3MDksMTM3NDk4ODExMiwxNjEwNDU5NzM5LDE5NzU2ODM0MzQsMjA3NjkzNTI2NSwxNzc1Mjc2OTI0LDE3NDIzMTUxMjcsMTAzNDg2Nzk5OCw4NjY2Mzc4NDUsNTY2MDIxODk2LDgwMDQ0MDgzNSw5Mjk4NzY5OCwxOTMxOTUwNjUsNDI5NDU2MTY0LDM5NTQ0MTcxMSwxOTg0ODEyNjg1LDIwMTc3Nzg1NjYsMTc4NDY2MzE5NSwxNjgzNDA3MjQ4LDEzMTU1NjIxNDUsMTA4MDA5NDYzNCwxMzgzODU2MzExLDE1NTEwMzc4ODQsMTAxMDM5ODI5LDEzNTA1MDIwNiw0Mzc3NTcxMjMsMzM3NTUzODY0LDEwNDIzODU2NTcsODA3OTYyNjEwLDU3MzgwNDc4Myw3NDIwMzkwMTIsMjUzMTA2NzQ1MywyNTY0MDMzMzM0LDIzMjg4Mjg5NzEsMjIyNzU3MzAyNCwyOTM1NTY2ODY1LDI3MDAwOTkzNTQsMzAwMTc1NTY1NSwzMTY4OTM3MjI4LDM4Njg1NTI4MDUsMzkwMjU2MzE4Miw0MjAzMTgxMTcxLDQxMDI5Nzc5MTIsMzczNjE2NDkzNywzNTAxNzQxODkwLDMyNjU0Nzg3NTEsMzQzMzcxMjk4MCwxMTA2MDQxNTkxLDEzNDA0NjMxMDAsMTU3Njk3NjYwOSwxNDA4NzQ5MDM0LDIwNDMyMTE0ODMsMjAwOTE5NTQ3MiwxNzA4ODQ4MzMzLDE4MDkwNTQxNTAsODMyODc3MjMxLDEwNjgzNTEzOTYsNzY2OTQ1NDY1LDU5OTc2MjM1NCwxNTk0MTc5ODcsMTI2NDU0NjY0LDM2MTkyOTg3Nyw0NjMxODAxOTAsMjcwOTI2MDg3MSwyOTQzNjgyMzgwLDMxNzgxMDY5NjEsMzAwOTg3OTM4NiwyNTcyNjk3MTk1LDI1Mzg2ODExODQsMjIzNjIyODczMywyMzM2NDM0NTUwLDM1MDk4NzExMzUsMzc0NTM0NTMwMCwzNDQxODUwMzc3LDMyNzQ2NjcyNjYsMzkxMDE2MTk3MSwzODc3MTk4NjQ4LDQxMTA1Njg0ODUsNDIxMTgxODc5OCwyNTk3ODA2NDc2LDI0OTc2MDQ3NDMsMjI2MTA4OTE3OCwyMjk1MTAxMDczLDI3MzM4NTYxNjAsMjkwMjA4Nzg1MSwzMjAyNDM3MDQ2LDI5NjgwMTE0NTMsMzkzNjI5MTI4NCwzODM1MDM2ODk1LDQxMzY0NDA3NzAsNDE2OTQwODIwMSwzNTM1NDg2NDU2LDM3MDI2NjU0NTksMzQ2NzE5MjMwMiwzMjMxNzIyMjEzLDIwNTE1MTg3ODAsMTk1MTMxNzA0NywxNzE2ODkwNDEwLDE3NTA5MDIzMDUsMTExMzgxODM4NCwxMjgyMDUwMDc1LDE1ODQ1MDQ1ODIsMTM1MDA3ODk4OSwxNjg4MTA4NTIsNjc1NTY0NjMsMzcxMDQ5MzMwLDQwNDAxNjc2MSw4NDE3Mzk1OTIsMTAwODkxODU5NSw3NzU1NTA4MTQsNTQwMDgwNzI1LDM5Njk1NjIzNjksMzgwMTMzMjIzNCw0MDM1NDg5MDQ3LDQyNjk5MDc5OTYsMzU2OTI1NTIxMywzNjY5NDYyNTY2LDMzNjY3NTQ2MTksMzMzMjc0MDE0NCwyNjMxMDY1NDMzLDI0NjM4Nzk3NjIsMjE2MDExNzA3MSwyMzk1NTg4Njc2LDI3Njc2NDU1NTcsMjg2ODg5NzQwNiwzMTAyMDExNzQ3LDMwNjkwNDk5NjAsMjAyMDA4NDk3LDMzNzc4MzYyLDI3MDA0MDQ4Nyw1MDQ0NTk0MzYsODc1NDUxMjkzLDk3NTY1ODY0Niw2NzUwMzk2MjcsNjQxMDI1MTUyLDIwODQ3MDQyMzMsMTkxNzUxODU2MiwxNjE1ODYxMjQ3LDE4NTEzMzI4NTIsMTE0NzU1MDY2MSwxMjQ4ODAyNTEwLDE0ODQwMDU4NDMsMTQ1MTA0NDA1Niw5MzMzMDEzNzAsOTY3MzExNzI5LDczMzE1Njk3Miw2MzI5NTM3MDMsMjYwMzg4OTUwLDI1OTY1OTE3LDMyODY3MTgwOCw0OTY5MDYwNTksMTIwNjQ3Nzg1OCwxMjM5NDQzNzUzLDE1NDMyMDg1MDAsMTQ0MTk1MjU3NSwyMTQ0MTYxODA2LDE5MDg2OTQyNzcsMTY3NTU3Nzg4MCwxODQyNzU5NDQzLDM2MTAzNjkyMjYsMzY0NDM3OTU4NSwzNDA4MTE5NTE2LDMzMDc5MTYyNDcsNDAxMTE5MDUwMiwzNzc2NzY3NDY5LDQwNzczODQ0MzIsNDI0NTYxODY4MywyODA5NzcxMTU0LDI4NDI3MzcwNDksMzE0NDM5NjQyMCwzMDQzMTQwNDk1LDI2NzM3MDUxNTAsMjQzODIzNzYyMSwyMjAzMDMyMjMyLDIzNzAyMTM3OTVdKTt0aGlzLl9taXhDb2w9bmV3IFVpbnQ4QXJyYXkoMjU2KTtmb3IobGV0IGU9MDtlPDI1NjtlKyspdGhpcy5fbWl4Q29sW2VdPWU8MTI4P2U8PDE6ZTw8MV4yNzt0aGlzLmJ1ZmZlcj1uZXcgVWludDhBcnJheSgxNik7dGhpcy5idWZmZXJQb3NpdGlvbj0wfV9leHBhbmRLZXkoZSl7dW5yZWFjaGFibGUoIkNhbm5vdCBjYWxsIGBfZXhwYW5kS2V5YCBvbiB0aGUgYmFzZSBjbGFzcyIpfV9kZWNyeXB0KGUsdCl7bGV0IGksYSxyO2NvbnN0IHM9bmV3IFVpbnQ4QXJyYXkoMTYpO3Muc2V0KGUpO2ZvcihsZXQgZT0wLGk9dGhpcy5fa2V5U2l6ZTtlPDE2OysrZSwrK2kpc1tlXV49dFtpXTtmb3IobGV0IGU9dGhpcy5fY3ljbGVzT2ZSZXBldGl0aW9uLTE7ZT49MTstLWUpe2k9c1sxM107c1sxM109c1s5XTtzWzldPXNbNV07c1s1XT1zWzFdO3NbMV09aTtpPXNbMTRdO2E9c1sxMF07c1sxNF09c1s2XTtzWzEwXT1zWzJdO3NbNl09aTtzWzJdPWE7aT1zWzE1XTthPXNbMTFdO3I9c1s3XTtzWzE1XT1zWzNdO3NbMTFdPWk7c1s3XT1hO3NbM109cjtmb3IobGV0IGU9MDtlPDE2OysrZSlzW2VdPXRoaXMuX2ludl9zW3NbZV1dO2ZvcihsZXQgaT0wLGE9MTYqZTtpPDE2OysraSwrK2Epc1tpXV49dFthXTtmb3IobGV0IGU9MDtlPDE2O2UrPTQpe2NvbnN0IHQ9dGhpcy5fbWl4W3NbZV1dLGE9dGhpcy5fbWl4W3NbZSsxXV0scj10aGlzLl9taXhbc1tlKzJdXSxuPXRoaXMuX21peFtzW2UrM11dO2k9dF5hPj4+OF5hPDwyNF5yPj4+MTZecjw8MTZebj4+PjI0Xm48PDg7c1tlXT1pPj4+MjQmMjU1O3NbZSsxXT1pPj4xNiYyNTU7c1tlKzJdPWk+PjgmMjU1O3NbZSszXT0yNTUmaX19aT1zWzEzXTtzWzEzXT1zWzldO3NbOV09c1s1XTtzWzVdPXNbMV07c1sxXT1pO2k9c1sxNF07YT1zWzEwXTtzWzE0XT1zWzZdO3NbMTBdPXNbMl07c1s2XT1pO3NbMl09YTtpPXNbMTVdO2E9c1sxMV07cj1zWzddO3NbMTVdPXNbM107c1sxMV09aTtzWzddPWE7c1szXT1yO2ZvcihsZXQgZT0wO2U8MTY7KytlKXtzW2VdPXRoaXMuX2ludl9zW3NbZV1dO3NbZV1ePXRbZV19cmV0dXJuIHN9X2VuY3J5cHQoZSx0KXtjb25zdCBpPXRoaXMuX3M7bGV0IGEscixzO2NvbnN0IG49bmV3IFVpbnQ4QXJyYXkoMTYpO24uc2V0KGUpO2ZvcihsZXQgZT0wO2U8MTY7KytlKW5bZV1ePXRbZV07Zm9yKGxldCBlPTE7ZTx0aGlzLl9jeWNsZXNPZlJlcGV0aXRpb247ZSsrKXtmb3IobGV0IGU9MDtlPDE2OysrZSluW2VdPWlbbltlXV07cz1uWzFdO25bMV09bls1XTtuWzVdPW5bOV07bls5XT1uWzEzXTtuWzEzXT1zO3M9blsyXTtyPW5bNl07blsyXT1uWzEwXTtuWzZdPW5bMTRdO25bMTBdPXM7blsxNF09cjtzPW5bM107cj1uWzddO2E9blsxMV07blszXT1uWzE1XTtuWzddPXM7blsxMV09cjtuWzE1XT1hO2ZvcihsZXQgZT0wO2U8MTY7ZSs9NCl7Y29uc3QgdD1uW2UrMF0saT1uW2UrMV0scj1uW2UrMl0scz1uW2UrM107YT10Xmlecl5zO25bZSswXV49YV50aGlzLl9taXhDb2xbdF5pXTtuW2UrMV1ePWFedGhpcy5fbWl4Q29sW2lecl07bltlKzJdXj1hXnRoaXMuX21peENvbFtyXnNdO25bZSszXV49YV50aGlzLl9taXhDb2xbc150XX1mb3IobGV0IGk9MCxhPTE2KmU7aTwxNjsrK2ksKythKW5baV1ePXRbYV19Zm9yKGxldCBlPTA7ZTwxNjsrK2UpbltlXT1pW25bZV1dO3M9blsxXTtuWzFdPW5bNV07bls1XT1uWzldO25bOV09blsxM107blsxM109cztzPW5bMl07cj1uWzZdO25bMl09blsxMF07bls2XT1uWzE0XTtuWzEwXT1zO25bMTRdPXI7cz1uWzNdO3I9bls3XTthPW5bMTFdO25bM109blsxNV07bls3XT1zO25bMTFdPXI7blsxNV09YTtmb3IobGV0IGU9MCxpPXRoaXMuX2tleVNpemU7ZTwxNjsrK2UsKytpKW5bZV1ePXRbaV07cmV0dXJuIG59X2RlY3J5cHRCbG9jazIoZSx0KXtjb25zdCBpPWUubGVuZ3RoO2xldCBhPXRoaXMuYnVmZmVyLHI9dGhpcy5idWZmZXJQb3NpdGlvbjtjb25zdCBzPVtdO2xldCBuPXRoaXMuaXY7Zm9yKGxldCB0PTA7dDxpOysrdCl7YVtyXT1lW3RdOysrcjtpZihyPDE2KWNvbnRpbnVlO2NvbnN0IGk9dGhpcy5fZGVjcnlwdChhLHRoaXMuX2tleSk7Zm9yKGxldCBlPTA7ZTwxNjsrK2UpaVtlXV49bltlXTtuPWE7cy5wdXNoKGkpO2E9bmV3IFVpbnQ4QXJyYXkoMTYpO3I9MH10aGlzLmJ1ZmZlcj1hO3RoaXMuYnVmZmVyTGVuZ3RoPXI7dGhpcy5pdj1uO2lmKDA9PT1zLmxlbmd0aClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7bGV0IG89MTYqcy5sZW5ndGg7aWYodCl7Y29uc3QgZT1zLmF0KC0xKTtsZXQgdD1lWzE1XTtpZih0PD0xNil7Zm9yKGxldCBpPTE1LGE9MTYtdDtpPj1hOy0taSlpZihlW2ldIT09dCl7dD0wO2JyZWFrfW8tPXQ7c1tzLmxlbmd0aC0xXT1lLnN1YmFycmF5KDAsMTYtdCl9fWNvbnN0IGc9bmV3IFVpbnQ4QXJyYXkobyk7Zm9yKGxldCBlPTAsdD0wLGk9cy5sZW5ndGg7ZTxpOysrZSx0Kz0xNilnLnNldChzW2VdLHQpO3JldHVybiBnfWRlY3J5cHRCbG9jayhlLHQsaT1udWxsKXtjb25zdCBhPWUubGVuZ3RoLHI9dGhpcy5idWZmZXI7bGV0IHM9dGhpcy5idWZmZXJQb3NpdGlvbjtpZihpKXRoaXMuaXY9aTtlbHNle2ZvcihsZXQgdD0wO3M8MTYmJnQ8YTsrK3QsKytzKXJbc109ZVt0XTtpZihzPDE2KXt0aGlzLmJ1ZmZlckxlbmd0aD1zO3JldHVybiBuZXcgVWludDhBcnJheSgwKX10aGlzLml2PXI7ZT1lLnN1YmFycmF5KDE2KX10aGlzLmJ1ZmZlcj1uZXcgVWludDhBcnJheSgxNik7dGhpcy5idWZmZXJMZW5ndGg9MDt0aGlzLmRlY3J5cHRCbG9jaz10aGlzLl9kZWNyeXB0QmxvY2syO3JldHVybiB0aGlzLmRlY3J5cHRCbG9jayhlLHQpfWVuY3J5cHQoZSx0KXtjb25zdCBpPWUubGVuZ3RoO2xldCBhPXRoaXMuYnVmZmVyLHI9dGhpcy5idWZmZXJQb3NpdGlvbjtjb25zdCBzPVtdO3R8fCh0PW5ldyBVaW50OEFycmF5KDE2KSk7Zm9yKGxldCBuPTA7bjxpOysrbil7YVtyXT1lW25dOysrcjtpZihyPDE2KWNvbnRpbnVlO2ZvcihsZXQgZT0wO2U8MTY7KytlKWFbZV1ePXRbZV07Y29uc3QgaT10aGlzLl9lbmNyeXB0KGEsdGhpcy5fa2V5KTt0PWk7cy5wdXNoKGkpO2E9bmV3IFVpbnQ4QXJyYXkoMTYpO3I9MH10aGlzLmJ1ZmZlcj1hO3RoaXMuYnVmZmVyTGVuZ3RoPXI7dGhpcy5pdj10O2lmKDA9PT1zLmxlbmd0aClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7Y29uc3Qgbj0xNipzLmxlbmd0aCxvPW5ldyBVaW50OEFycmF5KG4pO2ZvcihsZXQgZT0wLHQ9MCxpPXMubGVuZ3RoO2U8aTsrK2UsdCs9MTYpby5zZXQoc1tlXSx0KTtyZXR1cm4gb319Y2xhc3MgQUVTMTI4Q2lwaGVyIGV4dGVuZHMgQUVTQmFzZUNpcGhlcntjb25zdHJ1Y3RvcihlKXtzdXBlcigpO3RoaXMuX2N5Y2xlc09mUmVwZXRpdGlvbj0xMDt0aGlzLl9rZXlTaXplPTE2MDt0aGlzLl9yY29uPW5ldyBVaW50OEFycmF5KFsxNDEsMSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcsNTQsMTA4LDIxNiwxNzEsNzcsMTU0LDQ3LDk0LDE4OCw5OSwxOTgsMTUxLDUzLDEwNiwyMTIsMTc5LDEyNSwyNTAsMjM5LDE5NywxNDUsNTcsMTE0LDIyOCwyMTEsMTg5LDk3LDE5NCwxNTksMzcsNzQsMTQ4LDUxLDEwMiwyMDQsMTMxLDI5LDU4LDExNiwyMzIsMjAzLDE0MSwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NCwxMDgsMjE2LDE3MSw3NywxNTQsNDcsOTQsMTg4LDk5LDE5OCwxNTEsNTMsMTA2LDIxMiwxNzksMTI1LDI1MCwyMzksMTk3LDE0NSw1NywxMTQsMjI4LDIxMSwxODksOTcsMTk0LDE1OSwzNyw3NCwxNDgsNTEsMTAyLDIwNCwxMzEsMjksNTgsMTE2LDIzMiwyMDMsMTQxLDEsMiw0LDgsMTYsMzIsNjQsMTI4LDI3LDU0LDEwOCwyMTYsMTcxLDc3LDE1NCw0Nyw5NCwxODgsOTksMTk4LDE1MSw1MywxMDYsMjEyLDE3OSwxMjUsMjUwLDIzOSwxOTcsMTQ1LDU3LDExNCwyMjgsMjExLDE4OSw5NywxOTQsMTU5LDM3LDc0LDE0OCw1MSwxMDIsMjA0LDEzMSwyOSw1OCwxMTYsMjMyLDIwMywxNDEsMSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcsNTQsMTA4LDIxNiwxNzEsNzcsMTU0LDQ3LDk0LDE4OCw5OSwxOTgsMTUxLDUzLDEwNiwyMTIsMTc5LDEyNSwyNTAsMjM5LDE5NywxNDUsNTcsMTE0LDIyOCwyMTEsMTg5LDk3LDE5NCwxNTksMzcsNzQsMTQ4LDUxLDEwMiwyMDQsMTMxLDI5LDU4LDExNiwyMzIsMjAzLDE0MSwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NCwxMDgsMjE2LDE3MSw3NywxNTQsNDcsOTQsMTg4LDk5LDE5OCwxNTEsNTMsMTA2LDIxMiwxNzksMTI1LDI1MCwyMzksMTk3LDE0NSw1NywxMTQsMjI4LDIxMSwxODksOTcsMTk0LDE1OSwzNyw3NCwxNDgsNTEsMTAyLDIwNCwxMzEsMjksNTgsMTE2LDIzMiwyMDMsMTQxXSk7dGhpcy5fa2V5PXRoaXMuX2V4cGFuZEtleShlKX1fZXhwYW5kS2V5KGUpe2NvbnN0IHQ9dGhpcy5fcyxpPXRoaXMuX3Jjb24sYT1uZXcgVWludDhBcnJheSgxNzYpO2Euc2V0KGUpO2ZvcihsZXQgZT0xNixyPTE7ZTwxNzY7KytyKXtsZXQgcz1hW2UtM10sbj1hW2UtMl0sbz1hW2UtMV0sZz1hW2UtNF07cz10W3NdO249dFtuXTtvPXRbb107Zz10W2ddO3NePWlbcl07Zm9yKGxldCB0PTA7dDw0OysrdCl7YVtlXT1zXj1hW2UtMTZdO2UrKzthW2VdPW5ePWFbZS0xNl07ZSsrO2FbZV09b149YVtlLTE2XTtlKys7YVtlXT1nXj1hW2UtMTZdO2UrK319cmV0dXJuIGF9fWNsYXNzIEFFUzI1NkNpcGhlciBleHRlbmRzIEFFU0Jhc2VDaXBoZXJ7Y29uc3RydWN0b3IoZSl7c3VwZXIoKTt0aGlzLl9jeWNsZXNPZlJlcGV0aXRpb249MTQ7dGhpcy5fa2V5U2l6ZT0yMjQ7dGhpcy5fa2V5PXRoaXMuX2V4cGFuZEtleShlKX1fZXhwYW5kS2V5KGUpe2NvbnN0IHQ9dGhpcy5fcyxpPW5ldyBVaW50OEFycmF5KDI0MCk7aS5zZXQoZSk7bGV0IGEscixzLG4sbz0xO2ZvcihsZXQgZT0zMixnPTE7ZTwyNDA7KytnKXtpZihlJTMyPT0xNil7YT10W2FdO3I9dFtyXTtzPXRbc107bj10W25dfWVsc2UgaWYoZSUzMj09MCl7YT1pW2UtM107cj1pW2UtMl07cz1pW2UtMV07bj1pW2UtNF07YT10W2FdO3I9dFtyXTtzPXRbc107bj10W25dO2FePW87KG88PD0xKT49MjU2JiYobz0yNTUmKDI3Xm8pKX1mb3IobGV0IHQ9MDt0PDQ7Kyt0KXtpW2VdPWFePWlbZS0zMl07ZSsrO2lbZV09cl49aVtlLTMyXTtlKys7aVtlXT1zXj1pW2UtMzJdO2UrKztpW2VdPW5ePWlbZS0zMl07ZSsrfX1yZXR1cm4gaX19Y2xhc3MgUERGMTd7Y2hlY2tPd25lclBhc3N3b3JkKGUsdCxpLGEpe2NvbnN0IHI9bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgrNTYpO3Iuc2V0KGUsMCk7ci5zZXQodCxlLmxlbmd0aCk7ci5zZXQoaSxlLmxlbmd0aCt0Lmxlbmd0aCk7cmV0dXJuIGlzQXJyYXlFcXVhbCh0byhyLDAsci5sZW5ndGgpLGEpfWNoZWNrVXNlclBhc3N3b3JkKGUsdCxpKXtjb25zdCBhPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKzgpO2Euc2V0KGUsMCk7YS5zZXQodCxlLmxlbmd0aCk7cmV0dXJuIGlzQXJyYXlFcXVhbCh0byhhLDAsYS5sZW5ndGgpLGkpfWdldE93bmVyS2V5KGUsdCxpLGEpe2NvbnN0IHI9bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgrNTYpO3Iuc2V0KGUsMCk7ci5zZXQodCxlLmxlbmd0aCk7ci5zZXQoaSxlLmxlbmd0aCt0Lmxlbmd0aCk7Y29uc3Qgcz10byhyLDAsci5sZW5ndGgpO3JldHVybiBuZXcgQUVTMjU2Q2lwaGVyKHMpLmRlY3J5cHRCbG9jayhhLCExLG5ldyBVaW50OEFycmF5KDE2KSl9Z2V0VXNlcktleShlLHQsaSl7Y29uc3QgYT1uZXcgVWludDhBcnJheShlLmxlbmd0aCs4KTthLnNldChlLDApO2Euc2V0KHQsZS5sZW5ndGgpO2NvbnN0IHI9dG8oYSwwLGEubGVuZ3RoKTtyZXR1cm4gbmV3IEFFUzI1NkNpcGhlcihyKS5kZWNyeXB0QmxvY2soaSwhMSxuZXcgVWludDhBcnJheSgxNikpfX1jbGFzcyBQREYyMHtfaGFzaChlLHQsaSl7bGV0IGE9dG8odCwwLHQubGVuZ3RoKS5zdWJhcnJheSgwLDMyKSxyPVswXSxzPTA7Zm9yKDtzPDY0fHxyLmF0KC0xKT5zLTMyOyl7Y29uc3QgdD1lLmxlbmd0aCthLmxlbmd0aCtpLmxlbmd0aCxjPW5ldyBVaW50OEFycmF5KHQpO2xldCBsPTA7Yy5zZXQoZSxsKTtsKz1lLmxlbmd0aDtjLnNldChhLGwpO2wrPWEubGVuZ3RoO2Muc2V0KGksbCk7Y29uc3QgaD1uZXcgVWludDhBcnJheSg2NCp0KTtmb3IobGV0IGU9MCxpPTA7ZTw2NDtlKyssaSs9dCloLnNldChjLGkpO3I9bmV3IEFFUzEyOENpcGhlcihhLnN1YmFycmF5KDAsMTYpKS5lbmNyeXB0KGgsYS5zdWJhcnJheSgxNiwzMikpO2NvbnN0IEM9ci5zbGljZSgwLDE2KS5yZWR1Y2UoKChlLHQpPT5lK3QpLDApJTM7MD09PUM/YT10byhyLDAsci5sZW5ndGgpOjE9PT1DP2E9KG49cixvPTAsZz1yLmxlbmd0aCxpbyhuLG8sZywhMCkpOjI9PT1DJiYoYT1pbyhyLDAsci5sZW5ndGgpKTtzKyt9dmFyIG4sbyxnO3JldHVybiBhLnN1YmFycmF5KDAsMzIpfWNoZWNrT3duZXJQYXNzd29yZChlLHQsaSxhKXtjb25zdCByPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKzU2KTtyLnNldChlLDApO3Iuc2V0KHQsZS5sZW5ndGgpO3Iuc2V0KGksZS5sZW5ndGgrdC5sZW5ndGgpO3JldHVybiBpc0FycmF5RXF1YWwodGhpcy5faGFzaChlLHIsaSksYSl9Y2hlY2tVc2VyUGFzc3dvcmQoZSx0LGkpe2NvbnN0IGE9bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgrOCk7YS5zZXQoZSwwKTthLnNldCh0LGUubGVuZ3RoKTtyZXR1cm4gaXNBcnJheUVxdWFsKHRoaXMuX2hhc2goZSxhLFtdKSxpKX1nZXRPd25lcktleShlLHQsaSxhKXtjb25zdCByPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKzU2KTtyLnNldChlLDApO3Iuc2V0KHQsZS5sZW5ndGgpO3Iuc2V0KGksZS5sZW5ndGgrdC5sZW5ndGgpO2NvbnN0IHM9dGhpcy5faGFzaChlLHIsaSk7cmV0dXJuIG5ldyBBRVMyNTZDaXBoZXIocykuZGVjcnlwdEJsb2NrKGEsITEsbmV3IFVpbnQ4QXJyYXkoMTYpKX1nZXRVc2VyS2V5KGUsdCxpKXtjb25zdCBhPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKzgpO2Euc2V0KGUsMCk7YS5zZXQodCxlLmxlbmd0aCk7Y29uc3Qgcj10aGlzLl9oYXNoKGUsYSxbXSk7cmV0dXJuIG5ldyBBRVMyNTZDaXBoZXIocikuZGVjcnlwdEJsb2NrKGksITEsbmV3IFVpbnQ4QXJyYXkoMTYpKX19Y2xhc3MgQ2lwaGVyVHJhbnNmb3Jte2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5TdHJpbmdDaXBoZXJDb25zdHJ1Y3Rvcj1lO3RoaXMuU3RyZWFtQ2lwaGVyQ29uc3RydWN0b3I9dH1jcmVhdGVTdHJlYW0oZSx0KXtjb25zdCBpPW5ldyB0aGlzLlN0cmVhbUNpcGhlckNvbnN0cnVjdG9yO3JldHVybiBuZXcgRGVjcnlwdFN0cmVhbShlLHQsKGZ1bmN0aW9uIGNpcGhlclRyYW5zZm9ybURlY3J5cHRTdHJlYW0oZSx0KXtyZXR1cm4gaS5kZWNyeXB0QmxvY2soZSx0KX0pKX1kZWNyeXB0U3RyaW5nKGUpe2NvbnN0IHQ9bmV3IHRoaXMuU3RyaW5nQ2lwaGVyQ29uc3RydWN0b3I7bGV0IGk9c3RyaW5nVG9CeXRlcyhlKTtpPXQuZGVjcnlwdEJsb2NrKGksITApO3JldHVybiBieXRlc1RvU3RyaW5nKGkpfWVuY3J5cHRTdHJpbmcoZSl7Y29uc3QgdD1uZXcgdGhpcy5TdHJpbmdDaXBoZXJDb25zdHJ1Y3RvcjtpZih0IGluc3RhbmNlb2YgQUVTQmFzZUNpcGhlcil7Y29uc3QgaT0xNi1lLmxlbmd0aCUxNjtlKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGkpLnJlcGVhdChpKTtjb25zdCBhPW5ldyBVaW50OEFycmF5KDE2KTtpZigidW5kZWZpbmVkIiE9dHlwZW9mIGNyeXB0byljcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGEpO2Vsc2UgZm9yKGxldCBlPTA7ZTwxNjtlKyspYVtlXT1NYXRoLmZsb29yKDI1NipNYXRoLnJhbmRvbSgpKTtsZXQgcj1zdHJpbmdUb0J5dGVzKGUpO3I9dC5lbmNyeXB0KHIsYSk7Y29uc3Qgcz1uZXcgVWludDhBcnJheSgxNityLmxlbmd0aCk7cy5zZXQoYSk7cy5zZXQociwxNik7cmV0dXJuIGJ5dGVzVG9TdHJpbmcocyl9bGV0IGk9c3RyaW5nVG9CeXRlcyhlKTtpPXQuZW5jcnlwdChpKTtyZXR1cm4gYnl0ZXNUb1N0cmluZyhpKX19Y2xhc3MgQ2lwaGVyVHJhbnNmb3JtRmFjdG9yeXtzdGF0aWMjcT1uZXcgVWludDhBcnJheShbNDAsMTkxLDc4LDk0LDc4LDExNywxMzgsNjUsMTAwLDAsNzgsODYsMjU1LDI1MCwxLDgsNDYsNDYsMCwxODIsMjA4LDEwNCw2MiwxMjgsNDcsMTIsMTY5LDI1NCwxMDAsODMsMTA1LDEyMl0pOyNPKGUsdCxpLGEscixzLG4sbyxnLGMsbCxoKXtpZih0KXtjb25zdCBlPU1hdGgubWluKDEyNyx0Lmxlbmd0aCk7dD10LnN1YmFycmF5KDAsZSl9ZWxzZSB0PVtdO2NvbnN0IEM9Nj09PWU/bmV3IFBERjIwOm5ldyBQREYxNztyZXR1cm4gQy5jaGVja1VzZXJQYXNzd29yZCh0LG8sbik/Qy5nZXRVc2VyS2V5KHQsZyxsKTp0Lmxlbmd0aCYmQy5jaGVja093bmVyUGFzc3dvcmQodCxhLHMsaSk/Qy5nZXRPd25lcktleSh0LHIscyxjKTpudWxsfSNQKGUsdCxpLGEscixzLG4sbyl7Y29uc3QgZz00MCtpLmxlbmd0aCtlLmxlbmd0aCxjPW5ldyBVaW50OEFycmF5KGcpO2xldCBsLGgsQz0wO2lmKHQpe2g9TWF0aC5taW4oMzIsdC5sZW5ndGgpO2Zvcig7QzxoOysrQyljW0NdPXRbQ119bD0wO2Zvcig7QzwzMjspY1tDKytdPUNpcGhlclRyYW5zZm9ybUZhY3RvcnkuI3FbbCsrXTtmb3IobD0wLGg9aS5sZW5ndGg7bDxoOysrbCljW0MrK109aVtsXTtjW0MrK109MjU1JnI7Y1tDKytdPXI+PjgmMjU1O2NbQysrXT1yPj4xNiYyNTU7Y1tDKytdPXI+Pj4yNCYyNTU7Zm9yKGw9MCxoPWUubGVuZ3RoO2w8aDsrK2wpY1tDKytdPWVbbF07aWYocz49NCYmIW8pe2NbQysrXT0yNTU7Y1tDKytdPTI1NTtjW0MrK109MjU1O2NbQysrXT0yNTV9bGV0IFE9ZW8oYywwLEMpO2NvbnN0IEU9bj4+MztpZihzPj0zKWZvcihsPTA7bDw1MDsrK2wpUT1lbyhRLDAsRSk7Y29uc3QgdT1RLnN1YmFycmF5KDAsRSk7bGV0IGQsZjtpZihzPj0zKXtmb3IoQz0wO0M8MzI7KytDKWNbQ109Q2lwaGVyVHJhbnNmb3JtRmFjdG9yeS4jcVtDXTtmb3IobD0wLGg9ZS5sZW5ndGg7bDxoOysrbCljW0MrK109ZVtsXTtkPW5ldyBBUkNGb3VyQ2lwaGVyKHUpO2Y9ZC5lbmNyeXB0QmxvY2soZW8oYywwLEMpKTtoPXUubGVuZ3RoO2NvbnN0IHQ9bmV3IFVpbnQ4QXJyYXkoaCk7Zm9yKGw9MTtsPD0xOTsrK2wpe2ZvcihsZXQgZT0wO2U8aDsrK2UpdFtlXT11W2VdXmw7ZD1uZXcgQVJDRm91ckNpcGhlcih0KTtmPWQuZW5jcnlwdEJsb2NrKGYpfWZvcihsPTAsaD1mLmxlbmd0aDtsPGg7KytsKWlmKGFbbF0hPT1mW2xdKXJldHVybiBudWxsfWVsc2V7ZD1uZXcgQVJDRm91ckNpcGhlcih1KTtmPWQuZW5jcnlwdEJsb2NrKENpcGhlclRyYW5zZm9ybUZhY3RvcnkuI3EpO2ZvcihsPTAsaD1mLmxlbmd0aDtsPGg7KytsKWlmKGFbbF0hPT1mW2xdKXJldHVybiBudWxsfXJldHVybiB1fSNXKGUsdCxpLGEpe2NvbnN0IHI9bmV3IFVpbnQ4QXJyYXkoMzIpO2xldCBzPTA7Y29uc3Qgbj1NYXRoLm1pbigzMixlLmxlbmd0aCk7Zm9yKDtzPG47KytzKXJbc109ZVtzXTtsZXQgbz0wO2Zvcig7czwzMjspcltzKytdPUNpcGhlclRyYW5zZm9ybUZhY3RvcnkuI3FbbysrXTtsZXQgZz1lbyhyLDAscyk7Y29uc3QgYz1hPj4zO2lmKGk+PTMpZm9yKG89MDtvPDUwOysrbylnPWVvKGcsMCxnLmxlbmd0aCk7bGV0IGwsaDtpZihpPj0zKXtoPXQ7Y29uc3QgZT1uZXcgVWludDhBcnJheShjKTtmb3Iobz0xOTtvPj0wO28tLSl7Zm9yKGxldCB0PTA7dDxjOysrdCllW3RdPWdbdF1ebztsPW5ldyBBUkNGb3VyQ2lwaGVyKGUpO2g9bC5lbmNyeXB0QmxvY2soaCl9fWVsc2V7bD1uZXcgQVJDRm91ckNpcGhlcihnLnN1YmFycmF5KDAsYykpO2g9bC5lbmNyeXB0QmxvY2sodCl9cmV0dXJuIGh9I2ooZSx0LGksYT0hMSl7Y29uc3Qgcj1uZXcgVWludDhBcnJheShpLmxlbmd0aCs5KSxzPWkubGVuZ3RoO2xldCBuO2ZvcihuPTA7bjxzOysrbilyW25dPWlbbl07cltuKytdPTI1NSZlO3JbbisrXT1lPj44JjI1NTtyW24rK109ZT4+MTYmMjU1O3JbbisrXT0yNTUmdDtyW24rK109dD4+OCYyNTU7aWYoYSl7cltuKytdPTExNTtyW24rK109NjU7cltuKytdPTEwODtyW24rK109ODR9cmV0dXJuIGVvKHIsMCxuKS5zdWJhcnJheSgwLE1hdGgubWluKGkubGVuZ3RoKzUsMTYpKX0jWChlLHQsaSxhLHIpe2lmKCEodCBpbnN0YW5jZW9mIE5hbWUpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiSW52YWxpZCBjcnlwdCBmaWx0ZXIgbmFtZS4iKTtjb25zdCBzPXRoaXMsbj1lLmdldCh0Lm5hbWUpLG89bj8uZ2V0KCJDRk0iKTtpZighb3x8Ik5vbmUiPT09by5uYW1lKXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgTnVsbENpcGhlcn07aWYoIlYyIj09PW8ubmFtZSlyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEFSQ0ZvdXJDaXBoZXIocy4jaihpLGEsciwhMSkpfTtpZigiQUVTVjIiPT09by5uYW1lKXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgQUVTMTI4Q2lwaGVyKHMuI2ooaSxhLHIsITApKX07aWYoIkFFU1YzIj09PW8ubmFtZSlyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEFFUzI1NkNpcGhlcihyKX07dGhyb3cgbmV3IEZvcm1hdEVycm9yKCJVbmtub3duIGNyeXB0byBtZXRob2QiKX1jb25zdHJ1Y3RvcihlLHQsaSl7Y29uc3QgYT1lLmdldCgiRmlsdGVyIik7aWYoIWlzTmFtZShhLCJTdGFuZGFyZCIpKXRocm93IG5ldyBGb3JtYXRFcnJvcigidW5rbm93biBlbmNyeXB0aW9uIG1ldGhvZCIpO3RoaXMuZmlsdGVyTmFtZT1hLm5hbWU7dGhpcy5kaWN0PWU7Y29uc3Qgcj1lLmdldCgiViIpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKHIpfHwxIT09ciYmMiE9PXImJjQhPT1yJiY1IT09cil0aHJvdyBuZXcgRm9ybWF0RXJyb3IoInVuc3VwcG9ydGVkIGVuY3J5cHRpb24gYWxnb3JpdGhtIik7dGhpcy5hbGdvcml0aG09cjtsZXQgcz1lLmdldCgiTGVuZ3RoIik7aWYoIXMpaWYocjw9MylzPTQwO2Vsc2V7Y29uc3QgdD1lLmdldCgiQ0YiKSxpPWUuZ2V0KCJTdG1GIik7aWYodCBpbnN0YW5jZW9mIERpY3QmJmkgaW5zdGFuY2VvZiBOYW1lKXt0LnN1cHByZXNzRW5jcnlwdGlvbj0hMDtjb25zdCBlPXQuZ2V0KGkubmFtZSk7cz1lPy5nZXQoIkxlbmd0aCIpfHwxMjg7czw0MCYmKHM8PD0zKX19aWYoIU51bWJlci5pc0ludGVnZXIocyl8fHM8NDB8fHMlOCE9MCl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoImludmFsaWQga2V5IGxlbmd0aCIpO2NvbnN0IG49c3RyaW5nVG9CeXRlcyhlLmdldCgiTyIpKSxvPXN0cmluZ1RvQnl0ZXMoZS5nZXQoIlUiKSksZz1uLnN1YmFycmF5KDAsMzIpLGM9by5zdWJhcnJheSgwLDMyKSxsPWUuZ2V0KCJQIiksaD1lLmdldCgiUiIpLEM9KDQ9PT1yfHw1PT09cikmJiExIT09ZS5nZXQoIkVuY3J5cHRNZXRhZGF0YSIpO3RoaXMuZW5jcnlwdE1ldGFkYXRhPUM7Y29uc3QgUT1zdHJpbmdUb0J5dGVzKHQpO2xldCBFLHU7aWYoaSl7aWYoNj09PWgpdHJ5e2k9dXRmOFN0cmluZ1RvU3RyaW5nKGkpfWNhdGNoe3dhcm4oIkNpcGhlclRyYW5zZm9ybUZhY3Rvcnk6IFVuYWJsZSB0byBjb252ZXJ0IFVURjggZW5jb2RlZCBwYXNzd29yZC4iKX1FPXN0cmluZ1RvQnl0ZXMoaSl9aWYoNSE9PXIpdT10aGlzLiNQKFEsRSxnLGMsbCxoLHMsQyk7ZWxzZXtjb25zdCB0PW4uc3ViYXJyYXkoMzIsNDApLGk9bi5zdWJhcnJheSg0MCw0OCksYT1vLnN1YmFycmF5KDAsNDgpLHI9by5zdWJhcnJheSgzMiw0MCkscz1vLnN1YmFycmF5KDQwLDQ4KSxsPXN0cmluZ1RvQnl0ZXMoZS5nZXQoIk9FIikpLEM9c3RyaW5nVG9CeXRlcyhlLmdldCgiVUUiKSksUT1zdHJpbmdUb0J5dGVzKGUuZ2V0KCJQZXJtcyIpKTt1PXRoaXMuI08oaCxFLGcsdCxpLGEsYyxyLHMsbCxDLFEpfWlmKCF1JiYhaSl0aHJvdyBuZXcgUGFzc3dvcmRFeGNlcHRpb24oIk5vIHBhc3N3b3JkIGdpdmVuIixvdCk7aWYoIXUmJmkpe2NvbnN0IGU9dGhpcy4jVyhFLGcsaCxzKTt1PXRoaXMuI1AoUSxlLGcsYyxsLGgscyxDKX1pZighdSl0aHJvdyBuZXcgUGFzc3dvcmRFeGNlcHRpb24oIkluY29ycmVjdCBQYXNzd29yZCIsZ3QpO3RoaXMuZW5jcnlwdGlvbktleT11O2lmKHI+PTQpe2NvbnN0IHQ9ZS5nZXQoIkNGIik7dCBpbnN0YW5jZW9mIERpY3QmJih0LnN1cHByZXNzRW5jcnlwdGlvbj0hMCk7dGhpcy5jZj10O3RoaXMuc3RtZj1lLmdldCgiU3RtRiIpfHxOYW1lLmdldCgiSWRlbnRpdHkiKTt0aGlzLnN0cmY9ZS5nZXQoIlN0ckYiKXx8TmFtZS5nZXQoIklkZW50aXR5Iik7dGhpcy5lZmY9ZS5nZXQoIkVGRiIpfHx0aGlzLnN0bWZ9fWNyZWF0ZUNpcGhlclRyYW5zZm9ybShlLHQpe2lmKDQ9PT10aGlzLmFsZ29yaXRobXx8NT09PXRoaXMuYWxnb3JpdGhtKXJldHVybiBuZXcgQ2lwaGVyVHJhbnNmb3JtKHRoaXMuI1godGhpcy5jZix0aGlzLnN0cmYsZSx0LHRoaXMuZW5jcnlwdGlvbktleSksdGhpcy4jWCh0aGlzLmNmLHRoaXMuc3RtZixlLHQsdGhpcy5lbmNyeXB0aW9uS2V5KSk7Y29uc3QgaT10aGlzLiNqKGUsdCx0aGlzLmVuY3J5cHRpb25LZXksITEpLGNpcGhlckNvbnN0cnVjdG9yPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBBUkNGb3VyQ2lwaGVyKGkpfTtyZXR1cm4gbmV3IENpcGhlclRyYW5zZm9ybShjaXBoZXJDb25zdHJ1Y3RvcixjaXBoZXJDb25zdHJ1Y3Rvcil9fWZ1bmN0aW9uIGRlY29kZVN0cmluZyhlKXt0cnl7cmV0dXJuIHN0cmluZ1RvVVRGOFN0cmluZyhlKX1jYXRjaCh0KXt3YXJuKGBVVEYtOCBkZWNvZGluZyBmYWlsZWQ6ICIke3R9Ii5gKTtyZXR1cm4gZX19Y2xhc3MgRGF0YXNldFhNTFBhcnNlciBleHRlbmRzIFNpbXBsZVhNTFBhcnNlcntjb25zdHJ1Y3RvcihlKXtzdXBlcihlKTt0aGlzLm5vZGU9bnVsbH1vbkVuZEVsZW1lbnQoZSl7Y29uc3QgdD1zdXBlci5vbkVuZEVsZW1lbnQoZSk7aWYodCYmInhmYTpkYXRhc2V0cyI9PT1lKXt0aGlzLm5vZGU9dDt0aHJvdyBuZXcgRXJyb3IoIkFib3J0aW5nIERhdGFzZXRYTUxQYXJzZXIuIil9fX1jbGFzcyBEYXRhc2V0UmVhZGVye2NvbnN0cnVjdG9yKGUpe2lmKGUuZGF0YXNldHMpdGhpcy5ub2RlPW5ldyBTaW1wbGVYTUxQYXJzZXIoe2hhc0F0dHJpYnV0ZXM6ITB9KS5wYXJzZUZyb21TdHJpbmcoZS5kYXRhc2V0cykuZG9jdW1lbnRFbGVtZW50O2Vsc2V7Y29uc3QgdD1uZXcgRGF0YXNldFhNTFBhcnNlcih7aGFzQXR0cmlidXRlczohMH0pO3RyeXt0LnBhcnNlRnJvbVN0cmluZyhlWyJ4ZHA6eGRwIl0pfWNhdGNoe310aGlzLm5vZGU9dC5ub2RlfX1nZXRWYWx1ZShlKXtpZighdGhpcy5ub2RlfHwhZSlyZXR1cm4iIjtjb25zdCB0PXRoaXMubm9kZS5zZWFyY2hOb2RlKHBhcnNlWEZBUGF0aChlKSwwKTtpZighdClyZXR1cm4iIjtjb25zdCBpPXQuZmlyc3RDaGlsZDtyZXR1cm4idmFsdWUiPT09aT8ubm9kZU5hbWU/dC5jaGlsZHJlbi5tYXAoKGU9PmRlY29kZVN0cmluZyhlLnRleHRDb250ZW50KSkpOmRlY29kZVN0cmluZyh0LnRleHRDb250ZW50KX19Y2xhc3MgWFJlZnsjVj1udWxsO2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5zdHJlYW09ZTt0aGlzLnBkZk1hbmFnZXI9dDt0aGlzLmVudHJpZXM9W107dGhpcy5feHJlZlN0bXM9bmV3IFNldDt0aGlzLl9jYWNoZU1hcD1uZXcgTWFwO3RoaXMuX3BlbmRpbmdSZWZzPW5ldyBSZWZTZXQ7dGhpcy5fbmV3UGVyc2lzdGVudFJlZk51bT1udWxsO3RoaXMuX25ld1RlbXBvcmFyeVJlZk51bT1udWxsO3RoaXMuX3BlcnNpc3RlbnRSZWZzQ2FjaGU9bnVsbH1nZXROZXdQZXJzaXN0ZW50UmVmKGUpe251bGw9PT10aGlzLl9uZXdQZXJzaXN0ZW50UmVmTnVtJiYodGhpcy5fbmV3UGVyc2lzdGVudFJlZk51bT10aGlzLmVudHJpZXMubGVuZ3RofHwxKTtjb25zdCB0PXRoaXMuX25ld1BlcnNpc3RlbnRSZWZOdW0rKzt0aGlzLl9jYWNoZU1hcC5zZXQodCxlKTtyZXR1cm4gUmVmLmdldCh0LDApfWdldE5ld1RlbXBvcmFyeVJlZigpe2lmKG51bGw9PT10aGlzLl9uZXdUZW1wb3JhcnlSZWZOdW0pe3RoaXMuX25ld1RlbXBvcmFyeVJlZk51bT10aGlzLmVudHJpZXMubGVuZ3RofHwxO2lmKHRoaXMuX25ld1BlcnNpc3RlbnRSZWZOdW0pe3RoaXMuX3BlcnNpc3RlbnRSZWZzQ2FjaGU9bmV3IE1hcDtmb3IobGV0IGU9dGhpcy5fbmV3VGVtcG9yYXJ5UmVmTnVtO2U8dGhpcy5fbmV3UGVyc2lzdGVudFJlZk51bTtlKyspe3RoaXMuX3BlcnNpc3RlbnRSZWZzQ2FjaGUuc2V0KGUsdGhpcy5fY2FjaGVNYXAuZ2V0KGUpKTt0aGlzLl9jYWNoZU1hcC5kZWxldGUoZSl9fX1yZXR1cm4gUmVmLmdldCh0aGlzLl9uZXdUZW1wb3JhcnlSZWZOdW0rKywwKX1yZXNldE5ld1RlbXBvcmFyeVJlZigpe3RoaXMuX25ld1RlbXBvcmFyeVJlZk51bT1udWxsO2lmKHRoaXMuX3BlcnNpc3RlbnRSZWZzQ2FjaGUpZm9yKGNvbnN0W2UsdF1vZiB0aGlzLl9wZXJzaXN0ZW50UmVmc0NhY2hlKXRoaXMuX2NhY2hlTWFwLnNldChlLHQpO3RoaXMuX3BlcnNpc3RlbnRSZWZzQ2FjaGU9bnVsbH1zZXRTdGFydFhSZWYoZSl7dGhpcy5zdGFydFhSZWZRdWV1ZT1bZV19cGFyc2UoZT0hMSl7bGV0IHQsaSxhO2lmKGUpe3dhcm4oIkluZGV4aW5nIGFsbCBQREYgb2JqZWN0cyIpO3Q9dGhpcy5pbmRleE9iamVjdHMoKX1lbHNlIHQ9dGhpcy5yZWFkWFJlZigpO3QuYXNzaWduWHJlZih0aGlzKTt0aGlzLnRyYWlsZXI9dDt0cnl7aT10LmdldCgiRW5jcnlwdCIpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBNaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlO3dhcm4oYFhSZWYucGFyc2UgLSBJbnZhbGlkICJFbmNyeXB0IiByZWZlcmVuY2U6ICIke2V9Ii5gKX1pZihpIGluc3RhbmNlb2YgRGljdCl7Y29uc3QgZT10LmdldCgiSUQiKSxhPWU/Lmxlbmd0aD9lWzBdOiIiO2kuc3VwcHJlc3NFbmNyeXB0aW9uPSEwO3RoaXMuZW5jcnlwdD1uZXcgQ2lwaGVyVHJhbnNmb3JtRmFjdG9yeShpLGEsdGhpcy5wZGZNYW5hZ2VyLnBhc3N3b3JkKX10cnl7YT10LmdldCgiUm9vdCIpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBNaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlO3dhcm4oYFhSZWYucGFyc2UgLSBJbnZhbGlkICJSb290IiByZWZlcmVuY2U6ICIke2V9Ii5gKX1pZihhIGluc3RhbmNlb2YgRGljdCl0cnl7aWYoYS5nZXQoIlBhZ2VzIilpbnN0YW5jZW9mIERpY3Qpe3RoaXMucm9vdD1hO3JldHVybn19Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIE1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7d2FybihgWFJlZi5wYXJzZSAtIEludmFsaWQgIlBhZ2VzIiByZWZlcmVuY2U6ICIke2V9Ii5gKX1pZighZSl0aHJvdyBuZXcgWFJlZlBhcnNlRXhjZXB0aW9uO3Rocm93IG5ldyBJbnZhbGlkUERGRXhjZXB0aW9uKCJJbnZhbGlkIFJvb3QgcmVmZXJlbmNlLiIpfXByb2Nlc3NYUmVmVGFibGUoZSl7InRhYmxlU3RhdGUiaW4gdGhpc3x8KHRoaXMudGFibGVTdGF0ZT17ZW50cnlOdW06MCxzdHJlYW1Qb3M6ZS5sZXhlci5zdHJlYW0ucG9zLHBhcnNlckJ1ZjE6ZS5idWYxLHBhcnNlckJ1ZjI6ZS5idWYyfSk7aWYoIWlzQ21kKHRoaXMucmVhZFhSZWZUYWJsZShlKSwidHJhaWxlciIpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiSW52YWxpZCBYUmVmIHRhYmxlOiBjb3VsZCBub3QgZmluZCB0cmFpbGVyIGRpY3Rpb25hcnkiKTtsZXQgdD1lLmdldE9iaigpO3QgaW5zdGFuY2VvZiBEaWN0fHwhdC5kaWN0fHwodD10LmRpY3QpO2lmKCEodCBpbnN0YW5jZW9mIERpY3QpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiSW52YWxpZCBYUmVmIHRhYmxlOiBjb3VsZCBub3QgcGFyc2UgdHJhaWxlciBkaWN0aW9uYXJ5Iik7ZGVsZXRlIHRoaXMudGFibGVTdGF0ZTtyZXR1cm4gdH1yZWFkWFJlZlRhYmxlKGUpe2NvbnN0IHQ9ZS5sZXhlci5zdHJlYW0saT10aGlzLnRhYmxlU3RhdGU7dC5wb3M9aS5zdHJlYW1Qb3M7ZS5idWYxPWkucGFyc2VyQnVmMTtlLmJ1ZjI9aS5wYXJzZXJCdWYyO2xldCBhO2Zvcig7Oyl7aWYoISgiZmlyc3RFbnRyeU51bSJpbiBpKXx8ISgiZW50cnlDb3VudCJpbiBpKSl7aWYoaXNDbWQoYT1lLmdldE9iaigpLCJ0cmFpbGVyIikpYnJlYWs7aS5maXJzdEVudHJ5TnVtPWE7aS5lbnRyeUNvdW50PWUuZ2V0T2JqKCl9bGV0IHI9aS5maXJzdEVudHJ5TnVtO2NvbnN0IHM9aS5lbnRyeUNvdW50O2lmKCFOdW1iZXIuaXNJbnRlZ2VyKHIpfHwhTnVtYmVyLmlzSW50ZWdlcihzKSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiB0YWJsZTogd3JvbmcgdHlwZXMgaW4gc3Vic2VjdGlvbiBoZWFkZXIiKTtmb3IobGV0IGE9aS5lbnRyeU51bTthPHM7YSsrKXtpLnN0cmVhbVBvcz10LnBvcztpLmVudHJ5TnVtPWE7aS5wYXJzZXJCdWYxPWUuYnVmMTtpLnBhcnNlckJ1ZjI9ZS5idWYyO2NvbnN0IG49e307bi5vZmZzZXQ9ZS5nZXRPYmooKTtuLmdlbj1lLmdldE9iaigpO2NvbnN0IG89ZS5nZXRPYmooKTtpZihvIGluc3RhbmNlb2YgQ21kKXN3aXRjaChvLmNtZCl7Y2FzZSJmIjpuLmZyZWU9ITA7YnJlYWs7Y2FzZSJuIjpuLnVuY29tcHJlc3NlZD0hMH1pZighTnVtYmVyLmlzSW50ZWdlcihuLm9mZnNldCl8fCFOdW1iZXIuaXNJbnRlZ2VyKG4uZ2VuKXx8IW4uZnJlZSYmIW4udW5jb21wcmVzc2VkKXRocm93IG5ldyBGb3JtYXRFcnJvcihgSW52YWxpZCBlbnRyeSBpbiBYUmVmIHN1YnNlY3Rpb246ICR7cn0sICR7c31gKTswPT09YSYmbi5mcmVlJiYxPT09ciYmKHI9MCk7dGhpcy5lbnRyaWVzW2Ercl18fCh0aGlzLmVudHJpZXNbYStyXT1uKX1pLmVudHJ5TnVtPTA7aS5zdHJlYW1Qb3M9dC5wb3M7aS5wYXJzZXJCdWYxPWUuYnVmMTtpLnBhcnNlckJ1ZjI9ZS5idWYyO2RlbGV0ZSBpLmZpcnN0RW50cnlOdW07ZGVsZXRlIGkuZW50cnlDb3VudH1pZih0aGlzLmVudHJpZXNbMF0mJiF0aGlzLmVudHJpZXNbMF0uZnJlZSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiB0YWJsZTogdW5leHBlY3RlZCBmaXJzdCBvYmplY3QiKTtyZXR1cm4gYX1wcm9jZXNzWFJlZlN0cmVhbShlKXtpZighKCJzdHJlYW1TdGF0ZSJpbiB0aGlzKSl7Y29uc3R7ZGljdDp0LHBvczppfT1lLGE9dC5nZXQoIlciKSxyPXQuZ2V0KCJJbmRleCIpfHxbMCx0LmdldCgiU2l6ZSIpXTt0aGlzLnN0cmVhbVN0YXRlPXtlbnRyeVJhbmdlczpyLGJ5dGVXaWR0aHM6YSxlbnRyeU51bTowLHN0cmVhbVBvczppfX10aGlzLnJlYWRYUmVmU3RyZWFtKGUpO2RlbGV0ZSB0aGlzLnN0cmVhbVN0YXRlO3JldHVybiBlLmRpY3R9cmVhZFhSZWZTdHJlYW0oZSl7Y29uc3QgdD10aGlzLnN0cmVhbVN0YXRlO2UucG9zPXQuc3RyZWFtUG9zO2NvbnN0W2ksYSxyXT10LmJ5dGVXaWR0aHMscz10LmVudHJ5UmFuZ2VzO2Zvcig7cy5sZW5ndGg+MDspe2NvbnN0W24sb109cztpZighTnVtYmVyLmlzSW50ZWdlcihuKXx8IU51bWJlci5pc0ludGVnZXIobykpdGhyb3cgbmV3IEZvcm1hdEVycm9yKGBJbnZhbGlkIFhSZWYgcmFuZ2UgZmllbGRzOiAke259LCAke299YCk7aWYoIU51bWJlci5pc0ludGVnZXIoaSl8fCFOdW1iZXIuaXNJbnRlZ2VyKGEpfHwhTnVtYmVyLmlzSW50ZWdlcihyKSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoYEludmFsaWQgWFJlZiBlbnRyeSBmaWVsZHMgbGVuZ3RoOiAke259LCAke299YCk7Zm9yKGxldCBzPXQuZW50cnlOdW07czxvOysrcyl7dC5lbnRyeU51bT1zO3Quc3RyZWFtUG9zPWUucG9zO2xldCBvPTAsZz0wLGM9MDtmb3IobGV0IHQ9MDt0PGk7Kyt0KXtjb25zdCB0PWUuZ2V0Qnl0ZSgpO2lmKC0xPT09dCl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiBieXRlV2lkdGhzICd0eXBlJy4iKTtvPW88PDh8dH0wPT09aSYmKG89MSk7Zm9yKGxldCB0PTA7dDxhOysrdCl7Y29uc3QgdD1lLmdldEJ5dGUoKTtpZigtMT09PXQpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgYnl0ZVdpZHRocyAnb2Zmc2V0Jy4iKTtnPWc8PDh8dH1mb3IobGV0IHQ9MDt0PHI7Kyt0KXtjb25zdCB0PWUuZ2V0Qnl0ZSgpO2lmKC0xPT09dCl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiBieXRlV2lkdGhzICdnZW5lcmF0aW9uJy4iKTtjPWM8PDh8dH1jb25zdCBsPXt9O2wub2Zmc2V0PWc7bC5nZW49Yztzd2l0Y2gobyl7Y2FzZSAwOmwuZnJlZT0hMDticmVhaztjYXNlIDE6bC51bmNvbXByZXNzZWQ9ITA7YnJlYWs7Y2FzZSAyOmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEZvcm1hdEVycm9yKGBJbnZhbGlkIFhSZWYgZW50cnkgdHlwZTogJHtvfWApfXRoaXMuZW50cmllc1tuK3NdfHwodGhpcy5lbnRyaWVzW24rc109bCl9dC5lbnRyeU51bT0wO3Quc3RyZWFtUG9zPWUucG9zO3Muc3BsaWNlKDAsMil9fWluZGV4T2JqZWN0cygpe2Z1bmN0aW9uIHJlYWRUb2tlbihlLHQpe2xldCBpPSIiLGE9ZVt0XTtmb3IoOzEwIT09YSYmMTMhPT1hJiY2MCE9PWEmJiEoKyt0Pj1lLmxlbmd0aCk7KXtpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGEpO2E9ZVt0XX1yZXR1cm4gaX1mdW5jdGlvbiBza2lwVW50aWwoZSx0LGkpe2NvbnN0IGE9aS5sZW5ndGgscj1lLmxlbmd0aDtsZXQgcz0wO2Zvcig7dDxyOyl7bGV0IHI9MDtmb3IoO3I8YSYmZVt0K3JdPT09aVtyXTspKytyO2lmKHI+PWEpYnJlYWs7dCsrO3MrK31yZXR1cm4gc31jb25zdCBlPS9cYihlbmRvYmp8XGQrXHMrXGQrXHMrb2JqfHhyZWZ8dHJhaWxlclxzKjw8KVxiL2csdD0vXGIoc3RhcnR4cmVmfFxkK1xzK1xkK1xzK29iailcYi9nLGk9L14oXGQrKVxzKyhcZCspXHMrb2JqXGIvLGE9bmV3IFVpbnQ4QXJyYXkoWzExNiwxMTQsOTcsMTA1LDEwOCwxMDEsMTE0XSkscj1uZXcgVWludDhBcnJheShbMTE1LDExNiw5NywxMTQsMTE2LDEyMCwxMTQsMTAxLDEwMl0pLHM9bmV3IFVpbnQ4QXJyYXkoWzQ3LDg4LDgyLDEwMSwxMDJdKTt0aGlzLmVudHJpZXMubGVuZ3RoPTA7dGhpcy5fY2FjaGVNYXAuY2xlYXIoKTtjb25zdCBuPXRoaXMuc3RyZWFtO24ucG9zPTA7Y29uc3Qgbz1uLmdldEJ5dGVzKCksZz1ieXRlc1RvU3RyaW5nKG8pLGM9by5sZW5ndGg7bGV0IGw9bi5zdGFydDtjb25zdCBoPVtdLEM9W107Zm9yKDtsPGM7KXtsZXQgUT1vW2xdO2lmKDk9PT1RfHwxMD09PVF8fDEzPT09UXx8MzI9PT1RKXsrK2w7Y29udGludWV9aWYoMzc9PT1RKXtkb3srK2w7aWYobD49YylicmVhaztRPW9bbF19d2hpbGUoMTAhPT1RJiYxMyE9PVEpO2NvbnRpbnVlfWNvbnN0IEU9cmVhZFRva2VuKG8sbCk7bGV0IHU7aWYoRS5zdGFydHNXaXRoKCJ4cmVmIikmJig0PT09RS5sZW5ndGh8fC9ccy8udGVzdChFWzRdKSkpe2wrPXNraXBVbnRpbChvLGwsYSk7aC5wdXNoKGwpO2wrPXNraXBVbnRpbChvLGwscil9ZWxzZSBpZih1PWkuZXhlYyhFKSl7Y29uc3QgdD0wfHVbMV0saT0wfHVbMl0sYT1sK0UubGVuZ3RoO2xldCByLGg9ITE7aWYodGhpcy5lbnRyaWVzW3RdKXtpZih0aGlzLmVudHJpZXNbdF0uZ2VuPT09aSl0cnl7bmV3IFBhcnNlcih7bGV4ZXI6bmV3IExleGVyKG4ubWFrZVN1YlN0cmVhbShhKSl9KS5nZXRPYmooKTtoPSEwfWNhdGNoKGUpe2UgaW5zdGFuY2VvZiBQYXJzZXJFT0ZFeGNlcHRpb24/d2FybihgaW5kZXhPYmplY3RzIC0tIGNoZWNraW5nIG9iamVjdCAoJHtFfSk6ICIke2V9Ii5gKTpoPSEwfX1lbHNlIGg9ITA7aCYmKHRoaXMuZW50cmllc1t0XT17b2Zmc2V0Omwtbi5zdGFydCxnZW46aSx1bmNvbXByZXNzZWQ6ITB9KTtlLmxhc3RJbmRleD1hO2NvbnN0IFE9ZS5leGVjKGcpO2lmKFEpe3I9ZS5sYXN0SW5kZXgrMS1sO2lmKCJlbmRvYmoiIT09UVsxXSl7d2FybihgaW5kZXhPYmplY3RzOiBGb3VuZCAiJHtRWzFdfSIgaW5zaWRlIG9mIGFub3RoZXIgIm9iaiIsIGNhdXNlZCBieSBtaXNzaW5nICJlbmRvYmoiIC0tIHRyeWluZyB0byByZWNvdmVyLmApO3ItPVFbMV0ubGVuZ3RoKzF9fWVsc2Ugcj1jLWw7Y29uc3QgZD1vLnN1YmFycmF5KGwsbCtyKSxmPXNraXBVbnRpbChkLDAscyk7aWYoZjxyJiZkW2YrNV08NjQpe0MucHVzaChsLW4uc3RhcnQpO3RoaXMuX3hyZWZTdG1zLmFkZChsLW4uc3RhcnQpfWwrPXJ9ZWxzZSBpZihFLnN0YXJ0c1dpdGgoInRyYWlsZXIiKSYmKDc9PT1FLmxlbmd0aHx8L1xzLy50ZXN0KEVbN10pKSl7aC5wdXNoKGwpO2NvbnN0IGU9bCtFLmxlbmd0aDtsZXQgaTt0Lmxhc3RJbmRleD1lO2NvbnN0IGE9dC5leGVjKGcpO2lmKGEpe2k9dC5sYXN0SW5kZXgrMS1sO2lmKCJzdGFydHhyZWYiIT09YVsxXSl7d2FybihgaW5kZXhPYmplY3RzOiBGb3VuZCAiJHthWzFdfSIgYWZ0ZXIgInRyYWlsZXIiLCBjYXVzZWQgYnkgbWlzc2luZyAic3RhcnR4cmVmIiAtLSB0cnlpbmcgdG8gcmVjb3Zlci5gKTtpLT1hWzFdLmxlbmd0aCsxfX1lbHNlIGk9Yy1sO2wrPWl9ZWxzZSBsKz1FLmxlbmd0aCsxfWZvcihjb25zdCBlIG9mIEMpe3RoaXMuc3RhcnRYUmVmUXVldWUucHVzaChlKTt0aGlzLnJlYWRYUmVmKCEwKX1jb25zdCBRPVtdO2xldCBFLHUsZD0hMTtmb3IoY29uc3QgZSBvZiBoKXtuLnBvcz1lO2NvbnN0IHQ9bmV3IFBhcnNlcih7bGV4ZXI6bmV3IExleGVyKG4pLHhyZWY6dGhpcyxhbGxvd1N0cmVhbXM6ITAscmVjb3ZlcnlNb2RlOiEwfSk7aWYoIWlzQ21kKHQuZ2V0T2JqKCksInRyYWlsZXIiKSljb250aW51ZTtjb25zdCBpPXQuZ2V0T2JqKCk7aWYoaSBpbnN0YW5jZW9mIERpY3Qpe1EucHVzaChpKTtpLmhhcygiRW5jcnlwdCIpJiYoZD0hMCl9fWZvcihjb25zdCBlIG9mWy4uLlEsImdlbkZhbGxiYWNrIiwuLi5RXSl7aWYoImdlbkZhbGxiYWNrIj09PWUpe2lmKCF1KWJyZWFrO3RoaXMuX2dlbmVyYXRpb25GYWxsYmFjaz0hMDtjb250aW51ZX1sZXQgdD0hMTt0cnl7Y29uc3QgaT1lLmdldCgiUm9vdCIpO2lmKCEoaSBpbnN0YW5jZW9mIERpY3QpKWNvbnRpbnVlO2NvbnN0IGE9aS5nZXQoIlBhZ2VzIik7aWYoIShhIGluc3RhbmNlb2YgRGljdCkpY29udGludWU7Y29uc3Qgcj1hLmdldCgiQ291bnQiKTtOdW1iZXIuaXNJbnRlZ2VyKHIpJiYodD0hMCl9Y2F0Y2goZSl7dT1lO2NvbnRpbnVlfWlmKHQmJighZHx8ZS5oYXMoIkVuY3J5cHQiKSkmJmUuaGFzKCJJRCIpKXJldHVybiBlO0U9ZX1pZihFKXJldHVybiBFO2lmKHRoaXMudG9wRGljdClyZXR1cm4gdGhpcy50b3BEaWN0O2lmKCFRLmxlbmd0aClmb3IoY29uc3RbZSx0XW9mIHRoaXMuZW50cmllcy5lbnRyaWVzKCkpe2lmKCF0KWNvbnRpbnVlO2NvbnN0IGk9UmVmLmdldChlLHQuZ2VuKTtsZXQgYTt0cnl7YT10aGlzLmZldGNoKGkpfWNhdGNoe2NvbnRpbnVlfWEgaW5zdGFuY2VvZiBCYXNlU3RyZWFtJiYoYT1hLmRpY3QpO2lmKGEgaW5zdGFuY2VvZiBEaWN0JiZhLmhhcygiUm9vdCIpKXJldHVybiBhfXRocm93IG5ldyBJbnZhbGlkUERGRXhjZXB0aW9uKCJJbnZhbGlkIFBERiBzdHJ1Y3R1cmUuIil9cmVhZFhSZWYoZT0hMSl7Y29uc3QgdD10aGlzLnN0cmVhbSxpPW5ldyBTZXQ7Zm9yKDt0aGlzLnN0YXJ0WFJlZlF1ZXVlLmxlbmd0aDspe3RyeXtjb25zdCBlPXRoaXMuc3RhcnRYUmVmUXVldWVbMF07aWYoaS5oYXMoZSkpe3dhcm4oInJlYWRYUmVmIC0gc2tpcHBpbmcgWFJlZiB0YWJsZSBzaW5jZSBpdCB3YXMgYWxyZWFkeSBwYXJzZWQuIik7dGhpcy5zdGFydFhSZWZRdWV1ZS5zaGlmdCgpO2NvbnRpbnVlfWkuYWRkKGUpO3QucG9zPWUrdC5zdGFydDtjb25zdCBhPW5ldyBQYXJzZXIoe2xleGVyOm5ldyBMZXhlcih0KSx4cmVmOnRoaXMsYWxsb3dTdHJlYW1zOiEwfSk7bGV0IHIscz1hLmdldE9iaigpO2lmKGlzQ21kKHMsInhyZWYiKSl7cj10aGlzLnByb2Nlc3NYUmVmVGFibGUoYSk7dGhpcy50b3BEaWN0fHwodGhpcy50b3BEaWN0PXIpO3M9ci5nZXQoIlhSZWZTdG0iKTtpZihOdW1iZXIuaXNJbnRlZ2VyKHMpJiYhdGhpcy5feHJlZlN0bXMuaGFzKHMpKXt0aGlzLl94cmVmU3Rtcy5hZGQocyk7dGhpcy5zdGFydFhSZWZRdWV1ZS5wdXNoKHMpO3RoaXMuI1Y/Pz1zfX1lbHNle2lmKCFOdW1iZXIuaXNJbnRlZ2VyKHMpKXRocm93IG5ldyBGb3JtYXRFcnJvcigiSW52YWxpZCBYUmVmIHN0cmVhbSBoZWFkZXIiKTtpZighKE51bWJlci5pc0ludGVnZXIoYS5nZXRPYmooKSkmJmlzQ21kKGEuZ2V0T2JqKCksIm9iaiIpJiYocz1hLmdldE9iaigpKWluc3RhbmNlb2YgQmFzZVN0cmVhbSkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgc3RyZWFtIik7cj10aGlzLnByb2Nlc3NYUmVmU3RyZWFtKHMpO3RoaXMudG9wRGljdHx8KHRoaXMudG9wRGljdD1yKTtpZighcil0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIkZhaWxlZCB0byByZWFkIFhSZWYgc3RyZWFtIil9cz1yLmdldCgiUHJldiIpO051bWJlci5pc0ludGVnZXIocyk/dGhpcy5zdGFydFhSZWZRdWV1ZS5wdXNoKHMpOnMgaW5zdGFuY2VvZiBSZWYmJnRoaXMuc3RhcnRYUmVmUXVldWUucHVzaChzLm51bSl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIE1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7aW5mbygiKHdoaWxlIHJlYWRpbmcgWFJlZik6ICIrZSl9dGhpcy5zdGFydFhSZWZRdWV1ZS5zaGlmdCgpfWlmKHRoaXMudG9wRGljdClyZXR1cm4gdGhpcy50b3BEaWN0O2lmKCFlKXRocm93IG5ldyBYUmVmUGFyc2VFeGNlcHRpb259Z2V0IGxhc3RYUmVmU3RyZWFtUG9zKCl7cmV0dXJuIHRoaXMuI1Y/Pyh0aGlzLl94cmVmU3Rtcy5zaXplPjA/TWF0aC5tYXgoLi4udGhpcy5feHJlZlN0bXMpOm51bGwpfWdldEVudHJ5KGUpe2NvbnN0IHQ9dGhpcy5lbnRyaWVzW2VdO3JldHVybiB0JiYhdC5mcmVlJiZ0Lm9mZnNldD90Om51bGx9ZmV0Y2hJZlJlZihlLHQ9ITEpe3JldHVybiBlIGluc3RhbmNlb2YgUmVmP3RoaXMuZmV0Y2goZSx0KTplfWZldGNoKGUsdD0hMSl7aWYoIShlIGluc3RhbmNlb2YgUmVmKSl0aHJvdyBuZXcgRXJyb3IoInJlZiBvYmplY3QgaXMgbm90IGEgcmVmZXJlbmNlIik7Y29uc3QgaT1lLm51bSxhPXRoaXMuX2NhY2hlTWFwLmdldChpKTtpZih2b2lkIDAhPT1hKXthIGluc3RhbmNlb2YgRGljdCYmIWEub2JqSWQmJihhLm9iaklkPWUudG9TdHJpbmcoKSk7cmV0dXJuIGF9bGV0IHI9dGhpcy5nZXRFbnRyeShpKTtpZihudWxsPT09cil7dGhpcy5fY2FjaGVNYXAuc2V0KGkscik7cmV0dXJuIHJ9aWYodGhpcy5fcGVuZGluZ1JlZnMuaGFzKGUpKXt0aGlzLl9wZW5kaW5nUmVmcy5yZW1vdmUoZSk7d2FybihgSWdub3JpbmcgY2lyY3VsYXIgcmVmZXJlbmNlOiAke2V9LmApO3JldHVybiBRdH10aGlzLl9wZW5kaW5nUmVmcy5wdXQoZSk7dHJ5e3I9ci51bmNvbXByZXNzZWQ/dGhpcy5mZXRjaFVuY29tcHJlc3NlZChlLHIsdCk6dGhpcy5mZXRjaENvbXByZXNzZWQoZSxyLHQpO3RoaXMuX3BlbmRpbmdSZWZzLnJlbW92ZShlKX1jYXRjaCh0KXt0aGlzLl9wZW5kaW5nUmVmcy5yZW1vdmUoZSk7dGhyb3cgdH1yIGluc3RhbmNlb2YgRGljdD9yLm9iaklkPWUudG9TdHJpbmcoKTpyIGluc3RhbmNlb2YgQmFzZVN0cmVhbSYmKHIuZGljdC5vYmpJZD1lLnRvU3RyaW5nKCkpO3JldHVybiByfWZldGNoVW5jb21wcmVzc2VkKGUsdCxpPSExKXtjb25zdCBhPWUuZ2VuO2xldCByPWUubnVtO2lmKHQuZ2VuIT09YSl7Y29uc3Qgcz1gSW5jb25zaXN0ZW50IGdlbmVyYXRpb24gaW4gWFJlZjogJHtlfWA7aWYodGhpcy5fZ2VuZXJhdGlvbkZhbGxiYWNrJiZ0LmdlbjxhKXt3YXJuKHMpO3JldHVybiB0aGlzLmZldGNoVW5jb21wcmVzc2VkKFJlZi5nZXQocix0LmdlbiksdCxpKX10aHJvdyBuZXcgWFJlZkVudHJ5RXhjZXB0aW9uKHMpfWNvbnN0IHM9dGhpcy5zdHJlYW0ubWFrZVN1YlN0cmVhbSh0Lm9mZnNldCt0aGlzLnN0cmVhbS5zdGFydCksbj1uZXcgUGFyc2VyKHtsZXhlcjpuZXcgTGV4ZXIocykseHJlZjp0aGlzLGFsbG93U3RyZWFtczohMH0pLG89bi5nZXRPYmooKSxnPW4uZ2V0T2JqKCksYz1uLmdldE9iaigpO2lmKG8hPT1yfHxnIT09YXx8IShjIGluc3RhbmNlb2YgQ21kKSl0aHJvdyBuZXcgWFJlZkVudHJ5RXhjZXB0aW9uKGBCYWQgKHVuY29tcHJlc3NlZCkgWFJlZiBlbnRyeTogJHtlfWApO2lmKCJvYmoiIT09Yy5jbWQpe2lmKGMuY21kLnN0YXJ0c1dpdGgoIm9iaiIpKXtyPXBhcnNlSW50KGMuY21kLnN1YnN0cmluZygzKSwxMCk7aWYoIU51bWJlci5pc05hTihyKSlyZXR1cm4gcn10aHJvdyBuZXcgWFJlZkVudHJ5RXhjZXB0aW9uKGBCYWQgKHVuY29tcHJlc3NlZCkgWFJlZiBlbnRyeTogJHtlfWApfSh0PXRoaXMuZW5jcnlwdCYmIWk/bi5nZXRPYmoodGhpcy5lbmNyeXB0LmNyZWF0ZUNpcGhlclRyYW5zZm9ybShyLGEpKTpuLmdldE9iaigpKWluc3RhbmNlb2YgQmFzZVN0cmVhbXx8dGhpcy5fY2FjaGVNYXAuc2V0KHIsdCk7cmV0dXJuIHR9ZmV0Y2hDb21wcmVzc2VkKGUsdCxpPSExKXtjb25zdCBhPXQub2Zmc2V0LHI9dGhpcy5mZXRjaChSZWYuZ2V0KGEsMCkpO2lmKCEociBpbnN0YW5jZW9mIEJhc2VTdHJlYW0pKXRocm93IG5ldyBGb3JtYXRFcnJvcigiYmFkIE9ialN0bSBzdHJlYW0iKTtjb25zdCBzPXIuZGljdC5nZXQoIkZpcnN0Iiksbj1yLmRpY3QuZ2V0KCJOIik7aWYoIU51bWJlci5pc0ludGVnZXIocyl8fCFOdW1iZXIuaXNJbnRlZ2VyKG4pKXRocm93IG5ldyBGb3JtYXRFcnJvcigiaW52YWxpZCBmaXJzdCBhbmQgbiBwYXJhbWV0ZXJzIGZvciBPYmpTdG0gc3RyZWFtIik7bGV0IG89bmV3IFBhcnNlcih7bGV4ZXI6bmV3IExleGVyKHIpLHhyZWY6dGhpcyxhbGxvd1N0cmVhbXM6ITB9KTtjb25zdCBnPW5ldyBBcnJheShuKSxjPW5ldyBBcnJheShuKTtmb3IobGV0IGU9MDtlPG47KytlKXtjb25zdCB0PW8uZ2V0T2JqKCk7aWYoIU51bWJlci5pc0ludGVnZXIodCkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKGBpbnZhbGlkIG9iamVjdCBudW1iZXIgaW4gdGhlIE9ialN0bSBzdHJlYW06ICR7dH1gKTtjb25zdCBpPW8uZ2V0T2JqKCk7aWYoIU51bWJlci5pc0ludGVnZXIoaSkpdGhyb3cgbmV3IEZvcm1hdEVycm9yKGBpbnZhbGlkIG9iamVjdCBvZmZzZXQgaW4gdGhlIE9ialN0bSBzdHJlYW06ICR7aX1gKTtnW2VdPXQ7Y1tlXT1pfWNvbnN0IGw9KHIuc3RhcnR8fDApK3MsaD1uZXcgQXJyYXkobik7Zm9yKGxldCBlPTA7ZTxuOysrZSl7Y29uc3QgdD1lPG4tMT9jW2UrMV0tY1tlXTp2b2lkIDA7aWYodDwwKXRocm93IG5ldyBGb3JtYXRFcnJvcigiSW52YWxpZCBvZmZzZXQgaW4gdGhlIE9ialN0bSBzdHJlYW0uIik7bz1uZXcgUGFyc2VyKHtsZXhlcjpuZXcgTGV4ZXIoci5tYWtlU3ViU3RyZWFtKGwrY1tlXSx0LHIuZGljdCkpLHhyZWY6dGhpcyxhbGxvd1N0cmVhbXM6ITB9KTtjb25zdCBpPW8uZ2V0T2JqKCk7aFtlXT1pO2lmKGkgaW5zdGFuY2VvZiBCYXNlU3RyZWFtKWNvbnRpbnVlO2NvbnN0IHM9Z1tlXSxDPXRoaXMuZW50cmllc1tzXTtDJiZDLm9mZnNldD09PWEmJkMuZ2VuPT09ZSYmdGhpcy5fY2FjaGVNYXAuc2V0KHMsaSl9aWYodm9pZCAwPT09KHQ9aFt0Lmdlbl0pKXRocm93IG5ldyBYUmVmRW50cnlFeGNlcHRpb24oYEJhZCAoY29tcHJlc3NlZCkgWFJlZiBlbnRyeTogJHtlfWApO3JldHVybiB0fWFzeW5jIGZldGNoSWZSZWZBc3luYyhlLHQpe3JldHVybiBlIGluc3RhbmNlb2YgUmVmP3RoaXMuZmV0Y2hBc3luYyhlLHQpOmV9YXN5bmMgZmV0Y2hBc3luYyhlLHQpe3RyeXtyZXR1cm4gdGhpcy5mZXRjaChlLHQpfWNhdGNoKGkpe2lmKCEoaSBpbnN0YW5jZW9mIE1pc3NpbmdEYXRhRXhjZXB0aW9uKSl0aHJvdyBpO2F3YWl0IHRoaXMucGRmTWFuYWdlci5yZXF1ZXN0UmFuZ2UoaS5iZWdpbixpLmVuZCk7cmV0dXJuIHRoaXMuZmV0Y2hBc3luYyhlLHQpfX1nZXRDYXRhbG9nT2JqKCl7cmV0dXJuIHRoaXMucm9vdH19Y29uc3QgYW89WzAsMCw2MTIsNzkyXTtjbGFzcyBQYWdle2NvbnN0cnVjdG9yKHtwZGZNYW5hZ2VyOmUseHJlZjp0LHBhZ2VJbmRleDppLHBhZ2VEaWN0OmEscmVmOnIsZ2xvYmFsSWRGYWN0b3J5OnMsZm9udENhY2hlOm4sYnVpbHRJbkNNYXBDYWNoZTpvLHN0YW5kYXJkRm9udERhdGFDYWNoZTpnLGdsb2JhbEltYWdlQ2FjaGU6YyxzeXN0ZW1Gb250Q2FjaGU6bCxub25CbGVuZE1vZGVzU2V0OmgseGZhRmFjdG9yeTpDfSl7dGhpcy5wZGZNYW5hZ2VyPWU7dGhpcy5wYWdlSW5kZXg9aTt0aGlzLnBhZ2VEaWN0PWE7dGhpcy54cmVmPXQ7dGhpcy5yZWY9cjt0aGlzLmZvbnRDYWNoZT1uO3RoaXMuYnVpbHRJbkNNYXBDYWNoZT1vO3RoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlPWc7dGhpcy5nbG9iYWxJbWFnZUNhY2hlPWM7dGhpcy5zeXN0ZW1Gb250Q2FjaGU9bDt0aGlzLm5vbkJsZW5kTW9kZXNTZXQ9aDt0aGlzLmV2YWx1YXRvck9wdGlvbnM9ZS5ldmFsdWF0b3JPcHRpb25zO3RoaXMucmVzb3VyY2VzUHJvbWlzZT1udWxsO3RoaXMueGZhRmFjdG9yeT1DO2NvbnN0IFE9e29iajowfTt0aGlzLl9sb2NhbElkRmFjdG9yeT1jbGFzcyBleHRlbmRzIHN7c3RhdGljIGNyZWF0ZU9iaklkKCl7cmV0dXJuYHAke2l9XyR7KytRLm9ian1gfXN0YXRpYyBnZXRQYWdlT2JqSWQoKXtyZXR1cm5gcCR7ci50b1N0cmluZygpfWB9fX1fZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eShlLHQ9ITEpe2NvbnN0IGk9Z2V0SW5oZXJpdGFibGVQcm9wZXJ0eSh7ZGljdDp0aGlzLnBhZ2VEaWN0LGtleTplLGdldEFycmF5OnQsc3RvcFdoZW5Gb3VuZDohMX0pO3JldHVybiBBcnJheS5pc0FycmF5KGkpPzEhPT1pLmxlbmd0aCYmaVswXWluc3RhbmNlb2YgRGljdD9EaWN0Lm1lcmdlKHt4cmVmOnRoaXMueHJlZixkaWN0QXJyYXk6aX0pOmlbMF06aX1nZXQgY29udGVudCgpe3JldHVybiB0aGlzLnBhZ2VEaWN0LmdldEFycmF5KCJDb250ZW50cyIpfWdldCByZXNvdXJjZXMoKXtjb25zdCBlPXRoaXMuX2dldEluaGVyaXRhYmxlUHJvcGVydHkoIlJlc291cmNlcyIpO3JldHVybiBzaGFkb3codGhpcywicmVzb3VyY2VzIixlIGluc3RhbmNlb2YgRGljdD9lOkRpY3QuZW1wdHkpfV9nZXRCb3VuZGluZ0JveChlKXtpZih0aGlzLnhmYURhdGEpcmV0dXJuIHRoaXMueGZhRGF0YS5iYm94O2NvbnN0IHQ9bG9va3VwTm9ybWFsUmVjdCh0aGlzLl9nZXRJbmhlcml0YWJsZVByb3BlcnR5KGUsITApLG51bGwpO2lmKHQpe2lmKHRbMl0tdFswXT4wJiZ0WzNdLXRbMV0+MClyZXR1cm4gdDt3YXJuKGBFbXB0eSwgb3IgaW52YWxpZCwgLyR7ZX0gZW50cnkuYCl9cmV0dXJuIG51bGx9Z2V0IG1lZGlhQm94KCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJtZWRpYUJveCIsdGhpcy5fZ2V0Qm91bmRpbmdCb3goIk1lZGlhQm94Iil8fGFvKX1nZXQgY3JvcEJveCgpe3JldHVybiBzaGFkb3codGhpcywiY3JvcEJveCIsdGhpcy5fZ2V0Qm91bmRpbmdCb3goIkNyb3BCb3giKXx8dGhpcy5tZWRpYUJveCl9Z2V0IHVzZXJVbml0KCl7Y29uc3QgZT10aGlzLnBhZ2VEaWN0LmdldCgiVXNlclVuaXQiKTtyZXR1cm4gc2hhZG93KHRoaXMsInVzZXJVbml0IiwibnVtYmVyIj09dHlwZW9mIGUmJmU+MD9lOjEpfWdldCB2aWV3KCl7Y29uc3R7Y3JvcEJveDplLG1lZGlhQm94OnR9PXRoaXM7aWYoZSE9PXQmJiFpc0FycmF5RXF1YWwoZSx0KSl7Y29uc3QgaT1VdGlsLmludGVyc2VjdChlLHQpO2lmKGkmJmlbMl0taVswXT4wJiZpWzNdLWlbMV0+MClyZXR1cm4gc2hhZG93KHRoaXMsInZpZXciLGkpO3dhcm4oIkVtcHR5IC9Dcm9wQm94IGFuZCAvTWVkaWFCb3ggaW50ZXJzZWN0aW9uLiIpfXJldHVybiBzaGFkb3codGhpcywidmlldyIsdCl9Z2V0IHJvdGF0ZSgpe2xldCBlPXRoaXMuX2dldEluaGVyaXRhYmxlUHJvcGVydHkoIlJvdGF0ZSIpfHwwO2UlOTAhPTA/ZT0wOmU+PTM2MD9lJT0zNjA6ZTwwJiYoZT0oZSUzNjArMzYwKSUzNjApO3JldHVybiBzaGFkb3codGhpcywicm90YXRlIixlKX1fb25TdWJTdHJlYW1FcnJvcihlLHQpe2lmKCF0aGlzLmV2YWx1YXRvck9wdGlvbnMuaWdub3JlRXJyb3JzKXRocm93IGU7d2FybihgZ2V0Q29udGVudFN0cmVhbSAtIGlnbm9yaW5nIHN1Yi1zdHJlYW0gKCR7dH0pOiAiJHtlfSIuYCl9Z2V0Q29udGVudFN0cmVhbSgpe3JldHVybiB0aGlzLnBkZk1hbmFnZXIuZW5zdXJlKHRoaXMsImNvbnRlbnQiKS50aGVuKChlPT5lIGluc3RhbmNlb2YgQmFzZVN0cmVhbT9lOkFycmF5LmlzQXJyYXkoZSk/bmV3IFN0cmVhbXNTZXF1ZW5jZVN0cmVhbShlLHRoaXMuX29uU3ViU3RyZWFtRXJyb3IuYmluZCh0aGlzKSk6bmV3IE51bGxTdHJlYW0pKX1nZXQgeGZhRGF0YSgpe3JldHVybiBzaGFkb3codGhpcywieGZhRGF0YSIsdGhpcy54ZmFGYWN0b3J5P3tiYm94OnRoaXMueGZhRmFjdG9yeS5nZXRCb3VuZGluZ0JveCh0aGlzLnBhZ2VJbmRleCl9Om51bGwpfWFzeW5jI1ooZSx0LGkpe2NvbnN0IGE9W107Zm9yKGNvbnN0IHIgb2YgZSlpZihyLmlkKXtjb25zdCBlPVJlZi5mcm9tU3RyaW5nKHIuaWQpO2lmKCFlKXt3YXJuKGBBIG5vbi1saW5rZWQgYW5ub3RhdGlvbiBjYW5ub3QgYmUgbW9kaWZpZWQ6ICR7ci5pZH1gKTtjb250aW51ZX1pZihyLmRlbGV0ZWQpe3QucHV0KGUsZSk7aWYoci5wb3B1cFJlZil7Y29uc3QgZT1SZWYuZnJvbVN0cmluZyhyLnBvcHVwUmVmKTtlJiZ0LnB1dChlLGUpfWNvbnRpbnVlfWk/LnB1dChlKTtyLnJlZj1lO2EucHVzaCh0aGlzLnhyZWYuZmV0Y2hBc3luYyhlKS50aGVuKChlPT57ZSBpbnN0YW5jZW9mIERpY3QmJihyLm9sZEFubm90YXRpb249ZS5jbG9uZSgpKX0pLCgoKT0+e3dhcm4oYENhbm5vdCBmZXRjaCBcYG9sZEFubm90YXRpb25cYCBmb3I6ICR7ZX0uYCl9KSkpO2RlbGV0ZSByLmlkfWF3YWl0IFByb21pc2UuYWxsKGEpfWFzeW5jIHNhdmVOZXdBbm5vdGF0aW9ucyhlLHQsaSxhLHIpe2lmKHRoaXMueGZhRmFjdG9yeSl0aHJvdyBuZXcgRXJyb3IoIlhGQTogQ2Fubm90IHNhdmUgbmV3IGFubm90YXRpb25zLiIpO2NvbnN0IHM9bmV3IFBhcnRpYWxFdmFsdWF0b3Ioe3hyZWY6dGhpcy54cmVmLGhhbmRsZXI6ZSxwYWdlSW5kZXg6dGhpcy5wYWdlSW5kZXgsaWRGYWN0b3J5OnRoaXMuX2xvY2FsSWRGYWN0b3J5LGZvbnRDYWNoZTp0aGlzLmZvbnRDYWNoZSxidWlsdEluQ01hcENhY2hlOnRoaXMuYnVpbHRJbkNNYXBDYWNoZSxzdGFuZGFyZEZvbnREYXRhQ2FjaGU6dGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGUsZ2xvYmFsSW1hZ2VDYWNoZTp0aGlzLmdsb2JhbEltYWdlQ2FjaGUsc3lzdGVtRm9udENhY2hlOnRoaXMuc3lzdGVtRm9udENhY2hlLG9wdGlvbnM6dGhpcy5ldmFsdWF0b3JPcHRpb25zfSksbj1uZXcgUmVmU2V0Q2FjaGUsbz1uZXcgUmVmU2V0O2F3YWl0IHRoaXMuI1ooaSxuLG8pO2NvbnN0IGc9dGhpcy5wYWdlRGljdCxjPXRoaXMuYW5ub3RhdGlvbnMuZmlsdGVyKChlPT4hKGUgaW5zdGFuY2VvZiBSZWYmJm4uaGFzKGUpKSkpLGw9YXdhaXQgQW5ub3RhdGlvbkZhY3Rvcnkuc2F2ZU5ld0Fubm90YXRpb25zKHMsdCxpLGEscik7Zm9yKGNvbnN0e3JlZjplfW9mIGwuYW5ub3RhdGlvbnMpZSBpbnN0YW5jZW9mIFJlZiYmIW8uaGFzKGUpJiZjLnB1c2goZSk7Y29uc3QgaD1nLmNsb25lKCk7aC5zZXQoIkFubm90cyIsYyk7ci5wdXQodGhpcy5yZWYse2RhdGE6aH0pO2Zvcihjb25zdCBlIG9mIG4pci5wdXQoZSx7ZGF0YTpudWxsfSl9c2F2ZShlLHQsaSxhKXtjb25zdCByPW5ldyBQYXJ0aWFsRXZhbHVhdG9yKHt4cmVmOnRoaXMueHJlZixoYW5kbGVyOmUscGFnZUluZGV4OnRoaXMucGFnZUluZGV4LGlkRmFjdG9yeTp0aGlzLl9sb2NhbElkRmFjdG9yeSxmb250Q2FjaGU6dGhpcy5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTp0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUsc3RhbmRhcmRGb250RGF0YUNhY2hlOnRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlLGdsb2JhbEltYWdlQ2FjaGU6dGhpcy5nbG9iYWxJbWFnZUNhY2hlLHN5c3RlbUZvbnRDYWNoZTp0aGlzLnN5c3RlbUZvbnRDYWNoZSxvcHRpb25zOnRoaXMuZXZhbHVhdG9yT3B0aW9uc30pO3JldHVybiB0aGlzLl9wYXJzZWRBbm5vdGF0aW9ucy50aGVuKChmdW5jdGlvbihlKXtjb25zdCBzPVtdO2Zvcihjb25zdCBuIG9mIGUpcy5wdXNoKG4uc2F2ZShyLHQsaSxhKS5jYXRjaCgoZnVuY3Rpb24oZSl7d2Fybihgc2F2ZSAtIGlnbm9yaW5nIGFubm90YXRpb24gZGF0YSBkdXJpbmcgIiR7dC5uYW1lfSIgdGFzazogIiR7ZX0iLmApO3JldHVybiBudWxsfSkpKTtyZXR1cm4gUHJvbWlzZS5hbGwocyl9KSl9bG9hZFJlc291cmNlcyhlKXt0aGlzLnJlc291cmNlc1Byb21pc2V8fD10aGlzLnBkZk1hbmFnZXIuZW5zdXJlKHRoaXMsInJlc291cmNlcyIpO3JldHVybiB0aGlzLnJlc291cmNlc1Byb21pc2UudGhlbigoKCk9Pm5ldyBPYmplY3RMb2FkZXIodGhpcy5yZXNvdXJjZXMsZSx0aGlzLnhyZWYpLmxvYWQoKSkpfWdldE9wZXJhdG9yTGlzdCh7aGFuZGxlcjplLHNpbms6dCx0YXNrOmksaW50ZW50OmEsY2FjaGVLZXk6cixhbm5vdGF0aW9uU3RvcmFnZTpzPW51bGwsbW9kaWZpZWRJZHM6bj1udWxsfSl7Y29uc3Qgbz10aGlzLmdldENvbnRlbnRTdHJlYW0oKSxoPXRoaXMubG9hZFJlc291cmNlcyhbIkNvbG9yU3BhY2UiLCJFeHRHU3RhdGUiLCJGb250IiwiUGF0dGVybiIsIlByb3BlcnRpZXMiLCJTaGFkaW5nIiwiWE9iamVjdCJdKSx1PW5ldyBQYXJ0aWFsRXZhbHVhdG9yKHt4cmVmOnRoaXMueHJlZixoYW5kbGVyOmUscGFnZUluZGV4OnRoaXMucGFnZUluZGV4LGlkRmFjdG9yeTp0aGlzLl9sb2NhbElkRmFjdG9yeSxmb250Q2FjaGU6dGhpcy5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTp0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUsc3RhbmRhcmRGb250RGF0YUNhY2hlOnRoaXMuc3RhbmRhcmRGb250RGF0YUNhY2hlLGdsb2JhbEltYWdlQ2FjaGU6dGhpcy5nbG9iYWxJbWFnZUNhY2hlLHN5c3RlbUZvbnRDYWNoZTp0aGlzLnN5c3RlbUZvbnRDYWNoZSxvcHRpb25zOnRoaXMuZXZhbHVhdG9yT3B0aW9uc30pLGY9dGhpcy54ZmFGYWN0b3J5P251bGw6Z2V0TmV3QW5ub3RhdGlvbnNNYXAocykscD1mPy5nZXQodGhpcy5wYWdlSW5kZXgpO2xldCBtPVByb21pc2UucmVzb2x2ZShudWxsKSx5PW51bGw7aWYocCl7Y29uc3QgZT10aGlzLnBkZk1hbmFnZXIuZW5zdXJlRG9jKCJhbm5vdGF0aW9uR2xvYmFscyIpO2xldCB0O2NvbnN0IGE9bmV3IFNldDtmb3IoY29uc3R7Yml0bWFwSWQ6ZSxiaXRtYXA6dH1vZiBwKSFlfHx0fHxhLmhhcyhlKXx8YS5hZGQoZSk7Y29uc3R7aXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ6cn09dGhpcy5ldmFsdWF0b3JPcHRpb25zO2lmKGEuc2l6ZT4wKXtjb25zdCBlPXAuc2xpY2UoKTtmb3IoY29uc3RbdCxpXW9mIHMpdC5zdGFydHNXaXRoKGQpJiZpLmJpdG1hcCYmYS5oYXMoaS5iaXRtYXBJZCkmJmUucHVzaChpKTt0PUFubm90YXRpb25GYWN0b3J5LmdlbmVyYXRlSW1hZ2VzKGUsdGhpcy54cmVmLHIpfWVsc2UgdD1Bbm5vdGF0aW9uRmFjdG9yeS5nZW5lcmF0ZUltYWdlcyhwLHRoaXMueHJlZixyKTt5PW5ldyBSZWZTZXQ7bT1Qcm9taXNlLmFsbChbZSx0aGlzLiNaKHAseSxudWxsKV0pLnRoZW4oKChbZV0pPT5lP0Fubm90YXRpb25GYWN0b3J5LnByaW50TmV3QW5ub3RhdGlvbnMoZSx1LGkscCx0KTpudWxsKSl9Y29uc3Qgdz1Qcm9taXNlLmFsbChbbyxoXSkudGhlbigoKFtzXSk9Pntjb25zdCBuPW5ldyBPcGVyYXRvckxpc3QoYSx0KTtlLnNlbmQoIlN0YXJ0UmVuZGVyUGFnZSIse3RyYW5zcGFyZW5jeTp1Lmhhc0JsZW5kTW9kZXModGhpcy5yZXNvdXJjZXMsdGhpcy5ub25CbGVuZE1vZGVzU2V0KSxwYWdlSW5kZXg6dGhpcy5wYWdlSW5kZXgsY2FjaGVLZXk6cn0pO3JldHVybiB1LmdldE9wZXJhdG9yTGlzdCh7c3RyZWFtOnMsdGFzazppLHJlc291cmNlczp0aGlzLnJlc291cmNlcyxvcGVyYXRvckxpc3Q6bn0pLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIG59KSl9KSk7cmV0dXJuIFByb21pc2UuYWxsKFt3LHRoaXMuX3BhcnNlZEFubm90YXRpb25zLG1dKS50aGVuKChmdW5jdGlvbihbZSx0LHJdKXtpZihyKXt0PXQuZmlsdGVyKChlPT4hKGUucmVmJiZ5LmhhcyhlLnJlZikpKSk7Zm9yKGxldCBlPTAsaT1yLmxlbmd0aDtlPGk7ZSsrKXtjb25zdCBhPXJbZV07aWYoYS5yZWZUb1JlcGxhY2Upe2NvbnN0IHM9dC5maW5kSW5kZXgoKGU9PmUucmVmJiZpc1JlZnNFcXVhbChlLnJlZixhLnJlZlRvUmVwbGFjZSkpKTtpZihzPj0wKXt0LnNwbGljZShzLDEsYSk7ci5zcGxpY2UoZS0tLDEpO2ktLX19fXQ9dC5jb25jYXQocil9aWYoMD09PXQubGVuZ3RofHxhJlEpe2UuZmx1c2goITApO3JldHVybntsZW5ndGg6ZS50b3RhbExlbmd0aH19Y29uc3Qgbz0hIShhJkMpLGg9ISEoYSZFKSxkPSEhKGEmZyksZj0hIShhJmMpLHA9ISEoYSZsKSxtPVtdO2Zvcihjb25zdCBlIG9mIHQpKGR8fGYmJmUubXVzdEJlVmlld2VkKHMsbykmJmUubXVzdEJlVmlld2VkV2hlbkVkaXRpbmcoaCxuKXx8cCYmZS5tdXN0QmVQcmludGVkKHMpKSYmbS5wdXNoKGUuZ2V0T3BlcmF0b3JMaXN0KHUsaSxhLHMpLmNhdGNoKChmdW5jdGlvbihlKXt3YXJuKGBnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBhbm5vdGF0aW9uIGRhdGEgZHVyaW5nICIke2kubmFtZX0iIHRhc2s6ICIke2V9Ii5gKTtyZXR1cm57b3BMaXN0Om51bGwsc2VwYXJhdGVGb3JtOiExLHNlcGFyYXRlQ2FudmFzOiExfX0pKSk7cmV0dXJuIFByb21pc2UuYWxsKG0pLnRoZW4oKGZ1bmN0aW9uKHQpe2xldCBpPSExLGE9ITE7Zm9yKGNvbnN0e29wTGlzdDpyLHNlcGFyYXRlRm9ybTpzLHNlcGFyYXRlQ2FudmFzOm59b2YgdCl7ZS5hZGRPcExpc3Qocik7aXx8PXM7YXx8PW59ZS5mbHVzaCghMCx7Zm9ybTppLGNhbnZhczphfSk7cmV0dXJue2xlbmd0aDplLnRvdGFsTGVuZ3RofX0pKX0pKX1hc3luYyBleHRyYWN0VGV4dENvbnRlbnQoe2hhbmRsZXI6ZSx0YXNrOnQsaW5jbHVkZU1hcmtlZENvbnRlbnQ6aSxkaXNhYmxlTm9ybWFsaXphdGlvbjphLHNpbms6cn0pe2NvbnN0IHM9dGhpcy5nZXRDb250ZW50U3RyZWFtKCksbj10aGlzLmxvYWRSZXNvdXJjZXMoWyJFeHRHU3RhdGUiLCJGb250IiwiUHJvcGVydGllcyIsIlhPYmplY3QiXSksbz10aGlzLnBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZygibGFuZyIpLFtnLCxjXT1hd2FpdCBQcm9taXNlLmFsbChbcyxuLG9dKTtyZXR1cm4gbmV3IFBhcnRpYWxFdmFsdWF0b3Ioe3hyZWY6dGhpcy54cmVmLGhhbmRsZXI6ZSxwYWdlSW5kZXg6dGhpcy5wYWdlSW5kZXgsaWRGYWN0b3J5OnRoaXMuX2xvY2FsSWRGYWN0b3J5LGZvbnRDYWNoZTp0aGlzLmZvbnRDYWNoZSxidWlsdEluQ01hcENhY2hlOnRoaXMuYnVpbHRJbkNNYXBDYWNoZSxzdGFuZGFyZEZvbnREYXRhQ2FjaGU6dGhpcy5zdGFuZGFyZEZvbnREYXRhQ2FjaGUsZ2xvYmFsSW1hZ2VDYWNoZTp0aGlzLmdsb2JhbEltYWdlQ2FjaGUsc3lzdGVtRm9udENhY2hlOnRoaXMuc3lzdGVtRm9udENhY2hlLG9wdGlvbnM6dGhpcy5ldmFsdWF0b3JPcHRpb25zfSkuZ2V0VGV4dENvbnRlbnQoe3N0cmVhbTpnLHRhc2s6dCxyZXNvdXJjZXM6dGhpcy5yZXNvdXJjZXMsaW5jbHVkZU1hcmtlZENvbnRlbnQ6aSxkaXNhYmxlTm9ybWFsaXphdGlvbjphLHNpbms6cix2aWV3Qm94OnRoaXMudmlldyxsYW5nOmN9KX1hc3luYyBnZXRTdHJ1Y3RUcmVlKCl7Y29uc3QgZT1hd2FpdCB0aGlzLnBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZygic3RydWN0VHJlZVJvb3QiKTtpZighZSlyZXR1cm4gbnVsbDthd2FpdCB0aGlzLl9wYXJzZWRBbm5vdGF0aW9ucztjb25zdCB0PWF3YWl0IHRoaXMucGRmTWFuYWdlci5lbnN1cmUodGhpcywiX3BhcnNlU3RydWN0VHJlZSIsW2VdKTtyZXR1cm4gdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZSh0LCJzZXJpYWxpemFibGUiKX1fcGFyc2VTdHJ1Y3RUcmVlKGUpe2NvbnN0IHQ9bmV3IFN0cnVjdFRyZWVQYWdlKGUsdGhpcy5wYWdlRGljdCk7dC5wYXJzZSh0aGlzLnJlZik7cmV0dXJuIHR9YXN5bmMgZ2V0QW5ub3RhdGlvbnNEYXRhKGUsdCxpKXtjb25zdCBhPWF3YWl0IHRoaXMuX3BhcnNlZEFubm90YXRpb25zO2lmKDA9PT1hLmxlbmd0aClyZXR1cm4gYTtjb25zdCByPVtdLHM9W107bGV0IG47Y29uc3Qgbz0hIShpJmcpLGg9ISEoaSZjKSxDPSEhKGkmbCk7Zm9yKGNvbnN0IGkgb2YgYSl7Y29uc3QgYT1vfHxoJiZpLnZpZXdhYmxlOyhhfHxDJiZpLnByaW50YWJsZSkmJnIucHVzaChpLmRhdGEpO2lmKGkuaGFzVGV4dENvbnRlbnQmJmEpe258fD1uZXcgUGFydGlhbEV2YWx1YXRvcih7eHJlZjp0aGlzLnhyZWYsaGFuZGxlcjplLHBhZ2VJbmRleDp0aGlzLnBhZ2VJbmRleCxpZEZhY3Rvcnk6dGhpcy5fbG9jYWxJZEZhY3RvcnksZm9udENhY2hlOnRoaXMuZm9udENhY2hlLGJ1aWx0SW5DTWFwQ2FjaGU6dGhpcy5idWlsdEluQ01hcENhY2hlLHN0YW5kYXJkRm9udERhdGFDYWNoZTp0aGlzLnN0YW5kYXJkRm9udERhdGFDYWNoZSxnbG9iYWxJbWFnZUNhY2hlOnRoaXMuZ2xvYmFsSW1hZ2VDYWNoZSxzeXN0ZW1Gb250Q2FjaGU6dGhpcy5zeXN0ZW1Gb250Q2FjaGUsb3B0aW9uczp0aGlzLmV2YWx1YXRvck9wdGlvbnN9KTtzLnB1c2goaS5leHRyYWN0VGV4dENvbnRlbnQobix0LFstMS8wLC0xLzAsMS8wLDEvMF0pLmNhdGNoKChmdW5jdGlvbihlKXt3YXJuKGBnZXRBbm5vdGF0aW9uc0RhdGEgLSBpZ25vcmluZyB0ZXh0Q29udGVudCBkdXJpbmcgIiR7dC5uYW1lfSIgdGFzazogIiR7ZX0iLmApfSkpKX19YXdhaXQgUHJvbWlzZS5hbGwocyk7cmV0dXJuIHJ9Z2V0IGFubm90YXRpb25zKCl7Y29uc3QgZT10aGlzLl9nZXRJbmhlcml0YWJsZVByb3BlcnR5KCJBbm5vdHMiKTtyZXR1cm4gc2hhZG93KHRoaXMsImFubm90YXRpb25zIixBcnJheS5pc0FycmF5KGUpP2U6W10pfWdldCBfcGFyc2VkQW5ub3RhdGlvbnMoKXtyZXR1cm4gc2hhZG93KHRoaXMsIl9wYXJzZWRBbm5vdGF0aW9ucyIsdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZSh0aGlzLCJhbm5vdGF0aW9ucyIpLnRoZW4oKGFzeW5jIGU9PntpZigwPT09ZS5sZW5ndGgpcmV0dXJuIGU7Y29uc3RbdCxpXT1hd2FpdCBQcm9taXNlLmFsbChbdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZURvYygiYW5ub3RhdGlvbkdsb2JhbHMiKSx0aGlzLnBkZk1hbmFnZXIuZW5zdXJlRG9jKCJmaWVsZE9iamVjdHMiKV0pO2lmKCF0KXJldHVybltdO2NvbnN0IGE9aT8ub3JwaGFuRmllbGRzLHI9W107Zm9yKGNvbnN0IGkgb2YgZSlyLnB1c2goQW5ub3RhdGlvbkZhY3RvcnkuY3JlYXRlKHRoaXMueHJlZixpLHQsdGhpcy5fbG9jYWxJZEZhY3RvcnksITEsYSx0aGlzLnJlZikuY2F0Y2goKGZ1bmN0aW9uKGUpe3dhcm4oYF9wYXJzZWRBbm5vdGF0aW9uczogIiR7ZX0iLmApO3JldHVybiBudWxsfSkpKTtjb25zdCBzPVtdO2xldCBuLG87Zm9yKGNvbnN0IGUgb2YgYXdhaXQgUHJvbWlzZS5hbGwocikpZSYmKGUgaW5zdGFuY2VvZiBXaWRnZXRBbm5vdGF0aW9uPyhvfHw9W10pLnB1c2goZSk6ZSBpbnN0YW5jZW9mIFBvcHVwQW5ub3RhdGlvbj8obnx8PVtdKS5wdXNoKGUpOnMucHVzaChlKSk7byYmcy5wdXNoKC4uLm8pO24mJnMucHVzaCguLi5uKTtyZXR1cm4gc30pKSl9Z2V0IGpzQWN0aW9ucygpe3JldHVybiBzaGFkb3codGhpcywianNBY3Rpb25zIixjb2xsZWN0QWN0aW9ucyh0aGlzLnhyZWYsdGhpcy5wYWdlRGljdCx5QSkpfX1jb25zdCBybz1uZXcgVWludDhBcnJheShbMzcsODAsNjgsNzAsNDVdKSxzbz1uZXcgVWludDhBcnJheShbMTE1LDExNiw5NywxMTQsMTE2LDEyMCwxMTQsMTAxLDEwMl0pLG5vPW5ldyBVaW50OEFycmF5KFsxMDEsMTEwLDEwMCwxMTEsOTgsMTA2XSk7ZnVuY3Rpb24gZmluZChlLHQsaT0xMDI0LGE9ITEpe2NvbnN0IHI9dC5sZW5ndGgscz1lLnBlZWtCeXRlcyhpKSxuPXMubGVuZ3RoLXI7aWYobjw9MClyZXR1cm4hMTtpZihhKXtjb25zdCBpPXItMTtsZXQgYT1zLmxlbmd0aC0xO2Zvcig7YT49aTspe2xldCBuPTA7Zm9yKDtuPHImJnNbYS1uXT09PXRbaS1uXTspbisrO2lmKG4+PXIpe2UucG9zKz1hLWk7cmV0dXJuITB9YS0tfX1lbHNle2xldCBpPTA7Zm9yKDtpPD1uOyl7bGV0IGE9MDtmb3IoO2E8ciYmc1tpK2FdPT09dFthXTspYSsrO2lmKGE+PXIpe2UucG9zKz1pO3JldHVybiEwfWkrK319cmV0dXJuITF9Y2xhc3MgUERGRG9jdW1lbnR7Y29uc3RydWN0b3IoZSx0KXtpZih0Lmxlbmd0aDw9MCl0aHJvdyBuZXcgSW52YWxpZFBERkV4Y2VwdGlvbigiVGhlIFBERiBmaWxlIGlzIGVtcHR5LCBpLmUuIGl0cyBzaXplIGlzIHplcm8gYnl0ZXMuIik7dGhpcy5wZGZNYW5hZ2VyPWU7dGhpcy5zdHJlYW09dDt0aGlzLnhyZWY9bmV3IFhSZWYodCxlKTt0aGlzLl9wYWdlUHJvbWlzZXM9bmV3IE1hcDt0aGlzLl92ZXJzaW9uPW51bGw7Y29uc3QgaT17Zm9udDowfTt0aGlzLl9nbG9iYWxJZEZhY3Rvcnk9Y2xhc3N7c3RhdGljIGdldERvY0lkKCl7cmV0dXJuYGdfJHtlLmRvY0lkfWB9c3RhdGljIGNyZWF0ZUZvbnRJZCgpe3JldHVybiJmIisgKytpLmZvbnR9c3RhdGljIGNyZWF0ZU9iaklkKCl7dW5yZWFjaGFibGUoIkFic3RyYWN0IG1ldGhvZCBgY3JlYXRlT2JqSWRgIGNhbGxlZC4iKX1zdGF0aWMgZ2V0UGFnZU9iaklkKCl7dW5yZWFjaGFibGUoIkFic3RyYWN0IG1ldGhvZCBgZ2V0UGFnZU9iaklkYCBjYWxsZWQuIil9fX1wYXJzZShlKXt0aGlzLnhyZWYucGFyc2UoZSk7dGhpcy5jYXRhbG9nPW5ldyBDYXRhbG9nKHRoaXMucGRmTWFuYWdlcix0aGlzLnhyZWYpfWdldCBsaW5lYXJpemF0aW9uKCl7bGV0IGU9bnVsbDt0cnl7ZT1MaW5lYXJpemF0aW9uLmNyZWF0ZSh0aGlzLnN0cmVhbSl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIE1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7aW5mbyhlKX1yZXR1cm4gc2hhZG93KHRoaXMsImxpbmVhcml6YXRpb24iLGUpfWdldCBzdGFydFhSZWYoKXtjb25zdCBlPXRoaXMuc3RyZWFtO2xldCB0PTA7aWYodGhpcy5saW5lYXJpemF0aW9uKXtlLnJlc2V0KCk7aWYoZmluZChlLG5vKSl7ZS5za2lwKDYpO2xldCBpPWUucGVla0J5dGUoKTtmb3IoO2lzV2hpdGVTcGFjZShpKTspe2UucG9zKys7aT1lLnBlZWtCeXRlKCl9dD1lLnBvcy1lLnN0YXJ0fX1lbHNle2NvbnN0IGk9MTAyNCxhPXNvLmxlbmd0aDtsZXQgcj0hMSxzPWUuZW5kO2Zvcig7IXImJnM+MDspe3MtPWktYTtzPDAmJihzPTApO2UucG9zPXM7cj1maW5kKGUsc28saSwhMCl9aWYocil7ZS5za2lwKDkpO2xldCBpO2Rve2k9ZS5nZXRCeXRlKCl9d2hpbGUoaXNXaGl0ZVNwYWNlKGkpKTtsZXQgYT0iIjtmb3IoO2k+PTMyJiZpPD01Nzspe2ErPVN0cmluZy5mcm9tQ2hhckNvZGUoaSk7aT1lLmdldEJ5dGUoKX10PXBhcnNlSW50KGEsMTApO2lzTmFOKHQpJiYodD0wKX19cmV0dXJuIHNoYWRvdyh0aGlzLCJzdGFydFhSZWYiLHQpfWNoZWNrSGVhZGVyKCl7Y29uc3QgZT10aGlzLnN0cmVhbTtlLnJlc2V0KCk7aWYoIWZpbmQoZSxybykpcmV0dXJuO2UubW92ZVN0YXJ0KCk7ZS5za2lwKHJvLmxlbmd0aCk7bGV0IHQsaT0iIjtmb3IoOyh0PWUuZ2V0Qnl0ZSgpKT4zMiYmaS5sZW5ndGg8NzspaSs9U3RyaW5nLmZyb21DaGFyQ29kZSh0KTttdC50ZXN0KGkpP3RoaXMuX3ZlcnNpb249aTp3YXJuKGBJbnZhbGlkIFBERiBoZWFkZXIgdmVyc2lvbjogJHtpfWApfXBhcnNlU3RhcnRYUmVmKCl7dGhpcy54cmVmLnNldFN0YXJ0WFJlZih0aGlzLnN0YXJ0WFJlZil9Z2V0IG51bVBhZ2VzKCl7bGV0IGU9MDtlPXRoaXMuY2F0YWxvZy5oYXNBY3R1YWxOdW1QYWdlcz90aGlzLmNhdGFsb2cubnVtUGFnZXM6dGhpcy54ZmFGYWN0b3J5P3RoaXMueGZhRmFjdG9yeS5nZXROdW1QYWdlcygpOnRoaXMubGluZWFyaXphdGlvbj90aGlzLmxpbmVhcml6YXRpb24ubnVtUGFnZXM6dGhpcy5jYXRhbG9nLm51bVBhZ2VzO3JldHVybiBzaGFkb3codGhpcywibnVtUGFnZXMiLGUpfV9oYXNPbmx5RG9jdW1lbnRTaWduYXR1cmVzKGUsdD0wKXtyZXR1cm4hIUFycmF5LmlzQXJyYXkoZSkmJmUuZXZlcnkoKGU9PntpZighKChlPXRoaXMueHJlZi5mZXRjaElmUmVmKGUpKWluc3RhbmNlb2YgRGljdCkpcmV0dXJuITE7aWYoZS5oYXMoIktpZHMiKSl7aWYoKyt0PjEwKXt3YXJuKCJfaGFzT25seURvY3VtZW50U2lnbmF0dXJlczogbWF4aW11bSByZWN1cnNpb24gZGVwdGggcmVhY2hlZCIpO3JldHVybiExfXJldHVybiB0aGlzLl9oYXNPbmx5RG9jdW1lbnRTaWduYXR1cmVzKGUuZ2V0KCJLaWRzIiksdCl9Y29uc3QgaT1pc05hbWUoZS5nZXQoIkZUIiksIlNpZyIpLGE9ZS5nZXQoIlJlY3QiKSxyPUFycmF5LmlzQXJyYXkoYSkmJmEuZXZlcnkoKGU9PjA9PT1lKSk7cmV0dXJuIGkmJnJ9KSl9Z2V0IF94ZmFTdHJlYW1zKCl7Y29uc3QgZT10aGlzLmNhdGFsb2cuYWNyb0Zvcm07aWYoIWUpcmV0dXJuIG51bGw7Y29uc3QgdD1lLmdldCgiWEZBIiksaT17InhkcDp4ZHAiOiIiLHRlbXBsYXRlOiIiLGRhdGFzZXRzOiIiLGNvbmZpZzoiIixjb25uZWN0aW9uU2V0OiIiLGxvY2FsZVNldDoiIixzdHlsZXNoZWV0OiIiLCIveGRwOnhkcCI6IiJ9O2lmKHQgaW5zdGFuY2VvZiBCYXNlU3RyZWFtJiYhdC5pc0VtcHR5KXtpWyJ4ZHA6eGRwIl09dDtyZXR1cm4gaX1pZighQXJyYXkuaXNBcnJheSh0KXx8MD09PXQubGVuZ3RoKXJldHVybiBudWxsO2ZvcihsZXQgZT0wLGE9dC5sZW5ndGg7ZTxhO2UrPTIpe2xldCByO3I9MD09PWU/InhkcDp4ZHAiOmU9PT1hLTI/Ii94ZHA6eGRwIjp0W2VdO2lmKCFpLmhhc093blByb3BlcnR5KHIpKWNvbnRpbnVlO2NvbnN0IHM9dGhpcy54cmVmLmZldGNoSWZSZWYodFtlKzFdKTtzIGluc3RhbmNlb2YgQmFzZVN0cmVhbSYmIXMuaXNFbXB0eSYmKGlbcl09cyl9cmV0dXJuIGl9Z2V0IHhmYURhdGFzZXRzKCl7Y29uc3QgZT10aGlzLl94ZmFTdHJlYW1zO2lmKCFlKXJldHVybiBzaGFkb3codGhpcywieGZhRGF0YXNldHMiLG51bGwpO2Zvcihjb25zdCB0IG9mWyJkYXRhc2V0cyIsInhkcDp4ZHAiXSl7Y29uc3QgaT1lW3RdO2lmKGkpdHJ5e2NvbnN0IGU9c3RyaW5nVG9VVEY4U3RyaW5nKGkuZ2V0U3RyaW5nKCkpO3JldHVybiBzaGFkb3codGhpcywieGZhRGF0YXNldHMiLG5ldyBEYXRhc2V0UmVhZGVyKHtbdF06ZX0pKX1jYXRjaHt3YXJuKCJYRkEgLSBJbnZhbGlkIHV0Zi04IHN0cmluZy4iKTticmVha319cmV0dXJuIHNoYWRvdyh0aGlzLCJ4ZmFEYXRhc2V0cyIsbnVsbCl9Z2V0IHhmYURhdGEoKXtjb25zdCBlPXRoaXMuX3hmYVN0cmVhbXM7aWYoIWUpcmV0dXJuIG51bGw7Y29uc3QgdD1PYmplY3QuY3JlYXRlKG51bGwpO2Zvcihjb25zdFtpLGFdb2YgT2JqZWN0LmVudHJpZXMoZSkpaWYoYSl0cnl7dFtpXT1zdHJpbmdUb1VURjhTdHJpbmcoYS5nZXRTdHJpbmcoKSl9Y2F0Y2h7d2FybigiWEZBIC0gSW52YWxpZCB1dGYtOCBzdHJpbmcuIik7cmV0dXJuIG51bGx9cmV0dXJuIHR9Z2V0IHhmYUZhY3RvcnkoKXtsZXQgZTt0aGlzLnBkZk1hbmFnZXIuZW5hYmxlWGZhJiZ0aGlzLmNhdGFsb2cubmVlZHNSZW5kZXJpbmcmJnRoaXMuZm9ybUluZm8uaGFzWGZhJiYhdGhpcy5mb3JtSW5mby5oYXNBY3JvRm9ybSYmKGU9dGhpcy54ZmFEYXRhKTtyZXR1cm4gc2hhZG93KHRoaXMsInhmYUZhY3RvcnkiLGU/bmV3IFhGQUZhY3RvcnkoZSk6bnVsbCl9Z2V0IGlzUHVyZVhmYSgpe3JldHVybiEhdGhpcy54ZmFGYWN0b3J5JiZ0aGlzLnhmYUZhY3RvcnkuaXNWYWxpZCgpfWdldCBodG1sRm9yWGZhKCl7cmV0dXJuIHRoaXMueGZhRmFjdG9yeT90aGlzLnhmYUZhY3RvcnkuZ2V0UGFnZXMoKTpudWxsfWFzeW5jIGxvYWRYZmFJbWFnZXMoKXtjb25zdCBlPWF3YWl0IHRoaXMucGRmTWFuYWdlci5lbnN1cmVDYXRhbG9nKCJ4ZmFJbWFnZXMiKTtpZighZSlyZXR1cm47Y29uc3QgdD1lLmdldEtleXMoKSxpPW5ldyBPYmplY3RMb2FkZXIoZSx0LHRoaXMueHJlZik7YXdhaXQgaS5sb2FkKCk7Y29uc3QgYT1uZXcgTWFwO2Zvcihjb25zdCBpIG9mIHQpe2NvbnN0IHQ9ZS5nZXQoaSk7dCBpbnN0YW5jZW9mIEJhc2VTdHJlYW0mJmEuc2V0KGksdC5nZXRCeXRlcygpKX10aGlzLnhmYUZhY3Rvcnkuc2V0SW1hZ2VzKGEpfWFzeW5jIGxvYWRYZmFGb250cyhlLHQpe2NvbnN0IGk9YXdhaXQgdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coImFjcm9Gb3JtIik7aWYoIWkpcmV0dXJuO2NvbnN0IGE9YXdhaXQgaS5nZXRBc3luYygiRFIiKTtpZighKGEgaW5zdGFuY2VvZiBEaWN0KSlyZXR1cm47Y29uc3Qgcj1uZXcgT2JqZWN0TG9hZGVyKGEsWyJGb250Il0sdGhpcy54cmVmKTthd2FpdCByLmxvYWQoKTtjb25zdCBzPWEuZ2V0KCJGb250Iik7aWYoIShzIGluc3RhbmNlb2YgRGljdCkpcmV0dXJuO2NvbnN0IG49T2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKG51bGwpLHRoaXMucGRmTWFuYWdlci5ldmFsdWF0b3JPcHRpb25zKTtuLnVzZVN5c3RlbUZvbnRzPSExO2NvbnN0IG89bmV3IFBhcnRpYWxFdmFsdWF0b3Ioe3hyZWY6dGhpcy54cmVmLGhhbmRsZXI6ZSxwYWdlSW5kZXg6LTEsaWRGYWN0b3J5OnRoaXMuX2dsb2JhbElkRmFjdG9yeSxmb250Q2FjaGU6dGhpcy5jYXRhbG9nLmZvbnRDYWNoZSxidWlsdEluQ01hcENhY2hlOnRoaXMuY2F0YWxvZy5idWlsdEluQ01hcENhY2hlLHN0YW5kYXJkRm9udERhdGFDYWNoZTp0aGlzLmNhdGFsb2cuc3RhbmRhcmRGb250RGF0YUNhY2hlLG9wdGlvbnM6bn0pLGc9bmV3IE9wZXJhdG9yTGlzdCxjPVtdLGw9e2dldCBmb250KCl7cmV0dXJuIGMuYXQoLTEpfSxzZXQgZm9udChlKXtjLnB1c2goZSl9LGNsb25lKCl7cmV0dXJuIHRoaXN9fSxoPVtdO2Zvcihjb25zdFtlLGldb2Ygcyl7Y29uc3Qgcj1pLmdldCgiRm9udERlc2NyaXB0b3IiKTtpZighKHIgaW5zdGFuY2VvZiBEaWN0KSljb250aW51ZTtsZXQgcz1yLmdldCgiRm9udEZhbWlseSIpO3M9cy5yZXBsYWNlQWxsKC9bIF0rKFxkKS9nLCIkMSIpO2NvbnN0IG49e2ZvbnRGYW1pbHk6cyxmb250V2VpZ2h0OnIuZ2V0KCJGb250V2VpZ2h0IiksaXRhbGljQW5nbGU6LXIuZ2V0KCJJdGFsaWNBbmdsZSIpfTt2YWxpZGF0ZUNTU0ZvbnQobikmJmgucHVzaChvLmhhbmRsZVNldEZvbnQoYSxbTmFtZS5nZXQoZSksMV0sbnVsbCxnLHQsbCxudWxsLG4pLmNhdGNoKChmdW5jdGlvbihlKXt3YXJuKGBsb2FkWGZhRm9udHM6ICIke2V9Ii5gKTtyZXR1cm4gbnVsbH0pKSl9YXdhaXQgUHJvbWlzZS5hbGwoaCk7Y29uc3QgQz10aGlzLnhmYUZhY3Rvcnkuc2V0Rm9udHMoYyk7aWYoIUMpcmV0dXJuO24uaWdub3JlRXJyb3JzPSEwO2gubGVuZ3RoPTA7Yy5sZW5ndGg9MDtjb25zdCBRPW5ldyBTZXQ7Zm9yKGNvbnN0IGUgb2YgQylnZXRYZmFGb250TmFtZShgJHtlfS1SZWd1bGFyYCl8fFEuYWRkKGUpO1Euc2l6ZSYmQy5wdXNoKCJQZGZKUy1GYWxsYmFjayIpO2Zvcihjb25zdCBlIG9mIEMpaWYoIVEuaGFzKGUpKWZvcihjb25zdCBpIG9mW3tuYW1lOiJSZWd1bGFyIixmb250V2VpZ2h0OjQwMCxpdGFsaWNBbmdsZTowfSx7bmFtZToiQm9sZCIsZm9udFdlaWdodDo3MDAsaXRhbGljQW5nbGU6MH0se25hbWU6Ikl0YWxpYyIsZm9udFdlaWdodDo0MDAsaXRhbGljQW5nbGU6MTJ9LHtuYW1lOiJCb2xkSXRhbGljIixmb250V2VpZ2h0OjcwMCxpdGFsaWNBbmdsZToxMn1dKXtjb25zdCByPWAke2V9LSR7aS5uYW1lfWAscz1nZXRYZmFGb250RGljdChyKTtoLnB1c2goby5oYW5kbGVTZXRGb250KGEsW05hbWUuZ2V0KHIpLDFdLG51bGwsZyx0LGwscyx7Zm9udEZhbWlseTplLGZvbnRXZWlnaHQ6aS5mb250V2VpZ2h0LGl0YWxpY0FuZ2xlOmkuaXRhbGljQW5nbGV9KS5jYXRjaCgoZnVuY3Rpb24oZSl7d2FybihgbG9hZFhmYUZvbnRzOiAiJHtlfSIuYCk7cmV0dXJuIG51bGx9KSkpfWF3YWl0IFByb21pc2UuYWxsKGgpO3RoaXMueGZhRmFjdG9yeS5hcHBlbmRGb250cyhjLFEpfWFzeW5jIHNlcmlhbGl6ZVhmYURhdGEoZSl7cmV0dXJuIHRoaXMueGZhRmFjdG9yeT90aGlzLnhmYUZhY3Rvcnkuc2VyaWFsaXplRGF0YShlKTpudWxsfWdldCB2ZXJzaW9uKCl7cmV0dXJuIHRoaXMuY2F0YWxvZy52ZXJzaW9ufHx0aGlzLl92ZXJzaW9ufWdldCBmb3JtSW5mbygpe2NvbnN0IGU9e2hhc0ZpZWxkczohMSxoYXNBY3JvRm9ybTohMSxoYXNYZmE6ITEsaGFzU2lnbmF0dXJlczohMX0sdD10aGlzLmNhdGFsb2cuYWNyb0Zvcm07aWYoIXQpcmV0dXJuIHNoYWRvdyh0aGlzLCJmb3JtSW5mbyIsZSk7dHJ5e2NvbnN0IGk9dC5nZXQoIkZpZWxkcyIpLGE9QXJyYXkuaXNBcnJheShpKSYmaS5sZW5ndGg+MDtlLmhhc0ZpZWxkcz1hO2NvbnN0IHI9dC5nZXQoIlhGQSIpO2UuaGFzWGZhPUFycmF5LmlzQXJyYXkocikmJnIubGVuZ3RoPjB8fHIgaW5zdGFuY2VvZiBCYXNlU3RyZWFtJiYhci5pc0VtcHR5O2NvbnN0IHM9ISEoMSZ0LmdldCgiU2lnRmxhZ3MiKSksbj1zJiZ0aGlzLl9oYXNPbmx5RG9jdW1lbnRTaWduYXR1cmVzKGkpO2UuaGFzQWNyb0Zvcm09YSYmIW47ZS5oYXNTaWduYXR1cmVzPXN9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIE1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7d2FybihgQ2Fubm90IGZldGNoIGZvcm0gaW5mb3JtYXRpb246ICIke2V9Ii5gKX1yZXR1cm4gc2hhZG93KHRoaXMsImZvcm1JbmZvIixlKX1nZXQgZG9jdW1lbnRJbmZvKCl7Y29uc3QgZT17UERGRm9ybWF0VmVyc2lvbjp0aGlzLnZlcnNpb24sTGFuZ3VhZ2U6dGhpcy5jYXRhbG9nLmxhbmcsRW5jcnlwdEZpbHRlck5hbWU6dGhpcy54cmVmLmVuY3J5cHQ/dGhpcy54cmVmLmVuY3J5cHQuZmlsdGVyTmFtZTpudWxsLElzTGluZWFyaXplZDohIXRoaXMubGluZWFyaXphdGlvbixJc0Fjcm9Gb3JtUHJlc2VudDp0aGlzLmZvcm1JbmZvLmhhc0Fjcm9Gb3JtLElzWEZBUHJlc2VudDp0aGlzLmZvcm1JbmZvLmhhc1hmYSxJc0NvbGxlY3Rpb25QcmVzZW50OiEhdGhpcy5jYXRhbG9nLmNvbGxlY3Rpb24sSXNTaWduYXR1cmVzUHJlc2VudDp0aGlzLmZvcm1JbmZvLmhhc1NpZ25hdHVyZXN9O2xldCB0O3RyeXt0PXRoaXMueHJlZi50cmFpbGVyLmdldCgiSW5mbyIpfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBNaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlO2luZm8oIlRoZSBkb2N1bWVudCBpbmZvcm1hdGlvbiBkaWN0aW9uYXJ5IGlzIGludmFsaWQuIil9aWYoISh0IGluc3RhbmNlb2YgRGljdCkpcmV0dXJuIHNoYWRvdyh0aGlzLCJkb2N1bWVudEluZm8iLGUpO2Zvcihjb25zdCBpIG9mIHQuZ2V0S2V5cygpKXtjb25zdCBhPXQuZ2V0KGkpO3N3aXRjaChpKXtjYXNlIlRpdGxlIjpjYXNlIkF1dGhvciI6Y2FzZSJTdWJqZWN0IjpjYXNlIktleXdvcmRzIjpjYXNlIkNyZWF0b3IiOmNhc2UiUHJvZHVjZXIiOmNhc2UiQ3JlYXRpb25EYXRlIjpjYXNlIk1vZERhdGUiOmlmKCJzdHJpbmciPT10eXBlb2YgYSl7ZVtpXT1zdHJpbmdUb1BERlN0cmluZyhhKTtjb250aW51ZX1icmVhaztjYXNlIlRyYXBwZWQiOmlmKGEgaW5zdGFuY2VvZiBOYW1lKXtlW2ldPWE7Y29udGludWV9YnJlYWs7ZGVmYXVsdDpsZXQgdDtzd2l0Y2godHlwZW9mIGEpe2Nhc2Uic3RyaW5nIjp0PXN0cmluZ1RvUERGU3RyaW5nKGEpO2JyZWFrO2Nhc2UibnVtYmVyIjpjYXNlImJvb2xlYW4iOnQ9YTticmVhaztkZWZhdWx0OmEgaW5zdGFuY2VvZiBOYW1lJiYodD1hKX1pZih2b2lkIDA9PT10KXt3YXJuKGBCYWQgdmFsdWUsIGZvciBjdXN0b20ga2V5ICIke2l9IiwgaW4gSW5mbzogJHthfS5gKTtjb250aW51ZX1lLkN1c3RvbXx8KGUuQ3VzdG9tPU9iamVjdC5jcmVhdGUobnVsbCkpO2UuQ3VzdG9tW2ldPXQ7Y29udGludWV9d2FybihgQmFkIHZhbHVlLCBmb3Iga2V5ICIke2l9IiwgaW4gSW5mbzogJHthfS5gKX1yZXR1cm4gc2hhZG93KHRoaXMsImRvY3VtZW50SW5mbyIsZSl9Z2V0IGZpbmdlcnByaW50cygpe2NvbnN0IGU9IlwwIi5yZXBlYXQoMTYpO2Z1bmN0aW9uIHZhbGlkYXRlKHQpe3JldHVybiJzdHJpbmciPT10eXBlb2YgdCYmMTY9PT10Lmxlbmd0aCYmdCE9PWV9Y29uc3QgdD10aGlzLnhyZWYudHJhaWxlci5nZXQoIklEIik7bGV0IGksYTtpZihBcnJheS5pc0FycmF5KHQpJiZ2YWxpZGF0ZSh0WzBdKSl7aT1zdHJpbmdUb0J5dGVzKHRbMF0pO3RbMV0hPT10WzBdJiZ2YWxpZGF0ZSh0WzFdKSYmKGE9c3RyaW5nVG9CeXRlcyh0WzFdKSl9ZWxzZSBpPWVvKHRoaXMuc3RyZWFtLmdldEJ5dGVSYW5nZSgwLDEwMjQpLDAsMTAyNCk7cmV0dXJuIHNoYWRvdyh0aGlzLCJmaW5nZXJwcmludHMiLFt0b0hleFV0aWwoaSksYT90b0hleFV0aWwoYSk6bnVsbF0pfWFzeW5jIF9nZXRMaW5lYXJpemF0aW9uUGFnZShlKXtjb25zdHtjYXRhbG9nOnQsbGluZWFyaXphdGlvbjppLHhyZWY6YX09dGhpcyxyPVJlZi5nZXQoaS5vYmplY3ROdW1iZXJGaXJzdCwwKTt0cnl7Y29uc3QgZT1hd2FpdCBhLmZldGNoQXN5bmMocik7aWYoZSBpbnN0YW5jZW9mIERpY3Qpe2xldCBpPWUuZ2V0UmF3KCJUeXBlIik7aSBpbnN0YW5jZW9mIFJlZiYmKGk9YXdhaXQgYS5mZXRjaEFzeW5jKGkpKTtpZihpc05hbWUoaSwiUGFnZSIpfHwhZS5oYXMoIlR5cGUiKSYmIWUuaGFzKCJLaWRzIikmJmUuaGFzKCJDb250ZW50cyIpKXt0LnBhZ2VLaWRzQ291bnRDYWNoZS5oYXMocil8fHQucGFnZUtpZHNDb3VudENhY2hlLnB1dChyLDEpO3QucGFnZUluZGV4Q2FjaGUuaGFzKHIpfHx0LnBhZ2VJbmRleENhY2hlLnB1dChyLDApO3JldHVybltlLHJdfX10aHJvdyBuZXcgRm9ybWF0RXJyb3IoIlRoZSBMaW5lYXJpemF0aW9uIGRpY3Rpb25hcnkgZG9lc24ndCBwb2ludCB0byBhIHZhbGlkIFBhZ2UgZGljdGlvbmFyeS4iKX1jYXRjaChpKXt3YXJuKGBfZ2V0TGluZWFyaXphdGlvblBhZ2U6ICIke2kubWVzc2FnZX0iLmApO3JldHVybiB0LmdldFBhZ2VEaWN0KGUpfX1nZXRQYWdlKGUpe2NvbnN0IHQ9dGhpcy5fcGFnZVByb21pc2VzLmdldChlKTtpZih0KXJldHVybiB0O2NvbnN0e2NhdGFsb2c6aSxsaW5lYXJpemF0aW9uOmEseGZhRmFjdG9yeTpyfT10aGlzO2xldCBzO3M9cj9Qcm9taXNlLnJlc29sdmUoW0RpY3QuZW1wdHksbnVsbF0pOmE/LnBhZ2VGaXJzdD09PWU/dGhpcy5fZ2V0TGluZWFyaXphdGlvblBhZ2UoZSk6aS5nZXRQYWdlRGljdChlKTtzPXMudGhlbigoKFt0LGFdKT0+bmV3IFBhZ2Uoe3BkZk1hbmFnZXI6dGhpcy5wZGZNYW5hZ2VyLHhyZWY6dGhpcy54cmVmLHBhZ2VJbmRleDplLHBhZ2VEaWN0OnQscmVmOmEsZ2xvYmFsSWRGYWN0b3J5OnRoaXMuX2dsb2JhbElkRmFjdG9yeSxmb250Q2FjaGU6aS5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTppLmJ1aWx0SW5DTWFwQ2FjaGUsc3RhbmRhcmRGb250RGF0YUNhY2hlOmkuc3RhbmRhcmRGb250RGF0YUNhY2hlLGdsb2JhbEltYWdlQ2FjaGU6aS5nbG9iYWxJbWFnZUNhY2hlLHN5c3RlbUZvbnRDYWNoZTppLnN5c3RlbUZvbnRDYWNoZSxub25CbGVuZE1vZGVzU2V0Omkubm9uQmxlbmRNb2Rlc1NldCx4ZmFGYWN0b3J5OnJ9KSkpO3RoaXMuX3BhZ2VQcm9taXNlcy5zZXQoZSxzKTtyZXR1cm4gc31hc3luYyBjaGVja0ZpcnN0UGFnZShlPSExKXtpZighZSl0cnl7YXdhaXQgdGhpcy5nZXRQYWdlKDApfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBYUmVmRW50cnlFeGNlcHRpb24pe3RoaXMuX3BhZ2VQcm9taXNlcy5kZWxldGUoMCk7YXdhaXQgdGhpcy5jbGVhbnVwKCk7dGhyb3cgbmV3IFhSZWZQYXJzZUV4Y2VwdGlvbn19fWFzeW5jIGNoZWNrTGFzdFBhZ2UoZT0hMSl7Y29uc3R7Y2F0YWxvZzp0LHBkZk1hbmFnZXI6aX09dGhpczt0LnNldEFjdHVhbE51bVBhZ2VzKCk7bGV0IGE7dHJ5e2F3YWl0IFByb21pc2UuYWxsKFtpLmVuc3VyZURvYygieGZhRmFjdG9yeSIpLGkuZW5zdXJlRG9jKCJsaW5lYXJpemF0aW9uIiksaS5lbnN1cmVDYXRhbG9nKCJudW1QYWdlcyIpXSk7aWYodGhpcy54ZmFGYWN0b3J5KXJldHVybjthPXRoaXMubGluZWFyaXphdGlvbj90aGlzLmxpbmVhcml6YXRpb24ubnVtUGFnZXM6dC5udW1QYWdlcztpZighTnVtYmVyLmlzSW50ZWdlcihhKSl0aHJvdyBuZXcgRm9ybWF0RXJyb3IoIlBhZ2UgY291bnQgaXMgbm90IGFuIGludGVnZXIuIik7aWYoYTw9MSlyZXR1cm47YXdhaXQgdGhpcy5nZXRQYWdlKGEtMSl9Y2F0Y2gocil7dGhpcy5fcGFnZVByb21pc2VzLmRlbGV0ZShhLTEpO2F3YWl0IHRoaXMuY2xlYW51cCgpO2lmKHIgaW5zdGFuY2VvZiBYUmVmRW50cnlFeGNlcHRpb24mJiFlKXRocm93IG5ldyBYUmVmUGFyc2VFeGNlcHRpb247d2FybihgY2hlY2tMYXN0UGFnZSAtIGludmFsaWQgL1BhZ2VzIHRyZWUgL0NvdW50OiAke2F9LmApO2xldCBzO3RyeXtzPWF3YWl0IHQuZ2V0QWxsUGFnZURpY3RzKGUpfWNhdGNoKGkpe2lmKGkgaW5zdGFuY2VvZiBYUmVmRW50cnlFeGNlcHRpb24mJiFlKXRocm93IG5ldyBYUmVmUGFyc2VFeGNlcHRpb247dC5zZXRBY3R1YWxOdW1QYWdlcygxKTtyZXR1cm59Zm9yKGNvbnN0W2UsW2Escl1db2Ygcyl7bGV0IHM7aWYoYSBpbnN0YW5jZW9mIEVycm9yKXtzPVByb21pc2UucmVqZWN0KGEpO3MuY2F0Y2goKCgpPT57fSkpfWVsc2Ugcz1Qcm9taXNlLnJlc29sdmUobmV3IFBhZ2Uoe3BkZk1hbmFnZXI6aSx4cmVmOnRoaXMueHJlZixwYWdlSW5kZXg6ZSxwYWdlRGljdDphLHJlZjpyLGdsb2JhbElkRmFjdG9yeTp0aGlzLl9nbG9iYWxJZEZhY3RvcnksZm9udENhY2hlOnQuZm9udENhY2hlLGJ1aWx0SW5DTWFwQ2FjaGU6dC5idWlsdEluQ01hcENhY2hlLHN0YW5kYXJkRm9udERhdGFDYWNoZTp0LnN0YW5kYXJkRm9udERhdGFDYWNoZSxnbG9iYWxJbWFnZUNhY2hlOnQuZ2xvYmFsSW1hZ2VDYWNoZSxzeXN0ZW1Gb250Q2FjaGU6dC5zeXN0ZW1Gb250Q2FjaGUsbm9uQmxlbmRNb2Rlc1NldDp0Lm5vbkJsZW5kTW9kZXNTZXQseGZhRmFjdG9yeTpudWxsfSkpO3RoaXMuX3BhZ2VQcm9taXNlcy5zZXQoZSxzKX10LnNldEFjdHVhbE51bVBhZ2VzKHMuc2l6ZSl9fWZvbnRGYWxsYmFjayhlLHQpe3JldHVybiB0aGlzLmNhdGFsb2cuZm9udEZhbGxiYWNrKGUsdCl9YXN5bmMgY2xlYW51cChlPSExKXtyZXR1cm4gdGhpcy5jYXRhbG9nP3RoaXMuY2F0YWxvZy5jbGVhbnVwKGUpOmNsZWFyR2xvYmFsQ2FjaGVzKCl9YXN5bmMjXyhlLHQsaSxhLHIscyxuKXtjb25zdHt4cmVmOm99PXRoaXM7aWYoIShpIGluc3RhbmNlb2YgUmVmKXx8cy5oYXMoaSkpcmV0dXJuO3MucHV0KGkpO2NvbnN0IGc9YXdhaXQgby5mZXRjaEFzeW5jKGkpO2lmKCEoZyBpbnN0YW5jZW9mIERpY3QpKXJldHVybjtpZihnLmhhcygiVCIpKXtjb25zdCB0PXN0cmluZ1RvUERGU3RyaW5nKGF3YWl0IGcuZ2V0QXN5bmMoIlQiKSk7ZT0iIj09PWU/dDpgJHtlfS4ke3R9YH1lbHNle2xldCBpPWc7Zm9yKDs7KXtpPWkuZ2V0UmF3KCJQYXJlbnQiKXx8dDtpZihpIGluc3RhbmNlb2YgUmVmKXtpZihzLmhhcyhpKSlicmVhaztpPWF3YWl0IG8uZmV0Y2hBc3luYyhpKX1pZighKGkgaW5zdGFuY2VvZiBEaWN0KSlicmVhaztpZihpLmhhcygiVCIpKXtjb25zdCB0PXN0cmluZ1RvUERGU3RyaW5nKGF3YWl0IGkuZ2V0QXN5bmMoIlQiKSk7ZT0iIj09PWU/dDpgJHtlfS4ke3R9YDticmVha319fXQmJiFnLmhhcygiUGFyZW50IikmJmlzTmFtZShnLmdldCgiU3VidHlwZSIpLCJXaWRnZXQiKSYmbi5wdXQoaSx0KTthLmhhcyhlKXx8YS5zZXQoZSxbXSk7YS5nZXQoZSkucHVzaChBbm5vdGF0aW9uRmFjdG9yeS5jcmVhdGUobyxpLHIsbnVsbCwhMCxuLG51bGwpLnRoZW4oKGU9PmU/LmdldEZpZWxkT2JqZWN0KCkpKS5jYXRjaCgoZnVuY3Rpb24oZSl7d2FybihgI2NvbGxlY3RGaWVsZE9iamVjdHM6ICIke2V9Ii5gKTtyZXR1cm4gbnVsbH0pKSk7aWYoIWcuaGFzKCJLaWRzIikpcmV0dXJuO2NvbnN0IGM9YXdhaXQgZy5nZXRBc3luYygiS2lkcyIpO2lmKEFycmF5LmlzQXJyYXkoYykpZm9yKGNvbnN0IHQgb2YgYylhd2FpdCB0aGlzLiNfKGUsaSx0LGEscixzLG4pfWdldCBmaWVsZE9iamVjdHMoKXtyZXR1cm4gc2hhZG93KHRoaXMsImZpZWxkT2JqZWN0cyIsdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZURvYygiZm9ybUluZm8iKS50aGVuKChhc3luYyBlPT57aWYoIWUuaGFzRmllbGRzKXJldHVybiBudWxsO2NvbnN0W3QsaV09YXdhaXQgUHJvbWlzZS5hbGwoW3RoaXMucGRmTWFuYWdlci5lbnN1cmVEb2MoImFubm90YXRpb25HbG9iYWxzIiksdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZUNhdGFsb2coImFjcm9Gb3JtIildKTtpZighdClyZXR1cm4gbnVsbDtjb25zdCBhPW5ldyBSZWZTZXQscj1PYmplY3QuY3JlYXRlKG51bGwpLHM9bmV3IE1hcCxuPW5ldyBSZWZTZXRDYWNoZTtmb3IoY29uc3QgZSBvZiBhd2FpdCBpLmdldEFzeW5jKCJGaWVsZHMiKSlhd2FpdCB0aGlzLiNfKCIiLG51bGwsZSxzLHQsYSxuKTtjb25zdCBvPVtdO2Zvcihjb25zdFtlLHRdb2YgcylvLnB1c2goUHJvbWlzZS5hbGwodCkudGhlbigodD0+eyh0PXQuZmlsdGVyKChlPT4hIWUpKSkubGVuZ3RoPjAmJihyW2VdPXQpfSkpKTthd2FpdCBQcm9taXNlLmFsbChvKTtyZXR1cm57YWxsRmllbGRzOnIsb3JwaGFuRmllbGRzOm59fSkpKX1nZXQgaGFzSlNBY3Rpb25zKCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJoYXNKU0FjdGlvbnMiLHRoaXMucGRmTWFuYWdlci5lbnN1cmVEb2MoIl9wYXJzZUhhc0pTQWN0aW9ucyIpKX1hc3luYyBfcGFyc2VIYXNKU0FjdGlvbnMoKXtjb25zdFtlLHRdPWF3YWl0IFByb21pc2UuYWxsKFt0aGlzLnBkZk1hbmFnZXIuZW5zdXJlQ2F0YWxvZygianNBY3Rpb25zIiksdGhpcy5wZGZNYW5hZ2VyLmVuc3VyZURvYygiZmllbGRPYmplY3RzIildKTtyZXR1cm4hIWV8fCEhdCYmT2JqZWN0LnZhbHVlcyh0LmFsbEZpZWxkcykuc29tZSgoZT0+ZS5zb21lKChlPT5udWxsIT09ZS5hY3Rpb25zKSkpKX1nZXQgY2FsY3VsYXRpb25PcmRlcklkcygpe2NvbnN0IGU9dGhpcy5jYXRhbG9nLmFjcm9Gb3JtPy5nZXQoIkNPIik7aWYoIUFycmF5LmlzQXJyYXkoZSl8fDA9PT1lLmxlbmd0aClyZXR1cm4gc2hhZG93KHRoaXMsImNhbGN1bGF0aW9uT3JkZXJJZHMiLG51bGwpO2NvbnN0IHQ9W107Zm9yKGNvbnN0IGkgb2YgZSlpIGluc3RhbmNlb2YgUmVmJiZ0LnB1c2goaS50b1N0cmluZygpKTtyZXR1cm4gc2hhZG93KHRoaXMsImNhbGN1bGF0aW9uT3JkZXJJZHMiLHQubGVuZ3RoP3Q6bnVsbCl9Z2V0IGFubm90YXRpb25HbG9iYWxzKCl7cmV0dXJuIHNoYWRvdyh0aGlzLCJhbm5vdGF0aW9uR2xvYmFscyIsQW5ub3RhdGlvbkZhY3RvcnkuY3JlYXRlR2xvYmFscyh0aGlzLnBkZk1hbmFnZXIpKX19Y2xhc3MgQmFzZVBkZk1hbmFnZXJ7Y29uc3RydWN0b3IoZSl7dGhpcy5fZG9jQmFzZVVybD1mdW5jdGlvbiBwYXJzZURvY0Jhc2VVcmwoZSl7aWYoZSl7Y29uc3QgdD1jcmVhdGVWYWxpZEFic29sdXRlVXJsKGUpO2lmKHQpcmV0dXJuIHQuaHJlZjt3YXJuKGBJbnZhbGlkIGFic29sdXRlIGRvY0Jhc2VVcmw6ICIke2V9Ii5gKX1yZXR1cm4gbnVsbH0oZS5kb2NCYXNlVXJsKTt0aGlzLl9kb2NJZD1lLmRvY0lkO3RoaXMuX3Bhc3N3b3JkPWUucGFzc3dvcmQ7dGhpcy5lbmFibGVYZmE9ZS5lbmFibGVYZmE7ZS5ldmFsdWF0b3JPcHRpb25zLmlzT2Zmc2NyZWVuQ2FudmFzU3VwcG9ydGVkJiY9RmVhdHVyZVRlc3QuaXNPZmZzY3JlZW5DYW52YXNTdXBwb3J0ZWQ7ZS5ldmFsdWF0b3JPcHRpb25zLmlzSW1hZ2VEZWNvZGVyU3VwcG9ydGVkJiY9RmVhdHVyZVRlc3QuaXNJbWFnZURlY29kZXJTdXBwb3J0ZWQ7dGhpcy5ldmFsdWF0b3JPcHRpb25zPU9iamVjdC5mcmVlemUoZS5ldmFsdWF0b3JPcHRpb25zKX1nZXQgZG9jSWQoKXtyZXR1cm4gdGhpcy5fZG9jSWR9Z2V0IHBhc3N3b3JkKCl7cmV0dXJuIHRoaXMuX3Bhc3N3b3JkfWdldCBkb2NCYXNlVXJsKCl7cmV0dXJuIHRoaXMuX2RvY0Jhc2VVcmx9Z2V0IGNhdGFsb2coKXtyZXR1cm4gdGhpcy5wZGZEb2N1bWVudC5jYXRhbG9nfWVuc3VyZURvYyhlLHQpe3JldHVybiB0aGlzLmVuc3VyZSh0aGlzLnBkZkRvY3VtZW50LGUsdCl9ZW5zdXJlWFJlZihlLHQpe3JldHVybiB0aGlzLmVuc3VyZSh0aGlzLnBkZkRvY3VtZW50LnhyZWYsZSx0KX1lbnN1cmVDYXRhbG9nKGUsdCl7cmV0dXJuIHRoaXMuZW5zdXJlKHRoaXMucGRmRG9jdW1lbnQuY2F0YWxvZyxlLHQpfWdldFBhZ2UoZSl7cmV0dXJuIHRoaXMucGRmRG9jdW1lbnQuZ2V0UGFnZShlKX1mb250RmFsbGJhY2soZSx0KXtyZXR1cm4gdGhpcy5wZGZEb2N1bWVudC5mb250RmFsbGJhY2soZSx0KX1sb2FkWGZhRm9udHMoZSx0KXtyZXR1cm4gdGhpcy5wZGZEb2N1bWVudC5sb2FkWGZhRm9udHMoZSx0KX1sb2FkWGZhSW1hZ2VzKCl7cmV0dXJuIHRoaXMucGRmRG9jdW1lbnQubG9hZFhmYUltYWdlcygpfXNlcmlhbGl6ZVhmYURhdGEoZSl7cmV0dXJuIHRoaXMucGRmRG9jdW1lbnQuc2VyaWFsaXplWGZhRGF0YShlKX1jbGVhbnVwKGU9ITEpe3JldHVybiB0aGlzLnBkZkRvY3VtZW50LmNsZWFudXAoZSl9YXN5bmMgZW5zdXJlKGUsdCxpKXt1bnJlYWNoYWJsZSgiQWJzdHJhY3QgbWV0aG9kIGBlbnN1cmVgIGNhbGxlZCIpfXJlcXVlc3RSYW5nZShlLHQpe3VucmVhY2hhYmxlKCJBYnN0cmFjdCBtZXRob2QgYHJlcXVlc3RSYW5nZWAgY2FsbGVkIil9cmVxdWVzdExvYWRlZFN0cmVhbShlPSExKXt1bnJlYWNoYWJsZSgiQWJzdHJhY3QgbWV0aG9kIGByZXF1ZXN0TG9hZGVkU3RyZWFtYCBjYWxsZWQiKX1zZW5kUHJvZ3Jlc3NpdmVEYXRhKGUpe3VucmVhY2hhYmxlKCJBYnN0cmFjdCBtZXRob2QgYHNlbmRQcm9ncmVzc2l2ZURhdGFgIGNhbGxlZCIpfXVwZGF0ZVBhc3N3b3JkKGUpe3RoaXMuX3Bhc3N3b3JkPWV9dGVybWluYXRlKGUpe3VucmVhY2hhYmxlKCJBYnN0cmFjdCBtZXRob2QgYHRlcm1pbmF0ZWAgY2FsbGVkIil9fWNsYXNzIExvY2FsUGRmTWFuYWdlciBleHRlbmRzIEJhc2VQZGZNYW5hZ2Vye2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO2NvbnN0IHQ9bmV3IFN0cmVhbShlLnNvdXJjZSk7dGhpcy5wZGZEb2N1bWVudD1uZXcgUERGRG9jdW1lbnQodGhpcyx0KTt0aGlzLl9sb2FkZWRTdHJlYW1Qcm9taXNlPVByb21pc2UucmVzb2x2ZSh0KX1hc3luYyBlbnN1cmUoZSx0LGkpe2NvbnN0IGE9ZVt0XTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgYT9hLmFwcGx5KGUsaSk6YX1yZXF1ZXN0UmFuZ2UoZSx0KXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCl9cmVxdWVzdExvYWRlZFN0cmVhbShlPSExKXtyZXR1cm4gdGhpcy5fbG9hZGVkU3RyZWFtUHJvbWlzZX10ZXJtaW5hdGUoZSl7fX1jbGFzcyBOZXR3b3JrUGRmTWFuYWdlciBleHRlbmRzIEJhc2VQZGZNYW5hZ2Vye2NvbnN0cnVjdG9yKGUpe3N1cGVyKGUpO3RoaXMuc3RyZWFtTWFuYWdlcj1uZXcgQ2h1bmtlZFN0cmVhbU1hbmFnZXIoZS5zb3VyY2Use21zZ0hhbmRsZXI6ZS5oYW5kbGVyLGxlbmd0aDplLmxlbmd0aCxkaXNhYmxlQXV0b0ZldGNoOmUuZGlzYWJsZUF1dG9GZXRjaCxyYW5nZUNodW5rU2l6ZTplLnJhbmdlQ2h1bmtTaXplfSk7dGhpcy5wZGZEb2N1bWVudD1uZXcgUERGRG9jdW1lbnQodGhpcyx0aGlzLnN0cmVhbU1hbmFnZXIuZ2V0U3RyZWFtKCkpfWFzeW5jIGVuc3VyZShlLHQsaSl7dHJ5e2NvbnN0IGE9ZVt0XTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgYT9hLmFwcGx5KGUsaSk6YX1jYXRjaChhKXtpZighKGEgaW5zdGFuY2VvZiBNaXNzaW5nRGF0YUV4Y2VwdGlvbikpdGhyb3cgYTthd2FpdCB0aGlzLnJlcXVlc3RSYW5nZShhLmJlZ2luLGEuZW5kKTtyZXR1cm4gdGhpcy5lbnN1cmUoZSx0LGkpfX1yZXF1ZXN0UmFuZ2UoZSx0KXtyZXR1cm4gdGhpcy5zdHJlYW1NYW5hZ2VyLnJlcXVlc3RSYW5nZShlLHQpfXJlcXVlc3RMb2FkZWRTdHJlYW0oZT0hMSl7cmV0dXJuIHRoaXMuc3RyZWFtTWFuYWdlci5yZXF1ZXN0QWxsQ2h1bmtzKGUpfXNlbmRQcm9ncmVzc2l2ZURhdGEoZSl7dGhpcy5zdHJlYW1NYW5hZ2VyLm9uUmVjZWl2ZURhdGEoe2NodW5rOmV9KX10ZXJtaW5hdGUoZSl7dGhpcy5zdHJlYW1NYW5hZ2VyLmFib3J0KGUpfX1jb25zdCBvbz0xLGdvPTIsSW89MSxjbz0yLGxvPTMsaG89NCxDbz01LEJvPTYsUW89NyxFbz04O2Z1bmN0aW9uIG9uRm4oKXt9ZnVuY3Rpb24gd3JhcFJlYXNvbihlKXtpZihlIGluc3RhbmNlb2YgQWJvcnRFeGNlcHRpb258fGUgaW5zdGFuY2VvZiBJbnZhbGlkUERGRXhjZXB0aW9ufHxlIGluc3RhbmNlb2YgTWlzc2luZ1BERkV4Y2VwdGlvbnx8ZSBpbnN0YW5jZW9mIFBhc3N3b3JkRXhjZXB0aW9ufHxlIGluc3RhbmNlb2YgVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9ufHxlIGluc3RhbmNlb2YgVW5rbm93bkVycm9yRXhjZXB0aW9uKXJldHVybiBlO2UgaW5zdGFuY2VvZiBFcnJvcnx8Im9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZXx8dW5yZWFjaGFibGUoJ3dyYXBSZWFzb246IEV4cGVjdGVkICJyZWFzb24iIHRvIGJlIGEgKHBvc3NpYmx5IGNsb25lZCkgRXJyb3IuJyk7c3dpdGNoKGUubmFtZSl7Y2FzZSJBYm9ydEV4Y2VwdGlvbiI6cmV0dXJuIG5ldyBBYm9ydEV4Y2VwdGlvbihlLm1lc3NhZ2UpO2Nhc2UiSW52YWxpZFBERkV4Y2VwdGlvbiI6cmV0dXJuIG5ldyBJbnZhbGlkUERGRXhjZXB0aW9uKGUubWVzc2FnZSk7Y2FzZSJNaXNzaW5nUERGRXhjZXB0aW9uIjpyZXR1cm4gbmV3IE1pc3NpbmdQREZFeGNlcHRpb24oZS5tZXNzYWdlKTtjYXNlIlBhc3N3b3JkRXhjZXB0aW9uIjpyZXR1cm4gbmV3IFBhc3N3b3JkRXhjZXB0aW9uKGUubWVzc2FnZSxlLmNvZGUpO2Nhc2UiVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uIjpyZXR1cm4gbmV3IFVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbihlLm1lc3NhZ2UsZS5zdGF0dXMpO2Nhc2UiVW5rbm93bkVycm9yRXhjZXB0aW9uIjpyZXR1cm4gbmV3IFVua25vd25FcnJvckV4Y2VwdGlvbihlLm1lc3NhZ2UsZS5kZXRhaWxzKX1yZXR1cm4gbmV3IFVua25vd25FcnJvckV4Y2VwdGlvbihlLm1lc3NhZ2UsZS50b1N0cmluZygpKX1jbGFzcyBNZXNzYWdlSGFuZGxlcnsjej1uZXcgQWJvcnRDb250cm9sbGVyO2NvbnN0cnVjdG9yKGUsdCxpKXt0aGlzLnNvdXJjZU5hbWU9ZTt0aGlzLnRhcmdldE5hbWU9dDt0aGlzLmNvbU9iaj1pO3RoaXMuY2FsbGJhY2tJZD0xO3RoaXMuc3RyZWFtSWQ9MTt0aGlzLnN0cmVhbVNpbmtzPU9iamVjdC5jcmVhdGUobnVsbCk7dGhpcy5zdHJlYW1Db250cm9sbGVycz1PYmplY3QuY3JlYXRlKG51bGwpO3RoaXMuY2FsbGJhY2tDYXBhYmlsaXRpZXM9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzLmFjdGlvbkhhbmRsZXI9T2JqZWN0LmNyZWF0ZShudWxsKTtpLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHRoaXMuIyQuYmluZCh0aGlzKSx7c2lnbmFsOnRoaXMuI3ouc2lnbmFsfSl9IyQoe2RhdGE6ZX0pe2lmKGUudGFyZ2V0TmFtZSE9PXRoaXMuc291cmNlTmFtZSlyZXR1cm47aWYoZS5zdHJlYW0pe3RoaXMuI0FBKGUpO3JldHVybn1pZihlLmNhbGxiYWNrKXtjb25zdCB0PWUuY2FsbGJhY2tJZCxpPXRoaXMuY2FsbGJhY2tDYXBhYmlsaXRpZXNbdF07aWYoIWkpdGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgcmVzb2x2ZSBjYWxsYmFjayAke3R9YCk7ZGVsZXRlIHRoaXMuY2FsbGJhY2tDYXBhYmlsaXRpZXNbdF07aWYoZS5jYWxsYmFjaz09PW9vKWkucmVzb2x2ZShlLmRhdGEpO2Vsc2V7aWYoZS5jYWxsYmFjayE9PWdvKXRocm93IG5ldyBFcnJvcigiVW5leHBlY3RlZCBjYWxsYmFjayBjYXNlIik7aS5yZWplY3Qod3JhcFJlYXNvbihlLnJlYXNvbikpfXJldHVybn1jb25zdCB0PXRoaXMuYWN0aW9uSGFuZGxlcltlLmFjdGlvbl07aWYoIXQpdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGFjdGlvbiBmcm9tIHdvcmtlcjogJHtlLmFjdGlvbn1gKTtpZihlLmNhbGxiYWNrSWQpe2NvbnN0IGk9dGhpcy5zb3VyY2VOYW1lLGE9ZS5zb3VyY2VOYW1lLHI9dGhpcy5jb21PYmo7UHJvbWlzZS50cnkodCxlLmRhdGEpLnRoZW4oKGZ1bmN0aW9uKHQpe3IucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6aSx0YXJnZXROYW1lOmEsY2FsbGJhY2s6b28sY2FsbGJhY2tJZDplLmNhbGxiYWNrSWQsZGF0YTp0fSl9KSwoZnVuY3Rpb24odCl7ci5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTppLHRhcmdldE5hbWU6YSxjYWxsYmFjazpnbyxjYWxsYmFja0lkOmUuY2FsbGJhY2tJZCxyZWFzb246d3JhcFJlYXNvbih0KX0pfSkpfWVsc2UgZS5zdHJlYW1JZD90aGlzLiNlQShlKTp0KGUuZGF0YSl9b24oZSx0KXtjb25zdCBpPXRoaXMuYWN0aW9uSGFuZGxlcjtpZihpW2VdKXRocm93IG5ldyBFcnJvcihgVGhlcmUgaXMgYWxyZWFkeSBhbiBhY3Rpb25OYW1lIGNhbGxlZCAiJHtlfSJgKTtpW2VdPXR9c2VuZChlLHQsaSl7dGhpcy5jb21PYmoucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6dGhpcy5zb3VyY2VOYW1lLHRhcmdldE5hbWU6dGhpcy50YXJnZXROYW1lLGFjdGlvbjplLGRhdGE6dH0saSl9c2VuZFdpdGhQcm9taXNlKGUsdCxpKXtjb25zdCBhPXRoaXMuY2FsbGJhY2tJZCsrLHI9UHJvbWlzZS53aXRoUmVzb2x2ZXJzKCk7dGhpcy5jYWxsYmFja0NhcGFiaWxpdGllc1thXT1yO3RyeXt0aGlzLmNvbU9iai5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTp0aGlzLnNvdXJjZU5hbWUsdGFyZ2V0TmFtZTp0aGlzLnRhcmdldE5hbWUsYWN0aW9uOmUsY2FsbGJhY2tJZDphLGRhdGE6dH0saSl9Y2F0Y2goZSl7ci5yZWplY3QoZSl9cmV0dXJuIHIucHJvbWlzZX1zZW5kV2l0aFN0cmVhbShlLHQsaSxhKXtjb25zdCByPXRoaXMuc3RyZWFtSWQrKyxzPXRoaXMuc291cmNlTmFtZSxuPXRoaXMudGFyZ2V0TmFtZSxvPXRoaXMuY29tT2JqO3JldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe3N0YXJ0Omk9Pntjb25zdCBnPVByb21pc2Uud2l0aFJlc29sdmVycygpO3RoaXMuc3RyZWFtQ29udHJvbGxlcnNbcl09e2NvbnRyb2xsZXI6aSxzdGFydENhbGw6ZyxwdWxsQ2FsbDpudWxsLGNhbmNlbENhbGw6bnVsbCxpc0Nsb3NlZDohMX07by5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpzLHRhcmdldE5hbWU6bixhY3Rpb246ZSxzdHJlYW1JZDpyLGRhdGE6dCxkZXNpcmVkU2l6ZTppLmRlc2lyZWRTaXplfSxhKTtyZXR1cm4gZy5wcm9taXNlfSxwdWxsOmU9Pntjb25zdCB0PVByb21pc2Uud2l0aFJlc29sdmVycygpO3RoaXMuc3RyZWFtQ29udHJvbGxlcnNbcl0ucHVsbENhbGw9dDtvLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnMsdGFyZ2V0TmFtZTpuLHN0cmVhbTpCbyxzdHJlYW1JZDpyLGRlc2lyZWRTaXplOmUuZGVzaXJlZFNpemV9KTtyZXR1cm4gdC5wcm9taXNlfSxjYW5jZWw6ZT0+e2Fzc2VydChlIGluc3RhbmNlb2YgRXJyb3IsImNhbmNlbCBtdXN0IGhhdmUgYSB2YWxpZCByZWFzb24iKTtjb25zdCB0PVByb21pc2Uud2l0aFJlc29sdmVycygpO3RoaXMuc3RyZWFtQ29udHJvbGxlcnNbcl0uY2FuY2VsQ2FsbD10O3RoaXMuc3RyZWFtQ29udHJvbGxlcnNbcl0uaXNDbG9zZWQ9ITA7by5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpzLHRhcmdldE5hbWU6bixzdHJlYW06SW8sc3RyZWFtSWQ6cixyZWFzb246d3JhcFJlYXNvbihlKX0pO3JldHVybiB0LnByb21pc2V9fSxpKX0jZUEoZSl7Y29uc3QgdD1lLnN0cmVhbUlkLGk9dGhpcy5zb3VyY2VOYW1lLGE9ZS5zb3VyY2VOYW1lLHI9dGhpcy5jb21PYmoscz10aGlzLG49dGhpcy5hY3Rpb25IYW5kbGVyW2UuYWN0aW9uXSxvPXtlbnF1ZXVlKGUscz0xLG4pe2lmKHRoaXMuaXNDYW5jZWxsZWQpcmV0dXJuO2NvbnN0IG89dGhpcy5kZXNpcmVkU2l6ZTt0aGlzLmRlc2lyZWRTaXplLT1zO2lmKG8+MCYmdGhpcy5kZXNpcmVkU2l6ZTw9MCl7dGhpcy5zaW5rQ2FwYWJpbGl0eT1Qcm9taXNlLndpdGhSZXNvbHZlcnMoKTt0aGlzLnJlYWR5PXRoaXMuc2lua0NhcGFiaWxpdHkucHJvbWlzZX1yLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOmksdGFyZ2V0TmFtZTphLHN0cmVhbTpobyxzdHJlYW1JZDp0LGNodW5rOmV9LG4pfSxjbG9zZSgpe2lmKCF0aGlzLmlzQ2FuY2VsbGVkKXt0aGlzLmlzQ2FuY2VsbGVkPSEwO3IucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6aSx0YXJnZXROYW1lOmEsc3RyZWFtOmxvLHN0cmVhbUlkOnR9KTtkZWxldGUgcy5zdHJlYW1TaW5rc1t0XX19LGVycm9yKGUpe2Fzc2VydChlIGluc3RhbmNlb2YgRXJyb3IsImVycm9yIG11c3QgaGF2ZSBhIHZhbGlkIHJlYXNvbiIpO2lmKCF0aGlzLmlzQ2FuY2VsbGVkKXt0aGlzLmlzQ2FuY2VsbGVkPSEwO3IucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6aSx0YXJnZXROYW1lOmEsc3RyZWFtOkNvLHN0cmVhbUlkOnQscmVhc29uOndyYXBSZWFzb24oZSl9KX19LHNpbmtDYXBhYmlsaXR5OlByb21pc2Uud2l0aFJlc29sdmVycygpLG9uUHVsbDpudWxsLG9uQ2FuY2VsOm51bGwsaXNDYW5jZWxsZWQ6ITEsZGVzaXJlZFNpemU6ZS5kZXNpcmVkU2l6ZSxyZWFkeTpudWxsfTtvLnNpbmtDYXBhYmlsaXR5LnJlc29sdmUoKTtvLnJlYWR5PW8uc2lua0NhcGFiaWxpdHkucHJvbWlzZTt0aGlzLnN0cmVhbVNpbmtzW3RdPW87UHJvbWlzZS50cnkobixlLmRhdGEsbykudGhlbigoZnVuY3Rpb24oKXtyLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOmksdGFyZ2V0TmFtZTphLHN0cmVhbTpFbyxzdHJlYW1JZDp0LHN1Y2Nlc3M6ITB9KX0pLChmdW5jdGlvbihlKXtyLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOmksdGFyZ2V0TmFtZTphLHN0cmVhbTpFbyxzdHJlYW1JZDp0LHJlYXNvbjp3cmFwUmVhc29uKGUpfSl9KSl9I0FBKGUpe2NvbnN0IHQ9ZS5zdHJlYW1JZCxpPXRoaXMuc291cmNlTmFtZSxhPWUuc291cmNlTmFtZSxyPXRoaXMuY29tT2JqLHM9dGhpcy5zdHJlYW1Db250cm9sbGVyc1t0XSxuPXRoaXMuc3RyZWFtU2lua3NbdF07c3dpdGNoKGUuc3RyZWFtKXtjYXNlIEVvOmUuc3VjY2Vzcz9zLnN0YXJ0Q2FsbC5yZXNvbHZlKCk6cy5zdGFydENhbGwucmVqZWN0KHdyYXBSZWFzb24oZS5yZWFzb24pKTticmVhaztjYXNlIFFvOmUuc3VjY2Vzcz9zLnB1bGxDYWxsLnJlc29sdmUoKTpzLnB1bGxDYWxsLnJlamVjdCh3cmFwUmVhc29uKGUucmVhc29uKSk7YnJlYWs7Y2FzZSBCbzppZighbil7ci5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTppLHRhcmdldE5hbWU6YSxzdHJlYW06UW8sc3RyZWFtSWQ6dCxzdWNjZXNzOiEwfSk7YnJlYWt9bi5kZXNpcmVkU2l6ZTw9MCYmZS5kZXNpcmVkU2l6ZT4wJiZuLnNpbmtDYXBhYmlsaXR5LnJlc29sdmUoKTtuLmRlc2lyZWRTaXplPWUuZGVzaXJlZFNpemU7UHJvbWlzZS50cnkobi5vblB1bGx8fG9uRm4pLnRoZW4oKGZ1bmN0aW9uKCl7ci5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTppLHRhcmdldE5hbWU6YSxzdHJlYW06UW8sc3RyZWFtSWQ6dCxzdWNjZXNzOiEwfSl9KSwoZnVuY3Rpb24oZSl7ci5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTppLHRhcmdldE5hbWU6YSxzdHJlYW06UW8sc3RyZWFtSWQ6dCxyZWFzb246d3JhcFJlYXNvbihlKX0pfSkpO2JyZWFrO2Nhc2UgaG86YXNzZXJ0KHMsImVucXVldWUgc2hvdWxkIGhhdmUgc3RyZWFtIGNvbnRyb2xsZXIiKTtpZihzLmlzQ2xvc2VkKWJyZWFrO3MuY29udHJvbGxlci5lbnF1ZXVlKGUuY2h1bmspO2JyZWFrO2Nhc2UgbG86YXNzZXJ0KHMsImNsb3NlIHNob3VsZCBoYXZlIHN0cmVhbSBjb250cm9sbGVyIik7aWYocy5pc0Nsb3NlZClicmVhaztzLmlzQ2xvc2VkPSEwO3MuY29udHJvbGxlci5jbG9zZSgpO3RoaXMuI3RBKHMsdCk7YnJlYWs7Y2FzZSBDbzphc3NlcnQocywiZXJyb3Igc2hvdWxkIGhhdmUgc3RyZWFtIGNvbnRyb2xsZXIiKTtzLmNvbnRyb2xsZXIuZXJyb3Iod3JhcFJlYXNvbihlLnJlYXNvbikpO3RoaXMuI3RBKHMsdCk7YnJlYWs7Y2FzZSBjbzplLnN1Y2Nlc3M/cy5jYW5jZWxDYWxsLnJlc29sdmUoKTpzLmNhbmNlbENhbGwucmVqZWN0KHdyYXBSZWFzb24oZS5yZWFzb24pKTt0aGlzLiN0QShzLHQpO2JyZWFrO2Nhc2UgSW86aWYoIW4pYnJlYWs7Y29uc3Qgbz13cmFwUmVhc29uKGUucmVhc29uKTtQcm9taXNlLnRyeShuLm9uQ2FuY2VsfHxvbkZuLG8pLnRoZW4oKGZ1bmN0aW9uKCl7ci5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTppLHRhcmdldE5hbWU6YSxzdHJlYW06Y28sc3RyZWFtSWQ6dCxzdWNjZXNzOiEwfSl9KSwoZnVuY3Rpb24oZSl7ci5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTppLHRhcmdldE5hbWU6YSxzdHJlYW06Y28sc3RyZWFtSWQ6dCxyZWFzb246d3JhcFJlYXNvbihlKX0pfSkpO24uc2lua0NhcGFiaWxpdHkucmVqZWN0KG8pO24uaXNDYW5jZWxsZWQ9ITA7ZGVsZXRlIHRoaXMuc3RyZWFtU2lua3NbdF07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgc3RyZWFtIGNhc2UiKX19YXN5bmMjdEEoZSx0KXthd2FpdCBQcm9taXNlLmFsbFNldHRsZWQoW2Uuc3RhcnRDYWxsPy5wcm9taXNlLGUucHVsbENhbGw/LnByb21pc2UsZS5jYW5jZWxDYWxsPy5wcm9taXNlXSk7ZGVsZXRlIHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbdF19ZGVzdHJveSgpe3RoaXMuI3o/LmFib3J0KCk7dGhpcy4jej1udWxsfX1hc3luYyBmdW5jdGlvbiB3cml0ZU9iamVjdChlLHQsaSx7ZW5jcnlwdDphPW51bGx9KXtjb25zdCByPWE/LmNyZWF0ZUNpcGhlclRyYW5zZm9ybShlLm51bSxlLmdlbik7aS5wdXNoKGAke2UubnVtfSAke2UuZ2VufSBvYmpcbmApO3QgaW5zdGFuY2VvZiBEaWN0P2F3YWl0IHdyaXRlRGljdCh0LGkscik6dCBpbnN0YW5jZW9mIEJhc2VTdHJlYW0/YXdhaXQgd3JpdGVTdHJlYW0odCxpLHIpOihBcnJheS5pc0FycmF5KHQpfHxBcnJheUJ1ZmZlci5pc1ZpZXcodCkpJiZhd2FpdCB3cml0ZUFycmF5KHQsaSxyKTtpLnB1c2goIlxuZW5kb2JqXG4iKX1hc3luYyBmdW5jdGlvbiB3cml0ZURpY3QoZSx0LGkpe3QucHVzaCgiPDwiKTtmb3IoY29uc3QgYSBvZiBlLmdldEtleXMoKSl7dC5wdXNoKGAgLyR7ZXNjYXBlUERGTmFtZShhKX0gYCk7YXdhaXQgd3JpdGVWYWx1ZShlLmdldFJhdyhhKSx0LGkpfXQucHVzaCgiPj4iKX1hc3luYyBmdW5jdGlvbiB3cml0ZVN0cmVhbShlLHQsaSl7bGV0IGE9ZS5nZXRCeXRlcygpO2NvbnN0e2RpY3Q6cn09ZSxbcyxuXT1hd2FpdCBQcm9taXNlLmFsbChbci5nZXRBc3luYygiRmlsdGVyIiksci5nZXRBc3luYygiRGVjb2RlUGFybXMiKV0pLG89aXNOYW1lKEFycmF5LmlzQXJyYXkocyk/YXdhaXQgci54cmVmLmZldGNoSWZSZWZBc3luYyhzWzBdKTpzLCJGbGF0ZURlY29kZSIpO2lmKGEubGVuZ3RoPj0yNTZ8fG8pdHJ5e2NvbnN0IGU9bmV3IENvbXByZXNzaW9uU3RyZWFtKCJkZWZsYXRlIiksdD1lLndyaXRhYmxlLmdldFdyaXRlcigpO2F3YWl0IHQucmVhZHk7dC53cml0ZShhKS50aGVuKChhc3luYygpPT57YXdhaXQgdC5yZWFkeTthd2FpdCB0LmNsb3NlKCl9KSkuY2F0Y2goKCgpPT57fSkpO2NvbnN0IGk9YXdhaXQgbmV3IFJlc3BvbnNlKGUucmVhZGFibGUpLmFycmF5QnVmZmVyKCk7YT1uZXcgVWludDhBcnJheShpKTtsZXQgZyxjO2lmKHMpe2lmKCFvKXtnPUFycmF5LmlzQXJyYXkocyk/W05hbWUuZ2V0KCJGbGF0ZURlY29kZSIpLC4uLnNdOltOYW1lLmdldCgiRmxhdGVEZWNvZGUiKSxzXTtuJiYoYz1BcnJheS5pc0FycmF5KG4pP1tudWxsLC4uLm5dOltudWxsLG5dKX19ZWxzZSBnPU5hbWUuZ2V0KCJGbGF0ZURlY29kZSIpO2cmJnIuc2V0KCJGaWx0ZXIiLGcpO2MmJnIuc2V0KCJEZWNvZGVQYXJtcyIsYyl9Y2F0Y2goZSl7aW5mbyhgd3JpdGVTdHJlYW0gLSBjYW5ub3QgY29tcHJlc3MgZGF0YTogIiR7ZX0iLmApfWxldCBnPWJ5dGVzVG9TdHJpbmcoYSk7aSYmKGc9aS5lbmNyeXB0U3RyaW5nKGcpKTtyLnNldCgiTGVuZ3RoIixnLmxlbmd0aCk7YXdhaXQgd3JpdGVEaWN0KHIsdCxpKTt0LnB1c2goIiBzdHJlYW1cbiIsZywiXG5lbmRzdHJlYW0iKX1hc3luYyBmdW5jdGlvbiB3cml0ZUFycmF5KGUsdCxpKXt0LnB1c2goIlsiKTtsZXQgYT0hMDtmb3IoY29uc3QgciBvZiBlKXthP2E9ITE6dC5wdXNoKCIgIik7YXdhaXQgd3JpdGVWYWx1ZShyLHQsaSl9dC5wdXNoKCJdIil9YXN5bmMgZnVuY3Rpb24gd3JpdGVWYWx1ZShlLHQsaSl7aWYoZSBpbnN0YW5jZW9mIE5hbWUpdC5wdXNoKGAvJHtlc2NhcGVQREZOYW1lKGUubmFtZSl9YCk7ZWxzZSBpZihlIGluc3RhbmNlb2YgUmVmKXQucHVzaChgJHtlLm51bX0gJHtlLmdlbn0gUmApO2Vsc2UgaWYoQXJyYXkuaXNBcnJheShlKXx8QXJyYXlCdWZmZXIuaXNWaWV3KGUpKWF3YWl0IHdyaXRlQXJyYXkoZSx0LGkpO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiBlKXtpJiYoZT1pLmVuY3J5cHRTdHJpbmcoZSkpO3QucHVzaChgKCR7ZXNjYXBlU3RyaW5nKGUpfSlgKX1lbHNlIm51bWJlciI9PXR5cGVvZiBlP3QucHVzaChudW1iZXJUb1N0cmluZyhlKSk6ImJvb2xlYW4iPT10eXBlb2YgZT90LnB1c2goZS50b1N0cmluZygpKTplIGluc3RhbmNlb2YgRGljdD9hd2FpdCB3cml0ZURpY3QoZSx0LGkpOmUgaW5zdGFuY2VvZiBCYXNlU3RyZWFtP2F3YWl0IHdyaXRlU3RyZWFtKGUsdCxpKTpudWxsPT09ZT90LnB1c2goIm51bGwiKTp3YXJuKGBVbmhhbmRsZWQgdmFsdWUgaW4gd3JpdGVyOiAke3R5cGVvZiBlfSwgcGxlYXNlIGZpbGUgYSBidWcuYCl9ZnVuY3Rpb24gd3JpdGVJbnQoZSx0LGksYSl7Zm9yKGxldCByPXQraS0xO3I+aS0xO3ItLSl7YVtyXT0yNTUmZTtlPj49OH1yZXR1cm4gaSt0fWZ1bmN0aW9uIHdyaXRlU3RyaW5nKGUsdCxpKXtmb3IobGV0IGE9MCxyPWUubGVuZ3RoO2E8cjthKyspaVt0K2FdPTI1NSZlLmNoYXJDb2RlQXQoYSl9ZnVuY3Rpb24gdXBkYXRlWEZBKHt4ZmFEYXRhOmUseGZhRGF0YXNldHNSZWY6dCxjaGFuZ2VzOmkseHJlZjphfSl7aWYobnVsbD09PWUpe2U9ZnVuY3Rpb24gd3JpdGVYRkFEYXRhRm9yQWNyb2Zvcm0oZSx0KXtjb25zdCBpPW5ldyBTaW1wbGVYTUxQYXJzZXIoe2hhc0F0dHJpYnV0ZXM6ITB9KS5wYXJzZUZyb21TdHJpbmcoZSk7Zm9yKGNvbnN0e3hmYTplfW9mIHQpe2lmKCFlKWNvbnRpbnVlO2NvbnN0e3BhdGg6dCx2YWx1ZTphfT1lO2lmKCF0KWNvbnRpbnVlO2NvbnN0IHI9cGFyc2VYRkFQYXRoKHQpO2xldCBzPWkuZG9jdW1lbnRFbGVtZW50LnNlYXJjaE5vZGUociwwKTshcyYmci5sZW5ndGg+MSYmKHM9aS5kb2N1bWVudEVsZW1lbnQuc2VhcmNoTm9kZShbci5hdCgtMSldLDApKTtzP3MuY2hpbGROb2Rlcz1BcnJheS5pc0FycmF5KGEpP2EubWFwKChlPT5uZXcgU2ltcGxlRE9NTm9kZSgidmFsdWUiLGUpKSk6W25ldyBTaW1wbGVET01Ob2RlKCIjdGV4dCIsYSldOndhcm4oYE5vZGUgbm90IGZvdW5kIGZvciBwYXRoOiAke3R9YCl9Y29uc3QgYT1bXTtpLmRvY3VtZW50RWxlbWVudC5kdW1wKGEpO3JldHVybiBhLmpvaW4oIiIpfShhLmZldGNoSWZSZWYodCkuZ2V0U3RyaW5nKCksaSl9Y29uc3Qgcj1uZXcgU3RyaW5nU3RyZWFtKGUpO3IuZGljdD1uZXcgRGljdChhKTtyLmRpY3Quc2V0KCJUeXBlIixOYW1lLmdldCgiRW1iZWRkZWRGaWxlIikpO2kucHV0KHQse2RhdGE6cn0pfWZ1bmN0aW9uIGdldEluZGV4ZXMoZSl7Y29uc3QgdD1bXTtmb3IoY29uc3R7cmVmOml9b2YgZSlpLm51bT09PXQuYXQoLTIpK3QuYXQoLTEpP3RbdC5sZW5ndGgtMV0rPTE6dC5wdXNoKGkubnVtLDEpO3JldHVybiB0fWZ1bmN0aW9uIGNvbXB1dGVJRHMoZSx0LGkpe2lmKEFycmF5LmlzQXJyYXkodC5maWxlSWRzKSYmdC5maWxlSWRzLmxlbmd0aD4wKXtjb25zdCBhPWZ1bmN0aW9uIGNvbXB1dGVNRDUoZSx0KXtjb25zdCBpPU1hdGguZmxvb3IoRGF0ZS5ub3coKS8xZTMpLGE9dC5maWxlbmFtZXx8IiIscj1baS50b1N0cmluZygpLGEsZS50b1N0cmluZygpXTtsZXQgcz1yLnJlZHVjZSgoKGUsdCk9PmUrdC5sZW5ndGgpLDApO2Zvcihjb25zdCBlIG9mIE9iamVjdC52YWx1ZXModC5pbmZvKSl7ci5wdXNoKGUpO3MrPWUubGVuZ3RofWNvbnN0IG49bmV3IFVpbnQ4QXJyYXkocyk7bGV0IG89MDtmb3IoY29uc3QgZSBvZiByKXt3cml0ZVN0cmluZyhlLG8sbik7bys9ZS5sZW5ndGh9cmV0dXJuIGJ5dGVzVG9TdHJpbmcoZW8obikpfShlLHQpO2kuc2V0KCJJRCIsW3QuZmlsZUlkc1swXSxhXSl9fWFzeW5jIGZ1bmN0aW9uIGluY3JlbWVudGFsVXBkYXRlKHtvcmlnaW5hbERhdGE6ZSx4cmVmSW5mbzp0LGNoYW5nZXM6aSx4cmVmOmE9bnVsbCxoYXNYZmE6cj0hMSx4ZmFEYXRhc2V0c1JlZjpzPW51bGwsaGFzWGZhRGF0YXNldHNFbnRyeTpuPSExLG5lZWRBcHBlYXJhbmNlczpvLGFjcm9Gb3JtUmVmOmc9bnVsbCxhY3JvRm9ybTpjPW51bGwseGZhRGF0YTpsPW51bGwsdXNlWHJlZlN0cmVhbTpoPSExfSl7YXdhaXQgYXN5bmMgZnVuY3Rpb24gdXBkYXRlQWNyb2Zvcm0oe3hyZWY6ZSxhY3JvRm9ybTp0LGFjcm9Gb3JtUmVmOmksaGFzWGZhOmEsaGFzWGZhRGF0YXNldHNFbnRyeTpyLHhmYURhdGFzZXRzUmVmOnMsbmVlZEFwcGVhcmFuY2VzOm4sY2hhbmdlczpvfSl7IWF8fHJ8fHN8fHdhcm4oIlhGQSAtIENhbm5vdCBzYXZlIGl0Iik7aWYoIW4mJighYXx8IXN8fHIpKXJldHVybjtjb25zdCBnPXQuY2xvbmUoKTtpZihhJiYhcil7Y29uc3QgZT10LmdldCgiWEZBIikuc2xpY2UoKTtlLnNwbGljZSgyLDAsImRhdGFzZXRzIik7ZS5zcGxpY2UoMywwLHMpO2cuc2V0KCJYRkEiLGUpfW4mJmcuc2V0KCJOZWVkQXBwZWFyYW5jZXMiLCEwKTtvLnB1dChpLHtkYXRhOmd9KX0oe3hyZWY6YSxhY3JvRm9ybTpjLGFjcm9Gb3JtUmVmOmcsaGFzWGZhOnIsaGFzWGZhRGF0YXNldHNFbnRyeTpuLHhmYURhdGFzZXRzUmVmOnMsbmVlZEFwcGVhcmFuY2VzOm8sY2hhbmdlczppfSk7ciYmdXBkYXRlWEZBKHt4ZmFEYXRhOmwseGZhRGF0YXNldHNSZWY6cyxjaGFuZ2VzOmkseHJlZjphfSk7Y29uc3QgQz1mdW5jdGlvbiBnZXRUcmFpbGVyRGljdChlLHQsaSl7Y29uc3QgYT1uZXcgRGljdChudWxsKTthLnNldCgiUHJldiIsZS5zdGFydFhSZWYpO2NvbnN0IHI9ZS5uZXdSZWY7aWYoaSl7dC5wdXQocix7ZGF0YToiIn0pO2Euc2V0KCJTaXplIixyLm51bSsxKTthLnNldCgiVHlwZSIsTmFtZS5nZXQoIlhSZWYiKSl9ZWxzZSBhLnNldCgiU2l6ZSIsci5udW0pO251bGwhPT1lLnJvb3RSZWYmJmEuc2V0KCJSb290IixlLnJvb3RSZWYpO251bGwhPT1lLmluZm9SZWYmJmEuc2V0KCJJbmZvIixlLmluZm9SZWYpO251bGwhPT1lLmVuY3J5cHRSZWYmJmEuc2V0KCJFbmNyeXB0IixlLmVuY3J5cHRSZWYpO3JldHVybiBhfSh0LGksaCksUT1bXSxFPWF3YWl0IGFzeW5jIGZ1bmN0aW9uIHdyaXRlQ2hhbmdlcyhlLHQsaT1bXSl7Y29uc3QgYT1bXTtmb3IoY29uc3Rbcix7ZGF0YTpzfV1vZiBlLml0ZW1zKCkpaWYobnVsbCE9PXMmJiJzdHJpbmciIT10eXBlb2Ygcyl7YXdhaXQgd3JpdGVPYmplY3QocixzLGksdCk7YS5wdXNoKHtyZWY6cixkYXRhOmkuam9pbigiIil9KTtpLmxlbmd0aD0wfWVsc2UgYS5wdXNoKHtyZWY6cixkYXRhOnN9KTtyZXR1cm4gYS5zb3J0KCgoZSx0KT0+ZS5yZWYubnVtLXQucmVmLm51bSkpfShpLGEsUSk7bGV0IHU9ZS5sZW5ndGg7Y29uc3QgZD1lLmF0KC0xKTtpZigxMCE9PWQmJjEzIT09ZCl7US5wdXNoKCJcbiIpO3UrPTF9Zm9yKGNvbnN0e2RhdGE6ZX1vZiBFKW51bGwhPT1lJiZRLnB1c2goZSk7YXdhaXQoaD9hc3luYyBmdW5jdGlvbiBnZXRYUmVmU3RyZWFtVGFibGUoZSx0LGksYSxyKXtjb25zdCBzPVtdO2xldCBuPTAsbz0wO2Zvcihjb25zdHtyZWY6ZSxkYXRhOmF9b2YgaSl7bGV0IGk7bj1NYXRoLm1heChuLHQpO2lmKG51bGwhPT1hKXtpPU1hdGgubWluKGUuZ2VuLDY1NTM1KTtzLnB1c2goWzEsdCxpXSk7dCs9YS5sZW5ndGh9ZWxzZXtpPU1hdGgubWluKGUuZ2VuKzEsNjU1MzUpO3MucHVzaChbMCwwLGldKX1vPU1hdGgubWF4KG8saSl9YS5zZXQoIkluZGV4IixnZXRJbmRleGVzKGkpKTtjb25zdCBnPVsxLGdldFNpemVJbkJ5dGVzKG4pLGdldFNpemVJbkJ5dGVzKG8pXTthLnNldCgiVyIsZyk7Y29tcHV0ZUlEcyh0LGUsYSk7Y29uc3QgYz1nLnJlZHVjZSgoKGUsdCk9PmUrdCksMCksbD1uZXcgVWludDhBcnJheShjKnMubGVuZ3RoKSxoPW5ldyBTdHJlYW0obCk7aC5kaWN0PWE7bGV0IEM9MDtmb3IoY29uc3RbZSx0LGldb2Ygcyl7Qz13cml0ZUludChlLGdbMF0sQyxsKTtDPXdyaXRlSW50KHQsZ1sxXSxDLGwpO0M9d3JpdGVJbnQoaSxnWzJdLEMsbCl9YXdhaXQgd3JpdGVPYmplY3QoZS5uZXdSZWYsaCxyLHt9KTtyLnB1c2goInN0YXJ0eHJlZlxuIix0LnRvU3RyaW5nKCksIlxuJSVFT0ZcbiIpfSh0LHUsRSxDLFEpOmFzeW5jIGZ1bmN0aW9uIGdldFhSZWZUYWJsZShlLHQsaSxhLHIpe3IucHVzaCgieHJlZlxuIik7Y29uc3Qgcz1nZXRJbmRleGVzKGkpO2xldCBuPTA7Zm9yKGNvbnN0e3JlZjplLGRhdGE6YX1vZiBpKXtpZihlLm51bT09PXNbbl0pe3IucHVzaChgJHtzW25dfSAke3NbbisxXX1cbmApO24rPTJ9aWYobnVsbCE9PWEpe3IucHVzaChgJHt0LnRvU3RyaW5nKCkucGFkU3RhcnQoMTAsIjAiKX0gJHtNYXRoLm1pbihlLmdlbiw2NTUzNSkudG9TdHJpbmcoKS5wYWRTdGFydCg1LCIwIil9IG5cclxuYCk7dCs9YS5sZW5ndGh9ZWxzZSByLnB1c2goYDAwMDAwMDAwMDAgJHtNYXRoLm1pbihlLmdlbisxLDY1NTM1KS50b1N0cmluZygpLnBhZFN0YXJ0KDUsIjAiKX0gZlxyXG5gKX1jb21wdXRlSURzKHQsZSxhKTtyLnB1c2goInRyYWlsZXJcbiIpO2F3YWl0IHdyaXRlRGljdChhLHIpO3IucHVzaCgiXG5zdGFydHhyZWZcbiIsdC50b1N0cmluZygpLCJcbiUlRU9GXG4iKX0odCx1LEUsQyxRKSk7Y29uc3QgZj1RLnJlZHVjZSgoKGUsdCk9PmUrdC5sZW5ndGgpLGUubGVuZ3RoKSxwPW5ldyBVaW50OEFycmF5KGYpO3Auc2V0KGUpO2xldCBtPWUubGVuZ3RoO2Zvcihjb25zdCBlIG9mIFEpe3dyaXRlU3RyaW5nKGUsbSxwKTttKz1lLmxlbmd0aH1yZXR1cm4gcH1jbGFzcyBQREZXb3JrZXJTdHJlYW17Y29uc3RydWN0b3IoZSl7dGhpcy5fbXNnSGFuZGxlcj1lO3RoaXMuX2NvbnRlbnRMZW5ndGg9bnVsbDt0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcj1udWxsO3RoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnM9W119Z2V0RnVsbFJlYWRlcigpe2Fzc2VydCghdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIsIlBERldvcmtlclN0cmVhbS5nZXRGdWxsUmVhZGVyIGNhbiBvbmx5IGJlIGNhbGxlZCBvbmNlLiIpO3RoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyPW5ldyBQREZXb3JrZXJTdHJlYW1SZWFkZXIodGhpcy5fbXNnSGFuZGxlcik7cmV0dXJuIHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyfWdldFJhbmdlUmVhZGVyKGUsdCl7Y29uc3QgaT1uZXcgUERGV29ya2VyU3RyZWFtUmFuZ2VSZWFkZXIoZSx0LHRoaXMuX21zZ0hhbmRsZXIpO3RoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMucHVzaChpKTtyZXR1cm4gaX1jYW5jZWxBbGxSZXF1ZXN0cyhlKXt0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcj8uY2FuY2VsKGUpO2Zvcihjb25zdCB0IG9mIHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMuc2xpY2UoMCkpdC5jYW5jZWwoZSl9fWNsYXNzIFBERldvcmtlclN0cmVhbVJlYWRlcntjb25zdHJ1Y3RvcihlKXt0aGlzLl9tc2dIYW5kbGVyPWU7dGhpcy5vblByb2dyZXNzPW51bGw7dGhpcy5fY29udGVudExlbmd0aD1udWxsO3RoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQ9ITE7dGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWQ9ITE7Y29uc3QgdD10aGlzLl9tc2dIYW5kbGVyLnNlbmRXaXRoU3RyZWFtKCJHZXRSZWFkZXIiKTt0aGlzLl9yZWFkZXI9dC5nZXRSZWFkZXIoKTt0aGlzLl9oZWFkZXJzUmVhZHk9dGhpcy5fbXNnSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIlJlYWRlckhlYWRlcnNSZWFkeSIpLnRoZW4oKGU9Pnt0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZD1lLmlzU3RyZWFtaW5nU3VwcG9ydGVkO3RoaXMuX2lzUmFuZ2VTdXBwb3J0ZWQ9ZS5pc1JhbmdlU3VwcG9ydGVkO3RoaXMuX2NvbnRlbnRMZW5ndGg9ZS5jb250ZW50TGVuZ3RofSkpfWdldCBoZWFkZXJzUmVhZHkoKXtyZXR1cm4gdGhpcy5faGVhZGVyc1JlYWR5fWdldCBjb250ZW50TGVuZ3RoKCl7cmV0dXJuIHRoaXMuX2NvbnRlbnRMZW5ndGh9Z2V0IGlzU3RyZWFtaW5nU3VwcG9ydGVkKCl7cmV0dXJuIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkfWdldCBpc1JhbmdlU3VwcG9ydGVkKCl7cmV0dXJuIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWR9YXN5bmMgcmVhZCgpe2NvbnN0e3ZhbHVlOmUsZG9uZTp0fT1hd2FpdCB0aGlzLl9yZWFkZXIucmVhZCgpO3JldHVybiB0P3t2YWx1ZTp2b2lkIDAsZG9uZTohMH06e3ZhbHVlOmUuYnVmZmVyLGRvbmU6ITF9fWNhbmNlbChlKXt0aGlzLl9yZWFkZXIuY2FuY2VsKGUpfX1jbGFzcyBQREZXb3JrZXJTdHJlYW1SYW5nZVJlYWRlcntjb25zdHJ1Y3RvcihlLHQsaSl7dGhpcy5fbXNnSGFuZGxlcj1pO3RoaXMub25Qcm9ncmVzcz1udWxsO2NvbnN0IGE9dGhpcy5fbXNnSGFuZGxlci5zZW5kV2l0aFN0cmVhbSgiR2V0UmFuZ2VSZWFkZXIiLHtiZWdpbjplLGVuZDp0fSk7dGhpcy5fcmVhZGVyPWEuZ2V0UmVhZGVyKCl9Z2V0IGlzU3RyZWFtaW5nU3VwcG9ydGVkKCl7cmV0dXJuITF9YXN5bmMgcmVhZCgpe2NvbnN0e3ZhbHVlOmUsZG9uZTp0fT1hd2FpdCB0aGlzLl9yZWFkZXIucmVhZCgpO3JldHVybiB0P3t2YWx1ZTp2b2lkIDAsZG9uZTohMH06e3ZhbHVlOmUuYnVmZmVyLGRvbmU6ITF9fWNhbmNlbChlKXt0aGlzLl9yZWFkZXIuY2FuY2VsKGUpfX1jbGFzcyBXb3JrZXJUYXNre2NvbnN0cnVjdG9yKGUpe3RoaXMubmFtZT1lO3RoaXMudGVybWluYXRlZD0hMTt0aGlzLl9jYXBhYmlsaXR5PVByb21pc2Uud2l0aFJlc29sdmVycygpfWdldCBmaW5pc2hlZCgpe3JldHVybiB0aGlzLl9jYXBhYmlsaXR5LnByb21pc2V9ZmluaXNoKCl7dGhpcy5fY2FwYWJpbGl0eS5yZXNvbHZlKCl9dGVybWluYXRlKCl7dGhpcy50ZXJtaW5hdGVkPSEwfWVuc3VyZU5vdFRlcm1pbmF0ZWQoKXtpZih0aGlzLnRlcm1pbmF0ZWQpdGhyb3cgbmV3IEVycm9yKCJXb3JrZXIgdGFzayB3YXMgdGVybWluYXRlZCIpfX1jbGFzcyBXb3JrZXJNZXNzYWdlSGFuZGxlcntzdGF0aWN7InVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3cmJiFpJiYidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJiJmdW5jdGlvbiI9PXR5cGVvZiBzZWxmLnBvc3RNZXNzYWdlJiYib25tZXNzYWdlImluIHNlbGYmJnRoaXMuaW5pdGlhbGl6ZUZyb21Qb3J0KHNlbGYpfXN0YXRpYyBzZXR1cChlLHQpe2xldCBpPSExO2Uub24oInRlc3QiLCh0PT57aWYoIWkpe2k9ITA7ZS5zZW5kKCJ0ZXN0Iix0IGluc3RhbmNlb2YgVWludDhBcnJheSl9fSkpO2Uub24oImNvbmZpZ3VyZSIsKGU9PnshZnVuY3Rpb24gc2V0VmVyYm9zaXR5TGV2ZWwoZSl7TnVtYmVyLmlzSW50ZWdlcihlKSYmKEl0PWUpfShlLnZlcmJvc2l0eSl9KSk7ZS5vbigiR2V0RG9jUmVxdWVzdCIsKGU9PnRoaXMuY3JlYXRlRG9jdW1lbnRIYW5kbGVyKGUsdCkpKX1zdGF0aWMgY3JlYXRlRG9jdW1lbnRIYW5kbGVyKGUsdCl7bGV0IGksYT0hMSxyPW51bGw7Y29uc3Qgcz1uZXcgU2V0LG49Z2V0VmVyYm9zaXR5TGV2ZWwoKSx7ZG9jSWQ6byxhcGlWZXJzaW9uOmd9PWUsYz0iNC4xMC4zOCI7aWYoZyE9PWMpdGhyb3cgbmV3IEVycm9yKGBUaGUgQVBJIHZlcnNpb24gIiR7Z30iIGRvZXMgbm90IG1hdGNoIHRoZSBXb3JrZXIgdmVyc2lvbiAiJHtjfSIuYCk7Y29uc3QgbD1bXTtmb3IoY29uc3QgZSBpbltdKWwucHVzaChlKTtpZihsLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoIlRoZSBgQXJyYXkucHJvdG90eXBlYCBjb250YWlucyB1bmV4cGVjdGVkIGVudW1lcmFibGUgcHJvcGVydGllczogIitsLmpvaW4oIiwgIikrIjsgdGh1cyBicmVha2luZyBlLmcuIGBmb3IuLi5pbmAgaXRlcmF0aW9uIG9mIGBBcnJheWBzLiIpO2NvbnN0IGg9bysiX3dvcmtlciI7bGV0IEM9bmV3IE1lc3NhZ2VIYW5kbGVyKGgsbyx0KTtmdW5jdGlvbiBlbnN1cmVOb3RUZXJtaW5hdGVkKCl7aWYoYSl0aHJvdyBuZXcgRXJyb3IoIldvcmtlciB3YXMgdGVybWluYXRlZCIpfWZ1bmN0aW9uIHN0YXJ0V29ya2VyVGFzayhlKXtzLmFkZChlKX1mdW5jdGlvbiBmaW5pc2hXb3JrZXJUYXNrKGUpe2UuZmluaXNoKCk7cy5kZWxldGUoZSl9YXN5bmMgZnVuY3Rpb24gbG9hZERvY3VtZW50KGUpe2F3YWl0IGkuZW5zdXJlRG9jKCJjaGVja0hlYWRlciIpO2F3YWl0IGkuZW5zdXJlRG9jKCJwYXJzZVN0YXJ0WFJlZiIpO2F3YWl0IGkuZW5zdXJlRG9jKCJwYXJzZSIsW2VdKTthd2FpdCBpLmVuc3VyZURvYygiY2hlY2tGaXJzdFBhZ2UiLFtlXSk7YXdhaXQgaS5lbnN1cmVEb2MoImNoZWNrTGFzdFBhZ2UiLFtlXSk7Y29uc3QgdD1hd2FpdCBpLmVuc3VyZURvYygiaXNQdXJlWGZhIik7aWYodCl7Y29uc3QgZT1uZXcgV29ya2VyVGFzaygibG9hZFhmYUZvbnRzIik7c3RhcnRXb3JrZXJUYXNrKGUpO2F3YWl0IFByb21pc2UuYWxsKFtpLmxvYWRYZmFGb250cyhDLGUpLmNhdGNoKChlPT57fSkpLnRoZW4oKCgpPT5maW5pc2hXb3JrZXJUYXNrKGUpKSksaS5sb2FkWGZhSW1hZ2VzKCldKX1jb25zdFthLHJdPWF3YWl0IFByb21pc2UuYWxsKFtpLmVuc3VyZURvYygibnVtUGFnZXMiKSxpLmVuc3VyZURvYygiZmluZ2VycHJpbnRzIildKTtyZXR1cm57bnVtUGFnZXM6YSxmaW5nZXJwcmludHM6cixodG1sRm9yWGZhOnQ/YXdhaXQgaS5lbnN1cmVEb2MoImh0bWxGb3JYZmEiKTpudWxsfX1mdW5jdGlvbiBzZXR1cERvYyhlKXtmdW5jdGlvbiBvblN1Y2Nlc3MoZSl7ZW5zdXJlTm90VGVybWluYXRlZCgpO0Muc2VuZCgiR2V0RG9jIix7cGRmSW5mbzplfSl9ZnVuY3Rpb24gb25GYWlsdXJlKGUpe2Vuc3VyZU5vdFRlcm1pbmF0ZWQoKTtpZihlIGluc3RhbmNlb2YgUGFzc3dvcmRFeGNlcHRpb24pe2NvbnN0IHQ9bmV3IFdvcmtlclRhc2soYFBhc3N3b3JkRXhjZXB0aW9uOiByZXNwb25zZSAke2UuY29kZX1gKTtzdGFydFdvcmtlclRhc2sodCk7Qy5zZW5kV2l0aFByb21pc2UoIlBhc3N3b3JkUmVxdWVzdCIsZSkudGhlbigoZnVuY3Rpb24oe3Bhc3N3b3JkOmV9KXtmaW5pc2hXb3JrZXJUYXNrKHQpO2kudXBkYXRlUGFzc3dvcmQoZSk7cGRmTWFuYWdlclJlYWR5KCl9KSkuY2F0Y2goKGZ1bmN0aW9uKCl7ZmluaXNoV29ya2VyVGFzayh0KTtDLnNlbmQoIkRvY0V4Y2VwdGlvbiIsZSl9KSl9ZWxzZSBDLnNlbmQoIkRvY0V4Y2VwdGlvbiIsd3JhcFJlYXNvbihlKSl9ZnVuY3Rpb24gcGRmTWFuYWdlclJlYWR5KCl7ZW5zdXJlTm90VGVybWluYXRlZCgpO2xvYWREb2N1bWVudCghMSkudGhlbihvblN1Y2Nlc3MsKGZ1bmN0aW9uKGUpe2Vuc3VyZU5vdFRlcm1pbmF0ZWQoKTtlIGluc3RhbmNlb2YgWFJlZlBhcnNlRXhjZXB0aW9uP2kucmVxdWVzdExvYWRlZFN0cmVhbSgpLnRoZW4oKGZ1bmN0aW9uKCl7ZW5zdXJlTm90VGVybWluYXRlZCgpO2xvYWREb2N1bWVudCghMCkudGhlbihvblN1Y2Nlc3Msb25GYWlsdXJlKX0pKTpvbkZhaWx1cmUoZSl9KSl9ZW5zdXJlTm90VGVybWluYXRlZCgpOyhhc3luYyBmdW5jdGlvbiBnZXRQZGZNYW5hZ2VyKHtkYXRhOmUscGFzc3dvcmQ6dCxkaXNhYmxlQXV0b0ZldGNoOmkscmFuZ2VDaHVua1NpemU6YSxsZW5ndGg6cyxkb2NCYXNlVXJsOm4sZW5hYmxlWGZhOmcsZXZhbHVhdG9yT3B0aW9uczpjfSl7Y29uc3QgbD17c291cmNlOm51bGwsZGlzYWJsZUF1dG9GZXRjaDppLGRvY0Jhc2VVcmw6bixkb2NJZDpvLGVuYWJsZVhmYTpnLGV2YWx1YXRvck9wdGlvbnM6YyxoYW5kbGVyOkMsbGVuZ3RoOnMscGFzc3dvcmQ6dCxyYW5nZUNodW5rU2l6ZTphfTtpZihlKXtsLnNvdXJjZT1lO3JldHVybiBuZXcgTG9jYWxQZGZNYW5hZ2VyKGwpfWNvbnN0IGg9bmV3IFBERldvcmtlclN0cmVhbShDKSxRPWguZ2V0RnVsbFJlYWRlcigpLEU9UHJvbWlzZS53aXRoUmVzb2x2ZXJzKCk7bGV0IHUsZD1bXSxmPTA7US5oZWFkZXJzUmVhZHkudGhlbigoZnVuY3Rpb24oKXtpZihRLmlzUmFuZ2VTdXBwb3J0ZWQpe2wuc291cmNlPWg7bC5sZW5ndGg9US5jb250ZW50TGVuZ3RoO2wuZGlzYWJsZUF1dG9GZXRjaHx8PVEuaXNTdHJlYW1pbmdTdXBwb3J0ZWQ7dT1uZXcgTmV0d29ya1BkZk1hbmFnZXIobCk7Zm9yKGNvbnN0IGUgb2YgZCl1LnNlbmRQcm9ncmVzc2l2ZURhdGEoZSk7ZD1bXTtFLnJlc29sdmUodSk7cj1udWxsfX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7RS5yZWplY3QoZSk7cj1udWxsfSkpO25ldyBQcm9taXNlKChmdW5jdGlvbihlLHQpe2NvbnN0IHJlYWRDaHVuaz1mdW5jdGlvbih7dmFsdWU6ZSxkb25lOml9KXt0cnl7ZW5zdXJlTm90VGVybWluYXRlZCgpO2lmKGkpe2lmKCF1KXtjb25zdCBlPWFycmF5QnVmZmVyc1RvQnl0ZXMoZCk7ZD1bXTtzJiZlLmxlbmd0aCE9PXMmJndhcm4oInJlcG9ydGVkIEhUVFAgbGVuZ3RoIGlzIGRpZmZlcmVudCBmcm9tIGFjdHVhbCIpO2wuc291cmNlPWU7dT1uZXcgTG9jYWxQZGZNYW5hZ2VyKGwpO0UucmVzb2x2ZSh1KX1yPW51bGw7cmV0dXJufWYrPWUuYnl0ZUxlbmd0aDtRLmlzU3RyZWFtaW5nU3VwcG9ydGVkfHxDLnNlbmQoIkRvY1Byb2dyZXNzIix7bG9hZGVkOmYsdG90YWw6TWF0aC5tYXgoZixRLmNvbnRlbnRMZW5ndGh8fDApfSk7dT91LnNlbmRQcm9ncmVzc2l2ZURhdGEoZSk6ZC5wdXNoKGUpO1EucmVhZCgpLnRoZW4ocmVhZENodW5rLHQpfWNhdGNoKGUpe3QoZSl9fTtRLnJlYWQoKS50aGVuKHJlYWRDaHVuayx0KX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7RS5yZWplY3QoZSk7cj1udWxsfSkpO3I9ZT0+e2guY2FuY2VsQWxsUmVxdWVzdHMoZSl9O3JldHVybiBFLnByb21pc2V9KShlKS50aGVuKChmdW5jdGlvbihlKXtpZihhKXtlLnRlcm1pbmF0ZShuZXcgQWJvcnRFeGNlcHRpb24oIldvcmtlciB3YXMgdGVybWluYXRlZC4iKSk7dGhyb3cgbmV3IEVycm9yKCJXb3JrZXIgd2FzIHRlcm1pbmF0ZWQiKX1pPWU7aS5yZXF1ZXN0TG9hZGVkU3RyZWFtKCEwKS50aGVuKChlPT57Qy5zZW5kKCJEYXRhTG9hZGVkIix7bGVuZ3RoOmUuYnl0ZXMuYnl0ZUxlbmd0aH0pfSkpfSkpLnRoZW4ocGRmTWFuYWdlclJlYWR5LG9uRmFpbHVyZSl9Qy5vbigiR2V0UGFnZSIsKGZ1bmN0aW9uKGUpe3JldHVybiBpLmdldFBhZ2UoZS5wYWdlSW5kZXgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLmFsbChbaS5lbnN1cmUoZSwicm90YXRlIiksaS5lbnN1cmUoZSwicmVmIiksaS5lbnN1cmUoZSwidXNlclVuaXQiKSxpLmVuc3VyZShlLCJ2aWV3IildKS50aGVuKChmdW5jdGlvbihbZSx0LGksYV0pe3JldHVybntyb3RhdGU6ZSxyZWY6dCxyZWZTdHI6dD8udG9TdHJpbmcoKT8/bnVsbCx1c2VyVW5pdDppLHZpZXc6YX19KSl9KSl9KSk7Qy5vbigiR2V0UGFnZUluZGV4IiwoZnVuY3Rpb24oZSl7Y29uc3QgdD1SZWYuZ2V0KGUubnVtLGUuZ2VuKTtyZXR1cm4gaS5lbnN1cmVDYXRhbG9nKCJnZXRQYWdlSW5kZXgiLFt0XSl9KSk7Qy5vbigiR2V0RGVzdGluYXRpb25zIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGkuZW5zdXJlQ2F0YWxvZygiZGVzdGluYXRpb25zIil9KSk7Qy5vbigiR2V0RGVzdGluYXRpb24iLChmdW5jdGlvbihlKXtyZXR1cm4gaS5lbnN1cmVDYXRhbG9nKCJnZXREZXN0aW5hdGlvbiIsW2UuaWRdKX0pKTtDLm9uKCJHZXRQYWdlTGFiZWxzIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGkuZW5zdXJlQ2F0YWxvZygicGFnZUxhYmVscyIpfSkpO0Mub24oIkdldFBhZ2VMYXlvdXQiLChmdW5jdGlvbihlKXtyZXR1cm4gaS5lbnN1cmVDYXRhbG9nKCJwYWdlTGF5b3V0Iil9KSk7Qy5vbigiR2V0UGFnZU1vZGUiLChmdW5jdGlvbihlKXtyZXR1cm4gaS5lbnN1cmVDYXRhbG9nKCJwYWdlTW9kZSIpfSkpO0Mub24oIkdldFZpZXdlclByZWZlcmVuY2VzIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGkuZW5zdXJlQ2F0YWxvZygidmlld2VyUHJlZmVyZW5jZXMiKX0pKTtDLm9uKCJHZXRPcGVuQWN0aW9uIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGkuZW5zdXJlQ2F0YWxvZygib3BlbkFjdGlvbiIpfSkpO0Mub24oIkdldEF0dGFjaG1lbnRzIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGkuZW5zdXJlQ2F0YWxvZygiYXR0YWNobWVudHMiKX0pKTtDLm9uKCJHZXREb2NKU0FjdGlvbnMiLChmdW5jdGlvbihlKXtyZXR1cm4gaS5lbnN1cmVDYXRhbG9nKCJqc0FjdGlvbnMiKX0pKTtDLm9uKCJHZXRQYWdlSlNBY3Rpb25zIiwoZnVuY3Rpb24oe3BhZ2VJbmRleDplfSl7cmV0dXJuIGkuZ2V0UGFnZShlKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gaS5lbnN1cmUoZSwianNBY3Rpb25zIil9KSl9KSk7Qy5vbigiR2V0T3V0bGluZSIsKGZ1bmN0aW9uKGUpe3JldHVybiBpLmVuc3VyZUNhdGFsb2coImRvY3VtZW50T3V0bGluZSIpfSkpO0Mub24oIkdldE9wdGlvbmFsQ29udGVudENvbmZpZyIsKGZ1bmN0aW9uKGUpe3JldHVybiBpLmVuc3VyZUNhdGFsb2coIm9wdGlvbmFsQ29udGVudENvbmZpZyIpfSkpO0Mub24oIkdldFBlcm1pc3Npb25zIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGkuZW5zdXJlQ2F0YWxvZygicGVybWlzc2lvbnMiKX0pKTtDLm9uKCJHZXRNZXRhZGF0YSIsKGZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLmFsbChbaS5lbnN1cmVEb2MoImRvY3VtZW50SW5mbyIpLGkuZW5zdXJlQ2F0YWxvZygibWV0YWRhdGEiKV0pfSkpO0Mub24oIkdldE1hcmtJbmZvIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGkuZW5zdXJlQ2F0YWxvZygibWFya0luZm8iKX0pKTtDLm9uKCJHZXREYXRhIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGkucmVxdWVzdExvYWRlZFN0cmVhbSgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlLmJ5dGVzfSkpfSkpO0Mub24oIkdldEFubm90YXRpb25zIiwoZnVuY3Rpb24oe3BhZ2VJbmRleDplLGludGVudDp0fSl7cmV0dXJuIGkuZ2V0UGFnZShlKS50aGVuKChmdW5jdGlvbihpKXtjb25zdCBhPW5ldyBXb3JrZXJUYXNrKGBHZXRBbm5vdGF0aW9uczogcGFnZSAke2V9YCk7c3RhcnRXb3JrZXJUYXNrKGEpO3JldHVybiBpLmdldEFubm90YXRpb25zRGF0YShDLGEsdCkudGhlbigoZT0+e2ZpbmlzaFdvcmtlclRhc2soYSk7cmV0dXJuIGV9KSwoZT0+e2ZpbmlzaFdvcmtlclRhc2soYSk7dGhyb3cgZX0pKX0pKX0pKTtDLm9uKCJHZXRGaWVsZE9iamVjdHMiLChmdW5jdGlvbihlKXtyZXR1cm4gaS5lbnN1cmVEb2MoImZpZWxkT2JqZWN0cyIpLnRoZW4oKGU9PmU/LmFsbEZpZWxkc3x8bnVsbCkpfSkpO0Mub24oIkhhc0pTQWN0aW9ucyIsKGZ1bmN0aW9uKGUpe3JldHVybiBpLmVuc3VyZURvYygiaGFzSlNBY3Rpb25zIil9KSk7Qy5vbigiR2V0Q2FsY3VsYXRpb25PcmRlcklkcyIsKGZ1bmN0aW9uKGUpe3JldHVybiBpLmVuc3VyZURvYygiY2FsY3VsYXRpb25PcmRlcklkcyIpfSkpO0Mub24oIlNhdmVEb2N1bWVudCIsKGFzeW5jIGZ1bmN0aW9uKHtpc1B1cmVYZmE6ZSxudW1QYWdlczp0LGFubm90YXRpb25TdG9yYWdlOmEsZmlsZW5hbWU6cn0pe2NvbnN0IHM9W2kucmVxdWVzdExvYWRlZFN0cmVhbSgpLGkuZW5zdXJlQ2F0YWxvZygiYWNyb0Zvcm0iKSxpLmVuc3VyZUNhdGFsb2coImFjcm9Gb3JtUmVmIiksaS5lbnN1cmVEb2MoInN0YXJ0WFJlZiIpLGkuZW5zdXJlRG9jKCJ4cmVmIiksaS5lbnN1cmVEb2MoImxpbmVhcml6YXRpb24iKSxpLmVuc3VyZUNhdGFsb2coInN0cnVjdFRyZWVSb290IildLG49bmV3IFJlZlNldENhY2hlLG89W10sZz1lP251bGw6Z2V0TmV3QW5ub3RhdGlvbnNNYXAoYSksW2MsbCxoLFEsRSx1LGRdPWF3YWl0IFByb21pc2UuYWxsKHMpLGY9RS50cmFpbGVyLmdldFJhdygiUm9vdCIpfHxudWxsO2xldCBwO2lmKGcpe2Q/YXdhaXQgZC5jYW5VcGRhdGVTdHJ1Y3RUcmVlKHtwZGZNYW5hZ2VyOmkseHJlZjpFLG5ld0Fubm90YXRpb25zQnlQYWdlOmd9KSYmKHA9ZCk6YXdhaXQgU3RydWN0VHJlZVJvb3QuY2FuQ3JlYXRlU3RydWN0dXJlVHJlZSh7Y2F0YWxvZ1JlZjpmLHBkZk1hbmFnZXI6aSxuZXdBbm5vdGF0aW9uc0J5UGFnZTpnfSkmJihwPW51bGwpO2NvbnN0IGU9QW5ub3RhdGlvbkZhY3RvcnkuZ2VuZXJhdGVJbWFnZXMoYS52YWx1ZXMoKSxFLGkuZXZhbHVhdG9yT3B0aW9ucy5pc09mZnNjcmVlbkNhbnZhc1N1cHBvcnRlZCksdD12b2lkIDA9PT1wP286W107Zm9yKGNvbnN0W2Escl1vZiBnKXQucHVzaChpLmdldFBhZ2UoYSkudGhlbigodD0+e2NvbnN0IGk9bmV3IFdvcmtlclRhc2soYFNhdmUgKGVkaXRvcik6IHBhZ2UgJHthfWApO3N0YXJ0V29ya2VyVGFzayhpKTtyZXR1cm4gdC5zYXZlTmV3QW5ub3RhdGlvbnMoQyxpLHIsZSxuKS5maW5hbGx5KChmdW5jdGlvbigpe2ZpbmlzaFdvcmtlclRhc2soaSl9KSl9KSkpO251bGw9PT1wP28ucHVzaChQcm9taXNlLmFsbCh0KS50aGVuKChhc3luYygpPT57YXdhaXQgU3RydWN0VHJlZVJvb3QuY3JlYXRlU3RydWN0dXJlVHJlZSh7bmV3QW5ub3RhdGlvbnNCeVBhZ2U6Zyx4cmVmOkUsY2F0YWxvZ1JlZjpmLHBkZk1hbmFnZXI6aSxjaGFuZ2VzOm59KX0pKSk6cCYmby5wdXNoKFByb21pc2UuYWxsKHQpLnRoZW4oKGFzeW5jKCk9Pnthd2FpdCBwLnVwZGF0ZVN0cnVjdHVyZVRyZWUoe25ld0Fubm90YXRpb25zQnlQYWdlOmcscGRmTWFuYWdlcjppLGNoYW5nZXM6bn0pfSkpKX1pZihlKW8ucHVzaChpLnNlcmlhbGl6ZVhmYURhdGEoYSkpO2Vsc2UgZm9yKGxldCBlPTA7ZTx0O2UrKylvLnB1c2goaS5nZXRQYWdlKGUpLnRoZW4oKGZ1bmN0aW9uKHQpe2NvbnN0IGk9bmV3IFdvcmtlclRhc2soYFNhdmU6IHBhZ2UgJHtlfWApO3N0YXJ0V29ya2VyVGFzayhpKTtyZXR1cm4gdC5zYXZlKEMsaSxhLG4pLmZpbmFsbHkoKGZ1bmN0aW9uKCl7ZmluaXNoV29ya2VyVGFzayhpKX0pKX0pKSk7Y29uc3QgbT1hd2FpdCBQcm9taXNlLmFsbChvKTtsZXQgeT1udWxsO2lmKGUpe3k9bVswXTtpZigheSlyZXR1cm4gYy5ieXRlc31lbHNlIGlmKDA9PT1uLnNpemUpcmV0dXJuIGMuYnl0ZXM7Y29uc3Qgdz1oJiZsIGluc3RhbmNlb2YgRGljdCYmbi52YWx1ZXMoKS5zb21lKChlPT5lLm5lZWRBcHBlYXJhbmNlcykpLGI9bCBpbnN0YW5jZW9mIERpY3QmJmwuZ2V0KCJYRkEiKXx8bnVsbDtsZXQgRD1udWxsLFM9ITE7aWYoQXJyYXkuaXNBcnJheShiKSl7Zm9yKGxldCBlPTAsdD1iLmxlbmd0aDtlPHQ7ZSs9MilpZigiZGF0YXNldHMiPT09YltlXSl7RD1iW2UrMV07Uz0hMH1udWxsPT09RCYmKEQ9RS5nZXROZXdUZW1wb3JhcnlSZWYoKSl9ZWxzZSBiJiZ3YXJuKCJVbnN1cHBvcnRlZCBYRkEgdHlwZS4iKTtsZXQgaz1PYmplY3QuY3JlYXRlKG51bGwpO2lmKEUudHJhaWxlcil7Y29uc3QgZT1PYmplY3QuY3JlYXRlKG51bGwpLHQ9RS50cmFpbGVyLmdldCgiSW5mbyIpfHxudWxsO2lmKHQgaW5zdGFuY2VvZiBEaWN0KWZvcihjb25zdFtpLGFdb2YgdCkic3RyaW5nIj09dHlwZW9mIGEmJihlW2ldPXN0cmluZ1RvUERGU3RyaW5nKGEpKTtrPXtyb290UmVmOmYsZW5jcnlwdFJlZjpFLnRyYWlsZXIuZ2V0UmF3KCJFbmNyeXB0Iil8fG51bGwsbmV3UmVmOkUuZ2V0TmV3VGVtcG9yYXJ5UmVmKCksaW5mb1JlZjpFLnRyYWlsZXIuZ2V0UmF3KCJJbmZvIil8fG51bGwsaW5mbzplLGZpbGVJZHM6RS50cmFpbGVyLmdldCgiSUQiKXx8bnVsbCxzdGFydFhSZWY6dT9ROkUubGFzdFhSZWZTdHJlYW1Qb3M/P1EsZmlsZW5hbWU6cn19cmV0dXJuIGluY3JlbWVudGFsVXBkYXRlKHtvcmlnaW5hbERhdGE6Yy5ieXRlcyx4cmVmSW5mbzprLGNoYW5nZXM6bix4cmVmOkUsaGFzWGZhOiEhYix4ZmFEYXRhc2V0c1JlZjpELGhhc1hmYURhdGFzZXRzRW50cnk6UyxuZWVkQXBwZWFyYW5jZXM6dyxhY3JvRm9ybVJlZjpoLGFjcm9Gb3JtOmwseGZhRGF0YTp5LHVzZVhyZWZTdHJlYW06aXNEaWN0KEUudG9wRGljdCwiWFJlZiIpfSkuZmluYWxseSgoKCk9PntFLnJlc2V0TmV3VGVtcG9yYXJ5UmVmKCl9KSl9KSk7Qy5vbigiR2V0T3BlcmF0b3JMaXN0IiwoZnVuY3Rpb24oZSx0KXtjb25zdCBhPWUucGFnZUluZGV4O2kuZ2V0UGFnZShhKS50aGVuKChmdW5jdGlvbihpKXtjb25zdCByPW5ldyBXb3JrZXJUYXNrKGBHZXRPcGVyYXRvckxpc3Q6IHBhZ2UgJHthfWApO3N0YXJ0V29ya2VyVGFzayhyKTtjb25zdCBzPW4+PWJBP0RhdGUubm93KCk6MDtpLmdldE9wZXJhdG9yTGlzdCh7aGFuZGxlcjpDLHNpbms6dCx0YXNrOnIsaW50ZW50OmUuaW50ZW50LGNhY2hlS2V5OmUuY2FjaGVLZXksYW5ub3RhdGlvblN0b3JhZ2U6ZS5hbm5vdGF0aW9uU3RvcmFnZSxtb2RpZmllZElkczplLm1vZGlmaWVkSWRzfSkudGhlbigoZnVuY3Rpb24oZSl7ZmluaXNoV29ya2VyVGFzayhyKTtzJiZpbmZvKGBwYWdlPSR7YSsxfSAtIGdldE9wZXJhdG9yTGlzdDogdGltZT0ke0RhdGUubm93KCktc31tcywgbGVuPSR7ZS5sZW5ndGh9YCk7dC5jbG9zZSgpfSksKGZ1bmN0aW9uKGUpe2ZpbmlzaFdvcmtlclRhc2socik7ci50ZXJtaW5hdGVkfHx0LmVycm9yKGUpfSkpfSkpfSkpO0Mub24oIkdldFRleHRDb250ZW50IiwoZnVuY3Rpb24oZSx0KXtjb25zdHtwYWdlSW5kZXg6YSxpbmNsdWRlTWFya2VkQ29udGVudDpyLGRpc2FibGVOb3JtYWxpemF0aW9uOnN9PWU7aS5nZXRQYWdlKGEpLnRoZW4oKGZ1bmN0aW9uKGUpe2NvbnN0IGk9bmV3IFdvcmtlclRhc2soIkdldFRleHRDb250ZW50OiBwYWdlICIrYSk7c3RhcnRXb3JrZXJUYXNrKGkpO2NvbnN0IG89bj49YkE/RGF0ZS5ub3coKTowO2UuZXh0cmFjdFRleHRDb250ZW50KHtoYW5kbGVyOkMsdGFzazppLHNpbms6dCxpbmNsdWRlTWFya2VkQ29udGVudDpyLGRpc2FibGVOb3JtYWxpemF0aW9uOnN9KS50aGVuKChmdW5jdGlvbigpe2ZpbmlzaFdvcmtlclRhc2soaSk7byYmaW5mbyhgcGFnZT0ke2ErMX0gLSBnZXRUZXh0Q29udGVudDogdGltZT1gKyhEYXRlLm5vdygpLW8pKyJtcyIpO3QuY2xvc2UoKX0pLChmdW5jdGlvbihlKXtmaW5pc2hXb3JrZXJUYXNrKGkpO2kudGVybWluYXRlZHx8dC5lcnJvcihlKX0pKX0pKX0pKTtDLm9uKCJHZXRTdHJ1Y3RUcmVlIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGkuZ2V0UGFnZShlLnBhZ2VJbmRleCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGkuZW5zdXJlKGUsImdldFN0cnVjdFRyZWUiKX0pKX0pKTtDLm9uKCJGb250RmFsbGJhY2siLChmdW5jdGlvbihlKXtyZXR1cm4gaS5mb250RmFsbGJhY2soZS5pZCxDKX0pKTtDLm9uKCJDbGVhbnVwIiwoZnVuY3Rpb24oZSl7cmV0dXJuIGkuY2xlYW51cCghMCl9KSk7Qy5vbigiVGVybWluYXRlIiwoZnVuY3Rpb24oZSl7YT0hMDtjb25zdCB0PVtdO2lmKGkpe2kudGVybWluYXRlKG5ldyBBYm9ydEV4Y2VwdGlvbigiV29ya2VyIHdhcyB0ZXJtaW5hdGVkLiIpKTtjb25zdCBlPWkuY2xlYW51cCgpO3QucHVzaChlKTtpPW51bGx9ZWxzZSBjbGVhckdsb2JhbENhY2hlcygpO3I/LihuZXcgQWJvcnRFeGNlcHRpb24oIldvcmtlciB3YXMgdGVybWluYXRlZC4iKSk7Zm9yKGNvbnN0IGUgb2Ygcyl7dC5wdXNoKGUuZmluaXNoZWQpO2UudGVybWluYXRlKCl9cmV0dXJuIFByb21pc2UuYWxsKHQpLnRoZW4oKGZ1bmN0aW9uKCl7Qy5kZXN0cm95KCk7Qz1udWxsfSkpfSkpO0Mub24oIlJlYWR5IiwoZnVuY3Rpb24odCl7c2V0dXBEb2MoZSk7ZT1udWxsfSkpO3JldHVybiBofXN0YXRpYyBpbml0aWFsaXplRnJvbVBvcnQoZSl7Y29uc3QgdD1uZXcgTWVzc2FnZUhhbmRsZXIoIndvcmtlciIsIm1haW4iLGUpO3RoaXMuc2V0dXAodCxlKTt0LnNlbmQoInJlYWR5IixudWxsKX19dmFyIHVvPV9fd2VicGFja19leHBvcnRzX18uV29ya2VyTWVzc2FnZUhhbmRsZXI7ZXhwb3J0e3VvIGFzIFdvcmtlck1lc3NhZ2VIYW5kbGVyfTs=";
function VM(a, U, l) {
const d = a.contentWindow.document.createElement("style");
d.textContent = `
@page {
margin: 3mm;
size: ${U}pt ${l}pt;
}
body {
margin: 0;
}
canvas {
width: 100%;
page-break-after: always;
page-break-before: avoid;
page-break-inside: avoid;
}
`, a.contentWindow.document.head.appendChild(d), a.contentWindow.document.body.style.width = "100%";
}
function QM(a) {
return new Promise((U) => {
const l = document.createElement("iframe");
l.width = "0", l.height = "0", l.style.position = "absolute", l.style.top = "0", l.style.left = "0", l.style.border = "none", l.style.overflow = "hidden", l.onload = () => U(l), a.appendChild(l);
});
}
function iM(a, U) {
const l = URL.createObjectURL(
new Blob([a], {
type: "application/pdf"
})
), d = document.createElement("a");
d.href = l, d.download = U, d.style.display = "none", document.body.append(d), d.click(), setTimeout(() => {
URL.revokeObjectURL(l), document.body.removeChild(d);
}, 1e3);
}
function NN(a) {
for (; a != null && a.firstChild; )
a.removeChild(a.firstChild);
}
function eN(a) {
return a ? Object.prototype.hasOwnProperty.call(a, "_pdfInfo") : !1;
}
function GQ(a) {
a == null || a.querySelectorAll("canvas").forEach((U) => {
var l;
U.width = 1, U.height = 1, (l = U.getContext("2d")) == null || l.clearRect(0, 0, 1, 1);
});
}
function lb({
onError: a,
onPasswordRequest: U,
onProgress: l,
source: d
}) {
const t = TV(null), Z = TV(null);
return Ab(async () => {
const F = KR(d);
if (F) {
if (eN(F)) {
t.value = F;
return;
}
} else return;
try {
Z.value = aM(
F
), U && (Z.value.onPassword = (n, s) => {
U({
callback: n,
isWrongPassword: s === nM.INCORRECT_PASSWORD
});
}), l && (Z.value.onProgress = l), t.value = await Z.value.promise;
} catch (n) {
if (t.value = null, a)
a(n);
else
throw n;
}
}), LQ(t, (F, n) => {
n == null || n.destroy();
}), qN(() => {
var F, n, s, W;
(F = Z.value) != null && F.onPassword && (Z.value.onPassword = null), (n = Z.value) != null && n.onProgress && (Z.value.onProgress = null), (s = Z.value) == null || s.destroy(), eN(KR(d)) || (W = t.value) == null || W.destroy();
}), {
doc: t
};
}
var Ws = {};
Ws.d = (a, U) => {
for (var l in U)
Ws.o(U, l) && !Ws.o(a, l) && Object.defineProperty(a, l, { enumerable: !0, get: U[l] });
};
Ws.o = (a, U) => Object.prototype.hasOwnProperty.call(a, U);
var Il = globalThis.pdfjsViewer = {};
Ws.d(Il, {
AnnotationLayerBuilder: () => (
/* reexport */
Qb
),
DownloadManager: () => (
/* reexport */
sJ
),
EventBus: () => (
/* reexport */
ib
),
FindState: () => (
/* reexport */
VZ
),
GenericL10n: () => (
/* reexport */
zn
),
LinkTarget: () => (
/* reexport */
eF
),
PDFFindController: () => (
/* reexport */
PM
),
PDFHistory: () => (
/* reexport */
FG
),
PDFLinkService: () => (
/* reexport */
yV
),
PDFPageView: () => (
/* reexport */
Lb
),
PDFScriptingManager: () => (
/* reexport */
hG
),
PDFSinglePageViewer: () => (
/* reexport */
JG
),
PDFViewer: () => (
/* reexport */
rb
),
ProgressBar: () => (
/* reexport */
XM
),
RenderingStates: () => (
/* reexport */
Cl
),
ScrollMode: () => (
/* reexport */
Ql
),
SimpleLinkService: () => (
/* reexport */
rR
),
SpreadMode: () => (
/* reexport */
SU
),
StructTreeLayerBuilder: () => (
/* reexport */
Yb
),
TextLayerBuilder: () => (
/* reexport */
kV
),
XfaLayerBuilder: () => (
/* reexport */
zb
),
parseQueryString: () => (
/* reexport */
VQ
)
});
const RM = "auto", Ub = 1, hN = 1.1, NM = 0.1, eM = 10, SQ = 0, hM = 1.25, bN = 40, mN = 5, Cl = {
INITIAL: 0,
RUNNING: 1,
PAUSED: 2,
FINISHED: 3
}, Zc = {
UNKNOWN: 0,
NORMAL: 1,
CHANGING: 2,
FULLSCREEN: 3
}, Nt = {
DISABLE: 0,
ENABLE: 1,
ENABLE_PERMISSIONS: 2
}, Ql = {
UNKNOWN: -1,
VERTICAL: 0,
HORIZONTAL: 1,
WRAPPED: 2,
PAGE: 3
}, SU = {
UNKNOWN: -1,
NONE: 0,
ODD: 1,
EVEN: 2
};
function db(a, U, l = !1) {
let d = a.offsetParent;
if (!d) {
console.error("offsetParent is not set -- cannot scroll");
return;
}
let t = a.offsetTop + a.clientTop, Z = a.offsetLeft + a.clientLeft;
for (; d.clientHeight === d.scrollHeight && d.clientWidth === d.scrollWidth || l && (d.classList.contains("markedContent") || getComputedStyle(d).overflow === "hidden"); )
if (t += d.offsetTop, Z += d.offsetLeft, d = d.offsetParent, !d)
return;
U && (U.top !== void 0 && (t += U.top), U.left !== void 0 && (Z += U.left, d.scrollLeft = Z)), d.scrollTop = t;
}
function bM(a, U, l = void 0) {
const d = function(F) {
Z || (Z = window.requestAnimationFrame(function() {
Z = null;
const s = a.scrollLeft, W = t.lastX;
s !== W && (t.right = s > W), t.lastX = s;
const V = a.scrollTop, Q = t.lastY;
V !== Q && (t.down = V > Q), t.lastY = V, U(t);
}));
}, t = {
right: !0,
down: !0,
lastX: a.scrollLeft,
lastY: a.scrollTop,
_eventHandler: d
};
let Z = null;
return a.addEventListener("scroll", d, {
useCapture: !0,
signal: l
}), l == null || l.addEventListener("abort", () => window.cancelAnimationFrame(Z), {
once: !0
}), t;
}
function VQ(a) {
const U = /* @__PURE__ */ new Map();
for (const [l, d] of new URLSearchParams(a))
U.set(l.toLowerCase(), d);
return U;
}
const MN = /[\x00-\x1F]/g;
function Vs(a, U = !1) {
return MN.test(a) ? U ? a.replaceAll(MN, (l) => l === "\0" ? "" : " ") : a.replaceAll("\0", "") : a;
}
function bs(a, U, l = 0) {
let d = l, t = a.length - 1;
if (t < 0 || !U(a[t]))
return a.length;
if (U(a[d]))
return d;
for (; d < t; ) {
const Z = d + t >> 1, F = a[Z];
U(F) ? t = Z : d = Z + 1;
}
return d;
}
function JN(a) {
if (Math.floor(a) === a)
return [a, 1];
const U = 1 / a, l = 8;
if (U > l)
return [1, l];
if (Math.floor(U) === U)
return [1, U];
const d = a > 1 ? U : a;
let t = 0, Z = 1, F = 1, n = 1;
for (; ; ) {
const W = t + F, V = Z + n;
if (V > l)
break;
d <= W / V ? (F = W, n = V) : (t = W, Z = V);
}
let s;
return d - t / Z < F / n - d ? s = d === a ? [t, Z] : [Z, t] : s = d === a ? [F, n] : [n, F], s;
}
function BW(a, U) {
return a - a % U;
}
function mM(a, U, l) {
if (a < 2)
return a;
let d = U[a].div, t = d.offsetTop + d.clientTop;
t >= l && (d = U[a - 1].div, t = d.offsetTop + d.clientTop);
for (let Z = a - 2; Z >= 0 && (d = U[Z].div, !(d.offsetTop + d.clientTop + d.clientHeight <= t)); --Z)
a = Z;
return a;
}
function MM({
scrollEl: a,
views: U,
sortByVisibility: l = !1,
horizontal: d = !1,
rtl: t = !1
}) {
const Z = a.scrollTop, F = Z + a.clientHeight, n = a.scrollLeft, s = n + a.clientWidth;
function W(G) {
const S = G.div;
return S.offsetTop + S.clientTop + S.clientHeight > Z;
}
function V(G) {
const S = G.div, T = S.offsetLeft + S.clientLeft, u = T + S.clientWidth;
return t ? T < s : u > n;
}
const Q = [], i = /* @__PURE__ */ new Set(), N = U.length;
let e = bs(U, d ? V : W);
e > 0 && e < N && !d && (e = mM(e, U, Z));
let m = d ? s : -1;
for (let G = e; G < N; G++) {
const S = U[G], T = S.div, u = T.offsetLeft + T.clientLeft, Y = T.offsetTop + T.clientTop, o = T.clientWidth, B = T.clientHeight, X = u + o, p = Y + B;
if (m === -1)
p >= F && (m = p);
else if ((d ? u : Y) > m)
break;
if (p <= Z || Y >= F || X <= n || u >= s)
continue;
const y = Math.max(0, Z - Y) + Math.max(0, p - F), r = Math.max(0, n - u) + Math.max(0, X - s), D = (B - y) / B, E = (o - r) / o, P = D * E * 100 | 0;
Q.push({
id: S.id,
x: u,
y: Y,
view: S,
percent: P,
widthPercent: E * 100 | 0
}), i.add(S.id);
}
const J = Q[0], M = Q.at(-1);
return l && Q.sort(function(G, S) {
const T = G.percent - S.percent;
return Math.abs(T) > 1e-3 ? -T : G.id - S.id;
}), {
first: J,
last: M,
views: Q,
ids: i
};
}
function tb(a) {
return Number.isInteger(a) && a % 90 === 0;
}
function JM(a) {
return Number.isInteger(a) && Object.values(Ql).includes(a) && a !== Ql.UNKNOWN;
}
function GM(a) {
return Number.isInteger(a) && Object.values(SU).includes(a) && a !== SU.UNKNOWN;
}
function GN(a) {
return a.width <= a.height;
}
new Promise(function(a) {
window.requestAnimationFrame(a);
});
const SM = document.documentElement.style;
function TM(a, U, l) {
return Math.min(Math.max(a, U), l);
}
var KZ, X0, HZ, Vn, u0;
class XM {
constructor(U) {
b(this, KZ, null);
b(this, X0, null);
b(this, HZ, 0);
b(this, Vn, null);
b(this, u0, !0);
R(this, KZ, U.classList), R(this, Vn, U.style);
}
get percent() {
return c(this, HZ);
}
set percent(U) {
if (R(this, HZ, TM(U, 0, 100)), isNaN(U)) {
c(this, KZ).add("indeterminate");
return;
}
c(this, KZ).remove("indeterminate"), c(this, Vn).setProperty("--progressBar-percent", `${c(this, HZ)}%`);
}
setWidth(U) {
if (!U)
return;
const d = U.parentNode.offsetWidth - U.offsetWidth;
d > 0 && c(this, Vn).setProperty("--progressBar-end-offset", `${d}px`);
}
setDisableAutoFetch(U = 5e3) {
c(this, HZ) === 100 || isNaN(c(this, HZ)) || (c(this, X0) && clearTimeout(c(this, X0)), this.show(), R(this, X0, setTimeout(() => {
R(this, X0, null), this.hide();
}, U)));
}
hide() {
c(this, u0) && (R(this, u0, !1), c(this, KZ).add("hidden"));
}
show() {
c(this, u0) || (R(this, u0, !0), c(this, KZ).remove("hidden"));
}
}
KZ = new WeakMap(), X0 = new WeakMap(), HZ = new WeakMap(), Vn = new WeakMap(), u0 = new WeakMap();
function uM(a) {
let U = Ql.VERTICAL, l = SU.NONE;
switch (a) {
case "SinglePage":
U = Ql.PAGE;
break;
case "OneColumn":
break;
case "TwoPageLeft":
U = Ql.PAGE;
case "TwoColumnLeft":
l = SU.ODD;
break;
case "TwoPageRight":
U = Ql.PAGE;
case "TwoColumnRight":
l = SU.EVEN;
break;
}
return {
scrollMode: U,
spreadMode: l
};
}
const yW = function() {
const a = document.createElement("div");
return a.style.width = "round(down, calc(1.6666666666666665 * 792px), 1px)", a.style.width === "calc(1320px)" ? Math.fround : (U) => U;
}(), Sd = {
SPACE: 0,
ALPHA_LETTER: 1,
PUNCT: 2,
HAN_LETTER: 3,
KATAKANA_LETTER: 4,
HIRAGANA_LETTER: 5,
HALFWIDTH_KATAKANA_LETTER: 6,
THAI_LETTER: 7
};
function YM(a) {
return a < 11904;
}
function oM(a) {
return (a & 65408) === 0;
}
function pM(a) {
return a >= 97 && a <= 122 || a >= 65 && a <= 90;
}
function BM(a) {
return a >= 48 && a <= 57;
}
function yM(a) {
return a === 32 || a === 9 || a === 13 || a === 10;
}
function zM(a) {
return a >= 13312 && a <= 40959 || a >= 63744 && a <= 64255;
}
function LM(a) {
return a >= 12448 && a <= 12543;
}
function kM(a) {
return a >= 12352 && a <= 12447;
}
function IM(a) {
return a >= 65376 && a <= 65439;
}
function DM(a) {
return (a & 65408) === 3584;
}
function zW(a) {
return YM(a) ? oM(a) ? yM(a) ? Sd.SPACE : pM(a) || BM(a) || a === 95 ? Sd.ALPHA_LETTER : Sd.PUNCT : DM(a) ? Sd.THAI_LETTER : a === 160 ? Sd.SPACE : Sd.ALPHA_LETTER : zM(a) ? Sd.HAN_LETTER : LM(a) ? Sd.KATAKANA_LETTER : kM(a) ? Sd.HIRAGANA_LETTER : IM(a) ? Sd.HALFWIDTH_KATAKANA_LETTER : Sd.ALPHA_LETTER;
}
let SN;
function EM() {
return SN || (SN = " ¨ª¯²-µ¸-º¼-¾IJ-ijĿ-ŀʼnſDŽ-njDZ-dzʰ-ʸ˘-˝ˠ-ˤʹͺ;΄-΅·ϐ-ϖϰ-ϲϴ-ϵϹևٵ-ٸक़-य़ড়-ঢ়য়ਲ਼ਸ਼ਖ਼-ਜ਼ਫ਼ଡ଼-ଢ଼ำຳໜ-ໝ༌གྷཌྷདྷབྷཛྷཀྵჼᴬ-ᴮᴰ-ᴺᴼ-ᵍᵏ-ᵪᵸᶛ-ᶿẚ-ẛάέήίόύώΆ᾽-῁ΈΉ῍-῏ΐΊ῝-῟ΰΎ῭-`ΌΏ´-῾ - ‑‗․-… ″-‴‶-‷‼‾⁇-⁉⁗ ⁰-ⁱ⁴-₎ₐ-ₜ₨℀-℃℅-ℇ℉-ℓℕ-№ℙ-ℝ℠-™ℤΩℨK-ℭℯ-ℱℳ-ℹ℻-⅀ⅅ-ⅉ⅐-ⅿ↉∬-∭∯-∰〈-〉①-⓪⨌⩴-⩶⫝̸ⱼ-ⱽⵯ⺟⻳⼀-⿕ 〶〸-〺゛-゜ゟヿㄱ-ㆎ㆒-㆟㈀-㈞㈠-㉇㉐-㉾㊀-㏿ꚜ-ꚝꝰꟲ-ꟴꟸ-ꟹꭜ-ꭟꭩ豈-嗀塚晴凞-羽蘒諸逸-都飯-舘並-龎ff-stﬓ-ﬗיִײַ-זּטּ-לּמּנּ-סּףּ-פּצּ-ﮱﯓ-ﴽﵐ-ﶏﶒ-ﷇﷰ-﷼︐-︙︰-﹄﹇-﹒﹔-﹦﹨-﹫ﹰ-ﹲﹴﹶ-ﻼ!-하-ᅦᅧ-ᅬᅭ-ᅲᅳ-ᅵ¢-₩"), SN;
}
const VZ = {
FOUND: 0,
NOT_FOUND: 1,
WRAPPED: 2,
PENDING: 3
}, rM = 250, CM = -50, wM = -400, TN = {
"‐": "-",
"‘": "'",
"’": "'",
"‚": "'",
"‛": "'",
"“": '"',
"”": '"',
"„": '"',
"‟": '"',
"¼": "1/4",
"½": "1/2",
"¾": "3/4"
}, XN = /* @__PURE__ */ new Set([12441, 12442, 2381, 2509, 2637, 2765, 2893, 3021, 3149, 3277, 3387, 3388, 3405, 3530, 3642, 3770, 3972, 4153, 4154, 5908, 5940, 6098, 6752, 6980, 7082, 7083, 7154, 7155, 11647, 43014, 43052, 43204, 43347, 43456, 43766, 44013, 3158, 3953, 3954, 3962, 3963, 3964, 3965, 3968, 3956]);
let uN;
const xM = new RegExp("\\p{M}+", "gu"), jM = new RegExp("([.*+?^${}()|[\\]\\\\])|(\\p{P})|(\\s+)|(\\p{M})|(\\p{L})", "gu"), OM = new RegExp("([^\\p{M}])\\p{M}*$", "u"), gM = new RegExp("^\\p{M}*([^\\p{M}])", "u"), KM = /[\uAC00-\uD7AF\uFA6C\uFACF-\uFAD1\uFAD5-\uFAD7]+/g, YN = /* @__PURE__ */ new Map(), HM = "[\\u1100-\\u1112\\ud7a4-\\ud7af\\ud84a\\ud84c\\ud850\\ud854\\ud857\\ud85f]", oN = /* @__PURE__ */ new Map();
let TQ = null, XQ = null;
function uQ(a) {
const U = [];
let l;
for (; (l = KM.exec(a)) !== null; ) {
let {
index: m
} = l;
for (const J of l[0]) {
let M = YN.get(J);
M || (M = J.normalize("NFD").length, YN.set(J, M)), U.push([M, m++]);
}
}
let d;
if (U.length === 0 && TQ)
d = TQ;
else if (U.length > 0 && XQ)
d = XQ;
else {
const m = Object.keys(TN).join(""), J = EM(), T = `([${m}])|([${J}])|((?:゙|゚)\\n)|(\\p{M}+(?:-\\n)?)|(\\p{Ll}-\\n\\p{Lu})|(\\S-\\n)|((?:\\p{Ideographic}|[-ヿ])\\n)|(\\n)`;
U.length === 0 ? d = TQ = new RegExp(T + "|(\\u0000)", "gum") : d = XQ = new RegExp(T + `|(${HM})`, "gum");
}
const t = [];
for (; (l = xM.exec(a)) !== null; )
t.push([l[0].length, l.index]);
let Z = a.normalize("NFD");
const F = [0, 0];
let n = 0, s = 0, W = 0, V = 0, Q = 0, i = !1;
Z = Z.replace(d, (m, J, M, G, S, T, u, Y, o, B, X) => {
var p, y, r;
if (X -= V, J) {
const D = TN[J], E = D.length;
for (let P = 1; P < E; P++)
F.push(X - W + P, W - P);
return W -= E - 1, D;
}
if (M) {
let D = oN.get(M);
D || (D = M.normalize("NFKC"), oN.set(M, D));
const E = D.length;
for (let P = 1; P < E; P++)
F.push(X - W + P, W - P);
return W -= E - 1, D;
}
if (G)
return i = !0, X + Q === ((p = t[n]) == null ? void 0 : p[1]) ? ++n : (F.push(X - 1 - W + 1, W - 1), W -= 1, V += 1), F.push(X - W + 1, W), V += 1, Q += 1, G.charAt(0);
if (S) {
const D = S.endsWith(`
`), E = D ? S.length - 2 : S.length;
i = !0;
let P = E;
X + Q === ((y = t[n]) == null ? void 0 : y[1]) && (P -= t[n][0], ++n);
for (let k = 1; k <= P; k++)
F.push(X - 1 - W + k, W - k);
return W -= P, V += P, D ? (X += E - 1, F.push(X - W + 1, 1 + W), W += 1, V += 1, Q += 1, S.slice(0, E)) : S;
}
if (T)
return V += 1, Q += 1, T.replace(`
`, "");
if (u) {
const D = u.length - 2;
return F.push(X - W + D, 1 + W), W += 1, V += 1, Q += 1, u.slice(0, -2);
}
if (Y) {
const D = Y.length - 1;
return F.push(X - W + D, W), V += 1, Q += 1, Y.slice(0, -1);
}
if (o)
return F.push(X - W + 1, W - 1), W -= 1, V += 1, Q += 1, " ";
if (X + Q === ((r = U[s]) == null ? void 0 : r[1])) {
const D = U[s][0] - 1;
++s;
for (let E = 1; E <= D; E++)
F.push(X - (W - E), W - E);
W -= D, V += D;
}
return B;
}), F.push(Z.length, W);
const N = new Uint32Array(F.length >> 1), e = new Int32Array(F.length >> 1);
for (let m = 0, J = F.length; m < J; m += 2)
N[m >> 1] = F[m], e[m >> 1] = F[m + 1];
return [Z, [N, e], i];
}
function vM(a, U, l) {
if (!a)
return [U, l];
const [d, t] = a, Z = U, F = U + l - 1;
let n = bs(d, (i) => i >= Z);
d[n] > Z && --n;
let s = bs(d, (i) => i >= F, n);
d[s] > F && --s;
const W = Z + t[n], Q = F + t[s] + 1 - W;
return [W, Q];
}
var nU, Qn, Y0, K, Zb, vi, Pi, Fb, cb, fi, nb, sb, RV, Zs, $0, ab, Ai, _i, NV, Wb, qi, $i, Fs;
class PM {
constructor({
linkService: U,
eventBus: l,
updateMatchesCountOnProgress: d = !0
}) {
b(this, K);
b(this, nU, null);
b(this, Qn, !0);
b(this, Y0, 0);
this._linkService = U, this._eventBus = l, R(this, Qn, d), this.onIsPageVisible = null, h(this, K, vi).call(this), l._on("find", h(this, K, Zb).bind(this)), l._on("findbarclose", h(this, K, Wb).bind(this));
}
get highlightMatches() {
return this._highlightMatches;
}
get pageMatches() {
return this._pageMatches;
}
get pageMatchesLength() {
return this._pageMatchesLength;
}
get selected() {
return this._selected;
}
get state() {
return c(this, nU);
}
setDocument(U) {
this._pdfDocument && h(this, K, vi).call(this), U && (this._pdfDocument = U, this._firstPageCapability.resolve());
}
scrollMatchIntoView({
element: U = null,
selectedLeft: l = 0,
pageIndex: d = -1,
matchIndex: t = -1
}) {
if (!this._scrollMatches || !U)
return;
if (t === -1 || t !== this._selected.matchIdx)
return;
if (d === -1 || d !== this._selected.pageIdx)
return;
this._scrollMatches = !1;
const Z = {
top: CM,
left: l + wM
};
db(U, Z, !0);
}
match(U, l, d) {
const t = this._hasDiacritics[d];
let Z = !1;
if (typeof U == "string" ? [Z, U] = h(this, K, fi).call(this, U, t) : U = U.sort().reverse().map((Q) => {
const [i, N] = h(this, K, fi).call(this, Q, t);
return Z || (Z = i), `(${N})`;
}).join("|"), !U)
return;
const {
caseSensitive: F,
entireWord: n
} = c(this, nU), s = `g${Z ? "u" : ""}${F ? "" : "i"}`;
U = new RegExp(U, s);
const W = [];
let V;
for (; (V = U.exec(l)) !== null; )
n && !h(this, K, cb).call(this, l, V.index, V[0].length) || W.push({
index: V.index,
length: V[0].length
});
return W;
}
}
nU = new WeakMap(), Qn = new WeakMap(), Y0 = new WeakMap(), K = new WeakSet(), Zb = function(U) {
if (!U)
return;
const l = this._pdfDocument, {
type: d
} = U;
(c(this, nU) === null || h(this, K, Fb).call(this, U)) && (this._dirtyMatch = !0), R(this, nU, U), d !== "highlightallchange" && h(this, K, Fs).call(this, VZ.PENDING), this._firstPageCapability.promise.then(() => {
if (!this._pdfDocument || l && this._pdfDocument !== l)
return;
h(this, K, sb).call(this);
const t = !this._highlightMatches, Z = !!this._findTimeout;
this._findTimeout && (clearTimeout(this._findTimeout), this._findTimeout = null), d ? this._dirtyMatch ? h(this, K, $0).call(this) : d === "again" ? (h(this, K, $0).call(this), t && c(this, nU).highlightAll && h(this, K, Zs).call(this)) : d === "highlightallchange" ? (Z ? h(this, K, $0).call(this) : this._highlightMatches = !0, h(this, K, Zs).call(this)) : h(this, K, $0).call(this) : this._findTimeout = setTimeout(() => {
h(this, K, $0).call(this), this._findTimeout = null;
}, rM);
});
}, vi = function() {
this._highlightMatches = !1, this._scrollMatches = !1, this._pdfDocument = null, this._pageMatches = [], this._pageMatchesLength = [], R(this, Y0, 0), R(this, nU, null), this._selected = {
pageIdx: -1,
matchIdx: -1
}, this._offset = {
pageIdx: null,
matchIdx: null,
wrapped: !1
}, this._extractTextPromises = [], this._pageContents = [], this._pageDiffs = [], this._hasDiacritics = [], this._matchesCountTotal = 0, this._pagesToSearch = null, this._pendingFindMatches = /* @__PURE__ */ new Set(), this._resumePageIdx = null, this._dirtyMatch = !1, clearTimeout(this._findTimeout), this._findTimeout = null, this._firstPageCapability = Promise.withResolvers();
}, Pi = function() {
const {
query: U
} = c(this, nU);
return typeof U == "string" ? (U !== this._rawQuery && (this._rawQuery = U, [this._normalizedQuery] = uQ(U)), this._normalizedQuery) : (U || []).filter((l) => !!l).map((l) => uQ(l)[0]);
}, Fb = function(U) {
var F;
const l = U.query, d = c(this, nU).query, t = typeof l;
if (t !== typeof d)
return !0;
if (t === "string") {
if (l !== d)
return !0;
} else if (JSON.stringify(l) !== JSON.stringify(d))
return !0;
switch (U.type) {
case "again":
const n = this._selected.pageIdx + 1, s = this._linkService;
return n >= 1 && n <= s.pagesCount && n !== s.page && !(((F = this.onIsPageVisible) == null ? void 0 : F.call(this, n)) ?? !0);
case "highlightallchange":
return !1;
}
return !0;
}, cb = function(U, l, d) {
let t = U.slice(0, l).match(OM);
if (t) {
const Z = U.charCodeAt(l), F = t[1].charCodeAt(0);
if (zW(Z) === zW(F))
return !1;
}
if (t = U.slice(l + d).match(gM), t) {
const Z = U.charCodeAt(l + d - 1), F = t[1].charCodeAt(0);
if (zW(Z) === zW(F))
return !1;
}
return !0;
}, fi = function(U, l) {
const {
matchDiacritics: d
} = c(this, nU);
let t = !1;
U = U.replaceAll(jM, (F, n, s, W, V, Q) => n ? `[ ]*\\${n}[ ]*` : s ? `[ ]*${s}[ ]*` : W ? "[ ]+" : d ? V || Q : V ? XN.has(V.charCodeAt(0)) ? V : "" : l ? (t = !0, `${Q}\\p{M}*`) : Q);
const Z = "[ ]*";
return U.endsWith(Z) && (U = U.slice(0, U.length - Z.length)), d && l && (uN || (uN = String.fromCharCode(...XN)), t = !0, U = `${U}(?=[${uN}]|[^\\p{M}]|$)`), [t, U];
}, nb = function(U) {
const l = c(this, K, Pi);
if (l.length === 0)
return;
const d = this._pageContents[U], t = this.match(l, d, U), Z = this._pageMatches[U] = [], F = this._pageMatchesLength[U] = [], n = this._pageDiffs[U];
t == null || t.forEach(({
index: W,
length: V
}) => {
const [Q, i] = vM(n, W, V);
i && (Z.push(Q), F.push(i));
}), c(this, nU).highlightAll && h(this, K, RV).call(this, U), this._resumePageIdx === U && (this._resumePageIdx = null, h(this, K, Ai).call(this));
const s = Z.length;
this._matchesCountTotal += s, c(this, Qn) ? s > 0 && h(this, K, $i).call(this) : ++eU(this, Y0)._ === this._linkService.pagesCount && h(this, K, $i).call(this);
}, sb = function() {
if (this._extractTextPromises.length > 0)
return;
let U = Promise.resolve();
const l = {
disableNormalization: !0
};
for (let d = 0, t = this._linkService.pagesCount; d < t; d++) {
const {
promise: Z,
resolve: F
} = Promise.withResolvers();
this._extractTextPromises[d] = Z, U = U.then(() => this._pdfDocument.getPage(d + 1).then((n) => n.getTextContent(l)).then((n) => {
const s = [];
for (const W of n.items)
s.push(W.str), W.hasEOL && s.push(`
`);
[this._pageContents[d], this._pageDiffs[d], this._hasDiacritics[d]] = uQ(s.join("")), F();
}, (n) => {
console.error(`Unable to get text content for page ${d + 1}`, n), this._pageContents[d] = "", this._pageDiffs[d] = null, this._hasDiacritics[d] = !1, F();
}));
}
}, RV = function(U) {
this._scrollMatches && this._selected.pageIdx === U && (this._linkService.page = U + 1), this._eventBus.dispatch("updatetextlayermatches", {
source: this,
pageIndex: U
});
}, Zs = function() {
this._eventBus.dispatch("updatetextlayermatches", {
source: this,
pageIndex: -1
});
}, $0 = function() {
const U = c(this, nU).findPrevious, l = this._linkService.page - 1, d = this._linkService.pagesCount;
if (this._highlightMatches = !0, this._dirtyMatch) {
this._dirtyMatch = !1, this._selected.pageIdx = this._selected.matchIdx = -1, this._offset.pageIdx = l, this._offset.matchIdx = null, this._offset.wrapped = !1, this._resumePageIdx = null, this._pageMatches.length = 0, this._pageMatchesLength.length = 0, R(this, Y0, 0), this._matchesCountTotal = 0, h(this, K, Zs).call(this);
for (let F = 0; F < d; F++)
this._pendingFindMatches.has(F) || (this._pendingFindMatches.add(F), this._extractTextPromises[F].then(() => {
this._pendingFindMatches.delete(F), h(this, K, nb).call(this, F);
}));
}
if (c(this, K, Pi).length === 0) {
h(this, K, Fs).call(this, VZ.FOUND);
return;
}
if (this._resumePageIdx)
return;
const Z = this._offset;
if (this._pagesToSearch = d, Z.matchIdx !== null) {
const F = this._pageMatches[Z.pageIdx].length;
if (!U && Z.matchIdx + 1 < F || U && Z.matchIdx > 0) {
Z.matchIdx = U ? Z.matchIdx - 1 : Z.matchIdx + 1, h(this, K, NV).call(this, !0);
return;
}
h(this, K, _i).call(this, U);
}
h(this, K, Ai).call(this);
}, ab = function(U) {
const l = this._offset, d = U.length, t = c(this, nU).findPrevious;
return d ? (l.matchIdx = t ? d - 1 : 0, h(this, K, NV).call(this, !0), !0) : (h(this, K, _i).call(this, t), l.wrapped && (l.matchIdx = null, this._pagesToSearch < 0) ? (h(this, K, NV).call(this, !1), !0) : !1);
}, Ai = function() {
this._resumePageIdx !== null && console.error("There can only be one pending page.");
let U = null;
do {
const l = this._offset.pageIdx;
if (U = this._pageMatches[l], !U) {
this._resumePageIdx = l;
break;
}
} while (!h(this, K, ab).call(this, U));
}, _i = function(U) {
const l = this._offset, d = this._linkService.pagesCount;
l.pageIdx = U ? l.pageIdx - 1 : l.pageIdx + 1, l.matchIdx = null, this._pagesToSearch--, (l.pageIdx >= d || l.pageIdx < 0) && (l.pageIdx = U ? d - 1 : 0, l.wrapped = !0);
}, NV = function(U = !1) {
let l = VZ.NOT_FOUND;
const d = this._offset.wrapped;
if (this._offset.wrapped = !1, U) {
const t = this._selected.pageIdx;
this._selected.pageIdx = this._offset.pageIdx, this._selected.matchIdx = this._offset.matchIdx, l = d ? VZ.WRAPPED : VZ.FOUND, t !== -1 && t !== this._selected.pageIdx && h(this, K, RV).call(this, t);
}
h(this, K, Fs).call(this, l, c(this, nU).findPrevious), this._selected.pageIdx !== -1 && (this._scrollMatches = !0, h(this, K, RV).call(this, this._selected.pageIdx));
}, Wb = function(U) {
const l = this._pdfDocument;
this._firstPageCapability.promise.then(() => {
!this._pdfDocument || l && this._pdfDocument !== l || (this._findTimeout && (clearTimeout(this._findTimeout), this._findTimeout = null), this._resumePageIdx && (this._resumePageIdx = null, this._dirtyMatch = !0), h(this, K, Fs).call(this, VZ.FOUND), this._highlightMatches = !1, h(this, K, Zs).call(this));
});
}, qi = function() {
var Z;
const {
pageIdx: U,
matchIdx: l
} = this._selected;
let d = 0, t = this._matchesCountTotal;
if (l !== -1) {
for (let F = 0; F < U; F++)
d += ((Z = this._pageMatches[F]) == null ? void 0 : Z.length) || 0;
d += l + 1;
}
return (d < 1 || d > t) && (d = t = 0), {
current: d,
total: t
};
}, $i = function() {
this._eventBus.dispatch("updatefindmatchescount", {
source: this,
matchesCount: h(this, K, qi).call(this)
});
}, Fs = function(U, l = !1) {
var d, t;
!c(this, Qn) && (c(this, Y0) !== this._linkService.pagesCount || U === VZ.PENDING) || this._eventBus.dispatch("updatefindcontrolstate", {
source: this,
state: U,
previous: l,
entireWord: ((d = c(this, nU)) == null ? void 0 : d.entireWord) ?? null,
matchesCount: h(this, K, qi).call(this),
rawQuery: ((t = c(this, nU)) == null ? void 0 : t.query) ?? null
});
};
const fM = "noopener noreferrer nofollow", eF = {
NONE: 0,
SELF: 1,
BLANK: 2,
PARENT: 3,
TOP: 4
};
var lQ, Vb;
const UQ = class UQ {
constructor({
eventBus: U,
externalLinkTarget: l = null,
externalLinkRel: d = null,
ignoreDestinationZoom: t = !1
} = {}) {
f(this, "externalLinkEnabled", !0);
this.eventBus = U, this.externalLinkTarget = l, this.externalLinkRel = d, this._ignoreDestinationZoom = t, this.baseUrl = null, this.pdfDocument = null, this.pdfViewer = null, this.pdfHistory = null;
}
setDocument(U, l = null) {
this.baseUrl = l, this.pdfDocument = U;
}
setViewer(U) {
this.pdfViewer = U;
}
setHistory(U) {
this.pdfHistory = U;
}
get pagesCount() {
return this.pdfDocument ? this.pdfDocument.numPages : 0;
}
get page() {
return this.pdfDocument ? this.pdfViewer.currentPageNumber : 1;
}
set page(U) {
this.pdfDocument && (this.pdfViewer.currentPageNumber = U);
}
get rotation() {
return this.pdfDocument ? this.pdfViewer.pagesRotation : 0;
}
set rotation(U) {
this.pdfDocument && (this.pdfViewer.pagesRotation = U);
}
get isInPresentationMode() {
return this.pdfDocument ? this.pdfViewer.isInPresentationMode : !1;
}
async goToDestination(U) {
if (!this.pdfDocument)
return;
let l, d, t;
if (typeof U == "string" ? (l = U, d = await this.pdfDocument.getDestination(U)) : (l = null, d = await U), !Array.isArray(d)) {
console.error(`goToDestination: "${d}" is not a valid destination array, for dest="${U}".`);
return;
}
const [Z] = d;
if (Z && typeof Z == "object") {
if (t = this.pdfDocument.cachedPageNumber(Z), !t)
try {
t = await this.pdfDocument.getPageIndex(Z) + 1;
} catch {
console.error(`goToDestination: "${Z}" is not a valid page reference, for dest="${U}".`);
return;
}
} else Number.isInteger(Z) && (t = Z + 1);
if (!t || t < 1 || t > this.pagesCount) {
console.error(`goToDestination: "${t}" is not a valid page number, for dest="${U}".`);
return;
}
this.pdfHistory && (this.pdfHistory.pushCurrentPosition(), this.pdfHistory.push({
namedDest: l,
explicitDest: d,
pageNumber: t
})), this.pdfViewer.scrollPageIntoView({
pageNumber: t,
destArray: d,
ignoreDestinationZoom: this._ignoreDestinationZoom
});
}
goToPage(U) {
if (!this.pdfDocument)
return;
const l = typeof U == "string" && this.pdfViewer.pageLabelToPageNumber(U) || U | 0;
if (!(Number.isInteger(l) && l > 0 && l <= this.pagesCount)) {
console.error(`PDFLinkService.goToPage: "${U}" is not a valid page.`);
return;
}
this.pdfHistory && (this.pdfHistory.pushCurrentPosition(), this.pdfHistory.pushPage(l)), this.pdfViewer.scrollPageIntoView({
pageNumber: l
});
}
addLinkAttributes(U, l, d = !1) {
if (!l || typeof l != "string")
throw new Error('A valid "url" parameter must provided.');
const t = d ? eF.BLANK : this.externalLinkTarget, Z = this.externalLinkRel;
this.externalLinkEnabled ? U.href = U.title = l : (U.href = "", U.title = `Disabled: ${l}`, U.onclick = () => !1);
let F = "";
switch (t) {
case eF.NONE:
break;
case eF.SELF:
F = "_self";
break;
case eF.BLANK:
F = "_blank";
break;
case eF.PARENT:
F = "_parent";
break;
case eF.TOP:
F = "_top";
break;
}
U.target = F, U.rel = typeof Z == "string" ? Z : fM;
}
getDestinationHash(U) {
if (typeof U == "string") {
if (U.length > 0)
return this.getAnchorUrl("#" + escape(U));
} else if (Array.isArray(U)) {
const l = JSON.stringify(U);
if (l.length > 0)
return this.getAnchorUrl("#" + escape(l));
}
return this.getAnchorUrl("");
}
getAnchorUrl(U) {
return this.baseUrl ? this.baseUrl + U : U;
}
setHash(U) {
var t;
if (!this.pdfDocument)
return;
let l, d;
if (U.includes("=")) {
const Z = VQ(U);
if (Z.has("search")) {
const F = Z.get("search").replaceAll('"', ""), n = Z.get("phrase") === "true";
this.eventBus.dispatch("findfromurlhash", {
source: this,
query: n ? F : F.match(/\S+/g)
});
}
if (Z.has("page") && (l = Z.get("page") | 0 || 1), Z.has("zoom")) {
const F = Z.get("zoom").split(","), n = F[0], s = parseFloat(n);
n.includes("Fit") ? n === "Fit" || n === "FitB" ? d = [null, {
name: n
}] : n === "FitH" || n === "FitBH" || n === "FitV" || n === "FitBV" ? d = [null, {
name: n
}, F.length > 1 ? F[1] | 0 : null] : n === "FitR" ? F.length !== 5 ? console.error('PDFLinkService.setHash: Not enough parameters for "FitR".') : d = [null, {
name: n
}, F[1] | 0, F[2] | 0, F[3] | 0, F[4] | 0] : console.error(`PDFLinkService.setHash: "${n}" is not a valid zoom value.`) : d = [null, {
name: "XYZ"
}, F.length > 1 ? F[1] | 0 : null, F.length > 2 ? F[2] | 0 : null, s ? s / 100 : n];
}
d ? this.pdfViewer.scrollPageIntoView({
pageNumber: l || this.page,
destArray: d,
allowNegativeOffset: !0
}) : l && (this.page = l), Z.has("pagemode") && this.eventBus.dispatch("pagemode", {
source: this,
mode: Z.get("pagemode")
}), Z.has("nameddest") && this.goToDestination(Z.get("nameddest"));
return;
}
d = unescape(U);
try {
d = JSON.parse(d), Array.isArray(d) || (d = d.toString());
} catch {
}
if (typeof d == "string" || h(t = UQ, lQ, Vb).call(t, d)) {
this.goToDestination(d);
return;
}
console.error(`PDFLinkService.setHash: "${unescape(U)}" is not a valid destination.`);
}
executeNamedAction(U) {
var l, d;
if (this.pdfDocument) {
switch (U) {
case "GoBack":
(l = this.pdfHistory) == null || l.back();
break;
case "GoForward":
(d = this.pdfHistory) == null || d.forward();
break;
case "NextPage":
this.pdfViewer.nextPage();
break;
case "PrevPage":
this.pdfViewer.previousPage();
break;
case "LastPage":
this.page = this.pagesCount;
break;
case "FirstPage":
this.page = 1;
break;
}
this.eventBus.dispatch("namedaction", {
source: this,
action: U
});
}
}
async executeSetOCGState(U) {
if (!this.pdfDocument)
return;
const l = this.pdfDocument, d = await this.pdfViewer.optionalContentConfigPromise;
l === this.pdfDocument && (d.setOCGState(U), this.pdfViewer.optionalContentConfigPromise = Promise.resolve(d));
}
};
lQ = new WeakSet(), Vb = function(U) {
if (!Array.isArray(U) || U.length < 2)
return !1;
const [l, d, ...t] = U;
if (!(typeof l == "object" && Number.isInteger(l == null ? void 0 : l.num) && Number.isInteger(l == null ? void 0 : l.gen)) && !Number.isInteger(l) || !(typeof d == "object" && typeof (d == null ? void 0 : d.name) == "string"))
return !1;
const Z = t.length;
let F = !0;
switch (d.name) {
case "XYZ":
if (Z < 2 || Z > 3)
return !1;
break;
case "Fit":
case "FitB":
return Z === 0;
case "FitH":
case "FitBH":
case "FitV":
case "FitBV":
if (Z > 1)
return !1;
break;
case "FitR":
if (Z !== 4)
return !1;
F = !1;
break;
default:
return !1;
}
for (const n of t)
if (!(typeof n == "number" || F && n === null))
return !1;
return !0;
}, b(UQ, lQ);
let yV = UQ;
class rR extends yV {
setDocument(U, l = null) {
}
}
const {
AbortException: AM,
AnnotationEditorLayer: _M,
AnnotationEditorParamsType: OG,
AnnotationEditorType: KU,
AnnotationEditorUIManager: qM,
AnnotationLayer: $M,
AnnotationMode: tZ,
build: gG,
ColorPicker: KG,
createValidAbsoluteUrl: lJ,
DOMSVGFactory: HG,
DrawLayer: UJ,
FeatureTest: vG,
fetchData: pN,
getDocument: PG,
getFilenameFromUrl: fG,
getPdfFilenameFromUrl: dJ,
getXfaPageViewport: AG,
GlobalWorkerOptions: _G,
ImageKind: qG,
InvalidPDFException: $G,
isDataScheme: lS,
isPdfFile: tJ,
MissingPDFException: US,
noContextMenu: dS,
normalizeUnicode: ZJ,
OPS: tS,
OutputScale: FJ,
PasswordResponses: ZS,
PDFDataRangeTransport: FS,
PDFDateString: cS,
PDFWorker: nS,
PermissionFlag: LW,
PixelsPerInch: ut,
RenderingCancelledException: lR,
setLayerDimensions: cJ,
shadow: zV,
stopEvent: UR,
TextLayer: nJ,
TouchManager: sS,
UnexpectedResponseException: aS,
Util: WS,
VerbosityLevel: VS,
version: BN,
XfaLayer: YQ
} = globalThis.pdfjsLib;
var Ka, vZ, Ha, dR;
class Qb {
constructor({
pdfPage: U,
linkService: l,
downloadManager: d,
annotationStorage: t = null,
imageResourcesPath: Z = "",
renderForms: F = !0,
enableScripting: n = !1,
hasJSActionsPromise: s = null,
fieldObjectsPromise: W = null,
annotationCanvasMap: V = null,
accessibilityManager: Q = null,
annotationEditorUIManager: i = null,
onAppend: N = null
}) {
b(this, Ha);
b(this, Ka, null);
b(this, vZ, null);
this.pdfPage = U, this.linkService = l, this.downloadManager = d, this.imageResourcesPath = Z, this.renderForms = F, this.annotationStorage = t, this.enableScripting = n, this._hasJSActionsPromise = s || Promise.resolve(!1), this._fieldObjectsPromise = W || Promise.resolve(null), this._annotationCanvasMap = V, this._accessibilityManager = Q, this._annotationEditorUIManager = i, R(this, Ka, N), this.annotationLayer = null, this.div = null, this._cancelled = !1, this._eventBus = l.eventBus;
}
async render(U, l, d = "display") {
var s, W;
if (this.div) {
if (this._cancelled || !this.annotationLayer)
return;
this.annotationLayer.update({
viewport: U.clone({
dontFlip: !0
})
});
return;
}
const [t, Z, F] = await Promise.all([this.pdfPage.getAnnotations({
intent: d
}), this._hasJSActionsPromise, this._fieldObjectsPromise]);
if (this._cancelled)
return;
const n = this.div = document.createElement("div");
if (n.className = "annotationLayer", (s = c(this, Ka)) == null || s.call(this, n), t.length === 0) {
this.hide();
return;
}
this.annotationLayer = new $M({
div: n,
accessibilityManager: this._accessibilityManager,
annotationCanvasMap: this._annotationCanvasMap,
annotationEditorUIManager: this._annotationEditorUIManager,
page: this.pdfPage,
viewport: U.clone({
dontFlip: !0
}),
structTreeLayer: (l == null ? void 0 : l.structTreeLayer) || null
}), await this.annotationLayer.render({
annotations: t,
imageResourcesPath: this.imageResourcesPath,
renderForms: this.renderForms,
linkService: this.linkService,
downloadManager: this.downloadManager,
annotationStorage: this.annotationStorage,
enableScripting: this.enableScripting,
hasJSActions: Z,
fieldObjects: F
}), this.linkService.isInPresentationMode && h(this, Ha, dR).call(this, Zc.FULLSCREEN), c(this, vZ) || (R(this, vZ, new AbortController()), (W = this._eventBus) == null || W._on("presentationmodechanged", (V) => {
h(this, Ha, dR).call(this, V.state);
}, {
signal: c(this, vZ).signal
}));
}
cancel() {
var U;
this._cancelled = !0, (U = c(this, vZ)) == null || U.abort(), R(this, vZ, null);
}
hide() {
this.div && (this.div.hidden = !0);
}
hasEditableAnnotations() {
var U;
return !!((U = this.annotationLayer) != null && U.hasEditableAnnotations());
}
}
Ka = new WeakMap(), vZ = new WeakMap(), Ha = new WeakSet(), dR = function(U) {
if (!this.div)
return;
let l = !1;
switch (U) {
case Zc.FULLSCREEN:
l = !0;
break;
case Zc.NORMAL:
break;
default:
return;
}
for (const d of this.div.childNodes)
d.hasAttribute("data-internal-link") || (d.inert = l);
};
function yN(a, U) {
const l = document.createElement("a");
if (!l.click)
throw new Error('DownloadManager: "a.click()" is not supported.');
l.href = a, l.target = "_parent", "download" in l && (l.download = U), (document.body || document.documentElement).append(l), l.click(), l.remove();
}
var oR;
class sJ {
constructor() {
b(this, oR, /* @__PURE__ */ new WeakMap());
}
downloadData(U, l, d) {
const t = URL.createObjectURL(new Blob([U], {
type: d
}));
yN(t, l);
}
openOrDownloadData(U, l, d = null) {
const Z = tJ(l) ? "application/pdf" : "";
return this.downloadData(U, l, Z), !1;
}
download(U, l, d) {
let t;
if (U)
t = URL.createObjectURL(new Blob([U], {
type: "application/pdf"
}));
else {
if (!lJ(l, "http://example.com")) {
console.error(`download - not a valid URL: ${l}`);
return;
}
t = l + "#pdfjs.action=download";
}
yN(t, d);
}
}
oR = new WeakMap();
const zN = {
EVENT: "event",
TIMEOUT: "timeout"
};
async function aJ({
target: a,
name: U,
delay: l = 0
}) {
if (typeof a != "object" || !(U && typeof U == "string") || !(Number.isInteger(l) && l >= 0))
throw new Error("waitOnEventOrTimeout - invalid parameters.");
const {
promise: d,
resolve: t
} = Promise.withResolvers(), Z = new AbortController();
function F(W) {
Z.abort(), clearTimeout(s), t(W);
}
const n = a instanceof ib ? "_on" : "addEventListener";
a[n](U, F.bind(null, zN.EVENT), {
signal: Z.signal
});
const s = setTimeout(F.bind(null, zN.TIMEOUT), l);
return d;
}
var Rn;
class ib {
constructor() {
b(this, Rn, /* @__PURE__ */ Object.create(null));
}
on(U, l, d = null) {
this._on(U, l, {
external: !0,
once: d == null ? void 0 : d.once,
signal: d == null ? void 0 : d.signal
});
}
off(U, l, d = null) {
this._off(U, l);
}
dispatch(U, l) {
const d = c(this, Rn)[U];
if (!d || d.length === 0)
return;
let t;
for (const {
listener: Z,
external: F,
once: n
} of d.slice(0)) {
if (n && this._off(U, Z), F) {
(t || (t = [])).push(Z);
continue;
}
Z(l);
}
if (t) {
for (const Z of t)
Z(l);
t = null;
}
}
_on(U, l, d = null) {
var F;
let t = null;
if ((d == null ? void 0 : d.signal) instanceof AbortSignal) {
const {
signal: n
} = d;
if (n.aborted) {
console.error("Cannot use an `aborted` signal.");
return;
}
const s = () => this._off(U, l);
t = () => n.removeEventListener("abort", s), n.addEventListener("abort", s);
}
((F = c(this, Rn))[U] || (F[U] = [])).push({
listener: l,
external: (d == null ? void 0 : d.external) === !0,
once: (d == null ? void 0 : d.once) === !0,
rmAbort: t
});
}
_off(U, l, d = null) {
var Z;
const t = c(this, Rn)[U];
if (t)
for (let F = 0, n = t.length; F < n; F++) {
const s = t[F];
if (s.listener === l) {
(Z = s.rmAbort) == null || Z.call(s), t.splice(F, 1);
return;
}
}
}
}
Rn = new WeakMap();
class QQ {
constructor(U) {
this.value = U;
}
valueOf() {
return this.value;
}
}
class Hl extends QQ {
constructor(U = "???") {
super(U);
}
toString(U) {
return `{${this.value}}`;
}
}
class FZ extends QQ {
constructor(U, l = {}) {
super(U), this.opts = l;
}
toString(U) {
try {
return U.memoizeIntlObject(Intl.NumberFormat, this.opts).format(this.value);
} catch (l) {
return U.reportError(l), this.value.toString(10);
}
}
}
class Qs extends QQ {
constructor(U, l = {}) {
super(U), this.opts = l;
}
toString(U) {
try {
return U.memoizeIntlObject(Intl.DateTimeFormat, this.opts).format(this.value);
} catch (l) {
return U.reportError(l), new Date(this.value).toISOString();
}
}
}
const LN = 100, WJ = "", VJ = "";
function QJ(a, U, l) {
if (l === U || l instanceof FZ && U instanceof FZ && l.value === U.value)
return !0;
if (U instanceof FZ && typeof l == "string") {
let d = a.memoizeIntlObject(Intl.PluralRules, U.opts).select(U.value);
if (l === d)
return !0;
}
return !1;
}
function kN(a, U, l) {
return U[l] ? yn(a, U[l].value) : (a.reportError(new RangeError("No default")), new Hl());
}
function tR(a, U) {
const l = [], d = /* @__PURE__ */ Object.create(null);
for (const t of U)
t.type === "narg" ? d[t.name] = ms(a, t.value) : l.push(ms(a, t));
return {
positional: l,
named: d
};
}
function ms(a, U) {
switch (U.type) {
case "str":
return U.value;
case "num":
return new FZ(U.value, {
minimumFractionDigits: U.precision
});
case "var":
return iJ(a, U);
case "mesg":
return RJ(a, U);
case "term":
return NJ(a, U);
case "func":
return eJ(a, U);
case "select":
return hJ(a, U);
default:
return new Hl();
}
}
function iJ(a, {
name: U
}) {
let l;
if (a.params)
if (Object.prototype.hasOwnProperty.call(a.params, U))
l = a.params[U];
else
return new Hl(`$${U}`);
else if (a.args && Object.prototype.hasOwnProperty.call(a.args, U))
l = a.args[U];
else
return a.reportError(new ReferenceError(`Unknown variable: $${U}`)), new Hl(`$${U}`);
if (l instanceof QQ)
return l;
switch (typeof l) {
case "string":
return l;
case "number":
return new FZ(l);
case "object":
if (l instanceof Date)
return new Qs(l.getTime());
default:
return a.reportError(new TypeError(`Variable type not supported: $${U}, ${typeof l}`)), new Hl(`$${U}`);
}
}
function RJ(a, {
name: U,
attr: l
}) {
const d = a.bundle._messages.get(U);
if (!d)
return a.reportError(new ReferenceError(`Unknown message: ${U}`)), new Hl(U);
if (l) {
const t = d.attributes[l];
return t ? yn(a, t) : (a.reportError(new ReferenceError(`Unknown attribute: ${l}`)), new Hl(`${U}.${l}`));
}
return d.value ? yn(a, d.value) : (a.reportError(new ReferenceError(`No value: ${U}`)), new Hl(U));
}
function NJ(a, {
name: U,
attr: l,
args: d
}) {
const t = `-${U}`, Z = a.bundle._terms.get(t);
if (!Z)
return a.reportError(new ReferenceError(`Unknown term: ${t}`)), new Hl(t);
if (l) {
const n = Z.attributes[l];
if (n) {
a.params = tR(a, d).named;
const s = yn(a, n);
return a.params = null, s;
}
return a.reportError(new ReferenceError(`Unknown attribute: ${l}`)), new Hl(`${t}.${l}`);
}
a.params = tR(a, d).named;
const F = yn(a, Z.value);
return a.params = null, F;
}
function eJ(a, {
name: U,
args: l
}) {
let d = a.bundle._functions[U];
if (!d)
return a.reportError(new ReferenceError(`Unknown function: ${U}()`)), new Hl(`${U}()`);
if (typeof d != "function")
return a.reportError(new TypeError(`Function ${U}() is not callable`)), new Hl(`${U}()`);
try {
let t = tR(a, l);
return d(t.positional, t.named);
} catch (t) {
return a.reportError(t), new Hl(`${U}()`);
}
}
function hJ(a, {
selector: U,
variants: l,
star: d
}) {
let t = ms(a, U);
if (t instanceof Hl)
return kN(a, l, d);
for (const Z of l) {
const F = ms(a, Z.key);
if (QJ(a, t, F))
return yn(a, Z.value);
}
return kN(a, l, d);
}
function Rb(a, U) {
if (a.dirty.has(U))
return a.reportError(new RangeError("Cyclic reference")), new Hl();
a.dirty.add(U);
const l = [], d = a.bundle._useIsolating && U.length > 1;
for (const t of U) {
if (typeof t == "string") {
l.push(a.bundle._transform(t));
continue;
}
if (a.placeables++, a.placeables > LN)
throw a.dirty.delete(U), new RangeError(`Too many placeables expanded: ${a.placeables}, max allowed is ${LN}`);
d && l.push(WJ), l.push(ms(a, t).toString(a)), d && l.push(VJ);
}
return a.dirty.delete(U), l.join("");
}
function yn(a, U) {
return typeof U == "string" ? a.bundle._transform(U) : Rb(a, U);
}
class bJ {
constructor(U, l, d) {
this.dirty = /* @__PURE__ */ new WeakSet(), this.params = null, this.placeables = 0, this.bundle = U, this.errors = l, this.args = d;
}
reportError(U) {
if (!this.errors || !(U instanceof Error))
throw U;
this.errors.push(U);
}
memoizeIntlObject(U, l) {
let d = this.bundle._intls.get(U);
d || (d = {}, this.bundle._intls.set(U, d));
let t = JSON.stringify(l);
return d[t] || (d[t] = new U(this.bundle.locales, l)), d[t];
}
}
function LV(a, U) {
const l = /* @__PURE__ */ Object.create(null);
for (const [d, t] of Object.entries(a))
U.includes(d) && (l[d] = t.valueOf());
return l;
}
const IN = ["unitDisplay", "currencyDisplay", "useGrouping", "minimumIntegerDigits", "minimumFractionDigits", "maximumFractionDigits", "minimumSignificantDigits", "maximumSignificantDigits"];
function mJ(a, U) {
let l = a[0];
if (l instanceof Hl)
return new Hl(`NUMBER(${l.valueOf()})`);
if (l instanceof FZ)
return new FZ(l.valueOf(), {
...l.opts,
...LV(U, IN)
});
if (l instanceof Qs)
return new FZ(l.valueOf(), {
...LV(U, IN)
});
throw new TypeError("Invalid argument to NUMBER");
}
const DN = ["dateStyle", "timeStyle", "fractionalSecondDigits", "dayPeriod", "hour12", "weekday", "era", "year", "month", "day", "hour", "minute", "second", "timeZoneName"];
function MJ(a, U) {
let l = a[0];
if (l instanceof Hl)
return new Hl(`DATETIME(${l.valueOf()})`);
if (l instanceof Qs)
return new Qs(l.valueOf(), {
...l.opts,
...LV(U, DN)
});
if (l instanceof FZ)
return new Qs(l.valueOf(), {
...LV(U, DN)
});
throw new TypeError("Invalid argument to DATETIME");
}
const EN = /* @__PURE__ */ new Map();
function JJ(a) {
const U = Array.isArray(a) ? a.join(" ") : a;
let l = EN.get(U);
return l === void 0 && (l = /* @__PURE__ */ new Map(), EN.set(U, l)), l;
}
class GJ {
constructor(U, {
functions: l,
useIsolating: d = !0,
transform: t = (Z) => Z
} = {}) {
this._terms = /* @__PURE__ */ new Map(), this._messages = /* @__PURE__ */ new Map(), this.locales = Array.isArray(U) ? U : [U], this._functions = {
NUMBER: mJ,
DATETIME: MJ,
...l
}, this._useIsolating = d, this._transform = t, this._intls = JJ(U);
}
hasMessage(U) {
return this._messages.has(U);
}
getMessage(U) {
return this._messages.get(U);
}
addResource(U, {
allowOverrides: l = !1
} = {}) {
const d = [];
for (let t = 0; t < U.body.length; t++) {
let Z = U.body[t];
if (Z.id.startsWith("-")) {
if (l === !1 && this._terms.has(Z.id)) {
d.push(new Error(`Attempt to override an existing term: "${Z.id}"`));
continue;
}
this._terms.set(Z.id, Z);
} else {
if (l === !1 && this._messages.has(Z.id)) {
d.push(new Error(`Attempt to override an existing message: "${Z.id}"`));
continue;
}
this._messages.set(Z.id, Z);
}
}
return d;
}
formatPattern(U, l = null, d = null) {
if (typeof U == "string")
return this._transform(U);
let t = new bJ(this, d, l);
try {
return Rb(t, U).toString(t);
} catch (Z) {
if (t.errors && Z instanceof Error)
return t.errors.push(Z), new Hl().toString(t);
throw Z;
}
}
}
const oQ = /^(-?[a-zA-Z][\w-]*) *= */gm, rN = /\.([a-zA-Z][\w-]*) *= */y, SJ = /\*?\[/y, pQ = /(-?[0-9]+(?:\.([0-9]+))?)/y, TJ = /([a-zA-Z][\w-]*)/y, CN = /([$-])?([a-zA-Z][\w-]*)(?:\.([a-zA-Z][\w-]*))?/y, XJ = /^[A-Z][A-Z0-9_-]*$/, kW = /([^{}\n\r]+)/y, uJ = /([^\\"\n\r]*)/y, wN = /\\([\\"])/y, xN = /\\u([a-fA-F0-9]{4})|\\U([a-fA-F0-9]{6})/y, YJ = /^\n+/, jN = / +$/, oJ = / *\r?\n/g, pJ = /( *)$/, BJ = /{\s*/y, ON = /\s*}/y, yJ = /\[\s*/y, zJ = /\s*] */y, LJ = /\s*\(\s*/y, kJ = /\s*->\s*/y, IJ = /\s*:\s*/y, DJ = /\s*,?\s*/y, EJ = /\s+/y;
class rJ {
constructor(U) {
this.body = [], oQ.lastIndex = 0;
let l = 0;
for (; ; ) {
let X = oQ.exec(U);
if (X === null)
break;
l = oQ.lastIndex;
try {
this.body.push(s(X[1]));
} catch (p) {
if (p instanceof SyntaxError)
continue;
throw p;
}
}
function d(X) {
return X.lastIndex = l, X.test(U);
}
function t(X, p) {
if (U[l] === X)
return l++, !0;
if (p)
throw new p(`Expected ${X}`);
return !1;
}
function Z(X, p) {
if (d(X))
return l = X.lastIndex, !0;
if (p)
throw new p(`Expected ${X.toString()}`);
return !1;
}
function F(X) {
X.lastIndex = l;
let p = X.exec(U);
if (p === null)
throw new SyntaxError(`Expected ${X.toString()}`);
return l = X.lastIndex, p;
}
function n(X) {
return F(X)[1];
}
function s(X) {
let p = V(), y = W();
if (p === null && Object.keys(y).length === 0)
throw new SyntaxError("Expected message value or attributes");
return {
id: X,
value: p,
attributes: y
};
}
function W() {
let X = /* @__PURE__ */ Object.create(null);
for (; d(rN); ) {
let p = n(rN), y = V();
if (y === null)
throw new SyntaxError("Expected attribute value");
X[p] = y;
}
return X;
}
function V() {
let X;
if (d(kW) && (X = n(kW)), U[l] === "{" || U[l] === "}")
return Q(X ? [X] : [], 1 / 0);
let p = Y();
return p ? X ? Q([X, p], p.length) : (p.value = o(p.value, YJ), Q([p], p.length)) : X ? o(X, jN) : null;
}
function Q(X = [], p) {
for (; ; ) {
if (d(kW)) {
X.push(n(kW));
continue;
}
if (U[l] === "{") {
X.push(i());
continue;
}
if (U[l] === "}")
throw new SyntaxError("Unbalanced closing brace");
let E = Y();
if (E) {
X.push(E), p = Math.min(p, E.length);
continue;
}
break;
}
let y = X.length - 1, r = X[y];
typeof r == "string" && (X[y] = o(r, jN));
let D = [];
for (let E of X)
E instanceof gN && (E = E.value.slice(0, E.value.length - p)), E && D.push(E);
return D;
}
function i() {
Z(BJ, SyntaxError);
let X = N();
if (Z(ON))
return X;
if (Z(kJ)) {
let p = J();
return Z(ON, SyntaxError), {
type: "select",
selector: X,
...p
};
}
throw new SyntaxError("Unclosed placeable");
}
function N() {
if (U[l] === "{")
return i();
if (d(CN)) {
let [, X, p, y = null] = F(CN);
if (X === "$")
return {
type: "var",
name: p
};
if (Z(LJ)) {
let r = e();
if (X === "-")
return {
type: "term",
name: p,
attr: y,
args: r
};
if (XJ.test(p))
return {
type: "func",
name: p,
args: r
};
throw new SyntaxError("Function names must be all upper-case");
}
return X === "-" ? {
type: "term",
name: p,
attr: y,
args: []
} : {
type: "mesg",
name: p,
attr: y
};
}
return G();
}
function e() {
let X = [];
for (; ; ) {
switch (U[l]) {
case ")":
return l++, X;
case void 0:
throw new SyntaxError("Unclosed argument list");
}
X.push(m()), Z(DJ);
}
}
function m() {
let X = N();
return X.type !== "mesg" ? X : Z(IJ) ? {
type: "narg",
name: X.name,
value: G()
} : X;
}
function J() {
let X = [], p = 0, y;
for (; d(SJ); ) {
t("*") && (y = p);
let r = M(), D = V();
if (D === null)
throw new SyntaxError("Expected variant value");
X[p++] = {
key: r,
value: D
};
}
if (p === 0)
return null;
if (y === void 0)
throw new SyntaxError("Expected default variant");
return {
variants: X,
star: y
};
}
function M() {
Z(yJ, SyntaxError);
let X;
return d(pQ) ? X = S() : X = {
type: "str",
value: n(TJ)
}, Z(zJ, SyntaxError), X;
}
function G() {
if (d(pQ))
return S();
if (U[l] === '"')
return T();
throw new SyntaxError("Invalid expression");
}
function S() {
let [, X, p = ""] = F(pQ), y = p.length;
return {
type: "num",
value: parseFloat(X),
precision: y
};
}
function T() {
t('"', SyntaxError);
let X = "";
for (; ; ) {
if (X += n(uJ), U[l] === "\\") {
X += u();
continue;
}
if (t('"'))
return {
type: "str",
value: X
};
throw new SyntaxError("Unclosed string literal");
}
}
function u() {
if (d(wN))
return n(wN);
if (d(xN)) {
let [, X, p] = F(xN), y = parseInt(X || p, 16);
return y <= 55295 || 57344 <= y ? String.fromCodePoint(y) : "�";
}
throw new SyntaxError("Unknown escape sequence");
}
function Y() {
let X = l;
switch (Z(EJ), U[l]) {
case ".":
case "[":
case "*":
case "}":
case void 0:
return !1;
case "{":
return B(U.slice(X, l));
}
return U[l - 1] === " " ? B(U.slice(X, l)) : !1;
}
function o(X, p) {
return X.replace(p, "");
}
function B(X) {
let p = X.replace(oJ, `
`), y = pJ.exec(X)[1].length;
return new gN(p, y);
}
}
}
class gN {
constructor(U, l) {
this.value = U, this.length = l;
}
}
const CJ = /<|?\w+;/, wJ = {
"http://www.w3.org/1999/xhtml": ["em", "strong", "small", "s", "cite", "q", "dfn", "abbr", "data", "time", "code", "var", "samp", "kbd", "sub", "sup", "i", "b", "u", "mark", "bdi", "bdo", "span", "br", "wbr"]
}, xJ = {
"http://www.w3.org/1999/xhtml": {
global: ["title", "aria-label", "aria-valuetext"],
a: ["download"],
area: ["download", "alt"],
input: ["alt", "placeholder"],
menuitem: ["label"],
menu: ["label"],
optgroup: ["label"],
option: ["label"],
track: ["label"],
img: ["alt"],
textarea: ["placeholder"],
th: ["abbr"]
},
"http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul": {
global: ["accesskey", "aria-label", "aria-valuetext", "label", "title", "tooltiptext"],
description: ["value"],
key: ["key", "keycode"],
label: ["value"],
textbox: ["placeholder", "value"]
}
};
function jJ(a, U) {
const {
value: l
} = U;
if (typeof l == "string")
if (a.localName === "title" && a.namespaceURI === "http://www.w3.org/1999/xhtml")
a.textContent = l;
else if (!CJ.test(l))
a.textContent = l;
else {
const d = a.ownerDocument.createElementNS("http://www.w3.org/1999/xhtml", "template");
d.innerHTML = l, OJ(d.content, a);
}
Nb(U, a);
}
function OJ(a, U) {
for (const l of a.childNodes)
if (l.nodeType !== l.TEXT_NODE) {
if (l.hasAttribute("data-l10n-name")) {
const d = KJ(U, l);
a.replaceChild(d, l);
continue;
}
if (vJ(l)) {
const d = HJ(l);
a.replaceChild(d, l);
continue;
}
console.warn(`An element of forbidden type "${l.localName}" was found in the translation. Only safe text-level elements and elements with data-l10n-name are allowed.`), a.replaceChild(ZR(l), l);
}
U.textContent = "", U.appendChild(a);
}
function gJ(a, U) {
if (!a)
return !1;
for (let l of a)
if (l.name === U)
return !0;
return !1;
}
function Nb(a, U) {
const l = U.hasAttribute("data-l10n-attrs") ? U.getAttribute("data-l10n-attrs").split(",").map((d) => d.trim()) : null;
for (const d of Array.from(U.attributes))
KN(d.name, U, l) && !gJ(a.attributes, d.name) && U.removeAttribute(d.name);
if (a.attributes)
for (const d of Array.from(a.attributes))
KN(d.name, U, l) && U.getAttribute(d.name) !== d.value && U.setAttribute(d.name, d.value);
}
function KJ(a, U) {
const l = U.getAttribute("data-l10n-name"), d = a.querySelector(`[data-l10n-name="${l}"]`);
if (!d)
return console.warn(`An element named "${l}" wasn't found in the source.`), ZR(U);
if (d.localName !== U.localName)
return console.warn(`An element named "${l}" was found in the translation but its type ${U.localName} didn't match the element found in the source (${d.localName}).`), ZR(U);
a.removeChild(d);
const t = d.cloneNode(!1);
return eb(U, t);
}
function HJ(a) {
const U = a.ownerDocument.createElement(a.localName);
return eb(a, U);
}
function ZR(a) {
return a.ownerDocument.createTextNode(a.textContent);
}
function vJ(a) {
const U = wJ[a.namespaceURI];
return U && U.includes(a.localName);
}
function KN(a, U, l = null) {
if (l && l.includes(a))
return !0;
const d = xJ[U.namespaceURI];
if (!d)
return !1;
const t = a.toLowerCase(), Z = U.localName;
if (d.global.includes(t))
return !0;
if (!d[Z])
return !1;
if (d[Z].includes(t))
return !0;
if (U.namespaceURI === "http://www.w3.org/1999/xhtml" && Z === "input" && t === "value") {
const F = U.type.toLowerCase();
if (F === "submit" || F === "button" || F === "reset")
return !0;
}
return !1;
}
function eb(a, U) {
return U.textContent = a.textContent, Nb(a, U), U;
}
class PJ extends Array {
static from(U) {
return U instanceof this ? U : new this(U);
}
}
class fJ extends PJ {
constructor(U) {
if (super(), Symbol.asyncIterator in Object(U))
this.iterator = U[Symbol.asyncIterator]();
else if (Symbol.iterator in Object(U))
this.iterator = U[Symbol.iterator]();
else
throw new TypeError("Argument must implement the iteration protocol.");
}
[Symbol.asyncIterator]() {
const U = this;
let l = 0;
return {
async next() {
return U.length <= l && U.push(U.iterator.next()), U[l++];
}
};
}
async touchNext(U = 1) {
let l = 0;
for (; l++ < U; ) {
const d = this[this.length - 1];
if (d && (await d).done)
break;
this.push(this.iterator.next());
}
return this[this.length - 1];
}
}
class AJ {
constructor(U = [], l) {
this.resourceIds = U, this.generateBundles = l, this.onChange(!0);
}
addResourceIds(U, l = !1) {
return this.resourceIds.push(...U), this.onChange(l), this.resourceIds.length;
}
removeResourceIds(U) {
return this.resourceIds = this.resourceIds.filter((l) => !U.includes(l)), this.onChange(), this.resourceIds.length;
}
async formatWithFallback(U, l) {
const d = [];
let t = !1;
for await (const Z of this.bundles) {
t = !0;
const F = $J(l, Z, U, d);
if (F.size === 0)
break;
if (typeof console < "u") {
const n = Z.locales[0], s = Array.from(F).join(", ");
console.warn(`[fluent] Missing translations in ${n}: ${s}`);
}
}
return !t && typeof console < "u" && console.warn(`[fluent] Request for keys failed because no resource bundles got generated.
keys: ${JSON.stringify(U)}.
resourceIds: ${JSON.stringify(this.resourceIds)}.`), d;
}
formatMessages(U) {
return this.formatWithFallback(U, qJ);
}
formatValues(U) {
return this.formatWithFallback(U, _J);
}
async formatValue(U, l) {
const [d] = await this.formatValues([{
id: U,
args: l
}]);
return d;
}
handleEvent() {
this.onChange();
}
onChange(U = !1) {
this.bundles = fJ.from(this.generateBundles(this.resourceIds)), U && this.bundles.touchNext(2);
}
}
function _J(a, U, l, d) {
return l.value ? a.formatPattern(l.value, d, U) : null;
}
function qJ(a, U, l, d) {
const t = {
value: null,
attributes: null
};
l.value && (t.value = a.formatPattern(l.value, d, U));
let Z = Object.keys(l.attributes);
if (Z.length > 0) {
t.attributes = new Array(Z.length);
for (let [F, n] of Z.entries()) {
let s = a.formatPattern(l.attributes[n], d, U);
t.attributes[F] = {
name: n,
value: s
};
}
}
return t;
}
function $J(a, U, l, d) {
const t = [], Z = /* @__PURE__ */ new Set();
return l.forEach(({
id: F,
args: n
}, s) => {
if (d[s] !== void 0)
return;
let W = U.getMessage(F);
if (W) {
if (t.length = 0, d[s] = a(U, t, W, n), t.length > 0 && typeof console < "u") {
const V = U.locales[0], Q = t.join(", ");
console.warn(`[fluent][resolver] errors in ${V}/${F}: ${Q}.`);
}
} else
Z.add(F);
}), Z;
}
const hF = "data-l10n-id", xn = "data-l10n-args", lG = `[${hF}]`;
class UG extends AJ {
constructor(U, l) {
super(U, l), this.roots = /* @__PURE__ */ new Set(), this.pendingrAF = null, this.pendingElements = /* @__PURE__ */ new Set(), this.windowElement = null, this.mutationObserver = null, this.observerConfig = {
attributes: !0,
characterData: !1,
childList: !0,
subtree: !0,
attributeFilter: [hF, xn]
};
}
onChange(U = !1) {
super.onChange(U), this.roots && this.translateRoots();
}
setAttributes(U, l, d) {
return U.setAttribute(hF, l), d ? U.setAttribute(xn, JSON.stringify(d)) : U.removeAttribute(xn), U;
}
getAttributes(U) {
return {
id: U.getAttribute(hF),
args: JSON.parse(U.getAttribute(xn) || null)
};
}
connectRoot(U) {
for (const l of this.roots)
if (l === U || l.contains(U) || U.contains(l))
throw new Error("Cannot add a root that overlaps with existing root.");
if (this.windowElement) {
if (this.windowElement !== U.ownerDocument.defaultView)
throw new Error(`Cannot connect a root:
DOMLocalization already has a root from a different window.`);
} else
this.windowElement = U.ownerDocument.defaultView, this.mutationObserver = new this.windowElement.MutationObserver((l) => this.translateMutations(l));
this.roots.add(U), this.mutationObserver.observe(U, this.observerConfig);
}
disconnectRoot(U) {
return this.roots.delete(U), this.pauseObserving(), this.roots.size === 0 ? (this.mutationObserver = null, this.windowElement && this.pendingrAF && this.windowElement.cancelAnimationFrame(this.pendingrAF), this.windowElement = null, this.pendingrAF = null, this.pendingElements.clear(), !0) : (this.resumeObserving(), !1);
}
translateRoots() {
const U = Array.from(this.roots);
return Promise.all(U.map((l) => this.translateFragment(l)));
}
pauseObserving() {
this.mutationObserver && (this.translateMutations(this.mutationObserver.takeRecords()), this.mutationObserver.disconnect());
}
resumeObserving() {
if (this.mutationObserver)
for (const U of this.roots)
this.mutationObserver.observe(U, this.observerConfig);
}
translateMutations(U) {
for (const l of U)
switch (l.type) {
case "attributes":
l.target.hasAttribute("data-l10n-id") && this.pendingElements.add(l.target);
break;
case "childList":
for (const d of l.addedNodes)
if (d.nodeType === d.ELEMENT_NODE)
if (d.childElementCount)
for (const t of this.getTranslatables(d))
this.pendingElements.add(t);
else d.hasAttribute(hF) && this.pendingElements.add(d);
break;
}
this.pendingElements.size > 0 && this.pendingrAF === null && (this.pendingrAF = this.windowElement.requestAnimationFrame(() => {
this.translateElements(Array.from(this.pendingElements)), this.pendingElements.clear(), this.pendingrAF = null;
}));
}
translateFragment(U) {
return this.translateElements(this.getTranslatables(U));
}
async translateElements(U) {
if (!U.length)
return;
const l = U.map(this.getKeysForElement), d = await this.formatMessages(l);
return this.applyTranslations(U, d);
}
applyTranslations(U, l) {
this.pauseObserving();
for (let d = 0; d < U.length; d++)
l[d] !== void 0 && jJ(U[d], l[d]);
this.resumeObserving();
}
getTranslatables(U) {
const l = Array.from(U.querySelectorAll(lG));
return typeof U.hasAttribute == "function" && U.hasAttribute(hF) && l.push(U), l;
}
getKeysForElement(U) {
return {
id: U.getAttribute(hF),
args: JSON.parse(U.getAttribute(xn) || null)
};
}
}
var va, PZ, Nn, xU, Ln, hb, bb;
const Rs = class Rs {
constructor({
lang: U,
isRTL: l
}, d = null) {
b(this, va);
b(this, PZ);
b(this, Nn);
b(this, xU);
var t, Z;
R(this, Nn, h(t = Rs, Ln, hb).call(t, U)), R(this, xU, d), R(this, va, l ?? h(Z = Rs, Ln, bb).call(Z, c(this, Nn)) ? "rtl" : "ltr");
}
_setL10n(U) {
R(this, xU, U);
}
getLanguage() {
return c(this, Nn);
}
getDirection() {
return c(this, va);
}
async get(U, l = null, d) {
var Z;
return Array.isArray(U) ? (U = U.map((n) => ({
id: n
})), (await c(this, xU).formatMessages(U)).map((n) => n.value)) : ((Z = (await c(this, xU).formatMessages([{
id: U,
args: l
}]))[0]) == null ? void 0 : Z.value) || d;
}
async translate(U) {
(c(this, PZ) || R(this, PZ, /* @__PURE__ */ new Set())).add(U);
try {
c(this, xU).connectRoot(U), await c(this, xU).translateRoots();
} catch {
}
}
async translateOnce(U) {
try {
await c(this, xU).translateElements([U]);
} catch (l) {
console.error("translateOnce:", l);
}
}
async destroy() {
if (c(this, PZ)) {
for (const U of c(this, PZ))
c(this, xU).disconnectRoot(U);
c(this, PZ).clear(), R(this, PZ, null);
}
c(this, xU).pauseObserving();
}
pause() {
c(this, xU).pauseObserving();
}
resume() {
c(this, xU).resumeObserving();
}
};
va = new WeakMap(), PZ = new WeakMap(), Nn = new WeakMap(), xU = new WeakMap(), Ln = new WeakSet(), hb = function(U) {
return U = (U == null ? void 0 : U.toLowerCase()) || "en-us", {
en: "en-us",
es: "es-es",
fy: "fy-nl",
ga: "ga-ie",
gu: "gu-in",
hi: "hi-in",
hy: "hy-am",
nb: "nb-no",
ne: "ne-np",
nn: "nn-no",
pa: "pa-in",
pt: "pt-pt",
sv: "sv-se",
zh: "zh-cn"
}[U] || U;
}, bb = function(U) {
const l = U.split("-", 1)[0];
return ["ar", "he", "fa", "ps", "ur"].includes(l);
}, b(Rs, Ln);
let FR = Rs;
function HN(a, U) {
const l = new rJ(U), d = new GJ(a), t = d.addResource(l);
return t.length && console.error("L10n errors", t), d;
}
var ad, mb, Mb, Jb, Gb, cR;
const MF = class MF extends FR {
constructor(U) {
super({
lang: U
});
const l = U ? h(MF, ad, mb).bind(MF, "en-us", this.getLanguage()) : h(MF, ad, Gb).bind(MF, this.getLanguage());
this._setL10n(new UG([], l));
}
};
ad = new WeakSet(), mb = async function* (U, l) {
const {
baseURL: d,
paths: t
} = await h(this, ad, Jb).call(this), Z = [l];
if (U !== l) {
const F = l.split("-", 1)[0];
F !== l && Z.push(F), Z.push(U);
}
for (const F of Z) {
const n = await h(this, ad, Mb).call(this, F, d, t);
n ? yield n : F === "en-us" && (yield h(this, ad, cR).call(this, F));
}
}, Mb = async function(U, l, d) {
const t = d[U];
if (!t)
return null;
const Z = new URL(t, l), F = await pN(Z, "text");
return HN(U, F);
}, Jb = async function() {
try {
const {
href: U
} = document.querySelector('link[type="application/l10n"]'), l = await pN(U, "json");
return {
baseURL: U.replace(/[^/]*$/, "") || "./",
paths: l
};
} catch {
}
return {
baseURL: "./",
paths: /* @__PURE__ */ Object.create(null)
};
}, Gb = async function* (U) {
yield h(this, ad, cR).call(this, U);
}, cR = async function(U) {
return HN(U, `pdfjs-previous-button =
.title = Previous Page
pdfjs-previous-button-label = Previous
pdfjs-next-button =
.title = Next Page
pdfjs-next-button-label = Next
pdfjs-page-input =
.title = Page
pdfjs-of-pages = of { $pagesCount }
pdfjs-page-of-pages = ({ $pageNumber } of { $pagesCount })
pdfjs-zoom-out-button =
.title = Zoom Out
pdfjs-zoom-out-button-label = Zoom Out
pdfjs-zoom-in-button =
.title = Zoom In
pdfjs-zoom-in-button-label = Zoom In
pdfjs-zoom-select =
.title = Zoom
pdfjs-presentation-mode-button =
.title = Switch to Presentation Mode
pdfjs-presentation-mode-button-label = Presentation Mode
pdfjs-open-file-button =
.title = Open File
pdfjs-open-file-button-label = Open
pdfjs-print-button =
.title = Print
pdfjs-print-button-label = Print
pdfjs-save-button =
.title = Save
pdfjs-save-button-label = Save
pdfjs-download-button =
.title = Download
pdfjs-download-button-label = Download
pdfjs-bookmark-button =
.title = Current Page (View URL from Current Page)
pdfjs-bookmark-button-label = Current Page
pdfjs-tools-button =
.title = Tools
pdfjs-tools-button-label = Tools
pdfjs-first-page-button =
.title = Go to First Page
pdfjs-first-page-button-label = Go to First Page
pdfjs-last-page-button =
.title = Go to Last Page
pdfjs-last-page-button-label = Go to Last Page
pdfjs-page-rotate-cw-button =
.title = Rotate Clockwise
pdfjs-page-rotate-cw-button-label = Rotate Clockwise
pdfjs-page-rotate-ccw-button =
.title = Rotate Counterclockwise
pdfjs-page-rotate-ccw-button-label = Rotate Counterclockwise
pdfjs-cursor-text-select-tool-button =
.title = Enable Text Selection Tool
pdfjs-cursor-text-select-tool-button-label = Text Selection Tool
pdfjs-cursor-hand-tool-button =
.title = Enable Hand Tool
pdfjs-cursor-hand-tool-button-label = Hand Tool
pdfjs-scroll-page-button =
.title = Use Page Scrolling
pdfjs-scroll-page-button-label = Page Scrolling
pdfjs-scroll-vertical-button =
.title = Use Vertical Scrolling
pdfjs-scroll-vertical-button-label = Vertical Scrolling
pdfjs-scroll-horizontal-button =
.title = Use Horizontal Scrolling
pdfjs-scroll-horizontal-button-label = Horizontal Scrolling
pdfjs-scroll-wrapped-button =
.title = Use Wrapped Scrolling
pdfjs-scroll-wrapped-button-label = Wrapped Scrolling
pdfjs-spread-none-button =
.title = Do not join page spreads
pdfjs-spread-none-button-label = No Spreads
pdfjs-spread-odd-button =
.title = Join page spreads starting with odd-numbered pages
pdfjs-spread-odd-button-label = Odd Spreads
pdfjs-spread-even-button =
.title = Join page spreads starting with even-numbered pages
pdfjs-spread-even-button-label = Even Spreads
pdfjs-document-properties-button =
.title = Document Properties…
pdfjs-document-properties-button-label = Document Properties…
pdfjs-document-properties-file-name = File name:
pdfjs-document-properties-file-size = File size:
pdfjs-document-properties-size-kb = { NUMBER($kb, maximumSignificantDigits: 3) } KB ({ $b } bytes)
pdfjs-document-properties-size-mb = { NUMBER($mb, maximumSignificantDigits: 3) } MB ({ $b } bytes)
pdfjs-document-properties-title = Title:
pdfjs-document-properties-author = Author:
pdfjs-document-properties-subject = Subject:
pdfjs-document-properties-keywords = Keywords:
pdfjs-document-properties-creation-date = Creation Date:
pdfjs-document-properties-modification-date = Modification Date:
pdfjs-document-properties-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
pdfjs-document-properties-creator = Creator:
pdfjs-document-properties-producer = PDF Producer:
pdfjs-document-properties-version = PDF Version:
pdfjs-document-properties-page-count = Page Count:
pdfjs-document-properties-page-size = Page Size:
pdfjs-document-properties-page-size-unit-inches = in
pdfjs-document-properties-page-size-unit-millimeters = mm
pdfjs-document-properties-page-size-orientation-portrait = portrait
pdfjs-document-properties-page-size-orientation-landscape = landscape
pdfjs-document-properties-page-size-name-a-three = A3
pdfjs-document-properties-page-size-name-a-four = A4
pdfjs-document-properties-page-size-name-letter = Letter
pdfjs-document-properties-page-size-name-legal = Legal
pdfjs-document-properties-page-size-dimension-string = { $width } × { $height } { $unit } ({ $orientation })
pdfjs-document-properties-page-size-dimension-name-string = { $width } × { $height } { $unit } ({ $name }, { $orientation })
pdfjs-document-properties-linearized = Fast Web View:
pdfjs-document-properties-linearized-yes = Yes
pdfjs-document-properties-linearized-no = No
pdfjs-document-properties-close-button = Close
pdfjs-print-progress-message = Preparing document for printing…
pdfjs-print-progress-percent = { $progress }%
pdfjs-print-progress-close-button = Cancel
pdfjs-printing-not-supported = Warning: Printing is not fully supported by this browser.
pdfjs-printing-not-ready = Warning: The PDF is not fully loaded for printing.
pdfjs-toggle-sidebar-button =
.title = Toggle Sidebar
pdfjs-toggle-sidebar-notification-button =
.title = Toggle Sidebar (document contains outline/attachments/layers)
pdfjs-toggle-sidebar-button-label = Toggle Sidebar
pdfjs-document-outline-button =
.title = Show Document Outline (double-click to expand/collapse all items)
pdfjs-document-outline-button-label = Document Outline
pdfjs-attachments-button =
.title = Show Attachments
pdfjs-attachments-button-label = Attachments
pdfjs-layers-button =
.title = Show Layers (double-click to reset all layers to the default state)
pdfjs-layers-button-label = Layers
pdfjs-thumbs-button =
.title = Show Thumbnails
pdfjs-thumbs-button-label = Thumbnails
pdfjs-current-outline-item-button =
.title = Find Current Outline Item
pdfjs-current-outline-item-button-label = Current Outline Item
pdfjs-findbar-button =
.title = Find in Document
pdfjs-findbar-button-label = Find
pdfjs-additional-layers = Additional Layers
pdfjs-thumb-page-title =
.title = Page { $page }
pdfjs-thumb-page-canvas =
.aria-label = Thumbnail of Page { $page }
pdfjs-find-input =
.title = Find
.placeholder = Find in document…
pdfjs-find-previous-button =
.title = Find the previous occurrence of the phrase
pdfjs-find-previous-button-label = Previous
pdfjs-find-next-button =
.title = Find the next occurrence of the phrase
pdfjs-find-next-button-label = Next
pdfjs-find-highlight-checkbox = Highlight All
pdfjs-find-match-case-checkbox-label = Match Case
pdfjs-find-match-diacritics-checkbox-label = Match Diacritics
pdfjs-find-entire-word-checkbox-label = Whole Words
pdfjs-find-reached-top = Reached top of document, continued from bottom
pdfjs-find-reached-bottom = Reached end of document, continued from top
pdfjs-find-match-count =
{ $total ->
[one] { $current } of { $total } match
*[other] { $current } of { $total } matches
}
pdfjs-find-match-count-limit =
{ $limit ->
[one] More than { $limit } match
*[other] More than { $limit } matches
}
pdfjs-find-not-found = Phrase not found
pdfjs-page-scale-width = Page Width
pdfjs-page-scale-fit = Page Fit
pdfjs-page-scale-auto = Automatic Zoom
pdfjs-page-scale-actual = Actual Size
pdfjs-page-scale-percent = { $scale }%
pdfjs-page-landmark =
.aria-label = Page { $page }
pdfjs-loading-error = An error occurred while loading the PDF.
pdfjs-invalid-file-error = Invalid or corrupted PDF file.
pdfjs-missing-file-error = Missing PDF file.
pdfjs-unexpected-response-error = Unexpected server response.
pdfjs-rendering-error = An error occurred while rendering the page.
pdfjs-annotation-date-time-string = { DATETIME($dateObj, dateStyle: "short", timeStyle: "medium") }
pdfjs-text-annotation-type =
.alt = [{ $type } Annotation]
pdfjs-password-label = Enter the password to open this PDF file.
pdfjs-password-invalid = Invalid password. Please try again.
pdfjs-password-ok-button = OK
pdfjs-password-cancel-button = Cancel
pdfjs-web-fonts-disabled = Web fonts are disabled: unable to use embedded PDF fonts.
pdfjs-editor-free-text-button =
.title = Text
pdfjs-editor-free-text-button-label = Text
pdfjs-editor-ink-button =
.title = Draw
pdfjs-editor-ink-button-label = Draw
pdfjs-editor-stamp-button =
.title = Add or edit images
pdfjs-editor-stamp-button-label = Add or edit images
pdfjs-editor-highlight-button =
.title = Highlight
pdfjs-editor-highlight-button-label = Highlight
pdfjs-highlight-floating-button1 =
.title = Highlight
.aria-label = Highlight
pdfjs-highlight-floating-button-label = Highlight
pdfjs-editor-remove-ink-button =
.title = Remove drawing
pdfjs-editor-remove-freetext-button =
.title = Remove text
pdfjs-editor-remove-stamp-button =
.title = Remove image
pdfjs-editor-remove-highlight-button =
.title = Remove highlight
pdfjs-editor-free-text-color-input = Color
pdfjs-editor-free-text-size-input = Size
pdfjs-editor-ink-color-input = Color
pdfjs-editor-ink-thickness-input = Thickness
pdfjs-editor-ink-opacity-input = Opacity
pdfjs-editor-stamp-add-image-button =
.title = Add image
pdfjs-editor-stamp-add-image-button-label = Add image
pdfjs-editor-free-highlight-thickness-input = Thickness
pdfjs-editor-free-highlight-thickness-title =
.title = Change thickness when highlighting items other than text
pdfjs-free-text2 =
.aria-label = Text Editor
.default-content = Start typing…
pdfjs-ink =
.aria-label = Draw Editor
pdfjs-ink-canvas =
.aria-label = User-created image
pdfjs-editor-alt-text-button =
.aria-label = Alt text
pdfjs-editor-alt-text-button-label = Alt text
pdfjs-editor-alt-text-edit-button =
.aria-label = Edit alt text
pdfjs-editor-alt-text-dialog-label = Choose an option
pdfjs-editor-alt-text-dialog-description = Alt text (alternative text) helps when people can’t see the image or when it doesn’t load.
pdfjs-editor-alt-text-add-description-label = Add a description
pdfjs-editor-alt-text-add-description-description = Aim for 1-2 sentences that describe the subject, setting, or actions.
pdfjs-editor-alt-text-mark-decorative-label = Mark as decorative
pdfjs-editor-alt-text-mark-decorative-description = This is used for ornamental images, like borders or watermarks.
pdfjs-editor-alt-text-cancel-button = Cancel
pdfjs-editor-alt-text-save-button = Save
pdfjs-editor-alt-text-decorative-tooltip = Marked as decorative
pdfjs-editor-alt-text-textarea =
.placeholder = For example, “A young man sits down at a table to eat a meal”
pdfjs-editor-resizer-top-left =
.aria-label = Top left corner — resize
pdfjs-editor-resizer-top-middle =
.aria-label = Top middle — resize
pdfjs-editor-resizer-top-right =
.aria-label = Top right corner — resize
pdfjs-editor-resizer-middle-right =
.aria-label = Middle right — resize
pdfjs-editor-resizer-bottom-right =
.aria-label = Bottom right corner — resize
pdfjs-editor-resizer-bottom-middle =
.aria-label = Bottom middle — resize
pdfjs-editor-resizer-bottom-left =
.aria-label = Bottom left corner — resize
pdfjs-editor-resizer-middle-left =
.aria-label = Middle left — resize
pdfjs-editor-highlight-colorpicker-label = Highlight color
pdfjs-editor-colorpicker-button =
.title = Change color
pdfjs-editor-colorpicker-dropdown =
.aria-label = Color choices
pdfjs-editor-colorpicker-yellow =
.title = Yellow
pdfjs-editor-colorpicker-green =
.title = Green
pdfjs-editor-colorpicker-blue =
.title = Blue
pdfjs-editor-colorpicker-pink =
.title = Pink
pdfjs-editor-colorpicker-red =
.title = Red
pdfjs-editor-highlight-show-all-button-label = Show all
pdfjs-editor-highlight-show-all-button =
.title = Show all
pdfjs-editor-new-alt-text-dialog-edit-label = Edit alt text (image description)
pdfjs-editor-new-alt-text-dialog-add-label = Add alt text (image description)
pdfjs-editor-new-alt-text-textarea =
.placeholder = Write your description here…
pdfjs-editor-new-alt-text-description = Short description for people who can’t see the image or when the image doesn’t load.
pdfjs-editor-new-alt-text-disclaimer1 = This alt text was created automatically and may be inaccurate.
pdfjs-editor-new-alt-text-disclaimer-learn-more-url = Learn more
pdfjs-editor-new-alt-text-create-automatically-button-label = Create alt text automatically
pdfjs-editor-new-alt-text-not-now-button = Not now
pdfjs-editor-new-alt-text-error-title = Couldn’t create alt text automatically
pdfjs-editor-new-alt-text-error-description = Please write your own alt text or try again later.
pdfjs-editor-new-alt-text-error-close-button = Close
pdfjs-editor-new-alt-text-ai-model-downloading-progress = Downloading alt text AI model ({ $downloadedSize } of { $totalSize } MB)
.aria-valuetext = Downloading alt text AI model ({ $downloadedSize } of { $totalSize } MB)
pdfjs-editor-new-alt-text-added-button =
.aria-label = Alt text added
pdfjs-editor-new-alt-text-added-button-label = Alt text added
pdfjs-editor-new-alt-text-missing-button =
.aria-label = Missing alt text
pdfjs-editor-new-alt-text-missing-button-label = Missing alt text
pdfjs-editor-new-alt-text-to-review-button =
.aria-label = Review alt text
pdfjs-editor-new-alt-text-to-review-button-label = Review alt text
pdfjs-editor-new-alt-text-generated-alt-text-with-disclaimer = Created automatically: { $generatedAltText }
pdfjs-image-alt-text-settings-button =
.title = Image alt text settings
pdfjs-image-alt-text-settings-button-label = Image alt text settings
pdfjs-editor-alt-text-settings-dialog-label = Image alt text settings
pdfjs-editor-alt-text-settings-automatic-title = Automatic alt text
pdfjs-editor-alt-text-settings-create-model-button-label = Create alt text automatically
pdfjs-editor-alt-text-settings-create-model-description = Suggests descriptions to help people who can’t see the image or when the image doesn’t load.
pdfjs-editor-alt-text-settings-download-model-label = Alt text AI model ({ $totalSize } MB)
pdfjs-editor-alt-text-settings-ai-model-description = Runs locally on your device so your data stays private. Required for automatic alt text.
pdfjs-editor-alt-text-settings-delete-model-button = Delete
pdfjs-editor-alt-text-settings-download-model-button = Download
pdfjs-editor-alt-text-settings-downloading-model-button = Downloading…
pdfjs-editor-alt-text-settings-editor-title = Alt text editor
pdfjs-editor-alt-text-settings-show-dialog-button-label = Show alt text editor right away when adding an image
pdfjs-editor-alt-text-settings-show-dialog-description = Helps you make sure all your images have alt text.
pdfjs-editor-alt-text-settings-close-button = Close
pdfjs-editor-undo-bar-message-highlight = Highlight removed
pdfjs-editor-undo-bar-message-freetext = Text removed
pdfjs-editor-undo-bar-message-ink = Drawing removed
pdfjs-editor-undo-bar-message-stamp = Image removed
pdfjs-editor-undo-bar-message-multiple =
{ $count ->
[one] { $count } annotation removed
*[other] { $count } annotations removed
}
pdfjs-editor-undo-bar-undo-button =
.title = Undo
pdfjs-editor-undo-bar-undo-button-label = Undo
pdfjs-editor-undo-bar-close-button =
.title = Close
pdfjs-editor-undo-bar-close-button-label = Close`);
}, b(MF, ad);
let zn = MF;
const dG = 1e3, tG = 50, ZG = 1e3;
function BQ() {
return document.location.hash;
}
var fZ, tl, St, eV, hV, cs, bV, nR, Sb, Tb, sR, Xb, ub;
class FG {
constructor({
linkService: U,
eventBus: l
}) {
b(this, tl);
b(this, fZ, null);
this.linkService = U, this.eventBus = l, this._initialized = !1, this._fingerprint = "", this.reset(), this.eventBus._on("pagesinit", () => {
this._isPagesLoaded = !1, this.eventBus._on("pagesloaded", (d) => {
this._isPagesLoaded = !!d.pagesCount;
}, {
once: !0
});
});
}
initialize({
fingerprint: U,
resetHistory: l = !1,
updateUrl: d = !1
}) {
if (!U || typeof U != "string") {
console.error('PDFHistory.initialize: The "fingerprint" must be a non-empty string.');
return;
}
this._initialized && this.reset();
const t = this._fingerprint !== "" && this._fingerprint !== U;
this._fingerprint = U, this._updateUrl = d === !0, this._initialized = !0, h(this, tl, Xb).call(this);
const Z = window.history.state;
if (this._popStateInProgress = !1, this._blockHashChange = 0, this._currentHash = BQ(), this._numPositionUpdates = 0, this._uid = this._maxUid = 0, this._destination = null, this._position = null, !h(this, tl, cs).call(this, Z, !0) || l) {
const {
hash: n,
page: s,
rotation: W
} = h(this, tl, nR).call(this, !0);
if (!n || t || l) {
h(this, tl, St).call(this, null, !0);
return;
}
h(this, tl, St).call(this, {
hash: n,
page: s,
rotation: W
}, !0);
return;
}
const F = Z.destination;
h(this, tl, bV).call(this, F, Z.uid, !0), F.rotation !== void 0 && (this._initialRotation = F.rotation), F.dest ? (this._initialBookmark = JSON.stringify(F.dest), this._destination.page = null) : F.hash ? this._initialBookmark = F.hash : F.page && (this._initialBookmark = `page=${F.page}`);
}
reset() {
this._initialized && (h(this, tl, sR).call(this), this._initialized = !1, h(this, tl, ub).call(this)), this._updateViewareaTimeout && (clearTimeout(this._updateViewareaTimeout), this._updateViewareaTimeout = null), this._initialBookmark = null, this._initialRotation = null;
}
push({
namedDest: U = null,
explicitDest: l,
pageNumber: d
}) {
if (!this._initialized)
return;
if (U && typeof U != "string") {
console.error(`PDFHistory.push: "${U}" is not a valid namedDest parameter.`);
return;
} else if (Array.isArray(l)) {
if (!h(this, tl, hV).call(this, d) && (d !== null || this._destination)) {
console.error(`PDFHistory.push: "${d}" is not a valid pageNumber parameter.`);
return;
}
} else {
console.error(`PDFHistory.push: "${l}" is not a valid explicitDest parameter.`);
return;
}
const t = U || JSON.stringify(l);
if (!t)
return;
let Z = !1;
if (this._destination && (cG(this._destination.hash, t) || nG(this._destination.dest, l))) {
if (this._destination.page)
return;
Z = !0;
}
this._popStateInProgress && !Z || (h(this, tl, St).call(this, {
dest: l,
hash: t,
page: d,
rotation: this.linkService.rotation
}, Z), this._popStateInProgress || (this._popStateInProgress = !0, Promise.resolve().then(() => {
this._popStateInProgress = !1;
})));
}
pushPage(U) {
var l;
if (this._initialized) {
if (!h(this, tl, hV).call(this, U)) {
console.error(`PDFHistory.pushPage: "${U}" is not a valid page number.`);
return;
}
((l = this._destination) == null ? void 0 : l.page) !== U && (this._popStateInProgress || (h(this, tl, St).call(this, {
dest: null,
hash: `page=${U}`,
page: U,
rotation: this.linkService.rotation
}), this._popStateInProgress || (this._popStateInProgress = !0, Promise.resolve().then(() => {
this._popStateInProgress = !1;
}))));
}
}
pushCurrentPosition() {
!this._initialized || this._popStateInProgress || h(this, tl, eV).call(this);
}
back() {
if (!this._initialized || this._popStateInProgress)
return;
const U = window.history.state;
h(this, tl, cs).call(this, U) && U.uid > 0 && window.history.back();
}
forward() {
if (!this._initialized || this._popStateInProgress)
return;
const U = window.history.state;
h(this, tl, cs).call(this, U) && U.uid < this._maxUid && window.history.forward();
}
get popStateInProgress() {
return this._initialized && (this._popStateInProgress || this._blockHashChange > 0);
}
get initialBookmark() {
return this._initialized ? this._initialBookmark : null;
}
get initialRotation() {
return this._initialized ? this._initialRotation : null;
}
}
fZ = new WeakMap(), tl = new WeakSet(), St = function(U, l = !1) {
const d = l || !this._destination, t = {
fingerprint: this._fingerprint,
uid: d ? this._uid : this._uid + 1,
destination: U
};
h(this, tl, bV).call(this, U, t.uid);
let Z;
if (this._updateUrl && (U != null && U.hash)) {
const F = document.location.href.split("#", 1)[0];
F.startsWith("file://") || (Z = `${F}#${U.hash}`);
}
d ? window.history.replaceState(t, "", Z) : window.history.pushState(t, "", Z);
}, eV = function(U = !1) {
if (!this._position)
return;
let l = this._position;
if (U && (l = Object.assign(/* @__PURE__ */ Object.create(null), this._position), l.temporary = !0), !this._destination) {
h(this, tl, St).call(this, l);
return;
}
if (this._destination.temporary) {
h(this, tl, St).call(this, l, !0);
return;
}
if (this._destination.hash === l.hash || !this._destination.page && this._numPositionUpdates <= tG)
return;
let d = !1;
if (this._destination.page >= l.first && this._destination.page <= l.page) {
if (this._destination.dest !== void 0 || !this._destination.first)
return;
d = !0;
}
h(this, tl, St).call(this, l, d);
}, hV = function(U) {
return Number.isInteger(U) && U > 0 && U <= this.linkService.pagesCount;
}, cs = function(U, l = !1) {
if (!U)
return !1;
if (U.fingerprint !== this._fingerprint)
if (l) {
if (typeof U.fingerprint != "string" || U.fingerprint.length !== this._fingerprint.length)
return !1;
const [d] = performance.getEntriesByType("navigation");
if ((d == null ? void 0 : d.type) !== "reload")
return !1;
} else
return !1;
return !(!Number.isInteger(U.uid) || U.uid < 0 || U.destination === null || typeof U.destination != "object");
}, bV = function(U, l, d = !1) {
this._updateViewareaTimeout && (clearTimeout(this._updateViewareaTimeout), this._updateViewareaTimeout = null), d && (U != null && U.temporary) && delete U.temporary, this._destination = U, this._uid = l, this._maxUid = Math.max(this._maxUid, l), this._numPositionUpdates = 0;
}, nR = function(U = !1) {
const l = unescape(BQ()).substring(1), d = VQ(l), t = d.get("nameddest") || "";
let Z = d.get("page") | 0;
return (!h(this, tl, hV).call(this, Z) || U && t.length > 0) && (Z = null), {
hash: l,
page: Z,
rotation: this.linkService.rotation
};
}, Sb = function({
location: U
}) {
this._updateViewareaTimeout && (clearTimeout(this._updateViewareaTimeout), this._updateViewareaTimeout = null), this._position = {
hash: U.pdfOpenParams.substring(1),
page: this.linkService.page,
first: U.pageNumber,
rotation: U.rotation
}, !this._popStateInProgress && (this._isPagesLoaded && this._destination && !this._destination.page && this._numPositionUpdates++, this._updateViewareaTimeout = setTimeout(() => {
this._popStateInProgress || h(this, tl, eV).call(this, !0), this._updateViewareaTimeout = null;
}, ZG));
}, Tb = function({
state: U
}) {
const l = BQ(), d = this._currentHash !== l;
if (this._currentHash = l, !U) {
this._uid++;
const {
hash: Z,
page: F,
rotation: n
} = h(this, tl, nR).call(this);
h(this, tl, St).call(this, {
hash: Z,
page: F,
rotation: n
}, !0);
return;
}
if (!h(this, tl, cs).call(this, U))
return;
this._popStateInProgress = !0, d && (this._blockHashChange++, aJ({
target: window,
name: "hashchange",
delay: dG
}).then(() => {
this._blockHashChange--;
}));
const t = U.destination;
h(this, tl, bV).call(this, t, U.uid, !0), tb(t.rotation) && (this.linkService.rotation = t.rotation), t.dest ? this.linkService.goToDestination(t.dest) : t.hash ? this.linkService.setHash(t.hash) : t.page && (this.linkService.page = t.page), Promise.resolve().then(() => {
this._popStateInProgress = !1;
});
}, sR = function() {
(!this._destination || this._destination.temporary) && h(this, tl, eV).call(this);
}, Xb = function() {
if (c(this, fZ))
return;
R(this, fZ, new AbortController());
const {
signal: U
} = c(this, fZ);
this.eventBus._on("updateviewarea", h(this, tl, Sb).bind(this), {
signal: U
}), window.addEventListener("popstate", h(this, tl, Tb).bind(this), {
signal: U
}), window.addEventListener("pagehide", h(this, tl, sR).bind(this), {
signal: U
});
}, ub = function() {
var U;
(U = c(this, fZ)) == null || U.abort(), R(this, fZ, null);
};
function cG(a, U) {
return typeof a != "string" || typeof U != "string" ? !1 : a === U || VQ(a).get("nameddest") === U;
}
function nG(a, U) {
function l(d, t) {
if (typeof d != typeof t || Array.isArray(d) || Array.isArray(t))
return !1;
if (d !== null && typeof d == "object" && t !== null) {
if (Object.keys(d).length !== Object.keys(t).length)
return !1;
for (const Z in d)
if (!l(d[Z], t[Z]))
return !1;
return !0;
}
return d === t || Number.isNaN(d) && Number.isNaN(t);
}
if (!(Array.isArray(a) && Array.isArray(U)) || a.length !== U.length)
return !1;
for (let d = 0, t = a.length; d < t; d++)
if (!l(a[d], U[d]))
return !1;
return !0;
}
var Pa, fa, Aa, _a, qa, en;
class sG {
constructor(U) {
b(this, Pa, null);
b(this, fa, null);
b(this, Aa, null);
b(this, _a, null);
b(this, qa, null);
b(this, en);
this.pdfPage = U.pdfPage, this.accessibilityManager = U.accessibilityManager, this.l10n = U.l10n, this.l10n || (this.l10n = new zn()), this.annotationEditorLayer = null, this.div = null, this._cancelled = !1, R(this, en, U.uiManager), R(this, Pa, U.annotationLayer || null), R(this, qa, U.textLayer || null), R(this, fa, U.drawLayer || null), R(this, Aa, U.onAppend || null), R(this, _a, U.structTreeLayer || null);
}
async render(U, l = "display") {
var F;
if (l !== "display" || this._cancelled)
return;
const d = U.clone({
dontFlip: !0
});
if (this.div) {
this.annotationEditorLayer.update({
viewport: d
}), this.show();
return;
}
const t = this.div = document.createElement("div");
t.className = "annotationEditorLayer", t.hidden = !0, t.dir = c(this, en).direction, (F = c(this, Aa)) == null || F.call(this, t), this.annotationEditorLayer = new _M({
uiManager: c(this, en),
div: t,
structTreeLayer: c(this, _a),
accessibilityManager: this.accessibilityManager,
pageIndex: this.pdfPage.pageNumber - 1,
l10n: this.l10n,
viewport: d,
annotationLayer: c(this, Pa),
textLayer: c(this, qa),
drawLayer: c(this, fa)
});
const Z = {
viewport: d,
div: t,
annotations: null,
intent: l
};
this.annotationEditorLayer.render(Z), this.show();
}
cancel() {
this._cancelled = !0, this.div && this.annotationEditorLayer.destroy();
}
hide() {
this.div && (this.annotationEditorLayer.pause(!0), this.div.hidden = !0);
}
show() {
!this.div || this.annotationEditorLayer.isInvisible || (this.div.hidden = !1, this.annotationEditorLayer.pause(!1));
}
}
Pa = new WeakMap(), fa = new WeakMap(), Aa = new WeakMap(), _a = new WeakMap(), qa = new WeakMap(), en = new WeakMap();
{
var aR = /* @__PURE__ */ new Map();
const a = navigator.userAgent || "", U = navigator.platform || "", l = navigator.maxTouchPoints || 1, d = /Android/.test(a), t = /\b(iPad|iPhone|iPod)(?=;)/.test(a) || U === "MacIntel" && l > 1;
(function() {
(t || d) && aR.set("maxCanvasPixels", 5242880);
})(), function() {
d && aR.set("useSystemFonts", !1);
}();
}
const z = {
BROWSER: 1,
VIEWER: 2,
API: 4,
WORKER: 8,
EVENT_DISPATCH: 16,
PREFERENCE: 128
}, WR = {
BOOLEAN: 1,
NUMBER: 2,
OBJECT: 4,
STRING: 8,
UNDEFINED: 16
}, ht = {
allowedGlobalEvents: {
value: null,
kind: z.BROWSER
},
canvasMaxAreaInBytes: {
value: -1,
kind: z.BROWSER + z.API
},
isInAutomation: {
value: !1,
kind: z.BROWSER
},
localeProperties: {
value: {
lang: navigator.language || "en-US"
},
kind: z.BROWSER
},
nimbusDataStr: {
value: "",
kind: z.BROWSER
},
supportsCaretBrowsingMode: {
value: !1,
kind: z.BROWSER
},
supportsDocumentFonts: {
value: !0,
kind: z.BROWSER
},
supportsIntegratedFind: {
value: !1,
kind: z.BROWSER
},
supportsMouseWheelZoomCtrlKey: {
value: !0,
kind: z.BROWSER
},
supportsMouseWheelZoomMetaKey: {
value: !0,
kind: z.BROWSER
},
supportsPinchToZoom: {
value: !0,
kind: z.BROWSER
},
toolbarDensity: {
value: 0,
kind: z.BROWSER + z.EVENT_DISPATCH
},
altTextLearnMoreUrl: {
value: "",
kind: z.VIEWER + z.PREFERENCE
},
annotationEditorMode: {
value: 0,
kind: z.VIEWER + z.PREFERENCE
},
annotationMode: {
value: 2,
kind: z.VIEWER + z.PREFERENCE
},
cursorToolOnLoad: {
value: 0,
kind: z.VIEWER + z.PREFERENCE
},
debuggerSrc: {
value: "./debugger.mjs",
kind: z.VIEWER
},
defaultZoomDelay: {
value: 400,
kind: z.VIEWER + z.PREFERENCE
},
defaultZoomValue: {
value: "",
kind: z.VIEWER + z.PREFERENCE
},
disableHistory: {
value: !1,
kind: z.VIEWER
},
disablePageLabels: {
value: !1,
kind: z.VIEWER + z.PREFERENCE
},
enableAltText: {
value: !1,
kind: z.VIEWER + z.PREFERENCE
},
enableAltTextModelDownload: {
value: !0,
kind: z.VIEWER + z.PREFERENCE + z.EVENT_DISPATCH
},
enableGuessAltText: {
value: !0,
kind: z.VIEWER + z.PREFERENCE + z.EVENT_DISPATCH
},
enableHighlightFloatingButton: {
value: !1,
kind: z.VIEWER + z.PREFERENCE
},
enableNewAltTextWhenAddingImage: {
value: !0,
kind: z.VIEWER + z.PREFERENCE
},
enablePermissions: {
value: !1,
kind: z.VIEWER + z.PREFERENCE
},
enablePrintAutoRotate: {
value: !0,
kind: z.VIEWER + z.PREFERENCE
},
enableScripting: {
value: !0,
kind: z.VIEWER + z.PREFERENCE
},
enableUpdatedAddImage: {
value: !1,
kind: z.VIEWER + z.PREFERENCE
},
externalLinkRel: {
value: "noopener noreferrer nofollow",
kind: z.VIEWER
},
externalLinkTarget: {
value: 0,
kind: z.VIEWER + z.PREFERENCE
},
highlightEditorColors: {
value: "yellow=#FFFF98,green=#53FFBC,blue=#80EBFF,pink=#FFCBE6,red=#FF4F5F",
kind: z.VIEWER + z.PREFERENCE
},
historyUpdateUrl: {
value: !1,
kind: z.VIEWER + z.PREFERENCE
},
ignoreDestinationZoom: {
value: !1,
kind: z.VIEWER + z.PREFERENCE
},
imageResourcesPath: {
value: "./images/",
kind: z.VIEWER
},
maxCanvasPixels: {
value: 2 ** 25,
kind: z.VIEWER
},
forcePageColors: {
value: !1,
kind: z.VIEWER + z.PREFERENCE
},
pageColorsBackground: {
value: "Canvas",
kind: z.VIEWER + z.PREFERENCE
},
pageColorsForeground: {
value: "CanvasText",
kind: z.VIEWER + z.PREFERENCE
},
pdfBugEnabled: {
value: !1,
kind: z.VIEWER + z.PREFERENCE
},
printResolution: {
value: 150,
kind: z.VIEWER
},
sidebarViewOnLoad: {
value: -1,
kind: z.VIEWER + z.PREFERENCE
},
scrollModeOnLoad: {
value: -1,
kind: z.VIEWER + z.PREFERENCE
},
spreadModeOnLoad: {
value: -1,
kind: z.VIEWER + z.PREFERENCE
},
textLayerMode: {
value: 1,
kind: z.VIEWER + z.PREFERENCE
},
viewOnLoad: {
value: 0,
kind: z.VIEWER + z.PREFERENCE
},
cMapPacked: {
value: !0,
kind: z.API
},
cMapUrl: {
value: "../web/cmaps/",
kind: z.API
},
disableAutoFetch: {
value: !1,
kind: z.API + z.PREFERENCE
},
disableFontFace: {
value: !1,
kind: z.API + z.PREFERENCE
},
disableRange: {
value: !1,
kind: z.API + z.PREFERENCE
},
disableStream: {
value: !1,
kind: z.API + z.PREFERENCE
},
docBaseUrl: {
value: "",
kind: z.API
},
enableHWA: {
value: !0,
kind: z.API + z.VIEWER + z.PREFERENCE
},
enableXfa: {
value: !0,
kind: z.API + z.PREFERENCE
},
fontExtraProperties: {
value: !1,
kind: z.API
},
isEvalSupported: {
value: !0,
kind: z.API
},
isOffscreenCanvasSupported: {
value: !0,
kind: z.API
},
maxImageSize: {
value: -1,
kind: z.API
},
pdfBug: {
value: !1,
kind: z.API
},
standardFontDataUrl: {
value: "../web/standard_fonts/",
kind: z.API
},
useSystemFonts: {
value: void 0,
kind: z.API,
type: WR.BOOLEAN + WR.UNDEFINED
},
verbosity: {
value: 1,
kind: z.API
},
workerPort: {
value: null,
kind: z.WORKER
},
workerSrc: {
value: "../build/pdf.worker.mjs",
kind: z.WORKER
}
};
ht.defaultUrl = {
value: "compressed.tracemonkey-pldi-09.pdf",
kind: z.VIEWER
}, ht.sandboxBundleSrc = {
value: "../build/pdf.sandbox.mjs",
kind: z.VIEWER
}, ht.viewerCssTheme = {
value: 0,
kind: z.VIEWER + z.PREFERENCE
}, ht.enableFakeMLManager = {
value: !0,
kind: z.VIEWER
};
ht.disablePreferences = {
value: !1,
kind: z.VIEWER
};
var AZ;
const vd = class vd {
static get(U) {
return c(this, AZ).get(U);
}
static getAll(U = null, l = !1) {
const d = /* @__PURE__ */ Object.create(null);
for (const t in ht) {
const Z = ht[t];
U && !(U & Z.kind) || (d[t] = l ? Z.value : c(this, AZ).get(t));
}
return d;
}
static set(U, l) {
this.setAll({
[U]: l
});
}
static setAll(U, l = !1) {
this._hasInvokedSet || (this._hasInvokedSet = !0);
let d;
for (const t in U) {
const Z = ht[t], F = U[t];
if (!Z || !(typeof F == typeof Z.value || WR[(typeof F).toUpperCase()] & Z.type))
continue;
const {
kind: n
} = Z;
l && !(n & z.BROWSER || n & z.PREFERENCE) || (this.eventBus && n & z.EVENT_DISPATCH && (d || (d = /* @__PURE__ */ new Map())).set(t, F), c(this, AZ).set(t, F));
}
if (d)
for (const [t, Z] of d)
this.eventBus.dispatch(t.toLowerCase(), {
source: this,
value: Z
});
}
};
AZ = new WeakMap(), f(vd, "eventBus"), b(vd, AZ, /* @__PURE__ */ new Map()), (() => {
for (const U in ht)
c(vd, AZ).set(U, ht[U].value);
for (const [U, l] of aR)
c(vd, AZ).set(U, l);
vd._hasInvokedSet = !1, vd._checkDisablePreferences = () => vd.get("disablePreferences") ? !0 : (vd._hasInvokedSet && console.warn('The Preferences may override manually set AppOptions; please use the "disablePreferences"-option to prevent that.'), !1);
})();
let VR = vd;
var Vt;
class aG {
constructor(U) {
b(this, Vt, null);
this.pageIndex = U.pageIndex;
}
async render(U = "display") {
U !== "display" || c(this, Vt) || this._cancelled || R(this, Vt, new UJ({
pageIndex: this.pageIndex
}));
}
cancel() {
this._cancelled = !0, c(this, Vt) && (c(this, Vt).destroy(), R(this, Vt, null));
}
setParent(U) {
var l;
(l = c(this, Vt)) == null || l.setParent(U);
}
getDrawLayer() {
return c(this, Vt);
}
}
Vt = new WeakMap();
const vN = {
Document: null,
DocumentFragment: null,
Part: "group",
Sect: "group",
Div: "group",
Aside: "note",
NonStruct: "none",
P: null,
H: "heading",
Title: null,
FENote: "note",
Sub: "group",
Lbl: null,
Span: null,
Em: null,
Strong: null,
Link: "link",
Annot: "note",
Form: "form",
Ruby: null,
RB: null,
RT: null,
RP: null,
Warichu: null,
WT: null,
WP: null,
L: "list",
LI: "listitem",
LBody: null,
Table: "table",
TR: "row",
TH: "columnheader",
TD: "cell",
THead: "columnheader",
TBody: null,
TFoot: null,
Caption: null,
Figure: "figure",
Formula: null,
Artifact: null
}, WG = /^H(\d+)$/;
var hn, Ed, bn, mn, Mn, _Z, mt, QR, ob, iR;
class Yb {
constructor(U, l) {
b(this, mt);
b(this, hn);
b(this, Ed, null);
b(this, bn);
b(this, mn, /* @__PURE__ */ new Map());
b(this, Mn);
b(this, _Z, null);
R(this, hn, U.getStructTree()), R(this, Mn, l);
}
async render() {
var t;
if (c(this, bn))
return c(this, bn);
const {
promise: U,
resolve: l,
reject: d
} = Promise.withResolvers();
R(this, bn, U);
try {
R(this, Ed, h(this, mt, iR).call(this, await c(this, hn)));
} catch (Z) {
d(Z);
}
return R(this, hn, null), (t = c(this, Ed)) == null || t.classList.add("structTree"), l(c(this, Ed)), U;
}
async getAriaAttributes(U) {
try {
return await this.render(), c(this, mn).get(U);
} catch {
}
return null;
}
hide() {
c(this, Ed) && !c(this, Ed).hidden && (c(this, Ed).hidden = !0);
}
show() {
var U;
(U = c(this, Ed)) != null && U.hidden && (c(this, Ed).hidden = !1);
}
addElementsToTextLayer() {
var U;
if (c(this, _Z)) {
for (const [l, d] of c(this, _Z))
(U = document.getElementById(l)) == null || U.append(d);
c(this, _Z).clear(), R(this, _Z, null);
}
}
}
hn = new WeakMap(), Ed = new WeakMap(), bn = new WeakMap(), mn = new WeakMap(), Mn = new WeakMap(), _Z = new WeakMap(), mt = new WeakSet(), QR = function(U, l) {
const {
alt: d,
id: t,
lang: Z
} = U;
if (d !== void 0) {
let F = !1;
const n = Vs(d);
for (const s of U.children)
if (s.type === "annotation") {
let W = c(this, mn).get(s.id);
W || (W = /* @__PURE__ */ new Map(), c(this, mn).set(s.id, W)), W.set("aria-label", n), F = !0;
}
F || l.setAttribute("aria-label", n);
}
t !== void 0 && l.setAttribute("aria-owns", t), Z !== void 0 && l.setAttribute("lang", Vs(Z, !0));
}, ob = function(U, l) {
const {
alt: d,
bbox: t,
children: Z
} = U, F = Z == null ? void 0 : Z[0];
if (!c(this, Mn) || !d || !t || (F == null ? void 0 : F.type) !== "content")
return !1;
const {
id: n
} = F;
if (!n)
return !1;
l.setAttribute("aria-owns", n);
const s = document.createElement("span");
(c(this, _Z) || R(this, _Z, /* @__PURE__ */ new Map())).set(n, s), s.setAttribute("role", "img"), s.setAttribute("aria-label", Vs(d));
const {
pageHeight: W,
pageX: V,
pageY: Q
} = c(this, Mn), i = "calc(var(--scale-factor)*", {
style: N
} = s;
return N.width = `${i}${t[2] - t[0]}px)`, N.height = `${i}${t[3] - t[1]}px)`, N.left = `${i}${t[0] - V}px)`, N.top = `${i}${W - t[3] + Q}px)`, !0;
}, iR = function(U) {
if (!U)
return null;
const l = document.createElement("span");
if ("role" in U) {
const {
role: d
} = U, t = d.match(WG);
if (t ? (l.setAttribute("role", "heading"), l.setAttribute("aria-level", t[1])) : vN[d] && l.setAttribute("role", vN[d]), d === "Figure" && h(this, mt, ob).call(this, U, l))
return l;
}
if (h(this, mt, QR).call(this, U, l), U.children)
if (U.children.length === 1 && "id" in U.children[0])
h(this, mt, QR).call(this, U.children[0], l);
else
for (const d of U.children)
l.append(h(this, mt, iR).call(this, d));
return l;
};
var qt, bd, $t, qZ, Jn, mV, $a, NR;
const dc = class dc {
constructor() {
b(this, $a);
b(this, qt, !1);
b(this, bd, null);
b(this, $t, /* @__PURE__ */ new Map());
b(this, qZ, /* @__PURE__ */ new Map());
}
setTextMapping(U) {
R(this, bd, U);
}
enable() {
if (c(this, qt))
throw new Error("TextAccessibilityManager is already enabled.");
if (!c(this, bd))
throw new Error("Text divs and strings have not been set.");
if (R(this, qt, !0), R(this, bd, c(this, bd).slice()), c(this, bd).sort(h(dc, Jn, mV)), c(this, $t).size > 0) {
const U = c(this, bd);
for (const [l, d] of c(this, $t)) {
if (!document.getElementById(l)) {
c(this, $t).delete(l);
continue;
}
h(this, $a, NR).call(this, l, U[d]);
}
}
for (const [U, l] of c(this, qZ))
this.addPointerInTextLayer(U, l);
c(this, qZ).clear();
}
disable() {
c(this, qt) && (c(this, qZ).clear(), R(this, bd, null), R(this, qt, !1));
}
removePointerInTextLayer(U) {
if (!c(this, qt)) {
c(this, qZ).delete(U);
return;
}
const l = c(this, bd);
if (!l || l.length === 0)
return;
const {
id: d
} = U, t = c(this, $t).get(d);
if (t === void 0)
return;
const Z = l[t];
c(this, $t).delete(d);
let F = Z.getAttribute("aria-owns");
F != null && F.includes(d) && (F = F.split(" ").filter((n) => n !== d).join(" "), F ? Z.setAttribute("aria-owns", F) : (Z.removeAttribute("aria-owns"), Z.setAttribute("role", "presentation")));
}
addPointerInTextLayer(U, l) {
const {
id: d
} = U;
if (!d)
return null;
if (!c(this, qt))
return c(this, qZ).set(U, l), null;
l && this.removePointerInTextLayer(U);
const t = c(this, bd);
if (!t || t.length === 0)
return null;
const Z = bs(t, (W) => {
var V;
return h(V = dc, Jn, mV).call(V, U, W) < 0;
}), F = Math.max(0, Z - 1), n = t[F];
h(this, $a, NR).call(this, d, n), c(this, $t).set(d, F);
const s = n.parentNode;
return s != null && s.classList.contains("markedContent") ? s.id : null;
}
moveElementInDOM(U, l, d, t) {
const Z = this.addPointerInTextLayer(d, t);
if (!U.hasChildNodes())
return U.append(l), Z;
const F = Array.from(U.childNodes).filter((W) => W !== l);
if (F.length === 0)
return Z;
const n = d || l, s = bs(F, (W) => {
var V;
return h(V = dc, Jn, mV).call(V, n, W) < 0;
});
return s === 0 ? F[0].before(l) : F[s - 1].after(l), Z;
}
};
qt = new WeakMap(), bd = new WeakMap(), $t = new WeakMap(), qZ = new WeakMap(), Jn = new WeakSet(), mV = function(U, l) {
const d = U.getBoundingClientRect(), t = l.getBoundingClientRect();
if (d.width === 0 && d.height === 0)
return 1;
if (t.width === 0 && t.height === 0)
return -1;
const Z = d.y, F = d.y + d.height, n = d.y + d.height / 2, s = t.y, W = t.y + t.height, V = t.y + t.height / 2;
if (n <= s && V >= F)
return -1;
if (V <= Z && n >= W)
return 1;
const Q = d.x + d.width / 2, i = t.x + t.width / 2;
return Q - i;
}, $a = new WeakSet(), NR = function(U, l) {
const d = l.getAttribute("aria-owns");
d != null && d.includes(U) || l.setAttribute("aria-owns", d ? `${d} ${U}` : U), l.removeAttribute("role");
}, b(dc, Jn);
let RR = dc;
var $Z;
class VG {
constructor({
findController: U,
eventBus: l,
pageIndex: d
}) {
b(this, $Z, null);
this.findController = U, this.matches = [], this.eventBus = l, this.pageIdx = d, this.textDivs = null, this.textContentItemsStr = null, this.enabled = !1;
}
setTextMapping(U, l) {
this.textDivs = U, this.textContentItemsStr = l;
}
enable() {
if (!this.textDivs || !this.textContentItemsStr)
throw new Error("Text divs and strings have not been set.");
if (this.enabled)
throw new Error("TextHighlighter is already enabled.");
this.enabled = !0, c(this, $Z) || (R(this, $Z, new AbortController()), this.eventBus._on("updatetextlayermatches", (U) => {
(U.pageIndex === this.pageIdx || U.pageIndex === -1) && this._updateMatches();
}, {
signal: c(this, $Z).signal
})), this._updateMatches();
}
disable() {
var U;
this.enabled && (this.enabled = !1, (U = c(this, $Z)) == null || U.abort(), R(this, $Z, null), this._updateMatches(!0));
}
_convertMatches(U, l) {
if (!U)
return [];
const {
textContentItemsStr: d
} = this;
let t = 0, Z = 0;
const F = d.length - 1, n = [];
for (let s = 0, W = U.length; s < W; s++) {
let V = U[s];
for (; t !== F && V >= Z + d[t].length; )
Z += d[t].length, t++;
t === d.length && console.error("Could not find a matching mapping");
const Q = {
begin: {
divIdx: t,
offset: V - Z
}
};
for (V += l[s]; t !== F && V > Z + d[t].length; )
Z += d[t].length, t++;
Q.end = {
divIdx: t,
offset: V - Z
}, n.push(Q);
}
return n;
}
_renderMatches(U) {
if (U.length === 0)
return;
const {
findController: l,
pageIdx: d
} = this, {
textContentItemsStr: t,
textDivs: Z
} = this, F = d === l.selected.pageIdx, n = l.selected.matchIdx, s = l.state.highlightAll;
let W = null;
const V = {
divIdx: -1,
offset: void 0
};
function Q(M, G) {
const S = M.divIdx;
return Z[S].textContent = "", i(S, 0, M.offset, G);
}
function i(M, G, S, T) {
let u = Z[M];
if (u.nodeType === Node.TEXT_NODE) {
const B = document.createElement("span");
u.before(B), B.append(u), Z[M] = B, u = B;
}
const Y = t[M].substring(G, S), o = document.createTextNode(Y);
if (T) {
const B = document.createElement("span");
if (B.className = `${T} appended`, B.append(o), u.append(B), T.includes("selected")) {
const {
left: X
} = B.getClientRects()[0], p = u.getBoundingClientRect().left;
return X - p;
}
return 0;
}
return u.append(o), 0;
}
let N = n, e = N + 1;
if (s)
N = 0, e = U.length;
else if (!F)
return;
let m = -1, J = -1;
for (let M = N; M < e; M++) {
const G = U[M], S = G.begin;
if (S.divIdx === m && S.offset === J)
continue;
m = S.divIdx, J = S.offset;
const T = G.end, u = F && M === n, Y = u ? " selected" : "";
let o = 0;
if (!W || S.divIdx !== W.divIdx ? (W !== null && i(W.divIdx, W.offset, V.offset), Q(S)) : i(W.divIdx, W.offset, S.offset), S.divIdx === T.divIdx)
o = i(S.divIdx, S.offset, T.offset, "highlight" + Y);
else {
o = i(S.divIdx, S.offset, V.offset, "highlight begin" + Y);
for (let B = S.divIdx + 1, X = T.divIdx; B < X; B++)
Z[B].className = "highlight middle" + Y;
Q(T, "highlight end" + Y);
}
W = T, u && l.scrollMatchIntoView({
element: Z[S.divIdx],
selectedLeft: o,
pageIndex: d,
matchIndex: n
});
}
W && i(W.divIdx, W.offset, V.offset);
}
_updateMatches(U = !1) {
if (!this.enabled && !U)
return;
const {
findController: l,
matches: d,
pageIdx: t
} = this, {
textContentItemsStr: Z,
textDivs: F
} = this;
let n = -1;
for (const V of d) {
const Q = Math.max(n, V.begin.divIdx);
for (let i = Q, N = V.end.divIdx; i <= N; i++) {
const e = F[i];
e.textContent = Z[i], e.className = "";
}
n = V.end.divIdx + 1;
}
if (!(l != null && l.highlightMatches) || U)
return;
const s = l.pageMatches[t] || null, W = l.pageMatchesLength[t] || null;
this.matches = this._convertMatches(s, W), this._renderMatches(this.matches);
}
}
$Z = new WeakMap();
var lW, UW, o0, Qt, jU, lF, dQ, pb, kn, Bb, yb;
const iZ = class iZ {
constructor({
pdfPage: U,
highlighter: l = null,
accessibilityManager: d = null,
enablePermissions: t = !1,
onAppend: Z = null
}) {
b(this, dQ);
b(this, lW, !1);
b(this, UW, null);
b(this, o0, !1);
b(this, Qt, null);
this.pdfPage = U, this.highlighter = l, this.accessibilityManager = d, R(this, lW, t === !0), R(this, UW, Z), this.div = document.createElement("div"), this.div.tabIndex = 0, this.div.className = "textLayer";
}
async render(U, l = null) {
var F, n, s, W, V;
if (c(this, o0) && c(this, Qt)) {
c(this, Qt).update({
viewport: U,
onBefore: this.hide.bind(this)
}), this.show();
return;
}
this.cancel(), R(this, Qt, new nJ({
textContentSource: this.pdfPage.streamTextContent(l || {
includeMarkedContent: !0,
disableNormalization: !0
}),
container: this.div,
viewport: U
}));
const {
textDivs: d,
textContentItemsStr: t
} = c(this, Qt);
(F = this.highlighter) == null || F.setTextMapping(d, t), (n = this.accessibilityManager) == null || n.setTextMapping(d), await c(this, Qt).render(), R(this, o0, !0);
const Z = document.createElement("div");
Z.className = "endOfContent", this.div.append(Z), h(this, dQ, pb).call(this, Z), (s = c(this, UW)) == null || s.call(this, this.div), (W = this.highlighter) == null || W.enable(), (V = this.accessibilityManager) == null || V.enable();
}
hide() {
var U;
!this.div.hidden && c(this, o0) && ((U = this.highlighter) == null || U.disable(), this.div.hidden = !0);
}
show() {
var U;
this.div.hidden && c(this, o0) && (this.div.hidden = !1, (U = this.highlighter) == null || U.enable());
}
cancel() {
var U, l, d, t;
(U = c(this, Qt)) == null || U.cancel(), R(this, Qt, null), (l = this.highlighter) == null || l.disable(), (d = this.accessibilityManager) == null || d.disable(), h(t = iZ, kn, Bb).call(t, this.div);
}
};
lW = new WeakMap(), UW = new WeakMap(), o0 = new WeakMap(), Qt = new WeakMap(), jU = new WeakMap(), lF = new WeakMap(), dQ = new WeakSet(), pb = function(U) {
var d;
const {
div: l
} = this;
l.addEventListener("mousedown", () => {
l.classList.add("selecting");
}), l.addEventListener("copy", (t) => {
if (!c(this, lW)) {
const Z = document.getSelection();
t.clipboardData.setData("text/plain", Vs(ZJ(Z.toString())));
}
UR(t);
}), c(iZ, jU).set(l, U), h(d = iZ, kn, yb).call(d);
}, kn = new WeakSet(), Bb = function(U) {
var l;
c(this, jU).delete(U), c(this, jU).size === 0 && ((l = c(this, lF)) == null || l.abort(), R(this, lF, null));
}, yb = function() {
if (c(this, lF))
return;
R(this, lF, new AbortController());
const {
signal: U
} = c(this, lF), l = (F, n) => {
n.append(F), F.style.width = "", F.style.height = "", n.classList.remove("selecting");
};
let d = !1;
document.addEventListener("pointerdown", () => {
d = !0;
}, {
signal: U
}), document.addEventListener("pointerup", () => {
d = !1, c(this, jU).forEach(l);
}, {
signal: U
}), window.addEventListener("blur", () => {
d = !1, c(this, jU).forEach(l);
}, {
signal: U
}), document.addEventListener("keyup", () => {
d || c(this, jU).forEach(l);
}, {
signal: U
});
var t, Z;
document.addEventListener("selectionchange", () => {
var N;
const F = document.getSelection();
if (F.rangeCount === 0) {
c(this, jU).forEach(l);
return;
}
const n = /* @__PURE__ */ new Set();
for (let e = 0; e < F.rangeCount; e++) {
const m = F.getRangeAt(e);
for (const J of c(this, jU).keys())
!n.has(J) && m.intersectsNode(J) && n.add(J);
}
for (const [e, m] of c(this, jU))
n.has(e) ? e.classList.add("selecting") : l(m, e);
if (t ?? (t = getComputedStyle(c(this, jU).values().next().value).getPropertyValue("-moz-user-select") === "none"), t)
return;
const s = F.getRangeAt(0), W = Z && (s.compareBoundaryPoints(Range.END_TO_END, Z) === 0 || s.compareBoundaryPoints(Range.START_TO_END, Z) === 0);
let V = W ? s.startContainer : s.endContainer;
V.nodeType === Node.TEXT_NODE && (V = V.parentNode);
const Q = (N = V.parentElement) == null ? void 0 : N.closest(".textLayer"), i = c(this, jU).get(Q);
i && (i.style.width = Q.style.width, i.style.height = Q.style.height, V.parentElement.insertBefore(i, W ? V : V.nextSibling)), Z = s.cloneRange();
}, {
signal: U
});
}, b(iZ, kn), b(iZ, jU, /* @__PURE__ */ new Map()), b(iZ, lF, null);
let kV = iZ;
class zb {
constructor({
pdfPage: U,
annotationStorage: l = null,
linkService: d,
xfaHtml: t = null
}) {
this.pdfPage = U, this.annotationStorage = l, this.linkService = d, this.xfaHtml = t, this.div = null, this._cancelled = !1;
}
async render(U, l = "display") {
if (l === "print") {
const Z = {
viewport: U.clone({
dontFlip: !0
}),
div: this.div,
xfaHtml: this.xfaHtml,
annotationStorage: this.annotationStorage,
linkService: this.linkService,
intent: l
};
return this.div = document.createElement("div"), Z.div = this.div, YQ.render(Z);
}
const d = await this.pdfPage.getXfa();
if (this._cancelled || !d)
return {
textDivs: []
};
const t = {
viewport: U.clone({
dontFlip: !0
}),
div: this.div,
xfaHtml: d,
annotationStorage: this.annotationStorage,
linkService: this.linkService,
intent: l
};
return this.div ? YQ.update(t) : (this.div = document.createElement("div"), t.div = this.div, YQ.render(t));
}
cancel() {
this._cancelled = !0;
}
hide() {
this.div && (this.div.hidden = !0);
}
}
const QG = {
annotationEditorUIManager: null,
annotationStorage: null,
downloadManager: null,
enableScripting: !1,
fieldObjectsPromise: null,
findController: null,
hasJSActionsPromise: null,
get linkService() {
return new rR();
}
}, iG = /* @__PURE__ */ new Map([["canvasWrapper", 0], ["textLayer", 1], ["annotationLayer", 2], ["annotationEditorLayer", 3], ["xfaLayer", 3]]);
var p0, UF, dW, B0, tW, dF, tF, Gn, ZW, FW, cW, y0, Sn, Tn, lZ, ZF, Fl, lc, MV, ns, eR, hR, bR, mR, MR, kb, Ib, JR, GR;
class Lb {
constructor(U) {
b(this, Fl);
b(this, p0, tZ.ENABLE_FORMS);
b(this, UF, null);
b(this, dW, !1);
b(this, B0, !1);
b(this, tW, !1);
b(this, dF, null);
b(this, tF, null);
b(this, Gn, null);
b(this, ZW, null);
b(this, FW, 1);
b(this, cW, 1);
b(this, y0, null);
b(this, Sn, Cl.INITIAL);
b(this, Tn, Nt.ENABLE);
b(this, lZ, {
directDrawing: !0,
initialOptionalContent: !0,
regularAnnotations: !0
});
b(this, ZF, [null, null, null, null]);
var Z, F;
const l = U.container, d = U.defaultViewport;
this.id = U.id, this.renderingId = "page" + this.id, R(this, dF, U.layerProperties || QG), this.pdfPage = null, this.pageLabel = null, this.rotation = 0, this.scale = U.scale || Ub, this.viewport = d, this.pdfPageRotate = d.rotation, this._optionalContentConfigPromise = U.optionalContentConfigPromise || null, R(this, Tn, U.textLayerMode ?? Nt.ENABLE), R(this, p0, U.annotationMode ?? tZ.ENABLE_FORMS), this.imageResourcesPath = U.imageResourcesPath || "", this.maxCanvasPixels = U.maxCanvasPixels ?? VR.get("maxCanvasPixels"), this.pageColors = U.pageColors || null, R(this, dW, U.enableHWA || !1), this.eventBus = U.eventBus, this.renderingQueue = U.renderingQueue, this.l10n = U.l10n, this.l10n || (this.l10n = new zn()), this.renderTask = null, this.resume = null, this._isStandalone = !((Z = this.renderingQueue) != null && Z.hasViewer()), this._container = l, this._annotationCanvasMap = null, this.annotationLayer = null, this.annotationEditorLayer = null, this.textLayer = null, this.xfaLayer = null, this.structTreeLayer = null, this.drawLayer = null;
const t = document.createElement("div");
if (t.className = "page", t.setAttribute("data-page-number", this.id), t.setAttribute("role", "region"), t.setAttribute("data-l10n-id", "pdfjs-page-landmark"), t.setAttribute("data-l10n-args", JSON.stringify({
page: this.id
})), this.div = t, h(this, Fl, MV).call(this), l == null || l.append(t), this._isStandalone) {
l == null || l.style.setProperty("--scale-factor", this.scale * ut.PDF_TO_CSS_UNITS), (F = this.pageColors) != null && F.background && (l == null || l.style.setProperty("--page-bg-color", this.pageColors.background));
const {
optionalContentConfigPromise: n
} = U;
n && n.then((s) => {
n === this._optionalContentConfigPromise && (c(this, lZ).initialOptionalContent = s.hasInitialVisibility);
}), U.l10n || this.l10n.translate(this.div);
}
}
get renderingState() {
return c(this, Sn);
}
set renderingState(U) {
if (U !== c(this, Sn))
switch (R(this, Sn, U), c(this, tF) && (clearTimeout(c(this, tF)), R(this, tF, null)), U) {
case Cl.PAUSED:
this.div.classList.remove("loading");
break;
case Cl.RUNNING:
this.div.classList.add("loadingIcon"), R(this, tF, setTimeout(() => {
this.div.classList.add("loading"), R(this, tF, null);
}, 0));
break;
case Cl.INITIAL:
case Cl.FINISHED:
this.div.classList.remove("loadingIcon", "loading");
break;
}
}
setPdfPage(U) {
var d, t, Z, F;
this._isStandalone && (((d = this.pageColors) == null ? void 0 : d.foreground) === "CanvasText" || ((t = this.pageColors) == null ? void 0 : t.background) === "Canvas") && ((Z = this._container) == null || Z.style.setProperty("--hcm-highlight-filter", U.filterFactory.addHighlightHCMFilter("highlight", "CanvasText", "Canvas", "HighlightText", "Highlight")), (F = this._container) == null || F.style.setProperty("--hcm-highlight-selected-filter", U.filterFactory.addHighlightHCMFilter("highlight_selected", "CanvasText", "Canvas", "HighlightText", "Highlight"))), this.pdfPage = U, this.pdfPageRotate = U.rotate;
const l = (this.rotation + this.pdfPageRotate) % 360;
this.viewport = U.getViewport({
scale: this.scale * ut.PDF_TO_CSS_UNITS,
rotation: l
}), h(this, Fl, MV).call(this), this.reset();
}
destroy() {
var U;
this.reset(), (U = this.pdfPage) == null || U.cleanup();
}
hasEditableAnnotations() {
var U;
return !!((U = this.annotationLayer) != null && U.hasEditableAnnotations());
}
get _textHighlighter() {
return zV(this, "_textHighlighter", new VG({
pageIndex: this.id - 1,
eventBus: this.eventBus,
findController: c(this, dF).findController
}));
}
reset({
keepAnnotationLayer: U = !1,
keepAnnotationEditorLayer: l = !1,
keepXfaLayer: d = !1,
keepTextLayer: t = !1,
keepCanvasWrapper: Z = !1
} = {}) {
var N, e, m, J, M;
this.cancelRendering({
keepAnnotationLayer: U,
keepAnnotationEditorLayer: l,
keepXfaLayer: d,
keepTextLayer: t
}), this.renderingState = Cl.INITIAL;
const F = this.div, n = F.childNodes, s = U && ((N = this.annotationLayer) == null ? void 0 : N.div) || null, W = l && ((e = this.annotationEditorLayer) == null ? void 0 : e.div) || null, V = d && ((m = this.xfaLayer) == null ? void 0 : m.div) || null, Q = t && ((J = this.textLayer) == null ? void 0 : J.div) || null, i = Z && c(this, UF) || null;
for (let G = n.length - 1; G >= 0; G--) {
const S = n[G];
switch (S) {
case s:
case W:
case V:
case Q:
case i:
continue;
}
S.remove();
const T = c(this, ZF).indexOf(S);
T >= 0 && (c(this, ZF)[T] = null);
}
F.removeAttribute("data-loaded"), s && this.annotationLayer.hide(), W && this.annotationEditorLayer.hide(), V && this.xfaLayer.hide(), Q && this.textLayer.hide(), (M = this.structTreeLayer) == null || M.hide(), !Z && c(this, UF) && (R(this, UF, null), h(this, Fl, JR).call(this));
}
toggleEditingMode(U) {
this.hasEditableAnnotations() && (R(this, tW, U), this.reset({
keepAnnotationLayer: !0,
keepAnnotationEditorLayer: !0,
keepXfaLayer: !0,
keepTextLayer: !0,
keepCanvasWrapper: !0
}));
}
update({
scale: U = 0,
rotation: l = null,
optionalContentConfigPromise: d = null,
drawingDelay: t = -1
}) {
var F;
this.scale = U || this.scale, typeof l == "number" && (this.rotation = l), d instanceof Promise && (this._optionalContentConfigPromise = d, d.then((n) => {
d === this._optionalContentConfigPromise && (c(this, lZ).initialOptionalContent = n.hasInitialVisibility);
})), c(this, lZ).directDrawing = !0;
const Z = (this.rotation + this.pdfPageRotate) % 360;
if (this.viewport = this.viewport.clone({
scale: this.scale * ut.PDF_TO_CSS_UNITS,
rotation: Z
}), h(this, Fl, MV).call(this), this._isStandalone && ((F = this._container) == null || F.style.setProperty("--scale-factor", this.viewport.scale)), this.canvas) {
let n = !1;
if (c(this, B0)) {
if (this.maxCanvasPixels === 0)
n = !0;
else if (this.maxCanvasPixels > 0) {
const {
width: W,
height: V
} = this.viewport, {
sx: Q,
sy: i
} = this.outputScale;
n = (Math.floor(W) * Q | 0) * (Math.floor(V) * i | 0) > this.maxCanvasPixels;
}
}
const s = t >= 0 && t < 1e3;
if (s || n) {
if (s && !n && this.renderingState !== Cl.FINISHED && (this.cancelRendering({
keepAnnotationLayer: !0,
keepAnnotationEditorLayer: !0,
keepXfaLayer: !0,
keepTextLayer: !0,
cancelExtraDelay: t
}), this.renderingState = Cl.FINISHED, c(this, lZ).directDrawing = !1), this.cssTransform({
redrawAnnotationLayer: !0,
redrawAnnotationEditorLayer: !0,
redrawXfaLayer: !0,
redrawTextLayer: !s,
hideTextLayer: s
}), s)
return;
this.eventBus.dispatch("pagerendered", {
source: this,
pageNumber: this.id,
cssTransform: !0,
timestamp: performance.now(),
error: c(this, y0)
});
return;
}
}
this.cssTransform({}), this.reset({
keepAnnotationLayer: !0,
keepAnnotationEditorLayer: !0,
keepXfaLayer: !0,
keepTextLayer: !0,
keepCanvasWrapper: !0
});
}
cancelRendering({
keepAnnotationLayer: U = !1,
keepAnnotationEditorLayer: l = !1,
keepXfaLayer: d = !1,
keepTextLayer: t = !1,
cancelExtraDelay: Z = 0
} = {}) {
var F;
this.renderTask && (this.renderTask.cancel(Z), this.renderTask = null), this.resume = null, this.textLayer && (!t || !this.textLayer.div) && (this.textLayer.cancel(), this.textLayer = null), this.annotationLayer && (!U || !this.annotationLayer.div) && (this.annotationLayer.cancel(), this.annotationLayer = null, this._annotationCanvasMap = null), this.structTreeLayer && !this.textLayer && (this.structTreeLayer = null), this.annotationEditorLayer && (!l || !this.annotationEditorLayer.div) && (this.drawLayer && (this.drawLayer.cancel(), this.drawLayer = null), this.annotationEditorLayer.cancel(), this.annotationEditorLayer = null), this.xfaLayer && (!d || !this.xfaLayer.div) && (this.xfaLayer.cancel(), this.xfaLayer = null, (F = this._textHighlighter) == null || F.disable());
}
cssTransform({
redrawAnnotationLayer: U = !1,
redrawAnnotationEditorLayer: l = !1,
redrawXfaLayer: d = !1,
redrawTextLayer: t = !1,
hideTextLayer: Z = !1
}) {
var s;
const {
canvas: F
} = this;
if (!F)
return;
const n = c(this, Gn);
if (this.viewport !== n) {
const W = (360 + this.viewport.rotation - n.rotation) % 360;
if (W === 90 || W === 270) {
const {
width: V,
height: Q
} = this.viewport, i = Q / V, N = V / Q;
F.style.transform = `rotate(${W}deg) scale(${i},${N})`;
} else
F.style.transform = W === 0 ? "" : `rotate(${W}deg)`;
}
U && this.annotationLayer && h(this, Fl, eR).call(this), l && this.annotationEditorLayer && (this.drawLayer && h(this, Fl, bR).call(this), h(this, Fl, hR).call(this)), d && this.xfaLayer && h(this, Fl, mR).call(this), this.textLayer && (Z ? (this.textLayer.hide(), (s = this.structTreeLayer) == null || s.hide()) : t && h(this, Fl, MR).call(this));
}
get width() {
return this.viewport.width;
}
get height() {
return this.viewport.height;
}
getPagePoint(U, l) {
return this.viewport.convertToPdfPoint(U, l);
}
async draw() {
this.renderingState !== Cl.INITIAL && (console.error("Must be in new state before drawing"), this.reset());
const {
div: U,
l10n: l,
pageColors: d,
pdfPage: t,
viewport: Z
} = this;
if (!t)
throw this.renderingState = Cl.FINISHED, new Error("pdfPage is not loaded");
this.renderingState = Cl.RUNNING;
let F = c(this, UF);
if (F || (F = R(this, UF, document.createElement("div")), F.classList.add("canvasWrapper"), h(this, Fl, lc).call(this, F, "canvasWrapper")), !this.textLayer && c(this, Tn) !== Nt.DISABLE && !t.isPureXfa && (this._accessibilityManager || (this._accessibilityManager = new RR()), this.textLayer = new kV({
pdfPage: t,
highlighter: this._textHighlighter,
accessibilityManager: this._accessibilityManager,
enablePermissions: c(this, Tn) === Nt.ENABLE_PERMISSIONS,
onAppend: (y) => {
this.l10n.pause(), h(this, Fl, lc).call(this, y, "textLayer"), this.l10n.resume();
}
})), !this.annotationLayer && c(this, p0) !== tZ.DISABLE) {
const {
annotationStorage: y,
annotationEditorUIManager: r,
downloadManager: D,
enableScripting: E,
fieldObjectsPromise: P,
hasJSActionsPromise: k,
linkService: I
} = c(this, dF);
this._annotationCanvasMap || (this._annotationCanvasMap = /* @__PURE__ */ new Map()), this.annotationLayer = new Qb({
pdfPage: t,
annotationStorage: y,
imageResourcesPath: this.imageResourcesPath,
renderForms: c(this, p0) === tZ.ENABLE_FORMS,
linkService: I,
downloadManager: D,
enableScripting: E,
hasJSActionsPromise: k,
fieldObjectsPromise: P,
annotationCanvasMap: this._annotationCanvasMap,
accessibilityManager: this._accessibilityManager,
annotationEditorUIManager: r,
onAppend: (q) => {
h(this, Fl, lc).call(this, q, "annotationLayer");
}
});
}
const n = (y) => {
if (e == null || e(!1), this.renderingQueue && !this.renderingQueue.isHighestPriority(this)) {
this.renderingState = Cl.PAUSED, this.resume = () => {
this.renderingState = Cl.RUNNING, y();
};
return;
}
y();
}, {
width: s,
height: W
} = Z, V = document.createElement("canvas");
V.setAttribute("role", "presentation");
const Q = !!(d != null && d.background && (d != null && d.foreground)), i = this.canvas, N = !i && !Q;
this.canvas = V, R(this, Gn, Z);
let e = (y) => {
if (N) {
F.prepend(V), e = null;
return;
}
y && (i ? (i.replaceWith(V), i.width = i.height = 0) : F.prepend(V), e = null);
};
const m = V.getContext("2d", {
alpha: !1,
willReadFrequently: !c(this, dW)
}), J = this.outputScale = new FJ();
if (this.maxCanvasPixels === 0) {
const y = 1 / this.scale;
J.sx *= y, J.sy *= y, R(this, B0, !0);
} else if (this.maxCanvasPixels > 0) {
const y = s * W, r = Math.sqrt(this.maxCanvasPixels / y);
J.sx > r || J.sy > r ? (J.sx = r, J.sy = r, R(this, B0, !0)) : R(this, B0, !1);
}
const M = JN(J.sx), G = JN(J.sy), S = V.width = BW(yW(s * J.sx), M[0]), T = V.height = BW(yW(W * J.sy), G[0]), u = BW(yW(s), M[1]), Y = BW(yW(W), G[1]);
J.sx = S / u, J.sy = T / Y, c(this, FW) !== M[1] && (U.style.setProperty("--scale-round-x", `${M[1]}px`), R(this, FW, M[1])), c(this, cW) !== G[1] && (U.style.setProperty("--scale-round-y", `${G[1]}px`), R(this, cW, G[1]));
const o = J.scaled ? [J.sx, 0, 0, J.sy, 0, 0] : null, B = {
canvasContext: m,
transform: o,
viewport: Z,
annotationMode: c(this, p0),
optionalContentConfigPromise: this._optionalContentConfigPromise,
annotationCanvasMap: this._annotationCanvasMap,
pageColors: d,
isEditing: c(this, tW)
}, X = this.renderTask = t.render(B);
X.onContinue = n;
const p = X.promise.then(async () => {
var r;
e == null || e(!0), await h(this, Fl, GR).call(this, X), this.structTreeLayer || (this.structTreeLayer = new Yb(t, Z.rawDims)), h(this, Fl, MR).call(this), this.annotationLayer && await h(this, Fl, eR).call(this);
const {
annotationEditorUIManager: y
} = c(this, dF);
y && (this.drawLayer || (this.drawLayer = new aG({
pageIndex: this.id
})), await h(this, Fl, bR).call(this), this.drawLayer.setParent(F), this.annotationEditorLayer || (this.annotationEditorLayer = new sG({
uiManager: y,
pdfPage: t,
l10n: l,
structTreeLayer: this.structTreeLayer,
accessibilityManager: this._accessibilityManager,
annotationLayer: (r = this.annotationLayer) == null ? void 0 : r.annotationLayer,
textLayer: this.textLayer,
drawLayer: this.drawLayer.getDrawLayer(),
onAppend: (D) => {
h(this, Fl, lc).call(this, D, "annotationEditorLayer");
}
})), h(this, Fl, hR).call(this));
}, (y) => (y instanceof lR ? (i == null || i.remove(), h(this, Fl, JR).call(this)) : e == null || e(!0), h(this, Fl, GR).call(this, X, y)));
if (t.isPureXfa) {
if (!this.xfaLayer) {
const {
annotationStorage: y,
linkService: r
} = c(this, dF);
this.xfaLayer = new zb({
pdfPage: t,
annotationStorage: y,
linkService: r
});
}
h(this, Fl, mR).call(this);
}
return U.setAttribute("data-loaded", !0), this.eventBus.dispatch("pagerender", {
source: this,
pageNumber: this.id
}), p;
}
setPageLabel(U) {
this.pageLabel = typeof U == "string" ? U : null, this.div.setAttribute("data-l10n-args", JSON.stringify({
page: this.pageLabel ?? this.id
})), this.pageLabel !== null ? this.div.setAttribute("data-page-label", this.pageLabel) : this.div.removeAttribute("data-page-label");
}
get thumbnailCanvas() {
const {
directDrawing: U,
initialOptionalContent: l,
regularAnnotations: d
} = c(this, lZ);
return U && l && d ? this.canvas : null;
}
}
p0 = new WeakMap(), UF = new WeakMap(), dW = new WeakMap(), B0 = new WeakMap(), tW = new WeakMap(), dF = new WeakMap(), tF = new WeakMap(), Gn = new WeakMap(), ZW = new WeakMap(), FW = new WeakMap(), cW = new WeakMap(), y0 = new WeakMap(), Sn = new WeakMap(), Tn = new WeakMap(), lZ = new WeakMap(), ZF = new WeakMap(), Fl = new WeakSet(), lc = function(U, l) {
const d = iG.get(l), t = c(this, ZF)[d];
if (c(this, ZF)[d] = U, t) {
t.replaceWith(U);
return;
}
for (let Z = d - 1; Z >= 0; Z--) {
const F = c(this, ZF)[Z];
if (F) {
F.after(U);
return;
}
}
this.div.prepend(U);
}, MV = function() {
const {
viewport: U
} = this;
if (this.pdfPage) {
if (c(this, ZW) === U.rotation)
return;
R(this, ZW, U.rotation);
}
cJ(this.div, U, !0, !1);
}, ns = function(U, l) {
this.eventBus.dispatch(U, {
source: this,
pageNumber: this.id,
error: l
});
}, eR = async function() {
let U = null;
try {
await this.annotationLayer.render(this.viewport, {
structTreeLayer: this.structTreeLayer
}, "display");
} catch (l) {
console.error("#renderAnnotationLayer:", l), U = l;
} finally {
h(this, Fl, ns).call(this, "annotationlayerrendered", U);
}
}, hR = async function() {
let U = null;
try {
await this.annotationEditorLayer.render(this.viewport, "display");
} catch (l) {
console.error("#renderAnnotationEditorLayer:", l), U = l;
} finally {
h(this, Fl, ns).call(this, "annotationeditorlayerrendered", U);
}
}, bR = async function() {
try {
await this.drawLayer.render("display");
} catch (U) {
console.error("#renderDrawLayer:", U);
}
}, mR = async function() {
var l;
let U = null;
try {
const d = await this.xfaLayer.render(this.viewport, "display");
d != null && d.textDivs && this._textHighlighter && h(this, Fl, Ib).call(this, d.textDivs);
} catch (d) {
console.error("#renderXfaLayer:", d), U = d;
} finally {
(l = this.xfaLayer) != null && l.div && (this.l10n.pause(), h(this, Fl, lc).call(this, this.xfaLayer.div, "xfaLayer"), this.l10n.resume()), h(this, Fl, ns).call(this, "xfalayerrendered", U);
}
}, MR = async function() {
if (!this.textLayer)
return;
let U = null;
try {
await this.textLayer.render(this.viewport);
} catch (l) {
if (l instanceof AM)
return;
console.error("#renderTextLayer:", l), U = l;
}
h(this, Fl, ns).call(this, "textlayerrendered", U), h(this, Fl, kb).call(this);
}, kb = async function() {
var l, d, t;
if (!this.textLayer)
return;
const U = await ((l = this.structTreeLayer) == null ? void 0 : l.render());
U && (this.l10n.pause(), (d = this.structTreeLayer) == null || d.addElementsToTextLayer(), this.canvas && U.parentNode !== this.canvas && this.canvas.append(U), this.l10n.resume()), (t = this.structTreeLayer) == null || t.show();
}, Ib = async function(U) {
const l = await this.pdfPage.getTextContent(), d = [];
for (const t of l.items)
d.push(t.str);
this._textHighlighter.setTextMapping(U, d), this._textHighlighter.enable();
}, JR = function() {
const {
canvas: U
} = this;
U && (U.remove(), U.width = U.height = 0, this.canvas = null, R(this, Gn, null));
}, GR = async function(U, l = null) {
if (U === this.renderTask && (this.renderTask = null), l instanceof lR) {
R(this, y0, null);
return;
}
if (R(this, y0, l), this.renderingState = Cl.FINISHED, c(this, lZ).regularAnnotations = !U.separateAnnots, this.eventBus.dispatch("pagerendered", {
source: this,
pageNumber: this.id,
cssTransform: !1,
timestamp: performance.now(),
error: c(this, y0)
}), l)
throw l;
};
async function RG(a) {
const U = "", l = U.split("#", 1)[0];
let {
info: d,
metadata: t,
contentDispositionFilename: Z,
contentLength: F
} = await a.getMetadata();
if (!F) {
const {
length: n
} = await a.getDownloadInfo();
F = n;
}
return {
...d,
baseURL: l,
filesize: F,
filename: Z || dJ(U),
metadata: t == null ? void 0 : t.getRaw(),
authors: t == null ? void 0 : t.get("dc:creator"),
numPages: a.numPages,
URL: U
};
}
class NG {
constructor(U) {
this._ready = new Promise((l, d) => {
import(
/*webpackIgnore: true*/
U
).then((Z) => {
l(Z.QuickJSSandbox());
}).catch(d);
});
}
async createSandbox(U) {
(await this._ready).create(U);
}
async dispatchEventInSandbox(U) {
const l = await this._ready;
setTimeout(() => l.dispatchEvent(U), 0);
}
async destroySandbox() {
(await this._ready).nukeSandbox();
}
}
var it, z0, nW, L0, k0, sW, zU, UZ, Xn, _l, md, sU, Db, JV, SR, Eb, ss;
class eG {
constructor({
eventBus: U,
externalServices: l = null,
docProperties: d = null
}) {
b(this, sU);
b(this, it, null);
b(this, z0, null);
b(this, nW, null);
b(this, L0, null);
b(this, k0, null);
b(this, sW, null);
b(this, zU, null);
b(this, UZ, null);
b(this, Xn, !1);
b(this, _l, null);
b(this, md, null);
R(this, k0, U), R(this, sW, l), R(this, nW, d);
}
setViewer(U) {
R(this, UZ, U);
}
async setDocument(U) {
var n;
if (c(this, zU) && await h(this, sU, ss).call(this), R(this, zU, U), !U)
return;
const [l, d, t] = await Promise.all([U.getFieldObjects(), U.getCalculationOrderIds(), U.getJSActions()]);
if (!l && !t) {
await h(this, sU, ss).call(this);
return;
}
if (U !== c(this, zU))
return;
try {
R(this, _l, h(this, sU, Eb).call(this));
} catch (s) {
console.error("setDocument:", s), await h(this, sU, ss).call(this);
return;
}
const Z = c(this, k0);
R(this, L0, new AbortController());
const {
signal: F
} = c(this, L0);
Z._on("updatefromsandbox", (s) => {
(s == null ? void 0 : s.source) === window && h(this, sU, Db).call(this, s.detail);
}, {
signal: F
}), Z._on("dispatcheventinsandbox", (s) => {
var W;
(W = c(this, _l)) == null || W.dispatchEventInSandbox(s.detail);
}, {
signal: F
}), Z._on("pagechanging", ({
pageNumber: s,
previous: W
}) => {
s !== W && (h(this, sU, SR).call(this, W), h(this, sU, JV).call(this, s));
}, {
signal: F
}), Z._on("pagerendered", ({
pageNumber: s
}) => {
this._pageOpenPending.has(s) && s === c(this, UZ).currentPageNumber && h(this, sU, JV).call(this, s);
}, {
signal: F
}), Z._on("pagesdestroy", async () => {
var s, W;
await h(this, sU, SR).call(this, c(this, UZ).currentPageNumber), await ((s = c(this, _l)) == null ? void 0 : s.dispatchEventInSandbox({
id: "doc",
name: "WillClose"
})), (W = c(this, it)) == null || W.resolve();
}, {
signal: F
});
try {
const s = await c(this, nW).call(this, U);
if (U !== c(this, zU))
return;
await c(this, _l).createSandbox({
objects: l,
calculationOrder: d,
appInfo: {
platform: navigator.platform,
language: navigator.language
},
docInfo: {
...s,
actions: t
}
}), Z.dispatch("sandboxcreated", {
source: this
});
} catch (s) {
console.error("setDocument:", s), await h(this, sU, ss).call(this);
return;
}
await ((n = c(this, _l)) == null ? void 0 : n.dispatchEventInSandbox({
id: "doc",
name: "Open"
})), await h(this, sU, JV).call(this, c(this, UZ).currentPageNumber, !0), Promise.resolve().then(() => {
U === c(this, zU) && R(this, Xn, !0);
});
}
async dispatchWillSave() {
var U;
return (U = c(this, _l)) == null ? void 0 : U.dispatchEventInSandbox({
id: "doc",
name: "WillSave"
});
}
async dispatchDidSave() {
var U;
return (U = c(this, _l)) == null ? void 0 : U.dispatchEventInSandbox({
id: "doc",
name: "DidSave"
});
}
async dispatchWillPrint() {
var U;
if (c(this, _l)) {
await ((U = c(this, md)) == null ? void 0 : U.promise), R(this, md, Promise.withResolvers());
try {
await c(this, _l).dispatchEventInSandbox({
id: "doc",
name: "WillPrint"
});
} catch (l) {
throw c(this, md).resolve(), R(this, md, null), l;
}
await c(this, md).promise;
}
}
async dispatchDidPrint() {
var U;
return (U = c(this, _l)) == null ? void 0 : U.dispatchEventInSandbox({
id: "doc",
name: "DidPrint"
});
}
get destroyPromise() {
var U;
return ((U = c(this, z0)) == null ? void 0 : U.promise) || null;
}
get ready() {
return c(this, Xn);
}
get _pageOpenPending() {
return zV(this, "_pageOpenPending", /* @__PURE__ */ new Set());
}
get _visitedPages() {
return zV(this, "_visitedPages", /* @__PURE__ */ new Map());
}
}
it = new WeakMap(), z0 = new WeakMap(), nW = new WeakMap(), L0 = new WeakMap(), k0 = new WeakMap(), sW = new WeakMap(), zU = new WeakMap(), UZ = new WeakMap(), Xn = new WeakMap(), _l = new WeakMap(), md = new WeakMap(), sU = new WeakSet(), Db = async function(U) {
var W, V;
const l = c(this, UZ), d = l.isInPresentationMode || l.isChangingPresentationMode, {
id: t,
siblings: Z,
command: F,
value: n
} = U;
if (!t) {
switch (F) {
case "clear":
console.clear();
break;
case "error":
console.error(n);
break;
case "layout":
if (!d) {
const Q = uM(n);
l.spreadMode = Q.spreadMode;
}
break;
case "page-num":
l.currentPageNumber = n + 1;
break;
case "print":
await l.pagesPromise, c(this, k0).dispatch("print", {
source: this
});
break;
case "println":
console.log(n);
break;
case "zoom":
d || (l.currentScaleValue = n);
break;
case "SaveAs":
c(this, k0).dispatch("download", {
source: this
});
break;
case "FirstPage":
l.currentPageNumber = 1;
break;
case "LastPage":
l.currentPageNumber = l.pagesCount;
break;
case "NextPage":
l.nextPage();
break;
case "PrevPage":
l.previousPage();
break;
case "ZoomViewIn":
d || l.increaseScale();
break;
case "ZoomViewOut":
d || l.decreaseScale();
break;
case "WillPrintFinished":
(W = c(this, md)) == null || W.resolve(), R(this, md, null);
break;
}
return;
}
if (d && U.focus)
return;
delete U.id, delete U.siblings;
const s = Z ? [t, ...Z] : [t];
for (const Q of s) {
const i = document.querySelector(`[data-element-id="${Q}"]`);
i ? i.dispatchEvent(new CustomEvent("updatefromsandbox", {
detail: U
})) : (V = c(this, zU)) == null || V.annotationStorage.setValue(Q, U);
}
}, JV = async function(U, l = !1) {
const d = c(this, zU), t = this._visitedPages;
if (l && R(this, it, Promise.withResolvers()), !c(this, it))
return;
const Z = c(this, UZ).getPageView(U - 1);
if ((Z == null ? void 0 : Z.renderingState) !== Cl.FINISHED) {
this._pageOpenPending.add(U);
return;
}
this._pageOpenPending.delete(U);
const F = (async () => {
var s, W;
const n = await (t.has(U) ? null : (s = Z.pdfPage) == null ? void 0 : s.getJSActions());
d === c(this, zU) && await ((W = c(this, _l)) == null ? void 0 : W.dispatchEventInSandbox({
id: "page",
name: "PageOpen",
pageNumber: U,
actions: n
}));
})();
t.set(U, F);
}, SR = async function(U) {
var Z;
const l = c(this, zU), d = this._visitedPages;
if (!c(this, it) || this._pageOpenPending.has(U))
return;
const t = d.get(U);
t && (d.set(U, null), await t, l === c(this, zU) && await ((Z = c(this, _l)) == null ? void 0 : Z.dispatchEventInSandbox({
id: "page",
name: "PageClose",
pageNumber: U
})));
}, Eb = function() {
if (R(this, z0, Promise.withResolvers()), c(this, _l))
throw new Error("#initScripting: Scripting already exists.");
return c(this, sW).createScripting();
}, ss = async function() {
var U, l, d, t;
if (!c(this, _l)) {
R(this, zU, null), (U = c(this, z0)) == null || U.resolve();
return;
}
c(this, it) && (await Promise.race([c(this, it).promise, new Promise((Z) => {
setTimeout(Z, 1e3);
})]).catch(() => {
}), R(this, it, null)), R(this, zU, null);
try {
await c(this, _l).destroySandbox();
} catch {
}
(l = c(this, md)) == null || l.reject(new Error("Scripting destroyed.")), R(this, md, null), (d = c(this, L0)) == null || d.abort(), R(this, L0, null), this._pageOpenPending.clear(), this._visitedPages.clear(), R(this, _l, null), R(this, Xn, !1), (t = c(this, z0)) == null || t.resolve();
};
class hG extends eG {
constructor(U) {
U.externalServices || window.addEventListener("updatefromsandbox", (l) => {
U.eventBus.dispatch("updatefromsandbox", {
source: window,
detail: l.detail
});
}), U.externalServices || (U.externalServices = {
createScripting: () => new NG(U.sandboxBundleSrc)
}), U.docProperties || (U.docProperties = (l) => RG(l)), super(U);
}
}
const bG = 3e4;
class mG {
constructor() {
this.pdfViewer = null, this.pdfThumbnailViewer = null, this.onIdle = null, this.highestPriorityPage = null, this.idleTimeout = null, this.printing = !1, this.isThumbnailViewEnabled = !1, Object.defineProperty(this, "hasViewer", {
value: () => !!this.pdfViewer
});
}
setViewer(U) {
this.pdfViewer = U;
}
setThumbnailViewer(U) {
this.pdfThumbnailViewer = U;
}
isHighestPriority(U) {
return this.highestPriorityPage === U.renderingId;
}
renderHighestPriority(U) {
var l;
this.idleTimeout && (clearTimeout(this.idleTimeout), this.idleTimeout = null), !this.pdfViewer.forceRendering(U) && (this.isThumbnailViewEnabled && ((l = this.pdfThumbnailViewer) != null && l.forceRendering()) || this.printing || this.onIdle && (this.idleTimeout = setTimeout(this.onIdle.bind(this), bG)));
}
getHighestPriority(U, l, d, t = !1) {
const Z = U.views, F = Z.length;
if (F === 0)
return null;
for (let Q = 0; Q < F; Q++) {
const i = Z[Q].view;
if (!this.isViewFinished(i))
return i;
}
const n = U.first.id, s = U.last.id;
if (s - n + 1 > F) {
const Q = U.ids;
for (let i = 1, N = s - n; i < N; i++) {
const e = d ? n + i : s - i;
if (Q.has(e))
continue;
const m = l[e - 1];
if (!this.isViewFinished(m))
return m;
}
}
let W = d ? s : n - 2, V = l[W];
return V && !this.isViewFinished(V) || t && (W += d ? 1 : -1, V = l[W], V && !this.isViewFinished(V)) ? V : null;
}
isViewFinished(U) {
return U.renderingState === Cl.FINISHED;
}
renderView(U) {
switch (U.renderingState) {
case Cl.FINISHED:
return !1;
case Cl.PAUSED:
this.highestPriorityPage = U.renderingId, U.resume();
break;
case Cl.RUNNING:
this.highestPriorityPage = U.renderingId;
break;
case Cl.INITIAL:
this.highestPriorityPage = U.renderingId, U.draw().finally(() => {
this.renderHighestPriority();
}).catch((l) => {
l instanceof lR || console.error("renderView:", l);
});
break;
}
return !0;
}
}
const PN = 10, IW = {
FORCE_SCROLL_MODE_PAGE: 1e4,
FORCE_LAZY_PAGE_INIT: 5e3,
PAUSE_EAGER_PAGE_INIT: 250
};
function fN(a) {
return Object.values(KU).includes(a) && a !== KU.DISABLE;
}
var dZ, I0, aW, TR;
class MG {
constructor(U) {
b(this, aW);
b(this, dZ, /* @__PURE__ */ new Set());
b(this, I0, 0);
R(this, I0, U);
}
push(U) {
const l = c(this, dZ);
l.has(U) && l.delete(U), l.add(U), l.size > c(this, I0) && h(this, aW, TR).call(this);
}
resize(U, l = null) {
R(this, I0, U);
const d = c(this, dZ);
if (l) {
const t = d.size;
let Z = 1;
for (const F of d)
if (l.has(F.id) && (d.delete(F), d.add(F)), ++Z > t)
break;
}
for (; d.size > c(this, I0); )
h(this, aW, TR).call(this);
}
has(U) {
return c(this, dZ).has(U);
}
[Symbol.iterator]() {
return c(this, dZ).keys();
}
}
dZ = new WeakMap(), I0 = new WeakMap(), aW = new WeakSet(), TR = function() {
const U = c(this, dZ).keys().next().value;
U == null || U.destroy(), c(this, dZ).delete(U);
};
var FF, WW, VW, Rt, Zd, D0, QW, iW, RW, NW, eW, hW, bW, cF, E0, r0, C0, un, nF, Yn, mW, on, w0, sF, MW, pn, _, Cb, wb, xb, as, GV, jb, XR, Ob, QZ, uR, gb, Kb, Hb, YR, vb, SV;
class rb {
constructor(U) {
b(this, _);
b(this, FF, null);
b(this, WW, null);
b(this, VW, null);
b(this, Rt, KU.NONE);
b(this, Zd, null);
b(this, D0, tZ.ENABLE_FORMS);
b(this, QW, null);
b(this, iW, null);
b(this, RW, !1);
b(this, NW, !1);
b(this, eW, !1);
b(this, hW, !1);
b(this, bW, !1);
b(this, cF, null);
b(this, E0, null);
b(this, r0, null);
b(this, C0, null);
b(this, un, !1);
b(this, nF, null);
b(this, Yn, !1);
b(this, mW, 0);
b(this, on, new ResizeObserver(h(this, _, vb).bind(this)));
b(this, w0, null);
b(this, sF, null);
b(this, MW, !0);
b(this, pn, Nt.ENABLE);
var t, Z;
const l = "4.10.38";
if (BN !== l)
throw new Error(`The API version "${BN}" does not match the Viewer version "${l}".`);
if (this.container = U.container, this.viewer = U.viewer || U.container.firstElementChild, ((t = this.container) == null ? void 0 : t.tagName) !== "DIV" || ((Z = this.viewer) == null ? void 0 : Z.tagName) !== "DIV")
throw new Error("Invalid `container` and/or `viewer` option.");
if (this.container.offsetParent && getComputedStyle(this.container).position !== "absolute")
throw new Error("The `container` must be absolutely positioned.");
c(this, on).observe(this.container), this.eventBus = U.eventBus, this.linkService = U.linkService || new rR(), this.downloadManager = U.downloadManager || null, this.findController = U.findController || null, R(this, WW, U.altTextManager || null), R(this, iW, U.editorUndoBar || null), this.findController && (this.findController.onIsPageVisible = (F) => this._getVisiblePages().ids.has(F)), this._scriptingManager = U.scriptingManager || null, R(this, pn, U.textLayerMode ?? Nt.ENABLE), R(this, D0, U.annotationMode ?? tZ.ENABLE_FORMS), R(this, Rt, U.annotationEditorMode ?? KU.NONE), R(this, VW, U.annotationEditorHighlightColors || null), R(this, NW, U.enableHighlightFloatingButton === !0), R(this, hW, U.enableUpdatedAddImage === !0), R(this, bW, U.enableNewAltTextWhenAddingImage === !0), this.imageResourcesPath = U.imageResourcesPath || "", this.enablePrintAutoRotate = U.enablePrintAutoRotate || !1, this.removePageBorders = U.removePageBorders || !1, this.maxCanvasPixels = U.maxCanvasPixels, this.l10n = U.l10n, this.l10n || (this.l10n = new zn()), R(this, eW, U.enablePermissions || !1), this.pageColors = U.pageColors || null, R(this, E0, U.mlManager || null), R(this, RW, U.enableHWA || !1), R(this, MW, U.supportsPinchToZoom !== !1), this.defaultRenderingQueue = !U.renderingQueue, this.defaultRenderingQueue ? (this.renderingQueue = new mG(), this.renderingQueue.setViewer(this)) : this.renderingQueue = U.renderingQueue;
const {
abortSignal: d
} = U;
d == null || d.addEventListener("abort", () => {
c(this, on).disconnect(), R(this, on, null);
}, {
once: !0
}), this.scroll = bM(this.container, this._scrollUpdate.bind(this), d), this.presentationModeState = Zc.UNKNOWN, this._resetView(), this.removePageBorders && this.viewer.classList.add("removePageBorders"), h(this, _, YR).call(this), this.eventBus._on("thumbnailrendered", ({
pageNumber: F,
pdfPage: n
}) => {
const s = this._pages[F - 1];
c(this, FF).has(s) || n == null || n.cleanup();
}), U.l10n || this.l10n.translate(this.container);
}
get pagesCount() {
return this._pages.length;
}
getPageView(U) {
return this._pages[U];
}
getCachedPageViews() {
return new Set(c(this, FF));
}
get pageViewsReady() {
return this._pages.every((U) => U == null ? void 0 : U.pdfPage);
}
get renderForms() {
return c(this, D0) === tZ.ENABLE_FORMS;
}
get enableScripting() {
return !!this._scriptingManager;
}
get currentPageNumber() {
return this._currentPageNumber;
}
set currentPageNumber(U) {
if (!Number.isInteger(U))
throw new Error("Invalid page number.");
this.pdfDocument && (this._setCurrentPageNumber(U, !0) || console.error(`currentPageNumber: "${U}" is not a valid page.`));
}
_setCurrentPageNumber(U, l = !1) {
var t;
if (this._currentPageNumber === U)
return l && h(this, _, uR).call(this), !0;
if (!(0 < U && U <= this.pagesCount))
return !1;
const d = this._currentPageNumber;
return this._currentPageNumber = U, this.eventBus.dispatch("pagechanging", {
source: this,
pageNumber: U,
pageLabel: ((t = this._pageLabels) == null ? void 0 : t[U - 1]) ?? null,
previous: d
}), l && h(this, _, uR).call(this), !0;
}
get currentPageLabel() {
var U;
return ((U = this._pageLabels) == null ? void 0 : U[this._currentPageNumber - 1]) ?? null;
}
set currentPageLabel(U) {
if (!this.pdfDocument)
return;
let l = U | 0;
if (this._pageLabels) {
const d = this._pageLabels.indexOf(U);
d >= 0 && (l = d + 1);
}
this._setCurrentPageNumber(l, !0) || console.error(`currentPageLabel: "${U}" is not a valid page.`);
}
get currentScale() {
return this._currentScale !== SQ ? this._currentScale : Ub;
}
set currentScale(U) {
if (isNaN(U))
throw new Error("Invalid numeric scale.");
this.pdfDocument && h(this, _, QZ).call(this, U, {
noScroll: !1
});
}
get currentScaleValue() {
return this._currentScaleValue;
}
set currentScaleValue(U) {
this.pdfDocument && h(this, _, QZ).call(this, U, {
noScroll: !1
});
}
get pagesRotation() {
return this._pagesRotation;
}
set pagesRotation(U) {
if (!tb(U))
throw new Error("Invalid pages rotation angle.");
if (!this.pdfDocument || (U %= 360, U < 0 && (U += 360), this._pagesRotation === U))
return;
this._pagesRotation = U;
const l = this._currentPageNumber;
this.refresh(!0, {
rotation: U
}), this._currentScaleValue && h(this, _, QZ).call(this, this._currentScaleValue, {
noScroll: !0
}), this.eventBus.dispatch("rotationchanging", {
source: this,
pagesRotation: U,
pageNumber: l
}), this.defaultRenderingQueue && this.update();
}
get firstPagePromise() {
return this.pdfDocument ? this._firstPageCapability.promise : null;
}
get onePageRendered() {
return this.pdfDocument ? this._onePageRenderedCapability.promise : null;
}
get pagesPromise() {
return this.pdfDocument ? this._pagesCapability.promise : null;
}
get _layerProperties() {
const U = this;
return zV(this, "_layerProperties", {
get annotationEditorUIManager() {
return c(U, Zd);
},
get annotationStorage() {
var l;
return (l = U.pdfDocument) == null ? void 0 : l.annotationStorage;
},
get downloadManager() {
return U.downloadManager;
},
get enableScripting() {
return !!U._scriptingManager;
},
get fieldObjectsPromise() {
var l;
return (l = U.pdfDocument) == null ? void 0 : l.getFieldObjects();
},
get findController() {
return U.findController;
},
get hasJSActionsPromise() {
var l;
return (l = U.pdfDocument) == null ? void 0 : l.hasJSActions();
},
get linkService() {
return U.linkService;
}
});
}
async getAllText() {
const U = [], l = [];
for (let d = 1, t = this.pdfDocument.numPages; d <= t; ++d) {
if (c(this, Yn))
return null;
l.length = 0;
const Z = await this.pdfDocument.getPage(d), {
items: F
} = await Z.getTextContent();
for (const n of F)
n.str && l.push(n.str), n.hasEOL && l.push(`
`);
U.push(Vs(l.join("")));
}
return U.join(`
`);
}
setDocument(U) {
var i, N, e;
if (this.pdfDocument && (this.eventBus.dispatch("pagesdestroy", {
source: this
}), this._cancelRendering(), this._resetView(), (i = this.findController) == null || i.setDocument(null), (N = this._scriptingManager) == null || N.setDocument(null), (e = c(this, Zd)) == null || e.destroy(), R(this, Zd, null)), this.pdfDocument = U, !U)
return;
const l = U.numPages, d = U.getPage(1), t = U.getOptionalContentConfig({
intent: "display"
}), Z = c(this, eW) ? U.getPermissions() : Promise.resolve(), {
eventBus: F,
pageColors: n,
viewer: s
} = this;
R(this, cF, new AbortController());
const {
signal: W
} = c(this, cF);
if (l > IW.FORCE_SCROLL_MODE_PAGE) {
console.warn("Forcing PAGE-scrolling for performance reasons, given the length of the document.");
const m = this._scrollMode = Ql.PAGE;
F.dispatch("scrollmodechanged", {
source: this,
mode: m
});
}
this._pagesCapability.promise.then(() => {
F.dispatch("pagesloaded", {
source: this,
pagesCount: l
});
}, () => {
});
const V = (m) => {
const J = this._pages[m.pageNumber - 1];
J && c(this, FF).push(J);
};
F._on("pagerender", V, {
signal: W
});
const Q = (m) => {
m.cssTransform || (this._onePageRenderedCapability.resolve({
timestamp: m.timestamp
}), F._off("pagerendered", Q));
};
F._on("pagerendered", Q, {
signal: W
}), Promise.all([d, Z]).then(([m, J]) => {
var o, B;
if (U !== this.pdfDocument)
return;
this._firstPageCapability.resolve(m), this._optionalContentConfigPromise = t;
const {
annotationEditorMode: M,
annotationMode: G,
textLayerMode: S
} = h(this, _, Cb).call(this, J);
if (S !== Nt.DISABLE) {
const X = R(this, nF, document.createElement("div"));
X.id = "hiddenCopyElement", s.before(X);
}
if (typeof AbortSignal.any == "function" && M !== KU.DISABLE) {
const X = M;
U.isPureXfa ? console.warn("Warning: XFA-editing is not implemented.") : fN(X) ? (R(this, Zd, new qM(this.container, s, c(this, WW), F, U, n, c(this, VW), c(this, NW), c(this, hW), c(this, bW), c(this, E0), c(this, iW), c(this, MW))), F.dispatch("annotationeditoruimanager", {
source: this,
uiManager: c(this, Zd)
}), X !== KU.NONE && (X === KU.STAMP && ((o = c(this, E0)) == null || o.loadModel("altText")), c(this, Zd).updateMode(X))) : console.error(`Invalid AnnotationEditor mode: ${X}`);
}
const T = this._scrollMode === Ql.PAGE ? null : s, u = this.currentScale, Y = m.getViewport({
scale: u * ut.PDF_TO_CSS_UNITS
});
s.style.setProperty("--scale-factor", Y.scale), n != null && n.background && s.style.setProperty("--page-bg-color", n.background), ((n == null ? void 0 : n.foreground) === "CanvasText" || (n == null ? void 0 : n.background) === "Canvas") && (s.style.setProperty("--hcm-highlight-filter", U.filterFactory.addHighlightHCMFilter("highlight", "CanvasText", "Canvas", "HighlightText", "Highlight")), s.style.setProperty("--hcm-highlight-selected-filter", U.filterFactory.addHighlightHCMFilter("highlight_selected", "CanvasText", "Canvas", "HighlightText", "ButtonText")));
for (let X = 1; X <= l; ++X) {
const p = new Lb({
container: T,
eventBus: F,
id: X,
scale: u,
defaultViewport: Y.clone(),
optionalContentConfigPromise: t,
renderingQueue: this.renderingQueue,
textLayerMode: S,
annotationMode: G,
imageResourcesPath: this.imageResourcesPath,
maxCanvasPixels: this.maxCanvasPixels,
pageColors: n,
l10n: this.l10n,
layerProperties: this._layerProperties,
enableHWA: c(this, RW)
});
this._pages.push(p);
}
(B = this._pages[0]) == null || B.setPdfPage(m), this._scrollMode === Ql.PAGE ? h(this, _, as).call(this) : this._spreadMode !== SU.NONE && this._updateSpreadMode(), h(this, _, wb).call(this, W).then(async () => {
var p, y;
if (U !== this.pdfDocument)
return;
if ((p = this.findController) == null || p.setDocument(U), (y = this._scriptingManager) == null || y.setDocument(U), c(this, nF) && document.addEventListener("copy", h(this, _, xb).bind(this, S), {
signal: W
}), c(this, Zd) && F.dispatch("annotationeditormodechanged", {
source: this,
mode: c(this, Rt)
}), U.loadingParams.disableAutoFetch || l > IW.FORCE_LAZY_PAGE_INIT) {
this._pagesCapability.resolve();
return;
}
let X = l - 1;
if (X <= 0) {
this._pagesCapability.resolve();
return;
}
for (let r = 2; r <= l; ++r) {
const D = U.getPage(r).then((E) => {
const P = this._pages[r - 1];
P.pdfPage || P.setPdfPage(E), --X === 0 && this._pagesCapability.resolve();
}, (E) => {
console.error(`Unable to get page ${r} to initialize viewer`, E), --X === 0 && this._pagesCapability.resolve();
});
r % IW.PAUSE_EAGER_PAGE_INIT === 0 && await D;
}
}), F.dispatch("pagesinit", {
source: this
}), U.getMetadata().then(({
info: X
}) => {
U === this.pdfDocument && X.Language && (s.lang = X.Language);
}), this.defaultRenderingQueue && this.update();
}).catch((m) => {
console.error("Unable to initialize viewer", m), this._pagesCapability.reject(m);
});
}
setPageLabels(U) {
var l;
if (this.pdfDocument) {
U ? Array.isArray(U) && this.pdfDocument.numPages === U.length ? this._pageLabels = U : (this._pageLabels = null, console.error("setPageLabels: Invalid page labels.")) : this._pageLabels = null;
for (let d = 0, t = this._pages.length; d < t; d++)
this._pages[d].setPageLabel(((l = this._pageLabels) == null ? void 0 : l[d]) ?? null);
}
}
_resetView() {
var U, l;
this._pages = [], this._currentPageNumber = 1, this._currentScale = SQ, this._currentScaleValue = null, this._pageLabels = null, R(this, FF, new MG(PN)), this._location = null, this._pagesRotation = 0, this._optionalContentConfigPromise = null, this._firstPageCapability = Promise.withResolvers(), this._onePageRenderedCapability = Promise.withResolvers(), this._pagesCapability = Promise.withResolvers(), this._scrollMode = Ql.VERTICAL, this._previousScrollMode = Ql.UNKNOWN, this._spreadMode = SU.NONE, R(this, w0, {
previousPageNumber: 1,
scrollDown: !0,
pages: []
}), (U = c(this, cF)) == null || U.abort(), R(this, cF, null), this.viewer.textContent = "", this._updateScrollMode(), this.viewer.removeAttribute("lang"), (l = c(this, nF)) == null || l.remove(), R(this, nF, null), h(this, _, SV).call(this);
}
_scrollUpdate() {
this.pagesCount !== 0 && this.update();
}
pageLabelToPageNumber(U) {
if (!this._pageLabels)
return null;
const l = this._pageLabels.indexOf(U);
return l < 0 ? null : l + 1;
}
scrollPageIntoView({
pageNumber: U,
destArray: l = null,
allowNegativeOffset: d = !1,
ignoreDestinationZoom: t = !1
}) {
if (!this.pdfDocument)
return;
const Z = Number.isInteger(U) && this._pages[U - 1];
if (!Z) {
console.error(`scrollPageIntoView: "${U}" is not a valid pageNumber parameter.`);
return;
}
if (this.isInPresentationMode || !l) {
this._setCurrentPageNumber(U, !0);
return;
}
let F = 0, n = 0, s = 0, W = 0, V, Q;
const i = Z.rotation % 180 !== 0, N = (i ? Z.height : Z.width) / Z.scale / ut.PDF_TO_CSS_UNITS, e = (i ? Z.width : Z.height) / Z.scale / ut.PDF_TO_CSS_UNITS;
let m = 0;
switch (l[1].name) {
case "XYZ":
F = l[2], n = l[3], m = l[4], F = F !== null ? F : 0, n = n !== null ? n : e;
break;
case "Fit":
case "FitB":
m = "page-fit";
break;
case "FitH":
case "FitBH":
n = l[2], m = "page-width", n === null && this._location ? (F = this._location.left, n = this._location.top) : (typeof n != "number" || n < 0) && (n = e);
break;
case "FitV":
case "FitBV":
F = l[2], s = N, W = e, m = "page-height";
break;
case "FitR":
F = l[2], n = l[3], s = l[4] - F, W = l[5] - n;
let S = bN, T = mN;
this.removePageBorders && (S = T = 0), V = (this.container.clientWidth - S) / s / ut.PDF_TO_CSS_UNITS, Q = (this.container.clientHeight - T) / W / ut.PDF_TO_CSS_UNITS, m = Math.min(Math.abs(V), Math.abs(Q));
break;
default:
console.error(`scrollPageIntoView: "${l[1].name}" is not a valid destination type.`);
return;
}
if (t || (m && m !== this._currentScale ? this.currentScaleValue = m : this._currentScale === SQ && (this.currentScaleValue = RM)), m === "page-fit" && !l[4]) {
h(this, _, GV).call(this, Z);
return;
}
const J = [Z.viewport.convertToViewportPoint(F, n), Z.viewport.convertToViewportPoint(F + s, n + W)];
let M = Math.min(J[0][0], J[1][0]), G = Math.min(J[0][1], J[1][1]);
d || (M = Math.max(M, 0), G = Math.max(G, 0)), h(this, _, GV).call(this, Z, {
left: M,
top: G
});
}
_updateLocation(U) {
const l = this._currentScale, d = this._currentScaleValue, t = parseFloat(d) === l ? Math.round(l * 1e4) / 100 : d, Z = U.id, F = this._pages[Z - 1], n = this.container, s = F.getPagePoint(n.scrollLeft - U.x, n.scrollTop - U.y), W = Math.round(s[0]), V = Math.round(s[1]);
let Q = `#page=${Z}`;
this.isInPresentationMode || (Q += `&zoom=${t},${W},${V}`), this._location = {
pageNumber: Z,
scale: t,
top: V,
left: W,
rotation: this._pagesRotation,
pdfOpenParams: Q
};
}
update() {
const U = this._getVisiblePages(), l = U.views, d = l.length;
if (d === 0)
return;
const t = Math.max(PN, 2 * d + 1);
c(this, FF).resize(t, U.ids), this.renderingQueue.renderHighestPriority(U);
const Z = this._spreadMode === SU.NONE && (this._scrollMode === Ql.PAGE || this._scrollMode === Ql.VERTICAL), F = this._currentPageNumber;
let n = !1;
for (const s of l) {
if (s.percent < 100)
break;
if (s.id === F && Z) {
n = !0;
break;
}
}
this._setCurrentPageNumber(n ? F : l[0].id), this._updateLocation(U.first), this.eventBus.dispatch("updateviewarea", {
source: this,
location: this._location
});
}
containsElement(U) {
return this.container.contains(U);
}
focus() {
this.container.focus();
}
get _isContainerRtl() {
return getComputedStyle(this.container).direction === "rtl";
}
get isInPresentationMode() {
return this.presentationModeState === Zc.FULLSCREEN;
}
get isChangingPresentationMode() {
return this.presentationModeState === Zc.CHANGING;
}
get isHorizontalScrollbarEnabled() {
return this.isInPresentationMode ? !1 : this.container.scrollWidth > this.container.clientWidth;
}
get isVerticalScrollbarEnabled() {
return this.isInPresentationMode ? !1 : this.container.scrollHeight > this.container.clientHeight;
}
_getVisiblePages() {
const U = this._scrollMode === Ql.PAGE ? c(this, w0).pages : this._pages, l = this._scrollMode === Ql.HORIZONTAL, d = l && this._isContainerRtl;
return MM({
scrollEl: this.container,
views: U,
sortByVisibility: !0,
horizontal: l,
rtl: d
});
}
cleanup() {
for (const U of this._pages)
U.renderingState !== Cl.FINISHED && U.reset();
}
_cancelRendering() {
for (const U of this._pages)
U.cancelRendering();
}
forceRendering(U) {
const l = U || this._getVisiblePages(), d = h(this, _, Hb).call(this, l), t = this._spreadMode !== SU.NONE && this._scrollMode !== Ql.HORIZONTAL, Z = this.renderingQueue.getHighestPriority(l, this._pages, d, t);
return Z ? (h(this, _, Kb).call(this, Z).then(() => {
this.renderingQueue.renderView(Z);
}), !0) : !1;
}
get hasEqualPageSizes() {
const U = this._pages[0];
for (let l = 1, d = this._pages.length; l < d; ++l) {
const t = this._pages[l];
if (t.width !== U.width || t.height !== U.height)
return !1;
}
return !0;
}
getPagesOverview() {
let U;
return this._pages.map((l) => {
const d = l.pdfPage.getViewport({
scale: 1
}), t = GN(d);
if (U === void 0)
U = t;
else if (this.enablePrintAutoRotate && t !== U)
return {
width: d.height,
height: d.width,
rotation: (d.rotation - 90) % 360
};
return {
width: d.width,
height: d.height,
rotation: d.rotation
};
});
}
get optionalContentConfigPromise() {
return this.pdfDocument ? this._optionalContentConfigPromise ? this._optionalContentConfigPromise : (console.error("optionalContentConfigPromise: Not initialized yet."), this.pdfDocument.getOptionalContentConfig({
intent: "display"
})) : Promise.resolve(null);
}
set optionalContentConfigPromise(U) {
if (!(U instanceof Promise))
throw new Error(`Invalid optionalContentConfigPromise: ${U}`);
this.pdfDocument && this._optionalContentConfigPromise && (this._optionalContentConfigPromise = U, this.refresh(!1, {
optionalContentConfigPromise: U
}), this.eventBus.dispatch("optionalcontentconfigchanged", {
source: this,
promise: U
}));
}
get scrollMode() {
return this._scrollMode;
}
set scrollMode(U) {
if (this._scrollMode !== U) {
if (!JM(U))
throw new Error(`Invalid scroll mode: ${U}`);
this.pagesCount > IW.FORCE_SCROLL_MODE_PAGE || (this._previousScrollMode = this._scrollMode, this._scrollMode = U, this.eventBus.dispatch("scrollmodechanged", {
source: this,
mode: U
}), this._updateScrollMode(this._currentPageNumber));
}
}
_updateScrollMode(U = null) {
const l = this._scrollMode, d = this.viewer;
d.classList.toggle("scrollHorizontal", l === Ql.HORIZONTAL), d.classList.toggle("scrollWrapped", l === Ql.WRAPPED), !(!this.pdfDocument || !U) && (l === Ql.PAGE ? h(this, _, as).call(this) : this._previousScrollMode === Ql.PAGE && this._updateSpreadMode(), this._currentScaleValue && isNaN(this._currentScaleValue) && h(this, _, QZ).call(this, this._currentScaleValue, {
noScroll: !0
}), this._setCurrentPageNumber(U, !0), this.update());
}
get spreadMode() {
return this._spreadMode;
}
set spreadMode(U) {
if (this._spreadMode !== U) {
if (!GM(U))
throw new Error(`Invalid spread mode: ${U}`);
this._spreadMode = U, this.eventBus.dispatch("spreadmodechanged", {
source: this,
mode: U
}), this._updateSpreadMode(this._currentPageNumber);
}
}
_updateSpreadMode(U = null) {
if (!this.pdfDocument)
return;
const l = this.viewer, d = this._pages;
if (this._scrollMode === Ql.PAGE)
h(this, _, as).call(this);
else if (l.textContent = "", this._spreadMode === SU.NONE)
for (const t of this._pages)
l.append(t.div);
else {
const t = this._spreadMode - 1;
let Z = null;
for (let F = 0, n = d.length; F < n; ++F)
Z === null ? (Z = document.createElement("div"), Z.className = "spread", l.append(Z)) : F % 2 === t && (Z = Z.cloneNode(!1), l.append(Z)), Z.append(d[F].div);
}
U && (this._currentScaleValue && isNaN(this._currentScaleValue) && h(this, _, QZ).call(this, this._currentScaleValue, {
noScroll: !0
}), this._setCurrentPageNumber(U, !0), this.update());
}
_getPageAdvance(U, l = !1) {
switch (this._scrollMode) {
case Ql.WRAPPED: {
const {
views: d
} = this._getVisiblePages(), t = /* @__PURE__ */ new Map();
for (const {
id: Z,
y: F,
percent: n,
widthPercent: s
} of d) {
if (n === 0 || s < 100)
continue;
let W = t.get(F);
W || t.set(F, W || (W = [])), W.push(Z);
}
for (const Z of t.values()) {
const F = Z.indexOf(U);
if (F === -1)
continue;
const n = Z.length;
if (n === 1)
break;
if (l)
for (let s = F - 1, W = 0; s >= W; s--) {
const V = Z[s], Q = Z[s + 1] - 1;
if (V < Q)
return U - Q;
}
else
for (let s = F + 1, W = n; s < W; s++) {
const V = Z[s], Q = Z[s - 1] + 1;
if (V > Q)
return Q - U;
}
if (l) {
const s = Z[0];
if (s < U)
return U - s + 1;
} else {
const s = Z[n - 1];
if (s > U)
return s - U + 1;
}
break;
}
break;
}
case Ql.HORIZONTAL:
break;
case Ql.PAGE:
case Ql.VERTICAL: {
if (this._spreadMode === SU.NONE)
break;
const d = this._spreadMode - 1;
if (l && U % 2 !== d)
break;
if (!l && U % 2 === d)
break;
const {
views: t
} = this._getVisiblePages(), Z = l ? U - 1 : U + 1;
for (const {
id: F,
percent: n,
widthPercent: s
} of t)
if (F === Z) {
if (n > 0 && s === 100)
return 2;
break;
}
break;
}
}
return 1;
}
nextPage() {
const U = this._currentPageNumber, l = this.pagesCount;
if (U >= l)
return !1;
const d = this._getPageAdvance(U, !1) || 1;
return this.currentPageNumber = Math.min(U + d, l), !0;
}
previousPage() {
const U = this._currentPageNumber;
if (U <= 1)
return !1;
const l = this._getPageAdvance(U, !0) || 1;
return this.currentPageNumber = Math.max(U - l, 1), !0;
}
updateScale({
drawingDelay: U,
scaleFactor: l = null,
steps: d = null,
origin: t
}) {
if (d === null && l === null)
throw new Error("Invalid updateScale options: either `steps` or `scaleFactor` must be provided.");
if (!this.pdfDocument)
return;
let Z = this._currentScale;
if (l > 0 && l !== 1)
Z = Math.round(Z * l * 100) / 100;
else if (d) {
const F = d > 0 ? hN : 1 / hN, n = d > 0 ? Math.ceil : Math.floor;
d = Math.abs(d);
do
Z = n((Z * F).toFixed(2) * 10) / 10;
while (--d > 0);
}
Z = Math.max(NM, Math.min(eM, Z)), h(this, _, QZ).call(this, Z, {
noScroll: !1,
drawingDelay: U,
origin: t
});
}
increaseScale(U = {}) {
this.updateScale({
...U,
steps: U.steps ?? 1
});
}
decreaseScale(U = {}) {
this.updateScale({
...U,
steps: -(U.steps ?? 1)
});
}
get containerTopLeft() {
return c(this, QW) || R(this, QW, [this.container.offsetTop, this.container.offsetLeft]);
}
get annotationEditorMode() {
return c(this, Zd) ? c(this, Rt) : KU.DISABLE;
}
set annotationEditorMode({
mode: U,
editId: l = null,
isFromKeyboard: d = !1
}) {
var F;
if (!c(this, Zd))
throw new Error("The AnnotationEditor is not enabled.");
if (c(this, Rt) === U)
return;
if (!fN(U))
throw new Error(`Invalid AnnotationEditor mode: ${U}`);
if (!this.pdfDocument)
return;
U === KU.STAMP && ((F = c(this, E0)) == null || F.loadModel("altText"));
const {
eventBus: t
} = this, Z = () => {
h(this, _, SV).call(this), R(this, Rt, U), c(this, Zd).updateMode(U, l, d), t.dispatch("annotationeditormodechanged", {
source: this,
mode: U
});
};
if (U === KU.NONE || c(this, Rt) === KU.NONE) {
const n = U !== KU.NONE;
n || this.pdfDocument.annotationStorage.resetModifiedIds();
for (const W of this._pages)
W.toggleEditingMode(n);
const s = h(this, _, gb).call(this);
if (n && s) {
h(this, _, SV).call(this), R(this, r0, new AbortController());
const W = AbortSignal.any([c(this, cF).signal, c(this, r0).signal]);
t._on("pagerendered", ({
pageNumber: V
}) => {
s.delete(V), s.size === 0 && R(this, C0, setTimeout(Z, 0));
}, {
signal: W
});
return;
}
}
Z();
}
refresh(U = !1, l = /* @__PURE__ */ Object.create(null)) {
if (this.pdfDocument) {
for (const d of this._pages)
d.update(l);
c(this, sF) !== null && (clearTimeout(c(this, sF)), R(this, sF, null)), U || this.update();
}
}
}
FF = new WeakMap(), WW = new WeakMap(), VW = new WeakMap(), Rt = new WeakMap(), Zd = new WeakMap(), D0 = new WeakMap(), QW = new WeakMap(), iW = new WeakMap(), RW = new WeakMap(), NW = new WeakMap(), eW = new WeakMap(), hW = new WeakMap(), bW = new WeakMap(), cF = new WeakMap(), E0 = new WeakMap(), r0 = new WeakMap(), C0 = new WeakMap(), un = new WeakMap(), nF = new WeakMap(), Yn = new WeakMap(), mW = new WeakMap(), on = new WeakMap(), w0 = new WeakMap(), sF = new WeakMap(), MW = new WeakMap(), pn = new WeakMap(), _ = new WeakSet(), Cb = function(U) {
const l = {
annotationEditorMode: c(this, Rt),
annotationMode: c(this, D0),
textLayerMode: c(this, pn)
};
return U && (!U.includes(LW.COPY) && c(this, pn) === Nt.ENABLE && (l.textLayerMode = Nt.ENABLE_PERMISSIONS), U.includes(LW.MODIFY_CONTENTS) || (l.annotationEditorMode = KU.DISABLE), !U.includes(LW.MODIFY_ANNOTATIONS) && !U.includes(LW.FILL_INTERACTIVE_FORMS) && c(this, D0) === tZ.ENABLE_FORMS && (l.annotationMode = tZ.ENABLE)), l;
}, wb = async function(U) {
if (document.visibilityState === "hidden" || !this.container.offsetParent || this._getVisiblePages().views.length === 0)
return;
const l = Promise.withResolvers(), d = new AbortController();
document.addEventListener("visibilitychange", () => {
document.visibilityState === "hidden" && l.resolve();
}, {
signal: typeof AbortSignal.any == "function" ? AbortSignal.any([U, d.signal]) : U
}), await Promise.race([this._onePageRenderedCapability.promise, l.promise]), d.abort();
}, xb = function(U, l) {
const d = document.getSelection(), {
focusNode: t,
anchorNode: Z
} = d;
if (Z && t && d.containsNode(c(this, nF))) {
if (c(this, un) || U === Nt.ENABLE_PERMISSIONS) {
UR(l);
return;
}
R(this, un, !0);
const {
classList: F
} = this.viewer;
F.add("copyAll");
const n = new AbortController();
window.addEventListener("keydown", (s) => R(this, Yn, s.key === "Escape"), {
signal: n.signal
}), this.getAllText().then(async (s) => {
s !== null && await navigator.clipboard.writeText(s);
}).catch((s) => {
console.warn(`Something goes wrong when extracting the text: ${s.message}`);
}).finally(() => {
R(this, un, !1), R(this, Yn, !1), n.abort(), F.remove("copyAll");
}), UR(l);
}
}, as = function() {
if (this._scrollMode !== Ql.PAGE)
throw new Error("#ensurePageViewVisible: Invalid scrollMode value.");
const U = this._currentPageNumber, l = c(this, w0), d = this.viewer;
if (d.textContent = "", l.pages.length = 0, this._spreadMode === SU.NONE && !this.isInPresentationMode) {
const t = this._pages[U - 1];
d.append(t.div), l.pages.push(t);
} else {
const t = /* @__PURE__ */ new Set(), Z = this._spreadMode - 1;
Z === -1 ? t.add(U - 1) : U % 2 !== Z ? (t.add(U - 1), t.add(U)) : (t.add(U - 2), t.add(U - 1));
const F = document.createElement("div");
if (F.className = "spread", this.isInPresentationMode) {
const n = document.createElement("div");
n.className = "dummyPage", F.append(n);
}
for (const n of t) {
const s = this._pages[n];
s && (F.append(s.div), l.pages.push(s));
}
d.append(F);
}
l.scrollDown = U >= l.previousPageNumber, l.previousPageNumber = U;
}, GV = function(U, l = null) {
const {
div: d,
id: t
} = U;
if (this._currentPageNumber !== t && this._setCurrentPageNumber(t), this._scrollMode === Ql.PAGE && (h(this, _, as).call(this), this.update()), !l && !this.isInPresentationMode) {
const Z = d.offsetLeft + d.clientLeft, F = Z + d.clientWidth, {
scrollLeft: n,
clientWidth: s
} = this.container;
(this._scrollMode === Ql.HORIZONTAL || Z < n || F > n + s) && (l = {
left: 0,
top: 0
});
}
db(d, l), !this._currentScaleValue && this._location && (this._location = null);
}, jb = function(U) {
return U === this._currentScale || Math.abs(U - this._currentScale) < 1e-15;
}, XR = function(U, l, {
noScroll: d = !1,
preset: t = !1,
drawingDelay: Z = -1,
origin: F = null
}) {
if (this._currentScaleValue = l.toString(), h(this, _, jb).call(this, U)) {
t && this.eventBus.dispatch("scalechanging", {
source: this,
scale: U,
presetValue: l
});
return;
}
this.viewer.style.setProperty("--scale-factor", U * ut.PDF_TO_CSS_UNITS);
const n = Z >= 0 && Z < 1e3;
this.refresh(!0, {
scale: U,
drawingDelay: n ? Z : -1
}), n && R(this, sF, setTimeout(() => {
R(this, sF, null), this.refresh();
}, Z));
const s = this._currentScale;
if (this._currentScale = U, !d) {
let W = this._currentPageNumber, V;
if (this._location && !(this.isInPresentationMode || this.isChangingPresentationMode) && (W = this._location.pageNumber, V = [null, {
name: "XYZ"
}, this._location.left, this._location.top, null]), this.scrollPageIntoView({
pageNumber: W,
destArray: V,
allowNegativeOffset: !0
}), Array.isArray(F)) {
const Q = U / s - 1, [i, N] = this.containerTopLeft;
this.container.scrollLeft += (F[0] - N) * Q, this.container.scrollTop += (F[1] - i) * Q;
}
}
this.eventBus.dispatch("scalechanging", {
source: this,
scale: U,
presetValue: t ? l : void 0
}), this.defaultRenderingQueue && this.update();
}, Ob = function() {
return this._spreadMode !== SU.NONE && this._scrollMode !== Ql.HORIZONTAL ? 2 : 1;
}, QZ = function(U, l) {
let d = parseFloat(U);
if (d > 0)
l.preset = !1, h(this, _, XR).call(this, d, U, l);
else {
const t = this._pages[this._currentPageNumber - 1];
if (!t)
return;
let Z = bN, F = mN;
this.isInPresentationMode ? (Z = F = 4, this._spreadMode !== SU.NONE && (Z *= 2)) : this.removePageBorders ? Z = F = 0 : this._scrollMode === Ql.HORIZONTAL && ([Z, F] = [F, Z]);
const n = (this.container.clientWidth - Z) / t.width * t.scale / c(this, _, Ob), s = (this.container.clientHeight - F) / t.height * t.scale;
switch (U) {
case "page-actual":
d = 1;
break;
case "page-width":
d = n;
break;
case "page-height":
d = s;
break;
case "page-fit":
d = Math.min(n, s);
break;
case "auto":
const W = GN(t) ? n : Math.min(s, n);
d = Math.min(hM, W);
break;
default:
console.error(`#setScale: "${U}" is an unknown zoom value.`);
return;
}
l.preset = !0, h(this, _, XR).call(this, d, U, l);
}
}, uR = function() {
const U = this._pages[this._currentPageNumber - 1];
this.isInPresentationMode && h(this, _, QZ).call(this, this._currentScaleValue, {
noScroll: !0
}), h(this, _, GV).call(this, U);
}, gb = function() {
const U = this._getVisiblePages(), l = [], {
ids: d,
views: t
} = U;
for (const Z of t) {
const {
view: F
} = Z;
if (!F.hasEditableAnnotations()) {
d.delete(F.id);
continue;
}
l.push(Z);
}
return l.length === 0 ? null : (this.renderingQueue.renderHighestPriority({
first: l[0],
last: l.at(-1),
views: l,
ids: d
}), d);
}, Kb = async function(U) {
if (U.pdfPage)
return U.pdfPage;
try {
const l = await this.pdfDocument.getPage(U.id);
return U.pdfPage || U.setPdfPage(l), l;
} catch (l) {
return console.error("Unable to get page for page view", l), null;
}
}, Hb = function(U) {
var l, d;
if (((l = U.first) == null ? void 0 : l.id) === 1)
return !0;
if (((d = U.last) == null ? void 0 : d.id) === this.pagesCount)
return !1;
switch (this._scrollMode) {
case Ql.PAGE:
return c(this, w0).scrollDown;
case Ql.HORIZONTAL:
return this.scroll.right;
}
return this.scroll.down;
}, YR = function(U = this.container.clientHeight) {
U !== c(this, mW) && (R(this, mW, U), SM.setProperty("--viewer-container-height", `${U}px`));
}, vb = function(U) {
for (const l of U)
if (l.target === this.container) {
h(this, _, YR).call(this, Math.floor(l.borderBoxSize[0].blockSize)), R(this, QW, null);
break;
}
}, SV = function() {
var U;
(U = c(this, r0)) == null || U.abort(), R(this, r0, null), c(this, C0) !== null && (clearTimeout(c(this, C0)), R(this, C0, null));
};
class JG extends rb {
_resetView() {
super._resetView(), this._scrollMode = Ql.PAGE, this._spreadMode = SU.NONE;
}
set scrollMode(U) {
}
_updateScrollMode() {
}
set spreadMode(U) {
}
_updateSpreadMode() {
}
}
Il.AnnotationLayerBuilder;
Il.DownloadManager;
Il.EventBus;
Il.FindState;
Il.GenericL10n;
Il.LinkTarget;
Il.PDFFindController;
Il.PDFHistory;
var GG = Il.PDFLinkService;
Il.PDFPageView;
Il.PDFScriptingManager;
Il.PDFSinglePageViewer;
Il.PDFViewer;
Il.ProgressBar;
Il.RenderingStates;
Il.ScrollMode;
Il.SimpleLinkService;
Il.SpreadMode;
Il.StructTreeLayerBuilder;
Il.TextLayerBuilder;
Il.XfaLayerBuilder;
Il.parseQueryString;
const SG = ["id"], TG = ["id"], XG = {
key: 0,
class: "textLayer"
}, uG = {
key: 1,
class: "annotationLayer"
}, YG = /* @__PURE__ */ _b({
__name: "VuePdfEmbed",
props: {
annotationLayer: { type: Boolean },
height: {},
id: {},
imageResourcesPath: {},
linkService: {},
page: {},
rotation: { default: 0 },
scale: { default: 1 },
source: {},
textLayer: { type: Boolean },
width: {}
},
emits: ["internal-link-clicked", "loaded", "loading-failed", "password-requested", "progress", "rendered", "rendering-failed"],
setup(a, { expose: U, emit: l }) {
const d = a, t = l, Z = TV([]), F = qb([]), n = TV(null);
let s = null;
const { doc: W } = lb({
onError: (G) => {
Z.value = [], t("loading-failed", G);
},
onPasswordRequest({ callback: G, isWrongPassword: S }) {
t("password-requested", { callback: G, isWrongPassword: S });
},
onProgress: (G) => {
t("progress", G);
},
source: $b(d, "source")
}), V = lm(() => {
if (!W.value || !d.annotationLayer)
return null;
if (d.linkService)
return d.linkService;
const G = new GG();
return G.setDocument(W.value), G.setViewer({
scrollPageIntoView: ({ pageNumber: S }) => {
t("internal-link-clicked", S);
}
}), G;
}), Q = async (G) => {
if (!W.value)
return;
const S = await W.value.getData(), T = await W.value.getMetadata(), u = (
// @ts-expect-error: contentDispositionFilename is not typed
G ?? T.contentDispositionFilename ?? ""
);
iM(S, u);
}, i = (G) => {
let S, T;
return d.height && !d.width ? (T = d.height, S = T / G) : (S = d.width ?? n.value.clientWidth, T = S * G), [S, T];
}, N = async (G = 300, S = "", T = !1) => {
var p, y, r;
if (!W.value)
return;
const u = G / 72, Y = 96 / 72;
let o, B, X;
try {
o = window.document.createElement("div"), o.style.display = "none", window.document.body.appendChild(o), B = await QM(o);
const D = d.page && !T ? Array.isArray(d.page) ? d.page : [d.page] : [...Array(W.value.numPages + 1).keys()].slice(1);
await Promise.all(
D.map(async (E, P) => {
const k = await W.value.getPage(E), I = k.getViewport({
scale: 1,
rotation: 0
});
if (P === 0) {
const Gl = I.width * u / Y, pl = I.height * u / Y;
VM(B, Gl, pl);
}
const q = window.document.createElement("canvas");
q.width = I.width * u, q.height = I.height * u, o.appendChild(q);
const sl = q.cloneNode();
B.contentWindow.document.body.appendChild(sl), await k.render({
canvasContext: q.getContext("2d"),
intent: "print",
transform: [u, 0, 0, u, 0, 0],
viewport: I
}).promise, sl.getContext("2d").drawImage(q, 0, 0);
})
), S && (X = window.document.title, window.document.title = S), (p = B.contentWindow) == null || p.focus(), (y = B.contentWindow) == null || y.print();
} finally {
X && (window.document.title = X), GQ(o), (r = o.parentNode) == null || r.removeChild(o);
}
}, e = async () => {
if (!(!W.value || s != null && s.isAborted))
try {
Z.value = d.page ? Array.isArray(d.page) ? d.page : [d.page] : [...Array(W.value.numPages + 1).keys()].slice(1), F.value = Array(Z.value.length).fill(1), await Promise.all(
Z.value.map(async (G, S) => {
const T = await W.value.getPage(G);
if (s != null && s.isAborted)
return;
const u = ((d.rotation % 90 === 0 ? d.rotation : 0) + T.rotate) % 360, [Y, o, B] = Array.from(
n.value.getElementsByClassName("vue-pdf-embed__page")[S].children
), X = !!(u / 90 % 2), p = T.view[2] - T.view[0], y = T.view[3] - T.view[1], [r, D] = i(
X ? p / y : y / p
), E = `${Math.floor(r)}px`, P = `${Math.floor(D)}px`, I = r / (X ? y : p), q = T.getViewport({
scale: I,
rotation: u
});
F.value[S] = I, Y.style.display = "block", Y.style.width = E, Y.style.height = P;
const sl = [
m(
T,
q.clone({
scale: q.scale * window.devicePixelRatio * d.scale
}),
Y
)
];
return d.textLayer && sl.push(
M(
T,
q.clone({
dontFlip: !0
}),
o
)
), d.annotationLayer && sl.push(
J(
T,
q.clone({
dontFlip: !0
}),
B || o
)
), Promise.all(sl);
})
), s != null && s.isAborted || t("rendered");
} catch (G) {
Z.value = [], F.value = [], s != null && s.isAborted || t("rendering-failed", G);
}
}, m = async (G, S, T) => {
T.width = S.width, T.height = S.height, await G.render({
canvasContext: T.getContext("2d"),
viewport: S
}).promise;
}, J = async (G, S, T) => {
NN(T), new cM({
accessibilityManager: null,
annotationCanvasMap: null,
annotationEditorUIManager: null,
div: T,
page: G,
structTreeLayer: null,
viewport: S
}).render({
annotations: await G.getAnnotations(),
div: T,
imageResourcesPath: d.imageResourcesPath,
linkService: V.value,
page: G,
renderForms: !1,
viewport: S
});
}, M = async (G, S, T) => {
NN(T), new sM({
container: T,
textContentSource: await G.getTextContent(),
viewport: S
}).render();
};
return LQ(
W,
(G) => {
G && t("loaded", G);
},
{ immediate: !0 }
), LQ(
() => [
W.value,
d.annotationLayer,
d.height,
d.imageResourcesPath,
d.page,
d.rotation,
d.scale,
d.textLayer,
d.width
],
async ([G]) => {
G && (s && (s.isAborted = !0, await s.promise), GQ(n.value), s = {
isAborted: !1,
promise: e()
}, await s.promise, s = null);
},
{ immediate: !0 }
), qN(() => {
GQ(n.value);
}), U({
doc: W,
download: Q,
print: N
}), (G, S) => (In(), Dn("div", {
id: G.id,
ref_key: "root",
ref: n,
class: "vue-pdf-embed"
}, [
(In(!0), Dn(Um, null, dm(Z.value, (T, u) => (In(), Dn("div", { key: T }, [
HR(G.$slots, "before-page", { page: T }),
vR("div", {
id: G.id && `${G.id}-${T}`,
class: "vue-pdf-embed__page",
style: tm({
"--scale-factor": F.value[u],
position: "relative"
})
}, [
S[0] || (S[0] = vR("canvas", null, null, -1)),
G.textLayer ? (In(), Dn("div", XG)) : PR("", !0),
G.annotationLayer ? (In(), Dn("div", uG)) : PR("", !0)
], 12, TG),
HR(G.$slots, "after-page", { page: T })
]))), 128))
], 8, SG));
}
});
window != null && window.Vue && (window.VuePdfEmbed = YG, window.useVuePdfEmbed = lb);
pW != null && pW.workerSrc || (pW.workerSrc = WM);
export {
YG as default,
lb as useVuePdfEmbed
};