@getopenpay/openpay-js-react 0.1.15-alpha.09caa9f → 0.1.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,10 +1,10 @@
1
- import { createContext as $t, useContext as zt, useRef as ot, useMemo as T, useState as H, useCallback as qt, useEffect as Ee } from "react";
2
- import { jsx as A, Fragment as be } from "react/jsx-runtime";
1
+ import { createContext as Ht, useContext as Vt, useRef as at, useMemo as j, useState as V, useCallback as Yt, useEffect as Se } from "react";
2
+ import { jsx as A, Fragment as ve } from "react/jsx-runtime";
3
3
  import { z as t } from "zod";
4
4
  import "uuid";
5
- import { connectToChild as it } from "penpal";
6
- import F from "chalk";
7
- const st = $t({
5
+ import { connectToChild as ct } from "penpal";
6
+ import $ from "chalk";
7
+ const ut = Ht({
8
8
  formId: "",
9
9
  formHeight: "",
10
10
  referrer: void 0,
@@ -12,43 +12,43 @@ const st = $t({
12
12
  registerIframe: () => {
13
13
  },
14
14
  baseUrl: ""
15
- }), Ht = () => {
16
- const e = zt(st);
15
+ }), Kt = () => {
16
+ const e = Vt(ut);
17
17
  if (!e)
18
18
  throw new Error("useOpenPayElements must be used within an OpenPayElementsProvider");
19
19
  return e;
20
- }, Vt = "https://cde.getopenpay.com", Yt = t.object({
20
+ }, Bt = "https://cde.getopenpay.com", Zt = t.object({
21
21
  type: t.string(),
22
22
  loc: t.array(t.string()),
23
23
  msg: t.string(),
24
24
  url: t.string()
25
- }), Kt = t.array(Yt), Bt = t.object({
25
+ }), Jt = t.array(Zt), Wt = t.object({
26
26
  code: t.string(),
27
27
  message: t.string(),
28
28
  path: t.array(t.string())
29
- }), Zt = t.array(Bt), Jt = {
29
+ }), Gt = t.array(Wt), Xt = {
30
30
  "failed to fetch": "Connection error: please double check if you are connected to the internet, then try again"
31
- }, Ce = (e) => {
31
+ }, ke = (e) => {
32
32
  const n = e.toLowerCase().trim();
33
- return Jt[n] ?? e;
34
- }, Wt = (e) => {
33
+ return Xt[n] ?? e;
34
+ }, Qt = (e) => {
35
35
  try {
36
36
  return typeof JSON.parse(e) == "object";
37
37
  } catch {
38
38
  return !1;
39
39
  }
40
- }, Gt = (e) => e.length === 1 ? Ce(e[0].msg) : `Please fix the following errors:
41
- ${e.map((n) => `• ${Ce(n.msg)}`).join(`
42
- `)}`, Xt = (e) => `Encountered the following errors:
40
+ }, er = (e) => e.length === 1 ? ke(e[0].msg) : `Please fix the following errors:
41
+ ${e.map((n) => `• ${ke(n.msg)}`).join(`
42
+ `)}`, tr = (e) => `Encountered the following errors:
43
43
  ${e.map((n) => `- ${n.path.join("/")}: ${n.message}`).join(`
44
- `)}`, J = (e) => {
44
+ `)}`, W = (e) => {
45
45
  if (e instanceof Error)
46
- if (Wt(e.message)) {
46
+ if (Qt(e.message)) {
47
47
  const n = JSON.parse(e.message);
48
- return Kt.safeParse(n).success ? Gt(n) : Zt.safeParse(n).success ? Xt(n) : (console.warn(`Encountered unknown stringified JSON object:
48
+ return Jt.safeParse(n).success ? er(n) : Gt.safeParse(n).success ? tr(n) : (console.warn(`Encountered unknown stringified JSON object:
49
49
  ${e.message}`), e.message);
50
50
  } else
51
- return Ce(e.message);
51
+ return ke(e.message);
52
52
  if (typeof e == "object")
53
53
  try {
54
54
  return JSON.stringify(e);
@@ -57,41 +57,41 @@ ${e.message}`), e.message);
57
57
  }
58
58
  else
59
59
  return e + "";
60
- }, Qt = (e, n, r) => (...o) => {
60
+ }, rr = (e, n, r) => (...o) => {
61
61
  try {
62
62
  return n(...o);
63
63
  } catch (i) {
64
64
  r(`[form] Error running callback (${e}):`, i);
65
65
  return;
66
66
  }
67
- }, P = t.string().trim().min(1, { message: "Cannot be blank" }), S = t.string().trim().optional(), oe = (e) => t.nullable(e.optional());
68
- var _ = /* @__PURE__ */ ((e) => (e.FIRST_NAME = "firstName", e.LAST_NAME = "lastName", e.EMAIL = "email", e.ZIP_CODE = "zipCode", e.CITY = "city", e.STATE = "state", e.COUNTRY = "country", e.ADDRESS = "address", e.PHONE = "phone", e.PROMOTION_CODE = "promotionCode", e))(_ || {});
69
- const at = t.nativeEnum(_);
70
- var ct = /* @__PURE__ */ ((e) => (e.CARD_NUMBER = "cardNumber", e.CARD_EXPIRY = "cardExpiry", e.CARD_CVC = "cardCvc", e))(ct || {});
71
- const lt = t.nativeEnum(ct), ut = t.union([at, lt]);
72
- var V = /* @__PURE__ */ ((e) => (e.CARD = "card", e.CARD_NUMBER = "card-number", e.CARD_EXPIRY = "card-expiry", e.CARD_CVC = "card-cvc", e))(V || {});
73
- const er = t.nativeEnum(V), de = t.object({
67
+ }, k = t.string().trim().min(1, { message: "Cannot be blank" }), C = t.string().trim().optional(), ae = (e) => t.nullable(e.optional());
68
+ var y = /* @__PURE__ */ ((e) => (e.FIRST_NAME = "firstName", e.LAST_NAME = "lastName", e.EMAIL = "email", e.ZIP_CODE = "zipCode", e.CITY = "city", e.STATE = "state", e.COUNTRY = "country", e.ADDRESS = "address", e.PHONE = "phone", e.PROMOTION_CODE = "promotionCode", e))(y || {});
69
+ const lt = t.nativeEnum(y);
70
+ var dt = /* @__PURE__ */ ((e) => (e.CARD_NUMBER = "cardNumber", e.CARD_EXPIRY = "cardExpiry", e.CARD_CVC = "cardCvc", e))(dt || {});
71
+ const mt = t.nativeEnum(dt), pt = t.union([lt, mt]);
72
+ var Y = /* @__PURE__ */ ((e) => (e.CARD = "card", e.CARD_NUMBER = "card-number", e.CARD_EXPIRY = "card-expiry", e.CARD_CVC = "card-cvc", e))(Y || {});
73
+ const nr = t.nativeEnum(Y), pe = t.object({
74
74
  provider: t.string(),
75
- processor_name: oe(t.string()),
76
- metadata: oe(t.record(t.string(), t.any()))
77
- }), tr = t.object({
75
+ processor_name: ae(t.string()),
76
+ metadata: ae(t.record(t.string(), t.any()))
77
+ }), or = t.object({
78
78
  id: t.string()
79
79
  });
80
80
  t.object({
81
- cardNumber: S,
82
- expiry: S,
83
- cvc: S
81
+ cardNumber: C,
82
+ expiry: C,
83
+ cvc: C
84
84
  });
85
85
  t.object({
86
- backgroundColor: S,
87
- color: S,
88
- fontFamily: S,
89
- fontSize: S,
90
- fontWeight: S,
91
- margin: S,
92
- padding: S,
93
- letterSpacing: S,
94
- lineHeight: S
86
+ backgroundColor: C,
87
+ color: C,
88
+ fontFamily: C,
89
+ fontSize: C,
90
+ fontWeight: C,
91
+ margin: C,
92
+ padding: C,
93
+ letterSpacing: C,
94
+ lineHeight: C
95
95
  });
96
96
  const x = t.enum([
97
97
  // Element -> Form
@@ -114,83 +114,83 @@ const x = t.enum([
114
114
  "TOKENIZE",
115
115
  "CHECKOUT",
116
116
  "START_PAYMENT_FLOW"
117
- ]), rr = x.extract(["TOKENIZE_STARTED", "CHECKOUT_STARTED"]), nr = t.object({ type: rr }), or = x.extract(["BLUR", "FOCUS", "CHANGE"]), ir = t.object({
118
- type: or,
119
- elementType: lt,
117
+ ]), ir = x.extract(["TOKENIZE_STARTED", "CHECKOUT_STARTED"]), sr = t.object({ type: ir }), ar = x.extract(["BLUR", "FOCUS", "CHANGE"]), cr = t.object({
118
+ type: ar,
119
+ elementType: mt,
120
120
  errors: t.array(t.string()).optional()
121
- }), sr = x.extract(["LOAD_ERROR", "TOKENIZE_ERROR", "CHECKOUT_ERROR"]), ar = t.object({
122
- type: sr,
123
- message: P,
121
+ }), ur = x.extract(["LOAD_ERROR", "TOKENIZE_ERROR", "CHECKOUT_ERROR"]), lr = t.object({
122
+ type: ur,
123
+ message: k,
124
124
  headers: t.record(t.string(), t.string()).optional()
125
- }), cr = x.extract(["VALIDATION_ERROR"]), lr = t.object({
126
- type: cr,
127
- elementType: ut,
125
+ }), dr = x.extract(["VALIDATION_ERROR"]), mr = t.object({
126
+ type: dr,
127
+ elementType: pt,
128
128
  errors: t.array(t.string())
129
- }), ur = t.object({
129
+ }), pr = t.object({
130
130
  type: t.literal(x.enum.LAYOUT),
131
- height: P
132
- }), dr = t.object({
131
+ height: k
132
+ }), hr = t.object({
133
133
  type: t.literal(x.enum.LOADED),
134
- sessionId: P,
134
+ sessionId: k,
135
135
  totalAmountAtoms: t.number(),
136
- currency: S,
137
- checkoutPaymentMethods: t.array(de)
138
- }), mr = t.object({
136
+ currency: C,
137
+ checkoutPaymentMethods: t.array(pe)
138
+ }), fr = t.object({
139
139
  type: t.literal(x.enum.PAYMENT_FLOW_STARTED),
140
140
  nextActionMetadata: t.record(t.string(), t.any()),
141
141
  paymentFlowMetadata: t.any().optional(),
142
142
  startPFMetadata: t.optional(t.record(t.string(), t.any()))
143
- }), pr = t.object({
143
+ }), yr = t.object({
144
144
  type: t.literal(x.enum.SETUP_PAYMENT_METHOD_SUCCESS),
145
145
  paymentMethodId: t.string()
146
- }), W = t.object({
147
- firstName: P,
148
- lastName: P,
149
- email: P,
150
- zipCode: P,
151
- country: P,
152
- promotionCode: S
153
- }), hr = t.object({
154
- email: P,
155
- zipCode: P,
156
- country: P,
157
- promotionCode: S
158
- }), fr = x.extract(["TOKENIZE", "CHECKOUT", "START_PAYMENT_FLOW"]), yr = t.object({
159
- type: fr,
160
- sessionId: P,
161
- checkoutPaymentMethod: de,
146
+ }), G = t.object({
147
+ firstName: k,
148
+ lastName: k,
149
+ email: k,
150
+ zipCode: k,
151
+ country: k,
152
+ promotionCode: C
153
+ }), _r = t.object({
154
+ email: k,
155
+ zipCode: k,
156
+ country: k,
157
+ promotionCode: C
158
+ }), br = x.extract(["TOKENIZE", "CHECKOUT", "START_PAYMENT_FLOW"]), gr = t.object({
159
+ type: br,
160
+ sessionId: k,
161
+ checkoutPaymentMethod: pe,
162
162
  paymentFlowMetadata: t.any().optional(),
163
163
  doNotUseLegacyCCFlow: t.boolean().optional(),
164
- existingCCPMId: S
165
- }).extend(W.shape), _r = t.object({
164
+ existingCCPMId: C
165
+ }).extend(G.shape), vr = t.object({
166
166
  type: t.literal(x.enum.TOKENIZE_SUCCESS),
167
167
  isReadyForCheckout: t.boolean()
168
- }), br = t.object({
168
+ }), wr = t.object({
169
169
  type: t.literal(x.enum.CHECKOUT_SUCCESS),
170
170
  invoiceUrls: t.array(t.string()),
171
171
  subscriptionIds: t.array(t.string()),
172
172
  customerId: t.string()
173
- }), gr = t.discriminatedUnion("type", [
174
- nr,
175
- ir,
176
- ar,
173
+ }), Er = t.discriminatedUnion("type", [
174
+ sr,
175
+ cr,
177
176
  lr,
178
- ur,
179
- dr,
180
- yr,
181
- _r,
182
- br,
183
177
  mr,
184
- pr
185
- ]), vr = t.object({
186
- payload: gr,
187
- nonce: P,
188
- formId: P,
189
- elementId: P
178
+ pr,
179
+ hr,
180
+ gr,
181
+ vr,
182
+ wr,
183
+ fr,
184
+ yr
185
+ ]), Cr = t.object({
186
+ payload: Er,
187
+ nonce: k,
188
+ formId: k,
189
+ elementId: k
190
190
  });
191
191
  t.object({
192
192
  amountAtom: t.number(),
193
- currency: P
193
+ currency: k
194
194
  });
195
195
  t.enum(["apple_pay", "google_pay"]);
196
196
  t.object({
@@ -199,85 +199,85 @@ t.object({
199
199
  });
200
200
  t.object({
201
201
  secure_token: t.string(),
202
- existing_cc_pm_id: oe(t.string())
202
+ existing_cc_pm_id: ae(t.string())
203
203
  });
204
- const wr = t.object({
205
- payment_methods: t.array(tr)
206
- }), Er = t.object({
204
+ const Sr = t.object({
205
+ payment_methods: t.array(or)
206
+ }), kr = t.object({
207
207
  elementType: t.string(),
208
208
  errors: t.array(t.string())
209
209
  });
210
210
  t.object({
211
211
  session_id: t.string()
212
212
  });
213
- const Cr = t.object({
213
+ const Pr = t.object({
214
214
  success: t.literal(!1),
215
215
  error_type: t.literal("validation_error"),
216
- errors: t.array(Er)
217
- }), Sr = t.discriminatedUnion("success", [
216
+ errors: t.array(kr)
217
+ }), Or = t.discriminatedUnion("success", [
218
218
  t.object({ success: t.literal(!0) }),
219
- Cr
219
+ Pr
220
220
  ]);
221
221
  t.object({
222
222
  session_id: t.string(),
223
- checkout_payment_method: de,
224
- non_cde_form_fields: W,
223
+ checkout_payment_method: pe,
224
+ non_cde_form_fields: G,
225
225
  do_not_use_legacy_cc_flow: t.boolean().optional(),
226
- existing_cc_pm_id: oe(t.string())
226
+ existing_cc_pm_id: ae(t.string())
227
227
  });
228
228
  t.object({
229
229
  session_id: t.string(),
230
- checkout_payment_method: de,
231
- non_cde_form_fields: W
230
+ checkout_payment_method: pe,
231
+ non_cde_form_fields: G
232
232
  });
233
- var ie = /* @__PURE__ */ ((e) => (e.SUCCESS = "success", e.FAILURE = "failure", e.CANCELLED = "cancelled", e))(ie || {});
234
- const kr = t.object({
233
+ var ce = /* @__PURE__ */ ((e) => (e.SUCCESS = "success", e.FAILURE = "failure", e.CANCELLED = "cancelled", e))(ce || {});
234
+ const jr = t.object({
235
235
  status: t.enum([
236
236
  "success",
237
237
  "failure",
238
238
  "cancelled"
239
239
  /* CANCELLED */
240
240
  ])
241
- }), Pr = t.object({
241
+ }), Tr = t.object({
242
242
  type: t.string(),
243
243
  redirect_url: t.string(),
244
244
  initial_intent_id: t.string(),
245
245
  consent_id: t.string()
246
- }), Or = (e) => {
246
+ }), Rr = (e) => {
247
247
  const n = {};
248
248
  return Object.entries(e).forEach(([r, o]) => {
249
249
  try {
250
- const i = at.parse(r);
250
+ const i = lt.parse(r);
251
251
  Array.isArray(o) ? n[i] = o : Array.isArray(o._errors) && (n[i] = o._errors);
252
252
  } catch {
253
253
  return;
254
254
  }
255
255
  }), n;
256
- }, jr = t.object({
256
+ }, Ir = t.object({
257
257
  stripe_pk: t.string(),
258
258
  client_secret: t.string(),
259
259
  stripe_pm_id: t.string()
260
- }), Tr = t.object({
260
+ }), Ar = t.object({
261
261
  type: t.string(),
262
262
  client_secret: t.string(),
263
263
  stripe_pk: t.string()
264
- }), Rr = {
264
+ }), xr = {
265
265
  usd: "usd",
266
266
  brl: "brl"
267
- }, me = async (e) => {
267
+ }, he = async (e) => {
268
268
  for (let n = 0; n < 10; n++)
269
- Le() || await xr(500);
270
- if (!Le())
269
+ Ne() || await Nr(500);
270
+ if (!Ne())
271
271
  throw console.log("Stripe JS not found."), new Error("Stripe JS not found.");
272
272
  return new Stripe(e);
273
- }, Ir = async (e, n) => {
274
- const r = await me(e);
273
+ }, Mr = async (e, n) => {
274
+ const r = await he(e);
275
275
  return {
276
276
  elements: r.elements(n),
277
277
  stripe: r
278
278
  };
279
- }, Ar = async (e, n, r, o, i) => {
280
- const s = await me(e), a = Rr[r.toLowerCase().trim()];
279
+ }, Lr = async (e, n, r, o, i) => {
280
+ const s = await he(e), a = xr[r.toLowerCase().trim()];
281
281
  return s.paymentRequest({
282
282
  // TODO: replace this with stripe account country as soon as we support it
283
283
  country: "US",
@@ -291,9 +291,9 @@ const kr = t.object({
291
291
  requestPayerEmail: !0,
292
292
  disableWallets: []
293
293
  });
294
- }, xr = (e) => new Promise((n) => {
294
+ }, Nr = (e) => new Promise((n) => {
295
295
  setTimeout(n, e);
296
- }), Le = () => "Stripe" in window, Mr = async (e) => new Promise((n, r) => {
296
+ }), Ne = () => "Stripe" in window, Dr = async (e) => new Promise((n, r) => {
297
297
  try {
298
298
  e.on("paymentmethod", async (o) => {
299
299
  n(o);
@@ -303,18 +303,18 @@ const kr = t.object({
303
303
  } catch (o) {
304
304
  r(o);
305
305
  }
306
- }), Lr = async (e, n) => {
306
+ }), Ur = async (e, n) => {
307
307
  if (!e.stripe_pk || !e.client_secret)
308
308
  throw new Error(`Invalid next action metadata format: ${JSON.stringify(e)}`);
309
- const r = await (await me(e.stripe_pk)).confirmCardSetup(e.client_secret, {
309
+ const r = await (await he(e.stripe_pk)).confirmCardSetup(e.client_secret, {
310
310
  payment_method: n.paymentMethod.id
311
311
  });
312
312
  if (r.error)
313
313
  throw n.complete("fail"), new Error(`Payment failed: ${r.error.message ?? "unknown"}`);
314
314
  return n.complete("success"), r;
315
- }, Dr = async (e) => {
315
+ }, Fr = async (e) => {
316
316
  var n, r, o, i;
317
- const s = await (await me(e.stripe_pk)).confirmCardSetup(e.client_secret, {
317
+ const s = await (await he(e.stripe_pk)).confirmCardSetup(e.client_secret, {
318
318
  payment_method: e.stripe_pm_id
319
319
  }), a = (n = s.setupIntent) == null ? void 0 : n.status;
320
320
  if (a === "succeeded")
@@ -322,16 +322,16 @@ const kr = t.object({
322
322
  else throw a === "canceled" ? new Error("Payment cancelled, please click Submit again to pay") : new Error(
323
323
  `${((r = s.error) == null ? void 0 : r.message) ?? ((i = (o = s.setupIntent) == null ? void 0 : o.last_setup_error) == null ? void 0 : i.message) ?? "Payment failed, please click submit again to pay."}`
324
324
  );
325
- }, Nr = (e) => JSON.stringify(e), je = (e, n) => Array.from(e.querySelectorAll("[data-opid]") ?? []).reduce((r, o) => {
325
+ }, $r = (e) => JSON.stringify(e), Te = (e, n) => Array.from(e.querySelectorAll("[data-opid]") ?? []).reduce((r, o) => {
326
326
  const i = o.getAttribute("data-opid");
327
327
  return i ? { ...r, [i]: o.value } : r;
328
- }, {}), Ur = (e) => {
328
+ }, {}), zr = (e) => {
329
329
  try {
330
- return vr.parse(e);
330
+ return Cr.parse(e);
331
331
  } catch (n) {
332
332
  throw console.error("Error parsing event payload:", e, n), n;
333
333
  }
334
- }, Fr = async (e) => {
334
+ }, qr = async (e) => {
335
335
  if (typeof e != "object" || !e) return !1;
336
336
  try {
337
337
  const n = { type: "ping" }, r = await e.send(n);
@@ -341,105 +341,105 @@ const kr = t.object({
341
341
  } catch (n) {
342
342
  return console.error("Invalid CDE connection check:", n), !1;
343
343
  }
344
- }, $r = (e, n) => !!e && n, g = (e) => t.nullable(e.optional());
344
+ }, Hr = (e, n) => !!e && n, b = (e) => t.nullable(e.optional());
345
345
  t.string().trim().min(1, { message: "Cannot be blank" });
346
- const zr = t.object({
346
+ const Vr = t.object({
347
347
  cde_response_type: t.literal("error"),
348
348
  message: t.string(),
349
349
  headers: t.record(t.string(), t.string()).optional()
350
350
  });
351
351
  t.enum(["usd", "brl"]);
352
- const dt = t.object({
352
+ const ht = t.object({
353
353
  name: t.string(),
354
- amount_atom_off: g(t.number()),
355
- percent_off: g(t.number()),
356
- currency: g(t.string()),
354
+ amount_atom_off: b(t.number()),
355
+ percent_off: b(t.number()),
356
+ currency: b(t.string()),
357
357
  duration: t.string(),
358
- duration_in_months: g(t.number())
359
- }), mt = t.object({
358
+ duration_in_months: b(t.number())
359
+ }), ft = t.object({
360
360
  amount_subtotal_atom: t.number().int(),
361
361
  amount_total_atom: t.number().int(),
362
362
  currency: t.string(),
363
- description: g(t.string()),
363
+ description: b(t.string()),
364
364
  price_id: t.string(),
365
- billing_interval: g(t.string()),
366
- billing_interval_count: g(t.number().int()),
365
+ billing_interval: b(t.string()),
366
+ billing_interval_count: b(t.number().int()),
367
367
  quantity: t.number().int()
368
- }), qr = t.record(t.string(), t.any()), Hr = t.object({
368
+ }), Yr = t.record(t.string(), t.any()), Kr = t.object({
369
369
  name: t.string(),
370
- settings: g(qr)
371
- }), G = t.object({
370
+ settings: b(Yr)
371
+ }), X = t.object({
372
372
  provider: t.string(),
373
- processor_name: g(t.string()),
374
- metadata: g(t.record(t.string(), t.any()))
375
- }), Vr = t.object({
373
+ processor_name: b(t.string()),
374
+ metadata: b(t.record(t.string(), t.any()))
375
+ }), Br = t.object({
376
376
  quantity: t.number()
377
- }), Yr = t.object({
378
- id: g(t.string()),
379
- billing_interval: g(t.string()),
380
- billing_interval_count: g(t.number().int()),
381
- subscription_items: t.array(Vr),
382
- trial_start: g(t.string()),
383
- trial_end: g(t.string())
384
- }), pt = t.object({
377
+ }), Zr = t.object({
378
+ id: b(t.string()),
379
+ billing_interval: b(t.string()),
380
+ billing_interval_count: b(t.number().int()),
381
+ subscription_items: t.array(Br),
382
+ trial_start: b(t.string()),
383
+ trial_end: b(t.string())
384
+ }), yt = t.object({
385
385
  amount_atom: t.number()
386
- }), Kr = t.object({
386
+ }), Jr = t.object({
387
387
  amount_atom: t.number(),
388
388
  amount_atom_considering_discount_applied: t.number(),
389
389
  currency: t.string(),
390
- discount_amount_atoms: t.array(pt),
390
+ discount_amount_atoms: t.array(yt),
391
391
  subscription_item_id: t.string()
392
- }), Br = t.object({
393
- coupon: dt
394
- }), Zr = t.object({
392
+ }), Wr = t.object({
393
+ coupon: ht
394
+ }), Gr = t.object({
395
395
  currency: t.string(),
396
- discounts: t.array(Br),
397
- hosted_invoice_url: g(t.string()),
398
- lines: t.array(Kr),
396
+ discounts: t.array(Wr),
397
+ hosted_invoice_url: b(t.string()),
398
+ lines: t.array(Jr),
399
399
  remaining_amount_atom: t.number(),
400
400
  tax_amount_atom: t.number(),
401
401
  total_amount_atom: t.number(),
402
- total_discount_amount_atoms: t.array(pt)
402
+ total_discount_amount_atoms: t.array(yt)
403
403
  }), De = t.object({
404
- created: t.array(Yr),
405
- invoices: t.array(Zr)
406
- }), ht = t.object({
404
+ created: t.array(Zr),
405
+ invoices: t.array(Gr)
406
+ }), _t = t.object({
407
407
  preview: De,
408
- preview_post_trial: g(De),
409
- coupons: t.array(dt)
410
- }), Ne = t.object({
408
+ preview_post_trial: b(De),
409
+ coupons: t.array(ht)
410
+ }), Ue = t.object({
411
411
  status: t.literal("open"),
412
412
  token: t.string(),
413
- email: g(t.string()),
414
- line_items: t.array(mt),
413
+ email: b(t.string()),
414
+ line_items: t.array(ft),
415
415
  amount_subtotal_atom: t.number().int(),
416
416
  amount_total_atom: t.number().int(),
417
- brand: Hr,
418
- subs_preview: g(ht),
417
+ brand: Kr,
418
+ subs_preview: b(_t),
419
419
  // Null in setup mode
420
- methods_available: t.array(G)
421
- }), ft = t.discriminatedUnion("mode", [
420
+ methods_available: t.array(X)
421
+ }), bt = t.discriminatedUnion("mode", [
422
422
  t.object({
423
423
  mode: t.literal("setup"),
424
424
  currency: t.nullable(t.undefined())
425
- }).extend(Ne.shape),
425
+ }).extend(Ue.shape),
426
426
  t.object({
427
427
  mode: t.enum(["payment", "subscription"]),
428
428
  currency: t.string()
429
- }).extend(Ne.shape)
430
- ]), Jr = t.object({
429
+ }).extend(Ue.shape)
430
+ ]), Xr = t.object({
431
431
  status: t.literal("complete")
432
- }), Wr = t.object({
432
+ }), Qr = t.object({
433
433
  status: t.literal("expired")
434
434
  });
435
- t.union([ft, Jr, Wr]);
435
+ t.union([bt, Xr, Qr]);
436
436
  t.object({
437
437
  logo: t.string(),
438
438
  icon: t.string(),
439
439
  primary_color: t.string(),
440
440
  secondary_color: t.string()
441
441
  });
442
- const yt = t.object({
442
+ const gt = t.object({
443
443
  invoice_urls: t.array(t.string()),
444
444
  subscription_ids: t.array(t.string()),
445
445
  customer_id: t.string()
@@ -451,63 +451,63 @@ t.object({
451
451
  customer_email: t.string(),
452
452
  customer_zip_code: t.string(),
453
453
  customer_country: t.string(),
454
- line_items: t.array(mt),
454
+ line_items: t.array(ft),
455
455
  total_amount_atom: t.number().int(),
456
456
  cancel_at_end: t.boolean(),
457
- checkout_payment_method: G,
457
+ checkout_payment_method: X,
458
458
  promotion_code: t.string().optional(),
459
459
  do_not_use_legacy_cc_flow: t.boolean().optional()
460
460
  });
461
- const Gr = t.object({
461
+ const en = t.object({
462
462
  payment_method_id: t.string()
463
463
  });
464
464
  t.object({
465
465
  id: t.string(),
466
466
  return_url: t.string()
467
467
  });
468
- const Xr = t.object({
468
+ const tn = t.object({
469
469
  type: t.string(),
470
470
  loc: t.array(t.string()),
471
471
  msg: t.string(),
472
472
  url: t.string()
473
473
  });
474
- t.array(Xr);
474
+ t.array(tn);
475
475
  t.object({
476
476
  new_customer_email: t.string().optional(),
477
477
  new_customer_address: t.record(t.string(), t.any()).optional(),
478
478
  payment_provider: t.string(),
479
- checkout_payment_method: G,
479
+ checkout_payment_method: X,
480
480
  existing_cc_pm_id: t.string().optional(),
481
481
  their_existing_pm_id: t.string().optional()
482
482
  });
483
- const _t = t.object({
483
+ const vt = t.object({
484
484
  required_user_actions: t.array(t.record(t.string(), t.any()))
485
485
  });
486
486
  t.object({
487
- fields: hr,
488
- checkoutPaymentMethod: G
487
+ fields: _r,
488
+ checkoutPaymentMethod: X
489
489
  });
490
490
  t.object({
491
491
  session_id: t.string(),
492
- non_cde_form_fields: W,
493
- checkout_payment_method: G
492
+ non_cde_form_fields: G,
493
+ checkout_payment_method: X
494
494
  });
495
- const Qr = t.object({
495
+ const rn = t.object({
496
496
  required_user_actions: t.array(t.record(t.string(), t.any())),
497
497
  cc_pm_id: t.string()
498
498
  });
499
499
  t.record(t.any());
500
- const en = (e) => e.reduce((n, r) => n + r, 0);
501
- function tn(e, n) {
500
+ const nn = (e) => e.reduce((n, r) => n + r, 0);
501
+ function on(e, n) {
502
502
  var r = Object.setPrototypeOf;
503
503
  r ? r(e, n) : e.__proto__ = n;
504
504
  }
505
- function rn(e, n) {
505
+ function sn(e, n) {
506
506
  n === void 0 && (n = e.constructor);
507
507
  var r = Error.captureStackTrace;
508
508
  r && r(e, n);
509
509
  }
510
- var nn = /* @__PURE__ */ function() {
510
+ var an = /* @__PURE__ */ function() {
511
511
  var e = function(n, r) {
512
512
  return e = Object.setPrototypeOf || {
513
513
  __proto__: []
@@ -526,19 +526,19 @@ var nn = /* @__PURE__ */ function() {
526
526
  }
527
527
  n.prototype = r === null ? Object.create(r) : (o.prototype = r.prototype, new o());
528
528
  };
529
- }(), on = function(e) {
530
- nn(n, e);
529
+ }(), cn = function(e) {
530
+ an(n, e);
531
531
  function n(r, o) {
532
532
  var i = this.constructor, s = e.call(this, r, o) || this;
533
533
  return Object.defineProperty(s, "name", {
534
534
  value: i.name,
535
535
  enumerable: !1,
536
536
  configurable: !0
537
- }), tn(s, i.prototype), rn(s), s;
537
+ }), on(s, i.prototype), sn(s), s;
538
538
  }
539
539
  return n;
540
540
  }(Error);
541
- class bt extends on {
541
+ class wt extends cn {
542
542
  constructor(n) {
543
543
  const r = `${n.message}`;
544
544
  super(r), this.response = n;
@@ -549,92 +549,91 @@ class bt extends on {
549
549
  }
550
550
  const M = async (e, n, r) => {
551
551
  const o = await e.send(n);
552
- if (an(o))
553
- throw new bt(o);
554
- if (!sn(o, r)) {
552
+ if (ln(o))
553
+ throw new wt(o);
554
+ if (!un(o, r)) {
555
555
  const i = r.safeParse(o);
556
556
  throw i.success ? new Error("Invalid state") : (console.error("OJS queryApi got a schema error. Expected schema:", r, "Actual:", o), i.error);
557
557
  }
558
558
  return o;
559
- }, sn = (e, n) => n.safeParse(e).success, an = (e) => zr.safeParse(e).success, cn = async (e, n) => await M(e, { type: "get_checkout_preview", payload: n }, ht), X = async (e) => await M(e, { type: "get_prefill", payload: {} }, ft), ln = async (e, n) => await M(e, { type: "v2_start_payment_flow", payload: n }, _t), un = async (e, n) => await M(e, { type: "start_payment_flow_for_cc", payload: n }, Qr), dn = async (e, n) => await M(e, { type: "start_payment_flow_for_pr", payload: n }, _t), Te = async (e, n) => await M(e, { type: "confirm_payment_flow", payload: n }, wr), mn = async (e, n, r) => {
560
- const o = await cn(e, {
559
+ }, un = (e, n) => n.safeParse(e).success, ln = (e) => Vr.safeParse(e).success, dn = async (e, n) => await M(e, { type: "get_checkout_preview", payload: n }, _t), Q = async (e) => await M(e, { type: "get_prefill", payload: {} }, bt), mn = async (e, n) => await M(e, { type: "v2_start_payment_flow", payload: n }, vt), pn = async (e, n) => await M(e, { type: "start_payment_flow_for_cc", payload: n }, rn), hn = async (e, n) => await M(e, { type: "start_payment_flow_for_pr", payload: n }, vt), Re = async (e, n) => await M(e, { type: "confirm_payment_flow", payload: n }, Sr), fn = async (e, n, r) => {
560
+ const o = await dn(e, {
561
561
  secure_token: n,
562
562
  promotion_code: r
563
563
  }), i = new Set(o.preview.invoices.map((c) => c.currency));
564
564
  if (i.size !== 1)
565
565
  throw new Error(`Expected exactly one currency, got ${i.size}`);
566
- const s = i.values().next().value ?? "usd", a = en(o.preview.invoices.map((c) => c.remaining_amount_atom));
566
+ const s = i.values().next().value ?? "usd", a = nn(o.preview.invoices.map((c) => c.remaining_amount_atom));
567
567
  return {
568
568
  currency: s,
569
569
  amountAtom: a
570
570
  };
571
- }, gt = async (e, n, r, o) => {
571
+ }, Et = async (e, n, r, o) => {
572
572
  if (r)
573
573
  return { amountAtom: 0, currency: "usd" };
574
574
  {
575
575
  o = o || void 0;
576
- const i = await mn(e, n, o);
576
+ const i = await fn(e, n, o);
577
577
  return { amountAtom: i.amountAtom, currency: i.currency };
578
578
  }
579
- }, pn = async (e, n) => {
579
+ }, yn = async (e, n) => {
580
580
  if (e.size === 0)
581
581
  throw new Error("No CDE connections found");
582
582
  return await Promise.all(
583
583
  Array.from(e.values()).map(
584
- (r) => M(r, { type: "tokenize_card", payload: n }, Sr)
584
+ (r) => M(r, { type: "tokenize_card", payload: n }, Or)
585
585
  )
586
586
  );
587
- }, Ue = async (e, n) => {
587
+ }, Fe = async (e, n) => {
588
588
  try {
589
- return await M(e, { type: "checkout_card_elements", payload: n }, yt);
589
+ return await M(e, { type: "checkout_card_elements", payload: n }, gt);
590
590
  } catch (r) {
591
591
  throw console.error("[cde-client] Error during checkoutCardElements:", r, JSON.stringify(r)), r;
592
592
  }
593
- }, hn = async (e, n) => await M(e, { type: "setup_payment_method", payload: n }, Gr), vt = async (e, n) => await M(e, { type: "checkout", payload: n }, yt), wt = 1e3, fn = async (e, n) => {
593
+ }, _n = async (e, n) => await M(e, { type: "setup_payment_method", payload: n }, en), Ct = async (e, n) => await M(e, { type: "checkout", payload: n }, gt), St = 1e3, bn = async (e, n) => {
594
594
  console.log(n);
595
- const r = await it({
595
+ const r = await ct({
596
596
  iframe: e,
597
597
  debug: !0,
598
- timeout: wt,
598
+ timeout: St,
599
599
  childOrigin: "*"
600
600
  // TODO: use with proper childOrigin
601
601
  }).promise;
602
- return (await M(r, { type: "ping-3ds-status" }, kr)).status;
602
+ return (await M(r, { type: "ping-3ds-status" }, jr)).status;
603
603
  };
604
- function yn(e) {
604
+ function gn(e) {
605
605
  throw new Error(`Unhandled case: ${e}`);
606
606
  }
607
- const Re = (e) => async (n) => {
608
- var r, o, i, s, a, c, l, u;
607
+ const Ie = (e) => async (n) => {
608
+ var r, o;
609
609
  try {
610
610
  (o = (r = n.formCallbacks.get).onCheckoutStarted) == null || o.call(r);
611
- const d = await e(n);
612
- if (d.mode === "setup")
613
- (s = (i = n.formCallbacks.get).onSetupPaymentMethodSuccess) == null || s.call(i, d.result.payment_method_id);
614
- else if (d.mode === "checkout")
615
- (c = (a = n.formCallbacks.get).onCheckoutSuccess) == null || c.call(
616
- a,
617
- d.result.invoice_urls,
618
- d.result.subscription_ids,
619
- d.result.customer_id
611
+ const i = await e(n);
612
+ if (i.mode === "setup")
613
+ n.formCallbacks.get.onSetupPaymentMethodSuccess(i.result.payment_method_id);
614
+ else if (i.mode === "checkout")
615
+ n.formCallbacks.get.onCheckoutSuccess(
616
+ i.result.invoice_urls,
617
+ i.result.subscription_ids,
618
+ i.result.customer_id
620
619
  );
621
620
  else
622
- throw new Error(`Unhandled mode: ${d}`);
623
- } catch (d) {
624
- throw (u = (l = n.formCallbacks.get).onCheckoutError) == null || u.call(l, J(d)), d;
621
+ throw new Error(`Unhandled mode: ${i}`);
622
+ } catch (i) {
623
+ n.formCallbacks.get.onCheckoutError(W(i));
625
624
  }
626
- }, Et = (e) => async (n) => {
625
+ }, kt = (e) => async (n) => {
627
626
  try {
628
627
  return await e(n);
629
628
  } catch (r) {
630
629
  const { err__: o } = D("init-error-catcher");
631
- return o(r), { isAvailable: !1, reason: J(r) };
630
+ return o(r), { isAvailable: !1, reason: W(r) };
632
631
  }
633
632
  }, D = (e) => {
634
633
  const n = (...o) => {
635
- window.console.log(`${F.green.bold("ojs/")}${F.bold.gray(`${e}`)} `, ...o);
634
+ window.console.log(`${$.green.bold("ojs/")}${$.bold.gray(`${e}`)} `, ...o);
636
635
  }, r = (...o) => {
637
- window.console.error(`${F.red.bold("ojs/")}${F.bold.gray(`${e}`)} `, ...o);
636
+ window.console.error(`${$.red.bold("ojs/")}${$.bold.gray(`${e}`)} `, ...o);
638
637
  };
639
638
  return {
640
639
  log: n,
@@ -642,62 +641,62 @@ const Re = (e) => async (n) => {
642
641
  log__: n,
643
642
  err__: r
644
643
  };
645
- }, { log__: Ji, err__: _n } = D("common"), Ie = (e) => {
644
+ }, { log__: Wi, err__: vn } = D("common"), Ae = (e) => {
646
645
  if (e.payment_methods.length !== 1)
647
646
  throw new Error(`Expected exactly one payment method, got ${e.payment_methods.length}`);
648
647
  return { payment_method_id: e.payment_methods[0].id };
649
- }, Ct = (e, n) => {
648
+ }, Pt = (e, n) => {
650
649
  const r = e.find((o) => n.safeParse(o).success);
651
650
  if (!r)
652
- throw _n("No CPMs found for model. All models:", e), new Error("No CPMs found for model");
651
+ throw vn("No CPMs found for model. All models:", e), new Error("No CPMs found for model");
653
652
  return n.parse(r);
654
- }, { log__: bn, err__: St } = D("common-cc"), Ae = (e, n) => {
655
- const r = W.safeParse(e);
653
+ }, { log__: wn, err__: Ot } = D("common-cc"), xe = (e, n) => {
654
+ const r = G.safeParse(e);
656
655
  if (!r.success) {
657
- const o = r.error.format(), i = Or(o);
656
+ const o = r.error.format(), i = Rr(o);
658
657
  for (const [s, a] of Object.entries(i))
659
658
  n(s, a, s);
660
- throw St("Got validation errors in non-CDE form fields", i), new Error("Got validation errors in non-CDE form fields");
659
+ throw Ot("Got validation errors in non-CDE form fields", i), new Error("Got validation errors in non-CDE form fields");
661
660
  }
662
661
  return r.data;
663
- }, gn = (e, n) => {
662
+ }, En = (e, n) => {
664
663
  for (const r of e)
665
664
  if (r.success === !1)
666
665
  throw r.errors.forEach((o) => {
667
- const i = ut.safeParse(o.elementType);
666
+ const i = pt.safeParse(o.elementType);
668
667
  if (!i.success)
669
- St(`Unknown field name in onValidationError: ${o.elementType}. Error object:`, o);
668
+ Ot(`Unknown field name in onValidationError: ${o.elementType}. Error object:`, o);
670
669
  else {
671
670
  const s = i.data;
672
671
  n(s, o.errors);
673
672
  }
674
- }), bn(`Error tokenizing card: got validation errors: ${JSON.stringify(r.errors)}`), new Error("Got validation errors while tokenizing card");
675
- }, Fe = "ojs-stripe-link-btn", { log__: E, err__: vn } = D("stripe-link"), wn = t.object({
673
+ }), wn(`Error tokenizing card: got validation errors: ${JSON.stringify(r.errors)}`), new Error("Got validation errors while tokenizing card");
674
+ }, $e = "ojs-stripe-link-btn", { log__: w, err__: Cn } = D("stripe-link"), Sn = t.object({
676
675
  provider: t.literal("stripe_link"),
677
676
  processor_name: t.literal("stripe"),
678
677
  metadata: t.object({
679
678
  stripe_pk: t.string()
680
679
  })
681
- }), En = t.array(
680
+ }), kn = t.array(
682
681
  t.object({
683
682
  our_existing_pm_id: t.string()
684
683
  })
685
- ).length(1), Cn = Et(
684
+ ).length(1), Pn = kt(
686
685
  async ({ context: e, formCallbacks: n }) => {
687
686
  const r = e.customInitParams.stripeLink;
688
- E("Checking if there are any CPMs for Stripe PR...");
689
- const o = Ct(e.checkoutPaymentMethods, wn);
690
- E("Starting stripe link flow...");
691
- const i = e.anyCdeConnection, s = await X(i), a = s.mode === "setup";
692
- E("Creating stripe elements...");
693
- const c = await gt(i, s.token, a, void 0), { elements: l, stripe: u } = await Ir(o.metadata.stripe_pk, {
687
+ w("Checking if there are any CPMs for Stripe PR...");
688
+ const o = Pt(e.checkoutPaymentMethods, Sn);
689
+ w("Starting stripe link flow...");
690
+ const i = e.anyCdeConnection, s = await Q(i), a = s.mode === "setup";
691
+ w("Creating stripe elements...");
692
+ const c = await Et(i, s.token, a, void 0), { elements: u, stripe: l } = await Mr(o.metadata.stripe_pk, {
694
693
  mode: "setup",
695
694
  currency: c.currency,
696
695
  setup_future_usage: "off_session",
697
696
  paymentMethodCreation: "manual"
698
697
  });
699
- E("Creating express checkout...");
700
- const d = l.create("expressCheckout", {
698
+ w("Creating express checkout...");
699
+ const m = u.create("expressCheckout", {
701
700
  buttonHeight: r == null ? void 0 : r.buttonHeight,
702
701
  paymentMethods: {
703
702
  amazonPay: "never",
@@ -705,44 +704,43 @@ const Re = (e) => async (n) => {
705
704
  googlePay: "never",
706
705
  paypal: "never"
707
706
  }
708
- }), p = () => {
709
- d.mount(`#${Fe}`);
710
- }, y = () => {
711
- d.unmount();
707
+ }), h = () => {
708
+ m.mount(`#${$e}`);
709
+ }, _ = () => {
710
+ m.unmount();
712
711
  };
713
- return r != null && r.doNotMountOnInit ? E("NOT mounting stripe link button (doNotMountOnInit is true)") : (E("Mounting stripe link button..."), p()), d.on("click", async (m) => {
714
- if (E("Stripe Link button clicked"), r != null && r.overrideLinkSubmit && !await r.overrideLinkSubmit()) {
715
- E("Stripe Link submit aborted by overrideLinkSubmit");
712
+ return r != null && r.doNotMountOnInit ? w("NOT mounting stripe link button (doNotMountOnInit is true)") : (w("Mounting stripe link button..."), h()), m.on("click", async (d) => {
713
+ if (w("Stripe Link button clicked"), r != null && r.overrideLinkSubmit && !await r.overrideLinkSubmit()) {
714
+ w("Stripe Link submit aborted by overrideLinkSubmit");
716
715
  return;
717
716
  }
718
- m.resolve();
719
- }), d.on("confirm", async (m) => {
720
- var h, f;
721
- E("Stripe Link window confirmed", m);
722
- const b = await u.createPaymentMethod({
723
- elements: l,
717
+ d.resolve();
718
+ }), m.on("confirm", async (d) => {
719
+ w("Stripe Link window confirmed", d);
720
+ const p = await l.createPaymentMethod({
721
+ elements: u,
724
722
  params: {
725
- billing_details: m.billingDetails
723
+ billing_details: d.billingDetails
726
724
  }
727
725
  });
728
- b.error ? (vn("error", b.error), (f = (h = n.get).onCheckoutError) == null || f.call(h, b.error.message ?? "Stripe Link unknown error")) : (E("paymentMethod", b.paymentMethod), K.stripeLink.run({
726
+ p.error ? (Cn("error", p.error), n.get.onCheckoutError(p.error.message ?? "Stripe Link unknown error")) : (w("paymentMethod", p.paymentMethod), B.stripeLink.run({
729
727
  context: e,
730
728
  checkoutPaymentMethod: o,
731
- nonCdeFormInputs: je(e.formDiv),
729
+ nonCdeFormInputs: Te(e.formDiv),
732
730
  formCallbacks: n,
733
- customParams: { stripePM: b.paymentMethod },
731
+ customParams: { stripePM: p.paymentMethod },
734
732
  initResult: { isAvailable: !0 }
735
733
  }));
736
734
  }), {
737
735
  isAvailable: !0,
738
736
  controller: {
739
- mountButton: p,
740
- dismountButton: y,
741
- waitForButtonToMount: async () => await Pn(Fe)
737
+ mountButton: h,
738
+ dismountButton: _,
739
+ waitForButtonToMount: async () => await Tn($e)
742
740
  }
743
741
  };
744
742
  }
745
- ), Sn = Re(
743
+ ), On = Ie(
746
744
  async ({
747
745
  context: e,
748
746
  checkoutPaymentMethod: n,
@@ -750,64 +748,60 @@ const Re = (e) => async (n) => {
750
748
  formCallbacks: o,
751
749
  customParams: i
752
750
  }) => {
753
- E("Running Stripe PR flow...");
751
+ w("Running Stripe PR flow...");
754
752
  const s = e.anyCdeConnection;
755
- E("Merging PM fields with form fields...");
756
- const a = kn(r, i.stripePM), c = Ae(
757
- a,
758
- o.get.onValidationError ?? (() => {
759
- })
760
- );
761
- E("Starting payment flow...");
762
- const l = await ln(s, {
753
+ w("Merging PM fields with form fields...");
754
+ const a = jn(r, i.stripePM), c = xe(a, o.get.onValidationError);
755
+ w("Starting payment flow...");
756
+ const u = await mn(s, {
763
757
  payment_provider: n.provider,
764
758
  checkout_payment_method: n,
765
759
  their_existing_pm_id: i.stripePM.id
766
760
  });
767
- E("Start payment flow response", l);
768
- const u = En.parse(l.required_user_actions)[0].our_existing_pm_id, d = await X(s);
769
- if (d.mode === "setup") {
770
- E("Doing payment setup...");
771
- const p = await Te(s, {
772
- secure_token: d.token,
773
- existing_cc_pm_id: u
761
+ w("Start payment flow response", u);
762
+ const l = kn.parse(u.required_user_actions)[0].our_existing_pm_id, m = await Q(s);
763
+ if (m.mode === "setup") {
764
+ w("Doing payment setup...");
765
+ const h = await Re(s, {
766
+ secure_token: m.token,
767
+ existing_cc_pm_id: l
774
768
  });
775
- return { mode: "setup", result: Ie(p) };
769
+ return { mode: "setup", result: Ae(h) };
776
770
  } else {
777
- E("Doing checkout...");
778
- const p = {
779
- secure_token: d.token,
771
+ w("Doing checkout...");
772
+ const h = {
773
+ secure_token: m.token,
780
774
  payment_input: {
781
775
  provider_type: n.provider
782
776
  },
783
- customer_email: c[_.EMAIL],
784
- customer_zip_code: c[_.ZIP_CODE],
785
- customer_country: c[_.COUNTRY],
786
- promotion_code: c[_.PROMOTION_CODE],
787
- line_items: d.line_items,
788
- total_amount_atom: d.amount_total_atom,
777
+ customer_email: c[y.EMAIL],
778
+ customer_zip_code: c[y.ZIP_CODE],
779
+ customer_country: c[y.COUNTRY],
780
+ promotion_code: c[y.PROMOTION_CODE],
781
+ line_items: m.line_items,
782
+ total_amount_atom: m.amount_total_atom,
789
783
  cancel_at_end: !1,
790
784
  checkout_payment_method: n
791
785
  };
792
- return { mode: "checkout", result: await vt(s, p) };
786
+ return { mode: "checkout", result: await Ct(s, h) };
793
787
  }
794
788
  }
795
- ), kn = (e, n) => {
789
+ ), jn = (e, n) => {
796
790
  var r, o, i, s, a;
797
- const c = { ...e }, [l, ...u] = ((o = (r = n.billing_details.name) == null ? void 0 : r.trim()) == null ? void 0 : o.split(/\s+/)) ?? [], d = u.join(" ") || void 0;
798
- return c[_.FIRST_NAME] = c[_.FIRST_NAME] || l || "_OP_UNKNOWN", c[_.LAST_NAME] = c[_.LAST_NAME] || d || "_OP_UNKNOWN", c[_.EMAIL] = c[_.EMAIL] || // eslint-disable-next-line @typescript-eslint/no-explicit-any
799
- ((i = n.link) == null ? void 0 : i.email) || n.billing_details.email || "op_unfilled@getopenpay.com", c[_.ZIP_CODE] = c[_.ZIP_CODE] || ((s = n.billing_details.address) == null ? void 0 : s.postal_code) || "00000", c[_.COUNTRY] = c[_.COUNTRY] || ((a = n.billing_details.address) == null ? void 0 : a.country) || "US", E("Final form inputs:", c), c;
800
- }, Pn = (e) => new Promise((n) => {
791
+ const c = { ...e }, [u, ...l] = ((o = (r = n.billing_details.name) == null ? void 0 : r.trim()) == null ? void 0 : o.split(/\s+/)) ?? [], m = l.join(" ") || void 0;
792
+ return c[y.FIRST_NAME] = c[y.FIRST_NAME] || u || "_OP_UNKNOWN", c[y.LAST_NAME] = c[y.LAST_NAME] || m || "_OP_UNKNOWN", c[y.EMAIL] = c[y.EMAIL] || // eslint-disable-next-line @typescript-eslint/no-explicit-any
793
+ ((i = n.link) == null ? void 0 : i.email) || n.billing_details.email || "op_unfilled@getopenpay.com", c[y.ZIP_CODE] = c[y.ZIP_CODE] || ((s = n.billing_details.address) == null ? void 0 : s.postal_code) || "00000", c[y.COUNTRY] = c[y.COUNTRY] || ((a = n.billing_details.address) == null ? void 0 : a.country) || "US", w("Final form inputs:", c), c;
794
+ }, Tn = (e) => new Promise((n) => {
801
795
  const r = () => {
802
796
  const o = document.getElementById(e);
803
797
  o ? n(o) : requestAnimationFrame(r);
804
798
  };
805
799
  r();
806
- }), On = "@keyframes fadeIn{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}.overlay{position:fixed;top:0;left:0;width:100%;height:100%;z-index:2147483648!important;display:flex;justify-content:center;align-items:center;background-color:#00000080}.container{max-width:500px;max-height:600px;width:100%;height:100%;background-color:#fff;position:relative;animation:fadeIn .3s ease-out}.frame{max-width:500px;max-height:600px;width:100%;height:100%;border:none}.cancel-button{position:absolute;background:transparent;border:none;font-size:1rem;color:#fff;cursor:pointer;top:-1.5rem;padding:0;right:0}", jn = (e) => {
800
+ }), Rn = "@keyframes fadeIn{0%{opacity:0;transform:scale(.9)}to{opacity:1;transform:scale(1)}}.overlay{position:fixed;top:0;left:0;width:100%;height:100%;z-index:2147483648!important;display:flex;justify-content:center;align-items:center;background-color:#00000080}.container{max-width:500px;max-height:600px;width:100%;height:100%;background-color:#fff;position:relative;animation:fadeIn .3s ease-out}.frame{max-width:500px;max-height:600px;width:100%;height:100%;border:none}.cancel-button{position:absolute;background:transparent;border:none;font-size:1rem;color:#fff;cursor:pointer;top:-1.5rem;padding:0;right:0}", In = (e) => {
807
801
  const n = document.createElement("template");
808
802
  n.innerHTML = `
809
803
  <style>
810
- ${On}
804
+ ${Rn}
811
805
  </style>
812
806
  <div class="overlay">
813
807
  <div class="container">
@@ -821,48 +815,48 @@ const Re = (e) => async (n) => {
821
815
  const i = o.querySelector("#three-ds-iframe"), s = o.querySelector(".cancel-button");
822
816
  return document.body.appendChild(r), { host: r, iframe: i, cancelButton: s };
823
817
  };
824
- function Tn(e, n, r) {
818
+ function An(e, n, r) {
825
819
  const o = async () => {
826
820
  try {
827
- const s = await fn(e, r);
821
+ const s = await bn(e, r);
828
822
  s && (clearInterval(i), n(s));
829
823
  } catch {
830
824
  }
831
825
  };
832
826
  o();
833
- const i = setInterval(o, wt);
827
+ const i = setInterval(o, St);
834
828
  return i;
835
829
  }
836
- function Rn({
830
+ function xn({
837
831
  elements: e,
838
832
  pollingInterval: n,
839
833
  resolve: r
840
834
  }) {
841
835
  const o = () => {
842
- clearInterval(n), e.host.remove(), r(ie.CANCELLED);
836
+ clearInterval(n), e.host.remove(), r(ce.CANCELLED);
843
837
  };
844
838
  return e.cancelButton.addEventListener("click", o), () => {
845
839
  e.cancelButton.removeEventListener("click", o);
846
840
  };
847
841
  }
848
- async function In({
842
+ async function Mn({
849
843
  url: e,
850
844
  baseUrl: n
851
845
  }) {
852
- const r = jn(e);
846
+ const r = In(e);
853
847
  return new Promise((o) => {
854
848
  const i = (c) => {
855
849
  setTimeout(() => {
856
850
  r.host.remove();
857
851
  }, 1e3), o(c), a == null || a();
858
- }, s = Tn(r.iframe, i, new URL(n).origin), a = Rn({
852
+ }, s = An(r.iframe, i, new URL(n).origin), a = xn({
859
853
  elements: r,
860
854
  pollingInterval: s,
861
855
  resolve: o
862
856
  });
863
857
  });
864
858
  }
865
- const { log__: w, err__: $e } = D("common-cc"), { log__: ze } = D("stripe-cc"), An = Re(
859
+ const { log__: v, err__: ze } = D("common-cc"), { log__: qe } = D("stripe-cc"), Ln = Ie(
866
860
  async ({
867
861
  context: e,
868
862
  checkoutPaymentMethod: n,
@@ -871,104 +865,99 @@ const { log__: w, err__: $e } = D("common-cc"), { log__: ze } = D("stripe-cc"),
871
865
  customParams: i
872
866
  }) => {
873
867
  var s;
874
- w("├ Running common CC flow...", { checkoutPaymentMethod: n });
875
- const a = e.anyCdeConnection, c = await X(a);
876
- w(`├ Validating non-CDE form fields [Mode: ${c.mode}]`);
877
- const l = Ae(
878
- r,
879
- o.get.onValidationError ?? (() => {
880
- })
881
- );
882
- w(`├ Tokenizing card info in CDE [Session: ${e.elementsSessionId}]`);
883
- const u = await pn(i.currentCdeConnections, {
868
+ v("├ Running common CC flow...", { checkoutPaymentMethod: n });
869
+ const a = e.anyCdeConnection, c = await Q(a);
870
+ v(`├ Validating non-CDE form fields [Mode: ${c.mode}]`);
871
+ const u = xe(r, o.get.onValidationError);
872
+ v(`├ Tokenizing card info in CDE [Session: ${e.elementsSessionId}]`);
873
+ const l = await yn(i.currentCdeConnections, {
884
874
  session_id: e.elementsSessionId
885
875
  });
886
- gn(u, o.get.onValidationError ?? (() => {
887
- }));
888
- const d = {
876
+ En(l, o.get.onValidationError);
877
+ const m = {
889
878
  session_id: e.elementsSessionId,
890
879
  checkout_payment_method: n,
891
- non_cde_form_fields: l
880
+ non_cde_form_fields: u
892
881
  };
893
882
  try {
894
883
  if (c.mode === "setup") {
895
- w(`├ Setting up payment method in CDE [Token: ${c.token}]`);
896
- const p = await hn(a, d);
897
- return w(`╰ Setup completed successfully [PM ID: ${p.payment_method_id}]`), { mode: "setup", result: p };
884
+ v(`├ Setting up payment method in CDE [Token: ${c.token}]`);
885
+ const h = await _n(a, m);
886
+ return v(`╰ Setup completed successfully [PM ID: ${h.payment_method_id}]`), { mode: "setup", result: h };
898
887
  } else {
899
- w(`├ Initial checkout flow. Checking out card info in CDE [Session: ${e.elementsSessionId}]`);
900
- const p = await Ue(a, d);
901
- return w("╰ Checkout completed successfully."), { mode: "checkout", result: p };
888
+ v(`├ Initial checkout flow. Checking out card info in CDE [Session: ${e.elementsSessionId}]`);
889
+ const h = await Fe(a, m);
890
+ return v("╰ Checkout completed successfully."), { mode: "checkout", result: h };
902
891
  }
903
- } catch (p) {
904
- if (p instanceof bt && p.originalErrorMessage === "3DS_REQUIRED") {
905
- w("├ Card requires 3DS, starting non-legacy payment flow"), w("error.response.headers", p.response.headers);
906
- const y = ((s = p.response.headers) == null ? void 0 : s["op-should-use-new-flow"]) === "true", m = await un(a, d);
907
- if (w(`├ op-should-use-new-flow: ${y}`), w("├ Payment flow result:", m), y ? await Ln(m, e.baseUrl) : await Dn(m), c.mode === "setup") {
908
- w(`├ Confirming payment flow [cc_pm_id: ${m.cc_pm_id}]`);
909
- const h = await Te(a, {
892
+ } catch (h) {
893
+ if (h instanceof wt && h.originalErrorMessage === "3DS_REQUIRED") {
894
+ v("├ Card requires 3DS, starting non-legacy payment flow"), v("error.response.headers", h.response.headers);
895
+ const _ = ((s = h.response.headers) == null ? void 0 : s["op-should-use-new-flow"]) === "true", d = await pn(a, m);
896
+ if (v(`├ op-should-use-new-flow: ${_}`), v("├ Payment flow result:", d), _ ? await Un(d, e.baseUrl) : await Fn(d), c.mode === "setup") {
897
+ v(`├ Confirming payment flow [cc_pm_id: ${d.cc_pm_id}]`);
898
+ const p = await Re(a, {
910
899
  secure_token: c.token,
911
- existing_cc_pm_id: m.cc_pm_id
900
+ existing_cc_pm_id: d.cc_pm_id
912
901
  });
913
- w("├ Confirm payment flow result received Result:", h);
914
- const f = Ie(h);
915
- return w(`╰ Setup completed successfully [PM ID: ${f.payment_method_id}]`), { mode: "setup", result: f };
902
+ v("├ Confirm payment flow result received Result:", p);
903
+ const f = Ae(p);
904
+ return v(`╰ Setup completed successfully [PM ID: ${f.payment_method_id}]`), { mode: "setup", result: f };
916
905
  } else {
917
- w(`├ Checking out after 3DS flow [Flow: ${y ? "new" : "legacy"}]`);
918
- const h = await Ue(a, {
919
- ...d,
920
- existing_cc_pm_id: m.cc_pm_id,
921
- do_not_use_legacy_cc_flow: !y
906
+ v(`├ Checking out after 3DS flow [Flow: ${_ ? "new" : "legacy"}]`);
907
+ const p = await Fe(a, {
908
+ ...m,
909
+ existing_cc_pm_id: d.cc_pm_id,
910
+ do_not_use_legacy_cc_flow: !_
922
911
  });
923
- return w("╰ Checkout completed successfully."), { mode: "checkout", result: h };
912
+ return v("╰ Checkout completed successfully."), { mode: "checkout", result: p };
924
913
  }
925
914
  }
926
- throw $e("╰ Error checking out card info in CDE"), $e(p), p;
915
+ throw ze("╰ Error checking out card info in CDE"), ze(h), h;
927
916
  }
928
917
  }
929
- ), xn = (e) => {
918
+ ), Nn = (e) => {
930
919
  const n = e.required_user_actions.find((r) => r.type === "stripe_3ds");
931
920
  if (!n)
932
921
  throw new Error("No stripe 3DS action found");
933
- return jr.parse(n);
934
- }, Mn = (e) => {
922
+ return Ir.parse(n);
923
+ }, Dn = (e) => {
935
924
  const n = e.required_user_actions.find((r) => r.type === "airwallex_payment_consent");
936
925
  if (!n)
937
926
  throw new Error("No common 3DS action found");
938
- return Pr.parse(n);
939
- }, Ln = async (e, n) => {
940
- const r = Mn(e);
941
- w(`├ Using common 3DS flow [URL: ${r.redirect_url}]`);
942
- const o = await In({ url: r.redirect_url, baseUrl: n });
943
- if (w(`╰ 3DS verification completed [Status: ${o}]`), o === ie.CANCELLED)
927
+ return Tr.parse(n);
928
+ }, Un = async (e, n) => {
929
+ const r = Dn(e);
930
+ v(`├ Using common 3DS flow [URL: ${r.redirect_url}]`);
931
+ const o = await Mn({ url: r.redirect_url, baseUrl: n });
932
+ if (v(`╰ 3DS verification completed [Status: ${o}]`), o === ce.CANCELLED)
944
933
  throw new Error("3DS verification cancelled");
945
- if (o === ie.FAILURE)
934
+ if (o === ce.FAILURE)
946
935
  throw new Error("3DS verification failed");
947
- }, Dn = async (e) => {
948
- const n = xn(e);
949
- ze(`├ Using stripe 3DS flow [Client Secret: ${n.client_secret.substring(0, 8)}...]`), await Dr(n), ze("╰ Stripe 3DS flow completed successfully");
950
- }, { log__: j, err__: Nn } = D("stripe-pr"), Un = t.object({
936
+ }, Fn = async (e) => {
937
+ const n = Nn(e);
938
+ qe(`├ Using stripe 3DS flow [Client Secret: ${n.client_secret.substring(0, 8)}...]`), await Fr(n), qe("╰ Stripe 3DS flow completed successfully");
939
+ }, { log__: O, err__: $n } = D("stripe-pr"), zn = t.object({
951
940
  provider: t.union([t.literal("apple_pay"), t.literal("google_pay")]),
952
941
  processor_name: t.literal("stripe"),
953
942
  metadata: t.object({
954
943
  stripe_pk: t.string()
955
944
  })
956
- }), Fn = Et(
945
+ }), qn = kt(
957
946
  async ({ context: e }) => {
958
- j("Checking if there are any CPMs for Stripe PR...");
959
- const n = Ct(e.checkoutPaymentMethods, Un);
960
- j("Initializing Stripe PR flow...");
961
- const r = e.anyCdeConnection, o = await X(r), i = o.mode === "setup";
962
- j("Getting initial preview amount");
963
- const s = await gt(r, o.token, i, void 0), a = await Ar(
947
+ O("Checking if there are any CPMs for Stripe PR...");
948
+ const n = Pt(e.checkoutPaymentMethods, zn);
949
+ O("Initializing Stripe PR flow...");
950
+ const r = e.anyCdeConnection, o = await Q(r), i = o.mode === "setup";
951
+ O("Getting initial preview amount");
952
+ const s = await Et(r, o.token, i, void 0), a = await Lr(
964
953
  n.metadata.stripe_pk,
965
954
  s.amountAtom,
966
955
  s.currency,
967
956
  i
968
957
  );
969
- j("Checking if can make payment");
958
+ O("Checking if can make payment");
970
959
  const c = await a.canMakePayment();
971
- return c === null ? (Nn("canMakePayment returned null"), { isAvailable: !1, reason: "canMakePayment returned null" }) : (j("Stripe PR flow initialized successfully. Can make payment", c), {
960
+ return c === null ? ($n("canMakePayment returned null"), { isAvailable: !1, reason: "canMakePayment returned null" }) : (O("Stripe PR flow initialized successfully. Can make payment", c), {
972
961
  isAvailable: !0,
973
962
  pr: a,
974
963
  availableProviders: {
@@ -977,7 +966,7 @@ const { log__: w, err__: $e } = D("common-cc"), { log__: ze } = D("stripe-cc"),
977
966
  }
978
967
  });
979
968
  }
980
- ), $n = Re(
969
+ ), Hn = Ie(
981
970
  async ({
982
971
  context: e,
983
972
  checkoutPaymentMethod: n,
@@ -986,58 +975,54 @@ const { log__: w, err__: $e } = D("common-cc"), { log__: ze } = D("stripe-cc"),
986
975
  customParams: i,
987
976
  initResult: s
988
977
  }) => {
989
- if (j("Running Stripe PR flow..."), i.provider !== n.provider)
978
+ if (O("Running Stripe PR flow..."), i.provider !== n.provider)
990
979
  throw new Error(`Provider mismatch. Expected ${i.provider}, got ${n.provider}`);
991
980
  const a = e.anyCdeConnection, c = s.pr;
992
981
  if (i != null && i.overridePaymentRequest) {
993
- const h = i.overridePaymentRequest;
994
- j("Overriding PR amount with", h), qn(c, h.amount, h.pending);
982
+ const p = i.overridePaymentRequest;
983
+ O("Overriding PR amount with", p), Yn(c, p.amount, p.pending);
995
984
  }
996
- j("Showing PR dialog..."), c.show();
997
- const l = await Mr(c);
998
- j("Stripe PM added event:", l), j("Merging PM fields with form fields...");
999
- const u = zn(r, l), d = Ae(
1000
- u,
1001
- o.get.onValidationError ?? (() => {
1002
- })
1003
- );
1004
- j("PR dialog finished. Starting payment flow...");
1005
- const p = await dn(a, {
1006
- fields: d,
985
+ O("Showing PR dialog..."), c.show();
986
+ const u = await Dr(c);
987
+ O("Stripe PM added event:", u), O("Merging PM fields with form fields...");
988
+ const l = Vn(r, u), m = xe(l, o.get.onValidationError);
989
+ O("PR dialog finished. Starting payment flow...");
990
+ const h = await hn(a, {
991
+ fields: m,
1007
992
  checkoutPaymentMethod: n
1008
- }), y = Hn(p);
1009
- j("Confirming PR with Stripe..."), await Lr(y, l);
1010
- const m = await X(a);
1011
- if (m.mode === "setup") {
1012
- j("Confirming payment flow for setup...");
1013
- const h = await Te(a, {
1014
- secure_token: m.token
993
+ }), _ = Kn(h);
994
+ O("Confirming PR with Stripe..."), await Ur(_, u);
995
+ const d = await Q(a);
996
+ if (d.mode === "setup") {
997
+ O("Confirming payment flow for setup...");
998
+ const p = await Re(a, {
999
+ secure_token: d.token
1015
1000
  });
1016
- return { mode: "setup", result: Ie(h) };
1001
+ return { mode: "setup", result: Ae(p) };
1017
1002
  } else {
1018
- j("Performing checkout...");
1019
- const h = {
1020
- secure_token: m.token,
1003
+ O("Performing checkout...");
1004
+ const p = {
1005
+ secure_token: d.token,
1021
1006
  payment_input: {
1022
1007
  provider_type: n.provider
1023
1008
  },
1024
- customer_email: d[_.EMAIL],
1025
- customer_zip_code: d[_.ZIP_CODE],
1026
- customer_country: d[_.COUNTRY],
1027
- promotion_code: d[_.PROMOTION_CODE],
1028
- line_items: m.line_items,
1029
- total_amount_atom: m.amount_total_atom,
1009
+ customer_email: m[y.EMAIL],
1010
+ customer_zip_code: m[y.ZIP_CODE],
1011
+ customer_country: m[y.COUNTRY],
1012
+ promotion_code: m[y.PROMOTION_CODE],
1013
+ line_items: d.line_items,
1014
+ total_amount_atom: d.amount_total_atom,
1030
1015
  cancel_at_end: !1,
1031
1016
  checkout_payment_method: n
1032
1017
  };
1033
- return { mode: "checkout", result: await vt(a, h) };
1018
+ return { mode: "checkout", result: await Ct(a, p) };
1034
1019
  }
1035
1020
  }
1036
- ), zn = (e, n) => {
1021
+ ), Vn = (e, n) => {
1037
1022
  var r, o, i, s;
1038
- const a = { ...e }, [c, ...l] = ((o = (r = n.payerName) == null ? void 0 : r.trim()) == null ? void 0 : o.split(/\s+/)) ?? [], u = l.join(" ") || void 0;
1039
- return a[_.FIRST_NAME] = a[_.FIRST_NAME] || c || "_OP_UNKNOWN", a[_.LAST_NAME] = a[_.LAST_NAME] || u || "_OP_UNKNOWN", a[_.EMAIL] = a[_.EMAIL] || n.payerEmail || "op_unfilled@getopenpay.com", a[_.ZIP_CODE] = a[_.ZIP_CODE] || ((i = n.shippingAddress) == null ? void 0 : i.postalCode) || "00000", a[_.COUNTRY] = a[_.COUNTRY] || ((s = n.shippingAddress) == null ? void 0 : s.country) || "US", j("Final form inputs:", a), a;
1040
- }, qn = (e, n, r) => {
1023
+ const a = { ...e }, [c, ...u] = ((o = (r = n.payerName) == null ? void 0 : r.trim()) == null ? void 0 : o.split(/\s+/)) ?? [], l = u.join(" ") || void 0;
1024
+ return a[y.FIRST_NAME] = a[y.FIRST_NAME] || c || "_OP_UNKNOWN", a[y.LAST_NAME] = a[y.LAST_NAME] || l || "_OP_UNKNOWN", a[y.EMAIL] = a[y.EMAIL] || n.payerEmail || "op_unfilled@getopenpay.com", a[y.ZIP_CODE] = a[y.ZIP_CODE] || ((i = n.shippingAddress) == null ? void 0 : i.postalCode) || "00000", a[y.COUNTRY] = a[y.COUNTRY] || ((s = n.shippingAddress) == null ? void 0 : s.country) || "US", O("Final form inputs:", a), a;
1025
+ }, Yn = (e, n, r) => {
1041
1026
  e.update({
1042
1027
  total: {
1043
1028
  amount: n.amountAtom,
@@ -1046,82 +1031,82 @@ const { log__: w, err__: $e } = D("common-cc"), { log__: ze } = D("stripe-cc"),
1046
1031
  },
1047
1032
  currency: n.currency
1048
1033
  });
1049
- }, Hn = (e) => {
1034
+ }, Kn = (e) => {
1050
1035
  if (e.required_user_actions.length !== 1)
1051
1036
  throw new Error(`Error occurred.
1052
1037
  Details: got ${e.required_user_actions.length} required user actions`);
1053
- return Tr.parse(e.required_user_actions[0]);
1054
- }, kt = (e, n, r) => {
1038
+ return Ar.parse(e.required_user_actions[0]);
1039
+ }, jt = (e, n, r) => {
1055
1040
  const o = e.filter((i) => i.provider === n);
1056
1041
  if (o.length === 0)
1057
1042
  throw console.error("CPMs list", e), new Error(`No CPMs found with provider '${n}' and processor '${r}'`);
1058
1043
  if (o.length !== 1)
1059
1044
  throw console.error("CPMs list", e), new Error(`More than one CPM found with provider '${n}' and processor '${r}'`);
1060
1045
  return o[0];
1061
- }, K = {
1046
+ }, B = {
1062
1047
  // ✋ Note: For flows that require initialization, please add them to `init-flows.ts`
1063
1048
  // Common
1064
1049
  commonCC: {
1065
1050
  init: async () => {
1066
1051
  },
1067
- run: An
1052
+ run: Ln
1068
1053
  },
1069
1054
  // Stripe
1070
1055
  stripePR: {
1071
- init: Fn,
1072
- run: $n
1056
+ init: qn,
1057
+ run: Hn
1073
1058
  },
1074
1059
  stripeLink: {
1075
- init: Cn,
1076
- run: Sn
1060
+ init: Pn,
1061
+ run: On
1077
1062
  }
1078
1063
  // 👉 Add more flows here
1079
1064
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
1080
1065
  };
1081
- var Se = function(e, n) {
1082
- return Se = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(r, o) {
1066
+ var Pe = function(e, n) {
1067
+ return Pe = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(r, o) {
1083
1068
  r.__proto__ = o;
1084
1069
  } || function(r, o) {
1085
1070
  for (var i in o) Object.prototype.hasOwnProperty.call(o, i) && (r[i] = o[i]);
1086
- }, Se(e, n);
1071
+ }, Pe(e, n);
1087
1072
  };
1088
- function $(e, n) {
1073
+ function z(e, n) {
1089
1074
  if (typeof n != "function" && n !== null)
1090
1075
  throw new TypeError("Class extends value " + String(n) + " is not a constructor or null");
1091
- Se(e, n);
1076
+ Pe(e, n);
1092
1077
  function r() {
1093
1078
  this.constructor = e;
1094
1079
  }
1095
1080
  e.prototype = n === null ? Object.create(n) : (r.prototype = n.prototype, new r());
1096
1081
  }
1097
- function Vn(e, n, r, o) {
1082
+ function Bn(e, n, r, o) {
1098
1083
  function i(s) {
1099
1084
  return s instanceof r ? s : new r(function(a) {
1100
1085
  a(s);
1101
1086
  });
1102
1087
  }
1103
1088
  return new (r || (r = Promise))(function(s, a) {
1104
- function c(d) {
1089
+ function c(m) {
1105
1090
  try {
1106
- u(o.next(d));
1107
- } catch (p) {
1108
- a(p);
1091
+ l(o.next(m));
1092
+ } catch (h) {
1093
+ a(h);
1109
1094
  }
1110
1095
  }
1111
- function l(d) {
1096
+ function u(m) {
1112
1097
  try {
1113
- u(o.throw(d));
1114
- } catch (p) {
1115
- a(p);
1098
+ l(o.throw(m));
1099
+ } catch (h) {
1100
+ a(h);
1116
1101
  }
1117
1102
  }
1118
- function u(d) {
1119
- d.done ? s(d.value) : i(d.value).then(c, l);
1103
+ function l(m) {
1104
+ m.done ? s(m.value) : i(m.value).then(c, u);
1120
1105
  }
1121
- u((o = o.apply(e, [])).next());
1106
+ l((o = o.apply(e, [])).next());
1122
1107
  });
1123
1108
  }
1124
- function Pt(e, n) {
1109
+ function Tt(e, n) {
1125
1110
  var r = { label: 0, sent: function() {
1126
1111
  if (s[0] & 1) throw s[1];
1127
1112
  return s[1];
@@ -1129,59 +1114,59 @@ function Pt(e, n) {
1129
1114
  return a.next = c(0), a.throw = c(1), a.return = c(2), typeof Symbol == "function" && (a[Symbol.iterator] = function() {
1130
1115
  return this;
1131
1116
  }), a;
1132
- function c(u) {
1133
- return function(d) {
1134
- return l([u, d]);
1117
+ function c(l) {
1118
+ return function(m) {
1119
+ return u([l, m]);
1135
1120
  };
1136
1121
  }
1137
- function l(u) {
1122
+ function u(l) {
1138
1123
  if (o) throw new TypeError("Generator is already executing.");
1139
- for (; a && (a = 0, u[0] && (r = 0)), r; ) try {
1140
- if (o = 1, i && (s = u[0] & 2 ? i.return : u[0] ? i.throw || ((s = i.return) && s.call(i), 0) : i.next) && !(s = s.call(i, u[1])).done) return s;
1141
- switch (i = 0, s && (u = [u[0] & 2, s.value]), u[0]) {
1124
+ for (; a && (a = 0, l[0] && (r = 0)), r; ) try {
1125
+ if (o = 1, i && (s = l[0] & 2 ? i.return : l[0] ? i.throw || ((s = i.return) && s.call(i), 0) : i.next) && !(s = s.call(i, l[1])).done) return s;
1126
+ switch (i = 0, s && (l = [l[0] & 2, s.value]), l[0]) {
1142
1127
  case 0:
1143
1128
  case 1:
1144
- s = u;
1129
+ s = l;
1145
1130
  break;
1146
1131
  case 4:
1147
- return r.label++, { value: u[1], done: !1 };
1132
+ return r.label++, { value: l[1], done: !1 };
1148
1133
  case 5:
1149
- r.label++, i = u[1], u = [0];
1134
+ r.label++, i = l[1], l = [0];
1150
1135
  continue;
1151
1136
  case 7:
1152
- u = r.ops.pop(), r.trys.pop();
1137
+ l = r.ops.pop(), r.trys.pop();
1153
1138
  continue;
1154
1139
  default:
1155
- if (s = r.trys, !(s = s.length > 0 && s[s.length - 1]) && (u[0] === 6 || u[0] === 2)) {
1140
+ if (s = r.trys, !(s = s.length > 0 && s[s.length - 1]) && (l[0] === 6 || l[0] === 2)) {
1156
1141
  r = 0;
1157
1142
  continue;
1158
1143
  }
1159
- if (u[0] === 3 && (!s || u[1] > s[0] && u[1] < s[3])) {
1160
- r.label = u[1];
1144
+ if (l[0] === 3 && (!s || l[1] > s[0] && l[1] < s[3])) {
1145
+ r.label = l[1];
1161
1146
  break;
1162
1147
  }
1163
- if (u[0] === 6 && r.label < s[1]) {
1164
- r.label = s[1], s = u;
1148
+ if (l[0] === 6 && r.label < s[1]) {
1149
+ r.label = s[1], s = l;
1165
1150
  break;
1166
1151
  }
1167
1152
  if (s && r.label < s[2]) {
1168
- r.label = s[2], r.ops.push(u);
1153
+ r.label = s[2], r.ops.push(l);
1169
1154
  break;
1170
1155
  }
1171
1156
  s[2] && r.ops.pop(), r.trys.pop();
1172
1157
  continue;
1173
1158
  }
1174
- u = n.call(e, r);
1175
- } catch (d) {
1176
- u = [6, d], i = 0;
1159
+ l = n.call(e, r);
1160
+ } catch (m) {
1161
+ l = [6, m], i = 0;
1177
1162
  } finally {
1178
1163
  o = s = 0;
1179
1164
  }
1180
- if (u[0] & 5) throw u[1];
1181
- return { value: u[0] ? u[1] : void 0, done: !0 };
1165
+ if (l[0] & 5) throw l[1];
1166
+ return { value: l[0] ? l[1] : void 0, done: !0 };
1182
1167
  }
1183
1168
  }
1184
- function B(e) {
1169
+ function Z(e) {
1185
1170
  var n = typeof Symbol == "function" && Symbol.iterator, r = n && e[n], o = 0;
1186
1171
  if (r) return r.call(e);
1187
1172
  if (e && typeof e.length == "number") return {
@@ -1191,7 +1176,7 @@ function B(e) {
1191
1176
  };
1192
1177
  throw new TypeError(n ? "Object is not iterable." : "Symbol.iterator is not defined.");
1193
1178
  }
1194
- function se(e, n) {
1179
+ function ue(e, n) {
1195
1180
  var r = typeof Symbol == "function" && e[Symbol.iterator];
1196
1181
  if (!r) return e;
1197
1182
  var o = r.call(e), i, s = [], a;
@@ -1208,81 +1193,81 @@ function se(e, n) {
1208
1193
  }
1209
1194
  return s;
1210
1195
  }
1211
- function ae(e, n, r) {
1196
+ function le(e, n, r) {
1212
1197
  if (arguments.length === 2) for (var o = 0, i = n.length, s; o < i; o++)
1213
1198
  (s || !(o in n)) && (s || (s = Array.prototype.slice.call(n, 0, o)), s[o] = n[o]);
1214
1199
  return e.concat(s || Array.prototype.slice.call(n));
1215
1200
  }
1216
- function Y(e) {
1217
- return this instanceof Y ? (this.v = e, this) : new Y(e);
1201
+ function K(e) {
1202
+ return this instanceof K ? (this.v = e, this) : new K(e);
1218
1203
  }
1219
- function Yn(e, n, r) {
1204
+ function Zn(e, n, r) {
1220
1205
  if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
1221
1206
  var o = r.apply(e, n || []), i, s = [];
1222
1207
  return i = Object.create((typeof AsyncIterator == "function" ? AsyncIterator : Object).prototype), c("next"), c("throw"), c("return", a), i[Symbol.asyncIterator] = function() {
1223
1208
  return this;
1224
1209
  }, i;
1225
- function a(m) {
1226
- return function(h) {
1227
- return Promise.resolve(h).then(m, p);
1210
+ function a(d) {
1211
+ return function(p) {
1212
+ return Promise.resolve(p).then(d, h);
1228
1213
  };
1229
1214
  }
1230
- function c(m, h) {
1231
- o[m] && (i[m] = function(f) {
1232
- return new Promise(function(b, z) {
1233
- s.push([m, f, b, z]) > 1 || l(m, f);
1215
+ function c(d, p) {
1216
+ o[d] && (i[d] = function(f) {
1217
+ return new Promise(function(T, re) {
1218
+ s.push([d, f, T, re]) > 1 || u(d, f);
1234
1219
  });
1235
- }, h && (i[m] = h(i[m])));
1220
+ }, p && (i[d] = p(i[d])));
1236
1221
  }
1237
- function l(m, h) {
1222
+ function u(d, p) {
1238
1223
  try {
1239
- u(o[m](h));
1224
+ l(o[d](p));
1240
1225
  } catch (f) {
1241
- y(s[0][3], f);
1226
+ _(s[0][3], f);
1242
1227
  }
1243
1228
  }
1244
- function u(m) {
1245
- m.value instanceof Y ? Promise.resolve(m.value.v).then(d, p) : y(s[0][2], m);
1229
+ function l(d) {
1230
+ d.value instanceof K ? Promise.resolve(d.value.v).then(m, h) : _(s[0][2], d);
1246
1231
  }
1247
- function d(m) {
1248
- l("next", m);
1232
+ function m(d) {
1233
+ u("next", d);
1249
1234
  }
1250
- function p(m) {
1251
- l("throw", m);
1235
+ function h(d) {
1236
+ u("throw", d);
1252
1237
  }
1253
- function y(m, h) {
1254
- m(h), s.shift(), s.length && l(s[0][0], s[0][1]);
1238
+ function _(d, p) {
1239
+ d(p), s.shift(), s.length && u(s[0][0], s[0][1]);
1255
1240
  }
1256
1241
  }
1257
- function Kn(e) {
1242
+ function Jn(e) {
1258
1243
  if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
1259
1244
  var n = e[Symbol.asyncIterator], r;
1260
- return n ? n.call(e) : (e = typeof B == "function" ? B(e) : e[Symbol.iterator](), r = {}, o("next"), o("throw"), o("return"), r[Symbol.asyncIterator] = function() {
1245
+ return n ? n.call(e) : (e = typeof Z == "function" ? Z(e) : e[Symbol.iterator](), r = {}, o("next"), o("throw"), o("return"), r[Symbol.asyncIterator] = function() {
1261
1246
  return this;
1262
1247
  }, r);
1263
1248
  function o(s) {
1264
1249
  r[s] = e[s] && function(a) {
1265
- return new Promise(function(c, l) {
1266
- a = e[s](a), i(c, l, a.done, a.value);
1250
+ return new Promise(function(c, u) {
1251
+ a = e[s](a), i(c, u, a.done, a.value);
1267
1252
  });
1268
1253
  };
1269
1254
  }
1270
- function i(s, a, c, l) {
1271
- Promise.resolve(l).then(function(u) {
1272
- s({ value: u, done: c });
1255
+ function i(s, a, c, u) {
1256
+ Promise.resolve(u).then(function(l) {
1257
+ s({ value: l, done: c });
1273
1258
  }, a);
1274
1259
  }
1275
1260
  }
1276
- function C(e) {
1261
+ function E(e) {
1277
1262
  return typeof e == "function";
1278
1263
  }
1279
- function pe(e) {
1264
+ function fe(e) {
1280
1265
  var n = function(o) {
1281
1266
  Error.call(o), o.stack = new Error().stack;
1282
1267
  }, r = e(n);
1283
1268
  return r.prototype = Object.create(Error.prototype), r.prototype.constructor = r, r;
1284
1269
  }
1285
- var ge = pe(function(e) {
1270
+ var we = fe(function(e) {
1286
1271
  return function(n) {
1287
1272
  e(this), this.message = n ? n.length + ` errors occurred during unsubscription:
1288
1273
  ` + n.map(function(r, o) {
@@ -1291,13 +1276,13 @@ var ge = pe(function(e) {
1291
1276
  `) : "", this.name = "UnsubscriptionError", this.errors = n;
1292
1277
  };
1293
1278
  });
1294
- function ce(e, n) {
1279
+ function de(e, n) {
1295
1280
  if (e) {
1296
1281
  var r = e.indexOf(n);
1297
1282
  0 <= r && e.splice(r, 1);
1298
1283
  }
1299
1284
  }
1300
- var Q = function() {
1285
+ var ee = function() {
1301
1286
  function e(n) {
1302
1287
  this.initialTeardown = n, this.closed = !1, this._parentage = null, this._finalizers = null;
1303
1288
  }
@@ -1309,58 +1294,58 @@ var Q = function() {
1309
1294
  if (a)
1310
1295
  if (this._parentage = null, Array.isArray(a))
1311
1296
  try {
1312
- for (var c = B(a), l = c.next(); !l.done; l = c.next()) {
1313
- var u = l.value;
1314
- u.remove(this);
1297
+ for (var c = Z(a), u = c.next(); !u.done; u = c.next()) {
1298
+ var l = u.value;
1299
+ l.remove(this);
1315
1300
  }
1316
1301
  } catch (f) {
1317
1302
  n = { error: f };
1318
1303
  } finally {
1319
1304
  try {
1320
- l && !l.done && (r = c.return) && r.call(c);
1305
+ u && !u.done && (r = c.return) && r.call(c);
1321
1306
  } finally {
1322
1307
  if (n) throw n.error;
1323
1308
  }
1324
1309
  }
1325
1310
  else
1326
1311
  a.remove(this);
1327
- var d = this.initialTeardown;
1328
- if (C(d))
1312
+ var m = this.initialTeardown;
1313
+ if (E(m))
1329
1314
  try {
1330
- d();
1315
+ m();
1331
1316
  } catch (f) {
1332
- s = f instanceof ge ? f.errors : [f];
1317
+ s = f instanceof we ? f.errors : [f];
1333
1318
  }
1334
- var p = this._finalizers;
1335
- if (p) {
1319
+ var h = this._finalizers;
1320
+ if (h) {
1336
1321
  this._finalizers = null;
1337
1322
  try {
1338
- for (var y = B(p), m = y.next(); !m.done; m = y.next()) {
1339
- var h = m.value;
1323
+ for (var _ = Z(h), d = _.next(); !d.done; d = _.next()) {
1324
+ var p = d.value;
1340
1325
  try {
1341
- qe(h);
1326
+ He(p);
1342
1327
  } catch (f) {
1343
- s = s ?? [], f instanceof ge ? s = ae(ae([], se(s)), se(f.errors)) : s.push(f);
1328
+ s = s ?? [], f instanceof we ? s = le(le([], ue(s)), ue(f.errors)) : s.push(f);
1344
1329
  }
1345
1330
  }
1346
1331
  } catch (f) {
1347
1332
  o = { error: f };
1348
1333
  } finally {
1349
1334
  try {
1350
- m && !m.done && (i = y.return) && i.call(y);
1335
+ d && !d.done && (i = _.return) && i.call(_);
1351
1336
  } finally {
1352
1337
  if (o) throw o.error;
1353
1338
  }
1354
1339
  }
1355
1340
  }
1356
1341
  if (s)
1357
- throw new ge(s);
1342
+ throw new we(s);
1358
1343
  }
1359
1344
  }, e.prototype.add = function(n) {
1360
1345
  var r;
1361
1346
  if (n && n !== this)
1362
1347
  if (this.closed)
1363
- qe(n);
1348
+ He(n);
1364
1349
  else {
1365
1350
  if (n instanceof e) {
1366
1351
  if (n.closed || n._hasParent(this))
@@ -1377,56 +1362,56 @@ var Q = function() {
1377
1362
  this._parentage = Array.isArray(r) ? (r.push(n), r) : r ? [r, n] : n;
1378
1363
  }, e.prototype._removeParent = function(n) {
1379
1364
  var r = this._parentage;
1380
- r === n ? this._parentage = null : Array.isArray(r) && ce(r, n);
1365
+ r === n ? this._parentage = null : Array.isArray(r) && de(r, n);
1381
1366
  }, e.prototype.remove = function(n) {
1382
1367
  var r = this._finalizers;
1383
- r && ce(r, n), n instanceof e && n._removeParent(this);
1368
+ r && de(r, n), n instanceof e && n._removeParent(this);
1384
1369
  }, e.EMPTY = function() {
1385
1370
  var n = new e();
1386
1371
  return n.closed = !0, n;
1387
1372
  }(), e;
1388
- }(), Ot = Q.EMPTY;
1389
- function jt(e) {
1390
- return e instanceof Q || e && "closed" in e && C(e.remove) && C(e.add) && C(e.unsubscribe);
1373
+ }(), Rt = ee.EMPTY;
1374
+ function It(e) {
1375
+ return e instanceof ee || e && "closed" in e && E(e.remove) && E(e.add) && E(e.unsubscribe);
1391
1376
  }
1392
- function qe(e) {
1393
- C(e) ? e() : e.unsubscribe();
1377
+ function He(e) {
1378
+ E(e) ? e() : e.unsubscribe();
1394
1379
  }
1395
- var Tt = {
1380
+ var At = {
1396
1381
  onUnhandledError: null,
1397
1382
  onStoppedNotification: null,
1398
1383
  Promise: void 0,
1399
1384
  useDeprecatedSynchronousErrorHandling: !1,
1400
1385
  useDeprecatedNextContext: !1
1401
- }, Bn = {
1386
+ }, Wn = {
1402
1387
  setTimeout: function(e, n) {
1403
1388
  for (var r = [], o = 2; o < arguments.length; o++)
1404
1389
  r[o - 2] = arguments[o];
1405
- return setTimeout.apply(void 0, ae([e, n], se(r)));
1390
+ return setTimeout.apply(void 0, le([e, n], ue(r)));
1406
1391
  },
1407
1392
  clearTimeout: function(e) {
1408
1393
  return clearTimeout(e);
1409
1394
  },
1410
1395
  delegate: void 0
1411
1396
  };
1412
- function Rt(e) {
1413
- Bn.setTimeout(function() {
1397
+ function xt(e) {
1398
+ Wn.setTimeout(function() {
1414
1399
  throw e;
1415
1400
  });
1416
1401
  }
1417
- function He() {
1402
+ function Ve() {
1418
1403
  }
1419
- function re(e) {
1404
+ function oe(e) {
1420
1405
  e();
1421
1406
  }
1422
- var xe = function(e) {
1423
- $(n, e);
1407
+ var Me = function(e) {
1408
+ z(n, e);
1424
1409
  function n(r) {
1425
1410
  var o = e.call(this) || this;
1426
- return o.isStopped = !1, r ? (o.destination = r, jt(r) && r.add(o)) : o.destination = Gn, o;
1411
+ return o.isStopped = !1, r ? (o.destination = r, It(r) && r.add(o)) : o.destination = eo, o;
1427
1412
  }
1428
1413
  return n.create = function(r, o, i) {
1429
- return new ke(r, o, i);
1414
+ return new Oe(r, o, i);
1430
1415
  }, n.prototype.next = function(r) {
1431
1416
  this.isStopped || this._next(r);
1432
1417
  }, n.prototype.error = function(r) {
@@ -1450,11 +1435,11 @@ var xe = function(e) {
1450
1435
  this.unsubscribe();
1451
1436
  }
1452
1437
  }, n;
1453
- }(Q), Zn = Function.prototype.bind;
1454
- function ve(e, n) {
1455
- return Zn.call(e, n);
1438
+ }(ee), Gn = Function.prototype.bind;
1439
+ function Ee(e, n) {
1440
+ return Gn.call(e, n);
1456
1441
  }
1457
- var Jn = function() {
1442
+ var Xn = function() {
1458
1443
  function e(n) {
1459
1444
  this.partialObserver = n;
1460
1445
  }
@@ -1464,7 +1449,7 @@ var Jn = function() {
1464
1449
  try {
1465
1450
  r.next(n);
1466
1451
  } catch (o) {
1467
- te(o);
1452
+ ne(o);
1468
1453
  }
1469
1454
  }, e.prototype.error = function(n) {
1470
1455
  var r = this.partialObserver;
@@ -1472,24 +1457,24 @@ var Jn = function() {
1472
1457
  try {
1473
1458
  r.error(n);
1474
1459
  } catch (o) {
1475
- te(o);
1460
+ ne(o);
1476
1461
  }
1477
1462
  else
1478
- te(n);
1463
+ ne(n);
1479
1464
  }, e.prototype.complete = function() {
1480
1465
  var n = this.partialObserver;
1481
1466
  if (n.complete)
1482
1467
  try {
1483
1468
  n.complete();
1484
1469
  } catch (r) {
1485
- te(r);
1470
+ ne(r);
1486
1471
  }
1487
1472
  }, e;
1488
- }(), ke = function(e) {
1489
- $(n, e);
1473
+ }(), Oe = function(e) {
1474
+ z(n, e);
1490
1475
  function n(r, o, i) {
1491
1476
  var s = e.call(this) || this, a;
1492
- if (C(r) || !r)
1477
+ if (E(r) || !r)
1493
1478
  a = {
1494
1479
  next: r ?? void 0,
1495
1480
  error: o ?? void 0,
@@ -1497,43 +1482,43 @@ var Jn = function() {
1497
1482
  };
1498
1483
  else {
1499
1484
  var c;
1500
- s && Tt.useDeprecatedNextContext ? (c = Object.create(r), c.unsubscribe = function() {
1485
+ s && At.useDeprecatedNextContext ? (c = Object.create(r), c.unsubscribe = function() {
1501
1486
  return s.unsubscribe();
1502
1487
  }, a = {
1503
- next: r.next && ve(r.next, c),
1504
- error: r.error && ve(r.error, c),
1505
- complete: r.complete && ve(r.complete, c)
1488
+ next: r.next && Ee(r.next, c),
1489
+ error: r.error && Ee(r.error, c),
1490
+ complete: r.complete && Ee(r.complete, c)
1506
1491
  }) : a = r;
1507
1492
  }
1508
- return s.destination = new Jn(a), s;
1493
+ return s.destination = new Xn(a), s;
1509
1494
  }
1510
1495
  return n;
1511
- }(xe);
1512
- function te(e) {
1513
- Rt(e);
1496
+ }(Me);
1497
+ function ne(e) {
1498
+ xt(e);
1514
1499
  }
1515
- function Wn(e) {
1500
+ function Qn(e) {
1516
1501
  throw e;
1517
1502
  }
1518
- var Gn = {
1503
+ var eo = {
1519
1504
  closed: !0,
1520
- next: He,
1521
- error: Wn,
1522
- complete: He
1523
- }, Me = function() {
1505
+ next: Ve,
1506
+ error: Qn,
1507
+ complete: Ve
1508
+ }, Le = function() {
1524
1509
  return typeof Symbol == "function" && Symbol.observable || "@@observable";
1525
1510
  }();
1526
- function Xn(e) {
1511
+ function to(e) {
1527
1512
  return e;
1528
1513
  }
1529
- function Qn(e) {
1530
- return e.length === 0 ? Xn : e.length === 1 ? e[0] : function(n) {
1514
+ function ro(e) {
1515
+ return e.length === 0 ? to : e.length === 1 ? e[0] : function(n) {
1531
1516
  return e.reduce(function(r, o) {
1532
1517
  return o(r);
1533
1518
  }, n);
1534
1519
  };
1535
1520
  }
1536
- var N = function() {
1521
+ var U = function() {
1537
1522
  function e(n) {
1538
1523
  n && (this._subscribe = n);
1539
1524
  }
@@ -1541,10 +1526,10 @@ var N = function() {
1541
1526
  var r = new e();
1542
1527
  return r.source = this, r.operator = n, r;
1543
1528
  }, e.prototype.subscribe = function(n, r, o) {
1544
- var i = this, s = to(n) ? n : new ke(n, r, o);
1545
- return re(function() {
1546
- var a = i, c = a.operator, l = a.source;
1547
- s.add(c ? c.call(s, l) : l ? i._subscribe(s) : i._trySubscribe(s));
1529
+ var i = this, s = oo(n) ? n : new Oe(n, r, o);
1530
+ return oe(function() {
1531
+ var a = i, c = a.operator, u = a.source;
1532
+ s.add(c ? c.call(s, u) : u ? i._subscribe(s) : i._trySubscribe(s));
1548
1533
  }), s;
1549
1534
  }, e.prototype._trySubscribe = function(n) {
1550
1535
  try {
@@ -1554,13 +1539,13 @@ var N = function() {
1554
1539
  }
1555
1540
  }, e.prototype.forEach = function(n, r) {
1556
1541
  var o = this;
1557
- return r = Ve(r), new r(function(i, s) {
1558
- var a = new ke({
1542
+ return r = Ye(r), new r(function(i, s) {
1543
+ var a = new Oe({
1559
1544
  next: function(c) {
1560
1545
  try {
1561
1546
  n(c);
1562
- } catch (l) {
1563
- s(l), a.unsubscribe();
1547
+ } catch (u) {
1548
+ s(u), a.unsubscribe();
1564
1549
  }
1565
1550
  },
1566
1551
  error: s,
@@ -1571,15 +1556,15 @@ var N = function() {
1571
1556
  }, e.prototype._subscribe = function(n) {
1572
1557
  var r;
1573
1558
  return (r = this.source) === null || r === void 0 ? void 0 : r.subscribe(n);
1574
- }, e.prototype[Me] = function() {
1559
+ }, e.prototype[Le] = function() {
1575
1560
  return this;
1576
1561
  }, e.prototype.pipe = function() {
1577
1562
  for (var n = [], r = 0; r < arguments.length; r++)
1578
1563
  n[r] = arguments[r];
1579
- return Qn(n)(this);
1564
+ return ro(n)(this);
1580
1565
  }, e.prototype.toPromise = function(n) {
1581
1566
  var r = this;
1582
- return n = Ve(n), new n(function(o, i) {
1567
+ return n = Ye(n), new n(function(o, i) {
1583
1568
  var s;
1584
1569
  r.subscribe(function(a) {
1585
1570
  return s = a;
@@ -1593,22 +1578,22 @@ var N = function() {
1593
1578
  return new e(n);
1594
1579
  }, e;
1595
1580
  }();
1596
- function Ve(e) {
1581
+ function Ye(e) {
1597
1582
  var n;
1598
- return (n = e ?? Tt.Promise) !== null && n !== void 0 ? n : Promise;
1583
+ return (n = e ?? At.Promise) !== null && n !== void 0 ? n : Promise;
1599
1584
  }
1600
- function eo(e) {
1601
- return e && C(e.next) && C(e.error) && C(e.complete);
1585
+ function no(e) {
1586
+ return e && E(e.next) && E(e.error) && E(e.complete);
1602
1587
  }
1603
- function to(e) {
1604
- return e && e instanceof xe || eo(e) && jt(e);
1588
+ function oo(e) {
1589
+ return e && e instanceof Me || no(e) && It(e);
1605
1590
  }
1606
- function ro(e) {
1607
- return C(e == null ? void 0 : e.lift);
1591
+ function io(e) {
1592
+ return E(e == null ? void 0 : e.lift);
1608
1593
  }
1609
- function no(e) {
1594
+ function so(e) {
1610
1595
  return function(n) {
1611
- if (ro(n))
1596
+ if (io(n))
1612
1597
  return n.lift(function(r) {
1613
1598
  try {
1614
1599
  return e(r, this);
@@ -1619,36 +1604,36 @@ function no(e) {
1619
1604
  throw new TypeError("Unable to lift unknown Observable type");
1620
1605
  };
1621
1606
  }
1622
- function oo(e, n, r, o, i) {
1623
- return new io(e, n, r, o, i);
1607
+ function ao(e, n, r, o, i) {
1608
+ return new co(e, n, r, o, i);
1624
1609
  }
1625
- var io = function(e) {
1626
- $(n, e);
1610
+ var co = function(e) {
1611
+ z(n, e);
1627
1612
  function n(r, o, i, s, a, c) {
1628
- var l = e.call(this, r) || this;
1629
- return l.onFinalize = a, l.shouldUnsubscribe = c, l._next = o ? function(u) {
1613
+ var u = e.call(this, r) || this;
1614
+ return u.onFinalize = a, u.shouldUnsubscribe = c, u._next = o ? function(l) {
1630
1615
  try {
1631
- o(u);
1632
- } catch (d) {
1633
- r.error(d);
1616
+ o(l);
1617
+ } catch (m) {
1618
+ r.error(m);
1634
1619
  }
1635
- } : e.prototype._next, l._error = s ? function(u) {
1620
+ } : e.prototype._next, u._error = s ? function(l) {
1636
1621
  try {
1637
- s(u);
1638
- } catch (d) {
1639
- r.error(d);
1622
+ s(l);
1623
+ } catch (m) {
1624
+ r.error(m);
1640
1625
  } finally {
1641
1626
  this.unsubscribe();
1642
1627
  }
1643
- } : e.prototype._error, l._complete = i ? function() {
1628
+ } : e.prototype._error, u._complete = i ? function() {
1644
1629
  try {
1645
1630
  i();
1646
- } catch (u) {
1647
- r.error(u);
1631
+ } catch (l) {
1632
+ r.error(l);
1648
1633
  } finally {
1649
1634
  this.unsubscribe();
1650
1635
  }
1651
- } : e.prototype._complete, l;
1636
+ } : e.prototype._complete, u;
1652
1637
  }
1653
1638
  return n.prototype.unsubscribe = function() {
1654
1639
  var r;
@@ -1657,35 +1642,35 @@ var io = function(e) {
1657
1642
  e.prototype.unsubscribe.call(this), !o && ((r = this.onFinalize) === null || r === void 0 || r.call(this));
1658
1643
  }
1659
1644
  }, n;
1660
- }(xe), so = pe(function(e) {
1645
+ }(Me), uo = fe(function(e) {
1661
1646
  return function() {
1662
1647
  e(this), this.name = "ObjectUnsubscribedError", this.message = "object unsubscribed";
1663
1648
  };
1664
- }), It = function(e) {
1665
- $(n, e);
1649
+ }), Mt = function(e) {
1650
+ z(n, e);
1666
1651
  function n() {
1667
1652
  var r = e.call(this) || this;
1668
1653
  return r.closed = !1, r.currentObservers = null, r.observers = [], r.isStopped = !1, r.hasError = !1, r.thrownError = null, r;
1669
1654
  }
1670
1655
  return n.prototype.lift = function(r) {
1671
- var o = new Ye(this, this);
1656
+ var o = new Ke(this, this);
1672
1657
  return o.operator = r, o;
1673
1658
  }, n.prototype._throwIfClosed = function() {
1674
1659
  if (this.closed)
1675
- throw new so();
1660
+ throw new uo();
1676
1661
  }, n.prototype.next = function(r) {
1677
1662
  var o = this;
1678
- re(function() {
1663
+ oe(function() {
1679
1664
  var i, s;
1680
1665
  if (o._throwIfClosed(), !o.isStopped) {
1681
1666
  o.currentObservers || (o.currentObservers = Array.from(o.observers));
1682
1667
  try {
1683
- for (var a = B(o.currentObservers), c = a.next(); !c.done; c = a.next()) {
1684
- var l = c.value;
1685
- l.next(r);
1668
+ for (var a = Z(o.currentObservers), c = a.next(); !c.done; c = a.next()) {
1669
+ var u = c.value;
1670
+ u.next(r);
1686
1671
  }
1687
- } catch (u) {
1688
- i = { error: u };
1672
+ } catch (l) {
1673
+ i = { error: l };
1689
1674
  } finally {
1690
1675
  try {
1691
1676
  c && !c.done && (s = a.return) && s.call(a);
@@ -1697,7 +1682,7 @@ var io = function(e) {
1697
1682
  });
1698
1683
  }, n.prototype.error = function(r) {
1699
1684
  var o = this;
1700
- re(function() {
1685
+ oe(function() {
1701
1686
  if (o._throwIfClosed(), !o.isStopped) {
1702
1687
  o.hasError = o.isStopped = !0, o.thrownError = r;
1703
1688
  for (var i = o.observers; i.length; )
@@ -1706,7 +1691,7 @@ var io = function(e) {
1706
1691
  });
1707
1692
  }, n.prototype.complete = function() {
1708
1693
  var r = this;
1709
- re(function() {
1694
+ oe(function() {
1710
1695
  if (r._throwIfClosed(), !r.isStopped) {
1711
1696
  r.isStopped = !0;
1712
1697
  for (var o = r.observers; o.length; )
@@ -1728,20 +1713,20 @@ var io = function(e) {
1728
1713
  return this._throwIfClosed(), this._checkFinalizedStatuses(r), this._innerSubscribe(r);
1729
1714
  }, n.prototype._innerSubscribe = function(r) {
1730
1715
  var o = this, i = this, s = i.hasError, a = i.isStopped, c = i.observers;
1731
- return s || a ? Ot : (this.currentObservers = null, c.push(r), new Q(function() {
1732
- o.currentObservers = null, ce(c, r);
1716
+ return s || a ? Rt : (this.currentObservers = null, c.push(r), new ee(function() {
1717
+ o.currentObservers = null, de(c, r);
1733
1718
  }));
1734
1719
  }, n.prototype._checkFinalizedStatuses = function(r) {
1735
1720
  var o = this, i = o.hasError, s = o.thrownError, a = o.isStopped;
1736
1721
  i ? r.error(s) : a && r.complete();
1737
1722
  }, n.prototype.asObservable = function() {
1738
- var r = new N();
1723
+ var r = new U();
1739
1724
  return r.source = this, r;
1740
1725
  }, n.create = function(r, o) {
1741
- return new Ye(r, o);
1726
+ return new Ke(r, o);
1742
1727
  }, n;
1743
- }(N), Ye = function(e) {
1744
- $(n, e);
1728
+ }(U), Ke = function(e) {
1729
+ z(n, e);
1745
1730
  function n(r, o) {
1746
1731
  var i = e.call(this) || this;
1747
1732
  return i.destination = r, i.source = o, i;
@@ -1757,33 +1742,33 @@ var io = function(e) {
1757
1742
  (o = (r = this.destination) === null || r === void 0 ? void 0 : r.complete) === null || o === void 0 || o.call(r);
1758
1743
  }, n.prototype._subscribe = function(r) {
1759
1744
  var o, i;
1760
- return (i = (o = this.source) === null || o === void 0 ? void 0 : o.subscribe(r)) !== null && i !== void 0 ? i : Ot;
1745
+ return (i = (o = this.source) === null || o === void 0 ? void 0 : o.subscribe(r)) !== null && i !== void 0 ? i : Rt;
1761
1746
  }, n;
1762
- }(It), ao = {
1747
+ }(Mt), lo = {
1763
1748
  now: function() {
1764
1749
  return Date.now();
1765
1750
  },
1766
1751
  delegate: void 0
1767
- }, co = function(e) {
1768
- $(n, e);
1752
+ }, mo = function(e) {
1753
+ z(n, e);
1769
1754
  function n(r, o) {
1770
1755
  return e.call(this) || this;
1771
1756
  }
1772
1757
  return n.prototype.schedule = function(r, o) {
1773
1758
  return this;
1774
1759
  }, n;
1775
- }(Q), Ke = {
1760
+ }(ee), Be = {
1776
1761
  setInterval: function(e, n) {
1777
1762
  for (var r = [], o = 2; o < arguments.length; o++)
1778
1763
  r[o - 2] = arguments[o];
1779
- return setInterval.apply(void 0, ae([e, n], se(r)));
1764
+ return setInterval.apply(void 0, le([e, n], ue(r)));
1780
1765
  },
1781
1766
  clearInterval: function(e) {
1782
1767
  return clearInterval(e);
1783
1768
  },
1784
1769
  delegate: void 0
1785
- }, lo = function(e) {
1786
- $(n, e);
1770
+ }, po = function(e) {
1771
+ z(n, e);
1787
1772
  function n(r, o) {
1788
1773
  var i = e.call(this, r, o) || this;
1789
1774
  return i.scheduler = r, i.work = o, i.pending = !1, i;
@@ -1796,11 +1781,11 @@ var io = function(e) {
1796
1781
  var s = this.id, a = this.scheduler;
1797
1782
  return s != null && (this.id = this.recycleAsyncId(a, s, o)), this.pending = !0, this.delay = o, this.id = (i = this.id) !== null && i !== void 0 ? i : this.requestAsyncId(a, this.id, o), this;
1798
1783
  }, n.prototype.requestAsyncId = function(r, o, i) {
1799
- return i === void 0 && (i = 0), Ke.setInterval(r.flush.bind(r, this), i);
1784
+ return i === void 0 && (i = 0), Be.setInterval(r.flush.bind(r, this), i);
1800
1785
  }, n.prototype.recycleAsyncId = function(r, o, i) {
1801
1786
  if (i === void 0 && (i = 0), i != null && this.delay === i && this.pending === !1)
1802
1787
  return o;
1803
- o != null && Ke.clearInterval(o);
1788
+ o != null && Be.clearInterval(o);
1804
1789
  }, n.prototype.execute = function(r, o) {
1805
1790
  if (this.closed)
1806
1791
  return new Error("executing a cancelled action");
@@ -1821,20 +1806,20 @@ var io = function(e) {
1821
1806
  }, n.prototype.unsubscribe = function() {
1822
1807
  if (!this.closed) {
1823
1808
  var r = this, o = r.id, i = r.scheduler, s = i.actions;
1824
- this.work = this.state = this.scheduler = null, this.pending = !1, ce(s, this), o != null && (this.id = this.recycleAsyncId(i, o, null)), this.delay = null, e.prototype.unsubscribe.call(this);
1809
+ this.work = this.state = this.scheduler = null, this.pending = !1, de(s, this), o != null && (this.id = this.recycleAsyncId(i, o, null)), this.delay = null, e.prototype.unsubscribe.call(this);
1825
1810
  }
1826
1811
  }, n;
1827
- }(co), Be = function() {
1812
+ }(mo), Ze = function() {
1828
1813
  function e(n, r) {
1829
1814
  r === void 0 && (r = e.now), this.schedulerActionCtor = n, this.now = r;
1830
1815
  }
1831
1816
  return e.prototype.schedule = function(n, r, o) {
1832
1817
  return r === void 0 && (r = 0), new this.schedulerActionCtor(this, n).schedule(o, r);
1833
- }, e.now = ao.now, e;
1834
- }(), uo = function(e) {
1835
- $(n, e);
1818
+ }, e.now = lo.now, e;
1819
+ }(), ho = function(e) {
1820
+ z(n, e);
1836
1821
  function n(r, o) {
1837
- o === void 0 && (o = Be.now);
1822
+ o === void 0 && (o = Ze.now);
1838
1823
  var i = e.call(this, r, o) || this;
1839
1824
  return i.actions = [], i._active = !1, i;
1840
1825
  }
@@ -1856,45 +1841,45 @@ var io = function(e) {
1856
1841
  throw i;
1857
1842
  }
1858
1843
  }, n;
1859
- }(Be), mo = new uo(lo), po = function(e) {
1844
+ }(Ze), fo = new ho(po), yo = function(e) {
1860
1845
  return e && typeof e.length == "number" && typeof e != "function";
1861
1846
  };
1862
- function ho(e) {
1863
- return C(e == null ? void 0 : e.then);
1847
+ function _o(e) {
1848
+ return E(e == null ? void 0 : e.then);
1864
1849
  }
1865
- function fo(e) {
1866
- return C(e[Me]);
1850
+ function bo(e) {
1851
+ return E(e[Le]);
1867
1852
  }
1868
- function yo(e) {
1869
- return Symbol.asyncIterator && C(e == null ? void 0 : e[Symbol.asyncIterator]);
1853
+ function go(e) {
1854
+ return Symbol.asyncIterator && E(e == null ? void 0 : e[Symbol.asyncIterator]);
1870
1855
  }
1871
- function _o(e) {
1856
+ function vo(e) {
1872
1857
  return new TypeError("You provided " + (e !== null && typeof e == "object" ? "an invalid object" : "'" + e + "'") + " where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.");
1873
1858
  }
1874
- function bo() {
1859
+ function wo() {
1875
1860
  return typeof Symbol != "function" || !Symbol.iterator ? "@@iterator" : Symbol.iterator;
1876
1861
  }
1877
- var go = bo();
1878
- function vo(e) {
1879
- return C(e == null ? void 0 : e[go]);
1862
+ var Eo = wo();
1863
+ function Co(e) {
1864
+ return E(e == null ? void 0 : e[Eo]);
1880
1865
  }
1881
- function wo(e) {
1882
- return Yn(this, arguments, function() {
1866
+ function So(e) {
1867
+ return Zn(this, arguments, function() {
1883
1868
  var n, r, o, i;
1884
- return Pt(this, function(s) {
1869
+ return Tt(this, function(s) {
1885
1870
  switch (s.label) {
1886
1871
  case 0:
1887
1872
  n = e.getReader(), s.label = 1;
1888
1873
  case 1:
1889
1874
  s.trys.push([1, , 9, 10]), s.label = 2;
1890
1875
  case 2:
1891
- return [4, Y(n.read())];
1876
+ return [4, K(n.read())];
1892
1877
  case 3:
1893
- return r = s.sent(), o = r.value, i = r.done, i ? [4, Y(void 0)] : [3, 5];
1878
+ return r = s.sent(), o = r.value, i = r.done, i ? [4, K(void 0)] : [3, 5];
1894
1879
  case 4:
1895
1880
  return [2, s.sent()];
1896
1881
  case 5:
1897
- return [4, Y(o)];
1882
+ return [4, K(o)];
1898
1883
  case 6:
1899
1884
  return [4, s.sent()];
1900
1885
  case 7:
@@ -1909,57 +1894,57 @@ function wo(e) {
1909
1894
  });
1910
1895
  });
1911
1896
  }
1912
- function Eo(e) {
1913
- return C(e == null ? void 0 : e.getReader);
1897
+ function ko(e) {
1898
+ return E(e == null ? void 0 : e.getReader);
1914
1899
  }
1915
- function Co(e) {
1916
- if (e instanceof N)
1900
+ function Po(e) {
1901
+ if (e instanceof U)
1917
1902
  return e;
1918
1903
  if (e != null) {
1919
- if (fo(e))
1920
- return So(e);
1921
- if (po(e))
1922
- return ko(e);
1923
- if (ho(e))
1924
- return Po(e);
1925
- if (yo(e))
1926
- return At(e);
1927
- if (vo(e))
1904
+ if (bo(e))
1928
1905
  return Oo(e);
1929
- if (Eo(e))
1906
+ if (yo(e))
1930
1907
  return jo(e);
1931
- }
1932
- throw _o(e);
1908
+ if (_o(e))
1909
+ return To(e);
1910
+ if (go(e))
1911
+ return Lt(e);
1912
+ if (Co(e))
1913
+ return Ro(e);
1914
+ if (ko(e))
1915
+ return Io(e);
1916
+ }
1917
+ throw vo(e);
1933
1918
  }
1934
- function So(e) {
1935
- return new N(function(n) {
1936
- var r = e[Me]();
1937
- if (C(r.subscribe))
1919
+ function Oo(e) {
1920
+ return new U(function(n) {
1921
+ var r = e[Le]();
1922
+ if (E(r.subscribe))
1938
1923
  return r.subscribe(n);
1939
1924
  throw new TypeError("Provided object does not correctly implement Symbol.observable");
1940
1925
  });
1941
1926
  }
1942
- function ko(e) {
1943
- return new N(function(n) {
1927
+ function jo(e) {
1928
+ return new U(function(n) {
1944
1929
  for (var r = 0; r < e.length && !n.closed; r++)
1945
1930
  n.next(e[r]);
1946
1931
  n.complete();
1947
1932
  });
1948
1933
  }
1949
- function Po(e) {
1950
- return new N(function(n) {
1934
+ function To(e) {
1935
+ return new U(function(n) {
1951
1936
  e.then(function(r) {
1952
1937
  n.closed || (n.next(r), n.complete());
1953
1938
  }, function(r) {
1954
1939
  return n.error(r);
1955
- }).then(null, Rt);
1940
+ }).then(null, xt);
1956
1941
  });
1957
1942
  }
1958
- function Oo(e) {
1959
- return new N(function(n) {
1943
+ function Ro(e) {
1944
+ return new U(function(n) {
1960
1945
  var r, o;
1961
1946
  try {
1962
- for (var i = B(e), s = i.next(); !s.done; s = i.next()) {
1947
+ for (var i = Z(e), s = i.next(); !s.done; s = i.next()) {
1963
1948
  var a = s.value;
1964
1949
  if (n.next(a), n.closed)
1965
1950
  return;
@@ -1976,41 +1961,41 @@ function Oo(e) {
1976
1961
  n.complete();
1977
1962
  });
1978
1963
  }
1979
- function At(e) {
1980
- return new N(function(n) {
1981
- To(e, n).catch(function(r) {
1964
+ function Lt(e) {
1965
+ return new U(function(n) {
1966
+ Ao(e, n).catch(function(r) {
1982
1967
  return n.error(r);
1983
1968
  });
1984
1969
  });
1985
1970
  }
1986
- function jo(e) {
1987
- return At(wo(e));
1971
+ function Io(e) {
1972
+ return Lt(So(e));
1988
1973
  }
1989
- function To(e, n) {
1974
+ function Ao(e, n) {
1990
1975
  var r, o, i, s;
1991
- return Vn(this, void 0, void 0, function() {
1976
+ return Bn(this, void 0, void 0, function() {
1992
1977
  var a, c;
1993
- return Pt(this, function(l) {
1994
- switch (l.label) {
1978
+ return Tt(this, function(u) {
1979
+ switch (u.label) {
1995
1980
  case 0:
1996
- l.trys.push([0, 5, 6, 11]), r = Kn(e), l.label = 1;
1981
+ u.trys.push([0, 5, 6, 11]), r = Jn(e), u.label = 1;
1997
1982
  case 1:
1998
1983
  return [4, r.next()];
1999
1984
  case 2:
2000
- if (o = l.sent(), !!o.done) return [3, 4];
1985
+ if (o = u.sent(), !!o.done) return [3, 4];
2001
1986
  if (a = o.value, n.next(a), n.closed)
2002
1987
  return [2];
2003
- l.label = 3;
1988
+ u.label = 3;
2004
1989
  case 3:
2005
1990
  return [3, 1];
2006
1991
  case 4:
2007
1992
  return [3, 11];
2008
1993
  case 5:
2009
- return c = l.sent(), i = { error: c }, [3, 11];
1994
+ return c = u.sent(), i = { error: c }, [3, 11];
2010
1995
  case 6:
2011
- return l.trys.push([6, , 9, 10]), o && !o.done && (s = r.return) ? [4, s.call(r)] : [3, 8];
1996
+ return u.trys.push([6, , 9, 10]), o && !o.done && (s = r.return) ? [4, s.call(r)] : [3, 8];
2012
1997
  case 7:
2013
- l.sent(), l.label = 8;
1998
+ u.sent(), u.label = 8;
2014
1999
  case 8:
2015
2000
  return [3, 10];
2016
2001
  case 9:
@@ -2024,7 +2009,7 @@ function To(e, n) {
2024
2009
  });
2025
2010
  });
2026
2011
  }
2027
- function Ro(e, n, r, o, i) {
2012
+ function xo(e, n, r, o, i) {
2028
2013
  o === void 0 && (o = 0), i === void 0 && (i = !1);
2029
2014
  var s = n.schedule(function() {
2030
2015
  r(), i ? e.add(this.schedule(null, o)) : this.unsubscribe();
@@ -2032,20 +2017,20 @@ function Ro(e, n, r, o, i) {
2032
2017
  if (e.add(s), !i)
2033
2018
  return s;
2034
2019
  }
2035
- function Io(e, n) {
2036
- var r = C(e) ? e : function() {
2020
+ function Mo(e, n) {
2021
+ var r = E(e) ? e : function() {
2037
2022
  return e;
2038
2023
  }, o = function(i) {
2039
2024
  return i.error(r());
2040
2025
  };
2041
- return new N(o);
2026
+ return new U(o);
2042
2027
  }
2043
- var Ao = pe(function(e) {
2028
+ var Lo = fe(function(e) {
2044
2029
  return function() {
2045
2030
  e(this), this.name = "EmptyError", this.message = "no elements in sequence";
2046
2031
  };
2047
2032
  });
2048
- function xo(e, n) {
2033
+ function No(e, n) {
2049
2034
  return new Promise(function(r, o) {
2050
2035
  var i = !1, s;
2051
2036
  e.subscribe({
@@ -2054,48 +2039,48 @@ function xo(e, n) {
2054
2039
  },
2055
2040
  error: o,
2056
2041
  complete: function() {
2057
- i ? r(s) : o(new Ao());
2042
+ i ? r(s) : o(new Lo());
2058
2043
  }
2059
2044
  });
2060
2045
  });
2061
2046
  }
2062
- function Mo(e) {
2047
+ function Do(e) {
2063
2048
  return e instanceof Date && !isNaN(e);
2064
2049
  }
2065
- var Lo = pe(function(e) {
2050
+ var Uo = fe(function(e) {
2066
2051
  return function(n) {
2067
2052
  n === void 0 && (n = null), e(this), this.message = "Timeout has occurred", this.name = "TimeoutError", this.info = n;
2068
2053
  };
2069
2054
  });
2070
- function Do(e, n) {
2071
- var r = Mo(e) ? { first: e } : typeof e == "number" ? { each: e } : e, o = r.first, i = r.each, s = r.with, a = s === void 0 ? No : s, c = r.scheduler, l = c === void 0 ? mo : c, u = r.meta, d = u === void 0 ? null : u;
2055
+ function Fo(e, n) {
2056
+ var r = Do(e) ? { first: e } : typeof e == "number" ? { each: e } : e, o = r.first, i = r.each, s = r.with, a = s === void 0 ? $o : s, c = r.scheduler, u = c === void 0 ? fo : c, l = r.meta, m = l === void 0 ? null : l;
2072
2057
  if (o == null && i == null)
2073
2058
  throw new TypeError("No timeout provided.");
2074
- return no(function(p, y) {
2075
- var m, h, f = null, b = 0, z = function(_e) {
2076
- h = Ro(y, l, function() {
2059
+ return so(function(h, _) {
2060
+ var d, p, f = null, T = 0, re = function(ge) {
2061
+ p = xo(_, u, function() {
2077
2062
  try {
2078
- m.unsubscribe(), Co(a({
2079
- meta: d,
2063
+ d.unsubscribe(), Po(a({
2064
+ meta: m,
2080
2065
  lastValue: f,
2081
- seen: b
2082
- })).subscribe(y);
2083
- } catch (Ft) {
2084
- y.error(Ft);
2066
+ seen: T
2067
+ })).subscribe(_);
2068
+ } catch (qt) {
2069
+ _.error(qt);
2085
2070
  }
2086
- }, _e);
2071
+ }, ge);
2087
2072
  };
2088
- m = p.subscribe(oo(y, function(_e) {
2089
- h == null || h.unsubscribe(), b++, y.next(f = _e), i > 0 && z(i);
2073
+ d = h.subscribe(ao(_, function(ge) {
2074
+ p == null || p.unsubscribe(), T++, _.next(f = ge), i > 0 && re(i);
2090
2075
  }, void 0, void 0, function() {
2091
- h != null && h.closed || h == null || h.unsubscribe(), f = null;
2092
- })), !b && z(o != null ? typeof o == "number" ? o : +o - l.now() : i);
2076
+ p != null && p.closed || p == null || p.unsubscribe(), f = null;
2077
+ })), !T && re(o != null ? typeof o == "number" ? o : +o - u.now() : i);
2093
2078
  });
2094
2079
  }
2095
- function No(e) {
2096
- throw new Lo(e);
2080
+ function $o(e) {
2081
+ throw new Uo(e);
2097
2082
  }
2098
- class ne {
2083
+ class ie {
2099
2084
  constructor() {
2100
2085
  this.set = (n) => {
2101
2086
  if (this._current.status === "success")
@@ -2126,20 +2111,20 @@ class ne {
2126
2111
  }, this.waitForLoad = (n) => {
2127
2112
  if (this._current.status === "success") return Promise.resolve(this._current.loadedValue);
2128
2113
  if (this._current.status === "error") return Promise.reject(this._current.error);
2129
- this._current.status !== "initial" && yn(this._current);
2114
+ this._current.status !== "initial" && gn(this._current);
2130
2115
  const r = {
2131
2116
  first: n.timeoutSec * 1e3,
2132
- with: () => Io(() => new Error(n.timeoutErrMsg))
2117
+ with: () => Mo(() => new Error(n.timeoutErrMsg))
2133
2118
  };
2134
- return xo(this._subject.pipe(Do(r)));
2135
- }, this._current = { status: "initial", isSuccess: !1 }, this._subject = new It();
2119
+ return No(this._subject.pipe(Fo(r)));
2120
+ }, this._current = { status: "initial", isSuccess: !1 }, this._subject = new Mt();
2136
2121
  }
2137
2122
  get current() {
2138
2123
  return this._current;
2139
2124
  }
2140
2125
  }
2141
- const { log__: Uo, err__: Fo } = D("init-flows"), Ze = (e, n) => {
2142
- const r = new ne();
2126
+ const { log__: zo, err__: qo } = D("init-flows"), Je = (e, n) => {
2127
+ const r = new ie();
2143
2128
  return {
2144
2129
  publisher: r,
2145
2130
  initialize: async (o) => {
@@ -2147,22 +2132,22 @@ const { log__: Uo, err__: Fo } = D("init-flows"), Ze = (e, n) => {
2147
2132
  if (r.current.isSuccess)
2148
2133
  throw new Error("This flow has already been initialized.");
2149
2134
  const i = await n(o);
2150
- Uo(`✔ ${e} flow initialized successfully. Result:`, i), r.set(i);
2135
+ zo(`✔ ${e} flow initialized successfully. Result:`, i), r.set(i);
2151
2136
  } catch (i) {
2152
- Fo(`𝙭 ${e} flow initialization failed. Error:`, J(i), "Details:", i), r.throw(i, J(i));
2137
+ qo(`𝙭 ${e} flow initialization failed. Error:`, W(i), "Details:", i), r.throw(i, W(i));
2153
2138
  }
2154
2139
  }
2155
2140
  };
2156
- }, $o = async (e, n, r) => {
2141
+ }, Ho = async (e, n, r) => {
2157
2142
  await Promise.all(Object.values(e).map((o) => o.initialize({ context: n, formCallbacks: r })));
2158
- }, zo = () => ({
2143
+ }, Vo = () => ({
2159
2144
  // 💡 Add new init flows here
2160
2145
  // Stripe PR
2161
- stripePR: Ze("Stripe PR", K.stripePR.init),
2146
+ stripePR: Je("Stripe PR", B.stripePR.init),
2162
2147
  // Stripe Link
2163
- stripeLink: Ze("Stripe Link", K.stripeLink.init)
2148
+ stripeLink: Je("Stripe Link", B.stripeLink.init)
2164
2149
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
2165
- }), { err__: qo } = D("form-callbacks"), R = t.function().optional(), Ho = t.object({
2150
+ }), { err__: Yo } = D("form-callbacks"), R = t.function().optional(), We = t.object({
2166
2151
  onFocus: R,
2167
2152
  onBlur: R,
2168
2153
  onChange: R,
@@ -2174,15 +2159,14 @@ const { log__: Uo, err__: Fo } = D("init-flows"), Ze = (e, n) => {
2174
2159
  onSetupPaymentMethodSuccess: R,
2175
2160
  onCheckoutError: R,
2176
2161
  onPaymentRequestLoad: R
2177
- }), Pe = class {
2162
+ }), q = class se {
2178
2163
  constructor() {
2179
- this._callbacks = {}, this.setCallbacks = (n) => {
2180
- this._callbacks = {}, Object.entries(n).forEach(([r, o]) => {
2181
- const i = Qt(r, o ?? (() => {
2182
- }), qo);
2164
+ this.setCallbacks = (n) => {
2165
+ this._callbacks = se.createEmptyCallbacks(), Object.entries(n).forEach(([r, o]) => {
2166
+ const i = rr(r, o ?? se.NOOP, Yo);
2183
2167
  this._callbacks[r] = i;
2184
2168
  });
2185
- };
2169
+ }, this._callbacks = se.createEmptyCallbacks();
2186
2170
  }
2187
2171
  /**
2188
2172
  * Returns a read-only version of the callbacks object.
@@ -2191,62 +2175,67 @@ const { log__: Uo, err__: Fo } = D("init-flows"), Ze = (e, n) => {
2191
2175
  return { ...this._callbacks };
2192
2176
  }
2193
2177
  };
2194
- Pe.fromObject = (e) => {
2195
- const n = new Pe();
2196
- return n.setCallbacks(Ho.parse(e)), n;
2178
+ q.NOOP = () => {
2179
+ }, q.createEmptyCallbacks = () => {
2180
+ const e = {};
2181
+ return Object.keys(We.keyof().enum).forEach((n) => {
2182
+ e[n] = q.NOOP;
2183
+ }), e;
2184
+ }, q.fromObject = (e) => {
2185
+ const n = new q();
2186
+ return n.setCallbacks(We.parse(e)), n;
2197
2187
  };
2198
- let Vo = Pe;
2199
- class Yo {
2188
+ let Ko = q;
2189
+ class Bo {
2200
2190
  constructor(n, r, o, i) {
2201
2191
  this.handleMessage = (s) => {
2202
- var a, c, l, u, d, p, y, m;
2203
2192
  if (!s.source)
2204
2193
  throw new Error("No source found");
2205
- if (Je(s.origin) !== Je(this.baseUrl) || typeof s.data == "object" && s.data.penpal)
2194
+ if (Ge(s.origin) !== Ge(this.baseUrl) || typeof s.data == "object" && s.data.penpal)
2206
2195
  return;
2207
- const h = Ur(JSON.parse(s.data));
2208
- if (!this.validateEvent(h)) return;
2209
- const { elementId: f, payload: b } = h, z = b.type;
2210
- switch (z) {
2196
+ const a = zr(JSON.parse(s.data));
2197
+ if (!this.validateEvent(a)) return;
2198
+ const { elementId: c, payload: u } = a, l = u.type;
2199
+ switch (l) {
2211
2200
  case "LAYOUT":
2212
- this.internalCallbacks.setFormHeight(b.height ? `${b.height}px` : "100%");
2201
+ this.internalCallbacks.setFormHeight(u.height ? `${u.height}px` : "100%");
2213
2202
  break;
2214
2203
  case "FOCUS":
2215
- (c = (a = this.formCallbacks.get).onFocus) == null || c.call(a, f, b.elementType);
2204
+ this.formCallbacks.get.onFocus(c, u.elementType);
2216
2205
  break;
2217
2206
  case "BLUR":
2218
- (u = (l = this.formCallbacks.get).onBlur) == null || u.call(l, f, b.elementType);
2207
+ this.formCallbacks.get.onBlur(c, u.elementType);
2219
2208
  break;
2220
2209
  case "CHANGE":
2221
- (p = (d = this.formCallbacks.get).onChange) == null || p.call(d, f, b.elementType, b.errors);
2210
+ this.formCallbacks.get.onChange(c, u.elementType, u.errors);
2222
2211
  break;
2223
2212
  case "LOADED":
2224
- this.eventTargets[f] = s.source, this.internalCallbacks.onCdeLoaded(b);
2213
+ this.eventTargets[c] = s.source, this.internalCallbacks.onCdeLoaded(u);
2225
2214
  break;
2226
2215
  case "LOAD_ERROR":
2227
- this.internalCallbacks.onCdeLoadError(b.message);
2216
+ this.internalCallbacks.onCdeLoadError(u.message);
2228
2217
  break;
2229
2218
  case "VALIDATION_ERROR":
2230
- (m = (y = this.formCallbacks.get).onValidationError) == null || m.call(y, b.elementType, b.errors, f);
2219
+ this.formCallbacks.get.onValidationError(u.elementType, u.errors, c);
2231
2220
  break;
2232
2221
  default:
2233
- console.warn("[form] Unhandled event type:", z);
2222
+ console.warn("[form] Unhandled event type:", l);
2234
2223
  }
2235
2224
  }, this.validateEvent = (s) => s.formId !== this.formId || !s.elementId ? (console.log("[OJS] formId", this.formId, s.formId), console.warn("[form] Ignoring unknown event:", s), !1) : this.nonces.has(s.nonce) ? (console.warn("[form] Ignoring duplicate event:", s), !1) : (this.nonces.add(s.nonce), !0), this.eventTargets = {}, this.nonces = /* @__PURE__ */ new Set(), this.formId = n, this.baseUrl = r, this.formCallbacks = o, this.internalCallbacks = i;
2236
2225
  }
2237
2226
  }
2238
- const Je = (e) => new URL(e).origin;
2239
- async function Ko(e, n) {
2240
- const r = await it({
2227
+ const Ge = (e) => new URL(e).origin;
2228
+ async function Zo(e, n) {
2229
+ const r = await ct({
2241
2230
  iframe: e,
2242
2231
  debug: !1,
2243
2232
  childOrigin: n
2244
- }).promise, o = await Fr(r);
2245
- if (!$r(r, o))
2233
+ }).promise, o = await qr(r);
2234
+ if (!Hr(r, o))
2246
2235
  throw new Error("Got invalid CDE connection object");
2247
2236
  return r;
2248
2237
  }
2249
- class Bo {
2238
+ class Jo {
2250
2239
  constructor() {
2251
2240
  this.connections = /* @__PURE__ */ new Map();
2252
2241
  }
@@ -2263,63 +2252,61 @@ class Bo {
2263
2252
  return this.connections;
2264
2253
  }
2265
2254
  }
2266
- const Zo = (e, n, r) => {
2255
+ const Wo = (e, n, r) => {
2267
2256
  const { stripePR: o } = e;
2268
2257
  o.publisher.subscribe((i) => {
2269
- var s, a;
2270
2258
  if (i.isSuccess) {
2271
- const c = i.loadedValue, l = c.isAvailable && c.availableProviders.applePay, u = c.isAvailable && c.availableProviders.googlePay, d = {
2259
+ const s = i.loadedValue, a = s.isAvailable && s.availableProviders.applePay, c = s.isAvailable && s.availableProviders.googlePay, u = {
2272
2260
  apple_pay: {
2273
2261
  isLoading: !1,
2274
- isAvailable: l,
2275
- startFlow: async (p) => {
2276
- l && We("apple_pay", c, n, r, p);
2262
+ isAvailable: a,
2263
+ startFlow: async (l) => {
2264
+ a && Xe("apple_pay", s, n, r, l);
2277
2265
  }
2278
2266
  },
2279
2267
  google_pay: {
2280
2268
  isLoading: !1,
2281
- isAvailable: u,
2282
- startFlow: async (p) => {
2283
- u && We("google_pay", c, n, r, p);
2269
+ isAvailable: c,
2270
+ startFlow: async (l) => {
2271
+ c && Xe("google_pay", s, n, r, l);
2284
2272
  }
2285
2273
  }
2286
2274
  };
2287
- (a = (s = r.get).onPaymentRequestLoad) == null || a.call(s, d);
2275
+ r.get.onPaymentRequestLoad(u);
2288
2276
  }
2289
2277
  });
2290
- }, We = (e, n, r, o, i) => K.stripePR.run({
2278
+ }, Xe = (e, n, r, o, i) => B.stripePR.run({
2291
2279
  context: r,
2292
- checkoutPaymentMethod: kt(r.checkoutPaymentMethods, e),
2293
- nonCdeFormInputs: je(r.formDiv),
2280
+ checkoutPaymentMethod: jt(r.checkoutPaymentMethods, e),
2281
+ nonCdeFormInputs: Te(r.formDiv),
2294
2282
  formCallbacks: o,
2295
2283
  customParams: { provider: e, overridePaymentRequest: i == null ? void 0 : i.overridePaymentRequest },
2296
2284
  initResult: n
2297
- }), Ge = "The secure form failed to load properly. Please check your internet connection, or try again later.", { log__: U, err__: we } = D("op-form"), q = class Oe {
2285
+ }), Qe = "The secure form failed to load properly. Please check your internet connection, or try again later.", { log__: F, err__: Ce } = D("op-form"), H = class je {
2298
2286
  constructor(n) {
2299
- this.cdeLoadEvent = new ne(), this.anyCdeConn = new ne(), this.context = new ne(), this.initFlows = zo(), this.startFormInit = async () => {
2300
- var r, o, i, s;
2287
+ this.cdeLoadEvent = new ie(), this.anyCdeConn = new ie(), this.context = new ie(), this.initFlows = Vo(), this.startFormInit = async () => {
2301
2288
  try {
2302
- U("Initializing OpenPay form:"), U("├ Waiting for CDE load event...");
2303
- const a = await this.cdeLoadEvent.waitForLoad({
2289
+ F("Initializing OpenPay form:"), F("├ Waiting for CDE load event...");
2290
+ const r = await this.cdeLoadEvent.waitForLoad({
2304
2291
  timeoutSec: 120,
2305
- timeoutErrMsg: Ge
2292
+ timeoutErrMsg: Qe
2306
2293
  });
2307
- U("├ CDE load event received"), U("├ Waiting for CDE connection...");
2308
- const c = await this.anyCdeConn.waitForLoad({
2294
+ F("├ CDE load event received"), F("├ Waiting for CDE connection...");
2295
+ const o = await this.anyCdeConn.waitForLoad({
2309
2296
  timeoutSec: 120,
2310
- timeoutErrMsg: Ge
2297
+ timeoutErrMsg: Qe
2311
2298
  });
2312
- U("├ CDE connection received"), U("├ Creating OJS context, setting up handlers...");
2313
- const l = Oe.buildOjsFlowContext(
2299
+ F("├ CDE connection received"), F("├ Creating OJS context, setting up handlers...");
2300
+ const i = je.buildOjsFlowContext(
2314
2301
  this.config,
2315
- a,
2316
- c,
2302
+ r,
2303
+ o,
2317
2304
  this.getFormDiv()
2318
2305
  );
2319
- this.context.set(l), Zo(this.initFlows, l, this.formCallbacks), U("├ Starting OJS init flows..."), await $o(this.initFlows, l, this.formCallbacks), (o = (r = this.formCallbacks.get).onLoad) == null || o.call(r, a.totalAmountAtoms, a.currency), U("╰ Done initializing OJS flows.");
2320
- } catch (a) {
2321
- const c = J(a);
2322
- we("╰ Error initializing OP form:", c), (s = (i = this.formCallbacks.get).onLoadError) == null || s.call(i, c);
2306
+ this.context.set(i), Wo(this.initFlows, i, this.formCallbacks), F("├ Starting OJS init flows..."), await Ho(this.initFlows, i, this.formCallbacks), this.formCallbacks.get.onLoad(r.totalAmountAtoms, r.currency), F("╰ Done initializing OJS flows.");
2307
+ } catch (r) {
2308
+ const o = W(r);
2309
+ Ce("╰ Error initializing OP form:", o), this.formCallbacks.get.onLoadError(o);
2323
2310
  }
2324
2311
  }, this.setFormHeight = (r) => {
2325
2312
  this.formProperties.height = r, this.registeredElements && Object.values(this.registeredElements).forEach((o) => {
@@ -2331,7 +2318,7 @@ const Zo = (e, n, r) => {
2331
2318
  this.cdeLoadEvent.current.isSuccess || this.cdeLoadEvent.throw(new Error(r), r);
2332
2319
  }, this.createElement = (r, o = {}) => {
2333
2320
  if (!this.config) throw new Error("OpenPay form not initialized");
2334
- const i = er.parse(r), s = document.createElement("iframe"), a = this.buildQueryString(o);
2321
+ const i = nr.parse(r), s = document.createElement("iframe"), a = this.buildQueryString(o);
2335
2322
  s.name = `${i}-element`;
2336
2323
  const c = new URL(`/app/v1/${s.name}/`, this.config.baseUrl);
2337
2324
  return c.search = a.toString(), s.src = c.href, s.style.border = "none", s.style.width = "100%", this.registerIframe(i, s);
@@ -2345,28 +2332,28 @@ const Zo = (e, n, r) => {
2345
2332
  }
2346
2333
  };
2347
2334
  return this.connectToElement({ type: i.type, node: i.node }), this.registeredElements || (this.registeredElements = {
2348
- [V.CARD]: void 0,
2349
- [V.CARD_NUMBER]: void 0,
2350
- [V.CARD_EXPIRY]: void 0,
2351
- [V.CARD_CVC]: void 0
2335
+ [Y.CARD]: void 0,
2336
+ [Y.CARD_NUMBER]: void 0,
2337
+ [Y.CARD_EXPIRY]: void 0,
2338
+ [Y.CARD_CVC]: void 0
2352
2339
  }), this.registeredElements[r] = i, i;
2353
2340
  }, this.buildQueryString = (r) => {
2354
2341
  const o = new URLSearchParams();
2355
- return o.append("referer", this.referrer), o.append("formId", this.formId), r.styles && o.append("styles", Nr(r.styles)), o.append("secureToken", this.config.checkoutSecureToken), o;
2342
+ return o.append("referer", this.referrer), o.append("formId", this.formId), r.styles && o.append("styles", $r(r.styles)), o.append("secureToken", this.config.checkoutSecureToken), o;
2356
2343
  }, this.connectToElement = (r) => {
2357
- Ko(r.node).then((o) => {
2344
+ Zo(r.node).then((o) => {
2358
2345
  this.connectionManager.addConnection(r.type, o), this.anyCdeConn.current.isSuccess || this.anyCdeConn.set(o);
2359
- }).catch((o) => we("[FORM] Error connecting to CDE iframe", o));
2346
+ }).catch((o) => Ce("[FORM] Error connecting to CDE iframe", o));
2360
2347
  }, this.getFormDiv = () => document.querySelector(this.formTarget) ?? document.body, this.submitCard = () => {
2361
2348
  const r = this.context.getValueIfLoadedElse(null);
2362
2349
  if (!r) {
2363
- we("Please wait for the form to finish loading before submitting.");
2350
+ Ce("Please wait for the form to finish loading before submitting.");
2364
2351
  return;
2365
2352
  }
2366
- K.commonCC.run({
2353
+ B.commonCC.run({
2367
2354
  context: r,
2368
- checkoutPaymentMethod: kt(r.checkoutPaymentMethods, "credit_card"),
2369
- nonCdeFormInputs: je(r.formDiv),
2355
+ checkoutPaymentMethod: jt(r.checkoutPaymentMethods, "credit_card"),
2356
+ nonCdeFormInputs: Te(r.formDiv),
2370
2357
  formCallbacks: this.formCallbacks,
2371
2358
  customParams: {
2372
2359
  currentCdeConnections: this.connectionManager.getAllConnections()
@@ -2378,7 +2365,7 @@ const Zo = (e, n, r) => {
2378
2365
  for (const r of Object.values(this.registeredElements ?? {}))
2379
2366
  r && r.node.remove();
2380
2367
  window.removeEventListener("message", this.eventHandler.handleMessage.bind(this.eventHandler));
2381
- }, Oe.assignAsSingleton(this), this.ojsVersion = "0.1.15", this.ojsReleaseVersion = "local_build", this.baseUrl = n.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...n, baseUrl: this.baseUrl }, this.formCallbacks = Vo.fromObject(n), this.registeredElements = null, this.formId = `opjs-form-${window.crypto.randomUUID()}`, this.referrer = window.location.origin, this.formTarget = n.formTarget ?? "body", this.formProperties = { height: "1px" }, this.connectionManager = new Bo(), this.eventHandler = new Yo(this.formId, this.baseUrl, this.formCallbacks, {
2368
+ }, je.assignAsSingleton(this), this.ojsVersion = "0.1.16", this.ojsReleaseVersion = "local_build", this.baseUrl = n.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...n, baseUrl: this.baseUrl }, this.formCallbacks = Ko.fromObject(n), this.registeredElements = null, this.formId = `opjs-form-${window.crypto.randomUUID()}`, this.referrer = window.location.origin, this.formTarget = n.formTarget ?? "body", this.formProperties = { height: "1px" }, this.connectionManager = new Jo(), this.eventHandler = new Bo(this.formId, this.baseUrl, this.formCallbacks, {
2382
2369
  setFormHeight: this.setFormHeight,
2383
2370
  onCdeLoaded: this.onCdeLoaded,
2384
2371
  onCdeLoadError: this.onCdeLoadError
@@ -2388,74 +2375,74 @@ const Zo = (e, n, r) => {
2388
2375
  return this.config.checkoutSecureToken;
2389
2376
  }
2390
2377
  };
2391
- q.ojsFlows = K, q.assignAsSingleton = (e) => {
2392
- if (q.getInstance())
2378
+ H.ojsFlows = B, H.assignAsSingleton = (e) => {
2379
+ if (H.getInstance())
2393
2380
  throw new Error("OpenPay instance already exists. Only one instance is allowed.");
2394
2381
  window.ojs = e;
2395
- }, q.getInstance = () => window.ojs ?? null, q.buildOjsFlowContext = (e, n, r, o) => ({
2396
- baseUrl: new URL(e.baseUrl ?? Vt).origin,
2382
+ }, H.getInstance = () => window.ojs ?? null, H.buildOjsFlowContext = (e, n, r, o) => ({
2383
+ baseUrl: new URL(e.baseUrl ?? Bt).origin,
2397
2384
  formDiv: o,
2398
2385
  elementsSessionId: n.sessionId,
2399
2386
  checkoutPaymentMethods: n.checkoutPaymentMethods,
2400
2387
  anyCdeConnection: r,
2401
2388
  customInitParams: e.customInitParams ?? {}
2402
2389
  });
2403
- let Xe = q;
2404
- const Jo = (e) => {
2405
- const n = ot(e), r = n.current;
2406
- return r.onLoad = T(() => e.onLoad, [e.onLoad]), r.onLoadError = T(() => e.onLoadError, [e.onLoadError]), r.onValidationError = T(() => e.onValidationError, [e.onValidationError]), r.onFocus = T(() => e.onFocus, [e.onFocus]), r.onBlur = T(() => e.onBlur, [e.onBlur]), r.onChange = T(() => e.onChange, [e.onChange]), r.onCheckoutStarted = T(() => e.onCheckoutStarted, [e.onCheckoutStarted]), r.onCheckoutSuccess = T(() => e.onCheckoutSuccess, [e.onCheckoutSuccess]), r.onSetupPaymentMethodSuccess = T(
2390
+ let et = H;
2391
+ const Go = (e) => {
2392
+ const n = at(e), r = n.current;
2393
+ return r.onLoad = j(() => e.onLoad, [e.onLoad]), r.onLoadError = j(() => e.onLoadError, [e.onLoadError]), r.onValidationError = j(() => e.onValidationError, [e.onValidationError]), r.onFocus = j(() => e.onFocus, [e.onFocus]), r.onBlur = j(() => e.onBlur, [e.onBlur]), r.onChange = j(() => e.onChange, [e.onChange]), r.onCheckoutStarted = j(() => e.onCheckoutStarted, [e.onCheckoutStarted]), r.onCheckoutSuccess = j(() => e.onCheckoutSuccess, [e.onCheckoutSuccess]), r.onSetupPaymentMethodSuccess = j(
2407
2394
  () => e.onSetupPaymentMethodSuccess,
2408
2395
  [e.onSetupPaymentMethodSuccess]
2409
- ), r.onCheckoutError = T(() => e.onCheckoutError, [e.onCheckoutError]), r.onPaymentRequestLoad = T(() => e.onPaymentRequestLoad, [e.onPaymentRequestLoad]), n.current;
2410
- }, Wo = t.object({
2396
+ ), r.onCheckoutError = j(() => e.onCheckoutError, [e.onCheckoutError]), r.onPaymentRequestLoad = j(() => e.onPaymentRequestLoad, [e.onPaymentRequestLoad]), n.current;
2397
+ }, Xo = t.object({
2411
2398
  type: t.string(),
2412
2399
  loc: t.array(t.string()),
2413
2400
  msg: t.string(),
2414
2401
  url: t.string()
2415
2402
  });
2416
- t.array(Wo);
2417
- const Go = t.object({
2403
+ t.array(Xo);
2404
+ const Qo = t.object({
2418
2405
  code: t.string(),
2419
2406
  message: t.string(),
2420
2407
  path: t.array(t.string())
2421
2408
  });
2422
- t.array(Go);
2423
- const Xo = (e, n, r) => (...o) => {
2409
+ t.array(Qo);
2410
+ const ei = (e, n, r) => (...o) => {
2424
2411
  try {
2425
2412
  return n(...o);
2426
2413
  } catch (i) {
2427
2414
  r(`[form] Error running callback (${e}):`, i);
2428
2415
  return;
2429
2416
  }
2430
- }, O = t.string().trim().min(1, { message: "Cannot be blank" }), k = t.string().trim().optional(), le = (e) => t.nullable(e.optional());
2431
- var xt = /* @__PURE__ */ ((e) => (e.FIRST_NAME = "firstName", e.LAST_NAME = "lastName", e.EMAIL = "email", e.ZIP_CODE = "zipCode", e.CITY = "city", e.STATE = "state", e.COUNTRY = "country", e.ADDRESS = "address", e.PHONE = "phone", e.PROMOTION_CODE = "promotionCode", e))(xt || {});
2432
- const Qo = t.nativeEnum(xt);
2433
- var Mt = /* @__PURE__ */ ((e) => (e.CARD_NUMBER = "cardNumber", e.CARD_EXPIRY = "cardExpiry", e.CARD_CVC = "cardCvc", e))(Mt || {});
2434
- const Lt = t.nativeEnum(Mt), ei = t.union([Qo, Lt]);
2435
- var Z = /* @__PURE__ */ ((e) => (e.CARD = "card", e.CARD_NUMBER = "card-number", e.CARD_EXPIRY = "card-expiry", e.CARD_CVC = "card-cvc", e))(Z || {});
2436
- t.nativeEnum(Z);
2437
- const he = t.object({
2417
+ }, P = t.string().trim().min(1, { message: "Cannot be blank" }), S = t.string().trim().optional(), me = (e) => t.nullable(e.optional());
2418
+ var Nt = /* @__PURE__ */ ((e) => (e.FIRST_NAME = "firstName", e.LAST_NAME = "lastName", e.EMAIL = "email", e.ZIP_CODE = "zipCode", e.CITY = "city", e.STATE = "state", e.COUNTRY = "country", e.ADDRESS = "address", e.PHONE = "phone", e.PROMOTION_CODE = "promotionCode", e))(Nt || {});
2419
+ const ti = t.nativeEnum(Nt);
2420
+ var Dt = /* @__PURE__ */ ((e) => (e.CARD_NUMBER = "cardNumber", e.CARD_EXPIRY = "cardExpiry", e.CARD_CVC = "cardCvc", e))(Dt || {});
2421
+ const Ut = t.nativeEnum(Dt), ri = t.union([ti, Ut]);
2422
+ var J = /* @__PURE__ */ ((e) => (e.CARD = "card", e.CARD_NUMBER = "card-number", e.CARD_EXPIRY = "card-expiry", e.CARD_CVC = "card-cvc", e))(J || {});
2423
+ t.nativeEnum(J);
2424
+ const ye = t.object({
2438
2425
  provider: t.string(),
2439
- processor_name: le(t.string()),
2440
- metadata: le(t.record(t.string(), t.any()))
2441
- }), ti = t.object({
2426
+ processor_name: me(t.string()),
2427
+ metadata: me(t.record(t.string(), t.any()))
2428
+ }), ni = t.object({
2442
2429
  id: t.string()
2443
2430
  });
2444
2431
  t.object({
2445
- cardNumber: k,
2446
- expiry: k,
2447
- cvc: k
2432
+ cardNumber: S,
2433
+ expiry: S,
2434
+ cvc: S
2448
2435
  });
2449
2436
  t.object({
2450
- backgroundColor: k,
2451
- color: k,
2452
- fontFamily: k,
2453
- fontSize: k,
2454
- fontWeight: k,
2455
- margin: k,
2456
- padding: k,
2457
- letterSpacing: k,
2458
- lineHeight: k
2437
+ backgroundColor: S,
2438
+ color: S,
2439
+ fontFamily: S,
2440
+ fontSize: S,
2441
+ fontWeight: S,
2442
+ margin: S,
2443
+ padding: S,
2444
+ letterSpacing: S,
2445
+ lineHeight: S
2459
2446
  });
2460
2447
  const L = t.enum([
2461
2448
  // Element -> Form
@@ -2478,84 +2465,84 @@ const L = t.enum([
2478
2465
  "TOKENIZE",
2479
2466
  "CHECKOUT",
2480
2467
  "START_PAYMENT_FLOW"
2481
- ]), ri = L.extract(["TOKENIZE_STARTED", "CHECKOUT_STARTED"]), ni = t.object({ type: ri }), oi = L.extract(["BLUR", "FOCUS", "CHANGE"]), ii = t.object({
2482
- type: oi,
2483
- elementType: Lt,
2484
- errors: t.array(t.string()).optional()
2485
- }), si = L.extract(["LOAD_ERROR", "TOKENIZE_ERROR", "CHECKOUT_ERROR"]), ai = t.object({
2468
+ ]), oi = L.extract(["TOKENIZE_STARTED", "CHECKOUT_STARTED"]), ii = t.object({ type: oi }), si = L.extract(["BLUR", "FOCUS", "CHANGE"]), ai = t.object({
2486
2469
  type: si,
2487
- message: O,
2488
- headers: t.record(t.string(), t.string()).optional()
2489
- }), ci = L.extract(["VALIDATION_ERROR"]), li = t.object({
2470
+ elementType: Ut,
2471
+ errors: t.array(t.string()).optional()
2472
+ }), ci = L.extract(["LOAD_ERROR", "TOKENIZE_ERROR", "CHECKOUT_ERROR"]), ui = t.object({
2490
2473
  type: ci,
2491
- elementType: ei,
2474
+ message: P,
2475
+ headers: t.record(t.string(), t.string()).optional()
2476
+ }), li = L.extract(["VALIDATION_ERROR"]), di = t.object({
2477
+ type: li,
2478
+ elementType: ri,
2492
2479
  errors: t.array(t.string())
2493
- }), ui = t.object({
2480
+ }), mi = t.object({
2494
2481
  type: t.literal(L.enum.LAYOUT),
2495
- height: O
2496
- }), di = t.object({
2482
+ height: P
2483
+ }), pi = t.object({
2497
2484
  type: t.literal(L.enum.LOADED),
2498
- sessionId: O,
2485
+ sessionId: P,
2499
2486
  totalAmountAtoms: t.number(),
2500
- currency: k,
2501
- checkoutPaymentMethods: t.array(he)
2502
- }), mi = t.object({
2487
+ currency: S,
2488
+ checkoutPaymentMethods: t.array(ye)
2489
+ }), hi = t.object({
2503
2490
  type: t.literal(L.enum.PAYMENT_FLOW_STARTED),
2504
2491
  nextActionMetadata: t.record(t.string(), t.any()),
2505
2492
  paymentFlowMetadata: t.any().optional(),
2506
2493
  startPFMetadata: t.optional(t.record(t.string(), t.any()))
2507
- }), pi = t.object({
2494
+ }), fi = t.object({
2508
2495
  type: t.literal(L.enum.SETUP_PAYMENT_METHOD_SUCCESS),
2509
2496
  paymentMethodId: t.string()
2510
- }), fe = t.object({
2511
- firstName: O,
2512
- lastName: O,
2513
- email: O,
2514
- zipCode: O,
2515
- country: O,
2516
- promotionCode: k
2517
- }), hi = t.object({
2518
- email: O,
2519
- zipCode: O,
2520
- country: O,
2521
- promotionCode: k
2522
- }), fi = L.extract(["TOKENIZE", "CHECKOUT", "START_PAYMENT_FLOW"]), yi = t.object({
2523
- type: fi,
2524
- sessionId: O,
2525
- checkoutPaymentMethod: he,
2497
+ }), _e = t.object({
2498
+ firstName: P,
2499
+ lastName: P,
2500
+ email: P,
2501
+ zipCode: P,
2502
+ country: P,
2503
+ promotionCode: S
2504
+ }), yi = t.object({
2505
+ email: P,
2506
+ zipCode: P,
2507
+ country: P,
2508
+ promotionCode: S
2509
+ }), _i = L.extract(["TOKENIZE", "CHECKOUT", "START_PAYMENT_FLOW"]), bi = t.object({
2510
+ type: _i,
2511
+ sessionId: P,
2512
+ checkoutPaymentMethod: ye,
2526
2513
  paymentFlowMetadata: t.any().optional(),
2527
2514
  doNotUseLegacyCCFlow: t.boolean().optional(),
2528
- existingCCPMId: k
2529
- }).extend(fe.shape), _i = t.object({
2515
+ existingCCPMId: S
2516
+ }).extend(_e.shape), gi = t.object({
2530
2517
  type: t.literal(L.enum.TOKENIZE_SUCCESS),
2531
2518
  isReadyForCheckout: t.boolean()
2532
- }), bi = t.object({
2519
+ }), vi = t.object({
2533
2520
  type: t.literal(L.enum.CHECKOUT_SUCCESS),
2534
2521
  invoiceUrls: t.array(t.string()),
2535
2522
  subscriptionIds: t.array(t.string()),
2536
2523
  customerId: t.string()
2537
- }), gi = t.discriminatedUnion("type", [
2538
- ni,
2524
+ }), wi = t.discriminatedUnion("type", [
2539
2525
  ii,
2540
2526
  ai,
2541
- li,
2542
2527
  ui,
2543
2528
  di,
2544
- yi,
2545
- _i,
2546
- bi,
2547
2529
  mi,
2548
- pi
2530
+ pi,
2531
+ bi,
2532
+ gi,
2533
+ vi,
2534
+ hi,
2535
+ fi
2549
2536
  ]);
2550
2537
  t.object({
2551
- payload: gi,
2552
- nonce: O,
2553
- formId: O,
2554
- elementId: O
2538
+ payload: wi,
2539
+ nonce: P,
2540
+ formId: P,
2541
+ elementId: P
2555
2542
  });
2556
2543
  t.object({
2557
2544
  amountAtom: t.number(),
2558
- currency: O
2545
+ currency: P
2559
2546
  });
2560
2547
  t.enum(["apple_pay", "google_pay"]);
2561
2548
  t.object({
@@ -2564,38 +2551,38 @@ t.object({
2564
2551
  });
2565
2552
  t.object({
2566
2553
  secure_token: t.string(),
2567
- existing_cc_pm_id: le(t.string())
2554
+ existing_cc_pm_id: me(t.string())
2568
2555
  });
2569
2556
  t.object({
2570
- payment_methods: t.array(ti)
2557
+ payment_methods: t.array(ni)
2571
2558
  });
2572
- const vi = t.object({
2559
+ const Ei = t.object({
2573
2560
  elementType: t.string(),
2574
2561
  errors: t.array(t.string())
2575
2562
  });
2576
2563
  t.object({
2577
2564
  session_id: t.string()
2578
2565
  });
2579
- const wi = t.object({
2566
+ const Ci = t.object({
2580
2567
  success: t.literal(!1),
2581
2568
  error_type: t.literal("validation_error"),
2582
- errors: t.array(vi)
2569
+ errors: t.array(Ei)
2583
2570
  });
2584
2571
  t.discriminatedUnion("success", [
2585
2572
  t.object({ success: t.literal(!0) }),
2586
- wi
2573
+ Ci
2587
2574
  ]);
2588
2575
  t.object({
2589
2576
  session_id: t.string(),
2590
- checkout_payment_method: he,
2591
- non_cde_form_fields: fe,
2577
+ checkout_payment_method: ye,
2578
+ non_cde_form_fields: _e,
2592
2579
  do_not_use_legacy_cc_flow: t.boolean().optional(),
2593
- existing_cc_pm_id: le(t.string())
2580
+ existing_cc_pm_id: me(t.string())
2594
2581
  });
2595
2582
  t.object({
2596
2583
  session_id: t.string(),
2597
- checkout_payment_method: he,
2598
- non_cde_form_fields: fe
2584
+ checkout_payment_method: ye,
2585
+ non_cde_form_fields: _e
2599
2586
  });
2600
2587
  t.object({
2601
2588
  status: t.enum([
@@ -2621,7 +2608,7 @@ t.object({
2621
2608
  client_secret: t.string(),
2622
2609
  stripe_pk: t.string()
2623
2610
  });
2624
- const Ei = (e) => JSON.stringify(e), v = (e) => t.nullable(e.optional());
2611
+ const Si = (e) => JSON.stringify(e), g = (e) => t.nullable(e.optional());
2625
2612
  t.string().trim().min(1, { message: "Cannot be blank" });
2626
2613
  t.object({
2627
2614
  cde_response_type: t.literal("error"),
@@ -2629,90 +2616,90 @@ t.object({
2629
2616
  headers: t.record(t.string(), t.string()).optional()
2630
2617
  });
2631
2618
  t.enum(["usd", "brl"]);
2632
- const Dt = t.object({
2619
+ const Ft = t.object({
2633
2620
  name: t.string(),
2634
- amount_atom_off: v(t.number()),
2635
- percent_off: v(t.number()),
2636
- currency: v(t.string()),
2621
+ amount_atom_off: g(t.number()),
2622
+ percent_off: g(t.number()),
2623
+ currency: g(t.string()),
2637
2624
  duration: t.string(),
2638
- duration_in_months: v(t.number())
2639
- }), Nt = t.object({
2625
+ duration_in_months: g(t.number())
2626
+ }), $t = t.object({
2640
2627
  amount_subtotal_atom: t.number().int(),
2641
2628
  amount_total_atom: t.number().int(),
2642
2629
  currency: t.string(),
2643
- description: v(t.string()),
2630
+ description: g(t.string()),
2644
2631
  price_id: t.string(),
2645
- billing_interval: v(t.string()),
2646
- billing_interval_count: v(t.number().int()),
2632
+ billing_interval: g(t.string()),
2633
+ billing_interval_count: g(t.number().int()),
2647
2634
  quantity: t.number().int()
2648
- }), Ci = t.record(t.string(), t.any()), Si = t.object({
2635
+ }), ki = t.record(t.string(), t.any()), Pi = t.object({
2649
2636
  name: t.string(),
2650
- settings: v(Ci)
2651
- }), ee = t.object({
2637
+ settings: g(ki)
2638
+ }), te = t.object({
2652
2639
  provider: t.string(),
2653
- processor_name: v(t.string()),
2654
- metadata: v(t.record(t.string(), t.any()))
2655
- }), ki = t.object({
2640
+ processor_name: g(t.string()),
2641
+ metadata: g(t.record(t.string(), t.any()))
2642
+ }), Oi = t.object({
2656
2643
  quantity: t.number()
2657
- }), Pi = t.object({
2658
- id: v(t.string()),
2659
- billing_interval: v(t.string()),
2660
- billing_interval_count: v(t.number().int()),
2661
- subscription_items: t.array(ki),
2662
- trial_start: v(t.string()),
2663
- trial_end: v(t.string())
2664
- }), Ut = t.object({
2644
+ }), ji = t.object({
2645
+ id: g(t.string()),
2646
+ billing_interval: g(t.string()),
2647
+ billing_interval_count: g(t.number().int()),
2648
+ subscription_items: t.array(Oi),
2649
+ trial_start: g(t.string()),
2650
+ trial_end: g(t.string())
2651
+ }), zt = t.object({
2665
2652
  amount_atom: t.number()
2666
- }), Oi = t.object({
2653
+ }), Ti = t.object({
2667
2654
  amount_atom: t.number(),
2668
2655
  amount_atom_considering_discount_applied: t.number(),
2669
2656
  currency: t.string(),
2670
- discount_amount_atoms: t.array(Ut),
2657
+ discount_amount_atoms: t.array(zt),
2671
2658
  subscription_item_id: t.string()
2672
- }), ji = t.object({
2673
- coupon: Dt
2674
- }), Ti = t.object({
2659
+ }), Ri = t.object({
2660
+ coupon: Ft
2661
+ }), Ii = t.object({
2675
2662
  currency: t.string(),
2676
- discounts: t.array(ji),
2677
- hosted_invoice_url: v(t.string()),
2678
- lines: t.array(Oi),
2663
+ discounts: t.array(Ri),
2664
+ hosted_invoice_url: g(t.string()),
2665
+ lines: t.array(Ti),
2679
2666
  remaining_amount_atom: t.number(),
2680
2667
  tax_amount_atom: t.number(),
2681
2668
  total_amount_atom: t.number(),
2682
- total_discount_amount_atoms: t.array(Ut)
2683
- }), Qe = t.object({
2684
- created: t.array(Pi),
2685
- invoices: t.array(Ti)
2686
- }), Ri = t.object({
2687
- preview: Qe,
2688
- preview_post_trial: v(Qe),
2689
- coupons: t.array(Dt)
2690
- }), et = t.object({
2669
+ total_discount_amount_atoms: t.array(zt)
2670
+ }), tt = t.object({
2671
+ created: t.array(ji),
2672
+ invoices: t.array(Ii)
2673
+ }), Ai = t.object({
2674
+ preview: tt,
2675
+ preview_post_trial: g(tt),
2676
+ coupons: t.array(Ft)
2677
+ }), rt = t.object({
2691
2678
  status: t.literal("open"),
2692
2679
  token: t.string(),
2693
- email: v(t.string()),
2694
- line_items: t.array(Nt),
2680
+ email: g(t.string()),
2681
+ line_items: t.array($t),
2695
2682
  amount_subtotal_atom: t.number().int(),
2696
2683
  amount_total_atom: t.number().int(),
2697
- brand: Si,
2698
- subs_preview: v(Ri),
2684
+ brand: Pi,
2685
+ subs_preview: g(Ai),
2699
2686
  // Null in setup mode
2700
- methods_available: t.array(ee)
2701
- }), Ii = t.discriminatedUnion("mode", [
2687
+ methods_available: t.array(te)
2688
+ }), xi = t.discriminatedUnion("mode", [
2702
2689
  t.object({
2703
2690
  mode: t.literal("setup"),
2704
2691
  currency: t.nullable(t.undefined())
2705
- }).extend(et.shape),
2692
+ }).extend(rt.shape),
2706
2693
  t.object({
2707
2694
  mode: t.enum(["payment", "subscription"]),
2708
2695
  currency: t.string()
2709
- }).extend(et.shape)
2710
- ]), Ai = t.object({
2696
+ }).extend(rt.shape)
2697
+ ]), Mi = t.object({
2711
2698
  status: t.literal("complete")
2712
- }), xi = t.object({
2699
+ }), Li = t.object({
2713
2700
  status: t.literal("expired")
2714
2701
  });
2715
- t.union([Ii, Ai, xi]);
2702
+ t.union([xi, Mi, Li]);
2716
2703
  t.object({
2717
2704
  logo: t.string(),
2718
2705
  icon: t.string(),
@@ -2731,10 +2718,10 @@ t.object({
2731
2718
  customer_email: t.string(),
2732
2719
  customer_zip_code: t.string(),
2733
2720
  customer_country: t.string(),
2734
- line_items: t.array(Nt),
2721
+ line_items: t.array($t),
2735
2722
  total_amount_atom: t.number().int(),
2736
2723
  cancel_at_end: t.boolean(),
2737
- checkout_payment_method: ee,
2724
+ checkout_payment_method: te,
2738
2725
  promotion_code: t.string().optional(),
2739
2726
  do_not_use_legacy_cc_flow: t.boolean().optional()
2740
2727
  });
@@ -2745,18 +2732,18 @@ t.object({
2745
2732
  id: t.string(),
2746
2733
  return_url: t.string()
2747
2734
  });
2748
- const Mi = t.object({
2735
+ const Ni = t.object({
2749
2736
  type: t.string(),
2750
2737
  loc: t.array(t.string()),
2751
2738
  msg: t.string(),
2752
2739
  url: t.string()
2753
2740
  });
2754
- t.array(Mi);
2741
+ t.array(Ni);
2755
2742
  t.object({
2756
2743
  new_customer_email: t.string().optional(),
2757
2744
  new_customer_address: t.record(t.string(), t.any()).optional(),
2758
2745
  payment_provider: t.string(),
2759
- checkout_payment_method: ee,
2746
+ checkout_payment_method: te,
2760
2747
  existing_cc_pm_id: t.string().optional(),
2761
2748
  their_existing_pm_id: t.string().optional()
2762
2749
  });
@@ -2764,29 +2751,29 @@ t.object({
2764
2751
  required_user_actions: t.array(t.record(t.string(), t.any()))
2765
2752
  });
2766
2753
  t.object({
2767
- fields: hi,
2768
- checkoutPaymentMethod: ee
2754
+ fields: yi,
2755
+ checkoutPaymentMethod: te
2769
2756
  });
2770
2757
  t.object({
2771
2758
  session_id: t.string(),
2772
- non_cde_form_fields: fe,
2773
- checkout_payment_method: ee
2759
+ non_cde_form_fields: _e,
2760
+ checkout_payment_method: te
2774
2761
  });
2775
2762
  t.object({
2776
2763
  required_user_actions: t.array(t.record(t.string(), t.any())),
2777
2764
  cc_pm_id: t.string()
2778
2765
  });
2779
2766
  t.record(t.any());
2780
- function Li(e, n) {
2767
+ function Di(e, n) {
2781
2768
  var r = Object.setPrototypeOf;
2782
2769
  r ? r(e, n) : e.__proto__ = n;
2783
2770
  }
2784
- function Di(e, n) {
2771
+ function Ui(e, n) {
2785
2772
  n === void 0 && (n = e.constructor);
2786
2773
  var r = Error.captureStackTrace;
2787
2774
  r && r(e, n);
2788
2775
  }
2789
- var Ni = /* @__PURE__ */ function() {
2776
+ var Fi = /* @__PURE__ */ function() {
2790
2777
  var e = function(r, o) {
2791
2778
  return e = Object.setPrototypeOf || {
2792
2779
  __proto__: []
@@ -2807,22 +2794,22 @@ var Ni = /* @__PURE__ */ function() {
2807
2794
  };
2808
2795
  }();
2809
2796
  (function(e) {
2810
- Ni(n, e);
2797
+ Fi(n, e);
2811
2798
  function n(r, o) {
2812
2799
  var i = this.constructor, s = e.call(this, r, o) || this;
2813
2800
  return Object.defineProperty(s, "name", {
2814
2801
  value: i.name,
2815
2802
  enumerable: !1,
2816
2803
  configurable: !0
2817
- }), Li(s, i.prototype), Di(s), s;
2804
+ }), Di(s, i.prototype), Ui(s), s;
2818
2805
  }
2819
2806
  return n;
2820
2807
  })(Error);
2821
- const Ui = (e) => {
2808
+ const $i = (e) => {
2822
2809
  const n = (...o) => {
2823
- window.console.log(`${F.green.bold("ojs/")}${F.bold.gray(`${e}`)} `, ...o);
2810
+ window.console.log(`${$.green.bold("ojs/")}${$.bold.gray(`${e}`)} `, ...o);
2824
2811
  }, r = (...o) => {
2825
- window.console.error(`${F.red.bold("ojs/")}${F.bold.gray(`${e}`)} `, ...o);
2812
+ window.console.error(`${$.red.bold("ojs/")}${$.bold.gray(`${e}`)} `, ...o);
2826
2813
  };
2827
2814
  return {
2828
2815
  log: n,
@@ -2850,7 +2837,7 @@ t.object({
2850
2837
  stripe_pk: t.string()
2851
2838
  })
2852
2839
  });
2853
- const tt = {
2840
+ const nt = {
2854
2841
  isLoading: !0,
2855
2842
  isAvailable: !1,
2856
2843
  startFlow: async () => {
@@ -2860,7 +2847,7 @@ const tt = {
2860
2847
  and ".isAvailable" to know if a payment request is available.`
2861
2848
  );
2862
2849
  }
2863
- }, { err__: Fi } = Ui("form-callbacks"), I = t.function().optional(), $i = t.object({
2850
+ }, { err__: zi } = $i("form-callbacks"), I = t.function().optional(), ot = t.object({
2864
2851
  onFocus: I,
2865
2852
  onBlur: I,
2866
2853
  onChange: I,
@@ -2872,15 +2859,14 @@ const tt = {
2872
2859
  onSetupPaymentMethodSuccess: I,
2873
2860
  onCheckoutError: I,
2874
2861
  onPaymentRequestLoad: I
2875
- }), ue = class ue {
2862
+ }), N = class N {
2876
2863
  constructor() {
2877
- this._callbacks = {}, this.setCallbacks = (n) => {
2878
- this._callbacks = {}, Object.entries(n).forEach(([r, o]) => {
2879
- const i = Xo(r, o ?? (() => {
2880
- }), Fi);
2864
+ this.setCallbacks = (n) => {
2865
+ this._callbacks = N.createEmptyCallbacks(), Object.entries(n).forEach(([r, o]) => {
2866
+ const i = ei(r, o ?? N.NOOP, zi);
2881
2867
  this._callbacks[r] = i;
2882
2868
  });
2883
- };
2869
+ }, this._callbacks = N.createEmptyCallbacks();
2884
2870
  }
2885
2871
  /**
2886
2872
  * Returns a read-only version of the callbacks object.
@@ -2889,48 +2875,54 @@ const tt = {
2889
2875
  return { ...this._callbacks };
2890
2876
  }
2891
2877
  };
2892
- ue.fromObject = (n) => {
2893
- const r = new ue();
2894
- return r.setCallbacks($i.parse(n)), r;
2878
+ N.NOOP = () => {
2879
+ }, N.createEmptyCallbacks = () => {
2880
+ const n = {};
2881
+ return Object.keys(ot.keyof().enum).forEach((r) => {
2882
+ n[r] = N.NOOP;
2883
+ }), n;
2884
+ }, N.fromObject = (n) => {
2885
+ const r = new N();
2886
+ return r.setCallbacks(ot.parse(n)), r;
2895
2887
  };
2896
- let rt = ue;
2897
- const zi = (e) => {
2898
- const [n, r] = H({
2899
- apple_pay: tt,
2900
- google_pay: tt
2901
- }), o = qt(
2888
+ let it = N;
2889
+ const qi = (e) => {
2890
+ const [n, r] = V({
2891
+ apple_pay: nt,
2892
+ google_pay: nt
2893
+ }), o = Yt(
2902
2894
  (i) => {
2903
2895
  r(i), e == null || e(i);
2904
2896
  },
2905
2897
  [e]
2906
2898
  );
2907
2899
  return { paymentRequests: n, overridenOnPaymentRequestLoad: o };
2908
- }, nt = "op_ojs_form", Gi = (e) => {
2909
- const [n, r] = H(), [o, i] = H(null), { paymentRequests: s, overridenOnPaymentRequestLoad: a } = zi(e.onPaymentRequestLoad), [c, l] = H(!1), [u, d] = H(null), p = Jo({
2900
+ }, st = "op_ojs_form", Gi = (e) => {
2901
+ const [n, r] = V(), [o, i] = V(null), { paymentRequests: s, overridenOnPaymentRequestLoad: a } = qi(e.onPaymentRequestLoad), [c, u] = V(!1), [l, m] = V(null), h = Go({
2910
2902
  ...e,
2911
2903
  onPaymentRequestLoad: a,
2912
- onLoad: (m, h) => {
2904
+ onLoad: (d, p) => {
2913
2905
  var f;
2914
- l(!0), (f = e.onLoad) == null || f.call(e, m, h);
2906
+ u(!0), (f = e.onLoad) == null || f.call(e, d, p);
2915
2907
  }
2916
2908
  });
2917
- if (Ee(() => {
2909
+ if (Se(() => {
2918
2910
  if (n) return;
2919
- const m = Xe.getInstance() ?? new Xe({
2911
+ const d = et.getInstance() ?? new et({
2920
2912
  checkoutSecureToken: e.checkoutSecureToken,
2921
- formTarget: `#${nt}`,
2913
+ formTarget: `#${st}`,
2922
2914
  baseUrl: e.baseUrl,
2923
2915
  customInitParams: e.customInitParams,
2924
- ...p
2916
+ ...h
2925
2917
  });
2926
- r(m);
2927
- const h = qi(m);
2928
- i(h), m.initFlows.stripeLink.publisher.subscribe((f) => {
2929
- f.isSuccess && f.loadedValue.isAvailable && d(f.loadedValue.controller);
2918
+ r(d);
2919
+ const p = Hi(d);
2920
+ i(p), d.initFlows.stripeLink.publisher.subscribe((f) => {
2921
+ f.isSuccess && f.loadedValue.isAvailable && m(f.loadedValue.controller);
2930
2922
  });
2931
2923
  }, []), !n)
2932
- return /* @__PURE__ */ A(be, {});
2933
- const y = {
2924
+ return /* @__PURE__ */ A(ve, {});
2925
+ const _ = {
2934
2926
  submit: n.submitCard,
2935
2927
  applePay: s.apple_pay,
2936
2928
  googlePay: s.google_pay,
@@ -2941,47 +2933,47 @@ const zi = (e) => {
2941
2933
  isLoading: !1,
2942
2934
  error: null
2943
2935
  },
2944
- stripeLink: u
2936
+ stripeLink: l
2945
2937
  };
2946
- return /* @__PURE__ */ A(be, { children: o ? /* @__PURE__ */ A(st.Provider, { value: o, children: /* @__PURE__ */ A("div", { id: nt, className: e.className, children: e.children(y) }) }) : /* @__PURE__ */ A(be, {}) });
2947
- }, qi = (e) => ({
2938
+ return /* @__PURE__ */ A(ve, { children: o ? /* @__PURE__ */ A(ut.Provider, { value: o, children: /* @__PURE__ */ A("div", { id: st, className: e.className, children: e.children(_) }) }) : /* @__PURE__ */ A(ve, {}) });
2939
+ }, Hi = (e) => ({
2948
2940
  formId: e.formId,
2949
2941
  formHeight: e.formProperties.height,
2950
2942
  referrer: e.referrer,
2951
2943
  checkoutSecureToken: e.checkoutSecureToken,
2952
2944
  registerIframe: e.registerIframe,
2953
2945
  baseUrl: e.baseUrl
2954
- }), ye = (e) => {
2955
- const { elementType: n, styles: r } = e, { formId: o, referrer: i, formHeight: s, checkoutSecureToken: a, registerIframe: c, baseUrl: l } = Ht(), u = n.toLowerCase(), [d, p] = H(!1), y = ot(null), m = T(() => r ? Ei(r) : "", [r]), h = T(() => ({
2946
+ }), be = (e) => {
2947
+ const { elementType: n, styles: r } = e, { formId: o, referrer: i, formHeight: s, checkoutSecureToken: a, registerIframe: c, baseUrl: u } = Kt(), l = n.toLowerCase(), [m, h] = V(!1), _ = at(null), d = j(() => r ? Si(r) : "", [r]), p = j(() => ({
2956
2948
  border: "none",
2957
2949
  width: "100%",
2958
2950
  height: s
2959
- }), [s]), f = T(() => {
2951
+ }), [s]), f = j(() => {
2960
2952
  if (!a || !i) return "";
2961
- const b = new URLSearchParams();
2962
- return b.append("referer", i), b.append("styles", m), b.append("formId", o), b.append("secureToken", a), b.toString();
2963
- }, [m, o, i, a]);
2964
- return Ee(() => p(!0), []), Ee(() => {
2965
- !y.current || !d || c(n, y.current);
2966
- }, [d]), a ? /* @__PURE__ */ A(
2953
+ const T = new URLSearchParams();
2954
+ return T.append("referer", i), T.append("styles", d), T.append("formId", o), T.append("secureToken", a), T.toString();
2955
+ }, [d, o, i, a]);
2956
+ return Se(() => h(!0), []), Se(() => {
2957
+ !_.current || !m || c(n, _.current);
2958
+ }, [m]), a ? /* @__PURE__ */ A(
2967
2959
  "iframe",
2968
2960
  {
2969
- id: `ojs-${u}-element`,
2970
- name: `${u}-element`,
2961
+ id: `ojs-${l}-element`,
2962
+ name: `${l}-element`,
2971
2963
  className: "ojs-iframe",
2972
- src: `${l}/app/v1/${u}-element/?${f}`,
2973
- style: h,
2974
- ref: y
2964
+ src: `${u}/app/v1/${l}-element/?${f}`,
2965
+ style: p,
2966
+ ref: _
2975
2967
  }
2976
2968
  ) : (console.error("[form] Cannot render partially initialized frame"), /* @__PURE__ */ A("div", {}));
2977
- }, Xi = ({ styles: e }) => /* @__PURE__ */ A(ye, { styles: e, elementType: Z.CARD_CVC }), Qi = ({ styles: e }) => /* @__PURE__ */ A(ye, { styles: e, elementType: Z.CARD }), es = ({ styles: e }) => /* @__PURE__ */ A(ye, { styles: e, elementType: Z.CARD_EXPIRY }), ts = ({ styles: e }) => /* @__PURE__ */ A(ye, { styles: e, elementType: Z.CARD_NUMBER });
2969
+ }, Xi = ({ styles: e }) => /* @__PURE__ */ A(be, { styles: e, elementType: J.CARD_CVC }), Qi = ({ styles: e }) => /* @__PURE__ */ A(be, { styles: e, elementType: J.CARD }), es = ({ styles: e }) => /* @__PURE__ */ A(be, { styles: e, elementType: J.CARD_EXPIRY }), ts = ({ styles: e }) => /* @__PURE__ */ A(be, { styles: e, elementType: J.CARD_NUMBER });
2978
2970
  export {
2979
2971
  Xi as CardCvcElement,
2980
2972
  Qi as CardElement,
2981
2973
  es as CardExpiryElement,
2982
2974
  ts as CardNumberElement,
2983
2975
  Gi as ElementsForm,
2984
- xt as FieldName,
2985
- Ht as useOpenPayElements
2976
+ Nt as FieldName,
2977
+ Kt as useOpenPayElements
2986
2978
  };
2987
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXguanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVJlZiwgdXNlTWVtbywgdXNlU3RhdGUsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3gsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QvanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHsgeiBhcyB6JDEgfSBmcm9tICd6b2QnO1xuaW1wb3J0ICd1dWlkJztcbmltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCBZIGZyb20gJ2NoYWxrJztcblxuY29uc3QgRWxlbWVudHNDb250ZXh0ID0gY3JlYXRlQ29udGV4dCh7XG4gIGZvcm1JZDogXCJcIixcbiAgZm9ybUhlaWdodDogXCJcIixcbiAgcmVmZXJyZXI6IHZvaWQgMCxcbiAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdm9pZCAwLFxuICByZWdpc3RlcklmcmFtZTogKCkgPT4ge1xuICB9LFxuICBiYXNlVXJsOiBcIlwiXG59KTtcblxuY29uc3QgdXNlT3BlblBheUVsZW1lbnRzID0gKCkgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChFbGVtZW50c0NvbnRleHQpO1xuICBpZiAoIWNvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1c2VPcGVuUGF5RWxlbWVudHMgbXVzdCBiZSB1c2VkIHdpdGhpbiBhbiBPcGVuUGF5RWxlbWVudHNQcm92aWRlclwiKTtcbiAgfVxuICByZXR1cm4gY29udGV4dDtcbn07XG5cbmNvbnN0IGR0ID0gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiLCBmdCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGxvYzogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIG1zZzogeiQxLnN0cmluZygpLFxuICB1cmw6IHokMS5zdHJpbmcoKVxufSksIHB0ID0geiQxLmFycmF5KGZ0KSwgaHQgPSB6JDEub2JqZWN0KHtcbiAgY29kZTogeiQxLnN0cmluZygpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIHBhdGg6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KSwgbXQgPSB6JDEuYXJyYXkoaHQpLCB5dCA9IHtcbiAgXCJmYWlsZWQgdG8gZmV0Y2hcIjogXCJDb25uZWN0aW9uIGVycm9yOiBwbGVhc2UgZG91YmxlIGNoZWNrIGlmIHlvdSBhcmUgY29ubmVjdGVkIHRvIHRoZSBpbnRlcm5ldCwgdGhlbiB0cnkgYWdhaW5cIlxufSwgYWUgPSAodCkgPT4ge1xuICBjb25zdCByID0gdC50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgcmV0dXJuIHl0W3JdID8/IHQ7XG59LCBfdCA9ICh0KSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHR5cGVvZiBKU09OLnBhcnNlKHQpID09IFwib2JqZWN0XCI7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAhMTtcbiAgfVxufSwgZ3QgPSAodCkgPT4gdC5sZW5ndGggPT09IDEgPyBhZSh0WzBdLm1zZykgOiBgUGxlYXNlIGZpeCB0aGUgZm9sbG93aW5nIGVycm9yczpcbiR7dC5tYXAoKGUpID0+IGDigKIgJHthZShlLm1zZyl9YCkuam9pbihgXG5gKX1gLCBidCA9ICh0KSA9PiBgRW5jb3VudGVyZWQgdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4ke3QubWFwKChlKSA9PiBgLSAke2UucGF0aC5qb2luKFwiL1wiKX06ICR7ZS5tZXNzYWdlfWApLmpvaW4oYFxuYCl9YCwgJCA9ICh0KSA9PiB7XG4gIGlmICh0IGluc3RhbmNlb2YgRXJyb3IpXG4gICAgaWYgKF90KHQubWVzc2FnZSkpIHtcbiAgICAgIGNvbnN0IHIgPSBKU09OLnBhcnNlKHQubWVzc2FnZSk7XG4gICAgICByZXR1cm4gcHQuc2FmZVBhcnNlKHIpLnN1Y2Nlc3MgPyBndChyKSA6IG10LnNhZmVQYXJzZShyKS5zdWNjZXNzID8gYnQocikgOiAoY29uc29sZS53YXJuKGBFbmNvdW50ZXJlZCB1bmtub3duIHN0cmluZ2lmaWVkIEpTT04gb2JqZWN0OlxuJHt0Lm1lc3NhZ2V9YCksIHQubWVzc2FnZSk7XG4gICAgfSBlbHNlXG4gICAgICByZXR1cm4gYWUodC5tZXNzYWdlKTtcbiAgaWYgKHR5cGVvZiB0ID09IFwib2JqZWN0XCIpXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0KTtcbiAgICB9IGNhdGNoIChyKSB7XG4gICAgICByZXR1cm4gciArIFwiXCI7XG4gICAgfVxuICBlbHNlXG4gICAgcmV0dXJuIHQgKyBcIlwiO1xufSwgdnQgPSAodCwgciwgZSkgPT4gKC4uLm4pID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gciguLi5uKTtcbiAgfSBjYXRjaCAoaSkge1xuICAgIGUoYFtmb3JtXSBFcnJvciBydW5uaW5nIGNhbGxiYWNrICgke3R9KTpgLCBpKTtcbiAgICByZXR1cm47XG4gIH1cbn0sIFMgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IFwiQ2Fubm90IGJlIGJsYW5rXCIgfSksIEUgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm9wdGlvbmFsKCksIFogPSAodCkgPT4geiQxLm51bGxhYmxlKHQub3B0aW9uYWwoKSk7XG52YXIgeSA9IC8qIEBfX1BVUkVfXyAqLyAoKHQpID0+ICh0LkZJUlNUX05BTUUgPSBcImZpcnN0TmFtZVwiLCB0LkxBU1RfTkFNRSA9IFwibGFzdE5hbWVcIiwgdC5FTUFJTCA9IFwiZW1haWxcIiwgdC5aSVBfQ09ERSA9IFwiemlwQ29kZVwiLCB0LkNJVFkgPSBcImNpdHlcIiwgdC5TVEFURSA9IFwic3RhdGVcIiwgdC5DT1VOVFJZID0gXCJjb3VudHJ5XCIsIHQuQUREUkVTUyA9IFwiYWRkcmVzc1wiLCB0LlBIT05FID0gXCJwaG9uZVwiLCB0LlBST01PVElPTl9DT0RFID0gXCJwcm9tb3Rpb25Db2RlXCIsIHQpKSh5IHx8IHt9KTtcbmNvbnN0IHhlID0geiQxLm5hdGl2ZUVudW0oeSk7XG52YXIgTmUgPSAvKiBAX19QVVJFX18gKi8gKCh0KSA9PiAodC5DQVJEX05VTUJFUiA9IFwiY2FyZE51bWJlclwiLCB0LkNBUkRfRVhQSVJZID0gXCJjYXJkRXhwaXJ5XCIsIHQuQ0FSRF9DVkMgPSBcImNhcmRDdmNcIiwgdCkpKE5lIHx8IHt9KTtcbmNvbnN0IFVlID0geiQxLm5hdGl2ZUVudW0oTmUpLCAkZSA9IHokMS51bmlvbihbeGUsIFVlXSk7XG52YXIgRCA9IC8qIEBfX1BVUkVfXyAqLyAoKHQpID0+ICh0LkNBUkQgPSBcImNhcmRcIiwgdC5DQVJEX05VTUJFUiA9IFwiY2FyZC1udW1iZXJcIiwgdC5DQVJEX0VYUElSWSA9IFwiY2FyZC1leHBpcnlcIiwgdC5DQVJEX0NWQyA9IFwiY2FyZC1jdmNcIiwgdCkpKEQgfHwge30pO1xuY29uc3Qgd3QgPSB6JDEubmF0aXZlRW51bShEKSwgdGUgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IFooeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IFooeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KSwgRXQgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgY2FyZE51bWJlcjogRSxcbiAgZXhwaXJ5OiBFLFxuICBjdmM6IEVcbn0pO1xueiQxLm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogRSxcbiAgY29sb3I6IEUsXG4gIGZvbnRGYW1pbHk6IEUsXG4gIGZvbnRTaXplOiBFLFxuICBmb250V2VpZ2h0OiBFLFxuICBtYXJnaW46IEUsXG4gIHBhZGRpbmc6IEUsXG4gIGxldHRlclNwYWNpbmc6IEUsXG4gIGxpbmVIZWlnaHQ6IEVcbn0pO1xuY29uc3QgSSA9IHokMS5lbnVtKFtcbiAgLy8gRWxlbWVudCAtPiBGb3JtXG4gIFwiTEFZT1VUXCIsXG4gIFwiTE9BREVEXCIsXG4gIFwiQkxVUlwiLFxuICBcIkZPQ1VTXCIsXG4gIFwiQ0hBTkdFXCIsXG4gIFwiVE9LRU5JWkVfU1RBUlRFRFwiLFxuICBcIkNIRUNLT1VUX1NUQVJURURcIixcbiAgXCJQQVlNRU5UX0ZMT1dfU1RBUlRFRFwiLFxuICBcIlRPS0VOSVpFX1NVQ0NFU1NcIixcbiAgXCJDSEVDS09VVF9TVUNDRVNTXCIsXG4gIFwiTE9BRF9FUlJPUlwiLFxuICBcIlZBTElEQVRJT05fRVJST1JcIixcbiAgXCJUT0tFTklaRV9FUlJPUlwiLFxuICBcIkNIRUNLT1VUX0VSUk9SXCIsXG4gIFwiU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTU1wiLFxuICAvLyBGb3JtIC0+IEVsZW1lbnRcbiAgXCJUT0tFTklaRVwiLFxuICBcIkNIRUNLT1VUXCIsXG4gIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJcbl0pLCBTdCA9IEkuZXh0cmFjdChbXCJUT0tFTklaRV9TVEFSVEVEXCIsIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiXSksIEN0ID0geiQxLm9iamVjdCh7IHR5cGU6IFN0IH0pLCBrdCA9IEkuZXh0cmFjdChbXCJCTFVSXCIsIFwiRk9DVVNcIiwgXCJDSEFOR0VcIl0pLCBQdCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBrdCxcbiAgZWxlbWVudFR5cGU6IFVlLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pLCBJdCA9IEkuZXh0cmFjdChbXCJMT0FEX0VSUk9SXCIsIFwiVE9LRU5JWkVfRVJST1JcIiwgXCJDSEVDS09VVF9FUlJPUlwiXSksIE90ID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IEl0LFxuICBtZXNzYWdlOiBTLFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KSwgQXQgPSBJLmV4dHJhY3QoW1wiVkFMSURBVElPTl9FUlJPUlwiXSksIFJ0ID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IEF0LFxuICBlbGVtZW50VHlwZTogJGUsXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pLCBUdCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChJLmVudW0uTEFZT1VUKSxcbiAgaGVpZ2h0OiBTXG59KSwganQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoSS5lbnVtLkxPQURFRCksXG4gIHNlc3Npb25JZDogUyxcbiAgdG90YWxBbW91bnRBdG9tczogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogRSxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogeiQxLmFycmF5KHRlKVxufSksIE10ID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEkuZW51bS5QQVlNRU5UX0ZMT1dfU1RBUlRFRCksXG4gIG5leHRBY3Rpb25NZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBzdGFydFBGTWV0YWRhdGE6IHokMS5vcHRpb25hbCh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCBMdCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChJLmVudW0uU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTUyksXG4gIHBheW1lbnRNZXRob2RJZDogeiQxLnN0cmluZygpXG59KSwgViA9IHokMS5vYmplY3Qoe1xuICBmaXJzdE5hbWU6IFMsXG4gIGxhc3ROYW1lOiBTLFxuICBlbWFpbDogUyxcbiAgemlwQ29kZTogUyxcbiAgY291bnRyeTogUyxcbiAgcHJvbW90aW9uQ29kZTogRVxufSksIEZ0ID0geiQxLm9iamVjdCh7XG4gIGVtYWlsOiBTLFxuICB6aXBDb2RlOiBTLFxuICBjb3VudHJ5OiBTLFxuICBwcm9tb3Rpb25Db2RlOiBFXG59KSwgRHQgPSBJLmV4dHJhY3QoW1wiVE9LRU5JWkVcIiwgXCJDSEVDS09VVFwiLCBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXSksIHh0ID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IER0LFxuICBzZXNzaW9uSWQ6IFMsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdGUsXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBkb05vdFVzZUxlZ2FjeUNDRmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ0NDUE1JZDogRVxufSkuZXh0ZW5kKFYuc2hhcGUpLCBOdCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChJLmVudW0uVE9LRU5JWkVfU1VDQ0VTUyksXG4gIGlzUmVhZHlGb3JDaGVja291dDogeiQxLmJvb2xlYW4oKVxufSksIFV0ID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEkuZW51bS5DSEVDS09VVF9TVUNDRVNTKSxcbiAgaW52b2ljZVVybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25JZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcklkOiB6JDEuc3RyaW5nKClcbn0pLCAkdCA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgQ3QsXG4gIFB0LFxuICBPdCxcbiAgUnQsXG4gIFR0LFxuICBqdCxcbiAgeHQsXG4gIE50LFxuICBVdCxcbiAgTXQsXG4gIEx0XG5dKSwgVnQgPSB6JDEub2JqZWN0KHtcbiAgcGF5bG9hZDogJHQsXG4gIG5vbmNlOiBTLFxuICBmb3JtSWQ6IFMsXG4gIGVsZW1lbnRJZDogU1xufSk7XG56JDEub2JqZWN0KHtcbiAgYW1vdW50QXRvbTogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogU1xufSk7XG56JDEuZW51bShbXCJhcHBsZV9wYXlcIiwgXCJnb29nbGVfcGF5XCJdKTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IFooeiQxLnN0cmluZygpKVxufSk7XG5jb25zdCBxdCA9IHokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZHM6IHokMS5hcnJheShFdClcbn0pLCB6dCA9IHokMS5vYmplY3Qoe1xuICBlbGVtZW50VHlwZTogeiQxLnN0cmluZygpLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgSHQgPSB6JDEub2JqZWN0KHtcbiAgc3VjY2VzczogeiQxLmxpdGVyYWwoITEpLFxuICBlcnJvcl90eXBlOiB6JDEubGl0ZXJhbChcInZhbGlkYXRpb25fZXJyb3JcIiksXG4gIGVycm9yczogeiQxLmFycmF5KHp0KVxufSksIFl0ID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInN1Y2Nlc3NcIiwgW1xuICB6JDEub2JqZWN0KHsgc3VjY2VzczogeiQxLmxpdGVyYWwoITApIH0pLFxuICBIdFxuXSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogdGUsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFYsXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IFooeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogdGUsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFZcbn0pO1xudmFyIEcgPSAvKiBAX19QVVJFX18gKi8gKCh0KSA9PiAodC5TVUNDRVNTID0gXCJzdWNjZXNzXCIsIHQuRkFJTFVSRSA9IFwiZmFpbHVyZVwiLCB0LkNBTkNFTExFRCA9IFwiY2FuY2VsbGVkXCIsIHQpKShHIHx8IHt9KTtcbmNvbnN0IEJ0ID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1xuICAgIFwic3VjY2Vzc1wiLFxuICAgIFwiZmFpbHVyZVwiLFxuICAgIFwiY2FuY2VsbGVkXCJcbiAgICAvKiBDQU5DRUxMRUQgKi9cbiAgXSlcbn0pLCBLdCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogeiQxLnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogeiQxLnN0cmluZygpLFxuICBjb25zZW50X2lkOiB6JDEuc3RyaW5nKClcbn0pLCBKdCA9ICh0KSA9PiB7XG4gIGNvbnN0IHIgPSB7fTtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKFtlLCBuXSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBpID0geGUucGFyc2UoZSk7XG4gICAgICBBcnJheS5pc0FycmF5KG4pID8gcltpXSA9IG4gOiBBcnJheS5pc0FycmF5KG4uX2Vycm9ycykgJiYgKHJbaV0gPSBuLl9lcnJvcnMpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSksIHI7XG59LCBadCA9IHokMS5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHokMS5zdHJpbmcoKVxufSksIEd0ID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxufSksIFd0ID0ge1xuICB1c2Q6IFwidXNkXCIsXG4gIGJybDogXCJicmxcIlxufSwgcmUgPSBhc3luYyAodCkgPT4ge1xuICBmb3IgKGxldCBlID0gMDsgZSA8IDEwOyBlKyspXG4gICAgZ2UoKSB8fCBhd2FpdCBlcig1MDApO1xuICBpZiAoIWdlKCkpXG4gICAgdGhyb3cgY29uc29sZS5sb2coXCJTdHJpcGUgSlMgbm90IGZvdW5kLlwiKSwgbmV3IEVycm9yKFwiU3RyaXBlIEpTIG5vdCBmb3VuZC5cIik7XG4gIHJldHVybiBuZXcgU3RyaXBlKHQpO1xufSwgUXQgPSBhc3luYyAodCwgcikgPT4ge1xuICBjb25zdCBlID0gYXdhaXQgcmUodCk7XG4gIHJldHVybiB7XG4gICAgZWxlbWVudHM6IGUuZWxlbWVudHMociksXG4gICAgc3RyaXBlOiBlXG4gIH07XG59LCBYdCA9IGFzeW5jICh0LCByLCBlLCBuLCBpKSA9PiB7XG4gIGNvbnN0IHMgPSBhd2FpdCByZSh0KSwgYSA9IFd0W2UudG9Mb3dlckNhc2UoKS50cmltKCldO1xuICByZXR1cm4gcy5wYXltZW50UmVxdWVzdCh7XG4gICAgLy8gVE9ETzogcmVwbGFjZSB0aGlzIHdpdGggc3RyaXBlIGFjY291bnQgY291bnRyeSBhcyBzb29uIGFzIHdlIHN1cHBvcnQgaXRcbiAgICBjb3VudHJ5OiBcIlVTXCIsXG4gICAgY3VycmVuY3k6IGEsXG4gICAgdG90YWw6IHtcbiAgICAgIGxhYmVsOiBcIlRvdGFsXCIsXG4gICAgICBhbW91bnQ6IHIsXG4gICAgICBwZW5kaW5nOiBuXG4gICAgfSxcbiAgICByZXF1ZXN0UGF5ZXJOYW1lOiAhMCxcbiAgICByZXF1ZXN0UGF5ZXJFbWFpbDogITAsXG4gICAgZGlzYWJsZVdhbGxldHM6IFtdXG4gIH0pO1xufSwgZXIgPSAodCkgPT4gbmV3IFByb21pc2UoKHIpID0+IHtcbiAgc2V0VGltZW91dChyLCB0KTtcbn0pLCBnZSA9ICgpID0+IFwiU3RyaXBlXCIgaW4gd2luZG93LCB0ciA9IGFzeW5jICh0KSA9PiBuZXcgUHJvbWlzZSgociwgZSkgPT4ge1xuICB0cnkge1xuICAgIHQub24oXCJwYXltZW50bWV0aG9kXCIsIGFzeW5jIChuKSA9PiB7XG4gICAgICByKG4pO1xuICAgIH0pLCB0Lm9uKFwiY2FuY2VsXCIsICgpID0+IHtcbiAgICAgIGUobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5XCIpKTtcbiAgICB9KTtcbiAgfSBjYXRjaCAobikge1xuICAgIGUobik7XG4gIH1cbn0pLCByciA9IGFzeW5jICh0LCByKSA9PiB7XG4gIGlmICghdC5zdHJpcGVfcGsgfHwgIXQuY2xpZW50X3NlY3JldClcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbmV4dCBhY3Rpb24gbWV0YWRhdGEgZm9ybWF0OiAke0pTT04uc3RyaW5naWZ5KHQpfWApO1xuICBjb25zdCBuID0gYXdhaXQgKGF3YWl0IHJlKHQuc3RyaXBlX3BrKSkuY29uZmlybUNhcmRTZXR1cCh0LmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogci5wYXltZW50TWV0aG9kLmlkXG4gIH0pO1xuICBpZiAobi5lcnJvcilcbiAgICB0aHJvdyByLmNvbXBsZXRlKFwiZmFpbFwiKSwgbmV3IEVycm9yKGBQYXltZW50IGZhaWxlZDogJHtuLmVycm9yLm1lc3NhZ2UgPz8gXCJ1bmtub3duXCJ9YCk7XG4gIHJldHVybiByLmNvbXBsZXRlKFwic3VjY2Vzc1wiKSwgbjtcbn0sIG5yID0gYXN5bmMgKHQpID0+IHtcbiAgdmFyIGksIHMsIGEsIGM7XG4gIGNvbnN0IGUgPSBhd2FpdCAoYXdhaXQgcmUodC5zdHJpcGVfcGspKS5jb25maXJtQ2FyZFNldHVwKHQuY2xpZW50X3NlY3JldCwge1xuICAgIHBheW1lbnRfbWV0aG9kOiB0LnN0cmlwZV9wbV9pZFxuICB9KSwgbiA9IChpID0gZS5zZXR1cEludGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuc3RhdHVzO1xuICBpZiAobiA9PT0gXCJzdWNjZWVkZWRcIilcbiAgICBjb25zb2xlLmxvZyhcIlszRFNdIENPTkZJUk1JTkcgUE06XCIsIHQuc3RyaXBlX3BtX2lkKSwgY29uc29sZS5sb2coXCJbM0RTXSBTZXR1cCBpbnRlbnQgY3JlYXRlZDpcIiwgZS5zZXR1cEludGVudCk7XG4gIGVsc2UgdGhyb3cgbiA9PT0gXCJjYW5jZWxlZFwiID8gbmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5XCIpIDogbmV3IEVycm9yKFxuICAgIGAkeygocyA9IGUuZXJyb3IpID09IG51bGwgPyB2b2lkIDAgOiBzLm1lc3NhZ2UpID8/ICgoYyA9IChhID0gZS5zZXR1cEludGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGEubGFzdF9zZXR1cF9lcnJvcikgPT0gbnVsbCA/IHZvaWQgMCA6IGMubWVzc2FnZSkgPz8gXCJQYXltZW50IGZhaWxlZCwgcGxlYXNlIGNsaWNrIHN1Ym1pdCBhZ2FpbiB0byBwYXkuXCJ9YFxuICApO1xufSwgb3IgPSAodCkgPT4gSlNPTi5zdHJpbmdpZnkodCksIGRlID0gKHQsIHIpID0+IEFycmF5LmZyb20odC5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtb3BpZF1cIikgPz8gW10pLnJlZHVjZSgoaSwgcykgPT4ge1xuICBjb25zdCBhID0gcy5nZXRBdHRyaWJ1dGUoXCJkYXRhLW9waWRcIik7XG4gIHJldHVybiBhID8geyAuLi5pLCBbYV06IHMudmFsdWUgfSA6IGk7XG59LCB7fSksIGlyID0gKHQpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gVnQucGFyc2UodCk7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICB0aHJvdyBjb25zb2xlLmVycm9yKFwiRXJyb3IgcGFyc2luZyBldmVudCBwYXlsb2FkOlwiLCB0LCByKSwgcjtcbiAgfVxufSwgc3IgPSBhc3luYyAodCkgPT4ge1xuICBpZiAodHlwZW9mIHQgIT0gXCJvYmplY3RcIiB8fCAhdCkgcmV0dXJuICExO1xuICB0cnkge1xuICAgIGNvbnN0IHIgPSB7IHR5cGU6IFwicGluZ1wiIH0sIGUgPSBhd2FpdCB0LnNlbmQocik7XG4gICAgaWYgKGUgIT09ICEwKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAndHJ1ZScgYWZ0ZXIgcGluZywgZ290ICR7SlNPTi5zdHJpbmdpZnkoZSl9YCk7XG4gICAgcmV0dXJuICEwO1xuICB9IGNhdGNoIChyKSB7XG4gICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoXCJJbnZhbGlkIENERSBjb25uZWN0aW9uIGNoZWNrOlwiLCByKSwgITE7XG4gIH1cbn0sIGFyID0gKHQsIHIpID0+ICEhdCAmJiByLCBnID0gKHQpID0+IHokMS5udWxsYWJsZSh0Lm9wdGlvbmFsKCkpO1xueiQxLnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBcIkNhbm5vdCBiZSBibGFua1wiIH0pO1xuY29uc3QgY3IgPSB6JDEub2JqZWN0KHtcbiAgY2RlX3Jlc3BvbnNlX3R5cGU6IHokMS5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKSxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG56JDEuZW51bShbXCJ1c2RcIiwgXCJicmxcIl0pO1xuY29uc3QgVmUgPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBhbW91bnRfYXRvbV9vZmY6IGcoeiQxLm51bWJlcigpKSxcbiAgcGVyY2VudF9vZmY6IGcoeiQxLm51bWJlcigpKSxcbiAgY3VycmVuY3k6IGcoeiQxLnN0cmluZygpKSxcbiAgZHVyYXRpb246IHokMS5zdHJpbmcoKSxcbiAgZHVyYXRpb25faW5fbW9udGhzOiBnKHokMS5udW1iZXIoKSlcbn0pLCBxZSA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogZyh6JDEuc3RyaW5nKCkpLFxuICBwcmljZV9pZDogeiQxLnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiBnKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IGcoeiQxLm51bWJlcigpLmludCgpKSxcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKS5pbnQoKVxufSksIHVyID0geiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksIGxyID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgc2V0dGluZ3M6IGcodXIpXG59KSwgcSA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogZyh6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogZyh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCBkciA9IHokMS5vYmplY3Qoe1xuICBxdWFudGl0eTogeiQxLm51bWJlcigpXG59KSwgZnIgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IGcoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogZyh6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBnKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogeiQxLmFycmF5KGRyKSxcbiAgdHJpYWxfc3RhcnQ6IGcoeiQxLnN0cmluZygpKSxcbiAgdHJpYWxfZW5kOiBnKHokMS5zdHJpbmcoKSlcbn0pLCB6ZSA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpXG59KSwgcHIgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgYW1vdW50X2F0b21fY29uc2lkZXJpbmdfZGlzY291bnRfYXBwbGllZDogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheSh6ZSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6JDEuc3RyaW5nKClcbn0pLCBociA9IHokMS5vYmplY3Qoe1xuICBjb3Vwb246IFZlXG59KSwgbXIgPSB6JDEub2JqZWN0KHtcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRzOiB6JDEuYXJyYXkoaHIpLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IGcoeiQxLnN0cmluZygpKSxcbiAgbGluZXM6IHokMS5hcnJheShwciksXG4gIHJlbWFpbmluZ19hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0YXhfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkoemUpXG59KSwgYmUgPSB6JDEub2JqZWN0KHtcbiAgY3JlYXRlZDogeiQxLmFycmF5KGZyKSxcbiAgaW52b2ljZXM6IHokMS5hcnJheShtcilcbn0pLCBIZSA9IHokMS5vYmplY3Qoe1xuICBwcmV2aWV3OiBiZSxcbiAgcHJldmlld19wb3N0X3RyaWFsOiBnKGJlKSxcbiAgY291cG9uczogeiQxLmFycmF5KFZlKVxufSksIHZlID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJvcGVuXCIpLFxuICB0b2tlbjogeiQxLnN0cmluZygpLFxuICBlbWFpbDogZyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkocWUpLFxuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBicmFuZDogbHIsXG4gIHN1YnNfcHJldmlldzogZyhIZSksXG4gIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICBtZXRob2RzX2F2YWlsYWJsZTogeiQxLmFycmF5KHEpXG59KSwgWWUgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwibW9kZVwiLCBbXG4gIHokMS5vYmplY3Qoe1xuICAgIG1vZGU6IHokMS5saXRlcmFsKFwic2V0dXBcIiksXG4gICAgY3VycmVuY3k6IHokMS5udWxsYWJsZSh6JDEudW5kZWZpbmVkKCkpXG4gIH0pLmV4dGVuZCh2ZS5zaGFwZSksXG4gIHokMS5vYmplY3Qoe1xuICAgIG1vZGU6IHokMS5lbnVtKFtcInBheW1lbnRcIiwgXCJzdWJzY3JpcHRpb25cIl0pLFxuICAgIGN1cnJlbmN5OiB6JDEuc3RyaW5nKClcbiAgfSkuZXh0ZW5kKHZlLnNoYXBlKVxuXSksIHlyID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJjb21wbGV0ZVwiKVxufSksIF9yID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJleHBpcmVkXCIpXG59KTtcbnokMS51bmlvbihbWWUsIHlyLCBfcl0pO1xueiQxLm9iamVjdCh7XG4gIGxvZ286IHokMS5zdHJpbmcoKSxcbiAgaWNvbjogeiQxLnN0cmluZygpLFxuICBwcmltYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKCksXG4gIHNlY29uZGFyeV9jb2xvcjogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IEJlID0geiQxLm9iamVjdCh7XG4gIGludm9pY2VfdXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbl9pZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcGF5bWVudF9pbnB1dDogeiQxLmFueSgpLFxuICAvLyBTaG91bGQgZm9sbG93IEFueVBheW1lbnRJbnB1dCBmcm9tIENERVxuICBjdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl96aXBfY29kZTogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl9jb3VudHJ5OiB6JDEuc3RyaW5nKCksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShxZSksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGNhbmNlbF9hdF9lbmQ6IHokMS5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBxLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBnciA9IHokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZF9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICByZXR1cm5fdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgYnIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLmFycmF5KGJyKTtcbnokMS5vYmplY3Qoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfYWRkcmVzczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9wcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogcSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aGVpcl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgS2UgPSB6JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBmaWVsZHM6IEZ0LFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IHFcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogVixcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHFcbn0pO1xuY29uc3QgdnIgPSB6JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBjY19wbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5yZWNvcmQoeiQxLmFueSgpKTtcbmNvbnN0IHdyID0gKHQpID0+IHQucmVkdWNlKChyLCBlKSA9PiByICsgZSwgMCk7XG5mdW5jdGlvbiBFcih0LCByKSB7XG4gIHZhciBlID0gT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuICBlID8gZSh0LCByKSA6IHQuX19wcm90b19fID0gcjtcbn1cbmZ1bmN0aW9uIFNyKHQsIHIpIHtcbiAgciA9PT0gdm9pZCAwICYmIChyID0gdC5jb25zdHJ1Y3Rvcik7XG4gIHZhciBlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIGUgJiYgZSh0LCByKTtcbn1cbnZhciBDciA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgdmFyIHQgPSBmdW5jdGlvbihlLCBuKSB7XG4gICAgcmV0dXJuIHQgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbihpLCBzKSB7XG4gICAgICBpLl9fcHJvdG9fXyA9IHM7XG4gICAgfSB8fCBmdW5jdGlvbihpLCBzKSB7XG4gICAgICBmb3IgKHZhciBhIGluIHMpXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBhKSAmJiAoaVthXSA9IHNbYV0pO1xuICAgIH0sIHQoZSwgbik7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbihyLCBlKSB7XG4gICAgaWYgKHR5cGVvZiBlICE9IFwiZnVuY3Rpb25cIiAmJiBlICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhlKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgdChyLCBlKTtcbiAgICBmdW5jdGlvbiBuKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IHI7XG4gICAgfVxuICAgIHIucHJvdG90eXBlID0gZSA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoZSkgOiAobi5wcm90b3R5cGUgPSBlLnByb3RvdHlwZSwgbmV3IG4oKSk7XG4gIH07XG59KCksIGtyID0gZnVuY3Rpb24odCkge1xuICBDcihyLCB0KTtcbiAgZnVuY3Rpb24gcihlLCBuKSB7XG4gICAgdmFyIGkgPSB0aGlzLmNvbnN0cnVjdG9yLCBzID0gdC5jYWxsKHRoaXMsIGUsIG4pIHx8IHRoaXM7XG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCBcIm5hbWVcIiwge1xuICAgICAgdmFsdWU6IGkubmFtZSxcbiAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgIH0pLCBFcihzLCBpLnByb3RvdHlwZSksIFNyKHMpLCBzO1xuICB9XG4gIHJldHVybiByO1xufShFcnJvcik7XG5jbGFzcyBKZSBleHRlbmRzIGtyIHtcbiAgY29uc3RydWN0b3Iocikge1xuICAgIGNvbnN0IGUgPSBgJHtyLm1lc3NhZ2V9YDtcbiAgICBzdXBlcihlKSwgdGhpcy5yZXNwb25zZSA9IHI7XG4gIH1cbiAgZ2V0IG9yaWdpbmFsRXJyb3JNZXNzYWdlKCkge1xuICAgIHJldHVybiB0aGlzLnJlc3BvbnNlLm1lc3NhZ2U7XG4gIH1cbn1cbmNvbnN0IE8gPSBhc3luYyAodCwgciwgZSkgPT4ge1xuICBjb25zdCBuID0gYXdhaXQgdC5zZW5kKHIpO1xuICBpZiAoSXIobikpXG4gICAgdGhyb3cgbmV3IEplKG4pO1xuICBpZiAoIVByKG4sIGUpKSB7XG4gICAgY29uc3QgaSA9IGUuc2FmZVBhcnNlKG4pO1xuICAgIHRocm93IGkuc3VjY2VzcyA/IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGVcIikgOiAoY29uc29sZS5lcnJvcihcIk9KUyBxdWVyeUFwaSBnb3QgYSBzY2hlbWEgZXJyb3IuIEV4cGVjdGVkIHNjaGVtYTpcIiwgZSwgXCJBY3R1YWw6XCIsIG4pLCBpLmVycm9yKTtcbiAgfVxuICByZXR1cm4gbjtcbn0sIFByID0gKHQsIHIpID0+IHIuc2FmZVBhcnNlKHQpLnN1Y2Nlc3MsIElyID0gKHQpID0+IGNyLnNhZmVQYXJzZSh0KS5zdWNjZXNzLCBPciA9IGFzeW5jICh0LCByKSA9PiBhd2FpdCBPKHQsIHsgdHlwZTogXCJnZXRfY2hlY2tvdXRfcHJldmlld1wiLCBwYXlsb2FkOiByIH0sIEhlKSwgeiA9IGFzeW5jICh0KSA9PiBhd2FpdCBPKHQsIHsgdHlwZTogXCJnZXRfcHJlZmlsbFwiLCBwYXlsb2FkOiB7fSB9LCBZZSksIEFyID0gYXN5bmMgKHQsIHIpID0+IGF3YWl0IE8odCwgeyB0eXBlOiBcInYyX3N0YXJ0X3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiByIH0sIEtlKSwgUnIgPSBhc3luYyAodCwgcikgPT4gYXdhaXQgTyh0LCB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9jY1wiLCBwYXlsb2FkOiByIH0sIHZyKSwgVHIgPSBhc3luYyAodCwgcikgPT4gYXdhaXQgTyh0LCB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wclwiLCBwYXlsb2FkOiByIH0sIEtlKSwgZmUgPSBhc3luYyAodCwgcikgPT4gYXdhaXQgTyh0LCB7IHR5cGU6IFwiY29uZmlybV9wYXltZW50X2Zsb3dcIiwgcGF5bG9hZDogciB9LCBxdCksIGpyID0gYXN5bmMgKHQsIHIsIGUpID0+IHtcbiAgY29uc3QgbiA9IGF3YWl0IE9yKHQsIHtcbiAgICBzZWN1cmVfdG9rZW46IHIsXG4gICAgcHJvbW90aW9uX2NvZGU6IGVcbiAgfSksIGkgPSBuZXcgU2V0KG4ucHJldmlldy5pbnZvaWNlcy5tYXAoKGMpID0+IGMuY3VycmVuY3kpKTtcbiAgaWYgKGkuc2l6ZSAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIGN1cnJlbmN5LCBnb3QgJHtpLnNpemV9YCk7XG4gIGNvbnN0IHMgPSBpLnZhbHVlcygpLm5leHQoKS52YWx1ZSA/PyBcInVzZFwiLCBhID0gd3Iobi5wcmV2aWV3Lmludm9pY2VzLm1hcCgoYykgPT4gYy5yZW1haW5pbmdfYW1vdW50X2F0b20pKTtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW5jeTogcyxcbiAgICBhbW91bnRBdG9tOiBhXG4gIH07XG59LCBaZSA9IGFzeW5jICh0LCByLCBlLCBuKSA9PiB7XG4gIGlmIChlKVxuICAgIHJldHVybiB7IGFtb3VudEF0b206IDAsIGN1cnJlbmN5OiBcInVzZFwiIH07XG4gIHtcbiAgICBuID0gbiB8fCB2b2lkIDA7XG4gICAgY29uc3QgaSA9IGF3YWl0IGpyKHQsIHIsIG4pO1xuICAgIHJldHVybiB7IGFtb3VudEF0b206IGkuYW1vdW50QXRvbSwgY3VycmVuY3k6IGkuY3VycmVuY3kgfTtcbiAgfVxufSwgTXIgPSBhc3luYyAodCwgcikgPT4ge1xuICBpZiAodC5zaXplID09PSAwKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIENERSBjb25uZWN0aW9ucyBmb3VuZFwiKTtcbiAgcmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIEFycmF5LmZyb20odC52YWx1ZXMoKSkubWFwKFxuICAgICAgKG4pID0+IE8obiwgeyB0eXBlOiBcInRva2VuaXplX2NhcmRcIiwgcGF5bG9hZDogciB9LCBZdClcbiAgICApXG4gICk7XG59LCB3ZSA9IGFzeW5jICh0LCByKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IE8odCwgeyB0eXBlOiBcImNoZWNrb3V0X2NhcmRfZWxlbWVudHNcIiwgcGF5bG9hZDogciB9LCBCZSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBjb25zb2xlLmVycm9yKFwiW2NkZS1jbGllbnRdIEVycm9yIGR1cmluZyBjaGVja291dENhcmRFbGVtZW50czpcIiwgZSwgSlNPTi5zdHJpbmdpZnkoZSkpLCBlO1xuICB9XG59LCBMciA9IGFzeW5jICh0LCByKSA9PiBhd2FpdCBPKHQsIHsgdHlwZTogXCJzZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkOiByIH0sIGdyKSwgR2UgPSBhc3luYyAodCwgcikgPT4gYXdhaXQgTyh0LCB7IHR5cGU6IFwiY2hlY2tvdXRcIiwgcGF5bG9hZDogciB9LCBCZSksIFdlID0gMWUzLCBGciA9IGFzeW5jICh0LCByKSA9PiB7XG4gIGNvbnNvbGUubG9nKHIpO1xuICBjb25zdCBuID0gYXdhaXQgY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZTogdCxcbiAgICBkZWJ1ZzogITAsXG4gICAgdGltZW91dDogV2UsXG4gICAgY2hpbGRPcmlnaW46IFwiKlwiXG4gICAgLy8gVE9ETzogdXNlIHdpdGggcHJvcGVyIGNoaWxkT3JpZ2luXG4gIH0pLnByb21pc2U7XG4gIHJldHVybiAoYXdhaXQgTyhuLCB7IHR5cGU6IFwicGluZy0zZHMtc3RhdHVzXCIgfSwgQnQpKS5zdGF0dXM7XG59O1xuZnVuY3Rpb24gRHIodCkge1xuICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBjYXNlOiAke3R9YCk7XG59XG5jb25zdCBwZSA9ICh0KSA9PiBhc3luYyAocikgPT4ge1xuICB2YXIgZSwgbiwgaSwgcywgYSwgYywgbCwgdTtcbiAgdHJ5IHtcbiAgICAobiA9IChlID0gci5mb3JtQ2FsbGJhY2tzLmdldCkub25DaGVja291dFN0YXJ0ZWQpID09IG51bGwgfHwgbi5jYWxsKGUpO1xuICAgIGNvbnN0IGQgPSBhd2FpdCB0KHIpO1xuICAgIGlmIChkLm1vZGUgPT09IFwic2V0dXBcIilcbiAgICAgIChzID0gKGkgPSByLmZvcm1DYWxsYmFja3MuZ2V0KS5vblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3MpID09IG51bGwgfHwgcy5jYWxsKGksIGQucmVzdWx0LnBheW1lbnRfbWV0aG9kX2lkKTtcbiAgICBlbHNlIGlmIChkLm1vZGUgPT09IFwiY2hlY2tvdXRcIilcbiAgICAgIChjID0gKGEgPSByLmZvcm1DYWxsYmFja3MuZ2V0KS5vbkNoZWNrb3V0U3VjY2VzcykgPT0gbnVsbCB8fCBjLmNhbGwoXG4gICAgICAgIGEsXG4gICAgICAgIGQucmVzdWx0Lmludm9pY2VfdXJscyxcbiAgICAgICAgZC5yZXN1bHQuc3Vic2NyaXB0aW9uX2lkcyxcbiAgICAgICAgZC5yZXN1bHQuY3VzdG9tZXJfaWRcbiAgICAgICk7XG4gICAgZWxzZVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgbW9kZTogJHtkfWApO1xuICB9IGNhdGNoIChkKSB7XG4gICAgdGhyb3cgKHUgPSAobCA9IHIuZm9ybUNhbGxiYWNrcy5nZXQpLm9uQ2hlY2tvdXRFcnJvcikgPT0gbnVsbCB8fCB1LmNhbGwobCwgJChkKSksIGQ7XG4gIH1cbn0sIFFlID0gKHQpID0+IGFzeW5jIChyKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHQocik7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zdCB7IGVycl9fOiBuIH0gPSBBKFwiaW5pdC1lcnJvci1jYXRjaGVyXCIpO1xuICAgIHJldHVybiBuKGUpLCB7IGlzQXZhaWxhYmxlOiAhMSwgcmVhc29uOiAkKGUpIH07XG4gIH1cbn0sIEEgPSAodCkgPT4ge1xuICBjb25zdCByID0gKC4uLm4pID0+IHtcbiAgICB3aW5kb3cuY29uc29sZS5sb2coYCR7WS5ncmVlbi5ib2xkKFwib2pzL1wiKX0ke1kuYm9sZC5ncmF5KGAke3R9YCl9XHRgLCAuLi5uKTtcbiAgfSwgZSA9ICguLi5uKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUuZXJyb3IoYCR7WS5yZWQuYm9sZChcIm9qcy9cIil9JHtZLmJvbGQuZ3JheShgJHt0fWApfVx0YCwgLi4ubik7XG4gIH07XG4gIHJldHVybiB7XG4gICAgbG9nOiByLFxuICAgIGVycjogZSxcbiAgICBsb2dfXzogcixcbiAgICBlcnJfXzogZVxuICB9O1xufSwgeyBsb2dfXzogZ28sIGVycl9fOiB4ciB9ID0gQShcImNvbW1vblwiKSwgaGUgPSAodCkgPT4ge1xuICBpZiAodC5wYXltZW50X21ldGhvZHMubGVuZ3RoICE9PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZXhhY3RseSBvbmUgcGF5bWVudCBtZXRob2QsIGdvdCAke3QucGF5bWVudF9tZXRob2RzLmxlbmd0aH1gKTtcbiAgcmV0dXJuIHsgcGF5bWVudF9tZXRob2RfaWQ6IHQucGF5bWVudF9tZXRob2RzWzBdLmlkIH07XG59LCBYZSA9ICh0LCByKSA9PiB7XG4gIGNvbnN0IGUgPSB0LmZpbmQoKG4pID0+IHIuc2FmZVBhcnNlKG4pLnN1Y2Nlc3MpO1xuICBpZiAoIWUpXG4gICAgdGhyb3cgeHIoXCJObyBDUE1zIGZvdW5kIGZvciBtb2RlbC4gQWxsIG1vZGVsczpcIiwgdCksIG5ldyBFcnJvcihcIk5vIENQTXMgZm91bmQgZm9yIG1vZGVsXCIpO1xuICByZXR1cm4gci5wYXJzZShlKTtcbn0sIHsgbG9nX186IE5yLCBlcnJfXzogZXQgfSA9IEEoXCJjb21tb24tY2NcIiksIG1lID0gKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IFYuc2FmZVBhcnNlKHQpO1xuICBpZiAoIWUuc3VjY2Vzcykge1xuICAgIGNvbnN0IG4gPSBlLmVycm9yLmZvcm1hdCgpLCBpID0gSnQobik7XG4gICAgZm9yIChjb25zdCBbcywgYV0gb2YgT2JqZWN0LmVudHJpZXMoaSkpXG4gICAgICByKHMsIGEsIHMpO1xuICAgIHRocm93IGV0KFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIiwgaSksIG5ldyBFcnJvcihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIpO1xuICB9XG4gIHJldHVybiBlLmRhdGE7XG59LCBVciA9ICh0LCByKSA9PiB7XG4gIGZvciAoY29uc3QgZSBvZiB0KVxuICAgIGlmIChlLnN1Y2Nlc3MgPT09ICExKVxuICAgICAgdGhyb3cgZS5lcnJvcnMuZm9yRWFjaCgobikgPT4ge1xuICAgICAgICBjb25zdCBpID0gJGUuc2FmZVBhcnNlKG4uZWxlbWVudFR5cGUpO1xuICAgICAgICBpZiAoIWkuc3VjY2VzcylcbiAgICAgICAgICBldChgVW5rbm93biBmaWVsZCBuYW1lIGluIG9uVmFsaWRhdGlvbkVycm9yOiAke24uZWxlbWVudFR5cGV9LiBFcnJvciBvYmplY3Q6YCwgbik7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHMgPSBpLmRhdGE7XG4gICAgICAgICAgcihzLCBuLmVycm9ycyk7XG4gICAgICAgIH1cbiAgICAgIH0pLCBOcihgRXJyb3IgdG9rZW5pemluZyBjYXJkOiBnb3QgdmFsaWRhdGlvbiBlcnJvcnM6ICR7SlNPTi5zdHJpbmdpZnkoZS5lcnJvcnMpfWApLCBuZXcgRXJyb3IoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgd2hpbGUgdG9rZW5pemluZyBjYXJkXCIpO1xufSwgRWUgPSBcIm9qcy1zdHJpcGUtbGluay1idG5cIiwgeyBsb2dfXzogdiwgZXJyX186ICRyIH0gPSBBKFwic3RyaXBlLWxpbmtcIiksIFZyID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInN0cmlwZV9saW5rXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIHFyID0geiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSksIHpyID0gUWUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IHQsIGZvcm1DYWxsYmFja3M6IHIgfSkgPT4ge1xuICAgIGNvbnN0IGUgPSB0LmN1c3RvbUluaXRQYXJhbXMuc3RyaXBlTGluaztcbiAgICB2KFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgUFIuLi5cIik7XG4gICAgY29uc3QgbiA9IFhlKHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgVnIpO1xuICAgIHYoXCJTdGFydGluZyBzdHJpcGUgbGluayBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGkgPSB0LmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCB6KGkpLCBhID0gcy5tb2RlID09PSBcInNldHVwXCI7XG4gICAgdihcIkNyZWF0aW5nIHN0cmlwZSBlbGVtZW50cy4uLlwiKTtcbiAgICBjb25zdCBjID0gYXdhaXQgWmUoaSwgcy50b2tlbiwgYSwgdm9pZCAwKSwgeyBlbGVtZW50czogbCwgc3RyaXBlOiB1IH0gPSBhd2FpdCBRdChuLm1ldGFkYXRhLnN0cmlwZV9waywge1xuICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgY3VycmVuY3k6IGMuY3VycmVuY3ksXG4gICAgICBzZXR1cF9mdXR1cmVfdXNhZ2U6IFwib2ZmX3Nlc3Npb25cIixcbiAgICAgIHBheW1lbnRNZXRob2RDcmVhdGlvbjogXCJtYW51YWxcIlxuICAgIH0pO1xuICAgIHYoXCJDcmVhdGluZyBleHByZXNzIGNoZWNrb3V0Li4uXCIpO1xuICAgIGNvbnN0IGQgPSBsLmNyZWF0ZShcImV4cHJlc3NDaGVja291dFwiLCB7XG4gICAgICBidXR0b25IZWlnaHQ6IGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuYnV0dG9uSGVpZ2h0LFxuICAgICAgcGF5bWVudE1ldGhvZHM6IHtcbiAgICAgICAgYW1hem9uUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGFwcGxlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGdvb2dsZVBheTogXCJuZXZlclwiLFxuICAgICAgICBwYXlwYWw6IFwibmV2ZXJcIlxuICAgICAgfVxuICAgIH0pLCBoID0gKCkgPT4ge1xuICAgICAgZC5tb3VudChgIyR7RWV9YCk7XG4gICAgfSwgXyA9ICgpID0+IHtcbiAgICAgIGQudW5tb3VudCgpO1xuICAgIH07XG4gICAgcmV0dXJuIGUgIT0gbnVsbCAmJiBlLmRvTm90TW91bnRPbkluaXQgPyB2KFwiTk9UIG1vdW50aW5nIHN0cmlwZSBsaW5rIGJ1dHRvbiAoZG9Ob3RNb3VudE9uSW5pdCBpcyB0cnVlKVwiKSA6ICh2KFwiTW91bnRpbmcgc3RyaXBlIGxpbmsgYnV0dG9uLi4uXCIpLCBoKCkpLCBkLm9uKFwiY2xpY2tcIiwgYXN5bmMgKGYpID0+IHtcbiAgICAgIGlmICh2KFwiU3RyaXBlIExpbmsgYnV0dG9uIGNsaWNrZWRcIiksIGUgIT0gbnVsbCAmJiBlLm92ZXJyaWRlTGlua1N1Ym1pdCAmJiAhYXdhaXQgZS5vdmVycmlkZUxpbmtTdWJtaXQoKSkge1xuICAgICAgICB2KFwiU3RyaXBlIExpbmsgc3VibWl0IGFib3J0ZWQgYnkgb3ZlcnJpZGVMaW5rU3VibWl0XCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBmLnJlc29sdmUoKTtcbiAgICB9KSwgZC5vbihcImNvbmZpcm1cIiwgYXN5bmMgKGYpID0+IHtcbiAgICAgIHZhciBtLCBrO1xuICAgICAgdihcIlN0cmlwZSBMaW5rIHdpbmRvdyBjb25maXJtZWRcIiwgZik7XG4gICAgICBjb25zdCBwID0gYXdhaXQgdS5jcmVhdGVQYXltZW50TWV0aG9kKHtcbiAgICAgICAgZWxlbWVudHM6IGwsXG4gICAgICAgIHBhcmFtczoge1xuICAgICAgICAgIGJpbGxpbmdfZGV0YWlsczogZi5iaWxsaW5nRGV0YWlsc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHAuZXJyb3IgPyAoJHIoXCJlcnJvclwiLCBwLmVycm9yKSwgKGsgPSAobSA9IHIuZ2V0KS5vbkNoZWNrb3V0RXJyb3IpID09IG51bGwgfHwgay5jYWxsKG0sIHAuZXJyb3IubWVzc2FnZSA/PyBcIlN0cmlwZSBMaW5rIHVua25vd24gZXJyb3JcIikpIDogKHYoXCJwYXltZW50TWV0aG9kXCIsIHAucGF5bWVudE1ldGhvZCksIE4uc3RyaXBlTGluay5ydW4oe1xuICAgICAgICBjb250ZXh0OiB0LFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGRlKHQuZm9ybURpdiksXG4gICAgICAgIGZvcm1DYWxsYmFja3M6IHIsXG4gICAgICAgIGN1c3RvbVBhcmFtczogeyBzdHJpcGVQTTogcC5wYXltZW50TWV0aG9kIH0sXG4gICAgICAgIGluaXRSZXN1bHQ6IHsgaXNBdmFpbGFibGU6ICEwIH1cbiAgICAgIH0pKTtcbiAgICB9KSwge1xuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgY29udHJvbGxlcjoge1xuICAgICAgICBtb3VudEJ1dHRvbjogaCxcbiAgICAgICAgZGlzbW91bnRCdXR0b246IF8sXG4gICAgICAgIHdhaXRGb3JCdXR0b25Ub01vdW50OiBhc3luYyAoKSA9PiBhd2FpdCBCcihFZSlcbiAgICAgIH1cbiAgICB9O1xuICB9XG4pLCBIciA9IHBlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGlcbiAgfSkgPT4ge1xuICAgIHYoXCJSdW5uaW5nIFN0cmlwZSBQUiBmbG93Li4uXCIpO1xuICAgIGNvbnN0IHMgPSB0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgdihcIk1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5cIik7XG4gICAgY29uc3QgYSA9IFlyKGUsIGkuc3RyaXBlUE0pLCBjID0gbWUoXG4gICAgICBhLFxuICAgICAgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IgPz8gKCgpID0+IHtcbiAgICAgIH0pXG4gICAgKTtcbiAgICB2KFwiU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGwgPSBhd2FpdCBBcihzLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiByLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHIsXG4gICAgICB0aGVpcl9leGlzdGluZ19wbV9pZDogaS5zdHJpcGVQTS5pZFxuICAgIH0pO1xuICAgIHYoXCJTdGFydCBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgbCk7XG4gICAgY29uc3QgZCA9IHFyLnBhcnNlKGwucmVxdWlyZWRfdXNlcl9hY3Rpb25zKVswXS5vdXJfZXhpc3RpbmdfcG1faWQsIGggPSBhd2FpdCB6KHMpO1xuICAgIGlmIChoLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgdihcIkRvaW5nIHBheW1lbnQgc2V0dXAuLi5cIik7XG4gICAgICBjb25zdCBfID0gYXdhaXQgZmUocywge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGgudG9rZW4sXG4gICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBkXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBoZShfKSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB2KFwiRG9pbmcgY2hlY2tvdXQuLi5cIik7XG4gICAgICBjb25zdCBfID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGgudG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiByLnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBjW3kuRU1BSUxdLFxuICAgICAgICBjdXN0b21lcl96aXBfY29kZTogY1t5LlpJUF9DT0RFXSxcbiAgICAgICAgY3VzdG9tZXJfY291bnRyeTogY1t5LkNPVU5UUlldLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogY1t5LlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgbGluZV9pdGVtczogaC5saW5lX2l0ZW1zLFxuICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogaC5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgY2FuY2VsX2F0X2VuZDogITEsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiByXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IGF3YWl0IEdlKHMsIF8pIH07XG4gICAgfVxuICB9XG4pLCBZciA9ICh0LCByKSA9PiB7XG4gIHZhciBhLCBjLCBsLCB1LCBkO1xuICBjb25zdCBlID0geyAuLi50IH0sIFtuLCAuLi5pXSA9ICgoYyA9IChhID0gci5iaWxsaW5nX2RldGFpbHMubmFtZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGEudHJpbSgpKSA9PSBudWxsID8gdm9pZCAwIDogYy5zcGxpdCgvXFxzKy8pKSA/PyBbXSwgcyA9IGkuam9pbihcIiBcIikgfHwgdm9pZCAwO1xuICByZXR1cm4gZVt5LkZJUlNUX05BTUVdID0gZVt5LkZJUlNUX05BTUVdIHx8IG4gfHwgXCJfT1BfVU5LTk9XTlwiLCBlW3kuTEFTVF9OQU1FXSA9IGVbeS5MQVNUX05BTUVdIHx8IHMgfHwgXCJfT1BfVU5LTk9XTlwiLCBlW3kuRU1BSUxdID0gZVt5LkVNQUlMXSB8fCAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAoKGwgPSByLmxpbmspID09IG51bGwgPyB2b2lkIDAgOiBsLmVtYWlsKSB8fCByLmJpbGxpbmdfZGV0YWlscy5lbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCIsIGVbeS5aSVBfQ09ERV0gPSBlW3kuWklQX0NPREVdIHx8ICgodSA9IHIuYmlsbGluZ19kZXRhaWxzLmFkZHJlc3MpID09IG51bGwgPyB2b2lkIDAgOiB1LnBvc3RhbF9jb2RlKSB8fCBcIjAwMDAwXCIsIGVbeS5DT1VOVFJZXSA9IGVbeS5DT1VOVFJZXSB8fCAoKGQgPSByLmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzKSA9PSBudWxsID8gdm9pZCAwIDogZC5jb3VudHJ5KSB8fCBcIlVTXCIsIHYoXCJGaW5hbCBmb3JtIGlucHV0czpcIiwgZSksIGU7XG59LCBCciA9ICh0KSA9PiBuZXcgUHJvbWlzZSgocikgPT4ge1xuICBjb25zdCBlID0gKCkgPT4ge1xuICAgIGNvbnN0IG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0KTtcbiAgICBuID8gcihuKSA6IHJlcXVlc3RBbmltYXRpb25GcmFtZShlKTtcbiAgfTtcbiAgZSgpO1xufSksIEtyID0gXCJAa2V5ZnJhbWVzIGZhZGVJbnswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC45KX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEpfX0ub3ZlcmxheXtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt6LWluZGV4OjIxNDc0ODM2NDghaW1wb3J0YW50O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwMDA4MH0uY29udGFpbmVye21heC13aWR0aDo1MDBweDttYXgtaGVpZ2h0OjYwMHB4O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZC1jb2xvcjojZmZmO3Bvc2l0aW9uOnJlbGF0aXZlO2FuaW1hdGlvbjpmYWRlSW4gLjNzIGVhc2Utb3V0fS5mcmFtZXttYXgtd2lkdGg6NTAwcHg7bWF4LWhlaWdodDo2MDBweDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JvcmRlcjpub25lfS5jYW5jZWwtYnV0dG9ue3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOm5vbmU7Zm9udC1zaXplOjFyZW07Y29sb3I6I2ZmZjtjdXJzb3I6cG9pbnRlcjt0b3A6LTEuNXJlbTtwYWRkaW5nOjA7cmlnaHQ6MH1cIiwgSnIgPSAodCkgPT4ge1xuICBjb25zdCByID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICByLmlubmVySFRNTCA9IGBcbiAgICA8c3R5bGU+XG4gICAgICAke0tyfVxuICAgIDwvc3R5bGU+XG4gICAgPGRpdiBjbGFzcz1cIm92ZXJsYXlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idXR0b25cIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGlmcmFtZSBzcmM9XCIke3R9XCIgY2xhc3M9XCJmcmFtZVwiIGlkPVwidGhyZWUtZHMtaWZyYW1lXCIgdGl0bGU9XCIzRCBTZWN1cmUgdmVyaWZpY2F0aW9uXCIgYWxsb3c9XCJwYXltZW50XCI+PC9pZnJhbWU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYDtcbiAgY29uc3QgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksIG4gPSBlLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pO1xuICBuLmFwcGVuZENoaWxkKHIuY29udGVudC5jbG9uZU5vZGUoITApKTtcbiAgY29uc3QgaSA9IG4ucXVlcnlTZWxlY3RvcihcIiN0aHJlZS1kcy1pZnJhbWVcIiksIHMgPSBuLnF1ZXJ5U2VsZWN0b3IoXCIuY2FuY2VsLWJ1dHRvblwiKTtcbiAgcmV0dXJuIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZSksIHsgaG9zdDogZSwgaWZyYW1lOiBpLCBjYW5jZWxCdXR0b246IHMgfTtcbn07XG5mdW5jdGlvbiBacih0LCByLCBlKSB7XG4gIGNvbnN0IG4gPSBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHMgPSBhd2FpdCBGcih0LCBlKTtcbiAgICAgIHMgJiYgKGNsZWFySW50ZXJ2YWwoaSksIHIocykpO1xuICAgIH0gY2F0Y2gge1xuICAgIH1cbiAgfTtcbiAgbigpO1xuICBjb25zdCBpID0gc2V0SW50ZXJ2YWwobiwgV2UpO1xuICByZXR1cm4gaTtcbn1cbmZ1bmN0aW9uIEdyKHtcbiAgZWxlbWVudHM6IHQsXG4gIHBvbGxpbmdJbnRlcnZhbDogcixcbiAgcmVzb2x2ZTogZVxufSkge1xuICBjb25zdCBuID0gKCkgPT4ge1xuICAgIGNsZWFySW50ZXJ2YWwociksIHQuaG9zdC5yZW1vdmUoKSwgZShHLkNBTkNFTExFRCk7XG4gIH07XG4gIHJldHVybiB0LmNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgbiksICgpID0+IHtcbiAgICB0LmNhbmNlbEJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgbik7XG4gIH07XG59XG5hc3luYyBmdW5jdGlvbiBXcih7XG4gIHVybDogdCxcbiAgYmFzZVVybDogclxufSkge1xuICBjb25zdCBlID0gSnIodCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgobikgPT4ge1xuICAgIGNvbnN0IGkgPSAoYykgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGUuaG9zdC5yZW1vdmUoKTtcbiAgICAgIH0sIDFlMyksIG4oYyksIGEgPT0gbnVsbCB8fCBhKCk7XG4gICAgfSwgcyA9IFpyKGUuaWZyYW1lLCBpLCBuZXcgVVJMKHIpLm9yaWdpbiksIGEgPSBHcih7XG4gICAgICBlbGVtZW50czogZSxcbiAgICAgIHBvbGxpbmdJbnRlcnZhbDogcyxcbiAgICAgIHJlc29sdmU6IG5cbiAgICB9KTtcbiAgfSk7XG59XG5jb25zdCB7IGxvZ19fOiBiLCBlcnJfXzogU2UgfSA9IEEoXCJjb21tb24tY2NcIiksIHsgbG9nX186IENlIH0gPSBBKFwic3RyaXBlLWNjXCIpLCBRciA9IHBlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGlcbiAgfSkgPT4ge1xuICAgIHZhciBkO1xuICAgIGIoXCLilJwgUnVubmluZyBjb21tb24gQ0MgZmxvdy4uLlwiLCB7IGNoZWNrb3V0UGF5bWVudE1ldGhvZDogciB9KTtcbiAgICBjb25zdCBzID0gdC5hbnlDZGVDb25uZWN0aW9uLCBhID0gYXdhaXQgeihzKTtcbiAgICBiKGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzIFtNb2RlOiAke2EubW9kZX1dYCk7XG4gICAgY29uc3QgYyA9IG1lKFxuICAgICAgZSxcbiAgICAgIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yID8/ICgoKSA9PiB7XG4gICAgICB9KVxuICAgICk7XG4gICAgYihg4pScIFRva2VuaXppbmcgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHt0LmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICBjb25zdCBsID0gYXdhaXQgTXIoaS5jdXJyZW50Q2RlQ29ubmVjdGlvbnMsIHtcbiAgICAgIHNlc3Npb25faWQ6IHQuZWxlbWVudHNTZXNzaW9uSWRcbiAgICB9KTtcbiAgICBVcihsLCBuLmdldC5vblZhbGlkYXRpb25FcnJvciA/PyAoKCkgPT4ge1xuICAgIH0pKTtcbiAgICBjb25zdCB1ID0ge1xuICAgICAgc2Vzc2lvbl9pZDogdC5lbGVtZW50c1Nlc3Npb25JZCxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiByLFxuICAgICAgbm9uX2NkZV9mb3JtX2ZpZWxkczogY1xuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgIGlmIChhLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICBiKGDilJwgU2V0dGluZyB1cCBwYXltZW50IG1ldGhvZCBpbiBDREUgW1Rva2VuOiAke2EudG9rZW59XWApO1xuICAgICAgICBjb25zdCBoID0gYXdhaXQgTHIocywgdSk7XG4gICAgICAgIHJldHVybiBiKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7aC5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGggfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGIoYOKUnCBJbml0aWFsIGNoZWNrb3V0IGZsb3cuIENoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke3QuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgICBjb25zdCBoID0gYXdhaXQgd2UocywgdSk7XG4gICAgICAgIHJldHVybiBiKFwi4pWwIENoZWNrb3V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXCIpLCB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBoIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoaCkge1xuICAgICAgaWYgKGggaW5zdGFuY2VvZiBKZSAmJiBoLm9yaWdpbmFsRXJyb3JNZXNzYWdlID09PSBcIjNEU19SRVFVSVJFRFwiKSB7XG4gICAgICAgIGIoXCLilJwgQ2FyZCByZXF1aXJlcyAzRFMsIHN0YXJ0aW5nIG5vbi1sZWdhY3kgcGF5bWVudCBmbG93XCIpLCBiKFwiZXJyb3IucmVzcG9uc2UuaGVhZGVyc1wiLCBoLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICBjb25zdCBfID0gKChkID0gaC5yZXNwb25zZS5oZWFkZXJzKSA9PSBudWxsID8gdm9pZCAwIDogZFtcIm9wLXNob3VsZC11c2UtbmV3LWZsb3dcIl0pID09PSBcInRydWVcIiwgZiA9IGF3YWl0IFJyKHMsIHUpO1xuICAgICAgICBpZiAoYihg4pScIG9wLXNob3VsZC11c2UtbmV3LWZsb3c6ICR7X31gKSwgYihcIuKUnCBQYXltZW50IGZsb3cgcmVzdWx0OlwiLCBmKSwgXyA/IGF3YWl0IHRuKGYsIHQuYmFzZVVybCkgOiBhd2FpdCBybihmKSwgYS5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgICBiKGDilJwgQ29uZmlybWluZyBwYXltZW50IGZsb3cgW2NjX3BtX2lkOiAke2YuY2NfcG1faWR9XWApO1xuICAgICAgICAgIGNvbnN0IHAgPSBhd2FpdCBmZShzLCB7XG4gICAgICAgICAgICBzZWN1cmVfdG9rZW46IGEudG9rZW4sXG4gICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogZi5jY19wbV9pZFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGIoXCLilJwgQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0IHJlY2VpdmVkIFJlc3VsdDpcIiwgcCk7XG4gICAgICAgICAgY29uc3QgbSA9IGhlKHApO1xuICAgICAgICAgIHJldHVybiBiKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7bS5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IG0gfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBiKGDilJwgQ2hlY2tpbmcgb3V0IGFmdGVyIDNEUyBmbG93IFtGbG93OiAke18gPyBcIm5ld1wiIDogXCJsZWdhY3lcIn1dYCk7XG4gICAgICAgICAgY29uc3QgcCA9IGF3YWl0IHdlKHMsIHtcbiAgICAgICAgICAgIC4uLnUsXG4gICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogZi5jY19wbV9pZCxcbiAgICAgICAgICAgIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6ICFfXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIGIoXCLilbAgQ2hlY2tvdXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cIiksIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IHAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgU2UoXCLilbAgRXJyb3IgY2hlY2tpbmcgb3V0IGNhcmQgaW5mbyBpbiBDREVcIiksIFNlKGgpLCBoO1xuICAgIH1cbiAgfVxuKSwgWHIgPSAodCkgPT4ge1xuICBjb25zdCByID0gdC5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoZSkgPT4gZS50eXBlID09PSBcInN0cmlwZV8zZHNcIik7XG4gIGlmICghcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzdHJpcGUgM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgcmV0dXJuIFp0LnBhcnNlKHIpO1xufSwgZW4gPSAodCkgPT4ge1xuICBjb25zdCByID0gdC5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoZSkgPT4gZS50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIik7XG4gIGlmICghcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb21tb24gM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgcmV0dXJuIEt0LnBhcnNlKHIpO1xufSwgdG4gPSBhc3luYyAodCwgcikgPT4ge1xuICBjb25zdCBlID0gZW4odCk7XG4gIGIoYOKUnCBVc2luZyBjb21tb24gM0RTIGZsb3cgW1VSTDogJHtlLnJlZGlyZWN0X3VybH1dYCk7XG4gIGNvbnN0IG4gPSBhd2FpdCBXcih7IHVybDogZS5yZWRpcmVjdF91cmwsIGJhc2VVcmw6IHIgfSk7XG4gIGlmIChiKGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtufV1gKSwgbiA9PT0gRy5DQU5DRUxMRUQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChuID09PSBHLkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG59LCBybiA9IGFzeW5jICh0KSA9PiB7XG4gIGNvbnN0IHIgPSBYcih0KTtcbiAgQ2UoYOKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3cgW0NsaWVudCBTZWNyZXQ6ICR7ci5jbGllbnRfc2VjcmV0LnN1YnN0cmluZygwLCA4KX0uLi5dYCksIGF3YWl0IG5yKHIpLCBDZShcIuKVsCBTdHJpcGUgM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKTtcbn0sIHsgbG9nX186IEMsIGVycl9fOiBubiB9ID0gQShcInN0cmlwZS1wclwiKSwgb24gPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS51bmlvbihbeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksIHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKV0pLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIHNuID0gUWUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IHQgfSkgPT4ge1xuICAgIEMoXCJDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBQUi4uLlwiKTtcbiAgICBjb25zdCByID0gWGUodC5jaGVja291dFBheW1lbnRNZXRob2RzLCBvbik7XG4gICAgQyhcIkluaXRpYWxpemluZyBTdHJpcGUgUFIgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBlID0gdC5hbnlDZGVDb25uZWN0aW9uLCBuID0gYXdhaXQgeihlKSwgaSA9IG4ubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIEMoXCJHZXR0aW5nIGluaXRpYWwgcHJldmlldyBhbW91bnRcIik7XG4gICAgY29uc3QgcyA9IGF3YWl0IFplKGUsIG4udG9rZW4sIGksIHZvaWQgMCksIGEgPSBhd2FpdCBYdChcbiAgICAgIHIubWV0YWRhdGEuc3RyaXBlX3BrLFxuICAgICAgcy5hbW91bnRBdG9tLFxuICAgICAgcy5jdXJyZW5jeSxcbiAgICAgIGlcbiAgICApO1xuICAgIEMoXCJDaGVja2luZyBpZiBjYW4gbWFrZSBwYXltZW50XCIpO1xuICAgIGNvbnN0IGMgPSBhd2FpdCBhLmNhbk1ha2VQYXltZW50KCk7XG4gICAgcmV0dXJuIGMgPT09IG51bGwgPyAobm4oXCJjYW5NYWtlUGF5bWVudCByZXR1cm5lZCBudWxsXCIpLCB7IGlzQXZhaWxhYmxlOiAhMSwgcmVhc29uOiBcImNhbk1ha2VQYXltZW50IHJldHVybmVkIG51bGxcIiB9KSA6IChDKFwiU3RyaXBlIFBSIGZsb3cgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LiBDYW4gbWFrZSBwYXltZW50XCIsIGMpLCB7XG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBwcjogYSxcbiAgICAgIGF2YWlsYWJsZVByb3ZpZGVyczoge1xuICAgICAgICBhcHBsZVBheTogYy5hcHBsZVBheSxcbiAgICAgICAgZ29vZ2xlUGF5OiBjLmdvb2dsZVBheVxuICAgICAgfVxuICAgIH0pO1xuICB9XG4pLCBhbiA9IHBlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGksXG4gICAgaW5pdFJlc3VsdDogc1xuICB9KSA9PiB7XG4gICAgaWYgKEMoXCJSdW5uaW5nIFN0cmlwZSBQUiBmbG93Li4uXCIpLCBpLnByb3ZpZGVyICE9PSByLnByb3ZpZGVyKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm92aWRlciBtaXNtYXRjaC4gRXhwZWN0ZWQgJHtpLnByb3ZpZGVyfSwgZ290ICR7ci5wcm92aWRlcn1gKTtcbiAgICBjb25zdCBhID0gdC5hbnlDZGVDb25uZWN0aW9uLCBjID0gcy5wcjtcbiAgICBpZiAoaSAhPSBudWxsICYmIGkub3ZlcnJpZGVQYXltZW50UmVxdWVzdCkge1xuICAgICAgY29uc3QgcCA9IGkub3ZlcnJpZGVQYXltZW50UmVxdWVzdDtcbiAgICAgIEMoXCJPdmVycmlkaW5nIFBSIGFtb3VudCB3aXRoXCIsIHApLCB1bihjLCBwLmFtb3VudCwgcC5wZW5kaW5nKTtcbiAgICB9XG4gICAgQyhcIlNob3dpbmcgUFIgZGlhbG9nLi4uXCIpLCBjLnNob3coKTtcbiAgICBjb25zdCBsID0gYXdhaXQgdHIoYyk7XG4gICAgQyhcIlN0cmlwZSBQTSBhZGRlZCBldmVudDpcIiwgbCksIEMoXCJNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uXCIpO1xuICAgIGNvbnN0IHUgPSBjbihlLCBsKSwgZCA9IG1lKFxuICAgICAgdSxcbiAgICAgIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yID8/ICgoKSA9PiB7XG4gICAgICB9KVxuICAgICk7XG4gICAgQyhcIlBSIGRpYWxvZyBmaW5pc2hlZC4gU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGggPSBhd2FpdCBUcihhLCB7XG4gICAgICBmaWVsZHM6IGQsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHJcbiAgICB9KSwgXyA9IGxuKGgpO1xuICAgIEMoXCJDb25maXJtaW5nIFBSIHdpdGggU3RyaXBlLi4uXCIpLCBhd2FpdCBycihfLCBsKTtcbiAgICBjb25zdCBmID0gYXdhaXQgeihhKTtcbiAgICBpZiAoZi5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIEMoXCJDb25maXJtaW5nIHBheW1lbnQgZmxvdyBmb3Igc2V0dXAuLi5cIik7XG4gICAgICBjb25zdCBwID0gYXdhaXQgZmUoYSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGYudG9rZW5cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGhlKHApIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIEMoXCJQZXJmb3JtaW5nIGNoZWNrb3V0Li4uXCIpO1xuICAgICAgY29uc3QgcCA9IHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBmLnRva2VuLFxuICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgcHJvdmlkZXJfdHlwZTogci5wcm92aWRlclxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21lcl9lbWFpbDogZFt5LkVNQUlMXSxcbiAgICAgICAgY3VzdG9tZXJfemlwX2NvZGU6IGRbeS5aSVBfQ09ERV0sXG4gICAgICAgIGN1c3RvbWVyX2NvdW50cnk6IGRbeS5DT1VOVFJZXSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IGRbeS5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgIGxpbmVfaXRlbXM6IGYubGluZV9pdGVtcyxcbiAgICAgICAgdG90YWxfYW1vdW50X2F0b206IGYuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgIGNhbmNlbF9hdF9lbmQ6ICExLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogclxuICAgICAgfTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCBHZShhLCBwKSB9O1xuICAgIH1cbiAgfVxuKSwgY24gPSAodCwgcikgPT4ge1xuICB2YXIgYSwgYywgbCwgdTtcbiAgY29uc3QgZSA9IHsgLi4udCB9LCBbbiwgLi4uaV0gPSAoKGMgPSAoYSA9IHIucGF5ZXJOYW1lKSA9PSBudWxsID8gdm9pZCAwIDogYS50cmltKCkpID09IG51bGwgPyB2b2lkIDAgOiBjLnNwbGl0KC9cXHMrLykpID8/IFtdLCBzID0gaS5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gIHJldHVybiBlW3kuRklSU1RfTkFNRV0gPSBlW3kuRklSU1RfTkFNRV0gfHwgbiB8fCBcIl9PUF9VTktOT1dOXCIsIGVbeS5MQVNUX05BTUVdID0gZVt5LkxBU1RfTkFNRV0gfHwgcyB8fCBcIl9PUF9VTktOT1dOXCIsIGVbeS5FTUFJTF0gPSBlW3kuRU1BSUxdIHx8IHIucGF5ZXJFbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCIsIGVbeS5aSVBfQ09ERV0gPSBlW3kuWklQX0NPREVdIHx8ICgobCA9IHIuc2hpcHBpbmdBZGRyZXNzKSA9PSBudWxsID8gdm9pZCAwIDogbC5wb3N0YWxDb2RlKSB8fCBcIjAwMDAwXCIsIGVbeS5DT1VOVFJZXSA9IGVbeS5DT1VOVFJZXSB8fCAoKHUgPSByLnNoaXBwaW5nQWRkcmVzcykgPT0gbnVsbCA/IHZvaWQgMCA6IHUuY291bnRyeSkgfHwgXCJVU1wiLCBDKFwiRmluYWwgZm9ybSBpbnB1dHM6XCIsIGUpLCBlO1xufSwgdW4gPSAodCwgciwgZSkgPT4ge1xuICB0LnVwZGF0ZSh7XG4gICAgdG90YWw6IHtcbiAgICAgIGFtb3VudDogci5hbW91bnRBdG9tLFxuICAgICAgbGFiZWw6IFwiVG90YWxcIixcbiAgICAgIHBlbmRpbmc6IGVcbiAgICB9LFxuICAgIGN1cnJlbmN5OiByLmN1cnJlbmN5XG4gIH0pO1xufSwgbG4gPSAodCkgPT4ge1xuICBpZiAodC5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RoICE9PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Igb2NjdXJyZWQuXG5EZXRhaWxzOiBnb3QgJHt0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGh9IHJlcXVpcmVkIHVzZXIgYWN0aW9uc2ApO1xuICByZXR1cm4gR3QucGFyc2UodC5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0pO1xufSwgdHQgPSAodCwgciwgZSkgPT4ge1xuICBjb25zdCBuID0gdC5maWx0ZXIoKGkpID0+IGkucHJvdmlkZXIgPT09IHIpO1xuICBpZiAobi5sZW5ndGggPT09IDApXG4gICAgdGhyb3cgY29uc29sZS5lcnJvcihcIkNQTXMgbGlzdFwiLCB0KSwgbmV3IEVycm9yKGBObyBDUE1zIGZvdW5kIHdpdGggcHJvdmlkZXIgJyR7cn0nIGFuZCBwcm9jZXNzb3IgJyR7ZX0nYCk7XG4gIGlmIChuLmxlbmd0aCAhPT0gMSlcbiAgICB0aHJvdyBjb25zb2xlLmVycm9yKFwiQ1BNcyBsaXN0XCIsIHQpLCBuZXcgRXJyb3IoYE1vcmUgdGhhbiBvbmUgQ1BNIGZvdW5kIHdpdGggcHJvdmlkZXIgJyR7cn0nIGFuZCBwcm9jZXNzb3IgJyR7ZX0nYCk7XG4gIHJldHVybiBuWzBdO1xufSwgTiA9IHtcbiAgLy8g4pyLIE5vdGU6IEZvciBmbG93cyB0aGF0IHJlcXVpcmUgaW5pdGlhbGl6YXRpb24sIHBsZWFzZSBhZGQgdGhlbSB0byBgaW5pdC1mbG93cy50c2BcbiAgLy8gQ29tbW9uXG4gIGNvbW1vbkNDOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiBRclxuICB9LFxuICAvLyBTdHJpcGVcbiAgc3RyaXBlUFI6IHtcbiAgICBpbml0OiBzbixcbiAgICBydW46IGFuXG4gIH0sXG4gIHN0cmlwZUxpbms6IHtcbiAgICBpbml0OiB6cixcbiAgICBydW46IEhyXG4gIH1cbiAgLy8g8J+RiSBBZGQgbW9yZSBmbG93cyBoZXJlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG59O1xudmFyIGNlID0gZnVuY3Rpb24odCwgcikge1xuICByZXR1cm4gY2UgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbihlLCBuKSB7XG4gICAgZS5fX3Byb3RvX18gPSBuO1xuICB9IHx8IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICBmb3IgKHZhciBpIGluIG4pIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLCBpKSAmJiAoZVtpXSA9IG5baV0pO1xuICB9LCBjZSh0LCByKTtcbn07XG5mdW5jdGlvbiBNKHQsIHIpIHtcbiAgaWYgKHR5cGVvZiByICE9IFwiZnVuY3Rpb25cIiAmJiByICE9PSBudWxsKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKHIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgY2UodCwgcik7XG4gIGZ1bmN0aW9uIGUoKSB7XG4gICAgdGhpcy5jb25zdHJ1Y3RvciA9IHQ7XG4gIH1cbiAgdC5wcm90b3R5cGUgPSByID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShyKSA6IChlLnByb3RvdHlwZSA9IHIucHJvdG90eXBlLCBuZXcgZSgpKTtcbn1cbmZ1bmN0aW9uIGRuKHQsIHIsIGUsIG4pIHtcbiAgZnVuY3Rpb24gaShzKSB7XG4gICAgcmV0dXJuIHMgaW5zdGFuY2VvZiBlID8gcyA6IG5ldyBlKGZ1bmN0aW9uKGEpIHtcbiAgICAgIGEocyk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG5ldyAoZSB8fCAoZSA9IFByb21pc2UpKShmdW5jdGlvbihzLCBhKSB7XG4gICAgZnVuY3Rpb24gYyhkKSB7XG4gICAgICB0cnkge1xuICAgICAgICB1KG4ubmV4dChkKSk7XG4gICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgIGEoaCk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGwoZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdShuLnRocm93KGQpKTtcbiAgICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgICAgYShoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdShkKSB7XG4gICAgICBkLmRvbmUgPyBzKGQudmFsdWUpIDogaShkLnZhbHVlKS50aGVuKGMsIGwpO1xuICAgIH1cbiAgICB1KChuID0gbi5hcHBseSh0LCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gcnQodCwgcikge1xuICB2YXIgZSA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmIChzWzBdICYgMSkgdGhyb3cgc1sxXTtcbiAgICByZXR1cm4gc1sxXTtcbiAgfSwgdHJ5czogW10sIG9wczogW10gfSwgbiwgaSwgcywgYSA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBJdGVyYXRvciA9PSBcImZ1bmN0aW9uXCIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTtcbiAgcmV0dXJuIGEubmV4dCA9IGMoMCksIGEudGhyb3cgPSBjKDEpLCBhLnJldHVybiA9IGMoMiksIHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIChhW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSksIGE7XG4gIGZ1bmN0aW9uIGModSkge1xuICAgIHJldHVybiBmdW5jdGlvbihkKSB7XG4gICAgICByZXR1cm4gbChbdSwgZF0pO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gbCh1KSB7XG4gICAgaWYgKG4pIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgIGZvciAoOyBhICYmIChhID0gMCwgdVswXSAmJiAoZSA9IDApKSwgZTsgKSB0cnkge1xuICAgICAgaWYgKG4gPSAxLCBpICYmIChzID0gdVswXSAmIDIgPyBpLnJldHVybiA6IHVbMF0gPyBpLnRocm93IHx8ICgocyA9IGkucmV0dXJuKSAmJiBzLmNhbGwoaSksIDApIDogaS5uZXh0KSAmJiAhKHMgPSBzLmNhbGwoaSwgdVsxXSkpLmRvbmUpIHJldHVybiBzO1xuICAgICAgc3dpdGNoIChpID0gMCwgcyAmJiAodSA9IFt1WzBdICYgMiwgcy52YWx1ZV0pLCB1WzBdKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHMgPSB1O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIGUubGFiZWwrKywgeyB2YWx1ZTogdVsxXSwgZG9uZTogITEgfTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIGUubGFiZWwrKywgaSA9IHVbMV0sIHUgPSBbMF07XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICB1ID0gZS5vcHMucG9wKCksIGUudHJ5cy5wb3AoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAocyA9IGUudHJ5cywgIShzID0gcy5sZW5ndGggPiAwICYmIHNbcy5sZW5ndGggLSAxXSkgJiYgKHVbMF0gPT09IDYgfHwgdVswXSA9PT0gMikpIHtcbiAgICAgICAgICAgIGUgPSAwO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1WzBdID09PSAzICYmICghcyB8fCB1WzFdID4gc1swXSAmJiB1WzFdIDwgc1szXSkpIHtcbiAgICAgICAgICAgIGUubGFiZWwgPSB1WzFdO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1WzBdID09PSA2ICYmIGUubGFiZWwgPCBzWzFdKSB7XG4gICAgICAgICAgICBlLmxhYmVsID0gc1sxXSwgcyA9IHU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHMgJiYgZS5sYWJlbCA8IHNbMl0pIHtcbiAgICAgICAgICAgIGUubGFiZWwgPSBzWzJdLCBlLm9wcy5wdXNoKHUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNbMl0gJiYgZS5vcHMucG9wKCksIGUudHJ5cy5wb3AoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHUgPSByLmNhbGwodCwgZSk7XG4gICAgfSBjYXRjaCAoZCkge1xuICAgICAgdSA9IFs2LCBkXSwgaSA9IDA7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIG4gPSBzID0gMDtcbiAgICB9XG4gICAgaWYgKHVbMF0gJiA1KSB0aHJvdyB1WzFdO1xuICAgIHJldHVybiB7IHZhbHVlOiB1WzBdID8gdVsxXSA6IHZvaWQgMCwgZG9uZTogITAgfTtcbiAgfVxufVxuZnVuY3Rpb24gVSh0KSB7XG4gIHZhciByID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBlID0gciAmJiB0W3JdLCBuID0gMDtcbiAgaWYgKGUpIHJldHVybiBlLmNhbGwodCk7XG4gIGlmICh0ICYmIHR5cGVvZiB0Lmxlbmd0aCA9PSBcIm51bWJlclwiKSByZXR1cm4ge1xuICAgIG5leHQ6IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHQgJiYgbiA+PSB0Lmxlbmd0aCAmJiAodCA9IHZvaWQgMCksIHsgdmFsdWU6IHQgJiYgdFtuKytdLCBkb25lOiAhdCB9O1xuICAgIH1cbiAgfTtcbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihyID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xufVxuZnVuY3Rpb24gVyh0LCByKSB7XG4gIHZhciBlID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgdFtTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIWUpIHJldHVybiB0O1xuICB2YXIgbiA9IGUuY2FsbCh0KSwgaSwgcyA9IFtdLCBhO1xuICB0cnkge1xuICAgIGZvciAoOyAociA9PT0gdm9pZCAwIHx8IHItLSA+IDApICYmICEoaSA9IG4ubmV4dCgpKS5kb25lOyApIHMucHVzaChpLnZhbHVlKTtcbiAgfSBjYXRjaCAoYykge1xuICAgIGEgPSB7IGVycm9yOiBjIH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGkgJiYgIWkuZG9uZSAmJiAoZSA9IG4ucmV0dXJuKSAmJiBlLmNhbGwobik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChhKSB0aHJvdyBhLmVycm9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcztcbn1cbmZ1bmN0aW9uIFEodCwgciwgZSkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgbiA9IDAsIGkgPSByLmxlbmd0aCwgczsgbiA8IGk7IG4rKylcbiAgICAocyB8fCAhKG4gaW4gcikpICYmIChzIHx8IChzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwociwgMCwgbikpLCBzW25dID0gcltuXSk7XG4gIHJldHVybiB0LmNvbmNhdChzIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHIpKTtcbn1cbmZ1bmN0aW9uIHgodCkge1xuICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIHggPyAodGhpcy52ID0gdCwgdGhpcykgOiBuZXcgeCh0KTtcbn1cbmZ1bmN0aW9uIGZuKHQsIHIsIGUpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG4gPSBlLmFwcGx5KHQsIHIgfHwgW10pLCBpLCBzID0gW107XG4gIHJldHVybiBpID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgYyhcIm5leHRcIiksIGMoXCJ0aHJvd1wiKSwgYyhcInJldHVyblwiLCBhKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgaTtcbiAgZnVuY3Rpb24gYShmKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHApIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocCkudGhlbihmLCBoKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGMoZiwgcCkge1xuICAgIG5bZl0gJiYgKGlbZl0gPSBmdW5jdGlvbihtKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oaywgTCkge1xuICAgICAgICBzLnB1c2goW2YsIG0sIGssIExdKSA+IDEgfHwgbChmLCBtKTtcbiAgICAgIH0pO1xuICAgIH0sIHAgJiYgKGlbZl0gPSBwKGlbZl0pKSk7XG4gIH1cbiAgZnVuY3Rpb24gbChmLCBwKSB7XG4gICAgdHJ5IHtcbiAgICAgIHUobltmXShwKSk7XG4gICAgfSBjYXRjaCAobSkge1xuICAgICAgXyhzWzBdWzNdLCBtKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gdShmKSB7XG4gICAgZi52YWx1ZSBpbnN0YW5jZW9mIHggPyBQcm9taXNlLnJlc29sdmUoZi52YWx1ZS52KS50aGVuKGQsIGgpIDogXyhzWzBdWzJdLCBmKTtcbiAgfVxuICBmdW5jdGlvbiBkKGYpIHtcbiAgICBsKFwibmV4dFwiLCBmKTtcbiAgfVxuICBmdW5jdGlvbiBoKGYpIHtcbiAgICBsKFwidGhyb3dcIiwgZik7XG4gIH1cbiAgZnVuY3Rpb24gXyhmLCBwKSB7XG4gICAgZihwKSwgcy5zaGlmdCgpLCBzLmxlbmd0aCAmJiBsKHNbMF1bMF0sIHNbMF1bMV0pO1xuICB9XG59XG5mdW5jdGlvbiBwbih0KSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciByID0gdFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGU7XG4gIHJldHVybiByID8gci5jYWxsKHQpIDogKHQgPSB0eXBlb2YgVSA9PSBcImZ1bmN0aW9uXCIgPyBVKHQpIDogdFtTeW1ib2wuaXRlcmF0b3JdKCksIGUgPSB7fSwgbihcIm5leHRcIiksIG4oXCJ0aHJvd1wiKSwgbihcInJldHVyblwiKSwgZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgZSk7XG4gIGZ1bmN0aW9uIG4ocykge1xuICAgIGVbc10gPSB0W3NdICYmIGZ1bmN0aW9uKGEpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihjLCBsKSB7XG4gICAgICAgIGEgPSB0W3NdKGEpLCBpKGMsIGwsIGEuZG9uZSwgYS52YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGkocywgYSwgYywgbCkge1xuICAgIFByb21pc2UucmVzb2x2ZShsKS50aGVuKGZ1bmN0aW9uKHUpIHtcbiAgICAgIHMoeyB2YWx1ZTogdSwgZG9uZTogYyB9KTtcbiAgICB9LCBhKTtcbiAgfVxufVxuZnVuY3Rpb24gdyh0KSB7XG4gIHJldHVybiB0eXBlb2YgdCA9PSBcImZ1bmN0aW9uXCI7XG59XG5mdW5jdGlvbiBuZSh0KSB7XG4gIHZhciByID0gZnVuY3Rpb24obikge1xuICAgIEVycm9yLmNhbGwobiksIG4uc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbiAgfSwgZSA9IHQocik7XG4gIHJldHVybiBlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSwgZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBlLCBlO1xufVxudmFyIG9lID0gbmUoZnVuY3Rpb24odCkge1xuICByZXR1cm4gZnVuY3Rpb24oZSkge1xuICAgIHQodGhpcyksIHRoaXMubWVzc2FnZSA9IGUgPyBlLmxlbmd0aCArIGAgZXJyb3JzIG9jY3VycmVkIGR1cmluZyB1bnN1YnNjcmlwdGlvbjpcbmAgKyBlLm1hcChmdW5jdGlvbihuLCBpKSB7XG4gICAgICByZXR1cm4gaSArIDEgKyBcIikgXCIgKyBuLnRvU3RyaW5nKCk7XG4gICAgfSkuam9pbihgXG4gIGApIDogXCJcIiwgdGhpcy5uYW1lID0gXCJVbnN1YnNjcmlwdGlvbkVycm9yXCIsIHRoaXMuZXJyb3JzID0gZTtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gWCh0LCByKSB7XG4gIGlmICh0KSB7XG4gICAgdmFyIGUgPSB0LmluZGV4T2Yocik7XG4gICAgMCA8PSBlICYmIHQuc3BsaWNlKGUsIDEpO1xuICB9XG59XG52YXIgSCA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiB0KHIpIHtcbiAgICB0aGlzLmluaXRpYWxUZWFyZG93biA9IHIsIHRoaXMuY2xvc2VkID0gITEsIHRoaXMuX3BhcmVudGFnZSA9IG51bGwsIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByLCBlLCBuLCBpLCBzO1xuICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgIHRoaXMuY2xvc2VkID0gITA7XG4gICAgICB2YXIgYSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgIGlmIChhKVxuICAgICAgICBpZiAodGhpcy5fcGFyZW50YWdlID0gbnVsbCwgQXJyYXkuaXNBcnJheShhKSlcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yICh2YXIgYyA9IFUoYSksIGwgPSBjLm5leHQoKTsgIWwuZG9uZTsgbCA9IGMubmV4dCgpKSB7XG4gICAgICAgICAgICAgIHZhciB1ID0gbC52YWx1ZTtcbiAgICAgICAgICAgICAgdS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAobSkge1xuICAgICAgICAgICAgciA9IHsgZXJyb3I6IG0gfTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgbCAmJiAhbC5kb25lICYmIChlID0gYy5yZXR1cm4pICYmIGUuY2FsbChjKTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgIGlmIChyKSB0aHJvdyByLmVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgIGEucmVtb3ZlKHRoaXMpO1xuICAgICAgdmFyIGQgPSB0aGlzLmluaXRpYWxUZWFyZG93bjtcbiAgICAgIGlmICh3KGQpKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGQoKTtcbiAgICAgICAgfSBjYXRjaCAobSkge1xuICAgICAgICAgIHMgPSBtIGluc3RhbmNlb2Ygb2UgPyBtLmVycm9ycyA6IFttXTtcbiAgICAgICAgfVxuICAgICAgdmFyIGggPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgICAgaWYgKGgpIHtcbiAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZm9yICh2YXIgXyA9IFUoaCksIGYgPSBfLm5leHQoKTsgIWYuZG9uZTsgZiA9IF8ubmV4dCgpKSB7XG4gICAgICAgICAgICB2YXIgcCA9IGYudmFsdWU7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBrZShwKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKG0pIHtcbiAgICAgICAgICAgICAgcyA9IHMgPz8gW10sIG0gaW5zdGFuY2VvZiBvZSA/IHMgPSBRKFEoW10sIFcocykpLCBXKG0uZXJyb3JzKSkgOiBzLnB1c2gobSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgICAgbiA9IHsgZXJyb3I6IG0gfTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZiAmJiAhZi5kb25lICYmIChpID0gXy5yZXR1cm4pICYmIGkuY2FsbChfKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgaWYgKG4pIHRocm93IG4uZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocylcbiAgICAgICAgdGhyb3cgbmV3IG9lKHMpO1xuICAgIH1cbiAgfSwgdC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlO1xuICAgIGlmIChyICYmIHIgIT09IHRoaXMpXG4gICAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICAgIGtlKHIpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGlmIChyIGluc3RhbmNlb2YgdCkge1xuICAgICAgICAgIGlmIChyLmNsb3NlZCB8fCByLl9oYXNQYXJlbnQodGhpcykpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgci5fYWRkUGFyZW50KHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgICh0aGlzLl9maW5hbGl6ZXJzID0gKGUgPSB0aGlzLl9maW5hbGl6ZXJzKSAhPT0gbnVsbCAmJiBlICE9PSB2b2lkIDAgPyBlIDogW10pLnB1c2gocik7XG4gICAgICB9XG4gIH0sIHQucHJvdG90eXBlLl9oYXNQYXJlbnQgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgcmV0dXJuIGUgPT09IHIgfHwgQXJyYXkuaXNBcnJheShlKSAmJiBlLmluY2x1ZGVzKHIpO1xuICB9LCB0LnByb3RvdHlwZS5fYWRkUGFyZW50ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgIHRoaXMuX3BhcmVudGFnZSA9IEFycmF5LmlzQXJyYXkoZSkgPyAoZS5wdXNoKHIpLCBlKSA6IGUgPyBbZSwgcl0gOiByO1xuICB9LCB0LnByb3RvdHlwZS5fcmVtb3ZlUGFyZW50ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgIGUgPT09IHIgPyB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsIDogQXJyYXkuaXNBcnJheShlKSAmJiBYKGUsIHIpO1xuICB9LCB0LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgIGUgJiYgWChlLCByKSwgciBpbnN0YW5jZW9mIHQgJiYgci5fcmVtb3ZlUGFyZW50KHRoaXMpO1xuICB9LCB0LkVNUFRZID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHIgPSBuZXcgdCgpO1xuICAgIHJldHVybiByLmNsb3NlZCA9ICEwLCByO1xuICB9KCksIHQ7XG59KCksIG50ID0gSC5FTVBUWTtcbmZ1bmN0aW9uIG90KHQpIHtcbiAgcmV0dXJuIHQgaW5zdGFuY2VvZiBIIHx8IHQgJiYgXCJjbG9zZWRcIiBpbiB0ICYmIHcodC5yZW1vdmUpICYmIHcodC5hZGQpICYmIHcodC51bnN1YnNjcmliZSk7XG59XG5mdW5jdGlvbiBrZSh0KSB7XG4gIHcodCkgPyB0KCkgOiB0LnVuc3Vic2NyaWJlKCk7XG59XG52YXIgaXQgPSB7XG4gIG9uVW5oYW5kbGVkRXJyb3I6IG51bGwsXG4gIG9uU3RvcHBlZE5vdGlmaWNhdGlvbjogbnVsbCxcbiAgUHJvbWlzZTogdm9pZCAwLFxuICB1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nOiAhMSxcbiAgdXNlRGVwcmVjYXRlZE5leHRDb250ZXh0OiAhMVxufSwgc3QgPSB7XG4gIHNldFRpbWVvdXQ6IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICBmb3IgKHZhciBlID0gW10sIG4gPSAyOyBuIDwgYXJndW1lbnRzLmxlbmd0aDsgbisrKVxuICAgICAgZVtuIC0gMl0gPSBhcmd1bWVudHNbbl07XG4gICAgcmV0dXJuIHNldFRpbWVvdXQuYXBwbHkodm9pZCAwLCBRKFt0LCByXSwgVyhlKSkpO1xuICB9LFxuICBjbGVhclRpbWVvdXQ6IGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gKGNsZWFyVGltZW91dCkodCk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn07XG5mdW5jdGlvbiBhdCh0KSB7XG4gIHN0LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgdGhyb3cgdDtcbiAgfSk7XG59XG5mdW5jdGlvbiBQZSgpIHtcbn1cbmZ1bmN0aW9uIEsodCkge1xuICB0KCk7XG59XG52YXIgeWUgPSBmdW5jdGlvbih0KSB7XG4gIE0ociwgdCk7XG4gIGZ1bmN0aW9uIHIoZSkge1xuICAgIHZhciBuID0gdC5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgcmV0dXJuIG4uaXNTdG9wcGVkID0gITEsIGUgPyAobi5kZXN0aW5hdGlvbiA9IGUsIG90KGUpICYmIGUuYWRkKG4pKSA6IG4uZGVzdGluYXRpb24gPSBfbiwgbjtcbiAgfVxuICByZXR1cm4gci5jcmVhdGUgPSBmdW5jdGlvbihlLCBuLCBpKSB7XG4gICAgcmV0dXJuIG5ldyB1ZShlLCBuLCBpKTtcbiAgfSwgci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKGUpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCB8fCB0aGlzLl9uZXh0KGUpO1xuICB9LCByLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKGUpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSAhMCwgdGhpcy5fZXJyb3IoZSkpO1xuICB9LCByLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaXNTdG9wcGVkIHx8ICh0aGlzLmlzU3RvcHBlZCA9ICEwLCB0aGlzLl9jb21wbGV0ZSgpKTtcbiAgfSwgci5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmNsb3NlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSAhMCwgdC5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKSwgdGhpcy5kZXN0aW5hdGlvbiA9IG51bGwpO1xuICB9LCByLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uKGUpIHtcbiAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQoZSk7XG4gIH0sIHIucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uKGUpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihlKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfSwgci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfSwgcjtcbn0oSCksIGhuID0gRnVuY3Rpb24ucHJvdG90eXBlLmJpbmQ7XG5mdW5jdGlvbiBpZSh0LCByKSB7XG4gIHJldHVybiBobi5jYWxsKHQsIHIpO1xufVxudmFyIG1uID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHQocikge1xuICAgIHRoaXMucGFydGlhbE9ic2VydmVyID0gcjtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgIGlmIChlLm5leHQpXG4gICAgICB0cnkge1xuICAgICAgICBlLm5leHQocik7XG4gICAgICB9IGNhdGNoIChuKSB7XG4gICAgICAgIEIobik7XG4gICAgICB9XG4gIH0sIHQucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKGUuZXJyb3IpXG4gICAgICB0cnkge1xuICAgICAgICBlLmVycm9yKHIpO1xuICAgICAgfSBjYXRjaCAobikge1xuICAgICAgICBCKG4pO1xuICAgICAgfVxuICAgIGVsc2VcbiAgICAgIEIocik7XG4gIH0sIHQucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHIgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICBpZiAoci5jb21wbGV0ZSlcbiAgICAgIHRyeSB7XG4gICAgICAgIHIuY29tcGxldGUoKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgQihlKTtcbiAgICAgIH1cbiAgfSwgdDtcbn0oKSwgdWUgPSBmdW5jdGlvbih0KSB7XG4gIE0ociwgdCk7XG4gIGZ1bmN0aW9uIHIoZSwgbiwgaSkge1xuICAgIHZhciBzID0gdC5jYWxsKHRoaXMpIHx8IHRoaXMsIGE7XG4gICAgaWYgKHcoZSkgfHwgIWUpXG4gICAgICBhID0ge1xuICAgICAgICBuZXh0OiBlID8/IHZvaWQgMCxcbiAgICAgICAgZXJyb3I6IG4gPz8gdm9pZCAwLFxuICAgICAgICBjb21wbGV0ZTogaSA/PyB2b2lkIDBcbiAgICAgIH07XG4gICAgZWxzZSB7XG4gICAgICB2YXIgYztcbiAgICAgIHMgJiYgaXQudXNlRGVwcmVjYXRlZE5leHRDb250ZXh0ID8gKGMgPSBPYmplY3QuY3JlYXRlKGUpLCBjLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9LCBhID0ge1xuICAgICAgICBuZXh0OiBlLm5leHQgJiYgaWUoZS5uZXh0LCBjKSxcbiAgICAgICAgZXJyb3I6IGUuZXJyb3IgJiYgaWUoZS5lcnJvciwgYyksXG4gICAgICAgIGNvbXBsZXRlOiBlLmNvbXBsZXRlICYmIGllKGUuY29tcGxldGUsIGMpXG4gICAgICB9KSA6IGEgPSBlO1xuICAgIH1cbiAgICByZXR1cm4gcy5kZXN0aW5hdGlvbiA9IG5ldyBtbihhKSwgcztcbiAgfVxuICByZXR1cm4gcjtcbn0oeWUpO1xuZnVuY3Rpb24gQih0KSB7XG4gIGF0KHQpO1xufVxuZnVuY3Rpb24geW4odCkge1xuICB0aHJvdyB0O1xufVxudmFyIF9uID0ge1xuICBjbG9zZWQ6ICEwLFxuICBuZXh0OiBQZSxcbiAgZXJyb3I6IHluLFxuICBjb21wbGV0ZTogUGVcbn0sIF9lID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wub2JzZXJ2YWJsZSB8fCBcIkBAb2JzZXJ2YWJsZVwiO1xufSgpO1xuZnVuY3Rpb24gZ24odCkge1xuICByZXR1cm4gdDtcbn1cbmZ1bmN0aW9uIGJuKHQpIHtcbiAgcmV0dXJuIHQubGVuZ3RoID09PSAwID8gZ24gOiB0Lmxlbmd0aCA9PT0gMSA/IHRbMF0gOiBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIHQucmVkdWNlKGZ1bmN0aW9uKG4sIGkpIHtcbiAgICAgIHJldHVybiBpKG4pO1xuICAgIH0sIGUpO1xuICB9O1xufVxudmFyIFQgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gdChyKSB7XG4gICAgciAmJiAodGhpcy5fc3Vic2NyaWJlID0gcik7XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSBuZXcgdCgpO1xuICAgIHJldHVybiBlLnNvdXJjZSA9IHRoaXMsIGUub3BlcmF0b3IgPSByLCBlO1xuICB9LCB0LnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbihyLCBlLCBuKSB7XG4gICAgdmFyIGkgPSB0aGlzLCBzID0gd24ocikgPyByIDogbmV3IHVlKHIsIGUsIG4pO1xuICAgIHJldHVybiBLKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGEgPSBpLCBjID0gYS5vcGVyYXRvciwgbCA9IGEuc291cmNlO1xuICAgICAgcy5hZGQoYyA/IGMuY2FsbChzLCBsKSA6IGwgPyBpLl9zdWJzY3JpYmUocykgOiBpLl90cnlTdWJzY3JpYmUocykpO1xuICAgIH0pLCBzO1xuICB9LCB0LnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24ocikge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5fc3Vic2NyaWJlKHIpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHIuZXJyb3IoZSk7XG4gICAgfVxuICB9LCB0LnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24ociwgZSkge1xuICAgIHZhciBuID0gdGhpcztcbiAgICByZXR1cm4gZSA9IEllKGUpLCBuZXcgZShmdW5jdGlvbihpLCBzKSB7XG4gICAgICB2YXIgYSA9IG5ldyB1ZSh7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uKGMpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgcihjKTtcbiAgICAgICAgICB9IGNhdGNoIChsKSB7XG4gICAgICAgICAgICBzKGwpLCBhLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogcyxcbiAgICAgICAgY29tcGxldGU6IGlcbiAgICAgIH0pO1xuICAgICAgbi5zdWJzY3JpYmUoYSk7XG4gICAgfSk7XG4gIH0sIHQucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGU7XG4gICAgcmV0dXJuIChlID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUuc3Vic2NyaWJlKHIpO1xuICB9LCB0LnByb3RvdHlwZVtfZV0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgdC5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uKCkge1xuICAgIGZvciAodmFyIHIgPSBbXSwgZSA9IDA7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspXG4gICAgICByW2VdID0gYXJndW1lbnRzW2VdO1xuICAgIHJldHVybiBibihyKSh0aGlzKTtcbiAgfSwgdC5wcm90b3R5cGUudG9Qcm9taXNlID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdGhpcztcbiAgICByZXR1cm4gciA9IEllKHIpLCBuZXcgcihmdW5jdGlvbihuLCBpKSB7XG4gICAgICB2YXIgcztcbiAgICAgIGUuc3Vic2NyaWJlKGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgcmV0dXJuIHMgPSBhO1xuICAgICAgfSwgZnVuY3Rpb24oYSkge1xuICAgICAgICByZXR1cm4gaShhKTtcbiAgICAgIH0sIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gbihzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9LCB0LmNyZWF0ZSA9IGZ1bmN0aW9uKHIpIHtcbiAgICByZXR1cm4gbmV3IHQocik7XG4gIH0sIHQ7XG59KCk7XG5mdW5jdGlvbiBJZSh0KSB7XG4gIHZhciByO1xuICByZXR1cm4gKHIgPSB0ID8/IGl0LlByb21pc2UpICE9PSBudWxsICYmIHIgIT09IHZvaWQgMCA/IHIgOiBQcm9taXNlO1xufVxuZnVuY3Rpb24gdm4odCkge1xuICByZXR1cm4gdCAmJiB3KHQubmV4dCkgJiYgdyh0LmVycm9yKSAmJiB3KHQuY29tcGxldGUpO1xufVxuZnVuY3Rpb24gd24odCkge1xuICByZXR1cm4gdCAmJiB0IGluc3RhbmNlb2YgeWUgfHwgdm4odCkgJiYgb3QodCk7XG59XG5mdW5jdGlvbiBFbih0KSB7XG4gIHJldHVybiB3KHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQubGlmdCk7XG59XG5mdW5jdGlvbiBTbih0KSB7XG4gIHJldHVybiBmdW5jdGlvbihyKSB7XG4gICAgaWYgKEVuKHIpKVxuICAgICAgcmV0dXJuIHIubGlmdChmdW5jdGlvbihlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIHQoZSwgdGhpcyk7XG4gICAgICAgIH0gY2F0Y2ggKG4pIHtcbiAgICAgICAgICB0aGlzLmVycm9yKG4pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZhYmxlIHR5cGVcIik7XG4gIH07XG59XG5mdW5jdGlvbiBDbih0LCByLCBlLCBuLCBpKSB7XG4gIHJldHVybiBuZXcga24odCwgciwgZSwgbiwgaSk7XG59XG52YXIga24gPSBmdW5jdGlvbih0KSB7XG4gIE0ociwgdCk7XG4gIGZ1bmN0aW9uIHIoZSwgbiwgaSwgcywgYSwgYykge1xuICAgIHZhciBsID0gdC5jYWxsKHRoaXMsIGUpIHx8IHRoaXM7XG4gICAgcmV0dXJuIGwub25GaW5hbGl6ZSA9IGEsIGwuc2hvdWxkVW5zdWJzY3JpYmUgPSBjLCBsLl9uZXh0ID0gbiA/IGZ1bmN0aW9uKHUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG4odSk7XG4gICAgICB9IGNhdGNoIChkKSB7XG4gICAgICAgIGUuZXJyb3IoZCk7XG4gICAgICB9XG4gICAgfSA6IHQucHJvdG90eXBlLl9uZXh0LCBsLl9lcnJvciA9IHMgPyBmdW5jdGlvbih1KSB7XG4gICAgICB0cnkge1xuICAgICAgICBzKHUpO1xuICAgICAgfSBjYXRjaCAoZCkge1xuICAgICAgICBlLmVycm9yKGQpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgIH0gOiB0LnByb3RvdHlwZS5fZXJyb3IsIGwuX2NvbXBsZXRlID0gaSA/IGZ1bmN0aW9uKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaSgpO1xuICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICBlLmVycm9yKHUpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgIH0gOiB0LnByb3RvdHlwZS5fY29tcGxldGUsIGw7XG4gIH1cbiAgcmV0dXJuIHIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGU7XG4gICAgaWYgKCF0aGlzLnNob3VsZFVuc3Vic2NyaWJlIHx8IHRoaXMuc2hvdWxkVW5zdWJzY3JpYmUoKSkge1xuICAgICAgdmFyIG4gPSB0aGlzLmNsb3NlZDtcbiAgICAgIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyksICFuICYmICgoZSA9IHRoaXMub25GaW5hbGl6ZSkgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwIHx8IGUuY2FsbCh0aGlzKSk7XG4gICAgfVxuICB9LCByO1xufSh5ZSksIFBuID0gbmUoZnVuY3Rpb24odCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdCh0aGlzKSwgdGhpcy5uYW1lID0gXCJPYmplY3RVbnN1YnNjcmliZWRFcnJvclwiLCB0aGlzLm1lc3NhZ2UgPSBcIm9iamVjdCB1bnN1YnNjcmliZWRcIjtcbiAgfTtcbn0pLCBjdCA9IGZ1bmN0aW9uKHQpIHtcbiAgTShyLCB0KTtcbiAgZnVuY3Rpb24gcigpIHtcbiAgICB2YXIgZSA9IHQuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiBlLmNsb3NlZCA9ICExLCBlLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCBlLm9ic2VydmVycyA9IFtdLCBlLmlzU3RvcHBlZCA9ICExLCBlLmhhc0Vycm9yID0gITEsIGUudGhyb3duRXJyb3IgPSBudWxsLCBlO1xuICB9XG4gIHJldHVybiByLnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuID0gbmV3IE9lKHRoaXMsIHRoaXMpO1xuICAgIHJldHVybiBuLm9wZXJhdG9yID0gZSwgbjtcbiAgfSwgci5wcm90b3R5cGUuX3Rocm93SWZDbG9zZWQgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICB0aHJvdyBuZXcgUG4oKTtcbiAgfSwgci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiA9IHRoaXM7XG4gICAgSyhmdW5jdGlvbigpIHtcbiAgICAgIHZhciBpLCBzO1xuICAgICAgaWYgKG4uX3Rocm93SWZDbG9zZWQoKSwgIW4uaXNTdG9wcGVkKSB7XG4gICAgICAgIG4uY3VycmVudE9ic2VydmVycyB8fCAobi5jdXJyZW50T2JzZXJ2ZXJzID0gQXJyYXkuZnJvbShuLm9ic2VydmVycykpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGZvciAodmFyIGEgPSBVKG4uY3VycmVudE9ic2VydmVycyksIGMgPSBhLm5leHQoKTsgIWMuZG9uZTsgYyA9IGEubmV4dCgpKSB7XG4gICAgICAgICAgICB2YXIgbCA9IGMudmFsdWU7XG4gICAgICAgICAgICBsLm5leHQoZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoICh1KSB7XG4gICAgICAgICAgaSA9IHsgZXJyb3I6IHUgfTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYyAmJiAhYy5kb25lICYmIChzID0gYS5yZXR1cm4pICYmIHMuY2FsbChhKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgaWYgKGkpIHRocm93IGkuZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIHIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuID0gdGhpcztcbiAgICBLKGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKG4uX3Rocm93SWZDbG9zZWQoKSwgIW4uaXNTdG9wcGVkKSB7XG4gICAgICAgIG4uaGFzRXJyb3IgPSBuLmlzU3RvcHBlZCA9ICEwLCBuLnRocm93bkVycm9yID0gZTtcbiAgICAgICAgZm9yICh2YXIgaSA9IG4ub2JzZXJ2ZXJzOyBpLmxlbmd0aDsgKVxuICAgICAgICAgIGkuc2hpZnQoKS5lcnJvcihlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZSA9IHRoaXM7XG4gICAgSyhmdW5jdGlvbigpIHtcbiAgICAgIGlmIChlLl90aHJvd0lmQ2xvc2VkKCksICFlLmlzU3RvcHBlZCkge1xuICAgICAgICBlLmlzU3RvcHBlZCA9ICEwO1xuICAgICAgICBmb3IgKHZhciBuID0gZS5vYnNlcnZlcnM7IG4ubGVuZ3RoOyApXG4gICAgICAgICAgbi5zaGlmdCgpLmNvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIHIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgPSB0aGlzLmNsb3NlZCA9ICEwLCB0aGlzLm9ic2VydmVycyA9IHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gIH0sIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwgXCJvYnNlcnZlZFwiLCB7XG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBlO1xuICAgICAgcmV0dXJuICgoZSA9IHRoaXMub2JzZXJ2ZXJzKSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlLmxlbmd0aCkgPiAwO1xuICAgIH0sXG4gICAgZW51bWVyYWJsZTogITEsXG4gICAgY29uZmlndXJhYmxlOiAhMFxuICB9KSwgci5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLCB0LnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlLmNhbGwodGhpcywgZSk7XG4gIH0sIHIucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSwgdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhlKSwgdGhpcy5faW5uZXJTdWJzY3JpYmUoZSk7XG4gIH0sIHIucHJvdG90eXBlLl9pbm5lclN1YnNjcmliZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiA9IHRoaXMsIGkgPSB0aGlzLCBzID0gaS5oYXNFcnJvciwgYSA9IGkuaXNTdG9wcGVkLCBjID0gaS5vYnNlcnZlcnM7XG4gICAgcmV0dXJuIHMgfHwgYSA/IG50IDogKHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGwsIGMucHVzaChlKSwgbmV3IEgoZnVuY3Rpb24oKSB7XG4gICAgICBuLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCBYKGMsIGUpO1xuICAgIH0pKTtcbiAgfSwgci5wcm90b3R5cGUuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4gPSB0aGlzLCBpID0gbi5oYXNFcnJvciwgcyA9IG4udGhyb3duRXJyb3IsIGEgPSBuLmlzU3RvcHBlZDtcbiAgICBpID8gZS5lcnJvcihzKSA6IGEgJiYgZS5jb21wbGV0ZSgpO1xuICB9LCByLnByb3RvdHlwZS5hc09ic2VydmFibGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZSA9IG5ldyBUKCk7XG4gICAgcmV0dXJuIGUuc291cmNlID0gdGhpcywgZTtcbiAgfSwgci5jcmVhdGUgPSBmdW5jdGlvbihlLCBuKSB7XG4gICAgcmV0dXJuIG5ldyBPZShlLCBuKTtcbiAgfSwgcjtcbn0oVCksIE9lID0gZnVuY3Rpb24odCkge1xuICBNKHIsIHQpO1xuICBmdW5jdGlvbiByKGUsIG4pIHtcbiAgICB2YXIgaSA9IHQuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiBpLmRlc3RpbmF0aW9uID0gZSwgaS5zb3VyY2UgPSBuLCBpO1xuICB9XG4gIHJldHVybiByLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuLCBpO1xuICAgIChpID0gKG4gPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuLm5leHQpID09PSBudWxsIHx8IGkgPT09IHZvaWQgMCB8fCBpLmNhbGwobiwgZSk7XG4gIH0sIHIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuLCBpO1xuICAgIChpID0gKG4gPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuLmVycm9yKSA9PT0gbnVsbCB8fCBpID09PSB2b2lkIDAgfHwgaS5jYWxsKG4sIGUpO1xuICB9LCByLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlLCBuO1xuICAgIChuID0gKGUgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlLmNvbXBsZXRlKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgfHwgbi5jYWxsKGUpO1xuICB9LCByLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuLCBpO1xuICAgIHJldHVybiAoaSA9IChuID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG4uc3Vic2NyaWJlKGUpKSAhPT0gbnVsbCAmJiBpICE9PSB2b2lkIDAgPyBpIDogbnQ7XG4gIH0sIHI7XG59KGN0KSwgSW4gPSB7XG4gIG5vdzogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIERhdGUubm93KCk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn0sIE9uID0gZnVuY3Rpb24odCkge1xuICBNKHIsIHQpO1xuICBmdW5jdGlvbiByKGUsIG4pIHtcbiAgICByZXR1cm4gdC5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gIH1cbiAgcmV0dXJuIHIucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24oZSwgbikge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCByO1xufShIKSwgQWUgPSB7XG4gIHNldEludGVydmFsOiBmdW5jdGlvbih0LCByKSB7XG4gICAgZm9yICh2YXIgZSA9IFtdLCBuID0gMjsgbiA8IGFyZ3VtZW50cy5sZW5ndGg7IG4rKylcbiAgICAgIGVbbiAtIDJdID0gYXJndW1lbnRzW25dO1xuICAgIHJldHVybiBzZXRJbnRlcnZhbC5hcHBseSh2b2lkIDAsIFEoW3QsIHJdLCBXKGUpKSk7XG4gIH0sXG4gIGNsZWFySW50ZXJ2YWw6IGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gY2xlYXJJbnRlcnZhbCh0KTtcbiAgfSxcbiAgZGVsZWdhdGU6IHZvaWQgMFxufSwgQW4gPSBmdW5jdGlvbih0KSB7XG4gIE0ociwgdCk7XG4gIGZ1bmN0aW9uIHIoZSwgbikge1xuICAgIHZhciBpID0gdC5jYWxsKHRoaXMsIGUsIG4pIHx8IHRoaXM7XG4gICAgcmV0dXJuIGkuc2NoZWR1bGVyID0gZSwgaS53b3JrID0gbiwgaS5wZW5kaW5nID0gITEsIGk7XG4gIH1cbiAgcmV0dXJuIHIucHJvdG90eXBlLnNjaGVkdWxlID0gZnVuY3Rpb24oZSwgbikge1xuICAgIHZhciBpO1xuICAgIGlmIChuID09PSB2b2lkIDAgJiYgKG4gPSAwKSwgdGhpcy5jbG9zZWQpXG4gICAgICByZXR1cm4gdGhpcztcbiAgICB0aGlzLnN0YXRlID0gZTtcbiAgICB2YXIgcyA9IHRoaXMuaWQsIGEgPSB0aGlzLnNjaGVkdWxlcjtcbiAgICByZXR1cm4gcyAhPSBudWxsICYmICh0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChhLCBzLCBuKSksIHRoaXMucGVuZGluZyA9ICEwLCB0aGlzLmRlbGF5ID0gbiwgdGhpcy5pZCA9IChpID0gdGhpcy5pZCkgIT09IG51bGwgJiYgaSAhPT0gdm9pZCAwID8gaSA6IHRoaXMucmVxdWVzdEFzeW5jSWQoYSwgdGhpcy5pZCwgbiksIHRoaXM7XG4gIH0sIHIucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkID0gZnVuY3Rpb24oZSwgbiwgaSkge1xuICAgIHJldHVybiBpID09PSB2b2lkIDAgJiYgKGkgPSAwKSwgQWUuc2V0SW50ZXJ2YWwoZS5mbHVzaC5iaW5kKGUsIHRoaXMpLCBpKTtcbiAgfSwgci5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQgPSBmdW5jdGlvbihlLCBuLCBpKSB7XG4gICAgaWYgKGkgPT09IHZvaWQgMCAmJiAoaSA9IDApLCBpICE9IG51bGwgJiYgdGhpcy5kZWxheSA9PT0gaSAmJiB0aGlzLnBlbmRpbmcgPT09ICExKVxuICAgICAgcmV0dXJuIG47XG4gICAgbiAhPSBudWxsICYmIEFlLmNsZWFySW50ZXJ2YWwobik7XG4gIH0sIHIucHJvdG90eXBlLmV4ZWN1dGUgPSBmdW5jdGlvbihlLCBuKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKVxuICAgICAgcmV0dXJuIG5ldyBFcnJvcihcImV4ZWN1dGluZyBhIGNhbmNlbGxlZCBhY3Rpb25cIik7XG4gICAgdGhpcy5wZW5kaW5nID0gITE7XG4gICAgdmFyIGkgPSB0aGlzLl9leGVjdXRlKGUsIG4pO1xuICAgIGlmIChpKVxuICAgICAgcmV0dXJuIGk7XG4gICAgdGhpcy5wZW5kaW5nID09PSAhMSAmJiB0aGlzLmlkICE9IG51bGwgJiYgKHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHRoaXMuc2NoZWR1bGVyLCB0aGlzLmlkLCBudWxsKSk7XG4gIH0sIHIucHJvdG90eXBlLl9leGVjdXRlID0gZnVuY3Rpb24oZSwgbikge1xuICAgIHZhciBpID0gITEsIHM7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMud29yayhlKTtcbiAgICB9IGNhdGNoIChhKSB7XG4gICAgICBpID0gITAsIHMgPSBhIHx8IG5ldyBFcnJvcihcIlNjaGVkdWxlZCBhY3Rpb24gdGhyZXcgZmFsc3kgZXJyb3JcIik7XG4gICAgfVxuICAgIGlmIChpKVxuICAgICAgcmV0dXJuIHRoaXMudW5zdWJzY3JpYmUoKSwgcztcbiAgfSwgci5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XG4gICAgICB2YXIgZSA9IHRoaXMsIG4gPSBlLmlkLCBpID0gZS5zY2hlZHVsZXIsIHMgPSBpLmFjdGlvbnM7XG4gICAgICB0aGlzLndvcmsgPSB0aGlzLnN0YXRlID0gdGhpcy5zY2hlZHVsZXIgPSBudWxsLCB0aGlzLnBlbmRpbmcgPSAhMSwgWChzLCB0aGlzKSwgbiAhPSBudWxsICYmICh0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChpLCBuLCBudWxsKSksIHRoaXMuZGVsYXkgPSBudWxsLCB0LnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgIH1cbiAgfSwgcjtcbn0oT24pLCBSZSA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiB0KHIsIGUpIHtcbiAgICBlID09PSB2b2lkIDAgJiYgKGUgPSB0Lm5vdyksIHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3RvciA9IHIsIHRoaXMubm93ID0gZTtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihyLCBlLCBuKSB7XG4gICAgcmV0dXJuIGUgPT09IHZvaWQgMCAmJiAoZSA9IDApLCBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsIHIpLnNjaGVkdWxlKG4sIGUpO1xuICB9LCB0Lm5vdyA9IEluLm5vdywgdDtcbn0oKSwgUm4gPSBmdW5jdGlvbih0KSB7XG4gIE0ociwgdCk7XG4gIGZ1bmN0aW9uIHIoZSwgbikge1xuICAgIG4gPT09IHZvaWQgMCAmJiAobiA9IFJlLm5vdyk7XG4gICAgdmFyIGkgPSB0LmNhbGwodGhpcywgZSwgbikgfHwgdGhpcztcbiAgICByZXR1cm4gaS5hY3Rpb25zID0gW10sIGkuX2FjdGl2ZSA9ICExLCBpO1xuICB9XG4gIHJldHVybiByLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiA9IHRoaXMuYWN0aW9ucztcbiAgICBpZiAodGhpcy5fYWN0aXZlKSB7XG4gICAgICBuLnB1c2goZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBpO1xuICAgIHRoaXMuX2FjdGl2ZSA9ICEwO1xuICAgIGRvXG4gICAgICBpZiAoaSA9IGUuZXhlY3V0ZShlLnN0YXRlLCBlLmRlbGF5KSlcbiAgICAgICAgYnJlYWs7XG4gICAgd2hpbGUgKGUgPSBuLnNoaWZ0KCkpO1xuICAgIGlmICh0aGlzLl9hY3RpdmUgPSAhMSwgaSkge1xuICAgICAgZm9yICg7IGUgPSBuLnNoaWZ0KCk7IClcbiAgICAgICAgZS51bnN1YnNjcmliZSgpO1xuICAgICAgdGhyb3cgaTtcbiAgICB9XG4gIH0sIHI7XG59KFJlKSwgVG4gPSBuZXcgUm4oQW4pLCBqbiA9IGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIHQgJiYgdHlwZW9mIHQubGVuZ3RoID09IFwibnVtYmVyXCIgJiYgdHlwZW9mIHQgIT0gXCJmdW5jdGlvblwiO1xufTtcbmZ1bmN0aW9uIE1uKHQpIHtcbiAgcmV0dXJuIHcodCA9PSBudWxsID8gdm9pZCAwIDogdC50aGVuKTtcbn1cbmZ1bmN0aW9uIExuKHQpIHtcbiAgcmV0dXJuIHcodFtfZV0pO1xufVxuZnVuY3Rpb24gRm4odCkge1xuICByZXR1cm4gU3ltYm9sLmFzeW5jSXRlcmF0b3IgJiYgdyh0ID09IG51bGwgPyB2b2lkIDAgOiB0W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSk7XG59XG5mdW5jdGlvbiBEbih0KSB7XG4gIHJldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IHByb3ZpZGVkIFwiICsgKHQgIT09IG51bGwgJiYgdHlwZW9mIHQgPT0gXCJvYmplY3RcIiA/IFwiYW4gaW52YWxpZCBvYmplY3RcIiA6IFwiJ1wiICsgdCArIFwiJ1wiKSArIFwiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuXCIpO1xufVxuZnVuY3Rpb24geG4oKSB7XG4gIHJldHVybiB0eXBlb2YgU3ltYm9sICE9IFwiZnVuY3Rpb25cIiB8fCAhU3ltYm9sLml0ZXJhdG9yID8gXCJAQGl0ZXJhdG9yXCIgOiBTeW1ib2wuaXRlcmF0b3I7XG59XG52YXIgTm4gPSB4bigpO1xuZnVuY3Rpb24gVW4odCkge1xuICByZXR1cm4gdyh0ID09IG51bGwgPyB2b2lkIDAgOiB0W05uXSk7XG59XG5mdW5jdGlvbiAkbih0KSB7XG4gIHJldHVybiBmbih0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCkge1xuICAgIHZhciBlLCBuLCBpLCBzO1xuICAgIHJldHVybiBydCh0aGlzLCBmdW5jdGlvbihhKSB7XG4gICAgICBzd2l0Y2ggKGEubGFiZWwpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIGUgPSB0LmdldFJlYWRlcigpLCBhLmxhYmVsID0gMTtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGEudHJ5cy5wdXNoKFsxLCAsIDksIDEwXSksIGEubGFiZWwgPSAyO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgcmV0dXJuIFs0LCB4KGUucmVhZCgpKV07XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICByZXR1cm4gbiA9IGEuc2VudCgpLCBpID0gbi52YWx1ZSwgcyA9IG4uZG9uZSwgcyA/IFs0LCB4KHZvaWQgMCldIDogWzMsIDVdO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIFsyLCBhLnNlbnQoKV07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByZXR1cm4gWzQsIHgoaSldO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgcmV0dXJuIFs0LCBhLnNlbnQoKV07XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICByZXR1cm4gYS5zZW50KCksIFszLCAyXTtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIHJldHVybiBbMywgMTBdO1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgcmV0dXJuIGUucmVsZWFzZUxvY2soKSwgWzddO1xuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gVm4odCkge1xuICByZXR1cm4gdyh0ID09IG51bGwgPyB2b2lkIDAgOiB0LmdldFJlYWRlcik7XG59XG5mdW5jdGlvbiBxbih0KSB7XG4gIGlmICh0IGluc3RhbmNlb2YgVClcbiAgICByZXR1cm4gdDtcbiAgaWYgKHQgIT0gbnVsbCkge1xuICAgIGlmIChMbih0KSlcbiAgICAgIHJldHVybiB6bih0KTtcbiAgICBpZiAoam4odCkpXG4gICAgICByZXR1cm4gSG4odCk7XG4gICAgaWYgKE1uKHQpKVxuICAgICAgcmV0dXJuIFluKHQpO1xuICAgIGlmIChGbih0KSlcbiAgICAgIHJldHVybiB1dCh0KTtcbiAgICBpZiAoVW4odCkpXG4gICAgICByZXR1cm4gQm4odCk7XG4gICAgaWYgKFZuKHQpKVxuICAgICAgcmV0dXJuIEtuKHQpO1xuICB9XG4gIHRocm93IERuKHQpO1xufVxuZnVuY3Rpb24gem4odCkge1xuICByZXR1cm4gbmV3IFQoZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdFtfZV0oKTtcbiAgICBpZiAodyhlLnN1YnNjcmliZSkpXG4gICAgICByZXR1cm4gZS5zdWJzY3JpYmUocik7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlXCIpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIEhuKHQpIHtcbiAgcmV0dXJuIG5ldyBUKGZ1bmN0aW9uKHIpIHtcbiAgICBmb3IgKHZhciBlID0gMDsgZSA8IHQubGVuZ3RoICYmICFyLmNsb3NlZDsgZSsrKVxuICAgICAgci5uZXh0KHRbZV0pO1xuICAgIHIuY29tcGxldGUoKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBZbih0KSB7XG4gIHJldHVybiBuZXcgVChmdW5jdGlvbihyKSB7XG4gICAgdC50aGVuKGZ1bmN0aW9uKGUpIHtcbiAgICAgIHIuY2xvc2VkIHx8IChyLm5leHQoZSksIHIuY29tcGxldGUoKSk7XG4gICAgfSwgZnVuY3Rpb24oZSkge1xuICAgICAgcmV0dXJuIHIuZXJyb3IoZSk7XG4gICAgfSkudGhlbihudWxsLCBhdCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gQm4odCkge1xuICByZXR1cm4gbmV3IFQoZnVuY3Rpb24ocikge1xuICAgIHZhciBlLCBuO1xuICAgIHRyeSB7XG4gICAgICBmb3IgKHZhciBpID0gVSh0KSwgcyA9IGkubmV4dCgpOyAhcy5kb25lOyBzID0gaS5uZXh0KCkpIHtcbiAgICAgICAgdmFyIGEgPSBzLnZhbHVlO1xuICAgICAgICBpZiAoci5uZXh0KGEpLCByLmNsb3NlZClcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBjYXRjaCAoYykge1xuICAgICAgZSA9IHsgZXJyb3I6IGMgfTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcyAmJiAhcy5kb25lICYmIChuID0gaS5yZXR1cm4pICYmIG4uY2FsbChpKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChlKSB0aHJvdyBlLmVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgICByLmNvbXBsZXRlKCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gdXQodCkge1xuICByZXR1cm4gbmV3IFQoZnVuY3Rpb24ocikge1xuICAgIEpuKHQsIHIpLmNhdGNoKGZ1bmN0aW9uKGUpIHtcbiAgICAgIHJldHVybiByLmVycm9yKGUpO1xuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIEtuKHQpIHtcbiAgcmV0dXJuIHV0KCRuKHQpKTtcbn1cbmZ1bmN0aW9uIEpuKHQsIHIpIHtcbiAgdmFyIGUsIG4sIGksIHM7XG4gIHJldHVybiBkbih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24oKSB7XG4gICAgdmFyIGEsIGM7XG4gICAgcmV0dXJuIHJ0KHRoaXMsIGZ1bmN0aW9uKGwpIHtcbiAgICAgIHN3aXRjaCAobC5sYWJlbCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgbC50cnlzLnB1c2goWzAsIDUsIDYsIDExXSksIGUgPSBwbih0KSwgbC5sYWJlbCA9IDE7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICByZXR1cm4gWzQsIGUubmV4dCgpXTtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIGlmIChuID0gbC5zZW50KCksICEhbi5kb25lKSByZXR1cm4gWzMsIDRdO1xuICAgICAgICAgIGlmIChhID0gbi52YWx1ZSwgci5uZXh0KGEpLCByLmNsb3NlZClcbiAgICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICAgICAgbC5sYWJlbCA9IDM7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICByZXR1cm4gWzMsIDFdO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIFszLCAxMV07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByZXR1cm4gYyA9IGwuc2VudCgpLCBpID0geyBlcnJvcjogYyB9LCBbMywgMTFdO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgcmV0dXJuIGwudHJ5cy5wdXNoKFs2LCAsIDksIDEwXSksIG4gJiYgIW4uZG9uZSAmJiAocyA9IGUucmV0dXJuKSA/IFs0LCBzLmNhbGwoZSldIDogWzMsIDhdO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgbC5zZW50KCksIGwubGFiZWwgPSA4O1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgcmV0dXJuIFszLCAxMF07XG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICBpZiAoaSkgdGhyb3cgaS5lcnJvcjtcbiAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgcmV0dXJuIHIuY29tcGxldGUoKSwgWzJdO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIFpuKHQsIHIsIGUsIG4sIGkpIHtcbiAgbiA9PT0gdm9pZCAwICYmIChuID0gMCksIGkgPT09IHZvaWQgMCAmJiAoaSA9ICExKTtcbiAgdmFyIHMgPSByLnNjaGVkdWxlKGZ1bmN0aW9uKCkge1xuICAgIGUoKSwgaSA/IHQuYWRkKHRoaXMuc2NoZWR1bGUobnVsbCwgbikpIDogdGhpcy51bnN1YnNjcmliZSgpO1xuICB9LCBuKTtcbiAgaWYgKHQuYWRkKHMpLCAhaSlcbiAgICByZXR1cm4gcztcbn1cbmZ1bmN0aW9uIEduKHQsIHIpIHtcbiAgdmFyIGUgPSB3KHQpID8gdCA6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0O1xuICB9LCBuID0gZnVuY3Rpb24oaSkge1xuICAgIHJldHVybiBpLmVycm9yKGUoKSk7XG4gIH07XG4gIHJldHVybiBuZXcgVChuKTtcbn1cbnZhciBXbiA9IG5lKGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHQodGhpcyksIHRoaXMubmFtZSA9IFwiRW1wdHlFcnJvclwiLCB0aGlzLm1lc3NhZ2UgPSBcIm5vIGVsZW1lbnRzIGluIHNlcXVlbmNlXCI7XG4gIH07XG59KTtcbmZ1bmN0aW9uIFFuKHQsIHIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUsIG4pIHtcbiAgICB2YXIgaSA9ICExLCBzO1xuICAgIHQuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgcyA9IGEsIGkgPSAhMDtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogbixcbiAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgaSA/IGUocykgOiBuKG5ldyBXbigpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBYbih0KSB7XG4gIHJldHVybiB0IGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4odCk7XG59XG52YXIgZW8gPSBuZShmdW5jdGlvbih0KSB7XG4gIHJldHVybiBmdW5jdGlvbihlKSB7XG4gICAgZSA9PT0gdm9pZCAwICYmIChlID0gbnVsbCksIHQodGhpcyksIHRoaXMubWVzc2FnZSA9IFwiVGltZW91dCBoYXMgb2NjdXJyZWRcIiwgdGhpcy5uYW1lID0gXCJUaW1lb3V0RXJyb3JcIiwgdGhpcy5pbmZvID0gZTtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gdG8odCwgcikge1xuICB2YXIgZSA9IFhuKHQpID8geyBmaXJzdDogdCB9IDogdHlwZW9mIHQgPT0gXCJudW1iZXJcIiA/IHsgZWFjaDogdCB9IDogdCwgbiA9IGUuZmlyc3QsIGkgPSBlLmVhY2gsIHMgPSBlLndpdGgsIGEgPSBzID09PSB2b2lkIDAgPyBybyA6IHMsIGMgPSBlLnNjaGVkdWxlciwgbCA9IGMgPT09IHZvaWQgMCA/IFRuIDogYywgdSA9IGUubWV0YSwgZCA9IHUgPT09IHZvaWQgMCA/IG51bGwgOiB1O1xuICBpZiAobiA9PSBudWxsICYmIGkgPT0gbnVsbClcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm8gdGltZW91dCBwcm92aWRlZC5cIik7XG4gIHJldHVybiBTbihmdW5jdGlvbihoLCBfKSB7XG4gICAgdmFyIGYsIHAsIG0gPSBudWxsLCBrID0gMCwgTCA9IGZ1bmN0aW9uKEYpIHtcbiAgICAgIHAgPSBabihfLCBsLCBmdW5jdGlvbigpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmLnVuc3Vic2NyaWJlKCksIHFuKGEoe1xuICAgICAgICAgICAgbWV0YTogZCxcbiAgICAgICAgICAgIGxhc3RWYWx1ZTogbSxcbiAgICAgICAgICAgIHNlZW46IGtcbiAgICAgICAgICB9KSkuc3Vic2NyaWJlKF8pO1xuICAgICAgICB9IGNhdGNoIChsdCkge1xuICAgICAgICAgIF8uZXJyb3IobHQpO1xuICAgICAgICB9XG4gICAgICB9LCBGKTtcbiAgICB9O1xuICAgIGYgPSBoLnN1YnNjcmliZShDbihfLCBmdW5jdGlvbihGKSB7XG4gICAgICBwID09IG51bGwgfHwgcC51bnN1YnNjcmliZSgpLCBrKyssIF8ubmV4dChtID0gRiksIGkgPiAwICYmIEwoaSk7XG4gICAgfSwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKCkge1xuICAgICAgcCAhPSBudWxsICYmIHAuY2xvc2VkIHx8IHAgPT0gbnVsbCB8fCBwLnVuc3Vic2NyaWJlKCksIG0gPSBudWxsO1xuICAgIH0pKSwgIWsgJiYgTChuICE9IG51bGwgPyB0eXBlb2YgbiA9PSBcIm51bWJlclwiID8gbiA6ICtuIC0gbC5ub3coKSA6IGkpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHJvKHQpIHtcbiAgdGhyb3cgbmV3IGVvKHQpO1xufVxuY2xhc3MgSiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0ID0gKHIpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcInN1Y2Nlc3NcIiwgaXNTdWNjZXNzOiAhMCwgbG9hZGVkVmFsdWU6IHIgfSwgdGhpcy5fc3ViamVjdC5uZXh0KHIpLCB0aGlzLl9zdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgfSwgdGhpcy50aHJvdyA9IChyLCBlKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkZWRPbmNlIGlzIGFscmVhZHkgaW4gc3VjY2VzcyBzdGF0ZVwiKTtcbiAgICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJlcnJvclwiLCBpc1N1Y2Nlc3M6ICExLCBlcnJvcjogciwgZXJyTXNnOiBlIH0sIHRoaXMuX3N1YmplY3QuZXJyb3Iocik7XG4gICAgfSwgdGhpcy5nZXRWYWx1ZUlmTG9hZGVkRWxzZSA9IChyKSA9PiB0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIgPyB0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlIDogciwgdGhpcy5zdWJzY3JpYmUgPSAocikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICByKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiICYmIHIodGhpcy5fY3VycmVudCk7XG4gICAgICBjb25zdCBlID0gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcInN1Y2Nlc3NcIilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGUgKG5leHQpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgcih0aGlzLl9jdXJyZW50KSwgZS51bnN1YnNjcmliZSgpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJlcnJvclwiKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAoZXJyb3IpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgcih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSwgdGhpcy53YWl0Rm9yTG9hZCA9IChyKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWUpO1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIpIHJldHVybiBQcm9taXNlLnJlamVjdCh0aGlzLl9jdXJyZW50LmVycm9yKTtcbiAgICAgIHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImluaXRpYWxcIiAmJiBEcih0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IGUgPSB7XG4gICAgICAgIGZpcnN0OiByLnRpbWVvdXRTZWMgKiAxZTMsXG4gICAgICAgIHdpdGg6ICgpID0+IEduKCgpID0+IG5ldyBFcnJvcihyLnRpbWVvdXRFcnJNc2cpKVxuICAgICAgfTtcbiAgICAgIHJldHVybiBRbih0aGlzLl9zdWJqZWN0LnBpcGUodG8oZSkpKTtcbiAgICB9LCB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiaW5pdGlhbFwiLCBpc1N1Y2Nlc3M6ICExIH0sIHRoaXMuX3N1YmplY3QgPSBuZXcgY3QoKTtcbiAgfVxuICBnZXQgY3VycmVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudDtcbiAgfVxufVxuY29uc3QgeyBsb2dfXzogbm8sIGVycl9fOiBvbyB9ID0gQShcImluaXQtZmxvd3NcIiksIFRlID0gKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IG5ldyBKKCk7XG4gIHJldHVybiB7XG4gICAgcHVibGlzaGVyOiBlLFxuICAgIGluaXRpYWxpemU6IGFzeW5jIChuKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoZS5jdXJyZW50LmlzU3VjY2VzcylcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIGZsb3cgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC5cIik7XG4gICAgICAgIGNvbnN0IGkgPSBhd2FpdCByKG4pO1xuICAgICAgICBubyhg4pyUICR7dH0gZmxvdyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuIFJlc3VsdDpgLCBpKSwgZS5zZXQoaSk7XG4gICAgICB9IGNhdGNoIChpKSB7XG4gICAgICAgIG9vKGDwnZmtICR7dH0gZmxvdyBpbml0aWFsaXphdGlvbiBmYWlsZWQuIEVycm9yOmAsICQoaSksIFwiRGV0YWlsczpcIiwgaSksIGUudGhyb3coaSwgJChpKSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufSwgaW8gPSBhc3luYyAodCwgciwgZSkgPT4ge1xuICBhd2FpdCBQcm9taXNlLmFsbChPYmplY3QudmFsdWVzKHQpLm1hcCgobikgPT4gbi5pbml0aWFsaXplKHsgY29udGV4dDogciwgZm9ybUNhbGxiYWNrczogZSB9KSkpO1xufSwgc28gPSAoKSA9PiAoe1xuICAvLyDwn5KhIEFkZCBuZXcgaW5pdCBmbG93cyBoZXJlXG4gIC8vIFN0cmlwZSBQUlxuICBzdHJpcGVQUjogVGUoXCJTdHJpcGUgUFJcIiwgTi5zdHJpcGVQUi5pbml0KSxcbiAgLy8gU3RyaXBlIExpbmtcbiAgc3RyaXBlTGluazogVGUoXCJTdHJpcGUgTGlua1wiLCBOLnN0cmlwZUxpbmsuaW5pdClcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbn0pLCB7IGVycl9fOiBhbyB9ID0gQShcImZvcm0tY2FsbGJhY2tzXCIpLCBQID0geiQxLmZ1bmN0aW9uKCkub3B0aW9uYWwoKSwgY28gPSB6JDEub2JqZWN0KHtcbiAgb25Gb2N1czogUCxcbiAgb25CbHVyOiBQLFxuICBvbkNoYW5nZTogUCxcbiAgb25Mb2FkOiBQLFxuICBvbkxvYWRFcnJvcjogUCxcbiAgb25WYWxpZGF0aW9uRXJyb3I6IFAsXG4gIG9uQ2hlY2tvdXRTdGFydGVkOiBQLFxuICBvbkNoZWNrb3V0U3VjY2VzczogUCxcbiAgb25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzOiBQLFxuICBvbkNoZWNrb3V0RXJyb3I6IFAsXG4gIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBQXG59KSwgZWUgPSBjbGFzcyBlZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX2NhbGxiYWNrcyA9IHt9LCB0aGlzLnNldENhbGxiYWNrcyA9IChyKSA9PiB7XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSB7fSwgT2JqZWN0LmVudHJpZXMocikuZm9yRWFjaCgoW2UsIG5dKSA9PiB7XG4gICAgICAgIGNvbnN0IGkgPSB2dChlLCBuID8/ICgoKSA9PiB7XG4gICAgICAgIH0pLCBhbyk7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrc1tlXSA9IGk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcmVhZC1vbmx5IHZlcnNpb24gb2YgdGhlIGNhbGxiYWNrcyBvYmplY3QuXG4gICAqL1xuICBnZXQgZ2V0KCkge1xuICAgIHJldHVybiB7IC4uLnRoaXMuX2NhbGxiYWNrcyB9O1xuICB9XG59O1xuZWUuZnJvbU9iamVjdCA9IChyKSA9PiB7XG4gIGNvbnN0IGUgPSBuZXcgZWUoKTtcbiAgcmV0dXJuIGUuc2V0Q2FsbGJhY2tzKGNvLnBhcnNlKHIpKSwgZTtcbn07XG5sZXQgbGUgPSBlZTtcbmNsYXNzIHVvIHtcbiAgY29uc3RydWN0b3IociwgZSwgbiwgaSkge1xuICAgIHRoaXMuaGFuZGxlTWVzc2FnZSA9IChzKSA9PiB7XG4gICAgICB2YXIgaCwgXywgZiwgcCwgbSwgaywgTCwgRjtcbiAgICAgIGlmICghcy5zb3VyY2UpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHNvdXJjZSBmb3VuZFwiKTtcbiAgICAgIGlmIChqZShzLm9yaWdpbikgIT09IGplKHRoaXMuYmFzZVVybCkgfHwgdHlwZW9mIHMuZGF0YSA9PSBcIm9iamVjdFwiICYmIHMuZGF0YS5wZW5wYWwpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGNvbnN0IGEgPSBpcihKU09OLnBhcnNlKHMuZGF0YSkpO1xuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlRXZlbnQoYSkpIHJldHVybjtcbiAgICAgIGNvbnN0IHsgZWxlbWVudElkOiBsLCBwYXlsb2FkOiB1IH0gPSBhLCBkID0gdS50eXBlO1xuICAgICAgc3dpdGNoIChkKSB7XG4gICAgICAgIGNhc2UgXCJMQVlPVVRcIjpcbiAgICAgICAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzLnNldEZvcm1IZWlnaHQodS5oZWlnaHQgPyBgJHt1LmhlaWdodH1weGAgOiBcIjEwMCVcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJGT0NVU1wiOlxuICAgICAgICAgIChfID0gKGggPSB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0KS5vbkZvY3VzKSA9PSBudWxsIHx8IF8uY2FsbChoLCBsLCB1LmVsZW1lbnRUeXBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkJMVVJcIjpcbiAgICAgICAgICAocCA9IChmID0gdGhpcy5mb3JtQ2FsbGJhY2tzLmdldCkub25CbHVyKSA9PSBudWxsIHx8IHAuY2FsbChmLCBsLCB1LmVsZW1lbnRUeXBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkNIQU5HRVwiOlxuICAgICAgICAgIChrID0gKG0gPSB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0KS5vbkNoYW5nZSkgPT0gbnVsbCB8fCBrLmNhbGwobSwgbCwgdS5lbGVtZW50VHlwZSwgdS5lcnJvcnMpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTE9BREVEXCI6XG4gICAgICAgICAgdGhpcy5ldmVudFRhcmdldHNbbF0gPSBzLnNvdXJjZSwgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5vbkNkZUxvYWRlZCh1KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkxPQURfRVJST1JcIjpcbiAgICAgICAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzLm9uQ2RlTG9hZEVycm9yKHUubWVzc2FnZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJWQUxJREFUSU9OX0VSUk9SXCI6XG4gICAgICAgICAgKEYgPSAoTCA9IHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQpLm9uVmFsaWRhdGlvbkVycm9yKSA9PSBudWxsIHx8IEYuY2FsbChMLCB1LmVsZW1lbnRUeXBlLCB1LmVycm9ycywgbCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY29uc29sZS53YXJuKFwiW2Zvcm1dIFVuaGFuZGxlZCBldmVudCB0eXBlOlwiLCBkKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLnZhbGlkYXRlRXZlbnQgPSAocykgPT4gcy5mb3JtSWQgIT09IHRoaXMuZm9ybUlkIHx8ICFzLmVsZW1lbnRJZCA/IChjb25zb2xlLmxvZyhcIltPSlNdIGZvcm1JZFwiLCB0aGlzLmZvcm1JZCwgcy5mb3JtSWQpLCBjb25zb2xlLndhcm4oXCJbZm9ybV0gSWdub3JpbmcgdW5rbm93biBldmVudDpcIiwgcyksICExKSA6IHRoaXMubm9uY2VzLmhhcyhzLm5vbmNlKSA/IChjb25zb2xlLndhcm4oXCJbZm9ybV0gSWdub3JpbmcgZHVwbGljYXRlIGV2ZW50OlwiLCBzKSwgITEpIDogKHRoaXMubm9uY2VzLmFkZChzLm5vbmNlKSwgITApLCB0aGlzLmV2ZW50VGFyZ2V0cyA9IHt9LCB0aGlzLm5vbmNlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCksIHRoaXMuZm9ybUlkID0gciwgdGhpcy5iYXNlVXJsID0gZSwgdGhpcy5mb3JtQ2FsbGJhY2tzID0gbiwgdGhpcy5pbnRlcm5hbENhbGxiYWNrcyA9IGk7XG4gIH1cbn1cbmNvbnN0IGplID0gKHQpID0+IG5ldyBVUkwodCkub3JpZ2luO1xuYXN5bmMgZnVuY3Rpb24gbG8odCwgcikge1xuICBjb25zdCBuID0gYXdhaXQgY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZTogdCxcbiAgICBkZWJ1ZzogITEsXG4gICAgY2hpbGRPcmlnaW46IHJcbiAgfSkucHJvbWlzZSwgaSA9IGF3YWl0IHNyKG4pO1xuICBpZiAoIWFyKG4sIGkpKVxuICAgIHRocm93IG5ldyBFcnJvcihcIkdvdCBpbnZhbGlkIENERSBjb25uZWN0aW9uIG9iamVjdFwiKTtcbiAgcmV0dXJuIG47XG59XG5jbGFzcyBmbyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY29ubmVjdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICB9XG4gIGFkZENvbm5lY3Rpb24ociwgZSkge1xuICAgIHRoaXMuY29ubmVjdGlvbnMuc2V0KHIsIGUpO1xuICB9XG4gIGdldENvbm5lY3Rpb24oKSB7XG4gICAgY29uc3QgciA9IHRoaXMuY29ubmVjdGlvbnMudmFsdWVzKCkubmV4dCgpLnZhbHVlO1xuICAgIGlmICghcilcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbm5lY3Rpb24gbm90IGZvdW5kXCIpO1xuICAgIHJldHVybiByO1xuICB9XG4gIGdldEFsbENvbm5lY3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25zO1xuICB9XG59XG5jb25zdCBwbyA9ICh0LCByLCBlKSA9PiB7XG4gIGNvbnN0IHsgc3RyaXBlUFI6IG4gfSA9IHQ7XG4gIG4ucHVibGlzaGVyLnN1YnNjcmliZSgoaSkgPT4ge1xuICAgIHZhciBzLCBhO1xuICAgIGlmIChpLmlzU3VjY2Vzcykge1xuICAgICAgY29uc3QgYyA9IGkubG9hZGVkVmFsdWUsIGwgPSBjLmlzQXZhaWxhYmxlICYmIGMuYXZhaWxhYmxlUHJvdmlkZXJzLmFwcGxlUGF5LCB1ID0gYy5pc0F2YWlsYWJsZSAmJiBjLmF2YWlsYWJsZVByb3ZpZGVycy5nb29nbGVQYXksIGQgPSB7XG4gICAgICAgIGFwcGxlX3BheToge1xuICAgICAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICAgICAgaXNBdmFpbGFibGU6IGwsXG4gICAgICAgICAgc3RhcnRGbG93OiBhc3luYyAoaCkgPT4ge1xuICAgICAgICAgICAgbCAmJiBNZShcImFwcGxlX3BheVwiLCBjLCByLCBlLCBoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdvb2dsZV9wYXk6IHtcbiAgICAgICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiB1LFxuICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKGgpID0+IHtcbiAgICAgICAgICAgIHUgJiYgTWUoXCJnb29nbGVfcGF5XCIsIGMsIHIsIGUsIGgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIChhID0gKHMgPSBlLmdldCkub25QYXltZW50UmVxdWVzdExvYWQpID09IG51bGwgfHwgYS5jYWxsKHMsIGQpO1xuICAgIH1cbiAgfSk7XG59LCBNZSA9ICh0LCByLCBlLCBuLCBpKSA9PiBOLnN0cmlwZVBSLnJ1bih7XG4gIGNvbnRleHQ6IGUsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdHQoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCB0KSxcbiAgbm9uQ2RlRm9ybUlucHV0czogZGUoZS5mb3JtRGl2KSxcbiAgZm9ybUNhbGxiYWNrczogbixcbiAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyOiB0LCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBpID09IG51bGwgPyB2b2lkIDAgOiBpLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgaW5pdFJlc3VsdDogclxufSksIExlID0gXCJUaGUgc2VjdXJlIGZvcm0gZmFpbGVkIHRvIGxvYWQgcHJvcGVybHkuIFBsZWFzZSBjaGVjayB5b3VyIGludGVybmV0IGNvbm5lY3Rpb24sIG9yIHRyeSBhZ2FpbiBsYXRlci5cIiwgeyBsb2dfXzogaiwgZXJyX186IHNlIH0gPSBBKFwib3AtZm9ybVwiKSwgUiA9IGNsYXNzIFIge1xuICBjb25zdHJ1Y3RvcihyKSB7XG4gICAgdGhpcy5jZGVMb2FkRXZlbnQgPSBuZXcgSigpLCB0aGlzLmFueUNkZUNvbm4gPSBuZXcgSigpLCB0aGlzLmNvbnRleHQgPSBuZXcgSigpLCB0aGlzLmluaXRGbG93cyA9IHNvKCksIHRoaXMuc3RhcnRGb3JtSW5pdCA9IGFzeW5jICgpID0+IHtcbiAgICAgIHZhciBlLCBuLCBpLCBzO1xuICAgICAgdHJ5IHtcbiAgICAgICAgaihcIkluaXRpYWxpemluZyBPcGVuUGF5IGZvcm06XCIpLCBqKFwi4pScIFdhaXRpbmcgZm9yIENERSBsb2FkIGV2ZW50Li4uXCIpO1xuICAgICAgICBjb25zdCBhID0gYXdhaXQgdGhpcy5jZGVMb2FkRXZlbnQud2FpdEZvckxvYWQoe1xuICAgICAgICAgIHRpbWVvdXRTZWM6IDEyMCxcbiAgICAgICAgICB0aW1lb3V0RXJyTXNnOiBMZVxuICAgICAgICB9KTtcbiAgICAgICAgaihcIuKUnCBDREUgbG9hZCBldmVudCByZWNlaXZlZFwiKSwgaihcIuKUnCBXYWl0aW5nIGZvciBDREUgY29ubmVjdGlvbi4uLlwiKTtcbiAgICAgICAgY29uc3QgYyA9IGF3YWl0IHRoaXMuYW55Q2RlQ29ubi53YWl0Rm9yTG9hZCh7XG4gICAgICAgICAgdGltZW91dFNlYzogMTIwLFxuICAgICAgICAgIHRpbWVvdXRFcnJNc2c6IExlXG4gICAgICAgIH0pO1xuICAgICAgICBqKFwi4pScIENERSBjb25uZWN0aW9uIHJlY2VpdmVkXCIpLCBqKFwi4pScIENyZWF0aW5nIE9KUyBjb250ZXh0LCBzZXR0aW5nIHVwIGhhbmRsZXJzLi4uXCIpO1xuICAgICAgICBjb25zdCBsID0gUi5idWlsZE9qc0Zsb3dDb250ZXh0KFxuICAgICAgICAgIHRoaXMuY29uZmlnLFxuICAgICAgICAgIGEsXG4gICAgICAgICAgYyxcbiAgICAgICAgICB0aGlzLmdldEZvcm1EaXYoKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNvbnRleHQuc2V0KGwpLCBwbyh0aGlzLmluaXRGbG93cywgbCwgdGhpcy5mb3JtQ2FsbGJhY2tzKSwgaihcIuKUnCBTdGFydGluZyBPSlMgaW5pdCBmbG93cy4uLlwiKSwgYXdhaXQgaW8odGhpcy5pbml0Rmxvd3MsIGwsIHRoaXMuZm9ybUNhbGxiYWNrcyksIChuID0gKGUgPSB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0KS5vbkxvYWQpID09IG51bGwgfHwgbi5jYWxsKGUsIGEudG90YWxBbW91bnRBdG9tcywgYS5jdXJyZW5jeSksIGooXCLilbAgRG9uZSBpbml0aWFsaXppbmcgT0pTIGZsb3dzLlwiKTtcbiAgICAgIH0gY2F0Y2ggKGEpIHtcbiAgICAgICAgY29uc3QgYyA9ICQoYSk7XG4gICAgICAgIHNlKFwi4pWwIEVycm9yIGluaXRpYWxpemluZyBPUCBmb3JtOlwiLCBjKSwgKHMgPSAoaSA9IHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQpLm9uTG9hZEVycm9yKSA9PSBudWxsIHx8IHMuY2FsbChpLCBjKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLnNldEZvcm1IZWlnaHQgPSAoZSkgPT4ge1xuICAgICAgdGhpcy5mb3JtUHJvcGVydGllcy5oZWlnaHQgPSBlLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyAmJiBPYmplY3QudmFsdWVzKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzKS5mb3JFYWNoKChuKSA9PiB7XG4gICAgICAgIG4gJiYgKG4ubm9kZS5zdHlsZS5oZWlnaHQgPSBlKTtcbiAgICAgIH0pO1xuICAgIH0sIHRoaXMub25DZGVMb2FkZWQgPSAoZSkgPT4ge1xuICAgICAgdGhpcy5jZGVMb2FkRXZlbnQuY3VycmVudC5pc1N1Y2Nlc3MgfHwgdGhpcy5jZGVMb2FkRXZlbnQuc2V0KGUpO1xuICAgIH0sIHRoaXMub25DZGVMb2FkRXJyb3IgPSAoZSkgPT4ge1xuICAgICAgdGhpcy5jZGVMb2FkRXZlbnQuY3VycmVudC5pc1N1Y2Nlc3MgfHwgdGhpcy5jZGVMb2FkRXZlbnQudGhyb3cobmV3IEVycm9yKGUpLCBlKTtcbiAgICB9LCB0aGlzLmNyZWF0ZUVsZW1lbnQgPSAoZSwgbiA9IHt9KSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY29uZmlnKSB0aHJvdyBuZXcgRXJyb3IoXCJPcGVuUGF5IGZvcm0gbm90IGluaXRpYWxpemVkXCIpO1xuICAgICAgY29uc3QgaSA9IHd0LnBhcnNlKGUpLCBzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKSwgYSA9IHRoaXMuYnVpbGRRdWVyeVN0cmluZyhuKTtcbiAgICAgIHMubmFtZSA9IGAke2l9LWVsZW1lbnRgO1xuICAgICAgY29uc3QgYyA9IG5ldyBVUkwoYC9hcHAvdjEvJHtzLm5hbWV9L2AsIHRoaXMuY29uZmlnLmJhc2VVcmwpO1xuICAgICAgcmV0dXJuIGMuc2VhcmNoID0gYS50b1N0cmluZygpLCBzLnNyYyA9IGMuaHJlZiwgcy5zdHlsZS5ib3JkZXIgPSBcIm5vbmVcIiwgcy5zdHlsZS53aWR0aCA9IFwiMTAwJVwiLCB0aGlzLnJlZ2lzdGVySWZyYW1lKGksIHMpO1xuICAgIH0sIHRoaXMucmVnaXN0ZXJJZnJhbWUgPSAoZSwgbikgPT4ge1xuICAgICAgY29uc3QgaSA9IHtcbiAgICAgICAgdHlwZTogZSxcbiAgICAgICAgbm9kZTogbixcbiAgICAgICAgbW91bnQ6IChzKSA9PiB7XG4gICAgICAgICAgdmFyIGE7XG4gICAgICAgICAgcmV0dXJuIChhID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzKSkgPT0gbnVsbCA/IHZvaWQgMCA6IGEuYXBwZW5kQ2hpbGQobik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0VG9FbGVtZW50KHsgdHlwZTogaS50eXBlLCBub2RlOiBpLm5vZGUgfSksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzIHx8ICh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IHtcbiAgICAgICAgW0QuQ0FSRF06IHZvaWQgMCxcbiAgICAgICAgW0QuQ0FSRF9OVU1CRVJdOiB2b2lkIDAsXG4gICAgICAgIFtELkNBUkRfRVhQSVJZXTogdm9pZCAwLFxuICAgICAgICBbRC5DQVJEX0NWQ106IHZvaWQgMFxuICAgICAgfSksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzW2VdID0gaSwgaTtcbiAgICB9LCB0aGlzLmJ1aWxkUXVlcnlTdHJpbmcgPSAoZSkgPT4ge1xuICAgICAgY29uc3QgbiA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICAgIHJldHVybiBuLmFwcGVuZChcInJlZmVyZXJcIiwgdGhpcy5yZWZlcnJlciksIG4uYXBwZW5kKFwiZm9ybUlkXCIsIHRoaXMuZm9ybUlkKSwgZS5zdHlsZXMgJiYgbi5hcHBlbmQoXCJzdHlsZXNcIiwgb3IoZS5zdHlsZXMpKSwgbi5hcHBlbmQoXCJzZWN1cmVUb2tlblwiLCB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuKSwgbjtcbiAgICB9LCB0aGlzLmNvbm5lY3RUb0VsZW1lbnQgPSAoZSkgPT4ge1xuICAgICAgbG8oZS5ub2RlKS50aGVuKChuKSA9PiB7XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuYWRkQ29ubmVjdGlvbihlLnR5cGUsIG4pLCB0aGlzLmFueUNkZUNvbm4uY3VycmVudC5pc1N1Y2Nlc3MgfHwgdGhpcy5hbnlDZGVDb25uLnNldChuKTtcbiAgICAgIH0pLmNhdGNoKChuKSA9PiBzZShcIltGT1JNXSBFcnJvciBjb25uZWN0aW5nIHRvIENERSBpZnJhbWVcIiwgbikpO1xuICAgIH0sIHRoaXMuZ2V0Rm9ybURpdiA9ICgpID0+IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5mb3JtVGFyZ2V0KSA/PyBkb2N1bWVudC5ib2R5LCB0aGlzLnN1Ym1pdENhcmQgPSAoKSA9PiB7XG4gICAgICBjb25zdCBlID0gdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgaWYgKCFlKSB7XG4gICAgICAgIHNlKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBzdWJtaXR0aW5nLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgTi5jb21tb25DQy5ydW4oe1xuICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHR0KGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgXCJjcmVkaXRfY2FyZFwiKSxcbiAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogZGUoZS5mb3JtRGl2KSxcbiAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICBjdXJyZW50Q2RlQ29ubmVjdGlvbnM6IHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuZ2V0QWxsQ29ubmVjdGlvbnMoKVxuICAgICAgICB9LFxuICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgLy8gVGhpcyBmbG93IHJlcXVpcmVzIG5vIGluaXRpYWxpemF0aW9uXG4gICAgICB9KTtcbiAgICB9LCB0aGlzLnN1Ym1pdCA9IHRoaXMuc3VibWl0Q2FyZCwgdGhpcy5kZXN0cm95ID0gKCkgPT4ge1xuICAgICAgZm9yIChjb25zdCBlIG9mIE9iamVjdC52YWx1ZXModGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPz8ge30pKVxuICAgICAgICBlICYmIGUubm9kZS5yZW1vdmUoKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmV2ZW50SGFuZGxlci5oYW5kbGVNZXNzYWdlLmJpbmQodGhpcy5ldmVudEhhbmRsZXIpKTtcbiAgICB9LCBSLmFzc2lnbkFzU2luZ2xldG9uKHRoaXMpLCB0aGlzLm9qc1ZlcnNpb24gPSBcIjAuMS4xNVwiLCB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uID0gXCJsb2NhbF9idWlsZFwiLCB0aGlzLmJhc2VVcmwgPSByLmJhc2VVcmwgPz8gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiLCB0aGlzLmNvbmZpZyA9IHsgLi4uciwgYmFzZVVybDogdGhpcy5iYXNlVXJsIH0sIHRoaXMuZm9ybUNhbGxiYWNrcyA9IGxlLmZyb21PYmplY3QociksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0gbnVsbCwgdGhpcy5mb3JtSWQgPSBgb3Bqcy1mb3JtLSR7d2luZG93LmNyeXB0by5yYW5kb21VVUlEKCl9YCwgdGhpcy5yZWZlcnJlciA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4sIHRoaXMuZm9ybVRhcmdldCA9IHIuZm9ybVRhcmdldCA/PyBcImJvZHlcIiwgdGhpcy5mb3JtUHJvcGVydGllcyA9IHsgaGVpZ2h0OiBcIjFweFwiIH0sIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIgPSBuZXcgZm8oKSwgdGhpcy5ldmVudEhhbmRsZXIgPSBuZXcgdW8odGhpcy5mb3JtSWQsIHRoaXMuYmFzZVVybCwgdGhpcy5mb3JtQ2FsbGJhY2tzLCB7XG4gICAgICBzZXRGb3JtSGVpZ2h0OiB0aGlzLnNldEZvcm1IZWlnaHQsXG4gICAgICBvbkNkZUxvYWRlZDogdGhpcy5vbkNkZUxvYWRlZCxcbiAgICAgIG9uQ2RlTG9hZEVycm9yOiB0aGlzLm9uQ2RlTG9hZEVycm9yXG4gICAgfSksIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmV2ZW50SGFuZGxlci5oYW5kbGVNZXNzYWdlLmJpbmQodGhpcy5ldmVudEhhbmRsZXIpKSwgdGhpcy5zdGFydEZvcm1Jbml0KCk7XG4gIH1cbiAgZ2V0IGNoZWNrb3V0U2VjdXJlVG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW47XG4gIH1cbn07XG5SLm9qc0Zsb3dzID0gTiwgUi5hc3NpZ25Bc1NpbmdsZXRvbiA9IChyKSA9PiB7XG4gIGlmIChSLmdldEluc3RhbmNlKCkpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiT3BlblBheSBpbnN0YW5jZSBhbHJlYWR5IGV4aXN0cy4gT25seSBvbmUgaW5zdGFuY2UgaXMgYWxsb3dlZC5cIik7XG4gIHdpbmRvdy5vanMgPSByO1xufSwgUi5nZXRJbnN0YW5jZSA9ICgpID0+IHdpbmRvdy5vanMgPz8gbnVsbCwgUi5idWlsZE9qc0Zsb3dDb250ZXh0ID0gKHIsIGUsIG4sIGkpID0+ICh7XG4gIGJhc2VVcmw6IG5ldyBVUkwoci5iYXNlVXJsID8/IGR0KS5vcmlnaW4sXG4gIGZvcm1EaXY6IGksXG4gIGVsZW1lbnRzU2Vzc2lvbklkOiBlLnNlc3Npb25JZCxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogZS5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICBhbnlDZGVDb25uZWN0aW9uOiBuLFxuICBjdXN0b21Jbml0UGFyYW1zOiByLmN1c3RvbUluaXRQYXJhbXMgPz8ge31cbn0pO1xubGV0IEZlID0gUjtcblxuY29uc3QgdXNlUmVhY3RpdmVGb3JtQ2FsbGJhY2tzID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IGZvcm1DYWxsYmFja3NSZWYgPSB1c2VSZWYocHJvcHMpO1xuICBjb25zdCBjYiA9IGZvcm1DYWxsYmFja3NSZWYuY3VycmVudDtcbiAgY2Iub25Mb2FkID0gdXNlTWVtbygoKSA9PiBwcm9wcy5vbkxvYWQsIFtwcm9wcy5vbkxvYWRdKTtcbiAgY2Iub25Mb2FkRXJyb3IgPSB1c2VNZW1vKCgpID0+IHByb3BzLm9uTG9hZEVycm9yLCBbcHJvcHMub25Mb2FkRXJyb3JdKTtcbiAgY2Iub25WYWxpZGF0aW9uRXJyb3IgPSB1c2VNZW1vKCgpID0+IHByb3BzLm9uVmFsaWRhdGlvbkVycm9yLCBbcHJvcHMub25WYWxpZGF0aW9uRXJyb3JdKTtcbiAgY2Iub25Gb2N1cyA9IHVzZU1lbW8oKCkgPT4gcHJvcHMub25Gb2N1cywgW3Byb3BzLm9uRm9jdXNdKTtcbiAgY2Iub25CbHVyID0gdXNlTWVtbygoKSA9PiBwcm9wcy5vbkJsdXIsIFtwcm9wcy5vbkJsdXJdKTtcbiAgY2Iub25DaGFuZ2UgPSB1c2VNZW1vKCgpID0+IHByb3BzLm9uQ2hhbmdlLCBbcHJvcHMub25DaGFuZ2VdKTtcbiAgY2Iub25DaGVja291dFN0YXJ0ZWQgPSB1c2VNZW1vKCgpID0+IHByb3BzLm9uQ2hlY2tvdXRTdGFydGVkLCBbcHJvcHMub25DaGVja291dFN0YXJ0ZWRdKTtcbiAgY2Iub25DaGVja291dFN1Y2Nlc3MgPSB1c2VNZW1vKCgpID0+IHByb3BzLm9uQ2hlY2tvdXRTdWNjZXNzLCBbcHJvcHMub25DaGVja291dFN1Y2Nlc3NdKTtcbiAgY2Iub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzID0gdXNlTWVtbyhcbiAgICAoKSA9PiBwcm9wcy5vblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3MsXG4gICAgW3Byb3BzLm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2Vzc11cbiAgKTtcbiAgY2Iub25DaGVja291dEVycm9yID0gdXNlTWVtbygoKSA9PiBwcm9wcy5vbkNoZWNrb3V0RXJyb3IsIFtwcm9wcy5vbkNoZWNrb3V0RXJyb3JdKTtcbiAgY2Iub25QYXltZW50UmVxdWVzdExvYWQgPSB1c2VNZW1vKCgpID0+IHByb3BzLm9uUGF5bWVudFJlcXVlc3RMb2FkLCBbcHJvcHMub25QYXltZW50UmVxdWVzdExvYWRdKTtcbiAgcmV0dXJuIGZvcm1DYWxsYmFja3NSZWYuY3VycmVudDtcbn07XG5cbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEpO1xuY29uc3QgWm9kRmllbGRFcnJvciA9IHokMS5vYmplY3Qoe1xuICBjb2RlOiB6JDEuc3RyaW5nKCksXG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKSxcbiAgcGF0aDogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLmFycmF5KFpvZEZpZWxkRXJyb3IpO1xuY29uc3QgbWFrZUNhbGxiYWNrU2FmZSA9IChjYWxsYmFja05hbWUsIGZuLCBlcnJvckxvZ2dlcikgPT4ge1xuICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZuKC4uLmFyZ3MpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBlcnJvckxvZ2dlcihgW2Zvcm1dIEVycm9yIHJ1bm5pbmcgY2FsbGJhY2sgKCR7Y2FsbGJhY2tOYW1lfSk6YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG4gIH07XG59O1xuXG5jb25zdCBSZXF1aXJlZFN0cmluZyA9IHokMS5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogYENhbm5vdCBiZSBibGFua2AgfSk7XG5jb25zdCBPcHRpb25hbFN0cmluZyA9IHokMS5zdHJpbmcoKS50cmltKCkub3B0aW9uYWwoKTtcbmNvbnN0IG51bGxPclVuZGVmT3IkMSA9ICh6VHlwZSkgPT4geiQxLm51bGxhYmxlKHpUeXBlLm9wdGlvbmFsKCkpO1xudmFyIEZpZWxkTmFtZSA9IC8qIEBfX1BVUkVfXyAqLyAoKEZpZWxkTmFtZTIpID0+IHtcbiAgRmllbGROYW1lMltcIkZJUlNUX05BTUVcIl0gPSBcImZpcnN0TmFtZVwiO1xuICBGaWVsZE5hbWUyW1wiTEFTVF9OQU1FXCJdID0gXCJsYXN0TmFtZVwiO1xuICBGaWVsZE5hbWUyW1wiRU1BSUxcIl0gPSBcImVtYWlsXCI7XG4gIEZpZWxkTmFtZTJbXCJaSVBfQ09ERVwiXSA9IFwiemlwQ29kZVwiO1xuICBGaWVsZE5hbWUyW1wiQ0lUWVwiXSA9IFwiY2l0eVwiO1xuICBGaWVsZE5hbWUyW1wiU1RBVEVcIl0gPSBcInN0YXRlXCI7XG4gIEZpZWxkTmFtZTJbXCJDT1VOVFJZXCJdID0gXCJjb3VudHJ5XCI7XG4gIEZpZWxkTmFtZTJbXCJBRERSRVNTXCJdID0gXCJhZGRyZXNzXCI7XG4gIEZpZWxkTmFtZTJbXCJQSE9ORVwiXSA9IFwicGhvbmVcIjtcbiAgRmllbGROYW1lMltcIlBST01PVElPTl9DT0RFXCJdID0gXCJwcm9tb3Rpb25Db2RlXCI7XG4gIHJldHVybiBGaWVsZE5hbWUyO1xufSkoRmllbGROYW1lIHx8IHt9KTtcbmNvbnN0IEZpZWxkTmFtZUVudW0gPSB6JDEubmF0aXZlRW51bShGaWVsZE5hbWUpO1xudmFyIFByaXZhdGVGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChQcml2YXRlRmllbGROYW1lMikgPT4ge1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfTlVNQkVSXCJdID0gXCJjYXJkTnVtYmVyXCI7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9FWFBJUllcIl0gPSBcImNhcmRFeHBpcnlcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0NWQ1wiXSA9IFwiY2FyZEN2Y1wiO1xuICByZXR1cm4gUHJpdmF0ZUZpZWxkTmFtZTI7XG59KShQcml2YXRlRmllbGROYW1lIHx8IHt9KTtcbmNvbnN0IFByaXZhdGVGaWVsZE5hbWVFbnVtID0geiQxLm5hdGl2ZUVudW0oUHJpdmF0ZUZpZWxkTmFtZSk7XG5jb25zdCBBbGxGaWVsZE5hbWVzID0geiQxLnVuaW9uKFtGaWVsZE5hbWVFbnVtLCBQcml2YXRlRmllbGROYW1lRW51bV0pO1xudmFyIEVsZW1lbnRUeXBlRW51bSA9IC8qIEBfX1BVUkVfXyAqLyAoKEVsZW1lbnRUeXBlRW51bTIpID0+IHtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRcIl0gPSBcImNhcmRcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfTlVNQkVSXCJdID0gXCJjYXJkLW51bWJlclwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9FWFBJUllcIl0gPSBcImNhcmQtZXhwaXJ5XCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX0NWQ1wiXSA9IFwiY2FyZC1jdmNcIjtcbiAgcmV0dXJuIEVsZW1lbnRUeXBlRW51bTI7XG59KShFbGVtZW50VHlwZUVudW0gfHwge30pO1xueiQxLm5hdGl2ZUVudW0oRWxlbWVudFR5cGVFbnVtKTtcbmNvbnN0IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IG51bGxPclVuZGVmT3IkMSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgUGF5bWVudE1ldGhvZE1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgY2FyZE51bWJlcjogT3B0aW9uYWxTdHJpbmcsXG4gIGV4cGlyeTogT3B0aW9uYWxTdHJpbmcsXG4gIGN2YzogT3B0aW9uYWxTdHJpbmdcbn0pO1xueiQxLm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogT3B0aW9uYWxTdHJpbmcsXG4gIGNvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udEZhbWlseTogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRTaXplOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFdlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gIG1hcmdpbjogT3B0aW9uYWxTdHJpbmcsXG4gIHBhZGRpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsZXR0ZXJTcGFjaW5nOiBPcHRpb25hbFN0cmluZyxcbiAgbGluZUhlaWdodDogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgRXZlbnRUeXBlID0geiQxLmVudW0oW1xuICAvLyBFbGVtZW50IC0+IEZvcm1cbiAgXCJMQVlPVVRcIixcbiAgXCJMT0FERURcIixcbiAgXCJCTFVSXCIsXG4gIFwiRk9DVVNcIixcbiAgXCJDSEFOR0VcIixcbiAgXCJUT0tFTklaRV9TVEFSVEVEXCIsXG4gIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiLFxuICBcIlBBWU1FTlRfRkxPV19TVEFSVEVEXCIsXG4gIFwiVE9LRU5JWkVfU1VDQ0VTU1wiLFxuICBcIkNIRUNLT1VUX1NVQ0NFU1NcIixcbiAgXCJMT0FEX0VSUk9SXCIsXG4gIFwiVkFMSURBVElPTl9FUlJPUlwiLFxuICBcIlRPS0VOSVpFX0VSUk9SXCIsXG4gIFwiQ0hFQ0tPVVRfRVJST1JcIixcbiAgXCJTRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTXCIsXG4gIC8vIEZvcm0gLT4gRWxlbWVudFxuICBcIlRPS0VOSVpFXCIsXG4gIFwiQ0hFQ0tPVVRcIixcbiAgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIlxuXSk7XG5jb25zdCBHZW5lcmljRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVfU1RBUlRFRFwiLCBcIkNIRUNLT1VUX1NUQVJURURcIl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3QoeyB0eXBlOiBHZW5lcmljRXZlbnRUeXBlIH0pO1xuY29uc3QgSW5wdXRFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJCTFVSXCIsIFwiRk9DVVNcIiwgXCJDSEFOR0VcIl0pO1xuY29uc3QgSW5wdXRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogSW5wdXRFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBQcml2YXRlRmllbGROYW1lRW51bSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEVycm9yRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiTE9BRF9FUlJPUlwiLCBcIlRPS0VOSVpFX0VSUk9SXCIsIFwiQ0hFQ0tPVVRfRVJST1JcIl0pO1xuY29uc3QgRXJyb3JFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogRXJyb3JFdmVudFR5cGUsXG4gIG1lc3NhZ2U6IFJlcXVpcmVkU3RyaW5nLFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlZBTElEQVRJT05fRVJST1JcIl0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSxcbiAgZWxlbWVudFR5cGU6IEFsbEZpZWxkTmFtZXMsXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgTGF5b3V0RXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkxBWU9VVCksXG4gIGhlaWdodDogUmVxdWlyZWRTdHJpbmdcbn0pO1xuY29uc3QgTG9hZGVkRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkxPQURFRCksXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIHRvdGFsQW1vdW50QXRvbXM6IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IE9wdGlvbmFsU3RyaW5nLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiB6JDEuYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEpXG59KTtcbmNvbnN0IFBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5QQVlNRU5UX0ZMT1dfU1RBUlRFRCksXG4gIG5leHRBY3Rpb25NZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBzdGFydFBGTWV0YWRhdGE6IHokMS5vcHRpb25hbCh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTUyksXG4gIHBheW1lbnRNZXRob2RJZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFJlcXVpcmVkRm9ybUZpZWxkcyA9IHokMS5vYmplY3Qoe1xuICBbXCJmaXJzdE5hbWVcIiAvKiBGSVJTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImxhc3ROYW1lXCIgLyogTEFTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImVtYWlsXCIgLyogRU1BSUwgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IFBSRm9ybUZpZWxkcyA9IHokMS5vYmplY3Qoe1xuICBbXCJlbWFpbFwiIC8qIEVNQUlMICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInppcENvZGVcIiAvKiBaSVBfQ09ERSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJjb3VudHJ5XCIgLyogQ09VTlRSWSAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJwcm9tb3Rpb25Db2RlXCIgLyogUFJPTU9USU9OX0NPREUgKi9dOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBTdWJtaXRFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJUT0tFTklaRVwiLCBcIkNIRUNLT1VUXCIsIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJdKTtcbmNvbnN0IFN1Ym1pdEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBTdWJtaXRFdmVudFR5cGUsXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBkb05vdFVzZUxlZ2FjeUNDRmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ0NDUE1JZDogT3B0aW9uYWxTdHJpbmdcbn0pLmV4dGVuZChSZXF1aXJlZEZvcm1GaWVsZHMuc2hhcGUpO1xuY29uc3QgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlRPS0VOSVpFX1NVQ0NFU1MpLFxuICBpc1JlYWR5Rm9yQ2hlY2tvdXQ6IHokMS5ib29sZWFuKClcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkNIRUNLT1VUX1NVQ0NFU1MpLFxuICBpbnZvaWNlVXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbklkczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVySWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBFdmVudFBheWxvYWQgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIEdlbmVyaWNFdmVudFBheWxvYWQsXG4gIElucHV0RXZlbnRQYXlsb2FkLFxuICBFcnJvckV2ZW50UGF5bG9hZCxcbiAgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkLFxuICBMYXlvdXRFdmVudFBheWxvYWQsXG4gIExvYWRlZEV2ZW50UGF5bG9hZCxcbiAgU3VibWl0RXZlbnRQYXlsb2FkLFxuICBUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQsXG4gIENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkLFxuICBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZFxuXSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bG9hZDogRXZlbnRQYXlsb2FkLFxuICBub25jZTogUmVxdWlyZWRTdHJpbmcsXG4gIGZvcm1JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGVsZW1lbnRJZDogUmVxdWlyZWRTdHJpbmdcbn0pO1xueiQxLm9iamVjdCh7XG4gIGFtb3VudEF0b206IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IFJlcXVpcmVkU3RyaW5nXG59KTtcbnokMS5lbnVtKFtcImFwcGxlX3BheVwiLCBcImdvb2dsZV9wYXlcIl0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kczogeiQxLmFycmF5KFBheW1lbnRNZXRob2RNaW5pbWFsKVxufSk7XG5jb25zdCBGaWVsZFZhbGlkYXRpb25FcnJvciA9IHokMS5vYmplY3Qoe1xuICBlbGVtZW50VHlwZTogeiQxLnN0cmluZygpLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSA9IHokMS5vYmplY3Qoe1xuICBzdWNjZXNzOiB6JDEubGl0ZXJhbChmYWxzZSksXG4gIGVycm9yX3R5cGU6IHokMS5saXRlcmFsKFwidmFsaWRhdGlvbl9lcnJvclwiKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoRmllbGRWYWxpZGF0aW9uRXJyb3IpXG59KTtcbnokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJzdWNjZXNzXCIsIFtcbiAgeiQxLm9iamVjdCh7IHN1Y2Nlc3M6IHokMS5saXRlcmFsKHRydWUpIH0pLFxuICBUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlXG5dKTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkc1xufSk7XG56JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXCJzdWNjZXNzXCIgLyogU1VDQ0VTUyAqLywgXCJmYWlsdXJlXCIgLyogRkFJTFVSRSAqLywgXCJjYW5jZWxsZWRcIiAvKiBDQU5DRUxMRUQgKi9dKVxufSk7XG56JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IHokMS5zdHJpbmcoKSxcbiAgaW5pdGlhbF9pbnRlbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgY29uc2VudF9pZDogeiQxLnN0cmluZygpXG59KTtcblxueiQxLm9iamVjdCh7XG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbn0pO1xuXG5jb25zdCBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyA9IChzdHlsZXMpID0+IHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0eWxlcyA9IEpTT04uc3RyaW5naWZ5KHN0eWxlcyk7XG4gIHJldHVybiBzZXJpYWxpemVkU3R5bGVzO1xufTtcblxuY29uc3QgbnVsbE9yVW5kZWZPciA9ICh6VHlwZSkgPT4geiQxLm51bGxhYmxlKHpUeXBlLm9wdGlvbmFsKCkpO1xueiQxLnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBgQ2Fubm90IGJlIGJsYW5rYCB9KTtcbnokMS5vYmplY3Qoe1xuICBjZGVfcmVzcG9uc2VfdHlwZTogeiQxLmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbnokMS5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG5jb25zdCBDb3Vwb25NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgYW1vdW50X2F0b21fb2ZmOiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKSksXG4gIHBlcmNlbnRfb2ZmOiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKSksXG4gIGN1cnJlbmN5OiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGR1cmF0aW9uOiB6JDEuc3RyaW5nKCksXG4gIGR1cmF0aW9uX2luX21vbnRoczogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkpXG59KTtcbmNvbnN0IExpbmVJdGVtID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHByaWNlX2lkOiB6JDEuc3RyaW5nKCksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkuaW50KCkpLFxuICBxdWFudGl0eTogeiQxLm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IEJyYW5kU2V0dGluZ3MgPSB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKTtcbmNvbnN0IEJyYW5kID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgc2V0dGluZ3M6IG51bGxPclVuZGVmT3IoQnJhbmRTZXR0aW5ncylcbn0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25JdGVtTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBxdWFudGl0eTogeiQxLm51bWJlcigpXG59KTtcbmNvbnN0IFN1YnNjcmlwdGlvbk1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogeiQxLmFycmF5KFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsKSxcbiAgdHJpYWxfc3RhcnQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgdHJpYWxfZW5kOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6JDEubnVtYmVyKClcbn0pO1xuY29uc3QgSW52b2ljZUxpbmVJdGVtTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICBhbW91bnRfYXRvbV9jb25zaWRlcmluZ19kaXNjb3VudF9hcHBsaWVkOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRpc2NvdW50X2Ftb3VudF9hdG9tczogeiQxLmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgRGlzY291bnRNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGNvdXBvbjogQ291cG9uTWluaW1hbFxufSk7XG5jb25zdCBJbnZvaWNlTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudHM6IHokMS5hcnJheShEaXNjb3VudE1pbmltYWwpLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZXM6IHokMS5hcnJheShJbnZvaWNlTGluZUl0ZW1NaW5pbWFsKSxcbiAgcmVtYWluaW5nX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRheF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9kaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpXG59KTtcbmNvbnN0IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBjcmVhdGVkOiB6JDEuYXJyYXkoU3Vic2NyaXB0aW9uTWluaW1hbCksXG4gIGludm9pY2VzOiB6JDEuYXJyYXkoSW52b2ljZU1pbmltYWwpXG59KTtcbmNvbnN0IFByZXZpZXdDaGVja291dFJlc3BvbnNlID0geiQxLm9iamVjdCh7XG4gIHByZXZpZXc6IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCxcbiAgcHJldmlld19wb3N0X3RyaWFsOiBudWxsT3JVbmRlZk9yKENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCksXG4gIGNvdXBvbnM6IHokMS5hcnJheShDb3Vwb25NaW5pbWFsKVxufSk7XG5jb25zdCBfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJvcGVuXCIpLFxuICB0b2tlbjogeiQxLnN0cmluZygpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoTGluZUl0ZW0pLFxuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBicmFuZDogQnJhbmQsXG4gIHN1YnNfcHJldmlldzogbnVsbE9yVW5kZWZPcihQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSksXG4gIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICBtZXRob2RzX2F2YWlsYWJsZTogeiQxLmFycmF5KENoZWNrb3V0UGF5bWVudE1ldGhvZClcbn0pO1xuY29uc3QgUGF5bWVudEZvcm1QcmVmaWxsID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcIm1vZGVcIiwgW1xuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEubGl0ZXJhbChcInNldHVwXCIpLFxuICAgIGN1cnJlbmN5OiB6JDEubnVsbGFibGUoeiQxLnVuZGVmaW5lZCgpKVxuICB9KS5leHRlbmQoX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbi5zaGFwZSksXG4gIHokMS5vYmplY3Qoe1xuICAgIG1vZGU6IHokMS5lbnVtKFtcInBheW1lbnRcIiwgXCJzdWJzY3JpcHRpb25cIl0pLFxuICAgIGN1cnJlbmN5OiB6JDEuc3RyaW5nKClcbiAgfSkuZXh0ZW5kKF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24uc2hhcGUpXG5dKTtcbmNvbnN0IENvbXBsZXRlZEZvcm1QcmVmaWxsID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJjb21wbGV0ZVwiKVxufSk7XG5jb25zdCBFeHBpcmVkRm9ybVByZWZpbGwgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcImV4cGlyZWRcIilcbn0pO1xueiQxLnVuaW9uKFtQYXltZW50Rm9ybVByZWZpbGwsIENvbXBsZXRlZEZvcm1QcmVmaWxsLCBFeHBpcmVkRm9ybVByZWZpbGxdKTtcbnokMS5vYmplY3Qoe1xuICBsb2dvOiB6JDEuc3RyaW5nKCksXG4gIGljb246IHokMS5zdHJpbmcoKSxcbiAgcHJpbWFyeV9jb2xvcjogeiQxLnN0cmluZygpLFxuICBzZWNvbmRhcnlfY29sb3I6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaW52b2ljZV91cmxzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uX2lkczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwYXltZW50X2lucHV0OiB6JDEuYW55KCksXG4gIC8vIFNob3VsZCBmb2xsb3cgQW55UGF5bWVudElucHV0IGZyb20gQ0RFXG4gIGN1c3RvbWVyX2VtYWlsOiB6JDEuc3RyaW5nKCksXG4gIGN1c3RvbWVyX3ppcF9jb2RlOiB6JDEuc3RyaW5nKCksXG4gIGN1c3RvbWVyX2NvdW50cnk6IHokMS5zdHJpbmcoKSxcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KExpbmVJdGVtKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgY2FuY2VsX2F0X2VuZDogeiQxLmJvb2xlYW4oKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKCksXG4gIHJldHVybl91cmw6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGxvYzogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIG1zZzogeiQxLnN0cmluZygpLFxuICB1cmw6IHokMS5zdHJpbmcoKVxufSk7XG56JDEuYXJyYXkoUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IpO1xueiQxLm9iamVjdCh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICBwYXltZW50X3Byb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbnokMS5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHokMS5hcnJheSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIGZpZWxkczogUFJGb3JtRmllbGRzLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZFxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2Rcbn0pO1xueiQxLm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeiQxLmFycmF5KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgY2NfcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEucmVjb3JkKHokMS5hbnkoKSk7XG5cbmZ1bmN0aW9uIGZpeFByb3RvKHRhcmdldCwgcHJvdG90eXBlKSB7XG4gIHZhciBzZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiAgc2V0UHJvdG90eXBlT2YgPyBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvdHlwZSkgOiB0YXJnZXQuX19wcm90b19fID0gcHJvdG90eXBlO1xufVxuZnVuY3Rpb24gZml4U3RhY2sodGFyZ2V0LCBmbikge1xuICBpZiAoZm4gPT09IHZvaWQgMCkge1xuICAgIGZuID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB9XG5cbiAgdmFyIGNhcHR1cmVTdGFja1RyYWNlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIGNhcHR1cmVTdGFja1RyYWNlICYmIGNhcHR1cmVTdGFja1RyYWNlKHRhcmdldCwgZm4pO1xufVxuXG52YXIgX19leHRlbmRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX2V4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiBleHRlbmRTdGF0aWNzKGQsIGIpIHtcbiAgICBfZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7XG4gICAgICBfX3Byb3RvX186IFtdXG4gICAgfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICBkLl9fcHJvdG9fXyA9IGI7XG4gICAgfSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgZm9yICh2YXIgcCBpbiBiKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gX2V4dGVuZFN0YXRpY3MoZCwgYik7XG4gIH07XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbCkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuXG4gICAgX2V4dGVuZFN0YXRpY3MoZCwgYik7XG5cbiAgICBmdW5jdGlvbiBfXygpIHtcbiAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBkO1xuICAgIH1cblxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgfTtcbn0oKTtcblxuKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgX19leHRlbmRzKEN1c3RvbUVycm9yLCBfc3VwZXIpO1xuXG4gIGZ1bmN0aW9uIEN1c3RvbUVycm9yKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgX25ld1RhcmdldCA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlLCBvcHRpb25zKSB8fCB0aGlzO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCAnbmFtZScsIHtcbiAgICAgIHZhbHVlOiBfbmV3VGFyZ2V0Lm5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGZpeFByb3RvKF90aGlzLCBfbmV3VGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgZml4U3RhY2soX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBDdXN0b21FcnJvcjtcbn0pKEVycm9yKTtcblxuY29uc3QgY3JlYXRlT2pzRmxvd0xvZ2dlcnMgPSAocHJlZml4KSA9PiB7XG4gIGNvbnN0IGxvZyA9ICguLi5hcmdzKSA9PiB7XG4gICAgd2luZG93W1wiY29uc29sZVwiXS5sb2coYCR7WS5ncmVlbi5ib2xkKFwib2pzL1wiKX0ke1kuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICBjb25zdCBlcnIgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0uZXJyb3IoYCR7WS5yZWQuYm9sZChcIm9qcy9cIil9JHtZLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBsb2csXG4gICAgZXJyLFxuICAgIGxvZ19fOiBsb2csXG4gICAgZXJyX186IGVyclxuICB9O1xufTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInN0cmlwZV9saW5rXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEudW5pb24oW3okMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLCB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIildKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xuXG5jb25zdCBQUl9MT0FESU5HID0ge1xuICBpc0xvYWRpbmc6IHRydWUsXG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYHN0YXJ0RmxvdyB0cmlnZ2VyZWQgd2hpbGUgcGF5bWVudCByZXF1ZXN0IGlzIHN0aWxsIG5vdCByZWFkeS4gXG4gICAgICBZb3UgY2FuIGNoZWNrIHRoZSBcIi5pc0xvYWRpbmdcIiBwYXJhbSB0byBrbm93IHdoZW4gYSBwYXltZW50IHJlcXVlc3QgaXMgc3RpbGwgbG9hZGluZywgXG4gICAgICBhbmQgXCIuaXNBdmFpbGFibGVcIiB0byBrbm93IGlmIGEgcGF5bWVudCByZXF1ZXN0IGlzIGF2YWlsYWJsZS5gXG4gICAgKTtcbiAgfVxufTtcblxuY29uc3QgeyBlcnJfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJmb3JtLWNhbGxiYWNrc1wiKTtcbmNvbnN0IE9wdGlvbmFsRm4gPSB6JDEuZnVuY3Rpb24oKS5vcHRpb25hbCgpO1xuY29uc3QgWm9kRm9ybUNhbGxiYWNrcyA9IHokMS5vYmplY3Qoe1xuICBvbkZvY3VzOiBPcHRpb25hbEZuLFxuICBvbkJsdXI6IE9wdGlvbmFsRm4sXG4gIG9uQ2hhbmdlOiBPcHRpb25hbEZuLFxuICBvbkxvYWQ6IE9wdGlvbmFsRm4sXG4gIG9uTG9hZEVycm9yOiBPcHRpb25hbEZuLFxuICBvblZhbGlkYXRpb25FcnJvcjogT3B0aW9uYWxGbixcbiAgb25DaGVja291dFN0YXJ0ZWQ6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRTdWNjZXNzOiBPcHRpb25hbEZuLFxuICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRFcnJvcjogT3B0aW9uYWxGbixcbiAgb25QYXltZW50UmVxdWVzdExvYWQ6IE9wdGlvbmFsRm5cbn0pO1xuY2xhc3MgRm9ybUNhbGxiYWNrcyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuX2NhbGxiYWNrcyA9IHt9O1xuICAgIC8qKlxuICAgICAqIFNldHMgQUxMIGZvcm0gY2FsbGJhY2tzLiBOb3RlIHRoYXQgYWxsIG9sZCBjYWxsYmFja3MgYXJlIHJlbW92ZWQuXG4gICAgICovXG4gICAgdGhpcy5zZXRDYWxsYmFja3MgPSAocmF3Q2FsbGJhY2tzKSA9PiB7XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSB7fTtcbiAgICAgIE9iamVjdC5lbnRyaWVzKHJhd0NhbGxiYWNrcykuZm9yRWFjaCgoW2tleSwgcmF3Q2FsbGJhY2tdKSA9PiB7XG4gICAgICAgIGNvbnN0IHNhZmVDYWxsYmFjayA9IG1ha2VDYWxsYmFja1NhZmUoa2V5LCByYXdDYWxsYmFjayA/PyAoKCkgPT4ge1xuICAgICAgICB9KSwgZXJyX18pO1xuICAgICAgICB0aGlzLl9jYWxsYmFja3Nba2V5XSA9IHNhZmVDYWxsYmFjaztcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLmZyb21PYmplY3QgPSAob2JqKSA9PiB7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBGb3JtQ2FsbGJhY2tzKCk7XG4gICAgICBpbnN0YW5jZS5zZXRDYWxsYmFja3MoWm9kRm9ybUNhbGxiYWNrcy5wYXJzZShvYmopKTtcbiAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcmVhZC1vbmx5IHZlcnNpb24gb2YgdGhlIGNhbGxiYWNrcyBvYmplY3QuXG4gICAqL1xuICBnZXQgZ2V0KCkge1xuICAgIHJldHVybiB7IC4uLnRoaXMuX2NhbGxiYWNrcyB9O1xuICB9XG59XG5cbmNvbnN0IHVzZVBheW1lbnRSZXF1ZXN0cyA9IChvcmlnaW5hbE9uUGF5bWVudFJlcXVlc3RMb2FkKSA9PiB7XG4gIGNvbnN0IFtwYXltZW50UmVxdWVzdHMsIHNldFBheW1lbnRSZXF1ZXN0c10gPSB1c2VTdGF0ZSh7XG4gICAgYXBwbGVfcGF5OiBQUl9MT0FESU5HLFxuICAgIGdvb2dsZV9wYXk6IFBSX0xPQURJTkdcbiAgfSk7XG4gIGNvbnN0IG92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkID0gdXNlQ2FsbGJhY2soXG4gICAgKHBheW1lbnRSZXF1ZXN0czIpID0+IHtcbiAgICAgIHNldFBheW1lbnRSZXF1ZXN0cyhwYXltZW50UmVxdWVzdHMyKTtcbiAgICAgIG9yaWdpbmFsT25QYXltZW50UmVxdWVzdExvYWQ/LihwYXltZW50UmVxdWVzdHMyKTtcbiAgICB9LFxuICAgIFtvcmlnaW5hbE9uUGF5bWVudFJlcXVlc3RMb2FkXVxuICApO1xuICByZXR1cm4geyBwYXltZW50UmVxdWVzdHMsIG92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkIH07XG59O1xuXG5jb25zdCBGT1JNX1RBUkdFVCA9IFwib3Bfb2pzX2Zvcm1cIjtcbmNvbnN0IEVsZW1lbnRzRm9ybSA9IChwcm9wcykgPT4ge1xuICBjb25zdCBbb3BGb3JtLCBzZXRPcEZvcm1dID0gdXNlU3RhdGUoKTtcbiAgY29uc3QgW2VsZW1lbnRzQ29udGV4dFZhbHVlLCBzZXRFbGVtZW50c0NvbnRleHRWYWx1ZV0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgeyBwYXltZW50UmVxdWVzdHMsIG92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkIH0gPSB1c2VQYXltZW50UmVxdWVzdHMocHJvcHMub25QYXltZW50UmVxdWVzdExvYWQpO1xuICBjb25zdCBbbG9hZGVkLCBzZXRMb2FkZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc3RyaXBlTGlua0N0cmwsIHNldFN0cmlwZUxpbmtDdHJsXSA9IHVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBmb3JtQ2FsbGJhY2tzID0gdXNlUmVhY3RpdmVGb3JtQ2FsbGJhY2tzKHtcbiAgICAuLi5wcm9wcyxcbiAgICBvblBheW1lbnRSZXF1ZXN0TG9hZDogb3ZlcnJpZGVuT25QYXltZW50UmVxdWVzdExvYWQsXG4gICAgb25Mb2FkOiAodG90YWxBbW91bnRBdG9tcywgY3VycmVuY3kpID0+IHtcbiAgICAgIHNldExvYWRlZCh0cnVlKTtcbiAgICAgIHByb3BzLm9uTG9hZD8uKHRvdGFsQW1vdW50QXRvbXMsIGN1cnJlbmN5KTtcbiAgICB9XG4gIH0pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChvcEZvcm0pIHJldHVybjtcbiAgICBjb25zdCBmb3JtID0gRmUuZ2V0SW5zdGFuY2UoKSA/PyBuZXcgRmUoe1xuICAgICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogcHJvcHMuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICAgIGZvcm1UYXJnZXQ6IGAjJHtGT1JNX1RBUkdFVH1gLFxuICAgICAgYmFzZVVybDogcHJvcHMuYmFzZVVybCxcbiAgICAgIGN1c3RvbUluaXRQYXJhbXM6IHByb3BzLmN1c3RvbUluaXRQYXJhbXMsXG4gICAgICAuLi5mb3JtQ2FsbGJhY2tzXG4gICAgfSk7XG4gICAgc2V0T3BGb3JtKGZvcm0pO1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUoZm9ybSk7XG4gICAgc2V0RWxlbWVudHNDb250ZXh0VmFsdWUodmFsdWUpO1xuICAgIGZvcm0uaW5pdEZsb3dzLnN0cmlwZUxpbmsucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgc2V0U3RyaXBlTGlua0N0cmwocmVzdWx0LmxvYWRlZFZhbHVlLmNvbnRyb2xsZXIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCBbXSk7XG4gIGlmICghb3BGb3JtKSB7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRnJhZ21lbnQsIHt9KTtcbiAgfVxuICBjb25zdCBjaGlsZHJlblByb3BzID0ge1xuICAgIHN1Ym1pdDogb3BGb3JtLnN1Ym1pdENhcmQsXG4gICAgYXBwbGVQYXk6IHBheW1lbnRSZXF1ZXN0cy5hcHBsZV9wYXksXG4gICAgZ29vZ2xlUGF5OiBwYXltZW50UmVxdWVzdHMuZ29vZ2xlX3BheSxcbiAgICBsb2FkZWQsXG4gICAgLy8gRGlzYWJsZSBkeW5hbWljIHByZXZpZXdzIGZlYXR1cmUgZm9yIG5vd1xuICAgIHByZXZpZXc6IHtcbiAgICAgIGFtb3VudDogbnVsbCxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBlcnJvcjogbnVsbFxuICAgIH0sXG4gICAgc3RyaXBlTGluazogc3RyaXBlTGlua0N0cmxcbiAgfTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRnJhZ21lbnQsIHsgY2hpbGRyZW46IGVsZW1lbnRzQ29udGV4dFZhbHVlID8gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50c0NvbnRleHQuUHJvdmlkZXIsIHsgdmFsdWU6IGVsZW1lbnRzQ29udGV4dFZhbHVlLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGpzeChcImRpdlwiLCB7IGlkOiBGT1JNX1RBUkdFVCwgY2xhc3NOYW1lOiBwcm9wcy5jbGFzc05hbWUsIGNoaWxkcmVuOiBwcm9wcy5jaGlsZHJlbihjaGlsZHJlblByb3BzKSB9KSB9KSA6IC8qIEBfX1BVUkVfXyAqLyBqc3goRnJhZ21lbnQsIHt9KSB9KTtcbn07XG5jb25zdCBnZXRFbGVtZW50c0NvbnRleHRWYWx1ZSA9IChvcEZvcm0pID0+IHtcbiAgcmV0dXJuIHtcbiAgICBmb3JtSWQ6IG9wRm9ybS5mb3JtSWQsXG4gICAgZm9ybUhlaWdodDogb3BGb3JtLmZvcm1Qcm9wZXJ0aWVzLmhlaWdodCxcbiAgICByZWZlcnJlcjogb3BGb3JtLnJlZmVycmVyLFxuICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IG9wRm9ybS5jaGVja291dFNlY3VyZVRva2VuLFxuICAgIHJlZ2lzdGVySWZyYW1lOiBvcEZvcm0ucmVnaXN0ZXJJZnJhbWUsXG4gICAgYmFzZVVybDogb3BGb3JtLmJhc2VVcmxcbiAgfTtcbn07XG5cbmNvbnN0IEVsZW1lbnRGcmFtZSA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IGVsZW1lbnRUeXBlLCBzdHlsZXMgfSA9IHByb3BzO1xuICBjb25zdCB7IGZvcm1JZCwgcmVmZXJyZXIsIGZvcm1IZWlnaHQsIGNoZWNrb3V0U2VjdXJlVG9rZW4sIHJlZ2lzdGVySWZyYW1lLCBiYXNlVXJsIH0gPSB1c2VPcGVuUGF5RWxlbWVudHMoKTtcbiAgY29uc3Qgc3ViUGF0aCA9IGVsZW1lbnRUeXBlLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IFtoYXNMb2FkZWQsIHNldEhhc0xvYWRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IGlmcmFtZVJlZiA9IHVzZVJlZihudWxsKTtcbiAgY29uc3QgZWxlbWVudFN0eWxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFzdHlsZXMpIHJldHVybiBcIlwiO1xuICAgIHJldHVybiBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyhzdHlsZXMpO1xuICB9LCBbc3R5bGVzXSk7XG4gIGNvbnN0IGZyYW1lU3R5bGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgIGhlaWdodDogZm9ybUhlaWdodFxuICAgIH07XG4gIH0sIFtmb3JtSGVpZ2h0XSk7XG4gIGNvbnN0IHF1ZXJ5U3RyaW5nID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFjaGVja291dFNlY3VyZVRva2VuIHx8ICFyZWZlcnJlcikgcmV0dXJuIFwiXCI7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJyZWZlcmVyXCIsIHJlZmVycmVyKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwic3R5bGVzXCIsIGVsZW1lbnRTdHlsZSk7XG4gICAgcGFyYW1zLmFwcGVuZChcImZvcm1JZFwiLCBmb3JtSWQpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJzZWN1cmVUb2tlblwiLCBjaGVja291dFNlY3VyZVRva2VuKTtcbiAgICByZXR1cm4gcGFyYW1zLnRvU3RyaW5nKCk7XG4gIH0sIFtlbGVtZW50U3R5bGUsIGZvcm1JZCwgcmVmZXJyZXIsIGNoZWNrb3V0U2VjdXJlVG9rZW5dKTtcbiAgdXNlRWZmZWN0KCgpID0+IHNldEhhc0xvYWRlZCh0cnVlKSwgW10pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaWZyYW1lUmVmLmN1cnJlbnQgfHwgIWhhc0xvYWRlZCkgcmV0dXJuO1xuICAgIHJlZ2lzdGVySWZyYW1lKGVsZW1lbnRUeXBlLCBpZnJhbWVSZWYuY3VycmVudCk7XG4gIH0sIFtoYXNMb2FkZWRdKTtcbiAgaWYgKCFjaGVja291dFNlY3VyZVRva2VuKSB7XG4gICAgY29uc29sZS5lcnJvcihcIltmb3JtXSBDYW5ub3QgcmVuZGVyIHBhcnRpYWxseSBpbml0aWFsaXplZCBmcmFtZVwiKTtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChcImRpdlwiLCB7fSk7XG4gIH1cbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goXG4gICAgXCJpZnJhbWVcIixcbiAgICB7XG4gICAgICBpZDogYG9qcy0ke3N1YlBhdGh9LWVsZW1lbnRgLFxuICAgICAgbmFtZTogYCR7c3ViUGF0aH0tZWxlbWVudGAsXG4gICAgICBjbGFzc05hbWU6IFwib2pzLWlmcmFtZVwiLFxuICAgICAgc3JjOiBgJHtiYXNlVXJsfS9hcHAvdjEvJHtzdWJQYXRofS1lbGVtZW50Lz8ke3F1ZXJ5U3RyaW5nfWAsXG4gICAgICBzdHlsZTogZnJhbWVTdHlsZSxcbiAgICAgIHJlZjogaWZyYW1lUmVmXG4gICAgfVxuICApO1xufTtcblxuY29uc3QgQ2FyZEN2Y0VsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkRfQ1ZDIH0pO1xufTtcblxuY29uc3QgQ2FyZEVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkQgfSk7XG59O1xuXG5jb25zdCBDYXJkRXhwaXJ5RWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRF9FWFBJUlkgfSk7XG59O1xuXG5jb25zdCBDYXJkTnVtYmVyRWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRF9OVU1CRVIgfSk7XG59O1xuXG5leHBvcnQgeyBDYXJkQ3ZjRWxlbWVudCwgQ2FyZEVsZW1lbnQsIENhcmRFeHBpcnlFbGVtZW50LCBDYXJkTnVtYmVyRWxlbWVudCwgRWxlbWVudHNGb3JtLCBGaWVsZE5hbWUsIHVzZU9wZW5QYXlFbGVtZW50cyB9OyJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFNBQVMsaUJBQUFBLElBQWUsY0FBQUMsSUFBWSxVQUFBQyxJQUFRLFdBQUFDLEdBQVMsWUFBQUMsR0FBVSxlQUFBQyxJQUFhLGFBQUFDLFVBQWlCO0FBQzdGLFNBQVMsT0FBQUMsR0FBSyxZQUFBQyxVQUFnQjtBQUM5QixTQUFTLEtBQUtDLFNBQVc7QUFDekIsT0FBTztBQUNQLFNBQVMsa0JBQUFDLFVBQXNCO0FBQy9CLE9BQU9DLE9BQU87QUFFZCxNQUFNQyxLQUFrQlosR0FBYztBQUFB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TCxHQUFhVSxFQUFVLE9BQU87QUFBQSxFQUMvQyxHQUFHLENBQUNGLENBQVMsQ0FBQyxHQUNUSixJQUlrQixnQkFBQWphO0FBQUEsSUFDckI7QUFBQSxJQUNBO0FBQUEsTUFDRSxJQUFJLE9BQU9vYSxDQUFPO0FBQUEsTUFDbEIsTUFBTSxHQUFHQSxDQUFPO0FBQUEsTUFDaEIsV0FBVztBQUFBLE1BQ1gsS0FBSyxHQUFHRCxDQUFPLFdBQVdDLENBQU8sYUFBYU0sQ0FBVztBQUFBLE1BQ3pELE9BQU9EO0FBQUEsTUFDUCxLQUFLRjtBQUFBLElBQ1A7QUFBQSxFQUNGLEtBYkUsUUFBUSxNQUFNLGtEQUFrRCxHQUN6QyxnQkFBQXZhLEVBQUksT0FBTyxDQUFDLENBQUM7QUFheEMsR0FFTTRhLEtBQWlCLENBQUMsRUFBRSxRQUFBNUYsRUFBTyxNQUNSLGdCQUFBaFYsRUFBSTRaLElBQWMsRUFBRSxRQUFBNUUsR0FBUSxhQUFhM0IsRUFBZ0IsU0FBUyxDQUFDLEdBR3RGd0gsS0FBYyxDQUFDLEVBQUUsUUFBQTdGLEVBQU8sTUFDTCxnQkFBQWhWLEVBQUk0WixJQUFjLEVBQUUsUUFBQTVFLEdBQVEsYUFBYTNCLEVBQWdCLEtBQUssQ0FBQyxHQUdsRnlILEtBQW9CLENBQUMsRUFBRSxRQUFBOUYsRUFBTyxNQUNYLGdCQUFBaFYsRUFBSTRaLElBQWMsRUFBRSxRQUFBNUUsR0FBUSxhQUFhM0IsRUFBZ0IsWUFBWSxDQUFDLEdBR3pGMEgsS0FBb0IsQ0FBQyxFQUFFLFFBQUEvRixFQUFPLE1BQ1gsZ0JBQUFoVixFQUFJNFosSUFBYyxFQUFFLFFBQUE1RSxHQUFRLGFBQWEzQixFQUFnQixZQUFZLENBQUM7IiwKICAibmFtZXMiOiBbImNyZWF0ZUNvbnRleHQiLCAidXNlQ29udGV4dCIsICJ1c2VSZWYiLCAidXNlTWVtbyIsICJ1c2VTdGF0ZSIsICJ1c2VDYWxsYmFjayIsICJ1c2VFZmZlY3QiLCAianN4IiwgIkZyYWdtZW50IiwgInokMSIsICJjb25uZWN0VG9DaGlsZCIsICJZIiwgIkVsZW1lbnRzQ29udGV4dCIsICJ1c2VPcGVuUGF5RWxlbWVudHMiLCAiY29udGV4dCIsICJkdCIsICJmdCIsICJwdCIsICJodCIsICJtdCIsICJ5dCIsICJhZSIsICJ0IiwgInIiLCAiX3QiLCAiZ3QiLCAiZSIsICJidCIsICIkIiwgInZ0IiwgIm4iLCAiUyIsICJFIiwgIloiLCAieSIsICJ4ZSIsICJOZSIsICJVZSIsICIkZSIsICJEIiwgInd0IiwgInRlIiwgIkV0IiwgIkkiLCAiU3QiLCAiQ3QiLCAia3QiLCAiUHQiLCAiSXQiLCAiT3QiLCAiQXQiLCAiUnQiLCAiVHQiLCAianQiLCAiTXQiLCAiTHQiLCAiViIsICJGdCIsICJEdCIsICJ4dCIsICJOdCIsICJVdCIsICIkdCIsICJWdCIsICJxdCIsICJ6dCIsICJIdCIsICJZdCIsICJHIiwgIkJ0IiwgIkt0IiwgIkp0IiwgIlp0IiwgIkd0IiwgIld0IiwgInJlIiwgImdlIiwgImVyIiwgIlF0IiwgIlh0IiwgInRyIiwgInJyIiwgIm5yIiwgImkiLCAicyIsICJhIiwgImMiLCAib3IiLCAiZGUiLCAiaXIiLCAic3IiLCAiYXIiLCAiY3IiLCAiVmUiLCAicWUiLCAidXIiLCAibHIiLCAicSIsICJkciIsICJmciIsICJ6ZSIsICJwciIsICJociIsICJtciIsICJiZSIsICJIZSIsICJ2ZSIsICJZZSIsICJ5ciIsICJfciIsICJCZSIsICJnciIsICJiciIsICJLZSIsICJ2ciIsICJ3ciIsICJFciIsICJTciIsICJDciIsICJrciIsICJKZSIsICJPIiwgIklyIiwgIlByIiwgIk9yIiwgInoiLCAiQXIiLCAiUnIiLCAiVHIiLCAiZmUiLCAianIiLCAiWmUiLCAiTXIiLCAid2UiLCAiTHIiLCAiR2UiLCAiV2UiLCAiRnIiLCAiRHIiLCAicGUiLCAiUWUiLCAiQSIsICJnbyIsICJ4ciIsICJoZSIsICJYZSIsICJOciIsICJldCIsICJtZSIsICJVciIsICJFZSIsICJ2IiwgIiRyIiwgIlZyIiwgInFyIiwgInpyIiwgImgiLCAiXyIsICJmIiwgIm0iLCAiayIsICJwIiwgIk4iLCAiQnIiLCAiSHIiLCAiWXIiLCAiZCIsICJsIiwgInUiLCAiS3IiLCAiSnIiLCAiWnIiLCAiR3IiLCAiV3IiLCAiYiIsICJTZSIsICJDZSIsICJRciIsICJ0biIsICJybiIsICJYciIsICJlbiIsICJDIiwgIm5uIiwgIm9uIiwgInNuIiwgImFuIiwgInVuIiwgImNuIiwgImxuIiwgInR0IiwgImNlIiwgIk0iLCAiZG4iLCAicnQiLCAiVSIsICJXIiwgIlEiLCAieCIsICJmbiIsICJMIiwgInBuIiwgInciLCAibmUiLCAib2UiLCAiWCIsICJIIiwgImtlIiwgIm50IiwgIm90IiwgIml0IiwgInN0IiwgImF0IiwgIlBlIiwgIksiLCAieWUiLCAiX24iLCAidWUiLCAiaG4iLCAiaWUiLCAibW4iLCAiQiIsICJ5biIsICJfZSIsICJnbiIsICJibiIsICJUIiwgInduIiwgIkllIiwgInZuIiwgIkVuIiwgIlNuIiwgIkNuIiwgImtuIiwgIlBuIiwgImN0IiwgIk9lIiwgIkluIiwgIk9uIiwgIkFlIiwgIkFuIiwgIlJlIiwgIlJuIiwgIlRuIiwgImpuIiwgIk1uIiwgIkxuIiwgIkZuIiwgIkRuIiwgInhuIiwgIk5uIiwgIlVuIiwgIiRuIiwgIlZuIiwgInFuIiwgInpuIiwgIkhuIiwgIlluIiwgInV0IiwgIkJuIiwgIktuIiwgIkpuIiwgIlpuIiwgIkduIiwgIlduIiwgIlFuIiwgIlhuIiwgImVvIiwgInRvIiwgInJvIiwgIkYiLCAibHQiLCAiSiIsICJubyIsICJvbyIsICJUZSIsICJpbyIsICJzbyIsICJhbyIsICJQIiwgImNvIiwgImVlIiwgImxlIiwgInVvIiwgImplIiwgImxvIiwgImZvIiwgInBvIiwgIk1lIiwgIkxlIiwgImoiLCAic2UiLCAiUiIsICJGZSIsICJ1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3MiLCAicHJvcHMiLCAiZm9ybUNhbGxiYWNrc1JlZiIsICJjYiIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxIiwgIlpvZEZpZWxkRXJyb3IiLCAibWFrZUNhbGxiYWNrU2FmZSIsICJjYWxsYmFja05hbWUiLCAiZXJyb3JMb2dnZXIiLCAiYXJncyIsICJlcnJvciIsICJSZXF1aXJlZFN0cmluZyIsICJPcHRpb25hbFN0cmluZyIsICJudWxsT3JVbmRlZk9yJDEiLCAielR5cGUiLCAiRmllbGROYW1lIiwgIkZpZWxkTmFtZTIiLCAiRmllbGROYW1lRW51bSIsICJQcml2YXRlRmllbGROYW1lIiwgIlByaXZhdGVGaWVsZE5hbWUyIiwgIlByaXZhdGVGaWVsZE5hbWVFbnVtIiwgIkFsbEZpZWxkTmFtZXMiLCAiRWxlbWVudFR5cGVFbnVtIiwgIkVsZW1lbnRUeXBlRW51bTIiLCAiQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEiLCAiUGF5bWVudE1ldGhvZE1pbmltYWwiLCAiRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50UGF5bG9hZCIsICJJbnB1dEV2ZW50VHlwZSIsICJJbnB1dEV2ZW50UGF5bG9hZCIsICJFcnJvckV2ZW50VHlwZSIsICJFcnJvckV2ZW50UGF5bG9hZCIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkIiwgIkxheW91dEV2ZW50UGF5bG9hZCIsICJMb2FkZWRFdmVudFBheWxvYWQiLCAiUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkIiwgIlNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIlJlcXVpcmVkRm9ybUZpZWxkcyIsICJQUkZvcm1GaWVsZHMiLCAiU3VibWl0RXZlbnRUeXBlIiwgIlN1Ym1pdEV2ZW50UGF5bG9hZCIsICJUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkV2ZW50UGF5bG9hZCIsICJGaWVsZFZhbGlkYXRpb25FcnJvciIsICJUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlIiwgImNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nIiwgInN0eWxlcyIsICJudWxsT3JVbmRlZk9yIiwgIkNvdXBvbk1pbmltYWwiLCAiTGluZUl0ZW0iLCAiQnJhbmRTZXR0aW5ncyIsICJCcmFuZCIsICJDaGVja291dFBheW1lbnRNZXRob2QiLCAiU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwiLCAiU3Vic2NyaXB0aW9uTWluaW1hbCIsICJJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwiLCAiSW52b2ljZUxpbmVJdGVtTWluaW1hbCIsICJEaXNjb3VudE1pbmltYWwiLCAiSW52b2ljZU1pbmltYWwiLCAiQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsIiwgIlByZXZpZXdDaGVja291dFJlc3BvbnNlIiwgIl9QYXltZW50Rm9ybVByZWZpbGxDb21tb24iLCAiUGF5bWVudEZvcm1QcmVmaWxsIiwgIkNvbXBsZXRlZEZvcm1QcmVmaWxsIiwgIkV4cGlyZWRGb3JtUHJlZmlsbCIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciIsICJmaXhQcm90byIsICJ0YXJnZXQiLCAicHJvdG90eXBlIiwgInNldFByb3RvdHlwZU9mIiwgImZpeFN0YWNrIiwgImNhcHR1cmVTdGFja1RyYWNlIiwgIl9fZXh0ZW5kcyIsICJfZXh0ZW5kU3RhdGljcyIsICJfXyIsICJfc3VwZXIiLCAiQ3VzdG9tRXJyb3IiLCAibWVzc2FnZSIsICJvcHRpb25zIiwgIl9uZXdUYXJnZXQiLCAiX3RoaXMiLCAiY3JlYXRlT2pzRmxvd0xvZ2dlcnMiLCAicHJlZml4IiwgImxvZyIsICJlcnIiLCAiUFJfTE9BRElORyIsICJlcnJfXyIsICJPcHRpb25hbEZuIiwgIlpvZEZvcm1DYWxsYmFja3MiLCAiX0Zvcm1DYWxsYmFja3MiLCAicmF3Q2FsbGJhY2tzIiwgImtleSIsICJyYXdDYWxsYmFjayIsICJzYWZlQ2FsbGJhY2siLCAib2JqIiwgImluc3RhbmNlIiwgIkZvcm1DYWxsYmFja3MiLCAidXNlUGF5bWVudFJlcXVlc3RzIiwgIm9yaWdpbmFsT25QYXltZW50UmVxdWVzdExvYWQiLCAicGF5bWVudFJlcXVlc3RzIiwgInNldFBheW1lbnRSZXF1ZXN0cyIsICJvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCIsICJwYXltZW50UmVxdWVzdHMyIiwgIkZPUk1fVEFSR0VUIiwgIkVsZW1lbnRzRm9ybSIsICJvcEZvcm0iLCAic2V0T3BGb3JtIiwgImVsZW1lbnRzQ29udGV4dFZhbHVlIiwgInNldEVsZW1lbnRzQ29udGV4dFZhbHVlIiwgImxvYWRlZCIsICJzZXRMb2FkZWQiLCAic3RyaXBlTGlua0N0cmwiLCAic2V0U3RyaXBlTGlua0N0cmwiLCAiZm9ybUNhbGxiYWNrcyIsICJ0b3RhbEFtb3VudEF0b21zIiwgImN1cnJlbmN5IiwgIl9hIiwgImZvcm0iLCAidmFsdWUiLCAiZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUiLCAicmVzdWx0IiwgImNoaWxkcmVuUHJvcHMiLCAiRWxlbWVudEZyYW1lIiwgImVsZW1lbnRUeXBlIiwgImZvcm1JZCIsICJyZWZlcnJlciIsICJmb3JtSGVpZ2h0IiwgImNoZWNrb3V0U2VjdXJlVG9rZW4iLCAicmVnaXN0ZXJJZnJhbWUiLCAiYmFzZVVybCIsICJzdWJQYXRoIiwgImhhc0xvYWRlZCIsICJzZXRIYXNMb2FkZWQiLCAiaWZyYW1lUmVmIiwgImVsZW1lbnRTdHlsZSIsICJmcmFtZVN0eWxlIiwgInF1ZXJ5U3RyaW5nIiwgInBhcmFtcyIsICJDYXJkQ3ZjRWxlbWVudCIsICJDYXJkRWxlbWVudCIsICJDYXJkRXhwaXJ5RWxlbWVudCIsICJDYXJkTnVtYmVyRWxlbWVudCJdCn0K
2979
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXguanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVJlZiwgdXNlTWVtbywgdXNlU3RhdGUsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3gsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QvanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHsgeiBhcyB6JDEgfSBmcm9tICd6b2QnO1xuaW1wb3J0ICd1dWlkJztcbmltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCBZIGZyb20gJ2NoYWxrJztcblxuY29uc3QgRWxlbWVudHNDb250ZXh0ID0gY3JlYXRlQ29udGV4dCh7XG4gIGZvcm1JZDogXCJcIixcbiAgZm9ybUhlaWdodDogXCJcIixcbiAgcmVmZXJyZXI6IHZvaWQgMCxcbiAgY2hlY2tvdXRTZWN1cmVUb2tlbjogdm9pZCAwLFxuICByZWdpc3RlcklmcmFtZTogKCkgPT4ge1xuICB9LFxuICBiYXNlVXJsOiBcIlwiXG59KTtcblxuY29uc3QgdXNlT3BlblBheUVsZW1lbnRzID0gKCkgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChFbGVtZW50c0NvbnRleHQpO1xuICBpZiAoIWNvbnRleHQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJ1c2VPcGVuUGF5RWxlbWVudHMgbXVzdCBiZSB1c2VkIHdpdGhpbiBhbiBPcGVuUGF5RWxlbWVudHNQcm92aWRlclwiKTtcbiAgfVxuICByZXR1cm4gY29udGV4dDtcbn07XG5cbmNvbnN0IGZ0ID0gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiLCBwdCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGxvYzogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIG1zZzogeiQxLnN0cmluZygpLFxuICB1cmw6IHokMS5zdHJpbmcoKVxufSksIGh0ID0geiQxLmFycmF5KHB0KSwgbXQgPSB6JDEub2JqZWN0KHtcbiAgY29kZTogeiQxLnN0cmluZygpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIHBhdGg6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KSwgeXQgPSB6JDEuYXJyYXkobXQpLCBfdCA9IHtcbiAgXCJmYWlsZWQgdG8gZmV0Y2hcIjogXCJDb25uZWN0aW9uIGVycm9yOiBwbGVhc2UgZG91YmxlIGNoZWNrIGlmIHlvdSBhcmUgY29ubmVjdGVkIHRvIHRoZSBpbnRlcm5ldCwgdGhlbiB0cnkgYWdhaW5cIlxufSwgYWUgPSAodCkgPT4ge1xuICBjb25zdCByID0gdC50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgcmV0dXJuIF90W3JdID8/IHQ7XG59LCBndCA9ICh0KSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHR5cGVvZiBKU09OLnBhcnNlKHQpID09IFwib2JqZWN0XCI7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiAhMTtcbiAgfVxufSwgYnQgPSAodCkgPT4gdC5sZW5ndGggPT09IDEgPyBhZSh0WzBdLm1zZykgOiBgUGxlYXNlIGZpeCB0aGUgZm9sbG93aW5nIGVycm9yczpcbiR7dC5tYXAoKGUpID0+IGDigKIgJHthZShlLm1zZyl9YCkuam9pbihgXG5gKX1gLCB2dCA9ICh0KSA9PiBgRW5jb3VudGVyZWQgdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4ke3QubWFwKChlKSA9PiBgLSAke2UucGF0aC5qb2luKFwiL1wiKX06ICR7ZS5tZXNzYWdlfWApLmpvaW4oYFxuYCl9YCwgVSA9ICh0KSA9PiB7XG4gIGlmICh0IGluc3RhbmNlb2YgRXJyb3IpXG4gICAgaWYgKGd0KHQubWVzc2FnZSkpIHtcbiAgICAgIGNvbnN0IHIgPSBKU09OLnBhcnNlKHQubWVzc2FnZSk7XG4gICAgICByZXR1cm4gaHQuc2FmZVBhcnNlKHIpLnN1Y2Nlc3MgPyBidChyKSA6IHl0LnNhZmVQYXJzZShyKS5zdWNjZXNzID8gdnQocikgOiAoY29uc29sZS53YXJuKGBFbmNvdW50ZXJlZCB1bmtub3duIHN0cmluZ2lmaWVkIEpTT04gb2JqZWN0OlxuJHt0Lm1lc3NhZ2V9YCksIHQubWVzc2FnZSk7XG4gICAgfSBlbHNlXG4gICAgICByZXR1cm4gYWUodC5tZXNzYWdlKTtcbiAgaWYgKHR5cGVvZiB0ID09IFwib2JqZWN0XCIpXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0KTtcbiAgICB9IGNhdGNoIChyKSB7XG4gICAgICByZXR1cm4gciArIFwiXCI7XG4gICAgfVxuICBlbHNlXG4gICAgcmV0dXJuIHQgKyBcIlwiO1xufSwgd3QgPSAodCwgciwgZSkgPT4gKC4uLm4pID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gciguLi5uKTtcbiAgfSBjYXRjaCAoaSkge1xuICAgIGUoYFtmb3JtXSBFcnJvciBydW5uaW5nIGNhbGxiYWNrICgke3R9KTpgLCBpKTtcbiAgICByZXR1cm47XG4gIH1cbn0sIFMgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IFwiQ2Fubm90IGJlIGJsYW5rXCIgfSksIEUgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm9wdGlvbmFsKCksIFogPSAodCkgPT4geiQxLm51bGxhYmxlKHQub3B0aW9uYWwoKSk7XG52YXIgbSA9IC8qIEBfX1BVUkVfXyAqLyAoKHQpID0+ICh0LkZJUlNUX05BTUUgPSBcImZpcnN0TmFtZVwiLCB0LkxBU1RfTkFNRSA9IFwibGFzdE5hbWVcIiwgdC5FTUFJTCA9IFwiZW1haWxcIiwgdC5aSVBfQ09ERSA9IFwiemlwQ29kZVwiLCB0LkNJVFkgPSBcImNpdHlcIiwgdC5TVEFURSA9IFwic3RhdGVcIiwgdC5DT1VOVFJZID0gXCJjb3VudHJ5XCIsIHQuQUREUkVTUyA9IFwiYWRkcmVzc1wiLCB0LlBIT05FID0gXCJwaG9uZVwiLCB0LlBST01PVElPTl9DT0RFID0gXCJwcm9tb3Rpb25Db2RlXCIsIHQpKShtIHx8IHt9KTtcbmNvbnN0IE5lID0geiQxLm5hdGl2ZUVudW0obSk7XG52YXIgVWUgPSAvKiBAX19QVVJFX18gKi8gKCh0KSA9PiAodC5DQVJEX05VTUJFUiA9IFwiY2FyZE51bWJlclwiLCB0LkNBUkRfRVhQSVJZID0gXCJjYXJkRXhwaXJ5XCIsIHQuQ0FSRF9DVkMgPSBcImNhcmRDdmNcIiwgdCkpKFVlIHx8IHt9KTtcbmNvbnN0ICRlID0geiQxLm5hdGl2ZUVudW0oVWUpLCBWZSA9IHokMS51bmlvbihbTmUsICRlXSk7XG52YXIgTCA9IC8qIEBfX1BVUkVfXyAqLyAoKHQpID0+ICh0LkNBUkQgPSBcImNhcmRcIiwgdC5DQVJEX05VTUJFUiA9IFwiY2FyZC1udW1iZXJcIiwgdC5DQVJEX0VYUElSWSA9IFwiY2FyZC1leHBpcnlcIiwgdC5DQVJEX0NWQyA9IFwiY2FyZC1jdmNcIiwgdCkpKEwgfHwge30pO1xuY29uc3QgRXQgPSB6JDEubmF0aXZlRW51bShMKSwgZWUgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IFooeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IFooeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KSwgU3QgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgY2FyZE51bWJlcjogRSxcbiAgZXhwaXJ5OiBFLFxuICBjdmM6IEVcbn0pO1xueiQxLm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogRSxcbiAgY29sb3I6IEUsXG4gIGZvbnRGYW1pbHk6IEUsXG4gIGZvbnRTaXplOiBFLFxuICBmb250V2VpZ2h0OiBFLFxuICBtYXJnaW46IEUsXG4gIHBhZGRpbmc6IEUsXG4gIGxldHRlclNwYWNpbmc6IEUsXG4gIGxpbmVIZWlnaHQ6IEVcbn0pO1xuY29uc3QgUCA9IHokMS5lbnVtKFtcbiAgLy8gRWxlbWVudCAtPiBGb3JtXG4gIFwiTEFZT1VUXCIsXG4gIFwiTE9BREVEXCIsXG4gIFwiQkxVUlwiLFxuICBcIkZPQ1VTXCIsXG4gIFwiQ0hBTkdFXCIsXG4gIFwiVE9LRU5JWkVfU1RBUlRFRFwiLFxuICBcIkNIRUNLT1VUX1NUQVJURURcIixcbiAgXCJQQVlNRU5UX0ZMT1dfU1RBUlRFRFwiLFxuICBcIlRPS0VOSVpFX1NVQ0NFU1NcIixcbiAgXCJDSEVDS09VVF9TVUNDRVNTXCIsXG4gIFwiTE9BRF9FUlJPUlwiLFxuICBcIlZBTElEQVRJT05fRVJST1JcIixcbiAgXCJUT0tFTklaRV9FUlJPUlwiLFxuICBcIkNIRUNLT1VUX0VSUk9SXCIsXG4gIFwiU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTU1wiLFxuICAvLyBGb3JtIC0+IEVsZW1lbnRcbiAgXCJUT0tFTklaRVwiLFxuICBcIkNIRUNLT1VUXCIsXG4gIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJcbl0pLCBDdCA9IFAuZXh0cmFjdChbXCJUT0tFTklaRV9TVEFSVEVEXCIsIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiXSksIGt0ID0geiQxLm9iamVjdCh7IHR5cGU6IEN0IH0pLCBQdCA9IFAuZXh0cmFjdChbXCJCTFVSXCIsIFwiRk9DVVNcIiwgXCJDSEFOR0VcIl0pLCBJdCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBQdCxcbiAgZWxlbWVudFR5cGU6ICRlLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pLCBPdCA9IFAuZXh0cmFjdChbXCJMT0FEX0VSUk9SXCIsIFwiVE9LRU5JWkVfRVJST1JcIiwgXCJDSEVDS09VVF9FUlJPUlwiXSksIEF0ID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IE90LFxuICBtZXNzYWdlOiBTLFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KSwgUnQgPSBQLmV4dHJhY3QoW1wiVkFMSURBVElPTl9FUlJPUlwiXSksIFR0ID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IFJ0LFxuICBlbGVtZW50VHlwZTogVmUsXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pLCBqdCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChQLmVudW0uTEFZT1VUKSxcbiAgaGVpZ2h0OiBTXG59KSwgTXQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoUC5lbnVtLkxPQURFRCksXG4gIHNlc3Npb25JZDogUyxcbiAgdG90YWxBbW91bnRBdG9tczogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogRSxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogeiQxLmFycmF5KGVlKVxufSksIEx0ID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKFAuZW51bS5QQVlNRU5UX0ZMT1dfU1RBUlRFRCksXG4gIG5leHRBY3Rpb25NZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBzdGFydFBGTWV0YWRhdGE6IHokMS5vcHRpb25hbCh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCBGdCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChQLmVudW0uU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTUyksXG4gIHBheW1lbnRNZXRob2RJZDogeiQxLnN0cmluZygpXG59KSwgJCA9IHokMS5vYmplY3Qoe1xuICBmaXJzdE5hbWU6IFMsXG4gIGxhc3ROYW1lOiBTLFxuICBlbWFpbDogUyxcbiAgemlwQ29kZTogUyxcbiAgY291bnRyeTogUyxcbiAgcHJvbW90aW9uQ29kZTogRVxufSksIHh0ID0geiQxLm9iamVjdCh7XG4gIGVtYWlsOiBTLFxuICB6aXBDb2RlOiBTLFxuICBjb3VudHJ5OiBTLFxuICBwcm9tb3Rpb25Db2RlOiBFXG59KSwgRHQgPSBQLmV4dHJhY3QoW1wiVE9LRU5JWkVcIiwgXCJDSEVDS09VVFwiLCBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXSksIE50ID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IER0LFxuICBzZXNzaW9uSWQ6IFMsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZWUsXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBkb05vdFVzZUxlZ2FjeUNDRmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ0NDUE1JZDogRVxufSkuZXh0ZW5kKCQuc2hhcGUpLCBVdCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChQLmVudW0uVE9LRU5JWkVfU1VDQ0VTUyksXG4gIGlzUmVhZHlGb3JDaGVja291dDogeiQxLmJvb2xlYW4oKVxufSksICR0ID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKFAuZW51bS5DSEVDS09VVF9TVUNDRVNTKSxcbiAgaW52b2ljZVVybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25JZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcklkOiB6JDEuc3RyaW5nKClcbn0pLCBWdCA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAga3QsXG4gIEl0LFxuICBBdCxcbiAgVHQsXG4gIGp0LFxuICBNdCxcbiAgTnQsXG4gIFV0LFxuICAkdCxcbiAgTHQsXG4gIEZ0XG5dKSwgcXQgPSB6JDEub2JqZWN0KHtcbiAgcGF5bG9hZDogVnQsXG4gIG5vbmNlOiBTLFxuICBmb3JtSWQ6IFMsXG4gIGVsZW1lbnRJZDogU1xufSk7XG56JDEub2JqZWN0KHtcbiAgYW1vdW50QXRvbTogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogU1xufSk7XG56JDEuZW51bShbXCJhcHBsZV9wYXlcIiwgXCJnb29nbGVfcGF5XCJdKTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IFooeiQxLnN0cmluZygpKVxufSk7XG5jb25zdCB6dCA9IHokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZHM6IHokMS5hcnJheShTdClcbn0pLCBIdCA9IHokMS5vYmplY3Qoe1xuICBlbGVtZW50VHlwZTogeiQxLnN0cmluZygpLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgWXQgPSB6JDEub2JqZWN0KHtcbiAgc3VjY2VzczogeiQxLmxpdGVyYWwoITEpLFxuICBlcnJvcl90eXBlOiB6JDEubGl0ZXJhbChcInZhbGlkYXRpb25fZXJyb3JcIiksXG4gIGVycm9yczogeiQxLmFycmF5KEh0KVxufSksIEJ0ID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInN1Y2Nlc3NcIiwgW1xuICB6JDEub2JqZWN0KHsgc3VjY2VzczogeiQxLmxpdGVyYWwoITApIH0pLFxuICBZdFxuXSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogZWUsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6ICQsXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IFooeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogZWUsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6ICRcbn0pO1xudmFyIEcgPSAvKiBAX19QVVJFX18gKi8gKCh0KSA9PiAodC5TVUNDRVNTID0gXCJzdWNjZXNzXCIsIHQuRkFJTFVSRSA9IFwiZmFpbHVyZVwiLCB0LkNBTkNFTExFRCA9IFwiY2FuY2VsbGVkXCIsIHQpKShHIHx8IHt9KTtcbmNvbnN0IEt0ID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1xuICAgIFwic3VjY2Vzc1wiLFxuICAgIFwiZmFpbHVyZVwiLFxuICAgIFwiY2FuY2VsbGVkXCJcbiAgICAvKiBDQU5DRUxMRUQgKi9cbiAgXSlcbn0pLCBKdCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogeiQxLnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogeiQxLnN0cmluZygpLFxuICBjb25zZW50X2lkOiB6JDEuc3RyaW5nKClcbn0pLCBadCA9ICh0KSA9PiB7XG4gIGNvbnN0IHIgPSB7fTtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHQpLmZvckVhY2goKFtlLCBuXSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBpID0gTmUucGFyc2UoZSk7XG4gICAgICBBcnJheS5pc0FycmF5KG4pID8gcltpXSA9IG4gOiBBcnJheS5pc0FycmF5KG4uX2Vycm9ycykgJiYgKHJbaV0gPSBuLl9lcnJvcnMpO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSksIHI7XG59LCBHdCA9IHokMS5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHokMS5zdHJpbmcoKVxufSksIFd0ID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxufSksIFF0ID0ge1xuICB1c2Q6IFwidXNkXCIsXG4gIGJybDogXCJicmxcIlxufSwgdGUgPSBhc3luYyAodCkgPT4ge1xuICBmb3IgKGxldCBlID0gMDsgZSA8IDEwOyBlKyspXG4gICAgZ2UoKSB8fCBhd2FpdCB0cig1MDApO1xuICBpZiAoIWdlKCkpXG4gICAgdGhyb3cgY29uc29sZS5sb2coXCJTdHJpcGUgSlMgbm90IGZvdW5kLlwiKSwgbmV3IEVycm9yKFwiU3RyaXBlIEpTIG5vdCBmb3VuZC5cIik7XG4gIHJldHVybiBuZXcgU3RyaXBlKHQpO1xufSwgWHQgPSBhc3luYyAodCwgcikgPT4ge1xuICBjb25zdCBlID0gYXdhaXQgdGUodCk7XG4gIHJldHVybiB7XG4gICAgZWxlbWVudHM6IGUuZWxlbWVudHMociksXG4gICAgc3RyaXBlOiBlXG4gIH07XG59LCBlciA9IGFzeW5jICh0LCByLCBlLCBuLCBpKSA9PiB7XG4gIGNvbnN0IHMgPSBhd2FpdCB0ZSh0KSwgYSA9IFF0W2UudG9Mb3dlckNhc2UoKS50cmltKCldO1xuICByZXR1cm4gcy5wYXltZW50UmVxdWVzdCh7XG4gICAgLy8gVE9ETzogcmVwbGFjZSB0aGlzIHdpdGggc3RyaXBlIGFjY291bnQgY291bnRyeSBhcyBzb29uIGFzIHdlIHN1cHBvcnQgaXRcbiAgICBjb3VudHJ5OiBcIlVTXCIsXG4gICAgY3VycmVuY3k6IGEsXG4gICAgdG90YWw6IHtcbiAgICAgIGxhYmVsOiBcIlRvdGFsXCIsXG4gICAgICBhbW91bnQ6IHIsXG4gICAgICBwZW5kaW5nOiBuXG4gICAgfSxcbiAgICByZXF1ZXN0UGF5ZXJOYW1lOiAhMCxcbiAgICByZXF1ZXN0UGF5ZXJFbWFpbDogITAsXG4gICAgZGlzYWJsZVdhbGxldHM6IFtdXG4gIH0pO1xufSwgdHIgPSAodCkgPT4gbmV3IFByb21pc2UoKHIpID0+IHtcbiAgc2V0VGltZW91dChyLCB0KTtcbn0pLCBnZSA9ICgpID0+IFwiU3RyaXBlXCIgaW4gd2luZG93LCByciA9IGFzeW5jICh0KSA9PiBuZXcgUHJvbWlzZSgociwgZSkgPT4ge1xuICB0cnkge1xuICAgIHQub24oXCJwYXltZW50bWV0aG9kXCIsIGFzeW5jIChuKSA9PiB7XG4gICAgICByKG4pO1xuICAgIH0pLCB0Lm9uKFwiY2FuY2VsXCIsICgpID0+IHtcbiAgICAgIGUobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5XCIpKTtcbiAgICB9KTtcbiAgfSBjYXRjaCAobikge1xuICAgIGUobik7XG4gIH1cbn0pLCBuciA9IGFzeW5jICh0LCByKSA9PiB7XG4gIGlmICghdC5zdHJpcGVfcGsgfHwgIXQuY2xpZW50X3NlY3JldClcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgbmV4dCBhY3Rpb24gbWV0YWRhdGEgZm9ybWF0OiAke0pTT04uc3RyaW5naWZ5KHQpfWApO1xuICBjb25zdCBuID0gYXdhaXQgKGF3YWl0IHRlKHQuc3RyaXBlX3BrKSkuY29uZmlybUNhcmRTZXR1cCh0LmNsaWVudF9zZWNyZXQsIHtcbiAgICBwYXltZW50X21ldGhvZDogci5wYXltZW50TWV0aG9kLmlkXG4gIH0pO1xuICBpZiAobi5lcnJvcilcbiAgICB0aHJvdyByLmNvbXBsZXRlKFwiZmFpbFwiKSwgbmV3IEVycm9yKGBQYXltZW50IGZhaWxlZDogJHtuLmVycm9yLm1lc3NhZ2UgPz8gXCJ1bmtub3duXCJ9YCk7XG4gIHJldHVybiByLmNvbXBsZXRlKFwic3VjY2Vzc1wiKSwgbjtcbn0sIG9yID0gYXN5bmMgKHQpID0+IHtcbiAgdmFyIGksIHMsIGEsIGM7XG4gIGNvbnN0IGUgPSBhd2FpdCAoYXdhaXQgdGUodC5zdHJpcGVfcGspKS5jb25maXJtQ2FyZFNldHVwKHQuY2xpZW50X3NlY3JldCwge1xuICAgIHBheW1lbnRfbWV0aG9kOiB0LnN0cmlwZV9wbV9pZFxuICB9KSwgbiA9IChpID0gZS5zZXR1cEludGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuc3RhdHVzO1xuICBpZiAobiA9PT0gXCJzdWNjZWVkZWRcIilcbiAgICBjb25zb2xlLmxvZyhcIlszRFNdIENPTkZJUk1JTkcgUE06XCIsIHQuc3RyaXBlX3BtX2lkKSwgY29uc29sZS5sb2coXCJbM0RTXSBTZXR1cCBpbnRlbnQgY3JlYXRlZDpcIiwgZS5zZXR1cEludGVudCk7XG4gIGVsc2UgdGhyb3cgbiA9PT0gXCJjYW5jZWxlZFwiID8gbmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQsIHBsZWFzZSBjbGljayBTdWJtaXQgYWdhaW4gdG8gcGF5XCIpIDogbmV3IEVycm9yKFxuICAgIGAkeygocyA9IGUuZXJyb3IpID09IG51bGwgPyB2b2lkIDAgOiBzLm1lc3NhZ2UpID8/ICgoYyA9IChhID0gZS5zZXR1cEludGVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGEubGFzdF9zZXR1cF9lcnJvcikgPT0gbnVsbCA/IHZvaWQgMCA6IGMubWVzc2FnZSkgPz8gXCJQYXltZW50IGZhaWxlZCwgcGxlYXNlIGNsaWNrIHN1Ym1pdCBhZ2FpbiB0byBwYXkuXCJ9YFxuICApO1xufSwgaXIgPSAodCkgPT4gSlNPTi5zdHJpbmdpZnkodCksIGRlID0gKHQsIHIpID0+IEFycmF5LmZyb20odC5xdWVyeVNlbGVjdG9yQWxsKFwiW2RhdGEtb3BpZF1cIikgPz8gW10pLnJlZHVjZSgoaSwgcykgPT4ge1xuICBjb25zdCBhID0gcy5nZXRBdHRyaWJ1dGUoXCJkYXRhLW9waWRcIik7XG4gIHJldHVybiBhID8geyAuLi5pLCBbYV06IHMudmFsdWUgfSA6IGk7XG59LCB7fSksIHNyID0gKHQpID0+IHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcXQucGFyc2UodCk7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICB0aHJvdyBjb25zb2xlLmVycm9yKFwiRXJyb3IgcGFyc2luZyBldmVudCBwYXlsb2FkOlwiLCB0LCByKSwgcjtcbiAgfVxufSwgYXIgPSBhc3luYyAodCkgPT4ge1xuICBpZiAodHlwZW9mIHQgIT0gXCJvYmplY3RcIiB8fCAhdCkgcmV0dXJuICExO1xuICB0cnkge1xuICAgIGNvbnN0IHIgPSB7IHR5cGU6IFwicGluZ1wiIH0sIGUgPSBhd2FpdCB0LnNlbmQocik7XG4gICAgaWYgKGUgIT09ICEwKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCAndHJ1ZScgYWZ0ZXIgcGluZywgZ290ICR7SlNPTi5zdHJpbmdpZnkoZSl9YCk7XG4gICAgcmV0dXJuICEwO1xuICB9IGNhdGNoIChyKSB7XG4gICAgcmV0dXJuIGNvbnNvbGUuZXJyb3IoXCJJbnZhbGlkIENERSBjb25uZWN0aW9uIGNoZWNrOlwiLCByKSwgITE7XG4gIH1cbn0sIGNyID0gKHQsIHIpID0+ICEhdCAmJiByLCBnID0gKHQpID0+IHokMS5udWxsYWJsZSh0Lm9wdGlvbmFsKCkpO1xueiQxLnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBcIkNhbm5vdCBiZSBibGFua1wiIH0pO1xuY29uc3QgdXIgPSB6JDEub2JqZWN0KHtcbiAgY2RlX3Jlc3BvbnNlX3R5cGU6IHokMS5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKSxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG56JDEuZW51bShbXCJ1c2RcIiwgXCJicmxcIl0pO1xuY29uc3QgcWUgPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBhbW91bnRfYXRvbV9vZmY6IGcoeiQxLm51bWJlcigpKSxcbiAgcGVyY2VudF9vZmY6IGcoeiQxLm51bWJlcigpKSxcbiAgY3VycmVuY3k6IGcoeiQxLnN0cmluZygpKSxcbiAgZHVyYXRpb246IHokMS5zdHJpbmcoKSxcbiAgZHVyYXRpb25faW5fbW9udGhzOiBnKHokMS5udW1iZXIoKSlcbn0pLCB6ZSA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogZyh6JDEuc3RyaW5nKCkpLFxuICBwcmljZV9pZDogeiQxLnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiBnKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IGcoeiQxLm51bWJlcigpLmludCgpKSxcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKS5pbnQoKVxufSksIGxyID0geiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksIGRyID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgc2V0dGluZ3M6IGcobHIpXG59KSwgViA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogZyh6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogZyh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCBmciA9IHokMS5vYmplY3Qoe1xuICBxdWFudGl0eTogeiQxLm51bWJlcigpXG59KSwgcHIgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IGcoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogZyh6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBnKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogeiQxLmFycmF5KGZyKSxcbiAgdHJpYWxfc3RhcnQ6IGcoeiQxLnN0cmluZygpKSxcbiAgdHJpYWxfZW5kOiBnKHokMS5zdHJpbmcoKSlcbn0pLCBIZSA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpXG59KSwgaHIgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgYW1vdW50X2F0b21fY29uc2lkZXJpbmdfZGlzY291bnRfYXBwbGllZDogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShIZSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6JDEuc3RyaW5nKClcbn0pLCBtciA9IHokMS5vYmplY3Qoe1xuICBjb3Vwb246IHFlXG59KSwgeXIgPSB6JDEub2JqZWN0KHtcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRzOiB6JDEuYXJyYXkobXIpLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IGcoeiQxLnN0cmluZygpKSxcbiAgbGluZXM6IHokMS5hcnJheShociksXG4gIHJlbWFpbmluZ19hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0YXhfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkoSGUpXG59KSwgYmUgPSB6JDEub2JqZWN0KHtcbiAgY3JlYXRlZDogeiQxLmFycmF5KHByKSxcbiAgaW52b2ljZXM6IHokMS5hcnJheSh5cilcbn0pLCBZZSA9IHokMS5vYmplY3Qoe1xuICBwcmV2aWV3OiBiZSxcbiAgcHJldmlld19wb3N0X3RyaWFsOiBnKGJlKSxcbiAgY291cG9uczogeiQxLmFycmF5KHFlKVxufSksIHZlID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJvcGVuXCIpLFxuICB0b2tlbjogeiQxLnN0cmluZygpLFxuICBlbWFpbDogZyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoemUpLFxuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBicmFuZDogZHIsXG4gIHN1YnNfcHJldmlldzogZyhZZSksXG4gIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICBtZXRob2RzX2F2YWlsYWJsZTogeiQxLmFycmF5KFYpXG59KSwgQmUgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwibW9kZVwiLCBbXG4gIHokMS5vYmplY3Qoe1xuICAgIG1vZGU6IHokMS5saXRlcmFsKFwic2V0dXBcIiksXG4gICAgY3VycmVuY3k6IHokMS5udWxsYWJsZSh6JDEudW5kZWZpbmVkKCkpXG4gIH0pLmV4dGVuZCh2ZS5zaGFwZSksXG4gIHokMS5vYmplY3Qoe1xuICAgIG1vZGU6IHokMS5lbnVtKFtcInBheW1lbnRcIiwgXCJzdWJzY3JpcHRpb25cIl0pLFxuICAgIGN1cnJlbmN5OiB6JDEuc3RyaW5nKClcbiAgfSkuZXh0ZW5kKHZlLnNoYXBlKVxuXSksIF9yID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJjb21wbGV0ZVwiKVxufSksIGdyID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJleHBpcmVkXCIpXG59KTtcbnokMS51bmlvbihbQmUsIF9yLCBncl0pO1xueiQxLm9iamVjdCh7XG4gIGxvZ286IHokMS5zdHJpbmcoKSxcbiAgaWNvbjogeiQxLnN0cmluZygpLFxuICBwcmltYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKCksXG4gIHNlY29uZGFyeV9jb2xvcjogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IEtlID0geiQxLm9iamVjdCh7XG4gIGludm9pY2VfdXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbl9pZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcGF5bWVudF9pbnB1dDogeiQxLmFueSgpLFxuICAvLyBTaG91bGQgZm9sbG93IEFueVBheW1lbnRJbnB1dCBmcm9tIENERVxuICBjdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl96aXBfY29kZTogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl9jb3VudHJ5OiB6JDEuc3RyaW5nKCksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheSh6ZSksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGNhbmNlbF9hdF9lbmQ6IHokMS5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBWLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBiciA9IHokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZF9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICByZXR1cm5fdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgdnIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLmFycmF5KHZyKTtcbnokMS5vYmplY3Qoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfYWRkcmVzczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKSxcbiAgcGF5bWVudF9wcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogVixcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aGVpcl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgSmUgPSB6JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBmaWVsZHM6IHh0LFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IFZcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogJCxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IFZcbn0pO1xuY29uc3Qgd3IgPSB6JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBjY19wbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5yZWNvcmQoeiQxLmFueSgpKTtcbmNvbnN0IEVyID0gKHQpID0+IHQucmVkdWNlKChyLCBlKSA9PiByICsgZSwgMCk7XG5mdW5jdGlvbiBTcih0LCByKSB7XG4gIHZhciBlID0gT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuICBlID8gZSh0LCByKSA6IHQuX19wcm90b19fID0gcjtcbn1cbmZ1bmN0aW9uIENyKHQsIHIpIHtcbiAgciA9PT0gdm9pZCAwICYmIChyID0gdC5jb25zdHJ1Y3Rvcik7XG4gIHZhciBlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIGUgJiYgZSh0LCByKTtcbn1cbnZhciBrciA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgdmFyIHQgPSBmdW5jdGlvbihlLCBuKSB7XG4gICAgcmV0dXJuIHQgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbihpLCBzKSB7XG4gICAgICBpLl9fcHJvdG9fXyA9IHM7XG4gICAgfSB8fCBmdW5jdGlvbihpLCBzKSB7XG4gICAgICBmb3IgKHZhciBhIGluIHMpXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBhKSAmJiAoaVthXSA9IHNbYV0pO1xuICAgIH0sIHQoZSwgbik7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbihyLCBlKSB7XG4gICAgaWYgKHR5cGVvZiBlICE9IFwiZnVuY3Rpb25cIiAmJiBlICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhlKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgdChyLCBlKTtcbiAgICBmdW5jdGlvbiBuKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IHI7XG4gICAgfVxuICAgIHIucHJvdG90eXBlID0gZSA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoZSkgOiAobi5wcm90b3R5cGUgPSBlLnByb3RvdHlwZSwgbmV3IG4oKSk7XG4gIH07XG59KCksIFByID0gZnVuY3Rpb24odCkge1xuICBrcihyLCB0KTtcbiAgZnVuY3Rpb24gcihlLCBuKSB7XG4gICAgdmFyIGkgPSB0aGlzLmNvbnN0cnVjdG9yLCBzID0gdC5jYWxsKHRoaXMsIGUsIG4pIHx8IHRoaXM7XG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCBcIm5hbWVcIiwge1xuICAgICAgdmFsdWU6IGkubmFtZSxcbiAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgIH0pLCBTcihzLCBpLnByb3RvdHlwZSksIENyKHMpLCBzO1xuICB9XG4gIHJldHVybiByO1xufShFcnJvcik7XG5jbGFzcyBaZSBleHRlbmRzIFByIHtcbiAgY29uc3RydWN0b3Iocikge1xuICAgIGNvbnN0IGUgPSBgJHtyLm1lc3NhZ2V9YDtcbiAgICBzdXBlcihlKSwgdGhpcy5yZXNwb25zZSA9IHI7XG4gIH1cbiAgZ2V0IG9yaWdpbmFsRXJyb3JNZXNzYWdlKCkge1xuICAgIHJldHVybiB0aGlzLnJlc3BvbnNlLm1lc3NhZ2U7XG4gIH1cbn1cbmNvbnN0IEkgPSBhc3luYyAodCwgciwgZSkgPT4ge1xuICBjb25zdCBuID0gYXdhaXQgdC5zZW5kKHIpO1xuICBpZiAoT3IobikpXG4gICAgdGhyb3cgbmV3IFplKG4pO1xuICBpZiAoIUlyKG4sIGUpKSB7XG4gICAgY29uc3QgaSA9IGUuc2FmZVBhcnNlKG4pO1xuICAgIHRocm93IGkuc3VjY2VzcyA/IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGVcIikgOiAoY29uc29sZS5lcnJvcihcIk9KUyBxdWVyeUFwaSBnb3QgYSBzY2hlbWEgZXJyb3IuIEV4cGVjdGVkIHNjaGVtYTpcIiwgZSwgXCJBY3R1YWw6XCIsIG4pLCBpLmVycm9yKTtcbiAgfVxuICByZXR1cm4gbjtcbn0sIElyID0gKHQsIHIpID0+IHIuc2FmZVBhcnNlKHQpLnN1Y2Nlc3MsIE9yID0gKHQpID0+IHVyLnNhZmVQYXJzZSh0KS5zdWNjZXNzLCBBciA9IGFzeW5jICh0LCByKSA9PiBhd2FpdCBJKHQsIHsgdHlwZTogXCJnZXRfY2hlY2tvdXRfcHJldmlld1wiLCBwYXlsb2FkOiByIH0sIFllKSwgcSA9IGFzeW5jICh0KSA9PiBhd2FpdCBJKHQsIHsgdHlwZTogXCJnZXRfcHJlZmlsbFwiLCBwYXlsb2FkOiB7fSB9LCBCZSksIFJyID0gYXN5bmMgKHQsIHIpID0+IGF3YWl0IEkodCwgeyB0eXBlOiBcInYyX3N0YXJ0X3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiByIH0sIEplKSwgVHIgPSBhc3luYyAodCwgcikgPT4gYXdhaXQgSSh0LCB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9jY1wiLCBwYXlsb2FkOiByIH0sIHdyKSwganIgPSBhc3luYyAodCwgcikgPT4gYXdhaXQgSSh0LCB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wclwiLCBwYXlsb2FkOiByIH0sIEplKSwgZmUgPSBhc3luYyAodCwgcikgPT4gYXdhaXQgSSh0LCB7IHR5cGU6IFwiY29uZmlybV9wYXltZW50X2Zsb3dcIiwgcGF5bG9hZDogciB9LCB6dCksIE1yID0gYXN5bmMgKHQsIHIsIGUpID0+IHtcbiAgY29uc3QgbiA9IGF3YWl0IEFyKHQsIHtcbiAgICBzZWN1cmVfdG9rZW46IHIsXG4gICAgcHJvbW90aW9uX2NvZGU6IGVcbiAgfSksIGkgPSBuZXcgU2V0KG4ucHJldmlldy5pbnZvaWNlcy5tYXAoKGMpID0+IGMuY3VycmVuY3kpKTtcbiAgaWYgKGkuc2l6ZSAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIGN1cnJlbmN5LCBnb3QgJHtpLnNpemV9YCk7XG4gIGNvbnN0IHMgPSBpLnZhbHVlcygpLm5leHQoKS52YWx1ZSA/PyBcInVzZFwiLCBhID0gRXIobi5wcmV2aWV3Lmludm9pY2VzLm1hcCgoYykgPT4gYy5yZW1haW5pbmdfYW1vdW50X2F0b20pKTtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW5jeTogcyxcbiAgICBhbW91bnRBdG9tOiBhXG4gIH07XG59LCBHZSA9IGFzeW5jICh0LCByLCBlLCBuKSA9PiB7XG4gIGlmIChlKVxuICAgIHJldHVybiB7IGFtb3VudEF0b206IDAsIGN1cnJlbmN5OiBcInVzZFwiIH07XG4gIHtcbiAgICBuID0gbiB8fCB2b2lkIDA7XG4gICAgY29uc3QgaSA9IGF3YWl0IE1yKHQsIHIsIG4pO1xuICAgIHJldHVybiB7IGFtb3VudEF0b206IGkuYW1vdW50QXRvbSwgY3VycmVuY3k6IGkuY3VycmVuY3kgfTtcbiAgfVxufSwgTHIgPSBhc3luYyAodCwgcikgPT4ge1xuICBpZiAodC5zaXplID09PSAwKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIENERSBjb25uZWN0aW9ucyBmb3VuZFwiKTtcbiAgcmV0dXJuIGF3YWl0IFByb21pc2UuYWxsKFxuICAgIEFycmF5LmZyb20odC52YWx1ZXMoKSkubWFwKFxuICAgICAgKG4pID0+IEkobiwgeyB0eXBlOiBcInRva2VuaXplX2NhcmRcIiwgcGF5bG9hZDogciB9LCBCdClcbiAgICApXG4gICk7XG59LCB3ZSA9IGFzeW5jICh0LCByKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IEkodCwgeyB0eXBlOiBcImNoZWNrb3V0X2NhcmRfZWxlbWVudHNcIiwgcGF5bG9hZDogciB9LCBLZSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBjb25zb2xlLmVycm9yKFwiW2NkZS1jbGllbnRdIEVycm9yIGR1cmluZyBjaGVja291dENhcmRFbGVtZW50czpcIiwgZSwgSlNPTi5zdHJpbmdpZnkoZSkpLCBlO1xuICB9XG59LCBGciA9IGFzeW5jICh0LCByKSA9PiBhd2FpdCBJKHQsIHsgdHlwZTogXCJzZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkOiByIH0sIGJyKSwgV2UgPSBhc3luYyAodCwgcikgPT4gYXdhaXQgSSh0LCB7IHR5cGU6IFwiY2hlY2tvdXRcIiwgcGF5bG9hZDogciB9LCBLZSksIFFlID0gMWUzLCB4ciA9IGFzeW5jICh0LCByKSA9PiB7XG4gIGNvbnNvbGUubG9nKHIpO1xuICBjb25zdCBuID0gYXdhaXQgY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZTogdCxcbiAgICBkZWJ1ZzogITAsXG4gICAgdGltZW91dDogUWUsXG4gICAgY2hpbGRPcmlnaW46IFwiKlwiXG4gICAgLy8gVE9ETzogdXNlIHdpdGggcHJvcGVyIGNoaWxkT3JpZ2luXG4gIH0pLnByb21pc2U7XG4gIHJldHVybiAoYXdhaXQgSShuLCB7IHR5cGU6IFwicGluZy0zZHMtc3RhdHVzXCIgfSwgS3QpKS5zdGF0dXM7XG59O1xuZnVuY3Rpb24gRHIodCkge1xuICB0aHJvdyBuZXcgRXJyb3IoYFVuaGFuZGxlZCBjYXNlOiAke3R9YCk7XG59XG5jb25zdCBwZSA9ICh0KSA9PiBhc3luYyAocikgPT4ge1xuICB2YXIgZSwgbjtcbiAgdHJ5IHtcbiAgICAobiA9IChlID0gci5mb3JtQ2FsbGJhY2tzLmdldCkub25DaGVja291dFN0YXJ0ZWQpID09IG51bGwgfHwgbi5jYWxsKGUpO1xuICAgIGNvbnN0IGkgPSBhd2FpdCB0KHIpO1xuICAgIGlmIChpLm1vZGUgPT09IFwic2V0dXBcIilcbiAgICAgIHIuZm9ybUNhbGxiYWNrcy5nZXQub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzKGkucmVzdWx0LnBheW1lbnRfbWV0aG9kX2lkKTtcbiAgICBlbHNlIGlmIChpLm1vZGUgPT09IFwiY2hlY2tvdXRcIilcbiAgICAgIHIuZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dFN1Y2Nlc3MoXG4gICAgICAgIGkucmVzdWx0Lmludm9pY2VfdXJscyxcbiAgICAgICAgaS5yZXN1bHQuc3Vic2NyaXB0aW9uX2lkcyxcbiAgICAgICAgaS5yZXN1bHQuY3VzdG9tZXJfaWRcbiAgICAgICk7XG4gICAgZWxzZVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgbW9kZTogJHtpfWApO1xuICB9IGNhdGNoIChpKSB7XG4gICAgci5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoZWNrb3V0RXJyb3IoVShpKSk7XG4gIH1cbn0sIFhlID0gKHQpID0+IGFzeW5jIChyKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IHQocik7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zdCB7IGVycl9fOiBuIH0gPSBBKFwiaW5pdC1lcnJvci1jYXRjaGVyXCIpO1xuICAgIHJldHVybiBuKGUpLCB7IGlzQXZhaWxhYmxlOiAhMSwgcmVhc29uOiBVKGUpIH07XG4gIH1cbn0sIEEgPSAodCkgPT4ge1xuICBjb25zdCByID0gKC4uLm4pID0+IHtcbiAgICB3aW5kb3cuY29uc29sZS5sb2coYCR7WS5ncmVlbi5ib2xkKFwib2pzL1wiKX0ke1kuYm9sZC5ncmF5KGAke3R9YCl9XHRgLCAuLi5uKTtcbiAgfSwgZSA9ICguLi5uKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUuZXJyb3IoYCR7WS5yZWQuYm9sZChcIm9qcy9cIil9JHtZLmJvbGQuZ3JheShgJHt0fWApfVx0YCwgLi4ubik7XG4gIH07XG4gIHJldHVybiB7XG4gICAgbG9nOiByLFxuICAgIGVycjogZSxcbiAgICBsb2dfXzogcixcbiAgICBlcnJfXzogZVxuICB9O1xufSwgeyBsb2dfXzogZ28sIGVycl9fOiBOciB9ID0gQShcImNvbW1vblwiKSwgaGUgPSAodCkgPT4ge1xuICBpZiAodC5wYXltZW50X21ldGhvZHMubGVuZ3RoICE9PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgZXhhY3RseSBvbmUgcGF5bWVudCBtZXRob2QsIGdvdCAke3QucGF5bWVudF9tZXRob2RzLmxlbmd0aH1gKTtcbiAgcmV0dXJuIHsgcGF5bWVudF9tZXRob2RfaWQ6IHQucGF5bWVudF9tZXRob2RzWzBdLmlkIH07XG59LCBldCA9ICh0LCByKSA9PiB7XG4gIGNvbnN0IGUgPSB0LmZpbmQoKG4pID0+IHIuc2FmZVBhcnNlKG4pLnN1Y2Nlc3MpO1xuICBpZiAoIWUpXG4gICAgdGhyb3cgTnIoXCJObyBDUE1zIGZvdW5kIGZvciBtb2RlbC4gQWxsIG1vZGVsczpcIiwgdCksIG5ldyBFcnJvcihcIk5vIENQTXMgZm91bmQgZm9yIG1vZGVsXCIpO1xuICByZXR1cm4gci5wYXJzZShlKTtcbn0sIHsgbG9nX186IFVyLCBlcnJfXzogdHQgfSA9IEEoXCJjb21tb24tY2NcIiksIG1lID0gKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9ICQuc2FmZVBhcnNlKHQpO1xuICBpZiAoIWUuc3VjY2Vzcykge1xuICAgIGNvbnN0IG4gPSBlLmVycm9yLmZvcm1hdCgpLCBpID0gWnQobik7XG4gICAgZm9yIChjb25zdCBbcywgYV0gb2YgT2JqZWN0LmVudHJpZXMoaSkpXG4gICAgICByKHMsIGEsIHMpO1xuICAgIHRocm93IHR0KFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIiwgaSksIG5ldyBFcnJvcihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIpO1xuICB9XG4gIHJldHVybiBlLmRhdGE7XG59LCAkciA9ICh0LCByKSA9PiB7XG4gIGZvciAoY29uc3QgZSBvZiB0KVxuICAgIGlmIChlLnN1Y2Nlc3MgPT09ICExKVxuICAgICAgdGhyb3cgZS5lcnJvcnMuZm9yRWFjaCgobikgPT4ge1xuICAgICAgICBjb25zdCBpID0gVmUuc2FmZVBhcnNlKG4uZWxlbWVudFR5cGUpO1xuICAgICAgICBpZiAoIWkuc3VjY2VzcylcbiAgICAgICAgICB0dChgVW5rbm93biBmaWVsZCBuYW1lIGluIG9uVmFsaWRhdGlvbkVycm9yOiAke24uZWxlbWVudFR5cGV9LiBFcnJvciBvYmplY3Q6YCwgbik7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHMgPSBpLmRhdGE7XG4gICAgICAgICAgcihzLCBuLmVycm9ycyk7XG4gICAgICAgIH1cbiAgICAgIH0pLCBVcihgRXJyb3IgdG9rZW5pemluZyBjYXJkOiBnb3QgdmFsaWRhdGlvbiBlcnJvcnM6ICR7SlNPTi5zdHJpbmdpZnkoZS5lcnJvcnMpfWApLCBuZXcgRXJyb3IoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgd2hpbGUgdG9rZW5pemluZyBjYXJkXCIpO1xufSwgRWUgPSBcIm9qcy1zdHJpcGUtbGluay1idG5cIiwgeyBsb2dfXzogdiwgZXJyX186IFZyIH0gPSBBKFwic3RyaXBlLWxpbmtcIiksIHFyID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInN0cmlwZV9saW5rXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIHpyID0geiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSksIEhyID0gWGUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IHQsIGZvcm1DYWxsYmFja3M6IHIgfSkgPT4ge1xuICAgIGNvbnN0IGUgPSB0LmN1c3RvbUluaXRQYXJhbXMuc3RyaXBlTGluaztcbiAgICB2KFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgUFIuLi5cIik7XG4gICAgY29uc3QgbiA9IGV0KHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgcXIpO1xuICAgIHYoXCJTdGFydGluZyBzdHJpcGUgbGluayBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGkgPSB0LmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBxKGkpLCBhID0gcy5tb2RlID09PSBcInNldHVwXCI7XG4gICAgdihcIkNyZWF0aW5nIHN0cmlwZSBlbGVtZW50cy4uLlwiKTtcbiAgICBjb25zdCBjID0gYXdhaXQgR2UoaSwgcy50b2tlbiwgYSwgdm9pZCAwKSwgeyBlbGVtZW50czogbCwgc3RyaXBlOiB1IH0gPSBhd2FpdCBYdChuLm1ldGFkYXRhLnN0cmlwZV9waywge1xuICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgY3VycmVuY3k6IGMuY3VycmVuY3ksXG4gICAgICBzZXR1cF9mdXR1cmVfdXNhZ2U6IFwib2ZmX3Nlc3Npb25cIixcbiAgICAgIHBheW1lbnRNZXRob2RDcmVhdGlvbjogXCJtYW51YWxcIlxuICAgIH0pO1xuICAgIHYoXCJDcmVhdGluZyBleHByZXNzIGNoZWNrb3V0Li4uXCIpO1xuICAgIGNvbnN0IGYgPSBsLmNyZWF0ZShcImV4cHJlc3NDaGVja291dFwiLCB7XG4gICAgICBidXR0b25IZWlnaHQ6IGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuYnV0dG9uSGVpZ2h0LFxuICAgICAgcGF5bWVudE1ldGhvZHM6IHtcbiAgICAgICAgYW1hem9uUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGFwcGxlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIGdvb2dsZVBheTogXCJuZXZlclwiLFxuICAgICAgICBwYXlwYWw6IFwibmV2ZXJcIlxuICAgICAgfVxuICAgIH0pLCBoID0gKCkgPT4ge1xuICAgICAgZi5tb3VudChgIyR7RWV9YCk7XG4gICAgfSwgeSA9ICgpID0+IHtcbiAgICAgIGYudW5tb3VudCgpO1xuICAgIH07XG4gICAgcmV0dXJuIGUgIT0gbnVsbCAmJiBlLmRvTm90TW91bnRPbkluaXQgPyB2KFwiTk9UIG1vdW50aW5nIHN0cmlwZSBsaW5rIGJ1dHRvbiAoZG9Ob3RNb3VudE9uSW5pdCBpcyB0cnVlKVwiKSA6ICh2KFwiTW91bnRpbmcgc3RyaXBlIGxpbmsgYnV0dG9uLi4uXCIpLCBoKCkpLCBmLm9uKFwiY2xpY2tcIiwgYXN5bmMgKGQpID0+IHtcbiAgICAgIGlmICh2KFwiU3RyaXBlIExpbmsgYnV0dG9uIGNsaWNrZWRcIiksIGUgIT0gbnVsbCAmJiBlLm92ZXJyaWRlTGlua1N1Ym1pdCAmJiAhYXdhaXQgZS5vdmVycmlkZUxpbmtTdWJtaXQoKSkge1xuICAgICAgICB2KFwiU3RyaXBlIExpbmsgc3VibWl0IGFib3J0ZWQgYnkgb3ZlcnJpZGVMaW5rU3VibWl0XCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBkLnJlc29sdmUoKTtcbiAgICB9KSwgZi5vbihcImNvbmZpcm1cIiwgYXN5bmMgKGQpID0+IHtcbiAgICAgIHYoXCJTdHJpcGUgTGluayB3aW5kb3cgY29uZmlybWVkXCIsIGQpO1xuICAgICAgY29uc3QgcCA9IGF3YWl0IHUuY3JlYXRlUGF5bWVudE1ldGhvZCh7XG4gICAgICAgIGVsZW1lbnRzOiBsLFxuICAgICAgICBwYXJhbXM6IHtcbiAgICAgICAgICBiaWxsaW5nX2RldGFpbHM6IGQuYmlsbGluZ0RldGFpbHNcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBwLmVycm9yID8gKFZyKFwiZXJyb3JcIiwgcC5lcnJvciksIHIuZ2V0Lm9uQ2hlY2tvdXRFcnJvcihwLmVycm9yLm1lc3NhZ2UgPz8gXCJTdHJpcGUgTGluayB1bmtub3duIGVycm9yXCIpKSA6ICh2KFwicGF5bWVudE1ldGhvZFwiLCBwLnBheW1lbnRNZXRob2QpLCB4LnN0cmlwZUxpbmsucnVuKHtcbiAgICAgICAgY29udGV4dDogdCxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBkZSh0LmZvcm1EaXYpLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzOiByLFxuICAgICAgICBjdXN0b21QYXJhbXM6IHsgc3RyaXBlUE06IHAucGF5bWVudE1ldGhvZCB9LFxuICAgICAgICBpbml0UmVzdWx0OiB7IGlzQXZhaWxhYmxlOiAhMCB9XG4gICAgICB9KSk7XG4gICAgfSksIHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGNvbnRyb2xsZXI6IHtcbiAgICAgICAgbW91bnRCdXR0b246IGgsXG4gICAgICAgIGRpc21vdW50QnV0dG9uOiB5LFxuICAgICAgICB3YWl0Rm9yQnV0dG9uVG9Nb3VudDogYXN5bmMgKCkgPT4gYXdhaXQgS3IoRWUpXG4gICAgICB9XG4gICAgfTtcbiAgfVxuKSwgWXIgPSBwZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICBub25DZGVGb3JtSW5wdXRzOiBlLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBpXG4gIH0pID0+IHtcbiAgICB2KFwiUnVubmluZyBTdHJpcGUgUFIgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBzID0gdC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIHYoXCJNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uXCIpO1xuICAgIGNvbnN0IGEgPSBCcihlLCBpLnN0cmlwZVBNKSwgYyA9IG1lKGEsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICB2KFwiU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGwgPSBhd2FpdCBScihzLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiByLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHIsXG4gICAgICB0aGVpcl9leGlzdGluZ19wbV9pZDogaS5zdHJpcGVQTS5pZFxuICAgIH0pO1xuICAgIHYoXCJTdGFydCBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgbCk7XG4gICAgY29uc3QgZiA9IHpyLnBhcnNlKGwucmVxdWlyZWRfdXNlcl9hY3Rpb25zKVswXS5vdXJfZXhpc3RpbmdfcG1faWQsIGggPSBhd2FpdCBxKHMpO1xuICAgIGlmIChoLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgdihcIkRvaW5nIHBheW1lbnQgc2V0dXAuLi5cIik7XG4gICAgICBjb25zdCB5ID0gYXdhaXQgZmUocywge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGgudG9rZW4sXG4gICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBmXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBoZSh5KSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB2KFwiRG9pbmcgY2hlY2tvdXQuLi5cIik7XG4gICAgICBjb25zdCB5ID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGgudG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiByLnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBjW20uRU1BSUxdLFxuICAgICAgICBjdXN0b21lcl96aXBfY29kZTogY1ttLlpJUF9DT0RFXSxcbiAgICAgICAgY3VzdG9tZXJfY291bnRyeTogY1ttLkNPVU5UUlldLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogY1ttLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgbGluZV9pdGVtczogaC5saW5lX2l0ZW1zLFxuICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogaC5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgY2FuY2VsX2F0X2VuZDogITEsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiByXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IGF3YWl0IFdlKHMsIHkpIH07XG4gICAgfVxuICB9XG4pLCBCciA9ICh0LCByKSA9PiB7XG4gIHZhciBhLCBjLCBsLCB1LCBmO1xuICBjb25zdCBlID0geyAuLi50IH0sIFtuLCAuLi5pXSA9ICgoYyA9IChhID0gci5iaWxsaW5nX2RldGFpbHMubmFtZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGEudHJpbSgpKSA9PSBudWxsID8gdm9pZCAwIDogYy5zcGxpdCgvXFxzKy8pKSA/PyBbXSwgcyA9IGkuam9pbihcIiBcIikgfHwgdm9pZCAwO1xuICByZXR1cm4gZVttLkZJUlNUX05BTUVdID0gZVttLkZJUlNUX05BTUVdIHx8IG4gfHwgXCJfT1BfVU5LTk9XTlwiLCBlW20uTEFTVF9OQU1FXSA9IGVbbS5MQVNUX05BTUVdIHx8IHMgfHwgXCJfT1BfVU5LTk9XTlwiLCBlW20uRU1BSUxdID0gZVttLkVNQUlMXSB8fCAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAoKGwgPSByLmxpbmspID09IG51bGwgPyB2b2lkIDAgOiBsLmVtYWlsKSB8fCByLmJpbGxpbmdfZGV0YWlscy5lbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCIsIGVbbS5aSVBfQ09ERV0gPSBlW20uWklQX0NPREVdIHx8ICgodSA9IHIuYmlsbGluZ19kZXRhaWxzLmFkZHJlc3MpID09IG51bGwgPyB2b2lkIDAgOiB1LnBvc3RhbF9jb2RlKSB8fCBcIjAwMDAwXCIsIGVbbS5DT1VOVFJZXSA9IGVbbS5DT1VOVFJZXSB8fCAoKGYgPSByLmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzKSA9PSBudWxsID8gdm9pZCAwIDogZi5jb3VudHJ5KSB8fCBcIlVTXCIsIHYoXCJGaW5hbCBmb3JtIGlucHV0czpcIiwgZSksIGU7XG59LCBLciA9ICh0KSA9PiBuZXcgUHJvbWlzZSgocikgPT4ge1xuICBjb25zdCBlID0gKCkgPT4ge1xuICAgIGNvbnN0IG4gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0KTtcbiAgICBuID8gcihuKSA6IHJlcXVlc3RBbmltYXRpb25GcmFtZShlKTtcbiAgfTtcbiAgZSgpO1xufSksIEpyID0gXCJAa2V5ZnJhbWVzIGZhZGVJbnswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC45KX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEpfX0ub3ZlcmxheXtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt6LWluZGV4OjIxNDc0ODM2NDghaW1wb3J0YW50O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwMDA4MH0uY29udGFpbmVye21heC13aWR0aDo1MDBweDttYXgtaGVpZ2h0OjYwMHB4O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZC1jb2xvcjojZmZmO3Bvc2l0aW9uOnJlbGF0aXZlO2FuaW1hdGlvbjpmYWRlSW4gLjNzIGVhc2Utb3V0fS5mcmFtZXttYXgtd2lkdGg6NTAwcHg7bWF4LWhlaWdodDo2MDBweDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JvcmRlcjpub25lfS5jYW5jZWwtYnV0dG9ue3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOm5vbmU7Zm9udC1zaXplOjFyZW07Y29sb3I6I2ZmZjtjdXJzb3I6cG9pbnRlcjt0b3A6LTEuNXJlbTtwYWRkaW5nOjA7cmlnaHQ6MH1cIiwgWnIgPSAodCkgPT4ge1xuICBjb25zdCByID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICByLmlubmVySFRNTCA9IGBcbiAgICA8c3R5bGU+XG4gICAgICAke0pyfVxuICAgIDwvc3R5bGU+XG4gICAgPGRpdiBjbGFzcz1cIm92ZXJsYXlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idXR0b25cIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGlmcmFtZSBzcmM9XCIke3R9XCIgY2xhc3M9XCJmcmFtZVwiIGlkPVwidGhyZWUtZHMtaWZyYW1lXCIgdGl0bGU9XCIzRCBTZWN1cmUgdmVyaWZpY2F0aW9uXCIgYWxsb3c9XCJwYXltZW50XCI+PC9pZnJhbWU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYDtcbiAgY29uc3QgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksIG4gPSBlLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pO1xuICBuLmFwcGVuZENoaWxkKHIuY29udGVudC5jbG9uZU5vZGUoITApKTtcbiAgY29uc3QgaSA9IG4ucXVlcnlTZWxlY3RvcihcIiN0aHJlZS1kcy1pZnJhbWVcIiksIHMgPSBuLnF1ZXJ5U2VsZWN0b3IoXCIuY2FuY2VsLWJ1dHRvblwiKTtcbiAgcmV0dXJuIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZSksIHsgaG9zdDogZSwgaWZyYW1lOiBpLCBjYW5jZWxCdXR0b246IHMgfTtcbn07XG5mdW5jdGlvbiBHcih0LCByLCBlKSB7XG4gIGNvbnN0IG4gPSBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHMgPSBhd2FpdCB4cih0LCBlKTtcbiAgICAgIHMgJiYgKGNsZWFySW50ZXJ2YWwoaSksIHIocykpO1xuICAgIH0gY2F0Y2gge1xuICAgIH1cbiAgfTtcbiAgbigpO1xuICBjb25zdCBpID0gc2V0SW50ZXJ2YWwobiwgUWUpO1xuICByZXR1cm4gaTtcbn1cbmZ1bmN0aW9uIFdyKHtcbiAgZWxlbWVudHM6IHQsXG4gIHBvbGxpbmdJbnRlcnZhbDogcixcbiAgcmVzb2x2ZTogZVxufSkge1xuICBjb25zdCBuID0gKCkgPT4ge1xuICAgIGNsZWFySW50ZXJ2YWwociksIHQuaG9zdC5yZW1vdmUoKSwgZShHLkNBTkNFTExFRCk7XG4gIH07XG4gIHJldHVybiB0LmNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgbiksICgpID0+IHtcbiAgICB0LmNhbmNlbEJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgbik7XG4gIH07XG59XG5hc3luYyBmdW5jdGlvbiBRcih7XG4gIHVybDogdCxcbiAgYmFzZVVybDogclxufSkge1xuICBjb25zdCBlID0gWnIodCk7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgobikgPT4ge1xuICAgIGNvbnN0IGkgPSAoYykgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGUuaG9zdC5yZW1vdmUoKTtcbiAgICAgIH0sIDFlMyksIG4oYyksIGEgPT0gbnVsbCB8fCBhKCk7XG4gICAgfSwgcyA9IEdyKGUuaWZyYW1lLCBpLCBuZXcgVVJMKHIpLm9yaWdpbiksIGEgPSBXcih7XG4gICAgICBlbGVtZW50czogZSxcbiAgICAgIHBvbGxpbmdJbnRlcnZhbDogcyxcbiAgICAgIHJlc29sdmU6IG5cbiAgICB9KTtcbiAgfSk7XG59XG5jb25zdCB7IGxvZ19fOiBiLCBlcnJfXzogU2UgfSA9IEEoXCJjb21tb24tY2NcIiksIHsgbG9nX186IENlIH0gPSBBKFwic3RyaXBlLWNjXCIpLCBYciA9IHBlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGlcbiAgfSkgPT4ge1xuICAgIHZhciBmO1xuICAgIGIoXCLilJwgUnVubmluZyBjb21tb24gQ0MgZmxvdy4uLlwiLCB7IGNoZWNrb3V0UGF5bWVudE1ldGhvZDogciB9KTtcbiAgICBjb25zdCBzID0gdC5hbnlDZGVDb25uZWN0aW9uLCBhID0gYXdhaXQgcShzKTtcbiAgICBiKGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzIFtNb2RlOiAke2EubW9kZX1dYCk7XG4gICAgY29uc3QgYyA9IG1lKGUsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBiKGDilJwgVG9rZW5pemluZyBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke3QuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgIGNvbnN0IGwgPSBhd2FpdCBMcihpLmN1cnJlbnRDZGVDb25uZWN0aW9ucywge1xuICAgICAgc2Vzc2lvbl9pZDogdC5lbGVtZW50c1Nlc3Npb25JZFxuICAgIH0pO1xuICAgICRyKGwsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBjb25zdCB1ID0ge1xuICAgICAgc2Vzc2lvbl9pZDogdC5lbGVtZW50c1Nlc3Npb25JZCxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiByLFxuICAgICAgbm9uX2NkZV9mb3JtX2ZpZWxkczogY1xuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgIGlmIChhLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICBiKGDilJwgU2V0dGluZyB1cCBwYXltZW50IG1ldGhvZCBpbiBDREUgW1Rva2VuOiAke2EudG9rZW59XWApO1xuICAgICAgICBjb25zdCBoID0gYXdhaXQgRnIocywgdSk7XG4gICAgICAgIHJldHVybiBiKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7aC5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGggfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGIoYOKUnCBJbml0aWFsIGNoZWNrb3V0IGZsb3cuIENoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke3QuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgICBjb25zdCBoID0gYXdhaXQgd2UocywgdSk7XG4gICAgICAgIHJldHVybiBiKFwi4pWwIENoZWNrb3V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXCIpLCB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBoIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoaCkge1xuICAgICAgaWYgKGggaW5zdGFuY2VvZiBaZSAmJiBoLm9yaWdpbmFsRXJyb3JNZXNzYWdlID09PSBcIjNEU19SRVFVSVJFRFwiKSB7XG4gICAgICAgIGIoXCLilJwgQ2FyZCByZXF1aXJlcyAzRFMsIHN0YXJ0aW5nIG5vbi1sZWdhY3kgcGF5bWVudCBmbG93XCIpLCBiKFwiZXJyb3IucmVzcG9uc2UuaGVhZGVyc1wiLCBoLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICBjb25zdCB5ID0gKChmID0gaC5yZXNwb25zZS5oZWFkZXJzKSA9PSBudWxsID8gdm9pZCAwIDogZltcIm9wLXNob3VsZC11c2UtbmV3LWZsb3dcIl0pID09PSBcInRydWVcIiwgZCA9IGF3YWl0IFRyKHMsIHUpO1xuICAgICAgICBpZiAoYihg4pScIG9wLXNob3VsZC11c2UtbmV3LWZsb3c6ICR7eX1gKSwgYihcIuKUnCBQYXltZW50IGZsb3cgcmVzdWx0OlwiLCBkKSwgeSA/IGF3YWl0IHJuKGQsIHQuYmFzZVVybCkgOiBhd2FpdCBubihkKSwgYS5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgICBiKGDilJwgQ29uZmlybWluZyBwYXltZW50IGZsb3cgW2NjX3BtX2lkOiAke2QuY2NfcG1faWR9XWApO1xuICAgICAgICAgIGNvbnN0IHAgPSBhd2FpdCBmZShzLCB7XG4gICAgICAgICAgICBzZWN1cmVfdG9rZW46IGEudG9rZW4sXG4gICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogZC5jY19wbV9pZFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGIoXCLilJwgQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0IHJlY2VpdmVkIFJlc3VsdDpcIiwgcCk7XG4gICAgICAgICAgY29uc3QgXyA9IGhlKHApO1xuICAgICAgICAgIHJldHVybiBiKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7Xy5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IF8gfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBiKGDilJwgQ2hlY2tpbmcgb3V0IGFmdGVyIDNEUyBmbG93IFtGbG93OiAke3kgPyBcIm5ld1wiIDogXCJsZWdhY3lcIn1dYCk7XG4gICAgICAgICAgY29uc3QgcCA9IGF3YWl0IHdlKHMsIHtcbiAgICAgICAgICAgIC4uLnUsXG4gICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogZC5jY19wbV9pZCxcbiAgICAgICAgICAgIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6ICF5XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIGIoXCLilbAgQ2hlY2tvdXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cIiksIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IHAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgU2UoXCLilbAgRXJyb3IgY2hlY2tpbmcgb3V0IGNhcmQgaW5mbyBpbiBDREVcIiksIFNlKGgpLCBoO1xuICAgIH1cbiAgfVxuKSwgZW4gPSAodCkgPT4ge1xuICBjb25zdCByID0gdC5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoZSkgPT4gZS50eXBlID09PSBcInN0cmlwZV8zZHNcIik7XG4gIGlmICghcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzdHJpcGUgM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgcmV0dXJuIEd0LnBhcnNlKHIpO1xufSwgdG4gPSAodCkgPT4ge1xuICBjb25zdCByID0gdC5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoZSkgPT4gZS50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIik7XG4gIGlmICghcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb21tb24gM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgcmV0dXJuIEp0LnBhcnNlKHIpO1xufSwgcm4gPSBhc3luYyAodCwgcikgPT4ge1xuICBjb25zdCBlID0gdG4odCk7XG4gIGIoYOKUnCBVc2luZyBjb21tb24gM0RTIGZsb3cgW1VSTDogJHtlLnJlZGlyZWN0X3VybH1dYCk7XG4gIGNvbnN0IG4gPSBhd2FpdCBRcih7IHVybDogZS5yZWRpcmVjdF91cmwsIGJhc2VVcmw6IHIgfSk7XG4gIGlmIChiKGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtufV1gKSwgbiA9PT0gRy5DQU5DRUxMRUQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChuID09PSBHLkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG59LCBubiA9IGFzeW5jICh0KSA9PiB7XG4gIGNvbnN0IHIgPSBlbih0KTtcbiAgQ2UoYOKUnCBVc2luZyBzdHJpcGUgM0RTIGZsb3cgW0NsaWVudCBTZWNyZXQ6ICR7ci5jbGllbnRfc2VjcmV0LnN1YnN0cmluZygwLCA4KX0uLi5dYCksIGF3YWl0IG9yKHIpLCBDZShcIuKVsCBTdHJpcGUgM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKTtcbn0sIHsgbG9nX186IEMsIGVycl9fOiBvbiB9ID0gQShcInN0cmlwZS1wclwiKSwgc24gPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS51bmlvbihbeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksIHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKV0pLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIGFuID0gWGUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IHQgfSkgPT4ge1xuICAgIEMoXCJDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBQUi4uLlwiKTtcbiAgICBjb25zdCByID0gZXQodC5jaGVja291dFBheW1lbnRNZXRob2RzLCBzbik7XG4gICAgQyhcIkluaXRpYWxpemluZyBTdHJpcGUgUFIgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBlID0gdC5hbnlDZGVDb25uZWN0aW9uLCBuID0gYXdhaXQgcShlKSwgaSA9IG4ubW9kZSA9PT0gXCJzZXR1cFwiO1xuICAgIEMoXCJHZXR0aW5nIGluaXRpYWwgcHJldmlldyBhbW91bnRcIik7XG4gICAgY29uc3QgcyA9IGF3YWl0IEdlKGUsIG4udG9rZW4sIGksIHZvaWQgMCksIGEgPSBhd2FpdCBlcihcbiAgICAgIHIubWV0YWRhdGEuc3RyaXBlX3BrLFxuICAgICAgcy5hbW91bnRBdG9tLFxuICAgICAgcy5jdXJyZW5jeSxcbiAgICAgIGlcbiAgICApO1xuICAgIEMoXCJDaGVja2luZyBpZiBjYW4gbWFrZSBwYXltZW50XCIpO1xuICAgIGNvbnN0IGMgPSBhd2FpdCBhLmNhbk1ha2VQYXltZW50KCk7XG4gICAgcmV0dXJuIGMgPT09IG51bGwgPyAob24oXCJjYW5NYWtlUGF5bWVudCByZXR1cm5lZCBudWxsXCIpLCB7IGlzQXZhaWxhYmxlOiAhMSwgcmVhc29uOiBcImNhbk1ha2VQYXltZW50IHJldHVybmVkIG51bGxcIiB9KSA6IChDKFwiU3RyaXBlIFBSIGZsb3cgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LiBDYW4gbWFrZSBwYXltZW50XCIsIGMpLCB7XG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBwcjogYSxcbiAgICAgIGF2YWlsYWJsZVByb3ZpZGVyczoge1xuICAgICAgICBhcHBsZVBheTogYy5hcHBsZVBheSxcbiAgICAgICAgZ29vZ2xlUGF5OiBjLmdvb2dsZVBheVxuICAgICAgfVxuICAgIH0pO1xuICB9XG4pLCBjbiA9IHBlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGksXG4gICAgaW5pdFJlc3VsdDogc1xuICB9KSA9PiB7XG4gICAgaWYgKEMoXCJSdW5uaW5nIFN0cmlwZSBQUiBmbG93Li4uXCIpLCBpLnByb3ZpZGVyICE9PSByLnByb3ZpZGVyKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm92aWRlciBtaXNtYXRjaC4gRXhwZWN0ZWQgJHtpLnByb3ZpZGVyfSwgZ290ICR7ci5wcm92aWRlcn1gKTtcbiAgICBjb25zdCBhID0gdC5hbnlDZGVDb25uZWN0aW9uLCBjID0gcy5wcjtcbiAgICBpZiAoaSAhPSBudWxsICYmIGkub3ZlcnJpZGVQYXltZW50UmVxdWVzdCkge1xuICAgICAgY29uc3QgcCA9IGkub3ZlcnJpZGVQYXltZW50UmVxdWVzdDtcbiAgICAgIEMoXCJPdmVycmlkaW5nIFBSIGFtb3VudCB3aXRoXCIsIHApLCBsbihjLCBwLmFtb3VudCwgcC5wZW5kaW5nKTtcbiAgICB9XG4gICAgQyhcIlNob3dpbmcgUFIgZGlhbG9nLi4uXCIpLCBjLnNob3coKTtcbiAgICBjb25zdCBsID0gYXdhaXQgcnIoYyk7XG4gICAgQyhcIlN0cmlwZSBQTSBhZGRlZCBldmVudDpcIiwgbCksIEMoXCJNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uXCIpO1xuICAgIGNvbnN0IHUgPSB1bihlLCBsKSwgZiA9IG1lKHUsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBDKFwiUFIgZGlhbG9nIGZpbmlzaGVkLiBTdGFydGluZyBwYXltZW50IGZsb3cuLi5cIik7XG4gICAgY29uc3QgaCA9IGF3YWl0IGpyKGEsIHtcbiAgICAgIGZpZWxkczogZixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogclxuICAgIH0pLCB5ID0gZG4oaCk7XG4gICAgQyhcIkNvbmZpcm1pbmcgUFIgd2l0aCBTdHJpcGUuLi5cIiksIGF3YWl0IG5yKHksIGwpO1xuICAgIGNvbnN0IGQgPSBhd2FpdCBxKGEpO1xuICAgIGlmIChkLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgQyhcIkNvbmZpcm1pbmcgcGF5bWVudCBmbG93IGZvciBzZXR1cC4uLlwiKTtcbiAgICAgIGNvbnN0IHAgPSBhd2FpdCBmZShhLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogZC50b2tlblxuICAgICAgfSk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogaGUocCkgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgQyhcIlBlcmZvcm1pbmcgY2hlY2tvdXQuLi5cIik7XG4gICAgICBjb25zdCBwID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGQudG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiByLnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBmW20uRU1BSUxdLFxuICAgICAgICBjdXN0b21lcl96aXBfY29kZTogZlttLlpJUF9DT0RFXSxcbiAgICAgICAgY3VzdG9tZXJfY291bnRyeTogZlttLkNPVU5UUlldLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogZlttLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgbGluZV9pdGVtczogZC5saW5lX2l0ZW1zLFxuICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogZC5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgY2FuY2VsX2F0X2VuZDogITEsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiByXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IGF3YWl0IFdlKGEsIHApIH07XG4gICAgfVxuICB9XG4pLCB1biA9ICh0LCByKSA9PiB7XG4gIHZhciBhLCBjLCBsLCB1O1xuICBjb25zdCBlID0geyAuLi50IH0sIFtuLCAuLi5pXSA9ICgoYyA9IChhID0gci5wYXllck5hbWUpID09IG51bGwgPyB2b2lkIDAgOiBhLnRyaW0oKSkgPT0gbnVsbCA/IHZvaWQgMCA6IGMuc3BsaXQoL1xccysvKSkgPz8gW10sIHMgPSBpLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgcmV0dXJuIGVbbS5GSVJTVF9OQU1FXSA9IGVbbS5GSVJTVF9OQU1FXSB8fCBuIHx8IFwiX09QX1VOS05PV05cIiwgZVttLkxBU1RfTkFNRV0gPSBlW20uTEFTVF9OQU1FXSB8fCBzIHx8IFwiX09QX1VOS05PV05cIiwgZVttLkVNQUlMXSA9IGVbbS5FTUFJTF0gfHwgci5wYXllckVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIiwgZVttLlpJUF9DT0RFXSA9IGVbbS5aSVBfQ09ERV0gfHwgKChsID0gci5zaGlwcGluZ0FkZHJlc3MpID09IG51bGwgPyB2b2lkIDAgOiBsLnBvc3RhbENvZGUpIHx8IFwiMDAwMDBcIiwgZVttLkNPVU5UUlldID0gZVttLkNPVU5UUlldIHx8ICgodSA9IHIuc2hpcHBpbmdBZGRyZXNzKSA9PSBudWxsID8gdm9pZCAwIDogdS5jb3VudHJ5KSB8fCBcIlVTXCIsIEMoXCJGaW5hbCBmb3JtIGlucHV0czpcIiwgZSksIGU7XG59LCBsbiA9ICh0LCByLCBlKSA9PiB7XG4gIHQudXBkYXRlKHtcbiAgICB0b3RhbDoge1xuICAgICAgYW1vdW50OiByLmFtb3VudEF0b20sXG4gICAgICBsYWJlbDogXCJUb3RhbFwiLFxuICAgICAgcGVuZGluZzogZVxuICAgIH0sXG4gICAgY3VycmVuY3k6IHIuY3VycmVuY3lcbiAgfSk7XG59LCBkbiA9ICh0KSA9PiB7XG4gIGlmICh0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGggIT09IDEpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFcnJvciBvY2N1cnJlZC5cbkRldGFpbHM6IGdvdCAke3QucmVxdWlyZWRfdXNlcl9hY3Rpb25zLmxlbmd0aH0gcmVxdWlyZWQgdXNlciBhY3Rpb25zYCk7XG4gIHJldHVybiBXdC5wYXJzZSh0LnJlcXVpcmVkX3VzZXJfYWN0aW9uc1swXSk7XG59LCBydCA9ICh0LCByLCBlKSA9PiB7XG4gIGNvbnN0IG4gPSB0LmZpbHRlcigoaSkgPT4gaS5wcm92aWRlciA9PT0gcik7XG4gIGlmIChuLmxlbmd0aCA9PT0gMClcbiAgICB0aHJvdyBjb25zb2xlLmVycm9yKFwiQ1BNcyBsaXN0XCIsIHQpLCBuZXcgRXJyb3IoYE5vIENQTXMgZm91bmQgd2l0aCBwcm92aWRlciAnJHtyfScgYW5kIHByb2Nlc3NvciAnJHtlfSdgKTtcbiAgaWYgKG4ubGVuZ3RoICE9PSAxKVxuICAgIHRocm93IGNvbnNvbGUuZXJyb3IoXCJDUE1zIGxpc3RcIiwgdCksIG5ldyBFcnJvcihgTW9yZSB0aGFuIG9uZSBDUE0gZm91bmQgd2l0aCBwcm92aWRlciAnJHtyfScgYW5kIHByb2Nlc3NvciAnJHtlfSdgKTtcbiAgcmV0dXJuIG5bMF07XG59LCB4ID0ge1xuICAvLyDinIsgTm90ZTogRm9yIGZsb3dzIHRoYXQgcmVxdWlyZSBpbml0aWFsaXphdGlvbiwgcGxlYXNlIGFkZCB0aGVtIHRvIGBpbml0LWZsb3dzLnRzYFxuICAvLyBDb21tb25cbiAgY29tbW9uQ0M6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IFhyXG4gIH0sXG4gIC8vIFN0cmlwZVxuICBzdHJpcGVQUjoge1xuICAgIGluaXQ6IGFuLFxuICAgIHJ1bjogY25cbiAgfSxcbiAgc3RyaXBlTGluazoge1xuICAgIGluaXQ6IEhyLFxuICAgIHJ1bjogWXJcbiAgfVxuICAvLyDwn5GJIEFkZCBtb3JlIGZsb3dzIGhlcmVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbn07XG52YXIgY2UgPSBmdW5jdGlvbih0LCByKSB7XG4gIHJldHVybiBjZSA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uKGUsIG4pIHtcbiAgICBlLl9fcHJvdG9fXyA9IG47XG4gIH0gfHwgZnVuY3Rpb24oZSwgbikge1xuICAgIGZvciAodmFyIGkgaW4gbikgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sIGkpICYmIChlW2ldID0gbltpXSk7XG4gIH0sIGNlKHQsIHIpO1xufTtcbmZ1bmN0aW9uIE0odCwgcikge1xuICBpZiAodHlwZW9mIHIgIT0gXCJmdW5jdGlvblwiICYmIHIgIT09IG51bGwpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcocikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuICBjZSh0LCByKTtcbiAgZnVuY3Rpb24gZSgpIHtcbiAgICB0aGlzLmNvbnN0cnVjdG9yID0gdDtcbiAgfVxuICB0LnByb3RvdHlwZSA9IHIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKHIpIDogKGUucHJvdG90eXBlID0gci5wcm90b3R5cGUsIG5ldyBlKCkpO1xufVxuZnVuY3Rpb24gZm4odCwgciwgZSwgbikge1xuICBmdW5jdGlvbiBpKHMpIHtcbiAgICByZXR1cm4gcyBpbnN0YW5jZW9mIGUgPyBzIDogbmV3IGUoZnVuY3Rpb24oYSkge1xuICAgICAgYShzKTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gbmV3IChlIHx8IChlID0gUHJvbWlzZSkpKGZ1bmN0aW9uKHMsIGEpIHtcbiAgICBmdW5jdGlvbiBjKGYpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHUobi5uZXh0KGYpKTtcbiAgICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgICAgYShoKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gbChmKSB7XG4gICAgICB0cnkge1xuICAgICAgICB1KG4udGhyb3coZikpO1xuICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICBhKGgpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB1KGYpIHtcbiAgICAgIGYuZG9uZSA/IHMoZi52YWx1ZSkgOiBpKGYudmFsdWUpLnRoZW4oYywgbCk7XG4gICAgfVxuICAgIHUoKG4gPSBuLmFwcGx5KHQsIFtdKSkubmV4dCgpKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBudCh0LCByKSB7XG4gIHZhciBlID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7XG4gICAgaWYgKHNbMF0gJiAxKSB0aHJvdyBzWzFdO1xuICAgIHJldHVybiBzWzFdO1xuICB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBuLCBpLCBzLCBhID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEl0ZXJhdG9yID09IFwiZnVuY3Rpb25cIiA/IEl0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpO1xuICByZXR1cm4gYS5uZXh0ID0gYygwKSwgYS50aHJvdyA9IGMoMSksIGEucmV0dXJuID0gYygyKSwgdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgKGFbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9KSwgYTtcbiAgZnVuY3Rpb24gYyh1KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKGYpIHtcbiAgICAgIHJldHVybiBsKFt1LCBmXSk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBsKHUpIHtcbiAgICBpZiAobikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XG4gICAgZm9yICg7IGEgJiYgKGEgPSAwLCB1WzBdICYmIChlID0gMCkpLCBlOyApIHRyeSB7XG4gICAgICBpZiAobiA9IDEsIGkgJiYgKHMgPSB1WzBdICYgMiA/IGkucmV0dXJuIDogdVswXSA/IGkudGhyb3cgfHwgKChzID0gaS5yZXR1cm4pICYmIHMuY2FsbChpKSwgMCkgOiBpLm5leHQpICYmICEocyA9IHMuY2FsbChpLCB1WzFdKSkuZG9uZSkgcmV0dXJuIHM7XG4gICAgICBzd2l0Y2ggKGkgPSAwLCBzICYmICh1ID0gW3VbMF0gJiAyLCBzLnZhbHVlXSksIHVbMF0pIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcyA9IHU7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gZS5sYWJlbCsrLCB7IHZhbHVlOiB1WzFdLCBkb25lOiAhMSB9O1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgZS5sYWJlbCsrLCBpID0gdVsxXSwgdSA9IFswXTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIHUgPSBlLm9wcy5wb3AoKSwgZS50cnlzLnBvcCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGlmIChzID0gZS50cnlzLCAhKHMgPSBzLmxlbmd0aCA+IDAgJiYgc1tzLmxlbmd0aCAtIDFdKSAmJiAodVswXSA9PT0gNiB8fCB1WzBdID09PSAyKSkge1xuICAgICAgICAgICAgZSA9IDA7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHVbMF0gPT09IDMgJiYgKCFzIHx8IHVbMV0gPiBzWzBdICYmIHVbMV0gPCBzWzNdKSkge1xuICAgICAgICAgICAgZS5sYWJlbCA9IHVbMV07XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHVbMF0gPT09IDYgJiYgZS5sYWJlbCA8IHNbMV0pIHtcbiAgICAgICAgICAgIGUubGFiZWwgPSBzWzFdLCBzID0gdTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocyAmJiBlLmxhYmVsIDwgc1syXSkge1xuICAgICAgICAgICAgZS5sYWJlbCA9IHNbMl0sIGUub3BzLnB1c2godSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgc1syXSAmJiBlLm9wcy5wb3AoKSwgZS50cnlzLnBvcCgpO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgdSA9IHIuY2FsbCh0LCBlKTtcbiAgICB9IGNhdGNoIChmKSB7XG4gICAgICB1ID0gWzYsIGZdLCBpID0gMDtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgbiA9IHMgPSAwO1xuICAgIH1cbiAgICBpZiAodVswXSAmIDUpIHRocm93IHVbMV07XG4gICAgcmV0dXJuIHsgdmFsdWU6IHVbMF0gPyB1WzFdIDogdm9pZCAwLCBkb25lOiAhMCB9O1xuICB9XG59XG5mdW5jdGlvbiBEKHQpIHtcbiAgdmFyIHIgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIGUgPSByICYmIHRbcl0sIG4gPSAwO1xuICBpZiAoZSkgcmV0dXJuIGUuY2FsbCh0KTtcbiAgaWYgKHQgJiYgdHlwZW9mIHQubGVuZ3RoID09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdCAmJiBuID49IHQubGVuZ3RoICYmICh0ID0gdm9pZCAwKSwgeyB2YWx1ZTogdCAmJiB0W24rK10sIGRvbmU6ICF0IH07XG4gICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHIgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59XG5mdW5jdGlvbiBXKHQsIHIpIHtcbiAgdmFyIGUgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiB0W1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghZSkgcmV0dXJuIHQ7XG4gIHZhciBuID0gZS5jYWxsKHQpLCBpLCBzID0gW10sIGE7XG4gIHRyeSB7XG4gICAgZm9yICg7IChyID09PSB2b2lkIDAgfHwgci0tID4gMCkgJiYgIShpID0gbi5uZXh0KCkpLmRvbmU7ICkgcy5wdXNoKGkudmFsdWUpO1xuICB9IGNhdGNoIChjKSB7XG4gICAgYSA9IHsgZXJyb3I6IGMgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgaSAmJiAhaS5kb25lICYmIChlID0gbi5yZXR1cm4pICYmIGUuY2FsbChuKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKGEpIHRocm93IGEuZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBzO1xufVxuZnVuY3Rpb24gUSh0LCByLCBlKSB7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBuID0gMCwgaSA9IHIubGVuZ3RoLCBzOyBuIDwgaTsgbisrKVxuICAgIChzIHx8ICEobiBpbiByKSkgJiYgKHMgfHwgKHMgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChyLCAwLCBuKSksIHNbbl0gPSByW25dKTtcbiAgcmV0dXJuIHQuY29uY2F0KHMgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwocikpO1xufVxuZnVuY3Rpb24gRih0KSB7XG4gIHJldHVybiB0aGlzIGluc3RhbmNlb2YgRiA/ICh0aGlzLnYgPSB0LCB0aGlzKSA6IG5ldyBGKHQpO1xufVxuZnVuY3Rpb24gcG4odCwgciwgZSkge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgbiA9IGUuYXBwbHkodCwgciB8fCBbXSksIGksIHMgPSBbXTtcbiAgcmV0dXJuIGkgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgQXN5bmNJdGVyYXRvciA9PSBcImZ1bmN0aW9uXCIgPyBBc3luY0l0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpLCBjKFwibmV4dFwiKSwgYyhcInRocm93XCIpLCBjKFwicmV0dXJuXCIsIGEpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCBpO1xuICBmdW5jdGlvbiBhKGQpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ocCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShwKS50aGVuKGQsIGgpO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gYyhkLCBwKSB7XG4gICAgbltkXSAmJiAoaVtkXSA9IGZ1bmN0aW9uKF8pIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihOLCBIKSB7XG4gICAgICAgIHMucHVzaChbZCwgXywgTiwgSF0pID4gMSB8fCBsKGQsIF8pO1xuICAgICAgfSk7XG4gICAgfSwgcCAmJiAoaVtkXSA9IHAoaVtkXSkpKTtcbiAgfVxuICBmdW5jdGlvbiBsKGQsIHApIHtcbiAgICB0cnkge1xuICAgICAgdShuW2RdKHApKTtcbiAgICB9IGNhdGNoIChfKSB7XG4gICAgICB5KHNbMF1bM10sIF8pO1xuICAgIH1cbiAgfVxuICBmdW5jdGlvbiB1KGQpIHtcbiAgICBkLnZhbHVlIGluc3RhbmNlb2YgRiA/IFByb21pc2UucmVzb2x2ZShkLnZhbHVlLnYpLnRoZW4oZiwgaCkgOiB5KHNbMF1bMl0sIGQpO1xuICB9XG4gIGZ1bmN0aW9uIGYoZCkge1xuICAgIGwoXCJuZXh0XCIsIGQpO1xuICB9XG4gIGZ1bmN0aW9uIGgoZCkge1xuICAgIGwoXCJ0aHJvd1wiLCBkKTtcbiAgfVxuICBmdW5jdGlvbiB5KGQsIHApIHtcbiAgICBkKHApLCBzLnNoaWZ0KCksIHMubGVuZ3RoICYmIGwoc1swXVswXSwgc1swXVsxXSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGhuKHQpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIHIgPSB0W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgZTtcbiAgcmV0dXJuIHIgPyByLmNhbGwodCkgOiAodCA9IHR5cGVvZiBEID09IFwiZnVuY3Rpb25cIiA/IEQodCkgOiB0W1N5bWJvbC5pdGVyYXRvcl0oKSwgZSA9IHt9LCBuKFwibmV4dFwiKSwgbihcInRocm93XCIpLCBuKFwicmV0dXJuXCIpLCBlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCBlKTtcbiAgZnVuY3Rpb24gbihzKSB7XG4gICAgZVtzXSA9IHRbc10gJiYgZnVuY3Rpb24oYSkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGMsIGwpIHtcbiAgICAgICAgYSA9IHRbc10oYSksIGkoYywgbCwgYS5kb25lLCBhLnZhbHVlKTtcbiAgICAgIH0pO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gaShzLCBhLCBjLCBsKSB7XG4gICAgUHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4oZnVuY3Rpb24odSkge1xuICAgICAgcyh7IHZhbHVlOiB1LCBkb25lOiBjIH0pO1xuICAgIH0sIGEpO1xuICB9XG59XG5mdW5jdGlvbiB3KHQpIHtcbiAgcmV0dXJuIHR5cGVvZiB0ID09IFwiZnVuY3Rpb25cIjtcbn1cbmZ1bmN0aW9uIHJlKHQpIHtcbiAgdmFyIHIgPSBmdW5jdGlvbihuKSB7XG4gICAgRXJyb3IuY2FsbChuKSwgbi5zdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrO1xuICB9LCBlID0gdChyKTtcbiAgcmV0dXJuIGUucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShFcnJvci5wcm90b3R5cGUpLCBlLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGUsIGU7XG59XG52YXIgb2UgPSByZShmdW5jdGlvbih0KSB7XG4gIHJldHVybiBmdW5jdGlvbihlKSB7XG4gICAgdCh0aGlzKSwgdGhpcy5tZXNzYWdlID0gZSA/IGUubGVuZ3RoICsgYCBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxuYCArIGUubWFwKGZ1bmN0aW9uKG4sIGkpIHtcbiAgICAgIHJldHVybiBpICsgMSArIFwiKSBcIiArIG4udG9TdHJpbmcoKTtcbiAgICB9KS5qb2luKGBcbiAgYCkgOiBcIlwiLCB0aGlzLm5hbWUgPSBcIlVuc3Vic2NyaXB0aW9uRXJyb3JcIiwgdGhpcy5lcnJvcnMgPSBlO1xuICB9O1xufSk7XG5mdW5jdGlvbiBYKHQsIHIpIHtcbiAgaWYgKHQpIHtcbiAgICB2YXIgZSA9IHQuaW5kZXhPZihyKTtcbiAgICAwIDw9IGUgJiYgdC5zcGxpY2UoZSwgMSk7XG4gIH1cbn1cbnZhciB6ID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHQocikge1xuICAgIHRoaXMuaW5pdGlhbFRlYXJkb3duID0gciwgdGhpcy5jbG9zZWQgPSAhMSwgdGhpcy5fcGFyZW50YWdlID0gbnVsbCwgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHIsIGUsIG4sIGksIHM7XG4gICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgdGhpcy5jbG9zZWQgPSAhMDtcbiAgICAgIHZhciBhID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgaWYgKGEpXG4gICAgICAgIGlmICh0aGlzLl9wYXJlbnRhZ2UgPSBudWxsLCBBcnJheS5pc0FycmF5KGEpKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciBjID0gRChhKSwgbCA9IGMubmV4dCgpOyAhbC5kb25lOyBsID0gYy5uZXh0KCkpIHtcbiAgICAgICAgICAgICAgdmFyIHUgPSBsLnZhbHVlO1xuICAgICAgICAgICAgICB1LnJlbW92ZSh0aGlzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgICByID0geyBlcnJvcjogXyB9O1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBsICYmICFsLmRvbmUgJiYgKGUgPSBjLnJldHVybikgJiYgZS5jYWxsKGMpO1xuICAgICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgaWYgKHIpIHRocm93IHIuZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgYS5yZW1vdmUodGhpcyk7XG4gICAgICB2YXIgZiA9IHRoaXMuaW5pdGlhbFRlYXJkb3duO1xuICAgICAgaWYgKHcoZikpXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZigpO1xuICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgcyA9IF8gaW5zdGFuY2VvZiBvZSA/IF8uZXJyb3JzIDogW19dO1xuICAgICAgICB9XG4gICAgICB2YXIgaCA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgICBpZiAoaCkge1xuICAgICAgICB0aGlzLl9maW5hbGl6ZXJzID0gbnVsbDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBmb3IgKHZhciB5ID0gRChoKSwgZCA9IHkubmV4dCgpOyAhZC5kb25lOyBkID0geS5uZXh0KCkpIHtcbiAgICAgICAgICAgIHZhciBwID0gZC52YWx1ZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGtlKHApO1xuICAgICAgICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAgICAgICBzID0gcyA/PyBbXSwgXyBpbnN0YW5jZW9mIG9lID8gcyA9IFEoUShbXSwgVyhzKSksIFcoXy5lcnJvcnMpKSA6IHMucHVzaChfKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgICBuID0geyBlcnJvcjogXyB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBkICYmICFkLmRvbmUgJiYgKGkgPSB5LnJldHVybikgJiYgaS5jYWxsKHkpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAobikgdGhyb3cgbi5lcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzKVxuICAgICAgICB0aHJvdyBuZXcgb2Uocyk7XG4gICAgfVxuICB9LCB0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGU7XG4gICAgaWYgKHIgJiYgciAhPT0gdGhpcylcbiAgICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgICAga2Uocik7XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKHIgaW5zdGFuY2VvZiB0KSB7XG4gICAgICAgICAgaWYgKHIuY2xvc2VkIHx8IHIuX2hhc1BhcmVudCh0aGlzKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICByLl9hZGRQYXJlbnQodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgKHRoaXMuX2ZpbmFsaXplcnMgPSAoZSA9IHRoaXMuX2ZpbmFsaXplcnMpICE9PSBudWxsICYmIGUgIT09IHZvaWQgMCA/IGUgOiBbXSkucHVzaChyKTtcbiAgICAgIH1cbiAgfSwgdC5wcm90b3R5cGUuX2hhc1BhcmVudCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICByZXR1cm4gZSA9PT0gciB8fCBBcnJheS5pc0FycmF5KGUpICYmIGUuaW5jbHVkZXMocik7XG4gIH0sIHQucHJvdG90eXBlLl9hZGRQYXJlbnQgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgdGhpcy5fcGFyZW50YWdlID0gQXJyYXkuaXNBcnJheShlKSA/IChlLnB1c2gociksIGUpIDogZSA/IFtlLCByXSA6IHI7XG4gIH0sIHQucHJvdG90eXBlLl9yZW1vdmVQYXJlbnQgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgZSA9PT0gciA/IHRoaXMuX3BhcmVudGFnZSA9IG51bGwgOiBBcnJheS5pc0FycmF5KGUpICYmIFgoZSwgcik7XG4gIH0sIHQucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRoaXMuX2ZpbmFsaXplcnM7XG4gICAgZSAmJiBYKGUsIHIpLCByIGluc3RhbmNlb2YgdCAmJiByLl9yZW1vdmVQYXJlbnQodGhpcyk7XG4gIH0sIHQuRU1QVFkgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgciA9IG5ldyB0KCk7XG4gICAgcmV0dXJuIHIuY2xvc2VkID0gITAsIHI7XG4gIH0oKSwgdDtcbn0oKSwgb3QgPSB6LkVNUFRZO1xuZnVuY3Rpb24gaXQodCkge1xuICByZXR1cm4gdCBpbnN0YW5jZW9mIHogfHwgdCAmJiBcImNsb3NlZFwiIGluIHQgJiYgdyh0LnJlbW92ZSkgJiYgdyh0LmFkZCkgJiYgdyh0LnVuc3Vic2NyaWJlKTtcbn1cbmZ1bmN0aW9uIGtlKHQpIHtcbiAgdyh0KSA/IHQoKSA6IHQudW5zdWJzY3JpYmUoKTtcbn1cbnZhciBzdCA9IHtcbiAgb25VbmhhbmRsZWRFcnJvcjogbnVsbCxcbiAgb25TdG9wcGVkTm90aWZpY2F0aW9uOiBudWxsLFxuICBQcm9taXNlOiB2b2lkIDAsXG4gIHVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmc6ICExLFxuICB1c2VEZXByZWNhdGVkTmV4dENvbnRleHQ6ICExXG59LCBhdCA9IHtcbiAgc2V0VGltZW91dDogZnVuY3Rpb24odCwgcikge1xuICAgIGZvciAodmFyIGUgPSBbXSwgbiA9IDI7IG4gPCBhcmd1bWVudHMubGVuZ3RoOyBuKyspXG4gICAgICBlW24gLSAyXSA9IGFyZ3VtZW50c1tuXTtcbiAgICByZXR1cm4gc2V0VGltZW91dC5hcHBseSh2b2lkIDAsIFEoW3QsIHJdLCBXKGUpKSk7XG4gIH0sXG4gIGNsZWFyVGltZW91dDogZnVuY3Rpb24odCkge1xuICAgIHJldHVybiAoY2xlYXJUaW1lb3V0KSh0KTtcbiAgfSxcbiAgZGVsZWdhdGU6IHZvaWQgMFxufTtcbmZ1bmN0aW9uIGN0KHQpIHtcbiAgYXQuc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICB0aHJvdyB0O1xuICB9KTtcbn1cbmZ1bmN0aW9uIFBlKCkge1xufVxuZnVuY3Rpb24gSyh0KSB7XG4gIHQoKTtcbn1cbnZhciB5ZSA9IGZ1bmN0aW9uKHQpIHtcbiAgTShyLCB0KTtcbiAgZnVuY3Rpb24gcihlKSB7XG4gICAgdmFyIG4gPSB0LmNhbGwodGhpcykgfHwgdGhpcztcbiAgICByZXR1cm4gbi5pc1N0b3BwZWQgPSAhMSwgZSA/IChuLmRlc3RpbmF0aW9uID0gZSwgaXQoZSkgJiYgZS5hZGQobikpIDogbi5kZXN0aW5hdGlvbiA9IGduLCBuO1xuICB9XG4gIHJldHVybiByLmNyZWF0ZSA9IGZ1bmN0aW9uKGUsIG4sIGkpIHtcbiAgICByZXR1cm4gbmV3IHVlKGUsIG4sIGkpO1xuICB9LCByLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24oZSkge1xuICAgIHRoaXMuaXNTdG9wcGVkIHx8IHRoaXMuX25leHQoZSk7XG4gIH0sIHIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24oZSkge1xuICAgIHRoaXMuaXNTdG9wcGVkIHx8ICh0aGlzLmlzU3RvcHBlZCA9ICEwLCB0aGlzLl9lcnJvcihlKSk7XG4gIH0sIHIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIHRoaXMuX2NvbXBsZXRlKCkpO1xuICB9LCByLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuY2xvc2VkIHx8ICh0aGlzLmlzU3RvcHBlZCA9ICEwLCB0LnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpLCB0aGlzLmRlc3RpbmF0aW9uID0gbnVsbCk7XG4gIH0sIHIucHJvdG90eXBlLl9uZXh0ID0gZnVuY3Rpb24oZSkge1xuICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dChlKTtcbiAgfSwgci5wcm90b3R5cGUuX2Vycm9yID0gZnVuY3Rpb24oZSkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmRlc3RpbmF0aW9uLmVycm9yKGUpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9LCByLnByb3RvdHlwZS5fY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5kZXN0aW5hdGlvbi5jb21wbGV0ZSgpO1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9LCByO1xufSh6KSwgbW4gPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZDtcbmZ1bmN0aW9uIGllKHQsIHIpIHtcbiAgcmV0dXJuIG1uLmNhbGwodCwgcik7XG59XG52YXIgeW4gPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gdChyKSB7XG4gICAgdGhpcy5wYXJ0aWFsT2JzZXJ2ZXIgPSByO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKGUubmV4dClcbiAgICAgIHRyeSB7XG4gICAgICAgIGUubmV4dChyKTtcbiAgICAgIH0gY2F0Y2ggKG4pIHtcbiAgICAgICAgQihuKTtcbiAgICAgIH1cbiAgfSwgdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICBpZiAoZS5lcnJvcilcbiAgICAgIHRyeSB7XG4gICAgICAgIGUuZXJyb3Iocik7XG4gICAgICB9IGNhdGNoIChuKSB7XG4gICAgICAgIEIobik7XG4gICAgICB9XG4gICAgZWxzZVxuICAgICAgQihyKTtcbiAgfSwgdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgciA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgIGlmIChyLmNvbXBsZXRlKVxuICAgICAgdHJ5IHtcbiAgICAgICAgci5jb21wbGV0ZSgpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBCKGUpO1xuICAgICAgfVxuICB9LCB0O1xufSgpLCB1ZSA9IGZ1bmN0aW9uKHQpIHtcbiAgTShyLCB0KTtcbiAgZnVuY3Rpb24gcihlLCBuLCBpKSB7XG4gICAgdmFyIHMgPSB0LmNhbGwodGhpcykgfHwgdGhpcywgYTtcbiAgICBpZiAodyhlKSB8fCAhZSlcbiAgICAgIGEgPSB7XG4gICAgICAgIG5leHQ6IGUgPz8gdm9pZCAwLFxuICAgICAgICBlcnJvcjogbiA/PyB2b2lkIDAsXG4gICAgICAgIGNvbXBsZXRlOiBpID8/IHZvaWQgMFxuICAgICAgfTtcbiAgICBlbHNlIHtcbiAgICAgIHZhciBjO1xuICAgICAgcyAmJiBzdC51c2VEZXByZWNhdGVkTmV4dENvbnRleHQgPyAoYyA9IE9iamVjdC5jcmVhdGUoZSksIGMudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHMudW5zdWJzY3JpYmUoKTtcbiAgICAgIH0sIGEgPSB7XG4gICAgICAgIG5leHQ6IGUubmV4dCAmJiBpZShlLm5leHQsIGMpLFxuICAgICAgICBlcnJvcjogZS5lcnJvciAmJiBpZShlLmVycm9yLCBjKSxcbiAgICAgICAgY29tcGxldGU6IGUuY29tcGxldGUgJiYgaWUoZS5jb21wbGV0ZSwgYylcbiAgICAgIH0pIDogYSA9IGU7XG4gICAgfVxuICAgIHJldHVybiBzLmRlc3RpbmF0aW9uID0gbmV3IHluKGEpLCBzO1xuICB9XG4gIHJldHVybiByO1xufSh5ZSk7XG5mdW5jdGlvbiBCKHQpIHtcbiAgY3QodCk7XG59XG5mdW5jdGlvbiBfbih0KSB7XG4gIHRocm93IHQ7XG59XG52YXIgZ24gPSB7XG4gIGNsb3NlZDogITAsXG4gIG5leHQ6IFBlLFxuICBlcnJvcjogX24sXG4gIGNvbXBsZXRlOiBQZVxufSwgX2UgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5vYnNlcnZhYmxlIHx8IFwiQEBvYnNlcnZhYmxlXCI7XG59KCk7XG5mdW5jdGlvbiBibih0KSB7XG4gIHJldHVybiB0O1xufVxuZnVuY3Rpb24gdm4odCkge1xuICByZXR1cm4gdC5sZW5ndGggPT09IDAgPyBibiA6IHQubGVuZ3RoID09PSAxID8gdFswXSA6IGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gdC5yZWR1Y2UoZnVuY3Rpb24obiwgaSkge1xuICAgICAgcmV0dXJuIGkobik7XG4gICAgfSwgZSk7XG4gIH07XG59XG52YXIgVCA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiB0KHIpIHtcbiAgICByICYmICh0aGlzLl9zdWJzY3JpYmUgPSByKTtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IG5ldyB0KCk7XG4gICAgcmV0dXJuIGUuc291cmNlID0gdGhpcywgZS5vcGVyYXRvciA9IHIsIGU7XG4gIH0sIHQucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uKHIsIGUsIG4pIHtcbiAgICB2YXIgaSA9IHRoaXMsIHMgPSBFbihyKSA/IHIgOiBuZXcgdWUociwgZSwgbik7XG4gICAgcmV0dXJuIEsoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgYSA9IGksIGMgPSBhLm9wZXJhdG9yLCBsID0gYS5zb3VyY2U7XG4gICAgICBzLmFkZChjID8gYy5jYWxsKHMsIGwpIDogbCA/IGkuX3N1YnNjcmliZShzKSA6IGkuX3RyeVN1YnNjcmliZShzKSk7XG4gICAgfSksIHM7XG4gIH0sIHQucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbihyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLl9zdWJzY3JpYmUocik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgci5lcnJvcihlKTtcbiAgICB9XG4gIH0sIHQucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbihyLCBlKSB7XG4gICAgdmFyIG4gPSB0aGlzO1xuICAgIHJldHVybiBlID0gSWUoZSksIG5ldyBlKGZ1bmN0aW9uKGksIHMpIHtcbiAgICAgIHZhciBhID0gbmV3IHVlKHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24oYykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByKGMpO1xuICAgICAgICAgIH0gY2F0Y2ggKGwpIHtcbiAgICAgICAgICAgIHMobCksIGEudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBzLFxuICAgICAgICBjb21wbGV0ZTogaVxuICAgICAgfSk7XG4gICAgICBuLnN1YnNjcmliZShhKTtcbiAgICB9KTtcbiAgfSwgdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZTtcbiAgICByZXR1cm4gKGUgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5zdWJzY3JpYmUocik7XG4gIH0sIHQucHJvdG90eXBlW19lXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCB0LnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24oKSB7XG4gICAgZm9yICh2YXIgciA9IFtdLCBlID0gMDsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKylcbiAgICAgIHJbZV0gPSBhcmd1bWVudHNbZV07XG4gICAgcmV0dXJuIHZuKHIpKHRoaXMpO1xuICB9LCB0LnByb3RvdHlwZS50b1Byb21pc2UgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSB0aGlzO1xuICAgIHJldHVybiByID0gSWUociksIG5ldyByKGZ1bmN0aW9uKG4sIGkpIHtcbiAgICAgIHZhciBzO1xuICAgICAgZS5zdWJzY3JpYmUoZnVuY3Rpb24oYSkge1xuICAgICAgICByZXR1cm4gcyA9IGE7XG4gICAgICB9LCBmdW5jdGlvbihhKSB7XG4gICAgICAgIHJldHVybiBpKGEpO1xuICAgICAgfSwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBuKHMpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0sIHQuY3JlYXRlID0gZnVuY3Rpb24ocikge1xuICAgIHJldHVybiBuZXcgdChyKTtcbiAgfSwgdDtcbn0oKTtcbmZ1bmN0aW9uIEllKHQpIHtcbiAgdmFyIHI7XG4gIHJldHVybiAociA9IHQgPz8gc3QuUHJvbWlzZSkgIT09IG51bGwgJiYgciAhPT0gdm9pZCAwID8gciA6IFByb21pc2U7XG59XG5mdW5jdGlvbiB3bih0KSB7XG4gIHJldHVybiB0ICYmIHcodC5uZXh0KSAmJiB3KHQuZXJyb3IpICYmIHcodC5jb21wbGV0ZSk7XG59XG5mdW5jdGlvbiBFbih0KSB7XG4gIHJldHVybiB0ICYmIHQgaW5zdGFuY2VvZiB5ZSB8fCB3bih0KSAmJiBpdCh0KTtcbn1cbmZ1bmN0aW9uIFNuKHQpIHtcbiAgcmV0dXJuIHcodCA9PSBudWxsID8gdm9pZCAwIDogdC5saWZ0KTtcbn1cbmZ1bmN0aW9uIENuKHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHIpIHtcbiAgICBpZiAoU24ocikpXG4gICAgICByZXR1cm4gci5saWZ0KGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gdChlLCB0aGlzKTtcbiAgICAgICAgfSBjYXRjaCAobikge1xuICAgICAgICAgIHRoaXMuZXJyb3Iobik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJVbmFibGUgdG8gbGlmdCB1bmtub3duIE9ic2VydmFibGUgdHlwZVwiKTtcbiAgfTtcbn1cbmZ1bmN0aW9uIGtuKHQsIHIsIGUsIG4sIGkpIHtcbiAgcmV0dXJuIG5ldyBQbih0LCByLCBlLCBuLCBpKTtcbn1cbnZhciBQbiA9IGZ1bmN0aW9uKHQpIHtcbiAgTShyLCB0KTtcbiAgZnVuY3Rpb24gcihlLCBuLCBpLCBzLCBhLCBjKSB7XG4gICAgdmFyIGwgPSB0LmNhbGwodGhpcywgZSkgfHwgdGhpcztcbiAgICByZXR1cm4gbC5vbkZpbmFsaXplID0gYSwgbC5zaG91bGRVbnN1YnNjcmliZSA9IGMsIGwuX25leHQgPSBuID8gZnVuY3Rpb24odSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbih1KTtcbiAgICAgIH0gY2F0Y2ggKGYpIHtcbiAgICAgICAgZS5lcnJvcihmKTtcbiAgICAgIH1cbiAgICB9IDogdC5wcm90b3R5cGUuX25leHQsIGwuX2Vycm9yID0gcyA/IGZ1bmN0aW9uKHUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHModSk7XG4gICAgICB9IGNhdGNoIChmKSB7XG4gICAgICAgIGUuZXJyb3IoZik7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfSA6IHQucHJvdG90eXBlLl9lcnJvciwgbC5fY29tcGxldGUgPSBpID8gZnVuY3Rpb24oKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpKCk7XG4gICAgICB9IGNhdGNoICh1KSB7XG4gICAgICAgIGUuZXJyb3IodSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfSA6IHQucHJvdG90eXBlLl9jb21wbGV0ZSwgbDtcbiAgfVxuICByZXR1cm4gci5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZTtcbiAgICBpZiAoIXRoaXMuc2hvdWxkVW5zdWJzY3JpYmUgfHwgdGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKSB7XG4gICAgICB2YXIgbiA9IHRoaXMuY2xvc2VkO1xuICAgICAgdC5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKSwgIW4gJiYgKChlID0gdGhpcy5vbkZpbmFsaXplKSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgfHwgZS5jYWxsKHRoaXMpKTtcbiAgICB9XG4gIH0sIHI7XG59KHllKSwgSW4gPSByZShmdW5jdGlvbih0KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0KHRoaXMpLCB0aGlzLm5hbWUgPSBcIk9iamVjdFVuc3Vic2NyaWJlZEVycm9yXCIsIHRoaXMubWVzc2FnZSA9IFwib2JqZWN0IHVuc3Vic2NyaWJlZFwiO1xuICB9O1xufSksIHV0ID0gZnVuY3Rpb24odCkge1xuICBNKHIsIHQpO1xuICBmdW5jdGlvbiByKCkge1xuICAgIHZhciBlID0gdC5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgcmV0dXJuIGUuY2xvc2VkID0gITEsIGUuY3VycmVudE9ic2VydmVycyA9IG51bGwsIGUub2JzZXJ2ZXJzID0gW10sIGUuaXNTdG9wcGVkID0gITEsIGUuaGFzRXJyb3IgPSAhMSwgZS50aHJvd25FcnJvciA9IG51bGwsIGU7XG4gIH1cbiAgcmV0dXJuIHIucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4gPSBuZXcgT2UodGhpcywgdGhpcyk7XG4gICAgcmV0dXJuIG4ub3BlcmF0b3IgPSBlLCBuO1xuICB9LCByLnByb3RvdHlwZS5fdGhyb3dJZkNsb3NlZCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgIHRocm93IG5ldyBJbigpO1xuICB9LCByLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuID0gdGhpcztcbiAgICBLKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGksIHM7XG4gICAgICBpZiAobi5fdGhyb3dJZkNsb3NlZCgpLCAhbi5pc1N0b3BwZWQpIHtcbiAgICAgICAgbi5jdXJyZW50T2JzZXJ2ZXJzIHx8IChuLmN1cnJlbnRPYnNlcnZlcnMgPSBBcnJheS5mcm9tKG4ub2JzZXJ2ZXJzKSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZm9yICh2YXIgYSA9IEQobi5jdXJyZW50T2JzZXJ2ZXJzKSwgYyA9IGEubmV4dCgpOyAhYy5kb25lOyBjID0gYS5uZXh0KCkpIHtcbiAgICAgICAgICAgIHZhciBsID0gYy52YWx1ZTtcbiAgICAgICAgICAgIGwubmV4dChlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKHUpIHtcbiAgICAgICAgICBpID0geyBlcnJvcjogdSB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjICYmICFjLmRvbmUgJiYgKHMgPSBhLnJldHVybikgJiYgcy5jYWxsKGEpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAoaSkgdGhyb3cgaS5lcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4gPSB0aGlzO1xuICAgIEsoZnVuY3Rpb24oKSB7XG4gICAgICBpZiAobi5fdGhyb3dJZkNsb3NlZCgpLCAhbi5pc1N0b3BwZWQpIHtcbiAgICAgICAgbi5oYXNFcnJvciA9IG4uaXNTdG9wcGVkID0gITAsIG4udGhyb3duRXJyb3IgPSBlO1xuICAgICAgICBmb3IgKHZhciBpID0gbi5vYnNlcnZlcnM7IGkubGVuZ3RoOyApXG4gICAgICAgICAgaS5zaGlmdCgpLmVycm9yKGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCByLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlID0gdGhpcztcbiAgICBLKGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKGUuX3Rocm93SWZDbG9zZWQoKSwgIWUuaXNTdG9wcGVkKSB7XG4gICAgICAgIGUuaXNTdG9wcGVkID0gITA7XG4gICAgICAgIGZvciAodmFyIG4gPSBlLm9ic2VydmVyczsgbi5sZW5ndGg7IClcbiAgICAgICAgICBuLnNoaWZ0KCkuY29tcGxldGUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgci5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCA9IHRoaXMuY2xvc2VkID0gITAsIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgfSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHIucHJvdG90eXBlLCBcIm9ic2VydmVkXCIsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGU7XG4gICAgICByZXR1cm4gKChlID0gdGhpcy5vYnNlcnZlcnMpID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUubGVuZ3RoKSA+IDA7XG4gICAgfSxcbiAgICBlbnVtZXJhYmxlOiAhMSxcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCByLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksIHQucHJvdG90eXBlLl90cnlTdWJzY3JpYmUuY2FsbCh0aGlzLCBlKTtcbiAgfSwgci5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLCB0aGlzLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKGUpLCB0aGlzLl9pbm5lclN1YnNjcmliZShlKTtcbiAgfSwgci5wcm90b3R5cGUuX2lubmVyU3Vic2NyaWJlID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuID0gdGhpcywgaSA9IHRoaXMsIHMgPSBpLmhhc0Vycm9yLCBhID0gaS5pc1N0b3BwZWQsIGMgPSBpLm9ic2VydmVycztcbiAgICByZXR1cm4gcyB8fCBhID8gb3QgOiAodGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbCwgYy5wdXNoKGUpLCBuZXcgeihmdW5jdGlvbigpIHtcbiAgICAgIG4uY3VycmVudE9ic2VydmVycyA9IG51bGwsIFgoYywgZSk7XG4gICAgfSkpO1xuICB9LCByLnByb3RvdHlwZS5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiA9IHRoaXMsIGkgPSBuLmhhc0Vycm9yLCBzID0gbi50aHJvd25FcnJvciwgYSA9IG4uaXNTdG9wcGVkO1xuICAgIGkgPyBlLmVycm9yKHMpIDogYSAmJiBlLmNvbXBsZXRlKCk7XG4gIH0sIHIucHJvdG90eXBlLmFzT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlID0gbmV3IFQoKTtcbiAgICByZXR1cm4gZS5zb3VyY2UgPSB0aGlzLCBlO1xuICB9LCByLmNyZWF0ZSA9IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICByZXR1cm4gbmV3IE9lKGUsIG4pO1xuICB9LCByO1xufShUKSwgT2UgPSBmdW5jdGlvbih0KSB7XG4gIE0ociwgdCk7XG4gIGZ1bmN0aW9uIHIoZSwgbikge1xuICAgIHZhciBpID0gdC5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgcmV0dXJuIGkuZGVzdGluYXRpb24gPSBlLCBpLnNvdXJjZSA9IG4sIGk7XG4gIH1cbiAgcmV0dXJuIHIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4sIGk7XG4gICAgKGkgPSAobiA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG4ubmV4dCkgPT09IG51bGwgfHwgaSA9PT0gdm9pZCAwIHx8IGkuY2FsbChuLCBlKTtcbiAgfSwgci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4sIGk7XG4gICAgKGkgPSAobiA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG4uZXJyb3IpID09PSBudWxsIHx8IGkgPT09IHZvaWQgMCB8fCBpLmNhbGwobiwgZSk7XG4gIH0sIHIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGUsIG47XG4gICAgKG4gPSAoZSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUuY29tcGxldGUpID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCB8fCBuLmNhbGwoZSk7XG4gIH0sIHIucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4sIGk7XG4gICAgcmV0dXJuIChpID0gKG4gPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogbi5zdWJzY3JpYmUoZSkpICE9PSBudWxsICYmIGkgIT09IHZvaWQgMCA/IGkgOiBvdDtcbiAgfSwgcjtcbn0odXQpLCBPbiA9IHtcbiAgbm93OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gRGF0ZS5ub3coKTtcbiAgfSxcbiAgZGVsZWdhdGU6IHZvaWQgMFxufSwgQW4gPSBmdW5jdGlvbih0KSB7XG4gIE0ociwgdCk7XG4gIGZ1bmN0aW9uIHIoZSwgbikge1xuICAgIHJldHVybiB0LmNhbGwodGhpcykgfHwgdGhpcztcbiAgfVxuICByZXR1cm4gci5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihlLCBuKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIHI7XG59KHopLCBBZSA9IHtcbiAgc2V0SW50ZXJ2YWw6IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICBmb3IgKHZhciBlID0gW10sIG4gPSAyOyBuIDwgYXJndW1lbnRzLmxlbmd0aDsgbisrKVxuICAgICAgZVtuIC0gMl0gPSBhcmd1bWVudHNbbl07XG4gICAgcmV0dXJuIHNldEludGVydmFsLmFwcGx5KHZvaWQgMCwgUShbdCwgcl0sIFcoZSkpKTtcbiAgfSxcbiAgY2xlYXJJbnRlcnZhbDogZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBjbGVhckludGVydmFsKHQpO1xuICB9LFxuICBkZWxlZ2F0ZTogdm9pZCAwXG59LCBSbiA9IGZ1bmN0aW9uKHQpIHtcbiAgTShyLCB0KTtcbiAgZnVuY3Rpb24gcihlLCBuKSB7XG4gICAgdmFyIGkgPSB0LmNhbGwodGhpcywgZSwgbikgfHwgdGhpcztcbiAgICByZXR1cm4gaS5zY2hlZHVsZXIgPSBlLCBpLndvcmsgPSBuLCBpLnBlbmRpbmcgPSAhMSwgaTtcbiAgfVxuICByZXR1cm4gci5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihlLCBuKSB7XG4gICAgdmFyIGk7XG4gICAgaWYgKG4gPT09IHZvaWQgMCAmJiAobiA9IDApLCB0aGlzLmNsb3NlZClcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIHRoaXMuc3RhdGUgPSBlO1xuICAgIHZhciBzID0gdGhpcy5pZCwgYSA9IHRoaXMuc2NoZWR1bGVyO1xuICAgIHJldHVybiBzICE9IG51bGwgJiYgKHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKGEsIHMsIG4pKSwgdGhpcy5wZW5kaW5nID0gITAsIHRoaXMuZGVsYXkgPSBuLCB0aGlzLmlkID0gKGkgPSB0aGlzLmlkKSAhPT0gbnVsbCAmJiBpICE9PSB2b2lkIDAgPyBpIDogdGhpcy5yZXF1ZXN0QXN5bmNJZChhLCB0aGlzLmlkLCBuKSwgdGhpcztcbiAgfSwgci5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbihlLCBuLCBpKSB7XG4gICAgcmV0dXJuIGkgPT09IHZvaWQgMCAmJiAoaSA9IDApLCBBZS5zZXRJbnRlcnZhbChlLmZsdXNoLmJpbmQoZSwgdGhpcyksIGkpO1xuICB9LCByLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uKGUsIG4sIGkpIHtcbiAgICBpZiAoaSA9PT0gdm9pZCAwICYmIChpID0gMCksIGkgIT0gbnVsbCAmJiB0aGlzLmRlbGF5ID09PSBpICYmIHRoaXMucGVuZGluZyA9PT0gITEpXG4gICAgICByZXR1cm4gbjtcbiAgICBuICE9IG51bGwgJiYgQWUuY2xlYXJJbnRlcnZhbChuKTtcbiAgfSwgci5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICByZXR1cm4gbmV3IEVycm9yKFwiZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvblwiKTtcbiAgICB0aGlzLnBlbmRpbmcgPSAhMTtcbiAgICB2YXIgaSA9IHRoaXMuX2V4ZWN1dGUoZSwgbik7XG4gICAgaWYgKGkpXG4gICAgICByZXR1cm4gaTtcbiAgICB0aGlzLnBlbmRpbmcgPT09ICExICYmIHRoaXMuaWQgIT0gbnVsbCAmJiAodGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsIHRoaXMuaWQsIG51bGwpKTtcbiAgfSwgci5wcm90b3R5cGUuX2V4ZWN1dGUgPSBmdW5jdGlvbihlLCBuKSB7XG4gICAgdmFyIGkgPSAhMSwgcztcbiAgICB0cnkge1xuICAgICAgdGhpcy53b3JrKGUpO1xuICAgIH0gY2F0Y2ggKGEpIHtcbiAgICAgIGkgPSAhMCwgcyA9IGEgfHwgbmV3IEVycm9yKFwiU2NoZWR1bGVkIGFjdGlvbiB0aHJldyBmYWxzeSBlcnJvclwiKTtcbiAgICB9XG4gICAgaWYgKGkpXG4gICAgICByZXR1cm4gdGhpcy51bnN1YnNjcmliZSgpLCBzO1xuICB9LCByLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgIHZhciBlID0gdGhpcywgbiA9IGUuaWQsIGkgPSBlLnNjaGVkdWxlciwgcyA9IGkuYWN0aW9ucztcbiAgICAgIHRoaXMud29yayA9IHRoaXMuc3RhdGUgPSB0aGlzLnNjaGVkdWxlciA9IG51bGwsIHRoaXMucGVuZGluZyA9ICExLCBYKHMsIHRoaXMpLCBuICE9IG51bGwgJiYgKHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKGksIG4sIG51bGwpKSwgdGhpcy5kZWxheSA9IG51bGwsIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgfVxuICB9LCByO1xufShBbiksIFJlID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHQociwgZSkge1xuICAgIGUgPT09IHZvaWQgMCAmJiAoZSA9IHQubm93KSwgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yID0gciwgdGhpcy5ub3cgPSBlO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKHIsIGUsIG4pIHtcbiAgICByZXR1cm4gZSA9PT0gdm9pZCAwICYmIChlID0gMCksIG5ldyB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IodGhpcywgcikuc2NoZWR1bGUobiwgZSk7XG4gIH0sIHQubm93ID0gT24ubm93LCB0O1xufSgpLCBUbiA9IGZ1bmN0aW9uKHQpIHtcbiAgTShyLCB0KTtcbiAgZnVuY3Rpb24gcihlLCBuKSB7XG4gICAgbiA9PT0gdm9pZCAwICYmIChuID0gUmUubm93KTtcbiAgICB2YXIgaSA9IHQuY2FsbCh0aGlzLCBlLCBuKSB8fCB0aGlzO1xuICAgIHJldHVybiBpLmFjdGlvbnMgPSBbXSwgaS5fYWN0aXZlID0gITEsIGk7XG4gIH1cbiAgcmV0dXJuIHIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuID0gdGhpcy5hY3Rpb25zO1xuICAgIGlmICh0aGlzLl9hY3RpdmUpIHtcbiAgICAgIG4ucHVzaChlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGk7XG4gICAgdGhpcy5fYWN0aXZlID0gITA7XG4gICAgZG9cbiAgICAgIGlmIChpID0gZS5leGVjdXRlKGUuc3RhdGUsIGUuZGVsYXkpKVxuICAgICAgICBicmVhaztcbiAgICB3aGlsZSAoZSA9IG4uc2hpZnQoKSk7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA9ICExLCBpKSB7XG4gICAgICBmb3IgKDsgZSA9IG4uc2hpZnQoKTsgKVxuICAgICAgICBlLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aHJvdyBpO1xuICAgIH1cbiAgfSwgcjtcbn0oUmUpLCBqbiA9IG5ldyBUbihSbiksIE1uID0gZnVuY3Rpb24odCkge1xuICByZXR1cm4gdCAmJiB0eXBlb2YgdC5sZW5ndGggPT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgdCAhPSBcImZ1bmN0aW9uXCI7XG59O1xuZnVuY3Rpb24gTG4odCkge1xuICByZXR1cm4gdyh0ID09IG51bGwgPyB2b2lkIDAgOiB0LnRoZW4pO1xufVxuZnVuY3Rpb24gRm4odCkge1xuICByZXR1cm4gdyh0W19lXSk7XG59XG5mdW5jdGlvbiB4bih0KSB7XG4gIHJldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvciAmJiB3KHQgPT0gbnVsbCA/IHZvaWQgMCA6IHRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKTtcbn1cbmZ1bmN0aW9uIERuKHQpIHtcbiAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJZb3UgcHJvdmlkZWQgXCIgKyAodCAhPT0gbnVsbCAmJiB0eXBlb2YgdCA9PSBcIm9iamVjdFwiID8gXCJhbiBpbnZhbGlkIG9iamVjdFwiIDogXCInXCIgKyB0ICsgXCInXCIpICsgXCIgd2hlcmUgYSBzdHJlYW0gd2FzIGV4cGVjdGVkLiBZb3UgY2FuIHByb3ZpZGUgYW4gT2JzZXJ2YWJsZSwgUHJvbWlzZSwgUmVhZGFibGVTdHJlYW0sIEFycmF5LCBBc3luY0l0ZXJhYmxlLCBvciBJdGVyYWJsZS5cIik7XG59XG5mdW5jdGlvbiBObigpIHtcbiAgcmV0dXJuIHR5cGVvZiBTeW1ib2wgIT0gXCJmdW5jdGlvblwiIHx8ICFTeW1ib2wuaXRlcmF0b3IgPyBcIkBAaXRlcmF0b3JcIiA6IFN5bWJvbC5pdGVyYXRvcjtcbn1cbnZhciBVbiA9IE5uKCk7XG5mdW5jdGlvbiAkbih0KSB7XG4gIHJldHVybiB3KHQgPT0gbnVsbCA/IHZvaWQgMCA6IHRbVW5dKTtcbn1cbmZ1bmN0aW9uIFZuKHQpIHtcbiAgcmV0dXJuIHBuKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oKSB7XG4gICAgdmFyIGUsIG4sIGksIHM7XG4gICAgcmV0dXJuIG50KHRoaXMsIGZ1bmN0aW9uKGEpIHtcbiAgICAgIHN3aXRjaCAoYS5sYWJlbCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgZSA9IHQuZ2V0UmVhZGVyKCksIGEubGFiZWwgPSAxO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgYS50cnlzLnB1c2goWzEsICwgOSwgMTBdKSwgYS5sYWJlbCA9IDI7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICByZXR1cm4gWzQsIEYoZS5yZWFkKCkpXTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJldHVybiBuID0gYS5zZW50KCksIGkgPSBuLnZhbHVlLCBzID0gbi5kb25lLCBzID8gWzQsIEYodm9pZCAwKV0gOiBbMywgNV07XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gWzIsIGEuc2VudCgpXTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJldHVybiBbNCwgRihpKV07XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICByZXR1cm4gWzQsIGEuc2VudCgpXTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIHJldHVybiBhLnNlbnQoKSwgWzMsIDJdO1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgcmV0dXJuIFszLCAxMF07XG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICByZXR1cm4gZS5yZWxlYXNlTG9jaygpLCBbN107XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBxbih0KSB7XG4gIHJldHVybiB3KHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQuZ2V0UmVhZGVyKTtcbn1cbmZ1bmN0aW9uIHpuKHQpIHtcbiAgaWYgKHQgaW5zdGFuY2VvZiBUKVxuICAgIHJldHVybiB0O1xuICBpZiAodCAhPSBudWxsKSB7XG4gICAgaWYgKEZuKHQpKVxuICAgICAgcmV0dXJuIEhuKHQpO1xuICAgIGlmIChNbih0KSlcbiAgICAgIHJldHVybiBZbih0KTtcbiAgICBpZiAoTG4odCkpXG4gICAgICByZXR1cm4gQm4odCk7XG4gICAgaWYgKHhuKHQpKVxuICAgICAgcmV0dXJuIGx0KHQpO1xuICAgIGlmICgkbih0KSlcbiAgICAgIHJldHVybiBLbih0KTtcbiAgICBpZiAocW4odCkpXG4gICAgICByZXR1cm4gSm4odCk7XG4gIH1cbiAgdGhyb3cgRG4odCk7XG59XG5mdW5jdGlvbiBIbih0KSB7XG4gIHJldHVybiBuZXcgVChmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSB0W19lXSgpO1xuICAgIGlmICh3KGUuc3Vic2NyaWJlKSlcbiAgICAgIHJldHVybiBlLnN1YnNjcmliZShyKTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJvdmlkZWQgb2JqZWN0IGRvZXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnQgU3ltYm9sLm9ic2VydmFibGVcIik7XG4gIH0pO1xufVxuZnVuY3Rpb24gWW4odCkge1xuICByZXR1cm4gbmV3IFQoZnVuY3Rpb24ocikge1xuICAgIGZvciAodmFyIGUgPSAwOyBlIDwgdC5sZW5ndGggJiYgIXIuY2xvc2VkOyBlKyspXG4gICAgICByLm5leHQodFtlXSk7XG4gICAgci5jb21wbGV0ZSgpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIEJuKHQpIHtcbiAgcmV0dXJuIG5ldyBUKGZ1bmN0aW9uKHIpIHtcbiAgICB0LnRoZW4oZnVuY3Rpb24oZSkge1xuICAgICAgci5jbG9zZWQgfHwgKHIubmV4dChlKSwgci5jb21wbGV0ZSgpKTtcbiAgICB9LCBmdW5jdGlvbihlKSB7XG4gICAgICByZXR1cm4gci5lcnJvcihlKTtcbiAgICB9KS50aGVuKG51bGwsIGN0KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBLbih0KSB7XG4gIHJldHVybiBuZXcgVChmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUsIG47XG4gICAgdHJ5IHtcbiAgICAgIGZvciAodmFyIGkgPSBEKHQpLCBzID0gaS5uZXh0KCk7ICFzLmRvbmU7IHMgPSBpLm5leHQoKSkge1xuICAgICAgICB2YXIgYSA9IHMudmFsdWU7XG4gICAgICAgIGlmIChyLm5leHQoYSksIHIuY2xvc2VkKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChjKSB7XG4gICAgICBlID0geyBlcnJvcjogYyB9O1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBzICYmICFzLmRvbmUgJiYgKG4gPSBpLnJldHVybikgJiYgbi5jYWxsKGkpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKGUpIHRocm93IGUuZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICAgIHIuY29tcGxldGUoKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBsdCh0KSB7XG4gIHJldHVybiBuZXcgVChmdW5jdGlvbihyKSB7XG4gICAgWm4odCwgcikuY2F0Y2goZnVuY3Rpb24oZSkge1xuICAgICAgcmV0dXJuIHIuZXJyb3IoZSk7XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gSm4odCkge1xuICByZXR1cm4gbHQoVm4odCkpO1xufVxuZnVuY3Rpb24gWm4odCwgcikge1xuICB2YXIgZSwgbiwgaSwgcztcbiAgcmV0dXJuIGZuKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgYSwgYztcbiAgICByZXR1cm4gbnQodGhpcywgZnVuY3Rpb24obCkge1xuICAgICAgc3dpdGNoIChsLmxhYmVsKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBsLnRyeXMucHVzaChbMCwgNSwgNiwgMTFdKSwgZSA9IGhuKHQpLCBsLmxhYmVsID0gMTtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiBbNCwgZS5uZXh0KCldO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgaWYgKG4gPSBsLnNlbnQoKSwgISFuLmRvbmUpIHJldHVybiBbMywgNF07XG4gICAgICAgICAgaWYgKGEgPSBuLnZhbHVlLCByLm5leHQoYSksIHIuY2xvc2VkKVxuICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICBsLmxhYmVsID0gMztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJldHVybiBbMywgMV07XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gWzMsIDExXTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJldHVybiBjID0gbC5zZW50KCksIGkgPSB7IGVycm9yOiBjIH0sIFszLCAxMV07XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICByZXR1cm4gbC50cnlzLnB1c2goWzYsICwgOSwgMTBdKSwgbiAmJiAhbi5kb25lICYmIChzID0gZS5yZXR1cm4pID8gWzQsIHMuY2FsbChlKV0gOiBbMywgOF07XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBsLnNlbnQoKSwgbC5sYWJlbCA9IDg7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIGlmIChpKSB0aHJvdyBpLmVycm9yO1xuICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICByZXR1cm4gci5jb21wbGV0ZSgpLCBbMl07XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gR24odCwgciwgZSwgbiwgaSkge1xuICBuID09PSB2b2lkIDAgJiYgKG4gPSAwKSwgaSA9PT0gdm9pZCAwICYmIChpID0gITEpO1xuICB2YXIgcyA9IHIuc2NoZWR1bGUoZnVuY3Rpb24oKSB7XG4gICAgZSgpLCBpID8gdC5hZGQodGhpcy5zY2hlZHVsZShudWxsLCBuKSkgOiB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gIH0sIG4pO1xuICBpZiAodC5hZGQocyksICFpKVxuICAgIHJldHVybiBzO1xufVxuZnVuY3Rpb24gV24odCwgcikge1xuICB2YXIgZSA9IHcodCkgPyB0IDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHQ7XG4gIH0sIG4gPSBmdW5jdGlvbihpKSB7XG4gICAgcmV0dXJuIGkuZXJyb3IoZSgpKTtcbiAgfTtcbiAgcmV0dXJuIG5ldyBUKG4pO1xufVxudmFyIFFuID0gcmUoZnVuY3Rpb24odCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdCh0aGlzKSwgdGhpcy5uYW1lID0gXCJFbXB0eUVycm9yXCIsIHRoaXMubWVzc2FnZSA9IFwibm8gZWxlbWVudHMgaW4gc2VxdWVuY2VcIjtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gWG4odCwgcikge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZSwgbikge1xuICAgIHZhciBpID0gITEsIHM7XG4gICAgdC5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogZnVuY3Rpb24oYSkge1xuICAgICAgICBzID0gYSwgaSA9ICEwO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiBuLFxuICAgICAgY29tcGxldGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICBpID8gZShzKSA6IG4obmV3IFFuKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGVvKHQpIHtcbiAgcmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTih0KTtcbn1cbnZhciB0byA9IHJlKGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGUpIHtcbiAgICBlID09PSB2b2lkIDAgJiYgKGUgPSBudWxsKSwgdCh0aGlzKSwgdGhpcy5tZXNzYWdlID0gXCJUaW1lb3V0IGhhcyBvY2N1cnJlZFwiLCB0aGlzLm5hbWUgPSBcIlRpbWVvdXRFcnJvclwiLCB0aGlzLmluZm8gPSBlO1xuICB9O1xufSk7XG5mdW5jdGlvbiBybyh0LCByKSB7XG4gIHZhciBlID0gZW8odCkgPyB7IGZpcnN0OiB0IH0gOiB0eXBlb2YgdCA9PSBcIm51bWJlclwiID8geyBlYWNoOiB0IH0gOiB0LCBuID0gZS5maXJzdCwgaSA9IGUuZWFjaCwgcyA9IGUud2l0aCwgYSA9IHMgPT09IHZvaWQgMCA/IG5vIDogcywgYyA9IGUuc2NoZWR1bGVyLCBsID0gYyA9PT0gdm9pZCAwID8gam4gOiBjLCB1ID0gZS5tZXRhLCBmID0gdSA9PT0gdm9pZCAwID8gbnVsbCA6IHU7XG4gIGlmIChuID09IG51bGwgJiYgaSA9PSBudWxsKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJObyB0aW1lb3V0IHByb3ZpZGVkLlwiKTtcbiAgcmV0dXJuIENuKGZ1bmN0aW9uKGgsIHkpIHtcbiAgICB2YXIgZCwgcCwgXyA9IG51bGwsIE4gPSAwLCBIID0gZnVuY3Rpb24obmUpIHtcbiAgICAgIHAgPSBHbih5LCBsLCBmdW5jdGlvbigpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBkLnVuc3Vic2NyaWJlKCksIHpuKGEoe1xuICAgICAgICAgICAgbWV0YTogZixcbiAgICAgICAgICAgIGxhc3RWYWx1ZTogXyxcbiAgICAgICAgICAgIHNlZW46IE5cbiAgICAgICAgICB9KSkuc3Vic2NyaWJlKHkpO1xuICAgICAgICB9IGNhdGNoIChkdCkge1xuICAgICAgICAgIHkuZXJyb3IoZHQpO1xuICAgICAgICB9XG4gICAgICB9LCBuZSk7XG4gICAgfTtcbiAgICBkID0gaC5zdWJzY3JpYmUoa24oeSwgZnVuY3Rpb24obmUpIHtcbiAgICAgIHAgPT0gbnVsbCB8fCBwLnVuc3Vic2NyaWJlKCksIE4rKywgeS5uZXh0KF8gPSBuZSksIGkgPiAwICYmIEgoaSk7XG4gICAgfSwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKCkge1xuICAgICAgcCAhPSBudWxsICYmIHAuY2xvc2VkIHx8IHAgPT0gbnVsbCB8fCBwLnVuc3Vic2NyaWJlKCksIF8gPSBudWxsO1xuICAgIH0pKSwgIU4gJiYgSChuICE9IG51bGwgPyB0eXBlb2YgbiA9PSBcIm51bWJlclwiID8gbiA6ICtuIC0gbC5ub3coKSA6IGkpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIG5vKHQpIHtcbiAgdGhyb3cgbmV3IHRvKHQpO1xufVxuY2xhc3MgSiB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0ID0gKHIpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcInN1Y2Nlc3NcIiwgaXNTdWNjZXNzOiAhMCwgbG9hZGVkVmFsdWU6IHIgfSwgdGhpcy5fc3ViamVjdC5uZXh0KHIpLCB0aGlzLl9zdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgfSwgdGhpcy50aHJvdyA9IChyLCBlKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkZWRPbmNlIGlzIGFscmVhZHkgaW4gc3VjY2VzcyBzdGF0ZVwiKTtcbiAgICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJlcnJvclwiLCBpc1N1Y2Nlc3M6ICExLCBlcnJvcjogciwgZXJyTXNnOiBlIH0sIHRoaXMuX3N1YmplY3QuZXJyb3Iocik7XG4gICAgfSwgdGhpcy5nZXRWYWx1ZUlmTG9hZGVkRWxzZSA9IChyKSA9PiB0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIgPyB0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlIDogciwgdGhpcy5zdWJzY3JpYmUgPSAocikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICByKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiICYmIHIodGhpcy5fY3VycmVudCk7XG4gICAgICBjb25zdCBlID0gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcInN1Y2Nlc3NcIilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGUgKG5leHQpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgcih0aGlzLl9jdXJyZW50KSwgZS51bnN1YnNjcmliZSgpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJlcnJvclwiKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAoZXJyb3IpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgcih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSwgdGhpcy53YWl0Rm9yTG9hZCA9IChyKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWUpO1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIpIHJldHVybiBQcm9taXNlLnJlamVjdCh0aGlzLl9jdXJyZW50LmVycm9yKTtcbiAgICAgIHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImluaXRpYWxcIiAmJiBEcih0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IGUgPSB7XG4gICAgICAgIGZpcnN0OiByLnRpbWVvdXRTZWMgKiAxZTMsXG4gICAgICAgIHdpdGg6ICgpID0+IFduKCgpID0+IG5ldyBFcnJvcihyLnRpbWVvdXRFcnJNc2cpKVxuICAgICAgfTtcbiAgICAgIHJldHVybiBYbih0aGlzLl9zdWJqZWN0LnBpcGUocm8oZSkpKTtcbiAgICB9LCB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiaW5pdGlhbFwiLCBpc1N1Y2Nlc3M6ICExIH0sIHRoaXMuX3N1YmplY3QgPSBuZXcgdXQoKTtcbiAgfVxuICBnZXQgY3VycmVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudDtcbiAgfVxufVxuY29uc3QgeyBsb2dfXzogb28sIGVycl9fOiBpbyB9ID0gQShcImluaXQtZmxvd3NcIiksIFRlID0gKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IG5ldyBKKCk7XG4gIHJldHVybiB7XG4gICAgcHVibGlzaGVyOiBlLFxuICAgIGluaXRpYWxpemU6IGFzeW5jIChuKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoZS5jdXJyZW50LmlzU3VjY2VzcylcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIGZsb3cgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC5cIik7XG4gICAgICAgIGNvbnN0IGkgPSBhd2FpdCByKG4pO1xuICAgICAgICBvbyhg4pyUICR7dH0gZmxvdyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuIFJlc3VsdDpgLCBpKSwgZS5zZXQoaSk7XG4gICAgICB9IGNhdGNoIChpKSB7XG4gICAgICAgIGlvKGDwnZmtICR7dH0gZmxvdyBpbml0aWFsaXphdGlvbiBmYWlsZWQuIEVycm9yOmAsIFUoaSksIFwiRGV0YWlsczpcIiwgaSksIGUudGhyb3coaSwgVShpKSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufSwgc28gPSBhc3luYyAodCwgciwgZSkgPT4ge1xuICBhd2FpdCBQcm9taXNlLmFsbChPYmplY3QudmFsdWVzKHQpLm1hcCgobikgPT4gbi5pbml0aWFsaXplKHsgY29udGV4dDogciwgZm9ybUNhbGxiYWNrczogZSB9KSkpO1xufSwgYW8gPSAoKSA9PiAoe1xuICAvLyDwn5KhIEFkZCBuZXcgaW5pdCBmbG93cyBoZXJlXG4gIC8vIFN0cmlwZSBQUlxuICBzdHJpcGVQUjogVGUoXCJTdHJpcGUgUFJcIiwgeC5zdHJpcGVQUi5pbml0KSxcbiAgLy8gU3RyaXBlIExpbmtcbiAgc3RyaXBlTGluazogVGUoXCJTdHJpcGUgTGlua1wiLCB4LnN0cmlwZUxpbmsuaW5pdClcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbn0pLCB7IGVycl9fOiBjbyB9ID0gQShcImZvcm0tY2FsbGJhY2tzXCIpLCBrID0geiQxLmZ1bmN0aW9uKCkub3B0aW9uYWwoKSwgamUgPSB6JDEub2JqZWN0KHtcbiAgb25Gb2N1czogayxcbiAgb25CbHVyOiBrLFxuICBvbkNoYW5nZTogayxcbiAgb25Mb2FkOiBrLFxuICBvbkxvYWRFcnJvcjogayxcbiAgb25WYWxpZGF0aW9uRXJyb3I6IGssXG4gIG9uQ2hlY2tvdXRTdGFydGVkOiBrLFxuICBvbkNoZWNrb3V0U3VjY2VzczogayxcbiAgb25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzOiBrLFxuICBvbkNoZWNrb3V0RXJyb3I6IGssXG4gIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBrXG59KSwgTyA9IGNsYXNzIE8ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNldENhbGxiYWNrcyA9IChyKSA9PiB7XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSBPLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCksIE9iamVjdC5lbnRyaWVzKHIpLmZvckVhY2goKFtlLCBuXSkgPT4ge1xuICAgICAgICBjb25zdCBpID0gd3QoZSwgbiA/PyBPLk5PT1AsIGNvKTtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2VdID0gaTtcbiAgICAgIH0pO1xuICAgIH0sIHRoaXMuX2NhbGxiYWNrcyA9IE8uY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHJlYWQtb25seSB2ZXJzaW9uIG9mIHRoZSBjYWxsYmFja3Mgb2JqZWN0LlxuICAgKi9cbiAgZ2V0IGdldCgpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLl9jYWxsYmFja3MgfTtcbiAgfVxufTtcbk8uTk9PUCA9ICgpID0+IHtcbn0sIE8uY3JlYXRlRW1wdHlDYWxsYmFja3MgPSAoKSA9PiB7XG4gIGNvbnN0IHIgPSB7fTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGplLmtleW9mKCkuZW51bSkuZm9yRWFjaCgoZSkgPT4ge1xuICAgIHJbZV0gPSBPLk5PT1A7XG4gIH0pLCByO1xufSwgTy5mcm9tT2JqZWN0ID0gKHIpID0+IHtcbiAgY29uc3QgZSA9IG5ldyBPKCk7XG4gIHJldHVybiBlLnNldENhbGxiYWNrcyhqZS5wYXJzZShyKSksIGU7XG59O1xubGV0IGxlID0gTztcbmNsYXNzIHVvIHtcbiAgY29uc3RydWN0b3IociwgZSwgbiwgaSkge1xuICAgIHRoaXMuaGFuZGxlTWVzc2FnZSA9IChzKSA9PiB7XG4gICAgICBpZiAoIXMuc291cmNlKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzb3VyY2UgZm91bmRcIik7XG4gICAgICBpZiAoTWUocy5vcmlnaW4pICE9PSBNZSh0aGlzLmJhc2VVcmwpIHx8IHR5cGVvZiBzLmRhdGEgPT0gXCJvYmplY3RcIiAmJiBzLmRhdGEucGVucGFsKVxuICAgICAgICByZXR1cm47XG4gICAgICBjb25zdCBhID0gc3IoSlNPTi5wYXJzZShzLmRhdGEpKTtcbiAgICAgIGlmICghdGhpcy52YWxpZGF0ZUV2ZW50KGEpKSByZXR1cm47XG4gICAgICBjb25zdCB7IGVsZW1lbnRJZDogbCwgcGF5bG9hZDogdSB9ID0gYSwgZiA9IHUudHlwZTtcbiAgICAgIHN3aXRjaCAoZikge1xuICAgICAgICBjYXNlIFwiTEFZT1VUXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5zZXRGb3JtSGVpZ2h0KHUuaGVpZ2h0ID8gYCR7dS5oZWlnaHR9cHhgIDogXCIxMDAlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiRk9DVVNcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uRm9jdXMobCwgdS5lbGVtZW50VHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJCTFVSXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkJsdXIobCwgdS5lbGVtZW50VHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJDSEFOR0VcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hhbmdlKGwsIHUuZWxlbWVudFR5cGUsIHUuZXJyb3JzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkxPQURFRFwiOlxuICAgICAgICAgIHRoaXMuZXZlbnRUYXJnZXRzW2xdID0gcy5zb3VyY2UsIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Mub25DZGVMb2FkZWQodSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMT0FEX0VSUk9SXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5vbkNkZUxvYWRFcnJvcih1Lm1lc3NhZ2UpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiVkFMSURBVElPTl9FUlJPUlwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IodS5lbGVtZW50VHlwZSwgdS5lcnJvcnMsIGwpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnNvbGUud2FybihcIltmb3JtXSBVbmhhbmRsZWQgZXZlbnQgdHlwZTpcIiwgZik7XG4gICAgICB9XG4gICAgfSwgdGhpcy52YWxpZGF0ZUV2ZW50ID0gKHMpID0+IHMuZm9ybUlkICE9PSB0aGlzLmZvcm1JZCB8fCAhcy5lbGVtZW50SWQgPyAoY29uc29sZS5sb2coXCJbT0pTXSBmb3JtSWRcIiwgdGhpcy5mb3JtSWQsIHMuZm9ybUlkKSwgY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIHVua25vd24gZXZlbnQ6XCIsIHMpLCAhMSkgOiB0aGlzLm5vbmNlcy5oYXMocy5ub25jZSkgPyAoY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIGR1cGxpY2F0ZSBldmVudDpcIiwgcyksICExKSA6ICh0aGlzLm5vbmNlcy5hZGQocy5ub25jZSksICEwKSwgdGhpcy5ldmVudFRhcmdldHMgPSB7fSwgdGhpcy5ub25jZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpLCB0aGlzLmZvcm1JZCA9IHIsIHRoaXMuYmFzZVVybCA9IGUsIHRoaXMuZm9ybUNhbGxiYWNrcyA9IG4sIHRoaXMuaW50ZXJuYWxDYWxsYmFja3MgPSBpO1xuICB9XG59XG5jb25zdCBNZSA9ICh0KSA9PiBuZXcgVVJMKHQpLm9yaWdpbjtcbmFzeW5jIGZ1bmN0aW9uIGxvKHQsIHIpIHtcbiAgY29uc3QgbiA9IGF3YWl0IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWU6IHQsXG4gICAgZGVidWc6ICExLFxuICAgIGNoaWxkT3JpZ2luOiByXG4gIH0pLnByb21pc2UsIGkgPSBhd2FpdCBhcihuKTtcbiAgaWYgKCFjcihuLCBpKSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJHb3QgaW52YWxpZCBDREUgY29ubmVjdGlvbiBvYmplY3RcIik7XG4gIHJldHVybiBuO1xufVxuY2xhc3MgZm8ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgfVxuICBhZGRDb25uZWN0aW9uKHIsIGUpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zLnNldChyLCBlKTtcbiAgfVxuICBnZXRDb25uZWN0aW9uKCkge1xuICAgIGNvbnN0IHIgPSB0aGlzLmNvbm5lY3Rpb25zLnZhbHVlcygpLm5leHQoKS52YWx1ZTtcbiAgICBpZiAoIXIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb25uZWN0aW9uIG5vdCBmb3VuZFwiKTtcbiAgICByZXR1cm4gcjtcbiAgfVxuICBnZXRBbGxDb25uZWN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9ucztcbiAgfVxufVxuY29uc3QgcG8gPSAodCwgciwgZSkgPT4ge1xuICBjb25zdCB7IHN0cmlwZVBSOiBuIH0gPSB0O1xuICBuLnB1Ymxpc2hlci5zdWJzY3JpYmUoKGkpID0+IHtcbiAgICBpZiAoaS5pc1N1Y2Nlc3MpIHtcbiAgICAgIGNvbnN0IHMgPSBpLmxvYWRlZFZhbHVlLCBhID0gcy5pc0F2YWlsYWJsZSAmJiBzLmF2YWlsYWJsZVByb3ZpZGVycy5hcHBsZVBheSwgYyA9IHMuaXNBdmFpbGFibGUgJiYgcy5hdmFpbGFibGVQcm92aWRlcnMuZ29vZ2xlUGF5LCBsID0ge1xuICAgICAgICBhcHBsZV9wYXk6IHtcbiAgICAgICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiBhLFxuICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHUpID0+IHtcbiAgICAgICAgICAgIGEgJiYgTGUoXCJhcHBsZV9wYXlcIiwgcywgciwgZSwgdSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnb29nbGVfcGF5OiB7XG4gICAgICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgICAgICBpc0F2YWlsYWJsZTogYyxcbiAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jICh1KSA9PiB7XG4gICAgICAgICAgICBjICYmIExlKFwiZ29vZ2xlX3BheVwiLCBzLCByLCBlLCB1KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBlLmdldC5vblBheW1lbnRSZXF1ZXN0TG9hZChsKTtcbiAgICB9XG4gIH0pO1xufSwgTGUgPSAodCwgciwgZSwgbiwgaSkgPT4geC5zdHJpcGVQUi5ydW4oe1xuICBjb250ZXh0OiBlLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IHJ0KGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgdCksXG4gIG5vbkNkZUZvcm1JbnB1dHM6IGRlKGUuZm9ybURpdiksXG4gIGZvcm1DYWxsYmFja3M6IG4sXG4gIGN1c3RvbVBhcmFtczogeyBwcm92aWRlcjogdCwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogaSA9PSBudWxsID8gdm9pZCAwIDogaS5vdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0sXG4gIGluaXRSZXN1bHQ6IHJcbn0pLCBGZSA9IFwiVGhlIHNlY3VyZSBmb3JtIGZhaWxlZCB0byBsb2FkIHByb3Blcmx5LiBQbGVhc2UgY2hlY2sgeW91ciBpbnRlcm5ldCBjb25uZWN0aW9uLCBvciB0cnkgYWdhaW4gbGF0ZXIuXCIsIHsgbG9nX186IGosIGVycl9fOiBzZSB9ID0gQShcIm9wLWZvcm1cIiksIFIgPSBjbGFzcyBSIHtcbiAgY29uc3RydWN0b3Iocikge1xuICAgIHRoaXMuY2RlTG9hZEV2ZW50ID0gbmV3IEooKSwgdGhpcy5hbnlDZGVDb25uID0gbmV3IEooKSwgdGhpcy5jb250ZXh0ID0gbmV3IEooKSwgdGhpcy5pbml0Rmxvd3MgPSBhbygpLCB0aGlzLnN0YXJ0Rm9ybUluaXQgPSBhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBqKFwiSW5pdGlhbGl6aW5nIE9wZW5QYXkgZm9ybTpcIiksIGooXCLilJwgV2FpdGluZyBmb3IgQ0RFIGxvYWQgZXZlbnQuLi5cIik7XG4gICAgICAgIGNvbnN0IGUgPSBhd2FpdCB0aGlzLmNkZUxvYWRFdmVudC53YWl0Rm9yTG9hZCh7XG4gICAgICAgICAgdGltZW91dFNlYzogMTIwLFxuICAgICAgICAgIHRpbWVvdXRFcnJNc2c6IEZlXG4gICAgICAgIH0pO1xuICAgICAgICBqKFwi4pScIENERSBsb2FkIGV2ZW50IHJlY2VpdmVkXCIpLCBqKFwi4pScIFdhaXRpbmcgZm9yIENERSBjb25uZWN0aW9uLi4uXCIpO1xuICAgICAgICBjb25zdCBuID0gYXdhaXQgdGhpcy5hbnlDZGVDb25uLndhaXRGb3JMb2FkKHtcbiAgICAgICAgICB0aW1lb3V0U2VjOiAxMjAsXG4gICAgICAgICAgdGltZW91dEVyck1zZzogRmVcbiAgICAgICAgfSk7XG4gICAgICAgIGooXCLilJwgQ0RFIGNvbm5lY3Rpb24gcmVjZWl2ZWRcIiksIGooXCLilJwgQ3JlYXRpbmcgT0pTIGNvbnRleHQsIHNldHRpbmcgdXAgaGFuZGxlcnMuLi5cIik7XG4gICAgICAgIGNvbnN0IGkgPSBSLmJ1aWxkT2pzRmxvd0NvbnRleHQoXG4gICAgICAgICAgdGhpcy5jb25maWcsXG4gICAgICAgICAgZSxcbiAgICAgICAgICBuLFxuICAgICAgICAgIHRoaXMuZ2V0Rm9ybURpdigpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY29udGV4dC5zZXQoaSksIHBvKHRoaXMuaW5pdEZsb3dzLCBpLCB0aGlzLmZvcm1DYWxsYmFja3MpLCBqKFwi4pScIFN0YXJ0aW5nIE9KUyBpbml0IGZsb3dzLi4uXCIpLCBhd2FpdCBzbyh0aGlzLmluaXRGbG93cywgaSwgdGhpcy5mb3JtQ2FsbGJhY2tzKSwgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkxvYWQoZS50b3RhbEFtb3VudEF0b21zLCBlLmN1cnJlbmN5KSwgaihcIuKVsCBEb25lIGluaXRpYWxpemluZyBPSlMgZmxvd3MuXCIpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zdCBuID0gVShlKTtcbiAgICAgICAgc2UoXCLilbAgRXJyb3IgaW5pdGlhbGl6aW5nIE9QIGZvcm06XCIsIG4pLCB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uTG9hZEVycm9yKG4pO1xuICAgICAgfVxuICAgIH0sIHRoaXMuc2V0Rm9ybUhlaWdodCA9IChlKSA9PiB7XG4gICAgICB0aGlzLmZvcm1Qcm9wZXJ0aWVzLmhlaWdodCA9IGUsIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzICYmIE9iamVjdC52YWx1ZXModGhpcy5yZWdpc3RlcmVkRWxlbWVudHMpLmZvckVhY2goKG4pID0+IHtcbiAgICAgICAgbiAmJiAobi5ub2RlLnN0eWxlLmhlaWdodCA9IGUpO1xuICAgICAgfSk7XG4gICAgfSwgdGhpcy5vbkNkZUxvYWRlZCA9IChlKSA9PiB7XG4gICAgICB0aGlzLmNkZUxvYWRFdmVudC5jdXJyZW50LmlzU3VjY2VzcyB8fCB0aGlzLmNkZUxvYWRFdmVudC5zZXQoZSk7XG4gICAgfSwgdGhpcy5vbkNkZUxvYWRFcnJvciA9IChlKSA9PiB7XG4gICAgICB0aGlzLmNkZUxvYWRFdmVudC5jdXJyZW50LmlzU3VjY2VzcyB8fCB0aGlzLmNkZUxvYWRFdmVudC50aHJvdyhuZXcgRXJyb3IoZSksIGUpO1xuICAgIH0sIHRoaXMuY3JlYXRlRWxlbWVudCA9IChlLCBuID0ge30pID0+IHtcbiAgICAgIGlmICghdGhpcy5jb25maWcpIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgZm9ybSBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgICBjb25zdCBpID0gRXQucGFyc2UoZSksIHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpLCBhID0gdGhpcy5idWlsZFF1ZXJ5U3RyaW5nKG4pO1xuICAgICAgcy5uYW1lID0gYCR7aX0tZWxlbWVudGA7XG4gICAgICBjb25zdCBjID0gbmV3IFVSTChgL2FwcC92MS8ke3MubmFtZX0vYCwgdGhpcy5jb25maWcuYmFzZVVybCk7XG4gICAgICByZXR1cm4gYy5zZWFyY2ggPSBhLnRvU3RyaW5nKCksIHMuc3JjID0gYy5ocmVmLCBzLnN0eWxlLmJvcmRlciA9IFwibm9uZVwiLCBzLnN0eWxlLndpZHRoID0gXCIxMDAlXCIsIHRoaXMucmVnaXN0ZXJJZnJhbWUoaSwgcyk7XG4gICAgfSwgdGhpcy5yZWdpc3RlcklmcmFtZSA9IChlLCBuKSA9PiB7XG4gICAgICBjb25zdCBpID0ge1xuICAgICAgICB0eXBlOiBlLFxuICAgICAgICBub2RlOiBuLFxuICAgICAgICBtb3VudDogKHMpID0+IHtcbiAgICAgICAgICB2YXIgYTtcbiAgICAgICAgICByZXR1cm4gKGEgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHMpKSA9PSBudWxsID8gdm9pZCAwIDogYS5hcHBlbmRDaGlsZChuKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3RUb0VsZW1lbnQoeyB0eXBlOiBpLnR5cGUsIG5vZGU6IGkubm9kZSB9KSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgfHwgKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0ge1xuICAgICAgICBbTC5DQVJEXTogdm9pZCAwLFxuICAgICAgICBbTC5DQVJEX05VTUJFUl06IHZvaWQgMCxcbiAgICAgICAgW0wuQ0FSRF9FWFBJUlldOiB2b2lkIDAsXG4gICAgICAgIFtMLkNBUkRfQ1ZDXTogdm9pZCAwXG4gICAgICB9KSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHNbZV0gPSBpLCBpO1xuICAgIH0sIHRoaXMuYnVpbGRRdWVyeVN0cmluZyA9IChlKSA9PiB7XG4gICAgICBjb25zdCBuID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgICAgcmV0dXJuIG4uYXBwZW5kKFwicmVmZXJlclwiLCB0aGlzLnJlZmVycmVyKSwgbi5hcHBlbmQoXCJmb3JtSWRcIiwgdGhpcy5mb3JtSWQpLCBlLnN0eWxlcyAmJiBuLmFwcGVuZChcInN0eWxlc1wiLCBpcihlLnN0eWxlcykpLCBuLmFwcGVuZChcInNlY3VyZVRva2VuXCIsIHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4pLCBuO1xuICAgIH0sIHRoaXMuY29ubmVjdFRvRWxlbWVudCA9IChlKSA9PiB7XG4gICAgICBsbyhlLm5vZGUpLnRoZW4oKG4pID0+IHtcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uTWFuYWdlci5hZGRDb25uZWN0aW9uKGUudHlwZSwgbiksIHRoaXMuYW55Q2RlQ29ubi5jdXJyZW50LmlzU3VjY2VzcyB8fCB0aGlzLmFueUNkZUNvbm4uc2V0KG4pO1xuICAgICAgfSkuY2F0Y2goKG4pID0+IHNlKFwiW0ZPUk1dIEVycm9yIGNvbm5lY3RpbmcgdG8gQ0RFIGlmcmFtZVwiLCBuKSk7XG4gICAgfSwgdGhpcy5nZXRGb3JtRGl2ID0gKCkgPT4gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmZvcm1UYXJnZXQpID8/IGRvY3VtZW50LmJvZHksIHRoaXMuc3VibWl0Q2FyZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGUgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICBpZiAoIWUpIHtcbiAgICAgICAgc2UoXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIHN1Ym1pdHRpbmcuXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB4LmNvbW1vbkNDLnJ1bih7XG4gICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcnQoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBcImNyZWRpdF9jYXJkXCIpLFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBkZShlLmZvcm1EaXYpLFxuICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgIGN1cnJlbnRDZGVDb25uZWN0aW9uczogdGhpcy5jb25uZWN0aW9uTWFuYWdlci5nZXRBbGxDb25uZWN0aW9ucygpXG4gICAgICAgIH0sXG4gICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAvLyBUaGlzIGZsb3cgcmVxdWlyZXMgbm8gaW5pdGlhbGl6YXRpb25cbiAgICAgIH0pO1xuICAgIH0sIHRoaXMuc3VibWl0ID0gdGhpcy5zdWJtaXRDYXJkLCB0aGlzLmRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgICBmb3IgKGNvbnN0IGUgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA/PyB7fSkpXG4gICAgICAgIGUgJiYgZS5ub2RlLnJlbW92ZSgpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpO1xuICAgIH0sIFIuYXNzaWduQXNTaW5nbGV0b24odGhpcyksIHRoaXMub2pzVmVyc2lvbiA9IFwiMC4xLjE2XCIsIHRoaXMub2pzUmVsZWFzZVZlcnNpb24gPSBcImxvY2FsX2J1aWxkXCIsIHRoaXMuYmFzZVVybCA9IHIuYmFzZVVybCA/PyBcImh0dHBzOi8vY2RlLmdldG9wZW5wYXkuY29tXCIsIHRoaXMuY29uZmlnID0geyAuLi5yLCBiYXNlVXJsOiB0aGlzLmJhc2VVcmwgfSwgdGhpcy5mb3JtQ2FsbGJhY2tzID0gbGUuZnJvbU9iamVjdChyKSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSBudWxsLCB0aGlzLmZvcm1JZCA9IGBvcGpzLWZvcm0tJHt3aW5kb3cuY3J5cHRvLnJhbmRvbVVVSUQoKX1gLCB0aGlzLnJlZmVycmVyID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbiwgdGhpcy5mb3JtVGFyZ2V0ID0gci5mb3JtVGFyZ2V0ID8/IFwiYm9keVwiLCB0aGlzLmZvcm1Qcm9wZXJ0aWVzID0geyBoZWlnaHQ6IFwiMXB4XCIgfSwgdGhpcy5jb25uZWN0aW9uTWFuYWdlciA9IG5ldyBmbygpLCB0aGlzLmV2ZW50SGFuZGxlciA9IG5ldyB1byh0aGlzLmZvcm1JZCwgdGhpcy5iYXNlVXJsLCB0aGlzLmZvcm1DYWxsYmFja3MsIHtcbiAgICAgIHNldEZvcm1IZWlnaHQ6IHRoaXMuc2V0Rm9ybUhlaWdodCxcbiAgICAgIG9uQ2RlTG9hZGVkOiB0aGlzLm9uQ2RlTG9hZGVkLFxuICAgICAgb25DZGVMb2FkRXJyb3I6IHRoaXMub25DZGVMb2FkRXJyb3JcbiAgICB9KSwgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpLCB0aGlzLnN0YXJ0Rm9ybUluaXQoKTtcbiAgfVxuICBnZXQgY2hlY2tvdXRTZWN1cmVUb2tlbigpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbjtcbiAgfVxufTtcblIub2pzRmxvd3MgPSB4LCBSLmFzc2lnbkFzU2luZ2xldG9uID0gKHIpID0+IHtcbiAgaWYgKFIuZ2V0SW5zdGFuY2UoKSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJPcGVuUGF5IGluc3RhbmNlIGFscmVhZHkgZXhpc3RzLiBPbmx5IG9uZSBpbnN0YW5jZSBpcyBhbGxvd2VkLlwiKTtcbiAgd2luZG93Lm9qcyA9IHI7XG59LCBSLmdldEluc3RhbmNlID0gKCkgPT4gd2luZG93Lm9qcyA/PyBudWxsLCBSLmJ1aWxkT2pzRmxvd0NvbnRleHQgPSAociwgZSwgbiwgaSkgPT4gKHtcbiAgYmFzZVVybDogbmV3IFVSTChyLmJhc2VVcmwgPz8gZnQpLm9yaWdpbixcbiAgZm9ybURpdjogaSxcbiAgZWxlbWVudHNTZXNzaW9uSWQ6IGUuc2Vzc2lvbklkLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiBlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gIGFueUNkZUNvbm5lY3Rpb246IG4sXG4gIGN1c3RvbUluaXRQYXJhbXM6IHIuY3VzdG9tSW5pdFBhcmFtcyA/PyB7fVxufSk7XG5sZXQgeGUgPSBSO1xuXG5jb25zdCB1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3MgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgZm9ybUNhbGxiYWNrc1JlZiA9IHVzZVJlZihwcm9wcyk7XG4gIGNvbnN0IGNiID0gZm9ybUNhbGxiYWNrc1JlZi5jdXJyZW50O1xuICBjYi5vbkxvYWQgPSB1c2VNZW1vKCgpID0+IHByb3BzLm9uTG9hZCwgW3Byb3BzLm9uTG9hZF0pO1xuICBjYi5vbkxvYWRFcnJvciA9IHVzZU1lbW8oKCkgPT4gcHJvcHMub25Mb2FkRXJyb3IsIFtwcm9wcy5vbkxvYWRFcnJvcl0pO1xuICBjYi5vblZhbGlkYXRpb25FcnJvciA9IHVzZU1lbW8oKCkgPT4gcHJvcHMub25WYWxpZGF0aW9uRXJyb3IsIFtwcm9wcy5vblZhbGlkYXRpb25FcnJvcl0pO1xuICBjYi5vbkZvY3VzID0gdXNlTWVtbygoKSA9PiBwcm9wcy5vbkZvY3VzLCBbcHJvcHMub25Gb2N1c10pO1xuICBjYi5vbkJsdXIgPSB1c2VNZW1vKCgpID0+IHByb3BzLm9uQmx1ciwgW3Byb3BzLm9uQmx1cl0pO1xuICBjYi5vbkNoYW5nZSA9IHVzZU1lbW8oKCkgPT4gcHJvcHMub25DaGFuZ2UsIFtwcm9wcy5vbkNoYW5nZV0pO1xuICBjYi5vbkNoZWNrb3V0U3RhcnRlZCA9IHVzZU1lbW8oKCkgPT4gcHJvcHMub25DaGVja291dFN0YXJ0ZWQsIFtwcm9wcy5vbkNoZWNrb3V0U3RhcnRlZF0pO1xuICBjYi5vbkNoZWNrb3V0U3VjY2VzcyA9IHVzZU1lbW8oKCkgPT4gcHJvcHMub25DaGVja291dFN1Y2Nlc3MsIFtwcm9wcy5vbkNoZWNrb3V0U3VjY2Vzc10pO1xuICBjYi5vblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3MgPSB1c2VNZW1vKFxuICAgICgpID0+IHByb3BzLm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyxcbiAgICBbcHJvcHMub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzXVxuICApO1xuICBjYi5vbkNoZWNrb3V0RXJyb3IgPSB1c2VNZW1vKCgpID0+IHByb3BzLm9uQ2hlY2tvdXRFcnJvciwgW3Byb3BzLm9uQ2hlY2tvdXRFcnJvcl0pO1xuICBjYi5vblBheW1lbnRSZXF1ZXN0TG9hZCA9IHVzZU1lbW8oKCkgPT4gcHJvcHMub25QYXltZW50UmVxdWVzdExvYWQsIFtwcm9wcy5vblBheW1lbnRSZXF1ZXN0TG9hZF0pO1xuICByZXR1cm4gZm9ybUNhbGxiYWNrc1JlZi5jdXJyZW50O1xufTtcblxuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGxvYzogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIG1zZzogeiQxLnN0cmluZygpLFxuICB1cmw6IHokMS5zdHJpbmcoKVxufSk7XG56JDEuYXJyYXkoUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSk7XG5jb25zdCBab2RGaWVsZEVycm9yID0geiQxLm9iamVjdCh7XG4gIGNvZGU6IHokMS5zdHJpbmcoKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBwYXRoOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG56JDEuYXJyYXkoWm9kRmllbGRFcnJvcik7XG5jb25zdCBtYWtlQ2FsbGJhY2tTYWZlID0gKGNhbGxiYWNrTmFtZSwgZm4sIGVycm9yTG9nZ2VyKSA9PiB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZm4oLi4uYXJncyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycm9yTG9nZ2VyKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHtjYWxsYmFja05hbWV9KTpgLCBlcnJvcik7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgfTtcbn07XG5cbmNvbnN0IFJlcXVpcmVkU3RyaW5nID0geiQxLnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBgQ2Fubm90IGJlIGJsYW5rYCB9KTtcbmNvbnN0IE9wdGlvbmFsU3RyaW5nID0geiQxLnN0cmluZygpLnRyaW0oKS5vcHRpb25hbCgpO1xuY29uc3QgbnVsbE9yVW5kZWZPciQxID0gKHpUeXBlKSA9PiB6JDEubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG52YXIgRmllbGROYW1lID0gLyogQF9fUFVSRV9fICovICgoRmllbGROYW1lMikgPT4ge1xuICBGaWVsZE5hbWUyW1wiRklSU1RfTkFNRVwiXSA9IFwiZmlyc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJMQVNUX05BTUVcIl0gPSBcImxhc3ROYW1lXCI7XG4gIEZpZWxkTmFtZTJbXCJFTUFJTFwiXSA9IFwiZW1haWxcIjtcbiAgRmllbGROYW1lMltcIlpJUF9DT0RFXCJdID0gXCJ6aXBDb2RlXCI7XG4gIEZpZWxkTmFtZTJbXCJDSVRZXCJdID0gXCJjaXR5XCI7XG4gIEZpZWxkTmFtZTJbXCJTVEFURVwiXSA9IFwic3RhdGVcIjtcbiAgRmllbGROYW1lMltcIkNPVU5UUllcIl0gPSBcImNvdW50cnlcIjtcbiAgRmllbGROYW1lMltcIkFERFJFU1NcIl0gPSBcImFkZHJlc3NcIjtcbiAgRmllbGROYW1lMltcIlBIT05FXCJdID0gXCJwaG9uZVwiO1xuICBGaWVsZE5hbWUyW1wiUFJPTU9USU9OX0NPREVcIl0gPSBcInByb21vdGlvbkNvZGVcIjtcbiAgcmV0dXJuIEZpZWxkTmFtZTI7XG59KShGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgRmllbGROYW1lRW51bSA9IHokMS5uYXRpdmVFbnVtKEZpZWxkTmFtZSk7XG52YXIgUHJpdmF0ZUZpZWxkTmFtZSA9IC8qIEBfX1BVUkVfXyAqLyAoKFByaXZhdGVGaWVsZE5hbWUyKSA9PiB7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmROdW1iZXJcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZEV4cGlyeVwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkQ3ZjXCI7XG4gIHJldHVybiBQcml2YXRlRmllbGROYW1lMjtcbn0pKFByaXZhdGVGaWVsZE5hbWUgfHwge30pO1xuY29uc3QgUHJpdmF0ZUZpZWxkTmFtZUVudW0gPSB6JDEubmF0aXZlRW51bShQcml2YXRlRmllbGROYW1lKTtcbmNvbnN0IEFsbEZpZWxkTmFtZXMgPSB6JDEudW5pb24oW0ZpZWxkTmFtZUVudW0sIFByaXZhdGVGaWVsZE5hbWVFbnVtXSk7XG52YXIgRWxlbWVudFR5cGVFbnVtID0gLyogQF9fUFVSRV9fICovICgoRWxlbWVudFR5cGVFbnVtMikgPT4ge1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRFwiXSA9IFwiY2FyZFwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9OVU1CRVJcIl0gPSBcImNhcmQtbnVtYmVyXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX0VYUElSWVwiXSA9IFwiY2FyZC1leHBpcnlcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfQ1ZDXCJdID0gXCJjYXJkLWN2Y1wiO1xuICByZXR1cm4gRWxlbWVudFR5cGVFbnVtMjtcbn0pKEVsZW1lbnRUeXBlRW51bSB8fCB7fSk7XG56JDEubmF0aXZlRW51bShFbGVtZW50VHlwZUVudW0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogbnVsbE9yVW5kZWZPciQxKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBQYXltZW50TWV0aG9kTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBjYXJkTnVtYmVyOiBPcHRpb25hbFN0cmluZyxcbiAgZXhwaXJ5OiBPcHRpb25hbFN0cmluZyxcbiAgY3ZjOiBPcHRpb25hbFN0cmluZ1xufSk7XG56JDEub2JqZWN0KHtcbiAgYmFja2dyb3VuZENvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgY29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250RmFtaWx5OiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFNpemU6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250V2VpZ2h0OiBPcHRpb25hbFN0cmluZyxcbiAgbWFyZ2luOiBPcHRpb25hbFN0cmluZyxcbiAgcGFkZGluZzogT3B0aW9uYWxTdHJpbmcsXG4gIGxldHRlclNwYWNpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsaW5lSGVpZ2h0OiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBFdmVudFR5cGUgPSB6JDEuZW51bShbXG4gIC8vIEVsZW1lbnQgLT4gRm9ybVxuICBcIkxBWU9VVFwiLFxuICBcIkxPQURFRFwiLFxuICBcIkJMVVJcIixcbiAgXCJGT0NVU1wiLFxuICBcIkNIQU5HRVwiLFxuICBcIlRPS0VOSVpFX1NUQVJURURcIixcbiAgXCJDSEVDS09VVF9TVEFSVEVEXCIsXG4gIFwiUEFZTUVOVF9GTE9XX1NUQVJURURcIixcbiAgXCJUT0tFTklaRV9TVUNDRVNTXCIsXG4gIFwiQ0hFQ0tPVVRfU1VDQ0VTU1wiLFxuICBcIkxPQURfRVJST1JcIixcbiAgXCJWQUxJREFUSU9OX0VSUk9SXCIsXG4gIFwiVE9LRU5JWkVfRVJST1JcIixcbiAgXCJDSEVDS09VVF9FUlJPUlwiLFxuICBcIlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1NcIixcbiAgLy8gRm9ybSAtPiBFbGVtZW50XG4gIFwiVE9LRU5JWkVcIixcbiAgXCJDSEVDS09VVFwiLFxuICBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXG5dKTtcbmNvbnN0IEdlbmVyaWNFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJUT0tFTklaRV9TVEFSVEVEXCIsIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiXSk7XG5jb25zdCBHZW5lcmljRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7IHR5cGU6IEdlbmVyaWNFdmVudFR5cGUgfSk7XG5jb25zdCBJbnB1dEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkJMVVJcIiwgXCJGT0NVU1wiLCBcIkNIQU5HRVwiXSk7XG5jb25zdCBJbnB1dEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBJbnB1dEV2ZW50VHlwZSxcbiAgZWxlbWVudFR5cGU6IFByaXZhdGVGaWVsZE5hbWVFbnVtLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJMT0FEX0VSUk9SXCIsIFwiVE9LRU5JWkVfRVJST1JcIiwgXCJDSEVDS09VVF9FUlJPUlwiXSk7XG5jb25zdCBFcnJvckV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBFcnJvckV2ZW50VHlwZSxcbiAgbWVzc2FnZTogUmVxdWlyZWRTdHJpbmcsXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVkFMSURBVElPTl9FUlJPUlwiXSk7XG5jb25zdCBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlLFxuICBlbGVtZW50VHlwZTogQWxsRmllbGROYW1lcyxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG5jb25zdCBMYXlvdXRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTEFZT1VUKSxcbiAgaGVpZ2h0OiBSZXF1aXJlZFN0cmluZ1xufSk7XG5jb25zdCBMb2FkZWRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTE9BREVEKSxcbiAgc2Vzc2lvbklkOiBSZXF1aXJlZFN0cmluZyxcbiAgdG90YWxBbW91bnRBdG9tczogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogT3B0aW9uYWxTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHokMS5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QkMSlcbn0pO1xuY29uc3QgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlBBWU1FTlRfRkxPV19TVEFSVEVEKSxcbiAgbmV4dEFjdGlvbk1ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogeiQxLmFueSgpLm9wdGlvbmFsKCksXG4gIHN0YXJ0UEZNZXRhZGF0YTogeiQxLm9wdGlvbmFsKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5TRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTKSxcbiAgcGF5bWVudE1ldGhvZElkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgUmVxdWlyZWRGb3JtRmllbGRzID0geiQxLm9iamVjdCh7XG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJ6aXBDb2RlXCIgLyogWklQX0NPREUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgUFJGb3JtRmllbGRzID0geiQxLm9iamVjdCh7XG4gIFtcImVtYWlsXCIgLyogRU1BSUwgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IFN1Ym1pdEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlRPS0VOSVpFXCIsIFwiQ0hFQ0tPVVRcIiwgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIl0pO1xuY29uc3QgU3VibWl0RXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IFN1Ym1pdEV2ZW50VHlwZSxcbiAgc2Vzc2lvbklkOiBSZXF1aXJlZFN0cmluZyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogeiQxLmFueSgpLm9wdGlvbmFsKCksXG4gIGRvTm90VXNlTGVnYWN5Q0NGbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nQ0NQTUlkOiBPcHRpb25hbFN0cmluZ1xufSkuZXh0ZW5kKFJlcXVpcmVkRm9ybUZpZWxkcy5zaGFwZSk7XG5jb25zdCBUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uVE9LRU5JWkVfU1VDQ0VTUyksXG4gIGlzUmVhZHlGb3JDaGVja291dDogeiQxLmJvb2xlYW4oKVxufSk7XG5jb25zdCBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uQ0hFQ0tPVVRfU1VDQ0VTUyksXG4gIGludm9pY2VVcmxzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uSWRzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJJZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IEV2ZW50UGF5bG9hZCA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgR2VuZXJpY0V2ZW50UGF5bG9hZCxcbiAgSW5wdXRFdmVudFBheWxvYWQsXG4gIEVycm9yRXZlbnRQYXlsb2FkLFxuICBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQsXG4gIExheW91dEV2ZW50UGF5bG9hZCxcbiAgTG9hZGVkRXZlbnRQYXlsb2FkLFxuICBTdWJtaXRFdmVudFBheWxvYWQsXG4gIFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICBQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQsXG4gIFNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkXG5dKTtcbnokMS5vYmplY3Qoe1xuICBwYXlsb2FkOiBFdmVudFBheWxvYWQsXG4gIG5vbmNlOiBSZXF1aXJlZFN0cmluZyxcbiAgZm9ybUlkOiBSZXF1aXJlZFN0cmluZyxcbiAgZWxlbWVudElkOiBSZXF1aXJlZFN0cmluZ1xufSk7XG56JDEub2JqZWN0KHtcbiAgYW1vdW50QXRvbTogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogUmVxdWlyZWRTdHJpbmdcbn0pO1xueiQxLmVudW0oW1wiYXBwbGVfcGF5XCIsIFwiZ29vZ2xlX3BheVwiXSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RzOiB6JDEuYXJyYXkoUGF5bWVudE1ldGhvZE1pbmltYWwpXG59KTtcbmNvbnN0IEZpZWxkVmFsaWRhdGlvbkVycm9yID0geiQxLm9iamVjdCh7XG4gIGVsZW1lbnRUeXBlOiB6JDEuc3RyaW5nKCksXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlID0geiQxLm9iamVjdCh7XG4gIHN1Y2Nlc3M6IHokMS5saXRlcmFsKGZhbHNlKSxcbiAgZXJyb3JfdHlwZTogeiQxLmxpdGVyYWwoXCJ2YWxpZGF0aW9uX2Vycm9yXCIpLFxuICBlcnJvcnM6IHokMS5hcnJheShGaWVsZFZhbGlkYXRpb25FcnJvcilcbn0pO1xueiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInN1Y2Nlc3NcIiwgW1xuICB6JDEub2JqZWN0KHsgc3VjY2VzczogeiQxLmxpdGVyYWwodHJ1ZSkgfSksXG4gIFRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2Vcbl0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzXG59KTtcbnokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5lbnVtKFtcInN1Y2Nlc3NcIiAvKiBTVUNDRVNTICovLCBcImZhaWx1cmVcIiAvKiBGQUlMVVJFICovLCBcImNhbmNlbGxlZFwiIC8qIENBTkNFTExFRCAqL10pXG59KTtcbnokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogeiQxLnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogeiQxLnN0cmluZygpLFxuICBjb25zZW50X2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxufSk7XG5cbmNvbnN0IGNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nID0gKHN0eWxlcykgPT4ge1xuICBjb25zdCBzZXJpYWxpemVkU3R5bGVzID0gSlNPTi5zdHJpbmdpZnkoc3R5bGVzKTtcbiAgcmV0dXJuIHNlcmlhbGl6ZWRTdHlsZXM7XG59O1xuXG5jb25zdCBudWxsT3JVbmRlZk9yID0gKHpUeXBlKSA9PiB6JDEubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG56JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBDYW5ub3QgYmUgYmxhbmtgIH0pO1xueiQxLm9iamVjdCh7XG4gIGNkZV9yZXNwb25zZV90eXBlOiB6JDEubGl0ZXJhbChcImVycm9yXCIpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xueiQxLmVudW0oW1widXNkXCIsIFwiYnJsXCJdKTtcbmNvbnN0IENvdXBvbk1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBhbW91bnRfYXRvbV9vZmY6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpKSxcbiAgcGVyY2VudF9vZmY6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpKSxcbiAgY3VycmVuY3k6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgZHVyYXRpb246IHokMS5zdHJpbmcoKSxcbiAgZHVyYXRpb25faW5fbW9udGhzOiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKSlcbn0pO1xuY29uc3QgTGluZUl0ZW0gPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgcHJpY2VfaWQ6IHokMS5zdHJpbmcoKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKCkuaW50KClcbn0pO1xuY29uc3QgQnJhbmRTZXR0aW5ncyA9IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpO1xuY29uc3QgQnJhbmQgPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBzZXR0aW5nczogbnVsbE9yVW5kZWZPcihCcmFuZFNldHRpbmdzKVxufSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IG51bGxPclVuZGVmT3IoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKClcbn0pO1xuY29uc3QgU3Vic2NyaXB0aW9uTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBpZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpLmludCgpKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1zOiB6JDEuYXJyYXkoU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwpLFxuICB0cmlhbF9zdGFydDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICB0cmlhbF9lbmQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKVxufSk7XG5jb25zdCBJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKVxufSk7XG5jb25zdCBJbnZvaWNlTGluZUl0ZW1NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIGFtb3VudF9hdG9tX2NvbnNpZGVyaW5nX2Rpc2NvdW50X2FwcGxpZWQ6IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkoSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBEaXNjb3VudE1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgY291cG9uOiBDb3Vwb25NaW5pbWFsXG59KTtcbmNvbnN0IEludm9pY2VNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRpc2NvdW50czogeiQxLmFycmF5KERpc2NvdW50TWluaW1hbCksXG4gIGhvc3RlZF9pbnZvaWNlX3VybDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsaW5lczogeiQxLmFycmF5KEludm9pY2VMaW5lSXRlbU1pbmltYWwpLFxuICByZW1haW5pbmdfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdGF4X2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRvdGFsX2Rpc2NvdW50X2Ftb3VudF9hdG9tczogeiQxLmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbClcbn0pO1xuY29uc3QgQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGNyZWF0ZWQ6IHokMS5hcnJheShTdWJzY3JpcHRpb25NaW5pbWFsKSxcbiAgaW52b2ljZXM6IHokMS5hcnJheShJbnZvaWNlTWluaW1hbClcbn0pO1xuY29uc3QgUHJldmlld0NoZWNrb3V0UmVzcG9uc2UgPSB6JDEub2JqZWN0KHtcbiAgcHJldmlldzogQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsLFxuICBwcmV2aWV3X3Bvc3RfdHJpYWw6IG51bGxPclVuZGVmT3IoQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsKSxcbiAgY291cG9uczogeiQxLmFycmF5KENvdXBvbk1pbmltYWwpXG59KTtcbmNvbnN0IF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24gPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcIm9wZW5cIiksXG4gIHRva2VuOiB6JDEuc3RyaW5nKCksXG4gIGVtYWlsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShMaW5lSXRlbSksXG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGJyYW5kOiBCcmFuZCxcbiAgc3Vic19wcmV2aWV3OiBudWxsT3JVbmRlZk9yKFByZXZpZXdDaGVja291dFJlc3BvbnNlKSxcbiAgLy8gTnVsbCBpbiBzZXR1cCBtb2RlXG4gIG1ldGhvZHNfYXZhaWxhYmxlOiB6JDEuYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kKVxufSk7XG5jb25zdCBQYXltZW50Rm9ybVByZWZpbGwgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwibW9kZVwiLCBbXG4gIHokMS5vYmplY3Qoe1xuICAgIG1vZGU6IHokMS5saXRlcmFsKFwic2V0dXBcIiksXG4gICAgY3VycmVuY3k6IHokMS5udWxsYWJsZSh6JDEudW5kZWZpbmVkKCkpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKSxcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmVudW0oW1wicGF5bWVudFwiLCBcInN1YnNjcmlwdGlvblwiXSksXG4gICAgY3VycmVuY3k6IHokMS5zdHJpbmcoKVxuICB9KS5leHRlbmQoX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbi5zaGFwZSlcbl0pO1xuY29uc3QgQ29tcGxldGVkRm9ybVByZWZpbGwgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcImNvbXBsZXRlXCIpXG59KTtcbmNvbnN0IEV4cGlyZWRGb3JtUHJlZmlsbCA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiZXhwaXJlZFwiKVxufSk7XG56JDEudW5pb24oW1BheW1lbnRGb3JtUHJlZmlsbCwgQ29tcGxldGVkRm9ybVByZWZpbGwsIEV4cGlyZWRGb3JtUHJlZmlsbF0pO1xueiQxLm9iamVjdCh7XG4gIGxvZ286IHokMS5zdHJpbmcoKSxcbiAgaWNvbjogeiQxLnN0cmluZygpLFxuICBwcmltYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKCksXG4gIHNlY29uZGFyeV9jb2xvcjogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpbnZvaWNlX3VybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25faWRzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJfaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHBheW1lbnRfaW5wdXQ6IHokMS5hbnkoKSxcbiAgLy8gU2hvdWxkIGZvbGxvdyBBbnlQYXltZW50SW5wdXQgZnJvbSBDREVcbiAgY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfemlwX2NvZGU6IHokMS5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfY291bnRyeTogeiQxLnN0cmluZygpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoTGluZUl0ZW0pLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjYW5jZWxfYXRfZW5kOiB6JDEuYm9vbGVhbigpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RfaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKSxcbiAgcmV0dXJuX3VybDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgbG9jOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgbXNnOiB6JDEuc3RyaW5nKCksXG4gIHVybDogeiQxLnN0cmluZygpXG59KTtcbnokMS5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvcik7XG56JDEub2JqZWN0KHtcbiAgbmV3X2N1c3RvbWVyX2VtYWlsOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLm9wdGlvbmFsKCksXG4gIHBheW1lbnRfcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aGVpcl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeiQxLmFycmF5KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgZmllbGRzOiBQUkZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZFxufSk7XG56JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBjY19wbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5yZWNvcmQoeiQxLmFueSgpKTtcblxuZnVuY3Rpb24gZml4UHJvdG8odGFyZ2V0LCBwcm90b3R5cGUpIHtcbiAgdmFyIHNldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuICBzZXRQcm90b3R5cGVPZiA/IHNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG90eXBlKSA6IHRhcmdldC5fX3Byb3RvX18gPSBwcm90b3R5cGU7XG59XG5mdW5jdGlvbiBmaXhTdGFjayh0YXJnZXQsIGZuKSB7XG4gIGlmIChmbiA9PT0gdm9pZCAwKSB7XG4gICAgZm4gPSB0YXJnZXQuY29uc3RydWN0b3I7XG4gIH1cblxuICB2YXIgY2FwdHVyZVN0YWNrVHJhY2UgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcbiAgY2FwdHVyZVN0YWNrVHJhY2UgJiYgY2FwdHVyZVN0YWNrVHJhY2UodGFyZ2V0LCBmbik7XG59XG5cbnZhciBfX2V4dGVuZHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIGV4dGVuZFN0YXRpY3MoZCwgYikge1xuICAgIF9leHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHtcbiAgICAgIF9fcHJvdG9fXzogW11cbiAgICB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGQuX19wcm90b19fID0gYjtcbiAgICB9IHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICBmb3IgKHZhciBwIGluIGIpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG5cbiAgICBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcblxuICAgIGZ1bmN0aW9uIF9fKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7XG4gICAgfVxuXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICB9O1xufSgpO1xuXG4oZnVuY3Rpb24gKF9zdXBlcikge1xuICBfX2V4dGVuZHMoQ3VzdG9tRXJyb3IsIF9zdXBlcik7XG5cbiAgZnVuY3Rpb24gQ3VzdG9tRXJyb3IobWVzc2FnZSwgb3B0aW9ucykge1xuICAgIHZhciBfbmV3VGFyZ2V0ID0gdGhpcy5jb25zdHJ1Y3RvcjtcblxuICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG1lc3NhZ2UsIG9wdGlvbnMpIHx8IHRoaXM7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX3RoaXMsICduYW1lJywge1xuICAgICAgdmFsdWU6IF9uZXdUYXJnZXQubmFtZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgZml4UHJvdG8oX3RoaXMsIF9uZXdUYXJnZXQucHJvdG90eXBlKTtcbiAgICBmaXhTdGFjayhfdGhpcyk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgcmV0dXJuIEN1c3RvbUVycm9yO1xufSkoRXJyb3IpO1xuXG5jb25zdCBjcmVhdGVPanNGbG93TG9nZ2VycyA9IChwcmVmaXgpID0+IHtcbiAgY29uc3QgbG9nID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLmxvZyhgJHtZLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7WS5ib2xkLmdyYXkoYCR7cHJlZml4fWApfVx0YCwgLi4uYXJncyk7XG4gIH07XG4gIGNvbnN0IGVyciA9ICguLi5hcmdzKSA9PiB7XG4gICAgd2luZG93W1wiY29uc29sZVwiXS5lcnJvcihgJHtZLnJlZC5ib2xkKFwib2pzL1wiKX0ke1kuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZyxcbiAgICBlcnIsXG4gICAgbG9nX186IGxvZyxcbiAgICBlcnJfXzogZXJyXG4gIH07XG59O1xuXG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwic3RyaXBlX2xpbmtcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS51bmlvbihbeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksIHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKV0pLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG5cbmNvbnN0IFBSX0xPQURJTkcgPSB7XG4gIGlzTG9hZGluZzogdHJ1ZSxcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgc3RhcnRGbG93IHRyaWdnZXJlZCB3aGlsZSBwYXltZW50IHJlcXVlc3QgaXMgc3RpbGwgbm90IHJlYWR5LiBcbiAgICAgIFlvdSBjYW4gY2hlY2sgdGhlIFwiLmlzTG9hZGluZ1wiIHBhcmFtIHRvIGtub3cgd2hlbiBhIHBheW1lbnQgcmVxdWVzdCBpcyBzdGlsbCBsb2FkaW5nLCBcbiAgICAgIGFuZCBcIi5pc0F2YWlsYWJsZVwiIHRvIGtub3cgaWYgYSBwYXltZW50IHJlcXVlc3QgaXMgYXZhaWxhYmxlLmBcbiAgICApO1xuICB9XG59O1xuXG5jb25zdCB7IGVycl9fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImZvcm0tY2FsbGJhY2tzXCIpO1xuY29uc3QgT3B0aW9uYWxGbiA9IHokMS5mdW5jdGlvbigpLm9wdGlvbmFsKCk7XG5jb25zdCBab2RGb3JtQ2FsbGJhY2tzID0geiQxLm9iamVjdCh7XG4gIG9uRm9jdXM6IE9wdGlvbmFsRm4sXG4gIG9uQmx1cjogT3B0aW9uYWxGbixcbiAgb25DaGFuZ2U6IE9wdGlvbmFsRm4sXG4gIG9uTG9hZDogT3B0aW9uYWxGbixcbiAgb25Mb2FkRXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uVmFsaWRhdGlvbkVycm9yOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0U3RhcnRlZDogT3B0aW9uYWxGbixcbiAgb25DaGVja291dFN1Y2Nlc3M6IE9wdGlvbmFsRm4sXG4gIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogT3B0aW9uYWxGbixcbiAgb25DaGVja291dEVycm9yOiBPcHRpb25hbEZuLFxuICBvblBheW1lbnRSZXF1ZXN0TG9hZDogT3B0aW9uYWxGblxufSk7XG5jbGFzcyBGb3JtQ2FsbGJhY2tzIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLyoqXG4gICAgICogU2V0cyBBTEwgZm9ybSBjYWxsYmFja3MuIE5vdGUgdGhhdCBhbGwgb2xkIGNhbGxiYWNrcyBhcmUgcmVtb3ZlZC5cbiAgICAgKi9cbiAgICB0aGlzLnNldENhbGxiYWNrcyA9IChyYXdDYWxsYmFja3MpID0+IHtcbiAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgICAgIE9iamVjdC5lbnRyaWVzKHJhd0NhbGxiYWNrcykuZm9yRWFjaCgoW2tleSwgcmF3Q2FsbGJhY2tdKSA9PiB7XG4gICAgICAgIGNvbnN0IHNhZmVDYWxsYmFjayA9IG1ha2VDYWxsYmFja1NhZmUoa2V5LCByYXdDYWxsYmFjayA/PyBGb3JtQ2FsbGJhY2tzLk5PT1AsIGVycl9fKTtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2tleV0gPSBzYWZlQ2FsbGJhY2s7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMuX2NhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuTk9PUCA9ICgpID0+IHtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5jcmVhdGVFbXB0eUNhbGxiYWNrcyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHggPSB7fTtcbiAgICAgIE9iamVjdC5rZXlzKFpvZEZvcm1DYWxsYmFja3Mua2V5b2YoKS5lbnVtKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgeFtrZXldID0gRm9ybUNhbGxiYWNrcy5OT09QO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4geDtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5mcm9tT2JqZWN0ID0gKG9iaikgPT4ge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRm9ybUNhbGxiYWNrcygpO1xuICAgICAgaW5zdGFuY2Uuc2V0Q2FsbGJhY2tzKFpvZEZvcm1DYWxsYmFja3MucGFyc2Uob2JqKSk7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHJlYWQtb25seSB2ZXJzaW9uIG9mIHRoZSBjYWxsYmFja3Mgb2JqZWN0LlxuICAgKi9cbiAgZ2V0IGdldCgpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLl9jYWxsYmFja3MgfTtcbiAgfVxufVxuXG5jb25zdCB1c2VQYXltZW50UmVxdWVzdHMgPSAob3JpZ2luYWxPblBheW1lbnRSZXF1ZXN0TG9hZCkgPT4ge1xuICBjb25zdCBbcGF5bWVudFJlcXVlc3RzLCBzZXRQYXltZW50UmVxdWVzdHNdID0gdXNlU3RhdGUoe1xuICAgIGFwcGxlX3BheTogUFJfTE9BRElORyxcbiAgICBnb29nbGVfcGF5OiBQUl9MT0FESU5HXG4gIH0pO1xuICBjb25zdCBvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCA9IHVzZUNhbGxiYWNrKFxuICAgIChwYXltZW50UmVxdWVzdHMyKSA9PiB7XG4gICAgICBzZXRQYXltZW50UmVxdWVzdHMocGF5bWVudFJlcXVlc3RzMik7XG4gICAgICBvcmlnaW5hbE9uUGF5bWVudFJlcXVlc3RMb2FkPy4ocGF5bWVudFJlcXVlc3RzMik7XG4gICAgfSxcbiAgICBbb3JpZ2luYWxPblBheW1lbnRSZXF1ZXN0TG9hZF1cbiAgKTtcbiAgcmV0dXJuIHsgcGF5bWVudFJlcXVlc3RzLCBvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCB9O1xufTtcblxuY29uc3QgRk9STV9UQVJHRVQgPSBcIm9wX29qc19mb3JtXCI7XG5jb25zdCBFbGVtZW50c0Zvcm0gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgW29wRm9ybSwgc2V0T3BGb3JtXSA9IHVzZVN0YXRlKCk7XG4gIGNvbnN0IFtlbGVtZW50c0NvbnRleHRWYWx1ZSwgc2V0RWxlbWVudHNDb250ZXh0VmFsdWVdID0gdXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IHsgcGF5bWVudFJlcXVlc3RzLCBvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCB9ID0gdXNlUGF5bWVudFJlcXVlc3RzKHByb3BzLm9uUGF5bWVudFJlcXVlc3RMb2FkKTtcbiAgY29uc3QgW2xvYWRlZCwgc2V0TG9hZGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3N0cmlwZUxpbmtDdHJsLCBzZXRTdHJpcGVMaW5rQ3RybF0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgZm9ybUNhbGxiYWNrcyA9IHVzZVJlYWN0aXZlRm9ybUNhbGxiYWNrcyh7XG4gICAgLi4ucHJvcHMsXG4gICAgb25QYXltZW50UmVxdWVzdExvYWQ6IG92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkLFxuICAgIG9uTG9hZDogKHRvdGFsQW1vdW50QXRvbXMsIGN1cnJlbmN5KSA9PiB7XG4gICAgICBzZXRMb2FkZWQodHJ1ZSk7XG4gICAgICBwcm9wcy5vbkxvYWQ/Lih0b3RhbEFtb3VudEF0b21zLCBjdXJyZW5jeSk7XG4gICAgfVxuICB9KTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAob3BGb3JtKSByZXR1cm47XG4gICAgY29uc3QgZm9ybSA9IHhlLmdldEluc3RhbmNlKCkgPz8gbmV3IHhlKHtcbiAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHByb3BzLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICBmb3JtVGFyZ2V0OiBgIyR7Rk9STV9UQVJHRVR9YCxcbiAgICAgIGJhc2VVcmw6IHByb3BzLmJhc2VVcmwsXG4gICAgICBjdXN0b21Jbml0UGFyYW1zOiBwcm9wcy5jdXN0b21Jbml0UGFyYW1zLFxuICAgICAgLi4uZm9ybUNhbGxiYWNrc1xuICAgIH0pO1xuICAgIHNldE9wRm9ybShmb3JtKTtcbiAgICBjb25zdCB2YWx1ZSA9IGdldEVsZW1lbnRzQ29udGV4dFZhbHVlKGZvcm0pO1xuICAgIHNldEVsZW1lbnRzQ29udGV4dFZhbHVlKHZhbHVlKTtcbiAgICBmb3JtLmluaXRGbG93cy5zdHJpcGVMaW5rLnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgIHNldFN0cmlwZUxpbmtDdHJsKHJlc3VsdC5sb2FkZWRWYWx1ZS5jb250cm9sbGVyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgW10pO1xuICBpZiAoIW9wRm9ybSkge1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7fSk7XG4gIH1cbiAgY29uc3QgY2hpbGRyZW5Qcm9wcyA9IHtcbiAgICBzdWJtaXQ6IG9wRm9ybS5zdWJtaXRDYXJkLFxuICAgIGFwcGxlUGF5OiBwYXltZW50UmVxdWVzdHMuYXBwbGVfcGF5LFxuICAgIGdvb2dsZVBheTogcGF5bWVudFJlcXVlc3RzLmdvb2dsZV9wYXksXG4gICAgbG9hZGVkLFxuICAgIC8vIERpc2FibGUgZHluYW1pYyBwcmV2aWV3cyBmZWF0dXJlIGZvciBub3dcbiAgICBwcmV2aWV3OiB7XG4gICAgICBhbW91bnQ6IG51bGwsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgZXJyb3I6IG51bGxcbiAgICB9LFxuICAgIHN0cmlwZUxpbms6IHN0cmlwZUxpbmtDdHJsXG4gIH07XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7IGNoaWxkcmVuOiBlbGVtZW50c0NvbnRleHRWYWx1ZSA/IC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudHNDb250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBlbGVtZW50c0NvbnRleHRWYWx1ZSwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3goXCJkaXZcIiwgeyBpZDogRk9STV9UQVJHRVQsIGNsYXNzTmFtZTogcHJvcHMuY2xhc3NOYW1lLCBjaGlsZHJlbjogcHJvcHMuY2hpbGRyZW4oY2hpbGRyZW5Qcm9wcykgfSkgfSkgOiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7fSkgfSk7XG59O1xuY29uc3QgZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUgPSAob3BGb3JtKSA9PiB7XG4gIHJldHVybiB7XG4gICAgZm9ybUlkOiBvcEZvcm0uZm9ybUlkLFxuICAgIGZvcm1IZWlnaHQ6IG9wRm9ybS5mb3JtUHJvcGVydGllcy5oZWlnaHQsXG4gICAgcmVmZXJyZXI6IG9wRm9ybS5yZWZlcnJlcixcbiAgICBjaGVja291dFNlY3VyZVRva2VuOiBvcEZvcm0uY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICByZWdpc3RlcklmcmFtZTogb3BGb3JtLnJlZ2lzdGVySWZyYW1lLFxuICAgIGJhc2VVcmw6IG9wRm9ybS5iYXNlVXJsXG4gIH07XG59O1xuXG5jb25zdCBFbGVtZW50RnJhbWUgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBlbGVtZW50VHlwZSwgc3R5bGVzIH0gPSBwcm9wcztcbiAgY29uc3QgeyBmb3JtSWQsIHJlZmVycmVyLCBmb3JtSGVpZ2h0LCBjaGVja291dFNlY3VyZVRva2VuLCByZWdpc3RlcklmcmFtZSwgYmFzZVVybCB9ID0gdXNlT3BlblBheUVsZW1lbnRzKCk7XG4gIGNvbnN0IHN1YlBhdGggPSBlbGVtZW50VHlwZS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBbaGFzTG9hZGVkLCBzZXRIYXNMb2FkZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBpZnJhbWVSZWYgPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IGVsZW1lbnRTdHlsZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghc3R5bGVzKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcoc3R5bGVzKTtcbiAgfSwgW3N0eWxlc10pO1xuICBjb25zdCBmcmFtZVN0eWxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICBoZWlnaHQ6IGZvcm1IZWlnaHRcbiAgICB9O1xuICB9LCBbZm9ybUhlaWdodF0pO1xuICBjb25zdCBxdWVyeVN0cmluZyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghY2hlY2tvdXRTZWN1cmVUb2tlbiB8fCAhcmVmZXJyZXIpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwicmVmZXJlclwiLCByZWZlcnJlcik7XG4gICAgcGFyYW1zLmFwcGVuZChcInN0eWxlc1wiLCBlbGVtZW50U3R5bGUpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJmb3JtSWRcIiwgZm9ybUlkKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgY2hlY2tvdXRTZWN1cmVUb2tlbik7XG4gICAgcmV0dXJuIHBhcmFtcy50b1N0cmluZygpO1xuICB9LCBbZWxlbWVudFN0eWxlLCBmb3JtSWQsIHJlZmVycmVyLCBjaGVja291dFNlY3VyZVRva2VuXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiBzZXRIYXNMb2FkZWQodHJ1ZSksIFtdKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlmcmFtZVJlZi5jdXJyZW50IHx8ICFoYXNMb2FkZWQpIHJldHVybjtcbiAgICByZWdpc3RlcklmcmFtZShlbGVtZW50VHlwZSwgaWZyYW1lUmVmLmN1cnJlbnQpO1xuICB9LCBbaGFzTG9hZGVkXSk7XG4gIGlmICghY2hlY2tvdXRTZWN1cmVUb2tlbikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJbZm9ybV0gQ2Fubm90IHJlbmRlciBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgZnJhbWVcIik7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goXCJkaXZcIiwge30pO1xuICB9XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgIFwiaWZyYW1lXCIsXG4gICAge1xuICAgICAgaWQ6IGBvanMtJHtzdWJQYXRofS1lbGVtZW50YCxcbiAgICAgIG5hbWU6IGAke3N1YlBhdGh9LWVsZW1lbnRgLFxuICAgICAgY2xhc3NOYW1lOiBcIm9qcy1pZnJhbWVcIixcbiAgICAgIHNyYzogYCR7YmFzZVVybH0vYXBwL3YxLyR7c3ViUGF0aH0tZWxlbWVudC8/JHtxdWVyeVN0cmluZ31gLFxuICAgICAgc3R5bGU6IGZyYW1lU3R5bGUsXG4gICAgICByZWY6IGlmcmFtZVJlZlxuICAgIH1cbiAgKTtcbn07XG5cbmNvbnN0IENhcmRDdmNFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX0NWQyB9KTtcbn07XG5cbmNvbnN0IENhcmRFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEIH0pO1xufTtcblxuY29uc3QgQ2FyZEV4cGlyeUVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkRfRVhQSVJZIH0pO1xufTtcblxuY29uc3QgQ2FyZE51bWJlckVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkRfTlVNQkVSIH0pO1xufTtcblxuZXhwb3J0IHsgQ2FyZEN2Y0VsZW1lbnQsIENhcmRFbGVtZW50LCBDYXJkRXhwaXJ5RWxlbWVudCwgQ2FyZE51bWJlckVsZW1lbnQsIEVsZW1lbnRzRm9ybSwgRmllbGROYW1lLCB1c2VPcGVuUGF5RWxlbWVudHMgfTsiXSwKICAibWFwcGluZ3MiOiAiQUFBQSxTQUFTLGlCQUFBQSxJQUFlLGNBQUFDLElBQVksVUFBQUMsSUFBUSxXQUFBQyxHQUFTLFlBQUFDLEdBQVUsZUFBQUMsSUFBYSxhQUFBQyxVQUFpQjtBQUM3RixTQUFTLE9BQUFDLEdBQUssWUFBQUMsVUFBZ0I7QUFDOUIsU0FBUyxLQUFLQyxTQUFXO0FBQ3pCLE9BQU87QUFDUCxTQUFTLGtCQUFBQyxVQUFzQjtBQUMvQixPQUFPQyxPQUFPO0FBRWQsTUFBTUMsS0FBa0JaLEdBQWM7QUFBQSxFQUNwQyxRQUFRO0FBQUEsRUFDUixZQUFZO0FBQUEsRUFDWixVQUFVO0FBQUEsRUFDVixxQkFBcUI7QUFBQSxFQUNyQixnQkFBZ0IsTUFBTTtBQUFBLEVBQ3RCO0FBQUEsRUFDQSxTQUFTO0FBQ1gsQ0FBQyxHQUVLYSxLQUFxQixNQUFNO0FBQy9CLFFBQU1DLElBQVViLEdBQVdXLEVBQWU7QUFDMUMsTUFBSSxDQUFDRTtBQUNILFVBQU0sSUFBSSxNQUFNLG1FQUFtRTtBQUVyRixTQUFPQTtBQUNULEdBRU1DLEtBQUssOEJBQThCQyxLQUFLUCxFQUFJLE9BQU87QUFBQSxFQUN2RCxNQUFNQSxFQUFJLE9BQU87QUFBQSxFQUNqQixLQUFLQSxFQUFJLE1BQU1BLEVBQUksT0FBTyxDQUFDO0FBQUEsRUFDM0IsS0FBS0EsRUFBSSxPQUFPO0FBQUEsRUFDaEIsS0FBS0EsRUFBSSxPQUFPO0FBQ2xCLENBQUMsR0FBR1EsS0FBS1IsRUFBSSxNQUFNTyxFQUFFLEdBQUdFLEtBQUtULEVBQUksT0FBTztBQUFBLEVBQ3RDLE1BQU1BLEVBQUksT0FBTztBQUFBLEVBQ2pCLFNBQVNBLEVBQUksT0FBTztBQUFBLEVBQ3BCLE1BQU1BLEVBQUksTUFBTUEsRUFBSSxPQUFPLENBQUM7QUFDOUIsQ0FBQyxHQUFHVSxLQUFLVixFQUFJLE1BQU1TLEVBQUUsR0FBR0UsS0FBSztBQUFBLEVBQzNCLG1CQUFtQjtBQUNyQixHQUFHQyxLQUFLLENBQUNDLE1BQU07QUFDYixRQUFNQyxJQUFJRCxFQUFFLFlBQVksRUFBRSxLQUFLO0FBQy9CLFNBQU9GLEdBQUdHLENBQUMsS0FBS0Q7QUFDbEIsR0FBR0UsS0FBSyxDQUFDRixNQUFNO0FBQ2IsTUFBSTtBQUNGLFdBQU8sT0FBTyxLQUFLLE1BQU1BLENBQUMsS0FBSztBQUFBLEVBQ2pDLFFBQVE7QUFDTixXQUFPO0FBQUEsRUFDVDtBQUNGLEdBQUdHLEtBQUssQ0FBQ0gsTUFBTUEsRUFBRSxXQUFXLElBQUlELEdBQUdDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsSUFBSTtBQUFBLEVBQzdDQSxFQUFFLElBQUksQ0FBQ0ksTUFBTSxLQUFLTCxHQUFHSyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEVBQUUsS0FBSztBQUFBLENBQ3JDLENBQUMsSUFBSUMsS0FBSyxDQUFDTCxNQUFNO0FBQUEsRUFDaEJBLEVBQUUsSUFBSSxDQUFDSSxNQUFNLEtBQUtBLEVBQUUsS0FBSyxLQUFLLEdBQUcsQ0FBQyxLQUFLQSxFQUFFLE9BQU8sRUFBRSxFQUFFLEtBQUs7QUFBQSxDQUMxRCxDQUFDLElBQUlFLElBQUksQ0FBQ04sTUFBTTtBQUNmLE1BQUlBLGFBQWE7QUFDZixRQUFJRSxHQUFHRixFQUFFLE9BQU8sR0FBRztBQUNqQixZQUFNQyxJQUFJLEtBQUssTUFBTUQsRUFBRSxPQUFPO0FBQzlCLGFBQU9MLEdBQUcsVUFBVU0sQ0FBQyxFQUFFLFVBQVVFLEdBQUdGLENBQUMsSUFBSUosR0FBRyxVQUFVSSxDQUFDLEVBQUUsVUFBVUksR0FBR0osQ0FBQyxLQUFLLFFBQVEsS0FBSztBQUFBLEVBQzdGRCxFQUFFLE9BQU8sRUFBRSxHQUFHQSxFQUFFO0FBQUEsSUFDZDtBQUNFLGFBQU9ELEdBQUdDLEVBQUUsT0FBTztBQUN2QixNQUFJLE9BQU9BLEtBQUs7QUFDZCxRQUFJO0FBQ0YsYUFBTyxLQUFLLFVBQVVBLENBQUM7QUFBQSxJQUN6QixTQUFTQyxHQUFHO0FBQ1YsYUFBT0EsSUFBSTtBQUFBLElBQ2I7QUFBQTtBQUVBLFdBQU9ELElBQUk7QUFDZixHQUFHTyxLQUFLLENBQUNQLEdBQUdDLEdBQUdHLE1BQU0sSUFBSUksTUFBTTtBQUM3QixNQUFJO0FBQ0YsV0FBT1AsRUFBRSxHQUFHTyxDQUFDO0FBQUEsRUFDZixTQUFTLEdBQUc7QUFDVixJQUFBSixFQUFFLGtDQUFrQ0osQ0FBQyxNQUFNLENBQUM7QUFDNUM7QUFBQSxFQUNGO0FBQ0YsR0FBR1MsSUFBSXRCLEVBQUksT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEdBQUcsRUFBRSxTQUFTLGtCQUFrQixDQUFDLEdBQUd1QixJQUFJdkIsRUFBSSxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsR0FBR3dCLEtBQUksQ0FBQ1gsTUFBTWIsRUFBSSxTQUFTYSxFQUFFLFNBQVMsQ0FBQztBQUMzSSxJQUFJWSxJQUFxQixrQkFBQ1osT0FBT0EsRUFBRSxhQUFhLGFBQWFBLEVBQUUsWUFBWSxZQUFZQSxFQUFFLFFBQVEsU0FBU0EsRUFBRSxXQUFXLFdBQVdBLEVBQUUsT0FBTyxRQUFRQSxFQUFFLFFBQVEsU0FBU0EsRUFBRSxVQUFVLFdBQVdBLEVBQUUsVUFBVSxXQUFXQSxFQUFFLFFBQVEsU0FBU0EsRUFBRSxpQkFBaUIsaUJBQWlCQSxJQUFJWSxLQUFLLENBQUMsQ0FBQztBQUN0UixNQUFNQyxLQUFLMUIsRUFBSSxXQUFXeUIsQ0FBQztBQUMzQixJQUFJRSxLQUFzQixrQkFBQ2QsT0FBT0EsRUFBRSxjQUFjLGNBQWNBLEVBQUUsY0FBYyxjQUFjQSxFQUFFLFdBQVcsV0FBV0EsSUFBSWMsTUFBTSxDQUFDLENBQUM7QUFDbEksTUFBTUMsS0FBSzVCLEVBQUksV0FBVzJCLEVBQUUsR0FBR0UsS0FBSzdCLEVBQUksTUFBTSxDQUFDMEIsSUFBSUUsRUFBRSxDQUFDO0FBQ3RELElBQUlFLElBQXFCLGtCQUFDakIsT0FBT0EsRUFBRSxPQUFPLFFBQVFBLEVBQUUsY0FBYyxlQUFlQSxFQUFFLGNBQWMsZUFBZUEsRUFBRSxXQUFXLFlBQVlBLElBQUlpQixLQUFLLENBQUMsQ0FBQztBQUNwSixNQUFNQyxLQUFLL0IsRUFBSSxXQUFXOEIsQ0FBQyxHQUFHRSxLQUFLaEMsRUFBSSxPQUFPO0FBQUEsRUFDNUMsVUFBVUEsRUFBSSxPQUFPO0FBQUEsRUFDckIsZ0JBQWdCd0IsR0FBRXhCLEVBQUksT0FBTyxDQUFDO0FBQUEsRUFDOUIsVUFBVXdCLEdBQUV4QixFQUFJLE9BQU9BLEVBQUksT0FBTyxHQUFHQSxFQUFJLElBQUksQ0FBQyxDQUFDO0FBQ2pELENBQUMsR0FBR2lDLEtBQUtqQyxFQUFJLE9BQU87QUFBQSxFQUNsQixJQUFJQSxFQUFJLE9BQU87QUFDakIsQ0FBQztBQUNEQSxFQUFJLE9BQU87QUFBQSxFQUNULFlBQVl1QjtBQUFBLEVBQ1osUUFBUUE7QUFBQSxFQUNSLEtBQUtBO0FBQ1AsQ0FBQztBQUNEdkIsRUFBSSxPQUFPO0FBQUEsRUFDVCxpQkFBaUJ1QjtBQUFBLEVBQ2pCLE9BQU9BO0FBQUEsRUFDUCxZQUFZQTtBQUFBLEVBQ1osVUFBVUE7QUFBQSxFQUNWLFlBQVlBO0FBQUEsRUFDWixRQUFRQTtBQUFBLEVBQ1IsU0FBU0E7QUFBQSxFQUNULGVBQWVBO0FBQUEsRUFDZixZQUFZQTtBQUNkLENBQUM7QUFDRCxNQUFNVyxJQUFJbEMsRUFBSSxLQUFLO0FBQUE7QUFBQSxFQUVqQjtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUE7QUFBQSxFQUVBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDRixDQUFDLEdBQUdtQyxLQUFLRCxFQUFFLFFBQVEsQ0FBQyxvQkFBb0Isa0JBQWtCLENBQUMsR0FBR0UsS0FBS3BDLEVBQUksT0FBTyxFQUFFLE1BQU1tQyxHQUFHLENBQUMsR0FBR0UsS0FBS0gsRUFBRSxRQUFRLENBQUMsUUFBUSxTQUFTLFFBQVEsQ0FBQyxHQUFHSSxLQUFLdEMsRUFBSSxPQUFPO0FBQUEsRUFDeEosTUFBTXFDO0FBQUEsRUFDTixhQUFhVDtBQUFBLEVBQ2IsUUFBUTVCLEVBQUksTUFBTUEsRUFBSSxPQUFPLENBQUMsRUFBRSxTQUFTO0FBQzNDLENBQUMsR0FBR3VDLEtBQUtMLEVBQUUsUUFBUSxDQUFDLGNBQWMsa0JBQWtCLGdCQUFnQixDQUFDLEdBQUdNLEtBQUt4QyxFQUFJLE9BQU87QUFBQSxFQUN0RixNQUFNdUM7QUFBQSxFQUNOLFNBQVNqQjtBQUFBLEVBQ1QsU0FBU3RCLEVBQUksT0FBT0EsRUFBSSxPQUFPLEdBQUdBLEVBQUksT0FBTyxDQUFDLEVBQUUsU0FBUztBQUMzRCxDQUFDLEdBQUd5QyxLQUFLUCxFQUFFLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHUSxLQUFLMUMsRUFBSSxPQUFPO0FBQUEsRUFDeEQsTUFBTXlDO0FBQUEsRUFDTixhQUFhWjtBQUFBLEVBQ2IsUUFBUTdCLEVBQUksTUFBTUEsRUFBSSxPQUFPLENBQUM7QUFDaEMsQ0FBQyxHQUFHMkMsS0FBSzNDLEVBQUksT0FBTztBQUFBLEVBQ2xCLE1BQU1BLEVBQUksUUFBUWtDLEVBQUUsS0FBSyxNQUFNO0FBQUEsRUFDL0IsUUFBUVo7QUFDVixDQUFDLEdBQUdzQixLQUFLNUMsRUFBSSxPQUFPO0FBQUEsRUFDbEIsTUFBTUEsRUFBSSxRQUFRa0MsRUFBRSxLQUFLLE1BQU07QUFBQSxFQUMvQixXQUFXWjtBQUFBLEVBQ1gsa0JBQWtCdEIsRUFBSSxPQUFPO0FBQUEsRUFDN0IsVUFBVXVCO0FBQUEsRUFDVix3QkFBd0J2QixFQUFJLE1BQU1nQyxFQUFFO0FBQ3RDLENBQUMsR0FBR2EsS0FBSzdDLEVBQUksT0FBTztBQUFBLEVBQ2xCLE1BQU1BLEVBQUksUUFBUWtDLEVBQUUsS0FBSyxvQkFBb0I7QUFBQSxFQUM3QyxvQkFBb0JsQyxFQUFJLE9BQU9BLEVBQUksT0FBTyxHQUFHQSxFQUFJLElBQUksQ0FBQztBQUFBLEVBQ3RELHFCQUFxQkEsRUFBSSxJQUFJLEVBQUUsU0FBUztBQUFBLEVBQ3hDLGlCQUFpQkEsRUFBSSxTQUFTQSxFQUFJLE9BQU9BLEVBQUksT0FBTyxHQUFHQSxFQUFJLElBQUksQ0FBQyxDQUFDO0FBQ25FLENBQUMsR0FBRzhDLEtBQUs5QyxFQUFJLE9BQU87QUFBQSxFQUNsQixNQUFNQSxFQUFJLFFBQVFrQyxFQUFFLEtBQUssNEJBQTRCO0FBQUEsRUFDckQsaUJBQWlCbEMsRUFBSSxPQUFPO0FBQzlCLENBQUMsR0FBRytDLElBQUkvQyxFQUFJLE9BQU87QUFBQSxFQUNqQixXQUFXc0I7QUFBQSxFQUNYLFVBQVVBO0FBQUEsRUFDVixPQUFPQTtBQUFBLEVBQ1AsU0FBU0E7QUFBQSxFQUNULFNBQVNBO0FBQUEsRUFDVCxlQUFlQztBQUNqQixDQUFDLEdBQUd5QixLQUFLaEQsRUFBSSxPQUFPO0FBQUEsRUFDbEIsT0FBT3NCO0FBQUEsRUFDUCxTQUFTQTtBQUFBLEVBQ1QsU0FBU0E7QUFBQSxFQUNULGVBQWVDO0FBQ2pCLENBQUMsR0FBRzBCLEtBQUtmLEVBQUUsUUFBUSxDQUFDLFlBQVksWUFBWSxvQkFBb0IsQ0FBQyxHQUFHZ0IsS0FBS2xELEVBQUksT0FBTztBQUFBLEVBQ2xGLE1BQU1pRDtBQUFBLEVBQ04sV0FBVzNCO0FBQUEsRUFDWCx1QkFBdUJVO0FBQUEsRUFDdkIscUJBQXFCaEMsRUFBSSxJQUFJLEVBQUUsU0FBUztBQUFBLEVBQ3hDLHNCQUFzQkEsRUFBSSxRQUFRLEVBQUUsU0FBUztBQUFBLEVBQzdDLGdCQUFnQnVCO0FBQ2xCLENBQUMsRUFBRSxPQUFPd0IsRUFBRSxLQUFLLEdBQUdJLEtBQUtuRCxFQUFJLE9BQU87QUFBQSxFQUNsQyxNQUFNQSxFQUFJLFFBQVFrQyxFQUFFLEtBQUssZ0JBQWdCO0FBQUEsRUFDekMsb0JBQW9CbEMsRUFBSSxRQUFRO0FBQ2xDLENBQUMsR0FBR29ELEtBQUtwRCxFQUFJLE9BQU87QUFBQSxFQUNsQixNQUFNQSxFQUFJLFFBQVFrQyxFQUFFLEtBQUssZ0JBQWdCO0FBQUEsRUFDekMsYUFBYWxDLEVBQUksTUFBTUEsRUFBSSxPQUFPLENBQUM7QUFBQSxFQUNuQyxpQkFBaUJBLEVBQUksTUFBTUEsRUFBSSxPQUFPLENBQUM7QUFBQSxFQUN2QyxZQUFZQSxFQUFJLE9BQU87QUFDekIsQ0FBQyxHQUFHcUQsS0FBS3JELEVBQUksbUJBQW1CLFFBQVE7QUFBQSxFQUN0Q29DO0FBQUEsRUFDQUU7QUFBQSxFQUNBRTtBQUFBLEVBQ0FFO0FBQUEsRUFDQUM7QUFBQSxFQUNBQztBQUFBLEVBQ0FNO0FBQUEsRUFDQUM7QUFBQSxFQUNBQztBQUFBLEVBQ0FQO0FBQUEsRUFDQUM7QUFDRixDQUFDLEdBQUdRLEtBQUt0RCxFQUFJLE9BQU87QUFBQSxFQUNsQixTQUFTcUQ7QUFBQSxFQUNULE9BQU8vQjtBQUFBLEVBQ1AsUUFBUUE7QUFBQSxFQUNSLFdBQVdBO0FBQ2IsQ0FBQztBQUNEdEIsRUFBSSxPQUFPO0FBQUEsRUFDVCxZQUFZQSxFQUFJLE9BQU87QUFBQSxFQUN2QixVQUFVc0I7QUFDWixDQUFDO0FBQ0R0QixFQUFJLEtBQUssQ0FBQyxhQUFhLFlBQVksQ0FBQztBQUNwQ0EsRUFBSSxPQUFPO0FBQUEsRUFDVCxjQUFjQSxFQUFJLE9BQU87QUFBQSxFQUN6QixnQkFBZ0JBLEVBQUksT0FBTyxFQUFFLFNBQVM7QUFDeEMsQ0FBQztBQUNEQSxFQUFJLE9BQU87QUFBQSxFQUNULGNBQWNBLEVBQUksT0FBTztBQUFBLEVBQ3pCLG1CQUFtQndCLEdBQUV4QixFQUFJLE9BQU8sQ0FBQztBQUNuQyxDQUFDO0FBQ0QsTUFBTXVELEtBQUt2RCxFQUFJLE9BQU87QUFBQSxFQUNwQixpQkFBaUJBLEVBQUksTUFBTWlDLEVBQUU7QUFDL0IsQ0FBQyxHQUFHdUIsS0FBS3hELEVBQUksT0FBTztBQUFBLEVBQ2xCLGFBQWFBLEVBQUksT0FBTztBQUFBLEVBQ3hCLFFBQVFBLEVBQUksTUFBTUEsRUFBSSxPQUFPLENBQUM7QUFDaEMsQ0FBQztBQUNEQSxFQUFJLE9BQU87QUFBQSxFQUNULFlBQVlBLEVBQUksT0FBTztBQUN6QixDQUFDO0FBQ0QsTUFBTXlELEtBQUt6RCxFQUFJLE9BQU87QUFBQSxFQUNwQixTQUFTQSxFQUFJLFFBQVEsRUFBRTtBQUFBLEVBQ3ZCLFlBQVlBLEVBQUksUUFBUSxrQkFBa0I7QUFBQSxFQUMxQyxRQUFRQSxFQUFJLE1BQU13RCxFQUFFO0FBQ3RCLENBQUMsR0FBR0UsS0FBSzFELEVBQUksbUJBQW1CLFdBQVc7QUFBQSxFQUN6Q0EsRUFBSSxPQUFPLEVBQUUsU0FBU0EsRUFBSSxRQUFRLEVBQUUsRUFBRSxDQUFDO0FBQUEsRUFDdkN5RDtBQUNGLENBQUM7QUFDRHpELEVBQUksT0FBTztBQUFBLEVBQ1QsWUFBWUEsRUFBSSxPQUFPO0FBQUEsRUFDdkIseUJBQXlCZ0M7QUFBQSxFQUN6QixxQkFBcUJlO0FBQUEsRUFDckIsMkJBQTJCL0MsRUFBSSxRQUFRLEVBQUUsU0FBUztBQUFBLEVBQ2xELG1CQUFtQndCLEdBQUV4QixFQUFJLE9BQU8sQ0FBQztBQUNuQyxDQUFDO0FBQ0RBLEVBQUksT0FBTztBQUFBLEVBQ1QsWUFBWUEsRUFBSSxPQUFPO0FBQUEsRUFDdkIseUJBQXlCZ0M7QUFBQSxFQUN6QixxQkFBcUJlO0FBQ3ZCLENBQUM7QUFDRCxJQUFJWSxLQUFxQixrQkFBQzlDLE9BQU9BLEVBQUUsVUFBVSxXQUFXQSxFQUFFLFVBQVUsV0FBV0EsRUFBRSxZQUFZLGFBQWFBLElBQUk4QyxNQUFLLENBQUMsQ0FBQztBQUNySCxNQUFNQyxLQUFLNUQsRUFBSSxPQUFPO0FBQUEsRUFDcEIsUUFBUUEsRUFBSSxLQUFLO0FBQUEsSUFDZjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUE7QUFBQSxFQUVGLENBQUM7QUFDSCxDQUFDLEdBQUc2RCxLQUFLN0QsRUFBSSxPQUFPO0FBQUEsRUFDbEIsTUFBTUEsRUFBSSxPQUFPO0FBQUEsRUFDakIsY0FBY0EsRUFBSSxPQUFPO0FBQUEsRUFDekIsbUJBQW1CQSxFQUFJLE9BQU87QUFBQSxFQUM5QixZQUFZQSxFQUFJLE9BQU87QUFDekIsQ0FBQyxHQUFHOEQsS0FBSyxDQUFDakQsTUFBTTtBQUNkLFFBQU1DLElBQUksQ0FBQztBQUNYLFNBQU8sT0FBTyxRQUFRRCxDQUFDLEVBQUUsUUFBUSxDQUFDLENBQUNJLEdBQUdJLENBQUMsTUFBTTtBQUMzQyxRQUFJO0FBQ0YsWUFBTSxJQUFJSyxHQUFHLE1BQU1ULENBQUM7QUFDcEIsWUFBTSxRQUFRSSxDQUFDLElBQUlQLEVBQUUsQ0FBQyxJQUFJTyxJQUFJLE1BQU0sUUFBUUEsRUFBRSxPQUFPLE1BQU1QLEVBQUUsQ0FBQyxJQUFJTyxFQUFFO0FBQUEsSUFDdEUsUUFBUTtBQUNOO0FBQUEsSUFDRjtBQUFBLEVBQ0YsQ0FBQyxHQUFHUDtBQUNOLEdBQUdpRCxLQUFLL0QsRUFBSSxPQUFPO0FBQUEsRUFDakIsV0FBV0EsRUFBSSxPQUFPO0FBQUEsRUFDdEIsZUFBZUEsRUFBSSxPQUFPO0FBQUEsRUFDMUIsY0FBY0EsRUFBSSxPQUFPO0FBQzNCLENBQUMsR0FBR2dFLEtBQUtoRSxFQUFJLE9BQU87QUFBQSxFQUNsQixNQUFNQSxFQUFJLE9BQU87QUFBQSxFQUNqQixlQUFlQSxFQUFJLE9BQU87QUFBQSxFQUMxQixXQUFXQSxFQUFJLE9BQU87QUFDeEIsQ0FBQyxHQUFHaUUsS0FBSztBQUFBLEVBQ1AsS0FBSztBQUFBLEVBQ0wsS0FBSztBQUNQLEdBQUdDLEtBQUssT0FBT3JELE1BQU07QUFDbkIsV0FBU0ksSUFBSSxHQUFHQSxJQUFJLElBQUlBO0FBQ3RCLElBQUFrRCxHQUFHLEtBQUssTUFBTUMsR0FBRyxHQUFHO0FBQ3RCLE1BQUksQ0FBQ0QsR0FBRztBQUNOLFVBQU0sUUFBUSxJQUFJLHNCQUFzQixHQUFHLElBQUksTUFBTSxzQkFBc0I7QUFDN0UsU0FBTyxJQUFJLE9BQU90RCxDQUFDO0FBQ3JCLEdBQUd3RCxLQUFLLE9BQU94RCxHQUFHQyxNQUFNO0FBQ3RCLFFBQU1HLElBQUksTUFBTWlELEdBQUdyRCxDQUFDO0FBQ3BCLFNBQU87QUFBQSxJQUNMLFVBQVVJLEVBQUUsU0FBU0gsQ0FBQztBQUFBLElBQ3RCLFFBQVFHO0FBQUEsRUFDVjtBQUNGLEdBQUdxRCxLQUFLLE9BQU96RCxHQUFHQyxHQUFHRyxHQUFHSSxHQUFHLE1BQU07QUFDL0IsUUFBTSxJQUFJLE1BQU02QyxHQUFHckQsQ0FBQyxHQUFHLElBQUlvRCxHQUFHaEQsRUFBRSxZQUFZLEVBQUUsS0FBSyxDQUFDO0FBQ3BELFNBQU8sRUFBRSxlQUFlO0FBQUE7QUFBQSxJQUV0QixTQUFTO0FBQUEsSUFDVCxVQUFVO0FBQUEsSUFDVixPQUFPO0FBQUEsTUFDTCxPQUFPO0FBQUEsTUFDUCxRQUFRSDtBQUFBLE1BQ1IsU0FBU087QUFBQSxJQUNYO0FBQUEsSUFDQSxrQkFBa0I7QUFBQSxJQUNsQixtQkFBbUI7QUFBQSxJQUNuQixnQkFBZ0IsQ0FBQztBQUFBLEVBQ25CLENBQUM7QUFDSCxHQUFHK0MsS0FBSyxDQUFDdkQsTUFBTSxJQUFJLFFBQVEsQ0FBQ0MsTUFBTTtBQUNoQyxhQUFXQSxHQUFHRCxDQUFDO0FBQ2pCLENBQUMsR0FBR3NELEtBQUssTUFBTSxZQUFZLFFBQVFJLEtBQUssT0FBTzFELE1BQU0sSUFBSSxRQUFRLENBQUNDLEdBQUdHLE1BQU07QUFDekUsTUFBSTtBQUNGLElBQUFKLEVBQUUsR0FBRyxpQkFBaUIsT0FBT1EsTUFBTTtBQUNqQyxNQUFBUCxFQUFFTyxDQUFDO0FBQUEsSUFDTCxDQUFDLEdBQUdSLEVBQUUsR0FBRyxVQUFVLE1BQU07QUFDdkIsTUFBQUksRUFBRSxJQUFJLE1BQU0scURBQXFELENBQUM7QUFBQSxJQUNwRSxDQUFDO0FBQUEsRUFDSCxTQUFTSSxHQUFHO0FBQ1YsSUFBQUosRUFBRUksQ0FBQztBQUFBLEVBQ0w7QUFDRixDQUFDLEdBQUdtRCxLQUFLLE9BQU8zRCxHQUFHQyxNQUFNO0FBQ3ZCLE1BQUksQ0FBQ0QsRUFBRSxhQUFhLENBQUNBLEVBQUU7QUFDckIsVUFBTSxJQUFJLE1BQU0sd0NBQXdDLEtBQUssVUFBVUEsQ0FBQyxDQUFDLEVBQUU7QUFDN0UsUUFBTVEsSUFBSSxPQUFPLE1BQU02QyxHQUFHckQsRUFBRSxTQUFTLEdBQUcsaUJBQWlCQSxFQUFFLGVBQWU7QUFBQSxJQUN4RSxnQkFBZ0JDLEVBQUUsY0FBYztBQUFBLEVBQ2xDLENBQUM7QUFDRCxNQUFJTyxFQUFFO0FBQ0osVUFBTVAsRUFBRSxTQUFTLE1BQU0sR0FBRyxJQUFJLE1BQU0sbUJBQW1CTyxFQUFFLE1BQU0sV0FBVyxTQUFTLEVBQUU7QUFDdkYsU0FBT1AsRUFBRSxTQUFTLFNBQVMsR0FBR087QUFDaEMsR0FBR29ELEtBQUssT0FBTzVELE1BQU07QUFDbkIsTUFBSTZELEdBQUdDLEdBQUdDLEdBQUdDO0FBQ2IsUUFBTTVELElBQUksT0FBTyxNQUFNaUQsR0FBR3JELEVBQUUsU0FBUyxHQUFHLGlCQUFpQkEsRUFBRSxlQUFlO0FBQUEsSUFDeEUsZ0JBQWdCQSxFQUFFO0FBQUEsRUFDcEIsQ0FBQyxHQUFHUSxLQUFLcUQsSUFBSXpELEVBQUUsZ0JBQWdCLE9BQU8sU0FBU3lELEVBQUU7QUFDakQsTUFBSXJELE1BQU07QUFDUixZQUFRLElBQUksd0JBQXdCUixFQUFFLFlBQVksR0FBRyxRQUFRLElBQUksK0JBQStCSSxFQUFFLFdBQVc7QUFBQSxNQUMxRyxPQUFNSSxNQUFNLGFBQWEsSUFBSSxNQUFNLHFEQUFxRCxJQUFJLElBQUk7QUFBQSxJQUNuRyxLQUFLc0QsSUFBSTFELEVBQUUsVUFBVSxPQUFPLFNBQVMwRCxFQUFFLGNBQWNFLEtBQUtELElBQUkzRCxFQUFFLGdCQUFnQixPQUFPLFNBQVMyRCxFQUFFLHFCQUFxQixPQUFPLFNBQVNDLEVBQUUsWUFBWSxtREFBbUQ7QUFBQSxFQUMxTTtBQUNGLEdBQUdDLEtBQUssQ0FBQ2pFLE1BQU0sS0FBSyxVQUFVQSxDQUFDLEdBQUdrRSxLQUFLLENBQUNsRSxHQUFHQyxNQUFNLE1BQU0sS0FBS0QsRUFBRSxpQkFBaUIsYUFBYSxLQUFLLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQzZELEdBQUdDLE1BQU07QUFDcEgsUUFBTUMsSUFBSUQsRUFBRSxhQUFhLFdBQVc7QUFDcEMsU0FBT0MsSUFBSSxFQUFFLEdBQUdGLEdBQUcsQ0FBQ0UsQ0FBQyxHQUFHRCxFQUFFLE1BQU0sSUFBSUQ7QUFDdEMsR0FBRyxDQUFDLENBQUMsR0FBR00sS0FBSyxDQUFDbkUsTUFBTTtBQUNsQixNQUFJO0FBQ0YsV0FBT3lDLEdBQUcsTUFBTXpDLENBQUM7QUFBQSxFQUNuQixTQUFTQyxHQUFHO0FBQ1YsVUFBTSxRQUFRLE1BQU0sZ0NBQWdDRCxHQUFHQyxDQUFDLEdBQUdBO0FBQUEsRUFDN0Q7QUFDRixHQUFHbUUsS0FBSyxPQUFPcEUsTUFBTTtBQUNuQixNQUFJLE9BQU9BLEtBQUssWUFBWSxDQUFDQSxFQUFHLFFBQU87QUFDdkMsTUFBSTtBQUNGLFVBQU1DLElBQUksRUFBRSxNQUFNLE9BQU8sR0FBR0csSUFBSSxNQUFNSixFQUFFLEtBQUtDLENBQUM7QUFDOUMsUUFBSUcsTUFBTTtBQUNSLFlBQU0sSUFBSSxNQUFNLG1DQUFtQyxLQUFLLFVBQVVBLENBQUMsQ0FBQyxFQUFFO0FBQ3hFLFdBQU87QUFBQSxFQUNULFNBQVNILEdBQUc7QUFDVixXQUFPLFFBQVEsTUFBTSxpQ0FBaUNBLENBQUMsR0FBRztBQUFBLEVBQzVEO0FBQ0YsR0FBR29FLEtBQUssQ0FBQ3JFLEdBQUdDLE1BQU0sQ0FBQyxDQUFDRCxLQUFLQyxHQUFHcUUsSUFBSSxDQUFDdEUsTUFBTWIsRUFBSSxTQUFTYSxFQUFFLFNBQVMsQ0FBQztBQUNoRWIsRUFBSSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksR0FBRyxFQUFFLFNBQVMsa0JBQWtCLENBQUM7QUFDekQsTUFBTW9GLEtBQUtwRixFQUFJLE9BQU87QUFBQSxFQUNwQixtQkFBbUJBLEVBQUksUUFBUSxPQUFPO0FBQUEsRUFDdEMsU0FBU0EsRUFBSSxPQUFPO0FBQUEsRUFDcEIsU0FBU0EsRUFBSSxPQUFPQSxFQUFJLE9BQU8sR0FBR0EsRUFBSSxPQUFPLENBQUMsRUFBRSxTQUFTO0FBQzNELENBQUM7QUFDREEsRUFBSSxLQUFLLENBQUMsT0FBTyxLQUFLLENBQUM7QUFDdkIsTUFBTXFGLEtBQUtyRixFQUFJLE9BQU87QUFBQSxFQUNwQixNQUFNQSxFQUFJLE9BQU87QUFBQSxFQUNqQixpQkFBaUJtRixFQUFFbkYsRUFBSSxPQUFPLENBQUM7QUFBQSxFQUMvQixhQUFhbUYsRUFBRW5GLEVBQUksT0FBTyxDQUFDO0FBQUEsRUFDM0IsVUFBVW1GLEVBQUVuRixFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQ3hCLFVBQVVBLEVBQUksT0FBTztBQUFBLEVBQ3JCLG9CQUFvQm1GLEVBQUVuRixFQUFJLE9BQU8sQ0FBQztBQUNwQyxDQUFDLEdBQUdzRixLQUFLdEYsRUFBSSxPQUFPO0FBQUEsRUFDbEIsc0JBQXNCQSxFQUFJLE9BQU8sRUFBRSxJQUFJO0FBQUEsRUFDdkMsbUJBQW1CQSxFQUFJLE9BQU8sRUFBRSxJQUFJO0FBQUEsRUFDcEMsVUFBVUEsRUFBSSxPQUFPO0FBQUEsRUFDckIsYUFBYW1GLEVBQUVuRixFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQzNCLFVBQVVBLEVBQUksT0FBTztBQUFBLEVBQ3JCLGtCQUFrQm1GLEVBQUVuRixFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQ2hDLHdCQUF3Qm1GLEVBQUVuRixFQUFJLE9BQU8sRUFBRSxJQUFJLENBQUM7QUFBQSxFQUM1QyxVQUFVQSxFQUFJLE9BQU8sRUFBRSxJQUFJO0FBQzdCLENBQUMsR0FBR3VGLEtBQUt2RixFQUFJLE9BQU9BLEVBQUksT0FBTyxHQUFHQSxFQUFJLElBQUksQ0FBQyxHQUFHd0YsS0FBS3hGLEVBQUksT0FBTztBQUFBLEVBQzVELE1BQU1BLEVBQUksT0FBTztBQUFBLEVBQ2pCLFVBQVVtRixFQUFFSSxFQUFFO0FBQ2hCLENBQUMsR0FBR0UsSUFBSXpGLEVBQUksT0FBTztBQUFBLEVBQ2pCLFVBQVVBLEVBQUksT0FBTztBQUFBLEVBQ3JCLGdCQUFnQm1GLEVBQUVuRixFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQzlCLFVBQVVtRixFQUFFbkYsRUFBSSxPQUFPQSxFQUFJLE9BQU8sR0FBR0EsRUFBSSxJQUFJLENBQUMsQ0FBQztBQUNqRCxDQUFDLEdBQUcwRixLQUFLMUYsRUFBSSxPQUFPO0FBQUEsRUFDbEIsVUFBVUEsRUFBSSxPQUFPO0FBQ3ZCLENBQUMsR0FBRzJGLEtBQUszRixFQUFJLE9BQU87QUFBQSxFQUNsQixJQUFJbUYsRUFBRW5GLEVBQUksT0FBTyxDQUFDO0FBQUEsRUFDbEIsa0JBQWtCbUYsRUFBRW5GLEVBQUksT0FBTyxDQUFDO0FBQUEsRUFDaEMsd0JBQXdCbUYsRUFBRW5GLEVBQUksT0FBTyxFQUFFLElBQUksQ0FBQztBQUFBLEVBQzVDLG9CQUFvQkEsRUFBSSxNQUFNMEYsRUFBRTtBQUFBLEVBQ2hDLGFBQWFQLEVBQUVuRixFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQzNCLFdBQVdtRixFQUFFbkYsRUFBSSxPQUFPLENBQUM7QUFDM0IsQ0FBQyxHQUFHNEYsS0FBSzVGLEVBQUksT0FBTztBQUFBLEVBQ2xCLGFBQWFBLEVBQUksT0FBTztBQUMxQixDQUFDLEdBQUc2RixLQUFLN0YsRUFBSSxPQUFPO0FBQUEsRUFDbEIsYUFBYUEsRUFBSSxPQUFPO0FBQUEsRUFDeEIsMENBQTBDQSxFQUFJLE9BQU87QUFBQSxFQUNyRCxVQUFVQSxFQUFJLE9BQU87QUFBQSxFQUNyQix1QkFBdUJBLEVBQUksTUFBTTRGLEVBQUU7QUFBQSxFQUNuQyxzQkFBc0I1RixFQUFJLE9BQU87QUFDbkMsQ0FBQyxHQUFHOEYsS0FBSzlGLEVBQUksT0FBTztBQUFBLEVBQ2xCLFFBQVFxRjtBQUNWLENBQUMsR0FBR1UsS0FBSy9GLEVBQUksT0FBTztBQUFBLEVBQ2xCLFVBQVVBLEVBQUksT0FBTztBQUFBLEVBQ3JCLFdBQVdBLEVBQUksTUFBTThGLEVBQUU7QUFBQSxFQUN2QixvQkFBb0JYLEVBQUVuRixFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQ2xDLE9BQU9BLEVBQUksTUFBTTZGLEVBQUU7QUFBQSxFQUNuQix1QkFBdUI3RixFQUFJLE9BQU87QUFBQSxFQUNsQyxpQkFBaUJBLEVBQUksT0FBTztBQUFBLEVBQzVCLG1CQUFtQkEsRUFBSSxPQUFPO0FBQUEsRUFDOUIsNkJBQTZCQSxFQUFJLE1BQU00RixFQUFFO0FBQzNDLENBQUMsR0FBR0ksS0FBS2hHLEVBQUksT0FBTztBQUFBLEVBQ2xCLFNBQVNBLEVBQUksTUFBTTJGLEVBQUU7QUFBQSxFQUNyQixVQUFVM0YsRUFBSSxNQUFNK0YsRUFBRTtBQUN4QixDQUFDLEdBQUdFLEtBQUtqRyxFQUFJLE9BQU87QUFBQSxFQUNsQixTQUFTZ0c7QUFBQSxFQUNULG9CQUFvQmIsRUFBRWEsRUFBRTtBQUFBLEVBQ3hCLFNBQVNoRyxFQUFJLE1BQU1xRixFQUFFO0FBQ3ZCLENBQUMsR0FBR2EsS0FBS2xHLEVBQUksT0FBTztBQUFBLEVBQ2xCLFFBQVFBLEVBQUksUUFBUSxNQUFNO0FBQUEsRUFDMUIsT0FBT0EsRUFBSSxPQUFPO0FBQUEsRUFDbEIsT0FBT21GLEVBQUVuRixFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQ3JCLFlBQVlBLEVBQUksTUFBTXNGLEVBQUU7QUFBQSxFQUN4QixzQkFBc0J0RixFQUFJLE9BQU8sRUFBRSxJQUFJO0FBQUEsRUFDdkMsbUJBQW1CQSxFQUFJLE9BQU8sRUFBRSxJQUFJO0FBQUEsRUFDcEMsT0FBT3dGO0FBQUEsRUFDUCxjQUFjTCxFQUFFYyxFQUFFO0FBQUE7QUFBQSxFQUVsQixtQkFBbUJqRyxFQUFJLE1BQU15RixDQUFDO0FBQ2hDLENBQUMsR0FBR1UsS0FBS25HLEVBQUksbUJBQW1CLFFBQVE7QUFBQSxFQUN0Q0EsRUFBSSxPQUFPO0FBQUEsSUFDVCxNQUFNQSxFQUFJLFFBQVEsT0FBTztBQUFBLElBQ3pCLFVBQVVBLEVBQUksU0FBU0EsRUFBSSxVQUFVLENBQUM7QUFBQSxFQUN4QyxDQUFDLEVBQUUsT0FBT2tHLEdBQUcsS0FBSztBQUFBLEVBQ2xCbEcsRUFBSSxPQUFPO0FBQUEsSUFDVCxNQUFNQSxFQUFJLEtBQUssQ0FBQyxXQUFXLGNBQWMsQ0FBQztBQUFBLElBQzFDLFVBQVVBLEVBQUksT0FBTztBQUFBLEVBQ3ZCLENBQUMsRUFBRSxPQUFPa0csR0FBRyxLQUFLO0FBQ3BCLENBQUMsR0FBR0UsS0FBS3BHLEVBQUksT0FBTztBQUFBLEVBQ2xCLFFBQVFBLEVBQUksUUFBUSxVQUFVO0FBQ2hDLENBQUMsR0FBR3FHLEtBQUtyRyxFQUFJLE9BQU87QUFBQSxFQUNsQixRQUFRQSxFQUFJLFFBQVEsU0FBUztBQUMvQixDQUFDO0FBQ0RBLEVBQUksTUFBTSxDQUFDbUcsSUFBSUMsSUFBSUMsRUFBRSxDQUFDO0FBQ3RCckcsRUFBSSxPQUFPO0FBQUEsRUFDVCxNQUFNQSxFQUFJLE9BQU87QUFBQSxFQUNqQixNQUFNQSxFQUFJLE9BQU87QUFBQSxFQUNqQixlQUFlQSxFQUFJLE9BQU87QUFBQSxFQUMxQixpQkFBaUJBLEVBQUksT0FBTztBQUM5QixDQUFDO0FBQ0QsTUFBTXNHLEtBQUt0RyxFQUFJLE9BQU87QUFBQSxFQUNwQixjQUFjQSxFQUFJLE1BQU1BLEVBQUksT0FBTyxDQUFDO0FBQUEsRUFDcEMsa0JBQWtCQSxFQUFJLE1BQU1BLEVBQUksT0FBTyxDQUFDO0FBQUEsRUFDeEMsYUFBYUEsRUFBSSxPQUFPO0FBQzFCLENBQUM7QUFDREEsRUFBSSxPQUFPO0FBQUEsRUFDVCxjQUFjQSxFQUFJLE9BQU87QUFBQSxFQUN6QixlQUFlQSxFQUFJLElBQUk7QUFBQTtBQUFBLEVBRXZCLGdCQUFnQkEsRUFBSSxPQUFPO0FBQUEsRUFDM0IsbUJBQW1CQSxFQUFJLE9BQU87QUFBQSxFQUM5QixrQkFBa0JBLEVBQUksT0FBTztBQUFBLEVBQzdCLFlBQVlBLEVBQUksTUFBTXNGLEVBQUU7QUFBQSxFQUN4QixtQkFBbUJ0RixFQUFJLE9BQU8sRUFBRSxJQUFJO0FBQUEsRUFDcEMsZUFBZUEsRUFBSSxRQUFRO0FBQUEsRUFDM0IseUJBQXlCeUY7QUFBQSxFQUN6QixnQkFBZ0J6RixFQUFJLE9BQU8sRUFBRSxTQUFTO0FBQUEsRUFDdEMsMkJBQTJCQSxFQUFJLFFBQVEsRUFBRSxTQUFTO0FBQ3BELENBQUM7QUFDRCxNQUFNdUcsS0FBS3ZHLEVBQUksT0FBTztBQUFBLEVBQ3BCLG1CQUFtQkEsRUFBSSxPQUFPO0FBQ2hDLENBQUM7QUFDREEsRUFBSSxPQUFPO0FBQUEsRUFDVCxJQUFJQSxFQUFJLE9BQU87QUFBQSxFQUNmLFlBQVlBLEVBQUksT0FBTztBQUN6QixDQUFDO0FBQ0QsTUFBTXdHLEtBQUt4RyxFQUFJLE9BQU87QUFBQSxFQUNwQixNQUFNQSxFQUFJLE9BQU87QUFBQSxFQUNqQixLQUFLQSxFQUFJLE1BQU1BLEVBQUksT0FBTyxDQUFDO0FBQUEsRUFDM0IsS0FBS0EsRUFBSSxPQUFPO0FBQUEsRUFDaEIsS0FBS0EsRUFBSSxPQUFPO0FBQ2xCLENBQUM7QUFDREEsRUFBSSxNQUFNd0csRUFBRTtBQUNaeEcsRUFBSSxPQUFPO0FBQUEsRUFDVCxvQkFBb0JBLEVBQUksT0FBTyxFQUFFLFNBQVM7QUFBQSxFQUMxQyxzQkFBc0JBLEVBQUksT0FBT0EsRUFBSSxPQUFPLEdBQUdBLEVBQUksSUFBSSxDQUFDLEVBQUUsU0FBUztBQUFBLEVBQ25FLGtCQUFrQkEsRUFBSSxPQUFPO0FBQUEsRUFDN0IseUJBQXlCeUY7QUFBQSxFQUN6QixtQkFBbUJ6RixFQUFJLE9BQU8sRUFBRSxTQUFTO0FBQUEsRUFDekMsc0JBQXNCQSxFQUFJLE9BQU8sRUFBRSxTQUFTO0FBQzlDLENBQUM7QUFDRCxNQUFNeUcsS0FBS3pHLEVBQUksT0FBTztBQUFBLEVBQ3BCLHVCQUF1QkEsRUFBSSxNQUFNQSxFQUFJLE9BQU9BLEVBQUksT0FBTyxHQUFHQSxFQUFJLElBQUksQ0FBQyxDQUFDO0FBQ3RFLENBQUM7QUFDREEsRUFBSSxPQUFPO0FBQUEsRUFDVCxRQUFRZ0Q7QUFBQSxFQUNSLHVCQUF1QnlDO0FBQ3pCLENBQUM7QUFDRHpGLEVBQUksT0FBTztBQUFBLEVBQ1QsWUFBWUEsRUFBSSxPQUFPO0FBQUEsRUFDdkIscUJBQXFCK0M7QUFBQSxFQUNyQix5QkFBeUIwQztBQUMzQixDQUFDO0FBQ0QsTUFBTWlCLEtBQUsxRyxFQUFJLE9BQU87QUFBQSxFQUNwQix1QkFBdUJBLEVBQUksTUFBTUEsRUFBSSxPQUFPQSxFQUFJLE9BQU8sR0FBR0EsRUFBSSxJQUFJLENBQUMsQ0FBQztBQUFBLEVBQ3BFLFVBQVVBLEVBQUksT0FBTztBQUN2QixDQUFDO0FBQ0RBLEVBQUksT0FBT0EsRUFBSSxJQUFJLENBQUM7QUFDcEIsTUFBTTJHLEtBQUssQ0FBQzlGLE1BQU1BLEVBQUUsT0FBTyxDQUFDQyxHQUFHRyxNQUFNSCxJQUFJRyxHQUFHLENBQUM7QUFDN0MsU0FBUzJGLEdBQUcvRixHQUFHQyxHQUFHO0FBQ2hCLE1BQUlHLElBQUksT0FBTztBQUNmLEVBQUFBLElBQUlBLEVBQUVKLEdBQUdDLENBQUMsSUFBSUQsRUFBRSxZQUFZQztBQUM5QjtBQUNBLFNBQVMrRixHQUFHaEcsR0FBR0MsR0FBRztBQUNoQixFQUFBQSxNQUFNLFdBQVdBLElBQUlELEVBQUU7QUFDdkIsTUFBSUksSUFBSSxNQUFNO0FBQ2QsRUFBQUEsS0FBS0EsRUFBRUosR0FBR0MsQ0FBQztBQUNiO0FBQ0EsSUFBSWdHLEtBQXFCLDJCQUFXO0FBQ2xDLE1BQUlqRyxJQUFJLFNBQVNJLEdBQUdJLEdBQUc7QUFDckIsV0FBT1IsSUFBSSxPQUFPLGtCQUFrQjtBQUFBLE1BQ2xDLFdBQVcsQ0FBQztBQUFBLElBQ2QsYUFBYSxTQUFTLFNBQVM2RCxHQUFHQyxHQUFHO0FBQ25DLE1BQUFELEVBQUUsWUFBWUM7QUFBQSxJQUNoQixLQUFLLFNBQVNELEdBQUdDLEdBQUc7QUFDbEIsZUFBU0MsS0FBS0Q7QUFDWixlQUFPLFVBQVUsZUFBZSxLQUFLQSxHQUFHQyxDQUFDLE1BQU1GLEVBQUVFLENBQUMsSUFBSUQsRUFBRUMsQ0FBQztBQUFBLElBQzdELEdBQUcvRCxFQUFFSSxHQUFHSSxDQUFDO0FBQUEsRUFDWDtBQUNBLFNBQU8sU0FBU1AsR0FBR0csR0FBRztBQUNwQixRQUFJLE9BQU9BLEtBQUssY0FBY0EsTUFBTSxLQUFNLE9BQU0sSUFBSSxVQUFVLHlCQUF5QixPQUFPQSxDQUFDLElBQUksK0JBQStCO0FBQ2xJLElBQUFKLEVBQUVDLEdBQUdHLENBQUM7QUFDTixhQUFTSSxJQUFJO0FBQ1gsV0FBSyxjQUFjUDtBQUFBLElBQ3JCO0FBQ0EsSUFBQUEsRUFBRSxZQUFZRyxNQUFNLE9BQU8sT0FBTyxPQUFPQSxDQUFDLEtBQUtJLEVBQUUsWUFBWUosRUFBRSxXQUFXLElBQUlJLEVBQUU7QUFBQSxFQUNsRjtBQUNGLEVBQUUsR0FBRzBGLEtBQUssU0FBU2xHLEdBQUc7QUFDcEIsRUFBQWlHLEdBQUdoRyxHQUFHRCxDQUFDO0FBQ1AsV0FBU0MsRUFBRUcsR0FBR0ksR0FBRztBQUNmLFFBQUksSUFBSSxLQUFLLGFBQWEsSUFBSVIsRUFBRSxLQUFLLE1BQU1JLEdBQUdJLENBQUMsS0FBSztBQUNwRCxXQUFPLE9BQU8sZUFBZSxHQUFHLFFBQVE7QUFBQSxNQUN0QyxPQUFPLEVBQUU7QUFBQSxNQUNULFlBQVk7QUFBQSxNQUNaLGNBQWM7QUFBQSxJQUNoQixDQUFDLEdBQUd1RixHQUFHLEdBQUcsRUFBRSxTQUFTLEdBQUdDLEdBQUcsQ0FBQyxHQUFHO0FBQUEsRUFDakM7QUFDQSxTQUFPL0Y7QUFDVCxFQUFFLEtBQUs7QUFDUCxNQUFNa0csV0FBV0QsR0FBRztBQUFBLEVBQ2xCLFlBQVlqRyxHQUFHO0FBQ2IsVUFBTUcsSUFBSSxHQUFHSCxFQUFFLE9BQU87QUFDdEIsVUFBTUcsQ0FBQyxHQUFHLEtBQUssV0FBV0g7QUFBQSxFQUM1QjtBQUFBLEVBQ0EsSUFBSSx1QkFBdUI7QUFDekIsV0FBTyxLQUFLLFNBQVM7QUFBQSxFQUN2QjtBQUNGO0FBQ0EsTUFBTW1HLElBQUksT0FBT3BHLEdBQUdDLEdBQUdHLE1BQU07QUFDM0IsUUFBTUksSUFBSSxNQUFNUixFQUFFLEtBQUtDLENBQUM7QUFDeEIsTUFBSW9HLEdBQUc3RixDQUFDO0FBQ04sVUFBTSxJQUFJMkYsR0FBRzNGLENBQUM7QUFDaEIsTUFBSSxDQUFDOEYsR0FBRzlGLEdBQUdKLENBQUMsR0FBRztBQUNiLFVBQU0sSUFBSUEsRUFBRSxVQUFVSSxDQUFDO0FBQ3ZCLFVBQU0sRUFBRSxVQUFVLElBQUksTUFBTSxlQUFlLEtBQUssUUFBUSxNQUFNLHFEQUFxREosR0FBRyxXQUFXSSxDQUFDLEdBQUcsRUFBRTtBQUFBLEVBQ3pJO0FBQ0EsU0FBT0E7QUFDVCxHQUFHOEYsS0FBSyxDQUFDdEcsR0FBR0MsTUFBTUEsRUFBRSxVQUFVRCxDQUFDLEVBQUUsU0FBU3FHLEtBQUssQ0FBQ3JHLE1BQU11RSxHQUFHLFVBQVV2RSxDQUFDLEVBQUUsU0FBU3VHLEtBQUssT0FBT3ZHLEdBQUdDLE1BQU0sTUFBTW1HLEVBQUVwRyxHQUFHLEVBQUUsTUFBTSx3QkFBd0IsU0FBU0MsRUFBRSxHQUFHbUYsRUFBRSxHQUFHb0IsSUFBSSxPQUFPeEcsTUFBTSxNQUFNb0csRUFBRXBHLEdBQUcsRUFBRSxNQUFNLGVBQWUsU0FBUyxDQUFDLEVBQUUsR0FBR3NGLEVBQUUsR0FBR21CLEtBQUssT0FBT3pHLEdBQUdDLE1BQU0sTUFBTW1HLEVBQUVwRyxHQUFHLEVBQUUsTUFBTSx5QkFBeUIsU0FBU0MsRUFBRSxHQUFHMkYsRUFBRSxHQUFHYyxLQUFLLE9BQU8xRyxHQUFHQyxNQUFNLE1BQU1tRyxFQUFFcEcsR0FBRyxFQUFFLE1BQU0sNkJBQTZCLFNBQVNDLEVBQUUsR0FBRzRGLEVBQUUsR0FBR2MsS0FBSyxPQUFPM0csR0FBR0MsTUFBTSxNQUFNbUcsRUFBRXBHLEdBQUcsRUFBRSxNQUFNLDZCQUE2QixTQUFTQyxFQUFFLEdBQUcyRixFQUFFLEdBQUdnQixLQUFLLE9BQU81RyxHQUFHQyxNQUFNLE1BQU1tRyxFQUFFcEcsR0FBRyxFQUFFLE1BQU0sd0JBQXdCLFNBQVNDLEVBQUUsR0FBR3lDLEVBQUUsR0FBR21FLEtBQUssT0FBTzdHLEdBQUdDLEdBQUdHLE1BQU07QUFDdGxCLFFBQU1JLElBQUksTUFBTStGLEdBQUd2RyxHQUFHO0FBQUEsSUFDcEIsY0FBY0M7QUFBQSxJQUNkLGdCQUFnQkc7QUFBQSxFQUNsQixDQUFDLEdBQUcsSUFBSSxJQUFJLElBQUlJLEVBQUUsUUFBUSxTQUFTLElBQUksQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDO0FBQ3pELE1BQUksRUFBRSxTQUFTO0FBQ2IsVUFBTSxJQUFJLE1BQU0sc0NBQXNDLEVBQUUsSUFBSSxFQUFFO0FBQ2hFLFFBQU0sSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsU0FBUyxPQUFPLElBQUlzRixHQUFHdEYsRUFBRSxRQUFRLFNBQVMsSUFBSSxDQUFDLE1BQU0sRUFBRSxxQkFBcUIsQ0FBQztBQUN6RyxTQUFPO0FBQUEsSUFDTCxVQUFVO0FBQUEsSUFDVixZQUFZO0FBQUEsRUFDZDtBQUNGLEdBQUdzRyxLQUFLLE9BQU85RyxHQUFHQyxHQUFHRyxHQUFHSSxNQUFNO0FBQzVCLE1BQUlKO0FBQ0YsV0FBTyxFQUFFLFlBQVksR0FBRyxVQUFVLE1BQU07QUFDMUM7QUFDRSxJQUFBSSxJQUFJQSxLQUFLO0FBQ1QsVUFBTSxJQUFJLE1BQU1xRyxHQUFHN0csR0FBR0MsR0FBR08sQ0FBQztBQUMxQixXQUFPLEVBQUUsWUFBWSxFQUFFLFlBQVksVUFBVSxFQUFFLFNBQVM7QUFBQSxFQUMxRDtBQUNGLEdBQUd1RyxLQUFLLE9BQU8vRyxHQUFHQyxNQUFNO0FBQ3RCLE1BQUlELEVBQUUsU0FBUztBQUNiLFVBQU0sSUFBSSxNQUFNLDBCQUEwQjtBQUM1QyxTQUFPLE1BQU0sUUFBUTtBQUFBLElBQ25CLE1BQU0sS0FBS0EsRUFBRSxPQUFPLENBQUMsRUFBRTtBQUFBLE1BQ3JCLENBQUNRLE1BQU00RixFQUFFNUYsR0FBRyxFQUFFLE1BQU0saUJBQWlCLFNBQVNQLEVBQUUsR0FBRzRDLEVBQUU7QUFBQSxJQUN2RDtBQUFBLEVBQ0Y7QUFDRixHQUFHbUUsS0FBSyxPQUFPaEgsR0FBR0MsTUFBTTtBQUN0QixNQUFJO0FBQ0YsV0FBTyxNQUFNbUcsRUFBRXBHLEdBQUcsRUFBRSxNQUFNLDBCQUEwQixTQUFTQyxFQUFFLEdBQUd3RixFQUFFO0FBQUEsRUFDdEUsU0FBU3JGLEdBQUc7QUFDVixVQUFNLFFBQVEsTUFBTSxtREFBbURBLEdBQUcsS0FBSyxVQUFVQSxDQUFDLENBQUMsR0FBR0E7QUFBQSxFQUNoRztBQUNGLEdBQUc2RyxLQUFLLE9BQU9qSCxHQUFHQyxNQUFNLE1BQU1tRyxFQUFFcEcsR0FBRyxFQUFFLE1BQU0sd0JBQXdCLFNBQVNDLEVBQUUsR0FBR3lGLEVBQUUsR0FBR3dCLEtBQUssT0FBT2xILEdBQUdDLE1BQU0sTUFBTW1HLEVBQUVwRyxHQUFHLEVBQUUsTUFBTSxZQUFZLFNBQVNDLEVBQUUsR0FBR3dGLEVBQUUsR0FBRzBCLEtBQUssS0FBS0MsS0FBSyxPQUFPcEgsR0FBR0MsTUFBTTtBQUMxTCxVQUFRLElBQUlBLENBQUM7QUFDYixRQUFNTyxJQUFJLE1BQU1wQixHQUFlO0FBQUEsSUFDN0IsUUFBUVk7QUFBQSxJQUNSLE9BQU87QUFBQSxJQUNQLFNBQVNtSDtBQUFBLElBQ1QsYUFBYTtBQUFBO0FBQUEsRUFFZixDQUFDLEVBQUU7QUFDSCxVQUFRLE1BQU1mLEVBQUU1RixHQUFHLEVBQUUsTUFBTSxrQkFBa0IsR0FBR3VDLEVBQUUsR0FBRztBQUN2RDtBQUNBLFNBQVNzRSxHQUFHckgsR0FBRztBQUNiLFFBQU0sSUFBSSxNQUFNLG1CQUFtQkEsQ0FBQyxFQUFFO0FBQ3hDO0FBQ0EsTUFBTXNILEtBQUssQ0FBQ3RILE1BQU0sT0FBT0MsTUFBTTtBQUM3QixNQUFJRyxHQUFHSTtBQUNQLE1BQUk7QUFDRixLQUFDQSxLQUFLSixJQUFJSCxFQUFFLGNBQWMsS0FBSyxzQkFBc0IsUUFBUU8sRUFBRSxLQUFLSixDQUFDO0FBQ3JFLFVBQU0sSUFBSSxNQUFNSixFQUFFQyxDQUFDO0FBQ25CLFFBQUksRUFBRSxTQUFTO0FBQ2IsTUFBQUEsRUFBRSxjQUFjLElBQUksNEJBQTRCLEVBQUUsT0FBTyxpQkFBaUI7QUFBQSxhQUNuRSxFQUFFLFNBQVM7QUFDbEIsTUFBQUEsRUFBRSxjQUFjLElBQUk7QUFBQSxRQUNsQixFQUFFLE9BQU87QUFBQSxRQUNULEVBQUUsT0FBTztBQUFBLFFBQ1QsRUFBRSxPQUFPO0FBQUEsTUFDWDtBQUFBO0FBRUEsWUFBTSxJQUFJLE1BQU0sbUJBQW1CLENBQUMsRUFBRTtBQUFBLEVBQzFDLFNBQVMsR0FBRztBQUNWLElBQUFBLEVBQUUsY0FBYyxJQUFJLGdCQUFnQkssRUFBRSxDQUFDLENBQUM7QUFBQSxFQUMxQztBQUNGLEdBQUdpSCxLQUFLLENBQUN2SCxNQUFNLE9BQU9DLE1BQU07QUFDMUIsTUFBSTtBQUNGLFdBQU8sTUFBTUQsRUFBRUMsQ0FBQztBQUFBLEVBQ2xCLFNBQVNHLEdBQUc7QUFDVixVQUFNLEVBQUUsT0FBT0ksRUFBRSxJQUFJZ0gsRUFBRSxvQkFBb0I7QUFDM0MsV0FBT2hILEVBQUVKLENBQUMsR0FBRyxFQUFFLGFBQWEsSUFBSSxRQUFRRSxFQUFFRixDQUFDLEVBQUU7QUFBQSxFQUMvQztBQUNGLEdBQUdvSCxJQUFJLENBQUN4SCxNQUFNO0FBQ1osUUFBTUMsSUFBSSxJQUFJTyxNQUFNO0FBQ2xCLFdBQU8sUUFBUSxJQUFJLEdBQUduQixFQUFFLE1BQU0sS0FBSyxNQUFNLENBQUMsR0FBR0EsRUFBRSxLQUFLLEtBQUssR0FBR1csQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHUSxDQUFDO0FBQUEsRUFDM0UsR0FBR0osSUFBSSxJQUFJSSxNQUFNO0FBQ2YsV0FBTyxRQUFRLE1BQU0sR0FBR25CLEVBQUUsSUFBSSxLQUFLLE1BQU0sQ0FBQyxHQUFHQSxFQUFFLEtBQUssS0FBSyxHQUFHVyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUdRLENBQUM7QUFBQSxFQUMzRTtBQUNBLFNBQU87QUFBQSxJQUNMLEtBQUtQO0FBQUEsSUFDTCxLQUFLRztBQUFBLElBQ0wsT0FBT0g7QUFBQSxJQUNQLE9BQU9HO0FBQUEsRUFDVDtBQUNGLEdBQUcsRUFBRSxPQUFPcUgsSUFBSSxPQUFPQyxHQUFHLElBQUlGLEVBQUUsUUFBUSxHQUFHRyxLQUFLLENBQUMzSCxNQUFNO0FBQ3JELE1BQUlBLEVBQUUsZ0JBQWdCLFdBQVc7QUFDL0IsVUFBTSxJQUFJLE1BQU0sNENBQTRDQSxFQUFFLGdCQUFnQixNQUFNLEVBQUU7QUFDeEYsU0FBTyxFQUFFLG1CQUFtQkEsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLEdBQUc7QUFDdEQsR0FBRzRILEtBQUssQ0FBQzVILEdBQUdDLE1BQU07QUFDaEIsUUFBTUcsSUFBSUosRUFBRSxLQUFLLENBQUNRLE1BQU1QLEVBQUUsVUFBVU8sQ0FBQyxFQUFFLE9BQU87QUFDOUMsTUFBSSxDQUFDSjtBQUNILFVBQU1zSCxHQUFHLHdDQUF3QzFILENBQUMsR0FBRyxJQUFJLE1BQU0seUJBQXlCO0FBQzFGLFNBQU9DLEVBQUUsTUFBTUcsQ0FBQztBQUNsQixHQUFHLEVBQUUsT0FBT3lILElBQUksT0FBT0MsR0FBRyxJQUFJTixFQUFFLFdBQVcsR0FBR08sS0FBSyxDQUFDL0gsR0FBR0MsTUFBTTtBQUMzRCxRQUFNRyxJQUFJOEIsRUFBRSxVQUFVbEMsQ0FBQztBQUN2QixNQUFJLENBQUNJLEVBQUUsU0FBUztBQUNkLFVBQU1JLElBQUlKLEVBQUUsTUFBTSxPQUFPLEdBQUcsSUFBSTZDLEdBQUd6QyxDQUFDO0FBQ3BDLGVBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxPQUFPLFFBQVEsQ0FBQztBQUNuQyxNQUFBUCxFQUFFLEdBQUcsR0FBRyxDQUFDO0FBQ1gsVUFBTTZILEdBQUcsZ0RBQWdELENBQUMsR0FBRyxJQUFJLE1BQU0sOENBQThDO0FBQUEsRUFDdkg7QUFDQSxTQUFPMUgsRUFBRTtBQUNYLEdBQUc0SCxLQUFLLENBQUNoSSxHQUFHQyxNQUFNO0FBQ2hCLGFBQVdHLEtBQUtKO0FBQ2QsUUFBSUksRUFBRSxZQUFZO0FBQ2hCLFlBQU1BLEVBQUUsT0FBTyxRQUFRLENBQUNJLE1BQU07QUFDNUIsY0FBTSxJQUFJUSxHQUFHLFVBQVVSLEVBQUUsV0FBVztBQUNwQyxZQUFJLENBQUMsRUFBRTtBQUNMLFVBQUFzSCxHQUFHLDRDQUE0Q3RILEVBQUUsV0FBVyxtQkFBbUJBLENBQUM7QUFBQSxhQUM3RTtBQUNILGdCQUFNLElBQUksRUFBRTtBQUNaLFVBQUFQLEVBQUUsR0FBR08sRUFBRSxNQUFNO0FBQUEsUUFDZjtBQUFBLE1BQ0YsQ0FBQyxHQUFHcUgsR0FBRyxpREFBaUQsS0FBSyxVQUFVekgsRUFBRSxNQUFNLENBQUMsRUFBRSxHQUFHLElBQUksTUFBTSw2Q0FBNkM7QUFDbEosR0FBRzZILEtBQUssdUJBQXVCLEVBQUUsT0FBT0MsR0FBRyxPQUFPQyxHQUFHLElBQUlYLEVBQUUsYUFBYSxHQUFHWSxLQUFLakosRUFBSSxPQUFPO0FBQUEsRUFDekYsVUFBVUEsRUFBSSxRQUFRLGFBQWE7QUFBQSxFQUNuQyxnQkFBZ0JBLEVBQUksUUFBUSxRQUFRO0FBQUEsRUFDcEMsVUFBVUEsRUFBSSxPQUFPO0FBQUEsSUFDbkIsV0FBV0EsRUFBSSxPQUFPO0FBQUEsRUFDeEIsQ0FBQztBQUNILENBQUMsR0FBR2tKLEtBQUtsSixFQUFJO0FBQUEsRUFDWEEsRUFBSSxPQUFPO0FBQUEsSUFDVCxvQkFBb0JBLEVBQUksT0FBTztBQUFBLEVBQ2pDLENBQUM7QUFDSCxFQUFFLE9BQU8sQ0FBQyxHQUFHbUosS0FBS2Y7QUFBQSxFQUNoQixPQUFPLEVBQUUsU0FBU3ZILEdBQUcsZUFBZUMsRUFBRSxNQUFNO0FBQzFDLFVBQU1HLElBQUlKLEVBQUUsaUJBQWlCO0FBQzdCLElBQUFrSSxFQUFFLGlEQUFpRDtBQUNuRCxVQUFNMUgsSUFBSW9ILEdBQUc1SCxFQUFFLHdCQUF3Qm9JLEVBQUU7QUFDekMsSUFBQUYsRUFBRSw4QkFBOEI7QUFDaEMsVUFBTSxJQUFJbEksRUFBRSxrQkFBa0IsSUFBSSxNQUFNd0csRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFLFNBQVM7QUFDN0QsSUFBQTBCLEVBQUUsNkJBQTZCO0FBQy9CLFVBQU0sSUFBSSxNQUFNcEIsR0FBRyxHQUFHLEVBQUUsT0FBTyxHQUFHLE1BQU0sR0FBRyxFQUFFLFVBQVV5QixHQUFHLFFBQVFDLEVBQUUsSUFBSSxNQUFNaEYsR0FBR2hELEVBQUUsU0FBUyxXQUFXO0FBQUEsTUFDckcsTUFBTTtBQUFBLE1BQ04sVUFBVSxFQUFFO0FBQUEsTUFDWixvQkFBb0I7QUFBQSxNQUNwQix1QkFBdUI7QUFBQSxJQUN6QixDQUFDO0FBQ0QsSUFBQTBILEVBQUUsOEJBQThCO0FBQ2hDLFVBQU1PLElBQUlGLEVBQUUsT0FBTyxtQkFBbUI7QUFBQSxNQUNwQyxjQUFjbkksS0FBSyxPQUFPLFNBQVNBLEVBQUU7QUFBQSxNQUNyQyxnQkFBZ0I7QUFBQSxRQUNkLFdBQVc7QUFBQSxRQUNYLFVBQVU7QUFBQSxRQUNWLFdBQVc7QUFBQSxRQUNYLFFBQVE7QUFBQSxNQUNWO0FBQUEsSUFDRixDQUFDLEdBQUcsSUFBSSxNQUFNO0FBQ1osTUFBQXFJLEVBQUUsTUFBTSxJQUFJUixFQUFFLEVBQUU7QUFBQSxJQUNsQixHQUFHUyxJQUFJLE1BQU07QUFDWCxNQUFBRCxFQUFFLFFBQVE7QUFBQSxJQUNaO0FBQ0EsV0FBT3JJLEtBQUssUUFBUUEsRUFBRSxtQkFBbUI4SCxFQUFFLDREQUE0RCxLQUFLQSxFQUFFLGdDQUFnQyxHQUFHLEVBQUUsSUFBSU8sRUFBRSxHQUFHLFNBQVMsT0FBTyxNQUFNO0FBQ2hMLFVBQUlQLEVBQUUsNEJBQTRCLEdBQUc5SCxLQUFLLFFBQVFBLEVBQUUsc0JBQXNCLENBQUMsTUFBTUEsRUFBRSxtQkFBbUIsR0FBRztBQUN2RyxRQUFBOEgsRUFBRSxrREFBa0Q7QUFDcEQ7QUFBQSxNQUNGO0FBQ0EsUUFBRSxRQUFRO0FBQUEsSUFDWixDQUFDLEdBQUdPLEVBQUUsR0FBRyxXQUFXLE9BQU8sTUFBTTtBQUMvQixNQUFBUCxFQUFFLGdDQUFnQyxDQUFDO0FBQ25DLFlBQU0sSUFBSSxNQUFNTSxFQUFFLG9CQUFvQjtBQUFBLFFBQ3BDLFVBQVVEO0FBQUEsUUFDVixRQUFRO0FBQUEsVUFDTixpQkFBaUIsRUFBRTtBQUFBLFFBQ3JCO0FBQUEsTUFDRixDQUFDO0FBQ0QsUUFBRSxTQUFTSixHQUFHLFNBQVMsRUFBRSxLQUFLLEdBQUdsSSxFQUFFLElBQUksZ0JBQWdCLEVBQUUsTUFBTSxXQUFXLDJCQUEyQixNQUFNaUksRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEdBQUdTLEVBQUUsV0FBVyxJQUFJO0FBQUEsUUFDL0osU0FBUzNJO0FBQUEsUUFDVCx1QkFBdUJRO0FBQUEsUUFDdkIsa0JBQWtCMEQsR0FBR2xFLEVBQUUsT0FBTztBQUFBLFFBQzlCLGVBQWVDO0FBQUEsUUFDZixjQUFjLEVBQUUsVUFBVSxFQUFFLGNBQWM7QUFBQSxRQUMxQyxZQUFZLEVBQUUsYUFBYSxHQUFHO0FBQUEsTUFDaEMsQ0FBQztBQUFBLElBQ0gsQ0FBQyxHQUFHO0FBQUEsTUFDRixhQUFhO0FBQUEsTUFDYixZQUFZO0FBQUEsUUFDVixhQUFhO0FBQUEsUUFDYixnQkFBZ0J5STtBQUFBLFFBQ2hCLHNCQUFzQixZQUFZLE1BQU1FLEdBQUdYLEVBQUU7QUFBQSxNQUMvQztBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0YsR0FBR1ksS0FBS3ZCO0FBQUEsRUFDTixPQUFPO0FBQUEsSUFDTCxTQUFTdEg7QUFBQSxJQUNULHVCQUF1QkM7QUFBQSxJQUN2QixrQkFBa0JHO0FBQUEsSUFDbEIsZUFBZUk7QUFBQSxJQUNmLGNBQWM7QUFBQSxFQUNoQixNQUFNO0FBQ0osSUFBQTBILEVBQUUsMkJBQTJCO0FBQzdCLFVBQU0sSUFBSWxJLEVBQUU7QUFDWixJQUFBa0ksRUFBRSx1Q0FBdUM7QUFDekMsVUFBTSxJQUFJWSxHQUFHMUksR0FBRyxFQUFFLFFBQVEsR0FBRyxJQUFJMkgsR0FBRyxHQUFHdkgsRUFBRSxJQUFJLGlCQUFpQjtBQUM5RCxJQUFBMEgsRUFBRSwwQkFBMEI7QUFDNUIsVUFBTUssSUFBSSxNQUFNOUIsR0FBRyxHQUFHO0FBQUEsTUFDcEIsa0JBQWtCeEcsRUFBRTtBQUFBLE1BQ3BCLHlCQUF5QkE7QUFBQSxNQUN6QixzQkFBc0IsRUFBRSxTQUFTO0FBQUEsSUFDbkMsQ0FBQztBQUNELElBQUFpSSxFQUFFLCtCQUErQkssQ0FBQztBQUNsQyxVQUFNRSxJQUFJSixHQUFHLE1BQU1FLEVBQUUscUJBQXFCLEVBQUUsQ0FBQyxFQUFFLG9CQUFvQlEsSUFBSSxNQUFNdkMsRUFBRSxDQUFDO0FBQ2hGLFFBQUl1QyxFQUFFLFNBQVMsU0FBUztBQUN0QixNQUFBYixFQUFFLHdCQUF3QjtBQUMxQixZQUFNUSxJQUFJLE1BQU05QixHQUFHLEdBQUc7QUFBQSxRQUNwQixjQUFjbUMsRUFBRTtBQUFBLFFBQ2hCLG1CQUFtQk47QUFBQSxNQUNyQixDQUFDO0FBQ0QsYUFBTyxFQUFFLE1BQU0sU0FBUyxRQUFRZCxHQUFHZSxDQUFDLEVBQUU7QUFBQSxJQUN4QyxPQUFPO0FBQ0wsTUFBQVIsRUFBRSxtQkFBbUI7QUFDckIsWUFBTVEsSUFBSTtBQUFBLFFBQ1IsY0FBY0ssRUFBRTtBQUFBLFFBQ2hCLGVBQWU7QUFBQSxVQUNiLGVBQWU5SSxFQUFFO0FBQUEsUUFDbkI7QUFBQSxRQUNBLGdCQUFnQixFQUFFVyxFQUFFLEtBQUs7QUFBQSxRQUN6QixtQkFBbUIsRUFBRUEsRUFBRSxRQUFRO0FBQUEsUUFDL0Isa0JBQWtCLEVBQUVBLEVBQUUsT0FBTztBQUFBLFFBQzdCLGdCQUFnQixFQUFFQSxFQUFFLGNBQWM7QUFBQSxRQUNsQyxZQUFZbUksRUFBRTtBQUFBLFFBQ2QsbUJBQW1CQSxFQUFFO0FBQUEsUUFDckIsZUFBZTtBQUFBLFFBQ2YseUJBQXlCOUk7QUFBQSxNQUMzQjtBQUNBLGFBQU8sRUFBRSxNQUFNLFlBQVksUUFBUSxNQUFNaUgsR0FBRyxHQUFHd0IsQ0FBQyxFQUFFO0FBQUEsSUFDcEQ7QUFBQSxFQUNGO0FBQ0YsR0FBR0ksS0FBSyxDQUFDOUksR0FBR0MsTUFBTTtBQUNoQixNQUFJOEQsR0FBR0MsR0FBR3VFLEdBQUdDLEdBQUdDO0FBQ2hCLFFBQU1ySSxJQUFJLEVBQUUsR0FBR0osRUFBRSxHQUFHLENBQUNRLEdBQUcsR0FBR3FELENBQUMsTUFBTUcsS0FBS0QsSUFBSTlELEVBQUUsZ0JBQWdCLFNBQVMsT0FBTyxTQUFTOEQsRUFBRSxLQUFLLE1BQU0sT0FBTyxTQUFTQyxFQUFFLE1BQU0sS0FBSyxNQUFNLENBQUMsR0FBR0YsSUFBSUQsRUFBRSxLQUFLLEdBQUcsS0FBSztBQUM3SixTQUFPekQsRUFBRVEsRUFBRSxVQUFVLElBQUlSLEVBQUVRLEVBQUUsVUFBVSxLQUFLSixLQUFLLGVBQWVKLEVBQUVRLEVBQUUsU0FBUyxJQUFJUixFQUFFUSxFQUFFLFNBQVMsS0FBS2tELEtBQUssZUFBZTFELEVBQUVRLEVBQUUsS0FBSyxJQUFJUixFQUFFUSxFQUFFLEtBQUs7QUFBQSxJQUMzSTJILElBQUl0SSxFQUFFLFNBQVMsT0FBTyxTQUFTc0ksRUFBRSxVQUFVdEksRUFBRSxnQkFBZ0IsU0FBUyw4QkFBOEJHLEVBQUVRLEVBQUUsUUFBUSxJQUFJUixFQUFFUSxFQUFFLFFBQVEsT0FBTzRILElBQUl2SSxFQUFFLGdCQUFnQixZQUFZLE9BQU8sU0FBU3VJLEVBQUUsZ0JBQWdCLFNBQVNwSSxFQUFFUSxFQUFFLE9BQU8sSUFBSVIsRUFBRVEsRUFBRSxPQUFPLE9BQU82SCxJQUFJeEksRUFBRSxnQkFBZ0IsWUFBWSxPQUFPLFNBQVN3SSxFQUFFLFlBQVksTUFBTVAsRUFBRSxzQkFBc0I5SCxDQUFDLEdBQUdBO0FBQzNWLEdBQUd3SSxLQUFLLENBQUM1SSxNQUFNLElBQUksUUFBUSxDQUFDQyxNQUFNO0FBQ2hDLFFBQU1HLElBQUksTUFBTTtBQUNkLFVBQU1JLElBQUksU0FBUyxlQUFlUixDQUFDO0FBQ25DLElBQUFRLElBQUlQLEVBQUVPLENBQUMsSUFBSSxzQkFBc0JKLENBQUM7QUFBQSxFQUNwQztBQUNBLEVBQUFBLEVBQUU7QUFDSixDQUFDLEdBQUc0SSxLQUFLLGttQkFBa21CQyxLQUFLLENBQUNqSixNQUFNO0FBQ3JuQixRQUFNQyxJQUFJLFNBQVMsY0FBYyxVQUFVO0FBQzNDLEVBQUFBLEVBQUUsWUFBWTtBQUFBO0FBQUEsUUFFUitJLEVBQUU7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLHVCQUthaEosQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUl0QixRQUFNSSxJQUFJLFNBQVMsY0FBYyxLQUFLLEdBQUdJLElBQUlKLEVBQUUsYUFBYSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBQzVFLEVBQUFJLEVBQUUsWUFBWVAsRUFBRSxRQUFRLFVBQVUsRUFBRSxDQUFDO0FBQ3JDLFFBQU0sSUFBSU8sRUFBRSxjQUFjLGtCQUFrQixHQUFHLElBQUlBLEVBQUUsY0FBYyxnQkFBZ0I7QUFDbkYsU0FBTyxTQUFTLEtBQUssWUFBWUosQ0FBQyxHQUFHLEVBQUUsTUFBTUEsR0FBRyxRQUFRLEdBQUcsY0FBYyxFQUFFO0FBQzdFO0FBQ0EsU0FBUzhJLEdBQUdsSixHQUFHQyxHQUFHRyxHQUFHO0FBQ25CLFFBQU1JLElBQUksWUFBWTtBQUNwQixRQUFJO0FBQ0YsWUFBTSxJQUFJLE1BQU00RyxHQUFHcEgsR0FBR0ksQ0FBQztBQUN2QixZQUFNLGNBQWMsQ0FBQyxHQUFHSCxFQUFFLENBQUM7QUFBQSxJQUM3QixRQUFRO0FBQUEsSUFDUjtBQUFBLEVBQ0Y7QUFDQSxFQUFBTyxFQUFFO0FBQ0YsUUFBTSxJQUFJLFlBQVlBLEdBQUcyRyxFQUFFO0FBQzNCLFNBQU87QUFDVDtBQUNBLFNBQVNnQyxHQUFHO0FBQUEsRUFDVixVQUFVbko7QUFBQSxFQUNWLGlCQUFpQkM7QUFBQSxFQUNqQixTQUFTRztBQUNYLEdBQUc7QUFDRCxRQUFNSSxJQUFJLE1BQU07QUFDZCxrQkFBY1AsQ0FBQyxHQUFHRCxFQUFFLEtBQUssT0FBTyxHQUFHSSxFQUFFMEMsR0FBRSxTQUFTO0FBQUEsRUFDbEQ7QUFDQSxTQUFPOUMsRUFBRSxhQUFhLGlCQUFpQixTQUFTUSxDQUFDLEdBQUcsTUFBTTtBQUN4RCxJQUFBUixFQUFFLGFBQWEsb0JBQW9CLFNBQVNRLENBQUM7QUFBQSxFQUMvQztBQUNGO0FBQ0EsZUFBZTRJLEdBQUc7QUFBQSxFQUNoQixLQUFLcEo7QUFBQSxFQUNMLFNBQVNDO0FBQ1gsR0FBRztBQUNELFFBQU1HLElBQUk2SSxHQUFHakosQ0FBQztBQUNkLFNBQU8sSUFBSSxRQUFRLENBQUNRLE1BQU07QUFDeEIsVUFBTSxJQUFJLENBQUMsTUFBTTtBQUNmLGlCQUFXLE1BQU07QUFDZixRQUFBSixFQUFFLEtBQUssT0FBTztBQUFBLE1BQ2hCLEdBQUcsR0FBRyxHQUFHSSxFQUFFLENBQUMsR0FBRyxLQUFLLFFBQVEsRUFBRTtBQUFBLElBQ2hDLEdBQUcsSUFBSTBJLEdBQUc5SSxFQUFFLFFBQVEsR0FBRyxJQUFJLElBQUlILENBQUMsRUFBRSxNQUFNLEdBQUcsSUFBSWtKLEdBQUc7QUFBQSxNQUNoRCxVQUFVL0k7QUFBQSxNQUNWLGlCQUFpQjtBQUFBLE1BQ2pCLFNBQVNJO0FBQUEsSUFDWCxDQUFDO0FBQUEsRUFDSCxDQUFDO0FBQ0g7QUFDQSxNQUFNLEVBQUUsT0FBTzZJLEdBQUcsT0FBT0MsR0FBRyxJQUFJOUIsRUFBRSxXQUFXLEdBQUcsRUFBRSxPQUFPK0IsR0FBRyxJQUFJL0IsRUFBRSxXQUFXLEdBQUdnQyxLQUFLbEM7QUFBQSxFQUNuRixPQUFPO0FBQUEsSUFDTCxTQUFTdEg7QUFBQSxJQUNULHVCQUF1QkM7QUFBQSxJQUN2QixrQkFBa0JHO0FBQUEsSUFDbEIsZUFBZUk7QUFBQSxJQUNmLGNBQWM7QUFBQSxFQUNoQixNQUFNO0FBQ0osUUFBSWlJO0FBQ0osSUFBQVksRUFBRSwrQkFBK0IsRUFBRSx1QkFBdUJwSixFQUFFLENBQUM7QUFDN0QsVUFBTTZELElBQUk5RCxFQUFFLGtCQUFrQitELElBQUksTUFBTXlDLEVBQUUxQyxDQUFDO0FBQzNDLElBQUF1RixFQUFFLDJDQUEyQ3RGLEVBQUUsSUFBSSxHQUFHO0FBQ3RELFVBQU1DLElBQUkrRCxHQUFHM0gsR0FBR0ksRUFBRSxJQUFJLGlCQUFpQjtBQUN2QyxJQUFBNkksRUFBRSwyQ0FBMkNySixFQUFFLGlCQUFpQixHQUFHO0FBQ25FLFVBQU0sSUFBSSxNQUFNK0csR0FBRyxFQUFFLHVCQUF1QjtBQUFBLE1BQzFDLFlBQVkvRyxFQUFFO0FBQUEsSUFDaEIsQ0FBQztBQUNELElBQUFnSSxHQUFHLEdBQUd4SCxFQUFFLElBQUksaUJBQWlCO0FBQzdCLFVBQU1nSSxJQUFJO0FBQUEsTUFDUixZQUFZeEksRUFBRTtBQUFBLE1BQ2QseUJBQXlCQztBQUFBLE1BQ3pCLHFCQUFxQitEO0FBQUEsSUFDdkI7QUFDQSxRQUFJO0FBQ0YsVUFBSUQsRUFBRSxTQUFTLFNBQVM7QUFDdEIsUUFBQXNGLEVBQUUsOENBQThDdEYsRUFBRSxLQUFLLEdBQUc7QUFDMUQsY0FBTSxJQUFJLE1BQU1rRCxHQUFHbkQsR0FBRzBFLENBQUM7QUFDdkIsZUFBT2EsRUFBRSwwQ0FBMEMsRUFBRSxpQkFBaUIsR0FBRyxHQUFHLEVBQUUsTUFBTSxTQUFTLFFBQVEsRUFBRTtBQUFBLE1BQ3pHLE9BQU87QUFDTCxRQUFBQSxFQUFFLG9FQUFvRXJKLEVBQUUsaUJBQWlCLEdBQUc7QUFDNUYsY0FBTSxJQUFJLE1BQU1nSCxHQUFHbEQsR0FBRzBFLENBQUM7QUFDdkIsZUFBT2EsRUFBRSxvQ0FBb0MsR0FBRyxFQUFFLE1BQU0sWUFBWSxRQUFRLEVBQUU7QUFBQSxNQUNoRjtBQUFBLElBQ0YsU0FBUyxHQUFHO0FBQ1YsVUFBSSxhQUFhbEQsTUFBTSxFQUFFLHlCQUF5QixnQkFBZ0I7QUFDaEUsUUFBQWtELEVBQUUsdURBQXVELEdBQUdBLEVBQUUsMEJBQTBCLEVBQUUsU0FBUyxPQUFPO0FBQzFHLGNBQU1YLE1BQU1ELElBQUksRUFBRSxTQUFTLFlBQVksT0FBTyxTQUFTQSxFQUFFLHdCQUF3QixPQUFPLFFBQVEsSUFBSSxNQUFNL0IsR0FBRzVDLEdBQUcwRSxDQUFDO0FBQ2pILFlBQUlhLEVBQUUsNkJBQTZCWCxDQUFDLEVBQUUsR0FBR1csRUFBRSwwQkFBMEIsQ0FBQyxHQUFHWCxJQUFJLE1BQU1lLEdBQUcsR0FBR3pKLEVBQUUsT0FBTyxJQUFJLE1BQU0wSixHQUFHLENBQUMsR0FBRzNGLEVBQUUsU0FBUyxTQUFTO0FBQ3JJLFVBQUFzRixFQUFFLHdDQUF3QyxFQUFFLFFBQVEsR0FBRztBQUN2RCxnQkFBTSxJQUFJLE1BQU16QyxHQUFHOUMsR0FBRztBQUFBLFlBQ3BCLGNBQWNDLEVBQUU7QUFBQSxZQUNoQixtQkFBbUIsRUFBRTtBQUFBLFVBQ3ZCLENBQUM7QUFDRCxVQUFBc0YsRUFBRSxrREFBa0QsQ0FBQztBQUNyRCxnQkFBTU0sSUFBSWhDLEdBQUcsQ0FBQztBQUNkLGlCQUFPMEIsRUFBRSwwQ0FBMENNLEVBQUUsaUJBQWlCLEdBQUcsR0FBRyxFQUFFLE1BQU0sU0FBUyxRQUFRQSxFQUFFO0FBQUEsUUFDekcsT0FBTztBQUNMLFVBQUFOLEVBQUUsd0NBQXdDWCxJQUFJLFFBQVEsUUFBUSxHQUFHO0FBQ2pFLGdCQUFNLElBQUksTUFBTTFCLEdBQUdsRCxHQUFHO0FBQUEsWUFDcEIsR0FBRzBFO0FBQUEsWUFDSCxtQkFBbUIsRUFBRTtBQUFBLFlBQ3JCLDJCQUEyQixDQUFDRTtBQUFBLFVBQzlCLENBQUM7QUFDRCxpQkFBT1csRUFBRSxvQ0FBb0MsR0FBRyxFQUFFLE1BQU0sWUFBWSxRQUFRLEVBQUU7QUFBQSxRQUNoRjtBQUFBLE1BQ0Y7QUFDQSxZQUFNQyxHQUFHLHVDQUF1QyxHQUFHQSxHQUFHLENBQUMsR0FBRztBQUFBLElBQzVEO0FBQUEsRUFDRjtBQUNGLEdBQUdNLEtBQUssQ0FBQzVKLE1BQU07QUFDYixRQUFNQyxJQUFJRCxFQUFFLHNCQUFzQixLQUFLLENBQUNJLE1BQU1BLEVBQUUsU0FBUyxZQUFZO0FBQ3JFLE1BQUksQ0FBQ0g7QUFDSCxVQUFNLElBQUksTUFBTSw0QkFBNEI7QUFDOUMsU0FBT2lELEdBQUcsTUFBTWpELENBQUM7QUFDbkIsR0FBRzRKLEtBQUssQ0FBQzdKLE1BQU07QUFDYixRQUFNQyxJQUFJRCxFQUFFLHNCQUFzQixLQUFLLENBQUNJLE1BQU1BLEVBQUUsU0FBUywyQkFBMkI7QUFDcEYsTUFBSSxDQUFDSDtBQUNILFVBQU0sSUFBSSxNQUFNLDRCQUE0QjtBQUM5QyxTQUFPK0MsR0FBRyxNQUFNL0MsQ0FBQztBQUNuQixHQUFHd0osS0FBSyxPQUFPekosR0FBR0MsTUFBTTtBQUN0QixRQUFNRyxJQUFJeUosR0FBRzdKLENBQUM7QUFDZCxFQUFBcUosRUFBRSxpQ0FBaUNqSixFQUFFLFlBQVksR0FBRztBQUNwRCxRQUFNSSxJQUFJLE1BQU00SSxHQUFHLEVBQUUsS0FBS2hKLEVBQUUsY0FBYyxTQUFTSCxFQUFFLENBQUM7QUFDdEQsTUFBSW9KLEVBQUUseUNBQXlDN0ksQ0FBQyxHQUFHLEdBQUdBLE1BQU1zQyxHQUFFO0FBQzVELFVBQU0sSUFBSSxNQUFNLDRCQUE0QjtBQUM5QyxNQUFJdEMsTUFBTXNDLEdBQUU7QUFDVixVQUFNLElBQUksTUFBTSx5QkFBeUI7QUFDN0MsR0FBRzRHLEtBQUssT0FBTzFKLE1BQU07QUFDbkIsUUFBTUMsSUFBSTJKLEdBQUc1SixDQUFDO0FBQ2QsRUFBQXVKLEdBQUcsMkNBQTJDdEosRUFBRSxjQUFjLFVBQVUsR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLE1BQU0yRCxHQUFHM0QsQ0FBQyxHQUFHc0osR0FBRywwQ0FBMEM7QUFDbEosR0FBRyxFQUFFLE9BQU9PLEdBQUcsT0FBT0MsR0FBRyxJQUFJdkMsRUFBRSxXQUFXLEdBQUd3QyxLQUFLN0ssRUFBSSxPQUFPO0FBQUEsRUFDM0QsVUFBVUEsRUFBSSxNQUFNLENBQUNBLEVBQUksUUFBUSxXQUFXLEdBQUdBLEVBQUksUUFBUSxZQUFZLENBQUMsQ0FBQztBQUFBLEVBQ3pFLGdCQUFnQkEsRUFBSSxRQUFRLFFBQVE7QUFBQSxFQUNwQyxVQUFVQSxFQUFJLE9BQU87QUFBQSxJQUNuQixXQUFXQSxFQUFJLE9BQU87QUFBQSxFQUN4QixDQUFDO0FBQ0gsQ0FBQyxHQUFHOEssS0FBSzFDO0FBQUEsRUFDUCxPQUFPLEVBQUUsU0FBU3ZILEVBQUUsTUFBTTtBQUN4QixJQUFBOEosRUFBRSxpREFBaUQ7QUFDbkQsVUFBTTdKLElBQUkySCxHQUFHNUgsRUFBRSx3QkFBd0JnSyxFQUFFO0FBQ3pDLElBQUFGLEVBQUUsZ0NBQWdDO0FBQ2xDLFVBQU0xSixJQUFJSixFQUFFLGtCQUFrQlEsSUFBSSxNQUFNZ0csRUFBRXBHLENBQUMsR0FBRyxJQUFJSSxFQUFFLFNBQVM7QUFDN0QsSUFBQXNKLEVBQUUsZ0NBQWdDO0FBQ2xDLFVBQU0sSUFBSSxNQUFNaEQsR0FBRzFHLEdBQUdJLEVBQUUsT0FBTyxHQUFHLE1BQU0sR0FBRyxJQUFJLE1BQU1pRDtBQUFBLE1BQ25EeEQsRUFBRSxTQUFTO0FBQUEsTUFDWCxFQUFFO0FBQUEsTUFDRixFQUFFO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFDQSxJQUFBNkosRUFBRSw4QkFBOEI7QUFDaEMsVUFBTSxJQUFJLE1BQU0sRUFBRSxlQUFlO0FBQ2pDLFdBQU8sTUFBTSxRQUFRQyxHQUFHLDhCQUE4QixHQUFHLEVBQUUsYUFBYSxJQUFJLFFBQVEsK0JBQStCLE1BQU1ELEVBQUUsNkRBQTZELENBQUMsR0FBRztBQUFBLE1BQzFMLGFBQWE7QUFBQSxNQUNiLElBQUk7QUFBQSxNQUNKLG9CQUFvQjtBQUFBLFFBQ2xCLFVBQVUsRUFBRTtBQUFBLFFBQ1osV0FBVyxFQUFFO0FBQUEsTUFDZjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0YsR0FBR0ksS0FBSzVDO0FBQUEsRUFDTixPQUFPO0FBQUEsSUFDTCxTQUFTdEg7QUFBQSxJQUNULHVCQUF1QkM7QUFBQSxJQUN2QixrQkFBa0JHO0FBQUEsSUFDbEIsZUFBZUk7QUFBQSxJQUNmLGNBQWM7QUFBQSxJQUNkLFlBQVk7QUFBQSxFQUNkLE1BQU07QUFDSixRQUFJc0osRUFBRSwyQkFBMkIsR0FBRyxFQUFFLGFBQWE3SixFQUFFO0FBQ25ELFlBQU0sSUFBSSxNQUFNLCtCQUErQixFQUFFLFFBQVEsU0FBU0EsRUFBRSxRQUFRLEVBQUU7QUFDaEYsVUFBTSxJQUFJRCxFQUFFLGtCQUFrQixJQUFJLEVBQUU7QUFDcEMsUUFBSSxLQUFLLFFBQVEsRUFBRSx3QkFBd0I7QUFDekMsWUFBTSxJQUFJLEVBQUU7QUFDWixNQUFBOEosRUFBRSw2QkFBNkIsQ0FBQyxHQUFHSyxHQUFHLEdBQUcsRUFBRSxRQUFRLEVBQUUsT0FBTztBQUFBLElBQzlEO0FBQ0EsSUFBQUwsRUFBRSxzQkFBc0IsR0FBRyxFQUFFLEtBQUs7QUFDbEMsVUFBTXZCLElBQUksTUFBTTdFLEdBQUcsQ0FBQztBQUNwQixJQUFBb0csRUFBRSwwQkFBMEJ2QixDQUFDLEdBQUd1QixFQUFFLHVDQUF1QztBQUN6RSxVQUFNdEIsSUFBSTRCLEdBQUdoSyxHQUFHbUksQ0FBQyxHQUFHRSxJQUFJVixHQUFHUyxHQUFHaEksRUFBRSxJQUFJLGlCQUFpQjtBQUNyRCxJQUFBc0osRUFBRSw4Q0FBOEM7QUFDaEQsVUFBTSxJQUFJLE1BQU1uRCxHQUFHLEdBQUc7QUFBQSxNQUNwQixRQUFROEI7QUFBQSxNQUNSLHVCQUF1QnhJO0FBQUEsSUFDekIsQ0FBQyxHQUFHeUksSUFBSTJCLEdBQUcsQ0FBQztBQUNaLElBQUFQLEVBQUUsOEJBQThCLEdBQUcsTUFBTW5HLEdBQUcrRSxHQUFHSCxDQUFDO0FBQ2hELFVBQU0sSUFBSSxNQUFNL0IsRUFBRSxDQUFDO0FBQ25CLFFBQUksRUFBRSxTQUFTLFNBQVM7QUFDdEIsTUFBQXNELEVBQUUsc0NBQXNDO0FBQ3hDLFlBQU0sSUFBSSxNQUFNbEQsR0FBRyxHQUFHO0FBQUEsUUFDcEIsY0FBYyxFQUFFO0FBQUEsTUFDbEIsQ0FBQztBQUNELGFBQU8sRUFBRSxNQUFNLFNBQVMsUUFBUWUsR0FBRyxDQUFDLEVBQUU7QUFBQSxJQUN4QyxPQUFPO0FBQ0wsTUFBQW1DLEVBQUUsd0JBQXdCO0FBQzFCLFlBQU0sSUFBSTtBQUFBLFFBQ1IsY0FBYyxFQUFFO0FBQUEsUUFDaEIsZUFBZTtBQUFBLFVBQ2IsZUFBZTdKLEVBQUU7QUFBQSxRQUNuQjtBQUFBLFFBQ0EsZ0JBQWdCd0ksRUFBRTdILEVBQUUsS0FBSztBQUFBLFFBQ3pCLG1CQUFtQjZILEVBQUU3SCxFQUFFLFFBQVE7QUFBQSxRQUMvQixrQkFBa0I2SCxFQUFFN0gsRUFBRSxPQUFPO0FBQUEsUUFDN0IsZ0JBQWdCNkgsRUFBRTdILEVBQUUsY0FBYztBQUFBLFFBQ2xDLFlBQVksRUFBRTtBQUFBLFFBQ2QsbUJBQW1CLEVBQUU7QUFBQSxRQUNyQixlQUFlO0FBQUEsUUFDZix5QkFBeUJYO0FBQUEsTUFDM0I7QUFDQSxhQUFPLEVBQUUsTUFBTSxZQUFZLFFBQVEsTUFBTWlILEdBQUcsR0FBRyxDQUFDLEVBQUU7QUFBQSxJQUNwRDtBQUFBLEVBQ0Y7QUFDRixHQUFHa0QsS0FBSyxDQUFDcEssR0FBR0MsTUFBTTtBQUNoQixNQUFJOEQsR0FBR0MsR0FBR3VFLEdBQUdDO0FBQ2IsUUFBTXBJLElBQUksRUFBRSxHQUFHSixFQUFFLEdBQUcsQ0FBQ1EsR0FBRyxHQUFHcUQsQ0FBQyxNQUFNRyxLQUFLRCxJQUFJOUQsRUFBRSxjQUFjLE9BQU8sU0FBUzhELEVBQUUsS0FBSyxNQUFNLE9BQU8sU0FBU0MsRUFBRSxNQUFNLEtBQUssTUFBTSxDQUFDLEdBQUdGLElBQUlELEVBQUUsS0FBSyxHQUFHLEtBQUs7QUFDbEosU0FBT3pELEVBQUVRLEVBQUUsVUFBVSxJQUFJUixFQUFFUSxFQUFFLFVBQVUsS0FBS0osS0FBSyxlQUFlSixFQUFFUSxFQUFFLFNBQVMsSUFBSVIsRUFBRVEsRUFBRSxTQUFTLEtBQUtrRCxLQUFLLGVBQWUxRCxFQUFFUSxFQUFFLEtBQUssSUFBSVIsRUFBRVEsRUFBRSxLQUFLLEtBQUtYLEVBQUUsY0FBYyw4QkFBOEJHLEVBQUVRLEVBQUUsUUFBUSxJQUFJUixFQUFFUSxFQUFFLFFBQVEsT0FBTzJILElBQUl0SSxFQUFFLG9CQUFvQixPQUFPLFNBQVNzSSxFQUFFLGVBQWUsU0FBU25JLEVBQUVRLEVBQUUsT0FBTyxJQUFJUixFQUFFUSxFQUFFLE9BQU8sT0FBTzRILElBQUl2SSxFQUFFLG9CQUFvQixPQUFPLFNBQVN1SSxFQUFFLFlBQVksTUFBTXNCLEVBQUUsc0JBQXNCMUosQ0FBQyxHQUFHQTtBQUNwYSxHQUFHK0osS0FBSyxDQUFDbkssR0FBR0MsR0FBR0csTUFBTTtBQUNuQixFQUFBSixFQUFFLE9BQU87QUFBQSxJQUNQLE9BQU87QUFBQSxNQUNMLFFBQVFDLEVBQUU7QUFBQSxNQUNWLE9BQU87QUFBQSxNQUNQLFNBQVNHO0FBQUEsSUFDWDtBQUFBLElBQ0EsVUFBVUgsRUFBRTtBQUFBLEVBQ2QsQ0FBQztBQUNILEdBQUdvSyxLQUFLLENBQUNySyxNQUFNO0FBQ2IsTUFBSUEsRUFBRSxzQkFBc0IsV0FBVztBQUNyQyxVQUFNLElBQUksTUFBTTtBQUFBLGVBQ0xBLEVBQUUsc0JBQXNCLE1BQU0sd0JBQXdCO0FBQ25FLFNBQU9tRCxHQUFHLE1BQU1uRCxFQUFFLHNCQUFzQixDQUFDLENBQUM7QUFDNUMsR0FBR3NLLEtBQUssQ0FBQ3RLLEdBQUdDLEdBQUdHLE1BQU07QUFDbkIsUUFBTUksSUFBSVIsRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLGFBQWFDLENBQUM7QUFDMUMsTUFBSU8sRUFBRSxXQUFXO0FBQ2YsVUFBTSxRQUFRLE1BQU0sYUFBYVIsQ0FBQyxHQUFHLElBQUksTUFBTSxnQ0FBZ0NDLENBQUMsb0JBQW9CRyxDQUFDLEdBQUc7QUFDMUcsTUFBSUksRUFBRSxXQUFXO0FBQ2YsVUFBTSxRQUFRLE1BQU0sYUFBYVIsQ0FBQyxHQUFHLElBQUksTUFBTSwwQ0FBMENDLENBQUMsb0JBQW9CRyxDQUFDLEdBQUc7QUFDcEgsU0FBT0ksRUFBRSxDQUFDO0FBQ1osR0FBR21JLElBQUk7QUFBQTtBQUFBO0FBQUEsRUFHTCxVQUFVO0FBQUEsSUFDUixNQUFNLFlBQVk7QUFBQSxJQUNsQjtBQUFBLElBQ0EsS0FBS2E7QUFBQSxFQUNQO0FBQUE7QUFBQSxFQUVBLFVBQVU7QUFBQSxJQUNSLE1BQU1TO0FBQUEsSUFDTixLQUFLQztBQUFBLEVBQ1A7QUFBQSxFQUNBLFlBQVk7QUFBQSxJQUNWLE1BQU01QjtBQUFBLElBQ04sS0FBS087QUFBQSxFQUNQO0FBQUE7QUFBQTtBQUdGO0FBQ0EsSUFBSTBCLEtBQUssU0FBU3ZLLEdBQUdDLEdBQUc7QUFDdEIsU0FBT3NLLEtBQUssT0FBTyxrQkFBa0IsRUFBRSxXQUFXLENBQUMsRUFBRSxhQUFhLFNBQVMsU0FBU25LLEdBQUdJLEdBQUc7QUFDeEYsSUFBQUosRUFBRSxZQUFZSTtBQUFBLEVBQ2hCLEtBQUssU0FBU0osR0FBR0ksR0FBRztBQUNsQixhQUFTLEtBQUtBLEVBQUcsUUFBTyxVQUFVLGVBQWUsS0FBS0EsR0FBRyxDQUFDLE1BQU1KLEVBQUUsQ0FBQyxJQUFJSSxFQUFFLENBQUM7QUFBQSxFQUM1RSxHQUFHK0osR0FBR3ZLLEdBQUdDLENBQUM7QUFDWjtBQUNBLFNBQVN1SyxFQUFFeEssR0FBR0MsR0FBRztBQUNmLE1BQUksT0FBT0EsS0FBSyxjQUFjQSxNQUFNO0FBQ2xDLFVBQU0sSUFBSSxVQUFVLHlCQUF5QixPQUFPQSxDQUFDLElBQUksK0JBQStCO0FBQzFGLEVBQUFzSyxHQUFHdkssR0FBR0MsQ0FBQztBQUNQLFdBQVNHLElBQUk7QUFDWCxTQUFLLGNBQWNKO0FBQUEsRUFDckI7QUFDQSxFQUFBQSxFQUFFLFlBQVlDLE1BQU0sT0FBTyxPQUFPLE9BQU9BLENBQUMsS0FBS0csRUFBRSxZQUFZSCxFQUFFLFdBQVcsSUFBSUcsRUFBRTtBQUNsRjtBQUNBLFNBQVNxSyxHQUFHekssR0FBR0MsR0FBR0csR0FBR0ksR0FBRztBQUN0QixXQUFTLEVBQUUsR0FBRztBQUNaLFdBQU8sYUFBYUosSUFBSSxJQUFJLElBQUlBLEVBQUUsU0FBUyxHQUFHO0FBQzVDLFFBQUUsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUFBLEVBQ0g7QUFDQSxTQUFPLEtBQUtBLE1BQU1BLElBQUksVUFBVSxTQUFTLEdBQUcsR0FBRztBQUM3QyxhQUFTLEVBQUVxSSxHQUFHO0FBQ1osVUFBSTtBQUNGLFFBQUFELEVBQUVoSSxFQUFFLEtBQUtpSSxDQUFDLENBQUM7QUFBQSxNQUNiLFNBQVMsR0FBRztBQUNWLFVBQUUsQ0FBQztBQUFBLE1BQ0w7QUFBQSxJQUNGO0FBQ0EsYUFBU0YsRUFBRUUsR0FBRztBQUNaLFVBQUk7QUFDRixRQUFBRCxFQUFFaEksRUFBRSxNQUFNaUksQ0FBQyxDQUFDO0FBQUEsTUFDZCxTQUFTLEdBQUc7QUFDVixVQUFFLENBQUM7QUFBQSxNQUNMO0FBQUEsSUFDRjtBQUNBLGFBQVNELEVBQUVDLEdBQUc7QUFDWixNQUFBQSxFQUFFLE9BQU8sRUFBRUEsRUFBRSxLQUFLLElBQUksRUFBRUEsRUFBRSxLQUFLLEVBQUUsS0FBSyxHQUFHRixDQUFDO0FBQUEsSUFDNUM7QUFDQSxJQUFBQyxHQUFHaEksSUFBSUEsRUFBRSxNQUFNUixHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUFBLEVBQy9CLENBQUM7QUFDSDtBQUNBLFNBQVMwSyxHQUFHMUssR0FBR0MsR0FBRztBQUNoQixNQUFJRyxJQUFJLEVBQUUsT0FBTyxHQUFHLE1BQU0sV0FBVztBQUNuQyxRQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUcsT0FBTSxFQUFFLENBQUM7QUFDdkIsV0FBTyxFQUFFLENBQUM7QUFBQSxFQUNaLEdBQUcsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsR0FBR0ksR0FBRyxHQUFHLEdBQUcsSUFBSSxPQUFPLFFBQVEsT0FBTyxZQUFZLGFBQWEsV0FBVyxRQUFRLFNBQVM7QUFDaEgsU0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxHQUFHLEVBQUUsU0FBUyxFQUFFLENBQUMsR0FBRyxPQUFPLFVBQVUsZUFBZSxFQUFFLE9BQU8sUUFBUSxJQUFJLFdBQVc7QUFDckgsV0FBTztBQUFBLEVBQ1QsSUFBSTtBQUNKLFdBQVMsRUFBRWdJLEdBQUc7QUFDWixXQUFPLFNBQVNDLEdBQUc7QUFDakIsYUFBT0YsRUFBRSxDQUFDQyxHQUFHQyxDQUFDLENBQUM7QUFBQSxJQUNqQjtBQUFBLEVBQ0Y7QUFDQSxXQUFTRixFQUFFQyxHQUFHO0FBQ1osUUFBSWhJLEVBQUcsT0FBTSxJQUFJLFVBQVUsaUNBQWlDO0FBQzVELFdBQU8sTUFBTSxJQUFJLEdBQUdnSSxFQUFFLENBQUMsTUFBTXBJLElBQUksS0FBS0EsSUFBSyxLQUFJO0FBQzdDLFVBQUlJLElBQUksR0FBRyxNQUFNLElBQUlnSSxFQUFFLENBQUMsSUFBSSxJQUFJLEVBQUUsU0FBU0EsRUFBRSxDQUFDLElBQUksRUFBRSxXQUFXLElBQUksRUFBRSxXQUFXLEVBQUUsS0FBSyxDQUFDLEdBQUcsS0FBSyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsS0FBSyxHQUFHQSxFQUFFLENBQUMsQ0FBQyxHQUFHLEtBQU0sUUFBTztBQUMvSSxjQUFRLElBQUksR0FBRyxNQUFNQSxJQUFJLENBQUNBLEVBQUUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxLQUFLLElBQUlBLEVBQUUsQ0FBQyxHQUFHO0FBQUEsUUFDbkQsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGNBQUlBO0FBQ0o7QUFBQSxRQUNGLEtBQUs7QUFDSCxpQkFBT3BJLEVBQUUsU0FBUyxFQUFFLE9BQU9vSSxFQUFFLENBQUMsR0FBRyxNQUFNLEdBQUc7QUFBQSxRQUM1QyxLQUFLO0FBQ0gsVUFBQXBJLEVBQUUsU0FBUyxJQUFJb0ksRUFBRSxDQUFDLEdBQUdBLElBQUksQ0FBQyxDQUFDO0FBQzNCO0FBQUEsUUFDRixLQUFLO0FBQ0gsVUFBQUEsSUFBSXBJLEVBQUUsSUFBSSxJQUFJLEdBQUdBLEVBQUUsS0FBSyxJQUFJO0FBQzVCO0FBQUEsUUFDRjtBQUNFLGNBQUksSUFBSUEsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsS0FBSyxFQUFFLEVBQUUsU0FBUyxDQUFDLE9BQU9vSSxFQUFFLENBQUMsTUFBTSxLQUFLQSxFQUFFLENBQUMsTUFBTSxJQUFJO0FBQ3BGLFlBQUFwSSxJQUFJO0FBQ0o7QUFBQSxVQUNGO0FBQ0EsY0FBSW9JLEVBQUUsQ0FBQyxNQUFNLE1BQU0sQ0FBQyxLQUFLQSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBS0EsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUk7QUFDcEQsWUFBQXBJLEVBQUUsUUFBUW9JLEVBQUUsQ0FBQztBQUNiO0FBQUEsVUFDRjtBQUNBLGNBQUlBLEVBQUUsQ0FBQyxNQUFNLEtBQUtwSSxFQUFFLFFBQVEsRUFBRSxDQUFDLEdBQUc7QUFDaEMsWUFBQUEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxHQUFHLElBQUlvSTtBQUNwQjtBQUFBLFVBQ0Y7QUFDQSxjQUFJLEtBQUtwSSxFQUFFLFFBQVEsRUFBRSxDQUFDLEdBQUc7QUFDdkIsWUFBQUEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxHQUFHQSxFQUFFLElBQUksS0FBS29JLENBQUM7QUFDNUI7QUFBQSxVQUNGO0FBQ0EsWUFBRSxDQUFDLEtBQUtwSSxFQUFFLElBQUksSUFBSSxHQUFHQSxFQUFFLEtBQUssSUFBSTtBQUNoQztBQUFBLE1BQ0o7QUFDQSxNQUFBb0ksSUFBSXZJLEVBQUUsS0FBS0QsR0FBR0ksQ0FBQztBQUFBLElBQ2pCLFNBQVNxSSxHQUFHO0FBQ1YsTUFBQUQsSUFBSSxDQUFDLEdBQUdDLENBQUMsR0FBRyxJQUFJO0FBQUEsSUFDbEIsVUFBRTtBQUNBLE1BQUFqSSxJQUFJLElBQUk7QUFBQSxJQUNWO0FBQ0EsUUFBSWdJLEVBQUUsQ0FBQyxJQUFJLEVBQUcsT0FBTUEsRUFBRSxDQUFDO0FBQ3ZCLFdBQU8sRUFBRSxPQUFPQSxFQUFFLENBQUMsSUFBSUEsRUFBRSxDQUFDLElBQUksUUFBUSxNQUFNLEdBQUc7QUFBQSxFQUNqRDtBQUNGO0FBQ0EsU0FBU21DLEVBQUUzSyxHQUFHO0FBQ1osTUFBSUMsSUFBSSxPQUFPLFVBQVUsY0FBYyxPQUFPLFVBQVVHLElBQUlILEtBQUtELEVBQUVDLENBQUMsR0FBR08sSUFBSTtBQUMzRSxNQUFJSixFQUFHLFFBQU9BLEVBQUUsS0FBS0osQ0FBQztBQUN0QixNQUFJQSxLQUFLLE9BQU9BLEVBQUUsVUFBVSxTQUFVLFFBQU87QUFBQSxJQUMzQyxNQUFNLFdBQVc7QUFDZixhQUFPQSxLQUFLUSxLQUFLUixFQUFFLFdBQVdBLElBQUksU0FBUyxFQUFFLE9BQU9BLEtBQUtBLEVBQUVRLEdBQUcsR0FBRyxNQUFNLENBQUNSLEVBQUU7QUFBQSxJQUM1RTtBQUFBLEVBQ0Y7QUFDQSxRQUFNLElBQUksVUFBVUMsSUFBSSw0QkFBNEIsaUNBQWlDO0FBQ3ZGO0FBQ0EsU0FBUzJLLEdBQUU1SyxHQUFHQyxHQUFHO0FBQ2YsTUFBSUcsSUFBSSxPQUFPLFVBQVUsY0FBY0osRUFBRSxPQUFPLFFBQVE7QUFDeEQsTUFBSSxDQUFDSSxFQUFHLFFBQU9KO0FBQ2YsTUFBSVEsSUFBSUosRUFBRSxLQUFLSixDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRztBQUM5QixNQUFJO0FBQ0YsWUFBUUMsTUFBTSxVQUFVQSxNQUFNLE1BQU0sRUFBRSxJQUFJTyxFQUFFLEtBQUssR0FBRyxPQUFRLEdBQUUsS0FBSyxFQUFFLEtBQUs7QUFBQSxFQUM1RSxTQUFTLEdBQUc7QUFDVixRQUFJLEVBQUUsT0FBTyxFQUFFO0FBQUEsRUFDakIsVUFBRTtBQUNBLFFBQUk7QUFDRixXQUFLLENBQUMsRUFBRSxTQUFTSixJQUFJSSxFQUFFLFdBQVdKLEVBQUUsS0FBS0ksQ0FBQztBQUFBLElBQzVDLFVBQUU7QUFDQSxVQUFJLEVBQUcsT0FBTSxFQUFFO0FBQUEsSUFDakI7QUFBQSxFQUNGO0FBQ0EsU0FBTztBQUNUO0FBQ0EsU0FBU3FLLEdBQUU3SyxHQUFHQyxHQUFHRyxHQUFHO0FBQ2xCLE1BQUksVUFBVSxXQUFXLEVBQUcsVUFBU0ksSUFBSSxHQUFHLElBQUlQLEVBQUUsUUFBUSxHQUFHTyxJQUFJLEdBQUdBO0FBQ2xFLEtBQUMsS0FBSyxFQUFFQSxLQUFLUCxRQUFRLE1BQU0sSUFBSSxNQUFNLFVBQVUsTUFBTSxLQUFLQSxHQUFHLEdBQUdPLENBQUMsSUFBSSxFQUFFQSxDQUFDLElBQUlQLEVBQUVPLENBQUM7QUFDakYsU0FBT1IsRUFBRSxPQUFPLEtBQUssTUFBTSxVQUFVLE1BQU0sS0FBS0MsQ0FBQyxDQUFDO0FBQ3BEO0FBQ0EsU0FBUzZLLEVBQUU5SyxHQUFHO0FBQ1osU0FBTyxnQkFBZ0I4SyxLQUFLLEtBQUssSUFBSTlLLEdBQUcsUUFBUSxJQUFJOEssRUFBRTlLLENBQUM7QUFDekQ7QUFDQSxTQUFTK0ssR0FBRy9LLEdBQUdDLEdBQUdHLEdBQUc7QUFDbkIsTUFBSSxDQUFDLE9BQU8sY0FBZSxPQUFNLElBQUksVUFBVSxzQ0FBc0M7QUFDckYsTUFBSUksSUFBSUosRUFBRSxNQUFNSixHQUFHQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDO0FBQ3JDLFNBQU8sSUFBSSxPQUFPLFFBQVEsT0FBTyxpQkFBaUIsYUFBYSxnQkFBZ0IsUUFBUSxTQUFTLEdBQUcsRUFBRSxNQUFNLEdBQUcsRUFBRSxPQUFPLEdBQUcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLE9BQU8sYUFBYSxJQUFJLFdBQVc7QUFDN0ssV0FBTztBQUFBLEVBQ1QsR0FBRztBQUNILFdBQVMsRUFBRSxHQUFHO0FBQ1osV0FBTyxTQUFTLEdBQUc7QUFDakIsYUFBTyxRQUFRLFFBQVEsQ0FBQyxFQUFFLEtBQUssR0FBRyxDQUFDO0FBQUEsSUFDckM7QUFBQSxFQUNGO0FBQ0EsV0FBUyxFQUFFLEdBQUcsR0FBRztBQUNmLElBQUFPLEVBQUUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxJQUFJLFNBQVNtSixHQUFHO0FBQzFCLGFBQU8sSUFBSSxRQUFRLFNBQVNxQixHQUFHQyxJQUFHO0FBQ2hDLFVBQUUsS0FBSyxDQUFDLEdBQUd0QixHQUFHcUIsR0FBR0MsRUFBQyxDQUFDLElBQUksS0FBSzFDLEVBQUUsR0FBR29CLENBQUM7QUFBQSxNQUNwQyxDQUFDO0FBQUEsSUFDSCxHQUFHLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztBQUFBLEVBQ3hCO0FBQ0EsV0FBU3BCLEVBQUUsR0FBRyxHQUFHO0FBQ2YsUUFBSTtBQUNGLE1BQUFDLEVBQUVoSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7QUFBQSxJQUNYLFNBQVNtSixHQUFHO0FBQ1YsTUFBQWpCLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHaUIsQ0FBQztBQUFBLElBQ2Q7QUFBQSxFQUNGO0FBQ0EsV0FBU25CLEVBQUUsR0FBRztBQUNaLE1BQUUsaUJBQWlCc0MsSUFBSSxRQUFRLFFBQVEsRUFBRSxNQUFNLENBQUMsRUFBRSxLQUFLckMsR0FBRyxDQUFDLElBQUlDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUM7QUFBQSxFQUM3RTtBQUNBLFdBQVNELEVBQUUsR0FBRztBQUNaLElBQUFGLEVBQUUsUUFBUSxDQUFDO0FBQUEsRUFDYjtBQUNBLFdBQVMsRUFBRSxHQUFHO0FBQ1osSUFBQUEsRUFBRSxTQUFTLENBQUM7QUFBQSxFQUNkO0FBQ0EsV0FBU0csRUFBRSxHQUFHLEdBQUc7QUFDZixNQUFFLENBQUMsR0FBRyxFQUFFLE1BQU0sR0FBRyxFQUFFLFVBQVVILEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUFBLEVBQ2pEO0FBQ0Y7QUFDQSxTQUFTMkMsR0FBR2xMLEdBQUc7QUFDYixNQUFJLENBQUMsT0FBTyxjQUFlLE9BQU0sSUFBSSxVQUFVLHNDQUFzQztBQUNyRixNQUFJQyxJQUFJRCxFQUFFLE9BQU8sYUFBYSxHQUFHSTtBQUNqQyxTQUFPSCxJQUFJQSxFQUFFLEtBQUtELENBQUMsS0FBS0EsSUFBSSxPQUFPMkssS0FBSyxhQUFhQSxFQUFFM0ssQ0FBQyxJQUFJQSxFQUFFLE9BQU8sUUFBUSxFQUFFLEdBQUdJLElBQUksQ0FBQyxHQUFHSSxFQUFFLE1BQU0sR0FBR0EsRUFBRSxPQUFPLEdBQUdBLEVBQUUsUUFBUSxHQUFHSixFQUFFLE9BQU8sYUFBYSxJQUFJLFdBQVc7QUFDakssV0FBTztBQUFBLEVBQ1QsR0FBR0E7QUFDSCxXQUFTSSxFQUFFLEdBQUc7QUFDWixJQUFBSixFQUFFLENBQUMsSUFBSUosRUFBRSxDQUFDLEtBQUssU0FBUyxHQUFHO0FBQ3pCLGFBQU8sSUFBSSxRQUFRLFNBQVMsR0FBR3VJLEdBQUc7QUFDaEMsWUFBSXZJLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUd1SSxHQUFHLEVBQUUsTUFBTSxFQUFFLEtBQUs7QUFBQSxNQUN0QyxDQUFDO0FBQUEsSUFDSDtBQUFBLEVBQ0Y7QUFDQSxXQUFTLEVBQUUsR0FBRyxHQUFHLEdBQUdBLEdBQUc7QUFDckIsWUFBUSxRQUFRQSxDQUFDLEVBQUUsS0FBSyxTQUFTQyxHQUFHO0FBQ2xDLFFBQUUsRUFBRSxPQUFPQSxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQUEsSUFDekIsR0FBRyxDQUFDO0FBQUEsRUFDTjtBQUNGO0FBQ0EsU0FBUzJDLEVBQUVuTCxHQUFHO0FBQ1osU0FBTyxPQUFPQSxLQUFLO0FBQ3JCO0FBQ0EsU0FBU29MLEdBQUdwTCxHQUFHO0FBQ2IsTUFBSUMsSUFBSSxTQUFTTyxHQUFHO0FBQ2xCLFVBQU0sS0FBS0EsQ0FBQyxHQUFHQSxFQUFFLFFBQVEsSUFBSSxNQUFNLEVBQUU7QUFBQSxFQUN2QyxHQUFHSixJQUFJSixFQUFFQyxDQUFDO0FBQ1YsU0FBT0csRUFBRSxZQUFZLE9BQU8sT0FBTyxNQUFNLFNBQVMsR0FBR0EsRUFBRSxVQUFVLGNBQWNBLEdBQUdBO0FBQ3BGO0FBQ0EsSUFBSWlMLEtBQUtELEdBQUcsU0FBU3BMLEdBQUc7QUFDdEIsU0FBTyxTQUFTSSxHQUFHO0FBQ2pCLElBQUFKLEVBQUUsSUFBSSxHQUFHLEtBQUssVUFBVUksSUFBSUEsRUFBRSxTQUFTO0FBQUEsSUFDdkNBLEVBQUUsSUFBSSxTQUFTSSxHQUFHcUQsR0FBRztBQUNuQixhQUFPQSxJQUFJLElBQUksT0FBT3JELEVBQUUsU0FBUztBQUFBLElBQ25DLENBQUMsRUFBRSxLQUFLO0FBQUEsR0FDVCxJQUFJLElBQUksS0FBSyxPQUFPLHVCQUF1QixLQUFLLFNBQVNKO0FBQUEsRUFDMUQ7QUFDRixDQUFDO0FBQ0QsU0FBU2tMLEdBQUV0TCxHQUFHQyxHQUFHO0FBQ2YsTUFBSUQsR0FBRztBQUNMLFFBQUlJLElBQUlKLEVBQUUsUUFBUUMsQ0FBQztBQUNuQixTQUFLRyxLQUFLSixFQUFFLE9BQU9JLEdBQUcsQ0FBQztBQUFBLEVBQ3pCO0FBQ0Y7QUFDQSxJQUFJbUwsS0FBSSxXQUFXO0FBQ2pCLFdBQVN2TCxFQUFFQyxHQUFHO0FBQ1osU0FBSyxrQkFBa0JBLEdBQUcsS0FBSyxTQUFTLElBQUksS0FBSyxhQUFhLE1BQU0sS0FBSyxjQUFjO0FBQUEsRUFDekY7QUFDQSxTQUFPRCxFQUFFLFVBQVUsY0FBYyxXQUFXO0FBQzFDLFFBQUlDLEdBQUdHLEdBQUdJLEdBQUcsR0FBRztBQUNoQixRQUFJLENBQUMsS0FBSyxRQUFRO0FBQ2hCLFdBQUssU0FBUztBQUNkLFVBQUksSUFBSSxLQUFLO0FBQ2IsVUFBSTtBQUNGLFlBQUksS0FBSyxhQUFhLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDekMsY0FBSTtBQUNGLHFCQUFTLElBQUltSyxFQUFFLENBQUMsR0FBR3BDLElBQUksRUFBRSxLQUFLLEdBQUcsQ0FBQ0EsRUFBRSxNQUFNQSxJQUFJLEVBQUUsS0FBSyxHQUFHO0FBQ3RELGtCQUFJQyxJQUFJRCxFQUFFO0FBQ1YsY0FBQUMsRUFBRSxPQUFPLElBQUk7QUFBQSxZQUNmO0FBQUEsVUFDRixTQUFTbUIsR0FBRztBQUNWLFlBQUExSixJQUFJLEVBQUUsT0FBTzBKLEVBQUU7QUFBQSxVQUNqQixVQUFFO0FBQ0EsZ0JBQUk7QUFDRixjQUFBcEIsS0FBSyxDQUFDQSxFQUFFLFNBQVNuSSxJQUFJLEVBQUUsV0FBV0EsRUFBRSxLQUFLLENBQUM7QUFBQSxZQUM1QyxVQUFFO0FBQ0Esa0JBQUlILEVBQUcsT0FBTUEsRUFBRTtBQUFBLFlBQ2pCO0FBQUEsVUFDRjtBQUFBO0FBRUEsWUFBRSxPQUFPLElBQUk7QUFDakIsVUFBSXdJLElBQUksS0FBSztBQUNiLFVBQUkwQyxFQUFFMUMsQ0FBQztBQUNMLFlBQUk7QUFDRixVQUFBQSxFQUFFO0FBQUEsUUFDSixTQUFTa0IsR0FBRztBQUNWLGNBQUlBLGFBQWEwQixLQUFLMUIsRUFBRSxTQUFTLENBQUNBLENBQUM7QUFBQSxRQUNyQztBQUNGLFVBQUksSUFBSSxLQUFLO0FBQ2IsVUFBSSxHQUFHO0FBQ0wsYUFBSyxjQUFjO0FBQ25CLFlBQUk7QUFDRixtQkFBU2pCLElBQUlpQyxFQUFFLENBQUMsR0FBRyxJQUFJakMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLE1BQU0sSUFBSUEsRUFBRSxLQUFLLEdBQUc7QUFDdEQsZ0JBQUksSUFBSSxFQUFFO0FBQ1YsZ0JBQUk7QUFDRixjQUFBOEMsR0FBRyxDQUFDO0FBQUEsWUFDTixTQUFTN0IsR0FBRztBQUNWLGtCQUFJLEtBQUssQ0FBQyxHQUFHQSxhQUFhMEIsS0FBSyxJQUFJUixHQUFFQSxHQUFFLENBQUMsR0FBR0QsR0FBRSxDQUFDLENBQUMsR0FBR0EsR0FBRWpCLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLQSxDQUFDO0FBQUEsWUFDM0U7QUFBQSxVQUNGO0FBQUEsUUFDRixTQUFTQSxHQUFHO0FBQ1YsVUFBQW5KLElBQUksRUFBRSxPQUFPbUosRUFBRTtBQUFBLFFBQ2pCLFVBQUU7QUFDQSxjQUFJO0FBQ0YsaUJBQUssQ0FBQyxFQUFFLFNBQVMsSUFBSWpCLEVBQUUsV0FBVyxFQUFFLEtBQUtBLENBQUM7QUFBQSxVQUM1QyxVQUFFO0FBQ0EsZ0JBQUlsSSxFQUFHLE9BQU1BLEVBQUU7QUFBQSxVQUNqQjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQ0EsVUFBSTtBQUNGLGNBQU0sSUFBSTZLLEdBQUcsQ0FBQztBQUFBLElBQ2xCO0FBQUEsRUFDRixHQUFHckwsRUFBRSxVQUFVLE1BQU0sU0FBU0MsR0FBRztBQUMvQixRQUFJRztBQUNKLFFBQUlILEtBQUtBLE1BQU07QUFDYixVQUFJLEtBQUs7QUFDUCxRQUFBdUwsR0FBR3ZMLENBQUM7QUFBQSxXQUNEO0FBQ0gsWUFBSUEsYUFBYUQsR0FBRztBQUNsQixjQUFJQyxFQUFFLFVBQVVBLEVBQUUsV0FBVyxJQUFJO0FBQy9CO0FBQ0YsVUFBQUEsRUFBRSxXQUFXLElBQUk7QUFBQSxRQUNuQjtBQUNBLFNBQUMsS0FBSyxlQUFlRyxJQUFJLEtBQUssaUJBQWlCLFFBQVFBLE1BQU0sU0FBU0EsSUFBSSxDQUFDLEdBQUcsS0FBS0gsQ0FBQztBQUFBLE1BQ3RGO0FBQUEsRUFDSixHQUFHRCxFQUFFLFVBQVUsYUFBYSxTQUFTQyxHQUFHO0FBQ3RDLFFBQUlHLElBQUksS0FBSztBQUNiLFdBQU9BLE1BQU1ILEtBQUssTUFBTSxRQUFRRyxDQUFDLEtBQUtBLEVBQUUsU0FBU0gsQ0FBQztBQUFBLEVBQ3BELEdBQUdELEVBQUUsVUFBVSxhQUFhLFNBQVNDLEdBQUc7QUFDdEMsUUFBSUcsSUFBSSxLQUFLO0FBQ2IsU0FBSyxhQUFhLE1BQU0sUUFBUUEsQ0FBQyxLQUFLQSxFQUFFLEtBQUtILENBQUMsR0FBR0csS0FBS0EsSUFBSSxDQUFDQSxHQUFHSCxDQUFDLElBQUlBO0FBQUEsRUFDckUsR0FBR0QsRUFBRSxVQUFVLGdCQUFnQixTQUFTQyxHQUFHO0FBQ3pDLFFBQUlHLElBQUksS0FBSztBQUNiLElBQUFBLE1BQU1ILElBQUksS0FBSyxhQUFhLE9BQU8sTUFBTSxRQUFRRyxDQUFDLEtBQUtrTCxHQUFFbEwsR0FBR0gsQ0FBQztBQUFBLEVBQy9ELEdBQUdELEVBQUUsVUFBVSxTQUFTLFNBQVNDLEdBQUc7QUFDbEMsUUFBSUcsSUFBSSxLQUFLO0FBQ2IsSUFBQUEsS0FBS2tMLEdBQUVsTCxHQUFHSCxDQUFDLEdBQUdBLGFBQWFELEtBQUtDLEVBQUUsY0FBYyxJQUFJO0FBQUEsRUFDdEQsR0FBR0QsRUFBRSxRQUFRLFdBQVc7QUFDdEIsUUFBSUMsSUFBSSxJQUFJRCxFQUFFO0FBQ2QsV0FBT0MsRUFBRSxTQUFTLElBQUlBO0FBQUEsRUFDeEIsRUFBRSxHQUFHRDtBQUNQLEVBQUUsR0FBR3lMLEtBQUtGLEdBQUU7QUFDWixTQUFTRyxHQUFHMUwsR0FBRztBQUNiLFNBQU9BLGFBQWF1TCxNQUFLdkwsS0FBSyxZQUFZQSxLQUFLbUwsRUFBRW5MLEVBQUUsTUFBTSxLQUFLbUwsRUFBRW5MLEVBQUUsR0FBRyxLQUFLbUwsRUFBRW5MLEVBQUUsV0FBVztBQUMzRjtBQUNBLFNBQVN3TCxHQUFHeEwsR0FBRztBQUNiLEVBQUFtTCxFQUFFbkwsQ0FBQyxJQUFJQSxFQUFFLElBQUlBLEVBQUUsWUFBWTtBQUM3QjtBQUNBLElBQUkyTCxLQUFLO0FBQUEsRUFDUCxrQkFBa0I7QUFBQSxFQUNsQix1QkFBdUI7QUFBQSxFQUN2QixTQUFTO0FBQUEsRUFDVCx1Q0FBdUM7QUFBQSxFQUN2QywwQkFBMEI7QUFDNUIsR0FBR0MsS0FBSztBQUFBLEVBQ04sWUFBWSxTQUFTNUwsR0FBR0MsR0FBRztBQUN6QixhQUFTRyxJQUFJLENBQUMsR0FBR0ksSUFBSSxHQUFHQSxJQUFJLFVBQVUsUUFBUUE7QUFDNUMsTUFBQUosRUFBRUksSUFBSSxDQUFDLElBQUksVUFBVUEsQ0FBQztBQUN4QixXQUFPLFdBQVcsTUFBTSxRQUFRcUssR0FBRSxDQUFDN0ssR0FBR0MsQ0FBQyxHQUFHMkssR0FBRXhLLENBQUMsQ0FBQyxDQUFDO0FBQUEsRUFDakQ7QUFBQSxFQUNBLGNBQWMsU0FBU0osR0FBRztBQUN4QixXQUFRLGFBQWNBLENBQUM7QUFBQSxFQUN6QjtBQUFBLEVBQ0EsVUFBVTtBQUNaO0FBQ0EsU0FBUzZMLEdBQUc3TCxHQUFHO0FBQ2IsRUFBQTRMLEdBQUcsV0FBVyxXQUFXO0FBQ3ZCLFVBQU01TDtBQUFBLEVBQ1IsQ0FBQztBQUNIO0FBQ0EsU0FBUzhMLEtBQUs7QUFDZDtBQUNBLFNBQVNDLEdBQUUvTCxHQUFHO0FBQ1osRUFBQUEsRUFBRTtBQUNKO0FBQ0EsSUFBSWdNLEtBQUssU0FBU2hNLEdBQUc7QUFDbkIsRUFBQXdLLEVBQUV2SyxHQUFHRCxDQUFDO0FBQ04sV0FBU0MsRUFBRUcsR0FBRztBQUNaLFFBQUlJLElBQUlSLEVBQUUsS0FBSyxJQUFJLEtBQUs7QUFDeEIsV0FBT1EsRUFBRSxZQUFZLElBQUlKLEtBQUtJLEVBQUUsY0FBY0osR0FBR3NMLEdBQUd0TCxDQUFDLEtBQUtBLEVBQUUsSUFBSUksQ0FBQyxLQUFLQSxFQUFFLGNBQWN5TCxJQUFJekw7QUFBQSxFQUM1RjtBQUNBLFNBQU9QLEVBQUUsU0FBUyxTQUFTRyxHQUFHSSxHQUFHLEdBQUc7QUFDbEMsV0FBTyxJQUFJMEwsR0FBRzlMLEdBQUdJLEdBQUcsQ0FBQztBQUFBLEVBQ3ZCLEdBQUdQLEVBQUUsVUFBVSxPQUFPLFNBQVNHLEdBQUc7QUFDaEMsU0FBSyxhQUFhLEtBQUssTUFBTUEsQ0FBQztBQUFBLEVBQ2hDLEdBQUdILEVBQUUsVUFBVSxRQUFRLFNBQVNHLEdBQUc7QUFDakMsU0FBSyxjQUFjLEtBQUssWUFBWSxJQUFJLEtBQUssT0FBT0EsQ0FBQztBQUFBLEVBQ3ZELEdBQUdILEVBQUUsVUFBVSxXQUFXLFdBQVc7QUFDbkMsU0FBSyxjQUFjLEtBQUssWUFBWSxJQUFJLEtBQUssVUFBVTtBQUFBLEVBQ3pELEdBQUdBLEVBQUUsVUFBVSxjQUFjLFdBQVc7QUFDdEMsU0FBSyxXQUFXLEtBQUssWUFBWSxJQUFJRCxFQUFFLFVBQVUsWUFBWSxLQUFLLElBQUksR0FBRyxLQUFLLGNBQWM7QUFBQSxFQUM5RixHQUFHQyxFQUFFLFVBQVUsUUFBUSxTQUFTRyxHQUFHO0FBQ2pDLFNBQUssWUFBWSxLQUFLQSxDQUFDO0FBQUEsRUFDekIsR0FBR0gsRUFBRSxVQUFVLFNBQVMsU0FBU0csR0FBRztBQUNsQyxRQUFJO0FBQ0YsV0FBSyxZQUFZLE1BQU1BLENBQUM7QUFBQSxJQUMxQixVQUFFO0FBQ0EsV0FBSyxZQUFZO0FBQUEsSUFDbkI7QUFBQSxFQUNGLEdBQUdILEVBQUUsVUFBVSxZQUFZLFdBQVc7QUFDcEMsUUFBSTtBQUNGLFdBQUssWUFBWSxTQUFTO0FBQUEsSUFDNUIsVUFBRTtBQUNBLFdBQUssWUFBWTtBQUFBLElBQ25CO0FBQUEsRUFDRixHQUFHQTtBQUNMLEVBQUVzTCxFQUFDLEdBQUdZLEtBQUssU0FBUyxVQUFVO0FBQzlCLFNBQVNDLEdBQUdwTSxHQUFHQyxHQUFHO0FBQ2hCLFNBQU9rTSxHQUFHLEtBQUtuTSxHQUFHQyxDQUFDO0FBQ3JCO0FBQ0EsSUFBSW9NLEtBQUssV0FBVztBQUNsQixXQUFTck0sRUFBRUMsR0FBRztBQUNaLFNBQUssa0JBQWtCQTtBQUFBLEVBQ3pCO0FBQ0EsU0FBT0QsRUFBRSxVQUFVLE9BQU8sU0FBU0MsR0FBRztBQUNwQyxRQUFJRyxJQUFJLEtBQUs7QUFDYixRQUFJQSxFQUFFO0FBQ0osVUFBSTtBQUNGLFFBQUFBLEVBQUUsS0FBS0gsQ0FBQztBQUFBLE1BQ1YsU0FBU08sR0FBRztBQUNWLFFBQUE4TCxHQUFFOUwsQ0FBQztBQUFBLE1BQ0w7QUFBQSxFQUNKLEdBQUdSLEVBQUUsVUFBVSxRQUFRLFNBQVNDLEdBQUc7QUFDakMsUUFBSUcsSUFBSSxLQUFLO0FBQ2IsUUFBSUEsRUFBRTtBQUNKLFVBQUk7QUFDRixRQUFBQSxFQUFFLE1BQU1ILENBQUM7QUFBQSxNQUNYLFNBQVNPLEdBQUc7QUFDVixRQUFBOEwsR0FBRTlMLENBQUM7QUFBQSxNQUNMO0FBQUE7QUFFQSxNQUFBOEwsR0FBRXJNLENBQUM7QUFBQSxFQUNQLEdBQUdELEVBQUUsVUFBVSxXQUFXLFdBQVc7QUFDbkMsUUFBSUMsSUFBSSxLQUFLO0FBQ2IsUUFBSUEsRUFBRTtBQUNKLFVBQUk7QUFDRixRQUFBQSxFQUFFLFNBQVM7QUFBQSxNQUNiLFNBQVNHLEdBQUc7QUFDVixRQUFBa00sR0FBRWxNLENBQUM7QUFBQSxNQUNMO0FBQUEsRUFDSixHQUFHSjtBQUNMLEVBQUUsR0FBR2tNLEtBQUssU0FBU2xNLEdBQUc7QUFDcEIsRUFBQXdLLEVBQUV2SyxHQUFHRCxDQUFDO0FBQ04sV0FBU0MsRUFBRUcsR0FBR0ksR0FBRyxHQUFHO0FBQ2xCLFFBQUksSUFBSVIsRUFBRSxLQUFLLElBQUksS0FBSyxNQUFNO0FBQzlCLFFBQUltTCxFQUFFL0ssQ0FBQyxLQUFLLENBQUNBO0FBQ1gsVUFBSTtBQUFBLFFBQ0YsTUFBTUEsS0FBSztBQUFBLFFBQ1gsT0FBT0ksS0FBSztBQUFBLFFBQ1osVUFBVSxLQUFLO0FBQUEsTUFDakI7QUFBQSxTQUNHO0FBQ0gsVUFBSTtBQUNKLFdBQUttTCxHQUFHLDRCQUE0QixJQUFJLE9BQU8sT0FBT3ZMLENBQUMsR0FBRyxFQUFFLGNBQWMsV0FBVztBQUNuRixlQUFPLEVBQUUsWUFBWTtBQUFBLE1BQ3ZCLEdBQUcsSUFBSTtBQUFBLFFBQ0wsTUFBTUEsRUFBRSxRQUFRZ00sR0FBR2hNLEVBQUUsTUFBTSxDQUFDO0FBQUEsUUFDNUIsT0FBT0EsRUFBRSxTQUFTZ00sR0FBR2hNLEVBQUUsT0FBTyxDQUFDO0FBQUEsUUFDL0IsVUFBVUEsRUFBRSxZQUFZZ00sR0FBR2hNLEVBQUUsVUFBVSxDQUFDO0FBQUEsTUFDMUMsS0FBSyxJQUFJQTtBQUFBLElBQ1g7QUFDQSxXQUFPLEVBQUUsY0FBYyxJQUFJaU0sR0FBRyxDQUFDLEdBQUc7QUFBQSxFQUNwQztBQUNBLFNBQU9wTTtBQUNULEVBQUUrTCxFQUFFO0FBQ0osU0FBU00sR0FBRXRNLEdBQUc7QUFDWixFQUFBNkwsR0FBRzdMLENBQUM7QUFDTjtBQUNBLFNBQVN1TSxHQUFHdk0sR0FBRztBQUNiLFFBQU1BO0FBQ1I7QUFDQSxJQUFJaU0sS0FBSztBQUFBLEVBQ1AsUUFBUTtBQUFBLEVBQ1IsTUFBTUg7QUFBQSxFQUNOLE9BQU9TO0FBQUEsRUFDUCxVQUFVVDtBQUNaLEdBQUdVLEtBQUssV0FBVztBQUNqQixTQUFPLE9BQU8sVUFBVSxjQUFjLE9BQU8sY0FBYztBQUM3RCxFQUFFO0FBQ0YsU0FBU0MsR0FBR3pNLEdBQUc7QUFDYixTQUFPQTtBQUNUO0FBQ0EsU0FBUzBNLEdBQUcxTSxHQUFHO0FBQ2IsU0FBT0EsRUFBRSxXQUFXLElBQUl5TSxLQUFLek0sRUFBRSxXQUFXLElBQUlBLEVBQUUsQ0FBQyxJQUFJLFNBQVNJLEdBQUc7QUFDL0QsV0FBT0osRUFBRSxPQUFPLFNBQVNRLEdBQUdxRCxHQUFHO0FBQzdCLGFBQU9BLEVBQUVyRCxDQUFDO0FBQUEsSUFDWixHQUFHSixDQUFDO0FBQUEsRUFDTjtBQUNGO0FBQ0EsSUFBSXVNLElBQUksV0FBVztBQUNqQixXQUFTM00sRUFBRUMsR0FBRztBQUNaLElBQUFBLE1BQU0sS0FBSyxhQUFhQTtBQUFBLEVBQzFCO0FBQ0EsU0FBT0QsRUFBRSxVQUFVLE9BQU8sU0FBU0MsR0FBRztBQUNwQyxRQUFJRyxJQUFJLElBQUlKLEVBQUU7QUFDZCxXQUFPSSxFQUFFLFNBQVMsTUFBTUEsRUFBRSxXQUFXSCxHQUFHRztBQUFBLEVBQzFDLEdBQUdKLEVBQUUsVUFBVSxZQUFZLFNBQVNDLEdBQUdHLEdBQUdJLEdBQUc7QUFDM0MsUUFBSSxJQUFJLE1BQU0sSUFBSW9NLEdBQUczTSxDQUFDLElBQUlBLElBQUksSUFBSWlNLEdBQUdqTSxHQUFHRyxHQUFHSSxDQUFDO0FBQzVDLFdBQU91TCxHQUFFLFdBQVc7QUFDbEIsVUFBSSxJQUFJLEdBQUcsSUFBSSxFQUFFLFVBQVV4RCxJQUFJLEVBQUU7QUFDakMsUUFBRSxJQUFJLElBQUksRUFBRSxLQUFLLEdBQUdBLENBQUMsSUFBSUEsSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFBQSxJQUNuRSxDQUFDLEdBQUc7QUFBQSxFQUNOLEdBQUd2SSxFQUFFLFVBQVUsZ0JBQWdCLFNBQVNDLEdBQUc7QUFDekMsUUFBSTtBQUNGLGFBQU8sS0FBSyxXQUFXQSxDQUFDO0FBQUEsSUFDMUIsU0FBU0csR0FBRztBQUNWLE1BQUFILEVBQUUsTUFBTUcsQ0FBQztBQUFBLElBQ1g7QUFBQSxFQUNGLEdBQUdKLEVBQUUsVUFBVSxVQUFVLFNBQVNDLEdBQUdHLEdBQUc7QUFDdEMsUUFBSUksSUFBSTtBQUNSLFdBQU9KLElBQUl5TSxHQUFHek0sQ0FBQyxHQUFHLElBQUlBLEVBQUUsU0FBUyxHQUFHLEdBQUc7QUFDckMsVUFBSSxJQUFJLElBQUk4TCxHQUFHO0FBQUEsUUFDYixNQUFNLFNBQVMsR0FBRztBQUNoQixjQUFJO0FBQ0YsWUFBQWpNLEVBQUUsQ0FBQztBQUFBLFVBQ0wsU0FBU3NJLEdBQUc7QUFDVixjQUFFQSxDQUFDLEdBQUcsRUFBRSxZQUFZO0FBQUEsVUFDdEI7QUFBQSxRQUNGO0FBQUEsUUFDQSxPQUFPO0FBQUEsUUFDUCxVQUFVO0FBQUEsTUFDWixDQUFDO0FBQ0QsTUFBQS9ILEVBQUUsVUFBVSxDQUFDO0FBQUEsSUFDZixDQUFDO0FBQUEsRUFDSCxHQUFHUixFQUFFLFVBQVUsYUFBYSxTQUFTQyxHQUFHO0FBQ3RDLFFBQUlHO0FBQ0osWUFBUUEsSUFBSSxLQUFLLFlBQVksUUFBUUEsTUFBTSxTQUFTLFNBQVNBLEVBQUUsVUFBVUgsQ0FBQztBQUFBLEVBQzVFLEdBQUdELEVBQUUsVUFBVXdNLEVBQUUsSUFBSSxXQUFXO0FBQzlCLFdBQU87QUFBQSxFQUNULEdBQUd4TSxFQUFFLFVBQVUsT0FBTyxXQUFXO0FBQy9CLGFBQVNDLElBQUksQ0FBQyxHQUFHRyxJQUFJLEdBQUdBLElBQUksVUFBVSxRQUFRQTtBQUM1QyxNQUFBSCxFQUFFRyxDQUFDLElBQUksVUFBVUEsQ0FBQztBQUNwQixXQUFPc00sR0FBR3pNLENBQUMsRUFBRSxJQUFJO0FBQUEsRUFDbkIsR0FBR0QsRUFBRSxVQUFVLFlBQVksU0FBU0MsR0FBRztBQUNyQyxRQUFJRyxJQUFJO0FBQ1IsV0FBT0gsSUFBSTRNLEdBQUc1TSxDQUFDLEdBQUcsSUFBSUEsRUFBRSxTQUFTTyxHQUFHLEdBQUc7QUFDckMsVUFBSTtBQUNKLE1BQUFKLEVBQUUsVUFBVSxTQUFTLEdBQUc7QUFDdEIsZUFBTyxJQUFJO0FBQUEsTUFDYixHQUFHLFNBQVMsR0FBRztBQUNiLGVBQU8sRUFBRSxDQUFDO0FBQUEsTUFDWixHQUFHLFdBQVc7QUFDWixlQUFPSSxFQUFFLENBQUM7QUFBQSxNQUNaLENBQUM7QUFBQSxJQUNILENBQUM7QUFBQSxFQUNILEdBQUdSLEVBQUUsU0FBUyxTQUFTQyxHQUFHO0FBQ3hCLFdBQU8sSUFBSUQsRUFBRUMsQ0FBQztBQUFBLEVBQ2hCLEdBQUdEO0FBQ0wsRUFBRTtBQUNGLFNBQVM2TSxHQUFHN00sR0FBRztBQUNiLE1BQUlDO0FBQ0osVUFBUUEsSUFBSUQsS0FBSzJMLEdBQUcsYUFBYSxRQUFRMUwsTUFBTSxTQUFTQSxJQUFJO0FBQzlEO0FBQ0EsU0FBUzZNLEdBQUc5TSxHQUFHO0FBQ2IsU0FBT0EsS0FBS21MLEVBQUVuTCxFQUFFLElBQUksS0FBS21MLEVBQUVuTCxFQUFFLEtBQUssS0FBS21MLEVBQUVuTCxFQUFFLFFBQVE7QUFDckQ7QUFDQSxTQUFTNE0sR0FBRzVNLEdBQUc7QUFDYixTQUFPQSxLQUFLQSxhQUFhZ00sTUFBTWMsR0FBRzlNLENBQUMsS0FBSzBMLEdBQUcxTCxDQUFDO0FBQzlDO0FBQ0EsU0FBUytNLEdBQUcvTSxHQUFHO0FBQ2IsU0FBT21MLEVBQUVuTCxLQUFLLE9BQU8sU0FBU0EsRUFBRSxJQUFJO0FBQ3RDO0FBQ0EsU0FBU2dOLEdBQUdoTixHQUFHO0FBQ2IsU0FBTyxTQUFTQyxHQUFHO0FBQ2pCLFFBQUk4TSxHQUFHOU0sQ0FBQztBQUNOLGFBQU9BLEVBQUUsS0FBSyxTQUFTRyxHQUFHO0FBQ3hCLFlBQUk7QUFDRixpQkFBT0osRUFBRUksR0FBRyxJQUFJO0FBQUEsUUFDbEIsU0FBU0ksR0FBRztBQUNWLGVBQUssTUFBTUEsQ0FBQztBQUFBLFFBQ2Q7QUFBQSxNQUNGLENBQUM7QUFDSCxVQUFNLElBQUksVUFBVSx3Q0FBd0M7QUFBQSxFQUM5RDtBQUNGO0FBQ0EsU0FBU3lNLEdBQUdqTixHQUFHQyxHQUFHRyxHQUFHSSxHQUFHLEdBQUc7QUFDekIsU0FBTyxJQUFJME0sR0FBR2xOLEdBQUdDLEdBQUdHLEdBQUdJLEdBQUcsQ0FBQztBQUM3QjtBQUNBLElBQUkwTSxLQUFLLFNBQVNsTixHQUFHO0FBQ25CLEVBQUF3SyxFQUFFdkssR0FBR0QsQ0FBQztBQUNOLFdBQVNDLEVBQUVHLEdBQUdJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztBQUMzQixRQUFJK0gsSUFBSXZJLEVBQUUsS0FBSyxNQUFNSSxDQUFDLEtBQUs7QUFDM0IsV0FBT21JLEVBQUUsYUFBYSxHQUFHQSxFQUFFLG9CQUFvQixHQUFHQSxFQUFFLFFBQVEvSCxJQUFJLFNBQVNnSSxHQUFHO0FBQzFFLFVBQUk7QUFDRixRQUFBaEksRUFBRWdJLENBQUM7QUFBQSxNQUNMLFNBQVNDLEdBQUc7QUFDVixRQUFBckksRUFBRSxNQUFNcUksQ0FBQztBQUFBLE1BQ1g7QUFBQSxJQUNGLElBQUl6SSxFQUFFLFVBQVUsT0FBT3VJLEVBQUUsU0FBUyxJQUFJLFNBQVNDLEdBQUc7QUFDaEQsVUFBSTtBQUNGLFVBQUVBLENBQUM7QUFBQSxNQUNMLFNBQVNDLEdBQUc7QUFDVixRQUFBckksRUFBRSxNQUFNcUksQ0FBQztBQUFBLE1BQ1gsVUFBRTtBQUNBLGFBQUssWUFBWTtBQUFBLE1BQ25CO0FBQUEsSUFDRixJQUFJekksRUFBRSxVQUFVLFFBQVF1SSxFQUFFLFlBQVksSUFBSSxXQUFXO0FBQ25ELFVBQUk7QUFDRixVQUFFO0FBQUEsTUFDSixTQUFTQyxHQUFHO0FBQ1YsUUFBQXBJLEVBQUUsTUFBTW9JLENBQUM7QUFBQSxNQUNYLFVBQUU7QUFDQSxhQUFLLFlBQVk7QUFBQSxNQUNuQjtBQUFBLElBQ0YsSUFBSXhJLEVBQUUsVUFBVSxXQUFXdUk7QUFBQSxFQUM3QjtBQUNBLFNBQU90SSxFQUFFLFVBQVUsY0FBYyxXQUFXO0FBQzFDLFFBQUlHO0FBQ0osUUFBSSxDQUFDLEtBQUsscUJBQXFCLEtBQUssa0JBQWtCLEdBQUc7QUFDdkQsVUFBSUksSUFBSSxLQUFLO0FBQ2IsTUFBQVIsRUFBRSxVQUFVLFlBQVksS0FBSyxJQUFJLEdBQUcsQ0FBQ1EsT0FBT0osSUFBSSxLQUFLLGdCQUFnQixRQUFRQSxNQUFNLFVBQVVBLEVBQUUsS0FBSyxJQUFJO0FBQUEsSUFDMUc7QUFBQSxFQUNGLEdBQUdIO0FBQ0wsRUFBRStMLEVBQUUsR0FBR21CLEtBQUsvQixHQUFHLFNBQVNwTCxHQUFHO0FBQ3pCLFNBQU8sV0FBVztBQUNoQixJQUFBQSxFQUFFLElBQUksR0FBRyxLQUFLLE9BQU8sMkJBQTJCLEtBQUssVUFBVTtBQUFBLEVBQ2pFO0FBQ0YsQ0FBQyxHQUFHb04sS0FBSyxTQUFTcE4sR0FBRztBQUNuQixFQUFBd0ssRUFBRXZLLEdBQUdELENBQUM7QUFDTixXQUFTQyxJQUFJO0FBQ1gsUUFBSUcsSUFBSUosRUFBRSxLQUFLLElBQUksS0FBSztBQUN4QixXQUFPSSxFQUFFLFNBQVMsSUFBSUEsRUFBRSxtQkFBbUIsTUFBTUEsRUFBRSxZQUFZLENBQUMsR0FBR0EsRUFBRSxZQUFZLElBQUlBLEVBQUUsV0FBVyxJQUFJQSxFQUFFLGNBQWMsTUFBTUE7QUFBQSxFQUM5SDtBQUNBLFNBQU9ILEVBQUUsVUFBVSxPQUFPLFNBQVNHLEdBQUc7QUFDcEMsUUFBSUksSUFBSSxJQUFJNk0sR0FBRyxNQUFNLElBQUk7QUFDekIsV0FBTzdNLEVBQUUsV0FBV0osR0FBR0k7QUFBQSxFQUN6QixHQUFHUCxFQUFFLFVBQVUsaUJBQWlCLFdBQVc7QUFDekMsUUFBSSxLQUFLO0FBQ1AsWUFBTSxJQUFJa04sR0FBRztBQUFBLEVBQ2pCLEdBQUdsTixFQUFFLFVBQVUsT0FBTyxTQUFTRyxHQUFHO0FBQ2hDLFFBQUlJLElBQUk7QUFDUixJQUFBdUwsR0FBRSxXQUFXO0FBQ1gsVUFBSSxHQUFHO0FBQ1AsVUFBSXZMLEVBQUUsZUFBZSxHQUFHLENBQUNBLEVBQUUsV0FBVztBQUNwQyxRQUFBQSxFQUFFLHFCQUFxQkEsRUFBRSxtQkFBbUIsTUFBTSxLQUFLQSxFQUFFLFNBQVM7QUFDbEUsWUFBSTtBQUNGLG1CQUFTLElBQUltSyxFQUFFbkssRUFBRSxnQkFBZ0IsR0FBRyxJQUFJLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxNQUFNLElBQUksRUFBRSxLQUFLLEdBQUc7QUFDdkUsZ0JBQUkrSCxJQUFJLEVBQUU7QUFDVixZQUFBQSxFQUFFLEtBQUtuSSxDQUFDO0FBQUEsVUFDVjtBQUFBLFFBQ0YsU0FBU29JLEdBQUc7QUFDVixjQUFJLEVBQUUsT0FBT0EsRUFBRTtBQUFBLFFBQ2pCLFVBQUU7QUFDQSxjQUFJO0FBQ0YsaUJBQUssQ0FBQyxFQUFFLFNBQVMsSUFBSSxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUM7QUFBQSxVQUM1QyxVQUFFO0FBQ0EsZ0JBQUksRUFBRyxPQUFNLEVBQUU7QUFBQSxVQUNqQjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQUEsSUFDRixDQUFDO0FBQUEsRUFDSCxHQUFHdkksRUFBRSxVQUFVLFFBQVEsU0FBU0csR0FBRztBQUNqQyxRQUFJSSxJQUFJO0FBQ1IsSUFBQXVMLEdBQUUsV0FBVztBQUNYLFVBQUl2TCxFQUFFLGVBQWUsR0FBRyxDQUFDQSxFQUFFLFdBQVc7QUFDcEMsUUFBQUEsRUFBRSxXQUFXQSxFQUFFLFlBQVksSUFBSUEsRUFBRSxjQUFjSjtBQUMvQyxpQkFBUyxJQUFJSSxFQUFFLFdBQVcsRUFBRTtBQUMxQixZQUFFLE1BQU0sRUFBRSxNQUFNSixDQUFDO0FBQUEsTUFDckI7QUFBQSxJQUNGLENBQUM7QUFBQSxFQUNILEdBQUdILEVBQUUsVUFBVSxXQUFXLFdBQVc7QUFDbkMsUUFBSUcsSUFBSTtBQUNSLElBQUEyTCxHQUFFLFdBQVc7QUFDWCxVQUFJM0wsRUFBRSxlQUFlLEdBQUcsQ0FBQ0EsRUFBRSxXQUFXO0FBQ3BDLFFBQUFBLEVBQUUsWUFBWTtBQUNkLGlCQUFTSSxJQUFJSixFQUFFLFdBQVdJLEVBQUU7QUFDMUIsVUFBQUEsRUFBRSxNQUFNLEVBQUUsU0FBUztBQUFBLE1BQ3ZCO0FBQUEsSUFDRixDQUFDO0FBQUEsRUFDSCxHQUFHUCxFQUFFLFVBQVUsY0FBYyxXQUFXO0FBQ3RDLFNBQUssWUFBWSxLQUFLLFNBQVMsSUFBSSxLQUFLLFlBQVksS0FBSyxtQkFBbUI7QUFBQSxFQUM5RSxHQUFHLE9BQU8sZUFBZUEsRUFBRSxXQUFXLFlBQVk7QUFBQSxJQUNoRCxLQUFLLFdBQVc7QUFDZCxVQUFJRztBQUNKLGVBQVNBLElBQUksS0FBSyxlQUFlLFFBQVFBLE1BQU0sU0FBUyxTQUFTQSxFQUFFLFVBQVU7QUFBQSxJQUMvRTtBQUFBLElBQ0EsWUFBWTtBQUFBLElBQ1osY0FBYztBQUFBLEVBQ2hCLENBQUMsR0FBR0gsRUFBRSxVQUFVLGdCQUFnQixTQUFTRyxHQUFHO0FBQzFDLFdBQU8sS0FBSyxlQUFlLEdBQUdKLEVBQUUsVUFBVSxjQUFjLEtBQUssTUFBTUksQ0FBQztBQUFBLEVBQ3RFLEdBQUdILEVBQUUsVUFBVSxhQUFhLFNBQVNHLEdBQUc7QUFDdEMsV0FBTyxLQUFLLGVBQWUsR0FBRyxLQUFLLHdCQUF3QkEsQ0FBQyxHQUFHLEtBQUssZ0JBQWdCQSxDQUFDO0FBQUEsRUFDdkYsR0FBR0gsRUFBRSxVQUFVLGtCQUFrQixTQUFTRyxHQUFHO0FBQzNDLFFBQUlJLElBQUksTUFBTSxJQUFJLE1BQU0sSUFBSSxFQUFFLFVBQVUsSUFBSSxFQUFFLFdBQVcsSUFBSSxFQUFFO0FBQy9ELFdBQU8sS0FBSyxJQUFJaUwsTUFBTSxLQUFLLG1CQUFtQixNQUFNLEVBQUUsS0FBS3JMLENBQUMsR0FBRyxJQUFJbUwsR0FBRSxXQUFXO0FBQzlFLE1BQUEvSyxFQUFFLG1CQUFtQixNQUFNOEssR0FBRSxHQUFHbEwsQ0FBQztBQUFBLElBQ25DLENBQUM7QUFBQSxFQUNILEdBQUdILEVBQUUsVUFBVSwwQkFBMEIsU0FBU0csR0FBRztBQUNuRCxRQUFJSSxJQUFJLE1BQU0sSUFBSUEsRUFBRSxVQUFVLElBQUlBLEVBQUUsYUFBYSxJQUFJQSxFQUFFO0FBQ3ZELFFBQUlKLEVBQUUsTUFBTSxDQUFDLElBQUksS0FBS0EsRUFBRSxTQUFTO0FBQUEsRUFDbkMsR0FBR0gsRUFBRSxVQUFVLGVBQWUsV0FBVztBQUN2QyxRQUFJRyxJQUFJLElBQUl1TSxFQUFFO0FBQ2QsV0FBT3ZNLEVBQUUsU0FBUyxNQUFNQTtBQUFBLEVBQzFCLEdBQUdILEVBQUUsU0FBUyxTQUFTRyxHQUFHSSxHQUFHO0FBQzNCLFdBQU8sSUFBSTZNLEdBQUdqTixHQUFHSSxDQUFDO0FBQUEsRUFDcEIsR0FBR1A7QUFDTCxFQUFFME0sQ0FBQyxHQUFHVSxLQUFLLFNBQVNyTixHQUFHO0FBQ3JCLEVBQUF3SyxFQUFFdkssR0FBR0QsQ0FBQztBQUNOLFdBQVNDLEVBQUVHLEdBQUdJLEdBQUc7QUFDZixRQUFJLElBQUlSLEVBQUUsS0FBSyxJQUFJLEtBQUs7QUFDeEIsV0FBTyxFQUFFLGNBQWNJLEdBQUcsRUFBRSxTQUFTSSxHQUFHO0FBQUEsRUFDMUM7QUFDQSxTQUFPUCxFQUFFLFVBQVUsT0FBTyxTQUFTRyxHQUFHO0FBQ3BDLFFBQUlJLEdBQUc7QUFDUCxLQUFDLEtBQUtBLElBQUksS0FBSyxpQkFBaUIsUUFBUUEsTUFBTSxTQUFTLFNBQVNBLEVBQUUsVUFBVSxRQUFRLE1BQU0sVUFBVSxFQUFFLEtBQUtBLEdBQUdKLENBQUM7QUFBQSxFQUNqSCxHQUFHSCxFQUFFLFVBQVUsUUFBUSxTQUFTRyxHQUFHO0FBQ2pDLFFBQUlJLEdBQUc7QUFDUCxLQUFDLEtBQUtBLElBQUksS0FBSyxpQkFBaUIsUUFBUUEsTUFBTSxTQUFTLFNBQVNBLEVBQUUsV0FBVyxRQUFRLE1BQU0sVUFBVSxFQUFFLEtBQUtBLEdBQUdKLENBQUM7QUFBQSxFQUNsSCxHQUFHSCxFQUFFLFVBQVUsV0FBVyxXQUFXO0FBQ25DLFFBQUlHLEdBQUdJO0FBQ1AsS0FBQ0EsS0FBS0osSUFBSSxLQUFLLGlCQUFpQixRQUFRQSxNQUFNLFNBQVMsU0FBU0EsRUFBRSxjQUFjLFFBQVFJLE1BQU0sVUFBVUEsRUFBRSxLQUFLSixDQUFDO0FBQUEsRUFDbEgsR0FBR0gsRUFBRSxVQUFVLGFBQWEsU0FBU0csR0FBRztBQUN0QyxRQUFJSSxHQUFHO0FBQ1AsWUFBUSxLQUFLQSxJQUFJLEtBQUssWUFBWSxRQUFRQSxNQUFNLFNBQVMsU0FBU0EsRUFBRSxVQUFVSixDQUFDLE9BQU8sUUFBUSxNQUFNLFNBQVMsSUFBSXFMO0FBQUEsRUFDbkgsR0FBR3hMO0FBQ0wsRUFBRW1OLEVBQUUsR0FBR0UsS0FBSztBQUFBLEVBQ1YsS0FBSyxXQUFXO0FBQ2QsV0FBTyxLQUFLLElBQUk7QUFBQSxFQUNsQjtBQUFBLEVBQ0EsVUFBVTtBQUNaLEdBQUdDLEtBQUssU0FBU3ZOLEdBQUc7QUFDbEIsRUFBQXdLLEVBQUV2SyxHQUFHRCxDQUFDO0FBQ04sV0FBU0MsRUFBRUcsR0FBR0ksR0FBRztBQUNmLFdBQU9SLEVBQUUsS0FBSyxJQUFJLEtBQUs7QUFBQSxFQUN6QjtBQUNBLFNBQU9DLEVBQUUsVUFBVSxXQUFXLFNBQVNHLEdBQUdJLEdBQUc7QUFDM0MsV0FBTztBQUFBLEVBQ1QsR0FBR1A7QUFDTCxFQUFFc0wsRUFBQyxHQUFHaUMsS0FBSztBQUFBLEVBQ1QsYUFBYSxTQUFTeE4sR0FBR0MsR0FBRztBQUMxQixhQUFTRyxJQUFJLENBQUMsR0FBR0ksSUFBSSxHQUFHQSxJQUFJLFVBQVUsUUFBUUE7QUFDNUMsTUFBQUosRUFBRUksSUFBSSxDQUFDLElBQUksVUFBVUEsQ0FBQztBQUN4QixXQUFPLFlBQVksTUFBTSxRQUFRcUssR0FBRSxDQUFDN0ssR0FBR0MsQ0FBQyxHQUFHMkssR0FBRXhLLENBQUMsQ0FBQyxDQUFDO0FBQUEsRUFDbEQ7QUFBQSxFQUNBLGVBQWUsU0FBU0osR0FBRztBQUN6QixXQUFPLGNBQWNBLENBQUM7QUFBQSxFQUN4QjtBQUFBLEVBQ0EsVUFBVTtBQUNaLEdBQUd5TixLQUFLLFNBQVN6TixHQUFHO0FBQ2xCLEVBQUF3SyxFQUFFdkssR0FBR0QsQ0FBQztBQUNOLFdBQVNDLEVBQUVHLEdBQUdJLEdBQUc7QUFDZixRQUFJLElBQUlSLEVBQUUsS0FBSyxNQUFNSSxHQUFHSSxDQUFDLEtBQUs7QUFDOUIsV0FBTyxFQUFFLFlBQVlKLEdBQUcsRUFBRSxPQUFPSSxHQUFHLEVBQUUsVUFBVSxJQUFJO0FBQUEsRUFDdEQ7QUFDQSxTQUFPUCxFQUFFLFVBQVUsV0FBVyxTQUFTRyxHQUFHSSxHQUFHO0FBQzNDLFFBQUk7QUFDSixRQUFJQSxNQUFNLFdBQVdBLElBQUksSUFBSSxLQUFLO0FBQ2hDLGFBQU87QUFDVCxTQUFLLFFBQVFKO0FBQ2IsUUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLEtBQUs7QUFDMUIsV0FBTyxLQUFLLFNBQVMsS0FBSyxLQUFLLEtBQUssZUFBZSxHQUFHLEdBQUdJLENBQUMsSUFBSSxLQUFLLFVBQVUsSUFBSSxLQUFLLFFBQVFBLEdBQUcsS0FBSyxNQUFNLElBQUksS0FBSyxRQUFRLFFBQVEsTUFBTSxTQUFTLElBQUksS0FBSyxlQUFlLEdBQUcsS0FBSyxJQUFJQSxDQUFDLEdBQUc7QUFBQSxFQUM5TCxHQUFHUCxFQUFFLFVBQVUsaUJBQWlCLFNBQVNHLEdBQUdJLEdBQUcsR0FBRztBQUNoRCxXQUFPLE1BQU0sV0FBVyxJQUFJLElBQUlnTixHQUFHLFlBQVlwTixFQUFFLE1BQU0sS0FBS0EsR0FBRyxJQUFJLEdBQUcsQ0FBQztBQUFBLEVBQ3pFLEdBQUdILEVBQUUsVUFBVSxpQkFBaUIsU0FBU0csR0FBR0ksR0FBRyxHQUFHO0FBQ2hELFFBQUksTUFBTSxXQUFXLElBQUksSUFBSSxLQUFLLFFBQVEsS0FBSyxVQUFVLEtBQUssS0FBSyxZQUFZO0FBQzdFLGFBQU9BO0FBQ1QsSUFBQUEsS0FBSyxRQUFRZ04sR0FBRyxjQUFjaE4sQ0FBQztBQUFBLEVBQ2pDLEdBQUdQLEVBQUUsVUFBVSxVQUFVLFNBQVNHLEdBQUdJLEdBQUc7QUFDdEMsUUFBSSxLQUFLO0FBQ1AsYUFBTyxJQUFJLE1BQU0sOEJBQThCO0FBQ2pELFNBQUssVUFBVTtBQUNmLFFBQUksSUFBSSxLQUFLLFNBQVNKLEdBQUdJLENBQUM7QUFDMUIsUUFBSTtBQUNGLGFBQU87QUFDVCxTQUFLLFlBQVksTUFBTSxLQUFLLE1BQU0sU0FBUyxLQUFLLEtBQUssS0FBSyxlQUFlLEtBQUssV0FBVyxLQUFLLElBQUksSUFBSTtBQUFBLEVBQ3hHLEdBQUdQLEVBQUUsVUFBVSxXQUFXLFNBQVNHLEdBQUdJLEdBQUc7QUFDdkMsUUFBSSxJQUFJLElBQUk7QUFDWixRQUFJO0FBQ0YsV0FBSyxLQUFLSixDQUFDO0FBQUEsSUFDYixTQUFTLEdBQUc7QUFDVixVQUFJLElBQUksSUFBSSxLQUFLLElBQUksTUFBTSxvQ0FBb0M7QUFBQSxJQUNqRTtBQUNBLFFBQUk7QUFDRixhQUFPLEtBQUssWUFBWSxHQUFHO0FBQUEsRUFDL0IsR0FBR0gsRUFBRSxVQUFVLGNBQWMsV0FBVztBQUN0QyxRQUFJLENBQUMsS0FBSyxRQUFRO0FBQ2hCLFVBQUlHLElBQUksTUFBTUksSUFBSUosRUFBRSxJQUFJLElBQUlBLEVBQUUsV0FBVyxJQUFJLEVBQUU7QUFDL0MsV0FBSyxPQUFPLEtBQUssUUFBUSxLQUFLLFlBQVksTUFBTSxLQUFLLFVBQVUsSUFBSWtMLEdBQUUsR0FBRyxJQUFJLEdBQUc5SyxLQUFLLFNBQVMsS0FBSyxLQUFLLEtBQUssZUFBZSxHQUFHQSxHQUFHLElBQUksSUFBSSxLQUFLLFFBQVEsTUFBTVIsRUFBRSxVQUFVLFlBQVksS0FBSyxJQUFJO0FBQUEsSUFDL0w7QUFBQSxFQUNGLEdBQUdDO0FBQ0wsRUFBRXNOLEVBQUUsR0FBR0csS0FBSyxXQUFXO0FBQ3JCLFdBQVMxTixFQUFFQyxHQUFHRyxHQUFHO0FBQ2YsSUFBQUEsTUFBTSxXQUFXQSxJQUFJSixFQUFFLE1BQU0sS0FBSyxzQkFBc0JDLEdBQUcsS0FBSyxNQUFNRztBQUFBLEVBQ3hFO0FBQ0EsU0FBT0osRUFBRSxVQUFVLFdBQVcsU0FBU0MsR0FBR0csR0FBR0ksR0FBRztBQUM5QyxXQUFPSixNQUFNLFdBQVdBLElBQUksSUFBSSxJQUFJLEtBQUssb0JBQW9CLE1BQU1ILENBQUMsRUFBRSxTQUFTTyxHQUFHSixDQUFDO0FBQUEsRUFDckYsR0FBR0osRUFBRSxNQUFNc04sR0FBRyxLQUFLdE47QUFDckIsRUFBRSxHQUFHMk4sS0FBSyxTQUFTM04sR0FBRztBQUNwQixFQUFBd0ssRUFBRXZLLEdBQUdELENBQUM7QUFDTixXQUFTQyxFQUFFRyxHQUFHSSxHQUFHO0FBQ2YsSUFBQUEsTUFBTSxXQUFXQSxJQUFJa04sR0FBRztBQUN4QixRQUFJLElBQUkxTixFQUFFLEtBQUssTUFBTUksR0FBR0ksQ0FBQyxLQUFLO0FBQzlCLFdBQU8sRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLFVBQVUsSUFBSTtBQUFBLEVBQ3pDO0FBQ0EsU0FBT1AsRUFBRSxVQUFVLFFBQVEsU0FBU0csR0FBRztBQUNyQyxRQUFJSSxJQUFJLEtBQUs7QUFDYixRQUFJLEtBQUssU0FBUztBQUNoQixNQUFBQSxFQUFFLEtBQUtKLENBQUM7QUFDUjtBQUFBLElBQ0Y7QUFDQSxRQUFJO0FBQ0osU0FBSyxVQUFVO0FBQ2Y7QUFDRSxVQUFJLElBQUlBLEVBQUUsUUFBUUEsRUFBRSxPQUFPQSxFQUFFLEtBQUs7QUFDaEM7QUFBQSxXQUNHQSxJQUFJSSxFQUFFLE1BQU07QUFDbkIsUUFBSSxLQUFLLFVBQVUsSUFBSSxHQUFHO0FBQ3hCLGFBQU9KLElBQUlJLEVBQUUsTUFBTTtBQUNqQixRQUFBSixFQUFFLFlBQVk7QUFDaEIsWUFBTTtBQUFBLElBQ1I7QUFBQSxFQUNGLEdBQUdIO0FBQ0wsRUFBRXlOLEVBQUUsR0FBR0UsS0FBSyxJQUFJRCxHQUFHRixFQUFFLEdBQUdJLEtBQUssU0FBUzdOLEdBQUc7QUFDdkMsU0FBT0EsS0FBSyxPQUFPQSxFQUFFLFVBQVUsWUFBWSxPQUFPQSxLQUFLO0FBQ3pEO0FBQ0EsU0FBUzhOLEdBQUc5TixHQUFHO0FBQ2IsU0FBT21MLEVBQUVuTCxLQUFLLE9BQU8sU0FBU0EsRUFBRSxJQUFJO0FBQ3RDO0FBQ0EsU0FBUytOLEdBQUcvTixHQUFHO0FBQ2IsU0FBT21MLEVBQUVuTCxFQUFFd00sRUFBRSxDQUFDO0FBQ2hCO0FBQ0EsU0FBU3dCLEdBQUdoTyxHQUFHO0FBQ2IsU0FBTyxPQUFPLGlCQUFpQm1MLEVBQUVuTCxLQUFLLE9BQU8sU0FBU0EsRUFBRSxPQUFPLGFBQWEsQ0FBQztBQUMvRTtBQUNBLFNBQVNpTyxHQUFHak8sR0FBRztBQUNiLFNBQU8sSUFBSSxVQUFVLG1CQUFtQkEsTUFBTSxRQUFRLE9BQU9BLEtBQUssV0FBVyxzQkFBc0IsTUFBTUEsSUFBSSxPQUFPLDBIQUEwSDtBQUNoUDtBQUNBLFNBQVNrTyxLQUFLO0FBQ1osU0FBTyxPQUFPLFVBQVUsY0FBYyxDQUFDLE9BQU8sV0FBVyxlQUFlLE9BQU87QUFDakY7QUFDQSxJQUFJQyxLQUFLRCxHQUFHO0FBQ1osU0FBU0UsR0FBR3BPLEdBQUc7QUFDYixTQUFPbUwsRUFBRW5MLEtBQUssT0FBTyxTQUFTQSxFQUFFbU8sRUFBRSxDQUFDO0FBQ3JDO0FBQ0EsU0FBU0UsR0FBR3JPLEdBQUc7QUFDYixTQUFPK0ssR0FBRyxNQUFNLFdBQVcsV0FBVztBQUNwQyxRQUFJM0ssR0FBR0ksR0FBR3FELEdBQUdDO0FBQ2IsV0FBTzRHLEdBQUcsTUFBTSxTQUFTM0csR0FBRztBQUMxQixjQUFRQSxFQUFFLE9BQU87QUFBQSxRQUNmLEtBQUs7QUFDSCxVQUFBM0QsSUFBSUosRUFBRSxVQUFVLEdBQUcrRCxFQUFFLFFBQVE7QUFBQSxRQUMvQixLQUFLO0FBQ0gsVUFBQUEsRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBR0EsRUFBRSxRQUFRO0FBQUEsUUFDdkMsS0FBSztBQUNILGlCQUFPLENBQUMsR0FBRytHLEVBQUUxSyxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQUEsUUFDeEIsS0FBSztBQUNILGlCQUFPSSxJQUFJdUQsRUFBRSxLQUFLLEdBQUdGLElBQUlyRCxFQUFFLE9BQU9zRCxJQUFJdEQsRUFBRSxNQUFNc0QsSUFBSSxDQUFDLEdBQUdnSCxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQUEsUUFDMUUsS0FBSztBQUNILGlCQUFPLENBQUMsR0FBRy9HLEVBQUUsS0FBSyxDQUFDO0FBQUEsUUFDckIsS0FBSztBQUNILGlCQUFPLENBQUMsR0FBRytHLEVBQUVqSCxDQUFDLENBQUM7QUFBQSxRQUNqQixLQUFLO0FBQ0gsaUJBQU8sQ0FBQyxHQUFHRSxFQUFFLEtBQUssQ0FBQztBQUFBLFFBQ3JCLEtBQUs7QUFDSCxpQkFBT0EsRUFBRSxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUM7QUFBQSxRQUN4QixLQUFLO0FBQ0gsaUJBQU8sQ0FBQyxHQUFHLEVBQUU7QUFBQSxRQUNmLEtBQUs7QUFDSCxpQkFBTzNELEVBQUUsWUFBWSxHQUFHLENBQUMsQ0FBQztBQUFBLFFBQzVCLEtBQUs7QUFDSCxpQkFBTyxDQUFDLENBQUM7QUFBQSxNQUNiO0FBQUEsSUFDRixDQUFDO0FBQUEsRUFDSCxDQUFDO0FBQ0g7QUFDQSxTQUFTa08sR0FBR3RPLEdBQUc7QUFDYixTQUFPbUwsRUFBRW5MLEtBQUssT0FBTyxTQUFTQSxFQUFFLFNBQVM7QUFDM0M7QUFDQSxTQUFTdU8sR0FBR3ZPLEdBQUc7QUFDYixNQUFJQSxhQUFhMk07QUFDZixXQUFPM007QUFDVCxNQUFJQSxLQUFLLE1BQU07QUFDYixRQUFJK04sR0FBRy9OLENBQUM7QUFDTixhQUFPd08sR0FBR3hPLENBQUM7QUFDYixRQUFJNk4sR0FBRzdOLENBQUM7QUFDTixhQUFPeU8sR0FBR3pPLENBQUM7QUFDYixRQUFJOE4sR0FBRzlOLENBQUM7QUFDTixhQUFPME8sR0FBRzFPLENBQUM7QUFDYixRQUFJZ08sR0FBR2hPLENBQUM7QUFDTixhQUFPMk8sR0FBRzNPLENBQUM7QUFDYixRQUFJb08sR0FBR3BPLENBQUM7QUFDTixhQUFPNE8sR0FBRzVPLENBQUM7QUFDYixRQUFJc08sR0FBR3RPLENBQUM7QUFDTixhQUFPNk8sR0FBRzdPLENBQUM7QUFBQSxFQUNmO0FBQ0EsUUFBTWlPLEdBQUdqTyxDQUFDO0FBQ1o7QUFDQSxTQUFTd08sR0FBR3hPLEdBQUc7QUFDYixTQUFPLElBQUkyTSxFQUFFLFNBQVMxTSxHQUFHO0FBQ3ZCLFFBQUlHLElBQUlKLEVBQUV3TSxFQUFFLEVBQUU7QUFDZCxRQUFJckIsRUFBRS9LLEVBQUUsU0FBUztBQUNmLGFBQU9BLEVBQUUsVUFBVUgsQ0FBQztBQUN0QixVQUFNLElBQUksVUFBVSxnRUFBZ0U7QUFBQSxFQUN0RixDQUFDO0FBQ0g7QUFDQSxTQUFTd08sR0FBR3pPLEdBQUc7QUFDYixTQUFPLElBQUkyTSxFQUFFLFNBQVMxTSxHQUFHO0FBQ3ZCLGFBQVNHLElBQUksR0FBR0EsSUFBSUosRUFBRSxVQUFVLENBQUNDLEVBQUUsUUFBUUc7QUFDekMsTUFBQUgsRUFBRSxLQUFLRCxFQUFFSSxDQUFDLENBQUM7QUFDYixJQUFBSCxFQUFFLFNBQVM7QUFBQSxFQUNiLENBQUM7QUFDSDtBQUNBLFNBQVN5TyxHQUFHMU8sR0FBRztBQUNiLFNBQU8sSUFBSTJNLEVBQUUsU0FBUzFNLEdBQUc7QUFDdkIsSUFBQUQsRUFBRSxLQUFLLFNBQVNJLEdBQUc7QUFDakIsTUFBQUgsRUFBRSxXQUFXQSxFQUFFLEtBQUtHLENBQUMsR0FBR0gsRUFBRSxTQUFTO0FBQUEsSUFDckMsR0FBRyxTQUFTRyxHQUFHO0FBQ2IsYUFBT0gsRUFBRSxNQUFNRyxDQUFDO0FBQUEsSUFDbEIsQ0FBQyxFQUFFLEtBQUssTUFBTXlMLEVBQUU7QUFBQSxFQUNsQixDQUFDO0FBQ0g7QUFDQSxTQUFTK0MsR0FBRzVPLEdBQUc7QUFDYixTQUFPLElBQUkyTSxFQUFFLFNBQVMxTSxHQUFHO0FBQ3ZCLFFBQUlHLEdBQUdJO0FBQ1AsUUFBSTtBQUNGLGVBQVMsSUFBSW1LLEVBQUUzSyxDQUFDLEdBQUcsSUFBSSxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsTUFBTSxJQUFJLEVBQUUsS0FBSyxHQUFHO0FBQ3RELFlBQUksSUFBSSxFQUFFO0FBQ1YsWUFBSUMsRUFBRSxLQUFLLENBQUMsR0FBR0EsRUFBRTtBQUNmO0FBQUEsTUFDSjtBQUFBLElBQ0YsU0FBUyxHQUFHO0FBQ1YsTUFBQUcsSUFBSSxFQUFFLE9BQU8sRUFBRTtBQUFBLElBQ2pCLFVBQUU7QUFDQSxVQUFJO0FBQ0YsYUFBSyxDQUFDLEVBQUUsU0FBU0ksSUFBSSxFQUFFLFdBQVdBLEVBQUUsS0FBSyxDQUFDO0FBQUEsTUFDNUMsVUFBRTtBQUNBLFlBQUlKLEVBQUcsT0FBTUEsRUFBRTtBQUFBLE1BQ2pCO0FBQUEsSUFDRjtBQUNBLElBQUFILEVBQUUsU0FBUztBQUFBLEVBQ2IsQ0FBQztBQUNIO0FBQ0EsU0FBUzBPLEdBQUczTyxHQUFHO0FBQ2IsU0FBTyxJQUFJMk0sRUFBRSxTQUFTMU0sR0FBRztBQUN2QixJQUFBNk8sR0FBRzlPLEdBQUdDLENBQUMsRUFBRSxNQUFNLFNBQVNHLEdBQUc7QUFDekIsYUFBT0gsRUFBRSxNQUFNRyxDQUFDO0FBQUEsSUFDbEIsQ0FBQztBQUFBLEVBQ0gsQ0FBQztBQUNIO0FBQ0EsU0FBU3lPLEdBQUc3TyxHQUFHO0FBQ2IsU0FBTzJPLEdBQUdOLEdBQUdyTyxDQUFDLENBQUM7QUFDakI7QUFDQSxTQUFTOE8sR0FBRzlPLEdBQUdDLEdBQUc7QUFDaEIsTUFBSUcsR0FBR0ksR0FBRyxHQUFHO0FBQ2IsU0FBT2lLLEdBQUcsTUFBTSxRQUFRLFFBQVEsV0FBVztBQUN6QyxRQUFJLEdBQUc7QUFDUCxXQUFPQyxHQUFHLE1BQU0sU0FBU25DLEdBQUc7QUFDMUIsY0FBUUEsRUFBRSxPQUFPO0FBQUEsUUFDZixLQUFLO0FBQ0gsVUFBQUEsRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBR25JLElBQUk4SyxHQUFHbEwsQ0FBQyxHQUFHdUksRUFBRSxRQUFRO0FBQUEsUUFDbkQsS0FBSztBQUNILGlCQUFPLENBQUMsR0FBR25JLEVBQUUsS0FBSyxDQUFDO0FBQUEsUUFDckIsS0FBSztBQUNILGNBQUlJLElBQUkrSCxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUMvSCxFQUFFLEtBQU0sUUFBTyxDQUFDLEdBQUcsQ0FBQztBQUN4QyxjQUFJLElBQUlBLEVBQUUsT0FBT1AsRUFBRSxLQUFLLENBQUMsR0FBR0EsRUFBRTtBQUM1QixtQkFBTyxDQUFDLENBQUM7QUFDWCxVQUFBc0ksRUFBRSxRQUFRO0FBQUEsUUFDWixLQUFLO0FBQ0gsaUJBQU8sQ0FBQyxHQUFHLENBQUM7QUFBQSxRQUNkLEtBQUs7QUFDSCxpQkFBTyxDQUFDLEdBQUcsRUFBRTtBQUFBLFFBQ2YsS0FBSztBQUNILGlCQUFPLElBQUlBLEVBQUUsS0FBSyxHQUFHLElBQUksRUFBRSxPQUFPLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRTtBQUFBLFFBQy9DLEtBQUs7QUFDSCxpQkFBT0EsRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRy9ILEtBQUssQ0FBQ0EsRUFBRSxTQUFTLElBQUlKLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxLQUFLQSxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUFBLFFBQzNGLEtBQUs7QUFDSCxVQUFBbUksRUFBRSxLQUFLLEdBQUdBLEVBQUUsUUFBUTtBQUFBLFFBQ3RCLEtBQUs7QUFDSCxpQkFBTyxDQUFDLEdBQUcsRUFBRTtBQUFBLFFBQ2YsS0FBSztBQUNILGNBQUksRUFBRyxPQUFNLEVBQUU7QUFDZixpQkFBTyxDQUFDLENBQUM7QUFBQSxRQUNYLEtBQUs7QUFDSCxpQkFBTyxDQUFDLENBQUM7QUFBQSxRQUNYLEtBQUs7QUFDSCxpQkFBT3RJLEVBQUUsU0FBUyxHQUFHLENBQUMsQ0FBQztBQUFBLE1BQzNCO0FBQUEsSUFDRixDQUFDO0FBQUEsRUFDSCxDQUFDO0FBQ0g7QUFDQSxTQUFTOE8sR0FBRy9PLEdBQUdDLEdBQUdHLEdBQUdJLEdBQUcsR0FBRztBQUN6QixFQUFBQSxNQUFNLFdBQVdBLElBQUksSUFBSSxNQUFNLFdBQVcsSUFBSTtBQUM5QyxNQUFJLElBQUlQLEVBQUUsU0FBUyxXQUFXO0FBQzVCLElBQUFHLEVBQUUsR0FBRyxJQUFJSixFQUFFLElBQUksS0FBSyxTQUFTLE1BQU1RLENBQUMsQ0FBQyxJQUFJLEtBQUssWUFBWTtBQUFBLEVBQzVELEdBQUdBLENBQUM7QUFDSixNQUFJUixFQUFFLElBQUksQ0FBQyxHQUFHLENBQUM7QUFDYixXQUFPO0FBQ1g7QUFDQSxTQUFTZ1AsR0FBR2hQLEdBQUdDLEdBQUc7QUFDaEIsTUFBSUcsSUFBSStLLEVBQUVuTCxDQUFDLElBQUlBLElBQUksV0FBVztBQUM1QixXQUFPQTtBQUFBLEVBQ1QsR0FBR1EsSUFBSSxTQUFTLEdBQUc7QUFDakIsV0FBTyxFQUFFLE1BQU1KLEVBQUUsQ0FBQztBQUFBLEVBQ3BCO0FBQ0EsU0FBTyxJQUFJdU0sRUFBRW5NLENBQUM7QUFDaEI7QUFDQSxJQUFJeU8sS0FBSzdELEdBQUcsU0FBU3BMLEdBQUc7QUFDdEIsU0FBTyxXQUFXO0FBQ2hCLElBQUFBLEVBQUUsSUFBSSxHQUFHLEtBQUssT0FBTyxjQUFjLEtBQUssVUFBVTtBQUFBLEVBQ3BEO0FBQ0YsQ0FBQztBQUNELFNBQVNrUCxHQUFHbFAsR0FBR0MsR0FBRztBQUNoQixTQUFPLElBQUksUUFBUSxTQUFTRyxHQUFHSSxHQUFHO0FBQ2hDLFFBQUksSUFBSSxJQUFJO0FBQ1osSUFBQVIsRUFBRSxVQUFVO0FBQUEsTUFDVixNQUFNLFNBQVMsR0FBRztBQUNoQixZQUFJLEdBQUcsSUFBSTtBQUFBLE1BQ2I7QUFBQSxNQUNBLE9BQU9RO0FBQUEsTUFDUCxVQUFVLFdBQVc7QUFDbkIsWUFBSUosRUFBRSxDQUFDLElBQUlJLEVBQUUsSUFBSXlPLEdBQUcsQ0FBQztBQUFBLE1BQ3ZCO0FBQUEsSUFDRixDQUFDO0FBQUEsRUFDSCxDQUFDO0FBQ0g7QUFDQSxTQUFTRSxHQUFHblAsR0FBRztBQUNiLFNBQU9BLGFBQWEsUUFBUSxDQUFDLE1BQU1BLENBQUM7QUFDdEM7QUFDQSxJQUFJb1AsS0FBS2hFLEdBQUcsU0FBU3BMLEdBQUc7QUFDdEIsU0FBTyxTQUFTSSxHQUFHO0FBQ2pCLElBQUFBLE1BQU0sV0FBV0EsSUFBSSxPQUFPSixFQUFFLElBQUksR0FBRyxLQUFLLFVBQVUsd0JBQXdCLEtBQUssT0FBTyxnQkFBZ0IsS0FBSyxPQUFPSTtBQUFBLEVBQ3RIO0FBQ0YsQ0FBQztBQUNELFNBQVNpUCxHQUFHclAsR0FBR0MsR0FBRztBQUNoQixNQUFJRyxJQUFJK08sR0FBR25QLENBQUMsSUFBSSxFQUFFLE9BQU9BLEVBQUUsSUFBSSxPQUFPQSxLQUFLLFdBQVcsRUFBRSxNQUFNQSxFQUFFLElBQUlBLEdBQUdRLElBQUlKLEVBQUUsT0FBTyxJQUFJQSxFQUFFLE1BQU0sSUFBSUEsRUFBRSxNQUFNLElBQUksTUFBTSxTQUFTa1AsS0FBSyxHQUFHLElBQUlsUCxFQUFFLFdBQVdtSSxJQUFJLE1BQU0sU0FBU3FGLEtBQUssR0FBR3BGLElBQUlwSSxFQUFFLE1BQU1xSSxJQUFJRCxNQUFNLFNBQVMsT0FBT0E7QUFDek4sTUFBSWhJLEtBQUssUUFBUSxLQUFLO0FBQ3BCLFVBQU0sSUFBSSxVQUFVLHNCQUFzQjtBQUM1QyxTQUFPd00sR0FBRyxTQUFTLEdBQUd0RSxHQUFHO0FBQ3ZCLFFBQUksR0FBRyxHQUFHaUIsSUFBSSxNQUFNcUIsSUFBSSxHQUFHQyxLQUFJLFNBQVNzRSxJQUFJO0FBQzFDLFVBQUlSLEdBQUdyRyxHQUFHSCxHQUFHLFdBQVc7QUFDdEIsWUFBSTtBQUNGLFlBQUUsWUFBWSxHQUFHZ0csR0FBRyxFQUFFO0FBQUEsWUFDcEIsTUFBTTlGO0FBQUEsWUFDTixXQUFXa0I7QUFBQSxZQUNYLE1BQU1xQjtBQUFBLFVBQ1IsQ0FBQyxDQUFDLEVBQUUsVUFBVXRDLENBQUM7QUFBQSxRQUNqQixTQUFTOEcsSUFBSTtBQUNYLFVBQUE5RyxFQUFFLE1BQU04RyxFQUFFO0FBQUEsUUFDWjtBQUFBLE1BQ0YsR0FBR0QsRUFBRTtBQUFBLElBQ1A7QUFDQSxRQUFJLEVBQUUsVUFBVXRDLEdBQUd2RSxHQUFHLFNBQVM2RyxJQUFJO0FBQ2pDLFdBQUssUUFBUSxFQUFFLFlBQVksR0FBR3ZFLEtBQUt0QyxFQUFFLEtBQUtpQixJQUFJNEYsRUFBRSxHQUFHLElBQUksS0FBS3RFLEdBQUUsQ0FBQztBQUFBLElBQ2pFLEdBQUcsUUFBUSxRQUFRLFdBQVc7QUFDNUIsV0FBSyxRQUFRLEVBQUUsVUFBVSxLQUFLLFFBQVEsRUFBRSxZQUFZLEdBQUd0QixJQUFJO0FBQUEsSUFDN0QsQ0FBQyxDQUFDLEdBQUcsQ0FBQ3FCLEtBQUtDLEdBQUV6SyxLQUFLLE9BQU8sT0FBT0EsS0FBSyxXQUFXQSxJQUFJLENBQUNBLElBQUkrSCxFQUFFLElBQUksSUFBSSxDQUFDO0FBQUEsRUFDdEUsQ0FBQztBQUNIO0FBQ0EsU0FBUytHLEdBQUd0UCxHQUFHO0FBQ2IsUUFBTSxJQUFJb1AsR0FBR3BQLENBQUM7QUFDaEI7QUFDQSxNQUFNeVAsR0FBRTtBQUFBLEVBQ04sY0FBYztBQUNaLFNBQUssTUFBTSxDQUFDeFAsTUFBTTtBQUNoQixVQUFJLEtBQUssU0FBUyxXQUFXO0FBQzNCLGNBQU0sSUFBSSxNQUFNLHdDQUF3QztBQUMxRCxXQUFLLFdBQVcsRUFBRSxRQUFRLFdBQVcsV0FBVyxJQUFJLGFBQWFBLEVBQUUsR0FBRyxLQUFLLFNBQVMsS0FBS0EsQ0FBQyxHQUFHLEtBQUssU0FBUyxTQUFTO0FBQUEsSUFDdEgsR0FBRyxLQUFLLFFBQVEsQ0FBQ0EsR0FBR0csTUFBTTtBQUN4QixVQUFJLEtBQUssU0FBUyxXQUFXO0FBQzNCLGNBQU0sSUFBSSxNQUFNLHdDQUF3QztBQUMxRCxXQUFLLFdBQVcsRUFBRSxRQUFRLFNBQVMsV0FBVyxJQUFJLE9BQU9ILEdBQUcsUUFBUUcsRUFBRSxHQUFHLEtBQUssU0FBUyxNQUFNSCxDQUFDO0FBQUEsSUFDaEcsR0FBRyxLQUFLLHVCQUF1QixDQUFDQSxNQUFNLEtBQUssU0FBUyxXQUFXLFlBQVksS0FBSyxTQUFTLGNBQWNBLEdBQUcsS0FBSyxZQUFZLENBQUNBLE1BQU07QUFDaEksVUFBSSxLQUFLLFNBQVMsV0FBVyxXQUFXO0FBQ3RDLFFBQUFBLEVBQUUsS0FBSyxRQUFRO0FBQ2Y7QUFBQSxNQUNGO0FBQ0EsV0FBSyxTQUFTLFdBQVcsV0FBV0EsRUFBRSxLQUFLLFFBQVE7QUFDbkQsWUFBTUcsSUFBSSxLQUFLLFNBQVMsVUFBVTtBQUFBLFFBQ2hDLE1BQU0sTUFBTTtBQUNWLGNBQUksS0FBSyxTQUFTLFdBQVc7QUFDM0Isa0JBQU0sSUFBSSxNQUFNLDhFQUE4RTtBQUNoRyxVQUFBSCxFQUFFLEtBQUssUUFBUSxHQUFHRyxFQUFFLFlBQVk7QUFBQSxRQUNsQztBQUFBLFFBQ0EsT0FBTyxNQUFNO0FBQ1gsY0FBSSxLQUFLLFNBQVMsV0FBVztBQUMzQixrQkFBTSxJQUFJLE1BQU0sK0VBQStFO0FBQ2pHLFVBQUFILEVBQUUsS0FBSyxRQUFRO0FBQUEsUUFDakI7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNILEdBQUcsS0FBSyxjQUFjLENBQUNBLE1BQU07QUFDM0IsVUFBSSxLQUFLLFNBQVMsV0FBVyxVQUFXLFFBQU8sUUFBUSxRQUFRLEtBQUssU0FBUyxXQUFXO0FBQ3hGLFVBQUksS0FBSyxTQUFTLFdBQVcsUUFBUyxRQUFPLFFBQVEsT0FBTyxLQUFLLFNBQVMsS0FBSztBQUMvRSxXQUFLLFNBQVMsV0FBVyxhQUFhb0gsR0FBRyxLQUFLLFFBQVE7QUFDdEQsWUFBTWpILElBQUk7QUFBQSxRQUNSLE9BQU9ILEVBQUUsYUFBYTtBQUFBLFFBQ3RCLE1BQU0sTUFBTStPLEdBQUcsTUFBTSxJQUFJLE1BQU0vTyxFQUFFLGFBQWEsQ0FBQztBQUFBLE1BQ2pEO0FBQ0EsYUFBT2lQLEdBQUcsS0FBSyxTQUFTLEtBQUtHLEdBQUdqUCxDQUFDLENBQUMsQ0FBQztBQUFBLElBQ3JDLEdBQUcsS0FBSyxXQUFXLEVBQUUsUUFBUSxXQUFXLFdBQVcsR0FBRyxHQUFHLEtBQUssV0FBVyxJQUFJZ04sR0FBRztBQUFBLEVBQ2xGO0FBQUEsRUFDQSxJQUFJLFVBQVU7QUFDWixXQUFPLEtBQUs7QUFBQSxFQUNkO0FBQ0Y7QUFDQSxNQUFNLEVBQUUsT0FBT3NDLElBQUksT0FBT0MsR0FBRyxJQUFJbkksRUFBRSxZQUFZLEdBQUdvSSxLQUFLLENBQUM1UCxHQUFHQyxNQUFNO0FBQy9ELFFBQU1HLElBQUksSUFBSXFQLEdBQUU7QUFDaEIsU0FBTztBQUFBLElBQ0wsV0FBV3JQO0FBQUEsSUFDWCxZQUFZLE9BQU9JLE1BQU07QUFDdkIsVUFBSTtBQUNGLFlBQUlKLEVBQUUsUUFBUTtBQUNaLGdCQUFNLElBQUksTUFBTSx5Q0FBeUM7QUFDM0QsY0FBTSxJQUFJLE1BQU1ILEVBQUVPLENBQUM7QUFDbkIsUUFBQWtQLEdBQUcsS0FBSzFQLENBQUMsMkNBQTJDLENBQUMsR0FBR0ksRUFBRSxJQUFJLENBQUM7QUFBQSxNQUNqRSxTQUFTLEdBQUc7QUFDVixRQUFBdVAsR0FBRyxNQUFNM1AsQ0FBQyx1Q0FBdUNNLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxHQUFHRixFQUFFLE1BQU0sR0FBR0UsRUFBRSxDQUFDLENBQUM7QUFBQSxNQUN4RjtBQUFBLElBQ0Y7QUFBQSxFQUNGO0FBQ0YsR0FBR3VQLEtBQUssT0FBTzdQLEdBQUdDLEdBQUdHLE1BQU07QUFDekIsUUFBTSxRQUFRLElBQUksT0FBTyxPQUFPSixDQUFDLEVBQUUsSUFBSSxDQUFDUSxNQUFNQSxFQUFFLFdBQVcsRUFBRSxTQUFTUCxHQUFHLGVBQWVHLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDL0YsR0FBRzBQLEtBQUssT0FBTztBQUFBO0FBQUE7QUFBQSxFQUdiLFVBQVVGLEdBQUcsYUFBYWpILEVBQUUsU0FBUyxJQUFJO0FBQUE7QUFBQSxFQUV6QyxZQUFZaUgsR0FBRyxlQUFlakgsRUFBRSxXQUFXLElBQUk7QUFBQTtBQUVqRCxJQUFJLEVBQUUsT0FBT29ILEdBQUcsSUFBSXZJLEVBQUUsZ0JBQWdCLEdBQUd3SSxJQUFJN1EsRUFBSSxTQUFTLEVBQUUsU0FBUyxHQUFHOFEsS0FBSzlRLEVBQUksT0FBTztBQUFBLEVBQ3RGLFNBQVM2UTtBQUFBLEVBQ1QsUUFBUUE7QUFBQSxFQUNSLFVBQVVBO0FBQUEsRUFDVixRQUFRQTtBQUFBLEVBQ1IsYUFBYUE7QUFBQSxFQUNiLG1CQUFtQkE7QUFBQSxFQUNuQixtQkFBbUJBO0FBQUEsRUFDbkIsbUJBQW1CQTtBQUFBLEVBQ25CLDZCQUE2QkE7QUFBQSxFQUM3QixpQkFBaUJBO0FBQUEsRUFDakIsc0JBQXNCQTtBQUN4QixDQUFDLEdBQUdFLElBQUksTUFBTUEsR0FBRTtBQUFBLEVBQ2QsY0FBYztBQUNaLFNBQUssZUFBZSxDQUFDalEsTUFBTTtBQUN6QixXQUFLLGFBQWFpUSxHQUFFLHFCQUFxQixHQUFHLE9BQU8sUUFBUWpRLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQ0csR0FBR0ksQ0FBQyxNQUFNO0FBQ2hGLGNBQU0sSUFBSUQsR0FBR0gsR0FBR0ksS0FBSzBQLEdBQUUsTUFBTUgsRUFBRTtBQUMvQixhQUFLLFdBQVczUCxDQUFDLElBQUk7QUFBQSxNQUN2QixDQUFDO0FBQUEsSUFDSCxHQUFHLEtBQUssYUFBYThQLEdBQUUscUJBQXFCO0FBQUEsRUFDOUM7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUlBLElBQUksTUFBTTtBQUNSLFdBQU8sRUFBRSxHQUFHLEtBQUssV0FBVztBQUFBLEVBQzlCO0FBQ0Y7QUFDQUEsRUFBRSxPQUFPLE1BQU07QUFDZixHQUFHQSxFQUFFLHVCQUF1QixNQUFNO0FBQ2hDLFFBQU1qUSxJQUFJLENBQUM7QUFDWCxTQUFPLE9BQU8sS0FBS2dRLEdBQUcsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUM3UCxNQUFNO0FBQ2pELElBQUFILEVBQUVHLENBQUMsSUFBSThQLEVBQUU7QUFBQSxFQUNYLENBQUMsR0FBR2pRO0FBQ04sR0FBR2lRLEVBQUUsYUFBYSxDQUFDalEsTUFBTTtBQUN2QixRQUFNRyxJQUFJLElBQUk4UCxFQUFFO0FBQ2hCLFNBQU85UCxFQUFFLGFBQWE2UCxHQUFHLE1BQU1oUSxDQUFDLENBQUMsR0FBR0c7QUFDdEM7QUFDQSxJQUFJK1AsS0FBS0Q7QUFDVCxNQUFNRSxHQUFHO0FBQUEsRUFDUCxZQUFZblEsR0FBR0csR0FBR0ksR0FBRyxHQUFHO0FBQ3RCLFNBQUssZ0JBQWdCLENBQUMsTUFBTTtBQUMxQixVQUFJLENBQUMsRUFBRTtBQUNMLGNBQU0sSUFBSSxNQUFNLGlCQUFpQjtBQUNuQyxVQUFJNlAsR0FBRyxFQUFFLE1BQU0sTUFBTUEsR0FBRyxLQUFLLE9BQU8sS0FBSyxPQUFPLEVBQUUsUUFBUSxZQUFZLEVBQUUsS0FBSztBQUMzRTtBQUNGLFlBQU0sSUFBSWxNLEdBQUcsS0FBSyxNQUFNLEVBQUUsSUFBSSxDQUFDO0FBQy9CLFVBQUksQ0FBQyxLQUFLLGNBQWMsQ0FBQyxFQUFHO0FBQzVCLFlBQU0sRUFBRSxXQUFXb0UsR0FBRyxTQUFTLEVBQUUsSUFBSSxHQUFHRSxJQUFJLEVBQUU7QUFDOUMsY0FBUUEsR0FBRztBQUFBLFFBQ1QsS0FBSztBQUNILGVBQUssa0JBQWtCLGNBQWMsRUFBRSxTQUFTLEdBQUcsRUFBRSxNQUFNLE9BQU8sTUFBTTtBQUN4RTtBQUFBLFFBQ0YsS0FBSztBQUNILGVBQUssY0FBYyxJQUFJLFFBQVFGLEdBQUcsRUFBRSxXQUFXO0FBQy9DO0FBQUEsUUFDRixLQUFLO0FBQ0gsZUFBSyxjQUFjLElBQUksT0FBT0EsR0FBRyxFQUFFLFdBQVc7QUFDOUM7QUFBQSxRQUNGLEtBQUs7QUFDSCxlQUFLLGNBQWMsSUFBSSxTQUFTQSxHQUFHLEVBQUUsYUFBYSxFQUFFLE1BQU07QUFDMUQ7QUFBQSxRQUNGLEtBQUs7QUFDSCxlQUFLLGFBQWFBLENBQUMsSUFBSSxFQUFFLFFBQVEsS0FBSyxrQkFBa0IsWUFBWSxDQUFDO0FBQ3JFO0FBQUEsUUFDRixLQUFLO0FBQ0gsZUFBSyxrQkFBa0IsZUFBZSxFQUFFLE9BQU87QUFDL0M7QUFBQSxRQUNGLEtBQUs7QUFDSCxlQUFLLGNBQWMsSUFBSSxrQkFBa0IsRUFBRSxhQUFhLEVBQUUsUUFBUUEsQ0FBQztBQUNuRTtBQUFBLFFBQ0Y7QUFDRSxrQkFBUSxLQUFLLGdDQUFnQ0UsQ0FBQztBQUFBLE1BQ2xEO0FBQUEsSUFDRixHQUFHLEtBQUssZ0JBQWdCLENBQUMsTUFBTSxFQUFFLFdBQVcsS0FBSyxVQUFVLENBQUMsRUFBRSxhQUFhLFFBQVEsSUFBSSxnQkFBZ0IsS0FBSyxRQUFRLEVBQUUsTUFBTSxHQUFHLFFBQVEsS0FBSyxrQ0FBa0MsQ0FBQyxHQUFHLE1BQU0sS0FBSyxPQUFPLElBQUksRUFBRSxLQUFLLEtBQUssUUFBUSxLQUFLLG9DQUFvQyxDQUFDLEdBQUcsT0FBTyxLQUFLLE9BQU8sSUFBSSxFQUFFLEtBQUssR0FBRyxLQUFLLEtBQUssZUFBZSxDQUFDLEdBQUcsS0FBSyxTQUF5QixvQkFBSSxJQUFJLEdBQUcsS0FBSyxTQUFTeEksR0FBRyxLQUFLLFVBQVVHLEdBQUcsS0FBSyxnQkFBZ0JJLEdBQUcsS0FBSyxvQkFBb0I7QUFBQSxFQUN0YztBQUNGO0FBQ0EsTUFBTTZQLEtBQUssQ0FBQ3JRLE1BQU0sSUFBSSxJQUFJQSxDQUFDLEVBQUU7QUFDN0IsZUFBZXNRLEdBQUd0USxHQUFHQyxHQUFHO0FBQ3RCLFFBQU1PLElBQUksTUFBTXBCLEdBQWU7QUFBQSxJQUM3QixRQUFRWTtBQUFBLElBQ1IsT0FBTztBQUFBLElBQ1AsYUFBYUM7QUFBQSxFQUNmLENBQUMsRUFBRSxTQUFTNEQsSUFBSSxNQUFNTyxHQUFHNUQsQ0FBQztBQUMxQixNQUFJLENBQUM2RCxHQUFHN0QsR0FBR3FELENBQUM7QUFDVixVQUFNLElBQUksTUFBTSxtQ0FBbUM7QUFDckQsU0FBT3JEO0FBQ1Q7QUFDQSxNQUFNK1AsR0FBRztBQUFBLEVBQ1AsY0FBYztBQUNaLFNBQUssY0FBOEIsb0JBQUksSUFBSTtBQUFBLEVBQzdDO0FBQUEsRUFDQSxjQUFjdFEsR0FBR0csR0FBRztBQUNsQixTQUFLLFlBQVksSUFBSUgsR0FBR0csQ0FBQztBQUFBLEVBQzNCO0FBQUEsRUFDQSxnQkFBZ0I7QUFDZCxVQUFNSCxJQUFJLEtBQUssWUFBWSxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQzNDLFFBQUksQ0FBQ0E7QUFDSCxZQUFNLElBQUksTUFBTSxzQkFBc0I7QUFDeEMsV0FBT0E7QUFBQSxFQUNUO0FBQUEsRUFDQSxvQkFBb0I7QUFDbEIsV0FBTyxLQUFLO0FBQUEsRUFDZDtBQUNGO0FBQ0EsTUFBTXVRLEtBQUssQ0FBQ3hRLEdBQUdDLEdBQUdHLE1BQU07QUFDdEIsUUFBTSxFQUFFLFVBQVVJLEVBQUUsSUFBSVI7QUFDeEIsRUFBQVEsRUFBRSxVQUFVLFVBQVUsQ0FBQyxNQUFNO0FBQzNCLFFBQUksRUFBRSxXQUFXO0FBQ2YsWUFBTSxJQUFJLEVBQUUsYUFBYSxJQUFJLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixVQUFVLElBQUksRUFBRSxlQUFlLEVBQUUsbUJBQW1CLFdBQVcrSCxJQUFJO0FBQUEsUUFDcEksV0FBVztBQUFBLFVBQ1QsV0FBVztBQUFBLFVBQ1gsYUFBYTtBQUFBLFVBQ2IsV0FBVyxPQUFPQyxNQUFNO0FBQ3RCLGlCQUFLaUksR0FBRyxhQUFhLEdBQUd4USxHQUFHRyxHQUFHb0ksQ0FBQztBQUFBLFVBQ2pDO0FBQUEsUUFDRjtBQUFBLFFBQ0EsWUFBWTtBQUFBLFVBQ1YsV0FBVztBQUFBLFVBQ1gsYUFBYTtBQUFBLFVBQ2IsV0FBVyxPQUFPQSxNQUFNO0FBQ3RCLGlCQUFLaUksR0FBRyxjQUFjLEdBQUd4USxHQUFHRyxHQUFHb0ksQ0FBQztBQUFBLFVBQ2xDO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFDQSxNQUFBcEksRUFBRSxJQUFJLHFCQUFxQm1JLENBQUM7QUFBQSxJQUM5QjtBQUFBLEVBQ0YsQ0FBQztBQUNILEdBQUdrSSxLQUFLLENBQUN6USxHQUFHQyxHQUFHRyxHQUFHSSxHQUFHLE1BQU1tSSxFQUFFLFNBQVMsSUFBSTtBQUFBLEVBQ3hDLFNBQVN2STtBQUFBLEVBQ1QsdUJBQXVCa0ssR0FBR2xLLEVBQUUsd0JBQXdCSixDQUFDO0FBQUEsRUFDckQsa0JBQWtCa0UsR0FBRzlELEVBQUUsT0FBTztBQUFBLEVBQzlCLGVBQWVJO0FBQUEsRUFDZixjQUFjLEVBQUUsVUFBVVIsR0FBRyx3QkFBd0IsS0FBSyxPQUFPLFNBQVMsRUFBRSx1QkFBdUI7QUFBQSxFQUNuRyxZQUFZQztBQUNkLENBQUMsR0FBR3lRLEtBQUssdUdBQXVHLEVBQUUsT0FBT0MsR0FBRyxPQUFPQyxHQUFHLElBQUlwSixFQUFFLFNBQVMsR0FBR3FKLElBQUksTUFBTUEsR0FBRTtBQUFBLEVBQ2xLLFlBQVk1USxHQUFHO0FBQ2IsU0FBSyxlQUFlLElBQUl3UCxHQUFFLEdBQUcsS0FBSyxhQUFhLElBQUlBLEdBQUUsR0FBRyxLQUFLLFVBQVUsSUFBSUEsR0FBRSxHQUFHLEtBQUssWUFBWUssR0FBRyxHQUFHLEtBQUssZ0JBQWdCLFlBQVk7QUFDdEksVUFBSTtBQUNGLFFBQUFhLEVBQUUsNEJBQTRCLEdBQUdBLEVBQUUsaUNBQWlDO0FBQ3BFLGNBQU12USxJQUFJLE1BQU0sS0FBSyxhQUFhLFlBQVk7QUFBQSxVQUM1QyxZQUFZO0FBQUEsVUFDWixlQUFlc1E7QUFBQSxRQUNqQixDQUFDO0FBQ0QsUUFBQUMsRUFBRSwyQkFBMkIsR0FBR0EsRUFBRSxpQ0FBaUM7QUFDbkUsY0FBTW5RLElBQUksTUFBTSxLQUFLLFdBQVcsWUFBWTtBQUFBLFVBQzFDLFlBQVk7QUFBQSxVQUNaLGVBQWVrUTtBQUFBLFFBQ2pCLENBQUM7QUFDRCxRQUFBQyxFQUFFLDJCQUEyQixHQUFHQSxFQUFFLGdEQUFnRDtBQUNsRixjQUFNLElBQUlFLEdBQUU7QUFBQSxVQUNWLEtBQUs7QUFBQSxVQUNMelE7QUFBQSxVQUNBSTtBQUFBLFVBQ0EsS0FBSyxXQUFXO0FBQUEsUUFDbEI7QUFDQSxhQUFLLFFBQVEsSUFBSSxDQUFDLEdBQUdnUSxHQUFHLEtBQUssV0FBVyxHQUFHLEtBQUssYUFBYSxHQUFHRyxFQUFFLDhCQUE4QixHQUFHLE1BQU1kLEdBQUcsS0FBSyxXQUFXLEdBQUcsS0FBSyxhQUFhLEdBQUcsS0FBSyxjQUFjLElBQUksT0FBT3pQLEVBQUUsa0JBQWtCQSxFQUFFLFFBQVEsR0FBR3VRLEVBQUUsZ0NBQWdDO0FBQUEsTUFDdlAsU0FBU3ZRLEdBQUc7QUFDVixjQUFNSSxJQUFJRixFQUFFRixDQUFDO0FBQ2IsUUFBQXdRLEdBQUcsaUNBQWlDcFEsQ0FBQyxHQUFHLEtBQUssY0FBYyxJQUFJLFlBQVlBLENBQUM7QUFBQSxNQUM5RTtBQUFBLElBQ0YsR0FBRyxLQUFLLGdCQUFnQixDQUFDSixNQUFNO0FBQzdCLFdBQUssZUFBZSxTQUFTQSxHQUFHLEtBQUssc0JBQXNCLE9BQU8sT0FBTyxLQUFLLGtCQUFrQixFQUFFLFFBQVEsQ0FBQ0ksTUFBTTtBQUMvRyxRQUFBQSxNQUFNQSxFQUFFLEtBQUssTUFBTSxTQUFTSjtBQUFBLE1BQzlCLENBQUM7QUFBQSxJQUNILEdBQUcsS0FBSyxjQUFjLENBQUNBLE1BQU07QUFDM0IsV0FBSyxhQUFhLFFBQVEsYUFBYSxLQUFLLGFBQWEsSUFBSUEsQ0FBQztBQUFBLElBQ2hFLEdBQUcsS0FBSyxpQkFBaUIsQ0FBQ0EsTUFBTTtBQUM5QixXQUFLLGFBQWEsUUFBUSxhQUFhLEtBQUssYUFBYSxNQUFNLElBQUksTUFBTUEsQ0FBQyxHQUFHQSxDQUFDO0FBQUEsSUFDaEYsR0FBRyxLQUFLLGdCQUFnQixDQUFDQSxHQUFHSSxJQUFJLENBQUMsTUFBTTtBQUNyQyxVQUFJLENBQUMsS0FBSyxPQUFRLE9BQU0sSUFBSSxNQUFNLDhCQUE4QjtBQUNoRSxZQUFNLElBQUlVLEdBQUcsTUFBTWQsQ0FBQyxHQUFHLElBQUksU0FBUyxjQUFjLFFBQVEsR0FBRyxJQUFJLEtBQUssaUJBQWlCSSxDQUFDO0FBQ3hGLFFBQUUsT0FBTyxHQUFHLENBQUM7QUFDYixZQUFNLElBQUksSUFBSSxJQUFJLFdBQVcsRUFBRSxJQUFJLEtBQUssS0FBSyxPQUFPLE9BQU87QUFDM0QsYUFBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEdBQUcsRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxRQUFRLEVBQUUsTUFBTSxRQUFRLFFBQVEsS0FBSyxlQUFlLEdBQUcsQ0FBQztBQUFBLElBQzNILEdBQUcsS0FBSyxpQkFBaUIsQ0FBQ0osR0FBR0ksTUFBTTtBQUNqQyxZQUFNLElBQUk7QUFBQSxRQUNSLE1BQU1KO0FBQUEsUUFDTixNQUFNSTtBQUFBLFFBQ04sT0FBTyxDQUFDLE1BQU07QUFDWixjQUFJO0FBQ0osa0JBQVEsSUFBSSxTQUFTLGNBQWMsQ0FBQyxNQUFNLE9BQU8sU0FBUyxFQUFFLFlBQVlBLENBQUM7QUFBQSxRQUMzRTtBQUFBLE1BQ0Y7QUFDQSxhQUFPLEtBQUssaUJBQWlCLEVBQUUsTUFBTSxFQUFFLE1BQU0sTUFBTSxFQUFFLEtBQUssQ0FBQyxHQUFHLEtBQUssdUJBQXVCLEtBQUsscUJBQXFCO0FBQUEsUUFDbEgsQ0FBQ1MsRUFBRSxJQUFJLEdBQUc7QUFBQSxRQUNWLENBQUNBLEVBQUUsV0FBVyxHQUFHO0FBQUEsUUFDakIsQ0FBQ0EsRUFBRSxXQUFXLEdBQUc7QUFBQSxRQUNqQixDQUFDQSxFQUFFLFFBQVEsR0FBRztBQUFBLE1BQ2hCLElBQUksS0FBSyxtQkFBbUJiLENBQUMsSUFBSSxHQUFHO0FBQUEsSUFDdEMsR0FBRyxLQUFLLG1CQUFtQixDQUFDQSxNQUFNO0FBQ2hDLFlBQU1JLElBQUksSUFBSSxnQkFBZ0I7QUFDOUIsYUFBT0EsRUFBRSxPQUFPLFdBQVcsS0FBSyxRQUFRLEdBQUdBLEVBQUUsT0FBTyxVQUFVLEtBQUssTUFBTSxHQUFHSixFQUFFLFVBQVVJLEVBQUUsT0FBTyxVQUFVeUQsR0FBRzdELEVBQUUsTUFBTSxDQUFDLEdBQUdJLEVBQUUsT0FBTyxlQUFlLEtBQUssT0FBTyxtQkFBbUIsR0FBR0E7QUFBQSxJQUN0TCxHQUFHLEtBQUssbUJBQW1CLENBQUNKLE1BQU07QUFDaEMsTUFBQWtRLEdBQUdsUSxFQUFFLElBQUksRUFBRSxLQUFLLENBQUNJLE1BQU07QUFDckIsYUFBSyxrQkFBa0IsY0FBY0osRUFBRSxNQUFNSSxDQUFDLEdBQUcsS0FBSyxXQUFXLFFBQVEsYUFBYSxLQUFLLFdBQVcsSUFBSUEsQ0FBQztBQUFBLE1BQzdHLENBQUMsRUFBRSxNQUFNLENBQUNBLE1BQU1vUSxHQUFHLHlDQUF5Q3BRLENBQUMsQ0FBQztBQUFBLElBQ2hFLEdBQUcsS0FBSyxhQUFhLE1BQU0sU0FBUyxjQUFjLEtBQUssVUFBVSxLQUFLLFNBQVMsTUFBTSxLQUFLLGFBQWEsTUFBTTtBQUMzRyxZQUFNSixJQUFJLEtBQUssUUFBUSxxQkFBcUIsSUFBSTtBQUNoRCxVQUFJLENBQUNBLEdBQUc7QUFDTixRQUFBd1EsR0FBRywrREFBK0Q7QUFDbEU7QUFBQSxNQUNGO0FBQ0EsTUFBQWpJLEVBQUUsU0FBUyxJQUFJO0FBQUEsUUFDYixTQUFTdkk7QUFBQSxRQUNULHVCQUF1QmtLLEdBQUdsSyxFQUFFLHdCQUF3QixhQUFhO0FBQUEsUUFDakUsa0JBQWtCOEQsR0FBRzlELEVBQUUsT0FBTztBQUFBLFFBQzlCLGVBQWUsS0FBSztBQUFBLFFBQ3BCLGNBQWM7QUFBQSxVQUNaLHVCQUF1QixLQUFLLGtCQUFrQixrQkFBa0I7QUFBQSxRQUNsRTtBQUFBLFFBQ0EsWUFBWTtBQUFBO0FBQUEsTUFFZCxDQUFDO0FBQUEsSUFDSCxHQUFHLEtBQUssU0FBUyxLQUFLLFlBQVksS0FBSyxVQUFVLE1BQU07QUFDckQsaUJBQVdBLEtBQUssT0FBTyxPQUFPLEtBQUssc0JBQXNCLENBQUMsQ0FBQztBQUN6RCxRQUFBQSxLQUFLQSxFQUFFLEtBQUssT0FBTztBQUNyQixhQUFPLG9CQUFvQixXQUFXLEtBQUssYUFBYSxjQUFjLEtBQUssS0FBSyxZQUFZLENBQUM7QUFBQSxJQUMvRixHQUFHeVEsR0FBRSxrQkFBa0IsSUFBSSxHQUFHLEtBQUssYUFBYSxVQUFVLEtBQUssb0JBQW9CLGVBQWUsS0FBSyxVQUFVNVEsRUFBRSxXQUFXLDhCQUE4QixLQUFLLFNBQVMsRUFBRSxHQUFHQSxHQUFHLFNBQVMsS0FBSyxRQUFRLEdBQUcsS0FBSyxnQkFBZ0JrUSxHQUFHLFdBQVdsUSxDQUFDLEdBQUcsS0FBSyxxQkFBcUIsTUFBTSxLQUFLLFNBQVMsYUFBYSxPQUFPLE9BQU8sV0FBVyxDQUFDLElBQUksS0FBSyxXQUFXLE9BQU8sU0FBUyxRQUFRLEtBQUssYUFBYUEsRUFBRSxjQUFjLFFBQVEsS0FBSyxpQkFBaUIsRUFBRSxRQUFRLE1BQU0sR0FBRyxLQUFLLG9CQUFvQixJQUFJc1EsR0FBRyxHQUFHLEtBQUssZUFBZSxJQUFJSCxHQUFHLEtBQUssUUFBUSxLQUFLLFNBQVMsS0FBSyxlQUFlO0FBQUEsTUFDampCLGVBQWUsS0FBSztBQUFBLE1BQ3BCLGFBQWEsS0FBSztBQUFBLE1BQ2xCLGdCQUFnQixLQUFLO0FBQUEsSUFDdkIsQ0FBQyxHQUFHLE9BQU8saUJBQWlCLFdBQVcsS0FBSyxhQUFhLGNBQWMsS0FBSyxLQUFLLFlBQVksQ0FBQyxHQUFHLEtBQUssY0FBYztBQUFBLEVBQ3RIO0FBQUEsRUFDQSxJQUFJLHNCQUFzQjtBQUN4QixXQUFPLEtBQUssT0FBTztBQUFBLEVBQ3JCO0FBQ0Y7QUFDQVMsRUFBRSxXQUFXbEksR0FBR2tJLEVBQUUsb0JBQW9CLENBQUM1USxNQUFNO0FBQzNDLE1BQUk0USxFQUFFLFlBQVk7QUFDaEIsVUFBTSxJQUFJLE1BQU0sZ0VBQWdFO0FBQ2xGLFNBQU8sTUFBTTVRO0FBQ2YsR0FBRzRRLEVBQUUsY0FBYyxNQUFNLE9BQU8sT0FBTyxNQUFNQSxFQUFFLHNCQUFzQixDQUFDNVEsR0FBR0csR0FBR0ksR0FBR3FELE9BQU87QUFBQSxFQUNwRixTQUFTLElBQUksSUFBSTVELEVBQUUsV0FBV1IsRUFBRSxFQUFFO0FBQUEsRUFDbEMsU0FBU29FO0FBQUEsRUFDVCxtQkFBbUJ6RCxFQUFFO0FBQUEsRUFDckIsd0JBQXdCQSxFQUFFO0FBQUEsRUFDMUIsa0JBQWtCSTtBQUFBLEVBQ2xCLGtCQUFrQlAsRUFBRSxvQkFBb0IsQ0FBQztBQUMzQztBQUNBLElBQUk2USxLQUFLRDtBQUVULE1BQU1FLEtBQTJCLENBQUNDLE1BQVU7QUFDMUMsUUFBTUMsSUFBbUJyUyxHQUFPb1MsQ0FBSyxHQUMvQkUsSUFBS0QsRUFBaUI7QUFDNUIsU0FBQUMsRUFBRyxTQUFTclMsRUFBUSxNQUFNbVMsRUFBTSxRQUFRLENBQUNBLEVBQU0sTUFBTSxDQUFDLEdBQ3RERSxFQUFHLGNBQWNyUyxFQUFRLE1BQU1tUyxFQUFNLGFBQWEsQ0FBQ0EsRUFBTSxXQUFXLENBQUMsR0FDckVFLEVBQUcsb0JBQW9CclMsRUFBUSxNQUFNbVMsRUFBTSxtQkFBbUIsQ0FBQ0EsRUFBTSxpQkFBaUIsQ0FBQyxHQUN2RkUsRUFBRyxVQUFVclMsRUFBUSxNQUFNbVMsRUFBTSxTQUFTLENBQUNBLEVBQU0sT0FBTyxDQUFDLEdBQ3pERSxFQUFHLFNBQVNyUyxFQUFRLE1BQU1tUyxFQUFNLFFBQVEsQ0FBQ0EsRUFBTSxNQUFNLENBQUMsR0FDdERFLEVBQUcsV0FBV3JTLEVBQVEsTUFBTW1TLEVBQU0sVUFBVSxDQUFDQSxFQUFNLFFBQVEsQ0FBQyxHQUM1REUsRUFBRyxvQkFBb0JyUyxFQUFRLE1BQU1tUyxFQUFNLG1CQUFtQixDQUFDQSxFQUFNLGlCQUFpQixDQUFDLEdBQ3ZGRSxFQUFHLG9CQUFvQnJTLEVBQVEsTUFBTW1TLEVBQU0sbUJBQW1CLENBQUNBLEVBQU0saUJBQWlCLENBQUMsR0FDdkZFLEVBQUcsOEJBQThCclM7QUFBQSxJQUMvQixNQUFNbVMsRUFBTTtBQUFBLElBQ1osQ0FBQ0EsRUFBTSwyQkFBMkI7QUFBQSxFQUNwQyxHQUNBRSxFQUFHLGtCQUFrQnJTLEVBQVEsTUFBTW1TLEVBQU0saUJBQWlCLENBQUNBLEVBQU0sZUFBZSxDQUFDLEdBQ2pGRSxFQUFHLHVCQUF1QnJTLEVBQVEsTUFBTW1TLEVBQU0sc0JBQXNCLENBQUNBLEVBQU0sb0JBQW9CLENBQUMsR0FDekZDLEVBQWlCO0FBQzFCLEdBRU1FLEtBQTRCaFMsRUFBSSxPQUFPO0FBQUEsRUFDM0MsTUFBTUEsRUFBSSxPQUFPO0FBQUEsRUFDakIsS0FBS0EsRUFBSSxNQUFNQSxFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQzNCLEtBQUtBLEVBQUksT0FBTztBQUFBLEVBQ2hCLEtBQUtBLEVBQUksT0FBTztBQUNsQixDQUFDO0FBQ0RBLEVBQUksTUFBTWdTLEVBQXlCO0FBQ25DLE1BQU1DLEtBQWdCalMsRUFBSSxPQUFPO0FBQUEsRUFDL0IsTUFBTUEsRUFBSSxPQUFPO0FBQUEsRUFDakIsU0FBU0EsRUFBSSxPQUFPO0FBQUEsRUFDcEIsTUFBTUEsRUFBSSxNQUFNQSxFQUFJLE9BQU8sQ0FBQztBQUM5QixDQUFDO0FBQ0RBLEVBQUksTUFBTWlTLEVBQWE7QUFDdkIsTUFBTUMsS0FBbUIsQ0FBQ0MsR0FBYzdHLEdBQUk4RyxNQUNuQyxJQUFJQyxNQUFTO0FBQ2xCLE1BQUk7QUFDRixXQUFPL0csRUFBRyxHQUFHK0csQ0FBSTtBQUFBLEVBQ25CLFNBQVNDLEdBQU87QUFDZCxJQUFBRixFQUFZLGtDQUFrQ0QsQ0FBWSxNQUFNRyxDQUFLO0FBQ3JFO0FBQUEsRUFDRjtBQUNGLEdBR0lDLElBQWlCdlMsRUFBSSxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksR0FBRyxFQUFFLFNBQVMsa0JBQWtCLENBQUMsR0FDMUV3UyxJQUFpQnhTLEVBQUksT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEdBQzlDeVMsS0FBa0IsQ0FBQ0MsTUFBVTFTLEVBQUksU0FBUzBTLEVBQU0sU0FBUyxDQUFDO0FBQ2hFLElBQUlDLEtBQTZCLGtCQUFDQyxPQUNoQ0EsRUFBVyxhQUFnQixhQUMzQkEsRUFBVyxZQUFlLFlBQzFCQSxFQUFXLFFBQVcsU0FDdEJBLEVBQVcsV0FBYyxXQUN6QkEsRUFBVyxPQUFVLFFBQ3JCQSxFQUFXLFFBQVcsU0FDdEJBLEVBQVcsVUFBYSxXQUN4QkEsRUFBVyxVQUFhLFdBQ3hCQSxFQUFXLFFBQVcsU0FDdEJBLEVBQVcsaUJBQW9CLGlCQUN4QkEsSUFDTkQsTUFBYSxDQUFDLENBQUM7QUFDbEIsTUFBTUUsS0FBZ0I3UyxFQUFJLFdBQVcyUyxFQUFTO0FBQzlDLElBQUlHLEtBQW9DLGtCQUFDQyxPQUN2Q0EsRUFBa0IsY0FBaUIsY0FDbkNBLEVBQWtCLGNBQWlCLGNBQ25DQSxFQUFrQixXQUFjLFdBQ3pCQSxJQUNORCxNQUFvQixDQUFDLENBQUM7QUFDekIsTUFBTUUsS0FBdUJoVCxFQUFJLFdBQVc4UyxFQUFnQixHQUN0REcsS0FBZ0JqVCxFQUFJLE1BQU0sQ0FBQzZTLElBQWVHLEVBQW9CLENBQUM7QUFDckUsSUFBSUUsSUFBbUMsa0JBQUNDLE9BQ3RDQSxFQUFpQixPQUFVLFFBQzNCQSxFQUFpQixjQUFpQixlQUNsQ0EsRUFBaUIsY0FBaUIsZUFDbENBLEVBQWlCLFdBQWMsWUFDeEJBLElBQ05ELEtBQW1CLENBQUMsQ0FBQztBQUN4QmxULEVBQUksV0FBV2tULENBQWU7QUFDOUIsTUFBTUUsS0FBMEJwVCxFQUFJLE9BQU87QUFBQSxFQUN6QyxVQUFVQSxFQUFJLE9BQU87QUFBQSxFQUNyQixnQkFBZ0J5UyxHQUFnQnpTLEVBQUksT0FBTyxDQUFDO0FBQUEsRUFDNUMsVUFBVXlTLEdBQWdCelMsRUFBSSxPQUFPQSxFQUFJLE9BQU8sR0FBR0EsRUFBSSxJQUFJLENBQUMsQ0FBQztBQUMvRCxDQUFDLEdBQ0txVCxLQUF1QnJULEVBQUksT0FBTztBQUFBLEVBQ3RDLElBQUlBLEVBQUksT0FBTztBQUNqQixDQUFDO0FBQ0RBLEVBQUksT0FBTztBQUFBLEVBQ1QsWUFBWXdTO0FBQUEsRUFDWixRQUFRQTtBQUFBLEVBQ1IsS0FBS0E7QUFDUCxDQUFDO0FBQ0R4UyxFQUFJLE9BQU87QUFBQSxFQUNULGlCQUFpQndTO0FBQUEsRUFDakIsT0FBT0E7QUFBQSxFQUNQLFlBQVlBO0FBQUEsRUFDWixVQUFVQTtBQUFBLEVBQ1YsWUFBWUE7QUFBQSxFQUNaLFFBQVFBO0FBQUEsRUFDUixTQUFTQTtBQUFBLEVBQ1QsZUFBZUE7QUFBQSxFQUNmLFlBQVlBO0FBQ2QsQ0FBQztBQUNELE1BQU1jLElBQVl0VCxFQUFJLEtBQUs7QUFBQTtBQUFBLEVBRXpCO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQTtBQUFBLEVBRUE7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNGLENBQUMsR0FDS3VULEtBQW1CRCxFQUFVLFFBQVEsQ0FBQyxvQkFBb0Isa0JBQWtCLENBQUMsR0FDN0VFLEtBQXNCeFQsRUFBSSxPQUFPLEVBQUUsTUFBTXVULEdBQWlCLENBQUMsR0FDM0RFLEtBQWlCSCxFQUFVLFFBQVEsQ0FBQyxRQUFRLFNBQVMsUUFBUSxDQUFDLEdBQzlESSxLQUFvQjFULEVBQUksT0FBTztBQUFBLEVBQ25DLE1BQU15VDtBQUFBLEVBQ04sYUFBYVQ7QUFBQSxFQUNiLFFBQVFoVCxFQUFJLE1BQU1BLEVBQUksT0FBTyxDQUFDLEVBQUUsU0FBUztBQUMzQyxDQUFDLEdBQ0syVCxLQUFpQkwsRUFBVSxRQUFRLENBQUMsY0FBYyxrQkFBa0IsZ0JBQWdCLENBQUMsR0FDckZNLEtBQW9CNVQsRUFBSSxPQUFPO0FBQUEsRUFDbkMsTUFBTTJUO0FBQUEsRUFDTixTQUFTcEI7QUFBQSxFQUNULFNBQVN2UyxFQUFJLE9BQU9BLEVBQUksT0FBTyxHQUFHQSxFQUFJLE9BQU8sQ0FBQyxFQUFFLFNBQVM7QUFDM0QsQ0FBQyxHQUNLNlQsS0FBMkJQLEVBQVUsUUFBUSxDQUFDLGtCQUFrQixDQUFDLEdBQ2pFUSxLQUE4QjlULEVBQUksT0FBTztBQUFBLEVBQzdDLE1BQU02VDtBQUFBLEVBQ04sYUFBYVo7QUFBQSxFQUNiLFFBQVFqVCxFQUFJLE1BQU1BLEVBQUksT0FBTyxDQUFDO0FBQ2hDLENBQUMsR0FDSytULEtBQXFCL1QsRUFBSSxPQUFPO0FBQUEsRUFDcEMsTUFBTUEsRUFBSSxRQUFRc1QsRUFBVSxLQUFLLE1BQU07QUFBQSxFQUN2QyxRQUFRZjtBQUNWLENBQUMsR0FDS3lCLEtBQXFCaFUsRUFBSSxPQUFPO0FBQUEsRUFDcEMsTUFBTUEsRUFBSSxRQUFRc1QsRUFBVSxLQUFLLE1BQU07QUFBQSxFQUN2QyxXQUFXZjtBQUFBLEVBQ1gsa0JBQWtCdlMsRUFBSSxPQUFPO0FBQUEsRUFDN0IsVUFBVXdTO0FBQUEsRUFDVix3QkFBd0J4UyxFQUFJLE1BQU1vVCxFQUF1QjtBQUMzRCxDQUFDLEdBQ0thLEtBQWlDalUsRUFBSSxPQUFPO0FBQUEsRUFDaEQsTUFBTUEsRUFBSSxRQUFRc1QsRUFBVSxLQUFLLG9CQUFvQjtBQUFBLEVBQ3JELG9CQUFvQnRULEVBQUksT0FBT0EsRUFBSSxPQUFPLEdBQUdBLEVBQUksSUFBSSxDQUFDO0FBQUEsRUFDdEQscUJBQXFCQSxFQUFJLElBQUksRUFBRSxTQUFTO0FBQUEsRUFDeEMsaUJBQWlCQSxFQUFJLFNBQVNBLEVBQUksT0FBT0EsRUFBSSxPQUFPLEdBQUdBLEVBQUksSUFBSSxDQUFDLENBQUM7QUFDbkUsQ0FBQyxHQUNLa1UsS0FBbUNsVSxFQUFJLE9BQU87QUFBQSxFQUNsRCxNQUFNQSxFQUFJLFFBQVFzVCxFQUFVLEtBQUssNEJBQTRCO0FBQUEsRUFDN0QsaUJBQWlCdFQsRUFBSSxPQUFPO0FBQzlCLENBQUMsR0FDS21VLEtBQXFCblUsRUFBSSxPQUFPO0FBQUEsRUFDbkMsV0FBK0J1UztBQUFBLEVBQy9CLFVBQTZCQTtBQUFBLEVBQzdCLE9BQXNCQTtBQUFBLEVBQ3RCLFNBQTJCQTtBQUFBLEVBQzNCLFNBQTBCQTtBQUFBLEVBQzFCLGVBQXVDQztBQUMxQyxDQUFDLEdBQ0s0QixLQUFlcFUsRUFBSSxPQUFPO0FBQUEsRUFDN0IsT0FBc0J1UztBQUFBLEVBQ3RCLFNBQTJCQTtBQUFBLEVBQzNCLFNBQTBCQTtBQUFBLEVBQzFCLGVBQXVDQztBQUMxQyxDQUFDLEdBQ0s2QixLQUFrQmYsRUFBVSxRQUFRLENBQUMsWUFBWSxZQUFZLG9CQUFvQixDQUFDLEdBQ2xGZ0IsS0FBcUJ0VSxFQUFJLE9BQU87QUFBQSxFQUNwQyxNQUFNcVU7QUFBQSxFQUNOLFdBQVc5QjtBQUFBLEVBQ1gsdUJBQXVCYTtBQUFBLEVBQ3ZCLHFCQUFxQnBULEVBQUksSUFBSSxFQUFFLFNBQVM7QUFBQSxFQUN4QyxzQkFBc0JBLEVBQUksUUFBUSxFQUFFLFNBQVM7QUFBQSxFQUM3QyxnQkFBZ0J3UztBQUNsQixDQUFDLEVBQUUsT0FBTzJCLEdBQW1CLEtBQUssR0FDNUJJLEtBQThCdlUsRUFBSSxPQUFPO0FBQUEsRUFDN0MsTUFBTUEsRUFBSSxRQUFRc1QsRUFBVSxLQUFLLGdCQUFnQjtBQUFBLEVBQ2pELG9CQUFvQnRULEVBQUksUUFBUTtBQUNsQyxDQUFDLEdBQ0t3VSxLQUE4QnhVLEVBQUksT0FBTztBQUFBLEVBQzdDLE1BQU1BLEVBQUksUUFBUXNULEVBQVUsS0FBSyxnQkFBZ0I7QUFBQSxFQUNqRCxhQUFhdFQsRUFBSSxNQUFNQSxFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQ25DLGlCQUFpQkEsRUFBSSxNQUFNQSxFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQ3ZDLFlBQVlBLEVBQUksT0FBTztBQUN6QixDQUFDLEdBQ0t5VSxLQUFlelUsRUFBSSxtQkFBbUIsUUFBUTtBQUFBLEVBQ2xEd1Q7QUFBQSxFQUNBRTtBQUFBLEVBQ0FFO0FBQUEsRUFDQUU7QUFBQSxFQUNBQztBQUFBLEVBQ0FDO0FBQUEsRUFDQU07QUFBQSxFQUNBQztBQUFBLEVBQ0FDO0FBQUEsRUFDQVA7QUFBQSxFQUNBQztBQUNGLENBQUM7QUFDRGxVLEVBQUksT0FBTztBQUFBLEVBQ1QsU0FBU3lVO0FBQUEsRUFDVCxPQUFPbEM7QUFBQSxFQUNQLFFBQVFBO0FBQUEsRUFDUixXQUFXQTtBQUNiLENBQUM7QUFDRHZTLEVBQUksT0FBTztBQUFBLEVBQ1QsWUFBWUEsRUFBSSxPQUFPO0FBQUEsRUFDdkIsVUFBVXVTO0FBQ1osQ0FBQztBQUNEdlMsRUFBSSxLQUFLLENBQUMsYUFBYSxZQUFZLENBQUM7QUFDcENBLEVBQUksT0FBTztBQUFBLEVBQ1QsY0FBY0EsRUFBSSxPQUFPO0FBQUEsRUFDekIsZ0JBQWdCQSxFQUFJLE9BQU8sRUFBRSxTQUFTO0FBQ3hDLENBQUM7QUFDREEsRUFBSSxPQUFPO0FBQUEsRUFDVCxjQUFjQSxFQUFJLE9BQU87QUFBQSxFQUN6QixtQkFBbUJ5UyxHQUFnQnpTLEVBQUksT0FBTyxDQUFDO0FBQ2pELENBQUM7QUFDREEsRUFBSSxPQUFPO0FBQUEsRUFDVCxpQkFBaUJBLEVBQUksTUFBTXFULEVBQW9CO0FBQ2pELENBQUM7QUFDRCxNQUFNcUIsS0FBdUIxVSxFQUFJLE9BQU87QUFBQSxFQUN0QyxhQUFhQSxFQUFJLE9BQU87QUFBQSxFQUN4QixRQUFRQSxFQUFJLE1BQU1BLEVBQUksT0FBTyxDQUFDO0FBQ2hDLENBQUM7QUFDREEsRUFBSSxPQUFPO0FBQUEsRUFDVCxZQUFZQSxFQUFJLE9BQU87QUFDekIsQ0FBQztBQUNELE1BQU0yVSxLQUE0QjNVLEVBQUksT0FBTztBQUFBLEVBQzNDLFNBQVNBLEVBQUksUUFBUSxFQUFLO0FBQUEsRUFDMUIsWUFBWUEsRUFBSSxRQUFRLGtCQUFrQjtBQUFBLEVBQzFDLFFBQVFBLEVBQUksTUFBTTBVLEVBQW9CO0FBQ3hDLENBQUM7QUFDRDFVLEVBQUksbUJBQW1CLFdBQVc7QUFBQSxFQUNoQ0EsRUFBSSxPQUFPLEVBQUUsU0FBU0EsRUFBSSxRQUFRLEVBQUksRUFBRSxDQUFDO0FBQUEsRUFDekMyVTtBQUNGLENBQUM7QUFDRDNVLEVBQUksT0FBTztBQUFBLEVBQ1QsWUFBWUEsRUFBSSxPQUFPO0FBQUEsRUFDdkIseUJBQXlCb1Q7QUFBQSxFQUN6QixxQkFBcUJlO0FBQUEsRUFDckIsMkJBQTJCblUsRUFBSSxRQUFRLEVBQUUsU0FBUztBQUFBLEVBQ2xELG1CQUFtQnlTLEdBQWdCelMsRUFBSSxPQUFPLENBQUM7QUFDakQsQ0FBQztBQUNEQSxFQUFJLE9BQU87QUFBQSxFQUNULFlBQVlBLEVBQUksT0FBTztBQUFBLEVBQ3ZCLHlCQUF5Qm9UO0FBQUEsRUFDekIscUJBQXFCZTtBQUN2QixDQUFDO0FBQ0RuVSxFQUFJLE9BQU87QUFBQSxFQUNULFFBQVFBLEVBQUksS0FBSztBQUFBLElBQUM7QUFBQSxJQUF5QjtBQUFBLElBQXlCO0FBQUE7QUFBQSxFQUEyQixDQUFDO0FBQ2xHLENBQUM7QUFDREEsRUFBSSxPQUFPO0FBQUEsRUFDVCxNQUFNQSxFQUFJLE9BQU87QUFBQSxFQUNqQixjQUFjQSxFQUFJLE9BQU87QUFBQSxFQUN6QixtQkFBbUJBLEVBQUksT0FBTztBQUFBLEVBQzlCLFlBQVlBLEVBQUksT0FBTztBQUN6QixDQUFDO0FBRURBLEVBQUksT0FBTztBQUFBLEVBQ1QsV0FBV0EsRUFBSSxPQUFPO0FBQUEsRUFDdEIsZUFBZUEsRUFBSSxPQUFPO0FBQUEsRUFDMUIsY0FBY0EsRUFBSSxPQUFPO0FBQzNCLENBQUM7QUFDREEsRUFBSSxPQUFPO0FBQUEsRUFDVCxNQUFNQSxFQUFJLE9BQU87QUFBQSxFQUNqQixlQUFlQSxFQUFJLE9BQU87QUFBQSxFQUMxQixXQUFXQSxFQUFJLE9BQU87QUFDeEIsQ0FBQztBQUVELE1BQU00VSxLQUE2QixDQUFDQyxNQUNULEtBQUssVUFBVUEsQ0FBTSxHQUkxQ0MsSUFBZ0IsQ0FBQ3BDLE1BQVUxUyxFQUFJLFNBQVMwUyxFQUFNLFNBQVMsQ0FBQztBQUM5RDFTLEVBQUksT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEdBQUcsRUFBRSxTQUFTLGtCQUFrQixDQUFDO0FBQ3pEQSxFQUFJLE9BQU87QUFBQSxFQUNULG1CQUFtQkEsRUFBSSxRQUFRLE9BQU87QUFBQSxFQUN0QyxTQUFTQSxFQUFJLE9BQU87QUFBQSxFQUNwQixTQUFTQSxFQUFJLE9BQU9BLEVBQUksT0FBTyxHQUFHQSxFQUFJLE9BQU8sQ0FBQyxFQUFFLFNBQVM7QUFDM0QsQ0FBQztBQUNEQSxFQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssQ0FBQztBQUN2QixNQUFNK1UsS0FBZ0IvVSxFQUFJLE9BQU87QUFBQSxFQUMvQixNQUFNQSxFQUFJLE9BQU87QUFBQSxFQUNqQixpQkFBaUI4VSxFQUFjOVUsRUFBSSxPQUFPLENBQUM7QUFBQSxFQUMzQyxhQUFhOFUsRUFBYzlVLEVBQUksT0FBTyxDQUFDO0FBQUEsRUFDdkMsVUFBVThVLEVBQWM5VSxFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQ3BDLFVBQVVBLEVBQUksT0FBTztBQUFBLEVBQ3JCLG9CQUFvQjhVLEVBQWM5VSxFQUFJLE9BQU8sQ0FBQztBQUNoRCxDQUFDLEdBQ0tnVixLQUFXaFYsRUFBSSxPQUFPO0FBQUEsRUFDMUIsc0JBQXNCQSxFQUFJLE9BQU8sRUFBRSxJQUFJO0FBQUEsRUFDdkMsbUJBQW1CQSxFQUFJLE9BQU8sRUFBRSxJQUFJO0FBQUEsRUFDcEMsVUFBVUEsRUFBSSxPQUFPO0FBQUEsRUFDckIsYUFBYThVLEVBQWM5VSxFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQ3ZDLFVBQVVBLEVBQUksT0FBTztBQUFBLEVBQ3JCLGtCQUFrQjhVLEVBQWM5VSxFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQzVDLHdCQUF3QjhVLEVBQWM5VSxFQUFJLE9BQU8sRUFBRSxJQUFJLENBQUM7QUFBQSxFQUN4RCxVQUFVQSxFQUFJLE9BQU8sRUFBRSxJQUFJO0FBQzdCLENBQUMsR0FDS2lWLEtBQWdCalYsRUFBSSxPQUFPQSxFQUFJLE9BQU8sR0FBR0EsRUFBSSxJQUFJLENBQUMsR0FDbERrVixLQUFRbFYsRUFBSSxPQUFPO0FBQUEsRUFDdkIsTUFBTUEsRUFBSSxPQUFPO0FBQUEsRUFDakIsVUFBVThVLEVBQWNHLEVBQWE7QUFDdkMsQ0FBQyxHQUNLRSxLQUF3Qm5WLEVBQUksT0FBTztBQUFBLEVBQ3ZDLFVBQVVBLEVBQUksT0FBTztBQUFBLEVBQ3JCLGdCQUFnQjhVLEVBQWM5VSxFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQzFDLFVBQVU4VSxFQUFjOVUsRUFBSSxPQUFPQSxFQUFJLE9BQU8sR0FBR0EsRUFBSSxJQUFJLENBQUMsQ0FBQztBQUM3RCxDQUFDLEdBQ0tvVixLQUEwQnBWLEVBQUksT0FBTztBQUFBLEVBQ3pDLFVBQVVBLEVBQUksT0FBTztBQUN2QixDQUFDLEdBQ0txVixLQUFzQnJWLEVBQUksT0FBTztBQUFBLEVBQ3JDLElBQUk4VSxFQUFjOVUsRUFBSSxPQUFPLENBQUM7QUFBQSxFQUM5QixrQkFBa0I4VSxFQUFjOVUsRUFBSSxPQUFPLENBQUM7QUFBQSxFQUM1Qyx3QkFBd0I4VSxFQUFjOVUsRUFBSSxPQUFPLEVBQUUsSUFBSSxDQUFDO0FBQUEsRUFDeEQsb0JBQW9CQSxFQUFJLE1BQU1vVixFQUF1QjtBQUFBLEVBQ3JELGFBQWFOLEVBQWM5VSxFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQ3ZDLFdBQVc4VSxFQUFjOVUsRUFBSSxPQUFPLENBQUM7QUFDdkMsQ0FBQyxHQUNLc1YsS0FBb0N0VixFQUFJLE9BQU87QUFBQSxFQUNuRCxhQUFhQSxFQUFJLE9BQU87QUFDMUIsQ0FBQyxHQUNLdVYsS0FBeUJ2VixFQUFJLE9BQU87QUFBQSxFQUN4QyxhQUFhQSxFQUFJLE9BQU87QUFBQSxFQUN4QiwwQ0FBMENBLEVBQUksT0FBTztBQUFBLEVBQ3JELFVBQVVBLEVBQUksT0FBTztBQUFBLEVBQ3JCLHVCQUF1QkEsRUFBSSxNQUFNc1YsRUFBaUM7QUFBQSxFQUNsRSxzQkFBc0J0VixFQUFJLE9BQU87QUFDbkMsQ0FBQyxHQUNLd1YsS0FBa0J4VixFQUFJLE9BQU87QUFBQSxFQUNqQyxRQUFRK1U7QUFDVixDQUFDLEdBQ0tVLEtBQWlCelYsRUFBSSxPQUFPO0FBQUEsRUFDaEMsVUFBVUEsRUFBSSxPQUFPO0FBQUEsRUFDckIsV0FBV0EsRUFBSSxNQUFNd1YsRUFBZTtBQUFBLEVBQ3BDLG9CQUFvQlYsRUFBYzlVLEVBQUksT0FBTyxDQUFDO0FBQUEsRUFDOUMsT0FBT0EsRUFBSSxNQUFNdVYsRUFBc0I7QUFBQSxFQUN2Qyx1QkFBdUJ2VixFQUFJLE9BQU87QUFBQSxFQUNsQyxpQkFBaUJBLEVBQUksT0FBTztBQUFBLEVBQzVCLG1CQUFtQkEsRUFBSSxPQUFPO0FBQUEsRUFDOUIsNkJBQTZCQSxFQUFJLE1BQU1zVixFQUFpQztBQUMxRSxDQUFDLEdBQ0tJLEtBQW9DMVYsRUFBSSxPQUFPO0FBQUEsRUFDbkQsU0FBU0EsRUFBSSxNQUFNcVYsRUFBbUI7QUFBQSxFQUN0QyxVQUFVclYsRUFBSSxNQUFNeVYsRUFBYztBQUNwQyxDQUFDLEdBQ0tFLEtBQTBCM1YsRUFBSSxPQUFPO0FBQUEsRUFDekMsU0FBUzBWO0FBQUEsRUFDVCxvQkFBb0JaLEVBQWNZLEVBQWlDO0FBQUEsRUFDbkUsU0FBUzFWLEVBQUksTUFBTStVLEVBQWE7QUFDbEMsQ0FBQyxHQUNLYSxLQUE0QjVWLEVBQUksT0FBTztBQUFBLEVBQzNDLFFBQVFBLEVBQUksUUFBUSxNQUFNO0FBQUEsRUFDMUIsT0FBT0EsRUFBSSxPQUFPO0FBQUEsRUFDbEIsT0FBTzhVLEVBQWM5VSxFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQ2pDLFlBQVlBLEVBQUksTUFBTWdWLEVBQVE7QUFBQSxFQUM5QixzQkFBc0JoVixFQUFJLE9BQU8sRUFBRSxJQUFJO0FBQUEsRUFDdkMsbUJBQW1CQSxFQUFJLE9BQU8sRUFBRSxJQUFJO0FBQUEsRUFDcEMsT0FBT2tWO0FBQUEsRUFDUCxjQUFjSixFQUFjYSxFQUF1QjtBQUFBO0FBQUEsRUFFbkQsbUJBQW1CM1YsRUFBSSxNQUFNbVYsRUFBcUI7QUFDcEQsQ0FBQyxHQUNLVSxLQUFxQjdWLEVBQUksbUJBQW1CLFFBQVE7QUFBQSxFQUN4REEsRUFBSSxPQUFPO0FBQUEsSUFDVCxNQUFNQSxFQUFJLFFBQVEsT0FBTztBQUFBLElBQ3pCLFVBQVVBLEVBQUksU0FBU0EsRUFBSSxVQUFVLENBQUM7QUFBQSxFQUN4QyxDQUFDLEVBQUUsT0FBTzRWLEdBQTBCLEtBQUs7QUFBQSxFQUN6QzVWLEVBQUksT0FBTztBQUFBLElBQ1QsTUFBTUEsRUFBSSxLQUFLLENBQUMsV0FBVyxjQUFjLENBQUM7QUFBQSxJQUMxQyxVQUFVQSxFQUFJLE9BQU87QUFBQSxFQUN2QixDQUFDLEVBQUUsT0FBTzRWLEdBQTBCLEtBQUs7QUFDM0MsQ0FBQyxHQUNLRSxLQUF1QjlWLEVBQUksT0FBTztBQUFBLEVBQ3RDLFFBQVFBLEVBQUksUUFBUSxVQUFVO0FBQ2hDLENBQUMsR0FDSytWLEtBQXFCL1YsRUFBSSxPQUFPO0FBQUEsRUFDcEMsUUFBUUEsRUFBSSxRQUFRLFNBQVM7QUFDL0IsQ0FBQztBQUNEQSxFQUFJLE1BQU0sQ0FBQzZWLElBQW9CQyxJQUFzQkMsRUFBa0IsQ0FBQztBQUN4RS9WLEVBQUksT0FBTztBQUFBLEVBQ1QsTUFBTUEsRUFBSSxPQUFPO0FBQUEsRUFDakIsTUFBTUEsRUFBSSxPQUFPO0FBQUEsRUFDakIsZUFBZUEsRUFBSSxPQUFPO0FBQUEsRUFDMUIsaUJBQWlCQSxFQUFJLE9BQU87QUFDOUIsQ0FBQztBQUNEQSxFQUFJLE9BQU87QUFBQSxFQUNULGNBQWNBLEVBQUksTUFBTUEsRUFBSSxPQUFPLENBQUM7QUFBQSxFQUNwQyxrQkFBa0JBLEVBQUksTUFBTUEsRUFBSSxPQUFPLENBQUM7QUFBQSxFQUN4QyxhQUFhQSxFQUFJLE9BQU87QUFDMUIsQ0FBQztBQUNEQSxFQUFJLE9BQU87QUFBQSxFQUNULGNBQWNBLEVBQUksT0FBTztBQUFBLEVBQ3pCLGVBQWVBLEVBQUksSUFBSTtBQUFBO0FBQUEsRUFFdkIsZ0JBQWdCQSxFQUFJLE9BQU87QUFBQSxFQUMzQixtQkFBbUJBLEVBQUksT0FBTztBQUFBLEVBQzlCLGtCQUFrQkEsRUFBSSxPQUFPO0FBQUEsRUFDN0IsWUFBWUEsRUFBSSxNQUFNZ1YsRUFBUTtBQUFBLEVBQzlCLG1CQUFtQmhWLEVBQUksT0FBTyxFQUFFLElBQUk7QUFBQSxFQUNwQyxlQUFlQSxFQUFJLFFBQVE7QUFBQSxFQUMzQix5QkFBeUJtVjtBQUFBLEVBQ3pCLGdCQUFnQm5WLEVBQUksT0FBTyxFQUFFLFNBQVM7QUFBQSxFQUN0QywyQkFBMkJBLEVBQUksUUFBUSxFQUFFLFNBQVM7QUFDcEQsQ0FBQztBQUNEQSxFQUFJLE9BQU87QUFBQSxFQUNULG1CQUFtQkEsRUFBSSxPQUFPO0FBQ2hDLENBQUM7QUFDREEsRUFBSSxPQUFPO0FBQUEsRUFDVCxJQUFJQSxFQUFJLE9BQU87QUFBQSxFQUNmLFlBQVlBLEVBQUksT0FBTztBQUN6QixDQUFDO0FBQ0QsTUFBTWdXLEtBQTBCaFcsRUFBSSxPQUFPO0FBQUEsRUFDekMsTUFBTUEsRUFBSSxPQUFPO0FBQUEsRUFDakIsS0FBS0EsRUFBSSxNQUFNQSxFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQzNCLEtBQUtBLEVBQUksT0FBTztBQUFBLEVBQ2hCLEtBQUtBLEVBQUksT0FBTztBQUNsQixDQUFDO0FBQ0RBLEVBQUksTUFBTWdXLEVBQXVCO0FBQ2pDaFcsRUFBSSxPQUFPO0FBQUEsRUFDVCxvQkFBb0JBLEVBQUksT0FBTyxFQUFFLFNBQVM7QUFBQSxFQUMxQyxzQkFBc0JBLEVBQUksT0FBT0EsRUFBSSxPQUFPLEdBQUdBLEVBQUksSUFBSSxDQUFDLEVBQUUsU0FBUztBQUFBLEVBQ25FLGtCQUFrQkEsRUFBSSxPQUFPO0FBQUEsRUFDN0IseUJBQXlCbVY7QUFBQSxFQUN6QixtQkFBbUJuVixFQUFJLE9BQU8sRUFBRSxTQUFTO0FBQUEsRUFDekMsc0JBQXNCQSxFQUFJLE9BQU8sRUFBRSxTQUFTO0FBQzlDLENBQUM7QUFDREEsRUFBSSxPQUFPO0FBQUEsRUFDVCx1QkFBdUJBLEVBQUksTUFBTUEsRUFBSSxPQUFPQSxFQUFJLE9BQU8sR0FBR0EsRUFBSSxJQUFJLENBQUMsQ0FBQztBQUN0RSxDQUFDO0FBQ0RBLEVBQUksT0FBTztBQUFBLEVBQ1QsUUFBUW9VO0FBQUEsRUFDUix1QkFBdUJlO0FBQ3pCLENBQUM7QUFDRG5WLEVBQUksT0FBTztBQUFBLEVBQ1QsWUFBWUEsRUFBSSxPQUFPO0FBQUEsRUFDdkIscUJBQXFCbVU7QUFBQSxFQUNyQix5QkFBeUJnQjtBQUMzQixDQUFDO0FBQ0RuVixFQUFJLE9BQU87QUFBQSxFQUNULHVCQUF1QkEsRUFBSSxNQUFNQSxFQUFJLE9BQU9BLEVBQUksT0FBTyxHQUFHQSxFQUFJLElBQUksQ0FBQyxDQUFDO0FBQUEsRUFDcEUsVUFBVUEsRUFBSSxPQUFPO0FBQ3ZCLENBQUM7QUFDREEsRUFBSSxPQUFPQSxFQUFJLElBQUksQ0FBQztBQUVwQixTQUFTaVcsR0FBU0MsR0FBUUMsR0FBVztBQUNuQyxNQUFJQyxJQUFpQixPQUFPO0FBQzVCLEVBQUFBLElBQWlCQSxFQUFlRixHQUFRQyxDQUFTLElBQUlELEVBQU8sWUFBWUM7QUFDMUU7QUFDQSxTQUFTRSxHQUFTSCxHQUFRNUssR0FBSTtBQUM1QixFQUFJQSxNQUFPLFdBQ1RBLElBQUs0SyxFQUFPO0FBR2QsTUFBSUksSUFBb0IsTUFBTTtBQUM5QixFQUFBQSxLQUFxQkEsRUFBa0JKLEdBQVE1SyxDQUFFO0FBQ25EO0FBRUEsSUFBSWlMLEtBQVksMkJBQVk7QUFDMUIsTUFBSUMsSUFBaUIsU0FBdUJDLEdBQUd2TSxHQUFHO0FBQ2hELFdBQUFzTSxJQUFpQixPQUFPLGtCQUFrQjtBQUFBLE1BQ3hDLFdBQVcsQ0FBQztBQUFBLElBQ2QsYUFBYSxTQUFTLFNBQVVDLEdBQUd2TSxHQUFHO0FBQ3BDLE1BQUF1TSxFQUFFLFlBQVl2TTtBQUFBLElBQ2hCLEtBQUssU0FBVXVNLEdBQUd2TSxHQUFHO0FBQ25CLGVBQVN3TSxLQUFLeE07QUFDWixRQUFJLE9BQU8sVUFBVSxlQUFlLEtBQUtBLEdBQUd3TSxDQUFDLE1BQUdELEVBQUVDLENBQUMsSUFBSXhNLEVBQUV3TSxDQUFDO0FBQUEsSUFFOUQsR0FFT0YsRUFBZUMsR0FBR3ZNLENBQUM7QUFBQSxFQUM1QjtBQUVBLFNBQU8sU0FBVXVNLEdBQUd2TSxHQUFHO0FBQ3JCLFFBQUksT0FBT0EsS0FBTSxjQUFjQSxNQUFNLEtBQU0sT0FBTSxJQUFJLFVBQVUseUJBQXlCLE9BQU9BLENBQUMsSUFBSSwrQkFBK0I7QUFFbkksSUFBQXNNLEVBQWVDLEdBQUd2TSxDQUFDO0FBRW5CLGFBQVN5TSxJQUFLO0FBQ1osV0FBSyxjQUFjRjtBQUFBLElBQ3JCO0FBRUEsSUFBQUEsRUFBRSxZQUFZdk0sTUFBTSxPQUFPLE9BQU8sT0FBT0EsQ0FBQyxLQUFLeU0sRUFBRyxZQUFZek0sRUFBRSxXQUFXLElBQUl5TSxFQUFHO0FBQUEsRUFDcEY7QUFDRixFQUFFO0FBQUEsQ0FFRCxTQUFVQyxHQUFRO0FBQ2pCLEVBQUFMLEdBQVVNLEdBQWFELENBQU07QUFFN0IsV0FBU0MsRUFBWUMsR0FBU0MsR0FBUztBQUNyQyxRQUFJQyxJQUFhLEtBQUssYUFFbEJDLElBQVFMLEVBQU8sS0FBSyxNQUFNRSxHQUFTQyxDQUFPLEtBQUs7QUFFbkQsa0JBQU8sZUFBZUUsR0FBTyxRQUFRO0FBQUEsTUFDbkMsT0FBT0QsRUFBVztBQUFBLE1BQ2xCLFlBQVk7QUFBQSxNQUNaLGNBQWM7QUFBQSxJQUNoQixDQUFDLEdBQ0RmLEdBQVNnQixHQUFPRCxFQUFXLFNBQVMsR0FDcENYLEdBQVNZLENBQUssR0FDUEE7QUFBQSxFQUNUO0FBRUEsU0FBT0o7QUFDVCxHQUFHLEtBQUs7QUFFUixNQUFNSyxLQUF1QixDQUFDQyxNQUFXO0FBQ3ZDLFFBQU1DLElBQU0sSUFBSS9FLE1BQVM7QUFDdkIsV0FBTyxRQUFXLElBQUksR0FBR25TLEVBQUUsTUFBTSxLQUFLLE1BQU0sQ0FBQyxHQUFHQSxFQUFFLEtBQUssS0FBSyxHQUFHaVgsQ0FBTSxFQUFFLENBQUMsS0FBSyxHQUFHOUUsQ0FBSTtBQUFBLEVBQ3RGLEdBQ01nRixJQUFNLElBQUloRixNQUFTO0FBQ3ZCLFdBQU8sUUFBVyxNQUFNLEdBQUduUyxFQUFFLElBQUksS0FBSyxNQUFNLENBQUMsR0FBR0EsRUFBRSxLQUFLLEtBQUssR0FBR2lYLENBQU0sRUFBRSxDQUFDLEtBQUssR0FBRzlFLENBQUk7QUFBQSxFQUN0RjtBQUNBLFNBQU87QUFBQSxJQUNMLEtBQUErRTtBQUFBLElBQ0EsS0FBQUM7QUFBQSxJQUNBLE9BQU9EO0FBQUEsSUFDUCxPQUFPQztBQUFBLEVBQ1Q7QUFDRjtBQUVBclgsRUFBSSxPQUFPO0FBQUEsRUFDVCxVQUFVQSxFQUFJLFFBQVEsYUFBYTtBQUFBLEVBQ25DLGdCQUFnQkEsRUFBSSxRQUFRLFFBQVE7QUFBQSxFQUNwQyxVQUFVQSxFQUFJLE9BQU87QUFBQSxJQUNuQixXQUFXQSxFQUFJLE9BQU87QUFBQSxFQUN4QixDQUFDO0FBQ0gsQ0FBQztBQUNEQSxFQUFJO0FBQUEsRUFDRkEsRUFBSSxPQUFPO0FBQUEsSUFDVCxvQkFBb0JBLEVBQUksT0FBTztBQUFBLEVBQ2pDLENBQUM7QUFDSCxFQUFFLE9BQU8sQ0FBQztBQUVWQSxFQUFJLE9BQU87QUFBQSxFQUNULFVBQVVBLEVBQUksTUFBTSxDQUFDQSxFQUFJLFFBQVEsV0FBVyxHQUFHQSxFQUFJLFFBQVEsWUFBWSxDQUFDLENBQUM7QUFBQSxFQUN6RSxnQkFBZ0JBLEVBQUksUUFBUSxRQUFRO0FBQUEsRUFDcEMsVUFBVUEsRUFBSSxPQUFPO0FBQUEsSUFDbkIsV0FBV0EsRUFBSSxPQUFPO0FBQUEsRUFDeEIsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNc1gsS0FBYTtBQUFBLEVBQ2pCLFdBQVc7QUFBQSxFQUNYLGFBQWE7QUFBQSxFQUNiLFdBQVcsWUFBWTtBQUNyQixZQUFRO0FBQUEsTUFDTjtBQUFBO0FBQUE7QUFBQSxJQUdGO0FBQUEsRUFDRjtBQUNGLEdBRU0sRUFBRSxPQUFBQyxHQUFNLElBQUlMLEdBQXFCLGdCQUFnQixHQUNqRE0sSUFBYXhYLEVBQUksU0FBUyxFQUFFLFNBQVMsR0FDckN5WCxLQUFtQnpYLEVBQUksT0FBTztBQUFBLEVBQ2xDLFNBQVN3WDtBQUFBLEVBQ1QsUUFBUUE7QUFBQSxFQUNSLFVBQVVBO0FBQUEsRUFDVixRQUFRQTtBQUFBLEVBQ1IsYUFBYUE7QUFBQSxFQUNiLG1CQUFtQkE7QUFBQSxFQUNuQixtQkFBbUJBO0FBQUEsRUFDbkIsbUJBQW1CQTtBQUFBLEVBQ25CLDZCQUE2QkE7QUFBQSxFQUM3QixpQkFBaUJBO0FBQUEsRUFDakIsc0JBQXNCQTtBQUN4QixDQUFDLEdBQ0tFLElBQU4sTUFBTUEsRUFBYztBQUFBLEVBQ2xCLGNBQWM7QUFJWixTQUFLLGVBQWUsQ0FBQ0MsTUFBaUI7QUFDcEMsV0FBSyxhQUFhRCxFQUFjLHFCQUFxQixHQUNyRCxPQUFPLFFBQVFDLENBQVksRUFBRSxRQUFRLENBQUMsQ0FBQ0MsR0FBS0MsQ0FBVyxNQUFNO0FBQzNELGNBQU1DLElBQWU1RixHQUFpQjBGLEdBQUtDLEtBQWVILEVBQWMsTUFBTUgsRUFBSztBQUNuRixhQUFLLFdBQVdLLENBQUcsSUFBSUU7QUFBQSxNQUN6QixDQUFDO0FBQUEsSUFDSCxHQUNBLEtBQUssYUFBYUosRUFBYyxxQkFBcUI7QUFBQSxFQUN2RDtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBd0JBLElBQUksTUFBTTtBQUNSLFdBQU8sRUFBRSxHQUFHLEtBQUssV0FBVztBQUFBLEVBQzlCO0FBQ0Y7QUF6QklBLEVBQUssT0FBTyxNQUFNO0FBQ2xCLEdBR0FBLEVBQUssdUJBQXVCLE1BQU07QUFDaEMsUUFBTWxPLElBQUksQ0FBQztBQUNYLGdCQUFPLEtBQUtpTyxHQUFpQixNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQ0csTUFBUTtBQUMxRCxJQUFBcE8sRUFBRW9PLENBQUcsSUFBSUYsRUFBYztBQUFBLEVBQ3pCLENBQUMsR0FDTWxPO0FBQ1QsR0FHQWtPLEVBQUssYUFBYSxDQUFDSyxNQUFRO0FBQ3pCLFFBQU1DLElBQVcsSUFBSU4sRUFBYztBQUNuQyxTQUFBTSxFQUFTLGFBQWFQLEdBQWlCLE1BQU1NLENBQUcsQ0FBQyxHQUMxQ0M7QUFDVDtBQWhDSixJQUFNQyxLQUFOUDtBQTBDQSxNQUFNUSxLQUFxQixDQUFDQyxNQUFpQztBQUMzRCxRQUFNLENBQUNDLEdBQWlCQyxDQUFrQixJQUFJMVksRUFBUztBQUFBLElBQ3JELFdBQVcyWDtBQUFBLElBQ1gsWUFBWUE7QUFBQSxFQUNkLENBQUMsR0FDS2dCLElBQWdDMVk7QUFBQSxJQUNwQyxDQUFDMlksTUFBcUI7QUFDcEIsTUFBQUYsRUFBbUJFLENBQWdCLEdBQ25DSixLQUFBLFFBQUFBLEVBQStCSTtBQUFBLElBQ2pDO0FBQUEsSUFDQSxDQUFDSixDQUE0QjtBQUFBLEVBQy9CO0FBQ0EsU0FBTyxFQUFFLGlCQUFBQyxHQUFpQiwrQkFBQUUsRUFBOEI7QUFDMUQsR0FFTUUsS0FBYyxlQUNkQyxLQUFlLENBQUM1RyxNQUFVO0FBQzlCLFFBQU0sQ0FBQzZHLEdBQVFDLENBQVMsSUFBSWhaLEVBQVMsR0FDL0IsQ0FBQ2laLEdBQXNCQyxDQUF1QixJQUFJbFosRUFBUyxJQUFJLEdBQy9ELEVBQUUsaUJBQUF5WSxHQUFpQiwrQkFBQUUsRUFBOEIsSUFBSUosR0FBbUJyRyxFQUFNLG9CQUFvQixHQUNsRyxDQUFDaUgsR0FBUUMsQ0FBUyxJQUFJcFosRUFBUyxFQUFLLEdBQ3BDLENBQUNxWixHQUFnQkMsQ0FBaUIsSUFBSXRaLEVBQVMsSUFBSSxHQUNuRHVaLElBQWdCdEgsR0FBeUI7QUFBQSxJQUM3QyxHQUFHQztBQUFBLElBQ0gsc0JBQXNCeUc7QUFBQSxJQUN0QixRQUFRLENBQUNhLEdBQWtCQyxNQUFhO0FBeCtGNUMsVUFBQUM7QUF5K0ZNLE1BQUFOLEVBQVUsRUFBSSxJQUNkTSxJQUFBeEgsRUFBTSxXQUFOLFFBQUF3SCxFQUFBLEtBQUF4SCxHQUFlc0gsR0FBa0JDO0FBQUEsSUFDbkM7QUFBQSxFQUNGLENBQUM7QUFtQkQsTUFsQkF2WixHQUFVLE1BQU07QUFDZCxRQUFJNlksRUFBUTtBQUNaLFVBQU1ZLElBQU8zSCxHQUFHLFlBQVksS0FBSyxJQUFJQSxHQUFHO0FBQUEsTUFDdEMscUJBQXFCRSxFQUFNO0FBQUEsTUFDM0IsWUFBWSxJQUFJMkcsRUFBVztBQUFBLE1BQzNCLFNBQVMzRyxFQUFNO0FBQUEsTUFDZixrQkFBa0JBLEVBQU07QUFBQSxNQUN4QixHQUFHcUg7QUFBQSxJQUNMLENBQUM7QUFDRCxJQUFBUCxFQUFVVyxDQUFJO0FBQ2QsVUFBTUMsSUFBUUMsR0FBd0JGLENBQUk7QUFDMUMsSUFBQVQsRUFBd0JVLENBQUssR0FDN0JELEVBQUssVUFBVSxXQUFXLFVBQVUsVUFBVSxDQUFDRyxNQUFXO0FBQ3hELE1BQUlBLEVBQU8sYUFBYUEsRUFBTyxZQUFZLGVBQ3pDUixFQUFrQlEsRUFBTyxZQUFZLFVBQVU7QUFBQSxJQUVuRCxDQUFDO0FBQUEsRUFDSCxHQUFHLENBQUMsQ0FBQyxHQUNELENBQUNmO0FBQ0gsV0FBdUIsZ0JBQUE1WSxFQUFJQyxJQUFVLENBQUMsQ0FBQztBQUV6QyxRQUFNMlosSUFBZ0I7QUFBQSxJQUNwQixRQUFRaEIsRUFBTztBQUFBLElBQ2YsVUFBVU4sRUFBZ0I7QUFBQSxJQUMxQixXQUFXQSxFQUFnQjtBQUFBLElBQzNCLFFBQUFVO0FBQUE7QUFBQSxJQUVBLFNBQVM7QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFdBQVc7QUFBQSxNQUNYLE9BQU87QUFBQSxJQUNUO0FBQUEsSUFDQSxZQUFZRTtBQUFBLEVBQ2Q7QUFDQSxTQUF1QixnQkFBQWxaLEVBQUlDLElBQVUsRUFBRSxVQUFVNlksSUFBdUMsZ0JBQUE5WSxFQUFJSyxHQUFnQixVQUFVLEVBQUUsT0FBT3lZLEdBQXNCLFVBQTBCLGdCQUFBOVksRUFBSSxPQUFPLEVBQUUsSUFBSTBZLElBQWEsV0FBVzNHLEVBQU0sV0FBVyxVQUFVQSxFQUFNLFNBQVM2SCxDQUFhLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBb0IsZ0JBQUE1WixFQUFJQyxJQUFVLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOVQsR0FDTXlaLEtBQTBCLENBQUNkLE9BQ3hCO0FBQUEsRUFDTCxRQUFRQSxFQUFPO0FBQUEsRUFDZixZQUFZQSxFQUFPLGVBQWU7QUFBQSxFQUNsQyxVQUFVQSxFQUFPO0FBQUEsRUFDakIscUJBQXFCQSxFQUFPO0FBQUEsRUFDNUIsZ0JBQWdCQSxFQUFPO0FBQUEsRUFDdkIsU0FBU0EsRUFBTztBQUNsQixJQUdJaUIsS0FBZSxDQUFDOUgsTUFBVTtBQUM5QixRQUFNLEVBQUUsYUFBQStILEdBQWEsUUFBQS9FLEVBQU8sSUFBSWhELEdBQzFCLEVBQUUsUUFBQWdJLEdBQVEsVUFBQUMsR0FBVSxZQUFBQyxHQUFZLHFCQUFBQyxHQUFxQixnQkFBQUMsR0FBZ0IsU0FBQUMsRUFBUSxJQUFJOVosR0FBbUIsR0FDcEcrWixJQUFVUCxFQUFZLFlBQVksR0FDbEMsQ0FBQ1EsR0FBV0MsQ0FBWSxJQUFJMWEsRUFBUyxFQUFLLEdBQzFDMmEsSUFBWTdhLEdBQU8sSUFBSSxHQUN2QjhhLElBQWU3YSxFQUFRLE1BQ3RCbVYsSUFDRUQsR0FBMkJDLENBQU0sSUFEcEIsSUFFbkIsQ0FBQ0EsQ0FBTSxDQUFDLEdBQ0wyRixJQUFhOWEsRUFBUSxPQUNsQjtBQUFBLElBQ0wsUUFBUTtBQUFBLElBQ1IsT0FBTztBQUFBLElBQ1AsUUFBUXFhO0FBQUEsRUFDVixJQUNDLENBQUNBLENBQVUsQ0FBQyxHQUNUVSxJQUFjL2EsRUFBUSxNQUFNO0FBQ2hDLFFBQUksQ0FBQ3NhLEtBQXVCLENBQUNGLEVBQVUsUUFBTztBQUM5QyxVQUFNWSxJQUFTLElBQUksZ0JBQWdCO0FBQ25DLFdBQUFBLEVBQU8sT0FBTyxXQUFXWixDQUFRLEdBQ2pDWSxFQUFPLE9BQU8sVUFBVUgsQ0FBWSxHQUNwQ0csRUFBTyxPQUFPLFVBQVViLENBQU0sR0FDOUJhLEVBQU8sT0FBTyxlQUFlVixDQUFtQixHQUN6Q1UsRUFBTyxTQUFTO0FBQUEsRUFDekIsR0FBRyxDQUFDSCxHQUFjVixHQUFRQyxHQUFVRSxDQUFtQixDQUFDO0FBTXhELFNBTEFuYSxHQUFVLE1BQU13YSxFQUFhLEVBQUksR0FBRyxDQUFDLENBQUMsR0FDdEN4YSxHQUFVLE1BQU07QUFDZCxJQUFJLENBQUN5YSxFQUFVLFdBQVcsQ0FBQ0YsS0FDM0JILEVBQWVMLEdBQWFVLEVBQVUsT0FBTztBQUFBLEVBQy9DLEdBQUcsQ0FBQ0YsQ0FBUyxDQUFDLEdBQ1RKLElBSWtCLGdCQUFBbGE7QUFBQSxJQUNyQjtBQUFBLElBQ0E7QUFBQSxNQUNFLElBQUksT0FBT3FhLENBQU87QUFBQSxNQUNsQixNQUFNLEdBQUdBLENBQU87QUFBQSxNQUNoQixXQUFXO0FBQUEsTUFDWCxLQUFLLEdBQUdELENBQU8sV0FBV0MsQ0FBTyxhQUFhTSxDQUFXO0FBQUEsTUFDekQsT0FBT0Q7QUFBQSxNQUNQLEtBQUtGO0FBQUEsSUFDUDtBQUFBLEVBQ0YsS0FiRSxRQUFRLE1BQU0sa0RBQWtELEdBQ3pDLGdCQUFBeGEsRUFBSSxPQUFPLENBQUMsQ0FBQztBQWF4QyxHQUVNNmEsS0FBaUIsQ0FBQyxFQUFFLFFBQUE5RixFQUFPLE1BQ1IsZ0JBQUEvVSxFQUFJNlosSUFBYyxFQUFFLFFBQUE5RSxHQUFRLGFBQWEzQixFQUFnQixTQUFTLENBQUMsR0FHdEYwSCxLQUFjLENBQUMsRUFBRSxRQUFBL0YsRUFBTyxNQUNMLGdCQUFBL1UsRUFBSTZaLElBQWMsRUFBRSxRQUFBOUUsR0FBUSxhQUFhM0IsRUFBZ0IsS0FBSyxDQUFDLEdBR2xGMkgsS0FBb0IsQ0FBQyxFQUFFLFFBQUFoRyxFQUFPLE1BQ1gsZ0JBQUEvVSxFQUFJNlosSUFBYyxFQUFFLFFBQUE5RSxHQUFRLGFBQWEzQixFQUFnQixZQUFZLENBQUMsR0FHekY0SCxLQUFvQixDQUFDLEVBQUUsUUFBQWpHLEVBQU8sTUFDWCxnQkFBQS9VLEVBQUk2WixJQUFjLEVBQUUsUUFBQTlFLEdBQVEsYUFBYTNCLEVBQWdCLFlBQVksQ0FBQzsiLAogICJuYW1lcyI6IFsiY3JlYXRlQ29udGV4dCIsICJ1c2VDb250ZXh0IiwgInVzZVJlZiIsICJ1c2VNZW1vIiwgInVzZVN0YXRlIiwgInVzZUNhbGxiYWNrIiwgInVzZUVmZmVjdCIsICJqc3giLCAiRnJhZ21lbnQiLCAieiQxIiwgImNvbm5lY3RUb0NoaWxkIiwgIlkiLCAiRWxlbWVudHNDb250ZXh0IiwgInVzZU9wZW5QYXlFbGVtZW50cyIsICJjb250ZXh0IiwgImZ0IiwgInB0IiwgImh0IiwgIm10IiwgInl0IiwgIl90IiwgImFlIiwgInQiLCAiciIsICJndCIsICJidCIsICJlIiwgInZ0IiwgIlUiLCAid3QiLCAibiIsICJTIiwgIkUiLCAiWiIsICJtIiwgIk5lIiwgIlVlIiwgIiRlIiwgIlZlIiwgIkwiLCAiRXQiLCAiZWUiLCAiU3QiLCAiUCIsICJDdCIsICJrdCIsICJQdCIsICJJdCIsICJPdCIsICJBdCIsICJSdCIsICJUdCIsICJqdCIsICJNdCIsICJMdCIsICJGdCIsICIkIiwgInh0IiwgIkR0IiwgIk50IiwgIlV0IiwgIiR0IiwgIlZ0IiwgInF0IiwgInp0IiwgIkh0IiwgIll0IiwgIkJ0IiwgIkciLCAiS3QiLCAiSnQiLCAiWnQiLCAiR3QiLCAiV3QiLCAiUXQiLCAidGUiLCAiZ2UiLCAidHIiLCAiWHQiLCAiZXIiLCAicnIiLCAibnIiLCAib3IiLCAiaSIsICJzIiwgImEiLCAiYyIsICJpciIsICJkZSIsICJzciIsICJhciIsICJjciIsICJnIiwgInVyIiwgInFlIiwgInplIiwgImxyIiwgImRyIiwgIlYiLCAiZnIiLCAicHIiLCAiSGUiLCAiaHIiLCAibXIiLCAieXIiLCAiYmUiLCAiWWUiLCAidmUiLCAiQmUiLCAiX3IiLCAiZ3IiLCAiS2UiLCAiYnIiLCAidnIiLCAiSmUiLCAid3IiLCAiRXIiLCAiU3IiLCAiQ3IiLCAia3IiLCAiUHIiLCAiWmUiLCAiSSIsICJPciIsICJJciIsICJBciIsICJxIiwgIlJyIiwgIlRyIiwgImpyIiwgImZlIiwgIk1yIiwgIkdlIiwgIkxyIiwgIndlIiwgIkZyIiwgIldlIiwgIlFlIiwgInhyIiwgIkRyIiwgInBlIiwgIlhlIiwgIkEiLCAiZ28iLCAiTnIiLCAiaGUiLCAiZXQiLCAiVXIiLCAidHQiLCAibWUiLCAiJHIiLCAiRWUiLCAidiIsICJWciIsICJxciIsICJ6ciIsICJIciIsICJsIiwgInUiLCAiZiIsICJ5IiwgIngiLCAiS3IiLCAiWXIiLCAiQnIiLCAiaCIsICJKciIsICJaciIsICJHciIsICJXciIsICJRciIsICJiIiwgIlNlIiwgIkNlIiwgIlhyIiwgInJuIiwgIm5uIiwgIl8iLCAiZW4iLCAidG4iLCAiQyIsICJvbiIsICJzbiIsICJhbiIsICJjbiIsICJsbiIsICJ1biIsICJkbiIsICJydCIsICJjZSIsICJNIiwgImZuIiwgIm50IiwgIkQiLCAiVyIsICJRIiwgIkYiLCAicG4iLCAiTiIsICJIIiwgImhuIiwgInciLCAicmUiLCAib2UiLCAiWCIsICJ6IiwgImtlIiwgIm90IiwgIml0IiwgInN0IiwgImF0IiwgImN0IiwgIlBlIiwgIksiLCAieWUiLCAiZ24iLCAidWUiLCAibW4iLCAiaWUiLCAieW4iLCAiQiIsICJfbiIsICJfZSIsICJibiIsICJ2biIsICJUIiwgIkVuIiwgIkllIiwgInduIiwgIlNuIiwgIkNuIiwgImtuIiwgIlBuIiwgIkluIiwgInV0IiwgIk9lIiwgIk9uIiwgIkFuIiwgIkFlIiwgIlJuIiwgIlJlIiwgIlRuIiwgImpuIiwgIk1uIiwgIkxuIiwgIkZuIiwgInhuIiwgIkRuIiwgIk5uIiwgIlVuIiwgIiRuIiwgIlZuIiwgInFuIiwgInpuIiwgIkhuIiwgIlluIiwgIkJuIiwgImx0IiwgIktuIiwgIkpuIiwgIlpuIiwgIkduIiwgIlduIiwgIlFuIiwgIlhuIiwgImVvIiwgInRvIiwgInJvIiwgIm5vIiwgIm5lIiwgImR0IiwgIkoiLCAib28iLCAiaW8iLCAiVGUiLCAic28iLCAiYW8iLCAiY28iLCAiayIsICJqZSIsICJPIiwgImxlIiwgInVvIiwgIk1lIiwgImxvIiwgImZvIiwgInBvIiwgIkxlIiwgIkZlIiwgImoiLCAic2UiLCAiUiIsICJ4ZSIsICJ1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3MiLCAicHJvcHMiLCAiZm9ybUNhbGxiYWNrc1JlZiIsICJjYiIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxIiwgIlpvZEZpZWxkRXJyb3IiLCAibWFrZUNhbGxiYWNrU2FmZSIsICJjYWxsYmFja05hbWUiLCAiZXJyb3JMb2dnZXIiLCAiYXJncyIsICJlcnJvciIsICJSZXF1aXJlZFN0cmluZyIsICJPcHRpb25hbFN0cmluZyIsICJudWxsT3JVbmRlZk9yJDEiLCAielR5cGUiLCAiRmllbGROYW1lIiwgIkZpZWxkTmFtZTIiLCAiRmllbGROYW1lRW51bSIsICJQcml2YXRlRmllbGROYW1lIiwgIlByaXZhdGVGaWVsZE5hbWUyIiwgIlByaXZhdGVGaWVsZE5hbWVFbnVtIiwgIkFsbEZpZWxkTmFtZXMiLCAiRWxlbWVudFR5cGVFbnVtIiwgIkVsZW1lbnRUeXBlRW51bTIiLCAiQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEiLCAiUGF5bWVudE1ldGhvZE1pbmltYWwiLCAiRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50UGF5bG9hZCIsICJJbnB1dEV2ZW50VHlwZSIsICJJbnB1dEV2ZW50UGF5bG9hZCIsICJFcnJvckV2ZW50VHlwZSIsICJFcnJvckV2ZW50UGF5bG9hZCIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkIiwgIkxheW91dEV2ZW50UGF5bG9hZCIsICJMb2FkZWRFdmVudFBheWxvYWQiLCAiUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkIiwgIlNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIlJlcXVpcmVkRm9ybUZpZWxkcyIsICJQUkZvcm1GaWVsZHMiLCAiU3VibWl0RXZlbnRUeXBlIiwgIlN1Ym1pdEV2ZW50UGF5bG9hZCIsICJUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkV2ZW50UGF5bG9hZCIsICJGaWVsZFZhbGlkYXRpb25FcnJvciIsICJUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlIiwgImNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nIiwgInN0eWxlcyIsICJudWxsT3JVbmRlZk9yIiwgIkNvdXBvbk1pbmltYWwiLCAiTGluZUl0ZW0iLCAiQnJhbmRTZXR0aW5ncyIsICJCcmFuZCIsICJDaGVja291dFBheW1lbnRNZXRob2QiLCAiU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwiLCAiU3Vic2NyaXB0aW9uTWluaW1hbCIsICJJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwiLCAiSW52b2ljZUxpbmVJdGVtTWluaW1hbCIsICJEaXNjb3VudE1pbmltYWwiLCAiSW52b2ljZU1pbmltYWwiLCAiQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsIiwgIlByZXZpZXdDaGVja291dFJlc3BvbnNlIiwgIl9QYXltZW50Rm9ybVByZWZpbGxDb21tb24iLCAiUGF5bWVudEZvcm1QcmVmaWxsIiwgIkNvbXBsZXRlZEZvcm1QcmVmaWxsIiwgIkV4cGlyZWRGb3JtUHJlZmlsbCIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciIsICJmaXhQcm90byIsICJ0YXJnZXQiLCAicHJvdG90eXBlIiwgInNldFByb3RvdHlwZU9mIiwgImZpeFN0YWNrIiwgImNhcHR1cmVTdGFja1RyYWNlIiwgIl9fZXh0ZW5kcyIsICJfZXh0ZW5kU3RhdGljcyIsICJkIiwgInAiLCAiX18iLCAiX3N1cGVyIiwgIkN1c3RvbUVycm9yIiwgIm1lc3NhZ2UiLCAib3B0aW9ucyIsICJfbmV3VGFyZ2V0IiwgIl90aGlzIiwgImNyZWF0ZU9qc0Zsb3dMb2dnZXJzIiwgInByZWZpeCIsICJsb2ciLCAiZXJyIiwgIlBSX0xPQURJTkciLCAiZXJyX18iLCAiT3B0aW9uYWxGbiIsICJab2RGb3JtQ2FsbGJhY2tzIiwgIl9Gb3JtQ2FsbGJhY2tzIiwgInJhd0NhbGxiYWNrcyIsICJrZXkiLCAicmF3Q2FsbGJhY2siLCAic2FmZUNhbGxiYWNrIiwgIm9iaiIsICJpbnN0YW5jZSIsICJGb3JtQ2FsbGJhY2tzIiwgInVzZVBheW1lbnRSZXF1ZXN0cyIsICJvcmlnaW5hbE9uUGF5bWVudFJlcXVlc3RMb2FkIiwgInBheW1lbnRSZXF1ZXN0cyIsICJzZXRQYXltZW50UmVxdWVzdHMiLCAib3ZlcnJpZGVuT25QYXltZW50UmVxdWVzdExvYWQiLCAicGF5bWVudFJlcXVlc3RzMiIsICJGT1JNX1RBUkdFVCIsICJFbGVtZW50c0Zvcm0iLCAib3BGb3JtIiwgInNldE9wRm9ybSIsICJlbGVtZW50c0NvbnRleHRWYWx1ZSIsICJzZXRFbGVtZW50c0NvbnRleHRWYWx1ZSIsICJsb2FkZWQiLCAic2V0TG9hZGVkIiwgInN0cmlwZUxpbmtDdHJsIiwgInNldFN0cmlwZUxpbmtDdHJsIiwgImZvcm1DYWxsYmFja3MiLCAidG90YWxBbW91bnRBdG9tcyIsICJjdXJyZW5jeSIsICJfYSIsICJmb3JtIiwgInZhbHVlIiwgImdldEVsZW1lbnRzQ29udGV4dFZhbHVlIiwgInJlc3VsdCIsICJjaGlsZHJlblByb3BzIiwgIkVsZW1lbnRGcmFtZSIsICJlbGVtZW50VHlwZSIsICJmb3JtSWQiLCAicmVmZXJyZXIiLCAiZm9ybUhlaWdodCIsICJjaGVja291dFNlY3VyZVRva2VuIiwgInJlZ2lzdGVySWZyYW1lIiwgImJhc2VVcmwiLCAic3ViUGF0aCIsICJoYXNMb2FkZWQiLCAic2V0SGFzTG9hZGVkIiwgImlmcmFtZVJlZiIsICJlbGVtZW50U3R5bGUiLCAiZnJhbWVTdHlsZSIsICJxdWVyeVN0cmluZyIsICJwYXJhbXMiLCAiQ2FyZEN2Y0VsZW1lbnQiLCAiQ2FyZEVsZW1lbnQiLCAiQ2FyZEV4cGlyeUVsZW1lbnQiLCAiQ2FyZE51bWJlckVsZW1lbnQiXQp9Cg==