@getopenpay/openpay-js 0.3.4 → 0.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ExportResult-Bo1QOwfo.js +19 -0
- package/dist/Resource-An2TTXLX.js +176 -0
- package/dist/SimpleSpanProcessor-DTBWGI5n.js +957 -0
- package/dist/_commonjsHelpers-DnMzE-71.js +25 -0
- package/dist/detect-resources-DR8R_DN6.js +854 -0
- package/dist/diag-api-Ck_l5qgD.js +6 -0
- package/dist/index-BDf1_xy1.js +830 -0
- package/dist/index-CBUINdAA.js +6685 -0
- package/dist/index-CHYLSCf3.js +19 -0
- package/dist/index-CtfVTSwI.js +52 -0
- package/dist/index-DUAfQijD.js +5286 -0
- package/dist/index-Dqd2L94L.js +130 -0
- package/dist/index-DvoH92Oq.js +1599 -0
- package/dist/index-J1_yL36v.js +150 -0
- package/dist/index-M878lnrF.js +330 -0
- package/dist/index-xSo7EjGK.js +431 -0
- package/dist/index.d.ts +19 -7
- package/dist/index.es.js +8 -4607
- package/dist/index.umd.js +28 -23
- package/dist/metrics-api-Qe5u_X_E.js +160 -0
- package/dist/sdk-info-SNq483aR.js +484 -0
- package/dist/url-BwiN4sTR.js +797 -0
- package/dist/utils-BGeftTvk.js +14 -0
- package/dist/utils-Bf1MO8XE.js +142 -0
- package/dist/utils-BqVpDqfk.js +381 -0
- package/package.json +2 -1
|
@@ -0,0 +1,431 @@
|
|
|
1
|
+
import { d as z } from "./diag-api-Ck_l5qgD.js";
|
|
2
|
+
import { b as G, c as I, d as W, e as X, p as _, i as V, f as K, g as Q, j as C, k as $, m as J } from "./url-BwiN4sTR.js";
|
|
3
|
+
import { s as Y, i as Z, I as q } from "./utils-BqVpDqfk.js";
|
|
4
|
+
import { _ as T } from "./utils-BGeftTvk.js";
|
|
5
|
+
import { P as O, b as P, p as N, s as ee, c as te } from "./utils-Bf1MO8XE.js";
|
|
6
|
+
import { t as x, c as p, S as re } from "./index-DUAfQijD.js";
|
|
7
|
+
var y;
|
|
8
|
+
(function(a) {
|
|
9
|
+
a.COMPONENT = "component", a.HTTP_ERROR_NAME = "http.error_name", a.HTTP_STATUS_TEXT = "http.status_text";
|
|
10
|
+
})(y || (y = {}));
|
|
11
|
+
var ne = function(a, o, e, r) {
|
|
12
|
+
function n(t) {
|
|
13
|
+
return t instanceof e ? t : new e(function(i) {
|
|
14
|
+
i(t);
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
return new (e || (e = Promise))(function(t, i) {
|
|
18
|
+
function s(c) {
|
|
19
|
+
try {
|
|
20
|
+
u(r.next(c));
|
|
21
|
+
} catch (h) {
|
|
22
|
+
i(h);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
function f(c) {
|
|
26
|
+
try {
|
|
27
|
+
u(r.throw(c));
|
|
28
|
+
} catch (h) {
|
|
29
|
+
i(h);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function u(c) {
|
|
33
|
+
c.done ? t(c.value) : n(c.value).then(s, f);
|
|
34
|
+
}
|
|
35
|
+
u((r = r.apply(a, o || [])).next());
|
|
36
|
+
});
|
|
37
|
+
}, ae = function(a, o) {
|
|
38
|
+
var e = { label: 0, sent: function() {
|
|
39
|
+
if (t[0] & 1) throw t[1];
|
|
40
|
+
return t[1];
|
|
41
|
+
}, trys: [], ops: [] }, r, n, t, i;
|
|
42
|
+
return i = { next: s(0), throw: s(1), return: s(2) }, typeof Symbol == "function" && (i[Symbol.iterator] = function() {
|
|
43
|
+
return this;
|
|
44
|
+
}), i;
|
|
45
|
+
function s(u) {
|
|
46
|
+
return function(c) {
|
|
47
|
+
return f([u, c]);
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
function f(u) {
|
|
51
|
+
if (r) throw new TypeError("Generator is already executing.");
|
|
52
|
+
for (; e; ) try {
|
|
53
|
+
if (r = 1, n && (t = u[0] & 2 ? n.return : u[0] ? n.throw || ((t = n.return) && t.call(n), 0) : n.next) && !(t = t.call(n, u[1])).done) return t;
|
|
54
|
+
switch (n = 0, t && (u = [u[0] & 2, t.value]), u[0]) {
|
|
55
|
+
case 0:
|
|
56
|
+
case 1:
|
|
57
|
+
t = u;
|
|
58
|
+
break;
|
|
59
|
+
case 4:
|
|
60
|
+
return e.label++, { value: u[1], done: !1 };
|
|
61
|
+
case 5:
|
|
62
|
+
e.label++, n = u[1], u = [0];
|
|
63
|
+
continue;
|
|
64
|
+
case 7:
|
|
65
|
+
u = e.ops.pop(), e.trys.pop();
|
|
66
|
+
continue;
|
|
67
|
+
default:
|
|
68
|
+
if (t = e.trys, !(t = t.length > 0 && t[t.length - 1]) && (u[0] === 6 || u[0] === 2)) {
|
|
69
|
+
e = 0;
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
if (u[0] === 3 && (!t || u[1] > t[0] && u[1] < t[3])) {
|
|
73
|
+
e.label = u[1];
|
|
74
|
+
break;
|
|
75
|
+
}
|
|
76
|
+
if (u[0] === 6 && e.label < t[1]) {
|
|
77
|
+
e.label = t[1], t = u;
|
|
78
|
+
break;
|
|
79
|
+
}
|
|
80
|
+
if (t && e.label < t[2]) {
|
|
81
|
+
e.label = t[2], e.ops.push(u);
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
t[2] && e.ops.pop(), e.trys.pop();
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
u = o.call(a, e);
|
|
88
|
+
} catch (c) {
|
|
89
|
+
u = [6, c], n = 0;
|
|
90
|
+
} finally {
|
|
91
|
+
r = t = 0;
|
|
92
|
+
}
|
|
93
|
+
if (u[0] & 5) throw u[1];
|
|
94
|
+
return { value: u[0] ? u[1] : void 0, done: !0 };
|
|
95
|
+
}
|
|
96
|
+
}, ie = function(a) {
|
|
97
|
+
var o = typeof Symbol == "function" && Symbol.iterator, e = o && a[o], r = 0;
|
|
98
|
+
if (e) return e.call(a);
|
|
99
|
+
if (a && typeof a.length == "number") return {
|
|
100
|
+
next: function() {
|
|
101
|
+
return a && r >= a.length && (a = void 0), { value: a && a[r++], done: !a };
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
throw new TypeError(o ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
105
|
+
}, oe = function(a, o) {
|
|
106
|
+
var e = typeof Symbol == "function" && a[Symbol.iterator];
|
|
107
|
+
if (!e) return a;
|
|
108
|
+
var r = e.call(a), n, t = [], i;
|
|
109
|
+
try {
|
|
110
|
+
for (; (o === void 0 || o-- > 0) && !(n = r.next()).done; ) t.push(n.value);
|
|
111
|
+
} catch (s) {
|
|
112
|
+
i = { error: s };
|
|
113
|
+
} finally {
|
|
114
|
+
try {
|
|
115
|
+
n && !n.done && (e = r.return) && e.call(r);
|
|
116
|
+
} finally {
|
|
117
|
+
if (i) throw i.error;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
return t;
|
|
121
|
+
}, U = z.createComponentLogger({
|
|
122
|
+
namespace: "@opentelemetry/opentelemetry-instrumentation-fetch/utils"
|
|
123
|
+
});
|
|
124
|
+
function se() {
|
|
125
|
+
for (var a = [], o = 0; o < arguments.length; o++)
|
|
126
|
+
a[o] = arguments[o];
|
|
127
|
+
if (a[0] instanceof URL || typeof a[0] == "string") {
|
|
128
|
+
var e = a[1];
|
|
129
|
+
if (!(e != null && e.body))
|
|
130
|
+
return Promise.resolve();
|
|
131
|
+
if (e.body instanceof ReadableStream) {
|
|
132
|
+
var r = ue(e.body), n = r.body, t = r.length;
|
|
133
|
+
return e.body = n, t;
|
|
134
|
+
} else
|
|
135
|
+
return Promise.resolve(fe(e.body));
|
|
136
|
+
} else {
|
|
137
|
+
var i = a[0];
|
|
138
|
+
return i != null && i.body ? i.clone().text().then(function(s) {
|
|
139
|
+
return b(s);
|
|
140
|
+
}) : Promise.resolve();
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
function ue(a) {
|
|
144
|
+
if (!a.pipeThrough)
|
|
145
|
+
return U.warn("Platform has ReadableStream but not pipeThrough!"), {
|
|
146
|
+
body: a,
|
|
147
|
+
length: Promise.resolve(void 0)
|
|
148
|
+
};
|
|
149
|
+
var o = 0, e, r = new Promise(function(t) {
|
|
150
|
+
e = t;
|
|
151
|
+
}), n = new TransformStream({
|
|
152
|
+
start: function() {
|
|
153
|
+
},
|
|
154
|
+
transform: function(t, i) {
|
|
155
|
+
return ne(this, void 0, void 0, function() {
|
|
156
|
+
var s;
|
|
157
|
+
return ae(this, function(f) {
|
|
158
|
+
switch (f.label) {
|
|
159
|
+
case 0:
|
|
160
|
+
return [4, t];
|
|
161
|
+
case 1:
|
|
162
|
+
return s = f.sent(), o += s.byteLength, i.enqueue(t), [
|
|
163
|
+
2
|
|
164
|
+
/*return*/
|
|
165
|
+
];
|
|
166
|
+
}
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
},
|
|
170
|
+
flush: function() {
|
|
171
|
+
e(o);
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
return {
|
|
175
|
+
body: a.pipeThrough(n),
|
|
176
|
+
length: r
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
function fe(a) {
|
|
180
|
+
if (typeof Document < "u" && a instanceof Document)
|
|
181
|
+
return new XMLSerializer().serializeToString(document).length;
|
|
182
|
+
if (a instanceof Blob)
|
|
183
|
+
return a.size;
|
|
184
|
+
if (a.byteLength !== void 0)
|
|
185
|
+
return a.byteLength;
|
|
186
|
+
if (a instanceof FormData)
|
|
187
|
+
return le(a);
|
|
188
|
+
if (a instanceof URLSearchParams)
|
|
189
|
+
return b(a.toString());
|
|
190
|
+
if (typeof a == "string")
|
|
191
|
+
return b(a);
|
|
192
|
+
U.warn("unknown body type");
|
|
193
|
+
}
|
|
194
|
+
var ce = new TextEncoder();
|
|
195
|
+
function b(a) {
|
|
196
|
+
return ce.encode(a).byteLength;
|
|
197
|
+
}
|
|
198
|
+
function le(a) {
|
|
199
|
+
var o, e, r = 0;
|
|
200
|
+
try {
|
|
201
|
+
for (var n = ie(a.entries()), t = n.next(); !t.done; t = n.next()) {
|
|
202
|
+
var i = oe(t.value, 2), s = i[0], f = i[1];
|
|
203
|
+
r += s.length, f instanceof Blob ? r += f.size : r += f.length;
|
|
204
|
+
}
|
|
205
|
+
} catch (u) {
|
|
206
|
+
o = { error: u };
|
|
207
|
+
} finally {
|
|
208
|
+
try {
|
|
209
|
+
t && !t.done && (e = n.return) && e.call(n);
|
|
210
|
+
} finally {
|
|
211
|
+
if (o) throw o.error;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
return r;
|
|
215
|
+
}
|
|
216
|
+
var k = "0.57.0", de = /* @__PURE__ */ function() {
|
|
217
|
+
var a = function(o, e) {
|
|
218
|
+
return a = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(r, n) {
|
|
219
|
+
r.__proto__ = n;
|
|
220
|
+
} || function(r, n) {
|
|
221
|
+
for (var t in n) Object.prototype.hasOwnProperty.call(n, t) && (r[t] = n[t]);
|
|
222
|
+
}, a(o, e);
|
|
223
|
+
};
|
|
224
|
+
return function(o, e) {
|
|
225
|
+
if (typeof e != "function" && e !== null)
|
|
226
|
+
throw new TypeError("Class extends value " + String(e) + " is not a constructor or null");
|
|
227
|
+
a(o, e);
|
|
228
|
+
function r() {
|
|
229
|
+
this.constructor = o;
|
|
230
|
+
}
|
|
231
|
+
o.prototype = e === null ? Object.create(e) : (r.prototype = e.prototype, new r());
|
|
232
|
+
};
|
|
233
|
+
}(), he = function(a, o) {
|
|
234
|
+
var e = typeof Symbol == "function" && a[Symbol.iterator];
|
|
235
|
+
if (!e) return a;
|
|
236
|
+
var r = e.call(a), n, t = [], i;
|
|
237
|
+
try {
|
|
238
|
+
for (; (o === void 0 || o-- > 0) && !(n = r.next()).done; ) t.push(n.value);
|
|
239
|
+
} catch (s) {
|
|
240
|
+
i = { error: s };
|
|
241
|
+
} finally {
|
|
242
|
+
try {
|
|
243
|
+
n && !n.done && (e = r.return) && e.call(r);
|
|
244
|
+
} finally {
|
|
245
|
+
if (i) throw i.error;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
return t;
|
|
249
|
+
}, pe = function(a, o, e) {
|
|
250
|
+
if (e || arguments.length === 2) for (var r = 0, n = o.length, t; r < n; r++)
|
|
251
|
+
(t || !(r in o)) && (t || (t = Array.prototype.slice.call(o, 0, r)), t[r] = o[r]);
|
|
252
|
+
return a.concat(t || Array.prototype.slice.call(o));
|
|
253
|
+
}, S, ve = 300, H = typeof process == "object" && ((S = process.release) === null || S === void 0 ? void 0 : S.name) === "node", be = (
|
|
254
|
+
/** @class */
|
|
255
|
+
function(a) {
|
|
256
|
+
de(o, a);
|
|
257
|
+
function o(e) {
|
|
258
|
+
e === void 0 && (e = {});
|
|
259
|
+
var r = a.call(this, "@opentelemetry/instrumentation-fetch", k, e) || this;
|
|
260
|
+
return r.component = "fetch", r.version = k, r.moduleName = r.component, r._usedResources = /* @__PURE__ */ new WeakSet(), r._tasksCount = 0, r;
|
|
261
|
+
}
|
|
262
|
+
return o.prototype.init = function() {
|
|
263
|
+
}, o.prototype._addChildSpan = function(e, r) {
|
|
264
|
+
var n = this.tracer.startSpan("CORS Preflight", {
|
|
265
|
+
startTime: r[O.FETCH_START]
|
|
266
|
+
}, x.setSpan(p.active(), e));
|
|
267
|
+
P(n, r, this.getConfig().ignoreNetworkEvents), n.end(r[O.RESPONSE_END]);
|
|
268
|
+
}, o.prototype._addFinalSpanAttributes = function(e, r) {
|
|
269
|
+
var n = N(r.url);
|
|
270
|
+
e.setAttribute(G, r.status), r.statusText != null && e.setAttribute(y.HTTP_STATUS_TEXT, r.statusText), e.setAttribute(I, n.host), e.setAttribute(W, n.protocol.replace(":", "")), typeof navigator < "u" && e.setAttribute(X, navigator.userAgent);
|
|
271
|
+
}, o.prototype._addHeaders = function(e, r) {
|
|
272
|
+
if (!ee(r, this.getConfig().propagateTraceHeaderCorsUrls)) {
|
|
273
|
+
var n = {};
|
|
274
|
+
_.inject(p.active(), n), Object.keys(n).length > 0 && this._diag.debug("headers inject skipped due to CORS policy");
|
|
275
|
+
return;
|
|
276
|
+
}
|
|
277
|
+
if (e instanceof Request)
|
|
278
|
+
_.inject(p.active(), e.headers, {
|
|
279
|
+
set: function(t, i, s) {
|
|
280
|
+
return t.set(i, typeof s == "string" ? s : String(s));
|
|
281
|
+
}
|
|
282
|
+
});
|
|
283
|
+
else if (e.headers instanceof Headers)
|
|
284
|
+
_.inject(p.active(), e.headers, {
|
|
285
|
+
set: function(t, i, s) {
|
|
286
|
+
return t.set(i, typeof s == "string" ? s : String(s));
|
|
287
|
+
}
|
|
288
|
+
});
|
|
289
|
+
else if (e.headers instanceof Map)
|
|
290
|
+
_.inject(p.active(), e.headers, {
|
|
291
|
+
set: function(t, i, s) {
|
|
292
|
+
return t.set(i, typeof s == "string" ? s : String(s));
|
|
293
|
+
}
|
|
294
|
+
});
|
|
295
|
+
else {
|
|
296
|
+
var n = {};
|
|
297
|
+
_.inject(p.active(), n), e.headers = Object.assign({}, n, e.headers || {});
|
|
298
|
+
}
|
|
299
|
+
}, o.prototype._clearResources = function() {
|
|
300
|
+
this._tasksCount === 0 && this.getConfig().clearTimingResources && (performance.clearResourceTimings(), this._usedResources = /* @__PURE__ */ new WeakSet());
|
|
301
|
+
}, o.prototype._createSpan = function(e, r) {
|
|
302
|
+
var n;
|
|
303
|
+
if (r === void 0 && (r = {}), V(e, this.getConfig().ignoreUrls)) {
|
|
304
|
+
this._diag.debug("ignoring span as url matches ignored url");
|
|
305
|
+
return;
|
|
306
|
+
}
|
|
307
|
+
var t = (r.method || "GET").toUpperCase(), i = "HTTP " + t;
|
|
308
|
+
return this.tracer.startSpan(i, {
|
|
309
|
+
kind: re.CLIENT,
|
|
310
|
+
attributes: (n = {}, n[y.COMPONENT] = this.moduleName, n[K] = t, n[Q] = e, n)
|
|
311
|
+
});
|
|
312
|
+
}, o.prototype._findResourceAndAddNetworkEvents = function(e, r, n) {
|
|
313
|
+
var t = r.entries;
|
|
314
|
+
if (!t.length) {
|
|
315
|
+
if (!performance.getEntriesByType)
|
|
316
|
+
return;
|
|
317
|
+
t = performance.getEntriesByType("resource");
|
|
318
|
+
}
|
|
319
|
+
var i = te(r.spanUrl, r.startTime, n, t, this._usedResources, "fetch");
|
|
320
|
+
if (i.mainRequest) {
|
|
321
|
+
var s = i.mainRequest;
|
|
322
|
+
this._markResourceAsUsed(s);
|
|
323
|
+
var f = i.corsPreFlightRequest;
|
|
324
|
+
f && (this._addChildSpan(e, f), this._markResourceAsUsed(f)), P(e, s, this.getConfig().ignoreNetworkEvents);
|
|
325
|
+
}
|
|
326
|
+
}, o.prototype._markResourceAsUsed = function(e) {
|
|
327
|
+
this._usedResources.add(e);
|
|
328
|
+
}, o.prototype._endSpan = function(e, r, n) {
|
|
329
|
+
var t = this, i = J(Date.now()), s = C();
|
|
330
|
+
this._addFinalSpanAttributes(e, n), setTimeout(function() {
|
|
331
|
+
var f;
|
|
332
|
+
(f = r.observer) === null || f === void 0 || f.disconnect(), t._findResourceAndAddNetworkEvents(e, r, s), t._tasksCount--, t._clearResources(), e.end(i);
|
|
333
|
+
}, ve);
|
|
334
|
+
}, o.prototype._patchConstructor = function() {
|
|
335
|
+
var e = this;
|
|
336
|
+
return function(r) {
|
|
337
|
+
var n = e;
|
|
338
|
+
return function() {
|
|
339
|
+
for (var i = [], s = 0; s < arguments.length; s++)
|
|
340
|
+
i[s] = arguments[s];
|
|
341
|
+
var f = this, u = N(i[0] instanceof Request ? i[0].url : String(i[0])).href, c = i[0] instanceof Request ? i[0] : i[1] || {}, h = n._createSpan(u, c);
|
|
342
|
+
if (!h)
|
|
343
|
+
return r.apply(this, i);
|
|
344
|
+
var m = n._prepareSpanData(u);
|
|
345
|
+
n.getConfig().measureRequestSize && se.apply(void 0, pe([], he(i), !1)).then(function(l) {
|
|
346
|
+
l && h.setAttribute($, l);
|
|
347
|
+
}).catch(function(l) {
|
|
348
|
+
n._diag.warn("getFetchBodyLength", l);
|
|
349
|
+
});
|
|
350
|
+
function E(l, d) {
|
|
351
|
+
n._applyAttributesAfterFetch(l, c, d), n._endSpan(l, m, {
|
|
352
|
+
status: d.status || 0,
|
|
353
|
+
statusText: d.message,
|
|
354
|
+
url: u
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
function w(l, d) {
|
|
358
|
+
n._applyAttributesAfterFetch(l, c, d), d.status >= 200 && d.status < 400 ? n._endSpan(l, m, d) : n._endSpan(l, m, {
|
|
359
|
+
status: d.status,
|
|
360
|
+
statusText: d.statusText,
|
|
361
|
+
url: u
|
|
362
|
+
});
|
|
363
|
+
}
|
|
364
|
+
function M(l, d, v) {
|
|
365
|
+
try {
|
|
366
|
+
var j = v.clone(), D = v.clone(), R = j.body;
|
|
367
|
+
if (R) {
|
|
368
|
+
var B = R.getReader(), A = function() {
|
|
369
|
+
B.read().then(function(g) {
|
|
370
|
+
var F = g.done;
|
|
371
|
+
F ? w(l, D) : A();
|
|
372
|
+
}, function(g) {
|
|
373
|
+
E(l, g);
|
|
374
|
+
});
|
|
375
|
+
};
|
|
376
|
+
A();
|
|
377
|
+
} else
|
|
378
|
+
w(l, v);
|
|
379
|
+
} finally {
|
|
380
|
+
d(v);
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
function L(l, d, v) {
|
|
384
|
+
try {
|
|
385
|
+
E(l, v);
|
|
386
|
+
} finally {
|
|
387
|
+
d(v);
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
return new Promise(function(l, d) {
|
|
391
|
+
return p.with(x.setSpan(p.active(), h), function() {
|
|
392
|
+
return n._addHeaders(c, u), n._tasksCount++, r.apply(f, c instanceof Request ? [c] : [u, c]).then(M.bind(f, h, l), L.bind(f, h, d));
|
|
393
|
+
});
|
|
394
|
+
});
|
|
395
|
+
};
|
|
396
|
+
};
|
|
397
|
+
}, o.prototype._applyAttributesAfterFetch = function(e, r, n) {
|
|
398
|
+
var t = this, i = this.getConfig().applyCustomAttributesOnSpan;
|
|
399
|
+
i && Y(function() {
|
|
400
|
+
return i(e, r, n);
|
|
401
|
+
}, function(s) {
|
|
402
|
+
s && t._diag.error("applyCustomAttributesOnSpan", s);
|
|
403
|
+
}, !0);
|
|
404
|
+
}, o.prototype._prepareSpanData = function(e) {
|
|
405
|
+
var r = C(), n = [];
|
|
406
|
+
if (typeof PerformanceObserver != "function")
|
|
407
|
+
return { entries: n, startTime: r, spanUrl: e };
|
|
408
|
+
var t = new PerformanceObserver(function(i) {
|
|
409
|
+
var s = i.getEntries();
|
|
410
|
+
s.forEach(function(f) {
|
|
411
|
+
f.initiatorType === "fetch" && f.name === e && n.push(f);
|
|
412
|
+
});
|
|
413
|
+
});
|
|
414
|
+
return t.observe({
|
|
415
|
+
entryTypes: ["resource"]
|
|
416
|
+
}), { entries: n, observer: t, startTime: r, spanUrl: e };
|
|
417
|
+
}, o.prototype.enable = function() {
|
|
418
|
+
if (H) {
|
|
419
|
+
this._diag.warn("this instrumentation is intended for web usage only, it does not instrument Node.js's fetch()");
|
|
420
|
+
return;
|
|
421
|
+
}
|
|
422
|
+
Z(fetch) && (this._unwrap(T, "fetch"), this._diag.debug("removing previous patch for constructor")), this._wrap(T, "fetch", this._patchConstructor());
|
|
423
|
+
}, o.prototype.disable = function() {
|
|
424
|
+
H || (this._unwrap(T, "fetch"), this._usedResources = /* @__PURE__ */ new WeakSet());
|
|
425
|
+
}, o;
|
|
426
|
+
}(q)
|
|
427
|
+
);
|
|
428
|
+
export {
|
|
429
|
+
be as FetchInstrumentation
|
|
430
|
+
};
|
|
431
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXgtIX57MDBlfX4uanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGQgYXMgZGlhZyB9IGZyb20gJy4vZGlhZy1hcGktIX57MDA0fX4uanMnO1xuaW1wb3J0IHsgYiBhcyBTRU1BVFRSU19IVFRQX1NUQVRVU19DT0RFLCBjIGFzIFNFTUFUVFJTX0hUVFBfSE9TVCwgZCBhcyBTRU1BVFRSU19IVFRQX1NDSEVNRSwgZSBhcyBTRU1BVFRSU19IVFRQX1VTRVJfQUdFTlQsIHAgYXMgcHJvcGFnYXRpb24sIGkgYXMgaXNVcmxJZ25vcmVkLCBmIGFzIFNFTUFUVFJTX0hUVFBfTUVUSE9ELCBnIGFzIFNFTUFUVFJTX0hUVFBfVVJMLCBqIGFzIGhyVGltZSwgayBhcyBTRU1BVFRSU19IVFRQX1JFUVVFU1RfQ09OVEVOVF9MRU5HVEhfVU5DT01QUkVTU0VELCBtIGFzIG1pbGxpc1RvSHJUaW1lIH0gZnJvbSAnLi91cmwtIX57MDA4fX4uanMnO1xuaW1wb3J0IHsgcyBhcyBzYWZlRXhlY3V0ZUluVGhlTWlkZGxlLCBpIGFzIGlzV3JhcHBlZCwgSSBhcyBJbnN0cnVtZW50YXRpb25CYXNlIH0gZnJvbSAnLi91dGlscy0hfnswMGZ9fi5qcyc7XG5pbXBvcnQgeyBfIGFzIF9nbG9iYWxUaGlzIH0gZnJvbSAnLi91dGlscy0hfnswMGJ9fi5qcyc7XG5pbXBvcnQgeyBQIGFzIFBlcmZvcm1hbmNlVGltaW5nTmFtZXMsIGIgYXMgYWRkU3Bhbk5ldHdvcmtFdmVudHMsIHAgYXMgcGFyc2VVcmwsIHMgYXMgc2hvdWxkUHJvcGFnYXRlVHJhY2VIZWFkZXJzLCBjIGFzIGdldFJlc291cmNlIH0gZnJvbSAnLi91dGlscy0hfnswMDd9fi5qcyc7XG5pbXBvcnQgeyB0IGFzIHRyYWNlLCBjIGFzIGNvbnRleHQsIFMgYXMgU3BhbktpbmQgfSBmcm9tICcuL2luZGV4LSF+ezAwNX1+LmpzJztcblxuLypcbiAqIENvcHlyaWdodCBUaGUgT3BlblRlbGVtZXRyeSBBdXRob3JzXG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqICAgICAgaHR0cHM6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cbi8qKlxuICogaHR0cHM6Ly9naXRodWIuY29tL29wZW4tdGVsZW1ldHJ5L29wZW50ZWxlbWV0cnktc3BlY2lmaWNhdGlvbi9ibG9iL21hc3Rlci9zcGVjaWZpY2F0aW9uL3RyYWNlL3NlbWFudGljX2NvbnZlbnRpb25zL2h0dHAubWRcbiAqL1xudmFyIEF0dHJpYnV0ZU5hbWVzO1xuKGZ1bmN0aW9uIChBdHRyaWJ1dGVOYW1lcykge1xuICAgIEF0dHJpYnV0ZU5hbWVzW1wiQ09NUE9ORU5UXCJdID0gXCJjb21wb25lbnRcIjtcbiAgICBBdHRyaWJ1dGVOYW1lc1tcIkhUVFBfRVJST1JfTkFNRVwiXSA9IFwiaHR0cC5lcnJvcl9uYW1lXCI7XG4gICAgQXR0cmlidXRlTmFtZXNbXCJIVFRQX1NUQVRVU19URVhUXCJdID0gXCJodHRwLnN0YXR1c190ZXh0XCI7XG59KShBdHRyaWJ1dGVOYW1lcyB8fCAoQXR0cmlidXRlTmFtZXMgPSB7fSkpO1xuXG4vKlxuICogQ29weXJpZ2h0IFRoZSBPcGVuVGVsZW1ldHJ5IEF1dGhvcnNcbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgICBodHRwczovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xudmFyIF9fYXdhaXRlciA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xudmFyIF9fZ2VuZXJhdG9yID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19nZW5lcmF0b3IpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBib2R5KSB7XG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICAgICAgd2hpbGUgKF8pIHRyeSB7XG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcbiAgICB9XG59O1xudmFyIF9fdmFsdWVzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX192YWx1ZXMpIHx8IGZ1bmN0aW9uKG8pIHtcbiAgICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xuICAgIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufTtcbnZhciBfX3JlYWQkMSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fcmVhZCkgfHwgZnVuY3Rpb24gKG8sIG4pIHtcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XG4gICAgaWYgKCFtKSByZXR1cm4gbztcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcbiAgICB0cnkge1xuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XG4gICAgZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcbiAgICAgICAgfVxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIGFyO1xufTtcbnZhciBESUFHX0xPR0dFUiA9IGRpYWcuY3JlYXRlQ29tcG9uZW50TG9nZ2VyKHtcbiAgICBuYW1lc3BhY2U6ICdAb3BlbnRlbGVtZXRyeS9vcGVudGVsZW1ldHJ5LWluc3RydW1lbnRhdGlvbi1mZXRjaC91dGlscycsXG59KTtcbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIGRldGVybWluZSBwYXlsb2FkIGNvbnRlbnQgbGVuZ3RoIGZvciBmZXRjaCByZXF1ZXN0c1xuICpcbiAqIFRoZSBmZXRjaCBBUEkgaXMga2luZGEgbWVzc3k6IHRoZXJlIGFyZSBhIGNvdXBsZSBvZiB3YXlzIHRoZSBib2R5IGNhbiBiZSBwYXNzZWQgaW4uXG4gKlxuICogSW4gYWxsIGNhc2VzLCB0aGUgYm9keSBwYXJhbSBjYW4gYmUgc29tZSB2YXJpYXRpb24gb2YgUmVhZGFibGVTdHJlYW0sXG4gKiBhbmQgUmVhZGFibGVTdHJlYW1zIGNhbiBvbmx5IGJlIHJlYWQgb25jZSEgV2Ugd2FudCB0byBhdm9pZCBjb25zdW1pbmcgdGhlIGJvZHkgaGVyZSxcbiAqIGJlY2F1c2UgdGhhdCB3b3VsZCBtZWFuIHRoYXQgdGhlIGJvZHkgbmV2ZXIgZ2V0cyBzZW50IHdpdGggdGhlIGFjdHVhbCBmZXRjaCByZXF1ZXN0LlxuICpcbiAqIEVpdGhlciB0aGUgZmlyc3QgYXJnIGlzIGEgUmVxdWVzdCBvYmplY3QsIHdoaWNoIGNhbiBiZSBjbG9uZWRcbiAqICAgc28gd2UgY2FuIGNsb25lIHRoYXQgb2JqZWN0IGFuZCByZWFkIHRoZSBib2R5IG9mIHRoZSBjbG9uZVxuICogICB3aXRob3V0IGRpc3R1cmJpbmcgdGhlIG9yaWdpbmFsIGFyZ3VtZW50XG4gKiAgIEhvd2V2ZXIsIHJlYWRpbmcgdGhlIGJvZHkgaGVyZSBjYW4gb25seSBiZSBkb25lIGFzeW5jOyB0aGUgYm9keSgpIG1ldGhvZCByZXR1cm5zIGEgcHJvbWlzZVxuICogICB0aGlzIG1lYW5zIHRoaXMgZW50aXJlIGZ1bmN0aW9uIGhhcyB0byByZXR1cm4gYSBwcm9taXNlXG4gKlxuICogT1IgdGhlIGZpcnN0IGFyZyBpcyBhIHVybC9zdHJpbmdcbiAqICAgaW4gd2hpY2ggY2FzZSB0aGUgc2Vjb25kIGFyZyBoYXMgdHlwZSBSZXF1ZXN0SW5pdFxuICogICBSZXF1ZXN0SW5pdCBpcyBOT1QgY2xvbmVhYmxlLCBidXQgUmVxdWVzdEluaXQuYm9keSBpcyB3cml0YWJsZVxuICogICBzbyB3ZSBjYW4gY2hhaW4gaXQgaW50byBSZWFkYWJsZVN0cmVhbS5waXBlVGhyb3VnaCgpXG4gKlxuICogICBSZWFkYWJsZVN0cmVhbS5waXBlVGhyb3VnaCgpIGxldHMgdXMgcHJvY2VzcyBhIHN0cmVhbSBhbmQgcmV0dXJucyBhIG5ldyBzdHJlYW1cbiAqICAgU28gd2UgY2FuIG1lYXN1cmUgdGhlIGJvZHkgbGVuZ3RoIGFzIGl0IHBhc3NlcyB0aHJvdWdoIHRoZSBwaWUsIGJ1dCBuZWVkIHRvIGF0dGFjaFxuICogICB0aGUgbmV3IHN0cmVhbSB0byB0aGUgb3JpZ2luYWwgcmVxdWVzdFxuICogICBzbyB0aGF0IHRoZSBicm93c2VyIHN0aWxsIGhhcyBhY2Nlc3MgdG8gdGhlIGJvZHkuXG4gKlxuICogQHBhcmFtIGJvZHlcbiAqIEByZXR1cm5zIHByb21pc2UgdGhhdCByZXNvbHZlcyB0byB0aGUgY29udGVudCBsZW5ndGggb2YgdGhlIGJvZHlcbiAqL1xuZnVuY3Rpb24gZ2V0RmV0Y2hCb2R5TGVuZ3RoKCkge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICBpZiAoYXJnc1swXSBpbnN0YW5jZW9mIFVSTCB8fCB0eXBlb2YgYXJnc1swXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdmFyIHJlcXVlc3RJbml0ID0gYXJnc1sxXTtcbiAgICAgICAgaWYgKCEocmVxdWVzdEluaXQgPT09IG51bGwgfHwgcmVxdWVzdEluaXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlcXVlc3RJbml0LmJvZHkpKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlcXVlc3RJbml0LmJvZHkgaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbSkge1xuICAgICAgICAgICAgdmFyIF9hID0gX2dldEJvZHlOb25EZXN0cnVjdGl2ZWx5KHJlcXVlc3RJbml0LmJvZHkpLCBib2R5ID0gX2EuYm9keSwgbGVuZ3RoXzEgPSBfYS5sZW5ndGg7XG4gICAgICAgICAgICByZXF1ZXN0SW5pdC5ib2R5ID0gYm9keTtcbiAgICAgICAgICAgIHJldHVybiBsZW5ndGhfMTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoZ2V0WEhSQm9keUxlbmd0aChyZXF1ZXN0SW5pdC5ib2R5KSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciBpbmZvID0gYXJnc1swXTtcbiAgICAgICAgaWYgKCEoaW5mbyA9PT0gbnVsbCB8fCBpbmZvID09PSB2b2lkIDAgPyB2b2lkIDAgOiBpbmZvLmJvZHkpKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGluZm9cbiAgICAgICAgICAgIC5jbG9uZSgpXG4gICAgICAgICAgICAudGV4dCgpXG4gICAgICAgICAgICAudGhlbihmdW5jdGlvbiAodCkgeyByZXR1cm4gZ2V0Qnl0ZUxlbmd0aCh0KTsgfSk7XG4gICAgfVxufVxuZnVuY3Rpb24gX2dldEJvZHlOb25EZXN0cnVjdGl2ZWx5KGJvZHkpIHtcbiAgICAvLyBjYW4ndCByZWFkIGEgUmVhZGFibGVTdHJlYW0gd2l0aG91dCBkZXN0cm95aW5nIGl0XG4gICAgLy8gYnV0IHdlIENBTiBwaXBlIGl0IHRocm91Z2ggYW5kIHJldHVybiBhIG5ldyBSZWFkYWJsZVN0cmVhbVxuICAgIC8vIHNvbWUgKG9sZGVyKSBwbGF0Zm9ybXMgZG9uJ3QgZXhwb3NlIHRoZSBwaXBlVGhyb3VnaCBtZXRob2QgYW5kIGluIHRoYXQgc2NlbmFyaW8sIHdlJ3JlIG91dCBvZiBsdWNrO1xuICAgIC8vICAgdGhlcmUncyBubyB3YXkgdG8gcmVhZCB0aGUgc3RyZWFtIHdpdGhvdXQgY29uc3VtaW5nIGl0LlxuICAgIGlmICghYm9keS5waXBlVGhyb3VnaCkge1xuICAgICAgICBESUFHX0xPR0dFUi53YXJuKCdQbGF0Zm9ybSBoYXMgUmVhZGFibGVTdHJlYW0gYnV0IG5vdCBwaXBlVGhyb3VnaCEnKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGJvZHk6IGJvZHksXG4gICAgICAgICAgICBsZW5ndGg6IFByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICB2YXIgbGVuZ3RoID0gMDtcbiAgICB2YXIgcmVzb2x2ZUxlbmd0aDtcbiAgICB2YXIgbGVuZ3RoUHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgIHJlc29sdmVMZW5ndGggPSByZXNvbHZlO1xuICAgIH0pO1xuICAgIHZhciB0cmFuc2Zvcm0gPSBuZXcgVHJhbnNmb3JtU3RyZWFtKHtcbiAgICAgICAgc3RhcnQ6IGZ1bmN0aW9uICgpIHsgfSxcbiAgICAgICAgdHJhbnNmb3JtOiBmdW5jdGlvbiAoY2h1bmssIGNvbnRyb2xsZXIpIHtcbiAgICAgICAgICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICB2YXIgYnl0ZWFycmF5O1xuICAgICAgICAgICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gWzQgLyp5aWVsZCovLCBjaHVua107XG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZWFycmF5ID0gKF9hLnNlbnQoKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoICs9IGJ5dGVhcnJheS5ieXRlTGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShjaHVuayk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZmx1c2g6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJlc29sdmVMZW5ndGgobGVuZ3RoKTtcbiAgICAgICAgfSxcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgICBib2R5OiBib2R5LnBpcGVUaHJvdWdoKHRyYW5zZm9ybSksXG4gICAgICAgIGxlbmd0aDogbGVuZ3RoUHJvbWlzZSxcbiAgICB9O1xufVxuLyoqXG4gKiBIZWxwZXIgZnVuY3Rpb24gdG8gZGV0ZXJtaW5lIHBheWxvYWQgY29udGVudCBsZW5ndGggZm9yIFhIUiByZXF1ZXN0c1xuICogQHBhcmFtIGJvZHlcbiAqIEByZXR1cm5zIGNvbnRlbnQgbGVuZ3RoXG4gKi9cbmZ1bmN0aW9uIGdldFhIUkJvZHlMZW5ndGgoYm9keSkge1xuICAgIGlmICh0eXBlb2YgRG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIGJvZHkgaW5zdGFuY2VvZiBEb2N1bWVudCkge1xuICAgICAgICByZXR1cm4gbmV3IFhNTFNlcmlhbGl6ZXIoKS5zZXJpYWxpemVUb1N0cmluZyhkb2N1bWVudCkubGVuZ3RoO1xuICAgIH1cbiAgICAvLyBYTUxIdHRwUmVxdWVzdEJvZHlJbml0IGV4cGFuZHMgdG8gdGhlIGZvbGxvd2luZzpcbiAgICBpZiAoYm9keSBpbnN0YW5jZW9mIEJsb2IpIHtcbiAgICAgICAgcmV0dXJuIGJvZHkuc2l6ZTtcbiAgICB9XG4gICAgLy8gQXJyYXlCdWZmZXIgfCBBcnJheUJ1ZmZlclZpZXdcbiAgICBpZiAoYm9keS5ieXRlTGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGJvZHkuYnl0ZUxlbmd0aDtcbiAgICB9XG4gICAgaWYgKGJvZHkgaW5zdGFuY2VvZiBGb3JtRGF0YSkge1xuICAgICAgICByZXR1cm4gZ2V0Rm9ybURhdGFTaXplKGJvZHkpO1xuICAgIH1cbiAgICBpZiAoYm9keSBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtcykge1xuICAgICAgICByZXR1cm4gZ2V0Qnl0ZUxlbmd0aChib2R5LnRvU3RyaW5nKCkpO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBnZXRCeXRlTGVuZ3RoKGJvZHkpO1xuICAgIH1cbiAgICBESUFHX0xPR0dFUi53YXJuKCd1bmtub3duIGJvZHkgdHlwZScpO1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG59XG52YXIgVEVYVF9FTkNPREVSID0gbmV3IFRleHRFbmNvZGVyKCk7XG5mdW5jdGlvbiBnZXRCeXRlTGVuZ3RoKHMpIHtcbiAgICByZXR1cm4gVEVYVF9FTkNPREVSLmVuY29kZShzKS5ieXRlTGVuZ3RoO1xufVxuZnVuY3Rpb24gZ2V0Rm9ybURhdGFTaXplKGZvcm1EYXRhKSB7XG4gICAgdmFyIGVfMSwgX2E7XG4gICAgdmFyIHNpemUgPSAwO1xuICAgIHRyeSB7XG4gICAgICAgIGZvciAodmFyIF9iID0gX192YWx1ZXMoZm9ybURhdGEuZW50cmllcygpKSwgX2MgPSBfYi5uZXh0KCk7ICFfYy5kb25lOyBfYyA9IF9iLm5leHQoKSkge1xuICAgICAgICAgICAgdmFyIF9kID0gX19yZWFkJDEoX2MudmFsdWUsIDIpLCBrZXkgPSBfZFswXSwgdmFsdWUgPSBfZFsxXTtcbiAgICAgICAgICAgIHNpemUgKz0ga2V5Lmxlbmd0aDtcbiAgICAgICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEJsb2IpIHtcbiAgICAgICAgICAgICAgICBzaXplICs9IHZhbHVlLnNpemU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBzaXplICs9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICBjYXRjaCAoZV8xXzEpIHsgZV8xID0geyBlcnJvcjogZV8xXzEgfTsgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKF9jICYmICFfYy5kb25lICYmIChfYSA9IF9iLnJldHVybikpIF9hLmNhbGwoX2IpO1xuICAgICAgICB9XG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7IH1cbiAgICB9XG4gICAgcmV0dXJuIHNpemU7XG59XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG4vLyB0aGlzIGlzIGF1dG9nZW5lcmF0ZWQgZmlsZSwgc2VlIHNjcmlwdHMvdmVyc2lvbi11cGRhdGUuanNcbnZhciBWRVJTSU9OID0gJzAuNTcuMCc7XG5cbi8qXG4gKiBDb3B5cmlnaHQgVGhlIE9wZW5UZWxlbWV0cnkgQXV0aG9yc1xuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgIGh0dHBzOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjBcbiAqXG4gKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlXG4gKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBcIkFTIElTXCIgQkFTSVMsXG4gKiBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC5cbiAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmRcbiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLlxuICovXG52YXIgX19leHRlbmRzID0gKHVuZGVmaW5lZCAmJiB1bmRlZmluZWQuX19leHRlbmRzKSB8fCAoZnVuY3Rpb24gKCkge1xuICAgIHZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxuICAgICAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxuICAgICAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcbiAgICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XG4gICAgfTtcbiAgICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICAgICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgICAgICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XG4gICAgICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgICB9O1xufSkoKTtcbnZhciBfX3JlYWQgPSAodW5kZWZpbmVkICYmIHVuZGVmaW5lZC5fX3JlYWQpIHx8IGZ1bmN0aW9uIChvLCBuKSB7XG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xuICAgIGlmICghbSkgcmV0dXJuIG87XG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XG4gICAgdHJ5IHtcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxuICAgIGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XG4gICAgICAgIH1cbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XG4gICAgfVxuICAgIHJldHVybiBhcjtcbn07XG52YXIgX19zcHJlYWRBcnJheSA9ICh1bmRlZmluZWQgJiYgdW5kZWZpbmVkLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSwgcGFjaykge1xuICAgIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59O1xudmFyIF9hO1xuLy8gaG93IGxvbmcgdG8gd2FpdCBmb3Igb2JzZXJ2ZXIgdG8gY29sbGVjdCBpbmZvcm1hdGlvbiBhYm91dCByZXNvdXJjZXNcbi8vIHRoaXMgaXMgbmVlZGVkIGFzIGV2ZW50IFwibG9hZFwiIGlzIGNhbGxlZCBiZWZvcmUgb2JzZXJ2ZXJcbi8vIGhhcmQgdG8gc2F5IGhvdyBsb25nIGl0IHNob3VsZCByZWFsbHkgd2FpdCwgc2VlbXMgbGlrZSAzMDBtcyBpc1xuLy8gc2FmZSBlbm91Z2hcbnZhciBPQlNFUlZFUl9XQUlUX1RJTUVfTVMgPSAzMDA7XG52YXIgaXNOb2RlID0gdHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmICgoX2EgPSBwcm9jZXNzLnJlbGVhc2UpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5uYW1lKSA9PT0gJ25vZGUnO1xuLyoqXG4gKiBUaGlzIGNsYXNzIHJlcHJlc2VudHMgYSBmZXRjaCBwbHVnaW4gZm9yIGF1dG8gaW5zdHJ1bWVudGF0aW9uXG4gKi9cbnZhciBGZXRjaEluc3RydW1lbnRhdGlvbiA9IC8qKiBAY2xhc3MgKi8gKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgICBfX2V4dGVuZHMoRmV0Y2hJbnN0cnVtZW50YXRpb24sIF9zdXBlcik7XG4gICAgZnVuY3Rpb24gRmV0Y2hJbnN0cnVtZW50YXRpb24oY29uZmlnKSB7XG4gICAgICAgIGlmIChjb25maWcgPT09IHZvaWQgMCkgeyBjb25maWcgPSB7fTsgfVxuICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCAnQG9wZW50ZWxlbWV0cnkvaW5zdHJ1bWVudGF0aW9uLWZldGNoJywgVkVSU0lPTiwgY29uZmlnKSB8fCB0aGlzO1xuICAgICAgICBfdGhpcy5jb21wb25lbnQgPSAnZmV0Y2gnO1xuICAgICAgICBfdGhpcy52ZXJzaW9uID0gVkVSU0lPTjtcbiAgICAgICAgX3RoaXMubW9kdWxlTmFtZSA9IF90aGlzLmNvbXBvbmVudDtcbiAgICAgICAgX3RoaXMuX3VzZWRSZXNvdXJjZXMgPSBuZXcgV2Vha1NldCgpO1xuICAgICAgICBfdGhpcy5fdGFza3NDb3VudCA9IDA7XG4gICAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG4gICAgRmV0Y2hJbnN0cnVtZW50YXRpb24ucHJvdG90eXBlLmluaXQgPSBmdW5jdGlvbiAoKSB7IH07XG4gICAgLyoqXG4gICAgICogQWRkIGNvcnMgcHJlIGZsaWdodCBjaGlsZCBzcGFuXG4gICAgICogQHBhcmFtIHNwYW5cbiAgICAgKiBAcGFyYW0gY29yc1ByZUZsaWdodFJlcXVlc3RcbiAgICAgKi9cbiAgICBGZXRjaEluc3RydW1lbnRhdGlvbi5wcm90b3R5cGUuX2FkZENoaWxkU3BhbiA9IGZ1bmN0aW9uIChzcGFuLCBjb3JzUHJlRmxpZ2h0UmVxdWVzdCkge1xuICAgICAgICB2YXIgY2hpbGRTcGFuID0gdGhpcy50cmFjZXIuc3RhcnRTcGFuKCdDT1JTIFByZWZsaWdodCcsIHtcbiAgICAgICAgICAgIHN0YXJ0VGltZTogY29yc1ByZUZsaWdodFJlcXVlc3RbUGVyZm9ybWFuY2VUaW1pbmdOYW1lcy5GRVRDSF9TVEFSVF0sXG4gICAgICAgIH0sIHRyYWNlLnNldFNwYW4oY29udGV4dC5hY3RpdmUoKSwgc3BhbikpO1xuICAgICAgICBhZGRTcGFuTmV0d29ya0V2ZW50cyhjaGlsZFNwYW4sIGNvcnNQcmVGbGlnaHRSZXF1ZXN0LCB0aGlzLmdldENvbmZpZygpLmlnbm9yZU5ldHdvcmtFdmVudHMpO1xuICAgICAgICBjaGlsZFNwYW4uZW5kKGNvcnNQcmVGbGlnaHRSZXF1ZXN0W1BlcmZvcm1hbmNlVGltaW5nTmFtZXMuUkVTUE9OU0VfRU5EXSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBBZGRzIG1vcmUgYXR0cmlidXRlcyB0byBzcGFuIGp1c3QgYmVmb3JlIGVuZGluZyBpdFxuICAgICAqIEBwYXJhbSBzcGFuXG4gICAgICogQHBhcmFtIHJlc3BvbnNlXG4gICAgICovXG4gICAgRmV0Y2hJbnN0cnVtZW50YXRpb24ucHJvdG90eXBlLl9hZGRGaW5hbFNwYW5BdHRyaWJ1dGVzID0gZnVuY3Rpb24gKHNwYW4sIHJlc3BvbnNlKSB7XG4gICAgICAgIHZhciBwYXJzZWRVcmwgPSBwYXJzZVVybChyZXNwb25zZS51cmwpO1xuICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShTRU1BVFRSU19IVFRQX1NUQVRVU19DT0RFLCByZXNwb25zZS5zdGF0dXMpO1xuICAgICAgICBpZiAocmVzcG9uc2Uuc3RhdHVzVGV4dCAhPSBudWxsKSB7XG4gICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShBdHRyaWJ1dGVOYW1lcy5IVFRQX1NUQVRVU19URVhULCByZXNwb25zZS5zdGF0dXNUZXh0KTtcbiAgICAgICAgfVxuICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShTRU1BVFRSU19IVFRQX0hPU1QsIHBhcnNlZFVybC5ob3N0KTtcbiAgICAgICAgc3Bhbi5zZXRBdHRyaWJ1dGUoU0VNQVRUUlNfSFRUUF9TQ0hFTUUsIHBhcnNlZFVybC5wcm90b2NvbC5yZXBsYWNlKCc6JywgJycpKTtcbiAgICAgICAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICBzcGFuLnNldEF0dHJpYnV0ZShTRU1BVFRSU19IVFRQX1VTRVJfQUdFTlQsIG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBBZGQgaGVhZGVyc1xuICAgICAqIEBwYXJhbSBvcHRpb25zXG4gICAgICogQHBhcmFtIHNwYW5VcmxcbiAgICAgKi9cbiAgICBGZXRjaEluc3RydW1lbnRhdGlvbi5wcm90b3R5cGUuX2FkZEhlYWRlcnMgPSBmdW5jdGlvbiAob3B0aW9ucywgc3BhblVybCkge1xuICAgICAgICBpZiAoIXNob3VsZFByb3BhZ2F0ZVRyYWNlSGVhZGVycyhzcGFuVXJsLCB0aGlzLmdldENvbmZpZygpLnByb3BhZ2F0ZVRyYWNlSGVhZGVyQ29yc1VybHMpKSB7XG4gICAgICAgICAgICB2YXIgaGVhZGVycyA9IHt9O1xuICAgICAgICAgICAgcHJvcGFnYXRpb24uaW5qZWN0KGNvbnRleHQuYWN0aXZlKCksIGhlYWRlcnMpO1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGhlYWRlcnMpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kaWFnLmRlYnVnKCdoZWFkZXJzIGluamVjdCBza2lwcGVkIGR1ZSB0byBDT1JTIHBvbGljeScpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChvcHRpb25zIGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgICAgICAgICAgcHJvcGFnYXRpb24uaW5qZWN0KGNvbnRleHQuYWN0aXZlKCksIG9wdGlvbnMuaGVhZGVycywge1xuICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKGgsIGssIHYpIHsgcmV0dXJuIGguc2V0KGssIHR5cGVvZiB2ID09PSAnc3RyaW5nJyA/IHYgOiBTdHJpbmcodikpOyB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAob3B0aW9ucy5oZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVycykge1xuICAgICAgICAgICAgcHJvcGFnYXRpb24uaW5qZWN0KGNvbnRleHQuYWN0aXZlKCksIG9wdGlvbnMuaGVhZGVycywge1xuICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKGgsIGssIHYpIHsgcmV0dXJuIGguc2V0KGssIHR5cGVvZiB2ID09PSAnc3RyaW5nJyA/IHYgOiBTdHJpbmcodikpOyB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAob3B0aW9ucy5oZWFkZXJzIGluc3RhbmNlb2YgTWFwKSB7XG4gICAgICAgICAgICBwcm9wYWdhdGlvbi5pbmplY3QoY29udGV4dC5hY3RpdmUoKSwgb3B0aW9ucy5oZWFkZXJzLCB7XG4gICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAoaCwgaywgdikgeyByZXR1cm4gaC5zZXQoaywgdHlwZW9mIHYgPT09ICdzdHJpbmcnID8gdiA6IFN0cmluZyh2KSk7IH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciBoZWFkZXJzID0ge307XG4gICAgICAgICAgICBwcm9wYWdhdGlvbi5pbmplY3QoY29udGV4dC5hY3RpdmUoKSwgaGVhZGVycyk7XG4gICAgICAgICAgICBvcHRpb25zLmhlYWRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCBoZWFkZXJzLCBvcHRpb25zLmhlYWRlcnMgfHwge30pO1xuICAgICAgICB9XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBDbGVhcnMgdGhlIHJlc291cmNlIHRpbWluZ3MgYW5kIGFsbCByZXNvdXJjZXMgYXNzaWduZWQgd2l0aCBzcGFuc1xuICAgICAqICAgICB3aGVuIHtAbGluayBGZXRjaFBsdWdpbkNvbmZpZy5jbGVhclRpbWluZ1Jlc291cmNlc30gaXNcbiAgICAgKiAgICAgc2V0IHRvIHRydWUgKGRlZmF1bHQgZmFsc2UpXG4gICAgICogQHByaXZhdGVcbiAgICAgKi9cbiAgICBGZXRjaEluc3RydW1lbnRhdGlvbi5wcm90b3R5cGUuX2NsZWFyUmVzb3VyY2VzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpcy5fdGFza3NDb3VudCA9PT0gMCAmJiB0aGlzLmdldENvbmZpZygpLmNsZWFyVGltaW5nUmVzb3VyY2VzKSB7XG4gICAgICAgICAgICBwZXJmb3JtYW5jZS5jbGVhclJlc291cmNlVGltaW5ncygpO1xuICAgICAgICAgICAgdGhpcy5fdXNlZFJlc291cmNlcyA9IG5ldyBXZWFrU2V0KCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYSBuZXcgc3BhblxuICAgICAqIEBwYXJhbSB1cmxcbiAgICAgKiBAcGFyYW0gb3B0aW9uc1xuICAgICAqL1xuICAgIEZldGNoSW5zdHJ1bWVudGF0aW9uLnByb3RvdHlwZS5fY3JlYXRlU3BhbiA9IGZ1bmN0aW9uICh1cmwsIG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7IG9wdGlvbnMgPSB7fTsgfVxuICAgICAgICBpZiAoaXNVcmxJZ25vcmVkKHVybCwgdGhpcy5nZXRDb25maWcoKS5pZ25vcmVVcmxzKSkge1xuICAgICAgICAgICAgdGhpcy5fZGlhZy5kZWJ1ZygnaWdub3Jpbmcgc3BhbiBhcyB1cmwgbWF0Y2hlcyBpZ25vcmVkIHVybCcpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHZhciBtZXRob2QgPSAob3B0aW9ucy5tZXRob2QgfHwgJ0dFVCcpLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgIHZhciBzcGFuTmFtZSA9IFwiSFRUUCBcIiArIG1ldGhvZDtcbiAgICAgICAgcmV0dXJuIHRoaXMudHJhY2VyLnN0YXJ0U3BhbihzcGFuTmFtZSwge1xuICAgICAgICAgICAga2luZDogU3BhbktpbmQuQ0xJRU5ULFxuICAgICAgICAgICAgYXR0cmlidXRlczogKF9hID0ge30sXG4gICAgICAgICAgICAgICAgX2FbQXR0cmlidXRlTmFtZXMuQ09NUE9ORU5UXSA9IHRoaXMubW9kdWxlTmFtZSxcbiAgICAgICAgICAgICAgICBfYVtTRU1BVFRSU19IVFRQX01FVEhPRF0gPSBtZXRob2QsXG4gICAgICAgICAgICAgICAgX2FbU0VNQVRUUlNfSFRUUF9VUkxdID0gdXJsLFxuICAgICAgICAgICAgICAgIF9hKSxcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBGaW5kcyBhcHByb3ByaWF0ZSByZXNvdXJjZSBhbmQgYWRkIG5ldHdvcmsgZXZlbnRzIHRvIHRoZSBzcGFuXG4gICAgICogQHBhcmFtIHNwYW5cbiAgICAgKiBAcGFyYW0gcmVzb3VyY2VzT2JzZXJ2ZXJcbiAgICAgKiBAcGFyYW0gZW5kVGltZVxuICAgICAqL1xuICAgIEZldGNoSW5zdHJ1bWVudGF0aW9uLnByb3RvdHlwZS5fZmluZFJlc291cmNlQW5kQWRkTmV0d29ya0V2ZW50cyA9IGZ1bmN0aW9uIChzcGFuLCByZXNvdXJjZXNPYnNlcnZlciwgZW5kVGltZSkge1xuICAgICAgICB2YXIgcmVzb3VyY2VzID0gcmVzb3VyY2VzT2JzZXJ2ZXIuZW50cmllcztcbiAgICAgICAgaWYgKCFyZXNvdXJjZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoIXBlcmZvcm1hbmNlLmdldEVudHJpZXNCeVR5cGUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBmYWxsYmFjayAtIGVpdGhlciBPYnNlcnZlciBpcyBub3QgYXZhaWxhYmxlIG9yIGl0IHRvb2sgbG9uZ2VyXG4gICAgICAgICAgICAvLyB0aGVuIE9CU0VSVkVSX1dBSVRfVElNRV9NUyBhbmQgb2JzZXJ2ZXIgZGlkbid0IGNvbGxlY3QgZW5vdWdoXG4gICAgICAgICAgICAvLyBpbmZvcm1hdGlvblxuICAgICAgICAgICAgcmVzb3VyY2VzID0gcGVyZm9ybWFuY2UuZ2V0RW50cmllc0J5VHlwZSgncmVzb3VyY2UnKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgcmVzb3VyY2UgPSBnZXRSZXNvdXJjZShyZXNvdXJjZXNPYnNlcnZlci5zcGFuVXJsLCByZXNvdXJjZXNPYnNlcnZlci5zdGFydFRpbWUsIGVuZFRpbWUsIHJlc291cmNlcywgdGhpcy5fdXNlZFJlc291cmNlcywgJ2ZldGNoJyk7XG4gICAgICAgIGlmIChyZXNvdXJjZS5tYWluUmVxdWVzdCkge1xuICAgICAgICAgICAgdmFyIG1haW5SZXF1ZXN0ID0gcmVzb3VyY2UubWFpblJlcXVlc3Q7XG4gICAgICAgICAgICB0aGlzLl9tYXJrUmVzb3VyY2VBc1VzZWQobWFpblJlcXVlc3QpO1xuICAgICAgICAgICAgdmFyIGNvcnNQcmVGbGlnaHRSZXF1ZXN0ID0gcmVzb3VyY2UuY29yc1ByZUZsaWdodFJlcXVlc3Q7XG4gICAgICAgICAgICBpZiAoY29yc1ByZUZsaWdodFJlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZGRDaGlsZFNwYW4oc3BhbiwgY29yc1ByZUZsaWdodFJlcXVlc3QpO1xuICAgICAgICAgICAgICAgIHRoaXMuX21hcmtSZXNvdXJjZUFzVXNlZChjb3JzUHJlRmxpZ2h0UmVxdWVzdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBhZGRTcGFuTmV0d29ya0V2ZW50cyhzcGFuLCBtYWluUmVxdWVzdCwgdGhpcy5nZXRDb25maWcoKS5pZ25vcmVOZXR3b3JrRXZlbnRzKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgLyoqXG4gICAgICogTWFya3MgY2VydGFpbiBbcmVzb3VyY2Vde0BsaW5rIFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmd9IHdoZW4gaW5mb3JtYXRpb25cbiAgICAgKiBmcm9tIHRoaXMgaXMgdXNlZCB0byBhZGQgZXZlbnRzIHRvIHNwYW4uXG4gICAgICogVGhpcyBpcyBkb25lIHRvIGF2b2lkIHJldXNpbmcgdGhlIHNhbWUgcmVzb3VyY2UgYWdhaW4gZm9yIG5leHQgc3BhblxuICAgICAqIEBwYXJhbSByZXNvdXJjZVxuICAgICAqL1xuICAgIEZldGNoSW5zdHJ1bWVudGF0aW9uLnByb3RvdHlwZS5fbWFya1Jlc291cmNlQXNVc2VkID0gZnVuY3Rpb24gKHJlc291cmNlKSB7XG4gICAgICAgIHRoaXMuX3VzZWRSZXNvdXJjZXMuYWRkKHJlc291cmNlKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIEZpbmlzaCBzcGFuLCBhZGQgYXR0cmlidXRlcywgbmV0d29yayBldmVudHMgZXRjLlxuICAgICAqIEBwYXJhbSBzcGFuXG4gICAgICogQHBhcmFtIHNwYW5EYXRhXG4gICAgICogQHBhcmFtIHJlc3BvbnNlXG4gICAgICovXG4gICAgRmV0Y2hJbnN0cnVtZW50YXRpb24ucHJvdG90eXBlLl9lbmRTcGFuID0gZnVuY3Rpb24gKHNwYW4sIHNwYW5EYXRhLCByZXNwb25zZSkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgZW5kVGltZSA9IG1pbGxpc1RvSHJUaW1lKERhdGUubm93KCkpO1xuICAgICAgICB2YXIgcGVyZm9ybWFuY2VFbmRUaW1lID0gaHJUaW1lKCk7XG4gICAgICAgIHRoaXMuX2FkZEZpbmFsU3BhbkF0dHJpYnV0ZXMoc3BhbiwgcmVzcG9uc2UpO1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBfYTtcbiAgICAgICAgICAgIChfYSA9IHNwYW5EYXRhLm9ic2VydmVyKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZGlzY29ubmVjdCgpO1xuICAgICAgICAgICAgX3RoaXMuX2ZpbmRSZXNvdXJjZUFuZEFkZE5ldHdvcmtFdmVudHMoc3Bhbiwgc3BhbkRhdGEsIHBlcmZvcm1hbmNlRW5kVGltZSk7XG4gICAgICAgICAgICBfdGhpcy5fdGFza3NDb3VudC0tO1xuICAgICAgICAgICAgX3RoaXMuX2NsZWFyUmVzb3VyY2VzKCk7XG4gICAgICAgICAgICBzcGFuLmVuZChlbmRUaW1lKTtcbiAgICAgICAgfSwgT0JTRVJWRVJfV0FJVF9USU1FX01TKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFBhdGNoZXMgdGhlIGNvbnN0cnVjdG9yIG9mIGZldGNoXG4gICAgICovXG4gICAgRmV0Y2hJbnN0cnVtZW50YXRpb24ucHJvdG90eXBlLl9wYXRjaENvbnN0cnVjdG9yID0gZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKG9yaWdpbmFsKSB7XG4gICAgICAgICAgICB2YXIgcGx1Z2luID0gX3RoaXM7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gcGF0Y2hDb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgICAgICAgICB2YXIgYXJncyA9IFtdO1xuICAgICAgICAgICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgICAgICAgICAgICAgIHZhciB1cmwgPSBwYXJzZVVybChhcmdzWzBdIGluc3RhbmNlb2YgUmVxdWVzdCA/IGFyZ3NbMF0udXJsIDogU3RyaW5nKGFyZ3NbMF0pKS5ocmVmO1xuICAgICAgICAgICAgICAgIHZhciBvcHRpb25zID0gYXJnc1swXSBpbnN0YW5jZW9mIFJlcXVlc3QgPyBhcmdzWzBdIDogYXJnc1sxXSB8fCB7fTtcbiAgICAgICAgICAgICAgICB2YXIgY3JlYXRlZFNwYW4gPSBwbHVnaW4uX2NyZWF0ZVNwYW4odXJsLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgICBpZiAoIWNyZWF0ZWRTcGFuKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIHNwYW5EYXRhID0gcGx1Z2luLl9wcmVwYXJlU3BhbkRhdGEodXJsKTtcbiAgICAgICAgICAgICAgICBpZiAocGx1Z2luLmdldENvbmZpZygpLm1lYXN1cmVSZXF1ZXN0U2l6ZSkge1xuICAgICAgICAgICAgICAgICAgICBnZXRGZXRjaEJvZHlMZW5ndGguYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQoYXJncyksIGZhbHNlKSkudGhlbihmdW5jdGlvbiAobGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWxlbmd0aClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVkU3Bhbi5zZXRBdHRyaWJ1dGUoU0VNQVRUUlNfSFRUUF9SRVFVRVNUX0NPTlRFTlRfTEVOR1RIX1VOQ09NUFJFU1NFRCwgbGVuZ3RoKTtcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIC5jYXRjaChmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbi5fZGlhZy53YXJuKCdnZXRGZXRjaEJvZHlMZW5ndGgnLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBlbmRTcGFuT25FcnJvcihzcGFuLCBlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBwbHVnaW4uX2FwcGx5QXR0cmlidXRlc0FmdGVyRmV0Y2goc3Bhbiwgb3B0aW9ucywgZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICBwbHVnaW4uX2VuZFNwYW4oc3Bhbiwgc3BhbkRhdGEsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1czogZXJyb3Iuc3RhdHVzIHx8IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0OiBlcnJvci5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiB1cmwsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmdW5jdGlvbiBlbmRTcGFuT25TdWNjZXNzKHNwYW4sIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHBsdWdpbi5fYXBwbHlBdHRyaWJ1dGVzQWZ0ZXJGZXRjaChzcGFuLCBvcHRpb25zLCByZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXNwb25zZS5zdGF0dXMgPj0gMjAwICYmIHJlc3BvbnNlLnN0YXR1cyA8IDQwMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luLl9lbmRTcGFuKHNwYW4sIHNwYW5EYXRhLCByZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwbHVnaW4uX2VuZFNwYW4oc3Bhbiwgc3BhbkRhdGEsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNUZXh0OiByZXNwb25zZS5zdGF0dXNUZXh0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogdXJsLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gb25TdWNjZXNzKHNwYW4sIHJlc29sdmUsIHJlc3BvbnNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzQ2xvbmUgPSByZXNwb25zZS5jbG9uZSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc0Nsb25lNEhvb2tfMSA9IHJlc3BvbnNlLmNsb25lKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgYm9keSA9IHJlc0Nsb25lLmJvZHk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYm9keSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciByZWFkZXJfMSA9IGJvZHkuZ2V0UmVhZGVyKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlYWRfMSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZGVyXzEucmVhZCgpLnRoZW4oZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZG9uZSA9IF9hLmRvbmU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZFNwYW5PblN1Y2Nlc3Moc3BhbiwgcmVzQ2xvbmU0SG9va18xKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRfMSgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBmdW5jdGlvbiAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZFNwYW5PbkVycm9yKHNwYW4sIGVycm9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWFkXzEoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNvbWUgb2xkZXIgYnJvd3NlcnMgZG9uJ3QgaGF2ZSAuYm9keSBpbXBsZW1lbnRlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZFNwYW5PblN1Y2Nlc3Moc3BhbiwgcmVzcG9uc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGZpbmFsbHkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZnVuY3Rpb24gb25FcnJvcihzcGFuLCByZWplY3QsIGVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRTcGFuT25FcnJvcihzcGFuLCBlcnJvcik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZmluYWxseSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb250ZXh0LndpdGgodHJhY2Uuc2V0U3Bhbihjb250ZXh0LmFjdGl2ZSgpLCBjcmVhdGVkU3BhbiksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsdWdpbi5fYWRkSGVhZGVycyhvcHRpb25zLCB1cmwpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcGx1Z2luLl90YXNrc0NvdW50Kys7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUeXBlU2NyaXB0IGNvbXBsYWlucyBhYm91dCBhcnJvdyBmdW5jdGlvbiBjYXB0dXJlZCBhIHRoaXMgdHlwZWQgYXMgZ2xvYmFsVGhpc1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdHMoNzA0MSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvcmlnaW5hbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5hcHBseShzZWxmLCBvcHRpb25zIGluc3RhbmNlb2YgUmVxdWVzdCA/IFtvcHRpb25zXSA6IFt1cmwsIG9wdGlvbnNdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKG9uU3VjY2Vzcy5iaW5kKHNlbGYsIGNyZWF0ZWRTcGFuLCByZXNvbHZlKSwgb25FcnJvci5iaW5kKHNlbGYsIGNyZWF0ZWRTcGFuLCByZWplY3QpKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH07XG4gICAgRmV0Y2hJbnN0cnVtZW50YXRpb24ucHJvdG90eXBlLl9hcHBseUF0dHJpYnV0ZXNBZnRlckZldGNoID0gZnVuY3Rpb24gKHNwYW4sIHJlcXVlc3QsIHJlc3VsdCkge1xuICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgICAgICB2YXIgYXBwbHlDdXN0b21BdHRyaWJ1dGVzT25TcGFuID0gdGhpcy5nZXRDb25maWcoKS5hcHBseUN1c3RvbUF0dHJpYnV0ZXNPblNwYW47XG4gICAgICAgIGlmIChhcHBseUN1c3RvbUF0dHJpYnV0ZXNPblNwYW4pIHtcbiAgICAgICAgICAgIHNhZmVFeGVjdXRlSW5UaGVNaWRkbGUoZnVuY3Rpb24gKCkgeyByZXR1cm4gYXBwbHlDdXN0b21BdHRyaWJ1dGVzT25TcGFuKHNwYW4sIHJlcXVlc3QsIHJlc3VsdCk7IH0sIGZ1bmN0aW9uIChlcnJvcikge1xuICAgICAgICAgICAgICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBfdGhpcy5fZGlhZy5lcnJvcignYXBwbHlDdXN0b21BdHRyaWJ1dGVzT25TcGFuJywgZXJyb3IpO1xuICAgICAgICAgICAgfSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFByZXBhcmVzIGEgc3BhbiBkYXRhIC0gbmVlZGVkIGxhdGVyIGZvciBtYXRjaGluZyBhcHByb3ByaWF0ZSBuZXR3b3JrXG4gICAgICogICAgIHJlc291cmNlc1xuICAgICAqIEBwYXJhbSBzcGFuVXJsXG4gICAgICovXG4gICAgRmV0Y2hJbnN0cnVtZW50YXRpb24ucHJvdG90eXBlLl9wcmVwYXJlU3BhbkRhdGEgPSBmdW5jdGlvbiAoc3BhblVybCkge1xuICAgICAgICB2YXIgc3RhcnRUaW1lID0gaHJUaW1lKCk7XG4gICAgICAgIHZhciBlbnRyaWVzID0gW107XG4gICAgICAgIGlmICh0eXBlb2YgUGVyZm9ybWFuY2VPYnNlcnZlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgcmV0dXJuIHsgZW50cmllczogZW50cmllcywgc3RhcnRUaW1lOiBzdGFydFRpbWUsIHNwYW5Vcmw6IHNwYW5VcmwgfTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgb2JzZXJ2ZXIgPSBuZXcgUGVyZm9ybWFuY2VPYnNlcnZlcihmdW5jdGlvbiAobGlzdCkge1xuICAgICAgICAgICAgdmFyIHBlcmZPYnNFbnRyaWVzID0gbGlzdC5nZXRFbnRyaWVzKCk7XG4gICAgICAgICAgICBwZXJmT2JzRW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uIChlbnRyeSkge1xuICAgICAgICAgICAgICAgIGlmIChlbnRyeS5pbml0aWF0b3JUeXBlID09PSAnZmV0Y2gnICYmIGVudHJ5Lm5hbWUgPT09IHNwYW5VcmwpIHtcbiAgICAgICAgICAgICAgICAgICAgZW50cmllcy5wdXNoKGVudHJ5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIG9ic2VydmVyLm9ic2VydmUoe1xuICAgICAgICAgICAgZW50cnlUeXBlczogWydyZXNvdXJjZSddLFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHsgZW50cmllczogZW50cmllcywgb2JzZXJ2ZXI6IG9ic2VydmVyLCBzdGFydFRpbWU6IHN0YXJ0VGltZSwgc3BhblVybDogc3BhblVybCB9O1xuICAgIH07XG4gICAgLyoqXG4gICAgICogaW1wbGVtZW50cyBlbmFibGUgZnVuY3Rpb25cbiAgICAgKi9cbiAgICBGZXRjaEluc3RydW1lbnRhdGlvbi5wcm90b3R5cGUuZW5hYmxlID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoaXNOb2RlKSB7XG4gICAgICAgICAgICAvLyBOb2RlLmpzIHYxOCsgKmRvZXMqIGhhdmUgYSBnbG9iYWwgYGZldGNoKClgLCBidXQgdGhpcyBwYWNrYWdlIGRvZXMgbm90XG4gICAgICAgICAgICAvLyBzdXBwb3J0IGluc3RydW1lbnRpbmcgaXQuXG4gICAgICAgICAgICB0aGlzLl9kaWFnLndhcm4oXCJ0aGlzIGluc3RydW1lbnRhdGlvbiBpcyBpbnRlbmRlZCBmb3Igd2ViIHVzYWdlIG9ubHksIGl0IGRvZXMgbm90IGluc3RydW1lbnQgTm9kZS5qcydzIGZldGNoKClcIik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzV3JhcHBlZChmZXRjaCkpIHtcbiAgICAgICAgICAgIHRoaXMuX3Vud3JhcChfZ2xvYmFsVGhpcywgJ2ZldGNoJyk7XG4gICAgICAgICAgICB0aGlzLl9kaWFnLmRlYnVnKCdyZW1vdmluZyBwcmV2aW91cyBwYXRjaCBmb3IgY29uc3RydWN0b3InKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl93cmFwKF9nbG9iYWxUaGlzLCAnZmV0Y2gnLCB0aGlzLl9wYXRjaENvbnN0cnVjdG9yKCkpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogaW1wbGVtZW50cyB1bnBhdGNoIGZ1bmN0aW9uXG4gICAgICovXG4gICAgRmV0Y2hJbnN0cnVtZW50YXRpb24ucHJvdG90eXBlLmRpc2FibGUgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChpc05vZGUpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl91bndyYXAoX2dsb2JhbFRoaXMsICdmZXRjaCcpO1xuICAgICAgICB0aGlzLl91c2VkUmVzb3VyY2VzID0gbmV3IFdlYWtTZXQoKTtcbiAgICB9O1xuICAgIHJldHVybiBGZXRjaEluc3RydW1lbnRhdGlvbjtcbn0oSW5zdHJ1bWVudGF0aW9uQmFzZSkpO1xuXG5leHBvcnQgeyBGZXRjaEluc3RydW1lbnRhdGlvbiB9OyJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFNBQVMsS0FBS0EsU0FBWTtBQUMxQixTQUFTLEtBQUtDLEdBQTJCLEtBQUtDLEdBQW9CLEtBQUtDLEdBQXNCLEtBQUtDLEdBQTBCLEtBQUtDLEdBQWEsS0FBS0MsR0FBYyxLQUFLQyxHQUFzQixLQUFLQyxHQUFtQixLQUFLQyxHQUFRLEtBQUtDLEdBQW1ELEtBQUtDLFNBQXNCO0FBQ3BULFNBQVMsS0FBS0MsR0FBd0IsS0FBS0MsR0FBVyxLQUFLQyxTQUEyQjtBQUN0RixTQUFTLEtBQUtDLFNBQW1CO0FBQ2pDLFNBQVMsS0FBS0MsR0FBd0IsS0FBS0MsR0FBc0IsS0FBS0MsR0FB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TUFDZixLQUFLLFFBQVFFLEdBQWEsT0FBTyxHQUNqQyxLQUFLLE1BQU0sTUFBTSx5Q0FBeUMsSUFFOUQsS0FBSyxNQUFNQSxHQUFhLFNBQVMsS0FBSyxrQkFBa0IsQ0FBQztBQUFBLElBQzdELEdBSUF1RixFQUFxQixVQUFVLFVBQVUsV0FBWTtBQUNqRCxNQUFJRCxNQUdKLEtBQUssUUFBUXRGLEdBQWEsT0FBTyxHQUNqQyxLQUFLLGlCQUFpQixvQkFBSSxRQUFRO0FBQUEsSUFDdEMsR0FDT3VGO0FBQUEsRUFDWCxFQUFFeEYsQ0FBbUI7QUFBQTsiLAogICJuYW1lcyI6IFsiZGlhZyIsICJTRU1BVFRSU19IVFRQX1NUQVRVU19DT0RFIiwgIlNFTUFUVFJTX0hUVFBfSE9TVCIsICJTRU1BVFRSU19IVFRQX1NDSEVNRSIsICJTRU1BVFRSU19IVFRQX1VTRVJfQUdFTlQiLCAicHJvcGFnYXRpb24iLCAiaXNVcmxJZ25vcmVkIiwgIlNFTUFUVFJTX0hUVFBfTUVUSE9EIiwgIlNFTUFUVFJTX0hUVFBfVVJMIiwgImhyVGltZSIsICJTRU1BVFRSU19IVFRQX1JFUVVFU1RfQ09OVEVOVF9MRU5HVEhfVU5DT01QUkVTU0VEIiwgIm1pbGxpc1RvSHJUaW1lIiwgInNhZmVFeGVjdXRlSW5UaGVNaWRkbGUiLCAiaXNXcmFwcGVkIiwgIkluc3RydW1lbnRhdGlvbkJhc2UiLCAiX2dsb2JhbFRoaXMiLCAiUGVyZm9ybWFuY2VUaW1pbmdOYW1lcyIsICJhZGRTcGFuTmV0d29ya0V2ZW50cyIsICJwYXJzZVVybCIsICJzaG91bGRQcm9wYWdhdGVUcmFjZUhlYWRlcnMiLCAiZ2V0UmVzb3VyY2UiLCAidHJhY2UiLCAiY29udGV4dCIsICJTcGFuS2luZCIsICJBdHRyaWJ1dGVOYW1lcyIsICJfX2F3YWl0ZXIiLCAidGhpc0FyZyIsICJfYXJndW1lbnRzIiwgIlAiLCAiZ2VuZXJhdG9yIiwgImFkb3B0IiwgInZhbHVlIiwgInJlc29sdmUiLCAicmVqZWN0IiwgImZ1bGZpbGxlZCIsICJzdGVwIiwgImUiLCAicmVqZWN0ZWQiLCAicmVzdWx0IiwgIl9fZ2VuZXJhdG9yIiwgImJvZHkiLCAiXyIsICJmIiwgInkiLCAiZyIsICJ2ZXJiIiwgIm4iLCAidiIsICJvcCIsICJfX3ZhbHVlcyIsICJvIiwgInMiLCAibSIsICJpIiwgIl9fcmVhZCQxIiwgInIiLCAiYXIiLCAiZXJyb3IiLCAiRElBR19MT0dHRVIiLCAiZ2V0RmV0Y2hCb2R5TGVuZ3RoIiwgImFyZ3MiLCAiX2kiLCAicmVxdWVzdEluaXQiLCAiX2EiLCAiX2dldEJvZHlOb25EZXN0cnVjdGl2ZWx5IiwgImxlbmd0aF8xIiwgImdldFhIUkJvZHlMZW5ndGgiLCAiaW5mbyIsICJ0IiwgImdldEJ5dGVMZW5ndGgiLCAibGVuZ3RoIiwgInJlc29sdmVMZW5ndGgiLCAibGVuZ3RoUHJvbWlzZSIsICJ0cmFuc2Zvcm0iLCAiY2h1bmsiLCAiY29udHJvbGxlciIsICJieXRlYXJyYXkiLCAiZ2V0Rm9ybURhdGFTaXplIiwgIlRFWFRfRU5DT0RFUiIsICJmb3JtRGF0YSIsICJlXzEiLCAic2l6ZSIsICJfYiIsICJfYyIsICJfZCIsICJrZXkiLCAiZV8xXzEiLCAiVkVSU0lPTiIsICJfX2V4dGVuZHMiLCAiZXh0ZW5kU3RhdGljcyIsICJkIiwgImIiLCAicCIsICJfXyIsICJfX3JlYWQiLCAiX19zcHJlYWRBcnJheSIsICJ0byIsICJmcm9tIiwgInBhY2siLCAibCIsICJPQlNFUlZFUl9XQUlUX1RJTUVfTVMiLCAiaXNOb2RlIiwgIkZldGNoSW5zdHJ1bWVudGF0aW9uIiwgIl9zdXBlciIsICJjb25maWciLCAiX3RoaXMiLCAic3BhbiIsICJjb3JzUHJlRmxpZ2h0UmVxdWVzdCIsICJjaGlsZFNwYW4iLCAicmVzcG9uc2UiLCAicGFyc2VkVXJsIiwgIm9wdGlvbnMiLCAic3BhblVybCIsICJoZWFkZXJzIiwgImgiLCAiayIsICJ1cmwiLCAibWV0aG9kIiwgInNwYW5OYW1lIiwgInJlc291cmNlc09ic2VydmVyIiwgImVuZFRpbWUiLCAicmVzb3VyY2VzIiwgInJlc291cmNlIiwgIm1haW5SZXF1ZXN0IiwgInNwYW5EYXRhIiwgInBlcmZvcm1hbmNlRW5kVGltZSIsICJvcmlnaW5hbCIsICJwbHVnaW4iLCAic2VsZiIsICJjcmVhdGVkU3BhbiIsICJlbmRTcGFuT25FcnJvciIsICJlbmRTcGFuT25TdWNjZXNzIiwgIm9uU3VjY2VzcyIsICJyZXNDbG9uZSIsICJyZXNDbG9uZTRIb29rXzEiLCAicmVhZGVyXzEiLCAicmVhZF8xIiwgImRvbmUiLCAib25FcnJvciIsICJyZXF1ZXN0IiwgImFwcGx5Q3VzdG9tQXR0cmlidXRlc09uU3BhbiIsICJzdGFydFRpbWUiLCAiZW50cmllcyIsICJvYnNlcnZlciIsICJsaXN0IiwgInBlcmZPYnNFbnRyaWVzIiwgImVudHJ5Il0KfQo=
|
package/dist/index.d.ts
CHANGED
|
@@ -70,9 +70,10 @@ declare type CCSubmitParams = {
|
|
|
70
70
|
paymentRouteId?: string;
|
|
71
71
|
};
|
|
72
72
|
|
|
73
|
-
declare
|
|
73
|
+
declare interface CdeConnection {
|
|
74
74
|
send: (data: CdeMessage) => Promise<unknown>;
|
|
75
|
-
|
|
75
|
+
tracingContext?: TracingContext;
|
|
76
|
+
}
|
|
76
77
|
|
|
77
78
|
declare type CdeMessage = {
|
|
78
79
|
type: string;
|
|
@@ -171,6 +172,7 @@ export declare type ElementsFormProps = {
|
|
|
171
172
|
baseUrl?: string;
|
|
172
173
|
formTarget?: string;
|
|
173
174
|
customInitParams?: CustomInitParams;
|
|
175
|
+
allowTracing?: boolean;
|
|
174
176
|
};
|
|
175
177
|
|
|
176
178
|
declare const ElementsStyle = <T extends z.ZodTypeAny>(placeholderType: T) =>
|
|
@@ -774,9 +776,9 @@ export declare class OpenPayForm {
|
|
|
774
776
|
/**
|
|
775
777
|
* Runs the common credit card flow
|
|
776
778
|
*/
|
|
777
|
-
submitCard: (params?: CCSubmitParams) => void
|
|
779
|
+
submitCard: (params?: CCSubmitParams) => Promise<void>;
|
|
778
780
|
private checkValidFormInstance;
|
|
779
|
-
getAvailablePaymentMethods: () => ({
|
|
781
|
+
getAvailablePaymentMethods: () => Promise<({
|
|
780
782
|
name: string;
|
|
781
783
|
} | {
|
|
782
784
|
processor: PaymentProcessor;
|
|
@@ -817,12 +819,12 @@ export declare class OpenPayForm {
|
|
|
817
819
|
isAvailable: boolean;
|
|
818
820
|
startFlow: () => Promise<void>;
|
|
819
821
|
name: string;
|
|
820
|
-
})[]
|
|
821
|
-
generalSubmit: <T extends SubmitMethod>(method: T, settings?: SubmitSettings<T>) => Promise<void
|
|
822
|
+
})[]>;
|
|
823
|
+
generalSubmit: <T extends SubmitMethod>(method: T, settings?: SubmitSettings<T>) => Promise<void>;
|
|
822
824
|
/**
|
|
823
825
|
* Alias for submitCard
|
|
824
826
|
*/
|
|
825
|
-
submit: (params?: CCSubmitParams) => void
|
|
827
|
+
submit: (params?: CCSubmitParams) => Promise<void>;
|
|
826
828
|
destroy: () => void;
|
|
827
829
|
/**
|
|
828
830
|
* Updates form callbacks after initialization
|
|
@@ -1188,6 +1190,16 @@ declare interface TokenResponse {
|
|
|
1188
1190
|
decimals: number;
|
|
1189
1191
|
}
|
|
1190
1192
|
|
|
1193
|
+
declare type TracingContext = {
|
|
1194
|
+
checkoutSecureToken?: string;
|
|
1195
|
+
deviceToken?: string;
|
|
1196
|
+
formId?: string;
|
|
1197
|
+
version?: string;
|
|
1198
|
+
releaseVersion?: string;
|
|
1199
|
+
baseUrl?: string;
|
|
1200
|
+
referrer?: string;
|
|
1201
|
+
};
|
|
1202
|
+
|
|
1191
1203
|
declare interface WalletChangeEvent {
|
|
1192
1204
|
address: string;
|
|
1193
1205
|
ens: string | undefined;
|