UNPKG

@getopenpay/openpay-js

Version:

Accept payments through OpenPay, right on your site

798 lines 304 kB
import { D as P, c as O_, C as s_, r as P_, u as R_, g as D_ } from "./index-DC5j54sB.js"; import { c as A } from "./utils-De78ey-v.js"; var C_ = function(S, E) { var T = typeof Symbol == "function" && S[Symbol.iterator]; if (!T) return S; var a = T.call(S), _, r = [], N; try { for (; (E === void 0 || E-- > 0) && !(_ = a.next()).done; ) r.push(_.value); } catch (M) { N = { error: M }; } finally { try { _ && !_.done && (T = a.return) && T.call(a); } finally { if (N) throw N.error; } } return r; }, v_ = function(S) { var E = typeof Symbol == "function" && Symbol.iterator, T = E && S[E], a = 0; if (T) return T.call(S); if (S && typeof S.length == "number") return { next: function() { return S && a >= S.length && (S = void 0), { value: S && S[a++], done: !S }; } }; throw new TypeError(E ? "Object is not iterable." : "Symbol.iterator is not defined."); }, t_ = ( /** @class */ (function() { function S(E) { this._entries = E ? new Map(E) : /* @__PURE__ */ new Map(); } return S.prototype.getEntry = function(E) { var T = this._entries.get(E); if (T) return Object.assign({}, T); }, S.prototype.getAllEntries = function() { return Array.from(this._entries.entries()).map(function(E) { var T = C_(E, 2), a = T[0], _ = T[1]; return [a, _]; }); }, S.prototype.setEntry = function(E, T) { var a = new S(this._entries); return a._entries.set(E, T), a; }, S.prototype.removeEntry = function(E) { var T = new S(this._entries); return T._entries.delete(E), T; }, S.prototype.removeEntries = function() { for (var E, T, a = [], _ = 0; _ < arguments.length; _++) a[_] = arguments[_]; var r = new S(this._entries); try { for (var N = v_(a), M = N.next(); !M.done; M = N.next()) { var M_ = M.value; r._entries.delete(M_); } } catch (e_) { E = { error: e_ }; } finally { try { M && !M.done && (T = N.return) && T.call(N); } finally { if (E) throw E.error; } } return r; }, S.prototype.clear = function() { return new S(); }, S; })() ), n_ = Symbol("BaggageEntryMetadata"), I_ = P.instance(); function L_(S) { return S === void 0 && (S = {}), new t_(new Map(Object.entries(S))); } function f_(S) { return typeof S != "string" && (I_.error("Cannot create baggage metadata from unknown type: " + typeof S), S = ""), { __TYPE__: n_, toString: function() { return S; } }; } var U_ = { get: function(S, E) { if (S != null) return S[E]; }, keys: function(S) { return S == null ? [] : Object.keys(S); } }, o_ = { set: function(S, E, T) { S != null && (S[E] = T); } }, V_ = ( /** @class */ (function() { function S() { } return S.prototype.inject = function(E, T) { }, S.prototype.extract = function(E, T) { return E; }, S.prototype.fields = function() { return []; }, S; })() ), D = O_("OpenTelemetry Baggage Key"); function C(S) { return S.getValue(D) || void 0; } function i_() { return C(s_.getInstance().active()); } function B_(S, E) { return S.setValue(D, E); } function c_(S) { return S.deleteValue(D); } var s = "propagation", d_ = new V_(), Y_ = ( /** @class */ (function() { function S() { this.createBaggage = L_, this.getBaggage = C, this.getActiveBaggage = i_, this.setBaggage = B_, this.deleteBaggage = c_; } return S.getInstance = function() { return this._instance || (this._instance = new S()), this._instance; }, S.prototype.setGlobalPropagator = function(E) { return P_(s, E, P.instance()); }, S.prototype.inject = function(E, T, a) { return a === void 0 && (a = o_), this._getGlobalPropagator().inject(E, T, a); }, S.prototype.extract = function(E, T, a) { return a === void 0 && (a = U_), this._getGlobalPropagator().extract(E, T, a); }, S.prototype.fields = function() { return this._getGlobalPropagator().fields(); }, S.prototype.disable = function() { R_(s, P.instance()); }, S.prototype._getGlobalPropagator = function() { return D_(s) || d_; }, S; })() ), y_ = Y_.getInstance(), h_ = typeof globalThis == "object" ? globalThis : typeof self == "object" ? self : typeof window == "object" ? window : typeof global == "object" ? global : {}, R = performance, v = "aws.lambda.invoked_arn", t = "db.system", n = "db.connection_string", I = "db.user", L = "db.jdbc.driver_classname", U = "db.name", o = "db.statement", V = "db.operation", i = "db.mssql.instance_name", B = "db.cassandra.keyspace", c = "db.cassandra.page_size", d = "db.cassandra.consistency_level", Y = "db.cassandra.table", G = "db.cassandra.idempotence", u = "db.cassandra.speculative_execution_count", p = "db.cassandra.coordinator.id", b = "db.cassandra.coordinator.dc", H = "db.hbase.namespace", g = "db.redis.database_index", l = "db.mongodb.collection", m = "db.sql.table", f = "exception.type", y = "exception.message", h = "exception.stacktrace", F = "exception.escaped", K = "faas.trigger", W = "faas.execution", w = "faas.document.collection", X = "faas.document.operation", Q = "faas.document.time", x = "faas.document.name", k = "faas.time", j = "faas.cron", q = "faas.coldstart", Z = "faas.invoked_name", J = "faas.invoked_provider", z = "faas.invoked_region", $ = "net.transport", SS = "net.peer.ip", ES = "net.peer.port", TS = "net.peer.name", aS = "net.host.ip", _S = "net.host.port", AS = "net.host.name", rS = "net.host.connection.type", NS = "net.host.connection.subtype", MS = "net.host.carrier.name", eS = "net.host.carrier.mcc", OS = "net.host.carrier.mnc", sS = "net.host.carrier.icc", PS = "peer.service", RS = "enduser.id", DS = "enduser.role", CS = "enduser.scope", vS = "thread.id", tS = "thread.name", nS = "code.function", IS = "code.namespace", LS = "code.filepath", US = "code.lineno", oS = "http.method", VS = "http.url", iS = "http.target", BS = "http.host", cS = "http.scheme", dS = "http.status_code", YS = "http.flavor", GS = "http.user_agent", uS = "http.request_content_length", pS = "http.request_content_length_uncompressed", bS = "http.response_content_length", HS = "http.response_content_length_uncompressed", gS = "http.server_name", lS = "http.route", mS = "http.client_ip", fS = "aws.dynamodb.table_names", yS = "aws.dynamodb.consumed_capacity", hS = "aws.dynamodb.item_collection_metrics", FS = "aws.dynamodb.provisioned_read_capacity", KS = "aws.dynamodb.provisioned_write_capacity", WS = "aws.dynamodb.consistent_read", wS = "aws.dynamodb.projection", XS = "aws.dynamodb.limit", QS = "aws.dynamodb.attributes_to_get", xS = "aws.dynamodb.index_name", kS = "aws.dynamodb.select", jS = "aws.dynamodb.global_secondary_indexes", qS = "aws.dynamodb.local_secondary_indexes", ZS = "aws.dynamodb.exclusive_start_table", JS = "aws.dynamodb.table_count", zS = "aws.dynamodb.scan_forward", $S = "aws.dynamodb.segment", SE = "aws.dynamodb.total_segments", EE = "aws.dynamodb.count", TE = "aws.dynamodb.scanned_count", aE = "aws.dynamodb.attribute_definitions", _E = "aws.dynamodb.global_secondary_index_updates", AE = "messaging.system", rE = "messaging.destination", NE = "messaging.destination_kind", ME = "messaging.temp_destination", eE = "messaging.protocol", OE = "messaging.protocol_version", sE = "messaging.url", PE = "messaging.message_id", RE = "messaging.conversation_id", DE = "messaging.message_payload_size_bytes", CE = "messaging.message_payload_compressed_size_bytes", vE = "messaging.operation", tE = "messaging.consumer_id", nE = "messaging.rabbitmq.routing_key", IE = "messaging.kafka.message_key", LE = "messaging.kafka.consumer_group", UE = "messaging.kafka.client_id", oE = "messaging.kafka.partition", VE = "messaging.kafka.tombstone", iE = "rpc.system", BE = "rpc.service", cE = "rpc.method", dE = "rpc.grpc.status_code", YE = "rpc.jsonrpc.version", GE = "rpc.jsonrpc.request_id", uE = "rpc.jsonrpc.error_code", pE = "rpc.jsonrpc.error_message", bE = "message.type", HE = "message.id", gE = "message.compressed_size", lE = "message.uncompressed_size", F_ = v, K_ = t, W_ = n, w_ = I, X_ = L, Q_ = U, x_ = o, k_ = V, j_ = i, q_ = B, Z_ = c, J_ = d, z_ = Y, $_ = G, SA = u, EA = p, TA = b, aA = H, _A = g, AA = l, rA = m, NA = f, MA = y, eA = h, OA = F, sA = K, PA = W, RA = w, DA = X, CA = Q, vA = x, tA = k, nA = j, IA = q, LA = Z, UA = J, oA = z, VA = $, iA = SS, BA = ES, cA = TS, dA = aS, YA = _S, GA = AS, uA = rS, pA = NS, bA = MS, HA = eS, gA = OS, lA = sS, mA = PS, fA = RS, yA = DS, hA = CS, FA = vS, KA = tS, WA = nS, wA = IS, XA = LS, QA = US, xA = oS, kA = VS, jA = iS, qA = BS, ZA = cS, JA = dS, zA = YS, $A = GS, Sr = uS, Er = pS, Tr = bS, ar = HS, _r = gS, Ar = lS, rr = mS, Nr = fS, Mr = yS, er = hS, Or = FS, sr = KS, Pr = WS, Rr = wS, Dr = XS, Cr = QS, vr = xS, tr = kS, nr = jS, Ir = qS, Lr = ZS, Ur = JS, or = zS, Vr = $S, ir = SE, Br = EE, cr = TE, dr = aE, Yr = _E, Gr = AE, ur = rE, pr = NE, br = ME, Hr = eE, gr = OE, lr = sE, mr = PE, fr = RE, yr = DE, hr = CE, Fr = vE, Kr = tE, Wr = nE, wr = IE, Xr = LE, Qr = UE, xr = oE, kr = VE, jr = iE, qr = BE, Zr = cE, Jr = dE, zr = YE, $r = GE, SN = uE, EN = pE, TN = bE, aN = HE, _N = gE, AN = lE, rN = /* @__PURE__ */ A([ v, t, n, I, L, U, o, V, i, B, c, d, Y, G, u, p, b, H, g, l, m, f, y, h, F, K, W, w, X, Q, x, k, j, q, Z, J, z, $, SS, ES, TS, aS, _S, AS, rS, NS, MS, eS, OS, sS, PS, RS, DS, CS, vS, tS, nS, IS, LS, US, oS, VS, iS, BS, cS, dS, YS, GS, uS, pS, bS, HS, gS, lS, mS, fS, yS, hS, FS, KS, WS, wS, XS, QS, xS, kS, jS, qS, ZS, JS, zS, $S, SE, EE, TE, aE, _E, AE, rE, NE, ME, eE, OE, sE, PE, RE, DE, CE, vE, tE, nE, IE, LE, UE, oE, VE, iE, BE, cE, dE, YE, GE, uE, pE, bE, HE, gE, lE ]), mE = "other_sql", fE = "mssql", yE = "mysql", hE = "oracle", FE = "db2", KE = "postgresql", WE = "redshift", wE = "hive", XE = "cloudscape", QE = "hsqldb", xE = "progress", kE = "maxdb", jE = "hanadb", qE = "ingres", ZE = "firstsql", JE = "edb", zE = "cache", $E = "adabas", ST = "firebird", ET = "derby", TT = "filemaker", aT = "informix", _T = "instantdb", AT = "interbase", rT = "mariadb", NT = "netezza", MT = "pervasive", eT = "pointbase", OT = "sqlite", sT = "sybase", PT = "teradata", RT = "vertica", DT = "h2", CT = "coldfusion", vT = "cassandra", tT = "hbase", nT = "mongodb", IT = "redis", LT = "couchbase", UT = "couchdb", oT = "cosmosdb", VT = "dynamodb", iT = "neo4j", BT = "geode", cT = "elasticsearch", dT = "memcached", YT = "cockroachdb", NN = mE, MN = fE, eN = yE, ON = hE, sN = FE, PN = KE, RN = WE, DN = wE, CN = XE, vN = QE, tN = xE, nN = kE, IN = jE, LN = qE, UN = ZE, oN = JE, VN = zE, iN = $E, BN = ST, cN = ET, dN = TT, YN = aT, GN = _T, uN = AT, pN = rT, bN = NT, HN = MT, gN = eT, lN = OT, mN = sT, fN = PT, yN = RT, hN = DT, FN = CT, KN = vT, WN = tT, wN = nT, XN = IT, QN = LT, xN = UT, kN = oT, jN = VT, qN = iT, ZN = BT, JN = cT, zN = dT, $N = YT, SM = /* @__PURE__ */ A([ mE, fE, yE, hE, FE, KE, WE, wE, XE, QE, xE, kE, jE, qE, ZE, JE, zE, $E, ST, ET, TT, aT, _T, AT, rT, NT, MT, eT, OT, sT, PT, RT, DT, CT, vT, tT, nT, IT, LT, UT, oT, VT, iT, BT, cT, dT, YT ]), GT = "all", uT = "each_quorum", pT = "quorum", bT = "local_quorum", HT = "one", gT = "two", lT = "three", mT = "local_one", fT = "any", yT = "serial", hT = "local_serial", EM = GT, TM = uT, aM = pT, _M = bT, AM = HT, rM = gT, NM = lT, MM = mT, eM = fT, OM = yT, sM = hT, PM = /* @__PURE__ */ A([ GT, uT, pT, bT, HT, gT, lT, mT, fT, yT, hT ]), FT = "datasource", KT = "http", WT = "pubsub", wT = "timer", XT = "other", RM = FT, DM = KT, CM = WT, vM = wT, tM = XT, nM = /* @__PURE__ */ A([ FT, KT, WT, wT, XT ]), QT = "insert", xT = "edit", kT = "delete", IM = QT, LM = xT, UM = kT, oM = /* @__PURE__ */ A([ QT, xT, kT ]), jT = "alibaba_cloud", qT = "aws", ZT = "azure", JT = "gcp", VM = jT, iM = qT, BM = ZT, cM = JT, dM = /* @__PURE__ */ A([ jT, qT, ZT, JT ]), zT = "ip_tcp", $T = "ip_udp", Sa = "ip", Ea = "unix", Ta = "pipe", aa = "inproc", _a = "other", YM = zT, GM = $T, uM = Sa, pM = Ea, bM = Ta, HM = aa, gM = _a, lM = /* @__PURE__ */ A([ zT, $T, Sa, Ea, Ta, aa, _a ]), Aa = "wifi", ra = "wired", Na = "cell", Ma = "unavailable", ea = "unknown", mM = Aa, fM = ra, yM = Na, hM = Ma, FM = ea, KM = /* @__PURE__ */ A([ Aa, ra, Na, Ma, ea ]), Oa = "gprs", sa = "edge", Pa = "umts", Ra = "cdma", Da = "evdo_0", Ca = "evdo_a", va = "cdma2000_1xrtt", ta = "hsdpa", na = "hsupa", Ia = "hspa", La = "iden", Ua = "evdo_b", oa = "lte", Va = "ehrpd", ia = "hspap", Ba = "gsm", ca = "td_scdma", da = "iwlan", Ya = "nr", Ga = "nrnsa", ua = "lte_ca", WM = Oa, wM = sa, XM = Pa, QM = Ra, xM = Da, kM = Ca, jM = va, qM = ta, ZM = na, JM = Ia, zM = La, $M = Ua, Se = oa, Ee = Va, Te = ia, ae = Ba, _e = ca, Ae = da, re = Ya, Ne = Ga, Me = ua, ee = /* @__PURE__ */ A([ Oa, sa, Pa, Ra, Da, Ca, va, ta, na, Ia, La, Ua, oa, Va, ia, Ba, ca, da, Ya, Ga, ua ]), pa = "1.0", ba = "1.1", Ha = "2.0", ga = "SPDY", la = "QUIC", Oe = pa, se = ba, Pe = Ha, Re = ga, De = la, Ce = { HTTP_1_0: pa, HTTP_1_1: ba, HTTP_2_0: Ha, SPDY: ga, QUIC: la }, ma = "queue", fa = "topic", ve = ma, te = fa, ne = /* @__PURE__ */ A([ ma, fa ]), ya = "receive", ha = "process", Ie = ya, Le = ha, Ue = /* @__PURE__ */ A([ ya, ha ]), Fa = 0, Ka = 1, Wa = 2, wa = 3, Xa = 4, Qa = 5, xa = 6, ka = 7, ja = 8, qa = 9, Za = 10, Ja = 11, za = 12, $a = 13, S_ = 14, E_ = 15, T_ = 16, oe = Fa, Ve = Ka, ie = Wa, Be = wa, ce = Xa, de = Qa, Ye = xa, Ge = ka, ue = ja, pe = qa, be = Za, He = Ja, ge = za, le = $a, me = S_, fe = E_, ye = T_, he = { OK: Fa, CANCELLED: Ka, UNKNOWN: Wa, INVALID_ARGUMENT: wa, DEADLINE_EXCEEDED: Xa, NOT_FOUND: Qa, ALREADY_EXISTS: xa, PERMISSION_DENIED: ka, RESOURCE_EXHAUSTED: ja, FAILED_PRECONDITION: qa, ABORTED: Za, OUT_OF_RANGE: Ja, UNIMPLEMENTED: za, INTERNAL: $a, UNAVAILABLE: S_, DATA_LOSS: E_, UNAUTHENTICATED: T_ }, a_ = "SENT", __ = "RECEIVED", Fe = a_, Ke = __, We = /* @__PURE__ */ A([ a_, __ ]), A_ = 9, G_ = 6, u_ = Math.pow(10, G_), e = Math.pow(10, A_); function O(S) { var E = S / 1e3, T = Math.trunc(E), a = Math.round(S % 1e3 * u_); return [T, a]; } function r_() { var S = R.timeOrigin; if (typeof S != "number") { var E = R; S = E.timing && E.timing.fetchStart; } return S; } function p_(S) { var E = O(r_()), T = O(typeof S == "number" ? S : R.now()); return b_(E, T); } function we(S) { if (N_(S)) return S; if (typeof S == "number") return S < r_() ? p_(S) : O(S); if (S instanceof Date) return O(S.getTime()); throw TypeError("Invalid input type"); } function Xe(S, E) { var T = E[0] - S[0], a = E[1] - S[1]; return a < 0 && (T -= 1, a += e), [T, a]; } function Qe(S) { var E = A_, T = "" + "0".repeat(E) + S[1] + "Z", a = T.substring(T.length - E - 1), _ = new Date(S[0] * 1e3).toISOString(); return _.replace("000Z", a); } function xe(S) { return S[0] * e + S[1]; } function ke(S) { return S[0] * 1e3 + S[1] / 1e6; } function je(S) { return S[0] * 1e6 + S[1] / 1e3; } function N_(S) { return Array.isArray(S) && S.length === 2 && typeof S[0] == "number" && typeof S[1] == "number"; } function qe(S) { return N_(S) || typeof S == "number" || S instanceof Date; } function b_(S, E) { var T = [S[0] + E[0], S[1] + E[1]]; return T[1] >= e && (T[1] -= e, T[0] += 1), T; } var H_ = function(S) { var E = typeof Symbol == "function" && Symbol.iterator, T = E && S[E], a = 0; if (T) return T.call(S); if (S && typeof S.length == "number") return { next: function() { return S && a >= S.length && (S = void 0), { value: S && S[a++], done: !S }; } }; throw new TypeError(E ? "Object is not iterable." : "Symbol.iterator is not defined."); }; function g_(S, E) { return typeof E == "string" ? S === E : !!S.match(E); } function Ze(S, E) { var T, a; if (!E) return !1; try { for (var _ = H_(E), r = _.next(); !r.done; r = _.next()) { var N = r.value; if (g_(S, N)) return !0; } } catch (M) { T = { error: M }; } finally { try { r && !r.done && (a = _.return) && a.call(_); } finally { if (T) throw T.error; } } return !1; } export { oN as $, U_ as A, o_ as B, eM as C, EM as D, TM as E, MM as F, _M as G, sM as H, AM as I, aM as J, OM as K, NM as L, rM as M, iN as N, VN as O, KN as P, CN as Q, $N as R, Tr as S, FN as T, kN as U, QN as V, xN as W, sN as X, cN as Y, jN as Z, h_ as _, ar as a, We as a$, JN as a0, dN as a1, BN as a2, UN as a3, ZN as a4, hN as a5, IN as a6, WN as a7, DN as a8, vN as a9, UM as aA, LM as aB, IM as aC, VM as aD, iM as aE, BM as aF, cM as aG, RM as aH, DM as aI, tM as aJ, CM as aK, vM as aL, oM as aM, dM as aN, nM as aO, Oe as aP, se as aQ, Pe as aR, De as aS, Re as aT, Ce as aU, Ke as aV, Fe as aW, ve as aX, te as aY, Le as aZ, Ie as a_, YN as aa, LN as ab, GN as ac, uN as ad, pN as ae, nN as af, zN as ag, wN as ah, MN as ai, eN as aj, qN as ak, bN as al, ON as am, NN as an, HN as ao, gN as ap, PN as aq, tN as ar, XN as as, RN as at, lN as au, mN as av, fN as aw, yN as ax, PM as ay, SM as az, JA as b, Yr as b$, ne as b0, Ue as b1, QM as b2, jM as b3, wM as b4, Ee as b5, xM as b6, kM as b7, $M as b8, WM as b9, KM as bA, lM as bB, be as bC, Ye as bD, Ve as bE, fe as bF, ce as bG, pe as bH, le as bI, Be as bJ, de as bK, oe as bL, He as bM, Ge as bN, ue as bO, ye as bP, me as bQ, ge as bR, ie as bS, he as bT, Cr as bU, dr as bV, Pr as bW, Mr as bX, Br as bY, Lr as bZ, nr as b_, ae as ba, qM as bb, JM as bc, Te as bd, ZM as be, zM as bf, Ae as bg, Se as bh, Me as bi, re as bj, Ne as bk, _e as bl, XM as bm, yM as bn, hM as bo, FM as bp, mM as bq, fM as br, HM as bs, uM as bt, YM as bu, GM as bv, gM as bw, bM as bx, pM as by, ee as bz, qA as c, TN as c$, vr as c0, er as c1, Dr as c2, Ir as c3, Rr as c4, Or as c5, sr as c6, cr as c7, or as c8, Vr as c9, x_ as cA, K_ as cB, w_ as cC, fA as cD, yA as cE, hA as cF, OA as cG, IA as cH, nA as cI, RA as cJ, vA as cK, DA as cL, CA as cM, PA as cN, LA as cO, UA as cP, oA as cQ, tA as cR, sA as cS, rr as cT, zA as cU, Sr as cV, Ar as cW, _r as cX, jA as cY, _N as cZ, aN as c_, tr as ca, Ur as cb, Nr as cc, ir as cd, F_ as ce, XA as cf, WA as cg, QA as ch, wA as ci, J_ as cj, TA as ck, EA as cl, $_ as cm, q_ as cn, Z_ as co, SA as cp, z_ as cq, W_ as cr, aA as cs, X_ as ct, AA as cu, j_ as cv, Q_ as cw, k_ as cx, _A as cy, rA as cz, ZA as d, AN as d0, Kr as d1, fr as d2, ur as d3, pr as d4, Qr as d5, Xr as d6, wr as d7, xr as d8, kr as d9, SN as dA, EN as dB, $r as dC, zr as dD, Zr as dE, qr as dF, jr as dG, FA as dH, KA as dI, rN as dJ, ke as dK, Qe as dL, mr as da, hr as db, yr as dc, Fr as dd, Hr as de, gr as df, Wr as dg, Gr as dh, br as di, lr as dj, lA as dk, HA as dl, gA as dm, bA as dn, pA as dp, uA as dq, dA as dr, GA as ds, YA as dt, iA as du, cA as dv, BA as dw, VA as dx, mA as dy, Jr as dz, $A as e, xA as f, kA as g, xe as h, Ze as i, p_ as j, Er as k, r_ as l, O as m, qe as n, R as o, y_ as p, Xe as q, N_ as r, b_ as s, we as t, g_ as u, NA as v, MA as w, eA as x, je as y, f_ as z }; //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsidXJsLSF+ezAwZH1+LmpzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBEIGFzIERpYWdBUEksIGMgYXMgY3JlYXRlQ29udGV4dEtleSwgQyBhcyBDb250ZXh0QVBJLCByIGFzIHJlZ2lzdGVyR2xvYmFsLCB1IGFzIHVucmVnaXN0ZXJHbG9iYWwsIGcgYXMgZ2V0R2xvYmFsIH0gZnJvbSAnLi9pbmRleC0hfnswMDl9fi5qcyc7XG5pbXBvcnQgeyBjIGFzIGNyZWF0ZUNvbnN0TWFwIH0gZnJvbSAnLi91dGlscy0hfnswMDd9fi5qcyc7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgX19yZWFkID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19yZWFkKSB8fCBmdW5jdGlvbiAobywgbikge1xuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcbiAgICBpZiAoIW0pIHJldHVybiBvO1xuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xuICAgIHRyeSB7XG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xuICAgIH1cbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cbiAgICBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxuICAgIH1cbiAgICByZXR1cm4gYXI7XG59O1xudmFyIF9fdmFsdWVzJDEgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX3ZhbHVlcykgfHwgZnVuY3Rpb24obykge1xuICAgIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xuICAgICAgICB9XG4gICAgfTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59O1xudmFyIEJhZ2dhZ2VJbXBsID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIEJhZ2dhZ2VJbXBsKGVudHJpZXMpIHtcbiAgICAgICAgdGhpcy5fZW50cmllcyA9IGVudHJpZXMgPyBuZXcgTWFwKGVudHJpZXMpIDogbmV3IE1hcCgpO1xuICAgIH1cbiAgICBCYWdnYWdlSW1wbC5wcm90b3R5cGUuZ2V0RW50cnkgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMuX2VudHJpZXMuZ2V0KGtleSk7XG4gICAgICAgIGlmICghZW50cnkpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGVudHJ5KTtcbiAgICB9O1xuICAgIEJhZ2dhZ2VJbXBsLnByb3RvdHlwZS5nZXRBbGxFbnRyaWVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLl9lbnRyaWVzLmVudHJpZXMoKSkubWFwKGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgdmFyIF9iID0gX19yZWFkKF9hLCAyKSwgayA9IF9iWzBdLCB2ID0gX2JbMV07XG4gICAgICAgICAgICByZXR1cm4gW2ssIHZdO1xuICAgICAgICB9KTtcbiAgICB9O1xuICAgIEJhZ2dhZ2VJbXBsLnByb3RvdHlwZS5zZXRFbnRyeSA9IGZ1bmN0aW9uIChrZXksIGVudHJ5KSB7XG4gICAgICAgIHZhciBuZXdCYWdnYWdlID0gbmV3IEJhZ2dhZ2VJbXBsKHRoaXMuX2VudHJpZXMpO1xuICAgICAgICBuZXdCYWdnYWdlLl9lbnRyaWVzLnNldChrZXksIGVudHJ5KTtcbiAgICAgICAgcmV0dXJuIG5ld0JhZ2dhZ2U7XG4gICAgfTtcbiAgICBCYWdnYWdlSW1wbC5wcm90b3R5cGUucmVtb3ZlRW50cnkgPSBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciBuZXdCYWdnYWdlID0gbmV3IEJhZ2dhZ2VJbXBsKHRoaXMuX2VudHJpZXMpO1xuICAgICAgICBuZXdCYWdnYWdlLl9lbnRyaWVzLmRlbGV0ZShrZXkpO1xuICAgICAgICByZXR1cm4gbmV3QmFnZ2FnZTtcbiAgICB9O1xuICAgIEJhZ2dhZ2VJbXBsLnByb3RvdHlwZS5yZW1vdmVFbnRyaWVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZV8xLCBfYTtcbiAgICAgICAgdmFyIGtleXMgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIGtleXNbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbmV3QmFnZ2FnZSA9IG5ldyBCYWdnYWdlSW1wbCh0aGlzLl9lbnRyaWVzKTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGZvciAodmFyIGtleXNfMSA9IF9fdmFsdWVzJDEoa2V5cyksIGtleXNfMV8xID0ga2V5c18xLm5leHQoKTsgIWtleXNfMV8xLmRvbmU7IGtleXNfMV8xID0ga2V5c18xLm5leHQoKSkge1xuICAgICAgICAgICAgICAgIHZhciBrZXkgPSBrZXlzXzFfMS52YWx1ZTtcbiAgICAgICAgICAgICAgICBuZXdCYWdnYWdlLl9lbnRyaWVzLmRlbGV0ZShrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlXzFfMSkgeyBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OyB9XG4gICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBpZiAoa2V5c18xXzEgJiYgIWtleXNfMV8xLmRvbmUgJiYgKF9hID0ga2V5c18xLnJldHVybikpIF9hLmNhbGwoa2V5c18xKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3QmFnZ2FnZTtcbiAgICB9O1xuICAgIEJhZ2dhZ2VJbXBsLnByb3RvdHlwZS5jbGVhciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBCYWdnYWdlSW1wbCgpO1xuICAgIH07XG4gICAgcmV0dXJuIEJhZ2dhZ2VJbXBsO1xufSgpKTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8qKlxuICogU3ltYm9sIHVzZWQgdG8gbWFrZSBCYWdnYWdlRW50cnlNZXRhZGF0YSBhbiBvcGFxdWUgdHlwZVxuICovXG52YXIgYmFnZ2FnZUVudHJ5TWV0YWRhdGFTeW1ib2wgPSBTeW1ib2woJ0JhZ2dhZ2VFbnRyeU1ldGFkYXRhJyk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgZGlhZyA9IERpYWdBUEkuaW5zdGFuY2UoKTtcbi8qKlxuICogQ3JlYXRlIGEgbmV3IEJhZ2dhZ2Ugd2l0aCBvcHRpb25hbCBlbnRyaWVzXG4gKlxuICogQHBhcmFtIGVudHJpZXMgQW4gYXJyYXkgb2YgYmFnZ2FnZSBlbnRyaWVzIHRoZSBuZXcgYmFnZ2FnZSBzaG91bGQgY29udGFpblxuICovXG5mdW5jdGlvbiBjcmVhdGVCYWdnYWdlKGVudHJpZXMpIHtcbiAgICBpZiAoZW50cmllcyA9PT0gdm9pZCAwKSB7IGVudHJpZXMgPSB7fTsgfVxuICAgIHJldHVybiBuZXcgQmFnZ2FnZUltcGwobmV3IE1hcChPYmplY3QuZW50cmllcyhlbnRyaWVzKSkpO1xufVxuLyoqXG4gKiBDcmVhdGUgYSBzZXJpYWxpemFibGUgQmFnZ2FnZUVudHJ5TWV0YWRhdGEgb2JqZWN0IGZyb20gYSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHN0ciBzdHJpbmcgbWV0YWRhdGEuIEZvcm1hdCBpcyBjdXJyZW50bHkgbm90IGRlZmluZWQgYnkgdGhlIHNwZWMgYW5kIGhhcyBubyBzcGVjaWFsIG1lYW5pbmcuXG4gKlxuICovXG5mdW5jdGlvbiBiYWdnYWdlRW50cnlNZXRhZGF0YUZyb21TdHJpbmcoc3RyKSB7XG4gICAgaWYgKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGRpYWcuZXJyb3IoXCJDYW5ub3QgY3JlYXRlIGJhZ2dhZ2UgbWV0YWRhdGEgZnJvbSB1bmtub3duIHR5cGU6IFwiICsgdHlwZW9mIHN0cik7XG4gICAgICAgIHN0ciA9ICcnO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBfX1RZUEVfXzogYmFnZ2FnZUVudHJ5TWV0YWRhdGFTeW1ib2wsXG4gICAgICAgIHRvU3RyaW5nOiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyO1xuICAgICAgICB9LFxuICAgIH07XG59XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgZGVmYXVsdFRleHRNYXBHZXR0ZXIgPSB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoY2Fycmllciwga2V5KSB7XG4gICAgICAgIGlmIChjYXJyaWVyID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhcnJpZXJba2V5XTtcbiAgICB9LFxuICAgIGtleXM6IGZ1bmN0aW9uIChjYXJyaWVyKSB7XG4gICAgICAgIGlmIChjYXJyaWVyID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoY2Fycmllcik7XG4gICAgfSxcbn07XG52YXIgZGVmYXVsdFRleHRNYXBTZXR0ZXIgPSB7XG4gICAgc2V0OiBmdW5jdGlvbiAoY2Fycmllciwga2V5LCB2YWx1ZSkge1xuICAgICAgICBpZiAoY2FycmllciA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY2FycmllcltrZXldID0gdmFsdWU7XG4gICAgfSxcbn07XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vKipcbiAqIE5vLW9wIGltcGxlbWVudGF0aW9ucyBvZiB7QGxpbmsgVGV4dE1hcFByb3BhZ2F0b3J9LlxuICovXG52YXIgTm9vcFRleHRNYXBQcm9wYWdhdG9yID0gLyoqIEBjbGFzcyAqLyAoZnVuY3Rpb24gKCkge1xuICAgIGZ1bmN0aW9uIE5vb3BUZXh0TWFwUHJvcGFnYXRvcigpIHtcbiAgICB9XG4gICAgLyoqIE5vb3AgaW5qZWN0IGZ1bmN0aW9uIGRvZXMgbm90aGluZyAqL1xuICAgIE5vb3BUZXh0TWFwUHJvcGFnYXRvci5wcm90b3R5cGUuaW5qZWN0ID0gZnVuY3Rpb24gKF9jb250ZXh0LCBfY2FycmllcikgeyB9O1xuICAgIC8qKiBOb29wIGV4dHJhY3QgZnVuY3Rpb24gZG9lcyBub3RoaW5nIGFuZCByZXR1cm5zIHRoZSBpbnB1dCBjb250ZXh0ICovXG4gICAgTm9vcFRleHRNYXBQcm9wYWdhdG9yLnByb3RvdHlwZS5leHRyYWN0ID0gZnVuY3Rpb24gKGNvbnRleHQsIF9jYXJyaWVyKSB7XG4gICAgICAgIHJldHVybiBjb250ZXh0O1xuICAgIH07XG4gICAgTm9vcFRleHRNYXBQcm9wYWdhdG9yLnByb3RvdHlwZS5maWVsZHMgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9O1xuICAgIHJldHVybiBOb29wVGV4dE1hcFByb3BhZ2F0b3I7XG59KCkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLyoqXG4gKiBCYWdnYWdlIGtleVxuICovXG52YXIgQkFHR0FHRV9LRVkgPSBjcmVhdGVDb250ZXh0S2V5KCdPcGVuVGVsZW1ldHJ5IEJhZ2dhZ2UgS2V5Jyk7XG4vKipcbiAqIFJldHJpZXZlIHRoZSBjdXJyZW50IGJhZ2dhZ2UgZnJvbSB0aGUgZ2l2ZW4gY29udGV4dFxuICpcbiAqIEBwYXJhbSB7Q29udGV4dH0gQ29udGV4dCB0aGF0IG1hbmFnZSBhbGwgY29udGV4dCB2YWx1ZXNcbiAqIEByZXR1cm5zIHtCYWdnYWdlfSBFeHRyYWN0ZWQgYmFnZ2FnZSBmcm9tIHRoZSBjb250ZXh0XG4gKi9cbmZ1bmN0aW9uIGdldEJhZ2dhZ2UoY29udGV4dCkge1xuICAgIHJldHVybiBjb250ZXh0LmdldFZhbHVlKEJBR0dBR0VfS0VZKSB8fCB1bmRlZmluZWQ7XG59XG4vKipcbiAqIFJldHJpZXZlIHRoZSBjdXJyZW50IGJhZ2dhZ2UgZnJvbSB0aGUgYWN0aXZlL2N1cnJlbnQgY29udGV4dFxuICpcbiAqIEByZXR1cm5zIHtCYWdnYWdlfSBFeHRyYWN0ZWQgYmFnZ2FnZSBmcm9tIHRoZSBjb250ZXh0XG4gKi9cbmZ1bmN0aW9uIGdldEFjdGl2ZUJhZ2dhZ2UoKSB7XG4gICAgcmV0dXJuIGdldEJhZ2dhZ2UoQ29udGV4dEFQSS5nZXRJbnN0YW5jZSgpLmFjdGl2ZSgpKTtcbn1cbi8qKlxuICogU3RvcmUgYSBiYWdnYWdlIGluIHRoZSBnaXZlbiBjb250ZXh0XG4gKlxuICogQHBhcmFtIHtDb250ZXh0fSBDb250ZXh0IHRoYXQgbWFuYWdlIGFsbCBjb250ZXh0IHZhbHVlc1xuICogQHBhcmFtIHtCYWdnYWdlfSBiYWdnYWdlIHRoYXQgd2lsbCBiZSBzZXQgaW4gdGhlIGFjdHVhbCBjb250ZXh0XG4gKi9cbmZ1bmN0aW9uIHNldEJhZ2dhZ2UoY29udGV4dCwgYmFnZ2FnZSkge1xuICAgIHJldHVybiBjb250ZXh0LnNldFZhbHVlKEJBR0dBR0VfS0VZLCBiYWdnYWdlKTtcbn1cbi8qKlxuICogRGVsZXRlIHRoZSBiYWdnYWdlIHN0b3JlZCBpbiB0aGUgZ2l2ZW4gY29udGV4dFxuICpcbiAqIEBwYXJhbSB7Q29udGV4dH0gQ29udGV4dCB0aGF0IG1hbmFnZSBhbGwgY29udGV4dCB2YWx1ZXNcbiAqL1xuZnVuY3Rpb24gZGVsZXRlQmFnZ2FnZShjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNvbnRleHQuZGVsZXRlVmFsdWUoQkFHR0FHRV9LRVkpO1xufVxuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIEFQSV9OQU1FID0gJ3Byb3BhZ2F0aW9uJztcbnZhciBOT09QX1RFWFRfTUFQX1BST1BBR0FUT1IgPSBuZXcgTm9vcFRleHRNYXBQcm9wYWdhdG9yKCk7XG4vKipcbiAqIFNpbmdsZXRvbiBvYmplY3Qgd2hpY2ggcmVwcmVzZW50cyB0aGUgZW50cnkgcG9pbnQgdG8gdGhlIE9wZW5UZWxlbWV0cnkgUHJvcGFnYXRpb24gQVBJXG4gKi9cbnZhciBQcm9wYWdhdGlvbkFQSSA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uICgpIHtcbiAgICAvKiogRW1wdHkgcHJpdmF0ZSBjb25zdHJ1Y3RvciBwcmV2ZW50cyBlbmQgdXNlcnMgZnJvbSBjb25zdHJ1Y3RpbmcgYSBuZXcgaW5zdGFuY2Ugb2YgdGhlIEFQSSAqL1xuICAgIGZ1bmN0aW9uIFByb3BhZ2F0aW9uQVBJKCkge1xuICAgICAgICB0aGlzLmNyZWF0ZUJhZ2dhZ2UgPSBjcmVhdGVCYWdnYWdlO1xuICAgICAgICB0aGlzLmdldEJhZ2dhZ2UgPSBnZXRCYWdnYWdlO1xuICAgICAgICB0aGlzLmdldEFjdGl2ZUJhZ2dhZ2UgPSBnZXRBY3RpdmVCYWdnYWdlO1xuICAgICAgICB0aGlzLnNldEJhZ2dhZ2UgPSBzZXRCYWdnYWdlO1xuICAgICAgICB0aGlzLmRlbGV0ZUJhZ2dhZ2UgPSBkZWxldGVCYWdnYWdlO1xuICAgIH1cbiAgICAvKiogR2V0IHRoZSBzaW5nbGV0b24gaW5zdGFuY2Ugb2YgdGhlIFByb3BhZ2F0b3IgQVBJICovXG4gICAgUHJvcGFnYXRpb25BUEkuZ2V0SW5zdGFuY2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICghdGhpcy5faW5zdGFuY2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2luc3RhbmNlID0gbmV3IFByb3BhZ2F0aW9uQVBJKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2luc3RhbmNlO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogU2V0IHRoZSBjdXJyZW50IHByb3BhZ2F0b3IuXG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBwcm9wYWdhdG9yIHdhcyBzdWNjZXNzZnVsbHkgcmVnaXN0ZXJlZCwgZWxzZSBmYWxzZVxuICAgICAqL1xuICAgIFByb3BhZ2F0aW9uQVBJLnByb3RvdHlwZS5zZXRHbG9iYWxQcm9wYWdhdG9yID0gZnVuY3Rpb24gKHByb3BhZ2F0b3IpIHtcbiAgICAgICAgcmV0dXJuIHJlZ2lzdGVyR2xvYmFsKEFQSV9OQU1FLCBwcm9wYWdhdG9yLCBEaWFnQVBJLmluc3RhbmNlKCkpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogSW5qZWN0IGNvbnRleHQgaW50byBhIGNhcnJpZXIgdG8gYmUgcHJvcGFnYXRlZCBpbnRlci1wcm9jZXNzXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IGNhcnJ5aW5nIHRyYWNpbmcgZGF0YSB0byBpbmplY3RcbiAgICAgKiBAcGFyYW0gY2FycmllciBjYXJyaWVyIHRvIGluamVjdCBjb250ZXh0IGludG9cbiAgICAgKiBAcGFyYW0gc2V0dGVyIEZ1bmN0aW9uIHVzZWQgdG8gc2V0IHZhbHVlcyBvbiB0aGUgY2FycmllclxuICAgICAqL1xuICAgIFByb3BhZ2F0aW9uQVBJLnByb3RvdHlwZS5pbmplY3QgPSBmdW5jdGlvbiAoY29udGV4dCwgY2Fycmllciwgc2V0dGVyKSB7XG4gICAgICAgIGlmIChzZXR0ZXIgPT09IHZvaWQgMCkgeyBzZXR0ZXIgPSBkZWZhdWx0VGV4dE1hcFNldHRlcjsgfVxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0R2xvYmFsUHJvcGFnYXRvcigpLmluamVjdChjb250ZXh0LCBjYXJyaWVyLCBzZXR0ZXIpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogRXh0cmFjdCBjb250ZXh0IGZyb20gYSBjYXJyaWVyXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY29udGV4dCBDb250ZXh0IHdoaWNoIHRoZSBuZXdseSBjcmVhdGVkIGNvbnRleHQgd2lsbCBpbmhlcml0IGZyb21cbiAgICAgKiBAcGFyYW0gY2FycmllciBDYXJyaWVyIHRvIGV4dHJhY3QgY29udGV4dCBmcm9tXG4gICAgICogQHBhcmFtIGdldHRlciBGdW5jdGlvbiB1c2VkIHRvIGV4dHJhY3Qga2V5cyBmcm9tIGEgY2FycmllclxuICAgICAqL1xuICAgIFByb3BhZ2F0aW9uQVBJLnByb3RvdHlwZS5leHRyYWN0ID0gZnVuY3Rpb24gKGNvbnRleHQsIGNhcnJpZXIsIGdldHRlcikge1xuICAgICAgICBpZiAoZ2V0dGVyID09PSB2b2lkIDApIHsgZ2V0dGVyID0gZGVmYXVsdFRleHRNYXBHZXR0ZXI7IH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldEdsb2JhbFByb3BhZ2F0b3IoKS5leHRyYWN0KGNvbnRleHQsIGNhcnJpZXIsIGdldHRlcik7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZXR1cm4gYSBsaXN0IG9mIGFsbCBmaWVsZHMgd2hpY2ggbWF5IGJlIHVzZWQgYnkgdGhlIHByb3BhZ2F0b3IuXG4gICAgICovXG4gICAgUHJvcGFnYXRpb25BUEkucHJvdG90eXBlLmZpZWxkcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldEdsb2JhbFByb3BhZ2F0b3IoKS5maWVsZHMoKTtcbiAgICB9O1xuICAgIC8qKiBSZW1vdmUgdGhlIGdsb2JhbCBwcm9wYWdhdG9yICovXG4gICAgUHJvcGFnYXRpb25BUEkucHJvdG90eXBlLmRpc2FibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHVucmVnaXN0ZXJHbG9iYWwoQVBJX05BTUUsIERpYWdBUEkuaW5zdGFuY2UoKSk7XG4gICAgfTtcbiAgICBQcm9wYWdhdGlvbkFQSS5wcm90b3R5cGUuX2dldEdsb2JhbFByb3BhZ2F0b3IgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBnZXRHbG9iYWwoQVBJX05BTUUpIHx8IE5PT1BfVEVYVF9NQVBfUFJPUEFHQVRPUjtcbiAgICB9O1xuICAgIHJldHVybiBQcm9wYWdhdGlvbkFQSTtcbn0oKSk7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vLyBTcGxpdCBtb2R1bGUtbGV2ZWwgdmFyaWFibGUgZGVmaW5pdGlvbiBpbnRvIHNlcGFyYXRlIGZpbGVzIHRvIGFsbG93XG4vLyB0cmVlLXNoYWtpbmcgb24gZWFjaCBhcGkgaW5zdGFuY2UuXG4vKiogRW50cnlwb2ludCBmb3IgcHJvcGFnYXRpb24gQVBJICovXG52YXIgcHJvcGFnYXRpb24gPSBQcm9wYWdhdGlvbkFQSS5nZXRJbnN0YW5jZSgpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuLy8gVXBkYXRlcyB0byB0aGlzIGZpbGUgc2hvdWxkIGFsc28gYmUgcmVwbGljYXRlZCB0byBAb3BlbnRlbGVtZXRyeS9hcGkgdG9vLlxuLyoqXG4gKiAtIGdsb2JhbFRoaXMgKE5ldyBzdGFuZGFyZClcbiAqIC0gc2VsZiAoV2lsbCByZXR1cm4gdGhlIGN1cnJlbnQgd2luZG93IGluc3RhbmNlIGZvciBzdXBwb3J0ZWQgYnJvd3NlcnMpXG4gKiAtIHdpbmRvdyAoZmFsbGJhY2sgZm9yIG9sZGVyIGJyb3dzZXIgaW1wbGVtZW50YXRpb25zKVxuICogLSBnbG9iYWwgKE5vZGVKUyBpbXBsZW1lbnRhdGlvbilcbiAqIC0gPG9iamVjdD4gKFdoZW4gYWxsIGVsc2UgZmFpbHMpXG4gKi9cbi8qKiBvbmx5IGdsb2JhbHMgdGhhdCBjb21tb24gdG8gbm9kZSBhbmQgYnJvd3NlcnMgYXJlIGFsbG93ZWQgKi9cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBub2RlL25vLXVuc3VwcG9ydGVkLWZlYXR1cmVzL2VzLWJ1aWx0aW5zLCBuby11bmRlZlxudmFyIF9nbG9iYWxUaGlzID0gdHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnXG4gICAgPyBnbG9iYWxUaGlzXG4gICAgOiB0eXBlb2Ygc2VsZiA9PT0gJ29iamVjdCdcbiAgICAgICAgPyBzZWxmXG4gICAgICAgIDogdHlwZW9mIHdpbmRvdyA9PT0gJ29iamVjdCdcbiAgICAgICAgICAgID8gd2luZG93XG4gICAgICAgICAgICA6IHR5cGVvZiBnbG9iYWwgPT09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgPyBnbG9iYWxcbiAgICAgICAgICAgICAgICA6IHt9O1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIG90cGVyZm9ybWFuY2UgPSBwZXJmb3JtYW5jZTtcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8gRE8gTk9UIEVESVQsIHRoaXMgaXMgYW4gQXV0by1nZW5lcmF0ZWQgZmlsZSBmcm9tIHNjcmlwdHMvc2VtY29udi90ZW1wbGF0ZXMvL3RlbXBsYXRlcy9TZW1hbnRpY0F0dHJpYnV0ZXMudHMuajJcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBDb25zdGFudCB2YWx1ZXMgZm9yIFNlbWFudGljQXR0cmlidXRlc1xuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBUZW1wb3JhcnkgbG9jYWwgY29uc3RhbnRzIHRvIGFzc2lnbiB0byB0aGUgaW5kaXZpZHVhbCBleHBvcnRzIGFuZCB0aGUgbmFtZXNwYWNlZCB2ZXJzaW9uXG4vLyBSZXF1aXJlZCB0byBhdm9pZCB0aGUgbmFtZXNwYWNlIGV4cG9ydHMgdXNpbmcgdGhlIHVubWluaWZpYWJsZSBleHBvcnQgbmFtZXMgZm9yIHNvbWUgcGFja2FnZSB0eXBlc1xudmFyIFRNUF9BV1NfTEFNQkRBX0lOVk9LRURfQVJOID0gJ2F3cy5sYW1iZGEuaW52b2tlZF9hcm4nO1xudmFyIFRNUF9EQl9TWVNURU0gPSAnZGIuc3lzdGVtJztcbnZhciBUTVBfREJfQ09OTkVDVElPTl9TVFJJTkcgPSAnZGIuY29ubmVjdGlvbl9zdHJpbmcnO1xudmFyIFRNUF9EQl9VU0VSID0gJ2RiLnVzZXInO1xudmFyIFRNUF9EQl9KREJDX0RSSVZFUl9DTEFTU05BTUUgPSAnZGIuamRiYy5kcml2ZXJfY2xhc3NuYW1lJztcbnZhciBUTVBfREJfTkFNRSA9ICdkYi5uYW1lJztcbnZhciBUTVBfREJfU1RBVEVNRU5UID0gJ2RiLnN0YXRlbWVudCc7XG52YXIgVE1QX0RCX09QRVJBVElPTiA9ICdkYi5vcGVyYXRpb24nO1xudmFyIFRNUF9EQl9NU1NRTF9JTlNUQU5DRV9OQU1FID0gJ2RiLm1zc3FsLmluc3RhbmNlX25hbWUnO1xudmFyIFRNUF9EQl9DQVNTQU5EUkFfS0VZU1BBQ0UgPSAnZGIuY2Fzc2FuZHJhLmtleXNwYWNlJztcbnZhciBUTVBfREJfQ0FTU0FORFJBX1BBR0VfU0laRSA9ICdkYi5jYXNzYW5kcmEucGFnZV9zaXplJztcbnZhciBUTVBfREJfQ0FTU0FORFJBX0NPTlNJU1RFTkNZX0xFVkVMID0gJ2RiLmNhc3NhbmRyYS5jb25zaXN0ZW5jeV9sZXZlbCc7XG52YXIgVE1QX0RCX0NBU1NBTkRSQV9UQUJMRSA9ICdkYi5jYXNzYW5kcmEudGFibGUnO1xudmFyIFRNUF9EQl9DQVNTQU5EUkFfSURFTVBPVEVOQ0UgPSAnZGIuY2Fzc2FuZHJhLmlkZW1wb3RlbmNlJztcbnZhciBUTVBfREJfQ0FTU0FORFJBX1NQRUNVTEFUSVZFX0VYRUNVVElPTl9DT1VOVCA9ICdkYi5jYXNzYW5kcmEuc3BlY3VsYXRpdmVfZXhlY3V0aW9uX2NvdW50JztcbnZhciBUTVBfREJfQ0FTU0FORFJBX0NPT1JESU5BVE9SX0lEID0gJ2RiLmNhc3NhbmRyYS5jb29yZGluYXRvci5pZCc7XG52YXIgVE1QX0RCX0NBU1NBTkRSQV9DT09SRElOQVRPUl9EQyA9ICdkYi5jYXNzYW5kcmEuY29vcmRpbmF0b3IuZGMnO1xudmFyIFRNUF9EQl9IQkFTRV9OQU1FU1BBQ0UgPSAnZGIuaGJhc2UubmFtZXNwYWNlJztcbnZhciBUTVBfREJfUkVESVNfREFUQUJBU0VfSU5ERVggPSAnZGIucmVkaXMuZGF0YWJhc2VfaW5kZXgnO1xudmFyIFRNUF9EQl9NT05HT0RCX0NPTExFQ1RJT04gPSAnZGIubW9uZ29kYi5jb2xsZWN0aW9uJztcbnZhciBUTVBfREJfU1FMX1RBQkxFID0gJ2RiLnNxbC50YWJsZSc7XG52YXIgVE1QX0VYQ0VQVElPTl9UWVBFID0gJ2V4Y2VwdGlvbi50eXBlJztcbnZhciBUTVBfRVhDRVBUSU9OX01FU1NBR0UgPSAnZXhjZXB0aW9uLm1lc3NhZ2UnO1xudmFyIFRNUF9FWENFUFRJT05fU1RBQ0tUUkFDRSA9ICdleGNlcHRpb24uc3RhY2t0cmFjZSc7XG52YXIgVE1QX0VYQ0VQVElPTl9FU0NBUEVEID0gJ2V4Y2VwdGlvbi5lc2NhcGVkJztcbnZhciBUTVBfRkFBU19UUklHR0VSID0gJ2ZhYXMudHJpZ2dlcic7XG52YXIgVE1QX0ZBQVNfRVhFQ1VUSU9OID0gJ2ZhYXMuZXhlY3V0aW9uJztcbnZhciBUTVBfRkFBU19ET0NVTUVOVF9DT0xMRUNUSU9OID0gJ2ZhYXMuZG9jdW1lbnQuY29sbGVjdGlvbic7XG52YXIgVE1QX0ZBQVNfRE9DVU1FTlRfT1BFUkFUSU9OID0gJ2ZhYXMuZG9jdW1lbnQub3BlcmF0aW9uJztcbnZhciBUTVBfRkFBU19ET0NVTUVOVF9USU1FID0gJ2ZhYXMuZG9jdW1lbnQudGltZSc7XG52YXIgVE1QX0ZBQVNfRE9DVU1FTlRfTkFNRSA9ICdmYWFzLmRvY3VtZW50Lm5hbWUnO1xudmFyIFRNUF9GQUFTX1RJTUUgPSAnZmFhcy50aW1lJztcbnZhciBUTVBfRkFBU19DUk9OID0gJ2ZhYXMuY3Jvbic7XG52YXIgVE1QX0ZBQVNfQ09MRFNUQVJUID0gJ2ZhYXMuY29sZHN0YXJ0JztcbnZhciBUTVBfRkFBU19JTlZPS0VEX05BTUUgPSAnZmFhcy5pbnZva2VkX25hbWUnO1xudmFyIFRNUF9GQUFTX0lOVk9LRURfUFJPVklERVIgPSAnZmFhcy5pbnZva2VkX3Byb3ZpZGVyJztcbnZhciBUTVBfRkFBU19JTlZPS0VEX1JFR0lPTiA9ICdmYWFzLmludm9rZWRfcmVnaW9uJztcbnZhciBUTVBfTkVUX1RSQU5TUE9SVCA9ICduZXQudHJhbnNwb3J0JztcbnZhciBUTVBfTkVUX1BFRVJfSVAgPSAnbmV0LnBlZXIuaXAnO1xudmFyIFRNUF9ORVRfUEVFUl9QT1JUID0gJ25ldC5wZWVyLnBvcnQnO1xudmFyIFRNUF9ORVRfUEVFUl9OQU1FID0gJ25ldC5wZWVyLm5hbWUnO1xudmFyIFRNUF9ORVRfSE9TVF9JUCA9ICduZXQuaG9zdC5pcCc7XG52YXIgVE1QX05FVF9IT1NUX1BPUlQgPSAnbmV0Lmhvc3QucG9ydCc7XG52YXIgVE1QX05FVF9IT1NUX05BTUUgPSAnbmV0Lmhvc3QubmFtZSc7XG52YXIgVE1QX05FVF9IT1NUX0NPTk5FQ1RJT05fVFlQRSA9ICduZXQuaG9zdC5jb25uZWN0aW9uLnR5cGUnO1xudmFyIFRNUF9ORVRfSE9TVF9DT05ORUNUSU9OX1NVQlRZUEUgPSAnbmV0Lmhvc3QuY29ubmVjdGlvbi5zdWJ0eXBlJztcbnZhciBUTVBfTkVUX0hPU1RfQ0FSUklFUl9OQU1FID0gJ25ldC5ob3N0LmNhcnJpZXIubmFtZSc7XG52YXIgVE1QX05FVF9IT1NUX0NBUlJJRVJfTUNDID0gJ25ldC5ob3N0LmNhcnJpZXIubWNjJztcbnZhciBUTVBfTkVUX0hPU1RfQ0FSUklFUl9NTkMgPSAnbmV0Lmhvc3QuY2Fycmllci5tbmMnO1xudmFyIFRNUF9ORVRfSE9TVF9DQVJSSUVSX0lDQyA9ICduZXQuaG9zdC5jYXJyaWVyLmljYyc7XG52YXIgVE1QX1BFRVJfU0VSVklDRSA9ICdwZWVyLnNlcnZpY2UnO1xudmFyIFRNUF9FTkRVU0VSX0lEID0gJ2VuZHVzZXIuaWQnO1xudmFyIFRNUF9FTkRVU0VSX1JPTEUgPSAnZW5kdXNlci5yb2xlJztcbnZhciBUTVBfRU5EVVNFUl9TQ09QRSA9ICdlbmR1c2VyLnNjb3BlJztcbnZhciBUTVBfVEhSRUFEX0lEID0gJ3RocmVhZC5pZCc7XG52YXIgVE1QX1RIUkVBRF9OQU1FID0gJ3RocmVhZC5uYW1lJztcbnZhciBUTVBfQ09ERV9GVU5DVElPTiA9ICdjb2RlLmZ1bmN0aW9uJztcbnZhciBUTVBfQ09ERV9OQU1FU1BBQ0UgPSAnY29kZS5uYW1lc3BhY2UnO1xudmFyIFRNUF9DT0RFX0ZJTEVQQVRIID0gJ2NvZGUuZmlsZXBhdGgnO1xudmFyIFRNUF9DT0RFX0xJTkVOTyA9ICdjb2RlLmxpbmVubyc7XG52YXIgVE1QX0hUVFBfTUVUSE9EID0gJ2h0dHAubWV0aG9kJztcbnZhciBUTVBfSFRUUF9VUkwgPSAnaHR0cC51cmwnO1xudmFyIFRNUF9IVFRQX1RBUkdFVCA9ICdodHRwLnRhcmdldCc7XG52YXIgVE1QX0hUVFBfSE9TVCA9ICdodHRwLmhvc3QnO1xudmFyIFRNUF9IVFRQX1NDSEVNRSA9ICdodHRwLnNjaGVtZSc7XG52YXIgVE1QX0hUVFBfU1RBVFVTX0NPREUgPSAnaHR0cC5zdGF0dXNfY29kZSc7XG52YXIgVE1QX0hUVFBfRkxBVk9SID0gJ2h0dHAuZmxhdm9yJztcbnZhciBUTVBfSFRUUF9VU0VSX0FHRU5UID0gJ2h0dHAudXNlcl9hZ2VudCc7XG52YXIgVE1QX0hUVFBfUkVRVUVTVF9DT05URU5UX0xFTkdUSCA9ICdodHRwLnJlcXVlc3RfY29udGVudF9sZW5ndGgnO1xudmFyIFRNUF9IVFRQX1JFUVVFU1RfQ09OVEVOVF9MRU5HVEhfVU5DT01QUkVTU0VEID0gJ2h0dHAucmVxdWVzdF9jb250ZW50X2xlbmd0aF91bmNvbXByZXNzZWQnO1xudmFyIFRNUF9IVFRQX1JFU1BPTlNFX0NPTlRFTlRfTEVOR1RIID0gJ2h0dHAucmVzcG9uc2VfY29udGVudF9sZW5ndGgnO1xudmFyIFRNUF9IVFRQX1JFU1BPTlNFX0NPTlRFTlRfTEVOR1RIX1VOQ09NUFJFU1NFRCA9ICdodHRwLnJlc3BvbnNlX2NvbnRlbnRfbGVuZ3RoX3VuY29tcHJlc3NlZCc7XG52YXIgVE1QX0hUVFBfU0VSVkVSX05BTUUgPSAnaHR0cC5zZXJ2ZXJfbmFtZSc7XG52YXIgVE1QX0hUVFBfUk9VVEUgPSAnaHR0cC5yb3V0ZSc7XG52YXIgVE1QX0hUVFBfQ0xJRU5UX0lQID0gJ2h0dHAuY2xpZW50X2lwJztcbnZhciBUTVBfQVdTX0RZTkFNT0RCX1RBQkxFX05BTUVTID0gJ2F3cy5keW5hbW9kYi50YWJsZV9uYW1lcyc7XG52YXIgVE1QX0FXU19EWU5BTU9EQl9DT05TVU1FRF9DQVBBQ0lUWSA9ICdhd3MuZHluYW1vZGIuY29uc3VtZWRfY2FwYWNpdHknO1xudmFyIFRNUF9BV1NfRFlOQU1PREJfSVRFTV9DT0xMRUNUSU9OX01FVFJJQ1MgPSAnYXdzLmR5bmFtb2RiLml0ZW1fY29sbGVjdGlvbl9tZXRyaWNzJztcbnZhciBUTVBfQVdTX0RZTkFNT0RCX1BST1ZJU0lPTkVEX1JFQURfQ0FQQUNJVFkgPSAnYXdzLmR5bmFtb2RiLnByb3Zpc2lvbmVkX3JlYWRfY2FwYWNpdHknO1xudmFyIFRNUF9BV1NfRFlOQU1PREJfUFJPVklTSU9ORURfV1JJVEVfQ0FQQUNJVFkgPSAnYXdzLmR5bmFtb2RiLnByb3Zpc2lvbmVkX3dyaXRlX2NhcGFjaXR5JztcbnZhciBUTVBfQVdTX0RZTkFNT0RCX0NPTlNJU1RFTlRfUkVBRCA9ICdhd3MuZHluYW1vZGIuY29uc2lzdGVudF9yZWFkJztcbnZhciBUTVBfQVdTX0RZTkFNT0RCX1BST0pFQ1RJT04gPSAnYXdzLmR5bmFtb2RiLnByb2plY3Rpb24nO1xudmFyIFRNUF9BV1NfRFlOQU1PREJfTElNSVQgPSAnYXdzLmR5bmFtb2RiLmxpbWl0JztcbnZhciBUTVBfQVdTX0RZTkFNT0RCX0FUVFJJQlVURVNfVE9fR0VUID0gJ2F3cy5keW5hbW9kYi5hdHRyaWJ1dGVzX3RvX2dldCc7XG52YXIgVE1QX0FXU19EWU5BTU9EQl9JTkRFWF9OQU1FID0gJ2F3cy5keW5hbW9kYi5pbmRleF9uY