@getopenpay/openpay-js-react 0.5.7 → 0.5.8-alpha.a04a2c0

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.
Files changed (30) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/{Resource-CYhLip3Q-DLTtByUM.js → Resource-BxdlPosf-BU-btMxu.js} +3 -3
  3. package/dist/SimpleSpanProcessor-CXuBdhGa-oYEC06aS.js +957 -0
  4. package/dist/detect-resources-BLjLMi9_-DVwiUwKG.js +854 -0
  5. package/dist/diag-api-BuCGllIm-CSSDEk4h.js +6 -0
  6. package/dist/{index-ch7h9JbF-DvThz_LU.js → index-2FwFdPle-IvzEz5Im.js} +2 -2
  7. package/dist/{index-BRVXcl3i-Ce_G-nK2.js → index-B6NChLFW-CWojsumF.js} +2 -2
  8. package/dist/index-BacbHcO-.js +9254 -0
  9. package/dist/{index-jk5es6gk-7mELs6qG.js → index-Bg8gn_ez-fX_wKUm3.js} +5 -5
  10. package/dist/index-CYiB2_EI-CGwKccqW.js +830 -0
  11. package/dist/{index-CotG80Bk-CE41P0mx.js → index-CcUdQaCS-DSbEbkR1.js} +45 -45
  12. package/dist/index-CgL-iw_o-BYq28Cum.js +150 -0
  13. package/dist/{index-CvYLuKI_-CsqKTM6S.js → index-D99q2YFF-0As70bhX.js} +19 -19
  14. package/dist/{index-B4bNnoL1-Y0o-ewtR.js → index-mLjyuOF6-DUVfDxId.js} +14 -14
  15. package/dist/{index-DK_Vd59O-N0IeRlAN.js → index-s_MAJ2_l-BOhh4yNY.js} +6 -6
  16. package/dist/index.d.ts +4 -8
  17. package/dist/index.js +11 -11
  18. package/dist/{metrics-api-DU6bARgR-CSp-hO2G.js → metrics-api-CDJbs-jF-43-e8YmE.js} +10 -10
  19. package/dist/{sdk-info-DlJNVnE3-Bl7KexPx.js → sdk-info-CXhZdeKe-D0Os_gqS.js} +2 -2
  20. package/dist/url-Cj3Pp6uW-CH2BSmqY.js +797 -0
  21. package/dist/{utils-C3KXcM9P-BeoezoE5.js → utils-BnQ5aqUK-Dh-rQScY.js} +12 -12
  22. package/dist/{utils-DCKM_-Z--Cnw3ojZF.js → utils-D_jCys7z-5QQnktm8.js} +2 -2
  23. package/package.json +1 -1
  24. package/dist/SimpleSpanProcessor-35BQcG0i-DnxQ1HiA.js +0 -957
  25. package/dist/detect-resources-B4NNjO-E-qYZdWYCK.js +0 -854
  26. package/dist/diag-api-y7K9AIhE-BJzOWbe-.js +0 -6
  27. package/dist/index-B4pyRr9I.js +0 -9130
  28. package/dist/index-BZqtjc7o-DlI39xXm.js +0 -830
  29. package/dist/index-IHP1L6qt-B2iA86gl.js +0 -150
  30. package/dist/url-Dr4luTN_-CE3ij9Cd.js +0 -797
@@ -0,0 +1,957 @@
1
+ import { G as _, b as nt, J as b, u as ot, U as E, o as it, l as st, S as at } from "./index-BacbHcO-.js";
2
+ import { r as l } from "./diag-api-BuCGllIm-CSSDEk4h.js";
3
+ import { dC as j, dD as ut, dE as M, p as pt, O as A, dF as ct, dG as lt, cy as N, cw as D, y as ht, dH as V, dI as dt, cx as ft } from "./url-Cj3Pp6uW-CH2BSmqY.js";
4
+ import { Z as _t, a as R, n as f, w as mt, p as H, b as vt, c as yt, J as St, W as gt, s as Et, k as Tt, d as Y, t as bt } from "./index-CYiB2_EI-CGwKccqW.js";
5
+ import { bm as v, O as P, bn as Lt, bo as Pt, bp as wt } from "./sdk-info-CXhZdeKe-D0Os_gqS.js";
6
+ import { R as Q } from "./Resource-BxdlPosf-BU-btMxu.js";
7
+ import { a as w } from "./ExportResult-B-YLKMaU-DKI4wi_s.js";
8
+ var xt = "exception", U = function() {
9
+ return U = Object.assign || function(e) {
10
+ for (var t, r = 1, n = arguments.length; r < n; r++) {
11
+ t = arguments[r];
12
+ for (var i in t) Object.prototype.hasOwnProperty.call(t, i) && (e[i] = t[i]);
13
+ }
14
+ return e;
15
+ }, U.apply(this, arguments);
16
+ }, At = function(e) {
17
+ var t = typeof Symbol == "function" && Symbol.iterator, r = t && e[t], n = 0;
18
+ if (r) return r.call(e);
19
+ if (e && typeof e.length == "number") return {
20
+ next: function() {
21
+ return e && n >= e.length && (e = void 0), { value: e && e[n++], done: !e };
22
+ }
23
+ };
24
+ throw new TypeError(t ? "Object is not iterable." : "Symbol.iterator is not defined.");
25
+ }, X = function(e, t) {
26
+ var r = typeof Symbol == "function" && e[Symbol.iterator];
27
+ if (!r) return e;
28
+ var n = r.call(e), i, o = [], s;
29
+ try {
30
+ for (; (t === void 0 || t-- > 0) && !(i = n.next()).done; ) o.push(i.value);
31
+ } catch (a) {
32
+ s = { error: a };
33
+ } finally {
34
+ try {
35
+ i && !i.done && (r = n.return) && r.call(n);
36
+ } finally {
37
+ if (s) throw s.error;
38
+ }
39
+ }
40
+ return o;
41
+ }, Ot = function(e, t, r) {
42
+ if (arguments.length === 2) for (var n = 0, i = t.length, o; n < i; n++)
43
+ (o || !(n in t)) && (o || (o = Array.prototype.slice.call(t, 0, n)), o[n] = t[n]);
44
+ return e.concat(o || Array.prototype.slice.call(t));
45
+ }, Ct = (
46
+ /** @class */
47
+ function() {
48
+ function e(t, r, n, i, o, s, a, p, u, c) {
49
+ a === void 0 && (a = []), this.attributes = {}, this.links = [], this.events = [], this._droppedAttributesCount = 0, this._droppedEventsCount = 0, this._droppedLinksCount = 0, this.status = {
50
+ code: at.UNSET
51
+ }, this.endTime = [0, 0], this._ended = !1, this._duration = [-1, -1], this.name = n, this._spanContext = i, this.parentSpanId = s, this.kind = o, this.links = a;
52
+ var h = Date.now();
53
+ this._performanceStartTime = M.now(), this._performanceOffset = h - (this._performanceStartTime + dt()), this._startTimeProvided = p != null, this.startTime = this._getTime(p ?? h), this.resource = t.resource, this.instrumentationLibrary = t.instrumentationLibrary, this._spanLimits = t.getSpanLimits(), this._attributeValueLengthLimit = this._spanLimits.attributeValueLengthLimit || 0, c != null && this.setAttributes(c), this._spanProcessor = t.getActiveSpanProcessor(), this._spanProcessor.onStart(this, r);
54
+ }
55
+ return e.prototype.spanContext = function() {
56
+ return this._spanContext;
57
+ }, e.prototype.setAttribute = function(t, r) {
58
+ return r == null || this._isSpanEnded() ? this : t.length === 0 ? (l.warn("Invalid attribute key: " + t), this) : _t(r) ? Object.keys(this.attributes).length >= this._spanLimits.attributeCountLimit && !Object.prototype.hasOwnProperty.call(this.attributes, t) ? (this._droppedAttributesCount++, this) : (this.attributes[t] = this._truncateToSize(r), this) : (l.warn("Invalid attribute value set for key: " + t), this);
59
+ }, e.prototype.setAttributes = function(t) {
60
+ var r, n;
61
+ try {
62
+ for (var i = At(Object.entries(t)), o = i.next(); !o.done; o = i.next()) {
63
+ var s = X(o.value, 2), a = s[0], p = s[1];
64
+ this.setAttribute(a, p);
65
+ }
66
+ } catch (u) {
67
+ r = { error: u };
68
+ } finally {
69
+ try {
70
+ o && !o.done && (n = i.return) && n.call(i);
71
+ } finally {
72
+ if (r) throw r.error;
73
+ }
74
+ }
75
+ return this;
76
+ }, e.prototype.addEvent = function(t, r, n) {
77
+ if (this._isSpanEnded())
78
+ return this;
79
+ if (this._spanLimits.eventCountLimit === 0)
80
+ return l.warn("No events allowed."), this._droppedEventsCount++, this;
81
+ this.events.length >= this._spanLimits.eventCountLimit && (this._droppedEventsCount === 0 && l.debug("Dropping extra events."), this.events.shift(), this._droppedEventsCount++), j(r) && (j(n) || (n = r), r = void 0);
82
+ var i = R(r);
83
+ return this.events.push({
84
+ name: t,
85
+ attributes: i,
86
+ time: this._getTime(n),
87
+ droppedAttributesCount: 0
88
+ }), this;
89
+ }, e.prototype.addLink = function(t) {
90
+ return this.links.push(t), this;
91
+ }, e.prototype.addLinks = function(t) {
92
+ var r;
93
+ return (r = this.links).push.apply(r, Ot([], X(t), !1)), this;
94
+ }, e.prototype.setStatus = function(t) {
95
+ return this._isSpanEnded() ? this : (this.status = U({}, t), this.status.message != null && typeof t.message != "string" && (l.warn("Dropping invalid status.message of type '" + typeof t.message + "', expected 'string'"), delete this.status.message), this);
96
+ }, e.prototype.updateName = function(t) {
97
+ return this._isSpanEnded() ? this : (this.name = t, this);
98
+ }, e.prototype.end = function(t) {
99
+ if (this._isSpanEnded()) {
100
+ l.error(this.name + " " + this._spanContext.traceId + "-" + this._spanContext.spanId + " - You can only call end() on a span once.");
101
+ return;
102
+ }
103
+ this._ended = !0, this.endTime = this._getTime(t), this._duration = ut(this.startTime, this.endTime), this._duration[0] < 0 && (l.warn("Inconsistent start and end time, startTime > endTime. Setting span duration to 0ms.", this.startTime, this.endTime), this.endTime = this.startTime.slice(), this._duration = [0, 0]), this._droppedEventsCount > 0 && l.warn("Dropped " + this._droppedEventsCount + " events because eventCountLimit reached"), this._spanProcessor.onEnd(this);
104
+ }, e.prototype._getTime = function(t) {
105
+ if (typeof t == "number" && t <= M.now())
106
+ return pt(t + this._performanceOffset);
107
+ if (typeof t == "number")
108
+ return A(t);
109
+ if (t instanceof Date)
110
+ return A(t.getTime());
111
+ if (ct(t))
112
+ return t;
113
+ if (this._startTimeProvided)
114
+ return A(Date.now());
115
+ var r = M.now() - this._performanceStartTime;
116
+ return lt(this.startTime, A(r));
117
+ }, e.prototype.isRecording = function() {
118
+ return this._ended === !1;
119
+ }, e.prototype.recordException = function(t, r) {
120
+ var n = {};
121
+ typeof t == "string" ? n[D] = t : t && (t.code ? n[N] = t.code.toString() : t.name && (n[N] = t.name), t.message && (n[D] = t.message), t.stack && (n[ft] = t.stack)), n[N] || n[D] ? this.addEvent(xt, n, r) : l.warn("Failed to record an exception " + t);
122
+ }, Object.defineProperty(e.prototype, "duration", {
123
+ get: function() {
124
+ return this._duration;
125
+ },
126
+ enumerable: !1,
127
+ configurable: !0
128
+ }), Object.defineProperty(e.prototype, "ended", {
129
+ get: function() {
130
+ return this._ended;
131
+ },
132
+ enumerable: !1,
133
+ configurable: !0
134
+ }), Object.defineProperty(e.prototype, "droppedAttributesCount", {
135
+ get: function() {
136
+ return this._droppedAttributesCount;
137
+ },
138
+ enumerable: !1,
139
+ configurable: !0
140
+ }), Object.defineProperty(e.prototype, "droppedEventsCount", {
141
+ get: function() {
142
+ return this._droppedEventsCount;
143
+ },
144
+ enumerable: !1,
145
+ configurable: !0
146
+ }), Object.defineProperty(e.prototype, "droppedLinksCount", {
147
+ get: function() {
148
+ return this._droppedLinksCount;
149
+ },
150
+ enumerable: !1,
151
+ configurable: !0
152
+ }), e.prototype._isSpanEnded = function() {
153
+ return this._ended && l.warn("Can not execute the operation on ended Span {traceId: " + this._spanContext.traceId + ", spanId: " + this._spanContext.spanId + "}"), this._ended;
154
+ }, e.prototype._truncateToLimitUtil = function(t, r) {
155
+ return t.length <= r ? t : t.substring(0, r);
156
+ }, e.prototype._truncateToSize = function(t) {
157
+ var r = this, n = this._attributeValueLengthLimit;
158
+ return n <= 0 ? (l.warn("Attribute value limit must be positive, got " + n), t) : typeof t == "string" ? this._truncateToLimitUtil(t, n) : Array.isArray(t) ? t.map(function(i) {
159
+ return typeof i == "string" ? r._truncateToLimitUtil(i, n) : i;
160
+ }) : t;
161
+ }, e;
162
+ }()
163
+ ), L;
164
+ (function(e) {
165
+ e[e.NOT_RECORD = 0] = "NOT_RECORD", e[e.RECORD = 1] = "RECORD", e[e.RECORD_AND_SAMPLED = 2] = "RECORD_AND_SAMPLED";
166
+ })(L || (L = {}));
167
+ var I = (
168
+ /** @class */
169
+ function() {
170
+ function e() {
171
+ }
172
+ return e.prototype.shouldSample = function() {
173
+ return {
174
+ decision: L.NOT_RECORD
175
+ };
176
+ }, e.prototype.toString = function() {
177
+ return "AlwaysOffSampler";
178
+ }, e;
179
+ }()
180
+ ), T = (
181
+ /** @class */
182
+ function() {
183
+ function e() {
184
+ }
185
+ return e.prototype.shouldSample = function() {
186
+ return {
187
+ decision: L.RECORD_AND_SAMPLED
188
+ };
189
+ }, e.prototype.toString = function() {
190
+ return "AlwaysOnSampler";
191
+ }, e;
192
+ }()
193
+ ), B = (
194
+ /** @class */
195
+ function() {
196
+ function e(t) {
197
+ var r, n, i, o;
198
+ this._root = t.root, this._root || (f(new Error("ParentBasedSampler must have a root sampler configured")), this._root = new T()), this._remoteParentSampled = (r = t.remoteParentSampled) !== null && r !== void 0 ? r : new T(), this._remoteParentNotSampled = (n = t.remoteParentNotSampled) !== null && n !== void 0 ? n : new I(), this._localParentSampled = (i = t.localParentSampled) !== null && i !== void 0 ? i : new T(), this._localParentNotSampled = (o = t.localParentNotSampled) !== null && o !== void 0 ? o : new I();
199
+ }
200
+ return e.prototype.shouldSample = function(t, r, n, i, o, s) {
201
+ var a = _.getSpanContext(t);
202
+ return !a || !nt(a) ? this._root.shouldSample(t, r, n, i, o, s) : a.isRemote ? a.traceFlags & b.SAMPLED ? this._remoteParentSampled.shouldSample(t, r, n, i, o, s) : this._remoteParentNotSampled.shouldSample(t, r, n, i, o, s) : a.traceFlags & b.SAMPLED ? this._localParentSampled.shouldSample(t, r, n, i, o, s) : this._localParentNotSampled.shouldSample(t, r, n, i, o, s);
203
+ }, e.prototype.toString = function() {
204
+ return "ParentBased{root=" + this._root.toString() + ", remoteParentSampled=" + this._remoteParentSampled.toString() + ", remoteParentNotSampled=" + this._remoteParentNotSampled.toString() + ", localParentSampled=" + this._localParentSampled.toString() + ", localParentNotSampled=" + this._localParentNotSampled.toString() + "}";
205
+ }, e;
206
+ }()
207
+ ), W = (
208
+ /** @class */
209
+ function() {
210
+ function e(t) {
211
+ t === void 0 && (t = 0), this._ratio = t, this._ratio = this._normalize(t), this._upperBound = Math.floor(this._ratio * 4294967295);
212
+ }
213
+ return e.prototype.shouldSample = function(t, r) {
214
+ return {
215
+ decision: ot(r) && this._accumulate(r) < this._upperBound ? L.RECORD_AND_SAMPLED : L.NOT_RECORD
216
+ };
217
+ }, e.prototype.toString = function() {
218
+ return "TraceIdRatioBased{" + this._ratio + "}";
219
+ }, e.prototype._normalize = function(t) {
220
+ return typeof t != "number" || isNaN(t) ? 0 : t >= 1 ? 1 : t <= 0 ? 0 : t;
221
+ }, e.prototype._accumulate = function(t) {
222
+ for (var r = 0, n = 0; n < t.length / 8; n++) {
223
+ var i = n * 8, o = parseInt(t.slice(i, i + 8), 16);
224
+ r = (r ^ o) >>> 0;
225
+ }
226
+ return r;
227
+ }, e;
228
+ }()
229
+ ), Rt = v.AlwaysOn, g = 1;
230
+ function K() {
231
+ var e = P();
232
+ return {
233
+ sampler: $(e),
234
+ forceFlushTimeoutMillis: 3e4,
235
+ generalLimits: {
236
+ attributeValueLengthLimit: e.OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT,
237
+ attributeCountLimit: e.OTEL_ATTRIBUTE_COUNT_LIMIT
238
+ },
239
+ spanLimits: {
240
+ attributeValueLengthLimit: e.OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT,
241
+ attributeCountLimit: e.OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT,
242
+ linkCountLimit: e.OTEL_SPAN_LINK_COUNT_LIMIT,
243
+ eventCountLimit: e.OTEL_SPAN_EVENT_COUNT_LIMIT,
244
+ attributePerEventCountLimit: e.OTEL_SPAN_ATTRIBUTE_PER_EVENT_COUNT_LIMIT,
245
+ attributePerLinkCountLimit: e.OTEL_SPAN_ATTRIBUTE_PER_LINK_COUNT_LIMIT
246
+ },
247
+ mergeResourceWithDefaults: !0
248
+ };
249
+ }
250
+ function $(e) {
251
+ switch (e === void 0 && (e = P()), e.OTEL_TRACES_SAMPLER) {
252
+ case v.AlwaysOn:
253
+ return new T();
254
+ case v.AlwaysOff:
255
+ return new I();
256
+ case v.ParentBasedAlwaysOn:
257
+ return new B({
258
+ root: new T()
259
+ });
260
+ case v.ParentBasedAlwaysOff:
261
+ return new B({
262
+ root: new I()
263
+ });
264
+ case v.TraceIdRatio:
265
+ return new W(q(e));
266
+ case v.ParentBasedTraceIdRatio:
267
+ return new B({
268
+ root: new W(q(e))
269
+ });
270
+ default:
271
+ return l.error('OTEL_TRACES_SAMPLER value "' + e.OTEL_TRACES_SAMPLER + " invalid, defaulting to " + Rt + '".'), new T();
272
+ }
273
+ }
274
+ function q(e) {
275
+ if (e.OTEL_TRACES_SAMPLER_ARG === void 0 || e.OTEL_TRACES_SAMPLER_ARG === "")
276
+ return l.error("OTEL_TRACES_SAMPLER_ARG is blank, defaulting to " + g + "."), g;
277
+ var t = Number(e.OTEL_TRACES_SAMPLER_ARG);
278
+ return isNaN(t) ? (l.error("OTEL_TRACES_SAMPLER_ARG=" + e.OTEL_TRACES_SAMPLER_ARG + " was given, but it is invalid, defaulting to " + g + "."), g) : t < 0 || t > 1 ? (l.error("OTEL_TRACES_SAMPLER_ARG=" + e.OTEL_TRACES_SAMPLER_ARG + " was given, but it is out of range ([0..1]), defaulting to " + g + "."), g) : t;
279
+ }
280
+ function It(e) {
281
+ var t = {
282
+ sampler: $()
283
+ }, r = K(), n = Object.assign({}, r, t, e);
284
+ return n.generalLimits = Object.assign({}, r.generalLimits, e.generalLimits || {}), n.spanLimits = Object.assign({}, r.spanLimits, e.spanLimits || {}), n;
285
+ }
286
+ function Mt(e) {
287
+ var t, r, n, i, o, s, a, p, u, c, h, d, S = Object.assign({}, e.spanLimits), m = Lt();
288
+ return S.attributeCountLimit = (s = (o = (i = (r = (t = e.spanLimits) === null || t === void 0 ? void 0 : t.attributeCountLimit) !== null && r !== void 0 ? r : (n = e.generalLimits) === null || n === void 0 ? void 0 : n.attributeCountLimit) !== null && i !== void 0 ? i : m.OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT) !== null && o !== void 0 ? o : m.OTEL_ATTRIBUTE_COUNT_LIMIT) !== null && s !== void 0 ? s : Pt, S.attributeValueLengthLimit = (d = (h = (c = (p = (a = e.spanLimits) === null || a === void 0 ? void 0 : a.attributeValueLengthLimit) !== null && p !== void 0 ? p : (u = e.generalLimits) === null || u === void 0 ? void 0 : u.attributeValueLengthLimit) !== null && c !== void 0 ? c : m.OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT) !== null && h !== void 0 ? h : m.OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT) !== null && d !== void 0 ? d : wt, Object.assign({}, e, { spanLimits: S });
289
+ }
290
+ var Nt = (
291
+ /** @class */
292
+ function() {
293
+ function e(t, r) {
294
+ this._exporter = t, this._isExporting = !1, this._finishedSpans = [], this._droppedSpansCount = 0;
295
+ var n = P();
296
+ this._maxExportBatchSize = typeof (r == null ? void 0 : r.maxExportBatchSize) == "number" ? r.maxExportBatchSize : n.OTEL_BSP_MAX_EXPORT_BATCH_SIZE, this._maxQueueSize = typeof (r == null ? void 0 : r.maxQueueSize) == "number" ? r.maxQueueSize : n.OTEL_BSP_MAX_QUEUE_SIZE, this._scheduledDelayMillis = typeof (r == null ? void 0 : r.scheduledDelayMillis) == "number" ? r.scheduledDelayMillis : n.OTEL_BSP_SCHEDULE_DELAY, this._exportTimeoutMillis = typeof (r == null ? void 0 : r.exportTimeoutMillis) == "number" ? r.exportTimeoutMillis : n.OTEL_BSP_EXPORT_TIMEOUT, this._shutdownOnce = new Y(this._shutdown, this), this._maxExportBatchSize > this._maxQueueSize && (l.warn("BatchSpanProcessor: maxExportBatchSize must be smaller or equal to maxQueueSize, setting maxExportBatchSize to match maxQueueSize"), this._maxExportBatchSize = this._maxQueueSize);
297
+ }
298
+ return e.prototype.forceFlush = function() {
299
+ return this._shutdownOnce.isCalled ? this._shutdownOnce.promise : this._flushAll();
300
+ }, e.prototype.onStart = function(t, r) {
301
+ }, e.prototype.onEnd = function(t) {
302
+ this._shutdownOnce.isCalled || t.spanContext().traceFlags & b.SAMPLED && this._addToBuffer(t);
303
+ }, e.prototype.shutdown = function() {
304
+ return this._shutdownOnce.call();
305
+ }, e.prototype._shutdown = function() {
306
+ var t = this;
307
+ return Promise.resolve().then(function() {
308
+ return t.onShutdown();
309
+ }).then(function() {
310
+ return t._flushAll();
311
+ }).then(function() {
312
+ return t._exporter.shutdown();
313
+ });
314
+ }, e.prototype._addToBuffer = function(t) {
315
+ if (this._finishedSpans.length >= this._maxQueueSize) {
316
+ this._droppedSpansCount === 0 && l.debug("maxQueueSize reached, dropping spans"), this._droppedSpansCount++;
317
+ return;
318
+ }
319
+ this._droppedSpansCount > 0 && (l.warn("Dropped " + this._droppedSpansCount + " spans because maxQueueSize reached"), this._droppedSpansCount = 0), this._finishedSpans.push(t), this._maybeStartTimer();
320
+ }, e.prototype._flushAll = function() {
321
+ var t = this;
322
+ return new Promise(function(r, n) {
323
+ for (var i = [], o = Math.ceil(t._finishedSpans.length / t._maxExportBatchSize), s = 0, a = o; s < a; s++)
324
+ i.push(t._flushOneBatch());
325
+ Promise.all(i).then(function() {
326
+ r();
327
+ }).catch(n);
328
+ });
329
+ }, e.prototype._flushOneBatch = function() {
330
+ var t = this;
331
+ return this._clearTimer(), this._finishedSpans.length === 0 ? Promise.resolve() : new Promise(function(r, n) {
332
+ var i = setTimeout(function() {
333
+ n(new Error("Timeout"));
334
+ }, t._exportTimeoutMillis);
335
+ E.with(gt(E.active()), function() {
336
+ var o;
337
+ t._finishedSpans.length <= t._maxExportBatchSize ? (o = t._finishedSpans, t._finishedSpans = []) : o = t._finishedSpans.splice(0, t._maxExportBatchSize);
338
+ for (var s = function() {
339
+ return t._exporter.export(o, function(h) {
340
+ var d;
341
+ clearTimeout(i), h.code === w.SUCCESS ? r() : n((d = h.error) !== null && d !== void 0 ? d : new Error("BatchSpanProcessor: span export failed"));
342
+ });
343
+ }, a = null, p = 0, u = o.length; p < u; p++) {
344
+ var c = o[p];
345
+ c.resource.asyncAttributesPending && c.resource.waitForAsyncAttributes && (a ?? (a = []), a.push(c.resource.waitForAsyncAttributes()));
346
+ }
347
+ a === null ? s() : Promise.all(a).then(s, function(h) {
348
+ f(h), n(h);
349
+ });
350
+ });
351
+ });
352
+ }, e.prototype._maybeStartTimer = function() {
353
+ var t = this;
354
+ if (!this._isExporting) {
355
+ var r = function() {
356
+ t._isExporting = !0, t._flushOneBatch().finally(function() {
357
+ t._isExporting = !1, t._finishedSpans.length > 0 && (t._clearTimer(), t._maybeStartTimer());
358
+ }).catch(function(n) {
359
+ t._isExporting = !1, f(n);
360
+ });
361
+ };
362
+ if (this._finishedSpans.length >= this._maxExportBatchSize)
363
+ return r();
364
+ this._timer === void 0 && (this._timer = setTimeout(function() {
365
+ return r();
366
+ }, this._scheduledDelayMillis), Et(this._timer));
367
+ }
368
+ }, e.prototype._clearTimer = function() {
369
+ this._timer !== void 0 && (clearTimeout(this._timer), this._timer = void 0);
370
+ }, e;
371
+ }()
372
+ ), Dt = /* @__PURE__ */ function() {
373
+ var e = function(t, r) {
374
+ return e = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(n, i) {
375
+ n.__proto__ = i;
376
+ } || function(n, i) {
377
+ for (var o in i) Object.prototype.hasOwnProperty.call(i, o) && (n[o] = i[o]);
378
+ }, e(t, r);
379
+ };
380
+ return function(t, r) {
381
+ if (typeof r != "function" && r !== null)
382
+ throw new TypeError("Class extends value " + String(r) + " is not a constructor or null");
383
+ e(t, r);
384
+ function n() {
385
+ this.constructor = t;
386
+ }
387
+ t.prototype = r === null ? Object.create(r) : (n.prototype = r.prototype, new n());
388
+ };
389
+ }(), Bt = (
390
+ /** @class */
391
+ function(e) {
392
+ Dt(t, e);
393
+ function t(r, n) {
394
+ var i = e.call(this, r, n) || this;
395
+ return i.onInit(n), i;
396
+ }
397
+ return t.prototype.onInit = function(r) {
398
+ var n = this;
399
+ (r == null ? void 0 : r.disableAutoFlushOnDocumentHide) !== !0 && typeof document < "u" && (this._visibilityChangeListener = function() {
400
+ document.visibilityState === "hidden" && n.forceFlush().catch(function(i) {
401
+ f(i);
402
+ });
403
+ }, this._pageHideListener = function() {
404
+ n.forceFlush().catch(function(i) {
405
+ f(i);
406
+ });
407
+ }, document.addEventListener("visibilitychange", this._visibilityChangeListener), document.addEventListener("pagehide", this._pageHideListener));
408
+ }, t.prototype.onShutdown = function() {
409
+ typeof document < "u" && (this._visibilityChangeListener && document.removeEventListener("visibilitychange", this._visibilityChangeListener), this._pageHideListener && document.removeEventListener("pagehide", this._pageHideListener));
410
+ }, t;
411
+ }(Nt)
412
+ ), Ut = 8, Ft = 16, kt = (
413
+ /** @class */
414
+ /* @__PURE__ */ function() {
415
+ function e() {
416
+ this.generateTraceId = J(Ft), this.generateSpanId = J(Ut);
417
+ }
418
+ return e;
419
+ }()
420
+ ), O = Array(32);
421
+ function J(e) {
422
+ return function() {
423
+ for (var t = 0; t < e * 2; t++)
424
+ O[t] = Math.floor(Math.random() * 16) + 48, O[t] >= 58 && (O[t] += 39);
425
+ return String.fromCharCode.apply(null, O.slice(0, e * 2));
426
+ };
427
+ }
428
+ var zt = (
429
+ /** @class */
430
+ function() {
431
+ function e(t, r, n) {
432
+ this._tracerProvider = n;
433
+ var i = It(r);
434
+ this._sampler = i.sampler, this._generalLimits = i.generalLimits, this._spanLimits = i.spanLimits, this._idGenerator = r.idGenerator || new kt(), this.resource = n.resource, this.instrumentationLibrary = t;
435
+ }
436
+ return e.prototype.startSpan = function(t, r, n) {
437
+ var i, o, s;
438
+ r === void 0 && (r = {}), n === void 0 && (n = E.active()), r.root && (n = _.deleteSpan(n));
439
+ var a = _.getSpan(n);
440
+ if (mt(n)) {
441
+ l.debug("Instrumentation suppressed, returning Noop Span");
442
+ var p = _.wrapSpanContext(it);
443
+ return p;
444
+ }
445
+ var u = a == null ? void 0 : a.spanContext(), c = this._idGenerator.generateSpanId(), h, d, S;
446
+ !u || !_.isSpanContextValid(u) ? h = this._idGenerator.generateTraceId() : (h = u.traceId, d = u.traceState, S = u.spanId);
447
+ var m = (i = r.kind) !== null && i !== void 0 ? i : st.INTERNAL, F = ((o = r.links) !== null && o !== void 0 ? o : []).map(function(G) {
448
+ return {
449
+ context: G.context,
450
+ attributes: R(G.attributes)
451
+ };
452
+ }), k = R(r.attributes), x = this._sampler.shouldSample(n, h, t, m, k, F);
453
+ d = (s = x.traceState) !== null && s !== void 0 ? s : d;
454
+ var tt = x.decision === H.RECORD_AND_SAMPLED ? b.SAMPLED : b.NONE, z = { traceId: h, spanId: c, traceFlags: tt, traceState: d };
455
+ if (x.decision === H.NOT_RECORD) {
456
+ l.debug("Recording is off, propagating context in a non-recording span");
457
+ var p = _.wrapSpanContext(z);
458
+ return p;
459
+ }
460
+ var et = R(Object.assign(k, x.attributes)), rt = new Ct(this, n, t, z, m, S, F, r.startTime, void 0, et);
461
+ return rt;
462
+ }, e.prototype.startActiveSpan = function(t, r, n, i) {
463
+ var o, s, a;
464
+ if (!(arguments.length < 2)) {
465
+ arguments.length === 2 ? a = r : arguments.length === 3 ? (o = r, a = n) : (o = r, s = n, a = i);
466
+ var p = s ?? E.active(), u = this.startSpan(t, o, p), c = _.setSpan(p, u);
467
+ return E.with(c, a, void 0, u);
468
+ }
469
+ }, e.prototype.getGeneralLimits = function() {
470
+ return this._generalLimits;
471
+ }, e.prototype.getSpanLimits = function() {
472
+ return this._spanLimits;
473
+ }, e.prototype.getActiveSpanProcessor = function() {
474
+ return this._tracerProvider.getActiveSpanProcessor();
475
+ }, e;
476
+ }()
477
+ ), C = function(e) {
478
+ var t = typeof Symbol == "function" && Symbol.iterator, r = t && e[t], n = 0;
479
+ if (r) return r.call(e);
480
+ if (e && typeof e.length == "number") return {
481
+ next: function() {
482
+ return e && n >= e.length && (e = void 0), { value: e && e[n++], done: !e };
483
+ }
484
+ };
485
+ throw new TypeError(t ? "Object is not iterable." : "Symbol.iterator is not defined.");
486
+ }, Z = (
487
+ /** @class */
488
+ function() {
489
+ function e(t) {
490
+ this._spanProcessors = t;
491
+ }
492
+ return e.prototype.forceFlush = function() {
493
+ var t, r, n = [];
494
+ try {
495
+ for (var i = C(this._spanProcessors), o = i.next(); !o.done; o = i.next()) {
496
+ var s = o.value;
497
+ n.push(s.forceFlush());
498
+ }
499
+ } catch (a) {
500
+ t = { error: a };
501
+ } finally {
502
+ try {
503
+ o && !o.done && (r = i.return) && r.call(i);
504
+ } finally {
505
+ if (t) throw t.error;
506
+ }
507
+ }
508
+ return new Promise(function(a) {
509
+ Promise.all(n).then(function() {
510
+ a();
511
+ }).catch(function(p) {
512
+ f(p || new Error("MultiSpanProcessor: forceFlush failed")), a();
513
+ });
514
+ });
515
+ }, e.prototype.onStart = function(t, r) {
516
+ var n, i;
517
+ try {
518
+ for (var o = C(this._spanProcessors), s = o.next(); !s.done; s = o.next()) {
519
+ var a = s.value;
520
+ a.onStart(t, r);
521
+ }
522
+ } catch (p) {
523
+ n = { error: p };
524
+ } finally {
525
+ try {
526
+ s && !s.done && (i = o.return) && i.call(o);
527
+ } finally {
528
+ if (n) throw n.error;
529
+ }
530
+ }
531
+ }, e.prototype.onEnd = function(t) {
532
+ var r, n;
533
+ try {
534
+ for (var i = C(this._spanProcessors), o = i.next(); !o.done; o = i.next()) {
535
+ var s = o.value;
536
+ s.onEnd(t);
537
+ }
538
+ } catch (a) {
539
+ r = { error: a };
540
+ } finally {
541
+ try {
542
+ o && !o.done && (n = i.return) && n.call(i);
543
+ } finally {
544
+ if (r) throw r.error;
545
+ }
546
+ }
547
+ }, e.prototype.shutdown = function() {
548
+ var t, r, n = [];
549
+ try {
550
+ for (var i = C(this._spanProcessors), o = i.next(); !o.done; o = i.next()) {
551
+ var s = o.value;
552
+ n.push(s.shutdown());
553
+ }
554
+ } catch (a) {
555
+ t = { error: a };
556
+ } finally {
557
+ try {
558
+ o && !o.done && (r = i.return) && r.call(i);
559
+ } finally {
560
+ if (t) throw t.error;
561
+ }
562
+ }
563
+ return new Promise(function(a, p) {
564
+ Promise.all(n).then(function() {
565
+ a();
566
+ }, p);
567
+ });
568
+ }, e;
569
+ }()
570
+ ), Gt = (
571
+ /** @class */
572
+ function() {
573
+ function e() {
574
+ }
575
+ return e.prototype.onStart = function(t, r) {
576
+ }, e.prototype.onEnd = function(t) {
577
+ }, e.prototype.shutdown = function() {
578
+ return Promise.resolve();
579
+ }, e.prototype.forceFlush = function() {
580
+ return Promise.resolve();
581
+ }, e;
582
+ }()
583
+ ), jt = function(e, t) {
584
+ var r = typeof Symbol == "function" && e[Symbol.iterator];
585
+ if (!r) return e;
586
+ var n = r.call(e), i, o = [], s;
587
+ try {
588
+ for (; (t === void 0 || t-- > 0) && !(i = n.next()).done; ) o.push(i.value);
589
+ } catch (a) {
590
+ s = { error: a };
591
+ } finally {
592
+ try {
593
+ i && !i.done && (r = n.return) && r.call(n);
594
+ } finally {
595
+ if (s) throw s.error;
596
+ }
597
+ }
598
+ return o;
599
+ }, Vt = function(e, t, r) {
600
+ if (arguments.length === 2) for (var n = 0, i = t.length, o; n < i; n++)
601
+ (o || !(n in t)) && (o || (o = Array.prototype.slice.call(t, 0, n)), o[n] = t[n]);
602
+ return e.concat(o || Array.prototype.slice.call(t));
603
+ }, y;
604
+ (function(e) {
605
+ e[e.resolved = 0] = "resolved", e[e.timeout = 1] = "timeout", e[e.error = 2] = "error", e[e.unresolved = 3] = "unresolved";
606
+ })(y || (y = {}));
607
+ var re = (
608
+ /** @class */
609
+ function() {
610
+ function e(t) {
611
+ t === void 0 && (t = {});
612
+ var r, n;
613
+ this._registeredSpanProcessors = [], this._tracers = /* @__PURE__ */ new Map();
614
+ var i = Tt({}, K(), Mt(t));
615
+ if (this.resource = (r = i.resource) !== null && r !== void 0 ? r : Q.empty(), i.mergeResourceWithDefaults && (this.resource = Q.default().merge(this.resource)), this._config = Object.assign({}, i, {
616
+ resource: this.resource
617
+ }), !((n = t.spanProcessors) === null || n === void 0) && n.length)
618
+ this._registeredSpanProcessors = Vt([], jt(t.spanProcessors), !1), this.activeSpanProcessor = new Z(this._registeredSpanProcessors);
619
+ else {
620
+ var o = this._buildExporterFromEnv();
621
+ if (o !== void 0) {
622
+ var s = new Bt(o);
623
+ this.activeSpanProcessor = s;
624
+ } else
625
+ this.activeSpanProcessor = new Gt();
626
+ }
627
+ }
628
+ return e.prototype.getTracer = function(t, r, n) {
629
+ var i = t + "@" + (r || "") + ":" + ((n == null ? void 0 : n.schemaUrl) || "");
630
+ return this._tracers.has(i) || this._tracers.set(i, new zt({ name: t, version: r, schemaUrl: n == null ? void 0 : n.schemaUrl }, this._config, this)), this._tracers.get(i);
631
+ }, e.prototype.addSpanProcessor = function(t) {
632
+ this._registeredSpanProcessors.length === 0 && this.activeSpanProcessor.shutdown().catch(function(r) {
633
+ return l.error("Error while trying to shutdown current span processor", r);
634
+ }), this._registeredSpanProcessors.push(t), this.activeSpanProcessor = new Z(this._registeredSpanProcessors);
635
+ }, e.prototype.getActiveSpanProcessor = function() {
636
+ return this.activeSpanProcessor;
637
+ }, e.prototype.register = function(t) {
638
+ t === void 0 && (t = {}), _.setGlobalTracerProvider(this), t.propagator === void 0 && (t.propagator = this._buildPropagatorFromEnv()), t.contextManager && E.setGlobalContextManager(t.contextManager), t.propagator && ht.setGlobalPropagator(t.propagator);
639
+ }, e.prototype.forceFlush = function() {
640
+ var t = this._config.forceFlushTimeoutMillis, r = this._registeredSpanProcessors.map(function(n) {
641
+ return new Promise(function(i) {
642
+ var o, s = setTimeout(function() {
643
+ i(new Error("Span processor did not completed within timeout period of " + t + " ms")), o = y.timeout;
644
+ }, t);
645
+ n.forceFlush().then(function() {
646
+ clearTimeout(s), o !== y.timeout && (o = y.resolved, i(o));
647
+ }).catch(function(a) {
648
+ clearTimeout(s), o = y.error, i(a);
649
+ });
650
+ });
651
+ });
652
+ return new Promise(function(n, i) {
653
+ Promise.all(r).then(function(o) {
654
+ var s = o.filter(function(a) {
655
+ return a !== y.resolved;
656
+ });
657
+ s.length > 0 ? i(s) : n();
658
+ }).catch(function(o) {
659
+ return i([o]);
660
+ });
661
+ });
662
+ }, e.prototype.shutdown = function() {
663
+ return this.activeSpanProcessor.shutdown();
664
+ }, e.prototype._getPropagator = function(t) {
665
+ var r;
666
+ return (r = this.constructor._registeredPropagators.get(t)) === null || r === void 0 ? void 0 : r();
667
+ }, e.prototype._getSpanExporter = function(t) {
668
+ var r;
669
+ return (r = this.constructor._registeredExporters.get(t)) === null || r === void 0 ? void 0 : r();
670
+ }, e.prototype._buildPropagatorFromEnv = function() {
671
+ var t = this, r = Array.from(new Set(P().OTEL_PROPAGATORS)), n = r.map(function(o) {
672
+ var s = t._getPropagator(o);
673
+ return s || l.warn('Propagator "' + o + '" requested through environment variable is unavailable.'), s;
674
+ }), i = n.reduce(function(o, s) {
675
+ return s && o.push(s), o;
676
+ }, []);
677
+ if (i.length !== 0)
678
+ return r.length === 1 ? i[0] : new vt({
679
+ propagators: i
680
+ });
681
+ }, e.prototype._buildExporterFromEnv = function() {
682
+ var t = P().OTEL_TRACES_EXPORTER;
683
+ if (!(t === "none" || t === "")) {
684
+ var r = this._getSpanExporter(t);
685
+ return r || l.error('Exporter "' + t + '" requested through environment variable is unavailable.'), r;
686
+ }
687
+ }, e._registeredPropagators = /* @__PURE__ */ new Map([
688
+ ["tracecontext", function() {
689
+ return new yt();
690
+ }],
691
+ ["baggage", function() {
692
+ return new St();
693
+ }]
694
+ ]), e._registeredExporters = /* @__PURE__ */ new Map(), e;
695
+ }()
696
+ ), Ht = function(e) {
697
+ var t = typeof Symbol == "function" && Symbol.iterator, r = t && e[t], n = 0;
698
+ if (r) return r.call(e);
699
+ if (e && typeof e.length == "number") return {
700
+ next: function() {
701
+ return e && n >= e.length && (e = void 0), { value: e && e[n++], done: !e };
702
+ }
703
+ };
704
+ throw new TypeError(t ? "Object is not iterable." : "Symbol.iterator is not defined.");
705
+ }, ne = (
706
+ /** @class */
707
+ function() {
708
+ function e() {
709
+ }
710
+ return e.prototype.export = function(t, r) {
711
+ return this._sendSpans(t, r);
712
+ }, e.prototype.shutdown = function() {
713
+ return this._sendSpans([]), this.forceFlush();
714
+ }, e.prototype.forceFlush = function() {
715
+ return Promise.resolve();
716
+ }, e.prototype._exportInfo = function(t) {
717
+ var r;
718
+ return {
719
+ resource: {
720
+ attributes: t.resource.attributes
721
+ },
722
+ instrumentationScope: t.instrumentationLibrary,
723
+ traceId: t.spanContext().traceId,
724
+ parentId: t.parentSpanId,
725
+ traceState: (r = t.spanContext().traceState) === null || r === void 0 ? void 0 : r.serialize(),
726
+ name: t.name,
727
+ id: t.spanContext().spanId,
728
+ kind: t.kind,
729
+ timestamp: V(t.startTime),
730
+ duration: V(t.duration),
731
+ attributes: t.attributes,
732
+ status: t.status,
733
+ events: t.events,
734
+ links: t.links
735
+ };
736
+ }, e.prototype._sendSpans = function(t, r) {
737
+ var n, i;
738
+ try {
739
+ for (var o = Ht(t), s = o.next(); !s.done; s = o.next()) {
740
+ var a = s.value;
741
+ console.dir(this._exportInfo(a), { depth: 3 });
742
+ }
743
+ } catch (p) {
744
+ n = { error: p };
745
+ } finally {
746
+ try {
747
+ s && !s.done && (i = o.return) && i.call(o);
748
+ } finally {
749
+ if (n) throw n.error;
750
+ }
751
+ }
752
+ if (r)
753
+ return r({ code: w.SUCCESS });
754
+ }, e;
755
+ }()
756
+ ), Qt = function(e, t) {
757
+ var r = typeof Symbol == "function" && e[Symbol.iterator];
758
+ if (!r) return e;
759
+ var n = r.call(e), i, o = [], s;
760
+ try {
761
+ for (; (t === void 0 || t-- > 0) && !(i = n.next()).done; ) o.push(i.value);
762
+ } catch (a) {
763
+ s = { error: a };
764
+ } finally {
765
+ try {
766
+ i && !i.done && (r = n.return) && r.call(n);
767
+ } finally {
768
+ if (s) throw s.error;
769
+ }
770
+ }
771
+ return o;
772
+ }, Xt = function(e, t, r) {
773
+ if (arguments.length === 2) for (var n = 0, i = t.length, o; n < i; n++)
774
+ (o || !(n in t)) && (o || (o = Array.prototype.slice.call(t, 0, n)), o[n] = t[n]);
775
+ return e.concat(o || Array.prototype.slice.call(t));
776
+ }, oe = (
777
+ /** @class */
778
+ function() {
779
+ function e() {
780
+ this._finishedSpans = [], this._stopped = !1;
781
+ }
782
+ return e.prototype.export = function(t, r) {
783
+ var n;
784
+ if (this._stopped)
785
+ return r({
786
+ code: w.FAILED,
787
+ error: new Error("Exporter has been stopped")
788
+ });
789
+ (n = this._finishedSpans).push.apply(n, Xt([], Qt(t), !1)), setTimeout(function() {
790
+ return r({ code: w.SUCCESS });
791
+ }, 0);
792
+ }, e.prototype.shutdown = function() {
793
+ return this._stopped = !0, this._finishedSpans = [], this.forceFlush();
794
+ }, e.prototype.forceFlush = function() {
795
+ return Promise.resolve();
796
+ }, e.prototype.reset = function() {
797
+ this._finishedSpans = [];
798
+ }, e.prototype.getFinishedSpans = function() {
799
+ return this._finishedSpans;
800
+ }, e;
801
+ }()
802
+ ), Wt = function(e, t, r, n) {
803
+ function i(o) {
804
+ return o instanceof r ? o : new r(function(s) {
805
+ s(o);
806
+ });
807
+ }
808
+ return new (r || (r = Promise))(function(o, s) {
809
+ function a(c) {
810
+ try {
811
+ u(n.next(c));
812
+ } catch (h) {
813
+ s(h);
814
+ }
815
+ }
816
+ function p(c) {
817
+ try {
818
+ u(n.throw(c));
819
+ } catch (h) {
820
+ s(h);
821
+ }
822
+ }
823
+ function u(c) {
824
+ c.done ? o(c.value) : i(c.value).then(a, p);
825
+ }
826
+ u((n = n.apply(e, [])).next());
827
+ });
828
+ }, qt = function(e, t) {
829
+ var r = { label: 0, sent: function() {
830
+ if (o[0] & 1) throw o[1];
831
+ return o[1];
832
+ }, trys: [], ops: [] }, n, i, o, s;
833
+ return s = { next: a(0), throw: a(1), return: a(2) }, typeof Symbol == "function" && (s[Symbol.iterator] = function() {
834
+ return this;
835
+ }), s;
836
+ function a(u) {
837
+ return function(c) {
838
+ return p([u, c]);
839
+ };
840
+ }
841
+ function p(u) {
842
+ if (n) throw new TypeError("Generator is already executing.");
843
+ for (; r; ) try {
844
+ if (n = 1, i && (o = u[0] & 2 ? i.return : u[0] ? i.throw || ((o = i.return) && o.call(i), 0) : i.next) && !(o = o.call(i, u[1])).done) return o;
845
+ switch (i = 0, o && (u = [u[0] & 2, o.value]), u[0]) {
846
+ case 0:
847
+ case 1:
848
+ o = u;
849
+ break;
850
+ case 4:
851
+ return r.label++, { value: u[1], done: !1 };
852
+ case 5:
853
+ r.label++, i = u[1], u = [0];
854
+ continue;
855
+ case 7:
856
+ u = r.ops.pop(), r.trys.pop();
857
+ continue;
858
+ default:
859
+ if (o = r.trys, !(o = o.length > 0 && o[o.length - 1]) && (u[0] === 6 || u[0] === 2)) {
860
+ r = 0;
861
+ continue;
862
+ }
863
+ if (u[0] === 3 && (!o || u[1] > o[0] && u[1] < o[3])) {
864
+ r.label = u[1];
865
+ break;
866
+ }
867
+ if (u[0] === 6 && r.label < o[1]) {
868
+ r.label = o[1], o = u;
869
+ break;
870
+ }
871
+ if (o && r.label < o[2]) {
872
+ r.label = o[2], r.ops.push(u);
873
+ break;
874
+ }
875
+ o[2] && r.ops.pop(), r.trys.pop();
876
+ continue;
877
+ }
878
+ u = t.call(e, r);
879
+ } catch (c) {
880
+ u = [6, c], i = 0;
881
+ } finally {
882
+ n = o = 0;
883
+ }
884
+ if (u[0] & 5) throw u[1];
885
+ return { value: u[0] ? u[1] : void 0, done: !0 };
886
+ }
887
+ }, ie = (
888
+ /** @class */
889
+ function() {
890
+ function e(t) {
891
+ this._exporter = t, this._shutdownOnce = new Y(this._shutdown, this), this._unresolvedExports = /* @__PURE__ */ new Set();
892
+ }
893
+ return e.prototype.forceFlush = function() {
894
+ return Wt(this, void 0, void 0, function() {
895
+ return qt(this, function(t) {
896
+ switch (t.label) {
897
+ case 0:
898
+ return [4, Promise.all(Array.from(this._unresolvedExports))];
899
+ case 1:
900
+ return t.sent(), this._exporter.forceFlush ? [4, this._exporter.forceFlush()] : [3, 3];
901
+ case 2:
902
+ t.sent(), t.label = 3;
903
+ case 3:
904
+ return [
905
+ 2
906
+ /*return*/
907
+ ];
908
+ }
909
+ });
910
+ });
911
+ }, e.prototype.onStart = function(t, r) {
912
+ }, e.prototype.onEnd = function(t) {
913
+ var r = this, n, i;
914
+ if (!this._shutdownOnce.isCalled && t.spanContext().traceFlags & b.SAMPLED) {
915
+ var o = function() {
916
+ return bt._export(r._exporter, [t]).then(function(a) {
917
+ var p;
918
+ a.code !== w.SUCCESS && f((p = a.error) !== null && p !== void 0 ? p : new Error("SimpleSpanProcessor: span export failed (status " + a + ")"));
919
+ }).catch(function(a) {
920
+ f(a);
921
+ });
922
+ };
923
+ if (t.resource.asyncAttributesPending) {
924
+ var s = (i = (n = t.resource).waitForAsyncAttributes) === null || i === void 0 ? void 0 : i.call(n).then(function() {
925
+ return s != null && r._unresolvedExports.delete(s), o();
926
+ }, function(a) {
927
+ return f(a);
928
+ });
929
+ s != null && this._unresolvedExports.add(s);
930
+ } else
931
+ o();
932
+ }
933
+ }, e.prototype.shutdown = function() {
934
+ return this._shutdownOnce.call();
935
+ }, e.prototype._shutdown = function() {
936
+ return this._exporter.shutdown();
937
+ }, e;
938
+ }()
939
+ );
940
+ export {
941
+ Bt as D,
942
+ kt as G,
943
+ I,
944
+ Ct as O,
945
+ L as P,
946
+ y as S,
947
+ W,
948
+ B as a,
949
+ T as g,
950
+ oe as i,
951
+ Gt as j,
952
+ ne as n,
953
+ ie as o,
954
+ re as r,
955
+ zt as z
956
+ };
957
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiU2ltcGxlU3BhblByb2Nlc3Nvci1DWHVCZGhHYS0hfnswMDJ9fi5qcyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgRyBhcyBHZSwgYiBhcyBibiwgSiBhcyBKdCwgdSBhcyB1cywgVSBhcyBVZSwgbyBhcyBvcywgbCBhcyBsdCwgUyBhcyBTZSB9IGZyb20gJy4vaW5kZXgtIX57MDA1fX4uanMnO1xuaW1wb3J0IHsgciB9IGZyb20gJy4vZGlhZy1hcGktQnVDR2xsSW0tIX57MDA4fX4uanMnO1xuaW1wb3J0IHsgZEMgYXMgcWUsIGREIGFzIHdlLCBkRSBhcyBSLCBwIGFzIHBfLCBPIGFzIE8kMSwgZEYgYXMgTl8sIGRHIGFzIEhfLCBjeSBhcyByQSwgY3cgYXMgTkEsIHkgYXMgeV8sIGRIIGFzIGtlLCBkSSBhcyByXywgY3ggYXMgTUEgfSBmcm9tICcuL3VybC1DajNQcDZ1Vy0hfnswMDl9fi5qcyc7XG5pbXBvcnQgeyBaLCBhIGFzIFplLCBuIGFzIG5lJDEsIHcsIHAsIGIgYXMgcHIsIGMgYXMgYnIsIEogYXMgSmUsIFcgYXMgVyQxLCBzIGFzIHNyLCBrIGFzIGtyLCBkIGFzIFpyLCB0IGFzIHR0IH0gZnJvbSAnLi9pbmRleC1DWWlCMl9FSS0hfnswMGt9fi5qcyc7XG5pbXBvcnQgeyBibSBhcyByJDEsIE8gYXMgT1QsIGJuIGFzIExULCBibyBhcyBQJDEsIGJwIGFzIE0gfSBmcm9tICcuL3Nkay1pbmZvLUNYaFpkZUtlLSF+ezAwaH1+LmpzJztcbmltcG9ydCB7IFIgYXMgUiQxIH0gZnJvbSAnLi9SZXNvdXJjZS1CeGRsUG9zZi0hfnswMGd9fi5qcyc7XG5pbXBvcnQgeyBhIH0gZnJvbSAnLi9FeHBvcnRSZXN1bHQtQi1ZTEtNYVUtIX57MDBtfX4uanMnO1xuXG52YXIgYnQgPSBcImV4Y2VwdGlvblwiLCBVID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiBVID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbihlKSB7XG4gICAgZm9yICh2YXIgdCwgciA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyByIDwgbjsgcisrKSB7XG4gICAgICB0ID0gYXJndW1lbnRzW3JdO1xuICAgICAgZm9yICh2YXIgbyBpbiB0KSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCwgbykgJiYgKGVbb10gPSB0W29dKTtcbiAgICB9XG4gICAgcmV0dXJuIGU7XG4gIH0sIFUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn0sIEN0ID0gZnVuY3Rpb24oZSkge1xuICB2YXIgdCA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgciA9IHQgJiYgZVt0XSwgbiA9IDA7XG4gIGlmIChyKSByZXR1cm4gci5jYWxsKGUpO1xuICBpZiAoZSAmJiB0eXBlb2YgZS5sZW5ndGggPT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBlICYmIG4gPj0gZS5sZW5ndGggJiYgKGUgPSB2b2lkIDApLCB7IHZhbHVlOiBlICYmIGVbbisrXSwgZG9uZTogIWUgfTtcbiAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IodCA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn0sIFggPSBmdW5jdGlvbihlLCB0KSB7XG4gIHZhciByID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgZVtTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIXIpIHJldHVybiBlO1xuICB2YXIgbiA9IHIuY2FsbChlKSwgbywgaSA9IFtdLCBhO1xuICB0cnkge1xuICAgIGZvciAoOyAodCA9PT0gdm9pZCAwIHx8IHQtLSA+IDApICYmICEobyA9IG4ubmV4dCgpKS5kb25lOyApIGkucHVzaChvLnZhbHVlKTtcbiAgfSBjYXRjaCAocykge1xuICAgIGEgPSB7IGVycm9yOiBzIH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIG8gJiYgIW8uZG9uZSAmJiAociA9IG4ucmV0dXJuKSAmJiByLmNhbGwobik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChhKSB0aHJvdyBhLmVycm9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gaTtcbn0sIHh0ID0gZnVuY3Rpb24oZSwgdCwgcikge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgbiA9IDAsIG8gPSB0Lmxlbmd0aCwgaTsgbiA8IG87IG4rKylcbiAgICAoaSB8fCAhKG4gaW4gdCkpICYmIChpIHx8IChpID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodCwgMCwgbikpLCBpW25dID0gdFtuXSk7XG4gIHJldHVybiBlLmNvbmNhdChpIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQpKTtcbn0sIE90ID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUodCwgciwgbiwgbywgaSwgYSwgcywgbCwgdSwgcCkge1xuICAgICAgcyA9PT0gdm9pZCAwICYmIChzID0gW10pLCB0aGlzLmF0dHJpYnV0ZXMgPSB7fSwgdGhpcy5saW5rcyA9IFtdLCB0aGlzLmV2ZW50cyA9IFtdLCB0aGlzLl9kcm9wcGVkQXR0cmlidXRlc0NvdW50ID0gMCwgdGhpcy5fZHJvcHBlZEV2ZW50c0NvdW50ID0gMCwgdGhpcy5fZHJvcHBlZExpbmtzQ291bnQgPSAwLCB0aGlzLnN0YXR1cyA9IHtcbiAgICAgICAgY29kZTogU2UuVU5TRVRcbiAgICAgIH0sIHRoaXMuZW5kVGltZSA9IFswLCAwXSwgdGhpcy5fZW5kZWQgPSAhMSwgdGhpcy5fZHVyYXRpb24gPSBbLTEsIC0xXSwgdGhpcy5uYW1lID0gbiwgdGhpcy5fc3BhbkNvbnRleHQgPSBvLCB0aGlzLnBhcmVudFNwYW5JZCA9IGEsIHRoaXMua2luZCA9IGksIHRoaXMubGlua3MgPSBzO1xuICAgICAgdmFyIGYgPSBEYXRlLm5vdygpO1xuICAgICAgdGhpcy5fcGVyZm9ybWFuY2VTdGFydFRpbWUgPSBSLm5vdygpLCB0aGlzLl9wZXJmb3JtYW5jZU9mZnNldCA9IGYgLSAodGhpcy5fcGVyZm9ybWFuY2VTdGFydFRpbWUgKyByXygpKSwgdGhpcy5fc3RhcnRUaW1lUHJvdmlkZWQgPSBsICE9IG51bGwsIHRoaXMuc3RhcnRUaW1lID0gdGhpcy5fZ2V0VGltZShsID8/IGYpLCB0aGlzLnJlc291cmNlID0gdC5yZXNvdXJjZSwgdGhpcy5pbnN0cnVtZW50YXRpb25MaWJyYXJ5ID0gdC5pbnN0cnVtZW50YXRpb25MaWJyYXJ5LCB0aGlzLl9zcGFuTGltaXRzID0gdC5nZXRTcGFuTGltaXRzKCksIHRoaXMuX2F0dHJpYnV0ZVZhbHVlTGVuZ3RoTGltaXQgPSB0aGlzLl9zcGFuTGltaXRzLmF0dHJpYnV0ZVZhbHVlTGVuZ3RoTGltaXQgfHwgMCwgcCAhPSBudWxsICYmIHRoaXMuc2V0QXR0cmlidXRlcyhwKSwgdGhpcy5fc3BhblByb2Nlc3NvciA9IHQuZ2V0QWN0aXZlU3BhblByb2Nlc3NvcigpLCB0aGlzLl9zcGFuUHJvY2Vzc29yLm9uU3RhcnQodGhpcywgcik7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5zcGFuQ29udGV4dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3NwYW5Db250ZXh0O1xuICAgIH0sIGUucHJvdG90eXBlLnNldEF0dHJpYnV0ZSA9IGZ1bmN0aW9uKHQsIHIkMSkge1xuICAgICAgcmV0dXJuIHIkMSA9PSBudWxsIHx8IHRoaXMuX2lzU3BhbkVuZGVkKCkgPyB0aGlzIDogdC5sZW5ndGggPT09IDAgPyAoci53YXJuKFwiSW52YWxpZCBhdHRyaWJ1dGUga2V5OiBcIiArIHQpLCB0aGlzKSA6IFoociQxKSA/IE9iamVjdC5rZXlzKHRoaXMuYXR0cmlidXRlcykubGVuZ3RoID49IHRoaXMuX3NwYW5MaW1pdHMuYXR0cmlidXRlQ291bnRMaW1pdCAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYXR0cmlidXRlcywgdCkgPyAodGhpcy5fZHJvcHBlZEF0dHJpYnV0ZXNDb3VudCsrLCB0aGlzKSA6ICh0aGlzLmF0dHJpYnV0ZXNbdF0gPSB0aGlzLl90cnVuY2F0ZVRvU2l6ZShyJDEpLCB0aGlzKSA6IChyLndhcm4oXCJJbnZhbGlkIGF0dHJpYnV0ZSB2YWx1ZSBzZXQgZm9yIGtleTogXCIgKyB0KSwgdGhpcyk7XG4gICAgfSwgZS5wcm90b3R5cGUuc2V0QXR0cmlidXRlcyA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHZhciByLCBuO1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yICh2YXIgbyA9IEN0KE9iamVjdC5lbnRyaWVzKHQpKSwgaSA9IG8ubmV4dCgpOyAhaS5kb25lOyBpID0gby5uZXh0KCkpIHtcbiAgICAgICAgICB2YXIgYSA9IFgoaS52YWx1ZSwgMiksIHMgPSBhWzBdLCBsID0gYVsxXTtcbiAgICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZShzLCBsKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICByID0geyBlcnJvcjogdSB9O1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpICYmICFpLmRvbmUgJiYgKG4gPSBvLnJldHVybikgJiYgbi5jYWxsKG8pO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGlmIChyKSB0aHJvdyByLmVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LCBlLnByb3RvdHlwZS5hZGRFdmVudCA9IGZ1bmN0aW9uKHQsIHIkMSwgbikge1xuICAgICAgaWYgKHRoaXMuX2lzU3BhbkVuZGVkKCkpXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgaWYgKHRoaXMuX3NwYW5MaW1pdHMuZXZlbnRDb3VudExpbWl0ID09PSAwKVxuICAgICAgICByZXR1cm4gci53YXJuKFwiTm8gZXZlbnRzIGFsbG93ZWQuXCIpLCB0aGlzLl9kcm9wcGVkRXZlbnRzQ291bnQrKywgdGhpcztcbiAgICAgIHRoaXMuZXZlbnRzLmxlbmd0aCA+PSB0aGlzLl9zcGFuTGltaXRzLmV2ZW50Q291bnRMaW1pdCAmJiAodGhpcy5fZHJvcHBlZEV2ZW50c0NvdW50ID09PSAwICYmIHIuZGVidWcoXCJEcm9wcGluZyBleHRyYSBldmVudHMuXCIpLCB0aGlzLmV2ZW50cy5zaGlmdCgpLCB0aGlzLl9kcm9wcGVkRXZlbnRzQ291bnQrKyksIHFlKHIkMSkgJiYgKHFlKG4pIHx8IChuID0gciQxKSwgciQxID0gdm9pZCAwKTtcbiAgICAgIHZhciBvID0gWmUociQxKTtcbiAgICAgIHJldHVybiB0aGlzLmV2ZW50cy5wdXNoKHtcbiAgICAgICAgbmFtZTogdCxcbiAgICAgICAgYXR0cmlidXRlczogbyxcbiAgICAgICAgdGltZTogdGhpcy5fZ2V0VGltZShuKSxcbiAgICAgICAgZHJvcHBlZEF0dHJpYnV0ZXNDb3VudDogMFxuICAgICAgfSksIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUuYWRkTGluayA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiB0aGlzLmxpbmtzLnB1c2godCksIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUuYWRkTGlua3MgPSBmdW5jdGlvbih0KSB7XG4gICAgICB2YXIgcjtcbiAgICAgIHJldHVybiAociA9IHRoaXMubGlua3MpLnB1c2guYXBwbHkociwgeHQoW10sIFgodCksICExKSksIHRoaXM7XG4gICAgfSwgZS5wcm90b3R5cGUuc2V0U3RhdHVzID0gZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2lzU3BhbkVuZGVkKCkgPyB0aGlzIDogKHRoaXMuc3RhdHVzID0gVSh7fSwgdCksIHRoaXMuc3RhdHVzLm1lc3NhZ2UgIT0gbnVsbCAmJiB0eXBlb2YgdC5tZXNzYWdlICE9IFwic3RyaW5nXCIgJiYgKHIud2FybihcIkRyb3BwaW5nIGludmFsaWQgc3RhdHVzLm1lc3NhZ2Ugb2YgdHlwZSAnXCIgKyB0eXBlb2YgdC5tZXNzYWdlICsgXCInLCBleHBlY3RlZCAnc3RyaW5nJ1wiKSwgZGVsZXRlIHRoaXMuc3RhdHVzLm1lc3NhZ2UpLCB0aGlzKTtcbiAgICB9LCBlLnByb3RvdHlwZS51cGRhdGVOYW1lID0gZnVuY3Rpb24odCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2lzU3BhbkVuZGVkKCkgPyB0aGlzIDogKHRoaXMubmFtZSA9IHQsIHRoaXMpO1xuICAgIH0sIGUucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIGlmICh0aGlzLl9pc1NwYW5FbmRlZCgpKSB7XG4gICAgICAgIHIuZXJyb3IodGhpcy5uYW1lICsgXCIgXCIgKyB0aGlzLl9zcGFuQ29udGV4dC50cmFjZUlkICsgXCItXCIgKyB0aGlzLl9zcGFuQ29udGV4dC5zcGFuSWQgKyBcIiAtIFlvdSBjYW4gb25seSBjYWxsIGVuZCgpIG9uIGEgc3BhbiBvbmNlLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5fZW5kZWQgPSAhMCwgdGhpcy5lbmRUaW1lID0gdGhpcy5fZ2V0VGltZSh0KSwgdGhpcy5fZHVyYXRpb24gPSB3ZSh0aGlzLnN0YXJ0VGltZSwgdGhpcy5lbmRUaW1lKSwgdGhpcy5fZHVyYXRpb25bMF0gPCAwICYmIChyLndhcm4oXCJJbmNvbnNpc3RlbnQgc3RhcnQgYW5kIGVuZCB0aW1lLCBzdGFydFRpbWUgPiBlbmRUaW1lLiBTZXR0aW5nIHNwYW4gZHVyYXRpb24gdG8gMG1zLlwiLCB0aGlzLnN0YXJ0VGltZSwgdGhpcy5lbmRUaW1lKSwgdGhpcy5lbmRUaW1lID0gdGhpcy5zdGFydFRpbWUuc2xpY2UoKSwgdGhpcy5fZHVyYXRpb24gPSBbMCwgMF0pLCB0aGlzLl9kcm9wcGVkRXZlbnRzQ291bnQgPiAwICYmIHIud2FybihcIkRyb3BwZWQgXCIgKyB0aGlzLl9kcm9wcGVkRXZlbnRzQ291bnQgKyBcIiBldmVudHMgYmVjYXVzZSBldmVudENvdW50TGltaXQgcmVhY2hlZFwiKSwgdGhpcy5fc3BhblByb2Nlc3Nvci5vbkVuZCh0aGlzKTtcbiAgICB9LCBlLnByb3RvdHlwZS5fZ2V0VGltZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIGlmICh0eXBlb2YgdCA9PSBcIm51bWJlclwiICYmIHQgPD0gUi5ub3coKSlcbiAgICAgICAgcmV0dXJuIHBfKHQgKyB0aGlzLl9wZXJmb3JtYW5jZU9mZnNldCk7XG4gICAgICBpZiAodHlwZW9mIHQgPT0gXCJudW1iZXJcIilcbiAgICAgICAgcmV0dXJuIE8kMSh0KTtcbiAgICAgIGlmICh0IGluc3RhbmNlb2YgRGF0ZSlcbiAgICAgICAgcmV0dXJuIE8kMSh0LmdldFRpbWUoKSk7XG4gICAgICBpZiAoTl8odCkpXG4gICAgICAgIHJldHVybiB0O1xuICAgICAgaWYgKHRoaXMuX3N0YXJ0VGltZVByb3ZpZGVkKVxuICAgICAgICByZXR1cm4gTyQxKERhdGUubm93KCkpO1xuICAgICAgdmFyIHIgPSBSLm5vdygpIC0gdGhpcy5fcGVyZm9ybWFuY2VTdGFydFRpbWU7XG4gICAgICByZXR1cm4gSF8odGhpcy5zdGFydFRpbWUsIE8kMShyKSk7XG4gICAgfSwgZS5wcm90b3R5cGUuaXNSZWNvcmRpbmcgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9lbmRlZCA9PT0gITE7XG4gICAgfSwgZS5wcm90b3R5cGUucmVjb3JkRXhjZXB0aW9uID0gZnVuY3Rpb24odCwgciQxKSB7XG4gICAgICB2YXIgbiA9IHt9O1xuICAgICAgdHlwZW9mIHQgPT0gXCJzdHJpbmdcIiA/IG5bTkFdID0gdCA6IHQgJiYgKHQuY29kZSA/IG5bckFdID0gdC5jb2RlLnRvU3RyaW5nKCkgOiB0Lm5hbWUgJiYgKG5bckFdID0gdC5uYW1lKSwgdC5tZXNzYWdlICYmIChuW05BXSA9IHQubWVzc2FnZSksIHQuc3RhY2sgJiYgKG5bTUFdID0gdC5zdGFjaykpLCBuW3JBXSB8fCBuW05BXSA/IHRoaXMuYWRkRXZlbnQoYnQsIG4sIHIkMSkgOiByLndhcm4oXCJGYWlsZWQgdG8gcmVjb3JkIGFuIGV4Y2VwdGlvbiBcIiArIHQpO1xuICAgIH0sIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwgXCJkdXJhdGlvblwiLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZHVyYXRpb247XG4gICAgICB9LFxuICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICBjb25maWd1cmFibGU6ICEwXG4gICAgfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwgXCJlbmRlZFwiLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZW5kZWQ7XG4gICAgICB9LFxuICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICBjb25maWd1cmFibGU6ICEwXG4gICAgfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwgXCJkcm9wcGVkQXR0cmlidXRlc0NvdW50XCIsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kcm9wcGVkQXR0cmlidXRlc0NvdW50O1xuICAgICAgfSxcbiAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgIH0pLCBPYmplY3QuZGVmaW5lUHJvcGVydHkoZS5wcm90b3R5cGUsIFwiZHJvcHBlZEV2ZW50c0NvdW50XCIsIHtcbiAgICAgIGdldDogZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kcm9wcGVkRXZlbnRzQ291bnQ7XG4gICAgICB9LFxuICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICBjb25maWd1cmFibGU6ICEwXG4gICAgfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwgXCJkcm9wcGVkTGlua3NDb3VudFwiLCB7XG4gICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZHJvcHBlZExpbmtzQ291bnQ7XG4gICAgICB9LFxuICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICBjb25maWd1cmFibGU6ICEwXG4gICAgfSksIGUucHJvdG90eXBlLl9pc1NwYW5FbmRlZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2VuZGVkICYmIHIud2FybihcIkNhbiBub3QgZXhlY3V0ZSB0aGUgb3BlcmF0aW9uIG9uIGVuZGVkIFNwYW4ge3RyYWNlSWQ6IFwiICsgdGhpcy5fc3BhbkNvbnRleHQudHJhY2VJZCArIFwiLCBzcGFuSWQ6IFwiICsgdGhpcy5fc3BhbkNvbnRleHQuc3BhbklkICsgXCJ9XCIpLCB0aGlzLl9lbmRlZDtcbiAgICB9LCBlLnByb3RvdHlwZS5fdHJ1bmNhdGVUb0xpbWl0VXRpbCA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgIHJldHVybiB0Lmxlbmd0aCA8PSByID8gdCA6IHQuc3Vic3RyaW5nKDAsIHIpO1xuICAgIH0sIGUucHJvdG90eXBlLl90cnVuY2F0ZVRvU2l6ZSA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHZhciByJDEgPSB0aGlzLCBuID0gdGhpcy5fYXR0cmlidXRlVmFsdWVMZW5ndGhMaW1pdDtcbiAgICAgIHJldHVybiBuIDw9IDAgPyAoci53YXJuKFwiQXR0cmlidXRlIHZhbHVlIGxpbWl0IG11c3QgYmUgcG9zaXRpdmUsIGdvdCBcIiArIG4pLCB0KSA6IHR5cGVvZiB0ID09IFwic3RyaW5nXCIgPyB0aGlzLl90cnVuY2F0ZVRvTGltaXRVdGlsKHQsIG4pIDogQXJyYXkuaXNBcnJheSh0KSA/IHQubWFwKGZ1bmN0aW9uKG8pIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBvID09IFwic3RyaW5nXCIgPyByJDEuX3RydW5jYXRlVG9MaW1pdFV0aWwobywgbikgOiBvO1xuICAgICAgfSkgOiB0O1xuICAgIH0sIGU7XG4gIH0oKVxuKSwgUDtcbihmdW5jdGlvbihlKSB7XG4gIGVbZS5OT1RfUkVDT1JEID0gMF0gPSBcIk5PVF9SRUNPUkRcIiwgZVtlLlJFQ09SRCA9IDFdID0gXCJSRUNPUkRcIiwgZVtlLlJFQ09SRF9BTkRfU0FNUExFRCA9IDJdID0gXCJSRUNPUkRfQU5EX1NBTVBMRURcIjtcbn0pKFAgfHwgKFAgPSB7fSkpO1xudmFyIEkgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSgpIHtcbiAgICB9XG4gICAgcmV0dXJuIGUucHJvdG90eXBlLnNob3VsZFNhbXBsZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgZGVjaXNpb246IFAuTk9UX1JFQ09SRFxuICAgICAgfTtcbiAgICB9LCBlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIFwiQWx3YXlzT2ZmU2FtcGxlclwiO1xuICAgIH0sIGU7XG4gIH0oKVxuKSwgZyA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKCkge1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuc2hvdWxkU2FtcGxlID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkZWNpc2lvbjogUC5SRUNPUkRfQU5EX1NBTVBMRURcbiAgICAgIH07XG4gICAgfSwgZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBcIkFsd2F5c09uU2FtcGxlclwiO1xuICAgIH0sIGU7XG4gIH0oKVxuKSwgRCA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKHQpIHtcbiAgICAgIHZhciByLCBuLCBvLCBpO1xuICAgICAgdGhpcy5fcm9vdCA9IHQucm9vdCwgdGhpcy5fcm9vdCB8fCAobmUkMShuZXcgRXJyb3IoXCJQYXJlbnRCYXNlZFNhbXBsZXIgbXVzdCBoYXZlIGEgcm9vdCBzYW1wbGVyIGNvbmZpZ3VyZWRcIikpLCB0aGlzLl9yb290ID0gbmV3IGcoKSksIHRoaXMuX3JlbW90ZVBhcmVudFNhbXBsZWQgPSAociA9IHQucmVtb3RlUGFyZW50U2FtcGxlZCkgIT09IG51bGwgJiYgciAhPT0gdm9pZCAwID8gciA6IG5ldyBnKCksIHRoaXMuX3JlbW90ZVBhcmVudE5vdFNhbXBsZWQgPSAobiA9IHQucmVtb3RlUGFyZW50Tm90U2FtcGxlZCkgIT09IG51bGwgJiYgbiAhPT0gdm9pZCAwID8gbiA6IG5ldyBJKCksIHRoaXMuX2xvY2FsUGFyZW50U2FtcGxlZCA9IChvID0gdC5sb2NhbFBhcmVudFNhbXBsZWQpICE9PSBudWxsICYmIG8gIT09IHZvaWQgMCA/IG8gOiBuZXcgZygpLCB0aGlzLl9sb2NhbFBhcmVudE5vdFNhbXBsZWQgPSAoaSA9IHQubG9jYWxQYXJlbnROb3RTYW1wbGVkKSAhPT0gbnVsbCAmJiBpICE9PSB2b2lkIDAgPyBpIDogbmV3IEkoKTtcbiAgICB9XG4gICAgcmV0dXJuIGUucHJvdG90eXBlLnNob3VsZFNhbXBsZSA9IGZ1bmN0aW9uKHQsIHIsIG4sIG8sIGksIGEpIHtcbiAgICAgIHZhciBzID0gR2UuZ2V0U3BhbkNvbnRleHQodCk7XG4gICAgICByZXR1cm4gIXMgfHwgIWJuKHMpID8gdGhpcy5fcm9vdC5zaG91bGRTYW1wbGUodCwgciwgbiwgbywgaSwgYSkgOiBzLmlzUmVtb3RlID8gcy50cmFjZUZsYWdzICYgSnQuU0FNUExFRCA/IHRoaXMuX3JlbW90ZVBhcmVudFNhbXBsZWQuc2hvdWxkU2FtcGxlKHQsIHIsIG4sIG8sIGksIGEpIDogdGhpcy5fcmVtb3RlUGFyZW50Tm90U2FtcGxlZC5zaG91bGRTYW1wbGUodCwgciwgbiwgbywgaSwgYSkgOiBzLnRyYWNlRmxhZ3MgJiBKdC5TQU1QTEVEID8gdGhpcy5fbG9jYWxQYXJlbnRTYW1wbGVkLnNob3VsZFNhbXBsZSh0LCByLCBuLCBvLCBpLCBhKSA6IHRoaXMuX2xvY2FsUGFyZW50Tm90U2FtcGxlZC5zaG91bGRTYW1wbGUodCwgciwgbiwgbywgaSwgYSk7XG4gICAgfSwgZS5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBcIlBhcmVudEJhc2Vke3Jvb3Q9XCIgKyB0aGlzLl9yb290LnRvU3RyaW5nKCkgKyBcIiwgcmVtb3RlUGFyZW50U2FtcGxlZD1cIiArIHRoaXMuX3JlbW90ZVBhcmVudFNhbXBsZWQudG9TdHJpbmcoKSArIFwiLCByZW1vdGVQYXJlbnROb3RTYW1wbGVkPVwiICsgdGhpcy5fcmVtb3RlUGFyZW50Tm90U2FtcGxlZC50b1N0cmluZygpICsgXCIsIGxvY2FsUGFyZW50U2FtcGxlZD1cIiArIHRoaXMuX2xvY2FsUGFyZW50U2FtcGxlZC50b1N0cmluZygpICsgXCIsIGxvY2FsUGFyZW50Tm90U2FtcGxlZD1cIiArIHRoaXMuX2xvY2FsUGFyZW50Tm90U2FtcGxlZC50b1N0cmluZygpICsgXCJ9XCI7XG4gICAgfSwgZTtcbiAgfSgpXG4pLCBXID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUodCkge1xuICAgICAgdCA9PT0gdm9pZCAwICYmICh0ID0gMCksIHRoaXMuX3JhdGlvID0gdCwgdGhpcy5fcmF0aW8gPSB0aGlzLl9ub3JtYWxpemUodCksIHRoaXMuX3VwcGVyQm91bmQgPSBNYXRoLmZsb29yKHRoaXMuX3JhdGlvICogNDI5NDk2NzI5NSk7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5zaG91bGRTYW1wbGUgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBkZWNpc2lvbjogdXMocikgJiYgdGhpcy5fYWNjdW11bGF0ZShyKSA8IHRoaXMuX3VwcGVyQm91bmQgPyBQLlJFQ09SRF9BTkRfU0FNUExFRCA6IFAuTk9UX1JFQ09SRFxuICAgICAgfTtcbiAgICB9LCBlLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIFwiVHJhY2VJZFJhdGlvQmFzZWR7XCIgKyB0aGlzLl9yYXRpbyArIFwifVwiO1xuICAgIH0sIGUucHJvdG90eXBlLl9ub3JtYWxpemUgPSBmdW5jdGlvbih0KSB7XG4gICAgICByZXR1cm4gdHlwZW9mIHQgIT0gXCJudW1iZXJcIiB8fCBpc05hTih0KSA/IDAgOiB0ID49IDEgPyAxIDogdCA8PSAwID8gMCA6IHQ7XG4gICAgfSwgZS5wcm90b3R5cGUuX2FjY3VtdWxhdGUgPSBmdW5jdGlvbih0KSB7XG4gICAgICBmb3IgKHZhciByID0gMCwgbiA9IDA7IG4gPCB0Lmxlbmd0aCAvIDg7IG4rKykge1xuICAgICAgICB2YXIgbyA9IG4gKiA4LCBpID0gcGFyc2VJbnQodC5zbGljZShvLCBvICsgOCksIDE2KTtcbiAgICAgICAgciA9IChyIF4gaSkgPj4+IDA7XG4gICAgICB9XG4gICAgICByZXR1cm4gcjtcbiAgICB9LCBlO1xuICB9KClcbiksIFJ0ID0gciQxLkFsd2F5c09uLCBFID0gMTtcbmZ1bmN0aW9uIEooKSB7XG4gIHZhciBlID0gT1QoKTtcbiAgcmV0dXJuIHtcbiAgICBzYW1wbGVyOiAkKGUpLFxuICAgIGZvcmNlRmx1c2hUaW1lb3V0TWlsbGlzOiAzZTQsXG4gICAgZ2VuZXJhbExpbWl0czoge1xuICAgICAgYXR0cmlidXRlVmFsdWVMZW5ndGhMaW1pdDogZS5PVEVMX0FUVFJJQlVURV9WQUxVRV9MRU5HVEhfTElNSVQsXG4gICAgICBhdHRyaWJ1dGVDb3VudExpbWl0OiBlLk9URUxfQVRUUklCVVRFX0NPVU5UX0xJTUlUXG4gICAgfSxcbiAgICBzcGFuTGltaXRzOiB7XG4gICAgICBhdHRyaWJ1dGVWYWx1ZUxlbmd0aExpbWl0OiBlLk9URUxfU1BBTl9BVFRSSUJVVEVfVkFMVUVfTEVOR1RIX0xJTUlULFxuICAgICAgYXR0cmlidXRlQ291bnRMaW1pdDogZS5PVEVMX1NQQU5fQVRUUklCVVRFX0NPVU5UX0xJTUlULFxuICAgICAgbGlua0NvdW50TGltaXQ6IGUuT1RFTF9TUEFOX0xJTktfQ09VTlRfTElNSVQsXG4gICAgICBldmVudENvdW50TGltaXQ6IGUuT1RFTF9TUEFOX0VWRU5UX0NPVU5UX0xJTUlULFxuICAgICAgYXR0cmlidXRlUGVyRXZlbnRDb3VudExpbWl0OiBlLk9URUxfU1BBTl9BVFRSSUJVVEVfUEVSX0VWRU5UX0NPVU5UX0xJTUlULFxuICAgICAgYXR0cmlidXRlUGVyTGlua0NvdW50TGltaXQ6IGUuT1RFTF9TUEFOX0FUVFJJQlVURV9QRVJfTElOS19DT1VOVF9MSU1JVFxuICAgIH0sXG4gICAgbWVyZ2VSZXNvdXJjZVdpdGhEZWZhdWx0czogITBcbiAgfTtcbn1cbmZ1bmN0aW9uICQoZSkge1xuICBzd2l0Y2ggKGUgPT09IHZvaWQgMCAmJiAoZSA9IE9UKCkpLCBlLk9URUxfVFJBQ0VTX1NBTVBMRVIpIHtcbiAgICBjYXNlIHIkMS5BbHdheXNPbjpcbiAgICAgIHJldHVybiBuZXcgZygpO1xuICAgIGNhc2UgciQxLkFsd2F5c09mZjpcbiAgICAgIHJldHVybiBuZXcgSSgpO1xuICAgIGNhc2UgciQxLlBhcmVudEJhc2VkQWx3YXlzT246XG4gICAgICByZXR1cm4gbmV3IEQoe1xuICAgICAgICByb290OiBuZXcgZygpXG4gICAgICB9KTtcbiAgICBjYXNlIHIkMS5QYXJlbnRCYXNlZEFsd2F5c09mZjpcbiAgICAgIHJldHVybiBuZXcgRCh7XG4gICAgICAgIHJvb3Q6IG5ldyBJKClcbiAgICAgIH0pO1xuICAgIGNhc2UgciQxLlRyYWNlSWRSYXRpbzpcbiAgICAgIHJldHVybiBuZXcgVyhZKGUpKTtcbiAgICBjYXNlIHIkMS5QYXJlbnRCYXNlZFRyYWNlSWRSYXRpbzpcbiAgICAgIHJldHVybiBuZXcgRCh7XG4gICAgICAgIHJvb3Q6IG5ldyBXKFkoZSkpXG4gICAgICB9KTtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIHIuZXJyb3IoJ09URUxfVFJBQ0VTX1NBTVBMRVIgdmFsdWUgXCInICsgZS5PVEVMX1RSQUNFU19TQU1QTEVSICsgXCIgaW52YWxpZCwgZGVmYXVsdGluZyB0byBcIiArIFJ0ICsgJ1wiLicpLCBuZXcgZygpO1xuICB9XG59XG5mdW5jdGlvbiBZKGUpIHtcbiAgaWYgKGUuT1RFTF9UUkFDRVNfU0FNUExFUl9BUkcgPT09IHZvaWQgMCB8fCBlLk9URUxfVFJBQ0VTX1NBTVBMRVJfQVJHID09PSBcIlwiKVxuICAgIHJldHVybiByLmVycm9yKFwiT1RFTF9UUkFDRVNfU0FNUExFUl9BUkcgaXMgYmxhbmssIGRlZmF1bHRpbmcgdG8gXCIgKyBFICsgXCIuXCIpLCBFO1xuICB2YXIgdCA9IE51bWJlcihlLk9URUxfVFJBQ0VTX1NBTVBMRVJfQVJHKTtcbiAgcmV0dXJuIGlzTmFOKHQpID8gKHIuZXJyb3IoXCJPVEVMX1RSQUNFU19TQU1QTEVSX0FSRz1cIiArIGUuT1RFTF9UUkFDRVNfU0FNUExFUl9BUkcgKyBcIiB3YXMgZ2l2ZW4sIGJ1dCBpdCBpcyBpbnZhbGlkLCBkZWZhdWx0aW5nIHRvIFwiICsgRSArIFwiLlwiKSwgRSkgOiB0IDwgMCB8fCB0ID4gMSA/IChyLmVycm9yKFwiT1RFTF9UUkFDRVNfU0FNUExFUl9BUkc9XCIgKyBlLk9URUxfVFJBQ0VTX1NBTVBMRVJfQVJHICsgXCIgd2FzIGdpdmVuLCBidXQgaXQgaXMgb3V0IG9mIHJhbmdlIChbMC4uMV0pLCBkZWZhdWx0aW5nIHRvIFwiICsgRSArIFwiLlwiKSwgRSkgOiB0O1xufVxuZnVuY3Rpb24gSXQoZSkge1xuICB2YXIgdCA9IHtcbiAgICBzYW1wbGVyOiAkKClcbiAgfSwgciA9IEooKSwgbiA9IE9iamVjdC5hc3NpZ24oe30sIHIsIHQsIGUpO1xuICByZXR1cm4gbi5nZW5lcmFsTGltaXRzID0gT2JqZWN0LmFzc2lnbih7fSwgci5nZW5lcmFsTGltaXRzLCBlLmdlbmVyYWxMaW1pdHMgfHwge30pLCBuLnNwYW5MaW1pdHMgPSBPYmplY3QuYXNzaWduKHt9LCByLnNwYW5MaW1pdHMsIGUuc3BhbkxpbWl0cyB8fCB7fSksIG47XG59XG5mdW5jdGlvbiBNdChlKSB7XG4gIHZhciB0LCByLCBuLCBvLCBpLCBhLCBzLCBsLCB1LCBwLCBmLCBjLCB5ID0gT2JqZWN0LmFzc2lnbih7fSwgZS5zcGFuTGltaXRzKSwgbSA9IExUKCk7XG4gIHJldHVybiB5LmF0dHJpYnV0ZUNvdW50TGltaXQgPSAoYSA9IChpID0gKG8gPSAociA9ICh0ID0gZS5zcGFuTGltaXRzKSA9PT0gbnVsbCB8fCB0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0LmF0dHJpYnV0ZUNvdW50TGltaXQpICE9PSBudWxsICYmIHIgIT09IHZvaWQgMCA/IHIgOiAobiA9IGUuZ2VuZXJhbExpbWl0cykgPT09IG51bGwgfHwgbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogbi5hdHRyaWJ1dGVDb3VudExpbWl0KSAhPT0gbnVsbCAmJiBvICE9PSB2b2lkIDAgPyBvIDogbS5PVEVMX1NQQU5fQVRUUklCVVRFX0NPVU5UX0xJTUlUKSAhPT0gbnVsbCAmJiBpICE9PSB2b2lkIDAgPyBpIDogbS5PVEVMX0FUVFJJQlVURV9DT1VOVF9MSU1JVCkgIT09IG51bGwgJiYgYSAhPT0gdm9pZCAwID8gYSA6IFAkMSwgeS5hdHRyaWJ1dGVWYWx1ZUxlbmd0aExpbWl0ID0gKGMgPSAoZiA9IChwID0gKGwgPSAocyA9IGUuc3BhbkxpbWl0cykgPT09IG51bGwgfHwgcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcy5hdHRyaWJ1dGVWYWx1ZUxlbmd0aExpbWl0KSAhPT0gbnVsbCAmJiBsICE9PSB2b2lkIDAgPyBsIDogKHUgPSBlLmdlbmVyYWxMaW1pdHMpID09PSBudWxsIHx8IHUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHUuYXR0cmlidXRlVmFsdWVMZW5ndGhMaW1pdCkgIT09IG51bGwgJiYgcCAhPT0gdm9pZCAwID8gcCA6IG0uT1RFTF9TUEFOX0FUVFJJQlVURV9WQUxVRV9MRU5HVEhfTElNSVQpICE9PSBudWxsICYmIGYgIT09IHZvaWQgMCA/IGYgOiBtLk9URUxfQVRUUklCVVRFX1ZBTFVFX0xFTkdUSF9MSU1JVCkgIT09IG51bGwgJiYgYyAhPT0gdm9pZCAwID8gYyA6IE0sIE9iamVjdC5hc3NpZ24oe30sIGUsIHsgc3BhbkxpbWl0czogeSB9KTtcbn1cbnZhciBOdCA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKHQsIHIkMSkge1xuICAgICAgdGhpcy5fZXhwb3J0ZXIgPSB0LCB0aGlzLl9pc0V4cG9ydGluZyA9ICExLCB0aGlzLl9maW5pc2hlZFNwYW5zID0gW10sIHRoaXMuX2Ryb3BwZWRTcGFuc0NvdW50ID0gMDtcbiAgICAgIHZhciBuID0gT1QoKTtcbiAgICAgIHRoaXMuX21heEV4cG9ydEJhdGNoU2l6ZSA9IHR5cGVvZiAociQxID09IG51bGwgPyB2b2lkIDAgOiByJDEubWF4RXhwb3J0QmF0Y2hTaXplKSA9PSBcIm51bWJlclwiID8gciQxLm1heEV4cG9ydEJhdGNoU2l6ZSA6IG4uT1RFTF9CU1BfTUFYX0VYUE9SVF9CQVRDSF9TSVpFLCB0aGlzLl9tYXhRdWV1ZVNpemUgPSB0eXBlb2YgKHIkMSA9PSBudWxsID8gdm9pZCAwIDogciQxLm1heFF1ZXVlU2l6ZSkgPT0gXCJudW1iZXJcIiA/IHIkMS5tYXhRdWV1ZVNpemUgOiBuLk9URUxfQlNQX01BWF9RVUVVRV9TSVpFLCB0aGlzLl9zY2hlZHVsZWREZWxheU1pbGxpcyA9IHR5cGVvZiAociQxID09IG51bGwgPyB2b2lkIDAgOiByJDEuc2NoZWR1bGVkRGVsYXlNaWxsaXMpID09IFwibnVtYmVyXCIgPyByJDEuc2NoZWR1bGVkRGVsYXlNaWxsaXMgOiBuLk9URUxfQlNQX1NDSEVEVUxFX0RFTEFZLCB0aGlzLl9leHBvcnRUaW1lb3V0TWlsbGlzID0gdHlwZW9mIChyJDEgPT0gbnVsbCA/IHZvaWQgMCA6IHIkMS5leHBvcnRUaW1lb3V0TWlsbGlzKSA9PSBcIm51bWJlclwiID8gciQxLmV4cG9ydFRpbWVvdXRNaWxsaXMgOiBuLk9URUxfQlNQX0VYUE9SVF9USU1FT1VULCB0aGlzLl9zaHV0ZG93bk9uY2UgPSBuZXcgWnIodGhpcy5fc2h1dGRvd24sIHRoaXMpLCB0aGlzLl9tYXhFeHBvcnRCYXRjaFNpemUgPiB0aGlzLl9tYXhRdWV1ZVNpemUgJiYgKHIud2FybihcIkJhdGNoU3BhblByb2Nlc3NvcjogbWF4RXhwb3J0QmF0Y2hTaXplIG11c3QgYmUgc21hbGxlciBvciBlcXVhbCB0byBtYXhRdWV1ZVNpemUsIHNldHRpbmcgbWF4RXhwb3J0QmF0Y2hTaXplIHRvIG1hdGNoIG1heFF1ZXVlU2l6ZVwiKSwgdGhpcy5fbWF4RXhwb3J0QmF0Y2hTaXplID0gdGhpcy5fbWF4UXVldWVTaXplKTtcbiAgICB9XG4gICAgcmV0dXJuIGUucHJvdG90eXBlLmZvcmNlRmx1c2ggPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zaHV0ZG93bk9uY2UuaXNDYWxsZWQgPyB0aGlzLl9zaHV0ZG93bk9uY2UucHJvbWlzZSA6IHRoaXMuX2ZsdXNoQWxsKCk7XG4gICAgfSwgZS5wcm90b3R5cGUub25TdGFydCA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICB9LCBlLnByb3RvdHlwZS5vbkVuZCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHRoaXMuX3NodXRkb3duT25jZS5pc0NhbGxlZCB8fCB0LnNwYW5Db250ZXh0KCkudHJhY2VGbGFncyAmIEp0LlNBTVBMRUQgJiYgdGhpcy5fYWRkVG9CdWZmZXIodCk7XG4gICAgfSwgZS5wcm90b3R5cGUuc2h1dGRvd24gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zaHV0ZG93bk9uY2UuY2FsbCgpO1xuICAgIH0sIGUucHJvdG90eXBlLl9zaHV0ZG93biA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHQgPSB0aGlzO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0Lm9uU2h1dGRvd24oKTtcbiAgICAgIH0pLnRoZW4oZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0Ll9mbHVzaEFsbCgpO1xuICAgICAgfSkudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHQuX2V4cG9ydGVyLnNodXRkb3duKCk7XG4gICAgICB9KTtcbiAgICB9LCBlLnByb3RvdHlwZS5fYWRkVG9CdWZmZXIgPSBmdW5jdGlvbih0KSB7XG4gICAgICBpZiAodGhpcy5fZmluaXNoZWRTcGFucy5sZW5ndGggPj0gdGhpcy5fbWF4UXVldWVTaXplKSB7XG4gICAgICAgIHRoaXMuX2Ryb3BwZWRTcGFuc0NvdW50ID09PSAwICYmIHIuZGVidWcoXCJtYXhRdWV1ZVNpemUgcmVhY2hlZCwgZHJvcHBpbmcgc3BhbnNcIiksIHRoaXMuX2Ryb3BwZWRTcGFuc0NvdW50Kys7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2Ryb3BwZWRTcGFuc0NvdW50ID4gMCAmJiAoci53YXJuKFwiRHJvcHBlZCBcIiArIHRoaXMuX2Ryb3BwZWRTcGFuc0NvdW50ICsgXCIgc3BhbnMgYmVjYXVzZSBtYXhRdWV1ZVNpemUgcmVhY2hlZFwiKSwgdGhpcy5fZHJvcHBlZFNwYW5zQ291bnQgPSAwKSwgdGhpcy5fZmluaXNoZWRTcGFucy5wdXNoKHQpLCB0aGlzLl9tYXliZVN0YXJ0VGltZXIoKTtcbiAgICB9LCBlLnByb3RvdHlwZS5fZmx1c2hBbGwgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB0ID0gdGhpcztcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyLCBuKSB7XG4gICAgICAgIGZvciAodmFyIG8gPSBbXSwgaSA9IE1hdGguY2VpbCh0Ll9maW5pc2hlZFNwYW5zLmxlbmd0aCAvIHQuX21heEV4cG9ydEJhdGNoU2l6ZSksIGEgPSAwLCBzID0gaTsgYSA8IHM7IGErKylcbiAgICAgICAgICBvLnB1c2godC5fZmx1c2hPbmVCYXRjaCgpKTtcbiAgICAgICAgUHJvbWlzZS5hbGwobykudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgICByKCk7XG4gICAgICAgIH0pLmNhdGNoKG4pO1xuICAgICAgfSk7XG4gICAgfSwgZS5wcm90b3R5cGUuX2ZsdXNoT25lQmF0Y2ggPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB0ID0gdGhpcztcbiAgICAgIHJldHVybiB0aGlzLl9jbGVhclRpbWVyKCksIHRoaXMuX2ZpbmlzaGVkU3BhbnMubGVuZ3RoID09PSAwID8gUHJvbWlzZS5yZXNvbHZlKCkgOiBuZXcgUHJvbWlzZShmdW5jdGlvbihyLCBuKSB7XG4gICAgICAgIHZhciBvID0gc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICBuKG5ldyBFcnJvcihcIlRpbWVvdXRcIikpO1xuICAgICAgICB9LCB0Ll9leHBvcnRUaW1lb3V0TWlsbGlzKTtcbiAgICAgICAgVWUud2l0aChXJDEoVWUuYWN0aXZlKCkpLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICB2YXIgaTtcbiAgICAgICAgICB0Ll9maW5pc2hlZFNwYW5zLmxlbmd0aCA8PSB0Ll9tYXhFeHBvcnRCYXRjaFNpemUgPyAoaSA9IHQuX2ZpbmlzaGVkU3BhbnMsIHQuX2ZpbmlzaGVkU3BhbnMgPSBbXSkgOiBpID0gdC5fZmluaXNoZWRTcGFucy5zcGxpY2UoMCwgdC5fbWF4RXhwb3J0QmF0Y2hTaXplKTtcbiAgICAgICAgICBmb3IgKHZhciBhJDEgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0Ll9leHBvcnRlci5leHBvcnQoaSwgZnVuY3Rpb24oZikge1xuICAgICAgICAgICAgICB2YXIgYztcbiAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KG8pLCBmLmNvZGUgPT09IGEuU1VDQ0VTUyA/IHIoKSA6IG4oKGMgPSBmLmVycm9yKSAhPT0gbnVsbCAmJiBjICE9PSB2b2lkIDAgPyBjIDogbmV3IEVycm9yKFwiQmF0Y2hTcGFuUHJvY2Vzc29yOiBzcGFuIGV4cG9ydCBmYWlsZWRcIikpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSwgcyA9IG51bGwsIGwgPSAwLCB1ID0gaS5sZW5ndGg7IGwgPCB1OyBsKyspIHtcbiAgICAgICAgICAgIHZhciBwID0gaVtsXTtcbiAgICAgICAgICAgIHAucmVzb3VyY2UuYXN5bmNBdHRyaWJ1dGVzUGVuZGluZyAmJiBwLnJlc291cmNlLndhaXRGb3JBc3luY0F0dHJpYnV0ZXMgJiYgKHMgPz8gKHMgPSBbXSksIHMucHVzaChwLnJlc291cmNlLndhaXRGb3JBc3luY0F0dHJpYnV0ZXMoKSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzID09PSBudWxsID8gYSQxKCkgOiBQcm9taXNlLmFsbChzKS50aGVuKGEkMSwgZnVuY3Rpb24oZikge1xuICAgICAgICAgICAgbmUkMShmKSwgbihmKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9LCBlLnByb3RvdHlwZS5fbWF5YmVTdGFydFRpbWVyID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgdCA9IHRoaXM7XG4gICAgICBpZiAoIXRoaXMuX2lzRXhwb3J0aW5nKSB7XG4gICAgICAgIHZhciByID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdC5faXNFeHBvcnRpbmcgPSAhMCwgdC5fZmx1c2hPbmVCYXRjaCgpLmZpbmFsbHkoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB0Ll9pc0V4cG9ydGluZyA9ICExLCB0Ll9maW5pc2hlZFNwYW5zLmxlbmd0aCA+IDAgJiYgKHQuX2NsZWFyVGltZXIoKSwgdC5fbWF5YmVTdGFydFRpbWVyKCkpO1xuICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgICAgIHQuX2lzRXhwb3J0aW5nID0gITEsIG5lJDEobik7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIGlmICh0aGlzLl9maW5pc2hlZFNwYW5zLmxlbmd0aCA+PSB0aGlzLl9tYXhFeHBvcnRCYXRjaFNpemUpXG4gICAgICAgICAgcmV0dXJuIHIoKTtcbiAgICAgICAgdGhpcy5fdGltZXIgPT09IHZvaWQgMCAmJiAodGhpcy5fdGltZXIgPSBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiByKCk7XG4gICAgICAgIH0sIHRoaXMuX3NjaGVkdWxlZERlbGF5TWlsbGlzKSwgc3IodGhpcy5fdGltZXIpKTtcbiAgICAgIH1cbiAgICB9LCBlLnByb3RvdHlwZS5fY2xlYXJUaW1lciA9IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5fdGltZXIgIT09IHZvaWQgMCAmJiAoY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVyKSwgdGhpcy5fdGltZXIgPSB2b2lkIDApO1xuICAgIH0sIGU7XG4gIH0oKVxuKSwgQnQgPSAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oKSB7XG4gIHZhciBlID0gZnVuY3Rpb24odCwgcikge1xuICAgIHJldHVybiBlID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24obiwgbykge1xuICAgICAgbi5fX3Byb3RvX18gPSBvO1xuICAgIH0gfHwgZnVuY3Rpb24obiwgbykge1xuICAgICAgZm9yICh2YXIgaSBpbiBvKSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgaSkgJiYgKG5baV0gPSBvW2ldKTtcbiAgICB9LCBlKHQsIHIpO1xuICB9O1xuICByZXR1cm4gZnVuY3Rpb24odCwgcikge1xuICAgIGlmICh0eXBlb2YgciAhPSBcImZ1bmN0aW9uXCIgJiYgciAhPT0gbnVsbClcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKHIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICBlKHQsIHIpO1xuICAgIGZ1bmN0aW9uIG4oKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gdDtcbiAgICB9XG4gICAgdC5wcm90b3R5cGUgPSByID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShyKSA6IChuLnByb3RvdHlwZSA9IHIucHJvdG90eXBlLCBuZXcgbigpKTtcbiAgfTtcbn0oKSwgRHQgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oZSkge1xuICAgIEJ0KHQsIGUpO1xuICAgIGZ1bmN0aW9uIHQociwgbikge1xuICAgICAgdmFyIG8gPSBlLmNhbGwodGhpcywgciwgbikgfHwgdGhpcztcbiAgICAgIHJldHVybiBvLm9uSW5pdChuKSwgbztcbiAgICB9XG4gICAgcmV0dXJuIHQucHJvdG90eXBlLm9uSW5pdCA9IGZ1bmN0aW9uKHIpIHtcbiAgICAgIHZhciBuID0gdGhpcztcbiAgICAgIChyID09IG51bGwgPyB2b2lkIDAgOiByLmRpc2FibGVBdXRvRmx1c2hPbkRvY3VtZW50SGlkZSkgIT09ICEwICYmIHR5cGVvZiBkb2N1bWVudCA8IFwidVwiICYmICh0aGlzLl92aXNpYmlsaXR5Q2hhbmdlTGlzdGVuZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlID09PSBcImhpZGRlblwiICYmIG4uZm9yY2VGbHVzaCgpLmNhdGNoKGZ1bmN0aW9uKG8pIHtcbiAgICAgICAgICBuZSQxKG8pO1xuICAgICAgICB9KTtcbiAgICAgIH0sIHRoaXMuX3BhZ2VIaWRlTGlzdGVuZXIgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgbi5mb3JjZUZsdXNoKCkuY2F0Y2goZnVuY3Rpb24obykge1xuICAgICAgICAgIG5lJDEobyk7XG4gICAgICAgIH0pO1xuICAgICAgfSwgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInZpc2liaWxpdHljaGFuZ2VcIiwgdGhpcy5fdmlzaWJpbGl0eUNoYW5nZUxpc3RlbmVyKSwgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInBhZ2VoaWRlXCIsIHRoaXMuX3BhZ2VIaWRlTGlzdGVuZXIpKTtcbiAgICB9LCB0LnByb3RvdHlwZS5vblNodXRkb3duID0gZnVuY3Rpb24oKSB7XG4gICAgICB0eXBlb2YgZG9jdW1lbnQgPCBcInVcIiAmJiAodGhpcy5fdmlzaWJpbGl0eUNoYW5nZUxpc3RlbmVyICYmIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ2aXNpYmlsaXR5Y2hhbmdlXCIsIHRoaXMuX3Zpc2liaWxpdHlDaGFuZ2VMaXN0ZW5lciksIHRoaXMuX3BhZ2VIaWRlTGlzdGVuZXIgJiYgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBhZ2VoaWRlXCIsIHRoaXMuX3BhZ2VIaWRlTGlzdGVuZXIpKTtcbiAgICB9LCB0O1xuICB9KE50KVxuKSwgVXQgPSA4LCBGdCA9IDE2LCBHdCA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICAvKiBAX19QVVJFX18gKi8gZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSgpIHtcbiAgICAgIHRoaXMuZ2VuZXJhdGVUcmFjZUlkID0gcShGdCksIHRoaXMuZ2VuZXJhdGVTcGFuSWQgPSBxKFV0KTtcbiAgICB9XG4gICAgcmV0dXJuIGU7XG4gIH0oKVxuKSwgeCA9IEFycmF5KDMyKTtcbmZ1bmN0aW9uIHEoZSkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgZm9yICh2YXIgciA9IDA7IHIgPCBlICogMjsgcisrKVxuICAgICAgeFtyXSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDE2KSArIDQ4LCB4W3JdID49IDU4ICYmICh4W3JdICs9IDM5KTtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCB4LnNsaWNlKDAsIGUgKiAyKSk7XG4gIH07XG59XG52YXIgenQgPSAoXG4gIC8qKiBAY2xhc3MgKi9cbiAgZnVuY3Rpb24oKSB7XG4gICAgZnVuY3Rpb24gZSh0LCByLCBuKSB7XG4gICAgICB0aGlzLl90cmFjZXJQcm92aWRlciA9IG47XG4gICAgICB2YXIgbyA9IEl0KHIpO1xuICAgICAgdGhpcy5fc2FtcGxlciA9IG8uc2FtcGxlciwgdGhpcy5fZ2VuZXJhbExpbWl0cyA9IG8uZ2VuZXJhbExpbWl0cywgdGhpcy5fc3BhbkxpbWl0cyA9IG8uc3BhbkxpbWl0cywgdGhpcy5faWRHZW5lcmF0b3IgPSByLmlkR2VuZXJhdG9yIHx8IG5ldyBHdCgpLCB0aGlzLnJlc291cmNlID0gbi5yZXNvdXJjZSwgdGhpcy5pbnN0cnVtZW50YXRpb25MaWJyYXJ5ID0gdDtcbiAgICB9XG4gICAgcmV0dXJuIGUucHJvdG90eXBlLnN0YXJ0U3BhbiA9IGZ1bmN0aW9uKHQsIHIkMSwgbikge1xuICAgICAgdmFyIG8sIGksIGE7XG4gICAgICByJDEgPT09IHZvaWQgMCAmJiAociQxID0ge30pLCBuID09PSB2b2lkIDAgJiYgKG4gPSBVZS5hY3RpdmUoKSksIHIkMS5yb290ICYmIChuID0gR2UuZGVsZXRlU3BhbihuKSk7XG4gICAgICB2YXIgcyA9IEdlLmdldFNwYW4obik7XG4gICAgICBpZiAodyhuKSkge1xuICAgICAgICByLmRlYnVnKFwiSW5zdHJ1bWVudGF0aW9uIHN1cHByZXNzZWQsIHJldHVybmluZyBOb29wIFNwYW5cIik7XG4gICAgICAgIHZhciBsID0gR2Uud3JhcFNwYW5Db250ZXh0KG9zKTtcbiAgICAgICAgcmV0dXJuIGw7XG4gICAgICB9XG4gICAgICB2YXIgdSA9IHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMuc3BhbkNvbnRleHQoKSwgcCQxID0gdGhpcy5faWRHZW5lcmF0b3IuZ2VuZXJhdGVTcGFuSWQoKSwgZiwgYywgeTtcbiAgICAgICF1IHx8ICFHZS5pc1NwYW5Db250ZXh0VmFsaWQodSkgPyBmID0gdGhpcy5faWRHZW5lcmF0b3IuZ2VuZXJhdGVUcmFjZUlkKCkgOiAoZiA9IHUudHJhY2VJZCwgYyA9IHUudHJhY2VTdGF0ZSwgeSA9IHUuc3BhbklkKTtcbiAgICAgIHZhciBtID0gKG8gPSByJDEua2luZCkgIT09IG51bGwgJiYgbyAhPT0gdm9pZCAwID8gbyA6IGx0LklOVEVSTkFMLCBGID0gKChpID0gciQxLmxpbmtzKSAhPT0gbnVsbCAmJiBpICE9PSB2b2lkIDAgPyBpIDogW10pLm1hcChmdW5jdGlvbihqKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgY29udGV4dDogai5jb250ZXh0LFxuICAgICAgICAgIGF0dHJpYnV0ZXM6IFplKGouYXR0cmlidXRlcylcbiAgICAgICAgfTtcbiAgICAgIH0pLCBHID0gWmUociQxLmF0dHJpYnV0ZXMpLCBiID0gdGhpcy5fc2FtcGxlci5zaG91bGRTYW1wbGUobiwgZiwgdCwgbSwgRywgRik7XG4gICAgICBjID0gKGEgPSBiLnRyYWNlU3RhdGUpICE9PSBudWxsICYmIGEgIT09IHZvaWQgMCA/IGEgOiBjO1xuICAgICAgdmFyIHR0ID0gYi5kZWNpc2lvbiA9PT0gcC5SRUNPUkRfQU5EX1NBTVBMRUQgPyBKdC5TQU1QTEVEIDogSnQuTk9ORSwgeiA9IHsgdHJhY2VJZDogZiwgc3BhbklkOiBwJDEsIHRyYWNlRmxhZ3M6IHR0LCB0cmFjZVN0YXRlOiBjIH07XG4gICAgICBpZiAoYi5kZWNpc2lvbiA9PT0gcC5OT1RfUkVDT1JEKSB7XG4gICAgICAgIHIuZGVidWcoXCJSZWNvcmRpbmcgaXMgb2ZmLCBwcm9wYWdhdGluZyBjb250ZXh0IGluIGEgbm9uLXJlY29yZGluZyBzcGFuXCIpO1xuICAgICAgICB2YXIgbCA9IEdlLndyYXBTcGFuQ29udGV4dCh6KTtcbiAgICAgICAgcmV0dXJuIGw7XG4gICAgICB9XG4gICAgICB2YXIgZXQgPSBaZShPYmplY3QuYXNzaWduKEcsIGIuYXR0cmlidXRlcykpLCBydCA9IG5ldyBPdCh0aGlzLCBuLCB0LCB6LCBtLCB5LCBGLCByJDEuc3RhcnRUaW1lLCB2b2lkIDAsIGV0KTtcbiAgICAgIHJldHVybiBydDtcbiAgICB9LCBlLnByb3RvdHlwZS5zdGFydEFjdGl2ZVNwYW4gPSBmdW5jdGlvbih0LCByLCBuLCBvKSB7XG4gICAgICB2YXIgaSwgYSwgcztcbiAgICAgIGlmICghKGFyZ3VtZW50cy5sZW5ndGggPCAyKSkge1xuICAgICAgICBhcmd1bWVudHMubGVuZ3RoID09PSAyID8gcyA9IHIgOiBhcmd1bWVudHMubGVuZ3RoID09PSAzID8gKGkgPSByLCBzID0gbikgOiAoaSA9IHIsIGEgPSBuLCBzID0gbyk7XG4gICAgICAgIHZhciBsID0gYSA/PyBVZS5hY3RpdmUoKSwgdSA9IHRoaXMuc3RhcnRTcGFuKHQsIGksIGwpLCBwID0gR2Uuc2V0U3BhbihsLCB1KTtcbiAgICAgICAgcmV0dXJuIFVlLndpdGgocCwgcywgdm9pZCAwLCB1KTtcbiAgICAgIH1cbiAgICB9LCBlLnByb3RvdHlwZS5nZXRHZW5lcmFsTGltaXRzID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2VuZXJhbExpbWl0cztcbiAgICB9LCBlLnByb3RvdHlwZS5nZXRTcGFuTGltaXRzID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc3BhbkxpbWl0cztcbiAgICB9LCBlLnByb3RvdHlwZS5nZXRBY3RpdmVTcGFuUHJvY2Vzc29yID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fdHJhY2VyUHJvdmlkZXIuZ2V0QWN0aXZlU3BhblByb2Nlc3NvcigpO1xuICAgIH0sIGU7XG4gIH0oKVxuKSwgTyA9IGZ1bmN0aW9uKGUpIHtcbiAgdmFyIHQgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIHIgPSB0ICYmIGVbdF0sIG4gPSAwO1xuICBpZiAocikgcmV0dXJuIHIuY2FsbChlKTtcbiAgaWYgKGUgJiYgdHlwZW9mIGUubGVuZ3RoID09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gZSAmJiBuID49IGUubGVuZ3RoICYmIChlID0gdm9pZCAwKSwgeyB2YWx1ZTogZSAmJiBlW24rK10sIGRvbmU6ICFlIH07XG4gICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHQgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59LCBLID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUodCkge1xuICAgICAgdGhpcy5fc3BhblByb2Nlc3NvcnMgPSB0O1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuZm9yY2VGbHVzaCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHQsIHIsIG4gPSBbXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAodmFyIG8gPSBPKHRoaXMuX3NwYW5Qcm9jZXNzb3JzKSwgaSA9IG8ubmV4dCgpOyAhaS5kb25lOyBpID0gby5uZXh0KCkpIHtcbiAgICAgICAgICB2YXIgYSA9IGkudmFsdWU7XG4gICAgICAgICAgbi5wdXNoKGEuZm9yY2VGbHVzaCgpKTtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAocykge1xuICAgICAgICB0ID0geyBlcnJvcjogcyB9O1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpICYmICFpLmRvbmUgJiYgKHIgPSBvLnJldHVybikgJiYgci5jYWxsKG8pO1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGlmICh0KSB0aHJvdyB0LmVycm9yO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocykge1xuICAgICAgICBQcm9taXNlLmFsbChuKS50aGVuKGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHMoKTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24obCkge1xuICAgICAgICAgIG5lJDEobCB8fCBuZXcgRXJyb3IoXCJNdWx0aVNwYW5Qcm9jZXNzb3I6IGZvcmNlRmx1c2ggZmFpbGVkXCIpKSwgcygpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0sIGUucHJvdG90eXBlLm9uU3RhcnQgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICB2YXIgbiwgbztcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAodmFyIGkgPSBPKHRoaXMuX3NwYW5Qcm9jZXNzb3JzKSwgYSA9IGkubmV4dCgpOyAhYS5kb25lOyBhID0gaS5uZXh0KCkpIHtcbiAgICAgICAgICB2YXIgcyA9IGEudmFsdWU7XG4gICAgICAgICAgcy5vblN0YXJ0KHQsIHIpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChsKSB7XG4gICAgICAgIG4gPSB7IGVycm9yOiBsIH07XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGEgJiYgIWEuZG9uZSAmJiAobyA9IGkucmV0dXJuKSAmJiBvLmNhbGwoaSk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgaWYgKG4pIHRocm93IG4uZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBlLnByb3RvdHlwZS5vbkVuZCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHZhciByLCBuO1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yICh2YXIgbyA9IE8odGhpcy5fc3BhblByb2Nlc3NvcnMpLCBpID0gby5uZXh0KCk7ICFpLmRvbmU7IGkgPSBvLm5leHQoKSkge1xuICAgICAgICAgIHZhciBhID0gaS52YWx1ZTtcbiAgICAgICAgICBhLm9uRW5kKHQpO1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChzKSB7XG4gICAgICAgIHIgPSB7IGVycm9yOiBzIH07XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGkgJiYgIWkuZG9uZSAmJiAobiA9IG8ucmV0dXJuKSAmJiBuLmNhbGwobyk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgaWYgKHIpIHRocm93IHIuZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LCBlLnByb3RvdHlwZS5zaHV0ZG93biA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHQsIHIsIG4gPSBbXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciAodmFyIG8gPSBPKHRoaXMuX3NwYW5Qcm9jZXNzb3JzKSwgaSA9IG8ubmV4dCgpOyAhaS5kb25lOyBpID0gby5uZXh0KCkpIHtcbiAgICAgICAgICB2YXIgYSA9IGkudmFsdWU7XG4gICAgICAgICAgbi5wdXNoKGEuc2h1dGRvd24oKSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKHMpIHtcbiAgICAgICAgdCA9IHsgZXJyb3I6IHMgfTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaSAmJiAhaS5kb25lICYmIChyID0gby5yZXR1cm4pICYmIHIuY2FsbChvKTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICBpZiAodCkgdGhyb3cgdC5lcnJvcjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHMsIGwpIHtcbiAgICAgICAgUHJvbWlzZS5hbGwobikudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgICBzKCk7XG4gICAgICAgIH0sIGwpO1xuICAgICAgfSk7XG4gICAgfSwgZTtcbiAgfSgpXG4pLCBqdCA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKCkge1xuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUub25TdGFydCA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICB9LCBlLnByb3RvdHlwZS5vbkVuZCA9IGZ1bmN0aW9uKHQpIHtcbiAgICB9LCBlLnByb3RvdHlwZS5zaHV0ZG93biA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH0sIGUucHJvdG90eXBlLmZvcmNlRmx1c2ggPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9LCBlO1xuICB9KClcbiksIFZ0ID0gZnVuY3Rpb24oZSwgdCkge1xuICB2YXIgciA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIGVbU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFyKSByZXR1cm4gZTtcbiAgdmFyIG4gPSByLmNhbGwoZSksIG8sIGkgPSBbXSwgYTtcbiAgdHJ5IHtcbiAgICBmb3IgKDsgKHQgPT09IHZvaWQgMCB8fCB0LS0gPiAwKSAmJiAhKG8gPSBuLm5leHQoKSkuZG9uZTsgKSBpLnB1c2goby52YWx1ZSk7XG4gIH0gY2F0Y2ggKHMpIHtcbiAgICBhID0geyBlcnJvcjogcyB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBvICYmICFvLmRvbmUgJiYgKHIgPSBuLnJldHVybikgJiYgci5jYWxsKG4pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoYSkgdGhyb3cgYS5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGk7XG59LCBrdCA9IGZ1bmN0aW9uKGUsIHQsIHIpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIG4gPSAwLCBvID0gdC5sZW5ndGgsIGk7IG4gPCBvOyBuKyspXG4gICAgKGkgfHwgIShuIGluIHQpKSAmJiAoaSB8fCAoaSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQsIDAsIG4pKSwgaVtuXSA9IHRbbl0pO1xuICByZXR1cm4gZS5jb25jYXQoaSB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSk7XG59LCBTO1xuKGZ1bmN0aW9uKGUpIHtcbiAgZVtlLnJlc29sdmVkID0gMF0gPSBcInJlc29sdmVkXCIsIGVbZS50aW1lb3V0ID0gMV0gPSBcInRpbWVvdXRcIiwgZVtlLmVycm9yID0gMl0gPSBcImVycm9yXCIsIGVbZS51bnJlc29sdmVkID0gM10gPSBcInVucmVzb2x2ZWRcIjtcbn0pKFMgfHwgKFMgPSB7fSkpO1xudmFyIHJlID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUodCkge1xuICAgICAgdCA9PT0gdm9pZCAwICYmICh0ID0ge30pO1xuICAgICAgdmFyIHIsIG47XG4gICAgICB0aGlzLl9yZWdpc3RlcmVkU3BhblByb2Nlc3NvcnMgPSBbXSwgdGhpcy5fdHJhY2VycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gICAgICB2YXIgbyA9IGtyKHt9LCBKKCksIE10KHQpKTtcbiAgICAgIGlmICh0aGlzLnJlc291cmNlID0gKHIgPSBvLnJlc291cmNlKSAhPT0gbnVsbCAmJiByICE9PSB2b2lkIDAgPyByIDogUiQxLmVtcHR5KCksIG8ubWVyZ2VSZXNvdXJjZVdpdGhEZWZhdWx0cyAmJiAodGhpcy5yZXNvdXJjZSA9IFIkMS5kZWZhdWx0KCkubWVyZ2UodGhpcy5yZXNvdXJjZSkpLCB0aGlzLl9jb25maWcgPSBPYmplY3QuYXNzaWduKHt9LCBvLCB7XG4gICAgICAgIHJlc291cmNlOiB0aGlzLnJlc291cmNlXG4gICAgICB9KSwgISgobiA9IHQuc3BhblByb2Nlc3NvcnMpID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCkgJiYgbi5sZW5ndGgpXG4gICAgICAgIHRoaXMuX3JlZ2lzdGVyZWRTcGFuUHJvY2Vzc29ycyA9IGt0KFtdLCBWdCh0LnNwYW5Qcm9jZXNzb3JzKSwgITEpLCB0aGlzLmFjdGl2ZVNwYW5Qcm9jZXNzb3IgPSBuZXcgSyh0aGlzLl9yZWdpc3RlcmVkU3BhblByb2Nlc3NvcnMpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIHZhciBpID0gdGhpcy5fYnVpbGRFeHBvcnRlckZyb21FbnYoKTtcbiAgICAgICAgaWYgKGkgIT09IHZvaWQgMCkge1xuICAgICAgICAgIHZhciBhID0gbmV3IER0KGkpO1xuICAgICAgICAgIHRoaXMuYWN0aXZlU3BhblByb2Nlc3NvciA9IGE7XG4gICAgICAgIH0gZWxzZVxuICAgICAgICAgIHRoaXMuYWN0aXZlU3BhblByb2Nlc3NvciA9IG5ldyBqdCgpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZS5wcm90b3R5cGUuZ2V0VHJhY2VyID0gZnVuY3Rpb24odCwgciwgbikge1xuICAgICAgdmFyIG8gPSB0ICsgXCJAXCIgKyAociB8fCBcIlwiKSArIFwiOlwiICsgKChuID09IG51bGwgPyB2b2lkIDAgOiBuLnNjaGVtYVVybCkgfHwgXCJcIik7XG4gICAgICByZXR1cm4gdGhpcy5fdHJhY2Vycy5oYXMobykgfHwgdGhpcy5fdHJhY2Vycy5zZXQobywgbmV3IHp0KHsgbmFtZTogdCwgdmVyc2lvbjogciwgc2NoZW1hVXJsOiBuID09IG51bGwgPyB2b2lkIDAgOiBuLnNjaGVtYVVybCB9LCB0aGlzLl9jb25maWcsIHRoaXMpKSwgdGhpcy5fdHJhY2Vycy5nZXQobyk7XG4gICAgfSwgZS5wcm90b3R5cGUuYWRkU3BhblByb2Nlc3NvciA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHRoaXMuX3JlZ2lzdGVyZWRTcGFuUHJvY2Vzc29ycy5sZW5ndGggPT09IDAgJiYgdGhpcy5hY3RpdmVTcGFuUHJvY2Vzc29yLnNodXRkb3duKCkuY2F0Y2goZnVuY3Rpb24ociQxKSB7XG4gICAgICAgIHJldHVybiByLmVycm9yKFwiRXJyb3Igd2hpbGUgdHJ5aW5nIHRvIHNodXRkb3duIGN1cnJlbnQgc3BhbiBwcm9jZXNzb3JcIiwgciQxKTtcbiAgICAgIH0pLCB0aGlzLl9yZWdpc3RlcmVkU3BhblByb2Nlc3NvcnMucHVzaCh0KSwgdGhpcy5hY3RpdmVTcGFuUHJvY2Vzc29yID0gbmV3IEsodGhpcy5fcmVnaXN0ZXJlZFNwYW5Qcm9jZXNzb3JzKTtcbiAgICB9LCBlLnByb3RvdHlwZS5nZXRBY3RpdmVTcGFuUHJvY2Vzc29yID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5hY3RpdmVTcGFuUHJvY2Vzc29yO1xuICAgIH0sIGUucHJvdG90eXBlLnJlZ2lzdGVyID0gZnVuY3Rpb24odCkge1xuICAgICAgdCA9PT0gdm9pZCAwICYmICh0ID0ge30pLCBHZS5zZXRHbG9iYWxUcmFjZXJQcm92aWRlcih0aGlzKSwgdC5wcm9wYWdhdG9yID09PSB2b2lkIDAgJiYgKHQucHJvcGFnYXRvciA9IHRoaXMuX2J1aWxkUHJvcGFnYXRvckZyb21FbnYoKSksIHQuY29udGV4dE1hbmFnZXIgJiYgVWUuc2V0R2xvYmFsQ29udGV4dE1hbmFnZXIodC5jb250ZXh0TWFuYWdlciksIHQucHJvcGFnYXRvciAmJiB5Xy5zZXRHbG9iYWxQcm9wYWdhdG9yKHQucHJvcGFnYXRvcik7XG4gICAgfSwgZS5wcm90b3R5cGUuZm9yY2VGbHVzaCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHQgPSB0aGlzLl9jb25maWcuZm9yY2VGbHVzaFRpbWVvdXRNaWxsaXMsIHIgPSB0aGlzLl9yZWdpc3RlcmVkU3BhblByb2Nlc3NvcnMubWFwKGZ1bmN0aW9uKG4pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG8pIHtcbiAgICAgICAgICB2YXIgaSwgYSA9IHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBvKG5ldyBFcnJvcihcIlNwYW4gcHJvY2Vzc29yIGRpZCBub3QgY29tcGxldGVkIHdpdGhpbiB0aW1lb3V0IHBlcmlvZCBvZiBcIiArIHQgKyBcIiBtc1wiKSksIGkgPSBTLnRpbWVvdXQ7XG4gICAgICAgICAgfSwgdCk7XG4gICAgICAgICAgbi5mb3JjZUZsdXNoKCkudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGNsZWFyVGltZW91dChhKSwgaSAhPT0gUy50aW1lb3V0ICYmIChpID0gUy5yZXNvbHZlZCwgbyhpKSk7XG4gICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocykge1xuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KGEpLCBpID0gUy5lcnJvciwgbyhzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuLCBvKSB7XG4gICAgICAgIFByb21pc2UuYWxsKHIpLnRoZW4oZnVuY3Rpb24oaSkge1xuICAgICAgICAgIHZhciBhID0gaS5maWx0ZXIoZnVuY3Rpb24ocykge1xuICAgICAgICAgICAgcmV0dXJuIHMgIT09IFMucmVzb2x2ZWQ7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYS5sZW5ndGggPiAwID8gbyhhKSA6IG4oKTtcbiAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24oaSkge1xuICAgICAgICAgIHJldHVybiBvKFtpXSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSwgZS5wcm90b3R5cGUuc2h1dGRvd24gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmFjdGl2ZVNwYW5Qcm9jZXNzb3Iuc2h1dGRvd24oKTtcbiAgICB9LCBlLnByb3RvdHlwZS5fZ2V0UHJvcGFnYXRvciA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHZhciByO1xuICAgICAgcmV0dXJuIChyID0gdGhpcy5jb25zdHJ1Y3Rvci5fcmVnaXN0ZXJlZFByb3BhZ2F0b3JzLmdldCh0KSkgPT09IG51bGwgfHwgciA9PT0gdm9pZCAwID8gdm9pZCAwIDogcigpO1xuICAgIH0sIGUucHJvdG90eXBlLl9nZXRTcGFuRXhwb3J0ZXIgPSBmdW5jdGlvbih0KSB7XG4gICAgICB2YXIgcjtcbiAgICAgIHJldHVybiAociA9IHRoaXMuY29uc3RydWN0b3IuX3JlZ2lzdGVyZWRFeHBvcnRlcnMuZ2V0KHQpKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByKCk7XG4gICAgfSwgZS5wcm90b3R5cGUuX2J1aWxkUHJvcGFnYXRvckZyb21FbnYgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciB0ID0gdGhpcywgciQxID0gQXJyYXkuZnJvbShuZXcgU2V0KE9UKCkuT1RFTF9QUk9QQUdBVE9SUykpLCBuID0gciQxLm1hcChmdW5jdGlvbihpKSB7XG4gICAgICAgIHZhciBhID0gdC5fZ2V0UHJvcGFnYXRvcihpKTtcbiAgICAgICAgcmV0dXJuIGEgfHwgci53YXJuKCdQcm9wYWdhdG9yIFwiJyArIGkgKyAnXCIgcmVxdWVzdGVkIHRocm91Z2ggZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgdW5hdmFpbGFibGUuJyksIGE7XG4gICAgICB9KSwgbyA9IG4ucmVkdWNlKGZ1bmN0aW9uKGksIGEpIHtcbiAgICAgICAgcmV0dXJuIGEgJiYgaS5wdXNoKGEpLCBpO1xuICAgICAgfSwgW10pO1xuICAgICAgaWYgKG8ubGVuZ3RoICE9PSAwKVxuICAgICAgICByZXR1cm4gciQxLmxlbmd0aCA9PT0gMSA/IG9bMF0gOiBuZXcgcHIoe1xuICAgICAgICAgIHByb3BhZ2F0b3JzOiBvXG4gICAgICAgIH0pO1xuICAgIH0sIGUucHJvdG90eXBlLl9idWlsZEV4cG9ydGVyRnJvbUVudiA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHQgPSBPVCgpLk9URUxfVFJBQ0VTX0VYUE9SVEVSO1xuICAgICAgaWYgKCEodCA9PT0gXCJub25lXCIgfHwgdCA9PT0gXCJcIikpIHtcbiAgICAgICAgdmFyIHIkMSA9IHRoaXMuX2dldFNwYW5FeHBvcnRlcih0KTtcbiAgICAgICAgcmV0dXJuIHIkMSB8fCByLmVycm9yKCdFeHBvcnRlciBcIicgKyB0ICsgJ1wiIHJlcXVlc3RlZCB0aHJvdWdoIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIHVuYXZhaWxhYmxlLicpLCByJDE7XG4gICAgICB9XG4gICAgfSwgZS5fcmVnaXN0ZXJlZFByb3BhZ2F0b3JzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoW1xuICAgICAgW1widHJhY2Vjb250ZXh0XCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbmV3IGJyKCk7XG4gICAgICB9XSxcbiAgICAgIFtcImJhZ2dhZ2VcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBuZXcgSmUoKTtcbiAgICAgIH1dXG4gICAgXSksIGUuX3JlZ2lzdGVyZWRFeHBvcnRlcnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpLCBlO1xuICB9KClcbiksIEh0ID0gZnVuY3Rpb24oZSkge1xuICB2YXIgdCA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgciA9IHQgJiYgZVt0XSwgbiA9IDA7XG4gIGlmIChyKSByZXR1cm4gci5jYWxsKGUpO1xuICBpZiAoZSAmJiB0eXBlb2YgZS5sZW5ndGggPT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBlICYmIG4gPj0gZS5sZW5ndGggJiYgKGUgPSB2b2lkIDApLCB7IHZhbHVlOiBlICYmIGVbbisrXSwgZG9uZTogIWUgfTtcbiAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IodCA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn0sIG5lID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUoKSB7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5leHBvcnQgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2VuZFNwYW5zKHQsIHIpO1xuICAgIH0sIGUucHJvdG90eXBlLnNodXRkb3duID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2VuZFNwYW5zKFtdKSwgdGhpcy5mb3JjZUZsdXNoKCk7XG4gICAgfSwgZS5wcm90b3R5cGUuZm9yY2VGbHVzaCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xuICAgIH0sIGUucHJvdG90eXBlLl9leHBvcnRJbmZvID0gZnVuY3Rpb24odCkge1xuICAgICAgdmFyIHI7XG4gICAgICByZXR1cm4ge1xuICAgICAgICByZXNvdXJjZToge1xuICAgICAgICAgIGF0dHJpYnV0ZXM6IHQucmVzb3VyY2UuYXR0cmlidXRlc1xuICAgICAgICB9LFxuICAgICAgICBpbnN0cnVtZW50YXRpb25TY29wZTogdC5pbnN0cnVtZW50YXRpb25MaWJyYXJ5LFxuICAgICAgICB0cmFjZUlkOiB0LnNwYW5Db250ZXh0KCkudHJhY2VJZCxcbiAgICAgICAgcGFyZW50SWQ6IHQucGFyZW50U3BhbklkLFxuICAgICAgICB0cmFjZVN0YXRlOiAociA9IHQuc3BhbkNvbnRleHQoKS50cmFjZVN0YXRlKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByLnNlcmlhbGl6ZSgpLFxuICAgICAgICBuYW1lOiB0Lm5hbWUsXG4gICAgICAgIGlkOiB0LnNwYW5Db250ZXh0KCkuc3BhbklkLFxuICAgICAgICBraW5kOiB0LmtpbmQsXG4gICAgICAgIHRpbWVzdGFtcDoga2UodC5zdGFydFRpbWUpLFxuICAgICAgICBkdXJhdGlvbjoga2UodC5kdXJhdGlvbiksXG4gICAgICAgIGF0dHJpYnV0ZXM6IHQuYXR0cmlidXRlcyxcbiAgICAgICAgc3RhdHVzOiB0LnN0YXR1cyxcbiAgICAgICAgZXZlbnRzOiB0LmV2ZW50cyxcbiAgICAgICAgbGlua3M6IHQubGlua3NcbiAgICAgIH07XG4gICAgfSwgZS5wcm90b3R5cGUuX3NlbmRTcGFucyA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICAgIHZhciBuLCBvO1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yICh2YXIgaSA9IEh0KHQpLCBhJDEgPSBpLm5leHQoKTsgIWEkMS5kb25lOyBhJDEgPSBpLm5leHQoKSkge1xuICAgICAgICAgIHZhciBzID0gYSQxLnZhbHVlO1xuICAgICAgICAgIGNvbnNvbGUuZGlyKHRoaXMuX2V4cG9ydEluZm8ocyksIHsgZGVwdGg6IDMgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGwpIHtcbiAgICAgICAgbiA9IHsgZXJyb3I6IGwgfTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYSQxICYmICFhJDEuZG9uZSAmJiAobyA9IGkucmV0dXJuKSAmJiBvLmNhbGwoaSk7XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgaWYgKG4pIHRocm93IG4uZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChyKVxuICAgICAgICByZXR1cm4gcih7IGNvZGU6IGEuU1VDQ0VTUyB9KTtcbiAgICB9LCBlO1xuICB9KClcbiksIFF0ID0gZnVuY3Rpb24oZSwgdCkge1xuICB2YXIgciA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIGVbU3ltYm9sLml0ZXJhdG9yXTtcbiAgaWYgKCFyKSByZXR1cm4gZTtcbiAgdmFyIG4gPSByLmNhbGwoZSksIG8sIGkgPSBbXSwgYTtcbiAgdHJ5IHtcbiAgICBmb3IgKDsgKHQgPT09IHZvaWQgMCB8fCB0LS0gPiAwKSAmJiAhKG8gPSBuLm5leHQoKSkuZG9uZTsgKSBpLnB1c2goby52YWx1ZSk7XG4gIH0gY2F0Y2ggKHMpIHtcbiAgICBhID0geyBlcnJvcjogcyB9O1xuICB9IGZpbmFsbHkge1xuICAgIHRyeSB7XG4gICAgICBvICYmICFvLmRvbmUgJiYgKHIgPSBuLnJldHVybikgJiYgci5jYWxsKG4pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBpZiAoYSkgdGhyb3cgYS5lcnJvcjtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGk7XG59LCBYdCA9IGZ1bmN0aW9uKGUsIHQsIHIpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIG4gPSAwLCBvID0gdC5sZW5ndGgsIGk7IG4gPCBvOyBuKyspXG4gICAgKGkgfHwgIShuIGluIHQpKSAmJiAoaSB8fCAoaSA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHQsIDAsIG4pKSwgaVtuXSA9IHRbbl0pO1xuICByZXR1cm4gZS5jb25jYXQoaSB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0KSk7XG59LCBpZSA9IChcbiAgLyoqIEBjbGFzcyAqL1xuICBmdW5jdGlvbigpIHtcbiAgICBmdW5jdGlvbiBlKCkge1xuICAgICAgdGhpcy5fZmluaXNoZWRTcGFucyA9IFtdLCB0aGlzLl9zdG9wcGVkID0gITE7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5leHBvcnQgPSBmdW5jdGlvbih0LCByKSB7XG4gICAgICB2YXIgbjtcbiAgICAgIGlmICh0aGlzLl9zdG9wcGVkKVxuICAgICAgICByZXR1cm4gcih7XG4gICAgICAgICAgY29kZTogYS5GQUlMRUQsXG4gICAgICAgICAgZXJyb3I6IG5ldyBFcnJvcihcIkV4cG9ydGVyIGhhcyBiZWVuIHN0b3BwZWRcIilcbiAgICAgICAgfSk7XG4gICAgICAobiA9IHRoaXMuX2ZpbmlzaGVkU3BhbnMpLnB1c2guYXBwbHkobiwgWHQoW10sIFF0KHQpLCAhMSkpLCBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcih7IGNvZGU6IGEuU1VDQ0VTUyB9KTtcbiAgICAgIH0sIDApO1xuICAgIH0sIGUucHJvdG90eXBlLnNodXRkb3duID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc3RvcHBlZCA9ICEwLCB0aGlzLl9maW5pc2hlZFNwYW5zID0gW10sIHRoaXMuZm9yY2VGbHVzaCgpO1xuICAgIH0sIGUucHJvdG90eXBlLmZvcmNlRmx1c2ggPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgICB9LCBlLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdGhpcy5fZmluaXNoZWRTcGFucyA9IFtdO1xuICAgIH0sIGUucHJvdG90eXBlLmdldEZpbmlzaGVkU3BhbnMgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9maW5pc2hlZFNwYW5zO1xuICAgIH0sIGU7XG4gIH0oKVxuKSwgV3QgPSBmdW5jdGlvbihlLCB0LCByLCBuKSB7XG4gIGZ1bmN0aW9uIG8oaSkge1xuICAgIHJldHVybiBpIGluc3RhbmNlb2YgciA/IGkgOiBuZXcgcihmdW5jdGlvbihhKSB7XG4gICAgICBhKGkpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBuZXcgKHIgfHwgKHIgPSBQcm9taXNlKSkoZnVuY3Rpb24oaSwgYSkge1xuICAgIGZ1bmN0aW9uIHMocCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdShuLm5leHQocCkpO1xuICAgICAgfSBjYXRjaCAoZikge1xuICAgICAgICBhKGYpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBsKHApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHUobi50aHJvdyhwKSk7XG4gICAgICB9IGNhdGNoIChmKSB7XG4gICAgICAgIGEoZik7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHUocCkge1xuICAgICAgcC5kb25lID8gaShwLnZhbHVlKSA6IG8ocC52YWx1ZSkudGhlbihzLCBsKTtcbiAgICB9XG4gICAgdSgobiA9IG4uYXBwbHkoZSwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn0sIFl0ID0gZnVuY3Rpb24oZSwgdCkge1xuICB2YXIgciA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmIChpWzBdICYgMSkgdGhyb3cgaVsxXTtcbiAgICByZXR1cm4gaVsxXTtcbiAgfSwgdHJ5czogW10sIG9wczogW10gfSwgbiwgbywgaSwgYTtcbiAgcmV0dXJuIGEgPSB7IG5leHQ6IHMoMCksIHRocm93OiBzKDEpLCByZXR1cm46IHMoMikgfSwgdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgKGFbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgYTtcbiAgZnVuY3Rpb24gcyh1KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHApIHtcbiAgICAgIHJldHVybiBsKFt1LCBwXSk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBsKHUpIHtcbiAgICBpZiAobikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgZm9yICg7IHI7ICkgdHJ5IHtcbiAgICAgIGlmIChuID0gMSwgbyAmJiAoaSA9IHVbMF0gJiAyID8gby5yZXR1cm4gOiB1WzBdID8gby50aHJvdyB8fCAoKGkgPSBvLnJldHVybikgJiYgaS5jYWxsKG8pLCAwKSA6IG8ubmV4dCkgJiYgIShpID0gaS5jYWxsKG8sIHVbMV0pKS5kb25lKSByZXR1cm4gaTtcbiAgICAgIHN3aXRjaCAobyA9IDAsIGkgJiYgKHUgPSBbdVswXSAmIDIsIGkudmFsdWVdKSwgdVswXSkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBpID0gdTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiByLmxhYmVsKyssIHsgdmFsdWU6IHVbMV0sIGRvbmU6ICExIH07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByLmxhYmVsKyssIG8gPSB1WzFdLCB1ID0gWzBdO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgdSA9IHIub3BzLnBvcCgpLCByLnRyeXMucG9wKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKGkgPSByLnRyeXMsICEoaSA9IGkubGVuZ3RoID4gMCAmJiBpW2kubGVuZ3RoIC0gMV0pICYmICh1WzBdID09PSA2IHx8IHVbMF0gPT09IDIpKSB7XG4gICAgICAgICAgICByID0gMDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodVswXSA9PT0gMyAmJiAoIWkgfHwgdVsxXSA+IGlbMF0gJiYgdVsxXSA8IGlbM10pKSB7XG4gICAgICAgICAgICByLmxhYmVsID0gdVsxXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAodVswXSA9PT0gNiAmJiByLmxhYmVsIDwgaVsxXSkge1xuICAgICAgICAgICAgci5sYWJlbCA9IGlbMV0sIGkgPSB1O1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChpICYmIHIubGFiZWwgPCBpWzJdKSB7XG4gICAgICAgICAgICByLmxhYmVsID0gaVsyXSwgci5vcHMucHVzaCh1KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpWzJdICYmIHIub3BzLnBvcCgpLCByLnRyeXMucG9wKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICB1ID0gdC5jYWxsKGUsIHIpO1xuICAgIH0gY2F0Y2ggKHApIHtcbiAgICAgIHUgPSBbNiwgcF0sIG8gPSAwO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBuID0gaSA9IDA7XG4gICAgfVxuICAgIGlmICh1WzBdICYgNSkgdGhyb3cgdVsxXTtcbiAgICByZXR1cm4geyB2YWx1ZTogdVswXSA/IHVbMV0gOiB2b2lkIDAsIGRvbmU6ICEwIH07XG4gIH1cbn0sIG9lID0gKFxuICAvKiogQGNsYXNzICovXG4gIGZ1bmN0aW9uKCkge1xuICAgIGZ1bmN0aW9uIGUodCkge1xuICAgICAgdGhpcy5fZXhwb3J0ZXIgPSB0LCB0aGlzLl9zaHV0ZG93bk9uY2UgPSBuZXcgWnIodGhpcy5fc2h1dGRvd24sIHRoaXMpLCB0aGlzLl91bnJlc29sdmVkRXhwb3J0cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7XG4gICAgfVxuICAgIHJldHVybiBlLnByb3RvdHlwZS5mb3JjZUZsdXNoID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gV3QodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gWXQodGhpcywgZnVuY3Rpb24odCkge1xuICAgICAgICAgIHN3aXRjaCAodC5sYWJlbCkge1xuICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICByZXR1cm4gWzQsIFByb21pc2UuYWxsKEFycmF5LmZyb20odGhpcy5fdW5yZXNvbHZlZEV4cG9ydHMpKV07XG4gICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgIHJldHVybiB0LnNlbnQoKSwgdGhpcy5fZXhwb3J0ZXIuZm9yY2VGbHVzaCA/IFs0LCB0aGlzLl9leHBvcnRlci5mb3JjZUZsdXNoKCldIDogWzMsIDNdO1xuICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICB0LnNlbnQoKSwgdC5sYWJlbCA9IDM7XG4gICAgICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgMlxuICAgICAgICAgICAgICAgIC8qcmV0dXJuKi9cbiAgICAgICAgICAgICAgXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSwgZS5wcm90b3R5cGUub25TdGFydCA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICB9LCBlLnByb3RvdHlwZS5vbkVuZCA9IGZ1bmN0aW9uKHQpIHtcbiAgICAgIHZhciByID0gdGhpcywgbiwgbztcbiAgICAgIGlmICghdGhpcy5fc2h1dGRvd25PbmNlLmlzQ2FsbGVkICYmIHQuc3BhbkNvbnRleHQoKS50cmFjZUZsYWdzICYgSnQuU0FNUExFRCkge1xuICAgICAgICB2YXIgaSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiB0dC5fZXhwb3J0KHIuX2V4cG9ydGVyLCBbdF0pLnRoZW4oZnVuY3Rpb24ocykge1xuICAgICAgICAgICAgdmFyIGw7XG4gICAgICAgICAgICBzLmNvZGUgIT09IGEuU1VDQ0VTUyAmJiBuZSQxKChsID0gcy5lcnJvcikgIT09IG51bGwgJiYgbCAhPT0gdm9pZCAwID8gbCA6IG5ldyBFcnJvcihcIlNpbXBsZVNwYW5Qcm9jZXNzb3I6IHNwYW4gZXhwb3J0IGZhaWxlZCAoc3RhdHVzIFwiICsgcyArIFwiKVwiKSk7XG4gICAgICAgICAgfSkuY2F0Y2goZnVuY3Rpb24ocykge1xuICAgICAgICAgICAgbmUkMShzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgaWYgKHQucmVzb3VyY2UuYXN5bmNBdHRyaWJ1dGVzUGVuZGluZykge1xuICAgICAgICAgIHZhciBhJDEgPSAobyA9IChuID0gdC5yZXNvdXJjZSkud2FpdEZvckFzeW5jQXR0cmlidXRlcykgPT09IG51bGwgfHwgbyA9PT0gdm9pZCAwID8gdm9pZCAwIDogby5jYWxsKG4pLnRoZW4oZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gYSQxICE9IG51bGwgJiYgci5fdW5yZXNvbHZlZEV4cG9ydHMuZGVsZXRlKGEkMSksIGkoKTtcbiAgICAgICAgICB9LCBmdW5jdGlvbihzKSB7XG4gICAgICAgICAgICByZXR1cm4gbmUkMShzKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBhJDEgIT0gbnVsbCAmJiB0aGlzLl91bnJlc29sdmVkRXhwb3J0cy5hZGQoYSQxKTtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgaSgpO1xuICAgICAgfVxuICAgIH0sIGUucHJvdG90eXBlLnNodXRkb3duID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2h1dGRvd25PbmNlLmNhbGwoKTtcbiAgICB9LCBlLnByb3RvdHlwZS5fc2h1dGRvd24gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLl9leHBvcnRlci5zaHV0ZG93bigpO1xuICAgIH0sIGU7XG4gIH0oKVxuKTtcblxuZXhwb3J0IHsgRHQgYXMgRCwgR3QgYXMgRywgSSwgT3QgYXMgTywgUCwgUywgVywgRCBhcyBhLCBnLCBpZSBhcyBpLCBqdCBhcyBqLCBuZSBhcyBuLCBvZSBhcyBvLCByZSBhcyByLCB6dCBhcyB6IH07Il0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyxLQUFLQSxHQUFJLEtBQUtDLElBQUksS0FBS0MsR0FBSSxLQUFLQyxJQUFJLEtBQUtDLEdBQUksS0FBS0MsSUFBSSxLQUFLQyxJQUFJLEtBQUtDLFVBQVU7QUFDdkYsU0FBUyxLQUFBQyxTQUFTO0FBQ2xCLFNBQVMsTUFBTUMsR0FBSSxNQUFNQyxJQUFJLE1BQU1DLEdBQUcsS0FBS0MsSUFBSSxLQUFLQyxHQUFLLE1BQU1DLElBQUksTUFBTUMsSUFBSSxNQUFNQyxHQUFJLE1BQU1DLEdBQUksS0FBS0MsSUFBSSxNQUFNQyxHQUFJLE1BQU1DLElBQUksTUFBTUMsVUFBVTtBQUM5SSxTQUFTLEtBQUFDLElBQUcsS0FBS0MsR0FBSSxLQUFLQyxHQUFNLEtBQUFDLElBQUcsS0FBQUMsR0FBRyxLQUFLQyxJQUFJLEtBQUtDLElBQUksS0FBS0MsSUFBSSxLQUFLQyxJQUFLLEtBQUtDLElBQUksS0FBS0MsSUFBSSxLQUFLQyxHQUFJLEtBQUtDLFVBQVU7QUFDckgsU0FBUyxNQUFNQyxHQUFLLEtBQUtDLEdBQUksTUFBTUMsSUFBSSxNQUFNQyxJQUFLLE1BQU1DLFVBQVM7QUFDakUsU0FBUyxLQUFLQyxTQUFXO0FBQ3pCLFNBQVMsS0FBQUMsU0FBUztBQUVsQixJQUFJQyxLQUFLLGFBQWEsSUFBSSxXQUFXO0FBQ25DLFNBQU8sSUFBSSxPQUFPLFVBQVUsU0FBUyxHQUFHO0FBQ3RDLGFBQVMsR0FBRyxJQUFJLEdBQUcsSUFBSSxVQUFVLFFBQVEsSUFBSSxHQUFHLEtBQUs7QUFDbkQsVUFBSSxVQUFVLENBQUM7QUFDZixlQUFTQyxLQUFLLEVBQUcsUUFBTyxVQUFVLGVBQWUsS0FBSyxHQUFHQSxDQUFDLE1BQU0sRUFBRUEsQ0FBQyxJQUFJLEVBQUVBLENBQUM7QUFBQSxJQUM1RTtBQUNBLFdBQU87QUFBQSxFQUNULEdBQUcsRUFBRSxNQUFNLE1BQU0sU0FBUztBQUM1QixHQUFHQyxLQUFLLFNBQVMsR0FBRztBQUNsQixNQUFJLElBQUksT0FBTyxVQUFVLGNBQWMsT0FBTyxVQUFVLElBQUksS0FBSyxFQUFFLENBQUMsR0FBRyxJQUFJO0FBQzNFLE1BQUksRUFBRyxRQUFPLEVBQUUsS0FBSyxDQUFDO0FBQ3RCLE1BQUksS0FBSyxPQUFPLEVBQUUsVUFBVSxTQUFVLFFBQU87QUFBQSxJQUMzQyxNQUFNLFdBQVc7QUFDZixhQUFPLEtBQUssS0FBSyxFQUFFLFdBQVcsSUFBSSxTQUFTLEVBQUUsT0FBTyxLQUFLLEVBQUUsR0FBRyxHQUFHLE1BQU0sQ0FBQyxFQUFFO0FBQUEsSUFDNUU7QUFBQSxFQUNGO0FBQ0EsUUFBTSxJQUFJLFVBQVUsSUFBSSw0QkFBNEIsaUNBQWlDO0FBQ3ZGLEdBQUcsSUFBSSxTQUFTLEdBQUcsR0FBRztBQUNwQixNQUFJLElBQUksT0FBTyxVQUFVLGNBQWMsRUFBRSxPQUFPLFFBQVE7QUFDeEQsTUFBSSxDQUFDLEVBQUcsUUFBTztBQUNmLE1BQUksSUFBSSxFQUFFLEtBQUssQ0FBQyxHQUFHRCxHQUFHRSxJQUFJLENBQUMsR0FBR0o7QUFDOUIsTUFBSTtBQUNGLFlBQVEsTUFBTSxVQUFVLE1BQU0sTUFBTSxFQUFFRSxJQUFJLEVBQUUsS0FBSyxHQUFHLE9BQVEsQ0FBQUUsRUFBRSxLQUFLRixFQUFFLEtBQUs7QUFBQSxFQUM1RSxTQUFTRyxHQUFHO0FBQ1YsSUFBQUwsSUFBSSxFQUFFLE9BQU9LLEVBQUU7QUFBQSxFQUNqQixVQUFFO0FBQ0EsUUFBSTtBQUNGLE1BQUFILEtBQUssQ0FBQ0EsRUFBRSxTQUFTLElBQUksRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDO0FBQUEsSUFDNUMsVUFBRTtBQUNBLFVBQUlGLEVBQUcsT0FBTUEsRUFBRTtBQUFBLElBQ2pCO0FBQUEsRUFDRjtBQUNBLFNBQU9JO0FBQ1QsR0FBR0UsS0FBSyxTQUFTLEdBQUcsR0FBRyxHQUFHO0FBQ3hCLE1BQUksVUFBVSxXQUFXLEVBQUcsVUFBUyxJQUFJLEdBQUdKLElBQUksRUFBRSxRQUFRRSxHQUFHLElBQUlGLEdBQUc7QUFDbEUsS0FBQ0UsS0FBSyxFQUFFLEtBQUssUUFBUUEsTUFBTUEsSUFBSSxNQUFNLFVBQVUsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUlBLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUNqRixTQUFPLEVBQUUsT0FBT0EsS0FBSyxNQUFNLFVBQVUsTUFBTSxLQUFLLENBQUMsQ0FBQztBQUNwRCxHQUFHRztBQUFBO0FBQUEsRUFFRCxXQUFXO0FBQ1QsYUFBUyxFQUFFLEdBQUcsR0FBRyxHQUFHTCxHQUFHRSxHQUFHSixHQUFHSyxHQUFHRyxHQUFHLEdBQUd2QixHQUFHO0FBQ3ZDLE1BQUFvQixNQUFNLFdBQVdBLElBQUksQ0FBQyxJQUFJLEtBQUssYUFBYSxDQUFDLEdBQUcsS0FBSyxRQUFRLENBQUMsR0FBRyxLQUFLLFNBQVMsQ0FBQyxHQUFHLEtBQUssMEJBQTBCLEdBQUcsS0FBSyxzQkFBc0IsR0FBRyxLQUFLLHFCQUFxQixHQUFHLEtBQUssU0FBUztBQUFBLFFBQzVMLE1BQU12QyxHQUFHO0FBQUEsTUFDWCxHQUFHLEtBQUssVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssU0FBUyxJQUFJLEtBQUssWUFBWSxDQUFDLElBQUksRUFBRSxHQUFHLEtBQUssT0FBTyxHQUFHLEtBQUssZUFBZW9DLEdBQUcsS0FBSyxlQUFlRixHQUFHLEtBQUssT0FBT0ksR0FBRyxLQUFLLFFBQVFDO0FBQ2hLLFVBQUlJLElBQUksS0FBSyxJQUFJO0FBQ2pCLFdBQUssd0JBQXdCdkMsRUFBRSxJQUFJLEdBQUcsS0FBSyxxQkFBcUJ1QyxLQUFLLEtBQUssd0JBQXdCOUIsR0FBRyxJQUFJLEtBQUsscUJBQXFCNkIsS0FBSyxNQUFNLEtBQUssWUFBWSxLQUFLLFNBQVNBLEtBQUtDLENBQUMsR0FBRyxLQUFLLFdBQVcsRUFBRSxVQUFVLEtBQUsseUJBQXlCLEVBQUUsd0JBQXdCLEtBQUssY0FBYyxFQUFFLGNBQWMsR0FBRyxLQUFLLDZCQUE2QixLQUFLLFlBQVksNkJBQTZCLEdBQUd4QixLQUFLLFFBQVEsS0FBSyxjQUFjQSxDQUFDLEdBQUcsS0FBSyxpQkFBaUIsRUFBRSx1QkFBdUIsR0FBRyxLQUFLLGVBQWUsUUFBUSxNQUFNLENBQUM7QUFBQSxJQUM5ZjtBQUNBLFdBQU8sRUFBRSxVQUFVLGNBQWMsV0FBVztBQUMxQyxhQUFPLEtBQUs7QUFBQSxJQUNkLEdBQUcsRUFBRSxVQUFVLGVBQWUsU0FBUyxHQUFHUyxHQUFLO0FBQzdDLGFBQU9BLEtBQU8sUUFBUSxLQUFLLGFBQWEsSUFBSSxPQUFPLEVBQUUsV0FBVyxLQUFLM0IsRUFBRSxLQUFLLDRCQUE0QixDQUFDLEdBQUcsUUFBUWMsR0FBRWEsQ0FBRyxJQUFJLE9BQU8sS0FBSyxLQUFLLFVBQVUsRUFBRSxVQUFVLEtBQUssWUFBWSx1QkFBdUIsQ0FBQyxPQUFPLFVBQVUsZUFBZSxLQUFLLEtBQUssWUFBWSxDQUFDLEtBQUssS0FBSywyQkFBMkIsU0FBUyxLQUFLLFdBQVcsQ0FBQyxJQUFJLEtBQUssZ0JBQWdCQSxDQUFHLEdBQUcsU0FBUzNCLEVBQUUsS0FBSywwQ0FBMEMsQ0FBQyxHQUFHO0FBQUEsSUFDbGEsR0FBRyxFQUFFLFVBQVUsZ0JBQWdCLFNBQVMsR0FBRztBQUN6QyxVQUFJLEdBQUc7QUFDUCxVQUFJO0FBQ0YsaUJBQVNtQyxJQUFJQyxHQUFHLE9BQU8sUUFBUSxDQUFDLENBQUMsR0FBR0MsSUFBSUYsRUFBRSxLQUFLLEdBQUcsQ0FBQ0UsRUFBRSxNQUFNQSxJQUFJRixFQUFFLEtBQUssR0FBRztBQUN2RSxjQUFJRixJQUFJLEVBQUVJLEVBQUUsT0FBTyxDQUFDLEdBQUdDLElBQUlMLEVBQUUsQ0FBQyxHQUFHUSxJQUFJUixFQUFFLENBQUM7QUFDeEMsZUFBSyxhQUFhSyxHQUFHRyxDQUFDO0FBQUEsUUFDeEI7QUFBQSxNQUNGLFNBQVMsR0FBRztBQUNWLFlBQUksRUFBRSxPQUFPLEVBQUU7QUFBQSxNQUNqQixVQUFFO0FBQ0EsWUFBSTtBQUNGLFVBQUFKLEtBQUssQ0FBQ0EsRUFBRSxTQUFTLElBQUlGLEVBQUUsV0FBVyxFQUFFLEtBQUtBLENBQUM7QUFBQSxRQUM1QyxVQUFFO0FBQ0EsY0FBSSxFQUFHLE9BQU0sRUFBRTtBQUFBLFFBQ2pCO0FBQUEsTUFDRjtBQUNBLGFBQU87QUFBQSxJQUNULEdBQUcsRUFBRSxVQUFVLFdBQVcsU0FBUyxHQUFHUixHQUFLLEdBQUc7QUFDNUMsVUFBSSxLQUFLLGFBQWE7QUFDcEIsZUFBTztBQUNULFVBQUksS0FBSyxZQUFZLG9CQUFvQjtBQUN2QyxlQUFPM0IsRUFBRSxLQUFLLG9CQUFvQixHQUFHLEtBQUssdUJBQXVCO0FBQ25FLFdBQUssT0FBTyxVQUFVLEtBQUssWUFBWSxvQkFBb0IsS0FBSyx3QkFBd0IsS0FBS0EsRUFBRSxNQUFNLHdCQUF3QixHQUFHLEtBQUssT0FBTyxNQUFNLEdBQUcsS0FBSyx3QkFBd0JDLEVBQUcwQixDQUFHLE1BQU0xQixFQUFHLENBQUMsTUFBTSxJQUFJMEIsSUFBTUEsSUFBTTtBQUN4TixVQUFJUSxJQUFJcEIsRUFBR1ksQ0FBRztBQUNkLGFBQU8sS0FBSyxPQUFPLEtBQUs7QUFBQSxRQUN0QixNQUFNO0FBQUEsUUFDTixZQUFZUTtBQUFBLFFBQ1osTUFBTSxLQUFLLFNBQVMsQ0FBQztBQUFBLFFBQ3JCLHdCQUF3QjtBQUFBLE1BQzFCLENBQUMsR0FBRztBQUFBLElBQ04sR0FBRyxFQUFFLFVBQVUsVUFBVSxTQUFTLEdBQUc7QUFDbkMsYUFBTyxLQUFLLE1BQU0sS0FBSyxDQUFDLEdBQUc7QUFBQSxJQUM3QixHQUFHLEVBQUUsVUFBVSxXQUFXLFNBQVMsR0FBRztBQUNwQyxVQUFJO0FBQ0osY0FBUSxJQUFJLEtBQUssT0FBTyxLQUFLLE1BQU0sR0FBR0ksR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUc7QUFBQSxJQUMzRCxHQUFHLEVBQUUsVUFBVSxZQUFZLFNBQVMsR0FBRztBQUNyQyxhQUFPLEtBQUssYUFBYSxJQUFJLFFBQVEsS0FBSyxTQUFTLEVBQUUsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLE9BQU8sV0FBVyxRQUFRLE9BQU8sRUFBRSxXQUFXLGFBQWF2QyxFQUFFLEtBQUssOENBQThDLE9BQU8sRUFBRSxVQUFVLHNCQUFzQixHQUFHLE9BQU8sS0FBSyxPQUFPLFVBQVU7QUFBQSxJQUM3UCxHQUFHLEVBQUUsVUFBVSxhQUFhLFNBQVMsR0FBRztBQUN0QyxhQUFPLEtBQUssYUFBYSxJQUFJLFFBQVEsS0FBSyxPQUFPLEdBQUc7QUFBQSxJQUN0RCxHQUFHLEVBQUUsVUFBVSxNQUFNLFNBQVMsR0FBRztBQUMvQixVQUFJLEtBQUssYUFBYSxHQUFHO0FBQ3ZCLFFBQUFBLEVBQUUsTUFBTSxLQUFLLE9BQU8sTUFBTSxLQUFLLGFBQWEsVUFBVSxNQUFNLEtBQUssYUFBYSxTQUFTLDRDQUE0QztBQUNuSTtBQUFBLE1BQ0Y7QUFDQSxXQUFLLFNBQVMsSUFBSSxLQUFLLFVBQVUsS0FBSyxTQUFTLENBQUMsR0FBRyxLQUFLLFlBQVlFLEdBQUcsS0FBSyxXQUFXLEtBQUssT0FBTyxHQUFHLEtBQUssVUFBVSxDQUFDLElBQUksTUFBTUYsRUFBRSxLQUFLLHVGQUF1RixLQUFLLFdBQVcsS0FBSyxPQUFPLEdBQUcsS0FBSyxVQUFVLEtBQUssVUFBVSxNQUFNLEdBQUcsS0FBSyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxzQkFBc0IsS0FBS0EsRUFBRSxLQUFLLGFBQWEsS0FBSyxzQkFBc0IseUNBQXlDLEdBQUcsS0FBSyxlQUFlLE1BQU0sSUFBSTtBQUFBLElBQ3pkLEdBQUcsRUFBRSxVQUFVLFdBQVcsU0FBUyxHQUFHO0FBQ3BDLFVBQUksT0FBTyxLQUFLLFlBQVksS0FBS0csRUFBRSxJQUFJO0FBQ3JDLGVBQU9DLEdBQUcsSUFBSSxLQUFLLGtCQUFrQjtBQUN2QyxVQUFJLE9BQU8sS0FBSztBQUNkLGVBQU9DLEVBQUksQ0FBQztBQUNkLFVBQUksYUFBYTtBQUNmLGVBQU9BLEVBQUksRUFBRSxRQUFRLENBQUM7QUFDeEIsVUFBSUMsR0FBRyxDQUFDO0FBQ04sZUFBTztBQUNULFVBQUksS0FBSztBQUNQLGVBQU9ELEVBQUksS0FBSyxJQUFJLENBQUM7QUFDdkIsVUFBSSxJQUFJRixFQUFFLElBQUksSUFBSSxLQUFLO0FBQ3ZCLGFBQU9JLEdBQUcsS0FBSyxXQUFXRixFQUFJLENBQUMsQ0FBQztBQUFBLElBQ2xDLEdBQUcsRUFBRSxVQUFVLGNBQWMsV0FBVztBQUN0QyxhQUFPLEtBQUssV0FBVztBQUFBLElBQ3pCLEdBQUcsRUFBRSxVQUFVLGtCQUFrQixTQUFTLEdBQUdzQixHQUFLO0FBQ2hELFVBQUksSUFBSSxDQUFDO0FBQ1QsYUFBTyxLQUFLLFdBQVcsRUFBRWxCLENBQUUsSUFBSSxJQUFJLE1BQU0sRUFBRSxPQUFPLEVBQUVELENBQUUsSUFBSSxFQUFFLEtBQUssU0FBUyxJQUFJLEVBQUUsU0FBUyxFQUFFQSxDQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsWUFBWSxFQUFFQyxDQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFSSxFQUFFLElBQUksRUFBRSxTQUFTLEVBQUVMLENBQUUsS0FBSyxFQUFFQyxDQUFFLElBQUksS0FBSyxTQUFTeUIsSUFBSSxHQUFHUCxDQUFHLElBQUkzQixFQUFFLEtBQUssbUNBQW1DLENBQUM7QUFBQSxJQUNyUSxHQUFHLE9BQU8sZUFBZSxFQUFFLFdBQVcsWUFBWTtBQUFBLE1BQ2hELEtBQUssV0FBVztBQUNkLGVBQU8sS0FBSztBQUFBLE1BQ2Q7QUFBQSxNQUNBLFlBQVk7QUFBQSxNQUNaLGNBQWM7QUFBQSxJQUNoQixDQUFDLEdBQUcsT0FBTyxlQUFlLEVBQUUsV0FBVyxTQUFTO0FBQUEsTUFDOUMsS0FBSyxXQUFXO0FBQ2QsZUFBTyxLQUFLO0FBQUEsTUFDZDtBQUFBLE1BQ0EsWUFBWTtBQUFBLE1BQ1osY0FBYztBQUFBLElBQ2hCLENBQUMsR0FBRyxPQUFPLGVBQWUsRUFBRSxXQUFXLDBCQUEwQjtBQUFBLE1BQy9ELEtBQUssV0FBVztBQUNkLGVBQU8sS0FBSztBQUFBLE1BQ2Q7QUFBQSxNQUNBLFlBQVk7QUFBQSxNQUNaLGNBQWM7QUFBQSxJQUNoQixDQUFDLEdBQUcsT0FBTyxlQUFlLEVBQUUsV0FBVyxzQkFBc0I7QUFBQSxNQUMzRCxLQUFLLFdBQVc7QUFDZCxlQUFPLEtBQUs7QUFBQSxNQUNkO0FBQUEsTUFDQSxZQUFZO0FBQUEsTUFDWixjQUFjO0FBQUEsSUFDaEIsQ0FBQyxHQUFHLE9BQU8sZUFBZSxFQUFFLFdBQVcscUJBQXFCO0FBQUEsTUFDMUQsS0FBSyxXQUFXO0FBQ2QsZUFBTyxLQUFLO0FBQUEsTUFDZDtBQUFBLE1BQ0EsWUFBWTtBQUFBLE1BQ1osY0FBYztBQUFBLElBQ2hCLENBQUMsR0FBRyxFQUFFLFVBQVUsZUFBZSxXQUFXO0FBQ3hDLGFBQU8sS0FBSyxVQUFVQSxFQUFFLEtBQUssMkRBQTJELEtBQUssYUFBYSxVQUFVLGVBQWUsS0FBSyxhQUFhLFNBQVMsR0FBRyxHQUFHLEtBQUs7QUFBQSxJQUMzSyxHQUFHLEVBQUUsVUFBVSx1QkFBdUIsU0FBUyxHQUFHLEdBQUc7QUFDbkQsYUFBTyxFQUFFLFVBQVUsSUFBSSxJQUFJLEVBQUUsVUFBVSxHQUFHLENBQUM7QUFBQSxJQUM3QyxHQUFHLEVBQUUsVUFBVSxrQkFBa0IsU0FBUyxHQUFHO0FBQzNDLFVBQUkyQixJQUFNLE1BQU0sSUFBSSxLQUFLO0FBQ3pCLGFBQU8sS0FBSyxLQUFLM0IsRUFBRSxLQUFLLGlEQUFpRCxDQUFDLEdBQUcsS0FBSyxPQUFPLEtBQUssV0FBVyxLQUFLLHFCQUFxQixHQUFHLENBQUMsSUFBSSxNQUFNLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxTQUFTbUMsR0FBRztBQUM5SyxlQUFPLE9BQU9BLEtBQUssV0FBV1IsRUFBSSxxQkFBcUJRLEdBQUcsQ0FBQyxJQUFJQTtBQUFBLE1BQ2pFLENBQUMsSUFBSTtBQUFBLElBQ1AsR0FBRztBQUFBLEVBQ0wsRUFBRTtBQUFBLEdBQ0RRO0FBQUEsQ0FDRixTQUFTLEdBQUc7QUFDWCxJQUFFLEVBQUUsYUFBYSxDQUFDLElBQUksY0FBYyxFQUFFLEVBQUUsU0FBUyxDQUFDLElBQUksVUFBVSxFQUFFLEVBQUUscUJBQXFCLENBQUMsSUFBSTtBQUNoRyxHQUFHQSxNQUFNQSxJQUFJLENBQUMsRUFBRTtBQUNoQixJQUFJO0FBQUE7QUFBQSxFQUVGLFdBQVc7QUFDVCxhQUFTLElBQUk7QUFBQSxJQUNiO0FBQ0EsV0FBTyxFQUFFLFVBQVUsZUFBZSxXQUFXO0FBQzNDLGFBQU87QUFBQSxRQUNMLFVBQVVBLEVBQUU7QUFBQSxNQUNkO0FBQUEsSUFDRixHQUFHLEVBQUUsVUFBVSxXQUFXLFdBQVc7QUFDbkMsYUFBTztBQUFBLElBQ1QsR0FBRztBQUFBLEVBQ0wsRUFBRTtBQUFBLEdBQ0RDO0FBQUE7QUFBQSxFQUVELFdBQVc7QUFDVCxhQUFTLElBQUk7QUFBQSxJQUNiO0FBQ0EsV0FBTyxFQUFFLFVBQVUsZUFBZSxXQUFXO0FBQzNDLGFBQU87QUFBQSxRQUNMLFVBQVVELEVBQUU7QUFBQSxNQUNkO0FBQUEsSUFDRixHQUFHLEVBQUUsVUFBVSxXQUFXLFdBQVc7QUFDbkMsYUFBTztBQUFBLElBQ1QsR0FBRztBQUFBLEVBQ0wsRUFBRTtBQUFBLEdBQ0RFO0FBQUE7QUFBQSxFQUVELFdBQVc7QUFDVCxhQUFTLEVBQUUsR0FBRztBQUNaLFVBQUksR0FBRyxHQUFHVixHQUFHRTtBQUNiLFdBQUssUUFBUSxFQUFFLE1BQU0sS0FBSyxVQUFVckIsRUFBSyxJQUFJLE1BQU0sd0RBQXdELENBQUMsR0FBRyxLQUFLLFFBQVEsSUFBSTRCLEVBQUUsSUFBSSxLQUFLLHdCQUF3QixJQUFJLEVBQUUseUJBQXlCLFFBQVEsTUFBTSxTQUFTLElBQUksSUFBSUEsRUFBRSxHQUFHLEtBQUssMkJBQTJCLElBQUksRUFBRSw0QkFBNEIsUUFBUSxNQUFNLFNBQVMsSUFBSSxJQUFJLEVBQUUsR0FBRyxLQUFLLHVCQUF1QlQsSUFBSSxFQUFFLHdCQUF3QixRQUFRQSxNQUFNLFNBQVNBLElBQUksSUFBSVMsRUFBRSxHQUFHLEtBQUssMEJBQTBCUCxJQUFJLEVBQUUsMkJBQTJCLFFBQVFBLE1BQU0sU0FBU0EsSUFBSSxJQUFJLEVBQUU7QUFBQSxJQUM3Z0I7QUFDQSxXQUFPLEVBQUUsVUFBVSxlQUFlLFNBQVMsR0FBRyxHQUFHLEdBQUdGLEdBQUdFLEdBQUdKLEdBQUc7QUFDM0QsVUFBSUssSUFBSTlDLEVBQUcsZUFBZSxDQUFDO0FBQzNCLGFBQU8sQ0FBQzhDLEtBQUssQ0FBQzdDLEdBQUc2QyxDQUFDLElBQUksS0FBSyxNQUFNLGFBQWEsR0FBRyxHQUFHLEdBQUdILEdBQUdFLEdBQUdKLENBQUMsSUFBSUssRUFBRSxXQUFXQSxFQUFFLGFBQWE1QyxFQUFHLFVBQVUsS0FBSyxxQkFBcUIsYUFBYSxHQUFHLEdBQUcsR0FBR3lDLEdBQUdFLEdBQUdKLENBQUMsSUFBSSxLQUFLLHdCQUF3QixhQUFhLEdBQUcsR0FBRyxHQUFHRSxHQUFHRSxHQUFHSixDQUFDLElBQUlLLEVBQUUsYUFBYTVDLEVBQUcsVUFBVSxLQUFLLG9CQUFvQixhQUFhLEdBQUcsR0FBRyxHQUFHeUMsR0FBR0UsR0FBR0osQ0FBQyxJQUFJLEtBQUssdUJBQXVCLGFBQWEsR0FBRyxHQUFHLEdBQUdFLEdBQUdFLEdBQUdKLENBQUM7QUFBQSxJQUNyWCxHQUFHLEVBQUUsVUFBVSxXQUFXLFdBQVc7QUFDbkMsYUFBTyxzQkFBc0IsS0FBSyxNQUFNLFNBQVMsSUFBSSwyQkFBMkIsS0FBSyxxQkFBcUIsU0FBUyxJQUFJLDhCQUE4QixLQUFLLHdCQUF3QixTQUFTLElBQUksMEJBQTBCLEtBQUssb0JBQW9CLFNBQVMsSUFBSSw2QkFBNkIsS0FBSyx1QkFBdUIsU0FBUyxJQUFJO0FBQUEsSUFDdlUsR0FBRztBQUFBLEVBQ0wsRUFBRTtBQUFBLEdBQ0Q7QUFBQTtBQUFBLEVBRUQsV0FBVztBQUNULGFBQVMsRUFBRSxHQUFHO0FBQ1osWUFBTSxXQUFXLElBQUksSUFBSSxLQUFLLFNBQVMsR0FBRyxLQUFLLFNBQVMsS0FBSyxXQUFXLENBQUMsR0FBRyxLQUFLLGNBQWMsS0FBSyxNQUFNLEtBQUssU0FBUyxVQUFVO0FBQUEsSUFDcEk7QUFDQSxXQUFPLEVBQUUsVUFBVSxlQUFlLFNBQVMsR0FBRyxHQUFHO0FBQy9DLGFBQU87QUFBQSxRQUNMLFVBQVV0QyxHQUFHLENBQUMsS0FBSyxLQUFLLFlBQVksQ0FBQyxJQUFJLEtBQUssY0FBY2dELEVBQUUscUJBQXFCQSxFQUFFO0FBQUEsTUFDdkY7QUFBQSxJQUNGLEdBQUcsRUFBRSxVQUFVLFdBQVcsV0FBVztBQUNuQyxhQUFPLHVCQUF1QixLQUFLLFNBQVM7QUFBQSxJQUM5QyxHQUFHLEVBQUUsVUFBVSxhQUFhLFNBQVMsR0FBRztBQUN0QyxhQUFPLE9BQU8sS0FBSyxZQUFZLE1BQU0sQ0FBQyxJQUFJLElBQUksS0FBSyxJQUFJLElBQUksS0FBSyxJQUFJLElBQUk7QUFBQSxJQUMxRSxHQUFHLEVBQUUsVUFBVSxjQUFjLFNBQVMsR0FBRztBQUN2QyxlQUFTLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxFQUFFLFNBQVMsR0FBRyxLQUFLO0FBQzVDLFlBQUlSLElBQUksSUFBSSxHQUFHRSxJQUFJLFNBQVMsRUFBRSxNQUFNRixHQUFHQSxJQUFJLENBQUMsR0FBRyxFQUFFO0FBQ2pELGFBQUssSUFBSUUsT0FBTztBQUFBLE1BQ2xCO0FBQ0EsYUFBTztBQUFBLElBQ1QsR0FBRztBQUFBLEVBQ0wsRUFBRTtBQUFBLEdBQ0QsS0FBS1YsRUFBSSxVQUFVbUIsSUFBSTtBQUMxQixTQUFTQyxJQUFJO0FBQ1gsTUFBSSxJQUFJbkIsRUFBRztBQUNYLFNBQU87QUFBQSxJQUNMLFNBQVMsRUFBRSxDQUFDO0FBQUEsSUFDWix5QkFBeUI7QUFBQSxJQUN6QixlQUFlO0FBQUEsTUFDYiwyQkFBMkIsRUFBRTtBQUFBLE1BQzdCLHFCQUFxQixFQUFFO0FBQUEsSUFDekI7QUFBQSxJQUNBLFlBQVk7QUFBQSxNQUNWLDJCQUEyQixFQUFFO0FBQUEsTUFDN0IscUJBQXFCLEVBQUU7QUFBQSxNQUN2QixnQkFBZ0IsRUFBRTtBQUFBLE1BQ2xCLGlCQUFpQixFQUFFO0FBQUEsTUFDbkIsNkJBQTZCLEVBQUU7QUFBQSxNQUMvQiw0QkFBNEIsRUFBRTtBQUFBLElBQ2hDO0FBQUEsSUFDQSwyQkFBMkI7QUFBQSxFQUM3QjtBQUNGO0FBQ0EsU0FBUyxFQUFFLEdBQUc7QUFDWixVQUFRLE1BQU0sV0FBVyxJQUFJQSxFQUFHLElBQUksRUFBRSxxQkFBcUI7QUFBQSxJQUN6RCxLQUFLRCxFQUFJO0FBQ1AsYUFBTyxJQUFJaUIsRUFBRTtBQUFBLElBQ2YsS0FBS2pCLEVBQUk7QUFDUCxhQUFPLElBQUksRUFBRTtBQUFBLElBQ2YsS0FBS0EsRUFBSTtBQUNQLGFBQU8sSUFBSWtCLEVBQUU7QUFBQSxRQUNYLE1BQU0sSUFBSUQsRUFBRTtBQUFBLE1BQ2QsQ0FBQztBQUFBLElBQ0gsS0FBS2pCLEVBQUk7QUFDUCxhQUFPLElBQUlrQixFQUFFO0FBQUEsUUFDWCxNQUFNLElBQUksRUFBRTtBQUFBLE1BQ2QsQ0FBQztBQUFBLElBQ0gsS0FBS2xCLEVBQUk7QUFDUCxhQUFPLElBQUksRUFBRXFCLEVBQUUsQ0FBQyxDQUFDO0FBQUEsSUFDbkIsS0FBS3JCLEVBQUk7QUFDUCxhQUFPLElBQUlrQixFQUFFO0FBQUEsUUFDWCxNQUFNLElBQUksRUFBRUcsRUFBRSxDQUFDLENBQUM7QUFBQSxNQUNsQixDQUFDO0FBQUEsSUFDSDtBQUNFLGFBQU9oRCxFQUFFLE1BQU0sZ0NBQWdDLEVBQUUsc0JBQXNCLDZCQUE2QixLQUFLLElBQUksR0FBRyxJQUFJNEMsRUFBRTtBQUFBLEVBQzFIO0FBQ0Y7QUFDQSxTQUFTSSxFQUFFLEdBQUc7QUFDWixNQUFJLEVBQUUsNEJBQTRCLFVBQVUsRUFBRSw0QkFBNEI7QUFDeEUsV0FBT2hELEVBQUUsTUFBTSxxREFBcUQ4QyxJQUFJLEdBQUcsR0FBR0E7QUFDaEYsTUFBSSxJQUFJLE9BQU8sRUFBRSx1QkFBdUI7QUFDeEMsU0FBTyxNQUFNLENBQUMsS0FBSzlDLEVBQUUsTUFBTSw2QkFBNkIsRUFBRSwwQkFBMEIsa0RBQWtEOEMsSUFBSSxHQUFHLEdBQUdBLEtBQUssSUFBSSxLQUFLLElBQUksS0FBSzlDLEVBQUUsTUFBTSw2QkFBNkIsRUFBRSwwQkFBMEIsZ0VBQWdFOEMsSUFBSSxHQUFHLEdBQUdBLEtBQUs7QUFDelQ7QUFDQSxTQUFTLEdBQUcsR0FBRztBQUNiLE1BQUksSUFBSTtBQUFBLElBQ04sU0FBUyxFQUFFO0FBQUEsRUFDYixHQUFHLElBQUlDLEVBQUUsR0FBRyxJQUFJLE9BQU8sT0FBTyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDekMsU0FBTyxFQUFFLGdCQUFnQixPQUFPLE9BQU8sQ0FBQyxHQUFHLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixDQUFDLENBQUMsR0FBRyxFQUFFLGFBQWEsT0FBTyxPQUFPLENBQUMsR0FBRyxFQUFFLFlBQVksRUFBRSxjQUFjLENBQUMsQ0FBQyxHQUFHO0FBQzFKO0FBQ0EsU0FBUyxHQUFHLEdBQUc7QUFDYixNQUFJLEdBQUcsR0FBRyxHQUFHWixHQUFHRSxHQUFHSixHQUFHSyxHQUFHRyxHQUFHLEdBQUd2QixHQUFHd0IsR0FBR08sR0FBR0MsSUFBSSxPQUFPLE9BQU8sQ0FBQyxHQUFHLEVBQUUsVUFBVSxHQUFHLElBQUlyQixHQUFHO0FBQ3BGLFNBQU9xQixFQUFFLHVCQUF1QmpCLEtBQUtJLEtBQUtGLEtBQUssS0FBSyxJQUFJLEVBQUUsZ0JBQWdCLFFBQVEsTUFBTSxTQUFTLFNBQVMsRUFBRSx5QkFBeUIsUUFBUSxNQUFNLFNBQVMsS0FBSyxJQUFJLEVBQUUsbUJBQW1CLFFBQVEsTUFBTSxTQUFTLFNBQVMsRUFBRSx5QkFBeUIsUUFBUUEsTUFBTSxTQUFTQSxJQUFJLEVBQUUscUNBQXFDLFFBQVFFLE1BQU0sU0FBU0EsSUFBSSxFQUFFLGdDQUFnQyxRQUFRSixNQUFNLFNBQVNBLElBQUlILElBQUtvQixFQUFFLDZCQUE2QkQsS0FBS1AsS0FBS3hCLEtBQUt1QixLQUFLSCxJQUFJLEVBQUUsZ0JBQWdCLFFBQVFBLE1BQU0sU0FBUyxTQUFTQSxFQUFFLCtCQUErQixRQUFRRyxNQUFNLFNBQVNBLEtBQUssSUFBSSxFQUFFLG1CQUFtQixRQUFRLE1BQU0sU0FBUyxTQUFTLEVBQUUsK0JBQStCLFFBQVF2QixNQUFNLFNBQVNBLElBQUksRUFBRSw0Q0FBNEMsUUFBUXdCLE1BQU0sU0FBU0EsSUFBSSxFQUFFLHVDQUF1QyxRQUFRTyxNQUFNLFNBQVNBLElBQUlsQixJQUFHLE9BQU8sT0FBTyxDQUFDLEdBQUcsR0FBRyxFQUFFLFlBQVltQixFQUFFLENBQUM7QUFDdjJCO0FBQ0EsSUFBSTtBQUFBO0FBQUEsRUFFRixXQUFXO0FBQ1QsYUFBUyxFQUFFLEdBQUd2QixHQUFLO0FBQ2pCLFdBQUssWUFBWSxHQUFHLEtBQUssZUFBZSxJQUFJLEtBQUssaUJBQWlCLENBQUMsR0FBRyxLQUFLLHFCQUFxQjtBQUNoRyxVQUFJLElBQUlDLEVBQUc7QUFDWCxXQUFLLHNCQUFzQixRQUFRRCxLQUFPLE9BQU8sU0FBU0EsRUFBSSx1QkFBdUIsV0FBV0EsRUFBSSxxQkFBcUIsRUFBRSxnQ0FBZ0MsS0FBSyxnQkFBZ0IsUUFBUUEsS0FBTyxPQUFPLFNBQVNBLEVBQUksaUJBQWlCLFdBQVdBLEVBQUksZUFBZSxFQUFFLHlCQUF5QixLQUFLLHdCQUF3QixRQUFRQSxLQUFPLE9BQU8sU0FBU0EsRUFBSSx5QkFBeUIsV0FBV0EsRUFBSSx1QkFBdUIsRUFBRSx5QkFBeUIsS0FBSyx1QkFBdUIsUUFBUUEsS0FBTyxPQUFPLFNBQVNBLEVBQUksd0JBQXdCLFdBQVdBLEVBQUksc0JBQXNCLEVBQUUseUJBQXlCLEtBQUssZ0JBQWdCLElBQUlGLEVBQUcsS0FBSyxXQUFXLElBQUksR0FBRyxLQUFLLHNCQUFzQixLQUFLLGtCQUFrQnpCLEVBQUUsS0FBSyxtSUFBbUksR0FBRyxLQUFLLHNCQUFzQixLQUFLO0FBQUEsSUFDbDJCO0FBQ0EsV0FBTyxFQUFFLFVBQVUsYUFBYSxXQUFXO0FBQ3pDLGFBQU8sS0FBSyxjQUFjLFdBQVcsS0FBSyxjQUFjLFVBQVUsS0FBSyxVQUFVO0FBQUEsSUFDbkYsR0FBRyxFQUFFLFVBQVUsVUFBVSxTQUFTLEdBQUcsR0FBRztBQUFBLElBQ3hDLEdBQUcsRUFBRSxVQUFVLFFBQVEsU0FBUyxHQUFHO0FBQ2pDLFdBQUssY0FBYyxZQUFZLEVBQUUsWUFBWSxFQUFFLGFBQWFOLEVBQUcsV0FBVyxLQUFLLGFBQWEsQ0FBQztBQUFBLElBQy9GLEdBQUcsRUFBRSxVQUFVLFdBQVcsV0FBVztBQUNuQyxhQUFPLEtBQUssY0FBYyxLQUFLO0FBQUEsSUFDakMsR0FBRyxFQUFFLFVBQVUsWUFBWSxXQUFXO0FBQ3BDLFVBQUksSUFBSTtBQUNSLGFBQU8sUUFBUSxRQUFRLEVBQUUsS0FBSyxXQUFXO0FBQ3ZDLGVBQU8sRUFBRSxXQUFXO0FBQUEsTUFDdEIsQ0FBQyxFQUFFLEtBQUssV0FBVztBQUNqQixlQUFPLEVBQUUsVUFBVTtBQUFBLE1BQ3JCLENBQUMsRUFBRSxLQUFLLFdBQVc7QUFDakIsZUFBTyxFQUFFLFVBQVUsU0FBUztBQUFBLE1BQzlCLENBQUM7QUFBQSxJQUNILEdBQUcsRUFBRSxVQUFVLGVBQWUsU0FBUyxHQUFHO0FBQ3hDLFVBQUksS0FBSyxlQUFlLFVBQVUsS0FBSyxlQUFlO0FBQ3BELGFBQUssdUJBQXVCLEtBQUtNLEVBQUUsTUFBTSxzQ0FBc0MsR0FBRyxLQUFLO0FBQ3ZGO0FBQUEsTUFDRjtBQUNBLFdBQUsscUJBQXFCLE1BQU1BLEVBQUUsS0FBSyxhQUFhLEtBQUsscUJBQXFCLHFDQUFxQyxHQUFHLEtBQUsscUJBQXFCLElBQUksS0FBSyxlQUFlLEtBQUssQ0FBQyxHQUFHLEtBQUssaUJBQWlCO0FBQUEsSUFDek0sR0FBRyxFQUFFLFVBQVUsWUFBWSxXQUFXO0FBQ3BDLFVBQUksSUFBSTtBQUNSLGFBQU8sSUFBSSxRQUFRLFNBQVMsR0FBRyxHQUFHO0FBQ2hDLGlCQUFTbUMsSUFBSSxDQUFDLEdBQUdFLElBQUksS0FBSyxLQUFLLEVBQUUsZUFBZSxTQUFTLEVBQUUsbUJBQW1CLEdBQUdKLElBQUksR0FBR0ssSUFBSUQsR0FBR0osSUFBSUssR0FBR0w7QUFDcEcsVUFBQUUsRUFBRSxLQUFLLEVBQUUsZUFBZSxDQUFDO0FBQzNCLGdCQUFRLElBQUlBLENBQUMsRUFBRSxLQUFLLFdBQVc7QUFDN0IsWUFBRTtBQUFBLFFBQ0osQ0FBQyxFQUFFLE1BQU0sQ0FBQztBQUFBLE1BQ1osQ0FBQztBQUFBLElBQ0gsR0FBRyxFQUFFLFVBQVUsaUJBQWlCLFdBQVc7QUFDekMsVUFBSSxJQUFJO0FBQ1IsYUFBTyxLQUFLLFlBQVksR0FBRyxLQUFLLGVBQWUsV0FBVyxJQUFJLFFBQVEsUUFBUSxJQUFJLElBQUksUUFBUSxTQUFTLEdBQUcsR0FBRztBQUMzRyxZQUFJQSxJQUFJLFdBQVcsV0FBVztBQUM1QixZQUFFLElBQUksTUFBTSxTQUFTLENBQUM7QUFBQSxRQUN4QixHQUFHLEVBQUUsb0JBQW9CO0FBQ3pCLFFBQUF2QyxFQUFHLEtBQUswQixHQUFJMUIsRUFBRyxPQUFPLENBQUMsR0FBRyxXQUFXO0FBQ25DLGNBQUl5QztBQUNKLFlBQUUsZUFBZSxVQUFVLEVBQUUsdUJBQXVCQSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsaUJBQWlCLENBQUMsS0FBS0EsSUFBSSxFQUFFLGVBQWUsT0FBTyxHQUFHLEVBQUUsbUJBQW1CO0FBQ3ZKLG1CQUFTYyxJQUFNLFdBQVc7QUFDeEIsbUJBQU8sRUFBRSxVQUFVLE9BQU9kLEdBQUcsU0FBU0ssR0FBRztBQUN2QyxrQkFBSU87QUFDSiwyQkFBYWQsQ0FBQyxHQUFHTyxFQUFFLFNBQVNULEVBQUUsVUFBVSxFQUFFLElBQUksR0FBR2dCLElBQUlQLEVBQUUsV0FBVyxRQUFRTyxNQUFNLFNBQVNBLElBQUksSUFBSSxNQUFNLHdDQUF3QyxDQUFDO0FBQUEsWUFDbEosQ0FBQztBQUFBLFVBQ0gsR0FBR1gsSUFBSSxNQUFNRyxJQUFJLEdBQUcsSUFBSUosRUFBRSxRQUFRSSxJQUFJLEdBQUdBLEtBQUs7QUFDNUMsZ0JBQUl2QixJQUFJbUIsRUFBRUksQ0FBQztBQUNYLFlBQUF2QixFQUFFLFNBQVMsMEJBQTBCQSxFQUFFLFNBQVMsMkJBQTJCb0IsTUFBTUEsSUFBSSxDQUFDLElBQUlBLEVBQUUsS0FBS3BCLEVBQUUsU0FBUyx1QkFBdUIsQ0FBQztBQUFBLFVBQ3RJO0FBQ0EsVUFBQW9CLE1BQU0sT0FBT2EsRUFBSSxJQUFJLFFBQVEsSUFBSWIsQ0FBQyxFQUFFLEtBQUthLEdBQUssU0FBU1QsR0FBRztBQUN4RCxZQUFBMUIsRUFBSzBCLENBQUMsR0FBRyxFQUFFQSxDQUFDO0FBQUEsVUFDZCxDQUFDO0FBQUEsUUFDSCxDQUFDO0FBQUEsTUFDSCxDQUFDO0FBQUEsSUFDSCxHQUFHLEVBQUUsVUFBVSxtQkFBbUIsV0FBVztBQUMzQyxVQUFJLElBQUk7QUFDUixVQUFJLENBQUMsS0FBSyxjQUFjO0FBQ3RCLFlBQUksSUFBSSxXQUFXO0FBQ2pCLFlBQUUsZUFBZSxJQUFJLEVBQUUsZUFBZSxFQUFFLFFBQVEsV0FBVztBQUN6RCxjQUFFLGVBQWUsSUFBSSxFQUFFLGVBQWUsU0FBUyxNQUFNLEVBQUUsWUFBWSxHQUFHLEVBQUUsaUJBQWlCO0FBQUEsVUFDM0YsQ0FBQyxFQUFFLE1BQU0sU0FBUyxHQUFHO0FBQ25CLGNBQUUsZUFBZSxJQUFJMUIsRUFBSyxDQUFDO0FBQUEsVUFDN0IsQ0FBQztBQUFBLFFBQ0g7QUFDQSxZQUFJLEtBQUssZUFBZSxVQUFVLEtBQUs7QUFDckMsaUJBQU8sRUFBRTtBQUNYLGFBQUssV0FBVyxXQUFXLEtBQUssU0FBUyxXQUFXLFdBQVc7QUFDN0QsaUJBQU8sRUFBRTtBQUFBLFFBQ1gsR0FBRyxLQUFLLHFCQUFxQixHQUFHTyxHQUFHLEtBQUssTUFBTTtBQUFBLE1BQ2hEO0FBQUEsSUFDRixHQUFHLEVBQUUsVUFBVSxjQUFjLFdBQVc7QUFDdEMsV0FBSyxXQUFXLFdBQVcsYUFBYSxLQUFLLE1BQU0sR0FBRyxLQUFLLFNBQVM7QUFBQSxJQUN0RSxHQUFHO0FBQUEsRUFDTCxFQUFFO0FBQUEsR0FDRDZCLEtBQXFCLDJCQUFXO0FBQ2pDLE1BQUksSUFBSSxTQUFTLEdBQUcsR0FBRztBQUNyQixXQUFPLElBQUksT0FBTyxrQkFBa0IsRUFBRSxXQUFXLENBQUMsRUFBRSxhQUFhLFNBQVMsU0FBUyxHQUFHakIsR0FBRztBQUN2RixRQUFFLFlBQVlBO0FBQUEsSUFDaEIsS0FBSyxTQUFTLEdBQUdBLEdBQUc7QUFDbEIsZUFBU0UsS0FBS0YsRUFBRyxRQUFPLFVBQVUsZUFBZSxLQUFLQSxHQUFHRSxDQUFDLE1BQU0sRUFBRUEsQ0FBQyxJQUFJRixFQUFFRSxDQUFDO0FBQUEsSUFDNUUsR0FBRyxFQUFFLEdBQUcsQ0FBQztBQUFBLEVBQ1g7QUFDQSxTQUFPLFNBQVMsR0FBRyxHQUFHO0FBQ3BCLFFBQUksT0FBTyxLQUFLLGNBQWMsTUFBTTtBQUNsQyxZQUFNLElBQUksVUFBVSx5QkFBeUIsT0FBTyxDQUFDLElBQUksK0JBQStCO0FBQzFGLE1BQUUsR0FBRyxDQUFDO0FBQ04sYUFBUyxJQUFJO0FBQ1gsV0FBSyxjQUFjO0FBQUEsSUFDckI7QUFDQSxNQUFFLFlBQVksTUFBTSxPQUFPLE9BQU8sT0FBTyxDQUFDLEtBQUssRUFBRSxZQUFZLEVBQUUsV0FBVyxJQUFJLEVBQUU7QUFBQSxFQUNsRjtBQUNGLEVBQUUsR0FBR2dCO0FBQUE7QUFBQSxFQUVILFNBQVMsR0FBRztBQUNWLElBQUFELEdBQUcsR0FBRyxDQUFDO0FBQ1AsYUFBUyxFQUFFLEdBQUcsR0FBRztBQUNmLFVBQUlqQixJQUFJLEVBQUUsS0FBSyxNQUFNLEdBQUcsQ0FBQyxLQUFLO0FBQzlCLGFBQU9BLEVBQUUsT0FBTyxDQUFDLEdBQUdBO0FBQUEsSUFDdEI7QUFDQSxXQUFPLEVBQUUsVUFBVSxTQUFTLFNBQVMsR0FBRztBQUN0QyxVQUFJLElBQUk7QUFDUixPQUFDLEtBQUssT0FBTyxTQUFTLEVBQUUsb0NBQW9DLE1BQU0sT0FBTyxXQUFXLFFBQVEsS0FBSyw0QkFBNEIsV0FBVztBQUN0SSxpQkFBUyxvQkFBb0IsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLFNBQVNBLEdBQUc7QUFDeEUsVUFBQW5CLEVBQUttQixDQUFDO0FBQUEsUUFDUixDQUFDO0FBQUEsTUFDSCxHQUFHLEtBQUssb0JBQW9CLFdBQVc7QUFDckMsVUFBRSxXQUFXLEVBQUUsTUFBTSxTQUFTQSxHQUFHO0FBQy9CLFVBQUFuQixFQUFLbUIsQ0FBQztBQUFBLFFBQ1IsQ0FBQztBQUFBLE1BQ0gsR0FBRyxTQUFTLGlCQUFpQixvQkFBb0IsS0FBSyx5QkFBeUIsR0FBRyxTQUFTLGlCQUFpQixZQUFZLEtBQUssaUJBQWlCO0FBQUEsSUFDaEosR0FBRyxFQUFFLFVBQVUsYUFBYSxXQUFXO0FBQ3JDLGFBQU8sV0FBVyxRQUFRLEtBQUssNkJBQTZCLFNBQVMsb0JBQW9CLG9CQUFvQixLQUFLLHlCQUF5QixHQUFHLEtBQUsscUJBQXFCLFNBQVMsb0JBQW9CLFlBQVksS0FBSyxpQkFBaUI7QUFBQSxJQUN6TyxHQUFHO0FBQUEsRUFDTCxFQUFFLEVBQUU7QUFBQSxHQUNILEtBQUssR0FBRyxLQUFLLElBQUltQjtBQUFBO0FBQUEsRUFFRiwyQkFBVztBQUN6QixhQUFTLElBQUk7QUFDWCxXQUFLLGtCQUFrQkMsRUFBRSxFQUFFLEdBQUcsS0FBSyxpQkFBaUJBLEVBQUUsRUFBRTtBQUFBLElBQzFEO0FBQ0EsV0FBTztBQUFBLEVBQ1QsRUFBRTtBQUFBLEdBQ0RDLElBQUksTUFBTSxFQUFFO0FBQ2YsU0FBU0QsRUFBRSxHQUFHO0FBQ1osU0FBTyxXQUFXO0FBQ2hCLGFBQVN2RCxJQUFJLEdBQUdBLElBQUksSUFBSSxHQUFHQTtBQUN6QixNQUFBd0QsRUFBRXhELENBQUMsSUFBSSxLQUFLLE1BQU0sS0FBSyxPQUFPLElBQUksRUFBRSxJQUFJLElBQUl3RCxFQUFFeEQsQ0FBQyxLQUFLLE9BQU93RCxFQUFFeEQsQ0FBQyxLQUFLO0FBQ3JFLFdBQU8sT0FBTyxhQUFhLE1BQU0sTUFBTXdELEVBQUUsTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQUEsRUFDMUQ7QUFDRjtBQUNBLElBQUk7QUFBQTtBQUFBLEVBRUYsV0FBVztBQUNULGFBQVMsRUFBRSxHQUFHLEdBQUcsR0FBRztBQUNsQixXQUFLLGtCQUFrQjtBQUN2QixVQUFJckIsSUFBSSxHQUFHLENBQUM7QUFDWixXQUFLLFdBQVdBLEVBQUUsU0FBUyxLQUFLLGlCQUFpQkEsRUFBRSxlQUFlLEtBQUssY0FBY0EsRUFBRSxZQUFZLEtBQUssZUFBZSxFQUFFLGVBQWUsSUFBSW1CLEdBQUcsR0FBRyxLQUFLLFdBQVcsRUFBRSxVQUFVLEtBQUsseUJBQXlCO0FBQUEsSUFDOU07QUFDQSxXQUFPLEVBQUUsVUFBVSxZQUFZLFNBQVMsR0FBRzNCLEdBQUssR0FBRztBQUNqRCxVQUFJUSxHQUFHRSxHQUFHSjtBQUNWLE1BQUFOLE1BQVEsV0FBV0EsSUFBTSxDQUFDLElBQUksTUFBTSxXQUFXLElBQUkvQixFQUFHLE9BQU8sSUFBSStCLEVBQUksU0FBUyxJQUFJbkMsRUFBRyxXQUFXLENBQUM7QUFDakcsVUFBSThDLElBQUk5QyxFQUFHLFFBQVEsQ0FBQztBQUNwQixVQUFJeUIsR0FBRSxDQUFDLEdBQUc7QUFDUixRQUFBakIsRUFBRSxNQUFNLGlEQUFpRDtBQUN6RCxZQUFJeUMsSUFBSWpELEVBQUcsZ0JBQWdCSyxFQUFFO0FBQzdCLGVBQU80QztBQUFBLE1BQ1Q7QUFDQSxVQUFJLElBQUlILEtBQUssT0FBTyxTQUFTQSxFQUFFLFlBQVksR0FBR21CLElBQU0sS0FBSyxhQUFhLGVBQWUsR0FBR2YsR0FBR08sR0FBR0M7QUFDOUYsT0FBQyxLQUFLLENBQUMxRCxFQUFHLG1CQUFtQixDQUFDLElBQUlrRCxJQUFJLEtBQUssYUFBYSxnQkFBZ0IsS0FBS0EsSUFBSSxFQUFFLFNBQVNPLElBQUksRUFBRSxZQUFZQyxJQUFJLEVBQUU7QUFDcEgsVUFBSSxLQUFLZixJQUFJUixFQUFJLFVBQVUsUUFBUVEsTUFBTSxTQUFTQSxJQUFJckMsR0FBRyxVQUFVLE1BQU11QyxJQUFJVixFQUFJLFdBQVcsUUFBUVUsTUFBTSxTQUFTQSxJQUFJLENBQUMsR0FBRyxJQUFJLFNBQVNxQixHQUFHO0FBQ3pJLGVBQU87QUFBQSxVQUNMLFNBQVNBLEVBQUU7QUFBQSxVQUNYLFlBQVkzQyxFQUFHMkMsRUFBRSxVQUFVO0FBQUEsUUFDN0I7QUFBQSxNQUNGLENBQUMsR0FBR0MsSUFBSTVDLEVBQUdZLEVBQUksVUFBVSxHQUFHaUMsSUFBSSxLQUFLLFNBQVMsYUFBYSxHQUFHbEIsR0FBRyxHQUFHLEdBQUdpQixHQUFHLENBQUM7QUFDM0UsTUFBQVYsS0FBS2hCLElBQUkyQixFQUFFLGdCQUFnQixRQUFRM0IsTUFBTSxTQUFTQSxJQUFJZ0I7QUFDdEQsVUFBSSxLQUFLVyxFQUFFLGFBQWExQyxFQUFFLHFCQUFxQnhCLEVBQUcsVUFBVUEsRUFBRyxNQUFNLElBQUksRUFBRSxTQUFTZ0QsR0FBRyxRQUFRZSxHQUFLLFlBQVksSUFBSSxZQUFZUixFQUFFO0FBQ2xJLFVBQUlXLEVBQUUsYUFBYTFDLEVBQUUsWUFBWTtBQUMvQixRQUFBbEIsRUFBRSxNQUFNLCtEQUErRDtBQUN2RSxZQUFJeUMsSUFBSWpELEVBQUcsZ0JBQWdCLENBQUM7QUFDNUIsZUFBT2lEO0FBQUEsTUFDVDtBQUNBLFVBQUksS0FBSzFCLEVBQUcsT0FBTyxPQUFPNEMsR0FBR0MsRUFBRSxVQUFVLENBQUMsR0FBRyxLQUFLLElBQUlwQixHQUFHLE1BQU0sR0FBRyxHQUFHLEdBQUcsR0FBR1UsR0FBRyxHQUFHdkIsRUFBSSxXQUFXLFFBQVEsRUFBRTtBQUMxRyxhQUFPO0FBQUEsSUFDVCxHQUFHLEVBQUUsVUFBVSxrQkFBa0IsU0FBUyxHQUFHLEdBQUcsR0FBR1EsR0FBRztBQUNwRCxVQUFJRSxHQUFHSixHQUFHSztBQUNWLFVBQUksRUFBRSxVQUFVLFNBQVMsSUFBSTtBQUMzQixrQkFBVSxXQUFXLElBQUlBLElBQUksSUFBSSxVQUFVLFdBQVcsS0FBS0QsSUFBSSxHQUFHQyxJQUFJLE1BQU1ELElBQUksR0FBR0osSUFBSSxHQUFHSyxJQUFJSDtBQUM5RixZQUFJTSxJQUFJUixLQUFLckMsRUFBRyxPQUFPLEdBQUcsSUFBSSxLQUFLLFVBQVUsR0FBR3lDLEdBQUdJLENBQUMsR0FBR3ZCLElBQUkxQixFQUFHLFFBQVFpRCxHQUFHLENBQUM7QUFDMUUsZUFBTzdDLEVBQUcsS0FBS3NCLEdBQUdvQixHQUFHLFFBQVEsQ0FBQztBQUFBLE1BQ2hDO0FBQUEsSUFDRixHQUFHLEVBQUUsVUFBVSxtQkFBbUIsV0FBVztBQUMzQyxhQUFPLEtBQUs7QUFBQSxJQUNkLEdBQUcsRUFBRSxVQUFVLGdCQUFnQixXQUFXO0FBQ3hDLGFBQU8sS0FBSztBQUFBLElBQ2QsR0FBRyxFQUFFLFVBQVUseUJBQXlCLFdBQVc7QUFDakQsYUFBTyxLQUFLLGdCQUFnQix1QkFBdUI7QUFBQSxJQUNyRCxHQUFHO0FBQUEsRUFDTCxFQUFFO0FBQUEsR0FDRHVCLElBQUksU0FBUyxHQUFHO0FBQ2pCLE1BQUksSUFBSSxPQUFPLFVBQVUsY0FBYyxPQUFPLFVBQVUsSUFBSSxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUk7QUFDM0UsTUFBSSxFQUFHLFFBQU8sRUFBRSxLQUFLLENBQUM7QUFDdEIsTUFBSSxLQUFLLE9BQU8sRUFBRSxVQUFVLFNBQVUsUUFBTztBQUFBLElBQzNDLE1BQU0sV0FBVztBQUNmLGFBQU8sS0FBSyxLQUFLLEVBQUUsV0FBVyxJQUFJLFNBQVMsRUFBRSxPQUFPLEtBQUssRUFBRSxHQUFHLEdBQUcsTUFBTSxDQUFDLEVBQUU7QUFBQSxJQUM1RTtBQUFBLEVBQ0Y7QUFDQSxRQUFNLElBQUksVUFBVSxJQUFJLDRCQUE0QixpQ0FBaUM7QUFDdkYsR0FBR0M7QUFBQTtBQUFBLEVBRUQsV0FBVztBQUNULGFBQVMsRUFBRSxHQUFHO0FBQ1osV0FBSyxrQkFBa0I7QUFBQSxJQUN6QjtBQUNBLFdBQU8sRUFBRSxVQUFVLGFBQWEsV0FBVztBQUN6QyxVQUFJLEdBQUcsR0FBRyxJQUFJLENBQUM7QUFDZixVQUFJO0FBQ0YsaUJBQVMzQixJQUFJMEIsRUFBRSxLQUFLLGVBQWUsR0FBR3hCLElBQUlGLEVBQUUsS0FBSyxHQUFHLENBQUNFLEVBQUUsTUFBTUEsSUFBSUYsRUFBRSxLQUFLLEdBQUc7QUFDekUsY0FBSUYsSUFBSUksRUFBRTtBQUNWLFlBQUUsS0FBS0osRUFBRSxXQUFXLENBQUM7QUFBQSxRQUN2QjtBQUFBLE1BQ0YsU0FBU0ssR0FBRztBQUNWLFlBQUksRUFBRSxPQUFPQSxFQUFFO0FBQUEsTUFDakIsVUFBRTtBQUNBLFlBQUk7QUFDRixVQUFBRCxLQUFLLENBQUNBLEVBQUUsU0FBUyxJQUFJRixFQUFFLFdBQVcsRUFBRSxLQUFLQSxDQUFDO0FBQUEsUUFDNUMsVUFBRTtBQUNBLGNBQUksRUFBRyxPQUFNLEVBQUU7QUFBQSxRQUNqQjtBQUFBLE1BQ0Y7QUFDQSxhQUFPLElBQUksUUFBUSxTQUFTRyxHQUFHO0FBQzdCLGdCQUFRLElBQUksQ0FBQyxFQUFFLEtBQUssV0FBVztBQUM3QixVQUFBQSxFQUFFO0FBQUEsUUFDSixDQUFDLEVBQUUsTUFBTSxTQUFTRyxHQUFHO0FBQ25CLFVBQUF6QixFQUFLeUIsS0FBSyxJQUFJLE1BQU0sdUNBQXVDLENBQUMsR0FBR0gsRUFBRTtBQUFBLFFBQ25FLENBQUM7QUFBQSxNQUNILENBQUM7QUFBQSxJQUNILEdBQUcsRUFBRSxVQUFVLFVBQVUsU0FBUyxHQUFHLEdBQUc7QUFDdEMsVUFBSSxHQUFHSDtBQUNQLFVBQUk7QUFDRixpQkFBU0UsSUFBSXdCLEVBQUUsS0FBSyxlQUFlLEdBQUc1QixJQUFJSSxFQUFFLEtBQUssR0FBRyxDQUFDSixFQUFFLE1BQU1BLElBQUlJLEVBQUUsS0FBSyxHQUFHO0FBQ3pFLGNBQUlDLElBQUlMLEVBQUU7QUFDVixVQUFBSyxFQUFFLFFBQVEsR0FBRyxDQUFDO0FBQUEsUUFDaEI7QUFBQSxNQUNGLFNBQVNHLEdBQUc7QUFDVixZQUFJLEVBQUUsT0FBT0EsRUFBRTtBQUFBLE1BQ2pCLFVBQUU7QUFDQSxZQUFJO0FBQ0YsVUFBQVIsS0FBSyxDQUFDQSxFQUFFLFNBQVNFLElBQUlFLEVBQUUsV0FBV0YsRUFBRSxLQUFLRSxDQUFDO0FBQUEsUUFDNUMsVUFBRTtBQUNBLGNBQUksRUFBRyxPQUFNLEVBQUU7QUFBQSxRQUNqQjtBQUFBLE1BQ0Y7QUFBQSxJQUNGLEdBQUcsRUFBRSxVQUFVLFFBQVEsU0FBUyxHQUFHO0FBQ2pDLFVBQUksR0FBRztBQUNQLFVBQUk7QUFDRixpQkFBU0YsSUFBSTBCLEVBQUUsS0FBSyxlQUFlLEdBQUd4QixJQUFJRixFQUFFLEtBQUssR0FBRyxDQUFDRSxFQUFFLE1BQU1BLElBQUlGLEVBQUUsS0FBSyxHQUFHO0FBQ3pFLGNBQUlGLElBQUlJLEVBQUU7QUFDVixVQUFBSixFQUFFLE1BQU0sQ0FBQztBQUFBLFFBQ1g7QUFBQSxNQUNGLFNBQVNLLEdBQUc7QUFDVixZQUFJLEVBQUUsT0FBT0EsRUFBRTtBQUFBLE1BQ2pCLFVBQUU7QUFDQSxZQUFJO0FBQ0YsVUFBQUQsS0FBSyxDQUFDQSxFQUFFLFNBQVMsSUFBSUYsRUFBRSxXQUFXLEVBQUUsS0FBS0EsQ0FBQztBQUFBLFFBQzVDLFVBQUU7QUFDQSxjQUFJLEVBQUcsT0FBTSxFQUFFO0FBQUEsUUFDakI7QUFBQSxNQUNGO0FBQUEsSUFDRixHQUFHLEVBQUUsVUFBVSxXQUFXLFdBQVc7QUFDbkMsVUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQ2YsVUFBSTtBQUNGLGlCQUFTQSxJQUFJMEIsRUFBRSxLQUFLLGVBQWUsR0FBR3hCLElBQUlGLEVBQUUsS0FBSyxHQUFHLENBQUNFLEVBQUUsTUFBTUEsSUFBSUYsRUFBRSxLQUFLLEdBQUc7QUFDekUsY0FBSUYsSUFBSUksRUFBRTtBQUNWLFlBQUUsS0FBS0osRUFBRSxTQUFTLENBQUM7QUFBQSxRQUNyQjtBQUFBLE1BQ0YsU0FBU0ssR0FBRztBQUNWLFlBQUksRUFBRSxPQUFPQSxFQUFFO0FBQUEsTUFDakIsVUFBRTtBQUNBLFlBQUk7QUFDRixVQUFBRCxLQUFLLENBQUNBLEVBQUUsU0FBUyxJQUFJRixFQUFFLFdBQVcsRUFBRSxLQUFLQSxDQUFDO0FBQUEsUUFDNUMsVUFBRTtBQUNBLGNBQUksRUFBRyxPQUFNLEVBQUU7QUFBQSxRQUNqQjtBQUFBLE1BQ0Y7QUFDQSxhQUFPLElBQUksUUFBUSxTQUFTRyxHQUFHRyxHQUFHO0FBQ2hDLGdCQUFRLElBQUksQ0FBQyxFQUFFLEtBQUssV0FBVztBQUM3QixVQUFBSCxFQUFFO0FBQUEsUUFDSixHQUFHRyxDQUFDO0FBQUEsTUFDTixDQUFDO0FBQUEsSUFDSCxHQUFHO0FBQUEsRUFDTCxFQUFFO0FBQUEsR0FDRHNCO0FBQUE7QUFBQSxFQUVELFdBQVc7QUFDVCxhQUFTLElBQUk7QUFBQSxJQUNiO0FBQ0EsV0FBTyxFQUFFLFVBQVUsVUFBVSxTQUFTLEdBQUcsR0FBRztBQUFBLElBQzVDLEdBQUcsRUFBRSxVQUFVLFFBQVEsU0FBUyxHQUFHO0FBQUEsSUFDbkMsR0FBRyxFQUFFLFVBQVUsV0FBVyxXQUFXO0FBQ25DLGFBQU8sUUFBUSxRQUFRO0FBQUEsSUFDekIsR0FBRyxFQUFFLFVBQVUsYUFBYSxXQUFXO0FBQ3JDLGFBQU8sUUFBUSxRQUFRO0FBQUEsSUFDekIsR0FBRztBQUFBLEVBQ0wsRUFBRTtBQUFBLEdBQ0RDLEtBQUssU0FBUyxHQUFHLEdBQUc7QUFDckIsTUFBSSxJQUFJLE9BQU8sVUFBVSxjQUFjLEVBQUUsT0FBTyxRQUFRO0FBQ3hELE1BQUksQ0FBQyxFQUFHLFFBQU87QUFDZixNQUFJLElBQUksRUFBRSxLQUFLLENBQUMsR0FBRzdCLEdBQUdFLElBQUksQ0FBQyxHQUFHSjtBQUM5QixNQUFJO0FBQ0YsWUFBUSxNQUFNLFVBQVUsTUFBTSxNQUFNLEVBQUVFLElBQUksRUFBRSxLQUFLLEdBQUcsT0FBUSxDQUFBRSxFQUFFLEtBQUtGLEVBQUUsS0FBSztBQUFBLEVBQzVFLFNBQVNHLEdBQUc7QUFDVixJQUFBTCxJQUFJLEVBQUUsT0FBT0ssRUFBRTtBQUFBLEVBQ2pCLFVBQUU7QUFDQSxRQUFJO0FBQ0YsTUFBQUgsS0FBSyxDQUFDQSxFQUFFLFNBQVMsSUFBSSxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUM7QUFBQSxJQUM1QyxVQUFFO0FBQ0EsVUFBSUYsRUFBRyxPQUFNQSxFQUFFO0FBQUEsSUFDakI7QUFBQSxFQUNGO0FBQ0EsU0FBT0k7QUFDVCxHQUFHNEIsS0FBSyxTQUFTLEdBQUcsR0FBRyxHQUFHO0FBQ3hCLE1BQUksVUFBVSxXQUFXLEVBQUcsVUFBUyxJQUFJLEdBQUc5QixJQUFJLEVBQUUsUUFBUUUsR0FBRyxJQUFJRixHQUFHO0FBQ2xFLEtBQUNFLEtBQUssRUFBRSxLQUFLLFFBQVFBLE1BQU1BLElBQUksTUFBTSxVQUFVLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJQSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDakYsU0FBTyxFQUFFLE9BQU9BLEtBQUssTUFBTSxVQUFVLE1BQU0sS0FBSyxDQUFDLENBQUM7QUFDcEQsR0FBRzZCO0FBQUEsQ0FDRixTQUFTLEdBQUc7QUFDWCxJQUFFLEVBQUUsV0FBVyxDQUFDLElBQUksWUFBWSxFQUFFLEVBQUUsVUFBVSxDQUFDLElBQUksV0FBVyxFQUFFLEVBQUUsUUFBUSxDQUFDLElBQUksU0FBUyxFQUFFLEVBQUUsYUFBYSxDQUFDLElBQUk7QUFDaEgsR0FBR0EsTUFBTUEsSUFBSSxDQUFDLEVBQUU7QUFDaEIsSUFBSTtBQUFBO0FBQUEsRUFFRixXQUFXO0FBQ1QsYUFBUyxFQUFFLEdBQUc7QUFDWixZQUFNLFdBQVcsSUFBSSxDQUFDO0FBQ3RCLFVBQUksR0FBRztBQUNQLFdBQUssNEJBQTRCLENBQUMsR0FBRyxLQUFLLFdBQTJCLG9CQUFJLElBQUk7QUFDN0UsVUFBSS9CLElBQUlYLEdBQUcsQ0FBQyxHQUFHdUIsRUFBRSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQ3pCLFVBQUksS0FBSyxZQUFZLElBQUlaLEVBQUUsY0FBYyxRQUFRLE1BQU0sU0FBUyxJQUFJSCxFQUFJLE1BQU0sR0FBR0csRUFBRSw4QkFBOEIsS0FBSyxXQUFXSCxFQUFJLFFBQVEsRUFBRSxNQUFNLEtBQUssUUFBUSxJQUFJLEtBQUssVUFBVSxPQUFPLE9BQU8sQ0FBQyxHQUFHRyxHQUFHO0FBQUEsUUFDeE0sVUFBVSxLQUFLO0FBQUEsTUFDakIsQ0FBQyxHQUFHLEdBQUcsSUFBSSxFQUFFLG9CQUFvQixRQUFRLE1BQU0sV0FBVyxFQUFFO0FBQzFELGFBQUssNEJBQTRCOEIsR0FBRyxDQUFDLEdBQUdELEdBQUcsRUFBRSxjQUFjLEdBQUcsRUFBRSxHQUFHLEtBQUssc0JBQXNCLElBQUlGLEVBQUUsS0FBSyx5QkFBeUI7QUFBQSxXQUMvSDtBQUNILFlBQUl6QixJQUFJLEtBQUssc0JBQXNCO0FBQ25DLFlBQUlBLE1BQU0sUUFBUTtBQUNoQixjQUFJSixJQUFJLElBQUlvQixHQUFHaEIsQ0FBQztBQUNoQixlQUFLLHNCQUFzQko7QUFBQSxRQUM3QjtBQUNFLGVBQUssc0JBQXNCLElBQUk4QixHQUFHO0FBQUEsTUFDdEM7QUFBQSxJQUNGO0FBQ0EsV0FBTyxFQUFFLFVBQVUsWUFBWSxTQUFTLEdBQUcsR0FBRyxHQUFHO0FBQy9DLFVBQUk1QixJQUFJLElBQUksT0FBTyxLQUFLLE1BQU0sUUFBUSxLQUFLLE9BQU8sU0FBUyxFQUFFLGNBQWM7QUFDM0UsYUFBTyxLQUFLLFNBQVMsSUFBSUEsQ0FBQyxLQUFLLEtBQUssU0FBUyxJQUFJQSxHQUFHLElBQUksR0FBRyxFQUFFLE1BQU0sR0FBRyxTQUFTLEdBQUcsV0FBVyxLQUFLLE9BQU8sU0FBUyxFQUFFLFVBQVUsR0FBRyxLQUFLLFNBQVMsSUFBSSxDQUFDLEdBQUcsS0FBSyxTQUFTLElBQUlBLENBQUM7QUFBQSxJQUM1SyxHQUFHLEVBQUUsVUFBVSxtQkFBbUIsU0FBUyxHQUFHO0FBQzVDLFdBQUssMEJBQTBCLFdBQVcsS0FBSyxLQUFLLG9CQUFvQixTQUFTLEVBQUUsTUFBTSxTQUFTUixHQUFLO0FBQ3JHLGVBQU8zQixFQUFFLE1BQU0seURBQXlEMkIsQ0FBRztBQUFBLE1BQzdFLENBQUMsR0FBRyxLQUFLLDBCQUEwQixLQUFLLENBQUMsR0FBRyxLQUFLLHNCQUFzQixJQUFJbUMsRUFBRSxLQUFLLHlCQUF5QjtBQUFBLElBQzdHLEdBQUcsRUFBRSxVQUFVLHlCQUF5QixXQUFXO0FBQ2pELGFBQU8sS0FBSztBQUFBLElBQ2QsR0FBRyxFQUFFLFVBQVUsV0FBVyxTQUFTLEdBQUc7QUFDcEMsWUFBTSxXQUFXLElBQUksQ0FBQyxJQUFJdEUsRUFBRyx3QkFBd0IsSUFBSSxHQUFHLEVBQUUsZUFBZSxXQUFXLEVBQUUsYUFBYSxLQUFLLHdCQUF3QixJQUFJLEVBQUUsa0JBQWtCSSxFQUFHLHdCQUF3QixFQUFFLGNBQWMsR0FBRyxFQUFFLGNBQWNjLEdBQUcsb0JBQW9CLEVBQUUsVUFBVTtBQUFBLElBQy9QLEdBQUcsRUFBRSxVQUFVLGFBQWEsV0FBVztBQUNyQyxVQUFJLElBQUksS0FBSyxRQUFRLHlCQUF5QixJQUFJLEtBQUssMEJBQTBCLElBQUksU0FBUyxHQUFHO0FBQy9GLGVBQU8sSUFBSSxRQUFRLFNBQVN5QixHQUFHO0FBQzdCLGNBQUlFLEdBQUdKLElBQUksV0FBVyxXQUFXO0FBQy9CLFlBQUFFLEVBQUUsSUFBSSxNQUFNLCtEQUErRCxJQUFJLEtBQUssQ0FBQyxHQUFHRSxJQUFJNkIsRUFBRTtBQUFBLFVBQ2hHLEdBQUcsQ0FBQztBQUNKLFlBQUUsV0FBVyxFQUFFLEtBQUssV0FBVztBQUM3Qix5QkFBYWpDLENBQUMsR0FBR0ksTUFBTTZCLEVBQUUsWUFBWTdCLElBQUk2QixFQUFFLFVBQVUvQixFQUFFRSxDQUFDO0FBQUEsVUFDMUQsQ0FBQyxFQUFFLE1BQU0sU0FBU0MsR0FBRztBQUNuQix5QkFBYUwsQ0FBQyxHQUFHSSxJQUFJNkIsRUFBRSxPQUFPL0IsRUFBRUcsQ0FBQztBQUFBLFVBQ25DLENBQUM7QUFBQSxRQUNILENBQUM7QUFBQSxNQUNILENBQUM7QUFDRCxhQUFPLElBQUksUUFBUSxTQUFTLEdBQUdILEdBQUc7QUFDaEMsZ0JBQVEsSUFBSSxDQUFDLEVBQUUsS0FBSyxTQUFTRSxHQUFHO0FBQzlCLGNBQUlKLElBQUlJLEVBQUUsT0FBTyxTQUFTQyxHQUFHO0FBQzNCLG1CQUFPQSxNQUFNNEIsRUFBRTtBQUFBLFVBQ2pCLENBQUM7QUFDRCxVQUFBakMsRUFBRSxTQUFTLElBQUlFLEVBQUVGLENBQUMsSUFBSSxFQUFFO0FBQUEsUUFDMUIsQ0FBQyxFQUFFLE1BQU0sU0FBU0ksR0FBRztBQUNuQixpQkFBT0YsRUFBRSxDQUFDRSxDQUFDLENBQUM7QUFBQSxRQUNkLENBQUM7QUFBQSxNQUNILENBQUM7QUFBQSxJQUNILEdBQUcsRUFBRSxVQUFVLFdBQVcsV0FBVztBQUNuQyxhQUFPLEtBQUssb0JBQW9CLFNBQVM7QUFBQSxJQUMzQyxHQUFHLEVBQUUsVUFBVSxpQkFBaUIsU0FBUyxHQUFHO0FBQzFDLFVBQUk7QUFDSixjQUFRLElBQUksS0FBSyxZQUFZLHVCQUF1QixJQUFJLENBQUMsT0FBTyxRQUFRLE1BQU0sU0FBUyxTQUFTLEVBQUU7QUFBQSxJQUNwRyxHQUFHLEVBQUUsVUFBVSxtQkFBbUIsU0FBUyxHQUFHO0FBQzVDLFVBQUk7QUFDSixjQUFRLElBQUksS0FBSyxZQUFZLHFCQUFxQixJQUFJLENBQUMsT0FBTyxRQUFRLE1BQU0sU0FBUyxTQUFTLEVBQUU7QUFBQSxJQUNsRyxHQUFHLEVBQUUsVUFBVSwwQkFBMEIsV0FBVztBQUNsRCxVQUFJLElBQUksTUFBTVYsSUFBTSxNQUFNLEtBQUssSUFBSSxJQUFJQyxFQUFHLEVBQUUsZ0JBQWdCLENBQUMsR0FBRyxJQUFJRCxFQUFJLElBQUksU0FBU1UsR0FBRztBQUN0RixZQUFJSixJQUFJLEVBQUUsZUFBZUksQ0FBQztBQUMxQixlQUFPSixLQUFLakMsRUFBRSxLQUFLLGlCQUFpQnFDLElBQUksMERBQTBELEdBQUdKO0FBQUEsTUFDdkcsQ0FBQyxHQUFHRSxJQUFJLEVBQUUsT0FBTyxTQUFTRSxHQUFHSixHQUFHO0FBQzlCLGVBQU9BLEtBQUtJLEVBQUUsS0FBS0osQ0FBQyxHQUFHSTtBQUFBLE1BQ3pCLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsVUFBSUYsRUFBRSxXQUFXO0FBQ2YsZUFBT1IsRUFBSSxXQUFXLElBQUlRLEVBQUUsQ0FBQyxJQUFJLElBQUloQixHQUFHO0FBQUEsVUFDdEMsYUFBYWdCO0FBQUEsUUFDZixDQUFDO0FBQUEsSUFDTCxHQUFHLEVBQUUsVUFBVSx3QkFBd0IsV0FBVztBQUNoRCxVQUFJLElBQUlQLEVBQUcsRUFBRTtBQUNiLFVBQUksRUFBRSxNQUFNLFVBQVUsTUFBTSxLQUFLO0FBQy9CLFlBQUlELElBQU0sS0FBSyxpQkFBaUIsQ0FBQztBQUNqQyxlQUFPQSxLQUFPM0IsRUFBRSxNQUFNLGVBQWUsSUFBSSwwREFBMEQsR0FBRzJCO0FBQUEsTUFDeEc7QUFBQSxJQUNGLEdBQUcsRUFBRSx5QkFBeUMsb0JBQUksSUFBSTtBQUFBLE1BQ3BELENBQUMsZ0JBQWdCLFdBQVc7QUFDMUIsZUFBTyxJQUFJUCxHQUFHO0FBQUEsTUFDaEIsQ0FBQztBQUFBLE1BQ0QsQ0FBQyxXQUFXLFdBQVc7QUFDckIsZUFBTyxJQUFJQyxHQUFHO0FBQUEsTUFDaEIsQ0FBQztBQUFBLElBQ0gsQ0FBQyxHQUFHLEVBQUUsdUJBQXVDLG9CQUFJLElBQUksR0FBRztBQUFBLEVBQzFELEVBQUU7QUFBQSxHQUNELEtBQUssU0FBUyxHQUFHO0FBQ2xCLE1BQUksSUFBSSxPQUFPLFVBQVUsY0FBYyxPQUFPLFVBQVUsSUFBSSxLQUFLLEVBQUUsQ0FBQyxHQUFHLElBQUk7QUFDM0UsTUFBSSxFQUFHLFFBQU8sRUFBRSxLQUFLLENBQUM7QUFDdEIsTUFBSSxLQUFLLE9BQU8sRUFBRSxVQUFVLFNBQVUsUUFBTztBQUFBLElBQzNDLE1BQU0sV0FBVztBQUNmLGFBQU8sS0FBSyxLQUFLLEVBQUUsV0FBVyxJQUFJLFNBQVMsRUFBRSxPQUFPLEtBQUssRUFBRSxHQUFHLEdBQUcsTUFBTSxDQUFDLEVBQUU7QUFBQSxJQUM1RTtBQUFBLEVBQ0Y7QUFDQSxRQUFNLElBQUksVUFBVSxJQUFJLDRCQUE0QixpQ0FBaUM7QUFDdkYsR0FBRztBQUFBO0FBQUEsRUFFRCxXQUFXO0FBQ1QsYUFBUyxJQUFJO0FBQUEsSUFDYjtBQUNBLFdBQU8sRUFBRSxVQUFVLFNBQVMsU0FBUyxHQUFHLEdBQUc7QUFDekMsYUFBTyxLQUFLLFdBQVcsR0FBRyxDQUFDO0FBQUEsSUFDN0IsR0FBRyxFQUFFLFVBQVUsV0FBVyxXQUFXO0FBQ25DLGFBQU8sS0FBSyxXQUFXLENBQUMsQ0FBQyxHQUFHLEtBQUssV0FBVztBQUFBLElBQzlDLEdBQUcsRUFBRSxVQUFVLGFBQWEsV0FBVztBQUNyQyxhQUFPLFFBQVEsUUFBUTtBQUFBLElBQ3pCLEdBQUcsRUFBRSxVQUFVLGNBQWMsU0FBUyxHQUFHO0FBQ3ZDLFVBQUk7QUFDSixhQUFPO0FBQUEsUUFDTCxVQUFVO0FBQUEsVUFDUixZQUFZLEVBQUUsU0FBUztBQUFBLFFBQ3pCO0FBQUEsUUFDQSxzQkFBc0IsRUFBRTtBQUFBLFFBQ3hCLFNBQVMsRUFBRSxZQUFZLEVBQUU7QUFBQSxRQUN6QixVQUFVLEVBQUU7QUFBQSxRQUNaLGFBQWEsSUFBSSxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsUUFBUSxNQUFNLFNBQVMsU0FBUyxFQUFFLFVBQVU7QUFBQSxRQUM3RixNQUFNLEVBQUU7QUFBQSxRQUNSLElBQUksRUFBRSxZQUFZLEVBQUU7QUFBQSxRQUNwQixNQUFNLEVBQUU7QUFBQSxRQUNSLFdBQVdWLEVBQUcsRUFBRSxTQUFTO0FBQUEsUUFDekIsVUFBVUEsRUFBRyxFQUFFLFFBQVE7QUFBQSxRQUN2QixZQUFZLEVBQUU7QUFBQSxRQUNkLFFBQVEsRUFBRTtBQUFBLFFBQ1YsUUFBUSxFQUFFO0FBQUEsUUFDVixPQUFPLEVBQUU7QUFBQSxNQUNYO0FBQUEsSUFDRixHQUFHLEVBQUUsVUFBVSxhQUFhLFNBQVMsR0FBRyxHQUFHO0FBQ3pDLFVBQUksR0FBR3dCO0FBQ1AsVUFBSTtBQUNGLGlCQUFTRSxJQUFJLEdBQUcsQ0FBQyxHQUFHYyxJQUFNZCxFQUFFLEtBQUssR0FBRyxDQUFDYyxFQUFJLE1BQU1BLElBQU1kLEVBQUUsS0FBSyxHQUFHO0FBQzdELGNBQUlDLElBQUlhLEVBQUk7QUFDWixrQkFBUSxJQUFJLEtBQUssWUFBWWIsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFBQSxRQUMvQztBQUFBLE1BQ0YsU0FBU0csR0FBRztBQUNWLFlBQUksRUFBRSxPQUFPQSxFQUFFO0FBQUEsTUFDakIsVUFBRTtBQUNBLFlBQUk7QUFDRixVQUFBVSxLQUFPLENBQUNBLEVBQUksU0FBU2hCLElBQUlFLEVBQUUsV0FBV0YsRUFBRSxLQUFLRSxDQUFDO0FBQUEsUUFDaEQsVUFBRTtBQUNBLGNBQUksRUFBRyxPQUFNLEVBQUU7QUFBQSxRQUNqQjtBQUFBLE1BQ0Y7QUFDQSxVQUFJO0FBQ0YsZUFBTyxFQUFFLEVBQUUsTUFBTUosRUFBRSxRQUFRLENBQUM7QUFBQSxJQUNoQyxHQUFHO0FBQUEsRUFDTCxFQUFFO0FBQUEsR0FDRCxLQUFLLFNBQVMsR0FBRyxHQUFHO0FBQ3JCLE1BQUksSUFBSSxPQUFPLFVBQVUsY0FBYyxFQUFFLE9BQU8sUUFBUTtBQUN4RCxNQUFJLENBQUMsRUFBRyxRQUFPO0FBQ2YsTUFBSSxJQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUdFLEdBQUdFLElBQUksQ0FBQyxHQUFHSjtBQUM5QixNQUFJO0FBQ0YsWUFBUSxNQUFNLFVBQVUsTUFBTSxNQUFNLEVBQUVFLElBQUksRUFBRSxLQUFLLEdBQUcsT0FBUSxDQUFBRSxFQUFFLEtBQUtGLEVBQUUsS0FBSztBQUFBLEVBQzVFLFNBQVNHLEdBQUc7QUFDVixJQUFBTCxJQUFJLEVBQUUsT0FBT0ssRUFBRTtBQUFBLEVBQ2pCLFVBQUU7QUFDQSxRQUFJO0FBQ0YsTUFBQUgsS0FBSyxDQUFDQSxFQUFFLFNBQVMsSUFBSSxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUM7QUFBQSxJQUM1QyxVQUFFO0FBQ0EsVUFBSUYsRUFBRyxPQUFNQSxFQUFFO0FBQUEsSUFDakI7QUFBQSxFQUNGO0FBQ0EsU0FBT0k7QUFDVCxHQUFHLEtBQUssU0FBUyxHQUFHLEdBQUcsR0FBRztBQUN4QixNQUFJLFVBQVUsV0FBVyxFQUFHLFVBQVMsSUFBSSxHQUFHRixJQUFJLEVBQUUsUUFBUUUsR0FBRyxJQUFJRixHQUFHO0FBQ2xFLEtBQUNFLEtBQUssRUFBRSxLQUFLLFFBQVFBLE1BQU1BLElBQUksTUFBTSxVQUFVLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxJQUFJQSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDakYsU0FBTyxFQUFFLE9BQU9BLEtBQUssTUFBTSxVQUFVLE1BQU0sS0FBSyxDQUFDLENBQUM7QUFDcEQsR0FBRzhCO0FBQUE7QUFBQSxFQUVELFdBQVc7QUFDVCxhQUFTLElBQUk7QUFDWCxXQUFLLGlCQUFpQixDQUFDLEdBQUcsS0FBSyxXQUFXO0FBQUEsSUFDNUM7QUFDQSxXQUFPLEVBQUUsVUFBVSxTQUFTLFNBQVMsR0FBRyxHQUFHO0FBQ3pDLFVBQUk7QUFDSixVQUFJLEtBQUs7QUFDUCxlQUFPLEVBQUU7QUFBQSxVQUNQLE1BQU1sQyxFQUFFO0FBQUEsVUFDUixPQUFPLElBQUksTUFBTSwyQkFBMkI7QUFBQSxRQUM5QyxDQUFDO0FBQ0gsT0FBQyxJQUFJLEtBQUssZ0JBQWdCLEtBQUssTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxHQUFHLFdBQVcsV0FBVztBQUNoRixlQUFPLEVBQUUsRUFBRSxNQUFNQSxFQUFFLFFBQVEsQ0FBQztBQUFBLE1BQzlCLEdBQUcsQ0FBQztBQUFBLElBQ04sR0FBRyxFQUFFLFVBQVUsV0FBVyxXQUFXO0FBQ25DLGFBQU8sS0FBSyxXQUFXLElBQUksS0FBSyxpQkFBaUIsQ0FBQyxHQUFHLEtBQUssV0FBVztBQUFBLElBQ3ZFLEdBQUcsRUFBRSxVQUFVLGFBQWEsV0FBVztBQUNyQyxhQUFPLFFBQVEsUUFBUTtBQUFBLElBQ3pCLEdBQUcsRUFBRSxVQUFVLFFBQVEsV0FBVztBQUNoQyxXQUFLLGlCQUFpQixDQUFDO0FBQUEsSUFDekIsR0FBRyxFQUFFLFVBQVUsbUJBQW1CLFdBQVc7QUFDM0MsYUFBTyxLQUFLO0FBQUEsSUFDZCxHQUFHO0FBQUEsRUFDTCxFQUFFO0FBQUEsR0FDRCxLQUFLLFNBQVMsR0FBRyxHQUFHLEdBQUcsR0FBRztBQUMzQixXQUFTRSxFQUFFRSxHQUFHO0FBQ1osV0FBT0EsYUFBYSxJQUFJQSxJQUFJLElBQUksRUFBRSxTQUFTSixHQUFHO0FBQzVDLE1BQUFBLEVBQUVJLENBQUM7QUFBQSxJQUNMLENBQUM7QUFBQSxFQUNIO0FBQ0EsU0FBTyxLQUFLLE1BQU0sSUFBSSxVQUFVLFNBQVNBLEdBQUdKLEdBQUc7QUFDN0MsYUFBU0ssRUFBRXBCLEdBQUc7QUFDWixVQUFJO0FBQ0YsVUFBRSxFQUFFLEtBQUtBLENBQUMsQ0FBQztBQUFBLE1BQ2IsU0FBU3dCLEdBQUc7QUFDVixRQUFBVCxFQUFFUyxDQUFDO0FBQUEsTUFDTDtBQUFBLElBQ0Y7QUFDQSxhQUFTRCxFQUFFdkIsR0FBRztBQUNaLFVBQUk7QUFDRixVQUFFLEVBQUUsTUFBTUEsQ0FBQyxDQUFDO0FBQUEsTUFDZCxTQUFTd0IsR0FBRztBQUNWLFFBQUFULEVBQUVTLENBQUM7QUFBQSxNQUNMO0FBQUEsSUFDRjtBQUNBLGFBQVMsRUFBRXhCLEdBQUc7QUFDWixNQUFBQSxFQUFFLE9BQU9tQixFQUFFbkIsRUFBRSxLQUFLLElBQUlpQixFQUFFakIsRUFBRSxLQUFLLEVBQUUsS0FBS29CLEdBQUdHLENBQUM7QUFBQSxJQUM1QztBQUNBLE9BQUcsSUFBSSxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7QUFBQSxFQUMvQixDQUFDO0FBQ0gsR0FBRzJCLEtBQUssU0FBUyxHQUFHLEdBQUc7QUFDckIsTUFBSSxJQUFJLEVBQUUsT0FBTyxHQUFHLE1BQU0sV0FBVztBQUNuQyxRQUFJL0IsRUFBRSxDQUFDLElBQUksRUFBRyxPQUFNQSxFQUFFLENBQUM7QUFDdkIsV0FBT0EsRUFBRSxDQUFDO0FBQUEsRUFDWixHQUFHLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLEdBQUcsR0FBR0YsR0FBR0UsR0FBR0o7QUFDakMsU0FBT0EsSUFBSSxFQUFFLE1BQU1LLEVBQUUsQ0FBQyxHQUFHLE9BQU9BLEVBQUUsQ0FBQyxHQUFHLFFBQVFBLEVBQUUsQ0FBQyxFQUFFLEdBQUcsT0FBTyxVQUFVLGVBQWVMLEVBQUUsT0FBTyxRQUFRLElBQUksV0FBVztBQUNwSCxXQUFPO0FBQUEsRUFDVCxJQUFJQTtBQUNKLFdBQVNLLEVBQUUsR0FBRztBQUNaLFdBQU8sU0FBU3BCLEdBQUc7QUFDakIsYUFBT3VCLEVBQUUsQ0FBQyxHQUFHdkIsQ0FBQyxDQUFDO0FBQUEsSUFDakI7QUFBQSxFQUNGO0FBQ0EsV0FBU3VCLEVBQUUsR0FBRztBQUNaLFFBQUksRUFBRyxPQUFNLElBQUksVUFBVSxpQ0FBaUM7QUFDNUQsV0FBTyxJQUFLLEtBQUk7QUFDZCxVQUFJLElBQUksR0FBR04sTUFBTUUsSUFBSSxFQUFFLENBQUMsSUFBSSxJQUFJRixFQUFFLFNBQVMsRUFBRSxDQUFDLElBQUlBLEVBQUUsV0FBV0UsSUFBSUYsRUFBRSxXQUFXRSxFQUFFLEtBQUtGLENBQUMsR0FBRyxLQUFLQSxFQUFFLFNBQVMsRUFBRUUsSUFBSUEsRUFBRSxLQUFLRixHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsS0FBTSxRQUFPRTtBQUMvSSxjQUFRRixJQUFJLEdBQUdFLE1BQU0sSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEdBQUdBLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxHQUFHO0FBQUEsUUFDbkQsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILFVBQUFBLElBQUk7QUFDSjtBQUFBLFFBQ0YsS0FBSztBQUNILGlCQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsTUFBTSxHQUFHO0FBQUEsUUFDNUMsS0FBSztBQUNILFlBQUUsU0FBU0YsSUFBSSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUMzQjtBQUFBLFFBQ0YsS0FBSztBQUNILGNBQUksRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSTtBQUM1QjtBQUFBLFFBQ0Y7QUFDRSxjQUFJRSxJQUFJLEVBQUUsTUFBTSxFQUFFQSxJQUFJQSxFQUFFLFNBQVMsS0FBS0EsRUFBRUEsRUFBRSxTQUFTLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxLQUFLLEVBQUUsQ0FBQyxNQUFNLElBQUk7QUFDcEYsZ0JBQUk7QUFDSjtBQUFBLFVBQ0Y7QUFDQSxjQUFJLEVBQUUsQ0FBQyxNQUFNLE1BQU0sQ0FBQ0EsS0FBSyxFQUFFLENBQUMsSUFBSUEsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLElBQUlBLEVBQUUsQ0FBQyxJQUFJO0FBQ3BELGNBQUUsUUFBUSxFQUFFLENBQUM7QUFDYjtBQUFBLFVBQ0Y7QUFDQSxjQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssRUFBRSxRQUFRQSxFQUFFLENBQUMsR0FBRztBQUNoQyxjQUFFLFFBQVFBLEVBQUUsQ0FBQyxHQUFHQSxJQUFJO0FBQ3BCO0FBQUEsVUFDRjtBQUNBLGNBQUlBLEtBQUssRUFBRSxRQUFRQSxFQUFFLENBQUMsR0FBRztBQUN2QixjQUFFLFFBQVFBLEVBQUUsQ0FBQyxHQUFHLEVBQUUsSUFBSSxLQUFLLENBQUM7QUFDNUI7QUFBQSxVQUNGO0FBQ0EsVUFBQUEsRUFBRSxDQUFDLEtBQUssRUFBRSxJQUFJLElBQUksR0FBRyxFQUFFLEtBQUssSUFBSTtBQUNoQztBQUFBLE1BQ0o7QUFDQSxVQUFJLEVBQUUsS0FBSyxHQUFHLENBQUM7QUFBQSxJQUNqQixTQUFTbkIsR0FBRztBQUNWLFVBQUksQ0FBQyxHQUFHQSxDQUFDLEdBQUdpQixJQUFJO0FBQUEsSUFDbEIsVUFBRTtBQUNBLFVBQUlFLElBQUk7QUFBQSxJQUNWO0FBQ0EsUUFBSSxFQUFFLENBQUMsSUFBSSxFQUFHLE9BQU0sRUFBRSxDQUFDO0FBQ3ZCLFdBQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLFFBQVEsTUFBTSxHQUFHO0FBQUEsRUFDakQ7QUFDRixHQUFHZ0M7QUFBQTtBQUFBLEVBRUQsV0FBVztBQUNULGFBQVMsRUFBRSxHQUFHO0FBQ1osV0FBSyxZQUFZLEdBQUcsS0FBSyxnQkFBZ0IsSUFBSTVDLEVBQUcsS0FBSyxXQUFXLElBQUksR0FBRyxLQUFLLHFCQUFxQyxvQkFBSSxJQUFJO0FBQUEsSUFDM0g7QUFDQSxXQUFPLEVBQUUsVUFBVSxhQUFhLFdBQVc7QUFDekMsYUFBTyxHQUFHLE1BQU0sUUFBUSxRQUFRLFdBQVc7QUFDekMsZUFBTzJDLEdBQUcsTUFBTSxTQUFTLEdBQUc7QUFDMUIsa0JBQVEsRUFBRSxPQUFPO0FBQUEsWUFDZixLQUFLO0FBQ0gscUJBQU8sQ0FBQyxHQUFHLFFBQVEsSUFBSSxNQUFNLEtBQUssS0FBSyxrQkFBa0IsQ0FBQyxDQUFDO0FBQUEsWUFDN0QsS0FBSztBQUNILHFCQUFPLEVBQUUsS0FBSyxHQUFHLEtBQUssVUFBVSxhQUFhLENBQUMsR0FBRyxLQUFLLFVBQVUsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7QUFBQSxZQUN2RixLQUFLO0FBQ0gsZ0JBQUUsS0FBSyxHQUFHLEVBQUUsUUFBUTtBQUFBLFlBQ3RCLEtBQUs7QUFDSCxxQkFBTztBQUFBLGdCQUNMO0FBQUE7QUFBQSxjQUVGO0FBQUEsVUFDSjtBQUFBLFFBQ0YsQ0FBQztBQUFBLE1BQ0gsQ0FBQztBQUFBLElBQ0gsR0FBRyxFQUFFLFVBQVUsVUFBVSxTQUFTLEdBQUcsR0FBRztBQUFBLElBQ3hDLEdBQUcsRUFBRSxVQUFVLFFBQVEsU0FBUyxHQUFHO0FBQ2pDLFVBQUksSUFBSSxNQUFNLEdBQUdqQztBQUNqQixVQUFJLENBQUMsS0FBSyxjQUFjLFlBQVksRUFBRSxZQUFZLEVBQUUsYUFBYXpDLEVBQUcsU0FBUztBQUMzRSxZQUFJMkMsSUFBSSxXQUFXO0FBQ2pCLGlCQUFPWCxHQUFHLFFBQVEsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxTQUFTWSxHQUFHO0FBQ25ELGdCQUFJRztBQUNKLFlBQUFILEVBQUUsU0FBU0wsRUFBRSxXQUFXakIsR0FBTXlCLElBQUlILEVBQUUsV0FBVyxRQUFRRyxNQUFNLFNBQVNBLElBQUksSUFBSSxNQUFNLHFEQUFxREgsSUFBSSxHQUFHLENBQUM7QUFBQSxVQUNuSixDQUFDLEVBQUUsTUFBTSxTQUFTQSxHQUFHO0FBQ25CLFlBQUF0QixFQUFLc0IsQ0FBQztBQUFBLFVBQ1IsQ0FBQztBQUFBLFFBQ0g7QUFDQSxZQUFJLEVBQUUsU0FBUyx3QkFBd0I7QUFDckMsY0FBSWEsS0FBT2hCLEtBQUssSUFBSSxFQUFFLFVBQVUsNEJBQTRCLFFBQVFBLE1BQU0sU0FBUyxTQUFTQSxFQUFFLEtBQUssQ0FBQyxFQUFFLEtBQUssV0FBVztBQUNwSCxtQkFBT2dCLEtBQU8sUUFBUSxFQUFFLG1CQUFtQixPQUFPQSxDQUFHLEdBQUdkLEVBQUU7QUFBQSxVQUM1RCxHQUFHLFNBQVNDLEdBQUc7QUFDYixtQkFBT3RCLEVBQUtzQixDQUFDO0FBQUEsVUFDZixDQUFDO0FBQ0QsVUFBQWEsS0FBTyxRQUFRLEtBQUssbUJBQW1CLElBQUlBLENBQUc7QUFBQSxRQUNoRDtBQUNFLFVBQUFkLEVBQUU7QUFBQSxNQUNOO0FBQUEsSUFDRixHQUFHLEVBQUUsVUFBVSxXQUFXLFdBQVc7QUFDbkMsYUFBTyxLQUFLLGNBQWMsS0FBSztBQUFBLElBQ2pDLEdBQUcsRUFBRSxVQUFVLFlBQVksV0FBVztBQUNwQyxhQUFPLEtBQUssVUFBVSxTQUFTO0FBQUEsSUFDakMsR0FBRztBQUFBLEVBQ0wsRUFBRTtBQUFBOyIsCiAgIm5hbWVzIjogWyJHZSIsICJibiIsICJKdCIsICJ1cyIsICJVZSIsICJvcyIsICJsdCIsICJTZSIsICJyIiwgInFlIiwgIndlIiwgIlIiLCAicF8iLCAiTyQxIiwgIk5fIiwgIkhfIiwgInJBIiwgIk5BIiwgInlfIiwgImtlIiwgInJfIiwgIk1BIiwgIloiLCAiWmUiLCAibmUkMSIsICJ3IiwgInAiLCAicHIiLCAiYnIiLCAiSmUiLCAiVyQxIiwgInNyIiwgImtyIiwgIlpyIiwgInR0IiwgInIkMSIsICJPVCIsICJMVCIsICJQJDEiLCAiTSIsICJSJDEiLCAiYSIsICJidCIsICJvIiwgIkN0IiwgImkiLCAicyIsICJ4dCIsICJPdCIsICJsIiwgImYiLCAiUCIsICJnIiwgIkQiLCAiRSIsICJKIiwgIlkiLCAiYyIsICJ5IiwgImEkMSIsICJCdCIsICJEdCIsICJHdCIsICJxIiwgIngiLCAicCQxIiwgImoiLCAiRyIsICJiIiwgIk8iLCAiSyIsICJqdCIsICJWdCIsICJrdCIsICJTIiwgImllIiwgIll0IiwgIm9lIl0KfQo=