@getopenpay/openpay-js-react 0.2.7 → 0.2.8-alpha.c35a29a

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 vn, useContext as En, useState as ae, useCallback as Cn, useEffect as We, useRef as Sn, useMemo as Ke } from "react";
1
+ import { createContext as En, useContext as Cn, useState as ae, useCallback as Sn, useEffect as We, useRef as Pn, useMemo as Ke } from "react";
2
2
  import { jsx as F, Fragment as Ge } from "react/jsx-runtime";
3
3
  import { z as e } from "zod";
4
- import { v4 as Pn } from "uuid";
4
+ import { v4 as kn } from "uuid";
5
5
  import { connectToChild as Dt } from "penpal";
6
6
  import ee from "chalk";
7
- const Nt = vn({
7
+ const Nt = En({
8
8
  formId: "",
9
9
  formHeight: "",
10
10
  referrer: void 0,
@@ -12,40 +12,40 @@ const Nt = vn({
12
12
  registerIframe: () => {
13
13
  },
14
14
  baseUrl: ""
15
- }), kn = () => {
16
- const t = En(Nt);
15
+ }), An = () => {
16
+ const t = Cn(Nt);
17
17
  if (!t)
18
18
  throw new Error("useOpenPayElements must be used within an OpenPayElementsProvider");
19
19
  return t;
20
- }, Lt = "https://cde.getopenpay.com", An = e.object({
20
+ }, Lt = "https://cde.getopenpay.com", On = e.object({
21
21
  type: e.string(),
22
22
  loc: e.array(e.string()),
23
23
  msg: e.string(),
24
24
  url: e.string()
25
- }), On = e.array(An), In = e.object({
25
+ }), In = e.array(On), jn = e.object({
26
26
  code: e.string(),
27
27
  message: e.string(),
28
28
  path: e.array(e.string())
29
- }), jn = e.array(In), Tn = {
29
+ }), Tn = e.array(jn), Rn = {
30
30
  "failed to fetch": "Connection error: please double check if you are connected to the internet, then try again"
31
31
  }, Qe = (t) => {
32
32
  const r = t.toLowerCase().trim();
33
- return Tn[r] ?? t;
34
- }, Rn = (t) => {
33
+ return Rn[r] ?? t;
34
+ }, xn = (t) => {
35
35
  try {
36
36
  return typeof JSON.parse(t) == "object";
37
37
  } catch {
38
38
  return !1;
39
39
  }
40
- }, xn = (t) => t.length === 1 ? Qe(t[0].msg) : `Please fix the following errors:
40
+ }, Mn = (t) => t.length === 1 ? Qe(t[0].msg) : `Please fix the following errors:
41
41
  ${t.map((r) => `• ${Qe(r.msg)}`).join(`
42
- `)}`, Mn = (t) => `Encountered the following errors:
42
+ `)}`, Dn = (t) => `Encountered the following errors:
43
43
  ${t.map((r) => `- ${r.path.join("/")}: ${r.message}`).join(`
44
44
  `)}`, W = (t) => {
45
45
  if (t instanceof Error)
46
- if (Rn(t.message)) {
46
+ if (xn(t.message)) {
47
47
  const r = JSON.parse(t.message);
48
- return On.safeParse(r).success ? xn(r) : jn.safeParse(r).success ? Mn(r) : (console.warn(`Encountered unknown stringified JSON object:
48
+ return In.safeParse(r).success ? Mn(r) : Tn.safeParse(r).success ? Dn(r) : (console.warn(`Encountered unknown stringified JSON object:
49
49
  ${t.message}`), t.message);
50
50
  } else
51
51
  return Qe(t.message);
@@ -57,42 +57,42 @@ ${t.message}`), t.message);
57
57
  }
58
58
  else
59
59
  return t + "";
60
- }, Dn = (t, r, n) => (...o) => {
60
+ }, Nn = (t, r, n) => (...o) => {
61
61
  try {
62
62
  return r(...o);
63
63
  } catch (i) {
64
64
  n(`[form] Error running callback (${t}):`, i);
65
65
  return;
66
66
  }
67
- }, I = e.string().trim().min(1, { message: "Cannot be blank" }), C = e.string().trim().optional(), x = (t) => e.nullable(t.optional());
67
+ }, I = e.string().trim().min(1, { message: "Cannot be blank" }), S = e.string().trim().optional(), x = (t) => e.nullable(t.optional());
68
68
  var p = /* @__PURE__ */ ((t) => (t.FIRST_NAME = "firstName", t.LAST_NAME = "lastName", t.EMAIL = "email", t.ZIP_CODE = "zipCode", t.CITY = "city", t.STATE = "state", t.COUNTRY = "country", t.ADDRESS = "address", t.PHONE = "phone", t.PROMOTION_CODE = "promotionCode", t))(p || {});
69
69
  const Ut = e.nativeEnum(p);
70
70
  var Ft = /* @__PURE__ */ ((t) => (t.CARD_NUMBER = "cardNumber", t.CARD_EXPIRY = "cardExpiry", t.CARD_CVC = "cardCvc", t))(Ft || {});
71
71
  const $t = e.nativeEnum(Ft), qt = e.union([Ut, $t]);
72
72
  var ue = /* @__PURE__ */ ((t) => (t.CARD = "card", t.CARD_NUMBER = "card-number", t.CARD_EXPIRY = "card-expiry", t.CARD_CVC = "card-cvc", t))(ue || {});
73
- const Nn = e.nativeEnum(ue), Me = e.object({
73
+ const Ln = e.nativeEnum(ue), Me = e.object({
74
74
  provider: e.string(),
75
75
  processor_name: x(e.string()),
76
76
  metadata: x(e.record(e.string(), e.any()))
77
- }), Ln = e.object({
77
+ }), Un = e.object({
78
78
  id: e.string()
79
79
  });
80
80
  e.object({
81
- cardNumber: C,
82
- expiry: C,
83
- cvc: C
81
+ cardNumber: S,
82
+ expiry: S,
83
+ cvc: S
84
84
  });
85
85
  e.object({
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
- hideIcon: C
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,
95
+ hideIcon: S
96
96
  });
97
97
  const V = e.enum([
98
98
  // Element -> Form
@@ -115,33 +115,33 @@ const V = e.enum([
115
115
  "TOKENIZE",
116
116
  "CHECKOUT",
117
117
  "START_PAYMENT_FLOW"
118
- ]), Un = V.extract(["TOKENIZE_STARTED", "CHECKOUT_STARTED"]), Fn = e.object({ type: Un }), $n = V.extract(["BLUR", "FOCUS", "CHANGE"]), qn = e.object({
119
- type: $n,
118
+ ]), Fn = V.extract(["TOKENIZE_STARTED", "CHECKOUT_STARTED"]), $n = e.object({ type: Fn }), qn = V.extract(["BLUR", "FOCUS", "CHANGE"]), Vn = e.object({
119
+ type: qn,
120
120
  elementType: $t,
121
121
  errors: e.array(e.string()).optional()
122
- }), Vn = V.extract(["LOAD_ERROR", "TOKENIZE_ERROR", "CHECKOUT_ERROR"]), zn = e.object({
123
- type: Vn,
122
+ }), zn = V.extract(["LOAD_ERROR", "TOKENIZE_ERROR", "CHECKOUT_ERROR"]), Yn = e.object({
123
+ type: zn,
124
124
  message: I,
125
125
  headers: e.record(e.string(), e.string()).optional()
126
- }), Yn = V.extract(["VALIDATION_ERROR"]), Hn = e.object({
127
- type: Yn,
126
+ }), Hn = V.extract(["VALIDATION_ERROR"]), Kn = e.object({
127
+ type: Hn,
128
128
  elementType: qt,
129
129
  errors: e.array(e.string())
130
- }), Kn = e.object({
130
+ }), Gn = e.object({
131
131
  type: e.literal(V.enum.LAYOUT),
132
132
  height: I
133
- }), Gn = e.object({
133
+ }), Zn = e.object({
134
134
  type: e.literal(V.enum.LOADED),
135
135
  sessionId: I,
136
136
  totalAmountAtoms: e.number(),
137
- currency: C,
137
+ currency: S,
138
138
  checkoutPaymentMethods: e.array(Me)
139
- }), Zn = e.object({
139
+ }), Bn = e.object({
140
140
  type: e.literal(V.enum.PAYMENT_FLOW_STARTED),
141
141
  nextActionMetadata: e.record(e.string(), e.any()),
142
142
  paymentFlowMetadata: e.any().optional(),
143
143
  startPFMetadata: e.optional(e.record(e.string(), e.any()))
144
- }), Bn = e.object({
144
+ }), Jn = e.object({
145
145
  type: e.literal(V.enum.SETUP_PAYMENT_METHOD_SUCCESS),
146
146
  paymentMethodId: e.string()
147
147
  }), we = e.object({
@@ -150,46 +150,46 @@ const V = e.enum([
150
150
  email: I,
151
151
  zipCode: I,
152
152
  country: I,
153
- promotionCode: C
154
- }), Jn = e.object({
155
- firstName: C,
156
- lastName: C,
153
+ promotionCode: S
154
+ }), Wn = e.object({
155
+ firstName: S,
156
+ lastName: S,
157
157
  email: I,
158
158
  zipCode: I,
159
159
  country: I,
160
- promotionCode: C,
161
- address: C,
162
- city: C,
163
- state: C
164
- }), Wn = V.extract(["TOKENIZE", "CHECKOUT", "START_PAYMENT_FLOW"]), Qn = e.object({
165
- type: Wn,
160
+ promotionCode: S,
161
+ address: S,
162
+ city: S,
163
+ state: S
164
+ }), Qn = V.extract(["TOKENIZE", "CHECKOUT", "START_PAYMENT_FLOW"]), Xn = e.object({
165
+ type: Qn,
166
166
  sessionId: I,
167
167
  checkoutPaymentMethod: Me,
168
168
  paymentFlowMetadata: e.any().optional(),
169
169
  doNotUseLegacyCCFlow: e.boolean().optional(),
170
- existingCCPMId: C
171
- }).extend(we.shape), Xn = e.object({
170
+ existingCCPMId: S
171
+ }).extend(we.shape), er = e.object({
172
172
  type: e.literal(V.enum.TOKENIZE_SUCCESS),
173
173
  isReadyForCheckout: e.boolean()
174
- }), er = e.object({
174
+ }), tr = e.object({
175
175
  type: e.literal(V.enum.CHECKOUT_SUCCESS),
176
176
  invoiceUrls: e.array(e.string()),
177
177
  subscriptionIds: e.array(e.string()),
178
178
  customerId: e.string()
179
- }), tr = e.discriminatedUnion("type", [
180
- Fn,
181
- qn,
182
- zn,
183
- Hn,
179
+ }), nr = e.discriminatedUnion("type", [
180
+ $n,
181
+ Vn,
182
+ Yn,
184
183
  Kn,
185
184
  Gn,
186
- Qn,
185
+ Zn,
187
186
  Xn,
188
187
  er,
189
- Zn,
190
- Bn
191
- ]), nr = e.object({
192
- payload: tr,
188
+ tr,
189
+ Bn,
190
+ Jn
191
+ ]), rr = e.object({
192
+ payload: nr,
193
193
  nonce: I,
194
194
  formId: I,
195
195
  elementId: I
@@ -217,20 +217,20 @@ const it = e.object({
217
217
  invoice_urls: e.array(e.string()),
218
218
  subscription_ids: e.array(e.string()),
219
219
  customer_id: e.string()
220
- }), rr = e.object({
220
+ }), or = e.object({
221
221
  elementType: e.string(),
222
222
  errors: e.array(e.string())
223
223
  });
224
224
  e.object({
225
225
  session_id: e.string()
226
226
  });
227
- const or = e.object({
227
+ const ir = e.object({
228
228
  success: e.literal(!1),
229
229
  error_type: e.literal("validation_error"),
230
- errors: e.array(rr)
231
- }), ir = e.discriminatedUnion("success", [
230
+ errors: e.array(or)
231
+ }), ar = e.discriminatedUnion("success", [
232
232
  e.object({ success: e.literal(!0) }),
233
- or
233
+ ir
234
234
  ]);
235
235
  e.object({
236
236
  session_id: e.string(),
@@ -246,7 +246,7 @@ e.object({
246
246
  extra_metadata: e.record(e.string(), e.any()).optional()
247
247
  });
248
248
  var q = /* @__PURE__ */ ((t) => (t.SUCCESS = "success", t.FAILURE = "failure", t.CANCELLED = "cancelled", t))(q || {});
249
- const ar = e.object({
249
+ const sr = e.object({
250
250
  status: e.enum([
251
251
  "success",
252
252
  "failure",
@@ -258,7 +258,7 @@ const ar = e.object({
258
258
  e.object({
259
259
  href: e.string().optional().nullable()
260
260
  });
261
- const sr = e.object({
261
+ const cr = e.object({
262
262
  type: e.string(),
263
263
  redirect_url: e.string(),
264
264
  initial_intent_id: e.string(),
@@ -271,14 +271,14 @@ const sr = e.object({
271
271
  consent_id: x(e.string()),
272
272
  their_pm_id: x(e.string()),
273
273
  payment_session: x(e.record(e.string(), e.any()))
274
- }), cr = e.discriminatedUnion("present", [
274
+ }), lr = e.discriminatedUnion("present", [
275
275
  e.object({ present: e.literal(!0), href: e.string() }),
276
276
  e.object({ present: e.literal(!1) })
277
- ]), lr = e.object({
278
- payment_methods: e.array(Ln),
277
+ ]), ur = e.object({
278
+ payment_methods: e.array(Un),
279
279
  pay_first_success_response: x(it),
280
280
  required_user_actions: x(e.array(Vt))
281
- }), ur = (t) => {
281
+ }), dr = (t) => {
282
282
  const r = {};
283
283
  return Object.entries(t).forEach(([n, o]) => {
284
284
  try {
@@ -288,31 +288,31 @@ const sr = e.object({
288
288
  return;
289
289
  }
290
290
  }), r;
291
- }, dr = e.object({
291
+ }, pr = e.object({
292
292
  stripe_pk: e.string(),
293
293
  client_secret: e.string(),
294
294
  stripe_pm_id: e.string()
295
- }), pr = e.object({
295
+ }), mr = e.object({
296
296
  type: e.string(),
297
297
  client_secret: e.string(),
298
298
  stripe_pk: e.string()
299
- }), mr = {
299
+ }), _r = {
300
300
  usd: "usd",
301
301
  brl: "brl"
302
302
  }, De = async (t) => {
303
303
  for (let r = 0; r < 10; r++)
304
- dt() || await fr(500);
304
+ dt() || await zt(500);
305
305
  if (!dt())
306
306
  throw console.log("Stripe JS not found."), new Error("Stripe JS not found.");
307
307
  return new Stripe(t);
308
- }, _r = async (t, r) => {
308
+ }, yr = async (t, r) => {
309
309
  const n = await De(t);
310
310
  return {
311
311
  elements: n.elements(r),
312
312
  stripe: n
313
313
  };
314
- }, yr = async (t, r, n, o, i) => {
315
- const a = await De(t), s = mr[n.toLowerCase().trim()];
314
+ }, hr = async (t, r, n, o, i) => {
315
+ const a = await De(t), s = _r[n.toLowerCase().trim()];
316
316
  return a.paymentRequest({
317
317
  // TODO: replace this with stripe account country as soon as we support it
318
318
  country: "US",
@@ -327,9 +327,9 @@ const sr = e.object({
327
327
  requestPayerEmail: !0,
328
328
  disableWallets: []
329
329
  });
330
- }, fr = (t) => new Promise((r) => {
330
+ }, zt = (t) => new Promise((r) => {
331
331
  setTimeout(r, t);
332
- }), dt = () => "Stripe" in window, hr = async (t) => new Promise((r, n) => {
332
+ }), dt = () => "Stripe" in window, fr = async (t) => new Promise((r, n) => {
333
333
  try {
334
334
  t.on("paymentmethod", async (o) => {
335
335
  console.log("paymentmethod EVT:: ", o), r(o);
@@ -365,7 +365,7 @@ const sr = e.object({
365
365
  return i ? { ...n, [i]: o.value } : n;
366
366
  }, {}), vr = (t) => {
367
367
  try {
368
- return nr.parse(t);
368
+ return rr.parse(t);
369
369
  } catch (r) {
370
370
  throw console.error("Error parsing event payload:", t, r), r;
371
371
  }
@@ -379,7 +379,7 @@ const sr = e.object({
379
379
  } catch (r) {
380
380
  return console.error("Invalid CDE connection check:", r), !1;
381
381
  }
382
- }, Cr = (t, r) => !!t && r, g = (t) => e.nullable(t.optional());
382
+ }, Cr = (t, r) => !!t && r, f = (t) => e.nullable(t.optional());
383
383
  e.string().trim().min(1, { message: "Cannot be blank" });
384
384
  const Sr = e.object({
385
385
  cde_response_type: e.literal("error"),
@@ -387,76 +387,76 @@ const Sr = e.object({
387
387
  headers: e.record(e.string(), e.string()).optional()
388
388
  });
389
389
  e.enum(["usd", "brl"]);
390
- const zt = e.object({
390
+ const Yt = e.object({
391
391
  name: e.string(),
392
- amount_atom_off: g(e.number()),
393
- percent_off: g(e.number()),
394
- currency: g(e.string()),
392
+ amount_atom_off: f(e.number()),
393
+ percent_off: f(e.number()),
394
+ currency: f(e.string()),
395
395
  duration: e.string(),
396
- duration_in_months: g(e.number())
397
- }), Yt = e.object({
396
+ duration_in_months: f(e.number())
397
+ }), Ht = e.object({
398
398
  amount_subtotal_atom: e.number().int(),
399
399
  amount_total_atom: e.number().int(),
400
400
  currency: e.string(),
401
- description: g(e.string()),
401
+ description: f(e.string()),
402
402
  price_id: e.string(),
403
- billing_interval: g(e.string()),
404
- billing_interval_count: g(e.number().int()),
403
+ billing_interval: f(e.string()),
404
+ billing_interval_count: f(e.number().int()),
405
405
  quantity: e.number().int()
406
406
  }), Pr = e.record(e.string(), e.any()), kr = e.object({
407
407
  name: e.string(),
408
- settings: g(Pr)
408
+ settings: f(Pr)
409
409
  }), ve = e.object({
410
410
  provider: e.string(),
411
- processor_name: g(e.string()),
412
- metadata: g(e.record(e.string(), e.any()))
411
+ processor_name: f(e.string()),
412
+ metadata: f(e.record(e.string(), e.any()))
413
413
  }), Ar = e.object({
414
414
  quantity: e.number()
415
415
  }), Or = e.object({
416
- id: g(e.string()),
417
- billing_interval: g(e.string()),
418
- billing_interval_count: g(e.number().int()),
416
+ id: f(e.string()),
417
+ billing_interval: f(e.string()),
418
+ billing_interval_count: f(e.number().int()),
419
419
  subscription_items: e.array(Ar),
420
- trial_start: g(e.string()),
421
- trial_end: g(e.string())
422
- }), Ht = e.object({
420
+ trial_start: f(e.string()),
421
+ trial_end: f(e.string())
422
+ }), Kt = e.object({
423
423
  amount_atom: e.number()
424
424
  }), Ir = e.object({
425
425
  amount_atom: e.number(),
426
426
  amount_atom_considering_discount_applied: e.number(),
427
427
  currency: e.string(),
428
- discount_amount_atoms: e.array(Ht),
428
+ discount_amount_atoms: e.array(Kt),
429
429
  subscription_item_id: e.string()
430
430
  }), jr = e.object({
431
- coupon: zt
431
+ coupon: Yt
432
432
  }), Tr = e.object({
433
433
  currency: e.string(),
434
434
  discounts: e.array(jr),
435
- hosted_invoice_url: g(e.string()),
435
+ hosted_invoice_url: f(e.string()),
436
436
  lines: e.array(Ir),
437
437
  remaining_amount_atom: e.number(),
438
438
  tax_amount_atom: e.number(),
439
439
  total_amount_atom: e.number(),
440
- total_discount_amount_atoms: e.array(Ht)
440
+ total_discount_amount_atoms: e.array(Kt)
441
441
  }), pt = e.object({
442
442
  created: e.array(Or),
443
443
  invoices: e.array(Tr)
444
- }), Kt = e.object({
444
+ }), Gt = e.object({
445
445
  preview: pt,
446
- preview_post_trial: g(pt),
447
- coupons: e.array(zt)
446
+ preview_post_trial: f(pt),
447
+ coupons: e.array(Yt)
448
448
  }), mt = e.object({
449
449
  status: e.literal("open"),
450
450
  token: e.string(),
451
- email: g(e.string()),
452
- line_items: e.array(Yt),
451
+ email: f(e.string()),
452
+ line_items: e.array(Ht),
453
453
  amount_subtotal_atom: e.number().int(),
454
454
  amount_total_atom: e.number().int(),
455
455
  brand: kr,
456
- subs_preview: g(Kt),
456
+ subs_preview: f(Gt),
457
457
  // Null in setup mode
458
458
  methods_available: e.array(ve)
459
- }), Gt = e.discriminatedUnion("mode", [
459
+ }), Zt = e.discriminatedUnion("mode", [
460
460
  e.object({
461
461
  mode: e.literal("setup"),
462
462
  currency: e.nullable(e.undefined())
@@ -470,7 +470,7 @@ const zt = e.object({
470
470
  }), xr = e.object({
471
471
  status: e.literal("expired")
472
472
  });
473
- e.union([Gt, Rr, xr]);
473
+ e.union([Zt, Rr, xr]);
474
474
  e.object({
475
475
  logo: e.string(),
476
476
  icon: e.string(),
@@ -490,13 +490,13 @@ e.object({
490
490
  customer_email: e.string(),
491
491
  customer_zip_code: e.string(),
492
492
  customer_country: e.string(),
493
- line_items: e.array(Yt),
493
+ line_items: e.array(Ht),
494
494
  total_amount_atom: e.number().int(),
495
495
  cancel_at_end: e.boolean(),
496
496
  checkout_payment_method: ve,
497
497
  promotion_code: e.string().optional(),
498
498
  do_not_use_legacy_cc_flow: e.boolean().optional(),
499
- use_confirmed_pm_id: g(e.string())
499
+ use_confirmed_pm_id: f(e.string())
500
500
  });
501
501
  const Mr = e.object({
502
502
  payment_method_id: e.string()
@@ -525,7 +525,7 @@ const Nr = e.object({
525
525
  promotion_code: e.string().optional(),
526
526
  displayed_total_amount_atom: e.number().int()
527
527
  }), Fr = e.object({
528
- processor_specific_metadata: g(e.record(e.string(), e.any()))
528
+ processor_specific_metadata: f(e.record(e.string(), e.any()))
529
529
  });
530
530
  e.object({
531
531
  payment_provider: e.string(),
@@ -535,12 +535,12 @@ e.object({
535
535
  use_pay_first_flow: e.boolean().optional(),
536
536
  pay_first_flow_cart_info: Ur.optional()
537
537
  }).extend(Nr.shape).extend(Fr.shape);
538
- const Zt = e.object({
538
+ const Bt = e.object({
539
539
  required_user_actions: e.array(e.record(e.string(), e.any())),
540
- checkout_attempt_id: g(e.string())
540
+ checkout_attempt_id: f(e.string())
541
541
  });
542
542
  e.object({
543
- fields: Jn,
543
+ fields: Wn,
544
544
  checkoutPaymentMethod: ve
545
545
  });
546
546
  e.object({
@@ -556,28 +556,28 @@ const $r = e.object({
556
556
  });
557
557
  e.record(e.any());
558
558
  e.object({
559
- first_name: g(e.string()),
560
- last_name: g(e.string()),
561
- line1: g(e.string()),
562
- line2: g(e.string()),
563
- line3: g(e.string()),
564
- city: g(e.string()),
565
- state: g(e.string()),
566
- country: g(e.string()),
567
- zip_code: g(e.string()),
568
- email: g(e.string()),
569
- billing_email: g(e.string()),
570
- phone_number: g(e.string()),
571
- update_processor_customer: g(e.boolean())
559
+ first_name: f(e.string()),
560
+ last_name: f(e.string()),
561
+ line1: f(e.string()),
562
+ line2: f(e.string()),
563
+ line3: f(e.string()),
564
+ city: f(e.string()),
565
+ state: f(e.string()),
566
+ country: f(e.string()),
567
+ zip_code: f(e.string()),
568
+ email: f(e.string()),
569
+ billing_email: f(e.string()),
570
+ phone_number: f(e.string()),
571
+ update_processor_customer: f(e.boolean())
572
572
  });
573
573
  const qr = e.object({
574
574
  id: e.string(),
575
- email: g(e.string()),
576
- first_name: g(e.string()),
577
- last_name: g(e.string()),
578
- phone_number: g(e.string()),
579
- billing_email: g(e.string()),
580
- address: g(e.record(e.string(), e.any()))
575
+ email: f(e.string()),
576
+ first_name: f(e.string()),
577
+ last_name: f(e.string()),
578
+ phone_number: f(e.string()),
579
+ billing_email: f(e.string()),
580
+ address: f(e.record(e.string(), e.any()))
581
581
  }), Vr = (t) => t.reduce((r, n) => r + n, 0);
582
582
  function zr(t, r) {
583
583
  var n = Object.setPrototypeOf;
@@ -619,7 +619,7 @@ var Hr = /* @__PURE__ */ function() {
619
619
  }
620
620
  return r;
621
621
  }(Error);
622
- class Bt extends Kr {
622
+ class Jt extends Kr {
623
623
  constructor(r) {
624
624
  const n = `${r.message}`;
625
625
  super(n), this.response = r;
@@ -631,16 +631,16 @@ class Bt extends Kr {
631
631
  const D = async (t, r, n) => {
632
632
  const o = await t.send(r);
633
633
  if (Zr(o))
634
- throw new Bt(o);
634
+ throw new Jt(o);
635
635
  if (!Gr(o, n)) {
636
636
  const i = n.safeParse(o);
637
637
  throw i.success ? new Error("Invalid state") : (console.error("OJS queryApi got a schema error. Expected schema:", n, "Actual:", o), i.error);
638
638
  }
639
639
  return o;
640
- }, Gr = (t, r) => r.safeParse(t).success, Zr = (t) => Sr.safeParse(t).success, Br = async (t, r) => await D(t, { type: "get_checkout_preview", payload: r }, Kt), ne = async (t) => await D(t, { type: "get_prefill", payload: {} }, Gt), Ne = async (t, r) => await D(t, { type: "v2_start_payment_flow", payload: r }, Zt), Jr = async (t, r) => await D(t, { type: "start_payment_flow_for_cc", payload: r }, $r), Wr = async (t, r) => await D(t, { type: "start_payment_flow_for_pr", payload: r }, Zt), te = async (t, r) => await D(t, { type: "confirm_payment_flow", payload: r }, lr), Qr = async (t, r) => await D(
640
+ }, Gr = (t, r) => r.safeParse(t).success, Zr = (t) => Sr.safeParse(t).success, Br = async (t, r) => await D(t, { type: "get_checkout_preview", payload: r }, Gt), ne = async (t) => await D(t, { type: "get_prefill", payload: {} }, Zt), Ne = async (t, r) => await D(t, { type: "v2_start_payment_flow", payload: r }, Bt), Jr = async (t, r) => await D(t, { type: "start_payment_flow_for_cc", payload: r }, $r), Wr = async (t, r) => await D(t, { type: "start_payment_flow_for_pr", payload: r }, Bt), te = async (t, r) => await D(t, { type: "confirm_payment_flow", payload: r }, ur), Qr = async (t, r) => await D(
641
641
  t,
642
642
  { type: "check_if_popup_window_verified", payload: r },
643
- cr
643
+ lr
644
644
  ), Xr = async (t, r, n) => {
645
645
  const o = await Br(t, {
646
646
  secure_token: r,
@@ -666,7 +666,7 @@ const D = async (t, r, n) => {
666
666
  throw new Error("No CDE connections found");
667
667
  return await Promise.all(
668
668
  Array.from(t.values()).map(
669
- (n) => D(n, { type: "tokenize_card", payload: r }, ir)
669
+ (n) => D(n, { type: "tokenize_card", payload: r }, ar)
670
670
  )
671
671
  );
672
672
  }, _t = async (t, r) => {
@@ -675,15 +675,15 @@ const D = async (t, r, n) => {
675
675
  } catch (n) {
676
676
  throw console.error("[cde-client] Error during checkoutCardElements:", n, JSON.stringify(n)), n;
677
677
  }
678
- }, to = async (t, r) => await D(t, { type: "setup_payment_method", payload: r }, Mr), Ue = async (t, r) => await D(t, { type: "checkout", payload: r }, it), Jt = 1e3, no = async (t, r) => {
678
+ }, to = async (t, r) => await D(t, { type: "setup_payment_method", payload: r }, Mr), Ue = async (t, r) => await D(t, { type: "checkout", payload: r }, it), Wt = 1e3, no = async (t, r) => {
679
679
  console.log(r);
680
680
  const n = await Dt({
681
681
  iframe: t,
682
682
  debug: !0,
683
- timeout: Jt,
683
+ timeout: Wt,
684
684
  childOrigin: "*"
685
685
  // TODO: use with proper childOrigin
686
- }).promise, o = await D(n, { type: "ping-3ds-status" }, ar);
686
+ }).promise, o = await D(n, { type: "ping-3ds-status" }, sr);
687
687
  return console.log("🟢 CDE connection successful! Stopping polling... Result:", o), o;
688
688
  }, ro = async (t, r) => await D(t, { type: "update_checkout_customer", payload: r }, qr);
689
689
  function at(t) {
@@ -726,7 +726,7 @@ const _e = (t) => async (r) => {
726
726
  log__: r,
727
727
  err__: n
728
728
  };
729
- }, { log__: hs, err__: oo } = O("common"), st = (t) => {
729
+ }, { log__: fs, err__: oo } = O("common"), st = (t) => {
730
730
  if (t.payment_methods.length !== 1)
731
731
  throw new Error(`Expected exactly one payment method, got ${t.payment_methods.length}`);
732
732
  return { payment_method_id: t.payment_methods[0].id };
@@ -743,18 +743,18 @@ const _e = (t) => async (r) => {
743
743
  },
744
744
  new_customer_first_name: t.firstName,
745
745
  new_customer_last_name: t.lastName
746
- }), { log__: Wt, err__: Qt } = O("common-cc"), fe = (t, r, n) => {
746
+ }), { log__: Qt, err__: Xt } = O("common-cc"), he = (t, r, n) => {
747
747
  if (n) {
748
- Wt(`Received default field values: ${JSON.stringify(n)}`);
748
+ Qt(`Received default field values: ${JSON.stringify(n)}`);
749
749
  for (const [i, a] of Object.entries(n))
750
750
  t[i] || (t[i] = a);
751
751
  }
752
752
  const o = we.safeParse(t);
753
753
  if (!o.success) {
754
- const i = o.error.format(), a = ur(i);
754
+ const i = o.error.format(), a = dr(i);
755
755
  for (const [s, c] of Object.entries(a))
756
756
  r(s, c, s);
757
- throw Qt("Got validation errors in non-CDE form fields", a), new Error("Got validation errors in non-CDE form fields");
757
+ throw Xt("Got validation errors in non-CDE form fields", a), new Error("Got validation errors in non-CDE form fields");
758
758
  }
759
759
  return o.data;
760
760
  }, ao = (t, r) => {
@@ -763,12 +763,12 @@ const _e = (t) => async (r) => {
763
763
  throw n.errors.forEach((o) => {
764
764
  const i = qt.safeParse(o.elementType);
765
765
  if (!i.success)
766
- Qt(`Unknown field name in onValidationError: ${o.elementType}. Error object:`, o);
766
+ Xt(`Unknown field name in onValidationError: ${o.elementType}. Error object:`, o);
767
767
  else {
768
768
  const a = i.data;
769
769
  r(a, o.errors);
770
770
  }
771
- }), Wt(`Error tokenizing card: got validation errors: ${JSON.stringify(n.errors)}`), new Error("Got validation errors while tokenizing card");
771
+ }), Qt(`Error tokenizing card: got validation errors: ${JSON.stringify(n.errors)}`), new Error("Got validation errors while tokenizing card");
772
772
  }, yt = "ojs-stripe-link-btn", { log__: k, err__: so } = O("stripe-link"), co = e.object({
773
773
  provider: e.literal("stripe_link"),
774
774
  processor_name: e.literal("stripe"),
@@ -787,7 +787,7 @@ const _e = (t) => async (r) => {
787
787
  k("Starting stripe link flow...");
788
788
  const i = t.anyCdeConnection, a = await ne(i), s = a.mode === "setup";
789
789
  k("Creating stripe elements...");
790
- const c = await Le(i, a.token, s, void 0), { elements: l, stripe: u } = await _r(o.metadata.stripe_pk, {
790
+ const c = await Le(i, a.token, s, void 0), { elements: l, stripe: u } = await yr(o.metadata.stripe_pk, {
791
791
  mode: "setup",
792
792
  currency: c.currency,
793
793
  setup_future_usage: "off_session",
@@ -802,23 +802,23 @@ const _e = (t) => async (r) => {
802
802
  googlePay: "never",
803
803
  paypal: "never"
804
804
  }
805
- }), m = () => {
805
+ }), _ = () => {
806
806
  d.mount(`#${yt}`);
807
- }, h = () => {
807
+ }, b = () => {
808
808
  d.unmount();
809
809
  };
810
- return n != null && n.doNotMountOnInit ? k("NOT mounting stripe link button (doNotMountOnInit is true)") : (k("Mounting stripe link button..."), m()), d.on("click", async (_) => {
810
+ return n != null && n.doNotMountOnInit ? k("NOT mounting stripe link button (doNotMountOnInit is true)") : (k("Mounting stripe link button..."), _()), d.on("click", async (m) => {
811
811
  if (k("Stripe Link button clicked"), n != null && n.overrideLinkSubmit && !await n.overrideLinkSubmit()) {
812
812
  k("Stripe Link submit aborted by overrideLinkSubmit");
813
813
  return;
814
814
  }
815
- _.resolve();
816
- }), d.on("confirm", async (_) => {
817
- k("Stripe Link window confirmed", _);
815
+ m.resolve();
816
+ }), d.on("confirm", async (m) => {
817
+ k("Stripe Link window confirmed", m);
818
818
  const y = await u.createPaymentMethod({
819
819
  elements: l,
820
820
  params: {
821
- billing_details: _.billingDetails
821
+ billing_details: m.billingDetails
822
822
  }
823
823
  });
824
824
  y.error ? (so("error", y.error), r.get.onCheckoutError(y.error.message ?? "Stripe Link unknown error")) : (k("paymentMethod", y.paymentMethod), $.stripeLink.run({
@@ -832,8 +832,8 @@ const _e = (t) => async (r) => {
832
832
  }), {
833
833
  isAvailable: !0,
834
834
  controller: {
835
- mountButton: m,
836
- dismountButton: h,
835
+ mountButton: _,
836
+ dismountButton: b,
837
837
  waitForButtonToMount: async () => await _o(yt)
838
838
  }
839
839
  };
@@ -849,7 +849,7 @@ const _e = (t) => async (r) => {
849
849
  k("Running Stripe Link flow...");
850
850
  const a = t.anyCdeConnection;
851
851
  k("Merging PM fields with form fields...");
852
- const s = mo(n, i.stripePM), c = fe(s, o.get.onValidationError);
852
+ const s = mo(n, i.stripePM), c = he(s, o.get.onValidationError);
853
853
  k("Starting payment flow...");
854
854
  const l = await Ne(a, {
855
855
  payment_provider: r.provider,
@@ -867,14 +867,14 @@ const _e = (t) => async (r) => {
867
867
  const u = lo.parse(l.required_user_actions)[0].our_existing_pm_id, d = await ne(a);
868
868
  if (d.mode === "setup") {
869
869
  k("Doing payment setup...");
870
- const m = await te(a, {
870
+ const _ = await te(a, {
871
871
  secure_token: d.token,
872
872
  existing_cc_pm_id: u
873
873
  });
874
- return { mode: "setup", result: st(m) };
874
+ return { mode: "setup", result: st(_) };
875
875
  } else {
876
876
  k("Doing checkout...");
877
- const m = {
877
+ const _ = {
878
878
  secure_token: d.token,
879
879
  payment_input: {
880
880
  provider_type: r.provider
@@ -888,7 +888,7 @@ const _e = (t) => async (r) => {
888
888
  cancel_at_end: !1,
889
889
  checkout_payment_method: r
890
890
  };
891
- return { mode: "checkout", result: await Ue(a, m) };
891
+ return { mode: "checkout", result: await Ue(a, _) };
892
892
  }
893
893
  }
894
894
  ), mo = (t, r) => {
@@ -902,7 +902,7 @@ const _e = (t) => async (r) => {
902
902
  o ? r(o) : requestAnimationFrame(n);
903
903
  };
904
904
  n();
905
- }), yo = "@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}", fo = (t) => {
905
+ }), yo = "@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}", ho = (t) => {
906
906
  const r = document.createElement("template");
907
907
  r.innerHTML = `
908
908
  <style>
@@ -920,7 +920,7 @@ const _e = (t) => async (r) => {
920
920
  const i = o.querySelector("#three-ds-iframe"), a = o.querySelector(".cancel-button");
921
921
  return document.body.appendChild(n), { host: n, iframe: i, cancelButton: a };
922
922
  };
923
- function ho(t, r, n) {
923
+ function fo(t, r, n) {
924
924
  const o = async () => {
925
925
  try {
926
926
  const a = await no(t, n);
@@ -929,7 +929,7 @@ function ho(t, r, n) {
929
929
  }
930
930
  };
931
931
  o();
932
- const i = setInterval(o, Jt);
932
+ const i = setInterval(o, Wt);
933
933
  return i;
934
934
  }
935
935
  function go({
@@ -945,20 +945,20 @@ function go({
945
945
  };
946
946
  }
947
947
  async function $e(t) {
948
- const { url: r, baseUrl: n } = t, o = fo(r);
948
+ const { url: r, baseUrl: n } = t, o = ho(r);
949
949
  return new Promise((i) => {
950
950
  const a = (l) => {
951
951
  setTimeout(() => {
952
952
  o.host.remove();
953
953
  }, 1e3), i(l), c == null || c();
954
- }, s = ho(o.iframe, a, new URL(n).origin), c = go({
954
+ }, s = fo(o.iframe, a, new URL(n).origin), c = go({
955
955
  elements: o,
956
956
  pollingInterval: s,
957
957
  resolve: i
958
958
  });
959
959
  });
960
960
  }
961
- const Xt = async (t) => {
961
+ const en = async (t) => {
962
962
  const r = await $e(t);
963
963
  if (r.status === q.CANCELLED)
964
964
  throw new Error("3DS verification cancelled");
@@ -987,7 +987,7 @@ const Xt = async (t) => {
987
987
  }
988
988
  }, 1e3);
989
989
  });
990
- }, { log__: vo, err__: en } = O("pockyt-cc"), Eo = e.object({
990
+ }, { log__: vo, err__: tn } = O("pockyt-cc"), Eo = e.object({
991
991
  "op-pockyt-3ds-url": e.string(),
992
992
  "op-pockyt-txn-no": e.string(),
993
993
  "op-pockyt-ref-no": e.string()
@@ -995,10 +995,10 @@ const Xt = async (t) => {
995
995
  const r = Eo.safeParse(t);
996
996
  if (!r.success) {
997
997
  const n = "Unable to process your credit card. Please contact support for assistance.", o = `Pockyt 3DS is required but headers are malformed. Got: ${JSON.stringify(t)}`;
998
- throw en(o), new Error(n);
998
+ throw tn(o), new Error(n);
999
999
  }
1000
1000
  return r.data;
1001
- }, tn = (t) => {
1001
+ }, nn = (t) => {
1002
1002
  try {
1003
1003
  const r = new URL(t ?? "").searchParams.get("vaultId");
1004
1004
  if (!r)
@@ -1006,14 +1006,14 @@ const Xt = async (t) => {
1006
1006
  return vo(`3DS verification success. [Vault ID: ${r}]`), r;
1007
1007
  } catch (r) {
1008
1008
  const n = "Error verifying 3DS verification result.";
1009
- throw en(n, `Resulting URL: ${t}.
1009
+ throw tn(n, `Resulting URL: ${t}.
1010
1010
  Error: ${W(r)}`), new Error(n);
1011
1011
  }
1012
1012
  }, So = (t) => (t == null ? void 0 : t["op-pockyt-3ds-url"]) !== void 0, Po = async (t, r) => {
1013
- const n = Co(r), o = await Xt({ url: n["op-pockyt-3ds-url"], baseUrl: t });
1013
+ const n = Co(r), o = await en({ url: n["op-pockyt-3ds-url"], baseUrl: t });
1014
1014
  return {
1015
1015
  existing_cc: {
1016
- vault_id: tn(o.href ?? ""),
1016
+ vault_id: nn(o.href ?? ""),
1017
1017
  transaction_no: n["op-pockyt-txn-no"],
1018
1018
  reference_no: n["op-pockyt-ref-no"]
1019
1019
  }
@@ -1041,7 +1041,7 @@ Error: ${W(r)}`), new Error(n);
1041
1041
  Error: ${W(r)}`), new Error(n);
1042
1042
  }
1043
1043
  }, To = async (t, r) => {
1044
- const n = Oo(r), o = await Xt({ url: n["op-airwallex-3ds-url"], baseUrl: t }), i = jo(o.href ?? ""), a = n["op-airwallex-initial-intent-id"];
1044
+ const n = Oo(r), o = await en({ url: n["op-airwallex-3ds-url"], baseUrl: t }), i = jo(o.href ?? ""), a = n["op-airwallex-initial-intent-id"];
1045
1045
  if (a !== i) {
1046
1046
  const s = "Unable to process your credit card. Please contact support for assistance.", c = `Intent ID from callback (${i}) does not match the initial intent ID (${a}).`;
1047
1047
  throw ct(c), new Error(s);
@@ -1052,7 +1052,7 @@ Error: ${W(r)}`), new Error(n);
1052
1052
  consent_id: n["op-airwallex-consent-id"]
1053
1053
  }
1054
1054
  };
1055
- }, { log__: E, err__: ft } = O("common-cc"), { log__: ht } = O("stripe-cc");
1055
+ }, { log__: C, err__: ht } = O("common-cc"), { log__: ft } = O("stripe-cc");
1056
1056
  e.array(
1057
1057
  e.object({
1058
1058
  our_existing_pm_id: e.string()
@@ -1067,95 +1067,95 @@ const Ro = _e(
1067
1067
  customParams: i
1068
1068
  }) => {
1069
1069
  var a;
1070
- E("├ Running common CC flow...", { checkoutPaymentMethod: r });
1070
+ C("├ Running common CC flow...", { checkoutPaymentMethod: r });
1071
1071
  const s = t.anyCdeConnection, c = await ne(s);
1072
- E(`├ Validating non-CDE form fields [Mode: ${c.mode}]`);
1073
- const l = fe(n, o.get.onValidationError), u = {
1072
+ C(`├ Validating non-CDE form fields [Mode: ${c.mode}]`);
1073
+ const l = he(n, o.get.onValidationError), u = {
1074
1074
  session_id: t.elementsSessionId,
1075
1075
  checkout_payment_method: r,
1076
1076
  non_cde_form_fields: l,
1077
1077
  extra_metadata: {}
1078
1078
  };
1079
1079
  try {
1080
- E(`├ Tokenizing card info in CDE [Session: ${t.elementsSessionId}]`);
1080
+ C(`├ Tokenizing card info in CDE [Session: ${t.elementsSessionId}]`);
1081
1081
  const d = await eo(i.currentCdeConnections, {
1082
1082
  session_id: t.elementsSessionId
1083
1083
  });
1084
1084
  if (ao(d, o.get.onValidationError), c.mode === "setup") {
1085
- E(`├ Setting up payment method in CDE [Token: ${c.token}]`);
1086
- const m = await to(s, u);
1087
- return E(`╰ Setup completed successfully [PM ID: ${m.payment_method_id}]`), { mode: "setup", result: m };
1085
+ C(`├ Setting up payment method in CDE [Token: ${c.token}]`);
1086
+ const _ = await to(s, u);
1087
+ return C(`╰ Setup completed successfully [PM ID: ${_.payment_method_id}]`), { mode: "setup", result: _ };
1088
1088
  } else {
1089
- E(`├ Initial checkout flow. Checking out card info in CDE [Session: ${t.elementsSessionId}]`);
1090
- const m = await _t(s, u);
1091
- return E("╰ Checkout completed successfully."), { mode: "checkout", result: m };
1089
+ C(`├ Initial checkout flow. Checking out card info in CDE [Session: ${t.elementsSessionId}]`);
1090
+ const _ = await _t(s, u);
1091
+ return C("╰ Checkout completed successfully."), { mode: "checkout", result: _ };
1092
1092
  }
1093
1093
  } catch (d) {
1094
- if (d instanceof Bt && d.originalErrorMessage.includes("3DS_REQUIRED")) {
1095
- E("├ Card requires 3DS, starting non-legacy payment flow"), E("Received 3DS error response headers:", d.response.headers);
1096
- const m = So(d.response.headers);
1097
- if (m) {
1098
- E("├ Pockyt 3DS case detected. Going through Pockyt 3DS flow.");
1099
- const f = await Po(t.baseUrl, d.response.headers);
1100
- u.extra_metadata.pockyt = f;
1094
+ if (d instanceof Jt && d.originalErrorMessage.includes("3DS_REQUIRED")) {
1095
+ C("├ Card requires 3DS, starting non-legacy payment flow"), C("Received 3DS error response headers:", d.response.headers);
1096
+ const _ = So(d.response.headers);
1097
+ if (_) {
1098
+ C("├ Pockyt 3DS case detected. Going through Pockyt 3DS flow.");
1099
+ const h = await Po(t.baseUrl, d.response.headers);
1100
+ u.extra_metadata.pockyt = h;
1101
1101
  }
1102
1102
  if (Io(d.response.headers)) {
1103
- E("├ Airwallex 3DS case detected. Going through Airwallex 3DS flow.");
1104
- const f = await To(t.baseUrl, d.response.headers);
1105
- u.extra_metadata.airwallex = f;
1103
+ C("├ Airwallex 3DS case detected. Going through Airwallex 3DS flow.");
1104
+ const h = await To(t.baseUrl, d.response.headers);
1105
+ u.extra_metadata.airwallex = h;
1106
1106
  }
1107
- const h = await Jr(s, u);
1108
- E("├ Payment flow result:", h);
1109
- const _ = ((a = d.response.headers) == null ? void 0 : a["op-should-use-new-flow"]) !== "true";
1110
- m ? E("├ Pre-start 3DS is successful, other 3DS flows will be skipped.") : _ ? (E("├ Using stripe 3DS flow"), await No(h)) : (E("├ Using common 3DS flow"), await Do(h, t.baseUrl));
1111
- const y = h.cc_pm_id;
1107
+ const b = await Jr(s, u);
1108
+ C("├ Payment flow result:", b);
1109
+ const m = ((a = d.response.headers) == null ? void 0 : a["op-should-use-new-flow"]) !== "true";
1110
+ _ ? C("├ Pre-start 3DS is successful, other 3DS flows will be skipped.") : m ? (C("├ Using stripe 3DS flow"), await No(b)) : (C("├ Using common 3DS flow"), await Do(b, t.baseUrl));
1111
+ const y = b.cc_pm_id;
1112
1112
  if (c.mode === "setup") {
1113
- E(`├ Confirming payment flow [cc_pm_id: ${y}]`);
1114
- const f = await te(s, {
1113
+ C(`├ Confirming payment flow [cc_pm_id: ${y}]`);
1114
+ const h = await te(s, {
1115
1115
  secure_token: c.token,
1116
1116
  existing_cc_pm_id: y
1117
1117
  });
1118
- E("├ Confirm payment flow result received Result:", f);
1119
- const w = st(f);
1120
- return E(`╰ Setup completed successfully [PM ID: ${w.payment_method_id}]`), { mode: "setup", result: w };
1118
+ C("├ Confirm payment flow result received Result:", h);
1119
+ const w = st(h);
1120
+ return C(`╰ Setup completed successfully [PM ID: ${w.payment_method_id}]`), { mode: "setup", result: w };
1121
1121
  } else {
1122
- E(`├ Checking out after 3DS flow [Flow: ${_ ? "legacy" : "new"}]`);
1123
- const f = await _t(s, {
1122
+ C(`├ Checking out after 3DS flow [Flow: ${m ? "legacy" : "new"}]`);
1123
+ const h = await _t(s, {
1124
1124
  ...u,
1125
1125
  existing_cc_pm_id: y,
1126
- do_not_use_legacy_cc_flow: _
1126
+ do_not_use_legacy_cc_flow: m
1127
1127
  });
1128
- return E("╰ Checkout completed successfully."), { mode: "checkout", result: f };
1128
+ return C("╰ Checkout completed successfully."), { mode: "checkout", result: h };
1129
1129
  }
1130
1130
  }
1131
- throw ft("╰ Error checking out card info in CDE"), ft(d), d;
1131
+ throw ht("╰ Error checking out card info in CDE"), ht(d), d;
1132
1132
  }
1133
1133
  }
1134
1134
  ), xo = (t) => {
1135
1135
  const r = t.required_user_actions.find((n) => n.type === "stripe_3ds");
1136
1136
  if (!r)
1137
1137
  throw new Error("No stripe 3DS action found");
1138
- return dr.parse(r);
1138
+ return pr.parse(r);
1139
1139
  }, Mo = (t) => {
1140
1140
  const r = t.required_user_actions.find((n) => n.type === "airwallex_payment_consent");
1141
1141
  if (!r)
1142
1142
  throw new Error("No common 3DS action found");
1143
- return sr.parse(r);
1143
+ return cr.parse(r);
1144
1144
  }, Do = async (t, r) => {
1145
1145
  const n = Mo(t);
1146
1146
  if (n.type === "airwallex_payment_consent" && n.redirect_url === "3DS_COMPLETE") {
1147
- E("├ Airwallex 3DS flow completed successfully");
1147
+ C("├ Airwallex 3DS flow completed successfully");
1148
1148
  return;
1149
1149
  }
1150
- E(`├ Using common 3DS flow [URL: ${n.redirect_url}]`);
1150
+ C(`├ Using common 3DS flow [URL: ${n.redirect_url}]`);
1151
1151
  const { status: o } = await $e({ url: n.redirect_url, baseUrl: r });
1152
- if (E(`╰ 3DS verification completed [Status: ${o}]`), o === q.CANCELLED)
1152
+ if (C(`╰ 3DS verification completed [Status: ${o}]`), o === q.CANCELLED)
1153
1153
  throw new Error("3DS verification cancelled");
1154
1154
  if (o === q.FAILURE)
1155
1155
  throw new Error("3DS verification failed");
1156
1156
  }, No = async (t) => {
1157
1157
  const r = xo(t);
1158
- ht(`├ Using stripe 3DS flow [Client Secret: ${r.client_secret.substring(0, 8)}...]`), await br(r), ht("╰ Stripe 3DS flow completed successfully");
1158
+ ft(`├ Using stripe 3DS flow [Client Secret: ${r.client_secret.substring(0, 8)}...]`), await br(r), ft("╰ Stripe 3DS flow completed successfully");
1159
1159
  }, { log__: R, err__: Lo } = O("stripe-pr"), Uo = e.object({
1160
1160
  provider: e.union([e.literal("apple_pay"), e.literal("google_pay")]),
1161
1161
  processor_name: e.literal("stripe"),
@@ -1169,7 +1169,7 @@ const Ro = _e(
1169
1169
  R("Initializing Stripe PR flow...");
1170
1170
  const n = t.anyCdeConnection, o = await ne(n), i = o.mode === "setup";
1171
1171
  R("Getting initial preview amount");
1172
- const a = await Le(n, o.token, i, void 0), s = await yr(
1172
+ const a = await Le(n, o.token, i, void 0), s = await hr(
1173
1173
  r.metadata.stripe_pk,
1174
1174
  a.amountAtom,
1175
1175
  a.currency,
@@ -1203,26 +1203,26 @@ const Ro = _e(
1203
1203
  R("Overriding PR amount with", y), Vo(c, y.amount, y.pending, y.stripeApplePay);
1204
1204
  }
1205
1205
  R("Showing PR dialog..."), c.show();
1206
- const l = await hr(c);
1206
+ const l = await fr(c);
1207
1207
  R("Stripe PM added event:", l), R("Merging PM fields with form fields...");
1208
- const u = qo(n, l), d = fe(u, o.get.onValidationError);
1208
+ const u = qo(n, l), d = he(u, o.get.onValidationError);
1209
1209
  R("PR dialog finished. Starting payment flow...", d);
1210
- const m = await Wr(s, {
1210
+ const _ = await Wr(s, {
1211
1211
  fields: d,
1212
1212
  checkoutPaymentMethod: r
1213
- }), h = zo(m);
1214
- R("Confirming PR with Stripe..."), await gr(h, l);
1215
- const _ = await ne(s);
1216
- if (_.mode === "setup") {
1213
+ }), b = zo(_);
1214
+ R("Confirming PR with Stripe..."), await gr(b, l);
1215
+ const m = await ne(s);
1216
+ if (m.mode === "setup") {
1217
1217
  R("Confirming payment flow for setup...");
1218
1218
  const y = await te(s, {
1219
- secure_token: _.token
1219
+ secure_token: m.token
1220
1220
  });
1221
1221
  return { mode: "setup", result: st(y) };
1222
1222
  } else {
1223
1223
  R("Performing checkout...");
1224
1224
  const y = {
1225
- secure_token: _.token,
1225
+ secure_token: m.token,
1226
1226
  payment_input: {
1227
1227
  provider_type: r.provider
1228
1228
  },
@@ -1232,8 +1232,8 @@ const Ro = _e(
1232
1232
  customer_zip_code: d[p.ZIP_CODE],
1233
1233
  customer_country: d[p.COUNTRY],
1234
1234
  promotion_code: d[p.PROMOTION_CODE],
1235
- line_items: _.line_items,
1236
- total_amount_atom: _.amount_total_atom,
1235
+ line_items: m.line_items,
1236
+ total_amount_atom: m.amount_total_atom,
1237
1237
  cancel_at_end: !1,
1238
1238
  checkout_payment_method: r
1239
1239
  };
@@ -1242,8 +1242,8 @@ const Ro = _e(
1242
1242
  }
1243
1243
  ), qo = (t, r) => {
1244
1244
  var n, o, i, a;
1245
- const s = { ...t }, [c, ...l] = ((o = (n = r.payerName) == null ? void 0 : n.trim()) == null ? void 0 : o.split(/\s+/)) ?? [], u = l.join(" ") || void 0, d = (a = (i = r.paymentMethod) == null ? void 0 : i.billing_details) == null ? void 0 : a.address, m = r.shippingAddress;
1246
- return s[p.FIRST_NAME] = s[p.FIRST_NAME] || c || "_OP_UNKNOWN", s[p.LAST_NAME] = s[p.LAST_NAME] || u || "_OP_UNKNOWN", s[p.EMAIL] = s[p.EMAIL] || r.payerEmail || "op_unfilled@getopenpay.com", s[p.ZIP_CODE] = s[p.ZIP_CODE] || (d == null ? void 0 : d.postal_code) || (m == null ? void 0 : m.postalCode) || "00000", s[p.COUNTRY] = s[p.COUNTRY] || (d == null ? void 0 : d.country) || (m == null ? void 0 : m.country) || "US", R("Final form inputs:", s), s;
1245
+ const s = { ...t }, [c, ...l] = ((o = (n = r.payerName) == null ? void 0 : n.trim()) == null ? void 0 : o.split(/\s+/)) ?? [], u = l.join(" ") || void 0, d = (a = (i = r.paymentMethod) == null ? void 0 : i.billing_details) == null ? void 0 : a.address, _ = r.shippingAddress;
1246
+ return s[p.FIRST_NAME] = s[p.FIRST_NAME] || c || "_OP_UNKNOWN", s[p.LAST_NAME] = s[p.LAST_NAME] || u || "_OP_UNKNOWN", s[p.EMAIL] = s[p.EMAIL] || r.payerEmail || "op_unfilled@getopenpay.com", s[p.ZIP_CODE] = s[p.ZIP_CODE] || (d == null ? void 0 : d.postal_code) || (_ == null ? void 0 : _.postalCode) || "00000", s[p.COUNTRY] = s[p.COUNTRY] || (d == null ? void 0 : d.country) || (_ == null ? void 0 : _.country) || "US", R("Final form inputs:", s), s;
1247
1247
  }, Vo = (t, r, n, o) => {
1248
1248
  t.update({
1249
1249
  total: {
@@ -1258,7 +1258,7 @@ const Ro = _e(
1258
1258
  if (t.required_user_actions.length !== 1)
1259
1259
  throw new Error(`Error occurred.
1260
1260
  Details: got ${t.required_user_actions.length} required user actions`);
1261
- return pr.parse(t.required_user_actions[0]);
1261
+ return mr.parse(t.required_user_actions[0]);
1262
1262
  }, { log__: Z, err__: gt } = O("pockyt-paypal"), Yo = e.object({
1263
1263
  processor_name: e.literal("pockyt"),
1264
1264
  provider: e.literal("paypal")
@@ -1275,61 +1275,69 @@ Details: got ${t.required_user_actions.length} required user actions`);
1275
1275
  formCallbacks: o,
1276
1276
  customParams: i
1277
1277
  }) => {
1278
+ var a, s;
1278
1279
  Z("Running Pockyt Paypal flow...");
1279
- const a = t.anyCdeConnection, s = await ne(a);
1280
+ const c = t.anyCdeConnection, l = await ne(c);
1280
1281
  Z("Verifying CPM...");
1281
- const c = Yo.parse(r);
1282
+ const u = Yo.parse(r);
1282
1283
  Z("├ Validating non-CDE form fields");
1283
- const l = i == null ? void 0 : i.settings, u = fe(
1284
+ const d = i == null ? void 0 : i.settings, _ = he(
1284
1285
  n,
1285
1286
  o.get.onValidationError,
1286
- l == null ? void 0 : l.defaultFieldValues
1287
- ), d = io(u);
1288
- Z(`Starting payment flow... Mode: ${s.mode}`);
1289
- const m = s.mode !== "setup", h = await Ne(a, {
1290
- payment_provider: c.provider,
1291
- checkout_payment_method: c,
1287
+ d == null ? void 0 : d.defaultFieldValues
1288
+ ), b = io(_);
1289
+ Z(`Starting payment flow... Mode: ${l.mode}`);
1290
+ const m = l.mode !== "setup", y = await Ne(c, {
1291
+ payment_provider: u.provider,
1292
+ checkout_payment_method: u,
1292
1293
  use_pay_first_flow: m,
1293
1294
  pay_first_flow_cart_info: m ? {
1294
1295
  // TODO add coupon and cart adjusted line items later
1295
- line_items: s.line_items,
1296
- displayed_total_amount_atom: s.amount_total_atom
1296
+ line_items: l.line_items,
1297
+ displayed_total_amount_atom: l.amount_total_atom
1297
1298
  } : void 0,
1298
- ...d
1299
- });
1300
- if (Z("Start payment flow response", h), !h.checkout_attempt_id)
1301
- throw gt("Checkout attempt ID not found in response:", h), new Error("An error occurred during checkout, please try again with another payment method.");
1302
- const _ = Ho.parse(h.required_user_actions)[0];
1303
- Z("Opening paypal iframe...");
1304
- const y = await wo(
1305
- "PayPal",
1306
- a,
1307
- _.verify_token,
1308
- _.paypal_iframe_url
1309
- );
1310
- Z("Paypal flow result", y);
1311
- const f = tn(y.href);
1312
- Z(`Confirming payment flow using vault ID ${f}`);
1313
- const w = await te(a, {
1314
- secure_token: s.token,
1315
- their_pm_id: f,
1316
- checkout_attempt_id: m ? h.checkout_attempt_id : void 0
1299
+ processor_specific_metadata: {
1300
+ use_paypal_redirect_flow: !!((a = i == null ? void 0 : i.settings) != null && a.useRedirectFlow)
1301
+ },
1302
+ ...b
1317
1303
  });
1318
- if (Z("Confirm payment flow result", w), s.mode === "setup")
1304
+ if (Z("Start payment flow response", y), !y.checkout_attempt_id)
1305
+ throw gt("Checkout attempt ID not found in response:", y), new Error("An error occurred during checkout, please try again with another payment method.");
1306
+ const h = Ho.parse(y.required_user_actions)[0];
1307
+ if ((s = i == null ? void 0 : i.settings) != null && s.useRedirectFlow)
1308
+ throw window.location.href = h.paypal_iframe_url, await zt(20 * 1e3), new Error("Paypal flow timed out, please try again with another payment method.");
1309
+ {
1310
+ Z("Opening paypal iframe...");
1311
+ const w = await wo(
1312
+ "PayPal",
1313
+ c,
1314
+ h.verify_token,
1315
+ h.paypal_iframe_url
1316
+ );
1317
+ Z("Paypal flow result", w);
1318
+ const v = nn(w.href);
1319
+ Z(`Confirming payment flow using vault ID ${v}`);
1320
+ const E = await te(c, {
1321
+ secure_token: l.token,
1322
+ their_pm_id: v,
1323
+ checkout_attempt_id: m ? y.checkout_attempt_id : void 0
1324
+ });
1325
+ if (Z("Confirm payment flow result", E), l.mode === "setup")
1326
+ return {
1327
+ mode: "setup",
1328
+ result: {
1329
+ payment_method_id: E.payment_methods[0].id
1330
+ }
1331
+ };
1332
+ if (!E.pay_first_success_response)
1333
+ throw gt("Checkout failed, no pay-first success response:", E), new Error("Checkout failed, please try again with another payment method.");
1319
1334
  return {
1320
- mode: "setup",
1321
- result: {
1322
- payment_method_id: w.payment_methods[0].id
1323
- }
1335
+ mode: "checkout",
1336
+ result: E.pay_first_success_response
1324
1337
  };
1325
- if (!w.pay_first_success_response)
1326
- throw gt("Checkout failed, no pay-first success response:", w), new Error("Checkout failed, please try again with another payment method.");
1327
- return {
1328
- mode: "checkout",
1329
- result: w.pay_first_success_response
1330
- };
1338
+ }
1331
1339
  }
1332
- ), nn = ({
1340
+ ), rn = ({
1333
1341
  gateway: t,
1334
1342
  gatewayMerchantId: r,
1335
1343
  merchantName: n,
@@ -1338,7 +1346,7 @@ Details: got ${t.required_user_actions.length} required user actions`);
1338
1346
  overridePaymentRequest: a
1339
1347
  }) => {
1340
1348
  var s, c;
1341
- const l = ((s = a == null ? void 0 : a.amount) == null ? void 0 : s.amountAtom) ?? (i == null ? void 0 : i.amountAtom) ?? 0, u = Math.max(l / 100, 0), d = (((c = a == null ? void 0 : a.amount) == null ? void 0 : c.currency) ?? (i == null ? void 0 : i.currency) ?? "USD").toUpperCase(), m = {
1349
+ const l = ((s = a == null ? void 0 : a.amount) == null ? void 0 : s.amountAtom) ?? (i == null ? void 0 : i.amountAtom) ?? 0, u = Math.max(l / 100, 0), d = (((c = a == null ? void 0 : a.amount) == null ? void 0 : c.currency) ?? (i == null ? void 0 : i.currency) ?? "USD").toUpperCase(), _ = {
1342
1350
  apiVersion: 2,
1343
1351
  apiVersionMinor: 0,
1344
1352
  allowedPaymentMethods: [
@@ -1378,7 +1386,7 @@ Details: got ${t.required_user_actions.length} required user actions`);
1378
1386
  totalPrice: u.toFixed(2)
1379
1387
  }
1380
1388
  };
1381
- return a != null && a.googlePayPaymentRequest ? { ...m, ...a.googlePayPaymentRequest } : m;
1389
+ return a != null && a.googlePayPaymentRequest ? { ..._, ...a.googlePayPaymentRequest } : _;
1382
1390
  }, Go = () => new Promise((t, r) => {
1383
1391
  const n = document.createElement("script");
1384
1392
  n.src = "https://pay.google.com/gp/p/js/pay.js", n.async = !0, n.onload = () => t(), n.onerror = () => r(new Error("Failed to load Google Pay SDK")), document.body.appendChild(n);
@@ -1395,13 +1403,13 @@ Details: got ${t.required_user_actions.length} required user actions`);
1395
1403
  return s;
1396
1404
  }, { log__: N, err__: se } = O("awx-google-pay");
1397
1405
  let Ze = null;
1398
- const rn = (t) => t === Lt || t === window.location.origin ? "PRODUCTION" : "TEST", on = (t, r) => {
1399
- const n = rn(t);
1406
+ const on = (t) => t === Lt || t === window.location.origin ? "PRODUCTION" : "TEST", an = (t, r) => {
1407
+ const n = on(t);
1400
1408
  return Ze === null && (Ze = new window.google.payments.api.PaymentsClient({
1401
1409
  environment: n,
1402
1410
  merchantInfo: r.merchantInfo
1403
1411
  })), Ze;
1404
- }, an = e.object({
1412
+ }, sn = e.object({
1405
1413
  provider: e.literal("google_pay"),
1406
1414
  processor_name: e.literal("airwallex"),
1407
1415
  metadata: e.object({
@@ -1412,7 +1420,7 @@ const rn = (t) => t === Lt || t === window.location.origin ? "PRODUCTION" : "TES
1412
1420
  }), Jo = Fe(
1413
1421
  async ({ context: t, formCallbacks: r }) => {
1414
1422
  var n, o;
1415
- const i = ye(t.checkoutPaymentMethods, an);
1423
+ const i = ye(t.checkoutPaymentMethods, sn);
1416
1424
  if (!i)
1417
1425
  return { isAvailable: !1, isLoading: !1, startFlow: async () => {
1418
1426
  } };
@@ -1424,18 +1432,18 @@ const rn = (t) => t === Lt || t === window.location.origin ? "PRODUCTION" : "TES
1424
1432
  if (N("Loading Google Pay SDK..."), await Go(), !((o = (n = window.google) == null ? void 0 : n.payments) != null && o.api))
1425
1433
  return se("Google Pay SDK not loaded properly"), { isAvailable: !1, isLoading: !1, startFlow: async () => {
1426
1434
  } };
1427
- if (rn(t.baseUrl) === "PRODUCTION" && !a.google_pay_merchant_id)
1435
+ if (on(t.baseUrl) === "PRODUCTION" && !a.google_pay_merchant_id)
1428
1436
  return se("Google Pay merchant ID is required for production environment"), { isAvailable: !1, isLoading: !1, startFlow: async () => {
1429
1437
  } };
1430
1438
  N("Google Pay SDK loaded", window.google.payments);
1431
1439
  try {
1432
- const s = nn({
1440
+ const s = rn({
1433
1441
  gateway: "airwallex",
1434
1442
  gatewayMerchantId: a.processor_account_id,
1435
1443
  merchantName: a.processor_account_name,
1436
1444
  merchantId: a.google_pay_merchant_id ?? "",
1437
1445
  initialPreview: void 0
1438
- }), { result: c } = await on(t.baseUrl, s).isReadyToPay(
1446
+ }), { result: c } = await an(t.baseUrl, s).isReadyToPay(
1439
1447
  s
1440
1448
  );
1441
1449
  if (!c)
@@ -1472,35 +1480,35 @@ const rn = (t) => t === Lt || t === window.location.origin ? "PRODUCTION" : "TES
1472
1480
  formCallbacks: o,
1473
1481
  customParams: i
1474
1482
  }) => {
1475
- var a, s, c, l, u, d, m;
1483
+ var a, s, c, l, u, d, _;
1476
1484
  N("Starting Google Pay flow...");
1477
- const h = ye(t.checkoutPaymentMethods, an), _ = t.anyCdeConnection, y = await ne(_), f = h.metadata;
1478
- if (!f.processor_account_id)
1485
+ const b = ye(t.checkoutPaymentMethods, sn), m = t.anyCdeConnection, y = await ne(m), h = b.metadata;
1486
+ if (!h.processor_account_id)
1479
1487
  throw new Error("No gateway merchant ID found in processor account");
1480
- const w = nn({
1488
+ const w = rn({
1481
1489
  gateway: "airwallex",
1482
- gatewayMerchantId: f.processor_account_id,
1483
- merchantName: f.processor_account_name,
1484
- merchantId: f.google_pay_merchant_id ?? "",
1490
+ gatewayMerchantId: h.processor_account_id,
1491
+ merchantName: h.processor_account_name,
1492
+ merchantId: h.google_pay_merchant_id ?? "",
1485
1493
  initialPreview: await Le(
1486
- _,
1494
+ m,
1487
1495
  y.token,
1488
1496
  y.mode === "setup",
1489
1497
  void 0
1490
1498
  ),
1491
1499
  overridePaymentRequest: i == null ? void 0 : i.overridePaymentRequest
1492
- }), v = on(t.baseUrl, w);
1500
+ }), v = an(t.baseUrl, w);
1493
1501
  try {
1494
- const P = await v.loadPaymentData(w);
1495
- N("Google Pay Payment data", P);
1496
- const X = Bo(n, P), T = fe(
1502
+ const E = await v.loadPaymentData(w);
1503
+ N("Google Pay Payment data", E);
1504
+ const X = Bo(n, E), T = he(
1497
1505
  X,
1498
1506
  o.get.onValidationError,
1499
1507
  i == null ? void 0 : i.defaultFieldValues
1500
- ), ge = (s = (a = P.paymentMethodData) == null ? void 0 : a.tokenizationData) == null ? void 0 : s.token;
1508
+ ), ge = (s = (a = E.paymentMethodData) == null ? void 0 : a.tokenizationData) == null ? void 0 : s.token;
1501
1509
  if (!ge)
1502
1510
  throw new Error("No payment token received from Google Pay");
1503
- const He = await Ne(_, {
1511
+ const He = await Ne(m, {
1504
1512
  payment_provider: r.provider,
1505
1513
  checkout_payment_method: r,
1506
1514
  new_customer_email: T[p.EMAIL],
@@ -1512,7 +1520,7 @@ const rn = (t) => t === Lt || t === window.location.origin ? "PRODUCTION" : "TES
1512
1520
  }
1513
1521
  }), K = Zo(He);
1514
1522
  N("Start flow next actions", K);
1515
- const G = await te(_, {
1523
+ const G = await te(m, {
1516
1524
  secure_token: y.token,
1517
1525
  processor_specific_metadata: {
1518
1526
  payment_provider: r.provider,
@@ -1544,7 +1552,7 @@ const rn = (t) => t === Lt || t === window.location.origin ? "PRODUCTION" : "TES
1544
1552
  throw new Error("3DS verification failed");
1545
1553
  }
1546
1554
  if (oe && !be) {
1547
- const Y = await te(_, {
1555
+ const Y = await te(m, {
1548
1556
  secure_token: y.token,
1549
1557
  their_pm_id: oe.their_pm_id,
1550
1558
  processor_specific_metadata: {
@@ -1552,7 +1560,7 @@ const rn = (t) => t === Lt || t === window.location.origin ? "PRODUCTION" : "TES
1552
1560
  airwallex_consent_id: oe.consent_id
1553
1561
  }
1554
1562
  });
1555
- N("[2nd] Confirm payment flow response", Y), be = (m = (d = Y.payment_methods) == null ? void 0 : d[0]) == null ? void 0 : m.id;
1563
+ N("[2nd] Confirm payment flow response", Y), be = (_ = (d = Y.payment_methods) == null ? void 0 : d[0]) == null ? void 0 : _.id;
1556
1564
  }
1557
1565
  if (!be)
1558
1566
  throw new Error("No PM ID found");
@@ -1578,10 +1586,10 @@ const rn = (t) => t === Lt || t === window.location.origin ? "PRODUCTION" : "TES
1578
1586
  customer_first_name: T[p.FIRST_NAME],
1579
1587
  customer_last_name: T[p.LAST_NAME]
1580
1588
  };
1581
- return { mode: "checkout", result: await Ue(_, Y) };
1589
+ return { mode: "checkout", result: await Ue(m, Y) };
1582
1590
  }
1583
- } catch (P) {
1584
- throw se("Google Pay payment error", P), new Error((P == null ? void 0 : P.message) ?? "Unknown error");
1591
+ } catch (E) {
1592
+ throw se("Google Pay payment error", E), new Error((E == null ? void 0 : E.message) ?? "Unknown error");
1585
1593
  }
1586
1594
  }
1587
1595
  ), Qo = () => new Promise((t, r) => {
@@ -1683,7 +1691,7 @@ async function ii(t, r, n) {
1683
1691
  async function ai(t, r, n) {
1684
1692
  var o, i, a;
1685
1693
  try {
1686
- const s = t.payment, c = Xo(r.nonCdeFormInputs, s), l = fe(
1694
+ const s = t.payment, c = Xo(r.nonCdeFormInputs, s), l = he(
1687
1695
  c,
1688
1696
  r.formCallbacks.get.onValidationError,
1689
1697
  r.defaultFieldValues
@@ -1712,15 +1720,15 @@ async function ai(t, r, n) {
1712
1720
  });
1713
1721
  ke("[1st] Confirm payment flow response", u);
1714
1722
  let d = (i = (o = u.payment_methods) == null ? void 0 : o[0]) == null ? void 0 : i.id;
1715
- const m = (a = u.required_user_actions) == null ? void 0 : a.find(
1716
- (_) => _.type === "airwallex_payment_consent"
1723
+ const _ = (a = u.required_user_actions) == null ? void 0 : a.find(
1724
+ (m) => m.type === "airwallex_payment_consent"
1717
1725
  );
1718
- if (m != null && m.redirect_url && m.consent_id && m.their_pm_id && (d = await oi(m, r)), !d)
1726
+ if (_ != null && _.redirect_url && _.consent_id && _.their_pm_id && (d = await oi(_, r)), !d)
1719
1727
  throw new Error("No PM ID found");
1720
- const h = {
1728
+ const b = {
1721
1729
  status: ApplePaySession.STATUS_SUCCESS
1722
1730
  };
1723
- return r.session.completePayment(h), r.isSetupMode ? { mode: "setup", result: { payment_method_id: d } } : await ii(d, l, r);
1731
+ return r.session.completePayment(b), r.isSetupMode ? { mode: "setup", result: { payment_method_id: d } } : await ii(d, l, r);
1724
1732
  } catch (s) {
1725
1733
  const c = {
1726
1734
  status: ApplePaySession.STATUS_FAILURE
@@ -1728,7 +1736,7 @@ async function ai(t, r, n) {
1728
1736
  throw r.session.completePayment(c), s;
1729
1737
  }
1730
1738
  }
1731
- const { log__: J, err__: Xe } = O("awx-apple-pay"), sn = e.object({
1739
+ const { log__: J, err__: Xe } = O("awx-apple-pay"), cn = e.object({
1732
1740
  provider: e.literal("apple_pay"),
1733
1741
  processor_name: e.literal("airwallex"),
1734
1742
  metadata: e.object({
@@ -1737,7 +1745,7 @@ const { log__: J, err__: Xe } = O("awx-apple-pay"), sn = e.object({
1737
1745
  })
1738
1746
  }), si = Fe(
1739
1747
  async ({ context: t, formCallbacks: r }) => {
1740
- const n = ye(t.checkoutPaymentMethods, sn);
1748
+ const n = ye(t.checkoutPaymentMethods, cn);
1741
1749
  if (!n)
1742
1750
  return { isAvailable: !1, isLoading: !1, startFlow: async () => {
1743
1751
  } };
@@ -1791,13 +1799,13 @@ const { log__: J, err__: Xe } = O("awx-apple-pay"), sn = e.object({
1791
1799
  formCallbacks: i
1792
1800
  }) => {
1793
1801
  var a, s;
1794
- const c = ye(t.checkoutPaymentMethods, sn), { initialPreview: l, isSetupMode: u, prefill: d, overridePaymentRequest: m } = o, h = (((a = m == null ? void 0 : m.amount) == null ? void 0 : a.currency) ?? l.currency ?? "USD").toUpperCase(), _ = ((((s = m == null ? void 0 : m.amount) == null ? void 0 : s.amountAtom) ?? l.amountAtom ?? 0) / 100).toFixed(2), y = {
1795
- label: (m == null ? void 0 : m.label) ?? "Total",
1796
- type: m != null && m.pending ? "pending" : "final",
1797
- amount: _
1798
- }, f = {
1802
+ const c = ye(t.checkoutPaymentMethods, cn), { initialPreview: l, isSetupMode: u, prefill: d, overridePaymentRequest: _ } = o, b = (((a = _ == null ? void 0 : _.amount) == null ? void 0 : a.currency) ?? l.currency ?? "USD").toUpperCase(), m = ((((s = _ == null ? void 0 : _.amount) == null ? void 0 : s.amountAtom) ?? l.amountAtom ?? 0) / 100).toFixed(2), y = {
1803
+ label: (_ == null ? void 0 : _.label) ?? "Total",
1804
+ type: _ != null && _.pending ? "pending" : "final",
1805
+ amount: m
1806
+ }, h = {
1799
1807
  countryCode: "US",
1800
- currencyCode: h,
1808
+ currencyCode: b,
1801
1809
  requiredBillingContactFields: ["email", "postalAddress", "name"],
1802
1810
  requiredShippingContactFields: ["email"],
1803
1811
  supportedNetworks: ["visa", "masterCard", "amex", "discover"],
@@ -1808,10 +1816,10 @@ const { log__: J, err__: Xe } = O("awx-apple-pay"), sn = e.object({
1808
1816
  "supportsEMV"
1809
1817
  ],
1810
1818
  total: y,
1811
- ...(m == null ? void 0 : m.applePayPaymentRequest) ?? {}
1819
+ ...(_ == null ? void 0 : _.applePayPaymentRequest) ?? {}
1812
1820
  };
1813
- J("Payment Request", f);
1814
- const w = new ApplePaySession(3, f);
1821
+ J("Payment Request", h);
1822
+ const w = new ApplePaySession(3, h);
1815
1823
  J("ApplePaySession", w);
1816
1824
  const v = {
1817
1825
  session: w,
@@ -1825,14 +1833,14 @@ const { log__: J, err__: Xe } = O("awx-apple-pay"), sn = e.object({
1825
1833
  formCallbacks: i,
1826
1834
  defaultFieldValues: o == null ? void 0 : o.defaultFieldValues
1827
1835
  };
1828
- let P;
1836
+ let E;
1829
1837
  return new Promise((X, T) => {
1830
1838
  const ge = () => {
1831
1839
  J("Payment cancelled by user"), T(new Error("Payment cancelled by user"));
1832
1840
  }, { cleanupCancelListener: He } = ni(ge);
1833
1841
  w.oncancel = ge, w.onvalidatemerchant = async (K) => {
1834
1842
  try {
1835
- P = await ri(K, v);
1843
+ E = await ri(K, v);
1836
1844
  } catch (G) {
1837
1845
  T(G);
1838
1846
  }
@@ -1843,7 +1851,7 @@ const { log__: J, err__: Xe } = O("awx-apple-pay"), sn = e.object({
1843
1851
  w.completePaymentMethodSelection(K);
1844
1852
  }, w.onpaymentauthorized = async (K) => {
1845
1853
  try {
1846
- const G = await ai(K, v, P);
1854
+ const G = await ai(K, v, E);
1847
1855
  He(), X(G);
1848
1856
  } catch (G) {
1849
1857
  T(G);
@@ -1922,15 +1930,15 @@ function li(t, r, n, o) {
1922
1930
  function c(d) {
1923
1931
  try {
1924
1932
  u(o.next(d));
1925
- } catch (m) {
1926
- s(m);
1933
+ } catch (_) {
1934
+ s(_);
1927
1935
  }
1928
1936
  }
1929
1937
  function l(d) {
1930
1938
  try {
1931
1939
  u(o.throw(d));
1932
- } catch (m) {
1933
- s(m);
1940
+ } catch (_) {
1941
+ s(_);
1934
1942
  }
1935
1943
  }
1936
1944
  function u(d) {
@@ -1939,7 +1947,7 @@ function li(t, r, n, o) {
1939
1947
  u((o = o.apply(t, [])).next());
1940
1948
  });
1941
1949
  }
1942
- function cn(t, r) {
1950
+ function ln(t, r) {
1943
1951
  var n = { label: 0, sent: function() {
1944
1952
  if (a[0] & 1) throw a[1];
1945
1953
  return a[1];
@@ -2040,36 +2048,36 @@ function ui(t, r, n) {
2040
2048
  return i = Object.create((typeof AsyncIterator == "function" ? AsyncIterator : Object).prototype), c("next"), c("throw"), c("return", s), i[Symbol.asyncIterator] = function() {
2041
2049
  return this;
2042
2050
  }, i;
2043
- function s(_) {
2051
+ function s(m) {
2044
2052
  return function(y) {
2045
- return Promise.resolve(y).then(_, m);
2053
+ return Promise.resolve(y).then(m, _);
2046
2054
  };
2047
2055
  }
2048
- function c(_, y) {
2049
- o[_] && (i[_] = function(f) {
2056
+ function c(m, y) {
2057
+ o[m] && (i[m] = function(h) {
2050
2058
  return new Promise(function(w, v) {
2051
- a.push([_, f, w, v]) > 1 || l(_, f);
2059
+ a.push([m, h, w, v]) > 1 || l(m, h);
2052
2060
  });
2053
- }, y && (i[_] = y(i[_])));
2061
+ }, y && (i[m] = y(i[m])));
2054
2062
  }
2055
- function l(_, y) {
2063
+ function l(m, y) {
2056
2064
  try {
2057
- u(o[_](y));
2058
- } catch (f) {
2059
- h(a[0][3], f);
2065
+ u(o[m](y));
2066
+ } catch (h) {
2067
+ b(a[0][3], h);
2060
2068
  }
2061
2069
  }
2062
- function u(_) {
2063
- _.value instanceof de ? Promise.resolve(_.value.v).then(d, m) : h(a[0][2], _);
2070
+ function u(m) {
2071
+ m.value instanceof de ? Promise.resolve(m.value.v).then(d, _) : b(a[0][2], m);
2064
2072
  }
2065
- function d(_) {
2066
- l("next", _);
2073
+ function d(m) {
2074
+ l("next", m);
2067
2075
  }
2068
- function m(_) {
2069
- l("throw", _);
2076
+ function _(m) {
2077
+ l("throw", m);
2070
2078
  }
2071
- function h(_, y) {
2072
- _(y), a.shift(), a.length && l(a[0][0], a[0][1]);
2079
+ function b(m, y) {
2080
+ m(y), a.shift(), a.length && l(a[0][0], a[0][1]);
2073
2081
  }
2074
2082
  }
2075
2083
  function di(t) {
@@ -2131,8 +2139,8 @@ var Ee = function() {
2131
2139
  var u = l.value;
2132
2140
  u.remove(this);
2133
2141
  }
2134
- } catch (f) {
2135
- r = { error: f };
2142
+ } catch (h) {
2143
+ r = { error: h };
2136
2144
  } finally {
2137
2145
  try {
2138
2146
  l && !l.done && (n = c.return) && n.call(c);
@@ -2146,26 +2154,26 @@ var Ee = function() {
2146
2154
  if (A(d))
2147
2155
  try {
2148
2156
  d();
2149
- } catch (f) {
2150
- a = f instanceof Be ? f.errors : [f];
2157
+ } catch (h) {
2158
+ a = h instanceof Be ? h.errors : [h];
2151
2159
  }
2152
- var m = this._finalizers;
2153
- if (m) {
2160
+ var _ = this._finalizers;
2161
+ if (_) {
2154
2162
  this._finalizers = null;
2155
2163
  try {
2156
- for (var h = me(m), _ = h.next(); !_.done; _ = h.next()) {
2157
- var y = _.value;
2164
+ for (var b = me(_), m = b.next(); !m.done; m = b.next()) {
2165
+ var y = m.value;
2158
2166
  try {
2159
2167
  bt(y);
2160
- } catch (f) {
2161
- a = a ?? [], f instanceof Be ? a = Te(Te([], je(a)), je(f.errors)) : a.push(f);
2168
+ } catch (h) {
2169
+ a = a ?? [], h instanceof Be ? a = Te(Te([], je(a)), je(h.errors)) : a.push(h);
2162
2170
  }
2163
2171
  }
2164
- } catch (f) {
2165
- o = { error: f };
2172
+ } catch (h) {
2173
+ o = { error: h };
2166
2174
  } finally {
2167
2175
  try {
2168
- _ && !_.done && (i = h.return) && i.call(h);
2176
+ m && !m.done && (i = b.return) && i.call(b);
2169
2177
  } finally {
2170
2178
  if (o) throw o.error;
2171
2179
  }
@@ -2203,14 +2211,14 @@ var Ee = function() {
2203
2211
  var r = new t();
2204
2212
  return r.closed = !0, r;
2205
2213
  }(), t;
2206
- }(), ln = Ee.EMPTY;
2207
- function un(t) {
2214
+ }(), un = Ee.EMPTY;
2215
+ function dn(t) {
2208
2216
  return t instanceof Ee || t && "closed" in t && A(t.remove) && A(t.add) && A(t.unsubscribe);
2209
2217
  }
2210
2218
  function bt(t) {
2211
2219
  A(t) ? t() : t.unsubscribe();
2212
2220
  }
2213
- var dn = {
2221
+ var pn = {
2214
2222
  onUnhandledError: null,
2215
2223
  onStoppedNotification: null,
2216
2224
  Promise: void 0,
@@ -2227,7 +2235,7 @@ var dn = {
2227
2235
  },
2228
2236
  delegate: void 0
2229
2237
  };
2230
- function pn(t) {
2238
+ function mn(t) {
2231
2239
  pi.setTimeout(function() {
2232
2240
  throw t;
2233
2241
  });
@@ -2241,7 +2249,7 @@ var lt = function(t) {
2241
2249
  re(r, t);
2242
2250
  function r(n) {
2243
2251
  var o = t.call(this) || this;
2244
- return o.isStopped = !1, n ? (o.destination = n, un(n) && n.add(o)) : o.destination = fi, o;
2252
+ return o.isStopped = !1, n ? (o.destination = n, dn(n) && n.add(o)) : o.destination = hi, o;
2245
2253
  }
2246
2254
  return r.create = function(n, o, i) {
2247
2255
  return new nt(n, o, i);
@@ -2315,7 +2323,7 @@ var _i = function() {
2315
2323
  };
2316
2324
  else {
2317
2325
  var c;
2318
- a && dn.useDeprecatedNextContext ? (c = Object.create(n), c.unsubscribe = function() {
2326
+ a && pn.useDeprecatedNextContext ? (c = Object.create(n), c.unsubscribe = function() {
2319
2327
  return a.unsubscribe();
2320
2328
  }, s = {
2321
2329
  next: n.next && Je(n.next, c),
@@ -2328,12 +2336,12 @@ var _i = function() {
2328
2336
  return r;
2329
2337
  }(lt);
2330
2338
  function Se(t) {
2331
- pn(t);
2339
+ mn(t);
2332
2340
  }
2333
2341
  function yi(t) {
2334
2342
  throw t;
2335
2343
  }
2336
- var fi = {
2344
+ var hi = {
2337
2345
  closed: !0,
2338
2346
  next: wt,
2339
2347
  error: yi,
@@ -2341,11 +2349,11 @@ var fi = {
2341
2349
  }, ut = function() {
2342
2350
  return typeof Symbol == "function" && Symbol.observable || "@@observable";
2343
2351
  }();
2344
- function hi(t) {
2352
+ function fi(t) {
2345
2353
  return t;
2346
2354
  }
2347
2355
  function gi(t) {
2348
- return t.length === 0 ? hi : t.length === 1 ? t[0] : function(r) {
2356
+ return t.length === 0 ? fi : t.length === 1 ? t[0] : function(r) {
2349
2357
  return t.reduce(function(n, o) {
2350
2358
  return o(n);
2351
2359
  }, r);
@@ -2413,13 +2421,13 @@ var Q = function() {
2413
2421
  }();
2414
2422
  function vt(t) {
2415
2423
  var r;
2416
- return (r = t ?? dn.Promise) !== null && r !== void 0 ? r : Promise;
2424
+ return (r = t ?? pn.Promise) !== null && r !== void 0 ? r : Promise;
2417
2425
  }
2418
2426
  function bi(t) {
2419
2427
  return t && A(t.next) && A(t.error) && A(t.complete);
2420
2428
  }
2421
2429
  function wi(t) {
2422
- return t && t instanceof lt || bi(t) && un(t);
2430
+ return t && t instanceof lt || bi(t) && dn(t);
2423
2431
  }
2424
2432
  function vi(t) {
2425
2433
  return A(t == null ? void 0 : t.lift);
@@ -2479,7 +2487,7 @@ var Si = function(t) {
2479
2487
  return function() {
2480
2488
  t(this), this.name = "ObjectUnsubscribedError", this.message = "object unsubscribed";
2481
2489
  };
2482
- }), mn = function(t) {
2490
+ }), _n = function(t) {
2483
2491
  re(r, t);
2484
2492
  function r() {
2485
2493
  var n = t.call(this) || this;
@@ -2546,7 +2554,7 @@ var Si = function(t) {
2546
2554
  return this._throwIfClosed(), this._checkFinalizedStatuses(n), this._innerSubscribe(n);
2547
2555
  }, r.prototype._innerSubscribe = function(n) {
2548
2556
  var o = this, i = this, a = i.hasError, s = i.isStopped, c = i.observers;
2549
- return a || s ? ln : (this.currentObservers = null, c.push(n), new Ee(function() {
2557
+ return a || s ? un : (this.currentObservers = null, c.push(n), new Ee(function() {
2550
2558
  o.currentObservers = null, Re(c, n);
2551
2559
  }));
2552
2560
  }, r.prototype._checkFinalizedStatuses = function(n) {
@@ -2575,9 +2583,9 @@ var Si = function(t) {
2575
2583
  (o = (n = this.destination) === null || n === void 0 ? void 0 : n.complete) === null || o === void 0 || o.call(n);
2576
2584
  }, r.prototype._subscribe = function(n) {
2577
2585
  var o, i;
2578
- return (i = (o = this.source) === null || o === void 0 ? void 0 : o.subscribe(n)) !== null && i !== void 0 ? i : ln;
2586
+ return (i = (o = this.source) === null || o === void 0 ? void 0 : o.subscribe(n)) !== null && i !== void 0 ? i : un;
2579
2587
  }, r;
2580
- }(mn), ki = {
2588
+ }(_n), ki = {
2581
2589
  now: function() {
2582
2590
  return Date.now();
2583
2591
  },
@@ -2699,7 +2707,7 @@ function Ui(t) {
2699
2707
  function Fi(t) {
2700
2708
  return ui(this, arguments, function() {
2701
2709
  var r, n, o, i;
2702
- return cn(this, function(a) {
2710
+ return ln(this, function(a) {
2703
2711
  switch (a.label) {
2704
2712
  case 0:
2705
2713
  r = t.getReader(), a.label = 1;
@@ -2741,7 +2749,7 @@ function qi(t) {
2741
2749
  if (Ri(t))
2742
2750
  return Yi(t);
2743
2751
  if (Mi(t))
2744
- return _n(t);
2752
+ return yn(t);
2745
2753
  if (Ui(t))
2746
2754
  return Hi(t);
2747
2755
  if ($i(t))
@@ -2770,7 +2778,7 @@ function Yi(t) {
2770
2778
  r.closed || (r.next(n), r.complete());
2771
2779
  }, function(n) {
2772
2780
  return r.error(n);
2773
- }).then(null, pn);
2781
+ }).then(null, mn);
2774
2782
  });
2775
2783
  }
2776
2784
  function Hi(t) {
@@ -2794,7 +2802,7 @@ function Hi(t) {
2794
2802
  r.complete();
2795
2803
  });
2796
2804
  }
2797
- function _n(t) {
2805
+ function yn(t) {
2798
2806
  return new Q(function(r) {
2799
2807
  Gi(t, r).catch(function(n) {
2800
2808
  return r.error(n);
@@ -2802,13 +2810,13 @@ function _n(t) {
2802
2810
  });
2803
2811
  }
2804
2812
  function Ki(t) {
2805
- return _n(Fi(t));
2813
+ return yn(Fi(t));
2806
2814
  }
2807
2815
  function Gi(t, r) {
2808
2816
  var n, o, i, a;
2809
2817
  return li(this, void 0, void 0, function() {
2810
2818
  var s, c;
2811
- return cn(this, function(l) {
2819
+ return ln(this, function(l) {
2812
2820
  switch (l.label) {
2813
2821
  case 0:
2814
2822
  l.trys.push([0, 5, 6, 11]), n = di(t), l.label = 1;
@@ -2889,24 +2897,24 @@ function ea(t, r) {
2889
2897
  var n = Qi(t) ? { first: t } : typeof t == "number" ? { each: t } : t, o = n.first, i = n.each, a = n.with, s = a === void 0 ? ta : a, c = n.scheduler, l = c === void 0 ? ji : c, u = n.meta, d = u === void 0 ? null : u;
2890
2898
  if (o == null && i == null)
2891
2899
  throw new TypeError("No timeout provided.");
2892
- return Ei(function(m, h) {
2893
- var _, y, f = null, w = 0, v = function(P) {
2894
- y = Zi(h, l, function() {
2900
+ return Ei(function(_, b) {
2901
+ var m, y, h = null, w = 0, v = function(E) {
2902
+ y = Zi(b, l, function() {
2895
2903
  try {
2896
- _.unsubscribe(), qi(s({
2904
+ m.unsubscribe(), qi(s({
2897
2905
  meta: d,
2898
- lastValue: f,
2906
+ lastValue: h,
2899
2907
  seen: w
2900
- })).subscribe(h);
2908
+ })).subscribe(b);
2901
2909
  } catch (X) {
2902
- h.error(X);
2910
+ b.error(X);
2903
2911
  }
2904
- }, P);
2912
+ }, E);
2905
2913
  };
2906
- _ = m.subscribe(Ci(h, function(P) {
2907
- y == null || y.unsubscribe(), w++, h.next(f = P), i > 0 && v(i);
2914
+ m = _.subscribe(Ci(b, function(E) {
2915
+ y == null || y.unsubscribe(), w++, b.next(h = E), i > 0 && v(i);
2908
2916
  }, void 0, void 0, function() {
2909
- y != null && y.closed || y == null || y.unsubscribe(), f = null;
2917
+ y != null && y.closed || y == null || y.unsubscribe(), h = null;
2910
2918
  })), !w && v(o != null ? typeof o == "number" ? o : +o - l.now() : i);
2911
2919
  });
2912
2920
  }
@@ -2950,7 +2958,7 @@ class Oe {
2950
2958
  with: () => Bi(() => new Error(r.timeoutErrMsg))
2951
2959
  };
2952
2960
  return Wi(this._subject.pipe(ea(n)));
2953
- }, this._current = { status: "initial", isSuccess: !1 }, this._subject = new mn();
2961
+ }, this._current = { status: "initial", isSuccess: !1 }, this._subject = new _n();
2954
2962
  }
2955
2963
  get current() {
2956
2964
  return this._current;
@@ -3000,7 +3008,7 @@ const { log__: na, err__: ra } = O("init-flows"), Pe = (t, r) => {
3000
3008
  constructor() {
3001
3009
  this.setCallbacks = (r) => {
3002
3010
  this._callbacks = Ie.createEmptyCallbacks(), Object.entries(r).forEach(([n, o]) => {
3003
- const i = Dn(n, o ?? Ie.NOOP, aa);
3011
+ const i = Nn(n, o ?? Ie.NOOP, aa);
3004
3012
  this._callbacks[n] = i;
3005
3013
  });
3006
3014
  }, this._callbacks = Ie.createEmptyCallbacks();
@@ -3161,7 +3169,7 @@ const da = (t, r, n) => {
3161
3169
  this.cdeLoadEvent.current.isSuccess || this.cdeLoadEvent.throw(new Error(n), n);
3162
3170
  }, this.createElement = (n, o = {}) => {
3163
3171
  if (!this.config) throw new Error("OpenPay form not initialized");
3164
- const i = Nn.parse(n), a = document.createElement("iframe"), s = this.buildQueryString(o);
3172
+ const i = Ln.parse(n), a = document.createElement("iframe"), s = this.buildQueryString(o);
3165
3173
  a.name = `${i}-element`;
3166
3174
  const c = new URL(`/app/v1/${a.name}/`, this.config.baseUrl);
3167
3175
  return c.search = s.toString(), a.src = c.href, a.style.border = "none", a.style.width = "100%", this.registerIframe(i, a);
@@ -3251,7 +3259,7 @@ const da = (t, r, n) => {
3251
3259
  window.removeEventListener("message", this.eventHandler.handleMessage.bind(this.eventHandler)), this.registeredElements = null, delete window.ojs;
3252
3260
  }, this.updateCallbacks = (n) => {
3253
3261
  this.formCallbacks.setCallbacks(n);
3254
- }, rt.assignAsSingleton(this), this.ojsVersion = "0.2.7", this.ojsReleaseVersion = "local_build", this.baseUrl = r.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...r, baseUrl: this.baseUrl }, this.formCallbacks = sa.fromObject(r), this.registeredElements = null, this.formId = `opjs-form-${Pn()}`, this.referrer = window.location.origin, this.formTarget = r.formTarget ?? "body", this.formProperties = { height: "1px" }, this.connectionManager = new ua(), this.eventHandler = new ca(this.formId, this.baseUrl, this.formCallbacks, {
3262
+ }, rt.assignAsSingleton(this), this.ojsVersion = "0.2.8", this.ojsReleaseVersion = "local_build", this.baseUrl = r.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...r, baseUrl: this.baseUrl }, this.formCallbacks = sa.fromObject(r), this.registeredElements = null, this.formId = `opjs-form-${kn()}`, this.referrer = window.location.origin, this.formTarget = r.formTarget ?? "body", this.formProperties = { height: "1px" }, this.connectionManager = new ua(), this.eventHandler = new ca(this.formId, this.baseUrl, this.formCallbacks, {
3255
3263
  setFormHeight: this.setFormHeight,
3256
3264
  onCdeLoaded: this.onCdeLoaded,
3257
3265
  onCdeLoadError: this.onCdeLoadError
@@ -3295,36 +3303,36 @@ const _a = (t, r, n) => (...o) => {
3295
3303
  n(`[form] Error running callback (${t}):`, i);
3296
3304
  return;
3297
3305
  }
3298
- }, j = e.string().trim().min(1, { message: "Cannot be blank" }), S = e.string().trim().optional(), M = (t) => e.nullable(t.optional());
3299
- var yn = /* @__PURE__ */ ((t) => (t.FIRST_NAME = "firstName", t.LAST_NAME = "lastName", t.EMAIL = "email", t.ZIP_CODE = "zipCode", t.CITY = "city", t.STATE = "state", t.COUNTRY = "country", t.ADDRESS = "address", t.PHONE = "phone", t.PROMOTION_CODE = "promotionCode", t))(yn || {});
3300
- const ya = e.nativeEnum(yn);
3306
+ }, j = e.string().trim().min(1, { message: "Cannot be blank" }), P = e.string().trim().optional(), M = (t) => e.nullable(t.optional());
3307
+ var hn = /* @__PURE__ */ ((t) => (t.FIRST_NAME = "firstName", t.LAST_NAME = "lastName", t.EMAIL = "email", t.ZIP_CODE = "zipCode", t.CITY = "city", t.STATE = "state", t.COUNTRY = "country", t.ADDRESS = "address", t.PHONE = "phone", t.PROMOTION_CODE = "promotionCode", t))(hn || {});
3308
+ const ya = e.nativeEnum(hn);
3301
3309
  var fn = /* @__PURE__ */ ((t) => (t.CARD_NUMBER = "cardNumber", t.CARD_EXPIRY = "cardExpiry", t.CARD_CVC = "cardCvc", t))(fn || {});
3302
- const hn = e.nativeEnum(fn), fa = e.union([ya, hn]);
3303
- var he = /* @__PURE__ */ ((t) => (t.CARD = "card", t.CARD_NUMBER = "card-number", t.CARD_EXPIRY = "card-expiry", t.CARD_CVC = "card-cvc", t))(he || {});
3304
- e.nativeEnum(he);
3310
+ const gn = e.nativeEnum(fn), ha = e.union([ya, gn]);
3311
+ var fe = /* @__PURE__ */ ((t) => (t.CARD = "card", t.CARD_NUMBER = "card-number", t.CARD_EXPIRY = "card-expiry", t.CARD_CVC = "card-cvc", t))(fe || {});
3312
+ e.nativeEnum(fe);
3305
3313
  const Ve = e.object({
3306
3314
  provider: e.string(),
3307
3315
  processor_name: M(e.string()),
3308
3316
  metadata: M(e.record(e.string(), e.any()))
3309
- }), ha = e.object({
3317
+ }), fa = e.object({
3310
3318
  id: e.string()
3311
3319
  });
3312
3320
  e.object({
3313
- cardNumber: S,
3314
- expiry: S,
3315
- cvc: S
3321
+ cardNumber: P,
3322
+ expiry: P,
3323
+ cvc: P
3316
3324
  });
3317
3325
  e.object({
3318
- backgroundColor: S,
3319
- color: S,
3320
- fontFamily: S,
3321
- fontSize: S,
3322
- fontWeight: S,
3323
- margin: S,
3324
- padding: S,
3325
- letterSpacing: S,
3326
- lineHeight: S,
3327
- hideIcon: S
3326
+ backgroundColor: P,
3327
+ color: P,
3328
+ fontFamily: P,
3329
+ fontSize: P,
3330
+ fontWeight: P,
3331
+ margin: P,
3332
+ padding: P,
3333
+ letterSpacing: P,
3334
+ lineHeight: P,
3335
+ hideIcon: P
3328
3336
  });
3329
3337
  const z = e.enum([
3330
3338
  // Element -> Form
@@ -3349,7 +3357,7 @@ const z = e.enum([
3349
3357
  "START_PAYMENT_FLOW"
3350
3358
  ]), ga = z.extract(["TOKENIZE_STARTED", "CHECKOUT_STARTED"]), ba = e.object({ type: ga }), wa = z.extract(["BLUR", "FOCUS", "CHANGE"]), va = e.object({
3351
3359
  type: wa,
3352
- elementType: hn,
3360
+ elementType: gn,
3353
3361
  errors: e.array(e.string()).optional()
3354
3362
  }), Ea = z.extract(["LOAD_ERROR", "TOKENIZE_ERROR", "CHECKOUT_ERROR"]), Ca = e.object({
3355
3363
  type: Ea,
@@ -3357,7 +3365,7 @@ const z = e.enum([
3357
3365
  headers: e.record(e.string(), e.string()).optional()
3358
3366
  }), Sa = z.extract(["VALIDATION_ERROR"]), Pa = e.object({
3359
3367
  type: Sa,
3360
- elementType: fa,
3368
+ elementType: ha,
3361
3369
  errors: e.array(e.string())
3362
3370
  }), ka = e.object({
3363
3371
  type: e.literal(z.enum.LAYOUT),
@@ -3366,7 +3374,7 @@ const z = e.enum([
3366
3374
  type: e.literal(z.enum.LOADED),
3367
3375
  sessionId: j,
3368
3376
  totalAmountAtoms: e.number(),
3369
- currency: S,
3377
+ currency: P,
3370
3378
  checkoutPaymentMethods: e.array(Ve)
3371
3379
  }), Oa = e.object({
3372
3380
  type: e.literal(z.enum.PAYMENT_FLOW_STARTED),
@@ -3382,24 +3390,24 @@ const z = e.enum([
3382
3390
  email: j,
3383
3391
  zipCode: j,
3384
3392
  country: j,
3385
- promotionCode: S
3393
+ promotionCode: P
3386
3394
  }), ja = e.object({
3387
- firstName: S,
3388
- lastName: S,
3395
+ firstName: P,
3396
+ lastName: P,
3389
3397
  email: j,
3390
3398
  zipCode: j,
3391
3399
  country: j,
3392
- promotionCode: S,
3393
- address: S,
3394
- city: S,
3395
- state: S
3400
+ promotionCode: P,
3401
+ address: P,
3402
+ city: P,
3403
+ state: P
3396
3404
  }), Ta = z.extract(["TOKENIZE", "CHECKOUT", "START_PAYMENT_FLOW"]), Ra = e.object({
3397
3405
  type: Ta,
3398
3406
  sessionId: j,
3399
3407
  checkoutPaymentMethod: Ve,
3400
3408
  paymentFlowMetadata: e.any().optional(),
3401
3409
  doNotUseLegacyCCFlow: e.boolean().optional(),
3402
- existingCCPMId: S
3410
+ existingCCPMId: P
3403
3411
  }).extend(ze.shape), xa = e.object({
3404
3412
  type: e.literal(z.enum.TOKENIZE_SUCCESS),
3405
3413
  isReadyForCheckout: e.boolean()
@@ -3511,7 +3519,7 @@ e.discriminatedUnion("present", [
3511
3519
  e.object({ present: e.literal(!1) })
3512
3520
  ]);
3513
3521
  e.object({
3514
- payment_methods: e.array(ha),
3522
+ payment_methods: e.array(fa),
3515
3523
  pay_first_success_response: M(Na),
3516
3524
  required_user_actions: M(e.array(Fa))
3517
3525
  });
@@ -3525,7 +3533,7 @@ e.object({
3525
3533
  client_secret: e.string(),
3526
3534
  stripe_pk: e.string()
3527
3535
  });
3528
- const $a = (t) => JSON.stringify(t), b = (t) => e.nullable(t.optional());
3536
+ const $a = (t) => JSON.stringify(t), g = (t) => e.nullable(t.optional());
3529
3537
  e.string().trim().min(1, { message: "Cannot be blank" });
3530
3538
  e.object({
3531
3539
  cde_response_type: e.literal("error"),
@@ -3533,73 +3541,73 @@ e.object({
3533
3541
  headers: e.record(e.string(), e.string()).optional()
3534
3542
  });
3535
3543
  e.enum(["usd", "brl"]);
3536
- const gn = e.object({
3544
+ const bn = e.object({
3537
3545
  name: e.string(),
3538
- amount_atom_off: b(e.number()),
3539
- percent_off: b(e.number()),
3540
- currency: b(e.string()),
3546
+ amount_atom_off: g(e.number()),
3547
+ percent_off: g(e.number()),
3548
+ currency: g(e.string()),
3541
3549
  duration: e.string(),
3542
- duration_in_months: b(e.number())
3543
- }), bn = e.object({
3550
+ duration_in_months: g(e.number())
3551
+ }), wn = e.object({
3544
3552
  amount_subtotal_atom: e.number().int(),
3545
3553
  amount_total_atom: e.number().int(),
3546
3554
  currency: e.string(),
3547
- description: b(e.string()),
3555
+ description: g(e.string()),
3548
3556
  price_id: e.string(),
3549
- billing_interval: b(e.string()),
3550
- billing_interval_count: b(e.number().int()),
3557
+ billing_interval: g(e.string()),
3558
+ billing_interval_count: g(e.number().int()),
3551
3559
  quantity: e.number().int()
3552
3560
  }), qa = e.record(e.string(), e.any()), Va = e.object({
3553
3561
  name: e.string(),
3554
- settings: b(qa)
3562
+ settings: g(qa)
3555
3563
  }), Ce = e.object({
3556
3564
  provider: e.string(),
3557
- processor_name: b(e.string()),
3558
- metadata: b(e.record(e.string(), e.any()))
3565
+ processor_name: g(e.string()),
3566
+ metadata: g(e.record(e.string(), e.any()))
3559
3567
  }), za = e.object({
3560
3568
  quantity: e.number()
3561
3569
  }), Ya = e.object({
3562
- id: b(e.string()),
3563
- billing_interval: b(e.string()),
3564
- billing_interval_count: b(e.number().int()),
3570
+ id: g(e.string()),
3571
+ billing_interval: g(e.string()),
3572
+ billing_interval_count: g(e.number().int()),
3565
3573
  subscription_items: e.array(za),
3566
- trial_start: b(e.string()),
3567
- trial_end: b(e.string())
3568
- }), wn = e.object({
3574
+ trial_start: g(e.string()),
3575
+ trial_end: g(e.string())
3576
+ }), vn = e.object({
3569
3577
  amount_atom: e.number()
3570
3578
  }), Ha = e.object({
3571
3579
  amount_atom: e.number(),
3572
3580
  amount_atom_considering_discount_applied: e.number(),
3573
3581
  currency: e.string(),
3574
- discount_amount_atoms: e.array(wn),
3582
+ discount_amount_atoms: e.array(vn),
3575
3583
  subscription_item_id: e.string()
3576
3584
  }), Ka = e.object({
3577
- coupon: gn
3585
+ coupon: bn
3578
3586
  }), Ga = e.object({
3579
3587
  currency: e.string(),
3580
3588
  discounts: e.array(Ka),
3581
- hosted_invoice_url: b(e.string()),
3589
+ hosted_invoice_url: g(e.string()),
3582
3590
  lines: e.array(Ha),
3583
3591
  remaining_amount_atom: e.number(),
3584
3592
  tax_amount_atom: e.number(),
3585
3593
  total_amount_atom: e.number(),
3586
- total_discount_amount_atoms: e.array(wn)
3594
+ total_discount_amount_atoms: e.array(vn)
3587
3595
  }), It = e.object({
3588
3596
  created: e.array(Ya),
3589
3597
  invoices: e.array(Ga)
3590
3598
  }), Za = e.object({
3591
3599
  preview: It,
3592
- preview_post_trial: b(It),
3593
- coupons: e.array(gn)
3600
+ preview_post_trial: g(It),
3601
+ coupons: e.array(bn)
3594
3602
  }), jt = e.object({
3595
3603
  status: e.literal("open"),
3596
3604
  token: e.string(),
3597
- email: b(e.string()),
3598
- line_items: e.array(bn),
3605
+ email: g(e.string()),
3606
+ line_items: e.array(wn),
3599
3607
  amount_subtotal_atom: e.number().int(),
3600
3608
  amount_total_atom: e.number().int(),
3601
3609
  brand: Va,
3602
- subs_preview: b(Za),
3610
+ subs_preview: g(Za),
3603
3611
  // Null in setup mode
3604
3612
  methods_available: e.array(Ce)
3605
3613
  }), Ba = e.discriminatedUnion("mode", [
@@ -3636,13 +3644,13 @@ e.object({
3636
3644
  customer_email: e.string(),
3637
3645
  customer_zip_code: e.string(),
3638
3646
  customer_country: e.string(),
3639
- line_items: e.array(bn),
3647
+ line_items: e.array(wn),
3640
3648
  total_amount_atom: e.number().int(),
3641
3649
  cancel_at_end: e.boolean(),
3642
3650
  checkout_payment_method: Ce,
3643
3651
  promotion_code: e.string().optional(),
3644
3652
  do_not_use_legacy_cc_flow: e.boolean().optional(),
3645
- use_confirmed_pm_id: b(e.string())
3653
+ use_confirmed_pm_id: g(e.string())
3646
3654
  });
3647
3655
  e.object({
3648
3656
  payment_method_id: e.string()
@@ -3671,7 +3679,7 @@ const Xa = e.object({
3671
3679
  promotion_code: e.string().optional(),
3672
3680
  displayed_total_amount_atom: e.number().int()
3673
3681
  }), ns = e.object({
3674
- processor_specific_metadata: b(e.record(e.string(), e.any()))
3682
+ processor_specific_metadata: g(e.record(e.string(), e.any()))
3675
3683
  });
3676
3684
  e.object({
3677
3685
  payment_provider: e.string(),
@@ -3683,7 +3691,7 @@ e.object({
3683
3691
  }).extend(Xa.shape).extend(ns.shape);
3684
3692
  e.object({
3685
3693
  required_user_actions: e.array(e.record(e.string(), e.any())),
3686
- checkout_attempt_id: b(e.string())
3694
+ checkout_attempt_id: g(e.string())
3687
3695
  });
3688
3696
  e.object({
3689
3697
  fields: ja,
@@ -3702,28 +3710,28 @@ e.object({
3702
3710
  });
3703
3711
  e.record(e.any());
3704
3712
  e.object({
3705
- first_name: b(e.string()),
3706
- last_name: b(e.string()),
3707
- line1: b(e.string()),
3708
- line2: b(e.string()),
3709
- line3: b(e.string()),
3710
- city: b(e.string()),
3711
- state: b(e.string()),
3712
- country: b(e.string()),
3713
- zip_code: b(e.string()),
3714
- email: b(e.string()),
3715
- billing_email: b(e.string()),
3716
- phone_number: b(e.string()),
3717
- update_processor_customer: b(e.boolean())
3713
+ first_name: g(e.string()),
3714
+ last_name: g(e.string()),
3715
+ line1: g(e.string()),
3716
+ line2: g(e.string()),
3717
+ line3: g(e.string()),
3718
+ city: g(e.string()),
3719
+ state: g(e.string()),
3720
+ country: g(e.string()),
3721
+ zip_code: g(e.string()),
3722
+ email: g(e.string()),
3723
+ billing_email: g(e.string()),
3724
+ phone_number: g(e.string()),
3725
+ update_processor_customer: g(e.boolean())
3718
3726
  });
3719
3727
  e.object({
3720
3728
  id: e.string(),
3721
- email: b(e.string()),
3722
- first_name: b(e.string()),
3723
- last_name: b(e.string()),
3724
- phone_number: b(e.string()),
3725
- billing_email: b(e.string()),
3726
- address: b(e.record(e.string(), e.any()))
3729
+ email: g(e.string()),
3730
+ first_name: g(e.string()),
3731
+ last_name: g(e.string()),
3732
+ phone_number: g(e.string()),
3733
+ billing_email: g(e.string()),
3734
+ address: g(e.record(e.string(), e.any()))
3727
3735
  });
3728
3736
  function rs(t, r) {
3729
3737
  var n = Object.setPrototypeOf;
@@ -3924,7 +3932,7 @@ const cs = (t) => {
3924
3932
  const [r, n] = ae({
3925
3933
  apple_pay: Rt,
3926
3934
  google_pay: Rt
3927
- }), o = Cn(
3935
+ }), o = Sn(
3928
3936
  (i) => {
3929
3937
  n(i), t == null || t(i);
3930
3938
  },
@@ -3932,45 +3940,45 @@ const cs = (t) => {
3932
3940
  );
3933
3941
  return { paymentRequests: r, overridenOnPaymentRequestLoad: o };
3934
3942
  }, Mt = "op_ojs_form", gs = (t) => {
3935
- const [r, n] = ae(), [o, i] = ae(null), { paymentRequests: a, overridenOnPaymentRequestLoad: s } = ls(t.onPaymentRequestLoad), [c, l] = ae(!1), [u, d] = ae(null), [m, h] = ae({
3943
+ const [r, n] = ae(), [o, i] = ae(null), { paymentRequests: a, overridenOnPaymentRequestLoad: s } = ls(t.onPaymentRequestLoad), [c, l] = ae(!1), [u, d] = ae(null), [_, b] = ae({
3936
3944
  googlePay: Tt,
3937
3945
  applePay: Tt
3938
- }), _ = cs({
3946
+ }), m = cs({
3939
3947
  ...t,
3940
3948
  onPaymentRequestLoad: s,
3941
- onLoad: (f, w) => {
3949
+ onLoad: (h, w) => {
3942
3950
  var v;
3943
- l(!0), (v = t.onLoad) == null || v.call(t, f, w);
3951
+ l(!0), (v = t.onLoad) == null || v.call(t, h, w);
3944
3952
  }
3945
3953
  });
3946
3954
  if (We(() => {
3947
3955
  if (r) return;
3948
- const f = xe.getInstance() ?? new xe({
3956
+ const h = xe.getInstance() ?? new xe({
3949
3957
  checkoutSecureToken: t.checkoutSecureToken,
3950
3958
  formTarget: `#${Mt}`,
3951
3959
  baseUrl: t.baseUrl,
3952
3960
  customInitParams: t.customInitParams,
3953
- ..._
3961
+ ...m
3954
3962
  });
3955
- n(f);
3956
- const w = us(f);
3957
- return i(w), f.initFlows.stripeLink.publisher.subscribe((v) => {
3963
+ n(h);
3964
+ const w = us(h);
3965
+ return i(w), h.initFlows.stripeLink.publisher.subscribe((v) => {
3958
3966
  v.isSuccess && v.loadedValue.isAvailable && d(v.loadedValue.controller);
3959
- }), f.initFlows.airwallexGooglePay.publisher.subscribe((v) => {
3960
- v.isSuccess && v.loadedValue.isAvailable && h((P) => ({
3961
- applePay: P.applePay,
3967
+ }), h.initFlows.airwallexGooglePay.publisher.subscribe((v) => {
3968
+ v.isSuccess && v.loadedValue.isAvailable && b((E) => ({
3969
+ applePay: E.applePay,
3962
3970
  googlePay: v.loadedValue
3963
3971
  }));
3964
- }), f.initFlows.airwallexApplePay.publisher.subscribe((v) => {
3965
- v.isSuccess && v.loadedValue.isAvailable && h((P) => ({
3966
- googlePay: P.googlePay,
3972
+ }), h.initFlows.airwallexApplePay.publisher.subscribe((v) => {
3973
+ v.isSuccess && v.loadedValue.isAvailable && b((E) => ({
3974
+ googlePay: E.googlePay,
3967
3975
  applePay: {
3968
3976
  ...v.loadedValue,
3969
3977
  isLoading: !1
3970
3978
  }
3971
3979
  }));
3972
3980
  }), () => {
3973
- f.destroy();
3981
+ h.destroy();
3974
3982
  };
3975
3983
  }, []), !r)
3976
3984
  return /* @__PURE__ */ F(Ge, {});
@@ -3987,7 +3995,7 @@ const cs = (t) => {
3987
3995
  error: null
3988
3996
  },
3989
3997
  stripeLink: u,
3990
- airwallex: m
3998
+ airwallex: _
3991
3999
  };
3992
4000
  return /* @__PURE__ */ F(Ge, { children: o ? /* @__PURE__ */ F(Nt.Provider, { value: o, children: /* @__PURE__ */ F("div", { id: Mt, className: t.className, children: t.children(y) }) }) : /* @__PURE__ */ F(Ge, {}) });
3993
4001
  }, us = (t) => ({
@@ -3998,36 +4006,36 @@ const cs = (t) => {
3998
4006
  registerIframe: t.registerIframe,
3999
4007
  baseUrl: t.baseUrl
4000
4008
  }), Ye = (t) => {
4001
- const { elementType: r, styles: n } = t, { formId: o, referrer: i, formHeight: a, checkoutSecureToken: s, registerIframe: c, baseUrl: l } = kn(), u = r.toLowerCase(), [d, m] = ae(!1), h = Sn(null), _ = Ke(() => n ? $a(n) : "", [n]), y = Ke(() => ({
4009
+ const { elementType: r, styles: n } = t, { formId: o, referrer: i, formHeight: a, checkoutSecureToken: s, registerIframe: c, baseUrl: l } = An(), u = r.toLowerCase(), [d, _] = ae(!1), b = Pn(null), m = Ke(() => n ? $a(n) : "", [n]), y = Ke(() => ({
4002
4010
  border: "none",
4003
4011
  width: "100%",
4004
4012
  height: a
4005
- }), [a]), f = Ke(() => {
4013
+ }), [a]), h = Ke(() => {
4006
4014
  if (!s || !i) return "";
4007
4015
  const w = new URLSearchParams();
4008
- return w.append("referer", i), w.append("styles", _), w.append("formId", o), w.append("secureToken", s), w.toString();
4009
- }, [_, o, i, s]);
4010
- return We(() => m(!0), []), We(() => {
4011
- !h.current || !d || c(r, h.current);
4016
+ return w.append("referer", i), w.append("styles", m), w.append("formId", o), w.append("secureToken", s), w.toString();
4017
+ }, [m, o, i, s]);
4018
+ return We(() => _(!0), []), We(() => {
4019
+ !b.current || !d || c(r, b.current);
4012
4020
  }, [d]), s ? /* @__PURE__ */ F(
4013
4021
  "iframe",
4014
4022
  {
4015
4023
  id: `ojs-${u}-element`,
4016
4024
  name: `${u}-element`,
4017
4025
  className: "ojs-iframe",
4018
- src: `${l}/app/v1/${u}-element/?${f}`,
4026
+ src: `${l}/app/v1/${u}-element/?${h}`,
4019
4027
  style: y,
4020
- ref: h
4028
+ ref: b
4021
4029
  }
4022
4030
  ) : (console.error("[form] Cannot render partially initialized frame"), /* @__PURE__ */ F("div", {}));
4023
- }, bs = ({ styles: t }) => /* @__PURE__ */ F(Ye, { styles: t, elementType: he.CARD_CVC }), ws = ({ styles: t }) => /* @__PURE__ */ F(Ye, { styles: t, elementType: he.CARD }), vs = ({ styles: t }) => /* @__PURE__ */ F(Ye, { styles: t, elementType: he.CARD_EXPIRY }), Es = ({ styles: t }) => /* @__PURE__ */ F(Ye, { styles: t, elementType: he.CARD_NUMBER });
4031
+ }, bs = ({ styles: t }) => /* @__PURE__ */ F(Ye, { styles: t, elementType: fe.CARD_CVC }), ws = ({ styles: t }) => /* @__PURE__ */ F(Ye, { styles: t, elementType: fe.CARD }), vs = ({ styles: t }) => /* @__PURE__ */ F(Ye, { styles: t, elementType: fe.CARD_EXPIRY }), Es = ({ styles: t }) => /* @__PURE__ */ F(Ye, { styles: t, elementType: fe.CARD_NUMBER });
4024
4032
  export {
4025
4033
  bs as CardCvcElement,
4026
4034
  ws as CardElement,
4027
4035
  vs as CardExpiryElement,
4028
4036
  Es as CardNumberElement,
4029
4037
  gs as ElementsForm,
4030
- yn as FieldName,
4031
- kn as useOpenPayElements
4038
+ hn as FieldName,
4039
+ An as useOpenPayElements
4032
4040
  };
4033
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXguanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3gsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QvanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHsgeiBhcyB6JDEgfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCBtZSBmcm9tICdjaGFsayc7XG5cbmNvbnN0IEVsZW1lbnRzQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe1xuICBmb3JtSWQ6IFwiXCIsXG4gIGZvcm1IZWlnaHQ6IFwiXCIsXG4gIHJlZmVycmVyOiB2b2lkIDAsXG4gIGNoZWNrb3V0U2VjdXJlVG9rZW46IHZvaWQgMCxcbiAgcmVnaXN0ZXJJZnJhbWU6ICgpID0+IHtcbiAgfSxcbiAgYmFzZVVybDogXCJcIlxufSk7XG5cbmNvbnN0IHVzZU9wZW5QYXlFbGVtZW50cyA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoRWxlbWVudHNDb250ZXh0KTtcbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXNlT3BlblBheUVsZW1lbnRzIG11c3QgYmUgdXNlZCB3aXRoaW4gYW4gT3BlblBheUVsZW1lbnRzUHJvdmlkZXJcIik7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ7XG59O1xuXG5jb25zdCBkdCA9IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIiwgenQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pLCBZdCA9IHokMS5hcnJheSh6dCksIEt0ID0geiQxLm9iamVjdCh7XG4gIGNvZGU6IHokMS5zdHJpbmcoKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBwYXRoOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSksIEh0ID0geiQxLmFycmF5KEt0KSwgV3QgPSB7XG4gIFwiZmFpbGVkIHRvIGZldGNoXCI6IFwiQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluXCJcbn0sIERlID0gKHQpID0+IHtcbiAgY29uc3QgciA9IHQudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gIHJldHVybiBXdFtyXSA/PyB0O1xufSwgWnQgPSAodCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB0eXBlb2YgSlNPTi5wYXJzZSh0KSA9PSBcIm9iamVjdFwiO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gITE7XG4gIH1cbn0sIEp0ID0gKHQpID0+IHQubGVuZ3RoID09PSAxID8gRGUodFswXS5tc2cpIDogYFBsZWFzZSBmaXggdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4ke3QubWFwKChlKSA9PiBg4oCiICR7RGUoZS5tc2cpfWApLmpvaW4oYFxuYCl9YCwgQnQgPSAodCkgPT4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHt0Lm1hcCgoZSkgPT4gYC0gJHtlLnBhdGguam9pbihcIi9cIil9OiAke2UubWVzc2FnZX1gKS5qb2luKGBcbmApfWAsIFkgPSAodCkgPT4ge1xuICBpZiAodCBpbnN0YW5jZW9mIEVycm9yKVxuICAgIGlmIChadCh0Lm1lc3NhZ2UpKSB7XG4gICAgICBjb25zdCByID0gSlNPTi5wYXJzZSh0Lm1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIFl0LnNhZmVQYXJzZShyKS5zdWNjZXNzID8gSnQocikgOiBIdC5zYWZlUGFyc2Uocikuc3VjY2VzcyA/IEJ0KHIpIDogKGNvbnNvbGUud2FybihgRW5jb3VudGVyZWQgdW5rbm93biBzdHJpbmdpZmllZCBKU09OIG9iamVjdDpcbiR7dC5tZXNzYWdlfWApLCB0Lm1lc3NhZ2UpO1xuICAgIH0gZWxzZVxuICAgICAgcmV0dXJuIERlKHQubWVzc2FnZSk7XG4gIGlmICh0eXBlb2YgdCA9PSBcIm9iamVjdFwiKVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodCk7XG4gICAgfSBjYXRjaCAocikge1xuICAgICAgcmV0dXJuIHIgKyBcIlwiO1xuICAgIH1cbiAgZWxzZVxuICAgIHJldHVybiB0ICsgXCJcIjtcbn0sIFF0ID0gKHQsIHIsIGUpID0+ICguLi5uKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHIoLi4ubik7XG4gIH0gY2F0Y2ggKGkpIHtcbiAgICBlKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHt0fSk6YCwgaSk7XG4gICAgcmV0dXJuO1xuICB9XG59LCBQID0geiQxLnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBcIkNhbm5vdCBiZSBibGFua1wiIH0pLCB2ID0geiQxLnN0cmluZygpLnRyaW0oKS5vcHRpb25hbCgpLCBPID0gKHQpID0+IHokMS5udWxsYWJsZSh0Lm9wdGlvbmFsKCkpO1xudmFyIGQgPSAvKiBAX19QVVJFX18gKi8gKCh0KSA9PiAodC5GSVJTVF9OQU1FID0gXCJmaXJzdE5hbWVcIiwgdC5MQVNUX05BTUUgPSBcImxhc3ROYW1lXCIsIHQuRU1BSUwgPSBcImVtYWlsXCIsIHQuWklQX0NPREUgPSBcInppcENvZGVcIiwgdC5DSVRZID0gXCJjaXR5XCIsIHQuU1RBVEUgPSBcInN0YXRlXCIsIHQuQ09VTlRSWSA9IFwiY291bnRyeVwiLCB0LkFERFJFU1MgPSBcImFkZHJlc3NcIiwgdC5QSE9ORSA9IFwicGhvbmVcIiwgdC5QUk9NT1RJT05fQ09ERSA9IFwicHJvbW90aW9uQ29kZVwiLCB0KSkoZCB8fCB7fSk7XG5jb25zdCBwdCA9IHokMS5uYXRpdmVFbnVtKGQpO1xudmFyIG10ID0gLyogQF9fUFVSRV9fICovICgodCkgPT4gKHQuQ0FSRF9OVU1CRVIgPSBcImNhcmROdW1iZXJcIiwgdC5DQVJEX0VYUElSWSA9IFwiY2FyZEV4cGlyeVwiLCB0LkNBUkRfQ1ZDID0gXCJjYXJkQ3ZjXCIsIHQpKShtdCB8fCB7fSk7XG5jb25zdCBmdCA9IHokMS5uYXRpdmVFbnVtKG10KSwgeXQgPSB6JDEudW5pb24oW3B0LCBmdF0pO1xudmFyIHJlID0gLyogQF9fUFVSRV9fICovICgodCkgPT4gKHQuQ0FSRCA9IFwiY2FyZFwiLCB0LkNBUkRfTlVNQkVSID0gXCJjYXJkLW51bWJlclwiLCB0LkNBUkRfRVhQSVJZID0gXCJjYXJkLWV4cGlyeVwiLCB0LkNBUkRfQ1ZDID0gXCJjYXJkLWN2Y1wiLCB0KSkocmUgfHwge30pO1xuY29uc3QgWHQgPSB6JDEubmF0aXZlRW51bShyZSksIEVlID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBPKHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBPKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIGVyID0geiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGNhcmROdW1iZXI6IHYsXG4gIGV4cGlyeTogdixcbiAgY3ZjOiB2XG59KTtcbnokMS5vYmplY3Qoe1xuICBiYWNrZ3JvdW5kQ29sb3I6IHYsXG4gIGNvbG9yOiB2LFxuICBmb250RmFtaWx5OiB2LFxuICBmb250U2l6ZTogdixcbiAgZm9udFdlaWdodDogdixcbiAgbWFyZ2luOiB2LFxuICBwYWRkaW5nOiB2LFxuICBsZXR0ZXJTcGFjaW5nOiB2LFxuICBsaW5lSGVpZ2h0OiB2LFxuICBoaWRlSWNvbjogdlxufSk7XG5jb25zdCBqID0geiQxLmVudW0oW1xuICAvLyBFbGVtZW50IC0+IEZvcm1cbiAgXCJMQVlPVVRcIixcbiAgXCJMT0FERURcIixcbiAgXCJCTFVSXCIsXG4gIFwiRk9DVVNcIixcbiAgXCJDSEFOR0VcIixcbiAgXCJUT0tFTklaRV9TVEFSVEVEXCIsXG4gIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiLFxuICBcIlBBWU1FTlRfRkxPV19TVEFSVEVEXCIsXG4gIFwiVE9LRU5JWkVfU1VDQ0VTU1wiLFxuICBcIkNIRUNLT1VUX1NVQ0NFU1NcIixcbiAgXCJMT0FEX0VSUk9SXCIsXG4gIFwiVkFMSURBVElPTl9FUlJPUlwiLFxuICBcIlRPS0VOSVpFX0VSUk9SXCIsXG4gIFwiQ0hFQ0tPVVRfRVJST1JcIixcbiAgXCJTRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTXCIsXG4gIC8vIEZvcm0gLT4gRWxlbWVudFxuICBcIlRPS0VOSVpFXCIsXG4gIFwiQ0hFQ0tPVVRcIixcbiAgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIlxuXSksIHRyID0gai5leHRyYWN0KFtcIlRPS0VOSVpFX1NUQVJURURcIiwgXCJDSEVDS09VVF9TVEFSVEVEXCJdKSwgcnIgPSB6JDEub2JqZWN0KHsgdHlwZTogdHIgfSksIG5yID0gai5leHRyYWN0KFtcIkJMVVJcIiwgXCJGT0NVU1wiLCBcIkNIQU5HRVwiXSksIG9yID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IG5yLFxuICBlbGVtZW50VHlwZTogZnQsXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSksIGlyID0gai5leHRyYWN0KFtcIkxPQURfRVJST1JcIiwgXCJUT0tFTklaRV9FUlJPUlwiLCBcIkNIRUNLT1VUX0VSUk9SXCJdKSwgc3IgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogaXIsXG4gIG1lc3NhZ2U6IFAsXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pLCBhciA9IGouZXh0cmFjdChbXCJWQUxJREFUSU9OX0VSUk9SXCJdKSwgY3IgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogYXIsXG4gIGVsZW1lbnRUeXBlOiB5dCxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSksIGxyID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKGouZW51bS5MQVlPVVQpLFxuICBoZWlnaHQ6IFBcbn0pLCB1ciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChqLmVudW0uTE9BREVEKSxcbiAgc2Vzc2lvbklkOiBQLFxuICB0b3RhbEFtb3VudEF0b21zOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiB2LFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiB6JDEuYXJyYXkoRWUpXG59KSwgZHIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoai5lbnVtLlBBWU1FTlRfRkxPV19TVEFSVEVEKSxcbiAgbmV4dEFjdGlvbk1ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogeiQxLmFueSgpLm9wdGlvbmFsKCksXG4gIHN0YXJ0UEZNZXRhZGF0YTogeiQxLm9wdGlvbmFsKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIHByID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKGouZW51bS5TRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTKSxcbiAgcGF5bWVudE1ldGhvZElkOiB6JDEuc3RyaW5nKClcbn0pLCBsZSA9IHokMS5vYmplY3Qoe1xuICBmaXJzdE5hbWU6IFAsXG4gIGxhc3ROYW1lOiBQLFxuICBlbWFpbDogUCxcbiAgemlwQ29kZTogUCxcbiAgY291bnRyeTogUCxcbiAgcHJvbW90aW9uQ29kZTogdlxufSksIG1yID0geiQxLm9iamVjdCh7XG4gIGZpcnN0TmFtZTogdixcbiAgbGFzdE5hbWU6IHYsXG4gIGVtYWlsOiBQLFxuICB6aXBDb2RlOiBQLFxuICBjb3VudHJ5OiBQLFxuICBwcm9tb3Rpb25Db2RlOiB2LFxuICBhZGRyZXNzOiB2LFxuICBjaXR5OiB2LFxuICBzdGF0ZTogdlxufSksIGZyID0gai5leHRyYWN0KFtcIlRPS0VOSVpFXCIsIFwiQ0hFQ0tPVVRcIiwgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIl0pLCB5ciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBmcixcbiAgc2Vzc2lvbklkOiBQLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IEVlLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdDQ1BNSWQ6IHZcbn0pLmV4dGVuZChsZS5zaGFwZSksIGhyID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKGouZW51bS5UT0tFTklaRV9TVUNDRVNTKSxcbiAgaXNSZWFkeUZvckNoZWNrb3V0OiB6JDEuYm9vbGVhbigpXG59KSwgX3IgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoai5lbnVtLkNIRUNLT1VUX1NVQ0NFU1MpLFxuICBpbnZvaWNlVXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbklkczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVySWQ6IHokMS5zdHJpbmcoKVxufSksIGdyID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICBycixcbiAgb3IsXG4gIHNyLFxuICBjcixcbiAgbHIsXG4gIHVyLFxuICB5cixcbiAgaHIsXG4gIF9yLFxuICBkcixcbiAgcHJcbl0pLCB3ciA9IHokMS5vYmplY3Qoe1xuICBwYXlsb2FkOiBncixcbiAgbm9uY2U6IFAsXG4gIGZvcm1JZDogUCxcbiAgZWxlbWVudElkOiBQXG59KTtcbnokMS5vYmplY3Qoe1xuICBhbW91bnRBdG9tOiB6JDEubnVtYmVyKCksXG4gIC8qKlxuICAgKiBUaGUgdGhyZWUtbGV0dGVyIElTTyA0MjE3IGN1cnJlbmN5IGNvZGUgZm9yIHRoZSBwYXltZW50LlxuICAgKi9cbiAgY3VycmVuY3k6IFBcbn0pO1xueiQxLmVudW0oW1wiYXBwbGVfcGF5XCIsIFwiZ29vZ2xlX3BheVwiXSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBPKHokMS5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBPKHokMS5zdHJpbmcoKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IE8oeiQxLnN0cmluZygpKSxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBPKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCB4ZSA9IHokMS5vYmplY3Qoe1xuICBpbnZvaWNlX3VybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25faWRzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJfaWQ6IHokMS5zdHJpbmcoKVxufSksIGJyID0geiQxLm9iamVjdCh7XG4gIGVsZW1lbnRUeXBlOiB6JDEuc3RyaW5nKCksXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCB2ciA9IHokMS5vYmplY3Qoe1xuICBzdWNjZXNzOiB6JDEubGl0ZXJhbCghMSksXG4gIGVycm9yX3R5cGU6IHokMS5saXRlcmFsKFwidmFsaWRhdGlvbl9lcnJvclwiKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoYnIpXG59KSwgRXIgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwic3VjY2Vzc1wiLCBbXG4gIHokMS5vYmplY3QoeyBzdWNjZXNzOiB6JDEubGl0ZXJhbCghMCkgfSksXG4gIHZyXG5dKTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBFZSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogbGUsXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IE8oeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogRWUsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IGxlLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKVxufSk7XG52YXIgTiA9IC8qIEBfX1BVUkVfXyAqLyAoKHQpID0+ICh0LlNVQ0NFU1MgPSBcInN1Y2Nlc3NcIiwgdC5GQUlMVVJFID0gXCJmYWlsdXJlXCIsIHQuQ0FOQ0VMTEVEID0gXCJjYW5jZWxsZWRcIiwgdCkpKE4gfHwge30pO1xuY29uc3QgU3IgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXG4gICAgXCJzdWNjZXNzXCIsXG4gICAgXCJmYWlsdXJlXCIsXG4gICAgXCJjYW5jZWxsZWRcIlxuICAgIC8qIENBTkNFTExFRCAqL1xuICBdKSxcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG5jb25zdCBDciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogeiQxLnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogeiQxLnN0cmluZygpLFxuICBjb25zZW50X2lkOiB6JDEuc3RyaW5nKCksXG4gIHRoZWlyX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSksIGh0ID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiBPKHokMS5zdHJpbmcoKSksXG4gIGluaXRpYWxfaW50ZW50X2lkOiBPKHokMS5zdHJpbmcoKSksXG4gIGNvbnNlbnRfaWQ6IE8oeiQxLnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IE8oeiQxLnN0cmluZygpKSxcbiAgcGF5bWVudF9zZXNzaW9uOiBPKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIGtyID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInByZXNlbnRcIiwgW1xuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwoITApLCBocmVmOiB6JDEuc3RyaW5nKCkgfSksXG4gIHokMS5vYmplY3QoeyBwcmVzZW50OiB6JDEubGl0ZXJhbCghMSkgfSlcbl0pLCBQciA9IHokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZHM6IHokMS5hcnJheShlciksXG4gIHBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlOiBPKHhlKSxcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiBPKHokMS5hcnJheShodCkpXG59KSwgQXIgPSAodCkgPT4ge1xuICBjb25zdCByID0ge307XG4gIHJldHVybiBPYmplY3QuZW50cmllcyh0KS5mb3JFYWNoKChbZSwgbl0pID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgaSA9IHB0LnBhcnNlKGUpO1xuICAgICAgQXJyYXkuaXNBcnJheShuKSA/IHJbaV0gPSBuIDogQXJyYXkuaXNBcnJheShuLl9lcnJvcnMpICYmIChyW2ldID0gbi5fZXJyb3JzKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0pLCByO1xufSwgSXIgPSB6JDEub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BtX2lkOiB6JDEuc3RyaW5nKClcbn0pLCBPciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbn0pLCBSciA9IHtcbiAgdXNkOiBcInVzZFwiLFxuICBicmw6IFwiYnJsXCJcbn0sIFNlID0gYXN5bmMgKHQpID0+IHtcbiAgZm9yIChsZXQgZSA9IDA7IGUgPCAxMDsgZSsrKVxuICAgIFllKCkgfHwgYXdhaXQgRHIoNTAwKTtcbiAgaWYgKCFZZSgpKVxuICAgIHRocm93IGNvbnNvbGUubG9nKFwiU3RyaXBlIEpTIG5vdCBmb3VuZC5cIiksIG5ldyBFcnJvcihcIlN0cmlwZSBKUyBub3QgZm91bmQuXCIpO1xuICByZXR1cm4gbmV3IFN0cmlwZSh0KTtcbn0sIFRyID0gYXN5bmMgKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IGF3YWl0IFNlKHQpO1xuICByZXR1cm4ge1xuICAgIGVsZW1lbnRzOiBlLmVsZW1lbnRzKHIpLFxuICAgIHN0cmlwZTogZVxuICB9O1xufSwgTXIgPSBhc3luYyAodCwgciwgZSwgbiwgaSkgPT4ge1xuICBjb25zdCBzID0gYXdhaXQgU2UodCksIGEgPSBScltlLnRvTG93ZXJDYXNlKCkudHJpbSgpXTtcbiAgcmV0dXJuIHMucGF5bWVudFJlcXVlc3Qoe1xuICAgIC8vIFRPRE86IHJlcGxhY2UgdGhpcyB3aXRoIHN0cmlwZSBhY2NvdW50IGNvdW50cnkgYXMgc29vbiBhcyB3ZSBzdXBwb3J0IGl0XG4gICAgY291bnRyeTogXCJVU1wiLFxuICAgIGN1cnJlbmN5OiBhLFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogXCJUb3RhbFwiLFxuICAgICAgYW1vdW50OiByLFxuICAgICAgcGVuZGluZzogblxuICAgIH0sXG4gICAgLy8gcmVxdWVzdFNoaXBwaW5nOiB0cnVlLFxuICAgIHJlcXVlc3RQYXllck5hbWU6ICEwLFxuICAgIHJlcXVlc3RQYXllckVtYWlsOiAhMCxcbiAgICBkaXNhYmxlV2FsbGV0czogW11cbiAgfSk7XG59LCBEciA9ICh0KSA9PiBuZXcgUHJvbWlzZSgocikgPT4ge1xuICBzZXRUaW1lb3V0KHIsIHQpO1xufSksIFllID0gKCkgPT4gXCJTdHJpcGVcIiBpbiB3aW5kb3csIEZyID0gYXN5bmMgKHQpID0+IG5ldyBQcm9taXNlKChyLCBlKSA9PiB7XG4gIHRyeSB7XG4gICAgdC5vbihcInBheW1lbnRtZXRob2RcIiwgYXN5bmMgKG4pID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKFwicGF5bWVudG1ldGhvZCBFVlQ6OiBcIiwgbiksIHIobik7XG4gICAgfSksIHQub24oXCJ0b2tlblwiLCBhc3luYyAobikgPT4ge1xuICAgICAgY29uc29sZS5sb2coXCJ0b2tlbiBFVlQ6OiBcIiwgbik7XG4gICAgfSksIHQub24oXCJjYW5jZWxcIiwgKCkgPT4ge1xuICAgICAgZShuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlcIikpO1xuICAgIH0pO1xuICB9IGNhdGNoIChuKSB7XG4gICAgZShuKTtcbiAgfVxufSksIExyID0gYXN5bmMgKHQsIHIpID0+IHtcbiAgaWYgKCF0LnN0cmlwZV9wayB8fCAhdC5jbGllbnRfc2VjcmV0KVxuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBuZXh0IGFjdGlvbiBtZXRhZGF0YSBmb3JtYXQ6ICR7SlNPTi5zdHJpbmdpZnkodCl9YCk7XG4gIGNvbnN0IG4gPSBhd2FpdCAoYXdhaXQgU2UodC5zdHJpcGVfcGspKS5jb25maXJtQ2FyZFNldHVwKHQuY2xpZW50X3NlY3JldCwge1xuICAgIHBheW1lbnRfbWV0aG9kOiByLnBheW1lbnRNZXRob2QuaWRcbiAgfSk7XG4gIGlmIChuLmVycm9yKVxuICAgIHRocm93IHIuY29tcGxldGUoXCJmYWlsXCIpLCBuZXcgRXJyb3IoYFBheW1lbnQgZmFpbGVkOiAke24uZXJyb3IubWVzc2FnZSA/PyBcInVua25vd25cIn1gKTtcbiAgcmV0dXJuIHIuY29tcGxldGUoXCJzdWNjZXNzXCIpLCBuO1xufSwgTnIgPSBhc3luYyAodCkgPT4ge1xuICB2YXIgaSwgcywgYSwgYztcbiAgY29uc3QgZSA9IGF3YWl0IChhd2FpdCBTZSh0LnN0cmlwZV9waykpLmNvbmZpcm1DYXJkU2V0dXAodC5jbGllbnRfc2VjcmV0LCB7XG4gICAgcGF5bWVudF9tZXRob2Q6IHQuc3RyaXBlX3BtX2lkXG4gIH0pLCBuID0gKGkgPSBlLnNldHVwSW50ZW50KSA9PSBudWxsID8gdm9pZCAwIDogaS5zdGF0dXM7XG4gIGlmIChuID09PSBcInN1Y2NlZWRlZFwiKVxuICAgIGNvbnNvbGUubG9nKFwiWzNEU10gQ09ORklSTUlORyBQTTpcIiwgdC5zdHJpcGVfcG1faWQpLCBjb25zb2xlLmxvZyhcIlszRFNdIFNldHVwIGludGVudCBjcmVhdGVkOlwiLCBlLnNldHVwSW50ZW50KTtcbiAgZWxzZSB0aHJvdyBuID09PSBcImNhbmNlbGVkXCIgPyBuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlcIikgOiBuZXcgRXJyb3IoXG4gICAgYCR7KChzID0gZS5lcnJvcikgPT0gbnVsbCA/IHZvaWQgMCA6IHMubWVzc2FnZSkgPz8gKChjID0gKGEgPSBlLnNldHVwSW50ZW50KSA9PSBudWxsID8gdm9pZCAwIDogYS5sYXN0X3NldHVwX2Vycm9yKSA9PSBudWxsID8gdm9pZCAwIDogYy5tZXNzYWdlKSA/PyBcIlBheW1lbnQgZmFpbGVkLCBwbGVhc2UgY2xpY2sgc3VibWl0IGFnYWluIHRvIHBheS5cIn1gXG4gICk7XG59LCBqciA9ICh0KSA9PiBKU09OLnN0cmluZ2lmeSh0KSwgb2UgPSAodCwgcikgPT4gQXJyYXkuZnJvbSh0LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1vcGlkXVwiKSA/PyBbXSkucmVkdWNlKChpLCBzKSA9PiB7XG4gIGNvbnN0IGEgPSBzLmdldEF0dHJpYnV0ZShcImRhdGEtb3BpZFwiKTtcbiAgcmV0dXJuIGEgPyB7IC4uLmksIFthXTogcy52YWx1ZSB9IDogaTtcbn0sIHt9KSwgVXIgPSAodCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB3ci5wYXJzZSh0KTtcbiAgfSBjYXRjaCAocikge1xuICAgIHRocm93IGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwYXJzaW5nIGV2ZW50IHBheWxvYWQ6XCIsIHQsIHIpLCByO1xuICB9XG59LCB4ciA9IGFzeW5jICh0KSA9PiB7XG4gIGlmICh0eXBlb2YgdCAhPSBcIm9iamVjdFwiIHx8ICF0KSByZXR1cm4gITE7XG4gIHRyeSB7XG4gICAgY29uc3QgciA9IHsgdHlwZTogXCJwaW5nXCIgfSwgZSA9IGF3YWl0IHQuc2VuZChyKTtcbiAgICBpZiAoZSAhPT0gITApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICd0cnVlJyBhZnRlciBwaW5nLCBnb3QgJHtKU09OLnN0cmluZ2lmeShlKX1gKTtcbiAgICByZXR1cm4gITA7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICByZXR1cm4gY29uc29sZS5lcnJvcihcIkludmFsaWQgQ0RFIGNvbm5lY3Rpb24gY2hlY2s6XCIsIHIpLCAhMTtcbiAgfVxufSwgJHIgPSAodCwgcikgPT4gISF0ICYmIHIsIF8gPSAodCkgPT4geiQxLm51bGxhYmxlKHQub3B0aW9uYWwoKSk7XG56JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IFwiQ2Fubm90IGJlIGJsYW5rXCIgfSk7XG5jb25zdCBWciA9IHokMS5vYmplY3Qoe1xuICBjZGVfcmVzcG9uc2VfdHlwZTogeiQxLmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbnokMS5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG5jb25zdCBfdCA9IHokMS5vYmplY3Qoe1xuICBuYW1lOiB6JDEuc3RyaW5nKCksXG4gIGFtb3VudF9hdG9tX29mZjogXyh6JDEubnVtYmVyKCkpLFxuICBwZXJjZW50X29mZjogXyh6JDEubnVtYmVyKCkpLFxuICBjdXJyZW5jeTogXyh6JDEuc3RyaW5nKCkpLFxuICBkdXJhdGlvbjogeiQxLnN0cmluZygpLFxuICBkdXJhdGlvbl9pbl9tb250aHM6IF8oeiQxLm51bWJlcigpKVxufSksIGd0ID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiBfKHokMS5zdHJpbmcoKSksXG4gIHByaWNlX2lkOiB6JDEuc3RyaW5nKCksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IF8oeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogXyh6JDEubnVtYmVyKCkuaW50KCkpLFxuICBxdWFudGl0eTogeiQxLm51bWJlcigpLmludCgpXG59KSwgcXIgPSB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSwgR3IgPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBzZXR0aW5nczogXyhxcilcbn0pLCB1ZSA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogXyh6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogXyh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCB6ciA9IHokMS5vYmplY3Qoe1xuICBxdWFudGl0eTogeiQxLm51bWJlcigpXG59KSwgWXIgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IF8oeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogXyh6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBfKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogeiQxLmFycmF5KHpyKSxcbiAgdHJpYWxfc3RhcnQ6IF8oeiQxLnN0cmluZygpKSxcbiAgdHJpYWxfZW5kOiBfKHokMS5zdHJpbmcoKSlcbn0pLCB3dCA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpXG59KSwgS3IgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgYW1vdW50X2F0b21fY29uc2lkZXJpbmdfZGlzY291bnRfYXBwbGllZDogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheSh3dCksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6JDEuc3RyaW5nKClcbn0pLCBIciA9IHokMS5vYmplY3Qoe1xuICBjb3Vwb246IF90XG59KSwgV3IgPSB6JDEub2JqZWN0KHtcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRzOiB6JDEuYXJyYXkoSHIpLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IF8oeiQxLnN0cmluZygpKSxcbiAgbGluZXM6IHokMS5hcnJheShLciksXG4gIHJlbWFpbmluZ19hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0YXhfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkod3QpXG59KSwgS2UgPSB6JDEub2JqZWN0KHtcbiAgY3JlYXRlZDogeiQxLmFycmF5KFlyKSxcbiAgaW52b2ljZXM6IHokMS5hcnJheShXcilcbn0pLCBidCA9IHokMS5vYmplY3Qoe1xuICBwcmV2aWV3OiBLZSxcbiAgcHJldmlld19wb3N0X3RyaWFsOiBfKEtlKSxcbiAgY291cG9uczogeiQxLmFycmF5KF90KVxufSksIEhlID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJvcGVuXCIpLFxuICB0b2tlbjogeiQxLnN0cmluZygpLFxuICBlbWFpbDogXyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoZ3QpLFxuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBicmFuZDogR3IsXG4gIHN1YnNfcHJldmlldzogXyhidCksXG4gIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICBtZXRob2RzX2F2YWlsYWJsZTogeiQxLmFycmF5KHVlKVxufSksIHZ0ID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcIm1vZGVcIiwgW1xuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEubGl0ZXJhbChcInNldHVwXCIpLFxuICAgIGN1cnJlbmN5OiB6JDEubnVsbGFibGUoeiQxLnVuZGVmaW5lZCgpKVxuICB9KS5leHRlbmQoSGUuc2hhcGUpLFxuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEuZW51bShbXCJwYXltZW50XCIsIFwic3Vic2NyaXB0aW9uXCJdKSxcbiAgICBjdXJyZW5jeTogeiQxLnN0cmluZygpXG4gIH0pLmV4dGVuZChIZS5zaGFwZSlcbl0pLCBaciA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiY29tcGxldGVcIilcbn0pLCBKciA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiZXhwaXJlZFwiKVxufSk7XG56JDEudW5pb24oW3Z0LCBaciwgSnJdKTtcbnokMS5vYmplY3Qoe1xuICBsb2dvOiB6JDEuc3RyaW5nKCksXG4gIGljb246IHokMS5zdHJpbmcoKSxcbiAgcHJpbWFyeV9jb2xvcjogeiQxLnN0cmluZygpLFxuICBzZWNvbmRhcnlfY29sb3I6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHBtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwYXltZW50X2lucHV0OiB6JDEuYW55KCksXG4gIC8vIFNob3VsZCBmb2xsb3cgQW55UGF5bWVudElucHV0IGZyb20gQ0RFXG4gIGN1c3RvbWVyX2ZpcnN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9sYXN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl96aXBfY29kZTogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl9jb3VudHJ5OiB6JDEuc3RyaW5nKCksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShndCksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGNhbmNlbF9hdF9lbmQ6IHokMS5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB1ZSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHVzZV9jb25maXJtZWRfcG1faWQ6IF8oeiQxLnN0cmluZygpKVxufSk7XG5jb25zdCBCciA9IHokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZF9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICByZXR1cm5fdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgUXIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLmFycmF5KFFyKTtcbmNvbnN0IFhyID0geiQxLm9iamVjdCh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KSwgZW4gPSB6JDEub2JqZWN0KHtcbiAgcHJpY2VfaWQ6IHokMS5zdHJpbmcoKSxcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKS5pbnQoKVxufSksIHRuID0geiQxLm9iamVjdCh7XG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShlbiksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KClcbn0pLCBybiA9IHokMS5vYmplY3Qoe1xuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IF8oeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X3Byb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB1ZSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aGVpcl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHVzZV9wYXlfZmlyc3RfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IHRuLm9wdGlvbmFsKClcbn0pLmV4dGVuZChYci5zaGFwZSkuZXh0ZW5kKHJuLnNoYXBlKTtcbmNvbnN0IEV0ID0geiQxLm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeiQxLmFycmF5KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogXyh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBmaWVsZHM6IG1yLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IHVlXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IGxlLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogdWUsXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKVxuICAvLyBUaGlzIGlzIG9wdGlvbmFsIGluIENERSwgYnV0IG5vdCBpbiBPSlMgbW92aW5nIGZvcndhcmRcbn0pO1xuY29uc3Qgbm4gPSB6JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBjY19wbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5yZWNvcmQoeiQxLmFueSgpKTtcbnokMS5vYmplY3Qoe1xuICBmaXJzdF9uYW1lOiBfKHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogXyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lMTogXyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lMjogXyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lMzogXyh6JDEuc3RyaW5nKCkpLFxuICBjaXR5OiBfKHokMS5zdHJpbmcoKSksXG4gIHN0YXRlOiBfKHokMS5zdHJpbmcoKSksXG4gIGNvdW50cnk6IF8oeiQxLnN0cmluZygpKSxcbiAgemlwX2NvZGU6IF8oeiQxLnN0cmluZygpKSxcbiAgZW1haWw6IF8oeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogXyh6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IF8oeiQxLnN0cmluZygpKSxcbiAgdXBkYXRlX3Byb2Nlc3Nvcl9jdXN0b21lcjogXyh6JDEuYm9vbGVhbigpKVxufSk7XG5jb25zdCBvbiA9IHokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICBlbWFpbDogXyh6JDEuc3RyaW5nKCkpLFxuICBmaXJzdF9uYW1lOiBfKHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogXyh6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IF8oeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogXyh6JDEuc3RyaW5nKCkpLFxuICBhZGRyZXNzOiBfKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIHNuID0gKHQpID0+IHQucmVkdWNlKChyLCBlKSA9PiByICsgZSwgMCk7XG5mdW5jdGlvbiBhbih0LCByKSB7XG4gIHZhciBlID0gT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuICBlID8gZSh0LCByKSA6IHQuX19wcm90b19fID0gcjtcbn1cbmZ1bmN0aW9uIGNuKHQsIHIpIHtcbiAgciA9PT0gdm9pZCAwICYmIChyID0gdC5jb25zdHJ1Y3Rvcik7XG4gIHZhciBlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIGUgJiYgZSh0LCByKTtcbn1cbnZhciBsbiA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgdmFyIHQgPSBmdW5jdGlvbihlLCBuKSB7XG4gICAgcmV0dXJuIHQgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbihpLCBzKSB7XG4gICAgICBpLl9fcHJvdG9fXyA9IHM7XG4gICAgfSB8fCBmdW5jdGlvbihpLCBzKSB7XG4gICAgICBmb3IgKHZhciBhIGluIHMpXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBhKSAmJiAoaVthXSA9IHNbYV0pO1xuICAgIH0sIHQoZSwgbik7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbihyLCBlKSB7XG4gICAgaWYgKHR5cGVvZiBlICE9IFwiZnVuY3Rpb25cIiAmJiBlICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhlKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgdChyLCBlKTtcbiAgICBmdW5jdGlvbiBuKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IHI7XG4gICAgfVxuICAgIHIucHJvdG90eXBlID0gZSA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoZSkgOiAobi5wcm90b3R5cGUgPSBlLnByb3RvdHlwZSwgbmV3IG4oKSk7XG4gIH07XG59KCksIHVuID0gZnVuY3Rpb24odCkge1xuICBsbihyLCB0KTtcbiAgZnVuY3Rpb24gcihlLCBuKSB7XG4gICAgdmFyIGkgPSB0aGlzLmNvbnN0cnVjdG9yLCBzID0gdC5jYWxsKHRoaXMsIGUsIG4pIHx8IHRoaXM7XG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCBcIm5hbWVcIiwge1xuICAgICAgdmFsdWU6IGkubmFtZSxcbiAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgIH0pLCBhbihzLCBpLnByb3RvdHlwZSksIGNuKHMpLCBzO1xuICB9XG4gIHJldHVybiByO1xufShFcnJvcik7XG5jbGFzcyBTdCBleHRlbmRzIHVuIHtcbiAgY29uc3RydWN0b3Iocikge1xuICAgIGNvbnN0IGUgPSBgJHtyLm1lc3NhZ2V9YDtcbiAgICBzdXBlcihlKSwgdGhpcy5yZXNwb25zZSA9IHI7XG4gIH1cbiAgZ2V0IG9yaWdpbmFsRXJyb3JNZXNzYWdlKCkge1xuICAgIHJldHVybiB0aGlzLnJlc3BvbnNlLm1lc3NhZ2U7XG4gIH1cbn1cbmNvbnN0IFQgPSBhc3luYyAodCwgciwgZSkgPT4ge1xuICBjb25zdCBuID0gYXdhaXQgdC5zZW5kKHIpO1xuICBpZiAocG4obikpXG4gICAgdGhyb3cgbmV3IFN0KG4pO1xuICBpZiAoIWRuKG4sIGUpKSB7XG4gICAgY29uc3QgaSA9IGUuc2FmZVBhcnNlKG4pO1xuICAgIHRocm93IGkuc3VjY2VzcyA/IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGVcIikgOiAoY29uc29sZS5lcnJvcihcIk9KUyBxdWVyeUFwaSBnb3QgYSBzY2hlbWEgZXJyb3IuIEV4cGVjdGVkIHNjaGVtYTpcIiwgZSwgXCJBY3R1YWw6XCIsIG4pLCBpLmVycm9yKTtcbiAgfVxuICByZXR1cm4gbjtcbn0sIGRuID0gKHQsIHIpID0+IHIuc2FmZVBhcnNlKHQpLnN1Y2Nlc3MsIHBuID0gKHQpID0+IFZyLnNhZmVQYXJzZSh0KS5zdWNjZXNzLCBtbiA9IGFzeW5jICh0LCByKSA9PiBhd2FpdCBUKHQsIHsgdHlwZTogXCJnZXRfY2hlY2tvdXRfcHJldmlld1wiLCBwYXlsb2FkOiByIH0sIGJ0KSwgVyA9IGFzeW5jICh0KSA9PiBhd2FpdCBUKHQsIHsgdHlwZTogXCJnZXRfcHJlZmlsbFwiLCBwYXlsb2FkOiB7fSB9LCB2dCksIENlID0gYXN5bmMgKHQsIHIpID0+IGF3YWl0IFQodCwgeyB0eXBlOiBcInYyX3N0YXJ0X3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiByIH0sIEV0KSwgZm4gPSBhc3luYyAodCwgcikgPT4gYXdhaXQgVCh0LCB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9jY1wiLCBwYXlsb2FkOiByIH0sIG5uKSwgeW4gPSBhc3luYyAodCwgcikgPT4gYXdhaXQgVCh0LCB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wclwiLCBwYXlsb2FkOiByIH0sIEV0KSwgSCA9IGFzeW5jICh0LCByKSA9PiBhd2FpdCBUKHQsIHsgdHlwZTogXCJjb25maXJtX3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiByIH0sIFByKSwgaG4gPSBhc3luYyAodCwgcikgPT4gYXdhaXQgVChcbiAgdCxcbiAgeyB0eXBlOiBcImNoZWNrX2lmX3BvcHVwX3dpbmRvd192ZXJpZmllZFwiLCBwYXlsb2FkOiByIH0sXG4gIGtyXG4pLCBfbiA9IGFzeW5jICh0LCByLCBlKSA9PiB7XG4gIGNvbnN0IG4gPSBhd2FpdCBtbih0LCB7XG4gICAgc2VjdXJlX3Rva2VuOiByLFxuICAgIHByb21vdGlvbl9jb2RlOiBlXG4gIH0pLCBpID0gbmV3IFNldChuLnByZXZpZXcuaW52b2ljZXMubWFwKChjKSA9PiBjLmN1cnJlbmN5KSk7XG4gIGlmIChpLnNpemUgIT09IDEpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBleGFjdGx5IG9uZSBjdXJyZW5jeSwgZ290ICR7aS5zaXplfWApO1xuICBjb25zdCBzID0gaS52YWx1ZXMoKS5uZXh0KCkudmFsdWUgPz8gXCJ1c2RcIiwgYSA9IHNuKG4ucHJldmlldy5pbnZvaWNlcy5tYXAoKGMpID0+IGMucmVtYWluaW5nX2Ftb3VudF9hdG9tKSk7XG4gIHJldHVybiB7XG4gICAgY3VycmVuY3k6IHMsXG4gICAgYW1vdW50QXRvbTogYVxuICB9O1xufSwga2UgPSBhc3luYyAodCwgciwgZSwgbikgPT4ge1xuICBpZiAoZSlcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiAwLCBjdXJyZW5jeTogXCJ1c2RcIiB9O1xuICB7XG4gICAgbiA9IG4gfHwgdm9pZCAwO1xuICAgIGNvbnN0IGkgPSBhd2FpdCBfbih0LCByLCBuKTtcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiBpLmFtb3VudEF0b20sIGN1cnJlbmN5OiBpLmN1cnJlbmN5IH07XG4gIH1cbn0sIGduID0gYXN5bmMgKHQsIHIpID0+IHtcbiAgaWYgKHQuc2l6ZSA9PT0gMClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBDREUgY29ubmVjdGlvbnMgZm91bmRcIik7XG4gIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBBcnJheS5mcm9tKHQudmFsdWVzKCkpLm1hcChcbiAgICAgIChuKSA9PiBUKG4sIHsgdHlwZTogXCJ0b2tlbml6ZV9jYXJkXCIsIHBheWxvYWQ6IHIgfSwgRXIpXG4gICAgKVxuICApO1xufSwgV2UgPSBhc3luYyAodCwgcikgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBUKHQsIHsgdHlwZTogXCJjaGVja291dF9jYXJkX2VsZW1lbnRzXCIsIHBheWxvYWQ6IHIgfSwgeGUpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgY29uc29sZS5lcnJvcihcIltjZGUtY2xpZW50XSBFcnJvciBkdXJpbmcgY2hlY2tvdXRDYXJkRWxlbWVudHM6XCIsIGUsIEpTT04uc3RyaW5naWZ5KGUpKSwgZTtcbiAgfVxufSwgd24gPSBhc3luYyAodCwgcikgPT4gYXdhaXQgVCh0LCB7IHR5cGU6IFwic2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZDogciB9LCBCciksIFBlID0gYXN5bmMgKHQsIHIpID0+IGF3YWl0IFQodCwgeyB0eXBlOiBcImNoZWNrb3V0XCIsIHBheWxvYWQ6IHIgfSwgeGUpLCBDdCA9IDFlMywgYm4gPSBhc3luYyAodCwgcikgPT4ge1xuICBjb25zb2xlLmxvZyhyKTtcbiAgY29uc3QgbiA9IGF3YWl0IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWU6IHQsXG4gICAgZGVidWc6ICEwLFxuICAgIHRpbWVvdXQ6IEN0LFxuICAgIGNoaWxkT3JpZ2luOiBcIipcIlxuICAgIC8vIFRPRE86IHVzZSB3aXRoIHByb3BlciBjaGlsZE9yaWdpblxuICB9KS5wcm9taXNlLCBpID0gYXdhaXQgVChuLCB7IHR5cGU6IFwicGluZy0zZHMtc3RhdHVzXCIgfSwgU3IpO1xuICByZXR1cm4gY29uc29sZS5sb2coXCLwn5+iIENERSBjb25uZWN0aW9uIHN1Y2Nlc3NmdWwhIFN0b3BwaW5nIHBvbGxpbmcuLi4gUmVzdWx0OlwiLCBpKSwgaTtcbn0sIHZuID0gYXN5bmMgKHQsIHIpID0+IGF3YWl0IFQodCwgeyB0eXBlOiBcInVwZGF0ZV9jaGVja291dF9jdXN0b21lclwiLCBwYXlsb2FkOiByIH0sIG9uKTtcbmZ1bmN0aW9uICRlKHQpIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgY2FzZTogJHt0fWApO1xufVxuY29uc3Qgc2UgPSAodCkgPT4gYXN5bmMgKHIpID0+IHtcbiAgdmFyIGUsIG47XG4gIHRyeSB7XG4gICAgKG4gPSAoZSA9IHIuZm9ybUNhbGxiYWNrcy5nZXQpLm9uQ2hlY2tvdXRTdGFydGVkKSA9PSBudWxsIHx8IG4uY2FsbChlKTtcbiAgICBjb25zdCBpID0gYXdhaXQgdChyKTtcbiAgICBpZiAoaS5tb2RlID09PSBcInNldHVwXCIpXG4gICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyhpLnJlc3VsdC5wYXltZW50X21ldGhvZF9pZCk7XG4gICAgZWxzZSBpZiAoaS5tb2RlID09PSBcImNoZWNrb3V0XCIpXG4gICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRTdWNjZXNzKFxuICAgICAgICBpLnJlc3VsdC5pbnZvaWNlX3VybHMsXG4gICAgICAgIGkucmVzdWx0LnN1YnNjcmlwdGlvbl9pZHMsXG4gICAgICAgIGkucmVzdWx0LmN1c3RvbWVyX2lkXG4gICAgICApO1xuICAgIGVsc2VcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIG1vZGU6ICR7aX1gKTtcbiAgfSBjYXRjaCAoaSkge1xuICAgIHIuZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKFkoaSkpO1xuICB9XG59LCBBZSA9ICh0KSA9PiBhc3luYyAocikgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCB0KHIpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc3QgeyBlcnJfXzogbiB9ID0gQyhcImluaXQtZXJyb3ItY2F0Y2hlclwiKTtcbiAgICByZXR1cm4gbihlKSwgeyBpc0F2YWlsYWJsZTogITEsIHJlYXNvbjogWShlKSB9O1xuICB9XG59LCBDID0gKHQpID0+IHtcbiAgY29uc3QgciA9ICguLi5uKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUubG9nKGAke21lLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7bWUuYm9sZC5ncmF5KGAke3R9YCl9XHRgLCAuLi5uKTtcbiAgfSwgZSA9ICguLi5uKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUud2FybihgJHttZS5yZWQuYm9sZChcIm9qcy9cIil9JHttZS5ib2xkLmdyYXkoYCR7dH1gKX1cdGAsIC4uLm4pO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZzogcixcbiAgICBlcnI6IGUsXG4gICAgbG9nX186IHIsXG4gICAgZXJyX186IGVcbiAgfTtcbn0sIHsgbG9nX186IERpLCBlcnJfXzogRW4gfSA9IEMoXCJjb21tb25cIiksIFZlID0gKHQpID0+IHtcbiAgaWYgKHQucGF5bWVudF9tZXRob2RzLmxlbmd0aCAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIHBheW1lbnQgbWV0aG9kLCBnb3QgJHt0LnBheW1lbnRfbWV0aG9kcy5sZW5ndGh9YCk7XG4gIHJldHVybiB7IHBheW1lbnRfbWV0aG9kX2lkOiB0LnBheW1lbnRfbWV0aG9kc1swXS5pZCB9O1xufSwgYWUgPSAodCwgcikgPT4ge1xuICBjb25zdCBlID0gdC5maW5kKChuKSA9PiByLnNhZmVQYXJzZShuKS5zdWNjZXNzKTtcbiAgaWYgKCFlKVxuICAgIHRocm93IEVuKFwiTm8gQ1BNcyBmb3VuZCBmb3IgbW9kZWwuIEFsbCBtb2RlbHM6XCIsIHQpLCBuZXcgRXJyb3IoXCJObyBDUE1zIGZvdW5kIGZvciBtb2RlbFwiKTtcbiAgcmV0dXJuIHIucGFyc2UoZSk7XG59LCBTbiA9ICh0KSA9PiAoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHQuZW1haWwsXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiB7XG4gICAgemlwX2NvZGU6IHQuemlwQ29kZSxcbiAgICBjb3VudHJ5OiB0LmNvdW50cnlcbiAgfSxcbiAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHQuZmlyc3ROYW1lLFxuICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiB0Lmxhc3ROYW1lXG59KSwgeyBsb2dfXzoga3QsIGVycl9fOiBQdCB9ID0gQyhcImNvbW1vbi1jY1wiKSwgY2UgPSAodCwgciwgZSkgPT4ge1xuICBpZiAoZSkge1xuICAgIGt0KGBSZWNlaXZlZCBkZWZhdWx0IGZpZWxkIHZhbHVlczogJHtKU09OLnN0cmluZ2lmeShlKX1gKTtcbiAgICBmb3IgKGNvbnN0IFtpLCBzXSBvZiBPYmplY3QuZW50cmllcyhlKSlcbiAgICAgIHRbaV0gfHwgKHRbaV0gPSBzKTtcbiAgfVxuICBjb25zdCBuID0gbGUuc2FmZVBhcnNlKHQpO1xuICBpZiAoIW4uc3VjY2Vzcykge1xuICAgIGNvbnN0IGkgPSBuLmVycm9yLmZvcm1hdCgpLCBzID0gQXIoaSk7XG4gICAgZm9yIChjb25zdCBbYSwgY10gb2YgT2JqZWN0LmVudHJpZXMocykpXG4gICAgICByKGEsIGMsIGEpO1xuICAgIHRocm93IFB0KFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIiwgcyksIG5ldyBFcnJvcihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIpO1xuICB9XG4gIHJldHVybiBuLmRhdGE7XG59LCBDbiA9ICh0LCByKSA9PiB7XG4gIGZvciAoY29uc3QgZSBvZiB0KVxuICAgIGlmIChlLnN1Y2Nlc3MgPT09ICExKVxuICAgICAgdGhyb3cgZS5lcnJvcnMuZm9yRWFjaCgobikgPT4ge1xuICAgICAgICBjb25zdCBpID0geXQuc2FmZVBhcnNlKG4uZWxlbWVudFR5cGUpO1xuICAgICAgICBpZiAoIWkuc3VjY2VzcylcbiAgICAgICAgICBQdChgVW5rbm93biBmaWVsZCBuYW1lIGluIG9uVmFsaWRhdGlvbkVycm9yOiAke24uZWxlbWVudFR5cGV9LiBFcnJvciBvYmplY3Q6YCwgbik7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHMgPSBpLmRhdGE7XG4gICAgICAgICAgcihzLCBuLmVycm9ycyk7XG4gICAgICAgIH1cbiAgICAgIH0pLCBrdChgRXJyb3IgdG9rZW5pemluZyBjYXJkOiBnb3QgdmFsaWRhdGlvbiBlcnJvcnM6ICR7SlNPTi5zdHJpbmdpZnkoZS5lcnJvcnMpfWApLCBuZXcgRXJyb3IoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgd2hpbGUgdG9rZW5pemluZyBjYXJkXCIpO1xufSwgWmUgPSBcIm9qcy1zdHJpcGUtbGluay1idG5cIiwgeyBsb2dfXzogRSwgZXJyX186IGtuIH0gPSBDKFwic3RyaXBlLWxpbmtcIiksIFBuID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInN0cmlwZV9saW5rXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIEFuID0geiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSksIEluID0gQWUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IHQsIGZvcm1DYWxsYmFja3M6IHIgfSkgPT4ge1xuICAgIGNvbnN0IGUgPSB0LmN1c3RvbUluaXRQYXJhbXMuc3RyaXBlTGluaztcbiAgICBFKFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgTGluay4uLlwiKTtcbiAgICBjb25zdCBuID0gYWUodC5jaGVja291dFBheW1lbnRNZXRob2RzLCBQbik7XG4gICAgRShcIlN0YXJ0aW5nIHN0cmlwZSBsaW5rIGZsb3cuLi5cIik7XG4gICAgY29uc3QgaSA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgcyA9IGF3YWl0IFcoaSksIGEgPSBzLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBFKFwiQ3JlYXRpbmcgc3RyaXBlIGVsZW1lbnRzLi4uXCIpO1xuICAgIGNvbnN0IGMgPSBhd2FpdCBrZShpLCBzLnRva2VuLCBhLCB2b2lkIDApLCB7IGVsZW1lbnRzOiB1LCBzdHJpcGU6IGwgfSA9IGF3YWl0IFRyKG4ubWV0YWRhdGEuc3RyaXBlX3BrLCB7XG4gICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICBjdXJyZW5jeTogYy5jdXJyZW5jeSxcbiAgICAgIHNldHVwX2Z1dHVyZV91c2FnZTogXCJvZmZfc2Vzc2lvblwiLFxuICAgICAgcGF5bWVudE1ldGhvZENyZWF0aW9uOiBcIm1hbnVhbFwiXG4gICAgfSk7XG4gICAgRShcIkNyZWF0aW5nIGV4cHJlc3MgY2hlY2tvdXQuLi5cIik7XG4gICAgY29uc3QgcCA9IHUuY3JlYXRlKFwiZXhwcmVzc0NoZWNrb3V0XCIsIHtcbiAgICAgIGJ1dHRvbkhlaWdodDogZSA9PSBudWxsID8gdm9pZCAwIDogZS5idXR0b25IZWlnaHQsXG4gICAgICBwYXltZW50TWV0aG9kczoge1xuICAgICAgICBhbWF6b25QYXk6IFwibmV2ZXJcIixcbiAgICAgICAgYXBwbGVQYXk6IFwibmV2ZXJcIixcbiAgICAgICAgZ29vZ2xlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIHBheXBhbDogXCJuZXZlclwiXG4gICAgICB9XG4gICAgfSksIGYgPSAoKSA9PiB7XG4gICAgICBwLm1vdW50KGAjJHtaZX1gKTtcbiAgICB9LCBnID0gKCkgPT4ge1xuICAgICAgcC51bm1vdW50KCk7XG4gICAgfTtcbiAgICByZXR1cm4gZSAhPSBudWxsICYmIGUuZG9Ob3RNb3VudE9uSW5pdCA/IEUoXCJOT1QgbW91bnRpbmcgc3RyaXBlIGxpbmsgYnV0dG9uIChkb05vdE1vdW50T25Jbml0IGlzIHRydWUpXCIpIDogKEUoXCJNb3VudGluZyBzdHJpcGUgbGluayBidXR0b24uLi5cIiksIGYoKSksIHAub24oXCJjbGlja1wiLCBhc3luYyAobSkgPT4ge1xuICAgICAgaWYgKEUoXCJTdHJpcGUgTGluayBidXR0b24gY2xpY2tlZFwiKSwgZSAhPSBudWxsICYmIGUub3ZlcnJpZGVMaW5rU3VibWl0ICYmICFhd2FpdCBlLm92ZXJyaWRlTGlua1N1Ym1pdCgpKSB7XG4gICAgICAgIEUoXCJTdHJpcGUgTGluayBzdWJtaXQgYWJvcnRlZCBieSBvdmVycmlkZUxpbmtTdWJtaXRcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIG0ucmVzb2x2ZSgpO1xuICAgIH0pLCBwLm9uKFwiY29uZmlybVwiLCBhc3luYyAobSkgPT4ge1xuICAgICAgRShcIlN0cmlwZSBMaW5rIHdpbmRvdyBjb25maXJtZWRcIiwgbSk7XG4gICAgICBjb25zdCB5ID0gYXdhaXQgbC5jcmVhdGVQYXltZW50TWV0aG9kKHtcbiAgICAgICAgZWxlbWVudHM6IHUsXG4gICAgICAgIHBhcmFtczoge1xuICAgICAgICAgIGJpbGxpbmdfZGV0YWlsczogbS5iaWxsaW5nRGV0YWlsc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHkuZXJyb3IgPyAoa24oXCJlcnJvclwiLCB5LmVycm9yKSwgci5nZXQub25DaGVja291dEVycm9yKHkuZXJyb3IubWVzc2FnZSA/PyBcIlN0cmlwZSBMaW5rIHVua25vd24gZXJyb3JcIikpIDogKEUoXCJwYXltZW50TWV0aG9kXCIsIHkucGF5bWVudE1ldGhvZCksIEwuc3RyaXBlTGluay5ydW4oe1xuICAgICAgICBjb250ZXh0OiB0LFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IG9lKHQuZm9ybURpdiksXG4gICAgICAgIGZvcm1DYWxsYmFja3M6IHIsXG4gICAgICAgIGN1c3RvbVBhcmFtczogeyBzdHJpcGVQTTogeS5wYXltZW50TWV0aG9kIH0sXG4gICAgICAgIGluaXRSZXN1bHQ6IHsgaXNBdmFpbGFibGU6ICEwIH1cbiAgICAgIH0pKTtcbiAgICB9KSwge1xuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgY29udHJvbGxlcjoge1xuICAgICAgICBtb3VudEJ1dHRvbjogZixcbiAgICAgICAgZGlzbW91bnRCdXR0b246IGcsXG4gICAgICAgIHdhaXRGb3JCdXR0b25Ub01vdW50OiBhc3luYyAoKSA9PiBhd2FpdCBUbihaZSlcbiAgICAgIH1cbiAgICB9O1xuICB9XG4pLCBPbiA9IHNlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGlcbiAgfSkgPT4ge1xuICAgIEUoXCJSdW5uaW5nIFN0cmlwZSBMaW5rIGZsb3cuLi5cIik7XG4gICAgY29uc3QgcyA9IHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBFKFwiTWVyZ2luZyBQTSBmaWVsZHMgd2l0aCBmb3JtIGZpZWxkcy4uLlwiKTtcbiAgICBjb25zdCBhID0gUm4oZSwgaS5zdHJpcGVQTSksIGMgPSBjZShhLCBuLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgRShcIlN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLlwiKTtcbiAgICBjb25zdCB1ID0gYXdhaXQgQ2Uocywge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogci5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiByLFxuICAgICAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IGkuc3RyaXBlUE0uaWQsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IGNbZC5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogY1tkLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogY1tkLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICB6aXBfY29kZTogY1tkLlpJUF9DT0RFXSxcbiAgICAgICAgY291bnRyeTogY1tkLkNPVU5UUlldXG4gICAgICB9XG4gICAgfSk7XG4gICAgRShcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCB1KTtcbiAgICBjb25zdCBwID0gQW4ucGFyc2UodS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpWzBdLm91cl9leGlzdGluZ19wbV9pZCwgZiA9IGF3YWl0IFcocyk7XG4gICAgaWYgKGYubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBFKFwiRG9pbmcgcGF5bWVudCBzZXR1cC4uLlwiKTtcbiAgICAgIGNvbnN0IGcgPSBhd2FpdCBIKHMsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBmLnRva2VuLFxuICAgICAgICBleGlzdGluZ19jY19wbV9pZDogcFxuICAgICAgfSk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogVmUoZykgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgRShcIkRvaW5nIGNoZWNrb3V0Li4uXCIpO1xuICAgICAgY29uc3QgZyA9IHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBmLnRva2VuLFxuICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgcHJvdmlkZXJfdHlwZTogci5wcm92aWRlclxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21lcl9lbWFpbDogY1tkLkVNQUlMXSxcbiAgICAgICAgY3VzdG9tZXJfemlwX2NvZGU6IGNbZC5aSVBfQ09ERV0sXG4gICAgICAgIGN1c3RvbWVyX2NvdW50cnk6IGNbZC5DT1VOVFJZXSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IGNbZC5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgIGxpbmVfaXRlbXM6IGYubGluZV9pdGVtcyxcbiAgICAgICAgdG90YWxfYW1vdW50X2F0b206IGYuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgIGNhbmNlbF9hdF9lbmQ6ICExLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogclxuICAgICAgfTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCBQZShzLCBnKSB9O1xuICAgIH1cbiAgfVxuKSwgUm4gPSAodCwgcikgPT4ge1xuICB2YXIgYSwgYywgdSwgbCwgcDtcbiAgY29uc3QgZSA9IHsgLi4udCB9LCBbbiwgLi4uaV0gPSAoKGMgPSAoYSA9IHIuYmlsbGluZ19kZXRhaWxzLm5hbWUpID09IG51bGwgPyB2b2lkIDAgOiBhLnRyaW0oKSkgPT0gbnVsbCA/IHZvaWQgMCA6IGMuc3BsaXQoL1xccysvKSkgPz8gW10sIHMgPSBpLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgcmV0dXJuIGVbZC5GSVJTVF9OQU1FXSA9IGVbZC5GSVJTVF9OQU1FXSB8fCBuIHx8IFwiX09QX1VOS05PV05cIiwgZVtkLkxBU1RfTkFNRV0gPSBlW2QuTEFTVF9OQU1FXSB8fCBzIHx8IFwiX09QX1VOS05PV05cIiwgZVtkLkVNQUlMXSA9IGVbZC5FTUFJTF0gfHwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgKCh1ID0gci5saW5rKSA9PSBudWxsID8gdm9pZCAwIDogdS5lbWFpbCkgfHwgci5iaWxsaW5nX2RldGFpbHMuZW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiLCBlW2QuWklQX0NPREVdID0gZVtkLlpJUF9DT0RFXSB8fCAoKGwgPSByLmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzKSA9PSBudWxsID8gdm9pZCAwIDogbC5wb3N0YWxfY29kZSkgfHwgXCIwMDAwMFwiLCBlW2QuQ09VTlRSWV0gPSBlW2QuQ09VTlRSWV0gfHwgKChwID0gci5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcykgPT0gbnVsbCA/IHZvaWQgMCA6IHAuY291bnRyeSkgfHwgXCJVU1wiLCBFKFwiRmluYWwgZm9ybSBpbnB1dHM6XCIsIGUpLCBlO1xufSwgVG4gPSAodCkgPT4gbmV3IFByb21pc2UoKHIpID0+IHtcbiAgY29uc3QgZSA9ICgpID0+IHtcbiAgICBjb25zdCBuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodCk7XG4gICAgbiA/IHIobikgOiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSk7XG4gIH07XG4gIGUoKTtcbn0pLCBNbiA9IFwiQGtleWZyYW1lcyBmYWRlSW57MCV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSguOSl9dG97b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZSgxKX19Lm92ZXJsYXl7cG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ei1pbmRleDoyMTQ3NDgzNjQ4IWltcG9ydGFudDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjojMDAwMDAwODB9LmNvbnRhaW5lcnttYXgtd2lkdGg6NTAwcHg7bWF4LWhlaWdodDo2MDBweDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JhY2tncm91bmQtY29sb3I6I2ZmZjtwb3NpdGlvbjpyZWxhdGl2ZTthbmltYXRpb246ZmFkZUluIC4zcyBlYXNlLW91dH0uZnJhbWV7bWF4LXdpZHRoOjUwMHB4O21heC1oZWlnaHQ6NjAwcHg7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtib3JkZXI6bm9uZX0uY2FuY2VsLWJ1dHRvbntwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjpub25lO2ZvbnQtc2l6ZToxcmVtO2NvbG9yOiNmZmY7Y3Vyc29yOnBvaW50ZXI7dG9wOi0xLjVyZW07cGFkZGluZzowO3JpZ2h0OjB9XCIsIERuID0gKHQpID0+IHtcbiAgY29uc3QgciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgci5pbm5lckhUTUwgPSBgXG4gICAgPHN0eWxlPlxuICAgICAgJHtNbn1cbiAgICA8L3N0eWxlPlxuICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJjYW5jZWwtYnV0dG9uXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgIDxpZnJhbWUgc3JjPVwiJHt0fVwiIGNsYXNzPVwiZnJhbWVcIiBpZD1cInRocmVlLWRzLWlmcmFtZVwiIHRpdGxlPVwiM0QgU2VjdXJlIHZlcmlmaWNhdGlvblwiIGFsbG93PVwicGF5bWVudFwiPjwvaWZyYW1lPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGA7XG4gIGNvbnN0IGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLCBuID0gZS5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KTtcbiAgbi5hcHBlbmRDaGlsZChyLmNvbnRlbnQuY2xvbmVOb2RlKCEwKSk7XG4gIGNvbnN0IGkgPSBuLnF1ZXJ5U2VsZWN0b3IoXCIjdGhyZWUtZHMtaWZyYW1lXCIpLCBzID0gbi5xdWVyeVNlbGVjdG9yKFwiLmNhbmNlbC1idXR0b25cIik7XG4gIHJldHVybiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpLCB7IGhvc3Q6IGUsIGlmcmFtZTogaSwgY2FuY2VsQnV0dG9uOiBzIH07XG59O1xuZnVuY3Rpb24gRm4odCwgciwgZSkge1xuICBjb25zdCBuID0gYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzID0gYXdhaXQgYm4odCwgZSk7XG4gICAgICBzICYmIChjbGVhckludGVydmFsKGkpLCByKHMpKTtcbiAgICB9IGNhdGNoIHtcbiAgICB9XG4gIH07XG4gIG4oKTtcbiAgY29uc3QgaSA9IHNldEludGVydmFsKG4sIEN0KTtcbiAgcmV0dXJuIGk7XG59XG5mdW5jdGlvbiBMbih7XG4gIGVsZW1lbnRzOiB0LFxuICBwb2xsaW5nSW50ZXJ2YWw6IHIsXG4gIHJlc29sdmU6IGVcbn0pIHtcbiAgY29uc3QgbiA9ICgpID0+IHtcbiAgICBjbGVhckludGVydmFsKHIpLCB0Lmhvc3QucmVtb3ZlKCksIGUoeyBzdGF0dXM6IE4uQ0FOQ0VMTEVEIH0pO1xuICB9O1xuICByZXR1cm4gdC5jYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG4pLCAoKSA9PiB7XG4gICAgdC5jYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG4pO1xuICB9O1xufVxuYXN5bmMgZnVuY3Rpb24gSWUodCkge1xuICBjb25zdCB7IHVybDogciwgYmFzZVVybDogZSB9ID0gdCwgbiA9IERuKHIpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKGkpID0+IHtcbiAgICBjb25zdCBzID0gKHUpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBuLmhvc3QucmVtb3ZlKCk7XG4gICAgICB9LCAxZTMpLCBpKHUpLCBjID09IG51bGwgfHwgYygpO1xuICAgIH0sIGEgPSBGbihuLmlmcmFtZSwgcywgbmV3IFVSTChlKS5vcmlnaW4pLCBjID0gTG4oe1xuICAgICAgZWxlbWVudHM6IG4sXG4gICAgICBwb2xsaW5nSW50ZXJ2YWw6IGEsXG4gICAgICByZXNvbHZlOiBpXG4gICAgfSk7XG4gIH0pO1xufVxuY29uc3QgQXQgPSBhc3luYyAodCkgPT4ge1xuICBjb25zdCByID0gYXdhaXQgSWUodCk7XG4gIGlmIChyLnN0YXR1cyA9PT0gTi5DQU5DRUxMRUQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChyLnN0YXR1cyA9PT0gTi5GQUlMVVJFKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICByZXR1cm4gci5zdGF0dXMgIT09IE4uU1VDQ0VTUyAmJiAkZShyLnN0YXR1cyksIHtcbiAgICBocmVmOiByLmhyZWZcbiAgfTtcbn0sIE5uID0gKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IHdpbmRvdy5vcGVuKHIsIFwiX2JsYW5rXCIpO1xuICBpZiAoIWUpXG4gICAgdGhyb3cgbmV3IEVycm9yKGAke3R9IHBvcHVwIHdpbmRvdyBibG9ja2VkLiBQbGVhc2UgYWxsb3cgcG9wdXBzIGZvciB0aGlzIHNpdGUuYCk7XG4gIHJldHVybiBlO1xufSwgam4gPSBhc3luYyAodCwgciwgZSwgbikgPT4ge1xuICBjb25zdCB7IGVycl9fOiBpIH0gPSBDKFwicG9wdXAtdmVyaWZ5XCIpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHMsIGEpID0+IHtcbiAgICBjb25zdCBjID0gTm4odCwgbiksIHUgPSBzZXRJbnRlcnZhbChhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBsID0gYXdhaXQgaG4ociwgZSk7XG4gICAgICAgIGlmIChsLnByZXNlbnQpXG4gICAgICAgICAgY2xlYXJJbnRlcnZhbCh1KSwgYy5jbG9zZSgpLCBzKHsgaHJlZjogbC5ocmVmIH0pO1xuICAgICAgICBlbHNlIGlmIChjLmNsb3NlZClcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dH0gcGF5bWVudCBjYW5jZWxsZWRgKTtcbiAgICAgIH0gY2F0Y2ggKGwpIHtcbiAgICAgICAgaShZKGwpKSwgY2xlYXJJbnRlcnZhbCh1KSwgYShZKGwpKTtcbiAgICAgIH1cbiAgICB9LCAxZTMpO1xuICB9KTtcbn0sIHsgbG9nX186IFVuLCBlcnJfXzogSXQgfSA9IEMoXCJwb2NreXQtY2NcIiksIHhuID0geiQxLm9iamVjdCh7XG4gIFwib3AtcG9ja3l0LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC10eG4tbm9cIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC1yZWYtbm9cIjogeiQxLnN0cmluZygpXG59KSwgJG4gPSAodCkgPT4ge1xuICBjb25zdCByID0geG4uc2FmZVBhcnNlKHQpO1xuICBpZiAoIXIuc3VjY2Vzcykge1xuICAgIGNvbnN0IGUgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIG4gPSBgUG9ja3l0IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkodCl9YDtcbiAgICB0aHJvdyBJdChuKSwgbmV3IEVycm9yKGUpO1xuICB9XG4gIHJldHVybiByLmRhdGE7XG59LCBPdCA9ICh0KSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgciA9IG5ldyBVUkwodCA/PyBcIlwiKS5zZWFyY2hQYXJhbXMuZ2V0KFwidmF1bHRJZFwiKTtcbiAgICBpZiAoIXIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB2YXVsdCBJRCBmb3VuZCBpbiAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdFwiKTtcbiAgICByZXR1cm4gVW4oYDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW1ZhdWx0IElEOiAke3J9XWApLCByO1xuICB9IGNhdGNoIChyKSB7XG4gICAgY29uc3QgZSA9IFwiRXJyb3IgdmVyaWZ5aW5nIDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0LlwiO1xuICAgIHRocm93IEl0KGUsIGBSZXN1bHRpbmcgVVJMOiAke3R9LlxuRXJyb3I6ICR7WShyKX1gKSwgbmV3IEVycm9yKGUpO1xuICB9XG59LCBWbiA9ICh0KSA9PiAodCA9PSBudWxsID8gdm9pZCAwIDogdFtcIm9wLXBvY2t5dC0zZHMtdXJsXCJdKSAhPT0gdm9pZCAwLCBxbiA9IGFzeW5jICh0LCByKSA9PiB7XG4gIGNvbnN0IGUgPSAkbihyKSwgbiA9IGF3YWl0IEF0KHsgdXJsOiBlW1wib3AtcG9ja3l0LTNkcy11cmxcIl0sIGJhc2VVcmw6IHQgfSk7XG4gIHJldHVybiB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIHZhdWx0X2lkOiBPdChuLmhyZWYgPz8gXCJcIiksXG4gICAgICB0cmFuc2FjdGlvbl9ubzogZVtcIm9wLXBvY2t5dC10eG4tbm9cIl0sXG4gICAgICByZWZlcmVuY2Vfbm86IGVbXCJvcC1wb2NreXQtcmVmLW5vXCJdXG4gICAgfVxuICB9O1xufSwgeyBsb2dfXzogR24sIGVycl9fOiBxZSB9ID0gQyhcImFpcndhbGxleC1jY1wiKSwgem4gPSB6JDEub2JqZWN0KHtcbiAgXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiOiB6JDEuc3RyaW5nKClcbn0pLCBZbiA9ICh0KSA9PiB7XG4gIGNvbnN0IHIgPSB6bi5zYWZlUGFyc2UodCk7XG4gIGlmICghci5zdWNjZXNzKSB7XG4gICAgY29uc3QgZSA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgbiA9IGBBaXJ3YWxsZXggM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeSh0KX1gO1xuICAgIHRocm93IHFlKG4pLCBuZXcgRXJyb3IoZSk7XG4gIH1cbiAgcmV0dXJuIHIuZGF0YTtcbn0sIEtuID0gKHQpID0+ICh0ID09IG51bGwgPyB2b2lkIDAgOiB0W1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0pICE9PSB2b2lkIDAsIEhuID0gKHQpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByID0gbmV3IFVSTCh0ID8/IFwiXCIpLnNlYXJjaFBhcmFtcy5nZXQoXCJwYXltZW50X2ludGVudF9pZFwiKTtcbiAgICBpZiAoIXIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBpbnRlbnQgSUQgZm91bmQgaW4gQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0XCIpO1xuICAgIHJldHVybiBHbihgQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW0ludGVudCBJRDogJHtyfV1gKSwgcjtcbiAgfSBjYXRjaCAocikge1xuICAgIGNvbnN0IGUgPSBcIkVycm9yIHZlcmlmeWluZyBBaXJ3YWxsZXggM0RTIHZlcmlmaWNhdGlvbiByZXN1bHQuXCI7XG4gICAgdGhyb3cgcWUoZSwgYFJlc3VsdGluZyBVUkw6ICR7dH0uXG5FcnJvcjogJHtZKHIpfWApLCBuZXcgRXJyb3IoZSk7XG4gIH1cbn0sIFduID0gYXN5bmMgKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IFluKHIpLCBuID0gYXdhaXQgQXQoeyB1cmw6IGVbXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiXSwgYmFzZVVybDogdCB9KSwgaSA9IEhuKG4uaHJlZiA/PyBcIlwiKSwgcyA9IGVbXCJvcC1haXJ3YWxsZXgtaW5pdGlhbC1pbnRlbnQtaWRcIl07XG4gIGlmIChzICE9PSBpKSB7XG4gICAgY29uc3QgYyA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgdSA9IGBJbnRlbnQgSUQgZnJvbSBjYWxsYmFjayAoJHtpfSkgZG9lcyBub3QgbWF0Y2ggdGhlIGluaXRpYWwgaW50ZW50IElEICgke3N9KS5gO1xuICAgIHRocm93IHFlKHUpLCBuZXcgRXJyb3IoYyk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBleGlzdGluZ19jYzoge1xuICAgICAgaW5pdGlhbF9pbnRlbnRfaWQ6IGksXG4gICAgICBjb25zZW50X2lkOiBlW1wib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIl1cbiAgICB9XG4gIH07XG59LCB7IGxvZ19fOiBiLCBlcnJfXzogSmUgfSA9IEMoXCJjb21tb24tY2NcIiksIHsgbG9nX186IEJlIH0gPSBDKFwic3RyaXBlLWNjXCIpO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBabiA9IHNlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGlcbiAgfSkgPT4ge1xuICAgIHZhciBsO1xuICAgIGIoXCLilJwgUnVubmluZyBjb21tb24gQ0MgZmxvdy4uLlwiLCB7IGNoZWNrb3V0UGF5bWVudE1ldGhvZDogciB9KTtcbiAgICBjb25zdCBzID0gdC5hbnlDZGVDb25uZWN0aW9uLCBhID0gYXdhaXQgVyhzKTtcbiAgICBiKGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzIFtNb2RlOiAke2EubW9kZX1dYCk7XG4gICAgY29uc3QgYyA9IGNlKGUsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKSwgdSA9IHtcbiAgICAgIHNlc3Npb25faWQ6IHQuZWxlbWVudHNTZXNzaW9uSWQsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogcixcbiAgICAgIG5vbl9jZGVfZm9ybV9maWVsZHM6IGMsXG4gICAgICBleHRyYV9tZXRhZGF0YToge31cbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBiKGDilJwgVG9rZW5pemluZyBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke3QuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgY29uc3QgcCA9IGF3YWl0IGduKGkuY3VycmVudENkZUNvbm5lY3Rpb25zLCB7XG4gICAgICAgIHNlc3Npb25faWQ6IHQuZWxlbWVudHNTZXNzaW9uSWRcbiAgICAgIH0pO1xuICAgICAgaWYgKENuKHAsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKSwgYS5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgYihg4pScIFNldHRpbmcgdXAgcGF5bWVudCBtZXRob2QgaW4gQ0RFIFtUb2tlbjogJHthLnRva2VufV1gKTtcbiAgICAgICAgY29uc3QgZiA9IGF3YWl0IHduKHMsIHUpO1xuICAgICAgICByZXR1cm4gYihg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke2YucGF5bWVudF9tZXRob2RfaWR9XWApLCB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBmIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiKGDilJwgSW5pdGlhbCBjaGVja291dCBmbG93LiBDaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHt0LmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICAgICAgY29uc3QgZiA9IGF3YWl0IFdlKHMsIHUpO1xuICAgICAgICByZXR1cm4gYihcIuKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlwiKSwgeyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogZiB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKHApIHtcbiAgICAgIGlmIChwIGluc3RhbmNlb2YgU3QgJiYgcC5vcmlnaW5hbEVycm9yTWVzc2FnZS5pbmNsdWRlcyhcIjNEU19SRVFVSVJFRFwiKSkge1xuICAgICAgICBiKFwi4pScIENhcmQgcmVxdWlyZXMgM0RTLCBzdGFydGluZyBub24tbGVnYWN5IHBheW1lbnQgZmxvd1wiKSwgYihcIlJlY2VpdmVkIDNEUyBlcnJvciByZXNwb25zZSBoZWFkZXJzOlwiLCBwLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICBjb25zdCBmID0gVm4ocC5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgaWYgKGYpIHtcbiAgICAgICAgICBiKFwi4pScIFBvY2t5dCAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBQb2NreXQgM0RTIGZsb3cuXCIpO1xuICAgICAgICAgIGNvbnN0IHcgPSBhd2FpdCBxbih0LmJhc2VVcmwsIHAucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgdS5leHRyYV9tZXRhZGF0YS5wb2NreXQgPSB3O1xuICAgICAgICB9XG4gICAgICAgIGlmIChLbihwLnJlc3BvbnNlLmhlYWRlcnMpKSB7XG4gICAgICAgICAgYihcIuKUnCBBaXJ3YWxsZXggM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggQWlyd2FsbGV4IDNEUyBmbG93LlwiKTtcbiAgICAgICAgICBjb25zdCB3ID0gYXdhaXQgV24odC5iYXNlVXJsLCBwLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIHUuZXh0cmFfbWV0YWRhdGEuYWlyd2FsbGV4ID0gdztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtID0gYXdhaXQgZm4ocywgdSk7XG4gICAgICAgIGIoXCLilJwgUGF5bWVudCBmbG93IHJlc3VsdDpcIiwgbSk7XG4gICAgICAgIGNvbnN0IHkgPSAoKGwgPSBwLnJlc3BvbnNlLmhlYWRlcnMpID09IG51bGwgPyB2b2lkIDAgOiBsW1wib3Atc2hvdWxkLXVzZS1uZXctZmxvd1wiXSkgIT09IFwidHJ1ZVwiO1xuICAgICAgICBmID8gYihcIuKUnCBQcmUtc3RhcnQgM0RTIGlzIHN1Y2Nlc3NmdWwsIG90aGVyIDNEUyBmbG93cyB3aWxsIGJlIHNraXBwZWQuXCIpIDogeSA/IChiKFwi4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvd1wiKSwgYXdhaXQgWG4obSkpIDogKGIoXCLilJwgVXNpbmcgY29tbW9uIDNEUyBmbG93XCIpLCBhd2FpdCBRbihtLCB0LmJhc2VVcmwpKTtcbiAgICAgICAgY29uc3QgaCA9IG0uY2NfcG1faWQ7XG4gICAgICAgIGlmIChhLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICAgIGIoYOKUnCBDb25maXJtaW5nIHBheW1lbnQgZmxvdyBbY2NfcG1faWQ6ICR7aH1dYCk7XG4gICAgICAgICAgY29uc3QgdyA9IGF3YWl0IEgocywge1xuICAgICAgICAgICAgc2VjdXJlX3Rva2VuOiBhLnRva2VuLFxuICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IGhcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBiKFwi4pScIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdCByZWNlaXZlZCBSZXN1bHQ6XCIsIHcpO1xuICAgICAgICAgIGNvbnN0IFIgPSBWZSh3KTtcbiAgICAgICAgICByZXR1cm4gYihg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke1IucGF5bWVudF9tZXRob2RfaWR9XWApLCB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBSIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYihg4pScIENoZWNraW5nIG91dCBhZnRlciAzRFMgZmxvdyBbRmxvdzogJHt5ID8gXCJsZWdhY3lcIiA6IFwibmV3XCJ9XWApO1xuICAgICAgICAgIGNvbnN0IHcgPSBhd2FpdCBXZShzLCB7XG4gICAgICAgICAgICAuLi51LFxuICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IGgsXG4gICAgICAgICAgICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB5XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIGIoXCLilbAgQ2hlY2tvdXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cIiksIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IHcgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgSmUoXCLilbAgRXJyb3IgY2hlY2tpbmcgb3V0IGNhcmQgaW5mbyBpbiBDREVcIiksIEplKHApLCBwO1xuICAgIH1cbiAgfVxuKSwgSm4gPSAodCkgPT4ge1xuICBjb25zdCByID0gdC5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoZSkgPT4gZS50eXBlID09PSBcInN0cmlwZV8zZHNcIik7XG4gIGlmICghcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzdHJpcGUgM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgcmV0dXJuIElyLnBhcnNlKHIpO1xufSwgQm4gPSAodCkgPT4ge1xuICBjb25zdCByID0gdC5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoZSkgPT4gZS50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIik7XG4gIGlmICghcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb21tb24gM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgcmV0dXJuIENyLnBhcnNlKHIpO1xufSwgUW4gPSBhc3luYyAodCwgcikgPT4ge1xuICBjb25zdCBlID0gQm4odCk7XG4gIGlmIChlLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiICYmIGUucmVkaXJlY3RfdXJsID09PSBcIjNEU19DT01QTEVURVwiKSB7XG4gICAgYihcIuKUnCBBaXJ3YWxsZXggM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKTtcbiAgICByZXR1cm47XG4gIH1cbiAgYihg4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvdyBbVVJMOiAke2UucmVkaXJlY3RfdXJsfV1gKTtcbiAgY29uc3QgeyBzdGF0dXM6IG4gfSA9IGF3YWl0IEllKHsgdXJsOiBlLnJlZGlyZWN0X3VybCwgYmFzZVVybDogciB9KTtcbiAgaWYgKGIoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke259XWApLCBuID09PSBOLkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKG4gPT09IE4uRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbn0sIFhuID0gYXN5bmMgKHQpID0+IHtcbiAgY29uc3QgciA9IEpuKHQpO1xuICBCZShg4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvdyBbQ2xpZW50IFNlY3JldDogJHtyLmNsaWVudF9zZWNyZXQuc3Vic3RyaW5nKDAsIDgpfS4uLl1gKSwgYXdhaXQgTnIociksIEJlKFwi4pWwIFN0cmlwZSAzRFMgZmxvdyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xufSwgeyBsb2dfXzogSSwgZXJyX186IGVvIH0gPSBDKFwic3RyaXBlLXByXCIpLCB0byA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnVuaW9uKFt6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSwgeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpXSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG4gIH0pXG59KSwgcm8gPSBBZShcbiAgYXN5bmMgKHsgY29udGV4dDogdCB9KSA9PiB7XG4gICAgSShcIkNoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgU3RyaXBlIFBSLi4uXCIpO1xuICAgIGNvbnN0IHIgPSBhZSh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIHRvKTtcbiAgICBJKFwiSW5pdGlhbGl6aW5nIFN0cmlwZSBQUiBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGUgPSB0LmFueUNkZUNvbm5lY3Rpb24sIG4gPSBhd2FpdCBXKGUpLCBpID0gbi5tb2RlID09PSBcInNldHVwXCI7XG4gICAgSShcIkdldHRpbmcgaW5pdGlhbCBwcmV2aWV3IGFtb3VudFwiKTtcbiAgICBjb25zdCBzID0gYXdhaXQga2UoZSwgbi50b2tlbiwgaSwgdm9pZCAwKSwgYSA9IGF3YWl0IE1yKFxuICAgICAgci5tZXRhZGF0YS5zdHJpcGVfcGssXG4gICAgICBzLmFtb3VudEF0b20sXG4gICAgICBzLmN1cnJlbmN5LFxuICAgICAgaVxuICAgICk7XG4gICAgSShcIkNoZWNraW5nIGlmIGNhbiBtYWtlIHBheW1lbnRcIik7XG4gICAgY29uc3QgYyA9IGF3YWl0IGEuY2FuTWFrZVBheW1lbnQoKTtcbiAgICByZXR1cm4gYyA9PT0gbnVsbCA/IChlbyhcImNhbk1ha2VQYXltZW50IHJldHVybmVkIG51bGxcIiksIHsgaXNBdmFpbGFibGU6ICExLCByZWFzb246IFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiIH0pIDogKEkoXCJTdHJpcGUgUFIgZmxvdyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuIENhbiBtYWtlIHBheW1lbnRcIiwgYyksIHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIHByOiBhLFxuICAgICAgYXZhaWxhYmxlUHJvdmlkZXJzOiB7XG4gICAgICAgIGFwcGxlUGF5OiBjLmFwcGxlUGF5LFxuICAgICAgICBnb29nbGVQYXk6IGMuZ29vZ2xlUGF5XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiksIG5vID0gc2UoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogaSxcbiAgICBpbml0UmVzdWx0OiBzXG4gIH0pID0+IHtcbiAgICBpZiAoSShcIlJ1bm5pbmcgU3RyaXBlIFBSIGZsb3cuLi5cIiksIGkucHJvdmlkZXIgIT09IHIucHJvdmlkZXIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3ZpZGVyIG1pc21hdGNoLiBFeHBlY3RlZCAke2kucHJvdmlkZXJ9LCBnb3QgJHtyLnByb3ZpZGVyfWApO1xuICAgIGNvbnN0IGEgPSB0LmFueUNkZUNvbm5lY3Rpb24sIGMgPSBzLnByO1xuICAgIGlmIChpICE9IG51bGwgJiYgaS5vdmVycmlkZVBheW1lbnRSZXF1ZXN0KSB7XG4gICAgICBjb25zdCB5ID0gaS5vdmVycmlkZVBheW1lbnRSZXF1ZXN0O1xuICAgICAgSShcIk92ZXJyaWRpbmcgUFIgYW1vdW50IHdpdGhcIiwgeSksIGlvKGMsIHkuYW1vdW50LCB5LnBlbmRpbmcsIHkuc3RyaXBlQXBwbGVQYXkpO1xuICAgIH1cbiAgICBJKFwiU2hvd2luZyBQUiBkaWFsb2cuLi5cIiksIGMuc2hvdygpO1xuICAgIGNvbnN0IHUgPSBhd2FpdCBGcihjKTtcbiAgICBJKFwiU3RyaXBlIFBNIGFkZGVkIGV2ZW50OlwiLCB1KSwgSShcIk1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5cIik7XG4gICAgY29uc3QgbCA9IG9vKGUsIHUpLCBwID0gY2UobCwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIEkoXCJQUiBkaWFsb2cgZmluaXNoZWQuIFN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLlwiLCBwKTtcbiAgICBjb25zdCBmID0gYXdhaXQgeW4oYSwge1xuICAgICAgZmllbGRzOiBwLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByXG4gICAgfSksIGcgPSBzbyhmKTtcbiAgICBJKFwiQ29uZmlybWluZyBQUiB3aXRoIFN0cmlwZS4uLlwiKSwgYXdhaXQgTHIoZywgdSk7XG4gICAgY29uc3QgbSA9IGF3YWl0IFcoYSk7XG4gICAgaWYgKG0ubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBJKFwiQ29uZmlybWluZyBwYXltZW50IGZsb3cgZm9yIHNldHVwLi4uXCIpO1xuICAgICAgY29uc3QgeSA9IGF3YWl0IEgoYSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IG0udG9rZW5cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IFZlKHkpIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIEkoXCJQZXJmb3JtaW5nIGNoZWNrb3V0Li4uXCIpO1xuICAgICAgY29uc3QgeSA9IHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBtLnRva2VuLFxuICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgcHJvdmlkZXJfdHlwZTogci5wcm92aWRlclxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21lcl9maXJzdF9uYW1lOiBwW2QuRklSU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2xhc3RfbmFtZTogcFtkLkxBU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBwW2QuRU1BSUxdLFxuICAgICAgICBjdXN0b21lcl96aXBfY29kZTogcFtkLlpJUF9DT0RFXSxcbiAgICAgICAgY3VzdG9tZXJfY291bnRyeTogcFtkLkNPVU5UUlldLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogcFtkLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgbGluZV9pdGVtczogbS5saW5lX2l0ZW1zLFxuICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogbS5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgY2FuY2VsX2F0X2VuZDogITEsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiByXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IGF3YWl0IFBlKGEsIHkpIH07XG4gICAgfVxuICB9XG4pLCBvbyA9ICh0LCByKSA9PiB7XG4gIHZhciB1LCBsLCBwLCBmO1xuICBjb25zdCBlID0geyAuLi50IH0sIFtuLCAuLi5pXSA9ICgobCA9ICh1ID0gci5wYXllck5hbWUpID09IG51bGwgPyB2b2lkIDAgOiB1LnRyaW0oKSkgPT0gbnVsbCA/IHZvaWQgMCA6IGwuc3BsaXQoL1xccysvKSkgPz8gW10sIHMgPSBpLmpvaW4oXCIgXCIpIHx8IHZvaWQgMCwgYSA9IChmID0gKHAgPSByLnBheW1lbnRNZXRob2QpID09IG51bGwgPyB2b2lkIDAgOiBwLmJpbGxpbmdfZGV0YWlscykgPT0gbnVsbCA/IHZvaWQgMCA6IGYuYWRkcmVzcywgYyA9IHIuc2hpcHBpbmdBZGRyZXNzO1xuICByZXR1cm4gZVtkLkZJUlNUX05BTUVdID0gZVtkLkZJUlNUX05BTUVdIHx8IG4gfHwgXCJfT1BfVU5LTk9XTlwiLCBlW2QuTEFTVF9OQU1FXSA9IGVbZC5MQVNUX05BTUVdIHx8IHMgfHwgXCJfT1BfVU5LTk9XTlwiLCBlW2QuRU1BSUxdID0gZVtkLkVNQUlMXSB8fCByLnBheWVyRW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiLCBlW2QuWklQX0NPREVdID0gZVtkLlpJUF9DT0RFXSB8fCAoYSA9PSBudWxsID8gdm9pZCAwIDogYS5wb3N0YWxfY29kZSkgfHwgKGMgPT0gbnVsbCA/IHZvaWQgMCA6IGMucG9zdGFsQ29kZSkgfHwgXCIwMDAwMFwiLCBlW2QuQ09VTlRSWV0gPSBlW2QuQ09VTlRSWV0gfHwgKGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuY291bnRyeSkgfHwgKGMgPT0gbnVsbCA/IHZvaWQgMCA6IGMuY291bnRyeSkgfHwgXCJVU1wiLCBJKFwiRmluYWwgZm9ybSBpbnB1dHM6XCIsIGUpLCBlO1xufSwgaW8gPSAodCwgciwgZSwgbikgPT4ge1xuICB0LnVwZGF0ZSh7XG4gICAgdG90YWw6IHtcbiAgICAgIGFtb3VudDogci5hbW91bnRBdG9tLFxuICAgICAgbGFiZWw6IFwiVG90YWxcIixcbiAgICAgIHBlbmRpbmc6IGVcbiAgICB9LFxuICAgIGN1cnJlbmN5OiByLmN1cnJlbmN5LFxuICAgIGFwcGxlUGF5OiBuXG4gIH0pO1xufSwgc28gPSAodCkgPT4ge1xuICBpZiAodC5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RoICE9PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Igb2NjdXJyZWQuXG5EZXRhaWxzOiBnb3QgJHt0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGh9IHJlcXVpcmVkIHVzZXIgYWN0aW9uc2ApO1xuICByZXR1cm4gT3IucGFyc2UodC5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0pO1xufSwgeyBsb2dfXzogViwgZXJyX186IFFlIH0gPSBDKFwicG9ja3l0LXBheXBhbFwiKSwgYW8gPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwicG9ja3l0XCIpLFxuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJwYXlwYWxcIilcbn0pLCBjbyA9IHokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgcGF5cGFsX2lmcmFtZV91cmw6IHokMS5zdHJpbmcoKSxcbiAgICB2ZXJpZnlfdG9rZW46IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSksIGxvID0gc2UoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogaVxuICB9KSA9PiB7XG4gICAgVihcIlJ1bm5pbmcgUG9ja3l0IFBheXBhbCBmbG93Li4uXCIpO1xuICAgIGNvbnN0IHMgPSB0LmFueUNkZUNvbm5lY3Rpb24sIGEgPSBhd2FpdCBXKHMpO1xuICAgIFYoXCJWZXJpZnlpbmcgQ1BNLi4uXCIpO1xuICAgIGNvbnN0IGMgPSBhby5wYXJzZShyKTtcbiAgICBWKFwi4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkc1wiKTtcbiAgICBjb25zdCB1ID0gaSA9PSBudWxsID8gdm9pZCAwIDogaS5zZXR0aW5ncywgbCA9IGNlKFxuICAgICAgZSxcbiAgICAgIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgdSA9PSBudWxsID8gdm9pZCAwIDogdS5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICApLCBwID0gU24obCk7XG4gICAgVihgU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uIE1vZGU6ICR7YS5tb2RlfWApO1xuICAgIGNvbnN0IGYgPSBhLm1vZGUgIT09IFwic2V0dXBcIiwgZyA9IGF3YWl0IENlKHMsIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGMucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogYyxcbiAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogZixcbiAgICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogZiA/IHtcbiAgICAgICAgLy8gVE9ETyBhZGQgY291cG9uIGFuZCBjYXJ0IGFkanVzdGVkIGxpbmUgaXRlbXMgbGF0ZXJcbiAgICAgICAgbGluZV9pdGVtczogYS5saW5lX2l0ZW1zLFxuICAgICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IGEuYW1vdW50X3RvdGFsX2F0b21cbiAgICAgIH0gOiB2b2lkIDAsXG4gICAgICAuLi5wXG4gICAgfSk7XG4gICAgaWYgKFYoXCJTdGFydCBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgZyksICFnLmNoZWNrb3V0X2F0dGVtcHRfaWQpXG4gICAgICB0aHJvdyBRZShcIkNoZWNrb3V0IGF0dGVtcHQgSUQgbm90IGZvdW5kIGluIHJlc3BvbnNlOlwiLCBnKSwgbmV3IEVycm9yKFwiQW4gZXJyb3Igb2NjdXJyZWQgZHVyaW5nIGNoZWNrb3V0LCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgY29uc3QgbSA9IGNvLnBhcnNlKGcucmVxdWlyZWRfdXNlcl9hY3Rpb25zKVswXTtcbiAgICBWKFwiT3BlbmluZyBwYXlwYWwgaWZyYW1lLi4uXCIpO1xuICAgIGNvbnN0IHkgPSBhd2FpdCBqbihcbiAgICAgIFwiUGF5UGFsXCIsXG4gICAgICBzLFxuICAgICAgbS52ZXJpZnlfdG9rZW4sXG4gICAgICBtLnBheXBhbF9pZnJhbWVfdXJsXG4gICAgKTtcbiAgICBWKFwiUGF5cGFsIGZsb3cgcmVzdWx0XCIsIHkpO1xuICAgIGNvbnN0IGggPSBPdCh5LmhyZWYpO1xuICAgIFYoYENvbmZpcm1pbmcgcGF5bWVudCBmbG93IHVzaW5nIHZhdWx0IElEICR7aH1gKTtcbiAgICBjb25zdCB3ID0gYXdhaXQgSChzLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IGEudG9rZW4sXG4gICAgICB0aGVpcl9wbV9pZDogaCxcbiAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IGYgPyBnLmNoZWNrb3V0X2F0dGVtcHRfaWQgOiB2b2lkIDBcbiAgICB9KTtcbiAgICBpZiAoVihcIkNvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdFwiLCB3KSwgYS5tb2RlID09PSBcInNldHVwXCIpXG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICAgIHJlc3VsdDoge1xuICAgICAgICAgIHBheW1lbnRfbWV0aG9kX2lkOiB3LnBheW1lbnRfbWV0aG9kc1swXS5pZFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIGlmICghdy5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZSlcbiAgICAgIHRocm93IFFlKFwiQ2hlY2tvdXQgZmFpbGVkLCBubyBwYXktZmlyc3Qgc3VjY2VzcyByZXNwb25zZTpcIiwgdyksIG5ldyBFcnJvcihcIkNoZWNrb3V0IGZhaWxlZCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgIHJldHVybiB7XG4gICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICByZXN1bHQ6IHcucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2VcbiAgICB9O1xuICB9XG4pLCBSdCA9ICh7XG4gIGdhdGV3YXk6IHQsXG4gIGdhdGV3YXlNZXJjaGFudElkOiByLFxuICBtZXJjaGFudE5hbWU6IGUsXG4gIG1lcmNoYW50SWQ6IG4sXG4gIGluaXRpYWxQcmV2aWV3OiBpLFxuICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzXG59KSA9PiB7XG4gIHZhciBwLCBmO1xuICBjb25zdCBhID0gKChwID0gcyA9PSBudWxsID8gdm9pZCAwIDogcy5hbW91bnQpID09IG51bGwgPyB2b2lkIDAgOiBwLmFtb3VudEF0b20pID8/IChpID09IG51bGwgPyB2b2lkIDAgOiBpLmFtb3VudEF0b20pID8/IDAsIGMgPSBNYXRoLm1heChhIC8gMTAwLCAwKSwgdSA9ICgoKGYgPSBzID09IG51bGwgPyB2b2lkIDAgOiBzLmFtb3VudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGYuY3VycmVuY3kpID8/IChpID09IG51bGwgPyB2b2lkIDAgOiBpLmN1cnJlbmN5KSA/PyBcIlVTRFwiKS50b1VwcGVyQ2FzZSgpLCBsID0ge1xuICAgIGFwaVZlcnNpb246IDIsXG4gICAgYXBpVmVyc2lvbk1pbm9yOiAwLFxuICAgIGFsbG93ZWRQYXltZW50TWV0aG9kczogW1xuICAgICAge1xuICAgICAgICB0eXBlOiBcIkNBUkRcIixcbiAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgIGFsbG93ZWRBdXRoTWV0aG9kczogW1wiUEFOX09OTFlcIiwgXCJDUllQVE9HUkFNXzNEU1wiXSxcbiAgICAgICAgICBhbGxvd2VkQ2FyZE5ldHdvcmtzOiBbXCJBTUVYXCIsIFwiRElTQ09WRVJcIiwgXCJJTlRFUkFDXCIsIFwiSkNCXCIsIFwiTUFTVEVSQ0FSRFwiLCBcIlZJU0FcIl0sXG4gICAgICAgICAgYmlsbGluZ0FkZHJlc3NSZXF1aXJlZDogITAsXG4gICAgICAgICAgYmlsbGluZ0FkZHJlc3NQYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgICBmb3JtYXQ6IFwiRlVMTFwiXG4gICAgICAgICAgfSxcbiAgICAgICAgICBhbGxvd0NyZWRpdENhcmRzOiAhMCxcbiAgICAgICAgICBhbGxvd1ByZXBhaWRDYXJkczogITBcbiAgICAgICAgfSxcbiAgICAgICAgdG9rZW5pemF0aW9uU3BlY2lmaWNhdGlvbjoge1xuICAgICAgICAgIHR5cGU6IFwiUEFZTUVOVF9HQVRFV0FZXCIsXG4gICAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgICAgZ2F0ZXdheTogdCxcbiAgICAgICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiByXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgXSxcbiAgICBlbWFpbFJlcXVpcmVkOiAhMCxcbiAgICBtZXJjaGFudEluZm86IHtcbiAgICAgIC8vIFRPRE86IGFzYXAgZm9yIHByb2QgLSBhaXJ3YWxsZXggaGFzIG5vIGRvY3MgZm9yIHRoaXNcbiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVycy5nb29nbGUuY29tL3BheS9hcGkvd2ViL3JlZmVyZW5jZS9yZXF1ZXN0LW9iamVjdHMjTWVyY2hhbnRJbmZvXG4gICAgICBtZXJjaGFudElkOiBuID8/IFwiXCIsXG4gICAgICAvLyBCQ1IyRE40VFg3STNGUlJKXG4gICAgICBtZXJjaGFudE5hbWU6IGVcbiAgICB9LFxuICAgIHRyYW5zYWN0aW9uSW5mbzoge1xuICAgICAgY291bnRyeUNvZGU6IFwiVVNcIixcbiAgICAgIGN1cnJlbmN5Q29kZTogdSxcbiAgICAgIHRvdGFsUHJpY2VTdGF0dXM6IHMgIT0gbnVsbCAmJiBzLnBlbmRpbmcgPyBcIkVTVElNQVRFRFwiIDogXCJGSU5BTFwiLFxuICAgICAgdG90YWxQcmljZTogYy50b0ZpeGVkKDIpXG4gICAgfVxuICB9O1xuICByZXR1cm4gcyAhPSBudWxsICYmIHMuZ29vZ2xlUGF5UGF5bWVudFJlcXVlc3QgPyB7IC4uLmwsIC4uLnMuZ29vZ2xlUGF5UGF5bWVudFJlcXVlc3QgfSA6IGw7XG59LCB1byA9ICgpID0+IG5ldyBQcm9taXNlKCh0LCByKSA9PiB7XG4gIGNvbnN0IGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuICBlLnNyYyA9IFwiaHR0cHM6Ly9wYXkuZ29vZ2xlLmNvbS9ncC9wL2pzL3BheS5qc1wiLCBlLmFzeW5jID0gITAsIGUub25sb2FkID0gKCkgPT4gdCgpLCBlLm9uZXJyb3IgPSAoKSA9PiByKG5ldyBFcnJvcihcIkZhaWxlZCB0byBsb2FkIEdvb2dsZSBQYXkgU0RLXCIpKSwgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlKTtcbn0pLCBwbyA9ICh0KSA9PiB7XG4gIGNvbnN0IHIgPSB0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChlKSA9PiBlLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiKTtcbiAgcmV0dXJuIHIgPyBodC5wYXJzZShyKSA6IG51bGw7XG59LCBtbyA9ICh0LCByKSA9PiB7XG4gIHZhciBpLCBzLCBhLCBjO1xuICBjb25zdCBlID0geyAuLi50IH0sIG4gPSAocyA9IChpID0gci5wYXltZW50TWV0aG9kRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuaW5mbykgPT0gbnVsbCA/IHZvaWQgMCA6IHMuYmlsbGluZ0FkZHJlc3M7XG4gIGlmIChuKSB7XG4gICAgY29uc3QgW3UsIC4uLmxdID0gKChjID0gKGEgPSBuLm5hbWUpID09IG51bGwgPyB2b2lkIDAgOiBhLnRyaW0oKSkgPT0gbnVsbCA/IHZvaWQgMCA6IGMuc3BsaXQoL1xccysvKSkgPz8gW10sIHAgPSBsLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgICBlW2QuRU1BSUxdID0gZVtkLkVNQUlMXSB8fCByLmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIiwgZVtkLkNPVU5UUlldID0gZVtkLkNPVU5UUlldIHx8IG4uY291bnRyeUNvZGUgfHwgXCJVU1wiLCBlW2QuQUREUkVTU10gPSBlW2QuQUREUkVTU10gfHwgbi5hZGRyZXNzMSB8fCBcIlwiLCBlW2QuQ0lUWV0gPSBlW2QuQ0lUWV0gfHwgbi5sb2NhbGl0eSB8fCBcIlwiLCBlW2QuWklQX0NPREVdID0gZVtkLlpJUF9DT0RFXSB8fCBuLnBvc3RhbENvZGUgfHwgXCIwMDAwMFwiLCBlW2QuU1RBVEVdID0gZVtkLlNUQVRFXSB8fCBuLmFkbWluaXN0cmF0aXZlQXJlYSB8fCBcIlwiLCBlW2QuRklSU1RfTkFNRV0gPSBlW2QuRklSU1RfTkFNRV0gfHwgdSB8fCBcIl9PUF9VTktOT1dOXCIsIGVbZC5MQVNUX05BTUVdID0gZVtkLkxBU1RfTkFNRV0gfHwgcCB8fCBcIl9PUF9VTktOT1dOXCI7XG4gIH1cbiAgcmV0dXJuIGU7XG59LCB7IGxvZ19fOiBNLCBlcnJfXzogdGUgfSA9IEMoXCJhd3gtZ29vZ2xlLXBheVwiKTtcbmxldCBSZSA9IG51bGw7XG5jb25zdCBUdCA9ICh0KSA9PiB0ID09PSBkdCB8fCB0ID09PSB3aW5kb3cubG9jYXRpb24ub3JpZ2luID8gXCJQUk9EVUNUSU9OXCIgOiBcIlRFU1RcIiwgTXQgPSAodCwgcikgPT4ge1xuICBjb25zdCBlID0gVHQodCk7XG4gIHJldHVybiBSZSA9PT0gbnVsbCAmJiAoUmUgPSBuZXcgd2luZG93Lmdvb2dsZS5wYXltZW50cy5hcGkuUGF5bWVudHNDbGllbnQoe1xuICAgIGVudmlyb25tZW50OiBlLFxuICAgIG1lcmNoYW50SW5mbzogci5tZXJjaGFudEluZm9cbiAgfSkpLCBSZTtcbn0sIER0ID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pLCBmbyA9IEFlKFxuICBhc3luYyAoeyBjb250ZXh0OiB0LCBmb3JtQ2FsbGJhY2tzOiByIH0pID0+IHtcbiAgICB2YXIgYSwgYztcbiAgICBjb25zdCBlID0gYWUodC5jaGVja291dFBheW1lbnRNZXRob2RzLCBEdCk7XG4gICAgaWYgKCFlKVxuICAgICAgcmV0dXJuIHsgaXNBdmFpbGFibGU6ICExLCBpc0xvYWRpbmc6ICExLCBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH0gfTtcbiAgICBNKFwiR29vZ2xlIFBheSBDUE1cIiwgZSk7XG4gICAgY29uc3QgbiA9IGUubWV0YWRhdGE7XG4gICAgaWYgKCFuLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgcmV0dXJuIHRlKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKSwgeyBpc0F2YWlsYWJsZTogITEsIGlzTG9hZGluZzogITEsIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfSB9O1xuICAgIGlmIChNKFwiTG9hZGluZyBHb29nbGUgUGF5IFNESy4uLlwiKSwgYXdhaXQgdW8oKSwgISgoYyA9IChhID0gd2luZG93Lmdvb2dsZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGEucGF5bWVudHMpICE9IG51bGwgJiYgYy5hcGkpKVxuICAgICAgcmV0dXJuIHRlKFwiR29vZ2xlIFBheSBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKSwgeyBpc0F2YWlsYWJsZTogITEsIGlzTG9hZGluZzogITEsIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfSB9O1xuICAgIGlmIChUdCh0LmJhc2VVcmwpID09PSBcIlBST0RVQ1RJT05cIiAmJiAhbi5nb29nbGVfcGF5X21lcmNoYW50X2lkKVxuICAgICAgcmV0dXJuIHRlKFwiR29vZ2xlIFBheSBtZXJjaGFudCBJRCBpcyByZXF1aXJlZCBmb3IgcHJvZHVjdGlvbiBlbnZpcm9ubWVudFwiKSwgeyBpc0F2YWlsYWJsZTogITEsIGlzTG9hZGluZzogITEsIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfSB9O1xuICAgIE0oXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHUgPSBSdCh7XG4gICAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBuLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IG4ucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogbi5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIGluaXRpYWxQcmV2aWV3OiB2b2lkIDBcbiAgICAgIH0pLCB7IHJlc3VsdDogbCB9ID0gYXdhaXQgTXQodC5iYXNlVXJsLCB1KS5pc1JlYWR5VG9QYXkoXG4gICAgICAgIHVcbiAgICAgICk7XG4gICAgICBpZiAoIWwpXG4gICAgICAgIHJldHVybiBNKFwiR29vZ2xlIFBheSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHVzZXJcIiksIHsgaXNBdmFpbGFibGU6ICExLCBpc0xvYWRpbmc6ICExLCBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgICAgfSB9O1xuICAgIH0gY2F0Y2ggKHUpIHtcbiAgICAgIHJldHVybiB0ZShcIkVycm9yIGNoZWNraW5nIEdvb2dsZSBQYXkgYXZhaWxhYmlsaXR5XCIsIHUpLCB7IGlzQXZhaWxhYmxlOiAhMSwgaXNMb2FkaW5nOiAhMSwgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9IH07XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAodSkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIEwuYWlyd2FsbGV4R29vZ2xlUGF5LnJ1bih7XG4gICAgICAgICAgICBjb250ZXh0OiB0LFxuICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBlLFxuICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogb2UodC5mb3JtRGl2KSxcbiAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHIsXG4gICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDAsXG4gICAgICAgICAgICBjdXN0b21QYXJhbXM6IHUgPz8ge31cbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBjYXRjaCAobCkge1xuICAgICAgICAgIHRlKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIGwpLCByLmdldC5vbkNoZWNrb3V0RXJyb3IoKGwgPT0gbnVsbCA/IHZvaWQgMCA6IGwubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuKSwgeW8gPSBzZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICBub25DZGVGb3JtSW5wdXRzOiBlLFxuICAgIGZvcm1DYWxsYmFja3M6IG4sXG4gICAgY3VzdG9tUGFyYW1zOiBpXG4gIH0pID0+IHtcbiAgICB2YXIgZiwgZywgbSwgeSwgaCwgdywgUjtcbiAgICBNKFwiU3RhcnRpbmcgR29vZ2xlIFBheSBmbG93Li4uXCIpO1xuICAgIGNvbnN0IHMgPSBhZSh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIER0KSwgYSA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGF3YWl0IFcoYSksIHUgPSBzLm1ldGFkYXRhO1xuICAgIGlmICghdS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgY29uc3QgbCA9IFJ0KHtcbiAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICBnYXRld2F5TWVyY2hhbnRJZDogdS5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgIG1lcmNoYW50TmFtZTogdS5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgbWVyY2hhbnRJZDogdS5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICBpbml0aWFsUHJldmlldzogYXdhaXQga2UoXG4gICAgICAgIGEsXG4gICAgICAgIGMudG9rZW4sXG4gICAgICAgIGMubW9kZSA9PT0gXCJzZXR1cFwiLFxuICAgICAgICB2b2lkIDBcbiAgICAgICksXG4gICAgICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBpID09IG51bGwgPyB2b2lkIDAgOiBpLm92ZXJyaWRlUGF5bWVudFJlcXVlc3RcbiAgICB9KSwgcCA9IE10KHQuYmFzZVVybCwgbCk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IEEgPSBhd2FpdCBwLmxvYWRQYXltZW50RGF0YShsKTtcbiAgICAgIE0oXCJHb29nbGUgUGF5IFBheW1lbnQgZGF0YVwiLCBBKTtcbiAgICAgIGNvbnN0IFEgPSBtbyhlLCBBKSwgayA9IGNlKFxuICAgICAgICBRLFxuICAgICAgICBuLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgICAgaSA9PSBudWxsID8gdm9pZCAwIDogaS5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICAgICksIFggPSAoZyA9IChmID0gQS5wYXltZW50TWV0aG9kRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IGYudG9rZW5pemF0aW9uRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IGcudG9rZW47XG4gICAgICBpZiAoIVgpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBheW1lbnQgdG9rZW4gcmVjZWl2ZWQgZnJvbSBHb29nbGUgUGF5XCIpO1xuICAgICAgY29uc3QgcGUgPSBhd2FpdCBDZShhLCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHIucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiByLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IGtbZC5FTUFJTF0sXG4gICAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBrW2QuRklSU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IGtbZC5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICAgIHBvc3RhbF9jb2RlOiBrW2QuWklQX0NPREVdLFxuICAgICAgICAgIGNvdW50cnlfY29kZToga1tkLkNPVU5UUlldXG4gICAgICAgIH1cbiAgICAgIH0pLCBlZSA9IHBvKHBlKTtcbiAgICAgIE0oXCJTdGFydCBmbG93IG5leHQgYWN0aW9uc1wiLCBlZSk7XG4gICAgICBjb25zdCAkID0gYXdhaXQgSChhLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogYy50b2tlbixcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogci5wcm92aWRlcixcbiAgICAgICAgICAvLyBHb29nbGVQYXkncyBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbiBwcm92aWRlZCB0byB2ZXJpZnkgdGhlIGNvbnNlbnQgZmlyc3RcbiAgICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogZWUgPT0gbnVsbCA/IHZvaWQgMCA6IGVlLmNvbnNlbnRfaWQsXG4gICAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfbWV0aG9kX2RhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IFwiZ29vZ2xlcGF5XCIsXG4gICAgICAgICAgICBnb29nbGVwYXk6IHtcbiAgICAgICAgICAgICAgcGF5bWVudF9kYXRhX3R5cGU6IFwiZW5jcnlwdGVkX3BheW1lbnRfdG9rZW5cIixcbiAgICAgICAgICAgICAgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW46IFhcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgTShcIlsxc3RdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsICQpO1xuICAgICAgbGV0IEQgPSAoeSA9IChtID0gJC5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiBtWzBdKSA9PSBudWxsID8gdm9pZCAwIDogeS5pZDtcbiAgICAgIGNvbnN0IEogPSAoaCA9ICQucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogaC5maW5kKFxuICAgICAgICAoVSkgPT4gVS50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICAgKTtcbiAgICAgIGlmIChKICYmIEoucmVkaXJlY3RfdXJsKSB7XG4gICAgICAgIE0oXCIzRFMgUmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiLCBKKTtcbiAgICAgICAgY29uc3QgeyBzdGF0dXM6IFUgfSA9IGF3YWl0IEllKHtcbiAgICAgICAgICB1cmw6IEoucmVkaXJlY3RfdXJsLFxuICAgICAgICAgIGJhc2VVcmw6IHQuYmFzZVVybFxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKE0oYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke1V9XWApLCBVID09PSBOLkNBTkNFTExFRClcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgaWYgKFUgPT09IE4uRkFJTFVSRSlcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgICAgIH1cbiAgICAgIGlmIChKICYmICFEKSB7XG4gICAgICAgIGNvbnN0IFUgPSBhd2FpdCBIKGEsIHtcbiAgICAgICAgICBzZWN1cmVfdG9rZW46IGMudG9rZW4sXG4gICAgICAgICAgdGhlaXJfcG1faWQ6IEoudGhlaXJfcG1faWQsXG4gICAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiByLnByb3ZpZGVyLFxuICAgICAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IEouY29uc2VudF9pZFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIE0oXCJbMm5kXSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBVKSwgRCA9IChSID0gKHcgPSBVLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IHdbMF0pID09IG51bGwgPyB2b2lkIDAgOiBSLmlkO1xuICAgICAgfVxuICAgICAgaWYgKCFEKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICAgIGlmIChjLm1vZGUgPT09IFwic2V0dXBcIilcbiAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IHsgcGF5bWVudF9tZXRob2RfaWQ6IEQgfSB9O1xuICAgICAge1xuICAgICAgICBNKFwiU3RhcnRpbmcgb25lLXRpbWUgcGF5bWVudCBmbG93Li4uXCIpO1xuICAgICAgICBjb25zdCBVID0ge1xuICAgICAgICAgIHNlY3VyZV90b2tlbjogYy50b2tlbixcbiAgICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgICBwcm92aWRlcl90eXBlOiByLnByb3ZpZGVyXG4gICAgICAgICAgfSxcbiAgICAgICAgICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiAhMCxcbiAgICAgICAgICB1c2VfY29uZmlybWVkX3BtX2lkOiBELFxuICAgICAgICAgIGxpbmVfaXRlbXM6IGMubGluZV9pdGVtcyxcbiAgICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogYy5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgICBjYW5jZWxfYXRfZW5kOiAhMSxcbiAgICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogcixcbiAgICAgICAgICBjdXN0b21lcl9lbWFpbDoga1tkLkVNQUlMXSxcbiAgICAgICAgICBjdXN0b21lcl96aXBfY29kZToga1tkLlpJUF9DT0RFXSxcbiAgICAgICAgICBjdXN0b21lcl9jb3VudHJ5OiBrW2QuQ09VTlRSWV0sXG4gICAgICAgICAgcHJvbW90aW9uX2NvZGU6IGtbZC5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgICAgY3VzdG9tZXJfZmlyc3RfbmFtZToga1tkLkZJUlNUX05BTUVdLFxuICAgICAgICAgIGN1c3RvbWVyX2xhc3RfbmFtZToga1tkLkxBU1RfTkFNRV1cbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IGF3YWl0IFBlKGEsIFUpIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoQSkge1xuICAgICAgdGhyb3cgdGUoXCJHb29nbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgQSksIG5ldyBFcnJvcigoQSA9PSBudWxsID8gdm9pZCAwIDogQS5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgfVxuICB9XG4pLCBobyA9ICgpID0+IG5ldyBQcm9taXNlKCh0LCByKSA9PiB7XG4gIGNvbnN0IGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwic2NyaXB0XCIpO1xuICBlLnNyYyA9IFwiaHR0cHM6Ly9hcHBsZXBheS5jZG4tYXBwbGUuY29tL2pzYXBpLzEubGF0ZXN0L2FwcGxlLXBheS1zZGsuanNcIiwgZS5jcm9zc09yaWdpbiA9IFwiYW5vbnltb3VzXCIsIGUuYXN5bmMgPSAhMCwgZS5vbmxvYWQgPSAoKSA9PiB0KCksIGUub25lcnJvciA9ICgpID0+IHIobmV3IEVycm9yKFwiRmFpbGVkIHRvIGxvYWQgQXBwbGUgUGF5IFNES1wiKSksIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZSk7XG59KSwgX28gPSAodCwgcikgPT4ge1xuICBjb25zdCBlID0gci50b2tlbi5wYXltZW50TWV0aG9kLmJpbGxpbmdDb250YWN0LCBuID0gci5iaWxsaW5nQ29udGFjdCwgaSA9IHIuc2hpcHBpbmdDb250YWN0LCBzID0geyAuLi50IH07XG4gIHJldHVybiAoZSB8fCBuIHx8IGkpICYmIChzW2QuRU1BSUxdID0gc1tkLkVNQUlMXSB8fCAoZSA9PSBudWxsID8gdm9pZCAwIDogZS5lbWFpbEFkZHJlc3MpIHx8IChuID09IG51bGwgPyB2b2lkIDAgOiBuLmVtYWlsQWRkcmVzcykgfHwgKGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuZW1haWxBZGRyZXNzKSB8fCBcIm9wX3VuZmlsbGVkQGVtYWlsLmNvbVwiLCBzW2QuQ09VTlRSWV0gPSBzW2QuQ09VTlRSWV0gfHwgKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuY291bnRyeUNvZGUpIHx8IChuID09IG51bGwgPyB2b2lkIDAgOiBuLmNvdW50cnlDb2RlKSB8fCAoaSA9PSBudWxsID8gdm9pZCAwIDogaS5jb3VudHJ5Q29kZSkgfHwgXCJVU1wiLCBzW2QuWklQX0NPREVdID0gc1tkLlpJUF9DT0RFXSB8fCAoZSA9PSBudWxsID8gdm9pZCAwIDogZS5wb3N0YWxDb2RlKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5wb3N0YWxDb2RlKSB8fCAoaSA9PSBudWxsID8gdm9pZCAwIDogaS5wb3N0YWxDb2RlKSB8fCBcIjAwMDAwXCIsIHNbZC5GSVJTVF9OQU1FXSA9IHNbZC5GSVJTVF9OQU1FXSB8fCAoZSA9PSBudWxsID8gdm9pZCAwIDogZS5naXZlbk5hbWUpIHx8IChuID09IG51bGwgPyB2b2lkIDAgOiBuLmdpdmVuTmFtZSkgfHwgKGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuZ2l2ZW5OYW1lKSB8fCBcIl9PUF9VTktOT1dOXCIsIHNbZC5MQVNUX05BTUVdID0gc1tkLkxBU1RfTkFNRV0gfHwgKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuZmFtaWx5TmFtZSkgfHwgKG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uZmFtaWx5TmFtZSkgfHwgKGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuZmFtaWx5TmFtZSkgfHwgXCJfT1BfVU5LTk9XTlwiKSwgcztcbn0sIGdvID0geiQxLm9iamVjdCh7XG4gIGRhdGE6IHokMS5vYmplY3Qoe1xuICAgIG1lc3NhZ2VIZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgICBlcnJvcnM6IHokMS5hcnJheSh6JDEuYW55KCkpLFxuICAgIG1lc3NhZ2VUeXBlOiB6JDEuc3RyaW5nKCksXG4gICAgbWVzc2FnZUJvZHk6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpXG4gIH0pLFxuICBvcmlnaW46IHokMS5saXRlcmFsKFwiaHR0cHM6Ly9hcHBsZXBheS5jZG4tYXBwbGUuY29tXCIpXG59KSwgd28gPSAodCkgPT4gZ28uc2FmZVBhcnNlKHQpLmRhdGEsIGJvID0gKHQpID0+IHtcbiAgY29uc3QgciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcbiAgcmV0dXJuIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFxuICAgIFwibWVzc2FnZVwiLFxuICAgIChlKSA9PiB7XG4gICAgICB2YXIgaTtcbiAgICAgIGNvbnN0IG4gPSB3byhlKTtcbiAgICAgICgoaSA9IG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uZGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IGkubWVzc2FnZVR5cGUpID09PSBcIndpbmRvd2Nsb3NpbmdcIiAmJiAodCgpLCByLmFib3J0KCkpO1xuICAgIH0sXG4gICAge1xuICAgICAgc2lnbmFsOiByLnNpZ25hbFxuICAgIH1cbiAgKSwge1xuICAgIGNsZWFudXBDYW5jZWxMaXN0ZW5lcjogKCkgPT4gci5hYm9ydCgpXG4gIH07XG59LCB7IGxvZ19fOiBoZSB9ID0gQyhcImF3eC1hcHBsZS1wYXlcIik7XG5hc3luYyBmdW5jdGlvbiB2byh0LCByKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgbiA9IChhd2FpdCBDZShyLmNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHIuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHIuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiByLm5vbkNkZUZvcm1JbnB1dHNbZC5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogci5ub25DZGVGb3JtSW5wdXRzW2QuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiByLm5vbkNkZUZvcm1JbnB1dHNbZC5MQVNUX05BTUVdLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGFpcndhbGxleF9wYXltZW50X3Nlc3Npb246IHtcbiAgICAgICAgICB2YWxpZGF0aW9uX3VybDogdC52YWxpZGF0aW9uVVJMLFxuICAgICAgICAgIGluaXRpYXRpdmVfY29udGV4dDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFxuICAgICAgICAgIHRoZWlyX2FjY291bnRfaWQ6IHIucHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkpLnJlcXVpcmVkX3VzZXJfYWN0aW9uc1swXSwgaSA9IG4ucGF5bWVudF9zZXNzaW9uLCBzID0gbi5jb25zZW50X2lkO1xuICAgIGlmICghaSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHNlc3Npb24gZGF0YSByZWNlaXZlZCBmcm9tIHBheW1lbnQgZmxvd1wiKTtcbiAgICBpZiAoIXMpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb25zZW50IElEIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIHJldHVybiByLnNlc3Npb24uY29tcGxldGVNZXJjaGFudFZhbGlkYXRpb24oaSksIHM7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyByLnNlc3Npb24uYWJvcnQoKSwgZTtcbiAgfVxufVxuYXN5bmMgZnVuY3Rpb24gRW8odCwgcikge1xuICB2YXIgaSwgcztcbiAgaWYgKCF0LnJlZGlyZWN0X3VybClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyByZWRpcmVjdCBVUkwgZm91bmRcIik7XG4gIGhlKFwiM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgdCk7XG4gIGNvbnN0IHsgc3RhdHVzOiBlIH0gPSBhd2FpdCBJZSh7XG4gICAgdXJsOiB0LnJlZGlyZWN0X3VybCxcbiAgICBiYXNlVXJsOiByLmJhc2VVcmxcbiAgfSk7XG4gIGlmIChoZShg4pWwIDNEUyB2ZXJpZmljYXRpb24gY29tcGxldGVkIFtTdGF0dXM6ICR7ZX1dYCksIGUgPT09IE4uQ0FOQ0VMTEVEKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gY2FuY2VsbGVkXCIpO1xuICBpZiAoZSA9PT0gTi5GQUlMVVJFKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICBjb25zdCBuID0gYXdhaXQgSChyLmNvbm5lY3Rpb24sIHtcbiAgICBzZWN1cmVfdG9rZW46IHIucHJlZmlsbC50b2tlbixcbiAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgIHRoZWlyX3BtX2lkOiB0LnRoZWlyX3BtX2lkLFxuICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IHQuY29uc2VudF9pZCxcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHIuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIGhlKFwiWzJuZF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgbiksIChzID0gKGkgPSBuLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IGlbMF0pID09IG51bGwgPyB2b2lkIDAgOiBzLmlkO1xufVxuYXN5bmMgZnVuY3Rpb24gU28odCwgciwgZSkge1xuICByZXR1cm4geyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogYXdhaXQgUGUoZS5jb25uZWN0aW9uLCB7XG4gICAgc2VjdXJlX3Rva2VuOiBlLnByZWZpbGwudG9rZW4sXG4gICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgcHJvdmlkZXJfdHlwZTogZS5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICB9LFxuICAgIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6ICEwLFxuICAgIHVzZV9jb25maXJtZWRfcG1faWQ6IHQsXG4gICAgbGluZV9pdGVtczogZS5wcmVmaWxsLmxpbmVfaXRlbXMsXG4gICAgdG90YWxfYW1vdW50X2F0b206IGUucHJlZmlsbC5hbW91bnRfdG90YWxfYXRvbSxcbiAgICBjYW5jZWxfYXRfZW5kOiAhMSxcbiAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogZS5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgY3VzdG9tZXJfZW1haWw6IHJbZC5FTUFJTF0sXG4gICAgY3VzdG9tZXJfemlwX2NvZGU6IHJbZC5aSVBfQ09ERV0sXG4gICAgY3VzdG9tZXJfY291bnRyeTogcltkLkNPVU5UUlldLFxuICAgIHByb21vdGlvbl9jb2RlOiByW2QuUFJPTU9USU9OX0NPREVdXG4gIH0pIH07XG59XG5hc3luYyBmdW5jdGlvbiBDbyh0LCByLCBlKSB7XG4gIHZhciBuLCBpLCBzO1xuICB0cnkge1xuICAgIGNvbnN0IGEgPSB0LnBheW1lbnQsIGMgPSBfbyhyLm5vbkNkZUZvcm1JbnB1dHMsIGEpLCB1ID0gY2UoXG4gICAgICBjLFxuICAgICAgci5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIHIuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgKTtcbiAgICBhd2FpdCB2bihyLmNvbm5lY3Rpb24sIHtcbiAgICAgIGVtYWlsOiB1W2QuRU1BSUxdLFxuICAgICAgZmlyc3RfbmFtZTogdVtkLkZJUlNUX05BTUVdLFxuICAgICAgbGFzdF9uYW1lOiB1W2QuTEFTVF9OQU1FXSxcbiAgICAgIHppcF9jb2RlOiB1W2QuWklQX0NPREVdLFxuICAgICAgY291bnRyeTogdVtkLkNPVU5UUlldLFxuICAgICAgdXBkYXRlX3Byb2Nlc3Nvcl9jdXN0b21lcjogITBcbiAgICB9KTtcbiAgICBjb25zdCBsID0gYXdhaXQgSChyLmNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogci5wcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHIuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogZSxcbiAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfbWV0aG9kX2RhdGE6IHtcbiAgICAgICAgICB0eXBlOiBcImFwcGxlcGF5XCIsXG4gICAgICAgICAgYXBwbGVwYXk6IHtcbiAgICAgICAgICAgIHBheW1lbnRfZGF0YV90eXBlOiBcImVuY3J5cHRlZF9wYXltZW50X3Rva2VuXCIsXG4gICAgICAgICAgICBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbjogSlNPTi5zdHJpbmdpZnkoYS50b2tlbilcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBoZShcIlsxc3RdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGwpO1xuICAgIGxldCBwID0gKGkgPSAobiA9IGwucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogblswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuaWQ7XG4gICAgY29uc3QgZiA9IChzID0gbC5yZXF1aXJlZF91c2VyX2FjdGlvbnMpID09IG51bGwgPyB2b2lkIDAgOiBzLmZpbmQoXG4gICAgICAobSkgPT4gbS50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIlxuICAgICk7XG4gICAgaWYgKGYgIT0gbnVsbCAmJiBmLnJlZGlyZWN0X3VybCAmJiBmLmNvbnNlbnRfaWQgJiYgZi50aGVpcl9wbV9pZCAmJiAocCA9IGF3YWl0IEVvKGYsIHIpKSwgIXApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICBjb25zdCBnID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX1NVQ0NFU1NcbiAgICB9O1xuICAgIHJldHVybiByLnNlc3Npb24uY29tcGxldGVQYXltZW50KGcpLCByLmlzU2V0dXBNb2RlID8geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogeyBwYXltZW50X21ldGhvZF9pZDogcCB9IH0gOiBhd2FpdCBTbyhwLCB1LCByKTtcbiAgfSBjYXRjaCAoYSkge1xuICAgIGNvbnN0IGMgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfRkFJTFVSRVxuICAgIH07XG4gICAgdGhyb3cgci5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChjKSwgYTtcbiAgfVxufVxuY29uc3QgeyBsb2dfXzogeiwgZXJyX186IEZlIH0gPSBDKFwiYXd4LWFwcGxlLXBheVwiKSwgRnQgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIGtvID0gQWUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IHQsIGZvcm1DYWxsYmFja3M6IHIgfSkgPT4ge1xuICAgIGNvbnN0IGUgPSBhZSh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEZ0KTtcbiAgICBpZiAoIWUpXG4gICAgICByZXR1cm4geyBpc0F2YWlsYWJsZTogITEsIGlzTG9hZGluZzogITEsIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfSB9O1xuICAgIHooXCJMb2FkaW5nIEFwcGxlIFBheSBTREsuLi5cIik7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IGhvKCksIHooXCJBcHBsZSBQYXkgU0RLIGxvYWRlZCBzdWNjZXNzZnVsbHlcIik7XG4gICAgfSBjYXRjaCAocCkge1xuICAgICAgcmV0dXJuIEZlKFwiRmFpbGVkIHRvIGxvYWQgQXBwbGUgUGF5IFNES1wiLCBwKSwgeyBpc0F2YWlsYWJsZTogITEsIGlzTG9hZGluZzogITEsIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfSB9O1xuICAgIH1cbiAgICBpZiAoIXdpbmRvdy5BcHBsZVBheVNlc3Npb24gfHwgIUFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSlcbiAgICAgIHJldHVybiB6KFwiQXBwbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgb24gdGhpcyBkZXZpY2UvYnJvd3NlclwiKSwgeyBpc0F2YWlsYWJsZTogITEsIGlzTG9hZGluZzogITEsIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfSB9O1xuICAgIGlmICh6KFwiQXBwbGUgUGF5IExvYWRlZFwiKSwgIWF3YWl0IEFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSlcbiAgICAgIHJldHVybiB6KFwiTm8gYWN0aXZlIGNhcmRzIGF2YWlsYWJsZSBmb3IgQXBwbGUgUGF5XCIpLCB7IGlzQXZhaWxhYmxlOiAhMSwgaXNMb2FkaW5nOiAhMSwgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9IH07XG4gICAgY29uc3QgaSA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgcyA9IGF3YWl0IFcoaSksIGEgPSBzLm1vZGUgPT09IFwic2V0dXBcIiwgYyA9IGF3YWl0IGtlKGksIHMudG9rZW4sIGEsIHZvaWQgMCksIHUgPSBlLm1ldGFkYXRhO1xuICAgIGlmICh6KFwicHJvY2Vzc29yQWNjb3VudFwiLCB1KSwgIXUucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIHJldHVybiB7XG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAocCkgPT4ge1xuICAgICAgICB2YXIgZjtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBhd2FpdCBMLmFpcndhbGxleEFwcGxlUGF5LnJ1bih7XG4gICAgICAgICAgICBjb250ZXh0OiB0LFxuICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBlLFxuICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogb2UodC5mb3JtRGl2KSxcbiAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHIsXG4gICAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgICAgaXNTZXR1cE1vZGU6IGEsXG4gICAgICAgICAgICAgIHByZWZpbGw6IHMsXG4gICAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiAoKGYgPSBwID09IG51bGwgPyB2b2lkIDAgOiBwLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QpID09IG51bGwgPyB2b2lkIDAgOiBmLmFtb3VudCkgPz8gYyxcbiAgICAgICAgICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcCA9PSBudWxsID8gdm9pZCAwIDogcC5vdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGcpIHtcbiAgICAgICAgICBGZShcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGcpLCByLmdldC5vbkNoZWNrb3V0RXJyb3IoKGcgPT0gbnVsbCA/IHZvaWQgMCA6IGcubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfTtcbiAgfVxuKSwgUG8gPSBzZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICBub25DZGVGb3JtSW5wdXRzOiBlLFxuICAgIGN1c3RvbVBhcmFtczogbixcbiAgICBmb3JtQ2FsbGJhY2tzOiBpXG4gIH0pID0+IHtcbiAgICB2YXIgQSwgUTtcbiAgICBjb25zdCBzID0gYWUodC5jaGVja291dFBheW1lbnRNZXRob2RzLCBGdCksIHsgaW5pdGlhbFByZXZpZXc6IGEsIGlzU2V0dXBNb2RlOiBjLCBwcmVmaWxsOiB1LCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBsIH0gPSBuLCBwID0gKCgoQSA9IGwgPT0gbnVsbCA/IHZvaWQgMCA6IGwuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogQS5jdXJyZW5jeSkgPz8gYS5jdXJyZW5jeSA/PyBcIlVTRFwiKS50b1VwcGVyQ2FzZSgpLCBnID0gKCgoKFEgPSBsID09IG51bGwgPyB2b2lkIDAgOiBsLmFtb3VudCkgPT0gbnVsbCA/IHZvaWQgMCA6IFEuYW1vdW50QXRvbSkgPz8gYS5hbW91bnRBdG9tID8/IDApIC8gMTAwKS50b0ZpeGVkKDIpLCBtID0ge1xuICAgICAgbGFiZWw6IChsID09IG51bGwgPyB2b2lkIDAgOiBsLmxhYmVsKSA/PyBcIlRvdGFsXCIsXG4gICAgICB0eXBlOiBsICE9IG51bGwgJiYgbC5wZW5kaW5nID8gXCJwZW5kaW5nXCIgOiBcImZpbmFsXCIsXG4gICAgICBhbW91bnQ6IGdcbiAgICB9LCB5ID0ge1xuICAgICAgY291bnRyeUNvZGU6IFwiVVNcIixcbiAgICAgIGN1cnJlbmN5Q29kZTogcCxcbiAgICAgIHJlcXVpcmVkQmlsbGluZ0NvbnRhY3RGaWVsZHM6IFtcImVtYWlsXCIsIFwicG9zdGFsQWRkcmVzc1wiLCBcIm5hbWVcIl0sXG4gICAgICByZXF1aXJlZFNoaXBwaW5nQ29udGFjdEZpZWxkczogW1wiZW1haWxcIl0sXG4gICAgICBzdXBwb3J0ZWROZXR3b3JrczogW1widmlzYVwiLCBcIm1hc3RlckNhcmRcIiwgXCJhbWV4XCIsIFwiZGlzY292ZXJcIl0sXG4gICAgICBtZXJjaGFudENhcGFiaWxpdGllczogW1xuICAgICAgICBcInN1cHBvcnRzM0RTXCIsXG4gICAgICAgIFwic3VwcG9ydHNDcmVkaXRcIixcbiAgICAgICAgXCJzdXBwb3J0c0RlYml0XCIsXG4gICAgICAgIFwic3VwcG9ydHNFTVZcIlxuICAgICAgXSxcbiAgICAgIHRvdGFsOiBtLFxuICAgICAgLi4uKGwgPT0gbnVsbCA/IHZvaWQgMCA6IGwuYXBwbGVQYXlQYXltZW50UmVxdWVzdCkgPz8ge31cbiAgICB9O1xuICAgIHooXCJQYXltZW50IFJlcXVlc3RcIiwgeSk7XG4gICAgY29uc3QgaCA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgeSk7XG4gICAgeihcIkFwcGxlUGF5U2Vzc2lvblwiLCBoKTtcbiAgICBjb25zdCB3ID0ge1xuICAgICAgc2Vzc2lvbjogaCxcbiAgICAgIGNvbm5lY3Rpb246IHQuYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgICBwcm9jZXNzb3JBY2NvdW50OiBzLm1ldGFkYXRhLFxuICAgICAgcHJlZmlsbDogdSxcbiAgICAgIGlzU2V0dXBNb2RlOiBjLFxuICAgICAgYmFzZVVybDogdC5iYXNlVXJsLFxuICAgICAgZm9ybUNhbGxiYWNrczogaSxcbiAgICAgIGRlZmF1bHRGaWVsZFZhbHVlczogbiA9PSBudWxsID8gdm9pZCAwIDogbi5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICB9O1xuICAgIGxldCBSO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgoaywgWCkgPT4ge1xuICAgICAgY29uc3QgcGUgPSAoKSA9PiB7XG4gICAgICAgIHooXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpLCBYKG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIikpO1xuICAgICAgfSwgeyBjbGVhbnVwQ2FuY2VsTGlzdGVuZXI6IGVlIH0gPSBibyhwZSk7XG4gICAgICBoLm9uY2FuY2VsID0gcGUsIGgub252YWxpZGF0ZW1lcmNoYW50ID0gYXN5bmMgKCQpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBSID0gYXdhaXQgdm8oJCwgdyk7XG4gICAgICAgIH0gY2F0Y2ggKEQpIHtcbiAgICAgICAgICBYKEQpO1xuICAgICAgICB9XG4gICAgICB9LCBoLm9ucGF5bWVudG1ldGhvZHNlbGVjdGVkID0gKCkgPT4ge1xuICAgICAgICBjb25zdCAkID0ge1xuICAgICAgICAgIG5ld1RvdGFsOiB7IC4uLm0gfVxuICAgICAgICB9O1xuICAgICAgICBoLmNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbigkKTtcbiAgICAgIH0sIGgub25wYXltZW50YXV0aG9yaXplZCA9IGFzeW5jICgkKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgRCA9IGF3YWl0IENvKCQsIHcsIFIpO1xuICAgICAgICAgIGVlKCksIGsoRCk7XG4gICAgICAgIH0gY2F0Y2ggKEQpIHtcbiAgICAgICAgICBYKEQpO1xuICAgICAgICB9XG4gICAgICB9LCBoLmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKGspID0+IHtcbiAgICAgIHRocm93IEZlKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgayksIGs7XG4gICAgfSk7XG4gIH1cbiksIExlID0gKHQsIHIsIGUpID0+IHtcbiAgY29uc3QgbiA9IHQuZmlsdGVyKChpKSA9PiB7XG4gICAgY29uc3QgcyA9IGUgPT09IHZvaWQgMCA/ICEwIDogaS5wcm9jZXNzb3JfbmFtZSA9PT0gZSwgYSA9IGkucHJvdmlkZXIgPT09IHI7XG4gICAgcmV0dXJuIHMgJiYgYTtcbiAgfSk7XG4gIGlmIChuLmxlbmd0aCA9PT0gMClcbiAgICB0aHJvdyBjb25zb2xlLmVycm9yKFwiQ1BNcyBsaXN0XCIsIHQpLCBuZXcgRXJyb3IoYE5vIENQTXMgZm91bmQgd2l0aCBwcm92aWRlciAnJHtyfScgYW5kIHByb2Nlc3NvciAnJHtlfSdgKTtcbiAgaWYgKG4ubGVuZ3RoICE9PSAxKVxuICAgIHRocm93IGNvbnNvbGUuZXJyb3IoXCJDUE1zIGxpc3RcIiwgdCksIG5ldyBFcnJvcihgTW9yZSB0aGFuIG9uZSBDUE0gZm91bmQgd2l0aCBwcm92aWRlciAnJHtyfScgYW5kIHByb2Nlc3NvciAnJHtlfSdgKTtcbiAgcmV0dXJuIG5bMF07XG59LCBMID0ge1xuICAvLyDinIsgTm90ZTogRm9yIGZsb3dzIHRoYXQgcmVxdWlyZSBpbml0aWFsaXphdGlvbiwgcGxlYXNlIGFkZCB0aGVtIHRvIGBpbml0LWZsb3dzLnRzYFxuICAvLyBDb21tb25cbiAgY29tbW9uQ0M6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IFpuXG4gIH0sXG4gIC8vIFN0cmlwZVxuICBzdHJpcGVQUjoge1xuICAgIGluaXQ6IHJvLFxuICAgIHJ1bjogbm9cbiAgfSxcbiAgc3RyaXBlTGluazoge1xuICAgIGluaXQ6IEluLFxuICAgIHJ1bjogT25cbiAgfSxcbiAgLy8gUG9ja3l0XG4gIHBvY2t5dFBheXBhbDoge1xuICAgIHJ1bjogbG9cbiAgfSxcbiAgLy8gQWlyd2FsbGV4XG4gIGFpcndhbGxleEdvb2dsZVBheToge1xuICAgIGluaXQ6IGZvLFxuICAgIHJ1bjogeW9cbiAgfSxcbiAgYWlyd2FsbGV4QXBwbGVQYXk6IHtcbiAgICBpbml0OiBrbyxcbiAgICBydW46IFBvXG4gIH1cbiAgLy8g8J+RiSBBZGQgbW9yZSBmbG93cyBoZXJlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG59O1xudmFyIE5lID0gZnVuY3Rpb24odCwgcikge1xuICByZXR1cm4gTmUgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbihlLCBuKSB7XG4gICAgZS5fX3Byb3RvX18gPSBuO1xuICB9IHx8IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICBmb3IgKHZhciBpIGluIG4pIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLCBpKSAmJiAoZVtpXSA9IG5baV0pO1xuICB9LCBOZSh0LCByKTtcbn07XG5mdW5jdGlvbiBaKHQsIHIpIHtcbiAgaWYgKHR5cGVvZiByICE9IFwiZnVuY3Rpb25cIiAmJiByICE9PSBudWxsKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKHIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgTmUodCwgcik7XG4gIGZ1bmN0aW9uIGUoKSB7XG4gICAgdGhpcy5jb25zdHJ1Y3RvciA9IHQ7XG4gIH1cbiAgdC5wcm90b3R5cGUgPSByID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShyKSA6IChlLnByb3RvdHlwZSA9IHIucHJvdG90eXBlLCBuZXcgZSgpKTtcbn1cbmZ1bmN0aW9uIEFvKHQsIHIsIGUsIG4pIHtcbiAgZnVuY3Rpb24gaShzKSB7XG4gICAgcmV0dXJuIHMgaW5zdGFuY2VvZiBlID8gcyA6IG5ldyBlKGZ1bmN0aW9uKGEpIHtcbiAgICAgIGEocyk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG5ldyAoZSB8fCAoZSA9IFByb21pc2UpKShmdW5jdGlvbihzLCBhKSB7XG4gICAgZnVuY3Rpb24gYyhwKSB7XG4gICAgICB0cnkge1xuICAgICAgICBsKG4ubmV4dChwKSk7XG4gICAgICB9IGNhdGNoIChmKSB7XG4gICAgICAgIGEoZik7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIHUocCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbChuLnRocm93KHApKTtcbiAgICAgIH0gY2F0Y2ggKGYpIHtcbiAgICAgICAgYShmKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gbChwKSB7XG4gICAgICBwLmRvbmUgPyBzKHAudmFsdWUpIDogaShwLnZhbHVlKS50aGVuKGMsIHUpO1xuICAgIH1cbiAgICBsKChuID0gbi5hcHBseSh0LCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gTHQodCwgcikge1xuICB2YXIgZSA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmIChzWzBdICYgMSkgdGhyb3cgc1sxXTtcbiAgICByZXR1cm4gc1sxXTtcbiAgfSwgdHJ5czogW10sIG9wczogW10gfSwgbiwgaSwgcywgYSA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBJdGVyYXRvciA9PSBcImZ1bmN0aW9uXCIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTtcbiAgcmV0dXJuIGEubmV4dCA9IGMoMCksIGEudGhyb3cgPSBjKDEpLCBhLnJldHVybiA9IGMoMiksIHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIChhW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSksIGE7XG4gIGZ1bmN0aW9uIGMobCkge1xuICAgIHJldHVybiBmdW5jdGlvbihwKSB7XG4gICAgICByZXR1cm4gdShbbCwgcF0pO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gdShsKSB7XG4gICAgaWYgKG4pIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgIGZvciAoOyBhICYmIChhID0gMCwgbFswXSAmJiAoZSA9IDApKSwgZTsgKSB0cnkge1xuICAgICAgaWYgKG4gPSAxLCBpICYmIChzID0gbFswXSAmIDIgPyBpLnJldHVybiA6IGxbMF0gPyBpLnRocm93IHx8ICgocyA9IGkucmV0dXJuKSAmJiBzLmNhbGwoaSksIDApIDogaS5uZXh0KSAmJiAhKHMgPSBzLmNhbGwoaSwgbFsxXSkpLmRvbmUpIHJldHVybiBzO1xuICAgICAgc3dpdGNoIChpID0gMCwgcyAmJiAobCA9IFtsWzBdICYgMiwgcy52YWx1ZV0pLCBsWzBdKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHMgPSBsO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIGUubGFiZWwrKywgeyB2YWx1ZTogbFsxXSwgZG9uZTogITEgfTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIGUubGFiZWwrKywgaSA9IGxbMV0sIGwgPSBbMF07XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBsID0gZS5vcHMucG9wKCksIGUudHJ5cy5wb3AoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAocyA9IGUudHJ5cywgIShzID0gcy5sZW5ndGggPiAwICYmIHNbcy5sZW5ndGggLSAxXSkgJiYgKGxbMF0gPT09IDYgfHwgbFswXSA9PT0gMikpIHtcbiAgICAgICAgICAgIGUgPSAwO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChsWzBdID09PSAzICYmICghcyB8fCBsWzFdID4gc1swXSAmJiBsWzFdIDwgc1szXSkpIHtcbiAgICAgICAgICAgIGUubGFiZWwgPSBsWzFdO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChsWzBdID09PSA2ICYmIGUubGFiZWwgPCBzWzFdKSB7XG4gICAgICAgICAgICBlLmxhYmVsID0gc1sxXSwgcyA9IGw7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHMgJiYgZS5sYWJlbCA8IHNbMl0pIHtcbiAgICAgICAgICAgIGUubGFiZWwgPSBzWzJdLCBlLm9wcy5wdXNoKGwpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNbMl0gJiYgZS5vcHMucG9wKCksIGUudHJ5cy5wb3AoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGwgPSByLmNhbGwodCwgZSk7XG4gICAgfSBjYXRjaCAocCkge1xuICAgICAgbCA9IFs2LCBwXSwgaSA9IDA7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIG4gPSBzID0gMDtcbiAgICB9XG4gICAgaWYgKGxbMF0gJiA1KSB0aHJvdyBsWzFdO1xuICAgIHJldHVybiB7IHZhbHVlOiBsWzBdID8gbFsxXSA6IHZvaWQgMCwgZG9uZTogITAgfTtcbiAgfVxufVxuZnVuY3Rpb24gaWUodCkge1xuICB2YXIgciA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgZSA9IHIgJiYgdFtyXSwgbiA9IDA7XG4gIGlmIChlKSByZXR1cm4gZS5jYWxsKHQpO1xuICBpZiAodCAmJiB0eXBlb2YgdC5sZW5ndGggPT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0ICYmIG4gPj0gdC5sZW5ndGggJiYgKHQgPSB2b2lkIDApLCB7IHZhbHVlOiB0ICYmIHRbbisrXSwgZG9uZTogIXQgfTtcbiAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IociA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cbmZ1bmN0aW9uIHdlKHQsIHIpIHtcbiAgdmFyIGUgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiB0W1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghZSkgcmV0dXJuIHQ7XG4gIHZhciBuID0gZS5jYWxsKHQpLCBpLCBzID0gW10sIGE7XG4gIHRyeSB7XG4gICAgZm9yICg7IChyID09PSB2b2lkIDAgfHwgci0tID4gMCkgJiYgIShpID0gbi5uZXh0KCkpLmRvbmU7ICkgcy5wdXNoKGkudmFsdWUpO1xuICB9IGNhdGNoIChjKSB7XG4gICAgYSA9IHsgZXJyb3I6IGMgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgaSAmJiAhaS5kb25lICYmIChlID0gbi5yZXR1cm4pICYmIGUuY2FsbChuKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKGEpIHRocm93IGEuZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBzO1xufVxuZnVuY3Rpb24gYmUodCwgciwgZSkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgbiA9IDAsIGkgPSByLmxlbmd0aCwgczsgbiA8IGk7IG4rKylcbiAgICAocyB8fCAhKG4gaW4gcikpICYmIChzIHx8IChzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwociwgMCwgbikpLCBzW25dID0gcltuXSk7XG4gIHJldHVybiB0LmNvbmNhdChzIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHIpKTtcbn1cbmZ1bmN0aW9uIG5lKHQpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBuZSA/ICh0aGlzLnYgPSB0LCB0aGlzKSA6IG5ldyBuZSh0KTtcbn1cbmZ1bmN0aW9uIElvKHQsIHIsIGUpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIG4gPSBlLmFwcGx5KHQsIHIgfHwgW10pLCBpLCBzID0gW107XG4gIHJldHVybiBpID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgYyhcIm5leHRcIiksIGMoXCJ0aHJvd1wiKSwgYyhcInJldHVyblwiLCBhKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgaTtcbiAgZnVuY3Rpb24gYShtKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKHkpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoeSkudGhlbihtLCBmKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGMobSwgeSkge1xuICAgIG5bbV0gJiYgKGlbbV0gPSBmdW5jdGlvbihoKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odywgUikge1xuICAgICAgICBzLnB1c2goW20sIGgsIHcsIFJdKSA+IDEgfHwgdShtLCBoKTtcbiAgICAgIH0pO1xuICAgIH0sIHkgJiYgKGlbbV0gPSB5KGlbbV0pKSk7XG4gIH1cbiAgZnVuY3Rpb24gdShtLCB5KSB7XG4gICAgdHJ5IHtcbiAgICAgIGwoblttXSh5KSk7XG4gICAgfSBjYXRjaCAoaCkge1xuICAgICAgZyhzWzBdWzNdLCBoKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gbChtKSB7XG4gICAgbS52YWx1ZSBpbnN0YW5jZW9mIG5lID8gUHJvbWlzZS5yZXNvbHZlKG0udmFsdWUudikudGhlbihwLCBmKSA6IGcoc1swXVsyXSwgbSk7XG4gIH1cbiAgZnVuY3Rpb24gcChtKSB7XG4gICAgdShcIm5leHRcIiwgbSk7XG4gIH1cbiAgZnVuY3Rpb24gZihtKSB7XG4gICAgdShcInRocm93XCIsIG0pO1xuICB9XG4gIGZ1bmN0aW9uIGcobSwgeSkge1xuICAgIG0oeSksIHMuc2hpZnQoKSwgcy5sZW5ndGggJiYgdShzWzBdWzBdLCBzWzBdWzFdKTtcbiAgfVxufVxuZnVuY3Rpb24gT28odCkge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgciA9IHRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBlO1xuICByZXR1cm4gciA/IHIuY2FsbCh0KSA6ICh0ID0gdHlwZW9mIGllID09IFwiZnVuY3Rpb25cIiA/IGllKHQpIDogdFtTeW1ib2wuaXRlcmF0b3JdKCksIGUgPSB7fSwgbihcIm5leHRcIiksIG4oXCJ0aHJvd1wiKSwgbihcInJldHVyblwiKSwgZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgZSk7XG4gIGZ1bmN0aW9uIG4ocykge1xuICAgIGVbc10gPSB0W3NdICYmIGZ1bmN0aW9uKGEpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihjLCB1KSB7XG4gICAgICAgIGEgPSB0W3NdKGEpLCBpKGMsIHUsIGEuZG9uZSwgYS52YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGkocywgYSwgYywgdSkge1xuICAgIFByb21pc2UucmVzb2x2ZSh1KS50aGVuKGZ1bmN0aW9uKGwpIHtcbiAgICAgIHMoeyB2YWx1ZTogbCwgZG9uZTogYyB9KTtcbiAgICB9LCBhKTtcbiAgfVxufVxuZnVuY3Rpb24gUyh0KSB7XG4gIHJldHVybiB0eXBlb2YgdCA9PSBcImZ1bmN0aW9uXCI7XG59XG5mdW5jdGlvbiBPZSh0KSB7XG4gIHZhciByID0gZnVuY3Rpb24obikge1xuICAgIEVycm9yLmNhbGwobiksIG4uc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbiAgfSwgZSA9IHQocik7XG4gIHJldHVybiBlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSwgZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBlLCBlO1xufVxudmFyIFRlID0gT2UoZnVuY3Rpb24odCkge1xuICByZXR1cm4gZnVuY3Rpb24oZSkge1xuICAgIHQodGhpcyksIHRoaXMubWVzc2FnZSA9IGUgPyBlLmxlbmd0aCArIGAgZXJyb3JzIG9jY3VycmVkIGR1cmluZyB1bnN1YnNjcmlwdGlvbjpcbmAgKyBlLm1hcChmdW5jdGlvbihuLCBpKSB7XG4gICAgICByZXR1cm4gaSArIDEgKyBcIikgXCIgKyBuLnRvU3RyaW5nKCk7XG4gICAgfSkuam9pbihgXG4gIGApIDogXCJcIiwgdGhpcy5uYW1lID0gXCJVbnN1YnNjcmlwdGlvbkVycm9yXCIsIHRoaXMuZXJyb3JzID0gZTtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gdmUodCwgcikge1xuICBpZiAodCkge1xuICAgIHZhciBlID0gdC5pbmRleE9mKHIpO1xuICAgIDAgPD0gZSAmJiB0LnNwbGljZShlLCAxKTtcbiAgfVxufVxudmFyIGRlID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHQocikge1xuICAgIHRoaXMuaW5pdGlhbFRlYXJkb3duID0gciwgdGhpcy5jbG9zZWQgPSAhMSwgdGhpcy5fcGFyZW50YWdlID0gbnVsbCwgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHIsIGUsIG4sIGksIHM7XG4gICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgdGhpcy5jbG9zZWQgPSAhMDtcbiAgICAgIHZhciBhID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgaWYgKGEpXG4gICAgICAgIGlmICh0aGlzLl9wYXJlbnRhZ2UgPSBudWxsLCBBcnJheS5pc0FycmF5KGEpKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciBjID0gaWUoYSksIHUgPSBjLm5leHQoKTsgIXUuZG9uZTsgdSA9IGMubmV4dCgpKSB7XG4gICAgICAgICAgICAgIHZhciBsID0gdS52YWx1ZTtcbiAgICAgICAgICAgICAgbC5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICAgICAgciA9IHsgZXJyb3I6IGggfTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgdSAmJiAhdS5kb25lICYmIChlID0gYy5yZXR1cm4pICYmIGUuY2FsbChjKTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgIGlmIChyKSB0aHJvdyByLmVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgIGEucmVtb3ZlKHRoaXMpO1xuICAgICAgdmFyIHAgPSB0aGlzLmluaXRpYWxUZWFyZG93bjtcbiAgICAgIGlmIChTKHApKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIHAoKTtcbiAgICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICAgIHMgPSBoIGluc3RhbmNlb2YgVGUgPyBoLmVycm9ycyA6IFtoXTtcbiAgICAgICAgfVxuICAgICAgdmFyIGYgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgICAgaWYgKGYpIHtcbiAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZm9yICh2YXIgZyA9IGllKGYpLCBtID0gZy5uZXh0KCk7ICFtLmRvbmU7IG0gPSBnLm5leHQoKSkge1xuICAgICAgICAgICAgdmFyIHkgPSBtLnZhbHVlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgWGUoeSk7XG4gICAgICAgICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgICAgICAgIHMgPSBzID8/IFtdLCBoIGluc3RhbmNlb2YgVGUgPyBzID0gYmUoYmUoW10sIHdlKHMpKSwgd2UoaC5lcnJvcnMpKSA6IHMucHVzaChoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgICAgICBuID0geyBlcnJvcjogaCB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBtICYmICFtLmRvbmUgJiYgKGkgPSBnLnJldHVybikgJiYgaS5jYWxsKGcpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAobikgdGhyb3cgbi5lcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChzKVxuICAgICAgICB0aHJvdyBuZXcgVGUocyk7XG4gICAgfVxuICB9LCB0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGU7XG4gICAgaWYgKHIgJiYgciAhPT0gdGhpcylcbiAgICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgICAgWGUocik7XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKHIgaW5zdGFuY2VvZiB0KSB7XG4gICAgICAgICAgaWYgKHIuY2xvc2VkIHx8IHIuX2hhc1BhcmVudCh0aGlzKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICByLl9hZGRQYXJlbnQodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgKHRoaXMuX2ZpbmFsaXplcnMgPSAoZSA9IHRoaXMuX2ZpbmFsaXplcnMpICE9PSBudWxsICYmIGUgIT09IHZvaWQgMCA/IGUgOiBbXSkucHVzaChyKTtcbiAgICAgIH1cbiAgfSwgdC5wcm90b3R5cGUuX2hhc1BhcmVudCA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICByZXR1cm4gZSA9PT0gciB8fCBBcnJheS5pc0FycmF5KGUpICYmIGUuaW5jbHVkZXMocik7XG4gIH0sIHQucHJvdG90eXBlLl9hZGRQYXJlbnQgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgdGhpcy5fcGFyZW50YWdlID0gQXJyYXkuaXNBcnJheShlKSA/IChlLnB1c2gociksIGUpIDogZSA/IFtlLCByXSA6IHI7XG4gIH0sIHQucHJvdG90eXBlLl9yZW1vdmVQYXJlbnQgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgZSA9PT0gciA/IHRoaXMuX3BhcmVudGFnZSA9IG51bGwgOiBBcnJheS5pc0FycmF5KGUpICYmIHZlKGUsIHIpO1xuICB9LCB0LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgIGUgJiYgdmUoZSwgciksIHIgaW5zdGFuY2VvZiB0ICYmIHIuX3JlbW92ZVBhcmVudCh0aGlzKTtcbiAgfSwgdC5FTVBUWSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByID0gbmV3IHQoKTtcbiAgICByZXR1cm4gci5jbG9zZWQgPSAhMCwgcjtcbiAgfSgpLCB0O1xufSgpLCBOdCA9IGRlLkVNUFRZO1xuZnVuY3Rpb24ganQodCkge1xuICByZXR1cm4gdCBpbnN0YW5jZW9mIGRlIHx8IHQgJiYgXCJjbG9zZWRcIiBpbiB0ICYmIFModC5yZW1vdmUpICYmIFModC5hZGQpICYmIFModC51bnN1YnNjcmliZSk7XG59XG5mdW5jdGlvbiBYZSh0KSB7XG4gIFModCkgPyB0KCkgOiB0LnVuc3Vic2NyaWJlKCk7XG59XG52YXIgVXQgPSB7XG4gIG9uVW5oYW5kbGVkRXJyb3I6IG51bGwsXG4gIG9uU3RvcHBlZE5vdGlmaWNhdGlvbjogbnVsbCxcbiAgUHJvbWlzZTogdm9pZCAwLFxuICB1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nOiAhMSxcbiAgdXNlRGVwcmVjYXRlZE5leHRDb250ZXh0OiAhMVxufSwgeHQgPSB7XG4gIHNldFRpbWVvdXQ6IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICBmb3IgKHZhciBlID0gW10sIG4gPSAyOyBuIDwgYXJndW1lbnRzLmxlbmd0aDsgbisrKVxuICAgICAgZVtuIC0gMl0gPSBhcmd1bWVudHNbbl07XG4gICAgcmV0dXJuIHNldFRpbWVvdXQuYXBwbHkodm9pZCAwLCBiZShbdCwgcl0sIHdlKGUpKSk7XG4gIH0sXG4gIGNsZWFyVGltZW91dDogZnVuY3Rpb24odCkge1xuICAgIHJldHVybiAoY2xlYXJUaW1lb3V0KSh0KTtcbiAgfSxcbiAgZGVsZWdhdGU6IHZvaWQgMFxufTtcbmZ1bmN0aW9uICR0KHQpIHtcbiAgeHQuc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICB0aHJvdyB0O1xuICB9KTtcbn1cbmZ1bmN0aW9uIGV0KCkge1xufVxuZnVuY3Rpb24gX2UodCkge1xuICB0KCk7XG59XG52YXIgR2UgPSBmdW5jdGlvbih0KSB7XG4gIFoociwgdCk7XG4gIGZ1bmN0aW9uIHIoZSkge1xuICAgIHZhciBuID0gdC5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgcmV0dXJuIG4uaXNTdG9wcGVkID0gITEsIGUgPyAobi5kZXN0aW5hdGlvbiA9IGUsIGp0KGUpICYmIGUuYWRkKG4pKSA6IG4uZGVzdGluYXRpb24gPSBEbywgbjtcbiAgfVxuICByZXR1cm4gci5jcmVhdGUgPSBmdW5jdGlvbihlLCBuLCBpKSB7XG4gICAgcmV0dXJuIG5ldyBqZShlLCBuLCBpKTtcbiAgfSwgci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKGUpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCB8fCB0aGlzLl9uZXh0KGUpO1xuICB9LCByLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKGUpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSAhMCwgdGhpcy5fZXJyb3IoZSkpO1xuICB9LCByLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMuaXNTdG9wcGVkIHx8ICh0aGlzLmlzU3RvcHBlZCA9ICEwLCB0aGlzLl9jb21wbGV0ZSgpKTtcbiAgfSwgci5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmNsb3NlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSAhMCwgdC5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKSwgdGhpcy5kZXN0aW5hdGlvbiA9IG51bGwpO1xuICB9LCByLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uKGUpIHtcbiAgICB0aGlzLmRlc3RpbmF0aW9uLm5leHQoZSk7XG4gIH0sIHIucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uKGUpIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy5kZXN0aW5hdGlvbi5lcnJvcihlKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfSwgci5wcm90b3R5cGUuX2NvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZGVzdGluYXRpb24uY29tcGxldGUoKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdGhpcy51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfSwgcjtcbn0oZGUpLCBSbyA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kO1xuZnVuY3Rpb24gTWUodCwgcikge1xuICByZXR1cm4gUm8uY2FsbCh0LCByKTtcbn1cbnZhciBUbyA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiB0KHIpIHtcbiAgICB0aGlzLnBhcnRpYWxPYnNlcnZlciA9IHI7XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICBpZiAoZS5uZXh0KVxuICAgICAgdHJ5IHtcbiAgICAgICAgZS5uZXh0KHIpO1xuICAgICAgfSBjYXRjaCAobikge1xuICAgICAgICBmZShuKTtcbiAgICAgIH1cbiAgfSwgdC5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSB0aGlzLnBhcnRpYWxPYnNlcnZlcjtcbiAgICBpZiAoZS5lcnJvcilcbiAgICAgIHRyeSB7XG4gICAgICAgIGUuZXJyb3Iocik7XG4gICAgICB9IGNhdGNoIChuKSB7XG4gICAgICAgIGZlKG4pO1xuICAgICAgfVxuICAgIGVsc2VcbiAgICAgIGZlKHIpO1xuICB9LCB0LnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKHIuY29tcGxldGUpXG4gICAgICB0cnkge1xuICAgICAgICByLmNvbXBsZXRlKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGZlKGUpO1xuICAgICAgfVxuICB9LCB0O1xufSgpLCBqZSA9IGZ1bmN0aW9uKHQpIHtcbiAgWihyLCB0KTtcbiAgZnVuY3Rpb24gcihlLCBuLCBpKSB7XG4gICAgdmFyIHMgPSB0LmNhbGwodGhpcykgfHwgdGhpcywgYTtcbiAgICBpZiAoUyhlKSB8fCAhZSlcbiAgICAgIGEgPSB7XG4gICAgICAgIG5leHQ6IGUgPz8gdm9pZCAwLFxuICAgICAgICBlcnJvcjogbiA/PyB2b2lkIDAsXG4gICAgICAgIGNvbXBsZXRlOiBpID8/IHZvaWQgMFxuICAgICAgfTtcbiAgICBlbHNlIHtcbiAgICAgIHZhciBjO1xuICAgICAgcyAmJiBVdC51c2VEZXByZWNhdGVkTmV4dENvbnRleHQgPyAoYyA9IE9iamVjdC5jcmVhdGUoZSksIGMudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHMudW5zdWJzY3JpYmUoKTtcbiAgICAgIH0sIGEgPSB7XG4gICAgICAgIG5leHQ6IGUubmV4dCAmJiBNZShlLm5leHQsIGMpLFxuICAgICAgICBlcnJvcjogZS5lcnJvciAmJiBNZShlLmVycm9yLCBjKSxcbiAgICAgICAgY29tcGxldGU6IGUuY29tcGxldGUgJiYgTWUoZS5jb21wbGV0ZSwgYylcbiAgICAgIH0pIDogYSA9IGU7XG4gICAgfVxuICAgIHJldHVybiBzLmRlc3RpbmF0aW9uID0gbmV3IFRvKGEpLCBzO1xuICB9XG4gIHJldHVybiByO1xufShHZSk7XG5mdW5jdGlvbiBmZSh0KSB7XG4gICR0KHQpO1xufVxuZnVuY3Rpb24gTW8odCkge1xuICB0aHJvdyB0O1xufVxudmFyIERvID0ge1xuICBjbG9zZWQ6ICEwLFxuICBuZXh0OiBldCxcbiAgZXJyb3I6IE1vLFxuICBjb21wbGV0ZTogZXRcbn0sIHplID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wub2JzZXJ2YWJsZSB8fCBcIkBAb2JzZXJ2YWJsZVwiO1xufSgpO1xuZnVuY3Rpb24gRm8odCkge1xuICByZXR1cm4gdDtcbn1cbmZ1bmN0aW9uIExvKHQpIHtcbiAgcmV0dXJuIHQubGVuZ3RoID09PSAwID8gRm8gOiB0Lmxlbmd0aCA9PT0gMSA/IHRbMF0gOiBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIHQucmVkdWNlKGZ1bmN0aW9uKG4sIGkpIHtcbiAgICAgIHJldHVybiBpKG4pO1xuICAgIH0sIGUpO1xuICB9O1xufVxudmFyIEsgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gdChyKSB7XG4gICAgciAmJiAodGhpcy5fc3Vic2NyaWJlID0gcik7XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSBuZXcgdCgpO1xuICAgIHJldHVybiBlLnNvdXJjZSA9IHRoaXMsIGUub3BlcmF0b3IgPSByLCBlO1xuICB9LCB0LnByb3RvdHlwZS5zdWJzY3JpYmUgPSBmdW5jdGlvbihyLCBlLCBuKSB7XG4gICAgdmFyIGkgPSB0aGlzLCBzID0gam8ocikgPyByIDogbmV3IGplKHIsIGUsIG4pO1xuICAgIHJldHVybiBfZShmdW5jdGlvbigpIHtcbiAgICAgIHZhciBhID0gaSwgYyA9IGEub3BlcmF0b3IsIHUgPSBhLnNvdXJjZTtcbiAgICAgIHMuYWRkKGMgPyBjLmNhbGwocywgdSkgOiB1ID8gaS5fc3Vic2NyaWJlKHMpIDogaS5fdHJ5U3Vic2NyaWJlKHMpKTtcbiAgICB9KSwgcztcbiAgfSwgdC5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uKHIpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXMuX3N1YnNjcmliZShyKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByLmVycm9yKGUpO1xuICAgIH1cbiAgfSwgdC5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uKHIsIGUpIHtcbiAgICB2YXIgbiA9IHRoaXM7XG4gICAgcmV0dXJuIGUgPSB0dChlKSwgbmV3IGUoZnVuY3Rpb24oaSwgcykge1xuICAgICAgdmFyIGEgPSBuZXcgamUoe1xuICAgICAgICBuZXh0OiBmdW5jdGlvbihjKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHIoYyk7XG4gICAgICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICAgICAgcyh1KSwgYS51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6IHMsXG4gICAgICAgIGNvbXBsZXRlOiBpXG4gICAgICB9KTtcbiAgICAgIG4uc3Vic2NyaWJlKGEpO1xuICAgIH0pO1xuICB9LCB0LnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlO1xuICAgIHJldHVybiAoZSA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlLnN1YnNjcmliZShyKTtcbiAgfSwgdC5wcm90b3R5cGVbemVdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIHQucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbigpIHtcbiAgICBmb3IgKHZhciByID0gW10sIGUgPSAwOyBlIDwgYXJndW1lbnRzLmxlbmd0aDsgZSsrKVxuICAgICAgcltlXSA9IGFyZ3VtZW50c1tlXTtcbiAgICByZXR1cm4gTG8ocikodGhpcyk7XG4gIH0sIHQucHJvdG90eXBlLnRvUHJvbWlzZSA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZSA9IHRoaXM7XG4gICAgcmV0dXJuIHIgPSB0dChyKSwgbmV3IHIoZnVuY3Rpb24obiwgaSkge1xuICAgICAgdmFyIHM7XG4gICAgICBlLnN1YnNjcmliZShmdW5jdGlvbihhKSB7XG4gICAgICAgIHJldHVybiBzID0gYTtcbiAgICAgIH0sIGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgcmV0dXJuIGkoYSk7XG4gICAgICB9LCBmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIG4ocyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSwgdC5jcmVhdGUgPSBmdW5jdGlvbihyKSB7XG4gICAgcmV0dXJuIG5ldyB0KHIpO1xuICB9LCB0O1xufSgpO1xuZnVuY3Rpb24gdHQodCkge1xuICB2YXIgcjtcbiAgcmV0dXJuIChyID0gdCA/PyBVdC5Qcm9taXNlKSAhPT0gbnVsbCAmJiByICE9PSB2b2lkIDAgPyByIDogUHJvbWlzZTtcbn1cbmZ1bmN0aW9uIE5vKHQpIHtcbiAgcmV0dXJuIHQgJiYgUyh0Lm5leHQpICYmIFModC5lcnJvcikgJiYgUyh0LmNvbXBsZXRlKTtcbn1cbmZ1bmN0aW9uIGpvKHQpIHtcbiAgcmV0dXJuIHQgJiYgdCBpbnN0YW5jZW9mIEdlIHx8IE5vKHQpICYmIGp0KHQpO1xufVxuZnVuY3Rpb24gVW8odCkge1xuICByZXR1cm4gUyh0ID09IG51bGwgPyB2b2lkIDAgOiB0LmxpZnQpO1xufVxuZnVuY3Rpb24geG8odCkge1xuICByZXR1cm4gZnVuY3Rpb24ocikge1xuICAgIGlmIChVbyhyKSlcbiAgICAgIHJldHVybiByLmxpZnQoZnVuY3Rpb24oZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHJldHVybiB0KGUsIHRoaXMpO1xuICAgICAgICB9IGNhdGNoIChuKSB7XG4gICAgICAgICAgdGhpcy5lcnJvcihuKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVuYWJsZSB0byBsaWZ0IHVua25vd24gT2JzZXJ2YWJsZSB0eXBlXCIpO1xuICB9O1xufVxuZnVuY3Rpb24gJG8odCwgciwgZSwgbiwgaSkge1xuICByZXR1cm4gbmV3IFZvKHQsIHIsIGUsIG4sIGkpO1xufVxudmFyIFZvID0gZnVuY3Rpb24odCkge1xuICBaKHIsIHQpO1xuICBmdW5jdGlvbiByKGUsIG4sIGksIHMsIGEsIGMpIHtcbiAgICB2YXIgdSA9IHQuY2FsbCh0aGlzLCBlKSB8fCB0aGlzO1xuICAgIHJldHVybiB1Lm9uRmluYWxpemUgPSBhLCB1LnNob3VsZFVuc3Vic2NyaWJlID0gYywgdS5fbmV4dCA9IG4gPyBmdW5jdGlvbihsKSB7XG4gICAgICB0cnkge1xuICAgICAgICBuKGwpO1xuICAgICAgfSBjYXRjaCAocCkge1xuICAgICAgICBlLmVycm9yKHApO1xuICAgICAgfVxuICAgIH0gOiB0LnByb3RvdHlwZS5fbmV4dCwgdS5fZXJyb3IgPSBzID8gZnVuY3Rpb24obCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcyhsKTtcbiAgICAgIH0gY2F0Y2ggKHApIHtcbiAgICAgICAgZS5lcnJvcihwKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9IDogdC5wcm90b3R5cGUuX2Vycm9yLCB1Ll9jb21wbGV0ZSA9IGkgPyBmdW5jdGlvbigpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGkoKTtcbiAgICAgIH0gY2F0Y2ggKGwpIHtcbiAgICAgICAgZS5lcnJvcihsKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9IDogdC5wcm90b3R5cGUuX2NvbXBsZXRlLCB1O1xuICB9XG4gIHJldHVybiByLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlO1xuICAgIGlmICghdGhpcy5zaG91bGRVbnN1YnNjcmliZSB8fCB0aGlzLnNob3VsZFVuc3Vic2NyaWJlKCkpIHtcbiAgICAgIHZhciBuID0gdGhpcy5jbG9zZWQ7XG4gICAgICB0LnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpLCAhbiAmJiAoKGUgPSB0aGlzLm9uRmluYWxpemUpID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCB8fCBlLmNhbGwodGhpcykpO1xuICAgIH1cbiAgfSwgcjtcbn0oR2UpLCBxbyA9IE9lKGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHQodGhpcyksIHRoaXMubmFtZSA9IFwiT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3JcIiwgdGhpcy5tZXNzYWdlID0gXCJvYmplY3QgdW5zdWJzY3JpYmVkXCI7XG4gIH07XG59KSwgVnQgPSBmdW5jdGlvbih0KSB7XG4gIFoociwgdCk7XG4gIGZ1bmN0aW9uIHIoKSB7XG4gICAgdmFyIGUgPSB0LmNhbGwodGhpcykgfHwgdGhpcztcbiAgICByZXR1cm4gZS5jbG9zZWQgPSAhMSwgZS5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbCwgZS5vYnNlcnZlcnMgPSBbXSwgZS5pc1N0b3BwZWQgPSAhMSwgZS5oYXNFcnJvciA9ICExLCBlLnRocm93bkVycm9yID0gbnVsbCwgZTtcbiAgfVxuICByZXR1cm4gci5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiA9IG5ldyBydCh0aGlzLCB0aGlzKTtcbiAgICByZXR1cm4gbi5vcGVyYXRvciA9IGUsIG47XG4gIH0sIHIucHJvdG90eXBlLl90aHJvd0lmQ2xvc2VkID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKHRoaXMuY2xvc2VkKVxuICAgICAgdGhyb3cgbmV3IHFvKCk7XG4gIH0sIHIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4gPSB0aGlzO1xuICAgIF9lKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGksIHM7XG4gICAgICBpZiAobi5fdGhyb3dJZkNsb3NlZCgpLCAhbi5pc1N0b3BwZWQpIHtcbiAgICAgICAgbi5jdXJyZW50T2JzZXJ2ZXJzIHx8IChuLmN1cnJlbnRPYnNlcnZlcnMgPSBBcnJheS5mcm9tKG4ub2JzZXJ2ZXJzKSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZm9yICh2YXIgYSA9IGllKG4uY3VycmVudE9ic2VydmVycyksIGMgPSBhLm5leHQoKTsgIWMuZG9uZTsgYyA9IGEubmV4dCgpKSB7XG4gICAgICAgICAgICB2YXIgdSA9IGMudmFsdWU7XG4gICAgICAgICAgICB1Lm5leHQoZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChsKSB7XG4gICAgICAgICAgaSA9IHsgZXJyb3I6IGwgfTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgYyAmJiAhYy5kb25lICYmIChzID0gYS5yZXR1cm4pICYmIHMuY2FsbChhKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgaWYgKGkpIHRocm93IGkuZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIHIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuID0gdGhpcztcbiAgICBfZShmdW5jdGlvbigpIHtcbiAgICAgIGlmIChuLl90aHJvd0lmQ2xvc2VkKCksICFuLmlzU3RvcHBlZCkge1xuICAgICAgICBuLmhhc0Vycm9yID0gbi5pc1N0b3BwZWQgPSAhMCwgbi50aHJvd25FcnJvciA9IGU7XG4gICAgICAgIGZvciAodmFyIGkgPSBuLm9ic2VydmVyczsgaS5sZW5ndGg7IClcbiAgICAgICAgICBpLnNoaWZ0KCkuZXJyb3IoZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIHIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGUgPSB0aGlzO1xuICAgIF9lKGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKGUuX3Rocm93SWZDbG9zZWQoKSwgIWUuaXNTdG9wcGVkKSB7XG4gICAgICAgIGUuaXNTdG9wcGVkID0gITA7XG4gICAgICAgIGZvciAodmFyIG4gPSBlLm9ic2VydmVyczsgbi5sZW5ndGg7IClcbiAgICAgICAgICBuLnNoaWZ0KCkuY29tcGxldGUoKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSwgci5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCA9IHRoaXMuY2xvc2VkID0gITAsIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDtcbiAgfSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KHIucHJvdG90eXBlLCBcIm9ic2VydmVkXCIsIHtcbiAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGU7XG4gICAgICByZXR1cm4gKChlID0gdGhpcy5vYnNlcnZlcnMpID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUubGVuZ3RoKSA+IDA7XG4gICAgfSxcbiAgICBlbnVtZXJhYmxlOiAhMSxcbiAgICBjb25maWd1cmFibGU6ICEwXG4gIH0pLCByLnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiB0aGlzLl90aHJvd0lmQ2xvc2VkKCksIHQucHJvdG90eXBlLl90cnlTdWJzY3JpYmUuY2FsbCh0aGlzLCBlKTtcbiAgfSwgci5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLCB0aGlzLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzKGUpLCB0aGlzLl9pbm5lclN1YnNjcmliZShlKTtcbiAgfSwgci5wcm90b3R5cGUuX2lubmVyU3Vic2NyaWJlID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuID0gdGhpcywgaSA9IHRoaXMsIHMgPSBpLmhhc0Vycm9yLCBhID0gaS5pc1N0b3BwZWQsIGMgPSBpLm9ic2VydmVycztcbiAgICByZXR1cm4gcyB8fCBhID8gTnQgOiAodGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbCwgYy5wdXNoKGUpLCBuZXcgZGUoZnVuY3Rpb24oKSB7XG4gICAgICBuLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsLCB2ZShjLCBlKTtcbiAgICB9KSk7XG4gIH0sIHIucHJvdG90eXBlLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuID0gdGhpcywgaSA9IG4uaGFzRXJyb3IsIHMgPSBuLnRocm93bkVycm9yLCBhID0gbi5pc1N0b3BwZWQ7XG4gICAgaSA/IGUuZXJyb3IocykgOiBhICYmIGUuY29tcGxldGUoKTtcbiAgfSwgci5wcm90b3R5cGUuYXNPYnNlcnZhYmxlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGUgPSBuZXcgSygpO1xuICAgIHJldHVybiBlLnNvdXJjZSA9IHRoaXMsIGU7XG4gIH0sIHIuY3JlYXRlID0gZnVuY3Rpb24oZSwgbikge1xuICAgIHJldHVybiBuZXcgcnQoZSwgbik7XG4gIH0sIHI7XG59KEspLCBydCA9IGZ1bmN0aW9uKHQpIHtcbiAgWihyLCB0KTtcbiAgZnVuY3Rpb24gcihlLCBuKSB7XG4gICAgdmFyIGkgPSB0LmNhbGwodGhpcykgfHwgdGhpcztcbiAgICByZXR1cm4gaS5kZXN0aW5hdGlvbiA9IGUsIGkuc291cmNlID0gbiwgaTtcbiAgfVxuICByZXR1cm4gci5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiwgaTtcbiAgICAoaSA9IChuID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogbi5uZXh0KSA9PT0gbnVsbCB8fCBpID09PSB2b2lkIDAgfHwgaS5jYWxsKG4sIGUpO1xuICB9LCByLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiwgaTtcbiAgICAoaSA9IChuID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogbi5lcnJvcikgPT09IG51bGwgfHwgaSA9PT0gdm9pZCAwIHx8IGkuY2FsbChuLCBlKTtcbiAgfSwgci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZSwgbjtcbiAgICAobiA9IChlID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5jb21wbGV0ZSkgPT09IG51bGwgfHwgbiA9PT0gdm9pZCAwIHx8IG4uY2FsbChlKTtcbiAgfSwgci5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiwgaTtcbiAgICByZXR1cm4gKGkgPSAobiA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCBuID09PSB2b2lkIDAgPyB2b2lkIDAgOiBuLnN1YnNjcmliZShlKSkgIT09IG51bGwgJiYgaSAhPT0gdm9pZCAwID8gaSA6IE50O1xuICB9LCByO1xufShWdCksIEdvID0ge1xuICBub3c6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBEYXRlLm5vdygpO1xuICB9LFxuICBkZWxlZ2F0ZTogdm9pZCAwXG59LCB6byA9IGZ1bmN0aW9uKHQpIHtcbiAgWihyLCB0KTtcbiAgZnVuY3Rpb24gcihlLCBuKSB7XG4gICAgcmV0dXJuIHQuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICB9XG4gIHJldHVybiByLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgcjtcbn0oZGUpLCBudCA9IHtcbiAgc2V0SW50ZXJ2YWw6IGZ1bmN0aW9uKHQsIHIpIHtcbiAgICBmb3IgKHZhciBlID0gW10sIG4gPSAyOyBuIDwgYXJndW1lbnRzLmxlbmd0aDsgbisrKVxuICAgICAgZVtuIC0gMl0gPSBhcmd1bWVudHNbbl07XG4gICAgcmV0dXJuIHNldEludGVydmFsLmFwcGx5KHZvaWQgMCwgYmUoW3QsIHJdLCB3ZShlKSkpO1xuICB9LFxuICBjbGVhckludGVydmFsOiBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIGNsZWFySW50ZXJ2YWwodCk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn0sIFlvID0gZnVuY3Rpb24odCkge1xuICBaKHIsIHQpO1xuICBmdW5jdGlvbiByKGUsIG4pIHtcbiAgICB2YXIgaSA9IHQuY2FsbCh0aGlzLCBlLCBuKSB8fCB0aGlzO1xuICAgIHJldHVybiBpLnNjaGVkdWxlciA9IGUsIGkud29yayA9IG4sIGkucGVuZGluZyA9ICExLCBpO1xuICB9XG4gIHJldHVybiByLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICB2YXIgaTtcbiAgICBpZiAobiA9PT0gdm9pZCAwICYmIChuID0gMCksIHRoaXMuY2xvc2VkKVxuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgdGhpcy5zdGF0ZSA9IGU7XG4gICAgdmFyIHMgPSB0aGlzLmlkLCBhID0gdGhpcy5zY2hlZHVsZXI7XG4gICAgcmV0dXJuIHMgIT0gbnVsbCAmJiAodGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoYSwgcywgbikpLCB0aGlzLnBlbmRpbmcgPSAhMCwgdGhpcy5kZWxheSA9IG4sIHRoaXMuaWQgPSAoaSA9IHRoaXMuaWQpICE9PSBudWxsICYmIGkgIT09IHZvaWQgMCA/IGkgOiB0aGlzLnJlcXVlc3RBc3luY0lkKGEsIHRoaXMuaWQsIG4pLCB0aGlzO1xuICB9LCByLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uKGUsIG4sIGkpIHtcbiAgICByZXR1cm4gaSA9PT0gdm9pZCAwICYmIChpID0gMCksIG50LnNldEludGVydmFsKGUuZmx1c2guYmluZChlLCB0aGlzKSwgaSk7XG4gIH0sIHIucHJvdG90eXBlLnJlY3ljbGVBc3luY0lkID0gZnVuY3Rpb24oZSwgbiwgaSkge1xuICAgIGlmIChpID09PSB2b2lkIDAgJiYgKGkgPSAwKSwgaSAhPSBudWxsICYmIHRoaXMuZGVsYXkgPT09IGkgJiYgdGhpcy5wZW5kaW5nID09PSAhMSlcbiAgICAgIHJldHVybiBuO1xuICAgIG4gIT0gbnVsbCAmJiBudC5jbGVhckludGVydmFsKG4pO1xuICB9LCByLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24oZSwgbikge1xuICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgIHJldHVybiBuZXcgRXJyb3IoXCJleGVjdXRpbmcgYSBjYW5jZWxsZWQgYWN0aW9uXCIpO1xuICAgIHRoaXMucGVuZGluZyA9ICExO1xuICAgIHZhciBpID0gdGhpcy5fZXhlY3V0ZShlLCBuKTtcbiAgICBpZiAoaSlcbiAgICAgIHJldHVybiBpO1xuICAgIHRoaXMucGVuZGluZyA9PT0gITEgJiYgdGhpcy5pZCAhPSBudWxsICYmICh0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlciwgdGhpcy5pZCwgbnVsbCkpO1xuICB9LCByLnByb3RvdHlwZS5fZXhlY3V0ZSA9IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICB2YXIgaSA9ICExLCBzO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLndvcmsoZSk7XG4gICAgfSBjYXRjaCAoYSkge1xuICAgICAgaSA9ICEwLCBzID0gYSB8fCBuZXcgRXJyb3IoXCJTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yXCIpO1xuICAgIH1cbiAgICBpZiAoaSlcbiAgICAgIHJldHVybiB0aGlzLnVuc3Vic2NyaWJlKCksIHM7XG4gIH0sIHIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgdmFyIGUgPSB0aGlzLCBuID0gZS5pZCwgaSA9IGUuc2NoZWR1bGVyLCBzID0gaS5hY3Rpb25zO1xuICAgICAgdGhpcy53b3JrID0gdGhpcy5zdGF0ZSA9IHRoaXMuc2NoZWR1bGVyID0gbnVsbCwgdGhpcy5wZW5kaW5nID0gITEsIHZlKHMsIHRoaXMpLCBuICE9IG51bGwgJiYgKHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKGksIG4sIG51bGwpKSwgdGhpcy5kZWxheSA9IG51bGwsIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7XG4gICAgfVxuICB9LCByO1xufSh6byksIG90ID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHQociwgZSkge1xuICAgIGUgPT09IHZvaWQgMCAmJiAoZSA9IHQubm93KSwgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yID0gciwgdGhpcy5ub3cgPSBlO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKHIsIGUsIG4pIHtcbiAgICByZXR1cm4gZSA9PT0gdm9pZCAwICYmIChlID0gMCksIG5ldyB0aGlzLnNjaGVkdWxlckFjdGlvbkN0b3IodGhpcywgcikuc2NoZWR1bGUobiwgZSk7XG4gIH0sIHQubm93ID0gR28ubm93LCB0O1xufSgpLCBLbyA9IGZ1bmN0aW9uKHQpIHtcbiAgWihyLCB0KTtcbiAgZnVuY3Rpb24gcihlLCBuKSB7XG4gICAgbiA9PT0gdm9pZCAwICYmIChuID0gb3Qubm93KTtcbiAgICB2YXIgaSA9IHQuY2FsbCh0aGlzLCBlLCBuKSB8fCB0aGlzO1xuICAgIHJldHVybiBpLmFjdGlvbnMgPSBbXSwgaS5fYWN0aXZlID0gITEsIGk7XG4gIH1cbiAgcmV0dXJuIHIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuID0gdGhpcy5hY3Rpb25zO1xuICAgIGlmICh0aGlzLl9hY3RpdmUpIHtcbiAgICAgIG4ucHVzaChlKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdmFyIGk7XG4gICAgdGhpcy5fYWN0aXZlID0gITA7XG4gICAgZG9cbiAgICAgIGlmIChpID0gZS5leGVjdXRlKGUuc3RhdGUsIGUuZGVsYXkpKVxuICAgICAgICBicmVhaztcbiAgICB3aGlsZSAoZSA9IG4uc2hpZnQoKSk7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSA9ICExLCBpKSB7XG4gICAgICBmb3IgKDsgZSA9IG4uc2hpZnQoKTsgKVxuICAgICAgICBlLnVuc3Vic2NyaWJlKCk7XG4gICAgICB0aHJvdyBpO1xuICAgIH1cbiAgfSwgcjtcbn0ob3QpLCBIbyA9IG5ldyBLbyhZbyksIFdvID0gZnVuY3Rpb24odCkge1xuICByZXR1cm4gdCAmJiB0eXBlb2YgdC5sZW5ndGggPT0gXCJudW1iZXJcIiAmJiB0eXBlb2YgdCAhPSBcImZ1bmN0aW9uXCI7XG59O1xuZnVuY3Rpb24gWm8odCkge1xuICByZXR1cm4gUyh0ID09IG51bGwgPyB2b2lkIDAgOiB0LnRoZW4pO1xufVxuZnVuY3Rpb24gSm8odCkge1xuICByZXR1cm4gUyh0W3plXSk7XG59XG5mdW5jdGlvbiBCbyh0KSB7XG4gIHJldHVybiBTeW1ib2wuYXN5bmNJdGVyYXRvciAmJiBTKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKTtcbn1cbmZ1bmN0aW9uIFFvKHQpIHtcbiAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoXCJZb3UgcHJvdmlkZWQgXCIgKyAodCAhPT0gbnVsbCAmJiB0eXBlb2YgdCA9PSBcIm9iamVjdFwiID8gXCJhbiBpbnZhbGlkIG9iamVjdFwiIDogXCInXCIgKyB0ICsgXCInXCIpICsgXCIgd2hlcmUgYSBzdHJlYW0gd2FzIGV4cGVjdGVkLiBZb3UgY2FuIHByb3ZpZGUgYW4gT2JzZXJ2YWJsZSwgUHJvbWlzZSwgUmVhZGFibGVTdHJlYW0sIEFycmF5LCBBc3luY0l0ZXJhYmxlLCBvciBJdGVyYWJsZS5cIik7XG59XG5mdW5jdGlvbiBYbygpIHtcbiAgcmV0dXJuIHR5cGVvZiBTeW1ib2wgIT0gXCJmdW5jdGlvblwiIHx8ICFTeW1ib2wuaXRlcmF0b3IgPyBcIkBAaXRlcmF0b3JcIiA6IFN5bWJvbC5pdGVyYXRvcjtcbn1cbnZhciBlaSA9IFhvKCk7XG5mdW5jdGlvbiB0aSh0KSB7XG4gIHJldHVybiBTKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHRbZWldKTtcbn1cbmZ1bmN0aW9uIHJpKHQpIHtcbiAgcmV0dXJuIElvKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oKSB7XG4gICAgdmFyIGUsIG4sIGksIHM7XG4gICAgcmV0dXJuIEx0KHRoaXMsIGZ1bmN0aW9uKGEpIHtcbiAgICAgIHN3aXRjaCAoYS5sYWJlbCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgZSA9IHQuZ2V0UmVhZGVyKCksIGEubGFiZWwgPSAxO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgYS50cnlzLnB1c2goWzEsICwgOSwgMTBdKSwgYS5sYWJlbCA9IDI7XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICByZXR1cm4gWzQsIG5lKGUucmVhZCgpKV07XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICByZXR1cm4gbiA9IGEuc2VudCgpLCBpID0gbi52YWx1ZSwgcyA9IG4uZG9uZSwgcyA/IFs0LCBuZSh2b2lkIDApXSA6IFszLCA1XTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiBbMiwgYS5zZW50KCldO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmV0dXJuIFs0LCBuZShpKV07XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICByZXR1cm4gWzQsIGEuc2VudCgpXTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIHJldHVybiBhLnNlbnQoKSwgWzMsIDJdO1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgcmV0dXJuIFszLCAxMF07XG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICByZXR1cm4gZS5yZWxlYXNlTG9jaygpLCBbN107XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBuaSh0KSB7XG4gIHJldHVybiBTKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQuZ2V0UmVhZGVyKTtcbn1cbmZ1bmN0aW9uIG9pKHQpIHtcbiAgaWYgKHQgaW5zdGFuY2VvZiBLKVxuICAgIHJldHVybiB0O1xuICBpZiAodCAhPSBudWxsKSB7XG4gICAgaWYgKEpvKHQpKVxuICAgICAgcmV0dXJuIGlpKHQpO1xuICAgIGlmIChXbyh0KSlcbiAgICAgIHJldHVybiBzaSh0KTtcbiAgICBpZiAoWm8odCkpXG4gICAgICByZXR1cm4gYWkodCk7XG4gICAgaWYgKEJvKHQpKVxuICAgICAgcmV0dXJuIHF0KHQpO1xuICAgIGlmICh0aSh0KSlcbiAgICAgIHJldHVybiBjaSh0KTtcbiAgICBpZiAobmkodCkpXG4gICAgICByZXR1cm4gbGkodCk7XG4gIH1cbiAgdGhyb3cgUW8odCk7XG59XG5mdW5jdGlvbiBpaSh0KSB7XG4gIHJldHVybiBuZXcgSyhmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSB0W3plXSgpO1xuICAgIGlmIChTKGUuc3Vic2NyaWJlKSlcbiAgICAgIHJldHVybiBlLnN1YnNjcmliZShyKTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJvdmlkZWQgb2JqZWN0IGRvZXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnQgU3ltYm9sLm9ic2VydmFibGVcIik7XG4gIH0pO1xufVxuZnVuY3Rpb24gc2kodCkge1xuICByZXR1cm4gbmV3IEsoZnVuY3Rpb24ocikge1xuICAgIGZvciAodmFyIGUgPSAwOyBlIDwgdC5sZW5ndGggJiYgIXIuY2xvc2VkOyBlKyspXG4gICAgICByLm5leHQodFtlXSk7XG4gICAgci5jb21wbGV0ZSgpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGFpKHQpIHtcbiAgcmV0dXJuIG5ldyBLKGZ1bmN0aW9uKHIpIHtcbiAgICB0LnRoZW4oZnVuY3Rpb24oZSkge1xuICAgICAgci5jbG9zZWQgfHwgKHIubmV4dChlKSwgci5jb21wbGV0ZSgpKTtcbiAgICB9LCBmdW5jdGlvbihlKSB7XG4gICAgICByZXR1cm4gci5lcnJvcihlKTtcbiAgICB9KS50aGVuKG51bGwsICR0KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBjaSh0KSB7XG4gIHJldHVybiBuZXcgSyhmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUsIG47XG4gICAgdHJ5IHtcbiAgICAgIGZvciAodmFyIGkgPSBpZSh0KSwgcyA9IGkubmV4dCgpOyAhcy5kb25lOyBzID0gaS5uZXh0KCkpIHtcbiAgICAgICAgdmFyIGEgPSBzLnZhbHVlO1xuICAgICAgICBpZiAoci5uZXh0KGEpLCByLmNsb3NlZClcbiAgICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfSBjYXRjaCAoYykge1xuICAgICAgZSA9IHsgZXJyb3I6IGMgfTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcyAmJiAhcy5kb25lICYmIChuID0gaS5yZXR1cm4pICYmIG4uY2FsbChpKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGlmIChlKSB0aHJvdyBlLmVycm9yO1xuICAgICAgfVxuICAgIH1cbiAgICByLmNvbXBsZXRlKCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gcXQodCkge1xuICByZXR1cm4gbmV3IEsoZnVuY3Rpb24ocikge1xuICAgIHVpKHQsIHIpLmNhdGNoKGZ1bmN0aW9uKGUpIHtcbiAgICAgIHJldHVybiByLmVycm9yKGUpO1xuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGxpKHQpIHtcbiAgcmV0dXJuIHF0KHJpKHQpKTtcbn1cbmZ1bmN0aW9uIHVpKHQsIHIpIHtcbiAgdmFyIGUsIG4sIGksIHM7XG4gIHJldHVybiBBbyh0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24oKSB7XG4gICAgdmFyIGEsIGM7XG4gICAgcmV0dXJuIEx0KHRoaXMsIGZ1bmN0aW9uKHUpIHtcbiAgICAgIHN3aXRjaCAodS5sYWJlbCkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgdS50cnlzLnB1c2goWzAsIDUsIDYsIDExXSksIGUgPSBPbyh0KSwgdS5sYWJlbCA9IDE7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICByZXR1cm4gWzQsIGUubmV4dCgpXTtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIGlmIChuID0gdS5zZW50KCksICEhbi5kb25lKSByZXR1cm4gWzMsIDRdO1xuICAgICAgICAgIGlmIChhID0gbi52YWx1ZSwgci5uZXh0KGEpLCByLmNsb3NlZClcbiAgICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICAgICAgdS5sYWJlbCA9IDM7XG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICByZXR1cm4gWzMsIDFdO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIFszLCAxMV07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByZXR1cm4gYyA9IHUuc2VudCgpLCBpID0geyBlcnJvcjogYyB9LCBbMywgMTFdO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgcmV0dXJuIHUudHJ5cy5wdXNoKFs2LCAsIDksIDEwXSksIG4gJiYgIW4uZG9uZSAmJiAocyA9IGUucmV0dXJuKSA/IFs0LCBzLmNhbGwoZSldIDogWzMsIDhdO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgdS5zZW50KCksIHUubGFiZWwgPSA4O1xuICAgICAgICBjYXNlIDg6XG4gICAgICAgICAgcmV0dXJuIFszLCAxMF07XG4gICAgICAgIGNhc2UgOTpcbiAgICAgICAgICBpZiAoaSkgdGhyb3cgaS5lcnJvcjtcbiAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgIGNhc2UgMTE6XG4gICAgICAgICAgcmV0dXJuIHIuY29tcGxldGUoKSwgWzJdO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGRpKHQsIHIsIGUsIG4sIGkpIHtcbiAgbiA9PT0gdm9pZCAwICYmIChuID0gMCksIGkgPT09IHZvaWQgMCAmJiAoaSA9ICExKTtcbiAgdmFyIHMgPSByLnNjaGVkdWxlKGZ1bmN0aW9uKCkge1xuICAgIGUoKSwgaSA/IHQuYWRkKHRoaXMuc2NoZWR1bGUobnVsbCwgbikpIDogdGhpcy51bnN1YnNjcmliZSgpO1xuICB9LCBuKTtcbiAgaWYgKHQuYWRkKHMpLCAhaSlcbiAgICByZXR1cm4gcztcbn1cbmZ1bmN0aW9uIHBpKHQsIHIpIHtcbiAgdmFyIGUgPSBTKHQpID8gdCA6IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0O1xuICB9LCBuID0gZnVuY3Rpb24oaSkge1xuICAgIHJldHVybiBpLmVycm9yKGUoKSk7XG4gIH07XG4gIHJldHVybiBuZXcgSyhuKTtcbn1cbnZhciBtaSA9IE9lKGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHQodGhpcyksIHRoaXMubmFtZSA9IFwiRW1wdHlFcnJvclwiLCB0aGlzLm1lc3NhZ2UgPSBcIm5vIGVsZW1lbnRzIGluIHNlcXVlbmNlXCI7XG4gIH07XG59KTtcbmZ1bmN0aW9uIGZpKHQsIHIpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUsIG4pIHtcbiAgICB2YXIgaSA9ICExLCBzO1xuICAgIHQuc3Vic2NyaWJlKHtcbiAgICAgIG5leHQ6IGZ1bmN0aW9uKGEpIHtcbiAgICAgICAgcyA9IGEsIGkgPSAhMDtcbiAgICAgIH0sXG4gICAgICBlcnJvcjogbixcbiAgICAgIGNvbXBsZXRlOiBmdW5jdGlvbigpIHtcbiAgICAgICAgaSA/IGUocykgOiBuKG5ldyBtaSgpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiB5aSh0KSB7XG4gIHJldHVybiB0IGluc3RhbmNlb2YgRGF0ZSAmJiAhaXNOYU4odCk7XG59XG52YXIgaGkgPSBPZShmdW5jdGlvbih0KSB7XG4gIHJldHVybiBmdW5jdGlvbihlKSB7XG4gICAgZSA9PT0gdm9pZCAwICYmIChlID0gbnVsbCksIHQodGhpcyksIHRoaXMubWVzc2FnZSA9IFwiVGltZW91dCBoYXMgb2NjdXJyZWRcIiwgdGhpcy5uYW1lID0gXCJUaW1lb3V0RXJyb3JcIiwgdGhpcy5pbmZvID0gZTtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gX2kodCwgcikge1xuICB2YXIgZSA9IHlpKHQpID8geyBmaXJzdDogdCB9IDogdHlwZW9mIHQgPT0gXCJudW1iZXJcIiA/IHsgZWFjaDogdCB9IDogdCwgbiA9IGUuZmlyc3QsIGkgPSBlLmVhY2gsIHMgPSBlLndpdGgsIGEgPSBzID09PSB2b2lkIDAgPyBnaSA6IHMsIGMgPSBlLnNjaGVkdWxlciwgdSA9IGMgPT09IHZvaWQgMCA/IEhvIDogYywgbCA9IGUubWV0YSwgcCA9IGwgPT09IHZvaWQgMCA/IG51bGwgOiBsO1xuICBpZiAobiA9PSBudWxsICYmIGkgPT0gbnVsbClcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiTm8gdGltZW91dCBwcm92aWRlZC5cIik7XG4gIHJldHVybiB4byhmdW5jdGlvbihmLCBnKSB7XG4gICAgdmFyIG0sIHksIGggPSBudWxsLCB3ID0gMCwgUiA9IGZ1bmN0aW9uKEEpIHtcbiAgICAgIHkgPSBkaShnLCB1LCBmdW5jdGlvbigpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBtLnVuc3Vic2NyaWJlKCksIG9pKGEoe1xuICAgICAgICAgICAgbWV0YTogcCxcbiAgICAgICAgICAgIGxhc3RWYWx1ZTogaCxcbiAgICAgICAgICAgIHNlZW46IHdcbiAgICAgICAgICB9KSkuc3Vic2NyaWJlKGcpO1xuICAgICAgICB9IGNhdGNoIChRKSB7XG4gICAgICAgICAgZy5lcnJvcihRKTtcbiAgICAgICAgfVxuICAgICAgfSwgQSk7XG4gICAgfTtcbiAgICBtID0gZi5zdWJzY3JpYmUoJG8oZywgZnVuY3Rpb24oQSkge1xuICAgICAgeSA9PSBudWxsIHx8IHkudW5zdWJzY3JpYmUoKSwgdysrLCBnLm5leHQoaCA9IEEpLCBpID4gMCAmJiBSKGkpO1xuICAgIH0sIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbigpIHtcbiAgICAgIHkgIT0gbnVsbCAmJiB5LmNsb3NlZCB8fCB5ID09IG51bGwgfHwgeS51bnN1YnNjcmliZSgpLCBoID0gbnVsbDtcbiAgICB9KSksICF3ICYmIFIobiAhPSBudWxsID8gdHlwZW9mIG4gPT0gXCJudW1iZXJcIiA/IG4gOiArbiAtIHUubm93KCkgOiBpKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBnaSh0KSB7XG4gIHRocm93IG5ldyBoaSh0KTtcbn1cbmNsYXNzIGdlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXQgPSAocikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwic3VjY2Vzc1wiLCBpc1N1Y2Nlc3M6ICEwLCBsb2FkZWRWYWx1ZTogciB9LCB0aGlzLl9zdWJqZWN0Lm5leHQociksIHRoaXMuX3N1YmplY3QuY29tcGxldGUoKTtcbiAgICB9LCB0aGlzLnRocm93ID0gKHIsIGUpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImVycm9yXCIsIGlzU3VjY2VzczogITEsIGVycm9yOiByLCBlcnJNc2c6IGUgfSwgdGhpcy5fc3ViamVjdC5lcnJvcihyKTtcbiAgICB9LCB0aGlzLmdldFZhbHVlSWZMb2FkZWRFbHNlID0gKHIpID0+IHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIiA/IHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWUgOiByLCB0aGlzLnN1YnNjcmliZSA9IChyKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgIHIodGhpcy5fY3VycmVudCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIgJiYgcih0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IGUgPSB0aGlzLl9zdWJqZWN0LnN1YnNjcmliZSh7XG4gICAgICAgIG5leHQ6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwic3VjY2Vzc1wiKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAobmV4dCk6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICByKHRoaXMuX2N1cnJlbnQpLCBlLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImVycm9yXCIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChlcnJvcik6IHBsZWFzZSBtYWtlIHN1cmUgdG8gdXBkYXRlIF9jdXJyZW50IGJlZm9yZSB0aGUgc3ViamVjdFwiKTtcbiAgICAgICAgICByKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLndhaXRGb3JMb2FkID0gKHIpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZSk7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIikgcmV0dXJuIFByb21pc2UucmVqZWN0KHRoaXMuX2N1cnJlbnQuZXJyb3IpO1xuICAgICAgdGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiaW5pdGlhbFwiICYmICRlKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgY29uc3QgZSA9IHtcbiAgICAgICAgZmlyc3Q6IHIudGltZW91dFNlYyAqIDFlMyxcbiAgICAgICAgd2l0aDogKCkgPT4gcGkoKCkgPT4gbmV3IEVycm9yKHIudGltZW91dEVyck1zZykpXG4gICAgICB9O1xuICAgICAgcmV0dXJuIGZpKHRoaXMuX3N1YmplY3QucGlwZShfaShlKSkpO1xuICAgIH0sIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJpbml0aWFsXCIsIGlzU3VjY2VzczogITEgfSwgdGhpcy5fc3ViamVjdCA9IG5ldyBWdCgpO1xuICB9XG4gIGdldCBjdXJyZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50O1xuICB9XG59XG5jb25zdCB7IGxvZ19fOiB3aSwgZXJyX186IGJpIH0gPSBDKFwiaW5pdC1mbG93c1wiKSwgeWUgPSAodCwgcikgPT4ge1xuICBjb25zdCBlID0gbmV3IGdlKCk7XG4gIHJldHVybiB7XG4gICAgcHVibGlzaGVyOiBlLFxuICAgIGluaXRpYWxpemU6IGFzeW5jIChuKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBpZiAoZS5jdXJyZW50LmlzU3VjY2VzcylcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIGZsb3cgaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC5cIik7XG4gICAgICAgIGNvbnN0IGkgPSBhd2FpdCByKG4pO1xuICAgICAgICB3aShg4pyUICR7dH0gZmxvdyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuIFJlc3VsdDpgLCBpKSwgZS5zZXQoaSk7XG4gICAgICB9IGNhdGNoIChpKSB7XG4gICAgICAgIGJpKGDwnZmtICR7dH0gZmxvdyBpbml0aWFsaXphdGlvbiBmYWlsZWQuIEVycm9yOmAsIFkoaSksIFwiRGV0YWlsczpcIiwgaSksIGUudGhyb3coaSwgWShpKSk7XG4gICAgICB9XG4gICAgfVxuICB9O1xufSwgdmkgPSBhc3luYyAodCwgciwgZSkgPT4ge1xuICBhd2FpdCBQcm9taXNlLmFsbChPYmplY3QudmFsdWVzKHQpLm1hcCgobikgPT4gbi5pbml0aWFsaXplKHsgY29udGV4dDogciwgZm9ybUNhbGxiYWNrczogZSB9KSkpO1xufSwgRWkgPSAoKSA9PiAoe1xuICAvLyDwn5KhIEFkZCBuZXcgaW5pdCBmbG93cyBoZXJlXG4gIC8vIFN0cmlwZSBQUlxuICBzdHJpcGVQUjogeWUoXCJTdHJpcGUgUFJcIiwgTC5zdHJpcGVQUi5pbml0KSxcbiAgLy8gU3RyaXBlIExpbmtcbiAgc3RyaXBlTGluazogeWUoXCJTdHJpcGUgTGlua1wiLCBMLnN0cmlwZUxpbmsuaW5pdCksXG4gIC8vIEFpcndhbGxleCBHb29nbGVQYXlcbiAgYWlyd2FsbGV4R29vZ2xlUGF5OiB5ZShcIkFpcndhbGxleCBHUGF5XCIsIEwuYWlyd2FsbGV4R29vZ2xlUGF5LmluaXQpLFxuICAvLyBBaXJ3YWxsZXggQXBwbGVQYXlcbiAgYWlyd2FsbGV4QXBwbGVQYXk6IHllKFwiQWlyd2FsbGV4IEFwcGxlUGF5XCIsIEwuYWlyd2FsbGV4QXBwbGVQYXkuaW5pdClcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbn0pLCB7IGVycl9fOiBTaSB9ID0gQyhcImZvcm0tY2FsbGJhY2tzXCIpLCBGID0geiQxLmZ1bmN0aW9uKCkub3B0aW9uYWwoKSwgaXQgPSB6JDEub2JqZWN0KHtcbiAgb25Gb2N1czogRixcbiAgb25CbHVyOiBGLFxuICBvbkNoYW5nZTogRixcbiAgb25Mb2FkOiBGLFxuICBvbkxvYWRFcnJvcjogRixcbiAgb25WYWxpZGF0aW9uRXJyb3I6IEYsXG4gIG9uQ2hlY2tvdXRTdGFydGVkOiBGLFxuICBvbkNoZWNrb3V0U3VjY2VzczogRixcbiAgb25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzOiBGLFxuICBvbkNoZWNrb3V0RXJyb3I6IEYsXG4gIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBGXG59KSwgeCA9IGNsYXNzIHgge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNldENhbGxiYWNrcyA9IChyKSA9PiB7XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSB4LmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCksIE9iamVjdC5lbnRyaWVzKHIpLmZvckVhY2goKFtlLCBuXSkgPT4ge1xuICAgICAgICBjb25zdCBpID0gUXQoZSwgbiA/PyB4Lk5PT1AsIFNpKTtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2VdID0gaTtcbiAgICAgIH0pO1xuICAgIH0sIHRoaXMuX2NhbGxiYWNrcyA9IHguY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHJlYWQtb25seSB2ZXJzaW9uIG9mIHRoZSBjYWxsYmFja3Mgb2JqZWN0LlxuICAgKi9cbiAgZ2V0IGdldCgpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLl9jYWxsYmFja3MgfTtcbiAgfVxufTtcbnguTk9PUCA9ICgpID0+IHtcbn0sIHguY3JlYXRlRW1wdHlDYWxsYmFja3MgPSAoKSA9PiB7XG4gIGNvbnN0IHIgPSB7fTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGl0LmtleW9mKCkuZW51bSkuZm9yRWFjaCgoZSkgPT4ge1xuICAgIHJbZV0gPSB4Lk5PT1A7XG4gIH0pLCByO1xufSwgeC5mcm9tT2JqZWN0ID0gKHIpID0+IHtcbiAgY29uc3QgZSA9IG5ldyB4KCk7XG4gIHJldHVybiBlLnNldENhbGxiYWNrcyhpdC5wYXJzZShyKSksIGU7XG59O1xubGV0IFVlID0geDtcbmNsYXNzIENpIHtcbiAgY29uc3RydWN0b3IociwgZSwgbiwgaSkge1xuICAgIHRoaXMuaGFuZGxlTWVzc2FnZSA9IChzKSA9PiB7XG4gICAgICBpZiAoIXMuc291cmNlKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzb3VyY2UgZm91bmRcIik7XG4gICAgICBpZiAoc3Qocy5vcmlnaW4pICE9PSBzdCh0aGlzLmJhc2VVcmwpIHx8IHR5cGVvZiBzLmRhdGEgPT0gXCJvYmplY3RcIiAmJiBzLmRhdGEucGVucGFsKVxuICAgICAgICByZXR1cm47XG4gICAgICBsZXQgYSA9IG51bGw7XG4gICAgICB0cnkge1xuICAgICAgICBhID0gVXIoSlNPTi5wYXJzZShzLmRhdGEpKTtcbiAgICAgIH0gY2F0Y2ggKGYpIHtcbiAgICAgICAgY29uc29sZS53YXJuKFwiW09KU10gVW5rbm93biBldmVudC4gSWdub3Jpbmc6XCIsIGYpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMudmFsaWRhdGVFdmVudChhKSkgcmV0dXJuO1xuICAgICAgY29uc3QgeyBlbGVtZW50SWQ6IHUsIHBheWxvYWQ6IGwgfSA9IGEsIHAgPSBsLnR5cGU7XG4gICAgICBzd2l0Y2ggKHApIHtcbiAgICAgICAgY2FzZSBcIkxBWU9VVFwiOlxuICAgICAgICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Muc2V0Rm9ybUhlaWdodChsLmhlaWdodCA/IGAke2wuaGVpZ2h0fXB4YCA6IFwiMTAwJVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkZPQ1VTXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkZvY3VzKHUsIGwuZWxlbWVudFR5cGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQkxVUlwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25CbHVyKHUsIGwuZWxlbWVudFR5cGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQ0hBTkdFXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoYW5nZSh1LCBsLmVsZW1lbnRUeXBlLCBsLmVycm9ycyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMT0FERURcIjpcbiAgICAgICAgICB0aGlzLmV2ZW50VGFyZ2V0c1t1XSA9IHMuc291cmNlLCB0aGlzLmludGVybmFsQ2FsbGJhY2tzLm9uQ2RlTG9hZGVkKGwpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTE9BRF9FUlJPUlwiOlxuICAgICAgICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Mub25DZGVMb2FkRXJyb3IobC5tZXNzYWdlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlZBTElEQVRJT05fRVJST1JcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKGwuZWxlbWVudFR5cGUsIGwuZXJyb3JzLCB1KTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb25zb2xlLndhcm4oXCJbZm9ybV0gVW5oYW5kbGVkIGV2ZW50IHR5cGU6XCIsIHApO1xuICAgICAgfVxuICAgIH0sIHRoaXMudmFsaWRhdGVFdmVudCA9IChzKSA9PiBzLmZvcm1JZCAhPT0gdGhpcy5mb3JtSWQgfHwgIXMuZWxlbWVudElkID8gKGNvbnNvbGUubG9nKFwiW09KU10gZm9ybUlkXCIsIHRoaXMuZm9ybUlkLCBzLmZvcm1JZCksIGNvbnNvbGUud2FybihcIltmb3JtXSBJZ25vcmluZyB1bmtub3duIGV2ZW50OlwiLCBzKSwgITEpIDogdGhpcy5ub25jZXMuaGFzKHMubm9uY2UpID8gKGNvbnNvbGUud2FybihcIltmb3JtXSBJZ25vcmluZyBkdXBsaWNhdGUgZXZlbnQ6XCIsIHMpLCAhMSkgOiAodGhpcy5ub25jZXMuYWRkKHMubm9uY2UpLCAhMCksIHRoaXMuZXZlbnRUYXJnZXRzID0ge30sIHRoaXMubm9uY2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSwgdGhpcy5mb3JtSWQgPSByLCB0aGlzLmJhc2VVcmwgPSBlLCB0aGlzLmZvcm1DYWxsYmFja3MgPSBuLCB0aGlzLmludGVybmFsQ2FsbGJhY2tzID0gaTtcbiAgfVxufVxuY29uc3Qgc3QgPSAodCkgPT4gbmV3IFVSTCh0KS5vcmlnaW47XG5hc3luYyBmdW5jdGlvbiBraSh0LCByKSB7XG4gIGNvbnN0IG4gPSBhd2FpdCBjb25uZWN0VG9DaGlsZCh7XG4gICAgaWZyYW1lOiB0LFxuICAgIGRlYnVnOiAhMSxcbiAgICBjaGlsZE9yaWdpbjogclxuICB9KS5wcm9taXNlLCBpID0gYXdhaXQgeHIobik7XG4gIGlmICghJHIobiwgaSkpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiR290IGludmFsaWQgQ0RFIGNvbm5lY3Rpb24gb2JqZWN0XCIpO1xuICByZXR1cm4gbjtcbn1cbmNsYXNzIFBpIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIH1cbiAgYWRkQ29ubmVjdGlvbihyLCBlKSB7XG4gICAgdGhpcy5jb25uZWN0aW9ucy5zZXQociwgZSk7XG4gIH1cbiAgZ2V0Q29ubmVjdGlvbigpIHtcbiAgICBjb25zdCByID0gdGhpcy5jb25uZWN0aW9ucy52YWx1ZXMoKS5uZXh0KCkudmFsdWU7XG4gICAgaWYgKCFyKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29ubmVjdGlvbiBub3QgZm91bmRcIik7XG4gICAgcmV0dXJuIHI7XG4gIH1cbiAgZ2V0QWxsQ29ubmVjdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbnM7XG4gIH1cbn1cbmNvbnN0IEFpID0gKHQsIHIsIGUpID0+IHtcbiAgY29uc3QgeyBzdHJpcGVQUjogbiB9ID0gdDtcbiAgbi5wdWJsaXNoZXIuc3Vic2NyaWJlKChpKSA9PiB7XG4gICAgaWYgKGkuaXNTdWNjZXNzKSB7XG4gICAgICBjb25zdCBzID0gaS5sb2FkZWRWYWx1ZSwgYSA9IHMuaXNBdmFpbGFibGUgJiYgcy5hdmFpbGFibGVQcm92aWRlcnMuYXBwbGVQYXksIGMgPSBzLmlzQXZhaWxhYmxlICYmIHMuYXZhaWxhYmxlUHJvdmlkZXJzLmdvb2dsZVBheSwgdSA9IHtcbiAgICAgICAgYXBwbGVfcGF5OiB7XG4gICAgICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgICAgICBpc0F2YWlsYWJsZTogYSxcbiAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jIChsKSA9PiB7XG4gICAgICAgICAgICBhICYmIGF0KFwiYXBwbGVfcGF5XCIsIHMsIHIsIGUsIGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ29vZ2xlX3BheToge1xuICAgICAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICAgICAgaXNBdmFpbGFibGU6IGMsXG4gICAgICAgICAgc3RhcnRGbG93OiBhc3luYyAobCkgPT4ge1xuICAgICAgICAgICAgYyAmJiBhdChcImdvb2dsZV9wYXlcIiwgcywgciwgZSwgbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgZS5nZXQub25QYXltZW50UmVxdWVzdExvYWQodSk7XG4gICAgfVxuICB9KTtcbn0sIGF0ID0gKHQsIHIsIGUsIG4sIGkpID0+IEwuc3RyaXBlUFIucnVuKHtcbiAgY29udGV4dDogZSxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBMZShlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIHQpLFxuICBub25DZGVGb3JtSW5wdXRzOiBvZShlLmZvcm1EaXYpLFxuICBmb3JtQ2FsbGJhY2tzOiBuLFxuICBjdXN0b21QYXJhbXM6IHsgcHJvdmlkZXI6IHQsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkub3ZlcnJpZGVQYXltZW50UmVxdWVzdCB9LFxuICBpbml0UmVzdWx0OiByXG59KSwgY3QgPSBcIlRoZSBzZWN1cmUgZm9ybSBmYWlsZWQgdG8gbG9hZCBwcm9wZXJseS4gUGxlYXNlIGNoZWNrIHlvdXIgaW50ZXJuZXQgY29ubmVjdGlvbiwgb3IgdHJ5IGFnYWluIGxhdGVyLlwiLCB7IGxvZ19fOiBxLCBlcnJfXzogQiB9ID0gQyhcIm9wLWZvcm1cIiksIEcgPSBjbGFzcyBHIHtcbiAgY29uc3RydWN0b3Iocikge1xuICAgIHRoaXMuY2RlTG9hZEV2ZW50ID0gbmV3IGdlKCksIHRoaXMuYW55Q2RlQ29ubiA9IG5ldyBnZSgpLCB0aGlzLmNvbnRleHQgPSBuZXcgZ2UoKSwgdGhpcy5pbml0Rmxvd3MgPSBFaSgpLCB0aGlzLnN0YXJ0Rm9ybUluaXQgPSBhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBxKFwiSW5pdGlhbGl6aW5nIE9wZW5QYXkgZm9ybTpcIiksIHEoXCLilJwgV2FpdGluZyBmb3IgQ0RFIGxvYWQgZXZlbnQuLi5cIik7XG4gICAgICAgIGNvbnN0IGUgPSBhd2FpdCB0aGlzLmNkZUxvYWRFdmVudC53YWl0Rm9yTG9hZCh7XG4gICAgICAgICAgdGltZW91dFNlYzogMTIwLFxuICAgICAgICAgIHRpbWVvdXRFcnJNc2c6IGN0XG4gICAgICAgIH0pO1xuICAgICAgICBxKFwi4pScIENERSBsb2FkIGV2ZW50IHJlY2VpdmVkXCIpLCBxKFwi4pScIFdhaXRpbmcgZm9yIENERSBjb25uZWN0aW9uLi4uXCIpO1xuICAgICAgICBjb25zdCBuID0gYXdhaXQgdGhpcy5hbnlDZGVDb25uLndhaXRGb3JMb2FkKHtcbiAgICAgICAgICB0aW1lb3V0U2VjOiAxMjAsXG4gICAgICAgICAgdGltZW91dEVyck1zZzogY3RcbiAgICAgICAgfSk7XG4gICAgICAgIHEoXCLilJwgQ0RFIGNvbm5lY3Rpb24gcmVjZWl2ZWRcIiksIHEoXCLilJwgQ3JlYXRpbmcgT0pTIGNvbnRleHQsIHNldHRpbmcgdXAgaGFuZGxlcnMuLi5cIik7XG4gICAgICAgIGNvbnN0IGkgPSBHLmJ1aWxkT2pzRmxvd0NvbnRleHQoXG4gICAgICAgICAgdGhpcy5jb25maWcsXG4gICAgICAgICAgZSxcbiAgICAgICAgICBuLFxuICAgICAgICAgIHRoaXMuZ2V0Rm9ybURpdigpXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuY29udGV4dC5zZXQoaSksIEFpKHRoaXMuaW5pdEZsb3dzLCBpLCB0aGlzLmZvcm1DYWxsYmFja3MpLCBxKFwi4pScIFN0YXJ0aW5nIE9KUyBpbml0IGZsb3dzLi4uXCIpLCBhd2FpdCB2aSh0aGlzLmluaXRGbG93cywgaSwgdGhpcy5mb3JtQ2FsbGJhY2tzKSwgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkxvYWQoZS50b3RhbEFtb3VudEF0b21zLCBlLmN1cnJlbmN5KSwgcShcIuKVsCBEb25lIGluaXRpYWxpemluZyBPSlMgZmxvd3MuXCIpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjb25zdCBuID0gWShlKTtcbiAgICAgICAgQihcIuKVsCBFcnJvciBpbml0aWFsaXppbmcgT1AgZm9ybTpcIiwgbiksIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkRXJyb3Iobik7XG4gICAgICB9XG4gICAgfSwgdGhpcy5zZXRGb3JtSGVpZ2h0ID0gKGUpID0+IHtcbiAgICAgIHRoaXMuZm9ybVByb3BlcnRpZXMuaGVpZ2h0ID0gZSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgJiYgT2JqZWN0LnZhbHVlcyh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cykuZm9yRWFjaCgobikgPT4ge1xuICAgICAgICBuICYmIChuLm5vZGUuc3R5bGUuaGVpZ2h0ID0gZSk7XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLm9uQ2RlTG9hZGVkID0gKGUpID0+IHtcbiAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzIHx8IHRoaXMuY2RlTG9hZEV2ZW50LnNldChlKTtcbiAgICB9LCB0aGlzLm9uQ2RlTG9hZEVycm9yID0gKGUpID0+IHtcbiAgICAgIHRoaXMuY2RlTG9hZEV2ZW50LmN1cnJlbnQuaXNTdWNjZXNzIHx8IHRoaXMuY2RlTG9hZEV2ZW50LnRocm93KG5ldyBFcnJvcihlKSwgZSk7XG4gICAgfSwgdGhpcy5jcmVhdGVFbGVtZW50ID0gKGUsIG4gPSB7fSkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmNvbmZpZykgdGhyb3cgbmV3IEVycm9yKFwiT3BlblBheSBmb3JtIG5vdCBpbml0aWFsaXplZFwiKTtcbiAgICAgIGNvbnN0IGkgPSBYdC5wYXJzZShlKSwgcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIiksIGEgPSB0aGlzLmJ1aWxkUXVlcnlTdHJpbmcobik7XG4gICAgICBzLm5hbWUgPSBgJHtpfS1lbGVtZW50YDtcbiAgICAgIGNvbnN0IGMgPSBuZXcgVVJMKGAvYXBwL3YxLyR7cy5uYW1lfS9gLCB0aGlzLmNvbmZpZy5iYXNlVXJsKTtcbiAgICAgIHJldHVybiBjLnNlYXJjaCA9IGEudG9TdHJpbmcoKSwgcy5zcmMgPSBjLmhyZWYsIHMuc3R5bGUuYm9yZGVyID0gXCJub25lXCIsIHMuc3R5bGUud2lkdGggPSBcIjEwMCVcIiwgdGhpcy5yZWdpc3RlcklmcmFtZShpLCBzKTtcbiAgICB9LCB0aGlzLnJlZ2lzdGVySWZyYW1lID0gKGUsIG4pID0+IHtcbiAgICAgIGNvbnN0IGkgPSB7XG4gICAgICAgIHR5cGU6IGUsXG4gICAgICAgIG5vZGU6IG4sXG4gICAgICAgIG1vdW50OiAocykgPT4ge1xuICAgICAgICAgIHZhciBhO1xuICAgICAgICAgIHJldHVybiAoYSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IocykpID09IG51bGwgPyB2b2lkIDAgOiBhLmFwcGVuZENoaWxkKG4pO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdFRvRWxlbWVudCh7IHR5cGU6IGkudHlwZSwgbm9kZTogaS5ub2RlIH0pLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyB8fCAodGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSB7XG4gICAgICAgIFtyZS5DQVJEXTogdm9pZCAwLFxuICAgICAgICBbcmUuQ0FSRF9OVU1CRVJdOiB2b2lkIDAsXG4gICAgICAgIFtyZS5DQVJEX0VYUElSWV06IHZvaWQgMCxcbiAgICAgICAgW3JlLkNBUkRfQ1ZDXTogdm9pZCAwXG4gICAgICB9KSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHNbZV0gPSBpLCBpO1xuICAgIH0sIHRoaXMuYnVpbGRRdWVyeVN0cmluZyA9IChlKSA9PiB7XG4gICAgICBjb25zdCBuID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgICAgcmV0dXJuIG4uYXBwZW5kKFwicmVmZXJlclwiLCB0aGlzLnJlZmVycmVyKSwgbi5hcHBlbmQoXCJmb3JtSWRcIiwgdGhpcy5mb3JtSWQpLCBlLnN0eWxlcyAmJiBuLmFwcGVuZChcInN0eWxlc1wiLCBqcihlLnN0eWxlcykpLCBuLmFwcGVuZChcInNlY3VyZVRva2VuXCIsIHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW4pLCBuO1xuICAgIH0sIHRoaXMuY29ubmVjdFRvRWxlbWVudCA9IChlKSA9PiB7XG4gICAgICBraShlLm5vZGUpLnRoZW4oKG4pID0+IHtcbiAgICAgICAgdGhpcy5jb25uZWN0aW9uTWFuYWdlci5hZGRDb25uZWN0aW9uKGUudHlwZSwgbiksIHRoaXMuYW55Q2RlQ29ubi5jdXJyZW50LmlzU3VjY2VzcyB8fCB0aGlzLmFueUNkZUNvbm4uc2V0KG4pO1xuICAgICAgfSkuY2F0Y2goKG4pID0+IEIoXCJbRk9STV0gRXJyb3IgY29ubmVjdGluZyB0byBDREUgaWZyYW1lXCIsIG4pKTtcbiAgICB9LCB0aGlzLmdldEZvcm1EaXYgPSAoKSA9PiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRoaXMuZm9ybVRhcmdldCkgPz8gZG9jdW1lbnQuYm9keSwgdGhpcy5zdWJtaXRDYXJkID0gKCkgPT4ge1xuICAgICAgY29uc3QgZSA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgIGlmICghZSkge1xuICAgICAgICBCKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBzdWJtaXR0aW5nLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgTC5jb21tb25DQy5ydW4oe1xuICAgICAgICBjb250ZXh0OiBlLFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IExlKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgXCJjcmVkaXRfY2FyZFwiKSxcbiAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogb2UoZS5mb3JtRGl2KSxcbiAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICBjdXJyZW50Q2RlQ29ubmVjdGlvbnM6IHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuZ2V0QWxsQ29ubmVjdGlvbnMoKVxuICAgICAgICB9LFxuICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgLy8gVGhpcyBmbG93IHJlcXVpcmVzIG5vIGluaXRpYWxpemF0aW9uXG4gICAgICB9KTtcbiAgICB9LCB0aGlzLmdldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCkpIHtcbiAgICAgICAgQihcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgZ2V0dGluZyBhdmFpbGFibGUgcGF5bWVudCBtZXRob2RzLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuaW5pdEZsb3dzKS5tYXAoKFtuLCBpXSkgPT4gKHtcbiAgICAgICAgbmFtZTogbixcbiAgICAgICAgLi4uaS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbClcbiAgICAgIH0pKTtcbiAgICB9LCB0aGlzLmdlbmVyYWxTdWJtaXQgPSAoZSwgbikgPT4ge1xuICAgICAgY29uc3QgaSA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgIGlmICghaSkge1xuICAgICAgICBCKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBzdWJtaXR0aW5nLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc3dpdGNoIChlKSB7XG4gICAgICAgIGNhc2UgXCJwb2NreXQtcGF5cGFsXCI6XG4gICAgICAgICAgcmV0dXJuIEwucG9ja3l0UGF5cGFsLnJ1bih7XG4gICAgICAgICAgICBjb250ZXh0OiBpLFxuICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBMZShpLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFwicGF5cGFsXCIsIFwicG9ja3l0XCIpLFxuICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogb2UoaS5mb3JtRGl2KSxcbiAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgIGN1c3RvbVBhcmFtczogeyBzZXR0aW5nczogbiB9LFxuICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgICAgfSk7XG4gICAgICAgIGNhc2UgXCJhaXJ3YWxsZXgtZ29vZ2xlLXBheVwiOlxuICAgICAgICAgIHJldHVybiB0aGlzLmluaXRGbG93cy5haXJ3YWxsZXhHb29nbGVQYXkucHVibGlzaGVyLnN1YnNjcmliZSgocykgPT4ge1xuICAgICAgICAgICAgcy5pc1N1Y2Nlc3MgJiYgcy5sb2FkZWRWYWx1ZS5pc0F2YWlsYWJsZSA/IHMubG9hZGVkVmFsdWUuc3RhcnRGbG93KG4pIDogQihcbiAgICAgICAgICAgICAgXCJhaXJ3YWxsZXgtZ29vZ2xlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgY2FzZSBcImFpcndhbGxleC1hcHBsZS1wYXlcIjpcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkucHVibGlzaGVyLnN1YnNjcmliZSgocykgPT4ge1xuICAgICAgICAgICAgcy5pc1N1Y2Nlc3MgJiYgcy5sb2FkZWRWYWx1ZS5pc0F2YWlsYWJsZSA/IHMubG9hZGVkVmFsdWUuc3RhcnRGbG93KG4pIDogQihcbiAgICAgICAgICAgICAgXCJhaXJ3YWxsZXgtYXBwbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICRlKGUpO1xuICAgICAgfVxuICAgIH0sIHRoaXMuc3VibWl0ID0gdGhpcy5zdWJtaXRDYXJkLCB0aGlzLmRlc3Ryb3kgPSAoKSA9PiB7XG4gICAgICBxKFwiRGVzdHJveWluZyBPcGVuUGF5IGZvcm0uLi5cIik7XG4gICAgICBmb3IgKGNvbnN0IGUgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA/PyB7fSkpXG4gICAgICAgIGUgJiYgZS5ub2RlLnJlbW92ZSgpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IG51bGwsIGRlbGV0ZSB3aW5kb3cub2pzO1xuICAgIH0sIHRoaXMudXBkYXRlQ2FsbGJhY2tzID0gKGUpID0+IHtcbiAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5zZXRDYWxsYmFja3MoZSk7XG4gICAgfSwgRy5hc3NpZ25Bc1NpbmdsZXRvbih0aGlzKSwgdGhpcy5vanNWZXJzaW9uID0gXCIwLjIuN1wiLCB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uID0gXCJsb2NhbF9idWlsZFwiLCB0aGlzLmJhc2VVcmwgPSByLmJhc2VVcmwgPz8gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiLCB0aGlzLmNvbmZpZyA9IHsgLi4uciwgYmFzZVVybDogdGhpcy5iYXNlVXJsIH0sIHRoaXMuZm9ybUNhbGxiYWNrcyA9IFVlLmZyb21PYmplY3QociksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0gbnVsbCwgdGhpcy5mb3JtSWQgPSBgb3Bqcy1mb3JtLSR7djQoKX1gLCB0aGlzLnJlZmVycmVyID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbiwgdGhpcy5mb3JtVGFyZ2V0ID0gci5mb3JtVGFyZ2V0ID8/IFwiYm9keVwiLCB0aGlzLmZvcm1Qcm9wZXJ0aWVzID0geyBoZWlnaHQ6IFwiMXB4XCIgfSwgdGhpcy5jb25uZWN0aW9uTWFuYWdlciA9IG5ldyBQaSgpLCB0aGlzLmV2ZW50SGFuZGxlciA9IG5ldyBDaSh0aGlzLmZvcm1JZCwgdGhpcy5iYXNlVXJsLCB0aGlzLmZvcm1DYWxsYmFja3MsIHtcbiAgICAgIHNldEZvcm1IZWlnaHQ6IHRoaXMuc2V0Rm9ybUhlaWdodCxcbiAgICAgIG9uQ2RlTG9hZGVkOiB0aGlzLm9uQ2RlTG9hZGVkLFxuICAgICAgb25DZGVMb2FkRXJyb3I6IHRoaXMub25DZGVMb2FkRXJyb3JcbiAgICB9KSwgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpLCB0aGlzLnN0YXJ0Rm9ybUluaXQoKTtcbiAgfVxuICBnZXQgY2hlY2tvdXRTZWN1cmVUb2tlbigpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbjtcbiAgfVxufTtcbkcub2pzRmxvd3MgPSBMLCBHLmFzc2lnbkFzU2luZ2xldG9uID0gKHIpID0+IHtcbiAgaWYgKEcuZ2V0SW5zdGFuY2UoKSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJPcGVuUGF5IGluc3RhbmNlIGFscmVhZHkgZXhpc3RzLiBPbmx5IG9uZSBpbnN0YW5jZSBpcyBhbGxvd2VkLlwiKTtcbiAgd2luZG93Lm9qcyA9IHI7XG59LCBHLmdldEluc3RhbmNlID0gKCkgPT4gd2luZG93Lm9qcyA/PyBudWxsLCBHLmJ1aWxkT2pzRmxvd0NvbnRleHQgPSAociwgZSwgbiwgaSkgPT4gKHtcbiAgY2hlY2tvdXRTZWN1cmVUb2tlbjogci5jaGVja291dFNlY3VyZVRva2VuLFxuICBiYXNlVXJsOiBuZXcgVVJMKHIuYmFzZVVybCA/PyBkdCkub3JpZ2luLFxuICBmb3JtRGl2OiBpLFxuICBlbGVtZW50c1Nlc3Npb25JZDogZS5zZXNzaW9uSWQsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgYW55Q2RlQ29ubmVjdGlvbjogbixcbiAgY3VzdG9tSW5pdFBhcmFtczogci5jdXN0b21Jbml0UGFyYW1zID8/IHt9XG59KTtcbmxldCBsdCA9IEc7XG5cbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEpO1xuY29uc3QgWm9kRmllbGRFcnJvciA9IHokMS5vYmplY3Qoe1xuICBjb2RlOiB6JDEuc3RyaW5nKCksXG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKSxcbiAgcGF0aDogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLmFycmF5KFpvZEZpZWxkRXJyb3IpO1xuY29uc3QgbWFrZUNhbGxiYWNrU2FmZSA9IChjYWxsYmFja05hbWUsIGZuLCBlcnJvckxvZ2dlcikgPT4ge1xuICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZuKC4uLmFyZ3MpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBlcnJvckxvZ2dlcihgW2Zvcm1dIEVycm9yIHJ1bm5pbmcgY2FsbGJhY2sgKCR7Y2FsbGJhY2tOYW1lfSk6YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG4gIH07XG59O1xuXG5jb25zdCBSZXF1aXJlZFN0cmluZyA9IHokMS5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogYENhbm5vdCBiZSBibGFua2AgfSk7XG5jb25zdCBPcHRpb25hbFN0cmluZyA9IHokMS5zdHJpbmcoKS50cmltKCkub3B0aW9uYWwoKTtcbmNvbnN0IG51bGxPclVuZGVmT3IkMSA9ICh6VHlwZSkgPT4geiQxLm51bGxhYmxlKHpUeXBlLm9wdGlvbmFsKCkpO1xudmFyIEZpZWxkTmFtZSA9IC8qIEBfX1BVUkVfXyAqLyAoKEZpZWxkTmFtZTIpID0+IHtcbiAgRmllbGROYW1lMltcIkZJUlNUX05BTUVcIl0gPSBcImZpcnN0TmFtZVwiO1xuICBGaWVsZE5hbWUyW1wiTEFTVF9OQU1FXCJdID0gXCJsYXN0TmFtZVwiO1xuICBGaWVsZE5hbWUyW1wiRU1BSUxcIl0gPSBcImVtYWlsXCI7XG4gIEZpZWxkTmFtZTJbXCJaSVBfQ09ERVwiXSA9IFwiemlwQ29kZVwiO1xuICBGaWVsZE5hbWUyW1wiQ0lUWVwiXSA9IFwiY2l0eVwiO1xuICBGaWVsZE5hbWUyW1wiU1RBVEVcIl0gPSBcInN0YXRlXCI7XG4gIEZpZWxkTmFtZTJbXCJDT1VOVFJZXCJdID0gXCJjb3VudHJ5XCI7XG4gIEZpZWxkTmFtZTJbXCJBRERSRVNTXCJdID0gXCJhZGRyZXNzXCI7XG4gIEZpZWxkTmFtZTJbXCJQSE9ORVwiXSA9IFwicGhvbmVcIjtcbiAgRmllbGROYW1lMltcIlBST01PVElPTl9DT0RFXCJdID0gXCJwcm9tb3Rpb25Db2RlXCI7XG4gIHJldHVybiBGaWVsZE5hbWUyO1xufSkoRmllbGROYW1lIHx8IHt9KTtcbmNvbnN0IEZpZWxkTmFtZUVudW0gPSB6JDEubmF0aXZlRW51bShGaWVsZE5hbWUpO1xudmFyIFByaXZhdGVGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChQcml2YXRlRmllbGROYW1lMikgPT4ge1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfTlVNQkVSXCJdID0gXCJjYXJkTnVtYmVyXCI7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9FWFBJUllcIl0gPSBcImNhcmRFeHBpcnlcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0NWQ1wiXSA9IFwiY2FyZEN2Y1wiO1xuICByZXR1cm4gUHJpdmF0ZUZpZWxkTmFtZTI7XG59KShQcml2YXRlRmllbGROYW1lIHx8IHt9KTtcbmNvbnN0IFByaXZhdGVGaWVsZE5hbWVFbnVtID0geiQxLm5hdGl2ZUVudW0oUHJpdmF0ZUZpZWxkTmFtZSk7XG5jb25zdCBBbGxGaWVsZE5hbWVzID0geiQxLnVuaW9uKFtGaWVsZE5hbWVFbnVtLCBQcml2YXRlRmllbGROYW1lRW51bV0pO1xudmFyIEVsZW1lbnRUeXBlRW51bSA9IC8qIEBfX1BVUkVfXyAqLyAoKEVsZW1lbnRUeXBlRW51bTIpID0+IHtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRcIl0gPSBcImNhcmRcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfTlVNQkVSXCJdID0gXCJjYXJkLW51bWJlclwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9FWFBJUllcIl0gPSBcImNhcmQtZXhwaXJ5XCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX0NWQ1wiXSA9IFwiY2FyZC1jdmNcIjtcbiAgcmV0dXJuIEVsZW1lbnRUeXBlRW51bTI7XG59KShFbGVtZW50VHlwZUVudW0gfHwge30pO1xueiQxLm5hdGl2ZUVudW0oRWxlbWVudFR5cGVFbnVtKTtcbmNvbnN0IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IG51bGxPclVuZGVmT3IkMSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgUGF5bWVudE1ldGhvZE1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgY2FyZE51bWJlcjogT3B0aW9uYWxTdHJpbmcsXG4gIGV4cGlyeTogT3B0aW9uYWxTdHJpbmcsXG4gIGN2YzogT3B0aW9uYWxTdHJpbmdcbn0pO1xueiQxLm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogT3B0aW9uYWxTdHJpbmcsXG4gIGNvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udEZhbWlseTogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRTaXplOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFdlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gIG1hcmdpbjogT3B0aW9uYWxTdHJpbmcsXG4gIHBhZGRpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsZXR0ZXJTcGFjaW5nOiBPcHRpb25hbFN0cmluZyxcbiAgbGluZUhlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gIGhpZGVJY29uOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBFdmVudFR5cGUgPSB6JDEuZW51bShbXG4gIC8vIEVsZW1lbnQgLT4gRm9ybVxuICBcIkxBWU9VVFwiLFxuICBcIkxPQURFRFwiLFxuICBcIkJMVVJcIixcbiAgXCJGT0NVU1wiLFxuICBcIkNIQU5HRVwiLFxuICBcIlRPS0VOSVpFX1NUQVJURURcIixcbiAgXCJDSEVDS09VVF9TVEFSVEVEXCIsXG4gIFwiUEFZTUVOVF9GTE9XX1NUQVJURURcIixcbiAgXCJUT0tFTklaRV9TVUNDRVNTXCIsXG4gIFwiQ0hFQ0tPVVRfU1VDQ0VTU1wiLFxuICBcIkxPQURfRVJST1JcIixcbiAgXCJWQUxJREFUSU9OX0VSUk9SXCIsXG4gIFwiVE9LRU5JWkVfRVJST1JcIixcbiAgXCJDSEVDS09VVF9FUlJPUlwiLFxuICBcIlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1NcIixcbiAgLy8gRm9ybSAtPiBFbGVtZW50XG4gIFwiVE9LRU5JWkVcIixcbiAgXCJDSEVDS09VVFwiLFxuICBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXG5dKTtcbmNvbnN0IEdlbmVyaWNFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJUT0tFTklaRV9TVEFSVEVEXCIsIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiXSk7XG5jb25zdCBHZW5lcmljRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7IHR5cGU6IEdlbmVyaWNFdmVudFR5cGUgfSk7XG5jb25zdCBJbnB1dEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkJMVVJcIiwgXCJGT0NVU1wiLCBcIkNIQU5HRVwiXSk7XG5jb25zdCBJbnB1dEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBJbnB1dEV2ZW50VHlwZSxcbiAgZWxlbWVudFR5cGU6IFByaXZhdGVGaWVsZE5hbWVFbnVtLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJMT0FEX0VSUk9SXCIsIFwiVE9LRU5JWkVfRVJST1JcIiwgXCJDSEVDS09VVF9FUlJPUlwiXSk7XG5jb25zdCBFcnJvckV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBFcnJvckV2ZW50VHlwZSxcbiAgbWVzc2FnZTogUmVxdWlyZWRTdHJpbmcsXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVkFMSURBVElPTl9FUlJPUlwiXSk7XG5jb25zdCBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlLFxuICBlbGVtZW50VHlwZTogQWxsRmllbGROYW1lcyxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG5jb25zdCBMYXlvdXRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTEFZT1VUKSxcbiAgaGVpZ2h0OiBSZXF1aXJlZFN0cmluZ1xufSk7XG5jb25zdCBMb2FkZWRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTE9BREVEKSxcbiAgc2Vzc2lvbklkOiBSZXF1aXJlZFN0cmluZyxcbiAgdG90YWxBbW91bnRBdG9tczogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogT3B0aW9uYWxTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHokMS5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QkMSlcbn0pO1xuY29uc3QgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlBBWU1FTlRfRkxPV19TVEFSVEVEKSxcbiAgbmV4dEFjdGlvbk1ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogeiQxLmFueSgpLm9wdGlvbmFsKCksXG4gIHN0YXJ0UEZNZXRhZGF0YTogeiQxLm9wdGlvbmFsKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5TRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTKSxcbiAgcGF5bWVudE1ldGhvZElkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgUmVxdWlyZWRGb3JtRmllbGRzID0geiQxLm9iamVjdCh7XG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJ6aXBDb2RlXCIgLyogWklQX0NPREUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgUFJGb3JtRmllbGRzID0geiQxLm9iamVjdCh7XG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJ6aXBDb2RlXCIgLyogWklQX0NPREUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImFkZHJlc3NcIiAvKiBBRERSRVNTICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImNpdHlcIiAvKiBDSVRZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInN0YXRlXCIgLyogU1RBVEUgKi9dOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBTdWJtaXRFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJUT0tFTklaRVwiLCBcIkNIRUNLT1VUXCIsIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJdKTtcbmNvbnN0IFN1Ym1pdEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBTdWJtaXRFdmVudFR5cGUsXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBkb05vdFVzZUxlZ2FjeUNDRmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ0NDUE1JZDogT3B0aW9uYWxTdHJpbmdcbn0pLmV4dGVuZChSZXF1aXJlZEZvcm1GaWVsZHMuc2hhcGUpO1xuY29uc3QgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlRPS0VOSVpFX1NVQ0NFU1MpLFxuICBpc1JlYWR5Rm9yQ2hlY2tvdXQ6IHokMS5ib29sZWFuKClcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkNIRUNLT1VUX1NVQ0NFU1MpLFxuICBpbnZvaWNlVXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbklkczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVySWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBFdmVudFBheWxvYWQgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIEdlbmVyaWNFdmVudFBheWxvYWQsXG4gIElucHV0RXZlbnRQYXlsb2FkLFxuICBFcnJvckV2ZW50UGF5bG9hZCxcbiAgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkLFxuICBMYXlvdXRFdmVudFBheWxvYWQsXG4gIExvYWRlZEV2ZW50UGF5bG9hZCxcbiAgU3VibWl0RXZlbnRQYXlsb2FkLFxuICBUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQsXG4gIENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkLFxuICBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZFxuXSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bG9hZDogRXZlbnRQYXlsb2FkLFxuICBub25jZTogUmVxdWlyZWRTdHJpbmcsXG4gIGZvcm1JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGVsZW1lbnRJZDogUmVxdWlyZWRTdHJpbmdcbn0pO1xueiQxLm9iamVjdCh7XG4gIGFtb3VudEF0b206IHokMS5udW1iZXIoKSxcbiAgLyoqXG4gICAqIFRoZSB0aHJlZS1sZXR0ZXIgSVNPIDQyMTcgY3VycmVuY3kgY29kZSBmb3IgdGhlIHBheW1lbnQuXG4gICAqL1xuICBjdXJyZW5jeTogUmVxdWlyZWRTdHJpbmdcbn0pO1xueiQxLmVudW0oW1wiYXBwbGVfcGF5XCIsIFwiZ29vZ2xlX3BheVwiXSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlID0geiQxLm9iamVjdCh7XG4gIGludm9pY2VfdXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbl9pZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IEZpZWxkVmFsaWRhdGlvbkVycm9yID0geiQxLm9iamVjdCh7XG4gIGVsZW1lbnRUeXBlOiB6JDEuc3RyaW5nKCksXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlID0geiQxLm9iamVjdCh7XG4gIHN1Y2Nlc3M6IHokMS5saXRlcmFsKGZhbHNlKSxcbiAgZXJyb3JfdHlwZTogeiQxLmxpdGVyYWwoXCJ2YWxpZGF0aW9uX2Vycm9yXCIpLFxuICBlcnJvcnM6IHokMS5hcnJheShGaWVsZFZhbGlkYXRpb25FcnJvcilcbn0pO1xueiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInN1Y2Nlc3NcIiwgW1xuICB6JDEub2JqZWN0KHsgc3VjY2VzczogeiQxLmxpdGVyYWwodHJ1ZSkgfSksXG4gIFRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2Vcbl0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXCJzdWNjZXNzXCIgLyogU1VDQ0VTUyAqLywgXCJmYWlsdXJlXCIgLyogRkFJTFVSRSAqLywgXCJjYW5jZWxsZWRcIiAvKiBDQU5DRUxMRUQgKi9dKSxcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IHokMS5zdHJpbmcoKSxcbiAgaW5pdGlhbF9pbnRlbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgY29uc2VudF9pZDogeiQxLnN0cmluZygpLFxuICB0aGVpcl9wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgaW5pdGlhbF9pbnRlbnRfaWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBjb25zZW50X2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBwYXltZW50X3Nlc3Npb246IG51bGxPclVuZGVmT3IkMSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xueiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInByZXNlbnRcIiwgW1xuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwodHJ1ZSksIGhyZWY6IHokMS5zdHJpbmcoKSB9KSxcbiAgeiQxLm9iamVjdCh7IHByZXNlbnQ6IHokMS5saXRlcmFsKGZhbHNlKSB9KVxuXSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RzOiB6JDEuYXJyYXkoUGF5bWVudE1ldGhvZE1pbmltYWwpLFxuICBwYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZTogbnVsbE9yVW5kZWZPciQxKENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlKSxcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiBudWxsT3JVbmRlZk9yJDEoeiQxLmFycmF5KENvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSkpXG59KTtcblxueiQxLm9iamVjdCh7XG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbn0pO1xuXG5jb25zdCBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyA9IChzdHlsZXMpID0+IHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0eWxlcyA9IEpTT04uc3RyaW5naWZ5KHN0eWxlcyk7XG4gIHJldHVybiBzZXJpYWxpemVkU3R5bGVzO1xufTtcblxuY29uc3QgbnVsbE9yVW5kZWZPciA9ICh6VHlwZSkgPT4geiQxLm51bGxhYmxlKHpUeXBlLm9wdGlvbmFsKCkpO1xueiQxLnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBgQ2Fubm90IGJlIGJsYW5rYCB9KTtcbnokMS5vYmplY3Qoe1xuICBjZGVfcmVzcG9uc2VfdHlwZTogeiQxLmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbnokMS5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG5jb25zdCBDb3Vwb25NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgYW1vdW50X2F0b21fb2ZmOiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKSksXG4gIHBlcmNlbnRfb2ZmOiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKSksXG4gIGN1cnJlbmN5OiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGR1cmF0aW9uOiB6JDEuc3RyaW5nKCksXG4gIGR1cmF0aW9uX2luX21vbnRoczogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkpXG59KTtcbmNvbnN0IExpbmVJdGVtID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHByaWNlX2lkOiB6JDEuc3RyaW5nKCksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkuaW50KCkpLFxuICBxdWFudGl0eTogeiQxLm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IEJyYW5kU2V0dGluZ3MgPSB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKTtcbmNvbnN0IEJyYW5kID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgc2V0dGluZ3M6IG51bGxPclVuZGVmT3IoQnJhbmRTZXR0aW5ncylcbn0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25JdGVtTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBxdWFudGl0eTogeiQxLm51bWJlcigpXG59KTtcbmNvbnN0IFN1YnNjcmlwdGlvbk1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogeiQxLmFycmF5KFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsKSxcbiAgdHJpYWxfc3RhcnQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgdHJpYWxfZW5kOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6JDEubnVtYmVyKClcbn0pO1xuY29uc3QgSW52b2ljZUxpbmVJdGVtTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICBhbW91bnRfYXRvbV9jb25zaWRlcmluZ19kaXNjb3VudF9hcHBsaWVkOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRpc2NvdW50X2Ftb3VudF9hdG9tczogeiQxLmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgRGlzY291bnRNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGNvdXBvbjogQ291cG9uTWluaW1hbFxufSk7XG5jb25zdCBJbnZvaWNlTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudHM6IHokMS5hcnJheShEaXNjb3VudE1pbmltYWwpLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZXM6IHokMS5hcnJheShJbnZvaWNlTGluZUl0ZW1NaW5pbWFsKSxcbiAgcmVtYWluaW5nX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRheF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9kaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpXG59KTtcbmNvbnN0IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBjcmVhdGVkOiB6JDEuYXJyYXkoU3Vic2NyaXB0aW9uTWluaW1hbCksXG4gIGludm9pY2VzOiB6JDEuYXJyYXkoSW52b2ljZU1pbmltYWwpXG59KTtcbmNvbnN0IFByZXZpZXdDaGVja291dFJlc3BvbnNlID0geiQxLm9iamVjdCh7XG4gIHByZXZpZXc6IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCxcbiAgcHJldmlld19wb3N0X3RyaWFsOiBudWxsT3JVbmRlZk9yKENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCksXG4gIGNvdXBvbnM6IHokMS5hcnJheShDb3Vwb25NaW5pbWFsKVxufSk7XG5jb25zdCBfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJvcGVuXCIpLFxuICB0b2tlbjogeiQxLnN0cmluZygpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoTGluZUl0ZW0pLFxuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBicmFuZDogQnJhbmQsXG4gIHN1YnNfcHJldmlldzogbnVsbE9yVW5kZWZPcihQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSksXG4gIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICBtZXRob2RzX2F2YWlsYWJsZTogeiQxLmFycmF5KENoZWNrb3V0UGF5bWVudE1ldGhvZClcbn0pO1xuY29uc3QgUGF5bWVudEZvcm1QcmVmaWxsID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcIm1vZGVcIiwgW1xuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEubGl0ZXJhbChcInNldHVwXCIpLFxuICAgIGN1cnJlbmN5OiB6JDEubnVsbGFibGUoeiQxLnVuZGVmaW5lZCgpKVxuICB9KS5leHRlbmQoX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbi5zaGFwZSksXG4gIHokMS5vYmplY3Qoe1xuICAgIG1vZGU6IHokMS5lbnVtKFtcInBheW1lbnRcIiwgXCJzdWJzY3JpcHRpb25cIl0pLFxuICAgIGN1cnJlbmN5OiB6JDEuc3RyaW5nKClcbiAgfSkuZXh0ZW5kKF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24uc2hhcGUpXG5dKTtcbmNvbnN0IENvbXBsZXRlZEZvcm1QcmVmaWxsID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJjb21wbGV0ZVwiKVxufSk7XG5jb25zdCBFeHBpcmVkRm9ybVByZWZpbGwgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcImV4cGlyZWRcIilcbn0pO1xueiQxLnVuaW9uKFtQYXltZW50Rm9ybVByZWZpbGwsIENvbXBsZXRlZEZvcm1QcmVmaWxsLCBFeHBpcmVkRm9ybVByZWZpbGxdKTtcbnokMS5vYmplY3Qoe1xuICBsb2dvOiB6JDEuc3RyaW5nKCksXG4gIGljb246IHokMS5zdHJpbmcoKSxcbiAgcHJpbWFyeV9jb2xvcjogeiQxLnN0cmluZygpLFxuICBzZWNvbmRhcnlfY29sb3I6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHBtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwYXltZW50X2lucHV0OiB6JDEuYW55KCksXG4gIC8vIFNob3VsZCBmb2xsb3cgQW55UGF5bWVudElucHV0IGZyb20gQ0RFXG4gIGN1c3RvbWVyX2ZpcnN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9sYXN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl96aXBfY29kZTogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl9jb3VudHJ5OiB6JDEuc3RyaW5nKCksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShMaW5lSXRlbSksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGNhbmNlbF9hdF9lbmQ6IHokMS5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICB1c2VfY29uZmlybWVkX3BtX2lkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKCksXG4gIHJldHVybl91cmw6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGxvYzogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIG1zZzogeiQxLnN0cmluZygpLFxuICB1cmw6IHokMS5zdHJpbmcoKVxufSk7XG56JDEuYXJyYXkoUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IpO1xuY29uc3QgTmV3Q3VzdG9tZXJGaWVsZHMgPSB6JDEub2JqZWN0KHtcbiAgbmV3X2N1c3RvbWVyX2VtYWlsOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgUHJpY2VRdHkgPSB6JDEub2JqZWN0KHtcbiAgcHJpY2VfaWQ6IHokMS5zdHJpbmcoKSxcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBDYXJ0SW5mbyA9IHokMS5vYmplY3Qoe1xuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoUHJpY2VRdHkpLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IFByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEgPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bWVudF9wcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleGlzdGluZ19jY19wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRoZWlyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdXNlX3BheV9maXJzdF9mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogQ2FydEluZm8ub3B0aW9uYWwoKVxufSkuZXh0ZW5kKE5ld0N1c3RvbWVyRmllbGRzLnNoYXBlKS5leHRlbmQoUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YS5zaGFwZSk7XG56JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIGZpZWxkczogUFJGb3JtRmllbGRzLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZFxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKVxuICAvLyBUaGlzIGlzIG9wdGlvbmFsIGluIENERSwgYnV0IG5vdCBpbiBPSlMgbW92aW5nIGZvcndhcmRcbn0pO1xueiQxLm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeiQxLmFycmF5KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgY2NfcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEucmVjb3JkKHokMS5hbnkoKSk7XG56JDEub2JqZWN0KHtcbiAgZmlyc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZTE6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZTI6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZTM6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgY2l0eTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBzdGF0ZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBjb3VudHJ5OiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHppcF9jb2RlOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGVtYWlsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHVwZGF0ZV9wcm9jZXNzb3JfY3VzdG9tZXI6IG51bGxPclVuZGVmT3IoeiQxLmJvb2xlYW4oKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKCksXG4gIGVtYWlsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGZpcnN0X25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGFkZHJlc3M6IG51bGxPclVuZGVmT3IoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcblxuZnVuY3Rpb24gZml4UHJvdG8odGFyZ2V0LCBwcm90b3R5cGUpIHtcbiAgdmFyIHNldFByb3RvdHlwZU9mID0gT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuICBzZXRQcm90b3R5cGVPZiA/IHNldFByb3RvdHlwZU9mKHRhcmdldCwgcHJvdG90eXBlKSA6IHRhcmdldC5fX3Byb3RvX18gPSBwcm90b3R5cGU7XG59XG5mdW5jdGlvbiBmaXhTdGFjayh0YXJnZXQsIGZuKSB7XG4gIGlmIChmbiA9PT0gdm9pZCAwKSB7XG4gICAgZm4gPSB0YXJnZXQuY29uc3RydWN0b3I7XG4gIH1cblxuICB2YXIgY2FwdHVyZVN0YWNrVHJhY2UgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcbiAgY2FwdHVyZVN0YWNrVHJhY2UgJiYgY2FwdHVyZVN0YWNrVHJhY2UodGFyZ2V0LCBmbik7XG59XG5cbnZhciBfX2V4dGVuZHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBfZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uIGV4dGVuZFN0YXRpY3MoZCwgYikge1xuICAgIF9leHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHtcbiAgICAgIF9fcHJvdG9fXzogW11cbiAgICB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGQuX19wcm90b19fID0gYjtcbiAgICB9IHx8IGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICBmb3IgKHZhciBwIGluIGIpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcbiAgfTtcblxuICByZXR1cm4gZnVuY3Rpb24gKGQsIGIpIHtcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG5cbiAgICBfZXh0ZW5kU3RhdGljcyhkLCBiKTtcblxuICAgIGZ1bmN0aW9uIF9fKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7XG4gICAgfVxuXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xuICB9O1xufSgpO1xuXG4oZnVuY3Rpb24gKF9zdXBlcikge1xuICBfX2V4dGVuZHMoQ3VzdG9tRXJyb3IsIF9zdXBlcik7XG5cbiAgZnVuY3Rpb24gQ3VzdG9tRXJyb3IobWVzc2FnZSwgb3B0aW9ucykge1xuICAgIHZhciBfbmV3VGFyZ2V0ID0gdGhpcy5jb25zdHJ1Y3RvcjtcblxuICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIG1lc3NhZ2UsIG9wdGlvbnMpIHx8IHRoaXM7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoX3RoaXMsICduYW1lJywge1xuICAgICAgdmFsdWU6IF9uZXdUYXJnZXQubmFtZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfSk7XG4gICAgZml4UHJvdG8oX3RoaXMsIF9uZXdUYXJnZXQucHJvdG90eXBlKTtcbiAgICBmaXhTdGFjayhfdGhpcyk7XG4gICAgcmV0dXJuIF90aGlzO1xuICB9XG5cbiAgcmV0dXJuIEN1c3RvbUVycm9yO1xufSkoRXJyb3IpO1xuXG5jb25zdCBjcmVhdGVPanNGbG93TG9nZ2VycyA9IChwcmVmaXgpID0+IHtcbiAgY29uc3QgbG9nID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLmxvZyhgJHttZS5ncmVlbi5ib2xkKFwib2pzL1wiKX0ke21lLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgfTtcbiAgY29uc3QgZXJyID0gKC4uLmFyZ3MpID0+IHtcbiAgICB3aW5kb3dbXCJjb25zb2xlXCJdLndhcm4oYCR7bWUucmVkLmJvbGQoXCJvanMvXCIpfSR7bWUuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZyxcbiAgICBlcnIsXG4gICAgbG9nX186IGxvZyxcbiAgICBlcnJfXzogZXJyXG4gIH07XG59O1xuXG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwic3RyaXBlX2xpbmtcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuXG56JDEub2JqZWN0KHtcbiAgXCJvcC1wb2NreXQtM2RzLXVybFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtcG9ja3l0LXR4bi1ub1wiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtcG9ja3l0LXJlZi1ub1wiOiB6JDEuc3RyaW5nKClcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgQVdYX0xPQURJTkcgPSB7XG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgfVxufTtcblxueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5cbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnVuaW9uKFt6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSwgeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpXSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcblxueiQxLm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInBvY2t5dFwiKSxcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwicGF5cGFsXCIpXG59KTtcbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgcGF5cGFsX2lmcmFtZV91cmw6IHokMS5zdHJpbmcoKSxcbiAgICB2ZXJpZnlfdG9rZW46IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5cbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6JDEuc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KTtcblxueiQxLm9iamVjdCh7XG4gIGRhdGE6IHokMS5vYmplY3Qoe1xuICAgIG1lc3NhZ2VIZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgICBlcnJvcnM6IHokMS5hcnJheSh6JDEuYW55KCkpLFxuICAgIG1lc3NhZ2VUeXBlOiB6JDEuc3RyaW5nKCksXG4gICAgbWVzc2FnZUJvZHk6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpXG4gIH0pLFxuICBvcmlnaW46IHokMS5saXRlcmFsKFwiaHR0cHM6Ly9hcHBsZXBheS5jZG4tYXBwbGUuY29tXCIpXG59KTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xuXG5jb25zdCBQUl9MT0FESU5HID0ge1xuICBpc0xvYWRpbmc6IHRydWUsXG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYHN0YXJ0RmxvdyB0cmlnZ2VyZWQgd2hpbGUgcGF5bWVudCByZXF1ZXN0IGlzIHN0aWxsIG5vdCByZWFkeS4gXG4gICAgICBZb3UgY2FuIGNoZWNrIHRoZSBcIi5pc0xvYWRpbmdcIiBwYXJhbSB0byBrbm93IHdoZW4gYSBwYXltZW50IHJlcXVlc3QgaXMgc3RpbGwgbG9hZGluZywgXG4gICAgICBhbmQgXCIuaXNBdmFpbGFibGVcIiB0byBrbm93IGlmIGEgcGF5bWVudCByZXF1ZXN0IGlzIGF2YWlsYWJsZS5gXG4gICAgKTtcbiAgfVxufTtcblxuY29uc3QgeyBlcnJfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJmb3JtLWNhbGxiYWNrc1wiKTtcbmNvbnN0IE9wdGlvbmFsRm4gPSB6JDEuZnVuY3Rpb24oKS5vcHRpb25hbCgpO1xuY29uc3QgWm9kRm9ybUNhbGxiYWNrcyA9IHokMS5vYmplY3Qoe1xuICBvbkZvY3VzOiBPcHRpb25hbEZuLFxuICBvbkJsdXI6IE9wdGlvbmFsRm4sXG4gIG9uQ2hhbmdlOiBPcHRpb25hbEZuLFxuICBvbkxvYWQ6IE9wdGlvbmFsRm4sXG4gIG9uTG9hZEVycm9yOiBPcHRpb25hbEZuLFxuICBvblZhbGlkYXRpb25FcnJvcjogT3B0aW9uYWxGbixcbiAgb25DaGVja291dFN0YXJ0ZWQ6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRTdWNjZXNzOiBPcHRpb25hbEZuLFxuICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRFcnJvcjogT3B0aW9uYWxGbixcbiAgb25QYXltZW50UmVxdWVzdExvYWQ6IE9wdGlvbmFsRm5cbn0pO1xuY2xhc3MgRm9ybUNhbGxiYWNrcyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8qKlxuICAgICAqIFNldHMgQUxMIGZvcm0gY2FsbGJhY2tzLiBOb3RlIHRoYXQgYWxsIG9sZCBjYWxsYmFja3MgYXJlIHJlbW92ZWQuXG4gICAgICovXG4gICAgdGhpcy5zZXRDYWxsYmFja3MgPSAocmF3Q2FsbGJhY2tzKSA9PiB7XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gICAgICBPYmplY3QuZW50cmllcyhyYXdDYWxsYmFja3MpLmZvckVhY2goKFtrZXksIHJhd0NhbGxiYWNrXSkgPT4ge1xuICAgICAgICBjb25zdCBzYWZlQ2FsbGJhY2sgPSBtYWtlQ2FsbGJhY2tTYWZlKGtleSwgcmF3Q2FsbGJhY2sgPz8gRm9ybUNhbGxiYWNrcy5OT09QLCBlcnJfXyk7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrc1trZXldID0gc2FmZUNhbGxiYWNrO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLk5PT1AgPSAoKSA9PiB7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuY3JlYXRlRW1wdHlDYWxsYmFja3MgPSAoKSA9PiB7XG4gICAgICBjb25zdCB4ID0ge307XG4gICAgICBPYmplY3Qua2V5cyhab2RGb3JtQ2FsbGJhY2tzLmtleW9mKCkuZW51bSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIHhba2V5XSA9IEZvcm1DYWxsYmFja3MuTk9PUDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHg7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuZnJvbU9iamVjdCA9IChvYmopID0+IHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEZvcm1DYWxsYmFja3MoKTtcbiAgICAgIGluc3RhbmNlLnNldENhbGxiYWNrcyhab2RGb3JtQ2FsbGJhY2tzLnBhcnNlKG9iaikpO1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSByZWFkLW9ubHkgdmVyc2lvbiBvZiB0aGUgY2FsbGJhY2tzIG9iamVjdC5cbiAgICovXG4gIGdldCBnZXQoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fY2FsbGJhY2tzIH07XG4gIH1cbn1cblxuY29uc3QgdXNlUmVhY3RpdmVGb3JtQ2FsbGJhY2tzID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IGZvcm1DYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmZyb21PYmplY3Qoe1xuICAgIG9uRm9jdXM6IHByb3BzLm9uRm9jdXMsXG4gICAgb25CbHVyOiBwcm9wcy5vbkJsdXIsXG4gICAgb25DaGFuZ2U6IHByb3BzLm9uQ2hhbmdlLFxuICAgIG9uTG9hZDogcHJvcHMub25Mb2FkLFxuICAgIG9uTG9hZEVycm9yOiBwcm9wcy5vbkxvYWRFcnJvcixcbiAgICBvblZhbGlkYXRpb25FcnJvcjogcHJvcHMub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgb25DaGVja291dFN0YXJ0ZWQ6IHByb3BzLm9uQ2hlY2tvdXRTdGFydGVkLFxuICAgIG9uQ2hlY2tvdXRTdWNjZXNzOiBwcm9wcy5vbkNoZWNrb3V0U3VjY2VzcyxcbiAgICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IHByb3BzLm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyxcbiAgICBvbkNoZWNrb3V0RXJyb3I6IHByb3BzLm9uQ2hlY2tvdXRFcnJvcixcbiAgICBvblBheW1lbnRSZXF1ZXN0TG9hZDogcHJvcHMub25QYXltZW50UmVxdWVzdExvYWRcbiAgfSk7XG4gIGlmIChsdC5nZXRJbnN0YW5jZSgpKSB7XG4gICAgbHQuZ2V0SW5zdGFuY2UoKT8udXBkYXRlQ2FsbGJhY2tzKGZvcm1DYWxsYmFja3MuZ2V0KTtcbiAgfVxuICByZXR1cm4gZm9ybUNhbGxiYWNrcy5nZXQ7XG59O1xuXG5jb25zdCB1c2VQYXltZW50UmVxdWVzdHMgPSAob3JpZ2luYWxPblBheW1lbnRSZXF1ZXN0TG9hZCkgPT4ge1xuICBjb25zdCBbcGF5bWVudFJlcXVlc3RzLCBzZXRQYXltZW50UmVxdWVzdHNdID0gdXNlU3RhdGUoe1xuICAgIGFwcGxlX3BheTogUFJfTE9BRElORyxcbiAgICBnb29nbGVfcGF5OiBQUl9MT0FESU5HXG4gIH0pO1xuICBjb25zdCBvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCA9IHVzZUNhbGxiYWNrKFxuICAgIChwYXltZW50UmVxdWVzdHMyKSA9PiB7XG4gICAgICBzZXRQYXltZW50UmVxdWVzdHMocGF5bWVudFJlcXVlc3RzMik7XG4gICAgICBvcmlnaW5hbE9uUGF5bWVudFJlcXVlc3RMb2FkPy4ocGF5bWVudFJlcXVlc3RzMik7XG4gICAgfSxcbiAgICBbb3JpZ2luYWxPblBheW1lbnRSZXF1ZXN0TG9hZF1cbiAgKTtcbiAgcmV0dXJuIHsgcGF5bWVudFJlcXVlc3RzLCBvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCB9O1xufTtcblxuY29uc3QgRk9STV9UQVJHRVQgPSBcIm9wX29qc19mb3JtXCI7XG5jb25zdCBFbGVtZW50c0Zvcm0gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgW29wRm9ybSwgc2V0T3BGb3JtXSA9IHVzZVN0YXRlKCk7XG4gIGNvbnN0IFtlbGVtZW50c0NvbnRleHRWYWx1ZSwgc2V0RWxlbWVudHNDb250ZXh0VmFsdWVdID0gdXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IHsgcGF5bWVudFJlcXVlc3RzLCBvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCB9ID0gdXNlUGF5bWVudFJlcXVlc3RzKHByb3BzLm9uUGF5bWVudFJlcXVlc3RMb2FkKTtcbiAgY29uc3QgW2xvYWRlZCwgc2V0TG9hZGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3N0cmlwZUxpbmtDdHJsLCBzZXRTdHJpcGVMaW5rQ3RybF0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW2FpcndhbGxleCwgc2V0QWlyd2FsbGV4XSA9IHVzZVN0YXRlKHtcbiAgICBnb29nbGVQYXk6IEFXWF9MT0FESU5HLFxuICAgIGFwcGxlUGF5OiBBV1hfTE9BRElOR1xuICB9KTtcbiAgY29uc3QgZm9ybUNhbGxiYWNrcyA9IHVzZVJlYWN0aXZlRm9ybUNhbGxiYWNrcyh7XG4gICAgLi4ucHJvcHMsXG4gICAgb25QYXltZW50UmVxdWVzdExvYWQ6IG92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkLFxuICAgIG9uTG9hZDogKHRvdGFsQW1vdW50QXRvbXMsIGN1cnJlbmN5KSA9PiB7XG4gICAgICBzZXRMb2FkZWQodHJ1ZSk7XG4gICAgICBwcm9wcy5vbkxvYWQ/Lih0b3RhbEFtb3VudEF0b21zLCBjdXJyZW5jeSk7XG4gICAgfVxuICB9KTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAob3BGb3JtKSByZXR1cm47XG4gICAgY29uc3QgZm9ybSA9IGx0LmdldEluc3RhbmNlKCkgPz8gbmV3IGx0KHtcbiAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHByb3BzLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICBmb3JtVGFyZ2V0OiBgIyR7Rk9STV9UQVJHRVR9YCxcbiAgICAgIGJhc2VVcmw6IHByb3BzLmJhc2VVcmwsXG4gICAgICBjdXN0b21Jbml0UGFyYW1zOiBwcm9wcy5jdXN0b21Jbml0UGFyYW1zLFxuICAgICAgLi4uZm9ybUNhbGxiYWNrc1xuICAgIH0pO1xuICAgIHNldE9wRm9ybShmb3JtKTtcbiAgICBjb25zdCB2YWx1ZSA9IGdldEVsZW1lbnRzQ29udGV4dFZhbHVlKGZvcm0pO1xuICAgIHNldEVsZW1lbnRzQ29udGV4dFZhbHVlKHZhbHVlKTtcbiAgICBmb3JtLmluaXRGbG93cy5zdHJpcGVMaW5rLnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgIHNldFN0cmlwZUxpbmtDdHJsKHJlc3VsdC5sb2FkZWRWYWx1ZS5jb250cm9sbGVyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBmb3JtLmluaXRGbG93cy5haXJ3YWxsZXhHb29nbGVQYXkucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgc2V0QWlyd2FsbGV4KChwcmV2KSA9PiAoe1xuICAgICAgICAgIGFwcGxlUGF5OiBwcmV2LmFwcGxlUGF5LFxuICAgICAgICAgIGdvb2dsZVBheTogcmVzdWx0LmxvYWRlZFZhbHVlXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBmb3JtLmluaXRGbG93cy5haXJ3YWxsZXhBcHBsZVBheS5wdWJsaXNoZXIuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzICYmIHJlc3VsdC5sb2FkZWRWYWx1ZS5pc0F2YWlsYWJsZSkge1xuICAgICAgICBzZXRBaXJ3YWxsZXgoKHByZXYpID0+ICh7XG4gICAgICAgICAgZ29vZ2xlUGF5OiBwcmV2Lmdvb2dsZVBheSxcbiAgICAgICAgICBhcHBsZVBheToge1xuICAgICAgICAgICAgLi4ucmVzdWx0LmxvYWRlZFZhbHVlLFxuICAgICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBmb3JtLmRlc3Ryb3koKTtcbiAgICB9O1xuICB9LCBbXSk7XG4gIGlmICghb3BGb3JtKSB7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRnJhZ21lbnQsIHt9KTtcbiAgfVxuICBjb25zdCBjaGlsZHJlblByb3BzID0ge1xuICAgIHN1Ym1pdDogb3BGb3JtLnN1Ym1pdENhcmQsXG4gICAgc3VibWl0V2l0aDogb3BGb3JtLmdlbmVyYWxTdWJtaXQsXG4gICAgYXBwbGVQYXk6IHBheW1lbnRSZXF1ZXN0cy5hcHBsZV9wYXksXG4gICAgZ29vZ2xlUGF5OiBwYXltZW50UmVxdWVzdHMuZ29vZ2xlX3BheSxcbiAgICBsb2FkZWQsXG4gICAgLy8gRGlzYWJsZSBkeW5hbWljIHByZXZpZXdzIGZlYXR1cmUgZm9yIG5vd1xuICAgIHByZXZpZXc6IHtcbiAgICAgIGFtb3VudDogbnVsbCxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBlcnJvcjogbnVsbFxuICAgIH0sXG4gICAgc3RyaXBlTGluazogc3RyaXBlTGlua0N0cmwsXG4gICAgYWlyd2FsbGV4XG4gIH07XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7IGNoaWxkcmVuOiBlbGVtZW50c0NvbnRleHRWYWx1ZSA/IC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudHNDb250ZXh0LlByb3ZpZGVyLCB7IHZhbHVlOiBlbGVtZW50c0NvbnRleHRWYWx1ZSwgY2hpbGRyZW46IC8qIEBfX1BVUkVfXyAqLyBqc3goXCJkaXZcIiwgeyBpZDogRk9STV9UQVJHRVQsIGNsYXNzTmFtZTogcHJvcHMuY2xhc3NOYW1lLCBjaGlsZHJlbjogcHJvcHMuY2hpbGRyZW4oY2hpbGRyZW5Qcm9wcykgfSkgfSkgOiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7fSkgfSk7XG59O1xuY29uc3QgZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUgPSAob3BGb3JtKSA9PiB7XG4gIHJldHVybiB7XG4gICAgZm9ybUlkOiBvcEZvcm0uZm9ybUlkLFxuICAgIGZvcm1IZWlnaHQ6IG9wRm9ybS5mb3JtUHJvcGVydGllcy5oZWlnaHQsXG4gICAgcmVmZXJyZXI6IG9wRm9ybS5yZWZlcnJlcixcbiAgICBjaGVja291dFNlY3VyZVRva2VuOiBvcEZvcm0uY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgICByZWdpc3RlcklmcmFtZTogb3BGb3JtLnJlZ2lzdGVySWZyYW1lLFxuICAgIGJhc2VVcmw6IG9wRm9ybS5iYXNlVXJsXG4gIH07XG59O1xuXG5jb25zdCBFbGVtZW50RnJhbWUgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgeyBlbGVtZW50VHlwZSwgc3R5bGVzIH0gPSBwcm9wcztcbiAgY29uc3QgeyBmb3JtSWQsIHJlZmVycmVyLCBmb3JtSGVpZ2h0LCBjaGVja291dFNlY3VyZVRva2VuLCByZWdpc3RlcklmcmFtZSwgYmFzZVVybCB9ID0gdXNlT3BlblBheUVsZW1lbnRzKCk7XG4gIGNvbnN0IHN1YlBhdGggPSBlbGVtZW50VHlwZS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBbaGFzTG9hZGVkLCBzZXRIYXNMb2FkZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBpZnJhbWVSZWYgPSB1c2VSZWYobnVsbCk7XG4gIGNvbnN0IGVsZW1lbnRTdHlsZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghc3R5bGVzKSByZXR1cm4gXCJcIjtcbiAgICByZXR1cm4gY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcoc3R5bGVzKTtcbiAgfSwgW3N0eWxlc10pO1xuICBjb25zdCBmcmFtZVN0eWxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGJvcmRlcjogXCJub25lXCIsXG4gICAgICB3aWR0aDogXCIxMDAlXCIsXG4gICAgICBoZWlnaHQ6IGZvcm1IZWlnaHRcbiAgICB9O1xuICB9LCBbZm9ybUhlaWdodF0pO1xuICBjb25zdCBxdWVyeVN0cmluZyA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIGlmICghY2hlY2tvdXRTZWN1cmVUb2tlbiB8fCAhcmVmZXJyZXIpIHJldHVybiBcIlwiO1xuICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwicmVmZXJlclwiLCByZWZlcnJlcik7XG4gICAgcGFyYW1zLmFwcGVuZChcInN0eWxlc1wiLCBlbGVtZW50U3R5bGUpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJmb3JtSWRcIiwgZm9ybUlkKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgY2hlY2tvdXRTZWN1cmVUb2tlbik7XG4gICAgcmV0dXJuIHBhcmFtcy50b1N0cmluZygpO1xuICB9LCBbZWxlbWVudFN0eWxlLCBmb3JtSWQsIHJlZmVycmVyLCBjaGVja291dFNlY3VyZVRva2VuXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiBzZXRIYXNMb2FkZWQodHJ1ZSksIFtdKTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWlmcmFtZVJlZi5jdXJyZW50IHx8ICFoYXNMb2FkZWQpIHJldHVybjtcbiAgICByZWdpc3RlcklmcmFtZShlbGVtZW50VHlwZSwgaWZyYW1lUmVmLmN1cnJlbnQpO1xuICB9LCBbaGFzTG9hZGVkXSk7XG4gIGlmICghY2hlY2tvdXRTZWN1cmVUb2tlbikge1xuICAgIGNvbnNvbGUuZXJyb3IoXCJbZm9ybV0gQ2Fubm90IHJlbmRlciBwYXJ0aWFsbHkgaW5pdGlhbGl6ZWQgZnJhbWVcIik7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goXCJkaXZcIiwge30pO1xuICB9XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFxuICAgIFwiaWZyYW1lXCIsXG4gICAge1xuICAgICAgaWQ6IGBvanMtJHtzdWJQYXRofS1lbGVtZW50YCxcbiAgICAgIG5hbWU6IGAke3N1YlBhdGh9LWVsZW1lbnRgLFxuICAgICAgY2xhc3NOYW1lOiBcIm9qcy1pZnJhbWVcIixcbiAgICAgIHNyYzogYCR7YmFzZVVybH0vYXBwL3YxLyR7c3ViUGF0aH0tZWxlbWVudC8/JHtxdWVyeVN0cmluZ31gLFxuICAgICAgc3R5bGU6IGZyYW1lU3R5bGUsXG4gICAgICByZWY6IGlmcmFtZVJlZlxuICAgIH1cbiAgKTtcbn07XG5cbmNvbnN0IENhcmRDdmNFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX0NWQyB9KTtcbn07XG5cbmNvbnN0IENhcmRFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEIH0pO1xufTtcblxuY29uc3QgQ2FyZEV4cGlyeUVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkRfRVhQSVJZIH0pO1xufTtcblxuY29uc3QgQ2FyZE51bWJlckVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkRfTlVNQkVSIH0pO1xufTtcblxuZXhwb3J0IHsgQ2FyZEN2Y0VsZW1lbnQsIENhcmRFbGVtZW50LCBDYXJkRXhwaXJ5RWxlbWVudCwgQ2FyZE51bWJlckVsZW1lbnQsIEVsZW1lbnRzRm9ybSwgRmllbGROYW1lLCB1c2VPcGVuUGF5RWxlbWVudHMgfTsiXSwKICAibWFwcGluZ3MiOiAiQUFBQSxTQUFTLGlCQUFBQSxJQUFlLGNBQUFDLElBQVksWUFBQUMsSUFBVSxlQUFBQyxJQUFhLGFBQUFDLElBQVcsVUFBQUMsSUFBUSxXQUFBQyxVQUFlO0FBQzdGLFNBQVMsT0FBQUMsR0FBSyxZQUFBQyxVQUFnQjtBQUM5QixTQUFTLEtBQUtDLFNBQVc7QUFDekIsU0FBUyxNQUFBQyxVQUFVO0FBQ25CLFNBQVMsa0JBQUFDLFVBQXNCO0FBQy9CLE9BQU9DLFFBQVE7QUFFZixNQUFNQyxLQUFrQmIsR0FBYztBQUFBLEVBQ3BDLFFBQVE7QUFBQSxFQUNSLFlBQVk7QUFBQSxFQUNaLFVBQVU7QUFBQSxFQUNWLHFCQUFxQjtBQUFBLEVBQ3JCLGdCQUFnQixNQUFNO0FBQUEs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LENBQUMsRUFBRSxRQUFBeEcsRUFBTyxNQUNYLGdCQUFBbFosRUFBSXdlLElBQWMsRUFBRSxRQUFBdEYsR0FBUSxhQUFhN0IsR0FBZ0IsWUFBWSxDQUFDLEdBR3pGc0ksS0FBb0IsQ0FBQyxFQUFFLFFBQUF6RyxFQUFPLE1BQ1gsZ0JBQUFsWixFQUFJd2UsSUFBYyxFQUFFLFFBQUF0RixHQUFRLGFBQWE3QixHQUFnQixZQUFZLENBQUM7IiwKICAibmFtZXMiOiBbImNyZWF0ZUNvbnRleHQiLCAidXNlQ29udGV4dCIsICJ1c2VTdGF0ZSIsICJ1c2VDYWxsYmFjayIsICJ1c2VFZmZlY3QiLCAidXNlUmVmIiwgInVzZU1lbW8iLCAianN4IiwgIkZyYWdtZW50IiwgInokMSIsICJ2NCIsICJjb25uZWN0VG9DaGlsZCIsICJtZSIsICJFbGVtZW50c0NvbnRleHQiLCAidXNlT3BlblBheUVsZW1lbnRzIiwgImNvbnRleHQiLCAiZHQiLCAienQiLCAiWXQiLCAiS3QiLCAiSHQiLCAiV3QiLCAiRGUiLCAiWnQiLCAiSnQiLCAiZSIsICJCdCIsICJZIiwgIlF0IiwgIm4iLCAiUCIsICJ2IiwgIk8iLCAiZCIsICJwdCIsICJtdCIsICJmdCIsICJ5dCIsICJyZSIsICJYdCIsICJFZSIsICJlciIsICJqIiwgInRyIiwgInJyIiwgIm5yIiwgIm9yIiwgImlyIiwgInNyIiwgImFyIiwgImNyIiwgImxyIiwgInVyIiwgImRyIiwgInByIiwgImxlIiwgIm1yIiwgImZyIiwgInlyIiwgImhyIiwgIl9yIiwgImdyIiwgIndyIiwgInhlIiwgImJyIiwgInZyIiwgIkVyIiwgIk4iLCAiU3IiLCAiQ3IiLCAiaHQiLCAia3IiLCAiUHIiLCAiQXIiLCAiSXIiLCAiT3IiLCAiUnIiLCAiU2UiLCAiWWUiLCAiRHIiLCAiVHIiLCAiTXIiLCAicyIsICJhIiwgIkZyIiwgIkxyIiwgIk5yIiwgImkiLCAiYyIsICJqciIsICJvZSIsICJVciIsICJ4ciIsICIkciIsICJfIiwgIlZyIiwgIl90IiwgImd0IiwgInFyIiwgIkdyIiwgInVlIiwgInpyIiwgIllyIiwgInd0IiwgIktyIiwgIkhyIiwgIldyIiwgIktlIiwgImJ0IiwgIkhlIiwgInZ0IiwgIlpyIiwgIkpyIiwgIkJyIiwgIlFyIiwgIlhyIiwgImVuIiwgInRuIiwgInJuIiwgIkV0IiwgIm5uIiwgIm9uIiwgInNuIiwgImFuIiwgImNuIiwgImxuIiwgInVuIiwgIlN0IiwgIlQiLCAicG4iLCAiZG4iLCAibW4iLCAiVyIsICJDZSIsICJmbiIsICJ5biIsICJIIiwgImhuIiwgIl9uIiwgImtlIiwgImduIiwgIldlIiwgInduIiwgIlBlIiwgIkN0IiwgImJuIiwgInZuIiwgIiRlIiwgInNlIiwgIkFlIiwgIkMiLCAiRGkiLCAiRW4iLCAiVmUiLCAiYWUiLCAiU24iLCAia3QiLCAiUHQiLCAiY2UiLCAiQ24iLCAiWmUiLCAiRSIsICJrbiIsICJQbiIsICJBbiIsICJJbiIsICJ1IiwgImwiLCAicCIsICJmIiwgImciLCAibSIsICJMIiwgIlRuIiwgIk9uIiwgIlJuIiwgIk1uIiwgIkRuIiwgIkZuIiwgIkxuIiwgIkllIiwgIkF0IiwgIk5uIiwgImpuIiwgIlVuIiwgIkl0IiwgInhuIiwgIiRuIiwgIk90IiwgIlZuIiwgInFuIiwgIkduIiwgInFlIiwgInpuIiwgIlluIiwgIktuIiwgIkhuIiwgIlduIiwgImIiLCAiSmUiLCAiQmUiLCAiWm4iLCAidyIsICJ5IiwgIlhuIiwgIlFuIiwgImgiLCAiUiIsICJKbiIsICJCbiIsICJJIiwgImVvIiwgInRvIiwgInJvIiwgIm5vIiwgImlvIiwgIm9vIiwgInNvIiwgIlYiLCAiUWUiLCAiYW8iLCAiY28iLCAibG8iLCAiUnQiLCAidW8iLCAicG8iLCAibW8iLCAiTSIsICJ0ZSIsICJSZSIsICJUdCIsICJNdCIsICJEdCIsICJmbyIsICJ5byIsICJBIiwgIlEiLCAiayIsICJYIiwgInBlIiwgImVlIiwgIiQiLCAiRCIsICJKIiwgIlUiLCAiaG8iLCAiX28iLCAiZ28iLCAid28iLCAiYm8iLCAiaGUiLCAidm8iLCAiRW8iLCAiU28iLCAiQ28iLCAieiIsICJGZSIsICJGdCIsICJrbyIsICJQbyIsICJMZSIsICJOZSIsICJaIiwgIkFvIiwgIkx0IiwgImllIiwgIndlIiwgImJlIiwgIm5lIiwgIklvIiwgIk9vIiwgIlMiLCAiT2UiLCAiVGUiLCAidmUiLCAiZGUiLCAiWGUiLCAiTnQiLCAianQiLCAiVXQiLCAieHQiLCAiJHQiLCAiZXQiLCAiX2UiLCAiR2UiLCAiRG8iLCAiamUiLCAiUm8iLCAiTWUiLCAiVG8iLCAiZmUiLCAiTW8iLCAiemUiLCAiRm8iLCAiTG8iLCAiSyIsICJqbyIsICJ0dCIsICJObyIsICJVbyIsICJ4byIsICIkbyIsICJWbyIsICJxbyIsICJWdCIsICJydCIsICJHbyIsICJ6byIsICJudCIsICJZbyIsICJvdCIsICJLbyIsICJIbyIsICJXbyIsICJabyIsICJKbyIsICJCbyIsICJRbyIsICJYbyIsICJlaSIsICJ0aSIsICJyaSIsICJuaSIsICJvaSIsICJpaSIsICJzaSIsICJhaSIsICJxdCIsICJjaSIsICJsaSIsICJ1aSIsICJkaSIsICJwaSIsICJtaSIsICJmaSIsICJ5aSIsICJoaSIsICJfaSIsICJnaSIsICJnZSIsICJ3aSIsICJiaSIsICJ5ZSIsICJ2aSIsICJFaSIsICJTaSIsICJGIiwgIml0IiwgIngiLCAiciIsICJVZSIsICJDaSIsICJzdCIsICJraSIsICJQaSIsICJBaSIsICJhdCIsICJjdCIsICJxIiwgIkIiLCAiRyIsICJsdCIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxIiwgIlpvZEZpZWxkRXJyb3IiLCAibWFrZUNhbGxiYWNrU2FmZSIsICJjYWxsYmFja05hbWUiLCAiZXJyb3JMb2dnZXIiLCAiYXJncyIsICJlcnJvciIsICJSZXF1aXJlZFN0cmluZyIsICJPcHRpb25hbFN0cmluZyIsICJudWxsT3JVbmRlZk9yJDEiLCAielR5cGUiLCAiRmllbGROYW1lIiwgIkZpZWxkTmFtZTIiLCAiRmllbGROYW1lRW51bSIsICJQcml2YXRlRmllbGROYW1lIiwgIlByaXZhdGVGaWVsZE5hbWUyIiwgIlByaXZhdGVGaWVsZE5hbWVFbnVtIiwgIkFsbEZpZWxkTmFtZXMiLCAiRWxlbWVudFR5cGVFbnVtIiwgIkVsZW1lbnRUeXBlRW51bTIiLCAiQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEiLCAiUGF5bWVudE1ldGhvZE1pbmltYWwiLCAiRXZlbnRUeXBlIiwgIkdlbmVyaWNFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50UGF5bG9hZCIsICJJbnB1dEV2ZW50VHlwZSIsICJJbnB1dEV2ZW50UGF5bG9hZCIsICJFcnJvckV2ZW50VHlwZSIsICJFcnJvckV2ZW50UGF5bG9hZCIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFR5cGUiLCAiVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkIiwgIkxheW91dEV2ZW50UGF5bG9hZCIsICJMb2FkZWRFdmVudFBheWxvYWQiLCAiUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkIiwgIlNldHVwQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIlJlcXVpcmVkRm9ybUZpZWxkcyIsICJQUkZvcm1GaWVsZHMiLCAiU3VibWl0RXZlbnRUeXBlIiwgIlN1Ym1pdEV2ZW50UGF5bG9hZCIsICJUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkIiwgIkV2ZW50UGF5bG9hZCIsICJDaGVja291dFN1Y2Nlc3NSZXNwb25zZSIsICJGaWVsZFZhbGlkYXRpb25FcnJvciIsICJUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlIiwgIkNvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSIsICJjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyIsICJzdHlsZXMiLCAibnVsbE9yVW5kZWZPciIsICJDb3Vwb25NaW5pbWFsIiwgIkxpbmVJdGVtIiwgIkJyYW5kU2V0dGluZ3MiLCAiQnJhbmQiLCAiQ2hlY2tvdXRQYXltZW50TWV0aG9kIiwgIlN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsIiwgIlN1YnNjcmlwdGlvbk1pbmltYWwiLCAiSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsIiwgIkludm9pY2VMaW5lSXRlbU1pbmltYWwiLCAiRGlzY291bnRNaW5pbWFsIiwgIkludm9pY2VNaW5pbWFsIiwgIkNyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCIsICJQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSIsICJfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uIiwgIlBheW1lbnRGb3JtUHJlZmlsbCIsICJDb21wbGV0ZWRGb3JtUHJlZmlsbCIsICJFeHBpcmVkRm9ybVByZWZpbGwiLCAiUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IiLCAiTmV3Q3VzdG9tZXJGaWVsZHMiLCAiUHJpY2VRdHkiLCAiQ2FydEluZm8iLCAiUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YSIsICJmaXhQcm90byIsICJ0YXJnZXQiLCAicHJvdG90eXBlIiwgInNldFByb3RvdHlwZU9mIiwgImZpeFN0YWNrIiwgImNhcHR1cmVTdGFja1RyYWNlIiwgIl9fZXh0ZW5kcyIsICJfZXh0ZW5kU3RhdGljcyIsICJfXyIsICJfc3VwZXIiLCAiQ3VzdG9tRXJyb3IiLCAibWVzc2FnZSIsICJvcHRpb25zIiwgIl9uZXdUYXJnZXQiLCAiX3RoaXMiLCAiY3JlYXRlT2pzRmxvd0xvZ2dlcnMiLCAicHJlZml4IiwgImxvZyIsICJlcnIiLCAiQVdYX0xPQURJTkciLCAiUFJfTE9BRElORyIsICJlcnJfXyIsICJPcHRpb25hbEZuIiwgIlpvZEZvcm1DYWxsYmFja3MiLCAiX0Zvcm1DYWxsYmFja3MiLCAicmF3Q2FsbGJhY2tzIiwgImtleSIsICJyYXdDYWxsYmFjayIsICJzYWZlQ2FsbGJhY2siLCAib2JqIiwgImluc3RhbmNlIiwgIkZvcm1DYWxsYmFja3MiLCAidXNlUmVhY3RpdmVGb3JtQ2FsbGJhY2tzIiwgInByb3BzIiwgIl9hIiwgImZvcm1DYWxsYmFja3MiLCAidXNlUGF5bWVudFJlcXVlc3RzIiwgIm9yaWdpbmFsT25QYXltZW50UmVxdWVzdExvYWQiLCAicGF5bWVudFJlcXVlc3RzIiwgInNldFBheW1lbnRSZXF1ZXN0cyIsICJvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCIsICJwYXltZW50UmVxdWVzdHMyIiwgIkZPUk1fVEFSR0VUIiwgIkVsZW1lbnRzRm9ybSIsICJvcEZvcm0iLCAic2V0T3BGb3JtIiwgImVsZW1lbnRzQ29udGV4dFZhbHVlIiwgInNldEVsZW1lbnRzQ29udGV4dFZhbHVlIiwgImxvYWRlZCIsICJzZXRMb2FkZWQiLCAic3RyaXBlTGlua0N0cmwiLCAic2V0U3RyaXBlTGlua0N0cmwiLCAiYWlyd2FsbGV4IiwgInNldEFpcndhbGxleCIsICJ0b3RhbEFtb3VudEF0b21zIiwgImN1cnJlbmN5IiwgImZvcm0iLCAidmFsdWUiLCAiZ2V0RWxlbWVudHNDb250ZXh0VmFsdWUiLCAicmVzdWx0IiwgInByZXYiLCAiY2hpbGRyZW5Qcm9wcyIsICJFbGVtZW50RnJhbWUiLCAiZWxlbWVudFR5cGUiLCAiZm9ybUlkIiwgInJlZmVycmVyIiwgImZvcm1IZWlnaHQiLCAiY2hlY2tvdXRTZWN1cmVUb2tlbiIsICJyZWdpc3RlcklmcmFtZSIsICJiYXNlVXJsIiwgInN1YlBhdGgiLCAiaGFzTG9hZGVkIiwgInNldEhhc0xvYWRlZCIsICJpZnJhbWVSZWYiLCAiZWxlbWVudFN0eWxlIiwgImZyYW1lU3R5bGUiLCAicXVlcnlTdHJpbmciLCAicGFyYW1zIiwgIkNhcmRDdmNFbGVtZW50IiwgIkNhcmRFbGVtZW50IiwgIkNhcmRFeHBpcnlFbGVtZW50IiwgIkNhcmROdW1iZXJFbGVtZW50Il0KfQo=
4041
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXguanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3gsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QvanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHsgeiBhcyB6JDEgfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCBmZSBmcm9tICdjaGFsayc7XG5cbmNvbnN0IEVsZW1lbnRzQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe1xuICBmb3JtSWQ6IFwiXCIsXG4gIGZvcm1IZWlnaHQ6IFwiXCIsXG4gIHJlZmVycmVyOiB2b2lkIDAsXG4gIGNoZWNrb3V0U2VjdXJlVG9rZW46IHZvaWQgMCxcbiAgcmVnaXN0ZXJJZnJhbWU6ICgpID0+IHtcbiAgfSxcbiAgYmFzZVVybDogXCJcIlxufSk7XG5cbmNvbnN0IHVzZU9wZW5QYXlFbGVtZW50cyA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoRWxlbWVudHNDb250ZXh0KTtcbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXNlT3BlblBheUVsZW1lbnRzIG11c3QgYmUgdXNlZCB3aXRoaW4gYW4gT3BlblBheUVsZW1lbnRzUHJvdmlkZXJcIik7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ7XG59O1xuXG5jb25zdCBkdCA9IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIiwgWXQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pLCBLdCA9IHokMS5hcnJheShZdCksIEh0ID0geiQxLm9iamVjdCh7XG4gIGNvZGU6IHokMS5zdHJpbmcoKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBwYXRoOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSksIFd0ID0geiQxLmFycmF5KEh0KSwgWnQgPSB7XG4gIFwiZmFpbGVkIHRvIGZldGNoXCI6IFwiQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluXCJcbn0sIERlID0gKHQpID0+IHtcbiAgY29uc3QgciA9IHQudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gIHJldHVybiBadFtyXSA/PyB0O1xufSwgSnQgPSAodCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB0eXBlb2YgSlNPTi5wYXJzZSh0KSA9PSBcIm9iamVjdFwiO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gITE7XG4gIH1cbn0sIEJ0ID0gKHQpID0+IHQubGVuZ3RoID09PSAxID8gRGUodFswXS5tc2cpIDogYFBsZWFzZSBmaXggdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4ke3QubWFwKChlKSA9PiBg4oCiICR7RGUoZS5tc2cpfWApLmpvaW4oYFxuYCl9YCwgUXQgPSAodCkgPT4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHt0Lm1hcCgoZSkgPT4gYC0gJHtlLnBhdGguam9pbihcIi9cIil9OiAke2UubWVzc2FnZX1gKS5qb2luKGBcbmApfWAsIFkgPSAodCkgPT4ge1xuICBpZiAodCBpbnN0YW5jZW9mIEVycm9yKVxuICAgIGlmIChKdCh0Lm1lc3NhZ2UpKSB7XG4gICAgICBjb25zdCByID0gSlNPTi5wYXJzZSh0Lm1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIEt0LnNhZmVQYXJzZShyKS5zdWNjZXNzID8gQnQocikgOiBXdC5zYWZlUGFyc2Uocikuc3VjY2VzcyA/IFF0KHIpIDogKGNvbnNvbGUud2FybihgRW5jb3VudGVyZWQgdW5rbm93biBzdHJpbmdpZmllZCBKU09OIG9iamVjdDpcbiR7dC5tZXNzYWdlfWApLCB0Lm1lc3NhZ2UpO1xuICAgIH0gZWxzZVxuICAgICAgcmV0dXJuIERlKHQubWVzc2FnZSk7XG4gIGlmICh0eXBlb2YgdCA9PSBcIm9iamVjdFwiKVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodCk7XG4gICAgfSBjYXRjaCAocikge1xuICAgICAgcmV0dXJuIHIgKyBcIlwiO1xuICAgIH1cbiAgZWxzZVxuICAgIHJldHVybiB0ICsgXCJcIjtcbn0sIFh0ID0gKHQsIHIsIGUpID0+ICguLi5uKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHIoLi4ubik7XG4gIH0gY2F0Y2ggKGkpIHtcbiAgICBlKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHt0fSk6YCwgaSk7XG4gICAgcmV0dXJuO1xuICB9XG59LCBJID0geiQxLnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBcIkNhbm5vdCBiZSBibGFua1wiIH0pLCB2ID0geiQxLnN0cmluZygpLnRyaW0oKS5vcHRpb25hbCgpLCBSID0gKHQpID0+IHokMS5udWxsYWJsZSh0Lm9wdGlvbmFsKCkpO1xudmFyIGQgPSAvKiBAX19QVVJFX18gKi8gKCh0KSA9PiAodC5GSVJTVF9OQU1FID0gXCJmaXJzdE5hbWVcIiwgdC5MQVNUX05BTUUgPSBcImxhc3ROYW1lXCIsIHQuRU1BSUwgPSBcImVtYWlsXCIsIHQuWklQX0NPREUgPSBcInppcENvZGVcIiwgdC5DSVRZID0gXCJjaXR5XCIsIHQuU1RBVEUgPSBcInN0YXRlXCIsIHQuQ09VTlRSWSA9IFwiY291bnRyeVwiLCB0LkFERFJFU1MgPSBcImFkZHJlc3NcIiwgdC5QSE9ORSA9IFwicGhvbmVcIiwgdC5QUk9NT1RJT05fQ09ERSA9IFwicHJvbW90aW9uQ29kZVwiLCB0KSkoZCB8fCB7fSk7XG5jb25zdCBwdCA9IHokMS5uYXRpdmVFbnVtKGQpO1xudmFyIGZ0ID0gLyogQF9fUFVSRV9fICovICgodCkgPT4gKHQuQ0FSRF9OVU1CRVIgPSBcImNhcmROdW1iZXJcIiwgdC5DQVJEX0VYUElSWSA9IFwiY2FyZEV4cGlyeVwiLCB0LkNBUkRfQ1ZDID0gXCJjYXJkQ3ZjXCIsIHQpKShmdCB8fCB7fSk7XG5jb25zdCBtdCA9IHokMS5uYXRpdmVFbnVtKGZ0KSwgeXQgPSB6JDEudW5pb24oW3B0LCBtdF0pO1xudmFyIHJlID0gLyogQF9fUFVSRV9fICovICgodCkgPT4gKHQuQ0FSRCA9IFwiY2FyZFwiLCB0LkNBUkRfTlVNQkVSID0gXCJjYXJkLW51bWJlclwiLCB0LkNBUkRfRVhQSVJZID0gXCJjYXJkLWV4cGlyeVwiLCB0LkNBUkRfQ1ZDID0gXCJjYXJkLWN2Y1wiLCB0KSkocmUgfHwge30pO1xuY29uc3QgZXIgPSB6JDEubmF0aXZlRW51bShyZSksIEVlID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBSKHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBSKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIHRyID0geiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGNhcmROdW1iZXI6IHYsXG4gIGV4cGlyeTogdixcbiAgY3ZjOiB2XG59KTtcbnokMS5vYmplY3Qoe1xuICBiYWNrZ3JvdW5kQ29sb3I6IHYsXG4gIGNvbG9yOiB2LFxuICBmb250RmFtaWx5OiB2LFxuICBmb250U2l6ZTogdixcbiAgZm9udFdlaWdodDogdixcbiAgbWFyZ2luOiB2LFxuICBwYWRkaW5nOiB2LFxuICBsZXR0ZXJTcGFjaW5nOiB2LFxuICBsaW5lSGVpZ2h0OiB2LFxuICBoaWRlSWNvbjogdlxufSk7XG5jb25zdCBqID0geiQxLmVudW0oW1xuICAvLyBFbGVtZW50IC0+IEZvcm1cbiAgXCJMQVlPVVRcIixcbiAgXCJMT0FERURcIixcbiAgXCJCTFVSXCIsXG4gIFwiRk9DVVNcIixcbiAgXCJDSEFOR0VcIixcbiAgXCJUT0tFTklaRV9TVEFSVEVEXCIsXG4gIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiLFxuICBcIlBBWU1FTlRfRkxPV19TVEFSVEVEXCIsXG4gIFwiVE9LRU5JWkVfU1VDQ0VTU1wiLFxuICBcIkNIRUNLT1VUX1NVQ0NFU1NcIixcbiAgXCJMT0FEX0VSUk9SXCIsXG4gIFwiVkFMSURBVElPTl9FUlJPUlwiLFxuICBcIlRPS0VOSVpFX0VSUk9SXCIsXG4gIFwiQ0hFQ0tPVVRfRVJST1JcIixcbiAgXCJTRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTXCIsXG4gIC8vIEZvcm0gLT4gRWxlbWVudFxuICBcIlRPS0VOSVpFXCIsXG4gIFwiQ0hFQ0tPVVRcIixcbiAgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIlxuXSksIHJyID0gai5leHRyYWN0KFtcIlRPS0VOSVpFX1NUQVJURURcIiwgXCJDSEVDS09VVF9TVEFSVEVEXCJdKSwgbnIgPSB6JDEub2JqZWN0KHsgdHlwZTogcnIgfSksIG9yID0gai5leHRyYWN0KFtcIkJMVVJcIiwgXCJGT0NVU1wiLCBcIkNIQU5HRVwiXSksIGlyID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IG9yLFxuICBlbGVtZW50VHlwZTogbXQsXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSksIHNyID0gai5leHRyYWN0KFtcIkxPQURfRVJST1JcIiwgXCJUT0tFTklaRV9FUlJPUlwiLCBcIkNIRUNLT1VUX0VSUk9SXCJdKSwgYXIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogc3IsXG4gIG1lc3NhZ2U6IEksXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pLCBjciA9IGouZXh0cmFjdChbXCJWQUxJREFUSU9OX0VSUk9SXCJdKSwgbHIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogY3IsXG4gIGVsZW1lbnRUeXBlOiB5dCxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSksIHVyID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKGouZW51bS5MQVlPVVQpLFxuICBoZWlnaHQ6IElcbn0pLCBkciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChqLmVudW0uTE9BREVEKSxcbiAgc2Vzc2lvbklkOiBJLFxuICB0b3RhbEFtb3VudEF0b21zOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiB2LFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiB6JDEuYXJyYXkoRWUpXG59KSwgcHIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoai5lbnVtLlBBWU1FTlRfRkxPV19TVEFSVEVEKSxcbiAgbmV4dEFjdGlvbk1ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogeiQxLmFueSgpLm9wdGlvbmFsKCksXG4gIHN0YXJ0UEZNZXRhZGF0YTogeiQxLm9wdGlvbmFsKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIGZyID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKGouZW51bS5TRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTKSxcbiAgcGF5bWVudE1ldGhvZElkOiB6JDEuc3RyaW5nKClcbn0pLCBsZSA9IHokMS5vYmplY3Qoe1xuICBmaXJzdE5hbWU6IEksXG4gIGxhc3ROYW1lOiBJLFxuICBlbWFpbDogSSxcbiAgemlwQ29kZTogSSxcbiAgY291bnRyeTogSSxcbiAgcHJvbW90aW9uQ29kZTogdlxufSksIG1yID0geiQxLm9iamVjdCh7XG4gIGZpcnN0TmFtZTogdixcbiAgbGFzdE5hbWU6IHYsXG4gIGVtYWlsOiBJLFxuICB6aXBDb2RlOiBJLFxuICBjb3VudHJ5OiBJLFxuICBwcm9tb3Rpb25Db2RlOiB2LFxuICBhZGRyZXNzOiB2LFxuICBjaXR5OiB2LFxuICBzdGF0ZTogdlxufSksIHlyID0gai5leHRyYWN0KFtcIlRPS0VOSVpFXCIsIFwiQ0hFQ0tPVVRcIiwgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIl0pLCBociA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB5cixcbiAgc2Vzc2lvbklkOiBJLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IEVlLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdDQ1BNSWQ6IHZcbn0pLmV4dGVuZChsZS5zaGFwZSksIF9yID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKGouZW51bS5UT0tFTklaRV9TVUNDRVNTKSxcbiAgaXNSZWFkeUZvckNoZWNrb3V0OiB6JDEuYm9vbGVhbigpXG59KSwgZ3IgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoai5lbnVtLkNIRUNLT1VUX1NVQ0NFU1MpLFxuICBpbnZvaWNlVXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbklkczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVySWQ6IHokMS5zdHJpbmcoKVxufSksIHdyID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICBucixcbiAgaXIsXG4gIGFyLFxuICBscixcbiAgdXIsXG4gIGRyLFxuICBocixcbiAgX3IsXG4gIGdyLFxuICBwcixcbiAgZnJcbl0pLCBiciA9IHokMS5vYmplY3Qoe1xuICBwYXlsb2FkOiB3cixcbiAgbm9uY2U6IEksXG4gIGZvcm1JZDogSSxcbiAgZWxlbWVudElkOiBJXG59KTtcbnokMS5vYmplY3Qoe1xuICBhbW91bnRBdG9tOiB6JDEubnVtYmVyKCksXG4gIC8qKlxuICAgKiBUaGUgdGhyZWUtbGV0dGVyIElTTyA0MjE3IGN1cnJlbmN5IGNvZGUgZm9yIHRoZSBwYXltZW50LlxuICAgKi9cbiAgY3VycmVuY3k6IElcbn0pO1xueiQxLmVudW0oW1wiYXBwbGVfcGF5XCIsIFwiZ29vZ2xlX3BheVwiXSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBSKHokMS5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBSKHokMS5zdHJpbmcoKSksXG4gIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IFIoeiQxLnN0cmluZygpKSxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBSKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCB4ZSA9IHokMS5vYmplY3Qoe1xuICBpbnZvaWNlX3VybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25faWRzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJfaWQ6IHokMS5zdHJpbmcoKVxufSksIHZyID0geiQxLm9iamVjdCh7XG4gIGVsZW1lbnRUeXBlOiB6JDEuc3RyaW5nKCksXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBFciA9IHokMS5vYmplY3Qoe1xuICBzdWNjZXNzOiB6JDEubGl0ZXJhbCghMSksXG4gIGVycm9yX3R5cGU6IHokMS5saXRlcmFsKFwidmFsaWRhdGlvbl9lcnJvclwiKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkodnIpXG59KSwgU3IgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwic3VjY2Vzc1wiLCBbXG4gIHokMS5vYmplY3QoeyBzdWNjZXNzOiB6JDEubGl0ZXJhbCghMCkgfSksXG4gIEVyXG5dKTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBFZSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogbGUsXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IFIoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogRWUsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IGxlLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKVxufSk7XG52YXIgTiA9IC8qIEBfX1BVUkVfXyAqLyAoKHQpID0+ICh0LlNVQ0NFU1MgPSBcInN1Y2Nlc3NcIiwgdC5GQUlMVVJFID0gXCJmYWlsdXJlXCIsIHQuQ0FOQ0VMTEVEID0gXCJjYW5jZWxsZWRcIiwgdCkpKE4gfHwge30pO1xuY29uc3QgQ3IgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXG4gICAgXCJzdWNjZXNzXCIsXG4gICAgXCJmYWlsdXJlXCIsXG4gICAgXCJjYW5jZWxsZWRcIlxuICAgIC8qIENBTkNFTExFRCAqL1xuICBdKSxcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG5jb25zdCBrciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogeiQxLnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogeiQxLnN0cmluZygpLFxuICBjb25zZW50X2lkOiB6JDEuc3RyaW5nKCksXG4gIHRoZWlyX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSksIGh0ID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiBSKHokMS5zdHJpbmcoKSksXG4gIGluaXRpYWxfaW50ZW50X2lkOiBSKHokMS5zdHJpbmcoKSksXG4gIGNvbnNlbnRfaWQ6IFIoeiQxLnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IFIoeiQxLnN0cmluZygpKSxcbiAgcGF5bWVudF9zZXNzaW9uOiBSKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIFByID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInByZXNlbnRcIiwgW1xuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwoITApLCBocmVmOiB6JDEuc3RyaW5nKCkgfSksXG4gIHokMS5vYmplY3QoeyBwcmVzZW50OiB6JDEubGl0ZXJhbCghMSkgfSlcbl0pLCBBciA9IHokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZHM6IHokMS5hcnJheSh0ciksXG4gIHBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlOiBSKHhlKSxcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiBSKHokMS5hcnJheShodCkpXG59KSwgSXIgPSAodCkgPT4ge1xuICBjb25zdCByID0ge307XG4gIHJldHVybiBPYmplY3QuZW50cmllcyh0KS5mb3JFYWNoKChbZSwgbl0pID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgaSA9IHB0LnBhcnNlKGUpO1xuICAgICAgQXJyYXkuaXNBcnJheShuKSA/IHJbaV0gPSBuIDogQXJyYXkuaXNBcnJheShuLl9lcnJvcnMpICYmIChyW2ldID0gbi5fZXJyb3JzKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0pLCByO1xufSwgT3IgPSB6JDEub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BtX2lkOiB6JDEuc3RyaW5nKClcbn0pLCBSciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbn0pLCBUciA9IHtcbiAgdXNkOiBcInVzZFwiLFxuICBicmw6IFwiYnJsXCJcbn0sIFNlID0gYXN5bmMgKHQpID0+IHtcbiAgZm9yIChsZXQgZSA9IDA7IGUgPCAxMDsgZSsrKVxuICAgIFllKCkgfHwgYXdhaXQgX3QoNTAwKTtcbiAgaWYgKCFZZSgpKVxuICAgIHRocm93IGNvbnNvbGUubG9nKFwiU3RyaXBlIEpTIG5vdCBmb3VuZC5cIiksIG5ldyBFcnJvcihcIlN0cmlwZSBKUyBub3QgZm91bmQuXCIpO1xuICByZXR1cm4gbmV3IFN0cmlwZSh0KTtcbn0sIE1yID0gYXN5bmMgKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IGF3YWl0IFNlKHQpO1xuICByZXR1cm4ge1xuICAgIGVsZW1lbnRzOiBlLmVsZW1lbnRzKHIpLFxuICAgIHN0cmlwZTogZVxuICB9O1xufSwgRHIgPSBhc3luYyAodCwgciwgZSwgbiwgaSkgPT4ge1xuICBjb25zdCBzID0gYXdhaXQgU2UodCksIGEgPSBUcltlLnRvTG93ZXJDYXNlKCkudHJpbSgpXTtcbiAgcmV0dXJuIHMucGF5bWVudFJlcXVlc3Qoe1xuICAgIC8vIFRPRE86IHJlcGxhY2UgdGhpcyB3aXRoIHN0cmlwZSBhY2NvdW50IGNvdW50cnkgYXMgc29vbiBhcyB3ZSBzdXBwb3J0IGl0XG4gICAgY291bnRyeTogXCJVU1wiLFxuICAgIGN1cnJlbmN5OiBhLFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogXCJUb3RhbFwiLFxuICAgICAgYW1vdW50OiByLFxuICAgICAgcGVuZGluZzogblxuICAgIH0sXG4gICAgLy8gcmVxdWVzdFNoaXBwaW5nOiB0cnVlLFxuICAgIHJlcXVlc3RQYXllck5hbWU6ICEwLFxuICAgIHJlcXVlc3RQYXllckVtYWlsOiAhMCxcbiAgICBkaXNhYmxlV2FsbGV0czogW11cbiAgfSk7XG59LCBfdCA9ICh0KSA9PiBuZXcgUHJvbWlzZSgocikgPT4ge1xuICBzZXRUaW1lb3V0KHIsIHQpO1xufSksIFllID0gKCkgPT4gXCJTdHJpcGVcIiBpbiB3aW5kb3csIEZyID0gYXN5bmMgKHQpID0+IG5ldyBQcm9taXNlKChyLCBlKSA9PiB7XG4gIHRyeSB7XG4gICAgdC5vbihcInBheW1lbnRtZXRob2RcIiwgYXN5bmMgKG4pID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKFwicGF5bWVudG1ldGhvZCBFVlQ6OiBcIiwgbiksIHIobik7XG4gICAgfSksIHQub24oXCJ0b2tlblwiLCBhc3luYyAobikgPT4ge1xuICAgICAgY29uc29sZS5sb2coXCJ0b2tlbiBFVlQ6OiBcIiwgbik7XG4gICAgfSksIHQub24oXCJjYW5jZWxcIiwgKCkgPT4ge1xuICAgICAgZShuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlcIikpO1xuICAgIH0pO1xuICB9IGNhdGNoIChuKSB7XG4gICAgZShuKTtcbiAgfVxufSksIExyID0gYXN5bmMgKHQsIHIpID0+IHtcbiAgaWYgKCF0LnN0cmlwZV9wayB8fCAhdC5jbGllbnRfc2VjcmV0KVxuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBuZXh0IGFjdGlvbiBtZXRhZGF0YSBmb3JtYXQ6ICR7SlNPTi5zdHJpbmdpZnkodCl9YCk7XG4gIGNvbnN0IG4gPSBhd2FpdCAoYXdhaXQgU2UodC5zdHJpcGVfcGspKS5jb25maXJtQ2FyZFNldHVwKHQuY2xpZW50X3NlY3JldCwge1xuICAgIHBheW1lbnRfbWV0aG9kOiByLnBheW1lbnRNZXRob2QuaWRcbiAgfSk7XG4gIGlmIChuLmVycm9yKVxuICAgIHRocm93IHIuY29tcGxldGUoXCJmYWlsXCIpLCBuZXcgRXJyb3IoYFBheW1lbnQgZmFpbGVkOiAke24uZXJyb3IubWVzc2FnZSA/PyBcInVua25vd25cIn1gKTtcbiAgcmV0dXJuIHIuY29tcGxldGUoXCJzdWNjZXNzXCIpLCBuO1xufSwgTnIgPSBhc3luYyAodCkgPT4ge1xuICB2YXIgaSwgcywgYSwgYztcbiAgY29uc3QgZSA9IGF3YWl0IChhd2FpdCBTZSh0LnN0cmlwZV9waykpLmNvbmZpcm1DYXJkU2V0dXAodC5jbGllbnRfc2VjcmV0LCB7XG4gICAgcGF5bWVudF9tZXRob2Q6IHQuc3RyaXBlX3BtX2lkXG4gIH0pLCBuID0gKGkgPSBlLnNldHVwSW50ZW50KSA9PSBudWxsID8gdm9pZCAwIDogaS5zdGF0dXM7XG4gIGlmIChuID09PSBcInN1Y2NlZWRlZFwiKVxuICAgIGNvbnNvbGUubG9nKFwiWzNEU10gQ09ORklSTUlORyBQTTpcIiwgdC5zdHJpcGVfcG1faWQpLCBjb25zb2xlLmxvZyhcIlszRFNdIFNldHVwIGludGVudCBjcmVhdGVkOlwiLCBlLnNldHVwSW50ZW50KTtcbiAgZWxzZSB0aHJvdyBuID09PSBcImNhbmNlbGVkXCIgPyBuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlcIikgOiBuZXcgRXJyb3IoXG4gICAgYCR7KChzID0gZS5lcnJvcikgPT0gbnVsbCA/IHZvaWQgMCA6IHMubWVzc2FnZSkgPz8gKChjID0gKGEgPSBlLnNldHVwSW50ZW50KSA9PSBudWxsID8gdm9pZCAwIDogYS5sYXN0X3NldHVwX2Vycm9yKSA9PSBudWxsID8gdm9pZCAwIDogYy5tZXNzYWdlKSA/PyBcIlBheW1lbnQgZmFpbGVkLCBwbGVhc2UgY2xpY2sgc3VibWl0IGFnYWluIHRvIHBheS5cIn1gXG4gICk7XG59LCBqciA9ICh0KSA9PiBKU09OLnN0cmluZ2lmeSh0KSwgb2UgPSAodCwgcikgPT4gQXJyYXkuZnJvbSh0LnF1ZXJ5U2VsZWN0b3JBbGwoXCJbZGF0YS1vcGlkXVwiKSA/PyBbXSkucmVkdWNlKChpLCBzKSA9PiB7XG4gIGNvbnN0IGEgPSBzLmdldEF0dHJpYnV0ZShcImRhdGEtb3BpZFwiKTtcbiAgcmV0dXJuIGEgPyB7IC4uLmksIFthXTogcy52YWx1ZSB9IDogaTtcbn0sIHt9KSwgVXIgPSAodCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBici5wYXJzZSh0KTtcbiAgfSBjYXRjaCAocikge1xuICAgIHRocm93IGNvbnNvbGUuZXJyb3IoXCJFcnJvciBwYXJzaW5nIGV2ZW50IHBheWxvYWQ6XCIsIHQsIHIpLCByO1xuICB9XG59LCB4ciA9IGFzeW5jICh0KSA9PiB7XG4gIGlmICh0eXBlb2YgdCAhPSBcIm9iamVjdFwiIHx8ICF0KSByZXR1cm4gITE7XG4gIHRyeSB7XG4gICAgY29uc3QgciA9IHsgdHlwZTogXCJwaW5nXCIgfSwgZSA9IGF3YWl0IHQuc2VuZChyKTtcbiAgICBpZiAoZSAhPT0gITApXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkICd0cnVlJyBhZnRlciBwaW5nLCBnb3QgJHtKU09OLnN0cmluZ2lmeShlKX1gKTtcbiAgICByZXR1cm4gITA7XG4gIH0gY2F0Y2ggKHIpIHtcbiAgICByZXR1cm4gY29uc29sZS5lcnJvcihcIkludmFsaWQgQ0RFIGNvbm5lY3Rpb24gY2hlY2s6XCIsIHIpLCAhMTtcbiAgfVxufSwgJHIgPSAodCwgcikgPT4gISF0ICYmIHIsIF8gPSAodCkgPT4geiQxLm51bGxhYmxlKHQub3B0aW9uYWwoKSk7XG56JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IFwiQ2Fubm90IGJlIGJsYW5rXCIgfSk7XG5jb25zdCBWciA9IHokMS5vYmplY3Qoe1xuICBjZGVfcmVzcG9uc2VfdHlwZTogeiQxLmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbnokMS5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG5jb25zdCBndCA9IHokMS5vYmplY3Qoe1xuICBuYW1lOiB6JDEuc3RyaW5nKCksXG4gIGFtb3VudF9hdG9tX29mZjogXyh6JDEubnVtYmVyKCkpLFxuICBwZXJjZW50X29mZjogXyh6JDEubnVtYmVyKCkpLFxuICBjdXJyZW5jeTogXyh6JDEuc3RyaW5nKCkpLFxuICBkdXJhdGlvbjogeiQxLnN0cmluZygpLFxuICBkdXJhdGlvbl9pbl9tb250aHM6IF8oeiQxLm51bWJlcigpKVxufSksIHd0ID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiBfKHokMS5zdHJpbmcoKSksXG4gIHByaWNlX2lkOiB6JDEuc3RyaW5nKCksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IF8oeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogXyh6JDEubnVtYmVyKCkuaW50KCkpLFxuICBxdWFudGl0eTogeiQxLm51bWJlcigpLmludCgpXG59KSwgcXIgPSB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSwgR3IgPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBzZXR0aW5nczogXyhxcilcbn0pLCB1ZSA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogXyh6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogXyh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCB6ciA9IHokMS5vYmplY3Qoe1xuICBxdWFudGl0eTogeiQxLm51bWJlcigpXG59KSwgWXIgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IF8oeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogXyh6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBfKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogeiQxLmFycmF5KHpyKSxcbiAgdHJpYWxfc3RhcnQ6IF8oeiQxLnN0cmluZygpKSxcbiAgdHJpYWxfZW5kOiBfKHokMS5zdHJpbmcoKSlcbn0pLCBidCA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpXG59KSwgS3IgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgYW1vdW50X2F0b21fY29uc2lkZXJpbmdfZGlzY291bnRfYXBwbGllZDogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShidCksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6JDEuc3RyaW5nKClcbn0pLCBIciA9IHokMS5vYmplY3Qoe1xuICBjb3Vwb246IGd0XG59KSwgV3IgPSB6JDEub2JqZWN0KHtcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRzOiB6JDEuYXJyYXkoSHIpLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IF8oeiQxLnN0cmluZygpKSxcbiAgbGluZXM6IHokMS5hcnJheShLciksXG4gIHJlbWFpbmluZ19hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0YXhfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkoYnQpXG59KSwgS2UgPSB6JDEub2JqZWN0KHtcbiAgY3JlYXRlZDogeiQxLmFycmF5KFlyKSxcbiAgaW52b2ljZXM6IHokMS5hcnJheShXcilcbn0pLCB2dCA9IHokMS5vYmplY3Qoe1xuICBwcmV2aWV3OiBLZSxcbiAgcHJldmlld19wb3N0X3RyaWFsOiBfKEtlKSxcbiAgY291cG9uczogeiQxLmFycmF5KGd0KVxufSksIEhlID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJvcGVuXCIpLFxuICB0b2tlbjogeiQxLnN0cmluZygpLFxuICBlbWFpbDogXyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkod3QpLFxuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBicmFuZDogR3IsXG4gIHN1YnNfcHJldmlldzogXyh2dCksXG4gIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICBtZXRob2RzX2F2YWlsYWJsZTogeiQxLmFycmF5KHVlKVxufSksIEV0ID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcIm1vZGVcIiwgW1xuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEubGl0ZXJhbChcInNldHVwXCIpLFxuICAgIGN1cnJlbmN5OiB6JDEubnVsbGFibGUoeiQxLnVuZGVmaW5lZCgpKVxuICB9KS5leHRlbmQoSGUuc2hhcGUpLFxuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEuZW51bShbXCJwYXltZW50XCIsIFwic3Vic2NyaXB0aW9uXCJdKSxcbiAgICBjdXJyZW5jeTogeiQxLnN0cmluZygpXG4gIH0pLmV4dGVuZChIZS5zaGFwZSlcbl0pLCBaciA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiY29tcGxldGVcIilcbn0pLCBKciA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiZXhwaXJlZFwiKVxufSk7XG56JDEudW5pb24oW0V0LCBaciwgSnJdKTtcbnokMS5vYmplY3Qoe1xuICBsb2dvOiB6JDEuc3RyaW5nKCksXG4gIGljb246IHokMS5zdHJpbmcoKSxcbiAgcHJpbWFyeV9jb2xvcjogeiQxLnN0cmluZygpLFxuICBzZWNvbmRhcnlfY29sb3I6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHBtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwYXltZW50X2lucHV0OiB6JDEuYW55KCksXG4gIC8vIFNob3VsZCBmb2xsb3cgQW55UGF5bWVudElucHV0IGZyb20gQ0RFXG4gIGN1c3RvbWVyX2ZpcnN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9sYXN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl96aXBfY29kZTogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl9jb3VudHJ5OiB6JDEuc3RyaW5nKCksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheSh3dCksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGNhbmNlbF9hdF9lbmQ6IHokMS5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB1ZSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHVzZV9jb25maXJtZWRfcG1faWQ6IF8oeiQxLnN0cmluZygpKVxufSk7XG5jb25zdCBCciA9IHokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZF9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICByZXR1cm5fdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgUXIgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLmFycmF5KFFyKTtcbmNvbnN0IFhyID0geiQxLm9iamVjdCh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KSwgZW4gPSB6JDEub2JqZWN0KHtcbiAgcHJpY2VfaWQ6IHokMS5zdHJpbmcoKSxcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKS5pbnQoKVxufSksIHRuID0geiQxLm9iamVjdCh7XG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShlbiksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KClcbn0pLCBybiA9IHokMS5vYmplY3Qoe1xuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IF8oeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X3Byb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB1ZSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aGVpcl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHVzZV9wYXlfZmlyc3RfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IHRuLm9wdGlvbmFsKClcbn0pLmV4dGVuZChYci5zaGFwZSkuZXh0ZW5kKHJuLnNoYXBlKTtcbmNvbnN0IFN0ID0geiQxLm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeiQxLmFycmF5KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogXyh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBmaWVsZHM6IG1yLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IHVlXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IGxlLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogdWUsXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKVxuICAvLyBUaGlzIGlzIG9wdGlvbmFsIGluIENERSwgYnV0IG5vdCBpbiBPSlMgbW92aW5nIGZvcndhcmRcbn0pO1xuY29uc3Qgbm4gPSB6JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBjY19wbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5yZWNvcmQoeiQxLmFueSgpKTtcbnokMS5vYmplY3Qoe1xuICBmaXJzdF9uYW1lOiBfKHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogXyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lMTogXyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lMjogXyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lMzogXyh6JDEuc3RyaW5nKCkpLFxuICBjaXR5OiBfKHokMS5zdHJpbmcoKSksXG4gIHN0YXRlOiBfKHokMS5zdHJpbmcoKSksXG4gIGNvdW50cnk6IF8oeiQxLnN0cmluZygpKSxcbiAgemlwX2NvZGU6IF8oeiQxLnN0cmluZygpKSxcbiAgZW1haWw6IF8oeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogXyh6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IF8oeiQxLnN0cmluZygpKSxcbiAgdXBkYXRlX3Byb2Nlc3Nvcl9jdXN0b21lcjogXyh6JDEuYm9vbGVhbigpKVxufSk7XG5jb25zdCBvbiA9IHokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICBlbWFpbDogXyh6JDEuc3RyaW5nKCkpLFxuICBmaXJzdF9uYW1lOiBfKHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogXyh6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IF8oeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogXyh6JDEuc3RyaW5nKCkpLFxuICBhZGRyZXNzOiBfKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIHNuID0gKHQpID0+IHQucmVkdWNlKChyLCBlKSA9PiByICsgZSwgMCk7XG5mdW5jdGlvbiBhbih0LCByKSB7XG4gIHZhciBlID0gT2JqZWN0LnNldFByb3RvdHlwZU9mO1xuICBlID8gZSh0LCByKSA6IHQuX19wcm90b19fID0gcjtcbn1cbmZ1bmN0aW9uIGNuKHQsIHIpIHtcbiAgciA9PT0gdm9pZCAwICYmIChyID0gdC5jb25zdHJ1Y3Rvcik7XG4gIHZhciBlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIGUgJiYgZSh0LCByKTtcbn1cbnZhciBsbiA9IC8qIEBfX1BVUkVfXyAqLyBmdW5jdGlvbigpIHtcbiAgdmFyIHQgPSBmdW5jdGlvbihlLCBuKSB7XG4gICAgcmV0dXJuIHQgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbihpLCBzKSB7XG4gICAgICBpLl9fcHJvdG9fXyA9IHM7XG4gICAgfSB8fCBmdW5jdGlvbihpLCBzKSB7XG4gICAgICBmb3IgKHZhciBhIGluIHMpXG4gICAgICAgIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBhKSAmJiAoaVthXSA9IHNbYV0pO1xuICAgIH0sIHQoZSwgbik7XG4gIH07XG4gIHJldHVybiBmdW5jdGlvbihyLCBlKSB7XG4gICAgaWYgKHR5cGVvZiBlICE9IFwiZnVuY3Rpb25cIiAmJiBlICE9PSBudWxsKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhlKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gICAgdChyLCBlKTtcbiAgICBmdW5jdGlvbiBuKCkge1xuICAgICAgdGhpcy5jb25zdHJ1Y3RvciA9IHI7XG4gICAgfVxuICAgIHIucHJvdG90eXBlID0gZSA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoZSkgOiAobi5wcm90b3R5cGUgPSBlLnByb3RvdHlwZSwgbmV3IG4oKSk7XG4gIH07XG59KCksIHVuID0gZnVuY3Rpb24odCkge1xuICBsbihyLCB0KTtcbiAgZnVuY3Rpb24gcihlLCBuKSB7XG4gICAgdmFyIGkgPSB0aGlzLmNvbnN0cnVjdG9yLCBzID0gdC5jYWxsKHRoaXMsIGUsIG4pIHx8IHRoaXM7XG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShzLCBcIm5hbWVcIiwge1xuICAgICAgdmFsdWU6IGkubmFtZSxcbiAgICAgIGVudW1lcmFibGU6ICExLFxuICAgICAgY29uZmlndXJhYmxlOiAhMFxuICAgIH0pLCBhbihzLCBpLnByb3RvdHlwZSksIGNuKHMpLCBzO1xuICB9XG4gIHJldHVybiByO1xufShFcnJvcik7XG5jbGFzcyBDdCBleHRlbmRzIHVuIHtcbiAgY29uc3RydWN0b3Iocikge1xuICAgIGNvbnN0IGUgPSBgJHtyLm1lc3NhZ2V9YDtcbiAgICBzdXBlcihlKSwgdGhpcy5yZXNwb25zZSA9IHI7XG4gIH1cbiAgZ2V0IG9yaWdpbmFsRXJyb3JNZXNzYWdlKCkge1xuICAgIHJldHVybiB0aGlzLnJlc3BvbnNlLm1lc3NhZ2U7XG4gIH1cbn1cbmNvbnN0IFQgPSBhc3luYyAodCwgciwgZSkgPT4ge1xuICBjb25zdCBuID0gYXdhaXQgdC5zZW5kKHIpO1xuICBpZiAocG4obikpXG4gICAgdGhyb3cgbmV3IEN0KG4pO1xuICBpZiAoIWRuKG4sIGUpKSB7XG4gICAgY29uc3QgaSA9IGUuc2FmZVBhcnNlKG4pO1xuICAgIHRocm93IGkuc3VjY2VzcyA/IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGVcIikgOiAoY29uc29sZS5lcnJvcihcIk9KUyBxdWVyeUFwaSBnb3QgYSBzY2hlbWEgZXJyb3IuIEV4cGVjdGVkIHNjaGVtYTpcIiwgZSwgXCJBY3R1YWw6XCIsIG4pLCBpLmVycm9yKTtcbiAgfVxuICByZXR1cm4gbjtcbn0sIGRuID0gKHQsIHIpID0+IHIuc2FmZVBhcnNlKHQpLnN1Y2Nlc3MsIHBuID0gKHQpID0+IFZyLnNhZmVQYXJzZSh0KS5zdWNjZXNzLCBmbiA9IGFzeW5jICh0LCByKSA9PiBhd2FpdCBUKHQsIHsgdHlwZTogXCJnZXRfY2hlY2tvdXRfcHJldmlld1wiLCBwYXlsb2FkOiByIH0sIHZ0KSwgVyA9IGFzeW5jICh0KSA9PiBhd2FpdCBUKHQsIHsgdHlwZTogXCJnZXRfcHJlZmlsbFwiLCBwYXlsb2FkOiB7fSB9LCBFdCksIENlID0gYXN5bmMgKHQsIHIpID0+IGF3YWl0IFQodCwgeyB0eXBlOiBcInYyX3N0YXJ0X3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiByIH0sIFN0KSwgbW4gPSBhc3luYyAodCwgcikgPT4gYXdhaXQgVCh0LCB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9jY1wiLCBwYXlsb2FkOiByIH0sIG5uKSwgeW4gPSBhc3luYyAodCwgcikgPT4gYXdhaXQgVCh0LCB7IHR5cGU6IFwic3RhcnRfcGF5bWVudF9mbG93X2Zvcl9wclwiLCBwYXlsb2FkOiByIH0sIFN0KSwgSCA9IGFzeW5jICh0LCByKSA9PiBhd2FpdCBUKHQsIHsgdHlwZTogXCJjb25maXJtX3BheW1lbnRfZmxvd1wiLCBwYXlsb2FkOiByIH0sIEFyKSwgaG4gPSBhc3luYyAodCwgcikgPT4gYXdhaXQgVChcbiAgdCxcbiAgeyB0eXBlOiBcImNoZWNrX2lmX3BvcHVwX3dpbmRvd192ZXJpZmllZFwiLCBwYXlsb2FkOiByIH0sXG4gIFByXG4pLCBfbiA9IGFzeW5jICh0LCByLCBlKSA9PiB7XG4gIGNvbnN0IG4gPSBhd2FpdCBmbih0LCB7XG4gICAgc2VjdXJlX3Rva2VuOiByLFxuICAgIHByb21vdGlvbl9jb2RlOiBlXG4gIH0pLCBpID0gbmV3IFNldChuLnByZXZpZXcuaW52b2ljZXMubWFwKChjKSA9PiBjLmN1cnJlbmN5KSk7XG4gIGlmIChpLnNpemUgIT09IDEpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBleGFjdGx5IG9uZSBjdXJyZW5jeSwgZ290ICR7aS5zaXplfWApO1xuICBjb25zdCBzID0gaS52YWx1ZXMoKS5uZXh0KCkudmFsdWUgPz8gXCJ1c2RcIiwgYSA9IHNuKG4ucHJldmlldy5pbnZvaWNlcy5tYXAoKGMpID0+IGMucmVtYWluaW5nX2Ftb3VudF9hdG9tKSk7XG4gIHJldHVybiB7XG4gICAgY3VycmVuY3k6IHMsXG4gICAgYW1vdW50QXRvbTogYVxuICB9O1xufSwga2UgPSBhc3luYyAodCwgciwgZSwgbikgPT4ge1xuICBpZiAoZSlcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiAwLCBjdXJyZW5jeTogXCJ1c2RcIiB9O1xuICB7XG4gICAgbiA9IG4gfHwgdm9pZCAwO1xuICAgIGNvbnN0IGkgPSBhd2FpdCBfbih0LCByLCBuKTtcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiBpLmFtb3VudEF0b20sIGN1cnJlbmN5OiBpLmN1cnJlbmN5IH07XG4gIH1cbn0sIGduID0gYXN5bmMgKHQsIHIpID0+IHtcbiAgaWYgKHQuc2l6ZSA9PT0gMClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBDREUgY29ubmVjdGlvbnMgZm91bmRcIik7XG4gIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBBcnJheS5mcm9tKHQudmFsdWVzKCkpLm1hcChcbiAgICAgIChuKSA9PiBUKG4sIHsgdHlwZTogXCJ0b2tlbml6ZV9jYXJkXCIsIHBheWxvYWQ6IHIgfSwgU3IpXG4gICAgKVxuICApO1xufSwgV2UgPSBhc3luYyAodCwgcikgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBUKHQsIHsgdHlwZTogXCJjaGVja291dF9jYXJkX2VsZW1lbnRzXCIsIHBheWxvYWQ6IHIgfSwgeGUpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgY29uc29sZS5lcnJvcihcIltjZGUtY2xpZW50XSBFcnJvciBkdXJpbmcgY2hlY2tvdXRDYXJkRWxlbWVudHM6XCIsIGUsIEpTT04uc3RyaW5naWZ5KGUpKSwgZTtcbiAgfVxufSwgd24gPSBhc3luYyAodCwgcikgPT4gYXdhaXQgVCh0LCB7IHR5cGU6IFwic2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZDogciB9LCBCciksIFBlID0gYXN5bmMgKHQsIHIpID0+IGF3YWl0IFQodCwgeyB0eXBlOiBcImNoZWNrb3V0XCIsIHBheWxvYWQ6IHIgfSwgeGUpLCBrdCA9IDFlMywgYm4gPSBhc3luYyAodCwgcikgPT4ge1xuICBjb25zb2xlLmxvZyhyKTtcbiAgY29uc3QgbiA9IGF3YWl0IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWU6IHQsXG4gICAgZGVidWc6ICEwLFxuICAgIHRpbWVvdXQ6IGt0LFxuICAgIGNoaWxkT3JpZ2luOiBcIipcIlxuICAgIC8vIFRPRE86IHVzZSB3aXRoIHByb3BlciBjaGlsZE9yaWdpblxuICB9KS5wcm9taXNlLCBpID0gYXdhaXQgVChuLCB7IHR5cGU6IFwicGluZy0zZHMtc3RhdHVzXCIgfSwgQ3IpO1xuICByZXR1cm4gY29uc29sZS5sb2coXCLwn5+iIENERSBjb25uZWN0aW9uIHN1Y2Nlc3NmdWwhIFN0b3BwaW5nIHBvbGxpbmcuLi4gUmVzdWx0OlwiLCBpKSwgaTtcbn0sIHZuID0gYXN5bmMgKHQsIHIpID0+IGF3YWl0IFQodCwgeyB0eXBlOiBcInVwZGF0ZV9jaGVja291dF9jdXN0b21lclwiLCBwYXlsb2FkOiByIH0sIG9uKTtcbmZ1bmN0aW9uICRlKHQpIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgY2FzZTogJHt0fWApO1xufVxuY29uc3Qgc2UgPSAodCkgPT4gYXN5bmMgKHIpID0+IHtcbiAgdmFyIGUsIG47XG4gIHRyeSB7XG4gICAgKG4gPSAoZSA9IHIuZm9ybUNhbGxiYWNrcy5nZXQpLm9uQ2hlY2tvdXRTdGFydGVkKSA9PSBudWxsIHx8IG4uY2FsbChlKTtcbiAgICBjb25zdCBpID0gYXdhaXQgdChyKTtcbiAgICBpZiAoaS5tb2RlID09PSBcInNldHVwXCIpXG4gICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyhpLnJlc3VsdC5wYXltZW50X21ldGhvZF9pZCk7XG4gICAgZWxzZSBpZiAoaS5tb2RlID09PSBcImNoZWNrb3V0XCIpXG4gICAgICByLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRTdWNjZXNzKFxuICAgICAgICBpLnJlc3VsdC5pbnZvaWNlX3VybHMsXG4gICAgICAgIGkucmVzdWx0LnN1YnNjcmlwdGlvbl9pZHMsXG4gICAgICAgIGkucmVzdWx0LmN1c3RvbWVyX2lkXG4gICAgICApO1xuICAgIGVsc2VcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIG1vZGU6ICR7aX1gKTtcbiAgfSBjYXRjaCAoaSkge1xuICAgIHIuZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKFkoaSkpO1xuICB9XG59LCBBZSA9ICh0KSA9PiBhc3luYyAocikgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCB0KHIpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc3QgeyBlcnJfXzogbiB9ID0gayhcImluaXQtZXJyb3ItY2F0Y2hlclwiKTtcbiAgICByZXR1cm4gbihlKSwgeyBpc0F2YWlsYWJsZTogITEsIHJlYXNvbjogWShlKSB9O1xuICB9XG59LCBrID0gKHQpID0+IHtcbiAgY29uc3QgciA9ICguLi5uKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUubG9nKGAke2ZlLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7ZmUuYm9sZC5ncmF5KGAke3R9YCl9XHRgLCAuLi5uKTtcbiAgfSwgZSA9ICguLi5uKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUud2FybihgJHtmZS5yZWQuYm9sZChcIm9qcy9cIil9JHtmZS5ib2xkLmdyYXkoYCR7dH1gKX1cdGAsIC4uLm4pO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZzogcixcbiAgICBlcnI6IGUsXG4gICAgbG9nX186IHIsXG4gICAgZXJyX186IGVcbiAgfTtcbn0sIHsgbG9nX186IERpLCBlcnJfXzogRW4gfSA9IGsoXCJjb21tb25cIiksIFZlID0gKHQpID0+IHtcbiAgaWYgKHQucGF5bWVudF9tZXRob2RzLmxlbmd0aCAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIHBheW1lbnQgbWV0aG9kLCBnb3QgJHt0LnBheW1lbnRfbWV0aG9kcy5sZW5ndGh9YCk7XG4gIHJldHVybiB7IHBheW1lbnRfbWV0aG9kX2lkOiB0LnBheW1lbnRfbWV0aG9kc1swXS5pZCB9O1xufSwgYWUgPSAodCwgcikgPT4ge1xuICBjb25zdCBlID0gdC5maW5kKChuKSA9PiByLnNhZmVQYXJzZShuKS5zdWNjZXNzKTtcbiAgaWYgKCFlKVxuICAgIHRocm93IEVuKFwiTm8gQ1BNcyBmb3VuZCBmb3IgbW9kZWwuIEFsbCBtb2RlbHM6XCIsIHQpLCBuZXcgRXJyb3IoXCJObyBDUE1zIGZvdW5kIGZvciBtb2RlbFwiKTtcbiAgcmV0dXJuIHIucGFyc2UoZSk7XG59LCBTbiA9ICh0KSA9PiAoe1xuICBuZXdfY3VzdG9tZXJfZW1haWw6IHQuZW1haWwsXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiB7XG4gICAgemlwX2NvZGU6IHQuemlwQ29kZSxcbiAgICBjb3VudHJ5OiB0LmNvdW50cnlcbiAgfSxcbiAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHQuZmlyc3ROYW1lLFxuICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiB0Lmxhc3ROYW1lXG59KSwgeyBsb2dfXzogUHQsIGVycl9fOiBBdCB9ID0gayhcImNvbW1vbi1jY1wiKSwgY2UgPSAodCwgciwgZSkgPT4ge1xuICBpZiAoZSkge1xuICAgIFB0KGBSZWNlaXZlZCBkZWZhdWx0IGZpZWxkIHZhbHVlczogJHtKU09OLnN0cmluZ2lmeShlKX1gKTtcbiAgICBmb3IgKGNvbnN0IFtpLCBzXSBvZiBPYmplY3QuZW50cmllcyhlKSlcbiAgICAgIHRbaV0gfHwgKHRbaV0gPSBzKTtcbiAgfVxuICBjb25zdCBuID0gbGUuc2FmZVBhcnNlKHQpO1xuICBpZiAoIW4uc3VjY2Vzcykge1xuICAgIGNvbnN0IGkgPSBuLmVycm9yLmZvcm1hdCgpLCBzID0gSXIoaSk7XG4gICAgZm9yIChjb25zdCBbYSwgY10gb2YgT2JqZWN0LmVudHJpZXMocykpXG4gICAgICByKGEsIGMsIGEpO1xuICAgIHRocm93IEF0KFwiR290IHZhbGlkYXRpb24gZXJyb3JzIGluIG5vbi1DREUgZm9ybSBmaWVsZHNcIiwgcyksIG5ldyBFcnJvcihcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIpO1xuICB9XG4gIHJldHVybiBuLmRhdGE7XG59LCBDbiA9ICh0LCByKSA9PiB7XG4gIGZvciAoY29uc3QgZSBvZiB0KVxuICAgIGlmIChlLnN1Y2Nlc3MgPT09ICExKVxuICAgICAgdGhyb3cgZS5lcnJvcnMuZm9yRWFjaCgobikgPT4ge1xuICAgICAgICBjb25zdCBpID0geXQuc2FmZVBhcnNlKG4uZWxlbWVudFR5cGUpO1xuICAgICAgICBpZiAoIWkuc3VjY2VzcylcbiAgICAgICAgICBBdChgVW5rbm93biBmaWVsZCBuYW1lIGluIG9uVmFsaWRhdGlvbkVycm9yOiAke24uZWxlbWVudFR5cGV9LiBFcnJvciBvYmplY3Q6YCwgbik7XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgIGNvbnN0IHMgPSBpLmRhdGE7XG4gICAgICAgICAgcihzLCBuLmVycm9ycyk7XG4gICAgICAgIH1cbiAgICAgIH0pLCBQdChgRXJyb3IgdG9rZW5pemluZyBjYXJkOiBnb3QgdmFsaWRhdGlvbiBlcnJvcnM6ICR7SlNPTi5zdHJpbmdpZnkoZS5lcnJvcnMpfWApLCBuZXcgRXJyb3IoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgd2hpbGUgdG9rZW5pemluZyBjYXJkXCIpO1xufSwgWmUgPSBcIm9qcy1zdHJpcGUtbGluay1idG5cIiwgeyBsb2dfXzogUywgZXJyX186IGtuIH0gPSBrKFwic3RyaXBlLWxpbmtcIiksIFBuID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInN0cmlwZV9saW5rXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIEFuID0geiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSksIEluID0gQWUoXG4gIGFzeW5jICh7IGNvbnRleHQ6IHQsIGZvcm1DYWxsYmFja3M6IHIgfSkgPT4ge1xuICAgIGNvbnN0IGUgPSB0LmN1c3RvbUluaXRQYXJhbXMuc3RyaXBlTGluaztcbiAgICBTKFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBTdHJpcGUgTGluay4uLlwiKTtcbiAgICBjb25zdCBuID0gYWUodC5jaGVja291dFBheW1lbnRNZXRob2RzLCBQbik7XG4gICAgUyhcIlN0YXJ0aW5nIHN0cmlwZSBsaW5rIGZsb3cuLi5cIik7XG4gICAgY29uc3QgaSA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgcyA9IGF3YWl0IFcoaSksIGEgPSBzLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBTKFwiQ3JlYXRpbmcgc3RyaXBlIGVsZW1lbnRzLi4uXCIpO1xuICAgIGNvbnN0IGMgPSBhd2FpdCBrZShpLCBzLnRva2VuLCBhLCB2b2lkIDApLCB7IGVsZW1lbnRzOiB1LCBzdHJpcGU6IGwgfSA9IGF3YWl0IE1yKG4ubWV0YWRhdGEuc3RyaXBlX3BrLCB7XG4gICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICBjdXJyZW5jeTogYy5jdXJyZW5jeSxcbiAgICAgIHNldHVwX2Z1dHVyZV91c2FnZTogXCJvZmZfc2Vzc2lvblwiLFxuICAgICAgcGF5bWVudE1ldGhvZENyZWF0aW9uOiBcIm1hbnVhbFwiXG4gICAgfSk7XG4gICAgUyhcIkNyZWF0aW5nIGV4cHJlc3MgY2hlY2tvdXQuLi5cIik7XG4gICAgY29uc3QgcCA9IHUuY3JlYXRlKFwiZXhwcmVzc0NoZWNrb3V0XCIsIHtcbiAgICAgIGJ1dHRvbkhlaWdodDogZSA9PSBudWxsID8gdm9pZCAwIDogZS5idXR0b25IZWlnaHQsXG4gICAgICBwYXltZW50TWV0aG9kczoge1xuICAgICAgICBhbWF6b25QYXk6IFwibmV2ZXJcIixcbiAgICAgICAgYXBwbGVQYXk6IFwibmV2ZXJcIixcbiAgICAgICAgZ29vZ2xlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIHBheXBhbDogXCJuZXZlclwiXG4gICAgICB9XG4gICAgfSksIG0gPSAoKSA9PiB7XG4gICAgICBwLm1vdW50KGAjJHtaZX1gKTtcbiAgICB9LCBnID0gKCkgPT4ge1xuICAgICAgcC51bm1vdW50KCk7XG4gICAgfTtcbiAgICByZXR1cm4gZSAhPSBudWxsICYmIGUuZG9Ob3RNb3VudE9uSW5pdCA/IFMoXCJOT1QgbW91bnRpbmcgc3RyaXBlIGxpbmsgYnV0dG9uIChkb05vdE1vdW50T25Jbml0IGlzIHRydWUpXCIpIDogKFMoXCJNb3VudGluZyBzdHJpcGUgbGluayBidXR0b24uLi5cIiksIG0oKSksIHAub24oXCJjbGlja1wiLCBhc3luYyAoZikgPT4ge1xuICAgICAgaWYgKFMoXCJTdHJpcGUgTGluayBidXR0b24gY2xpY2tlZFwiKSwgZSAhPSBudWxsICYmIGUub3ZlcnJpZGVMaW5rU3VibWl0ICYmICFhd2FpdCBlLm92ZXJyaWRlTGlua1N1Ym1pdCgpKSB7XG4gICAgICAgIFMoXCJTdHJpcGUgTGluayBzdWJtaXQgYWJvcnRlZCBieSBvdmVycmlkZUxpbmtTdWJtaXRcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGYucmVzb2x2ZSgpO1xuICAgIH0pLCBwLm9uKFwiY29uZmlybVwiLCBhc3luYyAoZikgPT4ge1xuICAgICAgUyhcIlN0cmlwZSBMaW5rIHdpbmRvdyBjb25maXJtZWRcIiwgZik7XG4gICAgICBjb25zdCB5ID0gYXdhaXQgbC5jcmVhdGVQYXltZW50TWV0aG9kKHtcbiAgICAgICAgZWxlbWVudHM6IHUsXG4gICAgICAgIHBhcmFtczoge1xuICAgICAgICAgIGJpbGxpbmdfZGV0YWlsczogZi5iaWxsaW5nRGV0YWlsc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHkuZXJyb3IgPyAoa24oXCJlcnJvclwiLCB5LmVycm9yKSwgci5nZXQub25DaGVja291dEVycm9yKHkuZXJyb3IubWVzc2FnZSA/PyBcIlN0cmlwZSBMaW5rIHVua25vd24gZXJyb3JcIikpIDogKFMoXCJwYXltZW50TWV0aG9kXCIsIHkucGF5bWVudE1ldGhvZCksIEwuc3RyaXBlTGluay5ydW4oe1xuICAgICAgICBjb250ZXh0OiB0LFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IG9lKHQuZm9ybURpdiksXG4gICAgICAgIGZvcm1DYWxsYmFja3M6IHIsXG4gICAgICAgIGN1c3RvbVBhcmFtczogeyBzdHJpcGVQTTogeS5wYXltZW50TWV0aG9kIH0sXG4gICAgICAgIGluaXRSZXN1bHQ6IHsgaXNBdmFpbGFibGU6ICEwIH1cbiAgICAgIH0pKTtcbiAgICB9KSwge1xuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgY29udHJvbGxlcjoge1xuICAgICAgICBtb3VudEJ1dHRvbjogbSxcbiAgICAgICAgZGlzbW91bnRCdXR0b246IGcsXG4gICAgICAgIHdhaXRGb3JCdXR0b25Ub01vdW50OiBhc3luYyAoKSA9PiBhd2FpdCBUbihaZSlcbiAgICAgIH1cbiAgICB9O1xuICB9XG4pLCBPbiA9IHNlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGlcbiAgfSkgPT4ge1xuICAgIFMoXCJSdW5uaW5nIFN0cmlwZSBMaW5rIGZsb3cuLi5cIik7XG4gICAgY29uc3QgcyA9IHQuYW55Q2RlQ29ubmVjdGlvbjtcbiAgICBTKFwiTWVyZ2luZyBQTSBmaWVsZHMgd2l0aCBmb3JtIGZpZWxkcy4uLlwiKTtcbiAgICBjb25zdCBhID0gUm4oZSwgaS5zdHJpcGVQTSksIGMgPSBjZShhLCBuLmdldC5vblZhbGlkYXRpb25FcnJvcik7XG4gICAgUyhcIlN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLlwiKTtcbiAgICBjb25zdCB1ID0gYXdhaXQgQ2Uocywge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogci5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiByLFxuICAgICAgdGhlaXJfZXhpc3RpbmdfcG1faWQ6IGkuc3RyaXBlUE0uaWQsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IGNbZC5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogY1tkLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogY1tkLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICB6aXBfY29kZTogY1tkLlpJUF9DT0RFXSxcbiAgICAgICAgY291bnRyeTogY1tkLkNPVU5UUlldXG4gICAgICB9XG4gICAgfSk7XG4gICAgUyhcIlN0YXJ0IHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCB1KTtcbiAgICBjb25zdCBwID0gQW4ucGFyc2UodS5yZXF1aXJlZF91c2VyX2FjdGlvbnMpWzBdLm91cl9leGlzdGluZ19wbV9pZCwgbSA9IGF3YWl0IFcocyk7XG4gICAgaWYgKG0ubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBTKFwiRG9pbmcgcGF5bWVudCBzZXR1cC4uLlwiKTtcbiAgICAgIGNvbnN0IGcgPSBhd2FpdCBIKHMsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBtLnRva2VuLFxuICAgICAgICBleGlzdGluZ19jY19wbV9pZDogcFxuICAgICAgfSk7XG4gICAgICByZXR1cm4geyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogVmUoZykgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgUyhcIkRvaW5nIGNoZWNrb3V0Li4uXCIpO1xuICAgICAgY29uc3QgZyA9IHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBtLnRva2VuLFxuICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgcHJvdmlkZXJfdHlwZTogci5wcm92aWRlclxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21lcl9lbWFpbDogY1tkLkVNQUlMXSxcbiAgICAgICAgY3VzdG9tZXJfemlwX2NvZGU6IGNbZC5aSVBfQ09ERV0sXG4gICAgICAgIGN1c3RvbWVyX2NvdW50cnk6IGNbZC5DT1VOVFJZXSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IGNbZC5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgIGxpbmVfaXRlbXM6IG0ubGluZV9pdGVtcyxcbiAgICAgICAgdG90YWxfYW1vdW50X2F0b206IG0uYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgIGNhbmNlbF9hdF9lbmQ6ICExLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogclxuICAgICAgfTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCBQZShzLCBnKSB9O1xuICAgIH1cbiAgfVxuKSwgUm4gPSAodCwgcikgPT4ge1xuICB2YXIgYSwgYywgdSwgbCwgcDtcbiAgY29uc3QgZSA9IHsgLi4udCB9LCBbbiwgLi4uaV0gPSAoKGMgPSAoYSA9IHIuYmlsbGluZ19kZXRhaWxzLm5hbWUpID09IG51bGwgPyB2b2lkIDAgOiBhLnRyaW0oKSkgPT0gbnVsbCA/IHZvaWQgMCA6IGMuc3BsaXQoL1xccysvKSkgPz8gW10sIHMgPSBpLmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgcmV0dXJuIGVbZC5GSVJTVF9OQU1FXSA9IGVbZC5GSVJTVF9OQU1FXSB8fCBuIHx8IFwiX09QX1VOS05PV05cIiwgZVtkLkxBU1RfTkFNRV0gPSBlW2QuTEFTVF9OQU1FXSB8fCBzIHx8IFwiX09QX1VOS05PV05cIiwgZVtkLkVNQUlMXSA9IGVbZC5FTUFJTF0gfHwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgKCh1ID0gci5saW5rKSA9PSBudWxsID8gdm9pZCAwIDogdS5lbWFpbCkgfHwgci5iaWxsaW5nX2RldGFpbHMuZW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiLCBlW2QuWklQX0NPREVdID0gZVtkLlpJUF9DT0RFXSB8fCAoKGwgPSByLmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzKSA9PSBudWxsID8gdm9pZCAwIDogbC5wb3N0YWxfY29kZSkgfHwgXCIwMDAwMFwiLCBlW2QuQ09VTlRSWV0gPSBlW2QuQ09VTlRSWV0gfHwgKChwID0gci5iaWxsaW5nX2RldGFpbHMuYWRkcmVzcykgPT0gbnVsbCA/IHZvaWQgMCA6IHAuY291bnRyeSkgfHwgXCJVU1wiLCBTKFwiRmluYWwgZm9ybSBpbnB1dHM6XCIsIGUpLCBlO1xufSwgVG4gPSAodCkgPT4gbmV3IFByb21pc2UoKHIpID0+IHtcbiAgY29uc3QgZSA9ICgpID0+IHtcbiAgICBjb25zdCBuID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQodCk7XG4gICAgbiA/IHIobikgOiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZSk7XG4gIH07XG4gIGUoKTtcbn0pLCBNbiA9IFwiQGtleWZyYW1lcyBmYWRlSW57MCV7b3BhY2l0eTowO3RyYW5zZm9ybTpzY2FsZSguOSl9dG97b3BhY2l0eToxO3RyYW5zZm9ybTpzY2FsZSgxKX19Lm92ZXJsYXl7cG9zaXRpb246Zml4ZWQ7dG9wOjA7bGVmdDowO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7ei1pbmRleDoyMTQ3NDgzNjQ4IWltcG9ydGFudDtkaXNwbGF5OmZsZXg7anVzdGlmeS1jb250ZW50OmNlbnRlcjthbGlnbi1pdGVtczpjZW50ZXI7YmFja2dyb3VuZC1jb2xvcjojMDAwMDAwODB9LmNvbnRhaW5lcnttYXgtd2lkdGg6NTAwcHg7bWF4LWhlaWdodDo2MDBweDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JhY2tncm91bmQtY29sb3I6I2ZmZjtwb3NpdGlvbjpyZWxhdGl2ZTthbmltYXRpb246ZmFkZUluIC4zcyBlYXNlLW91dH0uZnJhbWV7bWF4LXdpZHRoOjUwMHB4O21heC1oZWlnaHQ6NjAwcHg7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTtib3JkZXI6bm9uZX0uY2FuY2VsLWJ1dHRvbntwb3NpdGlvbjphYnNvbHV0ZTtiYWNrZ3JvdW5kOnRyYW5zcGFyZW50O2JvcmRlcjpub25lO2ZvbnQtc2l6ZToxcmVtO2NvbG9yOiNmZmY7Y3Vyc29yOnBvaW50ZXI7dG9wOi0xLjVyZW07cGFkZGluZzowO3JpZ2h0OjB9XCIsIERuID0gKHQpID0+IHtcbiAgY29uc3QgciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJ0ZW1wbGF0ZVwiKTtcbiAgci5pbm5lckhUTUwgPSBgXG4gICAgPHN0eWxlPlxuICAgICAgJHtNbn1cbiAgICA8L3N0eWxlPlxuICAgIDxkaXYgY2xhc3M9XCJvdmVybGF5XCI+XG4gICAgICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+XG4gICAgICAgIDxidXR0b24gY2xhc3M9XCJjYW5jZWwtYnV0dG9uXCI+Q2FuY2VsPC9idXR0b24+XG4gICAgICAgIDxpZnJhbWUgc3JjPVwiJHt0fVwiIGNsYXNzPVwiZnJhbWVcIiBpZD1cInRocmVlLWRzLWlmcmFtZVwiIHRpdGxlPVwiM0QgU2VjdXJlIHZlcmlmaWNhdGlvblwiIGFsbG93PVwicGF5bWVudFwiPjwvaWZyYW1lPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIGA7XG4gIGNvbnN0IGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpLCBuID0gZS5hdHRhY2hTaGFkb3coeyBtb2RlOiBcIm9wZW5cIiB9KTtcbiAgbi5hcHBlbmRDaGlsZChyLmNvbnRlbnQuY2xvbmVOb2RlKCEwKSk7XG4gIGNvbnN0IGkgPSBuLnF1ZXJ5U2VsZWN0b3IoXCIjdGhyZWUtZHMtaWZyYW1lXCIpLCBzID0gbi5xdWVyeVNlbGVjdG9yKFwiLmNhbmNlbC1idXR0b25cIik7XG4gIHJldHVybiBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpLCB7IGhvc3Q6IGUsIGlmcmFtZTogaSwgY2FuY2VsQnV0dG9uOiBzIH07XG59O1xuZnVuY3Rpb24gRm4odCwgciwgZSkge1xuICBjb25zdCBuID0gYXN5bmMgKCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBzID0gYXdhaXQgYm4odCwgZSk7XG4gICAgICBzICYmIChjbGVhckludGVydmFsKGkpLCByKHMpKTtcbiAgICB9IGNhdGNoIHtcbiAgICB9XG4gIH07XG4gIG4oKTtcbiAgY29uc3QgaSA9IHNldEludGVydmFsKG4sIGt0KTtcbiAgcmV0dXJuIGk7XG59XG5mdW5jdGlvbiBMbih7XG4gIGVsZW1lbnRzOiB0LFxuICBwb2xsaW5nSW50ZXJ2YWw6IHIsXG4gIHJlc29sdmU6IGVcbn0pIHtcbiAgY29uc3QgbiA9ICgpID0+IHtcbiAgICBjbGVhckludGVydmFsKHIpLCB0Lmhvc3QucmVtb3ZlKCksIGUoeyBzdGF0dXM6IE4uQ0FOQ0VMTEVEIH0pO1xuICB9O1xuICByZXR1cm4gdC5jYW5jZWxCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG4pLCAoKSA9PiB7XG4gICAgdC5jYW5jZWxCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIG4pO1xuICB9O1xufVxuYXN5bmMgZnVuY3Rpb24gSWUodCkge1xuICBjb25zdCB7IHVybDogciwgYmFzZVVybDogZSB9ID0gdCwgbiA9IERuKHIpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKGkpID0+IHtcbiAgICBjb25zdCBzID0gKHUpID0+IHtcbiAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICBuLmhvc3QucmVtb3ZlKCk7XG4gICAgICB9LCAxZTMpLCBpKHUpLCBjID09IG51bGwgfHwgYygpO1xuICAgIH0sIGEgPSBGbihuLmlmcmFtZSwgcywgbmV3IFVSTChlKS5vcmlnaW4pLCBjID0gTG4oe1xuICAgICAgZWxlbWVudHM6IG4sXG4gICAgICBwb2xsaW5nSW50ZXJ2YWw6IGEsXG4gICAgICByZXNvbHZlOiBpXG4gICAgfSk7XG4gIH0pO1xufVxuY29uc3QgSXQgPSBhc3luYyAodCkgPT4ge1xuICBjb25zdCByID0gYXdhaXQgSWUodCk7XG4gIGlmIChyLnN0YXR1cyA9PT0gTi5DQU5DRUxMRUQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChyLnN0YXR1cyA9PT0gTi5GQUlMVVJFKVxuICAgIHRocm93IG5ldyBFcnJvcihcIjNEUyB2ZXJpZmljYXRpb24gZmFpbGVkXCIpO1xuICByZXR1cm4gci5zdGF0dXMgIT09IE4uU1VDQ0VTUyAmJiAkZShyLnN0YXR1cyksIHtcbiAgICBocmVmOiByLmhyZWZcbiAgfTtcbn0sIE5uID0gKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IHdpbmRvdy5vcGVuKHIsIFwiX2JsYW5rXCIpO1xuICBpZiAoIWUpXG4gICAgdGhyb3cgbmV3IEVycm9yKGAke3R9IHBvcHVwIHdpbmRvdyBibG9ja2VkLiBQbGVhc2UgYWxsb3cgcG9wdXBzIGZvciB0aGlzIHNpdGUuYCk7XG4gIHJldHVybiBlO1xufSwgam4gPSBhc3luYyAodCwgciwgZSwgbikgPT4ge1xuICBjb25zdCB7IGVycl9fOiBpIH0gPSBrKFwicG9wdXAtdmVyaWZ5XCIpO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHMsIGEpID0+IHtcbiAgICBjb25zdCBjID0gTm4odCwgbiksIHUgPSBzZXRJbnRlcnZhbChhc3luYyAoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCBsID0gYXdhaXQgaG4ociwgZSk7XG4gICAgICAgIGlmIChsLnByZXNlbnQpXG4gICAgICAgICAgY2xlYXJJbnRlcnZhbCh1KSwgYy5jbG9zZSgpLCBzKHsgaHJlZjogbC5ocmVmIH0pO1xuICAgICAgICBlbHNlIGlmIChjLmNsb3NlZClcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dH0gcGF5bWVudCBjYW5jZWxsZWRgKTtcbiAgICAgIH0gY2F0Y2ggKGwpIHtcbiAgICAgICAgaShZKGwpKSwgY2xlYXJJbnRlcnZhbCh1KSwgYShZKGwpKTtcbiAgICAgIH1cbiAgICB9LCAxZTMpO1xuICB9KTtcbn0sIHsgbG9nX186IFVuLCBlcnJfXzogT3QgfSA9IGsoXCJwb2NreXQtY2NcIiksIHhuID0geiQxLm9iamVjdCh7XG4gIFwib3AtcG9ja3l0LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC10eG4tbm9cIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC1yZWYtbm9cIjogeiQxLnN0cmluZygpXG59KSwgJG4gPSAodCkgPT4ge1xuICBjb25zdCByID0geG4uc2FmZVBhcnNlKHQpO1xuICBpZiAoIXIuc3VjY2Vzcykge1xuICAgIGNvbnN0IGUgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIG4gPSBgUG9ja3l0IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkodCl9YDtcbiAgICB0aHJvdyBPdChuKSwgbmV3IEVycm9yKGUpO1xuICB9XG4gIHJldHVybiByLmRhdGE7XG59LCBSdCA9ICh0KSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgciA9IG5ldyBVUkwodCA/PyBcIlwiKS5zZWFyY2hQYXJhbXMuZ2V0KFwidmF1bHRJZFwiKTtcbiAgICBpZiAoIXIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyB2YXVsdCBJRCBmb3VuZCBpbiAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdFwiKTtcbiAgICByZXR1cm4gVW4oYDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW1ZhdWx0IElEOiAke3J9XWApLCByO1xuICB9IGNhdGNoIChyKSB7XG4gICAgY29uc3QgZSA9IFwiRXJyb3IgdmVyaWZ5aW5nIDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0LlwiO1xuICAgIHRocm93IE90KGUsIGBSZXN1bHRpbmcgVVJMOiAke3R9LlxuRXJyb3I6ICR7WShyKX1gKSwgbmV3IEVycm9yKGUpO1xuICB9XG59LCBWbiA9ICh0KSA9PiAodCA9PSBudWxsID8gdm9pZCAwIDogdFtcIm9wLXBvY2t5dC0zZHMtdXJsXCJdKSAhPT0gdm9pZCAwLCBxbiA9IGFzeW5jICh0LCByKSA9PiB7XG4gIGNvbnN0IGUgPSAkbihyKSwgbiA9IGF3YWl0IEl0KHsgdXJsOiBlW1wib3AtcG9ja3l0LTNkcy11cmxcIl0sIGJhc2VVcmw6IHQgfSk7XG4gIHJldHVybiB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIHZhdWx0X2lkOiBSdChuLmhyZWYgPz8gXCJcIiksXG4gICAgICB0cmFuc2FjdGlvbl9ubzogZVtcIm9wLXBvY2t5dC10eG4tbm9cIl0sXG4gICAgICByZWZlcmVuY2Vfbm86IGVbXCJvcC1wb2NreXQtcmVmLW5vXCJdXG4gICAgfVxuICB9O1xufSwgeyBsb2dfXzogR24sIGVycl9fOiBxZSB9ID0gayhcImFpcndhbGxleC1jY1wiKSwgem4gPSB6JDEub2JqZWN0KHtcbiAgXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtY29uc2VudC1pZFwiOiB6JDEuc3RyaW5nKClcbn0pLCBZbiA9ICh0KSA9PiB7XG4gIGNvbnN0IHIgPSB6bi5zYWZlUGFyc2UodCk7XG4gIGlmICghci5zdWNjZXNzKSB7XG4gICAgY29uc3QgZSA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgbiA9IGBBaXJ3YWxsZXggM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeSh0KX1gO1xuICAgIHRocm93IHFlKG4pLCBuZXcgRXJyb3IoZSk7XG4gIH1cbiAgcmV0dXJuIHIuZGF0YTtcbn0sIEtuID0gKHQpID0+ICh0ID09IG51bGwgPyB2b2lkIDAgOiB0W1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0pICE9PSB2b2lkIDAsIEhuID0gKHQpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCByID0gbmV3IFVSTCh0ID8/IFwiXCIpLnNlYXJjaFBhcmFtcy5nZXQoXCJwYXltZW50X2ludGVudF9pZFwiKTtcbiAgICBpZiAoIXIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBpbnRlbnQgSUQgZm91bmQgaW4gQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0XCIpO1xuICAgIHJldHVybiBHbihgQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gc3VjY2Vzcy4gW0ludGVudCBJRDogJHtyfV1gKSwgcjtcbiAgfSBjYXRjaCAocikge1xuICAgIGNvbnN0IGUgPSBcIkVycm9yIHZlcmlmeWluZyBBaXJ3YWxsZXggM0RTIHZlcmlmaWNhdGlvbiByZXN1bHQuXCI7XG4gICAgdGhyb3cgcWUoZSwgYFJlc3VsdGluZyBVUkw6ICR7dH0uXG5FcnJvcjogJHtZKHIpfWApLCBuZXcgRXJyb3IoZSk7XG4gIH1cbn0sIFduID0gYXN5bmMgKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IFluKHIpLCBuID0gYXdhaXQgSXQoeyB1cmw6IGVbXCJvcC1haXJ3YWxsZXgtM2RzLXVybFwiXSwgYmFzZVVybDogdCB9KSwgaSA9IEhuKG4uaHJlZiA/PyBcIlwiKSwgcyA9IGVbXCJvcC1haXJ3YWxsZXgtaW5pdGlhbC1pbnRlbnQtaWRcIl07XG4gIGlmIChzICE9PSBpKSB7XG4gICAgY29uc3QgYyA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgdSA9IGBJbnRlbnQgSUQgZnJvbSBjYWxsYmFjayAoJHtpfSkgZG9lcyBub3QgbWF0Y2ggdGhlIGluaXRpYWwgaW50ZW50IElEICgke3N9KS5gO1xuICAgIHRocm93IHFlKHUpLCBuZXcgRXJyb3IoYyk7XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBleGlzdGluZ19jYzoge1xuICAgICAgaW5pdGlhbF9pbnRlbnRfaWQ6IGksXG4gICAgICBjb25zZW50X2lkOiBlW1wib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIl1cbiAgICB9XG4gIH07XG59LCB7IGxvZ19fOiBiLCBlcnJfXzogSmUgfSA9IGsoXCJjb21tb24tY2NcIiksIHsgbG9nX186IEJlIH0gPSBrKFwic3RyaXBlLWNjXCIpO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5jb25zdCBabiA9IHNlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgZm9ybUNhbGxiYWNrczogbixcbiAgICBjdXN0b21QYXJhbXM6IGlcbiAgfSkgPT4ge1xuICAgIHZhciBsO1xuICAgIGIoXCLilJwgUnVubmluZyBjb21tb24gQ0MgZmxvdy4uLlwiLCB7IGNoZWNrb3V0UGF5bWVudE1ldGhvZDogciB9KTtcbiAgICBjb25zdCBzID0gdC5hbnlDZGVDb25uZWN0aW9uLCBhID0gYXdhaXQgVyhzKTtcbiAgICBiKGDilJwgVmFsaWRhdGluZyBub24tQ0RFIGZvcm0gZmllbGRzIFtNb2RlOiAke2EubW9kZX1dYCk7XG4gICAgY29uc3QgYyA9IGNlKGUsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKSwgdSA9IHtcbiAgICAgIHNlc3Npb25faWQ6IHQuZWxlbWVudHNTZXNzaW9uSWQsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogcixcbiAgICAgIG5vbl9jZGVfZm9ybV9maWVsZHM6IGMsXG4gICAgICBleHRyYV9tZXRhZGF0YToge31cbiAgICB9O1xuICAgIHRyeSB7XG4gICAgICBiKGDilJwgVG9rZW5pemluZyBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke3QuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgY29uc3QgcCA9IGF3YWl0IGduKGkuY3VycmVudENkZUNvbm5lY3Rpb25zLCB7XG4gICAgICAgIHNlc3Npb25faWQ6IHQuZWxlbWVudHNTZXNzaW9uSWRcbiAgICAgIH0pO1xuICAgICAgaWYgKENuKHAsIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKSwgYS5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgICAgYihg4pScIFNldHRpbmcgdXAgcGF5bWVudCBtZXRob2QgaW4gQ0RFIFtUb2tlbjogJHthLnRva2VufV1gKTtcbiAgICAgICAgY29uc3QgbSA9IGF3YWl0IHduKHMsIHUpO1xuICAgICAgICByZXR1cm4gYihg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke20ucGF5bWVudF9tZXRob2RfaWR9XWApLCB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBtIH07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBiKGDilJwgSW5pdGlhbCBjaGVja291dCBmbG93LiBDaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERSBbU2Vzc2lvbjogJHt0LmVsZW1lbnRzU2Vzc2lvbklkfV1gKTtcbiAgICAgICAgY29uc3QgbSA9IGF3YWl0IFdlKHMsIHUpO1xuICAgICAgICByZXR1cm4gYihcIuKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlwiKSwgeyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogbSB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKHApIHtcbiAgICAgIGlmIChwIGluc3RhbmNlb2YgQ3QgJiYgcC5vcmlnaW5hbEVycm9yTWVzc2FnZS5pbmNsdWRlcyhcIjNEU19SRVFVSVJFRFwiKSkge1xuICAgICAgICBiKFwi4pScIENhcmQgcmVxdWlyZXMgM0RTLCBzdGFydGluZyBub24tbGVnYWN5IHBheW1lbnQgZmxvd1wiKSwgYihcIlJlY2VpdmVkIDNEUyBlcnJvciByZXNwb25zZSBoZWFkZXJzOlwiLCBwLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICBjb25zdCBtID0gVm4ocC5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgaWYgKG0pIHtcbiAgICAgICAgICBiKFwi4pScIFBvY2t5dCAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBQb2NreXQgM0RTIGZsb3cuXCIpO1xuICAgICAgICAgIGNvbnN0IHcgPSBhd2FpdCBxbih0LmJhc2VVcmwsIHAucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgdS5leHRyYV9tZXRhZGF0YS5wb2NreXQgPSB3O1xuICAgICAgICB9XG4gICAgICAgIGlmIChLbihwLnJlc3BvbnNlLmhlYWRlcnMpKSB7XG4gICAgICAgICAgYihcIuKUnCBBaXJ3YWxsZXggM0RTIGNhc2UgZGV0ZWN0ZWQuIEdvaW5nIHRocm91Z2ggQWlyd2FsbGV4IDNEUyBmbG93LlwiKTtcbiAgICAgICAgICBjb25zdCB3ID0gYXdhaXQgV24odC5iYXNlVXJsLCBwLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICAgIHUuZXh0cmFfbWV0YWRhdGEuYWlyd2FsbGV4ID0gdztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmID0gYXdhaXQgbW4ocywgdSk7XG4gICAgICAgIGIoXCLilJwgUGF5bWVudCBmbG93IHJlc3VsdDpcIiwgZik7XG4gICAgICAgIGNvbnN0IHkgPSAoKGwgPSBwLnJlc3BvbnNlLmhlYWRlcnMpID09IG51bGwgPyB2b2lkIDAgOiBsW1wib3Atc2hvdWxkLXVzZS1uZXctZmxvd1wiXSkgIT09IFwidHJ1ZVwiO1xuICAgICAgICBtID8gYihcIuKUnCBQcmUtc3RhcnQgM0RTIGlzIHN1Y2Nlc3NmdWwsIG90aGVyIDNEUyBmbG93cyB3aWxsIGJlIHNraXBwZWQuXCIpIDogeSA/IChiKFwi4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvd1wiKSwgYXdhaXQgWG4oZikpIDogKGIoXCLilJwgVXNpbmcgY29tbW9uIDNEUyBmbG93XCIpLCBhd2FpdCBRbihmLCB0LmJhc2VVcmwpKTtcbiAgICAgICAgY29uc3QgaCA9IGYuY2NfcG1faWQ7XG4gICAgICAgIGlmIChhLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICAgIGIoYOKUnCBDb25maXJtaW5nIHBheW1lbnQgZmxvdyBbY2NfcG1faWQ6ICR7aH1dYCk7XG4gICAgICAgICAgY29uc3QgdyA9IGF3YWl0IEgocywge1xuICAgICAgICAgICAgc2VjdXJlX3Rva2VuOiBhLnRva2VuLFxuICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IGhcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBiKFwi4pScIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdCByZWNlaXZlZCBSZXN1bHQ6XCIsIHcpO1xuICAgICAgICAgIGNvbnN0IFAgPSBWZSh3KTtcbiAgICAgICAgICByZXR1cm4gYihg4pWwIFNldHVwIGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkgW1BNIElEOiAke1AucGF5bWVudF9tZXRob2RfaWR9XWApLCB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBQIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYihg4pScIENoZWNraW5nIG91dCBhZnRlciAzRFMgZmxvdyBbRmxvdzogJHt5ID8gXCJsZWdhY3lcIiA6IFwibmV3XCJ9XWApO1xuICAgICAgICAgIGNvbnN0IHcgPSBhd2FpdCBXZShzLCB7XG4gICAgICAgICAgICAuLi51LFxuICAgICAgICAgICAgZXhpc3RpbmdfY2NfcG1faWQ6IGgsXG4gICAgICAgICAgICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB5XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIGIoXCLilbAgQ2hlY2tvdXQgY29tcGxldGVkIHN1Y2Nlc3NmdWxseS5cIiksIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IHcgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhyb3cgSmUoXCLilbAgRXJyb3IgY2hlY2tpbmcgb3V0IGNhcmQgaW5mbyBpbiBDREVcIiksIEplKHApLCBwO1xuICAgIH1cbiAgfVxuKSwgSm4gPSAodCkgPT4ge1xuICBjb25zdCByID0gdC5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoZSkgPT4gZS50eXBlID09PSBcInN0cmlwZV8zZHNcIik7XG4gIGlmICghcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzdHJpcGUgM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgcmV0dXJuIE9yLnBhcnNlKHIpO1xufSwgQm4gPSAodCkgPT4ge1xuICBjb25zdCByID0gdC5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoZSkgPT4gZS50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIik7XG4gIGlmICghcilcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb21tb24gM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgcmV0dXJuIGtyLnBhcnNlKHIpO1xufSwgUW4gPSBhc3luYyAodCwgcikgPT4ge1xuICBjb25zdCBlID0gQm4odCk7XG4gIGlmIChlLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiICYmIGUucmVkaXJlY3RfdXJsID09PSBcIjNEU19DT01QTEVURVwiKSB7XG4gICAgYihcIuKUnCBBaXJ3YWxsZXggM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKTtcbiAgICByZXR1cm47XG4gIH1cbiAgYihg4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvdyBbVVJMOiAke2UucmVkaXJlY3RfdXJsfV1gKTtcbiAgY29uc3QgeyBzdGF0dXM6IG4gfSA9IGF3YWl0IEllKHsgdXJsOiBlLnJlZGlyZWN0X3VybCwgYmFzZVVybDogciB9KTtcbiAgaWYgKGIoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke259XWApLCBuID09PSBOLkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKG4gPT09IE4uRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbn0sIFhuID0gYXN5bmMgKHQpID0+IHtcbiAgY29uc3QgciA9IEpuKHQpO1xuICBCZShg4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvdyBbQ2xpZW50IFNlY3JldDogJHtyLmNsaWVudF9zZWNyZXQuc3Vic3RyaW5nKDAsIDgpfS4uLl1gKSwgYXdhaXQgTnIociksIEJlKFwi4pWwIFN0cmlwZSAzRFMgZmxvdyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xufSwgeyBsb2dfXzogTywgZXJyX186IGVvIH0gPSBrKFwic3RyaXBlLXByXCIpLCB0byA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnVuaW9uKFt6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSwgeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpXSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG4gIH0pXG59KSwgcm8gPSBBZShcbiAgYXN5bmMgKHsgY29udGV4dDogdCB9KSA9PiB7XG4gICAgTyhcIkNoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgU3RyaXBlIFBSLi4uXCIpO1xuICAgIGNvbnN0IHIgPSBhZSh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIHRvKTtcbiAgICBPKFwiSW5pdGlhbGl6aW5nIFN0cmlwZSBQUiBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGUgPSB0LmFueUNkZUNvbm5lY3Rpb24sIG4gPSBhd2FpdCBXKGUpLCBpID0gbi5tb2RlID09PSBcInNldHVwXCI7XG4gICAgTyhcIkdldHRpbmcgaW5pdGlhbCBwcmV2aWV3IGFtb3VudFwiKTtcbiAgICBjb25zdCBzID0gYXdhaXQga2UoZSwgbi50b2tlbiwgaSwgdm9pZCAwKSwgYSA9IGF3YWl0IERyKFxuICAgICAgci5tZXRhZGF0YS5zdHJpcGVfcGssXG4gICAgICBzLmFtb3VudEF0b20sXG4gICAgICBzLmN1cnJlbmN5LFxuICAgICAgaVxuICAgICk7XG4gICAgTyhcIkNoZWNraW5nIGlmIGNhbiBtYWtlIHBheW1lbnRcIik7XG4gICAgY29uc3QgYyA9IGF3YWl0IGEuY2FuTWFrZVBheW1lbnQoKTtcbiAgICByZXR1cm4gYyA9PT0gbnVsbCA/IChlbyhcImNhbk1ha2VQYXltZW50IHJldHVybmVkIG51bGxcIiksIHsgaXNBdmFpbGFibGU6ICExLCByZWFzb246IFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiIH0pIDogKE8oXCJTdHJpcGUgUFIgZmxvdyBpbml0aWFsaXplZCBzdWNjZXNzZnVsbHkuIENhbiBtYWtlIHBheW1lbnRcIiwgYyksIHtcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIHByOiBhLFxuICAgICAgYXZhaWxhYmxlUHJvdmlkZXJzOiB7XG4gICAgICAgIGFwcGxlUGF5OiBjLmFwcGxlUGF5LFxuICAgICAgICBnb29nbGVQYXk6IGMuZ29vZ2xlUGF5XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbiksIG5vID0gc2UoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogaSxcbiAgICBpbml0UmVzdWx0OiBzXG4gIH0pID0+IHtcbiAgICBpZiAoTyhcIlJ1bm5pbmcgU3RyaXBlIFBSIGZsb3cuLi5cIiksIGkucHJvdmlkZXIgIT09IHIucHJvdmlkZXIpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFByb3ZpZGVyIG1pc21hdGNoLiBFeHBlY3RlZCAke2kucHJvdmlkZXJ9LCBnb3QgJHtyLnByb3ZpZGVyfWApO1xuICAgIGNvbnN0IGEgPSB0LmFueUNkZUNvbm5lY3Rpb24sIGMgPSBzLnByO1xuICAgIGlmIChpICE9IG51bGwgJiYgaS5vdmVycmlkZVBheW1lbnRSZXF1ZXN0KSB7XG4gICAgICBjb25zdCB5ID0gaS5vdmVycmlkZVBheW1lbnRSZXF1ZXN0O1xuICAgICAgTyhcIk92ZXJyaWRpbmcgUFIgYW1vdW50IHdpdGhcIiwgeSksIGlvKGMsIHkuYW1vdW50LCB5LnBlbmRpbmcsIHkuc3RyaXBlQXBwbGVQYXkpO1xuICAgIH1cbiAgICBPKFwiU2hvd2luZyBQUiBkaWFsb2cuLi5cIiksIGMuc2hvdygpO1xuICAgIGNvbnN0IHUgPSBhd2FpdCBGcihjKTtcbiAgICBPKFwiU3RyaXBlIFBNIGFkZGVkIGV2ZW50OlwiLCB1KSwgTyhcIk1lcmdpbmcgUE0gZmllbGRzIHdpdGggZm9ybSBmaWVsZHMuLi5cIik7XG4gICAgY29uc3QgbCA9IG9vKGUsIHUpLCBwID0gY2UobCwgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IpO1xuICAgIE8oXCJQUiBkaWFsb2cgZmluaXNoZWQuIFN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLlwiLCBwKTtcbiAgICBjb25zdCBtID0gYXdhaXQgeW4oYSwge1xuICAgICAgZmllbGRzOiBwLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByXG4gICAgfSksIGcgPSBzbyhtKTtcbiAgICBPKFwiQ29uZmlybWluZyBQUiB3aXRoIFN0cmlwZS4uLlwiKSwgYXdhaXQgTHIoZywgdSk7XG4gICAgY29uc3QgZiA9IGF3YWl0IFcoYSk7XG4gICAgaWYgKGYubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICBPKFwiQ29uZmlybWluZyBwYXltZW50IGZsb3cgZm9yIHNldHVwLi4uXCIpO1xuICAgICAgY29uc3QgeSA9IGF3YWl0IEgoYSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGYudG9rZW5cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IFZlKHkpIH07XG4gICAgfSBlbHNlIHtcbiAgICAgIE8oXCJQZXJmb3JtaW5nIGNoZWNrb3V0Li4uXCIpO1xuICAgICAgY29uc3QgeSA9IHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBmLnRva2VuLFxuICAgICAgICBwYXltZW50X2lucHV0OiB7XG4gICAgICAgICAgcHJvdmlkZXJfdHlwZTogci5wcm92aWRlclxuICAgICAgICB9LFxuICAgICAgICBjdXN0b21lcl9maXJzdF9uYW1lOiBwW2QuRklSU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2xhc3RfbmFtZTogcFtkLkxBU1RfTkFNRV0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBwW2QuRU1BSUxdLFxuICAgICAgICBjdXN0b21lcl96aXBfY29kZTogcFtkLlpJUF9DT0RFXSxcbiAgICAgICAgY3VzdG9tZXJfY291bnRyeTogcFtkLkNPVU5UUlldLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogcFtkLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgbGluZV9pdGVtczogZi5saW5lX2l0ZW1zLFxuICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogZi5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgY2FuY2VsX2F0X2VuZDogITEsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiByXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IGF3YWl0IFBlKGEsIHkpIH07XG4gICAgfVxuICB9XG4pLCBvbyA9ICh0LCByKSA9PiB7XG4gIHZhciB1LCBsLCBwLCBtO1xuICBjb25zdCBlID0geyAuLi50IH0sIFtuLCAuLi5pXSA9ICgobCA9ICh1ID0gci5wYXllck5hbWUpID09IG51bGwgPyB2b2lkIDAgOiB1LnRyaW0oKSkgPT0gbnVsbCA/IHZvaWQgMCA6IGwuc3BsaXQoL1xccysvKSkgPz8gW10sIHMgPSBpLmpvaW4oXCIgXCIpIHx8IHZvaWQgMCwgYSA9IChtID0gKHAgPSByLnBheW1lbnRNZXRob2QpID09IG51bGwgPyB2b2lkIDAgOiBwLmJpbGxpbmdfZGV0YWlscykgPT0gbnVsbCA/IHZvaWQgMCA6IG0uYWRkcmVzcywgYyA9IHIuc2hpcHBpbmdBZGRyZXNzO1xuICByZXR1cm4gZVtkLkZJUlNUX05BTUVdID0gZVtkLkZJUlNUX05BTUVdIHx8IG4gfHwgXCJfT1BfVU5LTk9XTlwiLCBlW2QuTEFTVF9OQU1FXSA9IGVbZC5MQVNUX05BTUVdIHx8IHMgfHwgXCJfT1BfVU5LTk9XTlwiLCBlW2QuRU1BSUxdID0gZVtkLkVNQUlMXSB8fCByLnBheWVyRW1haWwgfHwgXCJvcF91bmZpbGxlZEBnZXRvcGVucGF5LmNvbVwiLCBlW2QuWklQX0NPREVdID0gZVtkLlpJUF9DT0RFXSB8fCAoYSA9PSBudWxsID8gdm9pZCAwIDogYS5wb3N0YWxfY29kZSkgfHwgKGMgPT0gbnVsbCA/IHZvaWQgMCA6IGMucG9zdGFsQ29kZSkgfHwgXCIwMDAwMFwiLCBlW2QuQ09VTlRSWV0gPSBlW2QuQ09VTlRSWV0gfHwgKGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuY291bnRyeSkgfHwgKGMgPT0gbnVsbCA/IHZvaWQgMCA6IGMuY291bnRyeSkgfHwgXCJVU1wiLCBPKFwiRmluYWwgZm9ybSBpbnB1dHM6XCIsIGUpLCBlO1xufSwgaW8gPSAodCwgciwgZSwgbikgPT4ge1xuICB0LnVwZGF0ZSh7XG4gICAgdG90YWw6IHtcbiAgICAgIGFtb3VudDogci5hbW91bnRBdG9tLFxuICAgICAgbGFiZWw6IFwiVG90YWxcIixcbiAgICAgIHBlbmRpbmc6IGVcbiAgICB9LFxuICAgIGN1cnJlbmN5OiByLmN1cnJlbmN5LFxuICAgIGFwcGxlUGF5OiBuXG4gIH0pO1xufSwgc28gPSAodCkgPT4ge1xuICBpZiAodC5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RoICE9PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Igb2NjdXJyZWQuXG5EZXRhaWxzOiBnb3QgJHt0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGh9IHJlcXVpcmVkIHVzZXIgYWN0aW9uc2ApO1xuICByZXR1cm4gUnIucGFyc2UodC5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0pO1xufSwgeyBsb2dfXzogViwgZXJyX186IFFlIH0gPSBrKFwicG9ja3l0LXBheXBhbFwiKSwgYW8gPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwicG9ja3l0XCIpLFxuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJwYXlwYWxcIilcbn0pLCBjbyA9IHokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgcGF5cGFsX2lmcmFtZV91cmw6IHokMS5zdHJpbmcoKSxcbiAgICB2ZXJpZnlfdG9rZW46IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSksIGxvID0gc2UoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogaVxuICB9KSA9PiB7XG4gICAgdmFyIHksIGg7XG4gICAgVihcIlJ1bm5pbmcgUG9ja3l0IFBheXBhbCBmbG93Li4uXCIpO1xuICAgIGNvbnN0IHMgPSB0LmFueUNkZUNvbm5lY3Rpb24sIGEgPSBhd2FpdCBXKHMpO1xuICAgIFYoXCJWZXJpZnlpbmcgQ1BNLi4uXCIpO1xuICAgIGNvbnN0IGMgPSBhby5wYXJzZShyKTtcbiAgICBWKFwi4pScIFZhbGlkYXRpbmcgbm9uLUNERSBmb3JtIGZpZWxkc1wiKTtcbiAgICBjb25zdCB1ID0gaSA9PSBudWxsID8gdm9pZCAwIDogaS5zZXR0aW5ncywgbCA9IGNlKFxuICAgICAgZSxcbiAgICAgIG4uZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgdSA9PSBudWxsID8gdm9pZCAwIDogdS5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICApLCBwID0gU24obCk7XG4gICAgVihgU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uIE1vZGU6ICR7YS5tb2RlfWApO1xuICAgIGNvbnN0IG0gPSBhLm1vZGUgIT09IFwic2V0dXBcIiwgZyA9IGF3YWl0IENlKHMsIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGMucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogYyxcbiAgICAgIHVzZV9wYXlfZmlyc3RfZmxvdzogbSxcbiAgICAgIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogbSA/IHtcbiAgICAgICAgLy8gVE9ETyBhZGQgY291cG9uIGFuZCBjYXJ0IGFkanVzdGVkIGxpbmUgaXRlbXMgbGF0ZXJcbiAgICAgICAgbGluZV9pdGVtczogYS5saW5lX2l0ZW1zLFxuICAgICAgICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IGEuYW1vdW50X3RvdGFsX2F0b21cbiAgICAgIH0gOiB2b2lkIDAsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgdXNlX3BheXBhbF9yZWRpcmVjdF9mbG93OiAhISgoeSA9IGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuc2V0dGluZ3MpICE9IG51bGwgJiYgeS51c2VSZWRpcmVjdEZsb3cpXG4gICAgICB9LFxuICAgICAgLi4ucFxuICAgIH0pO1xuICAgIGlmIChWKFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGcpLCAhZy5jaGVja291dF9hdHRlbXB0X2lkKVxuICAgICAgdGhyb3cgUWUoXCJDaGVja291dCBhdHRlbXB0IElEIG5vdCBmb3VuZCBpbiByZXNwb25zZTpcIiwgZyksIG5ldyBFcnJvcihcIkFuIGVycm9yIG9jY3VycmVkIGR1cmluZyBjaGVja291dCwgcGxlYXNlIHRyeSBhZ2FpbiB3aXRoIGFub3RoZXIgcGF5bWVudCBtZXRob2QuXCIpO1xuICAgIGNvbnN0IGYgPSBjby5wYXJzZShnLnJlcXVpcmVkX3VzZXJfYWN0aW9ucylbMF07XG4gICAgaWYgKChoID0gaSA9PSBudWxsID8gdm9pZCAwIDogaS5zZXR0aW5ncykgIT0gbnVsbCAmJiBoLnVzZVJlZGlyZWN0RmxvdylcbiAgICAgIHRocm93IHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gZi5wYXlwYWxfaWZyYW1lX3VybCwgYXdhaXQgX3QoMjAgKiAxZTMpLCBuZXcgRXJyb3IoXCJQYXlwYWwgZmxvdyB0aW1lZCBvdXQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICB7XG4gICAgICBWKFwiT3BlbmluZyBwYXlwYWwgaWZyYW1lLi4uXCIpO1xuICAgICAgY29uc3QgdyA9IGF3YWl0IGpuKFxuICAgICAgICBcIlBheVBhbFwiLFxuICAgICAgICBzLFxuICAgICAgICBmLnZlcmlmeV90b2tlbixcbiAgICAgICAgZi5wYXlwYWxfaWZyYW1lX3VybFxuICAgICAgKTtcbiAgICAgIFYoXCJQYXlwYWwgZmxvdyByZXN1bHRcIiwgdyk7XG4gICAgICBjb25zdCBQID0gUnQody5ocmVmKTtcbiAgICAgIFYoYENvbmZpcm1pbmcgcGF5bWVudCBmbG93IHVzaW5nIHZhdWx0IElEICR7UH1gKTtcbiAgICAgIGNvbnN0IEUgPSBhd2FpdCBIKHMsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiBhLnRva2VuLFxuICAgICAgICB0aGVpcl9wbV9pZDogUCxcbiAgICAgICAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbSA/IGcuY2hlY2tvdXRfYXR0ZW1wdF9pZCA6IHZvaWQgMFxuICAgICAgfSk7XG4gICAgICBpZiAoVihcIkNvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdFwiLCBFKSwgYS5tb2RlID09PSBcInNldHVwXCIpXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgICAgIHJlc3VsdDoge1xuICAgICAgICAgICAgcGF5bWVudF9tZXRob2RfaWQ6IEUucGF5bWVudF9tZXRob2RzWzBdLmlkXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgaWYgKCFFLnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlKVxuICAgICAgICB0aHJvdyBRZShcIkNoZWNrb3V0IGZhaWxlZCwgbm8gcGF5LWZpcnN0IHN1Y2Nlc3MgcmVzcG9uc2U6XCIsIEUpLCBuZXcgRXJyb3IoXCJDaGVja291dCBmYWlsZWQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG1vZGU6IFwiY2hlY2tvdXRcIixcbiAgICAgICAgcmVzdWx0OiBFLnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgICB9O1xuICAgIH1cbiAgfVxuKSwgVHQgPSAoe1xuICBnYXRld2F5OiB0LFxuICBnYXRld2F5TWVyY2hhbnRJZDogcixcbiAgbWVyY2hhbnROYW1lOiBlLFxuICBtZXJjaGFudElkOiBuLFxuICBpbml0aWFsUHJldmlldzogaSxcbiAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogc1xufSkgPT4ge1xuICB2YXIgcCwgbTtcbiAgY29uc3QgYSA9ICgocCA9IHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogcC5hbW91bnRBdG9tKSA/PyAoaSA9PSBudWxsID8gdm9pZCAwIDogaS5hbW91bnRBdG9tKSA/PyAwLCBjID0gTWF0aC5tYXgoYSAvIDEwMCwgMCksIHUgPSAoKChtID0gcyA9PSBudWxsID8gdm9pZCAwIDogcy5hbW91bnQpID09IG51bGwgPyB2b2lkIDAgOiBtLmN1cnJlbmN5KSA/PyAoaSA9PSBudWxsID8gdm9pZCAwIDogaS5jdXJyZW5jeSkgPz8gXCJVU0RcIikudG9VcHBlckNhc2UoKSwgbCA9IHtcbiAgICBhcGlWZXJzaW9uOiAyLFxuICAgIGFwaVZlcnNpb25NaW5vcjogMCxcbiAgICBhbGxvd2VkUGF5bWVudE1ldGhvZHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJDQVJEXCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBhbGxvd2VkQXV0aE1ldGhvZHM6IFtcIlBBTl9PTkxZXCIsIFwiQ1JZUFRPR1JBTV8zRFNcIl0sXG4gICAgICAgICAgYWxsb3dlZENhcmROZXR3b3JrczogW1wiQU1FWFwiLCBcIkRJU0NPVkVSXCIsIFwiSU5URVJBQ1wiLCBcIkpDQlwiLCBcIk1BU1RFUkNBUkRcIiwgXCJWSVNBXCJdLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUmVxdWlyZWQ6ICEwLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUGFyYW1ldGVyczoge1xuICAgICAgICAgICAgZm9ybWF0OiBcIkZVTExcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWxsb3dDcmVkaXRDYXJkczogITAsXG4gICAgICAgICAgYWxsb3dQcmVwYWlkQ2FyZHM6ICEwXG4gICAgICAgIH0sXG4gICAgICAgIHRva2VuaXphdGlvblNwZWNpZmljYXRpb246IHtcbiAgICAgICAgICB0eXBlOiBcIlBBWU1FTlRfR0FURVdBWVwiLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIGdhdGV3YXk6IHQsXG4gICAgICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogclxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIF0sXG4gICAgZW1haWxSZXF1aXJlZDogITAsXG4gICAgbWVyY2hhbnRJbmZvOiB7XG4gICAgICAvLyBUT0RPOiBhc2FwIGZvciBwcm9kIC0gYWlyd2FsbGV4IGhhcyBubyBkb2NzIGZvciB0aGlzXG4gICAgICAvLyBodHRwczovL2RldmVsb3BlcnMuZ29vZ2xlLmNvbS9wYXkvYXBpL3dlYi9yZWZlcmVuY2UvcmVxdWVzdC1vYmplY3RzI01lcmNoYW50SW5mb1xuICAgICAgbWVyY2hhbnRJZDogbiA/PyBcIlwiLFxuICAgICAgLy8gQkNSMkRONFRYN0kzRlJSSlxuICAgICAgbWVyY2hhbnROYW1lOiBlXG4gICAgfSxcbiAgICB0cmFuc2FjdGlvbkluZm86IHtcbiAgICAgIGNvdW50cnlDb2RlOiBcIlVTXCIsXG4gICAgICBjdXJyZW5jeUNvZGU6IHUsXG4gICAgICB0b3RhbFByaWNlU3RhdHVzOiBzICE9IG51bGwgJiYgcy5wZW5kaW5nID8gXCJFU1RJTUFURURcIiA6IFwiRklOQUxcIixcbiAgICAgIHRvdGFsUHJpY2U6IGMudG9GaXhlZCgyKVxuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHMgIT0gbnVsbCAmJiBzLmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0ID8geyAuLi5sLCAuLi5zLmdvb2dsZVBheVBheW1lbnRSZXF1ZXN0IH0gOiBsO1xufSwgdW8gPSAoKSA9PiBuZXcgUHJvbWlzZSgodCwgcikgPT4ge1xuICBjb25zdCBlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgZS5zcmMgPSBcImh0dHBzOi8vcGF5Lmdvb2dsZS5jb20vZ3AvcC9qcy9wYXkuanNcIiwgZS5hc3luYyA9ICEwLCBlLm9ubG9hZCA9ICgpID0+IHQoKSwgZS5vbmVycm9yID0gKCkgPT4gcihuZXcgRXJyb3IoXCJGYWlsZWQgdG8gbG9hZCBHb29nbGUgUGF5IFNES1wiKSksIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZSk7XG59KSwgcG8gPSAodCkgPT4ge1xuICBjb25zdCByID0gdC5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoZSkgPT4gZS50eXBlID09PSBcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIik7XG4gIHJldHVybiByID8gaHQucGFyc2UocikgOiBudWxsO1xufSwgZm8gPSAodCwgcikgPT4ge1xuICB2YXIgaSwgcywgYSwgYztcbiAgY29uc3QgZSA9IHsgLi4udCB9LCBuID0gKHMgPSAoaSA9IHIucGF5bWVudE1ldGhvZERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBpLmluZm8pID09IG51bGwgPyB2b2lkIDAgOiBzLmJpbGxpbmdBZGRyZXNzO1xuICBpZiAobikge1xuICAgIGNvbnN0IFt1LCAuLi5sXSA9ICgoYyA9IChhID0gbi5uYW1lKSA9PSBudWxsID8gdm9pZCAwIDogYS50cmltKCkpID09IG51bGwgPyB2b2lkIDAgOiBjLnNwbGl0KC9cXHMrLykpID8/IFtdLCBwID0gbC5qb2luKFwiIFwiKSB8fCB2b2lkIDA7XG4gICAgZVtkLkVNQUlMXSA9IGVbZC5FTUFJTF0gfHwgci5lbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCIsIGVbZC5DT1VOVFJZXSA9IGVbZC5DT1VOVFJZXSB8fCBuLmNvdW50cnlDb2RlIHx8IFwiVVNcIiwgZVtkLkFERFJFU1NdID0gZVtkLkFERFJFU1NdIHx8IG4uYWRkcmVzczEgfHwgXCJcIiwgZVtkLkNJVFldID0gZVtkLkNJVFldIHx8IG4ubG9jYWxpdHkgfHwgXCJcIiwgZVtkLlpJUF9DT0RFXSA9IGVbZC5aSVBfQ09ERV0gfHwgbi5wb3N0YWxDb2RlIHx8IFwiMDAwMDBcIiwgZVtkLlNUQVRFXSA9IGVbZC5TVEFURV0gfHwgbi5hZG1pbmlzdHJhdGl2ZUFyZWEgfHwgXCJcIiwgZVtkLkZJUlNUX05BTUVdID0gZVtkLkZJUlNUX05BTUVdIHx8IHUgfHwgXCJfT1BfVU5LTk9XTlwiLCBlW2QuTEFTVF9OQU1FXSA9IGVbZC5MQVNUX05BTUVdIHx8IHAgfHwgXCJfT1BfVU5LTk9XTlwiO1xuICB9XG4gIHJldHVybiBlO1xufSwgeyBsb2dfXzogTSwgZXJyX186IHRlIH0gPSBrKFwiYXd4LWdvb2dsZS1wYXlcIik7XG5sZXQgUmUgPSBudWxsO1xuY29uc3QgTXQgPSAodCkgPT4gdCA9PT0gZHQgfHwgdCA9PT0gd2luZG93LmxvY2F0aW9uLm9yaWdpbiA/IFwiUFJPRFVDVElPTlwiIDogXCJURVNUXCIsIER0ID0gKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IE10KHQpO1xuICByZXR1cm4gUmUgPT09IG51bGwgJiYgKFJlID0gbmV3IHdpbmRvdy5nb29nbGUucGF5bWVudHMuYXBpLlBheW1lbnRzQ2xpZW50KHtcbiAgICBlbnZpcm9ubWVudDogZSxcbiAgICBtZXJjaGFudEluZm86IHIubWVyY2hhbnRJbmZvXG4gIH0pKSwgUmU7XG59LCBGdCA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6JDEuc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KSwgbW8gPSBBZShcbiAgYXN5bmMgKHsgY29udGV4dDogdCwgZm9ybUNhbGxiYWNrczogciB9KSA9PiB7XG4gICAgdmFyIGEsIGM7XG4gICAgY29uc3QgZSA9IGFlKHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgRnQpO1xuICAgIGlmICghZSlcbiAgICAgIHJldHVybiB7IGlzQXZhaWxhYmxlOiAhMSwgaXNMb2FkaW5nOiAhMSwgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9IH07XG4gICAgTShcIkdvb2dsZSBQYXkgQ1BNXCIsIGUpO1xuICAgIGNvbnN0IG4gPSBlLm1ldGFkYXRhO1xuICAgIGlmICghbi5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHJldHVybiB0ZShcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIiksIHsgaXNBdmFpbGFibGU6ICExLCBpc0xvYWRpbmc6ICExLCBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH0gfTtcbiAgICBpZiAoTShcIkxvYWRpbmcgR29vZ2xlIFBheSBTREsuLi5cIiksIGF3YWl0IHVvKCksICEoKGMgPSAoYSA9IHdpbmRvdy5nb29nbGUpID09IG51bGwgPyB2b2lkIDAgOiBhLnBheW1lbnRzKSAhPSBudWxsICYmIGMuYXBpKSlcbiAgICAgIHJldHVybiB0ZShcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIiksIHsgaXNBdmFpbGFibGU6ICExLCBpc0xvYWRpbmc6ICExLCBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH0gfTtcbiAgICBpZiAoTXQodC5iYXNlVXJsKSA9PT0gXCJQUk9EVUNUSU9OXCIgJiYgIW4uZ29vZ2xlX3BheV9tZXJjaGFudF9pZClcbiAgICAgIHJldHVybiB0ZShcIkdvb2dsZSBQYXkgbWVyY2hhbnQgSUQgaXMgcmVxdWlyZWQgZm9yIHByb2R1Y3Rpb24gZW52aXJvbm1lbnRcIiksIHsgaXNBdmFpbGFibGU6ICExLCBpc0xvYWRpbmc6ICExLCBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH0gfTtcbiAgICBNKFwiR29vZ2xlIFBheSBTREsgbG9hZGVkXCIsIHdpbmRvdy5nb29nbGUucGF5bWVudHMpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB1ID0gVHQoe1xuICAgICAgICBnYXRld2F5OiBcImFpcndhbGxleFwiLFxuICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogbi5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgICAgbWVyY2hhbnROYW1lOiBuLnByb2Nlc3Nvcl9hY2NvdW50X25hbWUsXG4gICAgICAgIG1lcmNoYW50SWQ6IG4uZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgICBpbml0aWFsUHJldmlldzogdm9pZCAwXG4gICAgICB9KSwgeyByZXN1bHQ6IGwgfSA9IGF3YWl0IER0KHQuYmFzZVVybCwgdSkuaXNSZWFkeVRvUGF5KFxuICAgICAgICB1XG4gICAgICApO1xuICAgICAgaWYgKCFsKVxuICAgICAgICByZXR1cm4gTShcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpLCB7IGlzQXZhaWxhYmxlOiAhMSwgaXNMb2FkaW5nOiAhMSwgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICAgIH0gfTtcbiAgICB9IGNhdGNoICh1KSB7XG4gICAgICByZXR1cm4gdGUoXCJFcnJvciBjaGVja2luZyBHb29nbGUgUGF5IGF2YWlsYWJpbGl0eVwiLCB1KSwgeyBpc0F2YWlsYWJsZTogITEsIGlzTG9hZGluZzogITEsIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfSB9O1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHUpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBMLmFpcndhbGxleEdvb2dsZVBheS5ydW4oe1xuICAgICAgICAgICAgY29udGV4dDogdCxcbiAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZSxcbiAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IG9lKHQuZm9ybURpdiksXG4gICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiByLFxuICAgICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwLFxuICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiB1ID8/IHt9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gY2F0Y2ggKGwpIHtcbiAgICAgICAgICB0ZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBsKSwgci5nZXQub25DaGVja291dEVycm9yKChsID09IG51bGwgPyB2b2lkIDAgOiBsLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cbiksIHlvID0gc2UoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgIGN1c3RvbVBhcmFtczogaVxuICB9KSA9PiB7XG4gICAgdmFyIG0sIGcsIGYsIHksIGgsIHcsIFA7XG4gICAgTShcIlN0YXJ0aW5nIEdvb2dsZSBQYXkgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBzID0gYWUodC5jaGVja291dFBheW1lbnRNZXRob2RzLCBGdCksIGEgPSB0LmFueUNkZUNvbm5lY3Rpb24sIGMgPSBhd2FpdCBXKGEpLCB1ID0gcy5tZXRhZGF0YTtcbiAgICBpZiAoIXUucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIGNvbnN0IGwgPSBUdCh7XG4gICAgICBnYXRld2F5OiBcImFpcndhbGxleFwiLFxuICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IHUucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICBtZXJjaGFudE5hbWU6IHUucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgIG1lcmNoYW50SWQ6IHUuZ29vZ2xlX3BheV9tZXJjaGFudF9pZCA/PyBcIlwiLFxuICAgICAgaW5pdGlhbFByZXZpZXc6IGF3YWl0IGtlKFxuICAgICAgICBhLFxuICAgICAgICBjLnRva2VuLFxuICAgICAgICBjLm1vZGUgPT09IFwic2V0dXBcIixcbiAgICAgICAgdm9pZCAwXG4gICAgICApLFxuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogaSA9PSBudWxsID8gdm9pZCAwIDogaS5vdmVycmlkZVBheW1lbnRSZXF1ZXN0XG4gICAgfSksIHAgPSBEdCh0LmJhc2VVcmwsIGwpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBFID0gYXdhaXQgcC5sb2FkUGF5bWVudERhdGEobCk7XG4gICAgICBNKFwiR29vZ2xlIFBheSBQYXltZW50IGRhdGFcIiwgRSk7XG4gICAgICBjb25zdCBRID0gZm8oZSwgRSksIEEgPSBjZShcbiAgICAgICAgUSxcbiAgICAgICAgbi5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICAgIGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgICApLCBYID0gKGcgPSAobSA9IEUucGF5bWVudE1ldGhvZERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBtLnRva2VuaXphdGlvbkRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBnLnRva2VuO1xuICAgICAgaWYgKCFYKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IHRva2VuIHJlY2VpdmVkIGZyb20gR29vZ2xlIFBheVwiKTtcbiAgICAgIGNvbnN0IHBlID0gYXdhaXQgQ2UoYSwge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiByLnByb3ZpZGVyLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogcixcbiAgICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBBW2QuRU1BSUxdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogQVtkLkZJUlNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBBW2QuTEFTVF9OQU1FXSxcbiAgICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICAgICAgICBwb3N0YWxfY29kZTogQVtkLlpJUF9DT0RFXSxcbiAgICAgICAgICBjb3VudHJ5X2NvZGU6IEFbZC5DT1VOVFJZXVxuICAgICAgICB9XG4gICAgICB9KSwgZWUgPSBwbyhwZSk7XG4gICAgICBNKFwiU3RhcnQgZmxvdyBuZXh0IGFjdGlvbnNcIiwgZWUpO1xuICAgICAgY29uc3QgJCA9IGF3YWl0IEgoYSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGMudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IHIucHJvdmlkZXIsXG4gICAgICAgICAgLy8gR29vZ2xlUGF5J3MgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW4gcHJvdmlkZWQgdG8gdmVyaWZ5IHRoZSBjb25zZW50IGZpcnN0XG4gICAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGVlID09IG51bGwgPyB2b2lkIDAgOiBlZS5jb25zZW50X2lkLFxuICAgICAgICAgIGFpcndhbGxleF9wYXltZW50X21ldGhvZF9kYXRhOiB7XG4gICAgICAgICAgICB0eXBlOiBcImdvb2dsZXBheVwiLFxuICAgICAgICAgICAgZ29vZ2xlcGF5OiB7XG4gICAgICAgICAgICAgIHBheW1lbnRfZGF0YV90eXBlOiBcImVuY3J5cHRlZF9wYXltZW50X3Rva2VuXCIsXG4gICAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBYXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIE0oXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCAkKTtcbiAgICAgIGxldCBEID0gKHkgPSAoZiA9ICQucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogZlswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IHkuaWQ7XG4gICAgICBjb25zdCBKID0gKGggPSAkLnJlcXVpcmVkX3VzZXJfYWN0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IGguZmluZChcbiAgICAgICAgKFUpID0+IFUudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICAgICk7XG4gICAgICBpZiAoSiAmJiBKLnJlZGlyZWN0X3VybCkge1xuICAgICAgICBNKFwiM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgSik7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzOiBVIH0gPSBhd2FpdCBJZSh7XG4gICAgICAgICAgdXJsOiBKLnJlZGlyZWN0X3VybCxcbiAgICAgICAgICBiYXNlVXJsOiB0LmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChNKGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtVfV1gKSwgVSA9PT0gTi5DQU5DRUxMRUQpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gICAgICAgIGlmIChVID09PSBOLkZBSUxVUkUpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICB9XG4gICAgICBpZiAoSiAmJiAhRCkge1xuICAgICAgICBjb25zdCBVID0gYXdhaXQgSChhLCB7XG4gICAgICAgICAgc2VjdXJlX3Rva2VuOiBjLnRva2VuLFxuICAgICAgICAgIHRoZWlyX3BtX2lkOiBKLnRoZWlyX3BtX2lkLFxuICAgICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogci5wcm92aWRlcixcbiAgICAgICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBKLmNvbnNlbnRfaWRcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBNKFwiWzJuZF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgVSksIEQgPSAoUCA9ICh3ID0gVS5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiB3WzBdKSA9PSBudWxsID8gdm9pZCAwIDogUC5pZDtcbiAgICAgIH1cbiAgICAgIGlmICghRClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgICBpZiAoYy5tb2RlID09PSBcInNldHVwXCIpXG4gICAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiB7IHBheW1lbnRfbWV0aG9kX2lkOiBEIH0gfTtcbiAgICAgIHtcbiAgICAgICAgTShcIlN0YXJ0aW5nIG9uZS10aW1lIHBheW1lbnQgZmxvdy4uLlwiKTtcbiAgICAgICAgY29uc3QgVSA9IHtcbiAgICAgICAgICBzZWN1cmVfdG9rZW46IGMudG9rZW4sXG4gICAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgICAgcHJvdmlkZXJfdHlwZTogci5wcm92aWRlclxuICAgICAgICAgIH0sXG4gICAgICAgICAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogITAsXG4gICAgICAgICAgdXNlX2NvbmZpcm1lZF9wbV9pZDogRCxcbiAgICAgICAgICBsaW5lX2l0ZW1zOiBjLmxpbmVfaXRlbXMsXG4gICAgICAgICAgdG90YWxfYW1vdW50X2F0b206IGMuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgICAgY2FuY2VsX2F0X2VuZDogITEsXG4gICAgICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IHIsXG4gICAgICAgICAgY3VzdG9tZXJfZW1haWw6IEFbZC5FTUFJTF0sXG4gICAgICAgICAgY3VzdG9tZXJfemlwX2NvZGU6IEFbZC5aSVBfQ09ERV0sXG4gICAgICAgICAgY3VzdG9tZXJfY291bnRyeTogQVtkLkNPVU5UUlldLFxuICAgICAgICAgIHByb21vdGlvbl9jb2RlOiBBW2QuUFJPTU9USU9OX0NPREVdLFxuICAgICAgICAgIGN1c3RvbWVyX2ZpcnN0X25hbWU6IEFbZC5GSVJTVF9OQU1FXSxcbiAgICAgICAgICBjdXN0b21lcl9sYXN0X25hbWU6IEFbZC5MQVNUX05BTUVdXG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCBQZShhLCBVKSB9O1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKEUpIHtcbiAgICAgIHRocm93IHRlKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIEUpLCBuZXcgRXJyb3IoKEUgPT0gbnVsbCA/IHZvaWQgMCA6IEUubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgIH1cbiAgfVxuKSwgaG8gPSAoKSA9PiBuZXcgUHJvbWlzZSgodCwgcikgPT4ge1xuICBjb25zdCBlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInNjcmlwdFwiKTtcbiAgZS5zcmMgPSBcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbS9qc2FwaS8xLmxhdGVzdC9hcHBsZS1wYXktc2RrLmpzXCIsIGUuY3Jvc3NPcmlnaW4gPSBcImFub255bW91c1wiLCBlLmFzeW5jID0gITAsIGUub25sb2FkID0gKCkgPT4gdCgpLCBlLm9uZXJyb3IgPSAoKSA9PiByKG5ldyBFcnJvcihcIkZhaWxlZCB0byBsb2FkIEFwcGxlIFBheSBTREtcIikpLCBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpO1xufSksIF9vID0gKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IHIudG9rZW4ucGF5bWVudE1ldGhvZC5iaWxsaW5nQ29udGFjdCwgbiA9IHIuYmlsbGluZ0NvbnRhY3QsIGkgPSByLnNoaXBwaW5nQ29udGFjdCwgcyA9IHsgLi4udCB9O1xuICByZXR1cm4gKGUgfHwgbiB8fCBpKSAmJiAoc1tkLkVNQUlMXSA9IHNbZC5FTUFJTF0gfHwgKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuZW1haWxBZGRyZXNzKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5lbWFpbEFkZHJlc3MpIHx8IChpID09IG51bGwgPyB2b2lkIDAgOiBpLmVtYWlsQWRkcmVzcykgfHwgXCJvcF91bmZpbGxlZEBlbWFpbC5jb21cIiwgc1tkLkNPVU5UUlldID0gc1tkLkNPVU5UUlldIHx8IChlID09IG51bGwgPyB2b2lkIDAgOiBlLmNvdW50cnlDb2RlKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5jb3VudHJ5Q29kZSkgfHwgKGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuY291bnRyeUNvZGUpIHx8IFwiVVNcIiwgc1tkLlpJUF9DT0RFXSA9IHNbZC5aSVBfQ09ERV0gfHwgKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUucG9zdGFsQ29kZSkgfHwgKG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4ucG9zdGFsQ29kZSkgfHwgKGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkucG9zdGFsQ29kZSkgfHwgXCIwMDAwMFwiLCBzW2QuRklSU1RfTkFNRV0gPSBzW2QuRklSU1RfTkFNRV0gfHwgKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuZ2l2ZW5OYW1lKSB8fCAobiA9PSBudWxsID8gdm9pZCAwIDogbi5naXZlbk5hbWUpIHx8IChpID09IG51bGwgPyB2b2lkIDAgOiBpLmdpdmVuTmFtZSkgfHwgXCJfT1BfVU5LTk9XTlwiLCBzW2QuTEFTVF9OQU1FXSA9IHNbZC5MQVNUX05BTUVdIHx8IChlID09IG51bGwgPyB2b2lkIDAgOiBlLmZhbWlseU5hbWUpIHx8IChuID09IG51bGwgPyB2b2lkIDAgOiBuLmZhbWlseU5hbWUpIHx8IChpID09IG51bGwgPyB2b2lkIDAgOiBpLmZhbWlseU5hbWUpIHx8IFwiX09QX1VOS05PV05cIiksIHM7XG59LCBnbyA9IHokMS5vYmplY3Qoe1xuICBkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBtZXNzYWdlSGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gICAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLmFueSgpKSxcbiAgICBtZXNzYWdlVHlwZTogeiQxLnN0cmluZygpLFxuICAgIG1lc3NhZ2VCb2R5OiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKVxuICB9KSxcbiAgb3JpZ2luOiB6JDEubGl0ZXJhbChcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbVwiKVxufSksIHdvID0gKHQpID0+IGdvLnNhZmVQYXJzZSh0KS5kYXRhLCBibyA9ICh0KSA9PiB7XG4gIGNvbnN0IHIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG4gIHJldHVybiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICBcIm1lc3NhZ2VcIixcbiAgICAoZSkgPT4ge1xuICAgICAgdmFyIGk7XG4gICAgICBjb25zdCBuID0gd28oZSk7XG4gICAgICAoKGkgPSBuID09IG51bGwgPyB2b2lkIDAgOiBuLmRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBpLm1lc3NhZ2VUeXBlKSA9PT0gXCJ3aW5kb3djbG9zaW5nXCIgJiYgKHQoKSwgci5hYm9ydCgpKTtcbiAgICB9LFxuICAgIHtcbiAgICAgIHNpZ25hbDogci5zaWduYWxcbiAgICB9XG4gICksIHtcbiAgICBjbGVhbnVwQ2FuY2VsTGlzdGVuZXI6ICgpID0+IHIuYWJvcnQoKVxuICB9O1xufSwgeyBsb2dfXzogaGUgfSA9IGsoXCJhd3gtYXBwbGUtcGF5XCIpO1xuYXN5bmMgZnVuY3Rpb24gdm8odCwgcikge1xuICB0cnkge1xuICAgIGNvbnN0IG4gPSAoYXdhaXQgQ2Uoci5jb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiByLmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiByLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogci5ub25DZGVGb3JtSW5wdXRzW2QuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHIubm9uQ2RlRm9ybUlucHV0c1tkLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogci5ub25DZGVGb3JtSW5wdXRzW2QuTEFTVF9OQU1FXSxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9zZXNzaW9uOiB7XG4gICAgICAgICAgdmFsaWRhdGlvbl91cmw6IHQudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiByLnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKS5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0sIGkgPSBuLnBheW1lbnRfc2Vzc2lvbiwgcyA9IG4uY29uc2VudF9pZDtcbiAgICBpZiAoIWkpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXNzaW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgaWYgKCFzKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29uc2VudCBJRCByZWNlaXZlZCBmcm9tIHBheW1lbnQgZmxvd1wiKTtcbiAgICByZXR1cm4gci5zZXNzaW9uLmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKGkpLCBzO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgci5zZXNzaW9uLmFib3J0KCksIGU7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIEVvKHQsIHIpIHtcbiAgdmFyIGksIHM7XG4gIGlmICghdC5yZWRpcmVjdF91cmwpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcmVkaXJlY3QgVVJMIGZvdW5kXCIpO1xuICBoZShcIjNEUyBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIsIHQpO1xuICBjb25zdCB7IHN0YXR1czogZSB9ID0gYXdhaXQgSWUoe1xuICAgIHVybDogdC5yZWRpcmVjdF91cmwsXG4gICAgYmFzZVVybDogci5iYXNlVXJsXG4gIH0pO1xuICBpZiAoaGUoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke2V9XWApLCBlID09PSBOLkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKGUgPT09IE4uRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgY29uc3QgbiA9IGF3YWl0IEgoci5jb25uZWN0aW9uLCB7XG4gICAgc2VjdXJlX3Rva2VuOiByLnByZWZpbGwudG9rZW4sXG4gICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICB0aGVpcl9wbV9pZDogdC50aGVpcl9wbV9pZCxcbiAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiB0LmNvbnNlbnRfaWQsXG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiByLmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBoZShcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIG4pLCAocyA9IChpID0gbi5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiBpWzBdKSA9PSBudWxsID8gdm9pZCAwIDogcy5pZDtcbn1cbmFzeW5jIGZ1bmN0aW9uIFNvKHQsIHIsIGUpIHtcbiAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IGF3YWl0IFBlKGUuY29ubmVjdGlvbiwge1xuICAgIHNlY3VyZV90b2tlbjogZS5wcmVmaWxsLnRva2VuLFxuICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgIHByb3ZpZGVyX3R5cGU6IGUuY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyXG4gICAgfSxcbiAgICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiAhMCxcbiAgICB1c2VfY29uZmlybWVkX3BtX2lkOiB0LFxuICAgIGxpbmVfaXRlbXM6IGUucHJlZmlsbC5saW5lX2l0ZW1zLFxuICAgIHRvdGFsX2Ftb3VudF9hdG9tOiBlLnByZWZpbGwuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgY2FuY2VsX2F0X2VuZDogITEsXG4gICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IGUuY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgIGN1c3RvbWVyX2VtYWlsOiByW2QuRU1BSUxdLFxuICAgIGN1c3RvbWVyX3ppcF9jb2RlOiByW2QuWklQX0NPREVdLFxuICAgIGN1c3RvbWVyX2NvdW50cnk6IHJbZC5DT1VOVFJZXSxcbiAgICBwcm9tb3Rpb25fY29kZTogcltkLlBST01PVElPTl9DT0RFXVxuICB9KSB9O1xufVxuYXN5bmMgZnVuY3Rpb24gQ28odCwgciwgZSkge1xuICB2YXIgbiwgaSwgcztcbiAgdHJ5IHtcbiAgICBjb25zdCBhID0gdC5wYXltZW50LCBjID0gX28oci5ub25DZGVGb3JtSW5wdXRzLCBhKSwgdSA9IGNlKFxuICAgICAgYyxcbiAgICAgIHIuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICByLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICk7XG4gICAgYXdhaXQgdm4oci5jb25uZWN0aW9uLCB7XG4gICAgICBlbWFpbDogdVtkLkVNQUlMXSxcbiAgICAgIGZpcnN0X25hbWU6IHVbZC5GSVJTVF9OQU1FXSxcbiAgICAgIGxhc3RfbmFtZTogdVtkLkxBU1RfTkFNRV0sXG4gICAgICB6aXBfY29kZTogdVtkLlpJUF9DT0RFXSxcbiAgICAgIGNvdW50cnk6IHVbZC5DT1VOVFJZXSxcbiAgICAgIHVwZGF0ZV9wcm9jZXNzb3JfY3VzdG9tZXI6ICEwXG4gICAgfSk7XG4gICAgY29uc3QgbCA9IGF3YWl0IEgoci5jb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHIucHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiByLmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGUsXG4gICAgICAgIGFpcndhbGxleF9wYXltZW50X21ldGhvZF9kYXRhOiB7XG4gICAgICAgICAgdHlwZTogXCJhcHBsZXBheVwiLFxuICAgICAgICAgIGFwcGxlcGF5OiB7XG4gICAgICAgICAgICBwYXltZW50X2RhdGFfdHlwZTogXCJlbmNyeXB0ZWRfcGF5bWVudF90b2tlblwiLFxuICAgICAgICAgICAgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW46IEpTT04uc3RyaW5naWZ5KGEudG9rZW4pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgaGUoXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCBsKTtcbiAgICBsZXQgcCA9IChpID0gKG4gPSBsLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IG5bMF0pID09IG51bGwgPyB2b2lkIDAgOiBpLmlkO1xuICAgIGNvbnN0IG0gPSAocyA9IGwucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogcy5maW5kKFxuICAgICAgKGYpID0+IGYudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApO1xuICAgIGlmIChtICE9IG51bGwgJiYgbS5yZWRpcmVjdF91cmwgJiYgbS5jb25zZW50X2lkICYmIG0udGhlaXJfcG1faWQgJiYgKHAgPSBhd2FpdCBFbyhtLCByKSksICFwKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgY29uc3QgZyA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19TVUNDRVNTXG4gICAgfTtcbiAgICByZXR1cm4gci5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChnKSwgci5pc1NldHVwTW9kZSA/IHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IHsgcGF5bWVudF9tZXRob2RfaWQ6IHAgfSB9IDogYXdhaXQgU28ocCwgdSwgcik7XG4gIH0gY2F0Y2ggKGEpIHtcbiAgICBjb25zdCBjID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX0ZBSUxVUkVcbiAgICB9O1xuICAgIHRocm93IHIuc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQoYyksIGE7XG4gIH1cbn1cbmNvbnN0IHsgbG9nX186IHosIGVycl9fOiBGZSB9ID0gayhcImF3eC1hcHBsZS1wYXlcIiksIEx0ID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pLCBrbyA9IEFlKFxuICBhc3luYyAoeyBjb250ZXh0OiB0LCBmb3JtQ2FsbGJhY2tzOiByIH0pID0+IHtcbiAgICBjb25zdCBlID0gYWUodC5jaGVja291dFBheW1lbnRNZXRob2RzLCBMdCk7XG4gICAgaWYgKCFlKVxuICAgICAgcmV0dXJuIHsgaXNBdmFpbGFibGU6ICExLCBpc0xvYWRpbmc6ICExLCBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH0gfTtcbiAgICB6KFwiTG9hZGluZyBBcHBsZSBQYXkgU0RLLi4uXCIpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBobygpLCB6KFwiQXBwbGUgUGF5IFNESyBsb2FkZWQgc3VjY2Vzc2Z1bGx5XCIpO1xuICAgIH0gY2F0Y2ggKHApIHtcbiAgICAgIHJldHVybiBGZShcIkZhaWxlZCB0byBsb2FkIEFwcGxlIFBheSBTREtcIiwgcCksIHsgaXNBdmFpbGFibGU6ICExLCBpc0xvYWRpbmc6ICExLCBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH0gfTtcbiAgICB9XG4gICAgaWYgKCF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4geihcIkFwcGxlIFBheSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlL2Jyb3dzZXJcIiksIHsgaXNBdmFpbGFibGU6ICExLCBpc0xvYWRpbmc6ICExLCBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH0gfTtcbiAgICBpZiAoeihcIkFwcGxlIFBheSBMb2FkZWRcIiksICFhd2FpdCBBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4geihcIk5vIGFjdGl2ZSBjYXJkcyBhdmFpbGFibGUgZm9yIEFwcGxlIFBheVwiKSwgeyBpc0F2YWlsYWJsZTogITEsIGlzTG9hZGluZzogITEsIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfSB9O1xuICAgIGNvbnN0IGkgPSB0LmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBXKGkpLCBhID0gcy5tb2RlID09PSBcInNldHVwXCIsIGMgPSBhd2FpdCBrZShpLCBzLnRva2VuLCBhLCB2b2lkIDApLCB1ID0gZS5tZXRhZGF0YTtcbiAgICBpZiAoeihcInByb2Nlc3NvckFjY291bnRcIiwgdSksICF1LnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHApID0+IHtcbiAgICAgICAgdmFyIG07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgTC5haXJ3YWxsZXhBcHBsZVBheS5ydW4oe1xuICAgICAgICAgICAgY29udGV4dDogdCxcbiAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZSxcbiAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IG9lKHQuZm9ybURpdiksXG4gICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiByLFxuICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgICAgIGlzU2V0dXBNb2RlOiBhLFxuICAgICAgICAgICAgICBwcmVmaWxsOiBzLFxuICAgICAgICAgICAgICBpbml0aWFsUHJldmlldzogKChtID0gcCA9PSBudWxsID8gdm9pZCAwIDogcC5vdmVycmlkZVBheW1lbnRSZXF1ZXN0KSA9PSBudWxsID8gdm9pZCAwIDogbS5hbW91bnQpID8/IGMsXG4gICAgICAgICAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHAgPT0gbnVsbCA/IHZvaWQgMCA6IHAub3ZlcnJpZGVQYXltZW50UmVxdWVzdFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoIChnKSB7XG4gICAgICAgICAgRmUoXCJBcHBsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBnKSwgci5nZXQub25DaGVja291dEVycm9yKChnID09IG51bGwgPyB2b2lkIDAgOiBnLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cbiksIFBvID0gc2UoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICBjdXN0b21QYXJhbXM6IG4sXG4gICAgZm9ybUNhbGxiYWNrczogaVxuICB9KSA9PiB7XG4gICAgdmFyIEUsIFE7XG4gICAgY29uc3QgcyA9IGFlKHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgTHQpLCB7IGluaXRpYWxQcmV2aWV3OiBhLCBpc1NldHVwTW9kZTogYywgcHJlZmlsbDogdSwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogbCB9ID0gbiwgcCA9ICgoKEUgPSBsID09IG51bGwgPyB2b2lkIDAgOiBsLmFtb3VudCkgPT0gbnVsbCA/IHZvaWQgMCA6IEUuY3VycmVuY3kpID8/IGEuY3VycmVuY3kgPz8gXCJVU0RcIikudG9VcHBlckNhc2UoKSwgZyA9ICgoKChRID0gbCA9PSBudWxsID8gdm9pZCAwIDogbC5hbW91bnQpID09IG51bGwgPyB2b2lkIDAgOiBRLmFtb3VudEF0b20pID8/IGEuYW1vdW50QXRvbSA/PyAwKSAvIDEwMCkudG9GaXhlZCgyKSwgZiA9IHtcbiAgICAgIGxhYmVsOiAobCA9PSBudWxsID8gdm9pZCAwIDogbC5sYWJlbCkgPz8gXCJUb3RhbFwiLFxuICAgICAgdHlwZTogbCAhPSBudWxsICYmIGwucGVuZGluZyA/IFwicGVuZGluZ1wiIDogXCJmaW5hbFwiLFxuICAgICAgYW1vdW50OiBnXG4gICAgfSwgeSA9IHtcbiAgICAgIGNvdW50cnlDb2RlOiBcIlVTXCIsXG4gICAgICBjdXJyZW5jeUNvZGU6IHAsXG4gICAgICByZXF1aXJlZEJpbGxpbmdDb250YWN0RmllbGRzOiBbXCJlbWFpbFwiLCBcInBvc3RhbEFkZHJlc3NcIiwgXCJuYW1lXCJdLFxuICAgICAgcmVxdWlyZWRTaGlwcGluZ0NvbnRhY3RGaWVsZHM6IFtcImVtYWlsXCJdLFxuICAgICAgc3VwcG9ydGVkTmV0d29ya3M6IFtcInZpc2FcIiwgXCJtYXN0ZXJDYXJkXCIsIFwiYW1leFwiLCBcImRpc2NvdmVyXCJdLFxuICAgICAgbWVyY2hhbnRDYXBhYmlsaXRpZXM6IFtcbiAgICAgICAgXCJzdXBwb3J0czNEU1wiLFxuICAgICAgICBcInN1cHBvcnRzQ3JlZGl0XCIsXG4gICAgICAgIFwic3VwcG9ydHNEZWJpdFwiLFxuICAgICAgICBcInN1cHBvcnRzRU1WXCJcbiAgICAgIF0sXG4gICAgICB0b3RhbDogZixcbiAgICAgIC4uLihsID09IG51bGwgPyB2b2lkIDAgOiBsLmFwcGxlUGF5UGF5bWVudFJlcXVlc3QpID8/IHt9XG4gICAgfTtcbiAgICB6KFwiUGF5bWVudCBSZXF1ZXN0XCIsIHkpO1xuICAgIGNvbnN0IGggPSBuZXcgQXBwbGVQYXlTZXNzaW9uKDMsIHkpO1xuICAgIHooXCJBcHBsZVBheVNlc3Npb25cIiwgaCk7XG4gICAgY29uc3QgdyA9IHtcbiAgICAgIHNlc3Npb246IGgsXG4gICAgICBjb25uZWN0aW9uOiB0LmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiBlLFxuICAgICAgcHJvY2Vzc29yQWNjb3VudDogcy5tZXRhZGF0YSxcbiAgICAgIHByZWZpbGw6IHUsXG4gICAgICBpc1NldHVwTW9kZTogYyxcbiAgICAgIGJhc2VVcmw6IHQuYmFzZVVybCxcbiAgICAgIGZvcm1DYWxsYmFja3M6IGksXG4gICAgICBkZWZhdWx0RmllbGRWYWx1ZXM6IG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgfTtcbiAgICBsZXQgUDtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKEEsIFgpID0+IHtcbiAgICAgIGNvbnN0IHBlID0gKCkgPT4ge1xuICAgICAgICB6KFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSwgWChuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpKTtcbiAgICAgIH0sIHsgY2xlYW51cENhbmNlbExpc3RlbmVyOiBlZSB9ID0gYm8ocGUpO1xuICAgICAgaC5vbmNhbmNlbCA9IHBlLCBoLm9udmFsaWRhdGVtZXJjaGFudCA9IGFzeW5jICgkKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgUCA9IGF3YWl0IHZvKCQsIHcpO1xuICAgICAgICB9IGNhdGNoIChEKSB7XG4gICAgICAgICAgWChEKTtcbiAgICAgICAgfVxuICAgICAgfSwgaC5vbnBheW1lbnRtZXRob2RzZWxlY3RlZCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgJCA9IHtcbiAgICAgICAgICBuZXdUb3RhbDogeyAuLi5mIH1cbiAgICAgICAgfTtcbiAgICAgICAgaC5jb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24oJCk7XG4gICAgICB9LCBoLm9ucGF5bWVudGF1dGhvcml6ZWQgPSBhc3luYyAoJCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IEQgPSBhd2FpdCBDbygkLCB3LCBQKTtcbiAgICAgICAgICBlZSgpLCBBKEQpO1xuICAgICAgICB9IGNhdGNoIChEKSB7XG4gICAgICAgICAgWChEKTtcbiAgICAgICAgfVxuICAgICAgfSwgaC5iZWdpbigpO1xuICAgIH0pLmNhdGNoKChBKSA9PiB7XG4gICAgICB0aHJvdyBGZShcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIEEpLCBBO1xuICAgIH0pO1xuICB9XG4pLCBMZSA9ICh0LCByLCBlKSA9PiB7XG4gIGNvbnN0IG4gPSB0LmZpbHRlcigoaSkgPT4ge1xuICAgIGNvbnN0IHMgPSBlID09PSB2b2lkIDAgPyAhMCA6IGkucHJvY2Vzc29yX25hbWUgPT09IGUsIGEgPSBpLnByb3ZpZGVyID09PSByO1xuICAgIHJldHVybiBzICYmIGE7XG4gIH0pO1xuICBpZiAobi5sZW5ndGggPT09IDApXG4gICAgdGhyb3cgY29uc29sZS5lcnJvcihcIkNQTXMgbGlzdFwiLCB0KSwgbmV3IEVycm9yKGBObyBDUE1zIGZvdW5kIHdpdGggcHJvdmlkZXIgJyR7cn0nIGFuZCBwcm9jZXNzb3IgJyR7ZX0nYCk7XG4gIGlmIChuLmxlbmd0aCAhPT0gMSlcbiAgICB0aHJvdyBjb25zb2xlLmVycm9yKFwiQ1BNcyBsaXN0XCIsIHQpLCBuZXcgRXJyb3IoYE1vcmUgdGhhbiBvbmUgQ1BNIGZvdW5kIHdpdGggcHJvdmlkZXIgJyR7cn0nIGFuZCBwcm9jZXNzb3IgJyR7ZX0nYCk7XG4gIHJldHVybiBuWzBdO1xufSwgTCA9IHtcbiAgLy8g4pyLIE5vdGU6IEZvciBmbG93cyB0aGF0IHJlcXVpcmUgaW5pdGlhbGl6YXRpb24sIHBsZWFzZSBhZGQgdGhlbSB0byBgaW5pdC1mbG93cy50c2BcbiAgLy8gQ29tbW9uXG4gIGNvbW1vbkNDOiB7XG4gICAgaW5pdDogYXN5bmMgKCkgPT4ge1xuICAgIH0sXG4gICAgcnVuOiBablxuICB9LFxuICAvLyBTdHJpcGVcbiAgc3RyaXBlUFI6IHtcbiAgICBpbml0OiBybyxcbiAgICBydW46IG5vXG4gIH0sXG4gIHN0cmlwZUxpbms6IHtcbiAgICBpbml0OiBJbixcbiAgICBydW46IE9uXG4gIH0sXG4gIC8vIFBvY2t5dFxuICBwb2NreXRQYXlwYWw6IHtcbiAgICBydW46IGxvXG4gIH0sXG4gIC8vIEFpcndhbGxleFxuICBhaXJ3YWxsZXhHb29nbGVQYXk6IHtcbiAgICBpbml0OiBtbyxcbiAgICBydW46IHlvXG4gIH0sXG4gIGFpcndhbGxleEFwcGxlUGF5OiB7XG4gICAgaW5pdDoga28sXG4gICAgcnVuOiBQb1xuICB9XG4gIC8vIPCfkYkgQWRkIG1vcmUgZmxvd3MgaGVyZVxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxufTtcbnZhciBOZSA9IGZ1bmN0aW9uKHQsIHIpIHtcbiAgcmV0dXJuIE5lID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8IHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24oZSwgbikge1xuICAgIGUuX19wcm90b19fID0gbjtcbiAgfSB8fCBmdW5jdGlvbihlLCBuKSB7XG4gICAgZm9yICh2YXIgaSBpbiBuKSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobiwgaSkgJiYgKGVbaV0gPSBuW2ldKTtcbiAgfSwgTmUodCwgcik7XG59O1xuZnVuY3Rpb24gWih0LCByKSB7XG4gIGlmICh0eXBlb2YgciAhPSBcImZ1bmN0aW9uXCIgJiYgciAhPT0gbnVsbClcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhyKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XG4gIE5lKHQsIHIpO1xuICBmdW5jdGlvbiBlKCkge1xuICAgIHRoaXMuY29uc3RydWN0b3IgPSB0O1xuICB9XG4gIHQucHJvdG90eXBlID0gciA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUocikgOiAoZS5wcm90b3R5cGUgPSByLnByb3RvdHlwZSwgbmV3IGUoKSk7XG59XG5mdW5jdGlvbiBBbyh0LCByLCBlLCBuKSB7XG4gIGZ1bmN0aW9uIGkocykge1xuICAgIHJldHVybiBzIGluc3RhbmNlb2YgZSA/IHMgOiBuZXcgZShmdW5jdGlvbihhKSB7XG4gICAgICBhKHMpO1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBuZXcgKGUgfHwgKGUgPSBQcm9taXNlKSkoZnVuY3Rpb24ocywgYSkge1xuICAgIGZ1bmN0aW9uIGMocCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbChuLm5leHQocCkpO1xuICAgICAgfSBjYXRjaCAobSkge1xuICAgICAgICBhKG0pO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiB1KHApIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGwobi50aHJvdyhwKSk7XG4gICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgIGEobSk7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGwocCkge1xuICAgICAgcC5kb25lID8gcyhwLnZhbHVlKSA6IGkocC52YWx1ZSkudGhlbihjLCB1KTtcbiAgICB9XG4gICAgbCgobiA9IG4uYXBwbHkodCwgW10pKS5uZXh0KCkpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIE50KHQsIHIpIHtcbiAgdmFyIGUgPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHtcbiAgICBpZiAoc1swXSAmIDEpIHRocm93IHNbMV07XG4gICAgcmV0dXJuIHNbMV07XG4gIH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIG4sIGksIHMsIGEgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgSXRlcmF0b3IgPT0gXCJmdW5jdGlvblwiID8gSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSk7XG4gIHJldHVybiBhLm5leHQgPSBjKDApLCBhLnRocm93ID0gYygxKSwgYS5yZXR1cm4gPSBjKDIpLCB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiAoYVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pLCBhO1xuICBmdW5jdGlvbiBjKGwpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24ocCkge1xuICAgICAgcmV0dXJuIHUoW2wsIHBdKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIHUobCkge1xuICAgIGlmIChuKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcbiAgICBmb3IgKDsgYSAmJiAoYSA9IDAsIGxbMF0gJiYgKGUgPSAwKSksIGU7ICkgdHJ5IHtcbiAgICAgIGlmIChuID0gMSwgaSAmJiAocyA9IGxbMF0gJiAyID8gaS5yZXR1cm4gOiBsWzBdID8gaS50aHJvdyB8fCAoKHMgPSBpLnJldHVybikgJiYgcy5jYWxsKGkpLCAwKSA6IGkubmV4dCkgJiYgIShzID0gcy5jYWxsKGksIGxbMV0pKS5kb25lKSByZXR1cm4gcztcbiAgICAgIHN3aXRjaCAoaSA9IDAsIHMgJiYgKGwgPSBbbFswXSAmIDIsIHMudmFsdWVdKSwgbFswXSkge1xuICAgICAgICBjYXNlIDA6XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBzID0gbDtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiBlLmxhYmVsKyssIHsgdmFsdWU6IGxbMV0sIGRvbmU6ICExIH07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICBlLmxhYmVsKyssIGkgPSBsWzFdLCBsID0gWzBdO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgbCA9IGUub3BzLnBvcCgpLCBlLnRyeXMucG9wKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgaWYgKHMgPSBlLnRyeXMsICEocyA9IHMubGVuZ3RoID4gMCAmJiBzW3MubGVuZ3RoIC0gMV0pICYmIChsWzBdID09PSA2IHx8IGxbMF0gPT09IDIpKSB7XG4gICAgICAgICAgICBlID0gMDtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobFswXSA9PT0gMyAmJiAoIXMgfHwgbFsxXSA+IHNbMF0gJiYgbFsxXSA8IHNbM10pKSB7XG4gICAgICAgICAgICBlLmxhYmVsID0gbFsxXTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAobFswXSA9PT0gNiAmJiBlLmxhYmVsIDwgc1sxXSkge1xuICAgICAgICAgICAgZS5sYWJlbCA9IHNbMV0sIHMgPSBsO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChzICYmIGUubGFiZWwgPCBzWzJdKSB7XG4gICAgICAgICAgICBlLmxhYmVsID0gc1syXSwgZS5vcHMucHVzaChsKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzWzJdICYmIGUub3BzLnBvcCgpLCBlLnRyeXMucG9wKCk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBsID0gci5jYWxsKHQsIGUpO1xuICAgIH0gY2F0Y2ggKHApIHtcbiAgICAgIGwgPSBbNiwgcF0sIGkgPSAwO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBuID0gcyA9IDA7XG4gICAgfVxuICAgIGlmIChsWzBdICYgNSkgdGhyb3cgbFsxXTtcbiAgICByZXR1cm4geyB2YWx1ZTogbFswXSA/IGxbMV0gOiB2b2lkIDAsIGRvbmU6ICEwIH07XG4gIH1cbn1cbmZ1bmN0aW9uIGllKHQpIHtcbiAgdmFyIHIgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIGUgPSByICYmIHRbcl0sIG4gPSAwO1xuICBpZiAoZSkgcmV0dXJuIGUuY2FsbCh0KTtcbiAgaWYgKHQgJiYgdHlwZW9mIHQubGVuZ3RoID09IFwibnVtYmVyXCIpIHJldHVybiB7XG4gICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdCAmJiBuID49IHQubGVuZ3RoICYmICh0ID0gdm9pZCAwKSwgeyB2YWx1ZTogdCAmJiB0W24rK10sIGRvbmU6ICF0IH07XG4gICAgfVxuICB9O1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKHIgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG59XG5mdW5jdGlvbiB3ZSh0LCByKSB7XG4gIHZhciBlID0gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgdFtTeW1ib2wuaXRlcmF0b3JdO1xuICBpZiAoIWUpIHJldHVybiB0O1xuICB2YXIgbiA9IGUuY2FsbCh0KSwgaSwgcyA9IFtdLCBhO1xuICB0cnkge1xuICAgIGZvciAoOyAociA9PT0gdm9pZCAwIHx8IHItLSA+IDApICYmICEoaSA9IG4ubmV4dCgpKS5kb25lOyApIHMucHVzaChpLnZhbHVlKTtcbiAgfSBjYXRjaCAoYykge1xuICAgIGEgPSB7IGVycm9yOiBjIH07XG4gIH0gZmluYWxseSB7XG4gICAgdHJ5IHtcbiAgICAgIGkgJiYgIWkuZG9uZSAmJiAoZSA9IG4ucmV0dXJuKSAmJiBlLmNhbGwobik7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChhKSB0aHJvdyBhLmVycm9yO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcztcbn1cbmZ1bmN0aW9uIGJlKHQsIHIsIGUpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIG4gPSAwLCBpID0gci5sZW5ndGgsIHM7IG4gPCBpOyBuKyspXG4gICAgKHMgfHwgIShuIGluIHIpKSAmJiAocyB8fCAocyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHIsIDAsIG4pKSwgc1tuXSA9IHJbbl0pO1xuICByZXR1cm4gdC5jb25jYXQocyB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChyKSk7XG59XG5mdW5jdGlvbiBuZSh0KSB7XG4gIHJldHVybiB0aGlzIGluc3RhbmNlb2YgbmUgPyAodGhpcy52ID0gdCwgdGhpcykgOiBuZXcgbmUodCk7XG59XG5mdW5jdGlvbiBJbyh0LCByLCBlKSB7XG4gIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XG4gIHZhciBuID0gZS5hcHBseSh0LCByIHx8IFtdKSwgaSwgcyA9IFtdO1xuICByZXR1cm4gaSA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBBc3luY0l0ZXJhdG9yID09IFwiZnVuY3Rpb25cIiA/IEFzeW5jSXRlcmF0b3IgOiBPYmplY3QpLnByb3RvdHlwZSksIGMoXCJuZXh0XCIpLCBjKFwidGhyb3dcIiksIGMoXCJyZXR1cm5cIiwgYSksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIGk7XG4gIGZ1bmN0aW9uIGEoZikge1xuICAgIHJldHVybiBmdW5jdGlvbih5KSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHkpLnRoZW4oZiwgbSk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBjKGYsIHkpIHtcbiAgICBuW2ZdICYmIChpW2ZdID0gZnVuY3Rpb24oaCkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHcsIFApIHtcbiAgICAgICAgcy5wdXNoKFtmLCBoLCB3LCBQXSkgPiAxIHx8IHUoZiwgaCk7XG4gICAgICB9KTtcbiAgICB9LCB5ICYmIChpW2ZdID0geShpW2ZdKSkpO1xuICB9XG4gIGZ1bmN0aW9uIHUoZiwgeSkge1xuICAgIHRyeSB7XG4gICAgICBsKG5bZl0oeSkpO1xuICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgIGcoc1swXVszXSwgaCk7XG4gICAgfVxuICB9XG4gIGZ1bmN0aW9uIGwoZikge1xuICAgIGYudmFsdWUgaW5zdGFuY2VvZiBuZSA/IFByb21pc2UucmVzb2x2ZShmLnZhbHVlLnYpLnRoZW4ocCwgbSkgOiBnKHNbMF1bMl0sIGYpO1xuICB9XG4gIGZ1bmN0aW9uIHAoZikge1xuICAgIHUoXCJuZXh0XCIsIGYpO1xuICB9XG4gIGZ1bmN0aW9uIG0oZikge1xuICAgIHUoXCJ0aHJvd1wiLCBmKTtcbiAgfVxuICBmdW5jdGlvbiBnKGYsIHkpIHtcbiAgICBmKHkpLCBzLnNoaWZ0KCksIHMubGVuZ3RoICYmIHUoc1swXVswXSwgc1swXVsxXSk7XG4gIH1cbn1cbmZ1bmN0aW9uIE9vKHQpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIHIgPSB0W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgZTtcbiAgcmV0dXJuIHIgPyByLmNhbGwodCkgOiAodCA9IHR5cGVvZiBpZSA9PSBcImZ1bmN0aW9uXCIgPyBpZSh0KSA6IHRbU3ltYm9sLml0ZXJhdG9yXSgpLCBlID0ge30sIG4oXCJuZXh0XCIpLCBuKFwidGhyb3dcIiksIG4oXCJyZXR1cm5cIiksIGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIGUpO1xuICBmdW5jdGlvbiBuKHMpIHtcbiAgICBlW3NdID0gdFtzXSAmJiBmdW5jdGlvbihhKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oYywgdSkge1xuICAgICAgICBhID0gdFtzXShhKSwgaShjLCB1LCBhLmRvbmUsIGEudmFsdWUpO1xuICAgICAgfSk7XG4gICAgfTtcbiAgfVxuICBmdW5jdGlvbiBpKHMsIGEsIGMsIHUpIHtcbiAgICBQcm9taXNlLnJlc29sdmUodSkudGhlbihmdW5jdGlvbihsKSB7XG4gICAgICBzKHsgdmFsdWU6IGwsIGRvbmU6IGMgfSk7XG4gICAgfSwgYSk7XG4gIH1cbn1cbmZ1bmN0aW9uIEModCkge1xuICByZXR1cm4gdHlwZW9mIHQgPT0gXCJmdW5jdGlvblwiO1xufVxuZnVuY3Rpb24gT2UodCkge1xuICB2YXIgciA9IGZ1bmN0aW9uKG4pIHtcbiAgICBFcnJvci5jYWxsKG4pLCBuLnN0YWNrID0gbmV3IEVycm9yKCkuc3RhY2s7XG4gIH0sIGUgPSB0KHIpO1xuICByZXR1cm4gZS5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSksIGUucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gZSwgZTtcbn1cbnZhciBUZSA9IE9lKGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGUpIHtcbiAgICB0KHRoaXMpLCB0aGlzLm1lc3NhZ2UgPSBlID8gZS5sZW5ndGggKyBgIGVycm9ycyBvY2N1cnJlZCBkdXJpbmcgdW5zdWJzY3JpcHRpb246XG5gICsgZS5tYXAoZnVuY3Rpb24obiwgaSkge1xuICAgICAgcmV0dXJuIGkgKyAxICsgXCIpIFwiICsgbi50b1N0cmluZygpO1xuICAgIH0pLmpvaW4oYFxuICBgKSA6IFwiXCIsIHRoaXMubmFtZSA9IFwiVW5zdWJzY3JpcHRpb25FcnJvclwiLCB0aGlzLmVycm9ycyA9IGU7XG4gIH07XG59KTtcbmZ1bmN0aW9uIHZlKHQsIHIpIHtcbiAgaWYgKHQpIHtcbiAgICB2YXIgZSA9IHQuaW5kZXhPZihyKTtcbiAgICAwIDw9IGUgJiYgdC5zcGxpY2UoZSwgMSk7XG4gIH1cbn1cbnZhciBkZSA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiB0KHIpIHtcbiAgICB0aGlzLmluaXRpYWxUZWFyZG93biA9IHIsIHRoaXMuY2xvc2VkID0gITEsIHRoaXMuX3BhcmVudGFnZSA9IG51bGwsIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciByLCBlLCBuLCBpLCBzO1xuICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgIHRoaXMuY2xvc2VkID0gITA7XG4gICAgICB2YXIgYSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICAgIGlmIChhKVxuICAgICAgICBpZiAodGhpcy5fcGFyZW50YWdlID0gbnVsbCwgQXJyYXkuaXNBcnJheShhKSlcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZm9yICh2YXIgYyA9IGllKGEpLCB1ID0gYy5uZXh0KCk7ICF1LmRvbmU7IHUgPSBjLm5leHQoKSkge1xuICAgICAgICAgICAgICB2YXIgbCA9IHUudmFsdWU7XG4gICAgICAgICAgICAgIGwucmVtb3ZlKHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgICAgICAgIHIgPSB7IGVycm9yOiBoIH07XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIHUgJiYgIXUuZG9uZSAmJiAoZSA9IGMucmV0dXJuKSAmJiBlLmNhbGwoYyk7XG4gICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICBpZiAocikgdGhyb3cgci5lcnJvcjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICBhLnJlbW92ZSh0aGlzKTtcbiAgICAgIHZhciBwID0gdGhpcy5pbml0aWFsVGVhcmRvd247XG4gICAgICBpZiAoQyhwKSlcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBwKCk7XG4gICAgICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgICAgICBzID0gaCBpbnN0YW5jZW9mIFRlID8gaC5lcnJvcnMgOiBbaF07XG4gICAgICAgIH1cbiAgICAgIHZhciBtID0gdGhpcy5fZmluYWxpemVycztcbiAgICAgIGlmIChtKSB7XG4gICAgICAgIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGZvciAodmFyIGcgPSBpZShtKSwgZiA9IGcubmV4dCgpOyAhZi5kb25lOyBmID0gZy5uZXh0KCkpIHtcbiAgICAgICAgICAgIHZhciB5ID0gZi52YWx1ZTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIFhlKHkpO1xuICAgICAgICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICAgICAgICBzID0gcyA/PyBbXSwgaCBpbnN0YW5jZW9mIFRlID8gcyA9IGJlKGJlKFtdLCB3ZShzKSksIHdlKGguZXJyb3JzKSkgOiBzLnB1c2goaCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgICAgbiA9IHsgZXJyb3I6IGggfTtcbiAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgZiAmJiAhZi5kb25lICYmIChpID0gZy5yZXR1cm4pICYmIGkuY2FsbChnKTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgaWYgKG4pIHRocm93IG4uZXJyb3I7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocylcbiAgICAgICAgdGhyb3cgbmV3IFRlKHMpO1xuICAgIH1cbiAgfSwgdC5wcm90b3R5cGUuYWRkID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlO1xuICAgIGlmIChyICYmIHIgIT09IHRoaXMpXG4gICAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICAgIFhlKHIpO1xuICAgICAgZWxzZSB7XG4gICAgICAgIGlmIChyIGluc3RhbmNlb2YgdCkge1xuICAgICAgICAgIGlmIChyLmNsb3NlZCB8fCByLl9oYXNQYXJlbnQodGhpcykpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgci5fYWRkUGFyZW50KHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgICh0aGlzLl9maW5hbGl6ZXJzID0gKGUgPSB0aGlzLl9maW5hbGl6ZXJzKSAhPT0gbnVsbCAmJiBlICE9PSB2b2lkIDAgPyBlIDogW10pLnB1c2gocik7XG4gICAgICB9XG4gIH0sIHQucHJvdG90eXBlLl9oYXNQYXJlbnQgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgcmV0dXJuIGUgPT09IHIgfHwgQXJyYXkuaXNBcnJheShlKSAmJiBlLmluY2x1ZGVzKHIpO1xuICB9LCB0LnByb3RvdHlwZS5fYWRkUGFyZW50ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgIHRoaXMuX3BhcmVudGFnZSA9IEFycmF5LmlzQXJyYXkoZSkgPyAoZS5wdXNoKHIpLCBlKSA6IGUgPyBbZSwgcl0gOiByO1xuICB9LCB0LnByb3RvdHlwZS5fcmVtb3ZlUGFyZW50ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdGhpcy5fcGFyZW50YWdlO1xuICAgIGUgPT09IHIgPyB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsIDogQXJyYXkuaXNBcnJheShlKSAmJiB2ZShlLCByKTtcbiAgfSwgdC5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdGhpcy5fZmluYWxpemVycztcbiAgICBlICYmIHZlKGUsIHIpLCByIGluc3RhbmNlb2YgdCAmJiByLl9yZW1vdmVQYXJlbnQodGhpcyk7XG4gIH0sIHQuRU1QVFkgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgciA9IG5ldyB0KCk7XG4gICAgcmV0dXJuIHIuY2xvc2VkID0gITAsIHI7XG4gIH0oKSwgdDtcbn0oKSwganQgPSBkZS5FTVBUWTtcbmZ1bmN0aW9uIFV0KHQpIHtcbiAgcmV0dXJuIHQgaW5zdGFuY2VvZiBkZSB8fCB0ICYmIFwiY2xvc2VkXCIgaW4gdCAmJiBDKHQucmVtb3ZlKSAmJiBDKHQuYWRkKSAmJiBDKHQudW5zdWJzY3JpYmUpO1xufVxuZnVuY3Rpb24gWGUodCkge1xuICBDKHQpID8gdCgpIDogdC51bnN1YnNjcmliZSgpO1xufVxudmFyIHh0ID0ge1xuICBvblVuaGFuZGxlZEVycm9yOiBudWxsLFxuICBvblN0b3BwZWROb3RpZmljYXRpb246IG51bGwsXG4gIFByb21pc2U6IHZvaWQgMCxcbiAgdXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZzogITEsXG4gIHVzZURlcHJlY2F0ZWROZXh0Q29udGV4dDogITFcbn0sICR0ID0ge1xuICBzZXRUaW1lb3V0OiBmdW5jdGlvbih0LCByKSB7XG4gICAgZm9yICh2YXIgZSA9IFtdLCBuID0gMjsgbiA8IGFyZ3VtZW50cy5sZW5ndGg7IG4rKylcbiAgICAgIGVbbiAtIDJdID0gYXJndW1lbnRzW25dO1xuICAgIHJldHVybiBzZXRUaW1lb3V0LmFwcGx5KHZvaWQgMCwgYmUoW3QsIHJdLCB3ZShlKSkpO1xuICB9LFxuICBjbGVhclRpbWVvdXQ6IGZ1bmN0aW9uKHQpIHtcbiAgICByZXR1cm4gKGNsZWFyVGltZW91dCkodCk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn07XG5mdW5jdGlvbiBWdCh0KSB7XG4gICR0LnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgdGhyb3cgdDtcbiAgfSk7XG59XG5mdW5jdGlvbiBldCgpIHtcbn1cbmZ1bmN0aW9uIF9lKHQpIHtcbiAgdCgpO1xufVxudmFyIEdlID0gZnVuY3Rpb24odCkge1xuICBaKHIsIHQpO1xuICBmdW5jdGlvbiByKGUpIHtcbiAgICB2YXIgbiA9IHQuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiBuLmlzU3RvcHBlZCA9ICExLCBlID8gKG4uZGVzdGluYXRpb24gPSBlLCBVdChlKSAmJiBlLmFkZChuKSkgOiBuLmRlc3RpbmF0aW9uID0gRG8sIG47XG4gIH1cbiAgcmV0dXJuIHIuY3JlYXRlID0gZnVuY3Rpb24oZSwgbiwgaSkge1xuICAgIHJldHVybiBuZXcgamUoZSwgbiwgaSk7XG4gIH0sIHIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihlKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgdGhpcy5fbmV4dChlKTtcbiAgfSwgci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihlKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIHRoaXMuX2Vycm9yKGUpKTtcbiAgfSwgci5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSAhMCwgdGhpcy5fY29tcGxldGUoKSk7XG4gIH0sIHIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5jbG9zZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyksIHRoaXMuZGVzdGluYXRpb24gPSBudWxsKTtcbiAgfSwgci5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbihlKSB7XG4gICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KGUpO1xuICB9LCByLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbihlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH0sIHIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH0sIHI7XG59KGRlKSwgUm8gPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZDtcbmZ1bmN0aW9uIE1lKHQsIHIpIHtcbiAgcmV0dXJuIFJvLmNhbGwodCwgcik7XG59XG52YXIgVG8gPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gdChyKSB7XG4gICAgdGhpcy5wYXJ0aWFsT2JzZXJ2ZXIgPSByO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKGUubmV4dClcbiAgICAgIHRyeSB7XG4gICAgICAgIGUubmV4dChyKTtcbiAgICAgIH0gY2F0Y2ggKG4pIHtcbiAgICAgICAgbWUobik7XG4gICAgICB9XG4gIH0sIHQucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKGUuZXJyb3IpXG4gICAgICB0cnkge1xuICAgICAgICBlLmVycm9yKHIpO1xuICAgICAgfSBjYXRjaCAobikge1xuICAgICAgICBtZShuKTtcbiAgICAgIH1cbiAgICBlbHNlXG4gICAgICBtZShyKTtcbiAgfSwgdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgciA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgIGlmIChyLmNvbXBsZXRlKVxuICAgICAgdHJ5IHtcbiAgICAgICAgci5jb21wbGV0ZSgpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBtZShlKTtcbiAgICAgIH1cbiAgfSwgdDtcbn0oKSwgamUgPSBmdW5jdGlvbih0KSB7XG4gIFoociwgdCk7XG4gIGZ1bmN0aW9uIHIoZSwgbiwgaSkge1xuICAgIHZhciBzID0gdC5jYWxsKHRoaXMpIHx8IHRoaXMsIGE7XG4gICAgaWYgKEMoZSkgfHwgIWUpXG4gICAgICBhID0ge1xuICAgICAgICBuZXh0OiBlID8/IHZvaWQgMCxcbiAgICAgICAgZXJyb3I6IG4gPz8gdm9pZCAwLFxuICAgICAgICBjb21wbGV0ZTogaSA/PyB2b2lkIDBcbiAgICAgIH07XG4gICAgZWxzZSB7XG4gICAgICB2YXIgYztcbiAgICAgIHMgJiYgeHQudXNlRGVwcmVjYXRlZE5leHRDb250ZXh0ID8gKGMgPSBPYmplY3QuY3JlYXRlKGUpLCBjLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9LCBhID0ge1xuICAgICAgICBuZXh0OiBlLm5leHQgJiYgTWUoZS5uZXh0LCBjKSxcbiAgICAgICAgZXJyb3I6IGUuZXJyb3IgJiYgTWUoZS5lcnJvciwgYyksXG4gICAgICAgIGNvbXBsZXRlOiBlLmNvbXBsZXRlICYmIE1lKGUuY29tcGxldGUsIGMpXG4gICAgICB9KSA6IGEgPSBlO1xuICAgIH1cbiAgICByZXR1cm4gcy5kZXN0aW5hdGlvbiA9IG5ldyBUbyhhKSwgcztcbiAgfVxuICByZXR1cm4gcjtcbn0oR2UpO1xuZnVuY3Rpb24gbWUodCkge1xuICBWdCh0KTtcbn1cbmZ1bmN0aW9uIE1vKHQpIHtcbiAgdGhyb3cgdDtcbn1cbnZhciBEbyA9IHtcbiAgY2xvc2VkOiAhMCxcbiAgbmV4dDogZXQsXG4gIGVycm9yOiBNbyxcbiAgY29tcGxldGU6IGV0XG59LCB6ZSA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gdHlwZW9mIFN5bWJvbCA9PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLm9ic2VydmFibGUgfHwgXCJAQG9ic2VydmFibGVcIjtcbn0oKTtcbmZ1bmN0aW9uIEZvKHQpIHtcbiAgcmV0dXJuIHQ7XG59XG5mdW5jdGlvbiBMbyh0KSB7XG4gIHJldHVybiB0Lmxlbmd0aCA9PT0gMCA/IEZvIDogdC5sZW5ndGggPT09IDEgPyB0WzBdIDogZnVuY3Rpb24oZSkge1xuICAgIHJldHVybiB0LnJlZHVjZShmdW5jdGlvbihuLCBpKSB7XG4gICAgICByZXR1cm4gaShuKTtcbiAgICB9LCBlKTtcbiAgfTtcbn1cbnZhciBLID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHQocikge1xuICAgIHIgJiYgKHRoaXMuX3N1YnNjcmliZSA9IHIpO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gbmV3IHQoKTtcbiAgICByZXR1cm4gZS5zb3VyY2UgPSB0aGlzLCBlLm9wZXJhdG9yID0gciwgZTtcbiAgfSwgdC5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVuY3Rpb24ociwgZSwgbikge1xuICAgIHZhciBpID0gdGhpcywgcyA9IGpvKHIpID8gciA6IG5ldyBqZShyLCBlLCBuKTtcbiAgICByZXR1cm4gX2UoZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgYSA9IGksIGMgPSBhLm9wZXJhdG9yLCB1ID0gYS5zb3VyY2U7XG4gICAgICBzLmFkZChjID8gYy5jYWxsKHMsIHUpIDogdSA/IGkuX3N1YnNjcmliZShzKSA6IGkuX3RyeVN1YnNjcmliZShzKSk7XG4gICAgfSksIHM7XG4gIH0sIHQucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbihyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzLl9zdWJzY3JpYmUocik7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgci5lcnJvcihlKTtcbiAgICB9XG4gIH0sIHQucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbihyLCBlKSB7XG4gICAgdmFyIG4gPSB0aGlzO1xuICAgIHJldHVybiBlID0gdHQoZSksIG5ldyBlKGZ1bmN0aW9uKGksIHMpIHtcbiAgICAgIHZhciBhID0gbmV3IGplKHtcbiAgICAgICAgbmV4dDogZnVuY3Rpb24oYykge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICByKGMpO1xuICAgICAgICAgIH0gY2F0Y2ggKHUpIHtcbiAgICAgICAgICAgIHModSksIGEudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yOiBzLFxuICAgICAgICBjb21wbGV0ZTogaVxuICAgICAgfSk7XG4gICAgICBuLnN1YnNjcmliZShhKTtcbiAgICB9KTtcbiAgfSwgdC5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uKHIpIHtcbiAgICB2YXIgZTtcbiAgICByZXR1cm4gKGUgPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZS5zdWJzY3JpYmUocik7XG4gIH0sIHQucHJvdG90eXBlW3plXSA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzO1xuICB9LCB0LnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24oKSB7XG4gICAgZm9yICh2YXIgciA9IFtdLCBlID0gMDsgZSA8IGFyZ3VtZW50cy5sZW5ndGg7IGUrKylcbiAgICAgIHJbZV0gPSBhcmd1bWVudHNbZV07XG4gICAgcmV0dXJuIExvKHIpKHRoaXMpO1xuICB9LCB0LnByb3RvdHlwZS50b1Byb21pc2UgPSBmdW5jdGlvbihyKSB7XG4gICAgdmFyIGUgPSB0aGlzO1xuICAgIHJldHVybiByID0gdHQociksIG5ldyByKGZ1bmN0aW9uKG4sIGkpIHtcbiAgICAgIHZhciBzO1xuICAgICAgZS5zdWJzY3JpYmUoZnVuY3Rpb24oYSkge1xuICAgICAgICByZXR1cm4gcyA9IGE7XG4gICAgICB9LCBmdW5jdGlvbihhKSB7XG4gICAgICAgIHJldHVybiBpKGEpO1xuICAgICAgfSwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiBuKHMpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH0sIHQuY3JlYXRlID0gZnVuY3Rpb24ocikge1xuICAgIHJldHVybiBuZXcgdChyKTtcbiAgfSwgdDtcbn0oKTtcbmZ1bmN0aW9uIHR0KHQpIHtcbiAgdmFyIHI7XG4gIHJldHVybiAociA9IHQgPz8geHQuUHJvbWlzZSkgIT09IG51bGwgJiYgciAhPT0gdm9pZCAwID8gciA6IFByb21pc2U7XG59XG5mdW5jdGlvbiBObyh0KSB7XG4gIHJldHVybiB0ICYmIEModC5uZXh0KSAmJiBDKHQuZXJyb3IpICYmIEModC5jb21wbGV0ZSk7XG59XG5mdW5jdGlvbiBqbyh0KSB7XG4gIHJldHVybiB0ICYmIHQgaW5zdGFuY2VvZiBHZSB8fCBObyh0KSAmJiBVdCh0KTtcbn1cbmZ1bmN0aW9uIFVvKHQpIHtcbiAgcmV0dXJuIEModCA9PSBudWxsID8gdm9pZCAwIDogdC5saWZ0KTtcbn1cbmZ1bmN0aW9uIHhvKHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKHIpIHtcbiAgICBpZiAoVW8ocikpXG4gICAgICByZXR1cm4gci5saWZ0KGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICByZXR1cm4gdChlLCB0aGlzKTtcbiAgICAgICAgfSBjYXRjaCAobikge1xuICAgICAgICAgIHRoaXMuZXJyb3Iobik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJVbmFibGUgdG8gbGlmdCB1bmtub3duIE9ic2VydmFibGUgdHlwZVwiKTtcbiAgfTtcbn1cbmZ1bmN0aW9uICRvKHQsIHIsIGUsIG4sIGkpIHtcbiAgcmV0dXJuIG5ldyBWbyh0LCByLCBlLCBuLCBpKTtcbn1cbnZhciBWbyA9IGZ1bmN0aW9uKHQpIHtcbiAgWihyLCB0KTtcbiAgZnVuY3Rpb24gcihlLCBuLCBpLCBzLCBhLCBjKSB7XG4gICAgdmFyIHUgPSB0LmNhbGwodGhpcywgZSkgfHwgdGhpcztcbiAgICByZXR1cm4gdS5vbkZpbmFsaXplID0gYSwgdS5zaG91bGRVbnN1YnNjcmliZSA9IGMsIHUuX25leHQgPSBuID8gZnVuY3Rpb24obCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbihsKTtcbiAgICAgIH0gY2F0Y2ggKHApIHtcbiAgICAgICAgZS5lcnJvcihwKTtcbiAgICAgIH1cbiAgICB9IDogdC5wcm90b3R5cGUuX25leHQsIHUuX2Vycm9yID0gcyA/IGZ1bmN0aW9uKGwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHMobCk7XG4gICAgICB9IGNhdGNoIChwKSB7XG4gICAgICAgIGUuZXJyb3IocCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfSA6IHQucHJvdG90eXBlLl9lcnJvciwgdS5fY29tcGxldGUgPSBpID8gZnVuY3Rpb24oKSB7XG4gICAgICB0cnkge1xuICAgICAgICBpKCk7XG4gICAgICB9IGNhdGNoIChsKSB7XG4gICAgICAgIGUuZXJyb3IobCk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gICAgICB9XG4gICAgfSA6IHQucHJvdG90eXBlLl9jb21wbGV0ZSwgdTtcbiAgfVxuICByZXR1cm4gci5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgZTtcbiAgICBpZiAoIXRoaXMuc2hvdWxkVW5zdWJzY3JpYmUgfHwgdGhpcy5zaG91bGRVbnN1YnNjcmliZSgpKSB7XG4gICAgICB2YXIgbiA9IHRoaXMuY2xvc2VkO1xuICAgICAgdC5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKSwgIW4gJiYgKChlID0gdGhpcy5vbkZpbmFsaXplKSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgfHwgZS5jYWxsKHRoaXMpKTtcbiAgICB9XG4gIH0sIHI7XG59KEdlKSwgcW8gPSBPZShmdW5jdGlvbih0KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0KHRoaXMpLCB0aGlzLm5hbWUgPSBcIk9iamVjdFVuc3Vic2NyaWJlZEVycm9yXCIsIHRoaXMubWVzc2FnZSA9IFwib2JqZWN0IHVuc3Vic2NyaWJlZFwiO1xuICB9O1xufSksIHF0ID0gZnVuY3Rpb24odCkge1xuICBaKHIsIHQpO1xuICBmdW5jdGlvbiByKCkge1xuICAgIHZhciBlID0gdC5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgcmV0dXJuIGUuY2xvc2VkID0gITEsIGUuY3VycmVudE9ic2VydmVycyA9IG51bGwsIGUub2JzZXJ2ZXJzID0gW10sIGUuaXNTdG9wcGVkID0gITEsIGUuaGFzRXJyb3IgPSAhMSwgZS50aHJvd25FcnJvciA9IG51bGwsIGU7XG4gIH1cbiAgcmV0dXJuIHIucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4gPSBuZXcgcnQodGhpcywgdGhpcyk7XG4gICAgcmV0dXJuIG4ub3BlcmF0b3IgPSBlLCBuO1xuICB9LCByLnByb3RvdHlwZS5fdGhyb3dJZkNsb3NlZCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgIHRocm93IG5ldyBxbygpO1xuICB9LCByLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciBuID0gdGhpcztcbiAgICBfZShmdW5jdGlvbigpIHtcbiAgICAgIHZhciBpLCBzO1xuICAgICAgaWYgKG4uX3Rocm93SWZDbG9zZWQoKSwgIW4uaXNTdG9wcGVkKSB7XG4gICAgICAgIG4uY3VycmVudE9ic2VydmVycyB8fCAobi5jdXJyZW50T2JzZXJ2ZXJzID0gQXJyYXkuZnJvbShuLm9ic2VydmVycykpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGZvciAodmFyIGEgPSBpZShuLmN1cnJlbnRPYnNlcnZlcnMpLCBjID0gYS5uZXh0KCk7ICFjLmRvbmU7IGMgPSBhLm5leHQoKSkge1xuICAgICAgICAgICAgdmFyIHUgPSBjLnZhbHVlO1xuICAgICAgICAgICAgdS5uZXh0KGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAobCkge1xuICAgICAgICAgIGkgPSB7IGVycm9yOiBsIH07XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGMgJiYgIWMuZG9uZSAmJiAocyA9IGEucmV0dXJuKSAmJiBzLmNhbGwoYSk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmIChpKSB0aHJvdyBpLmVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9LCByLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiA9IHRoaXM7XG4gICAgX2UoZnVuY3Rpb24oKSB7XG4gICAgICBpZiAobi5fdGhyb3dJZkNsb3NlZCgpLCAhbi5pc1N0b3BwZWQpIHtcbiAgICAgICAgbi5oYXNFcnJvciA9IG4uaXNTdG9wcGVkID0gITAsIG4udGhyb3duRXJyb3IgPSBlO1xuICAgICAgICBmb3IgKHZhciBpID0gbi5vYnNlcnZlcnM7IGkubGVuZ3RoOyApXG4gICAgICAgICAgaS5zaGlmdCgpLmVycm9yKGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCByLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlID0gdGhpcztcbiAgICBfZShmdW5jdGlvbigpIHtcbiAgICAgIGlmIChlLl90aHJvd0lmQ2xvc2VkKCksICFlLmlzU3RvcHBlZCkge1xuICAgICAgICBlLmlzU3RvcHBlZCA9ICEwO1xuICAgICAgICBmb3IgKHZhciBuID0gZS5vYnNlcnZlcnM7IG4ubGVuZ3RoOyApXG4gICAgICAgICAgbi5zaGlmdCgpLmNvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIHIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgPSB0aGlzLmNsb3NlZCA9ICEwLCB0aGlzLm9ic2VydmVycyA9IHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gIH0sIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyLnByb3RvdHlwZSwgXCJvYnNlcnZlZFwiLCB7XG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBlO1xuICAgICAgcmV0dXJuICgoZSA9IHRoaXMub2JzZXJ2ZXJzKSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlLmxlbmd0aCkgPiAwO1xuICAgIH0sXG4gICAgZW51bWVyYWJsZTogITEsXG4gICAgY29uZmlndXJhYmxlOiAhMFxuICB9KSwgci5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLCB0LnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlLmNhbGwodGhpcywgZSk7XG4gIH0sIHIucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSwgdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhlKSwgdGhpcy5faW5uZXJTdWJzY3JpYmUoZSk7XG4gIH0sIHIucHJvdG90eXBlLl9pbm5lclN1YnNjcmliZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiA9IHRoaXMsIGkgPSB0aGlzLCBzID0gaS5oYXNFcnJvciwgYSA9IGkuaXNTdG9wcGVkLCBjID0gaS5vYnNlcnZlcnM7XG4gICAgcmV0dXJuIHMgfHwgYSA/IGp0IDogKHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGwsIGMucHVzaChlKSwgbmV3IGRlKGZ1bmN0aW9uKCkge1xuICAgICAgbi5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbCwgdmUoYywgZSk7XG4gICAgfSkpO1xuICB9LCByLnByb3RvdHlwZS5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiA9IHRoaXMsIGkgPSBuLmhhc0Vycm9yLCBzID0gbi50aHJvd25FcnJvciwgYSA9IG4uaXNTdG9wcGVkO1xuICAgIGkgPyBlLmVycm9yKHMpIDogYSAmJiBlLmNvbXBsZXRlKCk7XG4gIH0sIHIucHJvdG90eXBlLmFzT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlID0gbmV3IEsoKTtcbiAgICByZXR1cm4gZS5zb3VyY2UgPSB0aGlzLCBlO1xuICB9LCByLmNyZWF0ZSA9IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICByZXR1cm4gbmV3IHJ0KGUsIG4pO1xuICB9LCByO1xufShLKSwgcnQgPSBmdW5jdGlvbih0KSB7XG4gIFoociwgdCk7XG4gIGZ1bmN0aW9uIHIoZSwgbikge1xuICAgIHZhciBpID0gdC5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgcmV0dXJuIGkuZGVzdGluYXRpb24gPSBlLCBpLnNvdXJjZSA9IG4sIGk7XG4gIH1cbiAgcmV0dXJuIHIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4sIGk7XG4gICAgKGkgPSAobiA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG4ubmV4dCkgPT09IG51bGwgfHwgaSA9PT0gdm9pZCAwIHx8IGkuY2FsbChuLCBlKTtcbiAgfSwgci5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4sIGk7XG4gICAgKGkgPSAobiA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCA/IHZvaWQgMCA6IG4uZXJyb3IpID09PSBudWxsIHx8IGkgPT09IHZvaWQgMCB8fCBpLmNhbGwobiwgZSk7XG4gIH0sIHIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIGUsIG47XG4gICAgKG4gPSAoZSA9IHRoaXMuZGVzdGluYXRpb24pID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUuY29tcGxldGUpID09PSBudWxsIHx8IG4gPT09IHZvaWQgMCB8fCBuLmNhbGwoZSk7XG4gIH0sIHIucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIG4sIGk7XG4gICAgcmV0dXJuIChpID0gKG4gPSB0aGlzLnNvdXJjZSkgPT09IG51bGwgfHwgbiA9PT0gdm9pZCAwID8gdm9pZCAwIDogbi5zdWJzY3JpYmUoZSkpICE9PSBudWxsICYmIGkgIT09IHZvaWQgMCA/IGkgOiBqdDtcbiAgfSwgcjtcbn0ocXQpLCBHbyA9IHtcbiAgbm93OiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gRGF0ZS5ub3coKTtcbiAgfSxcbiAgZGVsZWdhdGU6IHZvaWQgMFxufSwgem8gPSBmdW5jdGlvbih0KSB7XG4gIFoociwgdCk7XG4gIGZ1bmN0aW9uIHIoZSwgbikge1xuICAgIHJldHVybiB0LmNhbGwodGhpcykgfHwgdGhpcztcbiAgfVxuICByZXR1cm4gci5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihlLCBuKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0sIHI7XG59KGRlKSwgbnQgPSB7XG4gIHNldEludGVydmFsOiBmdW5jdGlvbih0LCByKSB7XG4gICAgZm9yICh2YXIgZSA9IFtdLCBuID0gMjsgbiA8IGFyZ3VtZW50cy5sZW5ndGg7IG4rKylcbiAgICAgIGVbbiAtIDJdID0gYXJndW1lbnRzW25dO1xuICAgIHJldHVybiBzZXRJbnRlcnZhbC5hcHBseSh2b2lkIDAsIGJlKFt0LCByXSwgd2UoZSkpKTtcbiAgfSxcbiAgY2xlYXJJbnRlcnZhbDogZnVuY3Rpb24odCkge1xuICAgIHJldHVybiBjbGVhckludGVydmFsKHQpO1xuICB9LFxuICBkZWxlZ2F0ZTogdm9pZCAwXG59LCBZbyA9IGZ1bmN0aW9uKHQpIHtcbiAgWihyLCB0KTtcbiAgZnVuY3Rpb24gcihlLCBuKSB7XG4gICAgdmFyIGkgPSB0LmNhbGwodGhpcywgZSwgbikgfHwgdGhpcztcbiAgICByZXR1cm4gaS5zY2hlZHVsZXIgPSBlLCBpLndvcmsgPSBuLCBpLnBlbmRpbmcgPSAhMSwgaTtcbiAgfVxuICByZXR1cm4gci5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihlLCBuKSB7XG4gICAgdmFyIGk7XG4gICAgaWYgKG4gPT09IHZvaWQgMCAmJiAobiA9IDApLCB0aGlzLmNsb3NlZClcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIHRoaXMuc3RhdGUgPSBlO1xuICAgIHZhciBzID0gdGhpcy5pZCwgYSA9IHRoaXMuc2NoZWR1bGVyO1xuICAgIHJldHVybiBzICE9IG51bGwgJiYgKHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKGEsIHMsIG4pKSwgdGhpcy5wZW5kaW5nID0gITAsIHRoaXMuZGVsYXkgPSBuLCB0aGlzLmlkID0gKGkgPSB0aGlzLmlkKSAhPT0gbnVsbCAmJiBpICE9PSB2b2lkIDAgPyBpIDogdGhpcy5yZXF1ZXN0QXN5bmNJZChhLCB0aGlzLmlkLCBuKSwgdGhpcztcbiAgfSwgci5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbihlLCBuLCBpKSB7XG4gICAgcmV0dXJuIGkgPT09IHZvaWQgMCAmJiAoaSA9IDApLCBudC5zZXRJbnRlcnZhbChlLmZsdXNoLmJpbmQoZSwgdGhpcyksIGkpO1xuICB9LCByLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uKGUsIG4sIGkpIHtcbiAgICBpZiAoaSA9PT0gdm9pZCAwICYmIChpID0gMCksIGkgIT0gbnVsbCAmJiB0aGlzLmRlbGF5ID09PSBpICYmIHRoaXMucGVuZGluZyA9PT0gITEpXG4gICAgICByZXR1cm4gbjtcbiAgICBuICE9IG51bGwgJiYgbnQuY2xlYXJJbnRlcnZhbChuKTtcbiAgfSwgci5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGUsIG4pIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICByZXR1cm4gbmV3IEVycm9yKFwiZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvblwiKTtcbiAgICB0aGlzLnBlbmRpbmcgPSAhMTtcbiAgICB2YXIgaSA9IHRoaXMuX2V4ZWN1dGUoZSwgbik7XG4gICAgaWYgKGkpXG4gICAgICByZXR1cm4gaTtcbiAgICB0aGlzLnBlbmRpbmcgPT09ICExICYmIHRoaXMuaWQgIT0gbnVsbCAmJiAodGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsIHRoaXMuaWQsIG51bGwpKTtcbiAgfSwgci5wcm90b3R5cGUuX2V4ZWN1dGUgPSBmdW5jdGlvbihlLCBuKSB7XG4gICAgdmFyIGkgPSAhMSwgcztcbiAgICB0cnkge1xuICAgICAgdGhpcy53b3JrKGUpO1xuICAgIH0gY2F0Y2ggKGEpIHtcbiAgICAgIGkgPSAhMCwgcyA9IGEgfHwgbmV3IEVycm9yKFwiU2NoZWR1bGVkIGFjdGlvbiB0aHJldyBmYWxzeSBlcnJvclwiKTtcbiAgICB9XG4gICAgaWYgKGkpXG4gICAgICByZXR1cm4gdGhpcy51bnN1YnNjcmliZSgpLCBzO1xuICB9LCByLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgIHZhciBlID0gdGhpcywgbiA9IGUuaWQsIGkgPSBlLnNjaGVkdWxlciwgcyA9IGkuYWN0aW9ucztcbiAgICAgIHRoaXMud29yayA9IHRoaXMuc3RhdGUgPSB0aGlzLnNjaGVkdWxlciA9IG51bGwsIHRoaXMucGVuZGluZyA9ICExLCB2ZShzLCB0aGlzKSwgbiAhPSBudWxsICYmICh0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChpLCBuLCBudWxsKSksIHRoaXMuZGVsYXkgPSBudWxsLCB0LnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgIH1cbiAgfSwgcjtcbn0oem8pLCBvdCA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiB0KHIsIGUpIHtcbiAgICBlID09PSB2b2lkIDAgJiYgKGUgPSB0Lm5vdyksIHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3RvciA9IHIsIHRoaXMubm93ID0gZTtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihyLCBlLCBuKSB7XG4gICAgcmV0dXJuIGUgPT09IHZvaWQgMCAmJiAoZSA9IDApLCBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsIHIpLnNjaGVkdWxlKG4sIGUpO1xuICB9LCB0Lm5vdyA9IEdvLm5vdywgdDtcbn0oKSwgS28gPSBmdW5jdGlvbih0KSB7XG4gIFoociwgdCk7XG4gIGZ1bmN0aW9uIHIoZSwgbikge1xuICAgIG4gPT09IHZvaWQgMCAmJiAobiA9IG90Lm5vdyk7XG4gICAgdmFyIGkgPSB0LmNhbGwodGhpcywgZSwgbikgfHwgdGhpcztcbiAgICByZXR1cm4gaS5hY3Rpb25zID0gW10sIGkuX2FjdGl2ZSA9ICExLCBpO1xuICB9XG4gIHJldHVybiByLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgbiA9IHRoaXMuYWN0aW9ucztcbiAgICBpZiAodGhpcy5fYWN0aXZlKSB7XG4gICAgICBuLnB1c2goZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciBpO1xuICAgIHRoaXMuX2FjdGl2ZSA9ICEwO1xuICAgIGRvXG4gICAgICBpZiAoaSA9IGUuZXhlY3V0ZShlLnN0YXRlLCBlLmRlbGF5KSlcbiAgICAgICAgYnJlYWs7XG4gICAgd2hpbGUgKGUgPSBuLnNoaWZ0KCkpO1xuICAgIGlmICh0aGlzLl9hY3RpdmUgPSAhMSwgaSkge1xuICAgICAgZm9yICg7IGUgPSBuLnNoaWZ0KCk7IClcbiAgICAgICAgZS51bnN1YnNjcmliZSgpO1xuICAgICAgdGhyb3cgaTtcbiAgICB9XG4gIH0sIHI7XG59KG90KSwgSG8gPSBuZXcgS28oWW8pLCBXbyA9IGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIHQgJiYgdHlwZW9mIHQubGVuZ3RoID09IFwibnVtYmVyXCIgJiYgdHlwZW9mIHQgIT0gXCJmdW5jdGlvblwiO1xufTtcbmZ1bmN0aW9uIFpvKHQpIHtcbiAgcmV0dXJuIEModCA9PSBudWxsID8gdm9pZCAwIDogdC50aGVuKTtcbn1cbmZ1bmN0aW9uIEpvKHQpIHtcbiAgcmV0dXJuIEModFt6ZV0pO1xufVxuZnVuY3Rpb24gQm8odCkge1xuICByZXR1cm4gU3ltYm9sLmFzeW5jSXRlcmF0b3IgJiYgQyh0ID09IG51bGwgPyB2b2lkIDAgOiB0W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSk7XG59XG5mdW5jdGlvbiBRbyh0KSB7XG4gIHJldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IHByb3ZpZGVkIFwiICsgKHQgIT09IG51bGwgJiYgdHlwZW9mIHQgPT0gXCJvYmplY3RcIiA/IFwiYW4gaW52YWxpZCBvYmplY3RcIiA6IFwiJ1wiICsgdCArIFwiJ1wiKSArIFwiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuXCIpO1xufVxuZnVuY3Rpb24gWG8oKSB7XG4gIHJldHVybiB0eXBlb2YgU3ltYm9sICE9IFwiZnVuY3Rpb25cIiB8fCAhU3ltYm9sLml0ZXJhdG9yID8gXCJAQGl0ZXJhdG9yXCIgOiBTeW1ib2wuaXRlcmF0b3I7XG59XG52YXIgZWkgPSBYbygpO1xuZnVuY3Rpb24gdGkodCkge1xuICByZXR1cm4gQyh0ID09IG51bGwgPyB2b2lkIDAgOiB0W2VpXSk7XG59XG5mdW5jdGlvbiByaSh0KSB7XG4gIHJldHVybiBJbyh0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCkge1xuICAgIHZhciBlLCBuLCBpLCBzO1xuICAgIHJldHVybiBOdCh0aGlzLCBmdW5jdGlvbihhKSB7XG4gICAgICBzd2l0Y2ggKGEubGFiZWwpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIGUgPSB0LmdldFJlYWRlcigpLCBhLmxhYmVsID0gMTtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGEudHJ5cy5wdXNoKFsxLCAsIDksIDEwXSksIGEubGFiZWwgPSAyO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgcmV0dXJuIFs0LCBuZShlLnJlYWQoKSldO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcmV0dXJuIG4gPSBhLnNlbnQoKSwgaSA9IG4udmFsdWUsIHMgPSBuLmRvbmUsIHMgPyBbNCwgbmUodm9pZCAwKV0gOiBbMywgNV07XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gWzIsIGEuc2VudCgpXTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJldHVybiBbNCwgbmUoaSldO1xuICAgICAgICBjYXNlIDY6XG4gICAgICAgICAgcmV0dXJuIFs0LCBhLnNlbnQoKV07XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICByZXR1cm4gYS5zZW50KCksIFszLCAyXTtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIHJldHVybiBbMywgMTBdO1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgcmV0dXJuIGUucmVsZWFzZUxvY2soKSwgWzddO1xuICAgICAgICBjYXNlIDEwOlxuICAgICAgICAgIHJldHVybiBbMl07XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gbmkodCkge1xuICByZXR1cm4gQyh0ID09IG51bGwgPyB2b2lkIDAgOiB0LmdldFJlYWRlcik7XG59XG5mdW5jdGlvbiBvaSh0KSB7XG4gIGlmICh0IGluc3RhbmNlb2YgSylcbiAgICByZXR1cm4gdDtcbiAgaWYgKHQgIT0gbnVsbCkge1xuICAgIGlmIChKbyh0KSlcbiAgICAgIHJldHVybiBpaSh0KTtcbiAgICBpZiAoV28odCkpXG4gICAgICByZXR1cm4gc2kodCk7XG4gICAgaWYgKFpvKHQpKVxuICAgICAgcmV0dXJuIGFpKHQpO1xuICAgIGlmIChCbyh0KSlcbiAgICAgIHJldHVybiBHdCh0KTtcbiAgICBpZiAodGkodCkpXG4gICAgICByZXR1cm4gY2kodCk7XG4gICAgaWYgKG5pKHQpKVxuICAgICAgcmV0dXJuIGxpKHQpO1xuICB9XG4gIHRocm93IFFvKHQpO1xufVxuZnVuY3Rpb24gaWkodCkge1xuICByZXR1cm4gbmV3IEsoZnVuY3Rpb24ocikge1xuICAgIHZhciBlID0gdFt6ZV0oKTtcbiAgICBpZiAoQyhlLnN1YnNjcmliZSkpXG4gICAgICByZXR1cm4gZS5zdWJzY3JpYmUocik7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByb3ZpZGVkIG9iamVjdCBkb2VzIG5vdCBjb3JyZWN0bHkgaW1wbGVtZW50IFN5bWJvbC5vYnNlcnZhYmxlXCIpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHNpKHQpIHtcbiAgcmV0dXJuIG5ldyBLKGZ1bmN0aW9uKHIpIHtcbiAgICBmb3IgKHZhciBlID0gMDsgZSA8IHQubGVuZ3RoICYmICFyLmNsb3NlZDsgZSsrKVxuICAgICAgci5uZXh0KHRbZV0pO1xuICAgIHIuY29tcGxldGUoKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBhaSh0KSB7XG4gIHJldHVybiBuZXcgSyhmdW5jdGlvbihyKSB7XG4gICAgdC50aGVuKGZ1bmN0aW9uKGUpIHtcbiAgICAgIHIuY2xvc2VkIHx8IChyLm5leHQoZSksIHIuY29tcGxldGUoKSk7XG4gICAgfSwgZnVuY3Rpb24oZSkge1xuICAgICAgcmV0dXJuIHIuZXJyb3IoZSk7XG4gICAgfSkudGhlbihudWxsLCBWdCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gY2kodCkge1xuICByZXR1cm4gbmV3IEsoZnVuY3Rpb24ocikge1xuICAgIHZhciBlLCBuO1xuICAgIHRyeSB7XG4gICAgICBmb3IgKHZhciBpID0gaWUodCksIHMgPSBpLm5leHQoKTsgIXMuZG9uZTsgcyA9IGkubmV4dCgpKSB7XG4gICAgICAgIHZhciBhID0gcy52YWx1ZTtcbiAgICAgICAgaWYgKHIubmV4dChhKSwgci5jbG9zZWQpXG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGMpIHtcbiAgICAgIGUgPSB7IGVycm9yOiBjIH07XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHMgJiYgIXMuZG9uZSAmJiAobiA9IGkucmV0dXJuKSAmJiBuLmNhbGwoaSk7XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBpZiAoZSkgdGhyb3cgZS5lcnJvcjtcbiAgICAgIH1cbiAgICB9XG4gICAgci5jb21wbGV0ZSgpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIEd0KHQpIHtcbiAgcmV0dXJuIG5ldyBLKGZ1bmN0aW9uKHIpIHtcbiAgICB1aSh0LCByKS5jYXRjaChmdW5jdGlvbihlKSB7XG4gICAgICByZXR1cm4gci5lcnJvcihlKTtcbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBsaSh0KSB7XG4gIHJldHVybiBHdChyaSh0KSk7XG59XG5mdW5jdGlvbiB1aSh0LCByKSB7XG4gIHZhciBlLCBuLCBpLCBzO1xuICByZXR1cm4gQW8odGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKCkge1xuICAgIHZhciBhLCBjO1xuICAgIHJldHVybiBOdCh0aGlzLCBmdW5jdGlvbih1KSB7XG4gICAgICBzd2l0Y2ggKHUubGFiZWwpIHtcbiAgICAgICAgY2FzZSAwOlxuICAgICAgICAgIHUudHJ5cy5wdXNoKFswLCA1LCA2LCAxMV0pLCBlID0gT28odCksIHUubGFiZWwgPSAxO1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgcmV0dXJuIFs0LCBlLm5leHQoKV07XG4gICAgICAgIGNhc2UgMjpcbiAgICAgICAgICBpZiAobiA9IHUuc2VudCgpLCAhIW4uZG9uZSkgcmV0dXJuIFszLCA0XTtcbiAgICAgICAgICBpZiAoYSA9IG4udmFsdWUsIHIubmV4dChhKSwgci5jbG9zZWQpXG4gICAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgICAgIHUubGFiZWwgPSAzO1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgcmV0dXJuIFszLCAxXTtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHJldHVybiBbMywgMTFdO1xuICAgICAgICBjYXNlIDU6XG4gICAgICAgICAgcmV0dXJuIGMgPSB1LnNlbnQoKSwgaSA9IHsgZXJyb3I6IGMgfSwgWzMsIDExXTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIHJldHVybiB1LnRyeXMucHVzaChbNiwgLCA5LCAxMF0pLCBuICYmICFuLmRvbmUgJiYgKHMgPSBlLnJldHVybikgPyBbNCwgcy5jYWxsKGUpXSA6IFszLCA4XTtcbiAgICAgICAgY2FzZSA3OlxuICAgICAgICAgIHUuc2VudCgpLCB1LmxhYmVsID0gODtcbiAgICAgICAgY2FzZSA4OlxuICAgICAgICAgIHJldHVybiBbMywgMTBdO1xuICAgICAgICBjYXNlIDk6XG4gICAgICAgICAgaWYgKGkpIHRocm93IGkuZXJyb3I7XG4gICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICByZXR1cm4gWzddO1xuICAgICAgICBjYXNlIDExOlxuICAgICAgICAgIHJldHVybiByLmNvbXBsZXRlKCksIFsyXTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5mdW5jdGlvbiBkaSh0LCByLCBlLCBuLCBpKSB7XG4gIG4gPT09IHZvaWQgMCAmJiAobiA9IDApLCBpID09PSB2b2lkIDAgJiYgKGkgPSAhMSk7XG4gIHZhciBzID0gci5zY2hlZHVsZShmdW5jdGlvbigpIHtcbiAgICBlKCksIGkgPyB0LmFkZCh0aGlzLnNjaGVkdWxlKG51bGwsIG4pKSA6IHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgfSwgbik7XG4gIGlmICh0LmFkZChzKSwgIWkpXG4gICAgcmV0dXJuIHM7XG59XG5mdW5jdGlvbiBwaSh0LCByKSB7XG4gIHZhciBlID0gQyh0KSA/IHQgOiBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdDtcbiAgfSwgbiA9IGZ1bmN0aW9uKGkpIHtcbiAgICByZXR1cm4gaS5lcnJvcihlKCkpO1xuICB9O1xuICByZXR1cm4gbmV3IEsobik7XG59XG52YXIgZmkgPSBPZShmdW5jdGlvbih0KSB7XG4gIHJldHVybiBmdW5jdGlvbigpIHtcbiAgICB0KHRoaXMpLCB0aGlzLm5hbWUgPSBcIkVtcHR5RXJyb3JcIiwgdGhpcy5tZXNzYWdlID0gXCJubyBlbGVtZW50cyBpbiBzZXF1ZW5jZVwiO1xuICB9O1xufSk7XG5mdW5jdGlvbiBtaSh0LCByKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlLCBuKSB7XG4gICAgdmFyIGkgPSAhMSwgcztcbiAgICB0LnN1YnNjcmliZSh7XG4gICAgICBuZXh0OiBmdW5jdGlvbihhKSB7XG4gICAgICAgIHMgPSBhLCBpID0gITA7XG4gICAgICB9LFxuICAgICAgZXJyb3I6IG4sXG4gICAgICBjb21wbGV0ZTogZnVuY3Rpb24oKSB7XG4gICAgICAgIGkgPyBlKHMpIDogbihuZXcgZmkoKSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24geWkodCkge1xuICByZXR1cm4gdCBpbnN0YW5jZW9mIERhdGUgJiYgIWlzTmFOKHQpO1xufVxudmFyIGhpID0gT2UoZnVuY3Rpb24odCkge1xuICByZXR1cm4gZnVuY3Rpb24oZSkge1xuICAgIGUgPT09IHZvaWQgMCAmJiAoZSA9IG51bGwpLCB0KHRoaXMpLCB0aGlzLm1lc3NhZ2UgPSBcIlRpbWVvdXQgaGFzIG9jY3VycmVkXCIsIHRoaXMubmFtZSA9IFwiVGltZW91dEVycm9yXCIsIHRoaXMuaW5mbyA9IGU7XG4gIH07XG59KTtcbmZ1bmN0aW9uIF9pKHQsIHIpIHtcbiAgdmFyIGUgPSB5aSh0KSA/IHsgZmlyc3Q6IHQgfSA6IHR5cGVvZiB0ID09IFwibnVtYmVyXCIgPyB7IGVhY2g6IHQgfSA6IHQsIG4gPSBlLmZpcnN0LCBpID0gZS5lYWNoLCBzID0gZS53aXRoLCBhID0gcyA9PT0gdm9pZCAwID8gZ2kgOiBzLCBjID0gZS5zY2hlZHVsZXIsIHUgPSBjID09PSB2b2lkIDAgPyBIbyA6IGMsIGwgPSBlLm1ldGEsIHAgPSBsID09PSB2b2lkIDAgPyBudWxsIDogbDtcbiAgaWYgKG4gPT0gbnVsbCAmJiBpID09IG51bGwpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk5vIHRpbWVvdXQgcHJvdmlkZWQuXCIpO1xuICByZXR1cm4geG8oZnVuY3Rpb24obSwgZykge1xuICAgIHZhciBmLCB5LCBoID0gbnVsbCwgdyA9IDAsIFAgPSBmdW5jdGlvbihFKSB7XG4gICAgICB5ID0gZGkoZywgdSwgZnVuY3Rpb24oKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZi51bnN1YnNjcmliZSgpLCBvaShhKHtcbiAgICAgICAgICAgIG1ldGE6IHAsXG4gICAgICAgICAgICBsYXN0VmFsdWU6IGgsXG4gICAgICAgICAgICBzZWVuOiB3XG4gICAgICAgICAgfSkpLnN1YnNjcmliZShnKTtcbiAgICAgICAgfSBjYXRjaCAoUSkge1xuICAgICAgICAgIGcuZXJyb3IoUSk7XG4gICAgICAgIH1cbiAgICAgIH0sIEUpO1xuICAgIH07XG4gICAgZiA9IG0uc3Vic2NyaWJlKCRvKGcsIGZ1bmN0aW9uKEUpIHtcbiAgICAgIHkgPT0gbnVsbCB8fCB5LnVuc3Vic2NyaWJlKCksIHcrKywgZy5uZXh0KGggPSBFKSwgaSA+IDAgJiYgUChpKTtcbiAgICB9LCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24oKSB7XG4gICAgICB5ICE9IG51bGwgJiYgeS5jbG9zZWQgfHwgeSA9PSBudWxsIHx8IHkudW5zdWJzY3JpYmUoKSwgaCA9IG51bGw7XG4gICAgfSkpLCAhdyAmJiBQKG4gIT0gbnVsbCA/IHR5cGVvZiBuID09IFwibnVtYmVyXCIgPyBuIDogK24gLSB1Lm5vdygpIDogaSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZ2kodCkge1xuICB0aHJvdyBuZXcgaGkodCk7XG59XG5jbGFzcyBnZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuc2V0ID0gKHIpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIkxvYWRlZE9uY2UgaXMgYWxyZWFkeSBpbiBzdWNjZXNzIHN0YXRlXCIpO1xuICAgICAgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcInN1Y2Nlc3NcIiwgaXNTdWNjZXNzOiAhMCwgbG9hZGVkVmFsdWU6IHIgfSwgdGhpcy5fc3ViamVjdC5uZXh0KHIpLCB0aGlzLl9zdWJqZWN0LmNvbXBsZXRlKCk7XG4gICAgfSwgdGhpcy50aHJvdyA9IChyLCBlKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkZWRPbmNlIGlzIGFscmVhZHkgaW4gc3VjY2VzcyBzdGF0ZVwiKTtcbiAgICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJlcnJvclwiLCBpc1N1Y2Nlc3M6ICExLCBlcnJvcjogciwgZXJyTXNnOiBlIH0sIHRoaXMuX3N1YmplY3QuZXJyb3Iocik7XG4gICAgfSwgdGhpcy5nZXRWYWx1ZUlmTG9hZGVkRWxzZSA9IChyKSA9PiB0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIgPyB0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlIDogciwgdGhpcy5zdWJzY3JpYmUgPSAocikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICByKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiICYmIHIodGhpcy5fY3VycmVudCk7XG4gICAgICBjb25zdCBlID0gdGhpcy5fc3ViamVjdC5zdWJzY3JpYmUoe1xuICAgICAgICBuZXh0OiAoKSA9PiB7XG4gICAgICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcInN1Y2Nlc3NcIilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGUgKG5leHQpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgcih0aGlzLl9jdXJyZW50KSwgZS51bnN1YnNjcmliZSgpO1xuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJlcnJvclwiKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZSAoZXJyb3IpOiBwbGVhc2UgbWFrZSBzdXJlIHRvIHVwZGF0ZSBfY3VycmVudCBiZWZvcmUgdGhlIHN1YmplY3RcIik7XG4gICAgICAgICAgcih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSwgdGhpcy53YWl0Rm9yTG9hZCA9IChyKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKSByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRoaXMuX2N1cnJlbnQubG9hZGVkVmFsdWUpO1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcImVycm9yXCIpIHJldHVybiBQcm9taXNlLnJlamVjdCh0aGlzLl9jdXJyZW50LmVycm9yKTtcbiAgICAgIHRoaXMuX2N1cnJlbnQuc3RhdHVzICE9PSBcImluaXRpYWxcIiAmJiAkZSh0aGlzLl9jdXJyZW50KTtcbiAgICAgIGNvbnN0IGUgPSB7XG4gICAgICAgIGZpcnN0OiByLnRpbWVvdXRTZWMgKiAxZTMsXG4gICAgICAgIHdpdGg6ICgpID0+IHBpKCgpID0+IG5ldyBFcnJvcihyLnRpbWVvdXRFcnJNc2cpKVxuICAgICAgfTtcbiAgICAgIHJldHVybiBtaSh0aGlzLl9zdWJqZWN0LnBpcGUoX2koZSkpKTtcbiAgICB9LCB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiaW5pdGlhbFwiLCBpc1N1Y2Nlc3M6ICExIH0sIHRoaXMuX3N1YmplY3QgPSBuZXcgcXQoKTtcbiAgfVxuICBnZXQgY3VycmVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5fY3VycmVudDtcbiAgfVxufVxuY29uc3QgeyBsb2dfXzogd2ksIGVycl9fOiBiaSB9ID0gayhcImluaXQtZmxvd3NcIiksIHllID0gKHQsIHIpID0+IHtcbiAgY29uc3QgZSA9IG5ldyBnZSgpO1xuICByZXR1cm4ge1xuICAgIHB1Ymxpc2hlcjogZSxcbiAgICBpbml0aWFsaXplOiBhc3luYyAobikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKGUuY3VycmVudC5pc1N1Y2Nlc3MpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhpcyBmbG93IGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuXCIpO1xuICAgICAgICBjb25zdCBpID0gYXdhaXQgcihuKTtcbiAgICAgICAgd2koYOKclCAke3R9IGZsb3cgaW5pdGlhbGl6ZWQgc3VjY2Vzc2Z1bGx5LiBSZXN1bHQ6YCwgaSksIGUuc2V0KGkpO1xuICAgICAgfSBjYXRjaCAoaSkge1xuICAgICAgICBiaShg8J2ZrSAke3R9IGZsb3cgaW5pdGlhbGl6YXRpb24gZmFpbGVkLiBFcnJvcjpgLCBZKGkpLCBcIkRldGFpbHM6XCIsIGkpLCBlLnRocm93KGksIFkoaSkpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbn0sIHZpID0gYXN5bmMgKHQsIHIsIGUpID0+IHtcbiAgYXdhaXQgUHJvbWlzZS5hbGwoT2JqZWN0LnZhbHVlcyh0KS5tYXAoKG4pID0+IG4uaW5pdGlhbGl6ZSh7IGNvbnRleHQ6IHIsIGZvcm1DYWxsYmFja3M6IGUgfSkpKTtcbn0sIEVpID0gKCkgPT4gKHtcbiAgLy8g8J+SoSBBZGQgbmV3IGluaXQgZmxvd3MgaGVyZVxuICAvLyBTdHJpcGUgUFJcbiAgc3RyaXBlUFI6IHllKFwiU3RyaXBlIFBSXCIsIEwuc3RyaXBlUFIuaW5pdCksXG4gIC8vIFN0cmlwZSBMaW5rXG4gIHN0cmlwZUxpbms6IHllKFwiU3RyaXBlIExpbmtcIiwgTC5zdHJpcGVMaW5rLmluaXQpLFxuICAvLyBBaXJ3YWxsZXggR29vZ2xlUGF5XG4gIGFpcndhbGxleEdvb2dsZVBheTogeWUoXCJBaXJ3YWxsZXggR1BheVwiLCBMLmFpcndhbGxleEdvb2dsZVBheS5pbml0KSxcbiAgLy8gQWlyd2FsbGV4IEFwcGxlUGF5XG4gIGFpcndhbGxleEFwcGxlUGF5OiB5ZShcIkFpcndhbGxleCBBcHBsZVBheVwiLCBMLmFpcndhbGxleEFwcGxlUGF5LmluaXQpXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG59KSwgeyBlcnJfXzogU2kgfSA9IGsoXCJmb3JtLWNhbGxiYWNrc1wiKSwgRiA9IHokMS5mdW5jdGlvbigpLm9wdGlvbmFsKCksIGl0ID0geiQxLm9iamVjdCh7XG4gIG9uRm9jdXM6IEYsXG4gIG9uQmx1cjogRixcbiAgb25DaGFuZ2U6IEYsXG4gIG9uTG9hZDogRixcbiAgb25Mb2FkRXJyb3I6IEYsXG4gIG9uVmFsaWRhdGlvbkVycm9yOiBGLFxuICBvbkNoZWNrb3V0U3RhcnRlZDogRixcbiAgb25DaGVja291dFN1Y2Nlc3M6IEYsXG4gIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogRixcbiAgb25DaGVja291dEVycm9yOiBGLFxuICBvblBheW1lbnRSZXF1ZXN0TG9hZDogRlxufSksIHggPSBjbGFzcyB4IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5zZXRDYWxsYmFja3MgPSAocikgPT4ge1xuICAgICAgdGhpcy5fY2FsbGJhY2tzID0geC5jcmVhdGVFbXB0eUNhbGxiYWNrcygpLCBPYmplY3QuZW50cmllcyhyKS5mb3JFYWNoKChbZSwgbl0pID0+IHtcbiAgICAgICAgY29uc3QgaSA9IFh0KGUsIG4gPz8geC5OT09QLCBTaSk7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrc1tlXSA9IGk7XG4gICAgICB9KTtcbiAgICB9LCB0aGlzLl9jYWxsYmFja3MgPSB4LmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSByZWFkLW9ubHkgdmVyc2lvbiBvZiB0aGUgY2FsbGJhY2tzIG9iamVjdC5cbiAgICovXG4gIGdldCBnZXQoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fY2FsbGJhY2tzIH07XG4gIH1cbn07XG54Lk5PT1AgPSAoKSA9PiB7XG59LCB4LmNyZWF0ZUVtcHR5Q2FsbGJhY2tzID0gKCkgPT4ge1xuICBjb25zdCByID0ge307XG4gIHJldHVybiBPYmplY3Qua2V5cyhpdC5rZXlvZigpLmVudW0pLmZvckVhY2goKGUpID0+IHtcbiAgICByW2VdID0geC5OT09QO1xuICB9KSwgcjtcbn0sIHguZnJvbU9iamVjdCA9IChyKSA9PiB7XG4gIGNvbnN0IGUgPSBuZXcgeCgpO1xuICByZXR1cm4gZS5zZXRDYWxsYmFja3MoaXQucGFyc2UocikpLCBlO1xufTtcbmxldCBVZSA9IHg7XG5jbGFzcyBDaSB7XG4gIGNvbnN0cnVjdG9yKHIsIGUsIG4sIGkpIHtcbiAgICB0aGlzLmhhbmRsZU1lc3NhZ2UgPSAocykgPT4ge1xuICAgICAgaWYgKCFzLnNvdXJjZSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc291cmNlIGZvdW5kXCIpO1xuICAgICAgaWYgKHN0KHMub3JpZ2luKSAhPT0gc3QodGhpcy5iYXNlVXJsKSB8fCB0eXBlb2Ygcy5kYXRhID09IFwib2JqZWN0XCIgJiYgcy5kYXRhLnBlbnBhbClcbiAgICAgICAgcmV0dXJuO1xuICAgICAgbGV0IGEgPSBudWxsO1xuICAgICAgdHJ5IHtcbiAgICAgICAgYSA9IFVyKEpTT04ucGFyc2Uocy5kYXRhKSk7XG4gICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIltPSlNdIFVua25vd24gZXZlbnQuIElnbm9yaW5nOlwiLCBtKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKCF0aGlzLnZhbGlkYXRlRXZlbnQoYSkpIHJldHVybjtcbiAgICAgIGNvbnN0IHsgZWxlbWVudElkOiB1LCBwYXlsb2FkOiBsIH0gPSBhLCBwID0gbC50eXBlO1xuICAgICAgc3dpdGNoIChwKSB7XG4gICAgICAgIGNhc2UgXCJMQVlPVVRcIjpcbiAgICAgICAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzLnNldEZvcm1IZWlnaHQobC5oZWlnaHQgPyBgJHtsLmhlaWdodH1weGAgOiBcIjEwMCVcIik7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJGT0NVU1wiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Gb2N1cyh1LCBsLmVsZW1lbnRUeXBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkJMVVJcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQmx1cih1LCBsLmVsZW1lbnRUeXBlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkNIQU5HRVwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25DaGFuZ2UodSwgbC5lbGVtZW50VHlwZSwgbC5lcnJvcnMpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTE9BREVEXCI6XG4gICAgICAgICAgdGhpcy5ldmVudFRhcmdldHNbdV0gPSBzLnNvdXJjZSwgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5vbkNkZUxvYWRlZChsKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkxPQURfRVJST1JcIjpcbiAgICAgICAgICB0aGlzLmludGVybmFsQ2FsbGJhY2tzLm9uQ2RlTG9hZEVycm9yKGwubWVzc2FnZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJWQUxJREFUSU9OX0VSUk9SXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vblZhbGlkYXRpb25FcnJvcihsLmVsZW1lbnRUeXBlLCBsLmVycm9ycywgdSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgY29uc29sZS53YXJuKFwiW2Zvcm1dIFVuaGFuZGxlZCBldmVudCB0eXBlOlwiLCBwKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLnZhbGlkYXRlRXZlbnQgPSAocykgPT4gcy5mb3JtSWQgIT09IHRoaXMuZm9ybUlkIHx8ICFzLmVsZW1lbnRJZCA/IChjb25zb2xlLmxvZyhcIltPSlNdIGZvcm1JZFwiLCB0aGlzLmZvcm1JZCwgcy5mb3JtSWQpLCBjb25zb2xlLndhcm4oXCJbZm9ybV0gSWdub3JpbmcgdW5rbm93biBldmVudDpcIiwgcyksICExKSA6IHRoaXMubm9uY2VzLmhhcyhzLm5vbmNlKSA/IChjb25zb2xlLndhcm4oXCJbZm9ybV0gSWdub3JpbmcgZHVwbGljYXRlIGV2ZW50OlwiLCBzKSwgITEpIDogKHRoaXMubm9uY2VzLmFkZChzLm5vbmNlKSwgITApLCB0aGlzLmV2ZW50VGFyZ2V0cyA9IHt9LCB0aGlzLm5vbmNlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCksIHRoaXMuZm9ybUlkID0gciwgdGhpcy5iYXNlVXJsID0gZSwgdGhpcy5mb3JtQ2FsbGJhY2tzID0gbiwgdGhpcy5pbnRlcm5hbENhbGxiYWNrcyA9IGk7XG4gIH1cbn1cbmNvbnN0IHN0ID0gKHQpID0+IG5ldyBVUkwodCkub3JpZ2luO1xuYXN5bmMgZnVuY3Rpb24ga2kodCwgcikge1xuICBjb25zdCBuID0gYXdhaXQgY29ubmVjdFRvQ2hpbGQoe1xuICAgIGlmcmFtZTogdCxcbiAgICBkZWJ1ZzogITEsXG4gICAgY2hpbGRPcmlnaW46IHJcbiAgfSkucHJvbWlzZSwgaSA9IGF3YWl0IHhyKG4pO1xuICBpZiAoISRyKG4sIGkpKVxuICAgIHRocm93IG5ldyBFcnJvcihcIkdvdCBpbnZhbGlkIENERSBjb25uZWN0aW9uIG9iamVjdFwiKTtcbiAgcmV0dXJuIG47XG59XG5jbGFzcyBQaSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuY29ubmVjdGlvbnMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpO1xuICB9XG4gIGFkZENvbm5lY3Rpb24ociwgZSkge1xuICAgIHRoaXMuY29ubmVjdGlvbnMuc2V0KHIsIGUpO1xuICB9XG4gIGdldENvbm5lY3Rpb24oKSB7XG4gICAgY29uc3QgciA9IHRoaXMuY29ubmVjdGlvbnMudmFsdWVzKCkubmV4dCgpLnZhbHVlO1xuICAgIGlmICghcilcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbm5lY3Rpb24gbm90IGZvdW5kXCIpO1xuICAgIHJldHVybiByO1xuICB9XG4gIGdldEFsbENvbm5lY3Rpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25zO1xuICB9XG59XG5jb25zdCBBaSA9ICh0LCByLCBlKSA9PiB7XG4gIGNvbnN0IHsgc3RyaXBlUFI6IG4gfSA9IHQ7XG4gIG4ucHVibGlzaGVyLnN1YnNjcmliZSgoaSkgPT4ge1xuICAgIGlmIChpLmlzU3VjY2Vzcykge1xuICAgICAgY29uc3QgcyA9IGkubG9hZGVkVmFsdWUsIGEgPSBzLmlzQXZhaWxhYmxlICYmIHMuYXZhaWxhYmxlUHJvdmlkZXJzLmFwcGxlUGF5LCBjID0gcy5pc0F2YWlsYWJsZSAmJiBzLmF2YWlsYWJsZVByb3ZpZGVycy5nb29nbGVQYXksIHUgPSB7XG4gICAgICAgIGFwcGxlX3BheToge1xuICAgICAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICAgICAgaXNBdmFpbGFibGU6IGEsXG4gICAgICAgICAgc3RhcnRGbG93OiBhc3luYyAobCkgPT4ge1xuICAgICAgICAgICAgYSAmJiBhdChcImFwcGxlX3BheVwiLCBzLCByLCBlLCBsKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGdvb2dsZV9wYXk6IHtcbiAgICAgICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiBjLFxuICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKGwpID0+IHtcbiAgICAgICAgICAgIGMgJiYgYXQoXCJnb29nbGVfcGF5XCIsIHMsIHIsIGUsIGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGUuZ2V0Lm9uUGF5bWVudFJlcXVlc3RMb2FkKHUpO1xuICAgIH1cbiAgfSk7XG59LCBhdCA9ICh0LCByLCBlLCBuLCBpKSA9PiBMLnN0cmlwZVBSLnJ1bih7XG4gIGNvbnRleHQ6IGUsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogTGUoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCB0KSxcbiAgbm9uQ2RlRm9ybUlucHV0czogb2UoZS5mb3JtRGl2KSxcbiAgZm9ybUNhbGxiYWNrczogbixcbiAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyOiB0LCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBpID09IG51bGwgPyB2b2lkIDAgOiBpLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgaW5pdFJlc3VsdDogclxufSksIGN0ID0gXCJUaGUgc2VjdXJlIGZvcm0gZmFpbGVkIHRvIGxvYWQgcHJvcGVybHkuIFBsZWFzZSBjaGVjayB5b3VyIGludGVybmV0IGNvbm5lY3Rpb24sIG9yIHRyeSBhZ2FpbiBsYXRlci5cIiwgeyBsb2dfXzogcSwgZXJyX186IEIgfSA9IGsoXCJvcC1mb3JtXCIpLCBHID0gY2xhc3MgRyB7XG4gIGNvbnN0cnVjdG9yKHIpIHtcbiAgICB0aGlzLmNkZUxvYWRFdmVudCA9IG5ldyBnZSgpLCB0aGlzLmFueUNkZUNvbm4gPSBuZXcgZ2UoKSwgdGhpcy5jb250ZXh0ID0gbmV3IGdlKCksIHRoaXMuaW5pdEZsb3dzID0gRWkoKSwgdGhpcy5zdGFydEZvcm1Jbml0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcShcIkluaXRpYWxpemluZyBPcGVuUGF5IGZvcm06XCIpLCBxKFwi4pScIFdhaXRpbmcgZm9yIENERSBsb2FkIGV2ZW50Li4uXCIpO1xuICAgICAgICBjb25zdCBlID0gYXdhaXQgdGhpcy5jZGVMb2FkRXZlbnQud2FpdEZvckxvYWQoe1xuICAgICAgICAgIHRpbWVvdXRTZWM6IDEyMCxcbiAgICAgICAgICB0aW1lb3V0RXJyTXNnOiBjdFxuICAgICAgICB9KTtcbiAgICAgICAgcShcIuKUnCBDREUgbG9hZCBldmVudCByZWNlaXZlZFwiKSwgcShcIuKUnCBXYWl0aW5nIGZvciBDREUgY29ubmVjdGlvbi4uLlwiKTtcbiAgICAgICAgY29uc3QgbiA9IGF3YWl0IHRoaXMuYW55Q2RlQ29ubi53YWl0Rm9yTG9hZCh7XG4gICAgICAgICAgdGltZW91dFNlYzogMTIwLFxuICAgICAgICAgIHRpbWVvdXRFcnJNc2c6IGN0XG4gICAgICAgIH0pO1xuICAgICAgICBxKFwi4pScIENERSBjb25uZWN0aW9uIHJlY2VpdmVkXCIpLCBxKFwi4pScIENyZWF0aW5nIE9KUyBjb250ZXh0LCBzZXR0aW5nIHVwIGhhbmRsZXJzLi4uXCIpO1xuICAgICAgICBjb25zdCBpID0gRy5idWlsZE9qc0Zsb3dDb250ZXh0KFxuICAgICAgICAgIHRoaXMuY29uZmlnLFxuICAgICAgICAgIGUsXG4gICAgICAgICAgbixcbiAgICAgICAgICB0aGlzLmdldEZvcm1EaXYoKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNvbnRleHQuc2V0KGkpLCBBaSh0aGlzLmluaXRGbG93cywgaSwgdGhpcy5mb3JtQ2FsbGJhY2tzKSwgcShcIuKUnCBTdGFydGluZyBPSlMgaW5pdCBmbG93cy4uLlwiKSwgYXdhaXQgdmkodGhpcy5pbml0Rmxvd3MsIGksIHRoaXMuZm9ybUNhbGxiYWNrcyksIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkKGUudG90YWxBbW91bnRBdG9tcywgZS5jdXJyZW5jeSksIHEoXCLilbAgRG9uZSBpbml0aWFsaXppbmcgT0pTIGZsb3dzLlwiKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc3QgbiA9IFkoZSk7XG4gICAgICAgIEIoXCLilbAgRXJyb3IgaW5pdGlhbGl6aW5nIE9QIGZvcm06XCIsIG4pLCB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uTG9hZEVycm9yKG4pO1xuICAgICAgfVxuICAgIH0sIHRoaXMuc2V0Rm9ybUhlaWdodCA9IChlKSA9PiB7XG4gICAgICB0aGlzLmZvcm1Qcm9wZXJ0aWVzLmhlaWdodCA9IGUsIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzICYmIE9iamVjdC52YWx1ZXModGhpcy5yZWdpc3RlcmVkRWxlbWVudHMpLmZvckVhY2goKG4pID0+IHtcbiAgICAgICAgbiAmJiAobi5ub2RlLnN0eWxlLmhlaWdodCA9IGUpO1xuICAgICAgfSk7XG4gICAgfSwgdGhpcy5vbkNkZUxvYWRlZCA9IChlKSA9PiB7XG4gICAgICB0aGlzLmNkZUxvYWRFdmVudC5jdXJyZW50LmlzU3VjY2VzcyB8fCB0aGlzLmNkZUxvYWRFdmVudC5zZXQoZSk7XG4gICAgfSwgdGhpcy5vbkNkZUxvYWRFcnJvciA9IChlKSA9PiB7XG4gICAgICB0aGlzLmNkZUxvYWRFdmVudC5jdXJyZW50LmlzU3VjY2VzcyB8fCB0aGlzLmNkZUxvYWRFdmVudC50aHJvdyhuZXcgRXJyb3IoZSksIGUpO1xuICAgIH0sIHRoaXMuY3JlYXRlRWxlbWVudCA9IChlLCBuID0ge30pID0+IHtcbiAgICAgIGlmICghdGhpcy5jb25maWcpIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgZm9ybSBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgICBjb25zdCBpID0gZXIucGFyc2UoZSksIHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpLCBhID0gdGhpcy5idWlsZFF1ZXJ5U3RyaW5nKG4pO1xuICAgICAgcy5uYW1lID0gYCR7aX0tZWxlbWVudGA7XG4gICAgICBjb25zdCBjID0gbmV3IFVSTChgL2FwcC92MS8ke3MubmFtZX0vYCwgdGhpcy5jb25maWcuYmFzZVVybCk7XG4gICAgICByZXR1cm4gYy5zZWFyY2ggPSBhLnRvU3RyaW5nKCksIHMuc3JjID0gYy5ocmVmLCBzLnN0eWxlLmJvcmRlciA9IFwibm9uZVwiLCBzLnN0eWxlLndpZHRoID0gXCIxMDAlXCIsIHRoaXMucmVnaXN0ZXJJZnJhbWUoaSwgcyk7XG4gICAgfSwgdGhpcy5yZWdpc3RlcklmcmFtZSA9IChlLCBuKSA9PiB7XG4gICAgICBjb25zdCBpID0ge1xuICAgICAgICB0eXBlOiBlLFxuICAgICAgICBub2RlOiBuLFxuICAgICAgICBtb3VudDogKHMpID0+IHtcbiAgICAgICAgICB2YXIgYTtcbiAgICAgICAgICByZXR1cm4gKGEgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHMpKSA9PSBudWxsID8gdm9pZCAwIDogYS5hcHBlbmRDaGlsZChuKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3RUb0VsZW1lbnQoeyB0eXBlOiBpLnR5cGUsIG5vZGU6IGkubm9kZSB9KSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgfHwgKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0ge1xuICAgICAgICBbcmUuQ0FSRF06IHZvaWQgMCxcbiAgICAgICAgW3JlLkNBUkRfTlVNQkVSXTogdm9pZCAwLFxuICAgICAgICBbcmUuQ0FSRF9FWFBJUlldOiB2b2lkIDAsXG4gICAgICAgIFtyZS5DQVJEX0NWQ106IHZvaWQgMFxuICAgICAgfSksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzW2VdID0gaSwgaTtcbiAgICB9LCB0aGlzLmJ1aWxkUXVlcnlTdHJpbmcgPSAoZSkgPT4ge1xuICAgICAgY29uc3QgbiA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICAgIHJldHVybiBuLmFwcGVuZChcInJlZmVyZXJcIiwgdGhpcy5yZWZlcnJlciksIG4uYXBwZW5kKFwiZm9ybUlkXCIsIHRoaXMuZm9ybUlkKSwgZS5zdHlsZXMgJiYgbi5hcHBlbmQoXCJzdHlsZXNcIiwganIoZS5zdHlsZXMpKSwgbi5hcHBlbmQoXCJzZWN1cmVUb2tlblwiLCB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuKSwgbjtcbiAgICB9LCB0aGlzLmNvbm5lY3RUb0VsZW1lbnQgPSAoZSkgPT4ge1xuICAgICAga2koZS5ub2RlKS50aGVuKChuKSA9PiB7XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuYWRkQ29ubmVjdGlvbihlLnR5cGUsIG4pLCB0aGlzLmFueUNkZUNvbm4uY3VycmVudC5pc1N1Y2Nlc3MgfHwgdGhpcy5hbnlDZGVDb25uLnNldChuKTtcbiAgICAgIH0pLmNhdGNoKChuKSA9PiBCKFwiW0ZPUk1dIEVycm9yIGNvbm5lY3RpbmcgdG8gQ0RFIGlmcmFtZVwiLCBuKSk7XG4gICAgfSwgdGhpcy5nZXRGb3JtRGl2ID0gKCkgPT4gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmZvcm1UYXJnZXQpID8/IGRvY3VtZW50LmJvZHksIHRoaXMuc3VibWl0Q2FyZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGUgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICBpZiAoIWUpIHtcbiAgICAgICAgQihcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIEwuY29tbW9uQ0MucnVuKHtcbiAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBMZShlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFwiY3JlZGl0X2NhcmRcIiksXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IG9lKGUuZm9ybURpdiksXG4gICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgY3VycmVudENkZUNvbm5lY3Rpb25zOiB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmdldEFsbENvbm5lY3Rpb25zKClcbiAgICAgICAgfSxcbiAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIC8vIFRoaXMgZmxvdyByZXF1aXJlcyBubyBpbml0aWFsaXphdGlvblxuICAgICAgfSk7XG4gICAgfSwgdGhpcy5nZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcyA9ICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpKSB7XG4gICAgICAgIEIoXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIGdldHRpbmcgYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kcy5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLmluaXRGbG93cykubWFwKChbbiwgaV0pID0+ICh7XG4gICAgICAgIG5hbWU6IG4sXG4gICAgICAgIC4uLmkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpXG4gICAgICB9KSk7XG4gICAgfSwgdGhpcy5nZW5lcmFsU3VibWl0ID0gKGUsIG4pID0+IHtcbiAgICAgIGNvbnN0IGkgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICBpZiAoIWkpIHtcbiAgICAgICAgQihcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHN3aXRjaCAoZSkge1xuICAgICAgICBjYXNlIFwicG9ja3l0LXBheXBhbFwiOlxuICAgICAgICAgIHJldHVybiBMLnBvY2t5dFBheXBhbC5ydW4oe1xuICAgICAgICAgICAgY29udGV4dDogaSxcbiAgICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogTGUoaS5jaGVja291dFBheW1lbnRNZXRob2RzLCBcInBheXBhbFwiLCBcInBvY2t5dFwiKSxcbiAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IG9lKGkuZm9ybURpdiksXG4gICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICBjdXN0b21QYXJhbXM6IHsgc2V0dGluZ3M6IG4gfSxcbiAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgIH0pO1xuICAgICAgICBjYXNlIFwiYWlyd2FsbGV4LWdvb2dsZS1wYXlcIjpcbiAgICAgICAgICByZXR1cm4gdGhpcy5pbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnB1Ymxpc2hlci5zdWJzY3JpYmUoKHMpID0+IHtcbiAgICAgICAgICAgIHMuaXNTdWNjZXNzICYmIHMubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUgPyBzLmxvYWRlZFZhbHVlLnN0YXJ0RmxvdyhuKSA6IEIoXG4gICAgICAgICAgICAgIFwiYWlyd2FsbGV4LWdvb2dsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIGNhc2UgXCJhaXJ3YWxsZXgtYXBwbGUtcGF5XCI6XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaW5pdEZsb3dzLmFpcndhbGxleEFwcGxlUGF5LnB1Ymxpc2hlci5zdWJzY3JpYmUoKHMpID0+IHtcbiAgICAgICAgICAgIHMuaXNTdWNjZXNzICYmIHMubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUgPyBzLmxvYWRlZFZhbHVlLnN0YXJ0RmxvdyhuKSA6IEIoXG4gICAgICAgICAgICAgIFwiYWlyd2FsbGV4LWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAkZShlKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLnN1Ym1pdCA9IHRoaXMuc3VibWl0Q2FyZCwgdGhpcy5kZXN0cm95ID0gKCkgPT4ge1xuICAgICAgcShcIkRlc3Ryb3lpbmcgT3BlblBheSBmb3JtLi4uXCIpO1xuICAgICAgZm9yIChjb25zdCBlIG9mIE9iamVjdC52YWx1ZXModGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPz8ge30pKVxuICAgICAgICBlICYmIGUubm9kZS5yZW1vdmUoKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmV2ZW50SGFuZGxlci5oYW5kbGVNZXNzYWdlLmJpbmQodGhpcy5ldmVudEhhbmRsZXIpKSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSBudWxsLCBkZWxldGUgd2luZG93Lm9qcztcbiAgICB9LCB0aGlzLnVwZGF0ZUNhbGxiYWNrcyA9IChlKSA9PiB7XG4gICAgICB0aGlzLmZvcm1DYWxsYmFja3Muc2V0Q2FsbGJhY2tzKGUpO1xuICAgIH0sIEcuYXNzaWduQXNTaW5nbGV0b24odGhpcyksIHRoaXMub2pzVmVyc2lvbiA9IFwiMC4yLjhcIiwgdGhpcy5vanNSZWxlYXNlVmVyc2lvbiA9IFwibG9jYWxfYnVpbGRcIiwgdGhpcy5iYXNlVXJsID0gci5iYXNlVXJsID8/IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIiwgdGhpcy5jb25maWcgPSB7IC4uLnIsIGJhc2VVcmw6IHRoaXMuYmFzZVVybCB9LCB0aGlzLmZvcm1DYWxsYmFja3MgPSBVZS5mcm9tT2JqZWN0KHIpLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IG51bGwsIHRoaXMuZm9ybUlkID0gYG9wanMtZm9ybS0ke3Y0KCl9YCwgdGhpcy5yZWZlcnJlciA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4sIHRoaXMuZm9ybVRhcmdldCA9IHIuZm9ybVRhcmdldCA/PyBcImJvZHlcIiwgdGhpcy5mb3JtUHJvcGVydGllcyA9IHsgaGVpZ2h0OiBcIjFweFwiIH0sIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIgPSBuZXcgUGkoKSwgdGhpcy5ldmVudEhhbmRsZXIgPSBuZXcgQ2kodGhpcy5mb3JtSWQsIHRoaXMuYmFzZVVybCwgdGhpcy5mb3JtQ2FsbGJhY2tzLCB7XG4gICAgICBzZXRGb3JtSGVpZ2h0OiB0aGlzLnNldEZvcm1IZWlnaHQsXG4gICAgICBvbkNkZUxvYWRlZDogdGhpcy5vbkNkZUxvYWRlZCxcbiAgICAgIG9uQ2RlTG9hZEVycm9yOiB0aGlzLm9uQ2RlTG9hZEVycm9yXG4gICAgfSksIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmV2ZW50SGFuZGxlci5oYW5kbGVNZXNzYWdlLmJpbmQodGhpcy5ldmVudEhhbmRsZXIpKSwgdGhpcy5zdGFydEZvcm1Jbml0KCk7XG4gIH1cbiAgZ2V0IGNoZWNrb3V0U2VjdXJlVG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMuY29uZmlnLmNoZWNrb3V0U2VjdXJlVG9rZW47XG4gIH1cbn07XG5HLm9qc0Zsb3dzID0gTCwgRy5hc3NpZ25Bc1NpbmdsZXRvbiA9IChyKSA9PiB7XG4gIGlmIChHLmdldEluc3RhbmNlKCkpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiT3BlblBheSBpbnN0YW5jZSBhbHJlYWR5IGV4aXN0cy4gT25seSBvbmUgaW5zdGFuY2UgaXMgYWxsb3dlZC5cIik7XG4gIHdpbmRvdy5vanMgPSByO1xufSwgRy5nZXRJbnN0YW5jZSA9ICgpID0+IHdpbmRvdy5vanMgPz8gbnVsbCwgRy5idWlsZE9qc0Zsb3dDb250ZXh0ID0gKHIsIGUsIG4sIGkpID0+ICh7XG4gIGNoZWNrb3V0U2VjdXJlVG9rZW46IHIuY2hlY2tvdXRTZWN1cmVUb2tlbixcbiAgYmFzZVVybDogbmV3IFVSTChyLmJhc2VVcmwgPz8gZHQpLm9yaWdpbixcbiAgZm9ybURpdjogaSxcbiAgZWxlbWVudHNTZXNzaW9uSWQ6IGUuc2Vzc2lvbklkLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiBlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsXG4gIGFueUNkZUNvbm5lY3Rpb246IG4sXG4gIGN1c3RvbUluaXRQYXJhbXM6IHIuY3VzdG9tSW5pdFBhcmFtcyA/PyB7fVxufSk7XG5sZXQgbHQgPSBHO1xuXG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgbG9jOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgbXNnOiB6JDEuc3RyaW5nKCksXG4gIHVybDogeiQxLnN0cmluZygpXG59KTtcbnokMS5hcnJheShQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxKTtcbmNvbnN0IFpvZEZpZWxkRXJyb3IgPSB6JDEub2JqZWN0KHtcbiAgY29kZTogeiQxLnN0cmluZygpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIHBhdGg6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5hcnJheShab2RGaWVsZEVycm9yKTtcbmNvbnN0IG1ha2VDYWxsYmFja1NhZmUgPSAoY2FsbGJhY2tOYW1lLCBmbiwgZXJyb3JMb2dnZXIpID0+IHtcbiAgcmV0dXJuICguLi5hcmdzKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBmbiguLi5hcmdzKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgZXJyb3JMb2dnZXIoYFtmb3JtXSBFcnJvciBydW5uaW5nIGNhbGxiYWNrICgke2NhbGxiYWNrTmFtZX0pOmAsIGVycm9yKTtcbiAgICAgIHJldHVybiB2b2lkIDA7XG4gICAgfVxuICB9O1xufTtcblxuY29uc3QgUmVxdWlyZWRTdHJpbmcgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBDYW5ub3QgYmUgYmxhbmtgIH0pO1xuY29uc3QgT3B0aW9uYWxTdHJpbmcgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm9wdGlvbmFsKCk7XG5jb25zdCBudWxsT3JVbmRlZk9yJDEgPSAoelR5cGUpID0+IHokMS5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnZhciBGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChGaWVsZE5hbWUyKSA9PiB7XG4gIEZpZWxkTmFtZTJbXCJGSVJTVF9OQU1FXCJdID0gXCJmaXJzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkxBU1RfTkFNRVwiXSA9IFwibGFzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkVNQUlMXCJdID0gXCJlbWFpbFwiO1xuICBGaWVsZE5hbWUyW1wiWklQX0NPREVcIl0gPSBcInppcENvZGVcIjtcbiAgRmllbGROYW1lMltcIkNJVFlcIl0gPSBcImNpdHlcIjtcbiAgRmllbGROYW1lMltcIlNUQVRFXCJdID0gXCJzdGF0ZVwiO1xuICBGaWVsZE5hbWUyW1wiQ09VTlRSWVwiXSA9IFwiY291bnRyeVwiO1xuICBGaWVsZE5hbWUyW1wiQUREUkVTU1wiXSA9IFwiYWRkcmVzc1wiO1xuICBGaWVsZE5hbWUyW1wiUEhPTkVcIl0gPSBcInBob25lXCI7XG4gIEZpZWxkTmFtZTJbXCJQUk9NT1RJT05fQ09ERVwiXSA9IFwicHJvbW90aW9uQ29kZVwiO1xuICByZXR1cm4gRmllbGROYW1lMjtcbn0pKEZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBGaWVsZE5hbWVFbnVtID0geiQxLm5hdGl2ZUVudW0oRmllbGROYW1lKTtcbnZhciBQcml2YXRlRmllbGROYW1lID0gLyogQF9fUFVSRV9fICovICgoUHJpdmF0ZUZpZWxkTmFtZTIpID0+IHtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZE51bWJlclwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkRXhwaXJ5XCI7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmRDdmNcIjtcbiAgcmV0dXJuIFByaXZhdGVGaWVsZE5hbWUyO1xufSkoUHJpdmF0ZUZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBQcml2YXRlRmllbGROYW1lRW51bSA9IHokMS5uYXRpdmVFbnVtKFByaXZhdGVGaWVsZE5hbWUpO1xuY29uc3QgQWxsRmllbGROYW1lcyA9IHokMS51bmlvbihbRmllbGROYW1lRW51bSwgUHJpdmF0ZUZpZWxkTmFtZUVudW1dKTtcbnZhciBFbGVtZW50VHlwZUVudW0gPSAvKiBAX19QVVJFX18gKi8gKChFbGVtZW50VHlwZUVudW0yKSA9PiB7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEXCJdID0gXCJjYXJkXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZC1udW1iZXJcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkLWV4cGlyeVwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmQtY3ZjXCI7XG4gIHJldHVybiBFbGVtZW50VHlwZUVudW0yO1xufSkoRWxlbWVudFR5cGVFbnVtIHx8IHt9KTtcbnokMS5uYXRpdmVFbnVtKEVsZW1lbnRUeXBlRW51bSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QkMSA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IFBheW1lbnRNZXRob2RNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGNhcmROdW1iZXI6IE9wdGlvbmFsU3RyaW5nLFxuICBleHBpcnk6IE9wdGlvbmFsU3RyaW5nLFxuICBjdmM6IE9wdGlvbmFsU3RyaW5nXG59KTtcbnokMS5vYmplY3Qoe1xuICBiYWNrZ3JvdW5kQ29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICBjb2xvcjogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRGYW1pbHk6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250U2l6ZTogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRXZWlnaHQ6IE9wdGlvbmFsU3RyaW5nLFxuICBtYXJnaW46IE9wdGlvbmFsU3RyaW5nLFxuICBwYWRkaW5nOiBPcHRpb25hbFN0cmluZyxcbiAgbGV0dGVyU3BhY2luZzogT3B0aW9uYWxTdHJpbmcsXG4gIGxpbmVIZWlnaHQ6IE9wdGlvbmFsU3RyaW5nLFxuICBoaWRlSWNvbjogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgRXZlbnRUeXBlID0geiQxLmVudW0oW1xuICAvLyBFbGVtZW50IC0+IEZvcm1cbiAgXCJMQVlPVVRcIixcbiAgXCJMT0FERURcIixcbiAgXCJCTFVSXCIsXG4gIFwiRk9DVVNcIixcbiAgXCJDSEFOR0VcIixcbiAgXCJUT0tFTklaRV9TVEFSVEVEXCIsXG4gIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiLFxuICBcIlBBWU1FTlRfRkxPV19TVEFSVEVEXCIsXG4gIFwiVE9LRU5JWkVfU1VDQ0VTU1wiLFxuICBcIkNIRUNLT1VUX1NVQ0NFU1NcIixcbiAgXCJMT0FEX0VSUk9SXCIsXG4gIFwiVkFMSURBVElPTl9FUlJPUlwiLFxuICBcIlRPS0VOSVpFX0VSUk9SXCIsXG4gIFwiQ0hFQ0tPVVRfRVJST1JcIixcbiAgXCJTRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTXCIsXG4gIC8vIEZvcm0gLT4gRWxlbWVudFxuICBcIlRPS0VOSVpFXCIsXG4gIFwiQ0hFQ0tPVVRcIixcbiAgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIlxuXSk7XG5jb25zdCBHZW5lcmljRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVfU1RBUlRFRFwiLCBcIkNIRUNLT1VUX1NUQVJURURcIl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3QoeyB0eXBlOiBHZW5lcmljRXZlbnRUeXBlIH0pO1xuY29uc3QgSW5wdXRFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJCTFVSXCIsIFwiRk9DVVNcIiwgXCJDSEFOR0VcIl0pO1xuY29uc3QgSW5wdXRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogSW5wdXRFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBQcml2YXRlRmllbGROYW1lRW51bSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEVycm9yRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiTE9BRF9FUlJPUlwiLCBcIlRPS0VOSVpFX0VSUk9SXCIsIFwiQ0hFQ0tPVVRfRVJST1JcIl0pO1xuY29uc3QgRXJyb3JFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogRXJyb3JFdmVudFR5cGUsXG4gIG1lc3NhZ2U6IFJlcXVpcmVkU3RyaW5nLFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlZBTElEQVRJT05fRVJST1JcIl0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSxcbiAgZWxlbWVudFR5cGU6IEFsbEZpZWxkTmFtZXMsXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgTGF5b3V0RXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkxBWU9VVCksXG4gIGhlaWdodDogUmVxdWlyZWRTdHJpbmdcbn0pO1xuY29uc3QgTG9hZGVkRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkxPQURFRCksXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIHRvdGFsQW1vdW50QXRvbXM6IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IE9wdGlvbmFsU3RyaW5nLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiB6JDEuYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEpXG59KTtcbmNvbnN0IFBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5QQVlNRU5UX0ZMT1dfU1RBUlRFRCksXG4gIG5leHRBY3Rpb25NZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBzdGFydFBGTWV0YWRhdGE6IHokMS5vcHRpb25hbCh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTUyksXG4gIHBheW1lbnRNZXRob2RJZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFJlcXVpcmVkRm9ybUZpZWxkcyA9IHokMS5vYmplY3Qoe1xuICBbXCJmaXJzdE5hbWVcIiAvKiBGSVJTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImxhc3ROYW1lXCIgLyogTEFTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImVtYWlsXCIgLyogRU1BSUwgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IFBSRm9ybUZpZWxkcyA9IHokMS5vYmplY3Qoe1xuICBbXCJmaXJzdE5hbWVcIiAvKiBGSVJTVF9OQU1FICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxhc3ROYW1lXCIgLyogTEFTVF9OQU1FICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImVtYWlsXCIgLyogRU1BSUwgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJhZGRyZXNzXCIgLyogQUREUkVTUyAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJjaXR5XCIgLyogQ0lUWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzdGF0ZVwiIC8qIFNUQVRFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgU3VibWl0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVcIiwgXCJDSEVDS09VVFwiLCBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXSk7XG5jb25zdCBTdWJtaXRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogU3VibWl0RXZlbnRUeXBlLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdDQ1BNSWQ6IE9wdGlvbmFsU3RyaW5nXG59KS5leHRlbmQoUmVxdWlyZWRGb3JtRmllbGRzLnNoYXBlKTtcbmNvbnN0IFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5UT0tFTklaRV9TVUNDRVNTKSxcbiAgaXNSZWFkeUZvckNoZWNrb3V0OiB6JDEuYm9vbGVhbigpXG59KTtcbmNvbnN0IENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5DSEVDS09VVF9TVUNDRVNTKSxcbiAgaW52b2ljZVVybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25JZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcklkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgRXZlbnRQYXlsb2FkID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICBHZW5lcmljRXZlbnRQYXlsb2FkLFxuICBJbnB1dEV2ZW50UGF5bG9hZCxcbiAgRXJyb3JFdmVudFBheWxvYWQsXG4gIFZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCxcbiAgTGF5b3V0RXZlbnRQYXlsb2FkLFxuICBMb2FkZWRFdmVudFBheWxvYWQsXG4gIFN1Ym1pdEV2ZW50UGF5bG9hZCxcbiAgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQsXG4gIFBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCxcbiAgU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWRcbl0pO1xueiQxLm9iamVjdCh7XG4gIHBheWxvYWQ6IEV2ZW50UGF5bG9hZCxcbiAgbm9uY2U6IFJlcXVpcmVkU3RyaW5nLFxuICBmb3JtSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICBlbGVtZW50SWQ6IFJlcXVpcmVkU3RyaW5nXG59KTtcbnokMS5vYmplY3Qoe1xuICBhbW91bnRBdG9tOiB6JDEubnVtYmVyKCksXG4gIC8qKlxuICAgKiBUaGUgdGhyZWUtbGV0dGVyIElTTyA0MjE3IGN1cnJlbmN5IGNvZGUgZm9yIHRoZSBwYXltZW50LlxuICAgKi9cbiAgY3VycmVuY3k6IFJlcXVpcmVkU3RyaW5nXG59KTtcbnokMS5lbnVtKFtcImFwcGxlX3BheVwiLCBcImdvb2dsZV9wYXlcIl0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogbnVsbE9yVW5kZWZPciQxKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBDaGVja291dFN1Y2Nlc3NSZXNwb25zZSA9IHokMS5vYmplY3Qoe1xuICBpbnZvaWNlX3VybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25faWRzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJfaWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBGaWVsZFZhbGlkYXRpb25FcnJvciA9IHokMS5vYmplY3Qoe1xuICBlbGVtZW50VHlwZTogeiQxLnN0cmluZygpLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSA9IHokMS5vYmplY3Qoe1xuICBzdWNjZXNzOiB6JDEubGl0ZXJhbChmYWxzZSksXG4gIGVycm9yX3R5cGU6IHokMS5saXRlcmFsKFwidmFsaWRhdGlvbl9lcnJvclwiKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoRmllbGRWYWxpZGF0aW9uRXJyb3IpXG59KTtcbnokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJzdWNjZXNzXCIsIFtcbiAgeiQxLm9iamVjdCh7IHN1Y2Nlc3M6IHokMS5saXRlcmFsKHRydWUpIH0pLFxuICBUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlXG5dKTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IFJlcXVpcmVkRm9ybUZpZWxkcyxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmVudW0oW1wic3VjY2Vzc1wiIC8qIFNVQ0NFU1MgKi8sIFwiZmFpbHVyZVwiIC8qIEZBSUxVUkUgKi8sIFwiY2FuY2VsbGVkXCIgLyogQ0FOQ0VMTEVEICovXSksXG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGhyZWY6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLm51bGxhYmxlKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiB6JDEuc3RyaW5nKCksXG4gIGluaXRpYWxfaW50ZW50X2lkOiB6JDEuc3RyaW5nKCksXG4gIGNvbnNlbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgdGhlaXJfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IENvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGluaXRpYWxfaW50ZW50X2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgY29uc2VudF9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgcGF5bWVudF9zZXNzaW9uOiBudWxsT3JVbmRlZk9yJDEoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJwcmVzZW50XCIsIFtcbiAgeiQxLm9iamVjdCh7IHByZXNlbnQ6IHokMS5saXRlcmFsKHRydWUpLCBocmVmOiB6JDEuc3RyaW5nKCkgfSksXG4gIHokMS5vYmplY3QoeyBwcmVzZW50OiB6JDEubGl0ZXJhbChmYWxzZSkgfSlcbl0pO1xueiQxLm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kczogeiQxLmFycmF5KFBheW1lbnRNZXRob2RNaW5pbWFsKSxcbiAgcGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2U6IG51bGxPclVuZGVmT3IkMShDaGVja291dFN1Y2Nlc3NSZXNwb25zZSksXG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogbnVsbE9yVW5kZWZPciQxKHokMS5hcnJheShDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEpKVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG59KTtcblxuY29uc3QgY29udmVydFN0eWxlc1RvUXVlcnlTdHJpbmcgPSAoc3R5bGVzKSA9PiB7XG4gIGNvbnN0IHNlcmlhbGl6ZWRTdHlsZXMgPSBKU09OLnN0cmluZ2lmeShzdHlsZXMpO1xuICByZXR1cm4gc2VyaWFsaXplZFN0eWxlcztcbn07XG5cbmNvbnN0IG51bGxPclVuZGVmT3IgPSAoelR5cGUpID0+IHokMS5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnokMS5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogYENhbm5vdCBiZSBibGFua2AgfSk7XG56JDEub2JqZWN0KHtcbiAgY2RlX3Jlc3BvbnNlX3R5cGU6IHokMS5saXRlcmFsKFwiZXJyb3JcIiksXG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKSxcbiAgaGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5zdHJpbmcoKSkub3B0aW9uYWwoKVxufSk7XG56JDEuZW51bShbXCJ1c2RcIiwgXCJicmxcIl0pO1xuY29uc3QgQ291cG9uTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBuYW1lOiB6JDEuc3RyaW5nKCksXG4gIGFtb3VudF9hdG9tX29mZjogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkpLFxuICBwZXJjZW50X29mZjogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkpLFxuICBjdXJyZW5jeTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBkdXJhdGlvbjogeiQxLnN0cmluZygpLFxuICBkdXJhdGlvbl9pbl9tb250aHM6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpKVxufSk7XG5jb25zdCBMaW5lSXRlbSA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkZXNjcmlwdGlvbjogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBwcmljZV9pZDogeiQxLnN0cmluZygpLFxuICBiaWxsaW5nX2ludGVydmFsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpLmludCgpKSxcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBCcmFuZFNldHRpbmdzID0geiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSk7XG5jb25zdCBCcmFuZCA9IHokMS5vYmplY3Qoe1xuICBuYW1lOiB6JDEuc3RyaW5nKCksXG4gIHNldHRpbmdzOiBudWxsT3JVbmRlZk9yKEJyYW5kU2V0dGluZ3MpXG59KTtcbmNvbnN0IENoZWNrb3V0UGF5bWVudE1ldGhvZCA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGlkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkuaW50KCkpLFxuICBzdWJzY3JpcHRpb25faXRlbXM6IHokMS5hcnJheShTdWJzY3JpcHRpb25JdGVtTWluaW1hbCksXG4gIHRyaWFsX3N0YXJ0OiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHRyaWFsX2VuZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbmNvbnN0IEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpXG59KTtcbmNvbnN0IEludm9pY2VMaW5lSXRlbU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgYW1vdW50X2F0b21fY29uc2lkZXJpbmdfZGlzY291bnRfYXBwbGllZDogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpLFxuICBzdWJzY3JpcHRpb25faXRlbV9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IERpc2NvdW50TWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBjb3Vwb246IENvdXBvbk1pbmltYWxcbn0pO1xuY29uc3QgSW52b2ljZU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRzOiB6JDEuYXJyYXkoRGlzY291bnRNaW5pbWFsKSxcbiAgaG9zdGVkX2ludm9pY2VfdXJsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmVzOiB6JDEuYXJyYXkoSW52b2ljZUxpbmVJdGVtTWluaW1hbCksXG4gIHJlbWFpbmluZ19hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0YXhfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdG90YWxfZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkoSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsKVxufSk7XG5jb25zdCBDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgY3JlYXRlZDogeiQxLmFycmF5KFN1YnNjcmlwdGlvbk1pbmltYWwpLFxuICBpbnZvaWNlczogeiQxLmFycmF5KEludm9pY2VNaW5pbWFsKVxufSk7XG5jb25zdCBQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSA9IHokMS5vYmplY3Qoe1xuICBwcmV2aWV3OiBDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwsXG4gIHByZXZpZXdfcG9zdF90cmlhbDogbnVsbE9yVW5kZWZPcihDcmVhdGVTdWJzY3JpcHRpb25SZXNwb25zZU1pbmltYWwpLFxuICBjb3Vwb25zOiB6JDEuYXJyYXkoQ291cG9uTWluaW1hbClcbn0pO1xuY29uc3QgX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbiA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwib3BlblwiKSxcbiAgdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KExpbmVJdGVtKSxcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYnJhbmQ6IEJyYW5kLFxuICBzdWJzX3ByZXZpZXc6IG51bGxPclVuZGVmT3IoUHJldmlld0NoZWNrb3V0UmVzcG9uc2UpLFxuICAvLyBOdWxsIGluIHNldHVwIG1vZGVcbiAgbWV0aG9kc19hdmFpbGFibGU6IHokMS5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QpXG59KTtcbmNvbnN0IFBheW1lbnRGb3JtUHJlZmlsbCA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJtb2RlXCIsIFtcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmxpdGVyYWwoXCJzZXR1cFwiKSxcbiAgICBjdXJyZW5jeTogeiQxLm51bGxhYmxlKHokMS51bmRlZmluZWQoKSlcbiAgfSkuZXh0ZW5kKF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24uc2hhcGUpLFxuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEuZW51bShbXCJwYXltZW50XCIsIFwic3Vic2NyaXB0aW9uXCJdKSxcbiAgICBjdXJyZW5jeTogeiQxLnN0cmluZygpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKVxuXSk7XG5jb25zdCBDb21wbGV0ZWRGb3JtUHJlZmlsbCA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiY29tcGxldGVcIilcbn0pO1xuY29uc3QgRXhwaXJlZEZvcm1QcmVmaWxsID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJleHBpcmVkXCIpXG59KTtcbnokMS51bmlvbihbUGF5bWVudEZvcm1QcmVmaWxsLCBDb21wbGV0ZWRGb3JtUHJlZmlsbCwgRXhwaXJlZEZvcm1QcmVmaWxsXSk7XG56JDEub2JqZWN0KHtcbiAgbG9nbzogeiQxLnN0cmluZygpLFxuICBpY29uOiB6JDEuc3RyaW5nKCksXG4gIHByaW1hcnlfY29sb3I6IHokMS5zdHJpbmcoKSxcbiAgc2Vjb25kYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcGF5bWVudF9pbnB1dDogeiQxLmFueSgpLFxuICAvLyBTaG91bGQgZm9sbG93IEFueVBheW1lbnRJbnB1dCBmcm9tIENERVxuICBjdXN0b21lcl9maXJzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfbGFzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfemlwX2NvZGU6IHokMS5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfY291bnRyeTogeiQxLnN0cmluZygpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoTGluZUl0ZW0pLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjYW5jZWxfYXRfZW5kOiB6JDEuYm9vbGVhbigpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdXNlX2NvbmZpcm1lZF9wbV9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZF9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICByZXR1cm5fdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yKTtcbmNvbnN0IE5ld0N1c3RvbWVyRmllbGRzID0geiQxLm9iamVjdCh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFByaWNlUXR5ID0geiQxLm9iamVjdCh7XG4gIHByaWNlX2lkOiB6JDEuc3RyaW5nKCksXG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKCkuaW50KClcbn0pO1xuY29uc3QgQ2FydEluZm8gPSB6JDEub2JqZWN0KHtcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KFByaWNlUXR5KSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBQcm9jZXNzb3JTcGVjaWZpY01ldGFkYXRhID0geiQxLm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHBheW1lbnRfcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aGVpcl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHVzZV9wYXlfZmlyc3RfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IENhcnRJbmZvLm9wdGlvbmFsKClcbn0pLmV4dGVuZChOZXdDdXN0b21lckZpZWxkcy5zaGFwZSkuZXh0ZW5kKFByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEuc2hhcGUpO1xueiQxLm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeiQxLmFycmF5KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBmaWVsZHM6IFBSRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2Rcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSlcbiAgLy8gVGhpcyBpcyBvcHRpb25hbCBpbiBDREUsIGJ1dCBub3QgaW4gT0pTIG1vdmluZyBmb3J3YXJkXG59KTtcbnokMS5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHokMS5hcnJheSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSksXG4gIGNjX3BtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLnJlY29yZCh6JDEuYW55KCkpO1xueiQxLm9iamVjdCh7XG4gIGZpcnN0X25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmUxOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmUyOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmUzOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGNpdHk6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgc3RhdGU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgY291bnRyeTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICB6aXBfY29kZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICB1cGRhdGVfcHJvY2Vzc29yX2N1c3RvbWVyOiBudWxsT3JVbmRlZk9yKHokMS5ib29sZWFuKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBmaXJzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBhZGRyZXNzOiBudWxsT3JVbmRlZk9yKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5cbmZ1bmN0aW9uIGZpeFByb3RvKHRhcmdldCwgcHJvdG90eXBlKSB7XG4gIHZhciBzZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiAgc2V0UHJvdG90eXBlT2YgPyBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvdHlwZSkgOiB0YXJnZXQuX19wcm90b19fID0gcHJvdG90eXBlO1xufVxuZnVuY3Rpb24gZml4U3RhY2sodGFyZ2V0LCBmbikge1xuICBpZiAoZm4gPT09IHZvaWQgMCkge1xuICAgIGZuID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB9XG5cbiAgdmFyIGNhcHR1cmVTdGFja1RyYWNlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIGNhcHR1cmVTdGFja1RyYWNlICYmIGNhcHR1cmVTdGFja1RyYWNlKHRhcmdldCwgZm4pO1xufVxuXG52YXIgX19leHRlbmRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX2V4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiBleHRlbmRTdGF0aWNzKGQsIGIpIHtcbiAgICBfZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7XG4gICAgICBfX3Byb3RvX186IFtdXG4gICAgfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICBkLl9fcHJvdG9fXyA9IGI7XG4gICAgfSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgZm9yICh2YXIgcCBpbiBiKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gX2V4dGVuZFN0YXRpY3MoZCwgYik7XG4gIH07XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbCkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuXG4gICAgX2V4dGVuZFN0YXRpY3MoZCwgYik7XG5cbiAgICBmdW5jdGlvbiBfXygpIHtcbiAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBkO1xuICAgIH1cblxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgfTtcbn0oKTtcblxuKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgX19leHRlbmRzKEN1c3RvbUVycm9yLCBfc3VwZXIpO1xuXG4gIGZ1bmN0aW9uIEN1c3RvbUVycm9yKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgX25ld1RhcmdldCA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlLCBvcHRpb25zKSB8fCB0aGlzO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCAnbmFtZScsIHtcbiAgICAgIHZhbHVlOiBfbmV3VGFyZ2V0Lm5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGZpeFByb3RvKF90aGlzLCBfbmV3VGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgZml4U3RhY2soX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBDdXN0b21FcnJvcjtcbn0pKEVycm9yKTtcblxuY29uc3QgY3JlYXRlT2pzRmxvd0xvZ2dlcnMgPSAocHJlZml4KSA9PiB7XG4gIGNvbnN0IGxvZyA9ICguLi5hcmdzKSA9PiB7XG4gICAgd2luZG93W1wiY29uc29sZVwiXS5sb2coYCR7ZmUuZ3JlZW4uYm9sZChcIm9qcy9cIil9JHtmZS5ib2xkLmdyYXkoYCR7cHJlZml4fWApfVx0YCwgLi4uYXJncyk7XG4gIH07XG4gIGNvbnN0IGVyciA9ICguLi5hcmdzKSA9PiB7XG4gICAgd2luZG93W1wiY29uc29sZVwiXS53YXJuKGAke2ZlLnJlZC5ib2xkKFwib2pzL1wiKX0ke2ZlLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBsb2csXG4gICAgZXJyLFxuICAgIGxvZ19fOiBsb2csXG4gICAgZXJyX186IGVyclxuICB9O1xufTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInN0cmlwZV9saW5rXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxueiQxLm9iamVjdCh7XG4gIFwib3AtcG9ja3l0LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC10eG4tbm9cIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC1yZWYtbm9cIjogeiQxLnN0cmluZygpXG59KTtcblxueiQxLm9iamVjdCh7XG4gIFwib3AtYWlyd2FsbGV4LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFpcndhbGxleC1pbml0aWFsLWludGVudC1pZFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIjogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IEFXWF9MT0FESU5HID0ge1xuICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gIGlzTG9hZGluZzogdHJ1ZSxcbiAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gIH1cbn07XG5cbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS51bmlvbihbeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksIHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKV0pLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJwb2NreXRcIiksXG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInBheXBhbFwiKVxufSk7XG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIHBheXBhbF9pZnJhbWVfdXJsOiB6JDEuc3RyaW5nKCksXG4gICAgdmVyaWZ5X3Rva2VuOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBtZXNzYWdlSGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gICAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLmFueSgpKSxcbiAgICBtZXNzYWdlVHlwZTogeiQxLnN0cmluZygpLFxuICAgIG1lc3NhZ2VCb2R5OiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKVxuICB9KSxcbiAgb3JpZ2luOiB6JDEubGl0ZXJhbChcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbVwiKVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcblxuY29uc3QgUFJfTE9BRElORyA9IHtcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgIGNvbnNvbGUud2FybihcbiAgICAgIGBzdGFydEZsb3cgdHJpZ2dlcmVkIHdoaWxlIHBheW1lbnQgcmVxdWVzdCBpcyBzdGlsbCBub3QgcmVhZHkuIFxuICAgICAgWW91IGNhbiBjaGVjayB0aGUgXCIuaXNMb2FkaW5nXCIgcGFyYW0gdG8ga25vdyB3aGVuIGEgcGF5bWVudCByZXF1ZXN0IGlzIHN0aWxsIGxvYWRpbmcsIFxuICAgICAgYW5kIFwiLmlzQXZhaWxhYmxlXCIgdG8ga25vdyBpZiBhIHBheW1lbnQgcmVxdWVzdCBpcyBhdmFpbGFibGUuYFxuICAgICk7XG4gIH1cbn07XG5cbmNvbnN0IHsgZXJyX18gfSA9IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzKFwiZm9ybS1jYWxsYmFja3NcIik7XG5jb25zdCBPcHRpb25hbEZuID0geiQxLmZ1bmN0aW9uKCkub3B0aW9uYWwoKTtcbmNvbnN0IFpvZEZvcm1DYWxsYmFja3MgPSB6JDEub2JqZWN0KHtcbiAgb25Gb2N1czogT3B0aW9uYWxGbixcbiAgb25CbHVyOiBPcHRpb25hbEZuLFxuICBvbkNoYW5nZTogT3B0aW9uYWxGbixcbiAgb25Mb2FkOiBPcHRpb25hbEZuLFxuICBvbkxvYWRFcnJvcjogT3B0aW9uYWxGbixcbiAgb25WYWxpZGF0aW9uRXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRTdGFydGVkOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0U3VjY2VzczogT3B0aW9uYWxGbixcbiAgb25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0RXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBPcHRpb25hbEZuXG59KTtcbmNsYXNzIEZvcm1DYWxsYmFja3Mge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvKipcbiAgICAgKiBTZXRzIEFMTCBmb3JtIGNhbGxiYWNrcy4gTm90ZSB0aGF0IGFsbCBvbGQgY2FsbGJhY2tzIGFyZSByZW1vdmVkLlxuICAgICAqL1xuICAgIHRoaXMuc2V0Q2FsbGJhY2tzID0gKHJhd0NhbGxiYWNrcykgPT4ge1xuICAgICAgdGhpcy5fY2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5jcmVhdGVFbXB0eUNhbGxiYWNrcygpO1xuICAgICAgT2JqZWN0LmVudHJpZXMocmF3Q2FsbGJhY2tzKS5mb3JFYWNoKChba2V5LCByYXdDYWxsYmFja10pID0+IHtcbiAgICAgICAgY29uc3Qgc2FmZUNhbGxiYWNrID0gbWFrZUNhbGxiYWNrU2FmZShrZXksIHJhd0NhbGxiYWNrID8/IEZvcm1DYWxsYmFja3MuTk9PUCwgZXJyX18pO1xuICAgICAgICB0aGlzLl9jYWxsYmFja3Nba2V5XSA9IHNhZmVDYWxsYmFjaztcbiAgICAgIH0pO1xuICAgIH07XG4gICAgdGhpcy5fY2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5jcmVhdGVFbXB0eUNhbGxiYWNrcygpO1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5OT09QID0gKCkgPT4ge1xuICAgIH07XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzID0gKCkgPT4ge1xuICAgICAgY29uc3QgeCA9IHt9O1xuICAgICAgT2JqZWN0LmtleXMoWm9kRm9ybUNhbGxiYWNrcy5rZXlvZigpLmVudW0pLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICB4W2tleV0gPSBGb3JtQ2FsbGJhY2tzLk5PT1A7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiB4O1xuICAgIH07XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLmZyb21PYmplY3QgPSAob2JqKSA9PiB7XG4gICAgICBjb25zdCBpbnN0YW5jZSA9IG5ldyBGb3JtQ2FsbGJhY2tzKCk7XG4gICAgICBpbnN0YW5jZS5zZXRDYWxsYmFja3MoWm9kRm9ybUNhbGxiYWNrcy5wYXJzZShvYmopKTtcbiAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9O1xuICB9XG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcmVhZC1vbmx5IHZlcnNpb24gb2YgdGhlIGNhbGxiYWNrcyBvYmplY3QuXG4gICAqL1xuICBnZXQgZ2V0KCkge1xuICAgIHJldHVybiB7IC4uLnRoaXMuX2NhbGxiYWNrcyB9O1xuICB9XG59XG5cbmNvbnN0IHVzZVJlYWN0aXZlRm9ybUNhbGxiYWNrcyA9IChwcm9wcykgPT4ge1xuICBjb25zdCBmb3JtQ2FsbGJhY2tzID0gRm9ybUNhbGxiYWNrcy5mcm9tT2JqZWN0KHtcbiAgICBvbkZvY3VzOiBwcm9wcy5vbkZvY3VzLFxuICAgIG9uQmx1cjogcHJvcHMub25CbHVyLFxuICAgIG9uQ2hhbmdlOiBwcm9wcy5vbkNoYW5nZSxcbiAgICBvbkxvYWQ6IHByb3BzLm9uTG9hZCxcbiAgICBvbkxvYWRFcnJvcjogcHJvcHMub25Mb2FkRXJyb3IsXG4gICAgb25WYWxpZGF0aW9uRXJyb3I6IHByb3BzLm9uVmFsaWRhdGlvbkVycm9yLFxuICAgIG9uQ2hlY2tvdXRTdGFydGVkOiBwcm9wcy5vbkNoZWNrb3V0U3RhcnRlZCxcbiAgICBvbkNoZWNrb3V0U3VjY2VzczogcHJvcHMub25DaGVja291dFN1Y2Nlc3MsXG4gICAgb25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzOiBwcm9wcy5vblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3MsXG4gICAgb25DaGVja291dEVycm9yOiBwcm9wcy5vbkNoZWNrb3V0RXJyb3IsXG4gICAgb25QYXltZW50UmVxdWVzdExvYWQ6IHByb3BzLm9uUGF5bWVudFJlcXVlc3RMb2FkXG4gIH0pO1xuICBpZiAobHQuZ2V0SW5zdGFuY2UoKSkge1xuICAgIGx0LmdldEluc3RhbmNlKCk/LnVwZGF0ZUNhbGxiYWNrcyhmb3JtQ2FsbGJhY2tzLmdldCk7XG4gIH1cbiAgcmV0dXJuIGZvcm1DYWxsYmFja3MuZ2V0O1xufTtcblxuY29uc3QgdXNlUGF5bWVudFJlcXVlc3RzID0gKG9yaWdpbmFsT25QYXltZW50UmVxdWVzdExvYWQpID0+IHtcbiAgY29uc3QgW3BheW1lbnRSZXF1ZXN0cywgc2V0UGF5bWVudFJlcXVlc3RzXSA9IHVzZVN0YXRlKHtcbiAgICBhcHBsZV9wYXk6IFBSX0xPQURJTkcsXG4gICAgZ29vZ2xlX3BheTogUFJfTE9BRElOR1xuICB9KTtcbiAgY29uc3Qgb3ZlcnJpZGVuT25QYXltZW50UmVxdWVzdExvYWQgPSB1c2VDYWxsYmFjayhcbiAgICAocGF5bWVudFJlcXVlc3RzMikgPT4ge1xuICAgICAgc2V0UGF5bWVudFJlcXVlc3RzKHBheW1lbnRSZXF1ZXN0czIpO1xuICAgICAgb3JpZ2luYWxPblBheW1lbnRSZXF1ZXN0TG9hZD8uKHBheW1lbnRSZXF1ZXN0czIpO1xuICAgIH0sXG4gICAgW29yaWdpbmFsT25QYXltZW50UmVxdWVzdExvYWRdXG4gICk7XG4gIHJldHVybiB7IHBheW1lbnRSZXF1ZXN0cywgb3ZlcnJpZGVuT25QYXltZW50UmVxdWVzdExvYWQgfTtcbn07XG5cbmNvbnN0IEZPUk1fVEFSR0VUID0gXCJvcF9vanNfZm9ybVwiO1xuY29uc3QgRWxlbWVudHNGb3JtID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IFtvcEZvcm0sIHNldE9wRm9ybV0gPSB1c2VTdGF0ZSgpO1xuICBjb25zdCBbZWxlbWVudHNDb250ZXh0VmFsdWUsIHNldEVsZW1lbnRzQ29udGV4dFZhbHVlXSA9IHVzZVN0YXRlKG51bGwpO1xuICBjb25zdCB7IHBheW1lbnRSZXF1ZXN0cywgb3ZlcnJpZGVuT25QYXltZW50UmVxdWVzdExvYWQgfSA9IHVzZVBheW1lbnRSZXF1ZXN0cyhwcm9wcy5vblBheW1lbnRSZXF1ZXN0TG9hZCk7XG4gIGNvbnN0IFtsb2FkZWQsIHNldExvYWRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtzdHJpcGVMaW5rQ3RybCwgc2V0U3RyaXBlTGlua0N0cmxdID0gdXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFthaXJ3YWxsZXgsIHNldEFpcndhbGxleF0gPSB1c2VTdGF0ZSh7XG4gICAgZ29vZ2xlUGF5OiBBV1hfTE9BRElORyxcbiAgICBhcHBsZVBheTogQVdYX0xPQURJTkdcbiAgfSk7XG4gIGNvbnN0IGZvcm1DYWxsYmFja3MgPSB1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3Moe1xuICAgIC4uLnByb3BzLFxuICAgIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCxcbiAgICBvbkxvYWQ6ICh0b3RhbEFtb3VudEF0b21zLCBjdXJyZW5jeSkgPT4ge1xuICAgICAgc2V0TG9hZGVkKHRydWUpO1xuICAgICAgcHJvcHMub25Mb2FkPy4odG90YWxBbW91bnRBdG9tcywgY3VycmVuY3kpO1xuICAgIH1cbiAgfSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG9wRm9ybSkgcmV0dXJuO1xuICAgIGNvbnN0IGZvcm0gPSBsdC5nZXRJbnN0YW5jZSgpID8/IG5ldyBsdCh7XG4gICAgICBjaGVja291dFNlY3VyZVRva2VuOiBwcm9wcy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgZm9ybVRhcmdldDogYCMke0ZPUk1fVEFSR0VUfWAsXG4gICAgICBiYXNlVXJsOiBwcm9wcy5iYXNlVXJsLFxuICAgICAgY3VzdG9tSW5pdFBhcmFtczogcHJvcHMuY3VzdG9tSW5pdFBhcmFtcyxcbiAgICAgIC4uLmZvcm1DYWxsYmFja3NcbiAgICB9KTtcbiAgICBzZXRPcEZvcm0oZm9ybSk7XG4gICAgY29uc3QgdmFsdWUgPSBnZXRFbGVtZW50c0NvbnRleHRWYWx1ZShmb3JtKTtcbiAgICBzZXRFbGVtZW50c0NvbnRleHRWYWx1ZSh2YWx1ZSk7XG4gICAgZm9ybS5pbml0Rmxvd3Muc3RyaXBlTGluay5wdWJsaXNoZXIuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzICYmIHJlc3VsdC5sb2FkZWRWYWx1ZS5pc0F2YWlsYWJsZSkge1xuICAgICAgICBzZXRTdHJpcGVMaW5rQ3RybChyZXN1bHQubG9hZGVkVmFsdWUuY29udHJvbGxlcik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9ybS5pbml0Rmxvd3MuYWlyd2FsbGV4R29vZ2xlUGF5LnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgIHNldEFpcndhbGxleCgocHJldikgPT4gKHtcbiAgICAgICAgICBhcHBsZVBheTogcHJldi5hcHBsZVBheSxcbiAgICAgICAgICBnb29nbGVQYXk6IHJlc3VsdC5sb2FkZWRWYWx1ZVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9ybS5pbml0Rmxvd3MuYWlyd2FsbGV4QXBwbGVQYXkucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgc2V0QWlyd2FsbGV4KChwcmV2KSA9PiAoe1xuICAgICAgICAgIGdvb2dsZVBheTogcHJldi5nb29nbGVQYXksXG4gICAgICAgICAgYXBwbGVQYXk6IHtcbiAgICAgICAgICAgIC4uLnJlc3VsdC5sb2FkZWRWYWx1ZSxcbiAgICAgICAgICAgIGlzTG9hZGluZzogZmFsc2VcbiAgICAgICAgICB9XG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgZm9ybS5kZXN0cm95KCk7XG4gICAgfTtcbiAgfSwgW10pO1xuICBpZiAoIW9wRm9ybSkge1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEZyYWdtZW50LCB7fSk7XG4gIH1cbiAgY29uc3QgY2hpbGRyZW5Qcm9wcyA9IHtcbiAgICBzdWJtaXQ6IG9wRm9ybS5zdWJtaXRDYXJkLFxuICAgIHN1Ym1pdFdpdGg6IG9wRm9ybS5nZW5lcmFsU3VibWl0LFxuICAgIGFwcGxlUGF5OiBwYXltZW50UmVxdWVzdHMuYXBwbGVfcGF5LFxuICAgIGdvb2dsZVBheTogcGF5bWVudFJlcXVlc3RzLmdvb2dsZV9wYXksXG4gICAgbG9hZGVkLFxuICAgIC8vIERpc2FibGUgZHluYW1pYyBwcmV2aWV3cyBmZWF0dXJlIGZvciBub3dcbiAgICBwcmV2aWV3OiB7XG4gICAgICBhbW91bnQ6IG51bGwsXG4gICAgICBpc0xvYWRpbmc6IGZhbHNlLFxuICAgICAgZXJyb3I6IG51bGxcbiAgICB9LFxuICAgIHN0cmlwZUxpbms6IHN0cmlwZUxpbmtDdHJsLFxuICAgIGFpcndhbGxleFxuICB9O1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChGcmFnbWVudCwgeyBjaGlsZHJlbjogZWxlbWVudHNDb250ZXh0VmFsdWUgPyAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRzQ29udGV4dC5Qcm92aWRlciwgeyB2YWx1ZTogZWxlbWVudHNDb250ZXh0VmFsdWUsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8ganN4KFwiZGl2XCIsIHsgaWQ6IEZPUk1fVEFSR0VULCBjbGFzc05hbWU6IHByb3BzLmNsYXNzTmFtZSwgY2hpbGRyZW46IHByb3BzLmNoaWxkcmVuKGNoaWxkcmVuUHJvcHMpIH0pIH0pIDogLyogQF9fUFVSRV9fICovIGpzeChGcmFnbWVudCwge30pIH0pO1xufTtcbmNvbnN0IGdldEVsZW1lbnRzQ29udGV4dFZhbHVlID0gKG9wRm9ybSkgPT4ge1xuICByZXR1cm4ge1xuICAgIGZvcm1JZDogb3BGb3JtLmZvcm1JZCxcbiAgICBmb3JtSGVpZ2h0OiBvcEZvcm0uZm9ybVByb3BlcnRpZXMuaGVpZ2h0LFxuICAgIHJlZmVycmVyOiBvcEZvcm0ucmVmZXJyZXIsXG4gICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogb3BGb3JtLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgcmVnaXN0ZXJJZnJhbWU6IG9wRm9ybS5yZWdpc3RlcklmcmFtZSxcbiAgICBiYXNlVXJsOiBvcEZvcm0uYmFzZVVybFxuICB9O1xufTtcblxuY29uc3QgRWxlbWVudEZyYW1lID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgZWxlbWVudFR5cGUsIHN0eWxlcyB9ID0gcHJvcHM7XG4gIGNvbnN0IHsgZm9ybUlkLCByZWZlcnJlciwgZm9ybUhlaWdodCwgY2hlY2tvdXRTZWN1cmVUb2tlbiwgcmVnaXN0ZXJJZnJhbWUsIGJhc2VVcmwgfSA9IHVzZU9wZW5QYXlFbGVtZW50cygpO1xuICBjb25zdCBzdWJQYXRoID0gZWxlbWVudFR5cGUudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgW2hhc0xvYWRlZCwgc2V0SGFzTG9hZGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgaWZyYW1lUmVmID0gdXNlUmVmKG51bGwpO1xuICBjb25zdCBlbGVtZW50U3R5bGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIXN0eWxlcykgcmV0dXJuIFwiXCI7XG4gICAgcmV0dXJuIGNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nKHN0eWxlcyk7XG4gIH0sIFtzdHlsZXNdKTtcbiAgY29uc3QgZnJhbWVTdHlsZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBib3JkZXI6IFwibm9uZVwiLFxuICAgICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgICAgaGVpZ2h0OiBmb3JtSGVpZ2h0XG4gICAgfTtcbiAgfSwgW2Zvcm1IZWlnaHRdKTtcbiAgY29uc3QgcXVlcnlTdHJpbmcgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIWNoZWNrb3V0U2VjdXJlVG9rZW4gfHwgIXJlZmVycmVyKSByZXR1cm4gXCJcIjtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgcGFyYW1zLmFwcGVuZChcInJlZmVyZXJcIiwgcmVmZXJyZXIpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJzdHlsZXNcIiwgZWxlbWVudFN0eWxlKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwiZm9ybUlkXCIsIGZvcm1JZCk7XG4gICAgcGFyYW1zLmFwcGVuZChcInNlY3VyZVRva2VuXCIsIGNoZWNrb3V0U2VjdXJlVG9rZW4pO1xuICAgIHJldHVybiBwYXJhbXMudG9TdHJpbmcoKTtcbiAgfSwgW2VsZW1lbnRTdHlsZSwgZm9ybUlkLCByZWZlcnJlciwgY2hlY2tvdXRTZWN1cmVUb2tlbl0pO1xuICB1c2VFZmZlY3QoKCkgPT4gc2V0SGFzTG9hZGVkKHRydWUpLCBbXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpZnJhbWVSZWYuY3VycmVudCB8fCAhaGFzTG9hZGVkKSByZXR1cm47XG4gICAgcmVnaXN0ZXJJZnJhbWUoZWxlbWVudFR5cGUsIGlmcmFtZVJlZi5jdXJyZW50KTtcbiAgfSwgW2hhc0xvYWRlZF0pO1xuICBpZiAoIWNoZWNrb3V0U2VjdXJlVG9rZW4pIHtcbiAgICBjb25zb2xlLmVycm9yKFwiW2Zvcm1dIENhbm5vdCByZW5kZXIgcGFydGlhbGx5IGluaXRpYWxpemVkIGZyYW1lXCIpO1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFwiZGl2XCIsIHt9KTtcbiAgfVxuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChcbiAgICBcImlmcmFtZVwiLFxuICAgIHtcbiAgICAgIGlkOiBgb2pzLSR7c3ViUGF0aH0tZWxlbWVudGAsXG4gICAgICBuYW1lOiBgJHtzdWJQYXRofS1lbGVtZW50YCxcbiAgICAgIGNsYXNzTmFtZTogXCJvanMtaWZyYW1lXCIsXG4gICAgICBzcmM6IGAke2Jhc2VVcmx9L2FwcC92MS8ke3N1YlBhdGh9LWVsZW1lbnQvPyR7cXVlcnlTdHJpbmd9YCxcbiAgICAgIHN0eWxlOiBmcmFtZVN0eWxlLFxuICAgICAgcmVmOiBpZnJhbWVSZWZcbiAgICB9XG4gICk7XG59O1xuXG5jb25zdCBDYXJkQ3ZjRWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRF9DVkMgfSk7XG59O1xuXG5jb25zdCBDYXJkRWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRCB9KTtcbn07XG5cbmNvbnN0IENhcmRFeHBpcnlFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX0VYUElSWSB9KTtcbn07XG5cbmNvbnN0IENhcmROdW1iZXJFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX05VTUJFUiB9KTtcbn07XG5cbmV4cG9ydCB7IENhcmRDdmNFbGVtZW50LCBDYXJkRWxlbWVudCwgQ2FyZEV4cGlyeUVsZW1lbnQsIENhcmROdW1iZXJFbGVtZW50LCBFbGVtZW50c0Zvcm0sIEZpZWxkTmFtZSwgdXNlT3BlblBheUVsZW1lbnRzIH07Il0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyxpQkFBQUEsSUFBZSxjQUFBQyxJQUFZLFlBQUFDLElBQVUsZUFBQUMsSUFBYSxhQUFBQyxJQUFXLFVBQUFDLElBQVEsV0FBQUMsVUFBZTtBQUM3RixTQUFTLE9BQUFDLEdBQUssWUFBQUMsVUFBZ0I7QUFDOUIsU0FBUyxLQUFLQyxTQUFXO0FBQ3pCLFNBQVMsTUFBQUMsVUFBVTtBQUNuQixTQUFTLGtCQUFBQyxVQUFzQjtBQUMvQixPQUFPQyxRQUFRO0FBRWYsTUFBTUMsS0FBa0JiLEdBQWM7QUFBQSxFQUNwQyxRQUFRO0FBQUEsRUFDUixZQUFZO0FBQUEsRUFDWixVQUFVO0FBQUEsRUFDVixxQkFBcUI7QUFBQSxFQUNyQixnQkFBZ0IsTUFBTTtBQUFBLEVBQ3RCO0FBQUEsRUFDQSxTQUFTO0FBQ1gsQ0FBQyxHQUVLYyxLQUFxQixNQUFNO0FBQy9CLFFBQU1DLElBQVVkLEdBQVdZLEVBQWU7QUFDMUMsTUFBSSxDQUFDRTtBQUNILFVBQU0sSUFBSSxNQUFNLG1FQUFtRTtBQUVyRixTQUFPQTtBQUNULEdBRU1DLEtBQUssOEJBQThCQyxLQUFLUixFQUFJLE9BQU87QUFBQSxFQUN2RCxNQUFNQSxFQUFJLE9BQU87QUFBQSxFQUNqQixLQUFLQSxFQUFJLE1BQU1BLEVBQUksT0FBTyxDQUFDO0FBQUEsRUFDM0IsS0FBS0EsRUFBSSxPQUFPO0FBQUEsRUFDaEIsS0FBS0EsRUFBSSxPQUFPO0FBQ2xCLENBQUMsR0FBR1MsS0FBS1QsRUFBSSxNQUFNUSxFQUFFLEdBQUdFLEtBQUtWLEVBQUksT0FBTztBQUFBLEVBQ3RDLE1BQU1BLEVBQUksT0FBTztBQUFBLEVBQ2pCLFNBQVNBLEVBQUksT0FBTztBQUFBLEVBQ3BC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U3RhdGUiLCAidXNlQ2FsbGJhY2siLCAidXNlRWZmZWN0IiwgInVzZVJlZiIsICJ1c2VNZW1vIiwgImpzeCIsICJGcmFnbWVudCIsICJ6JDEiLCAidjQiLCAiY29ubmVjdFRvQ2hpbGQiLCAiZmUiLCAiRWxlbWVudHNDb250ZXh0IiwgInVzZU9wZW5QYXlFbGVtZW50cyIsICJjb250ZXh0IiwgImR0IiwgIll0IiwgIkt0IiwgIkh0IiwgIld0IiwgIlp0IiwgIkRlIiwgIkp0IiwgIkJ0IiwgImUiLCAiUXQiLCAiWSIsICJYdCIsICJuIiwgInYiLCAiUiIsICJkIiwgInB0IiwgImZ0IiwgIm10IiwgInl0IiwgInJlIiwgImVyIiwgIkVlIiwgInRyIiwgImoiLCAicnIiLCAibnIiLCAib3IiLCAiaXIiLCAic3IiLCAiYXIiLCAiY3IiLCAibHIiLCAidXIiLCAiZHIiLCAicHIiLCAiZnIiLCAibGUiLCAibXIiLCAieXIiLCAiaHIiLCAiX3IiLCAiZ3IiLCAid3IiLCAiYnIiLCAieGUiLCAidnIiLCAiRXIiLCAiU3IiLCAiTiIsICJDciIsICJrciIsICJodCIsICJQciIsICJBciIsICJJciIsICJPciIsICJSciIsICJUciIsICJTZSIsICJZZSIsICJfdCIsICJNciIsICJEciIsICJzIiwgImEiLCAiRnIiLCAiTHIiLCAiTnIiLCAiaSIsICJjIiwgImpyIiwgIm9lIiwgIlVyIiwgInhyIiwgIiRyIiwgIl8iLCAiVnIiLCAiZ3QiLCAid3QiLCAicXIiLCAiR3IiLCAidWUiLCAienIiLCAiWXIiLCAiYnQiLCAiS3IiLCAiSHIiLCAiV3IiLCAiS2UiLCAidnQiLCAiSGUiLCAiRXQiLCAiWnIiLCAiSnIiLCAiQnIiLCAiUXIiLCAiWHIiLCAiZW4iLCAidG4iLCAicm4iLCAiU3QiLCAibm4iLCAib24iLCAic24iLCAiYW4iLCAiY24iLCAibG4iLCAidW4iLCAiQ3QiLCAiVCIsICJwbiIsICJkbiIsICJmbiIsICJXIiwgIkNlIiwgIm1uIiwgInluIiwgIkgiLCAiaG4iLCAiX24iLCAia2UiLCAiZ24iLCAiV2UiLCAid24iLCAiUGUiLCAia3QiLCAiYm4iLCAidm4iLCAiJGUiLCAic2UiLCAiQWUiLCAiayIsICJEaSIsICJFbiIsICJWZSIsICJhZSIsICJTbiIsICJQdCIsICJBdCIsICJjZSIsICJDbiIsICJaZSIsICJTIiwgImtuIiwgIlBuIiwgIkFuIiwgIkluIiwgInUiLCAibCIsICJwIiwgIm0iLCAiZyIsICJmIiwgIkwiLCAiVG4iLCAiT24iLCAiUm4iLCAiTW4iLCAiRG4iLCAiRm4iLCAiTG4iLCAiSWUiLCAiSXQiLCAiTm4iLCAiam4iLCAiVW4iLCAiT3QiLCAieG4iLCAiJG4iLCAiUnQiLCAiVm4iLCAicW4iLCAiR24iLCAicWUiLCAiem4iLCAiWW4iLCAiS24iLCAiSG4iLCAiV24iLCAiYiIsICJKZSIsICJCZSIsICJabiIsICJ3IiwgInkiLCAiWG4iLCAiUW4iLCAiaCIsICJQIiwgIkpuIiwgIkJuIiwgIk8iLCAiZW8iLCAidG8iLCAicm8iLCAibm8iLCAiaW8iLCAib28iLCAic28iLCAiViIsICJRZSIsICJhbyIsICJjbyIsICJsbyIsICJUdCIsICJ1byIsICJwbyIsICJmbyIsICJNIiwgInRlIiwgIlJlIiwgIk10IiwgIkR0IiwgIkZ0IiwgIm1vIiwgInlvIiwgIlEiLCAiQSIsICJYIiwgInBlIiwgImVlIiwgIiQiLCAiRCIsICJKIiwgIlUiLCAiaG8iLCAiX28iLCAiZ28iLCAid28iLCAiYm8iLCAiaGUiLCAidm8iLCAiRW8iLCAiU28iLCAiQ28iLCAieiIsICJGZSIsICJMdCIsICJrbyIsICJQbyIsICJFIiwgIkxlIiwgIk5lIiwgIloiLCAiQW8iLCAiTnQiLCAiaWUiLCAid2UiLCAiYmUiLCAibmUiLCAiSW8iLCAiT28iLCAiQyIsICJPZSIsICJUZSIsICJ2ZSIsICJkZSIsICJYZSIsICJqdCIsICJVdCIsICJ4dCIsICIkdCIsICJWdCIsICJldCIsICJfZSIsICJHZSIsICJEbyIsICJqZSIsICJSbyIsICJNZSIsICJUbyIsICJtZSIsICJNbyIsICJ6ZSIsICJGbyIsICJMbyIsICJLIiwgImpvIiwgInR0IiwgIk5vIiwgIlVvIiwgInhvIiwgIiRvIiwgIlZvIiwgInFvIiwgInF0IiwgInJ0IiwgIkdvIiwgInpvIiwgIm50IiwgIllvIiwgIm90IiwgIktvIiwgIkhvIiwgIldvIiwgIlpvIiwgIkpvIiwgIkJvIiwgIlFvIiwgIlhvIiwgImVpIiwgInRpIiwgInJpIiwgIm5pIiwgIm9pIiwgImlpIiwgInNpIiwgImFpIiwgIkd0IiwgImNpIiwgImxpIiwgInVpIiwgImRpIiwgInBpIiwgImZpIiwgIm1pIiwgInlpIiwgImhpIiwgIl9pIiwgImdpIiwgImdlIiwgIndpIiwgImJpIiwgInllIiwgInZpIiwgIkVpIiwgIlNpIiwgIkYiLCAiaXQiLCAieCIsICJyIiwgIlVlIiwgIkNpIiwgInN0IiwgImtpIiwgIlBpIiwgIkFpIiwgImF0IiwgImN0IiwgInEiLCAiQiIsICJHIiwgImx0IiwgIlB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEiLCAiWm9kRmllbGRFcnJvciIsICJtYWtlQ2FsbGJhY2tTYWZlIiwgImNhbGxiYWNrTmFtZSIsICJlcnJvckxvZ2dlciIsICJhcmdzIiwgImVycm9yIiwgIlJlcXVpcmVkU3RyaW5nIiwgIk9wdGlvbmFsU3RyaW5nIiwgIm51bGxPclVuZGVmT3IkMSIsICJ6VHlwZSIsICJGaWVsZE5hbWUiLCAiRmllbGROYW1lMiIsICJGaWVsZE5hbWVFbnVtIiwgIlByaXZhdGVGaWVsZE5hbWUiLCAiUHJpdmF0ZUZpZWxkTmFtZTIiLCAiUHJpdmF0ZUZpZWxkTmFtZUVudW0iLCAiQWxsRmllbGROYW1lcyIsICJFbGVtZW50VHlwZUVudW0iLCAiRWxlbWVudFR5cGVFbnVtMiIsICJDaGVja291dFBheW1lbnRNZXRob2QkMSIsICJQYXltZW50TWV0aG9kTWluaW1hbCIsICJFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRQYXlsb2FkIiwgIklucHV0RXZlbnRUeXBlIiwgIklucHV0RXZlbnRQYXlsb2FkIiwgIkVycm9yRXZlbnRUeXBlIiwgIkVycm9yRXZlbnRQYXlsb2FkIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQiLCAiTGF5b3V0RXZlbnRQYXlsb2FkIiwgIkxvYWRlZEV2ZW50UGF5bG9hZCIsICJQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQiLCAiU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiUmVxdWlyZWRGb3JtRmllbGRzIiwgIlBSRm9ybUZpZWxkcyIsICJTdWJtaXRFdmVudFR5cGUiLCAiU3VibWl0RXZlbnRQYXlsb2FkIiwgIlRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiRXZlbnRQYXlsb2FkIiwgIkNoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlIiwgIkZpZWxkVmFsaWRhdGlvbkVycm9yIiwgIlRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UiLCAiQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhIiwgImNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nIiwgInN0eWxlcyIsICJudWxsT3JVbmRlZk9yIiwgIkNvdXBvbk1pbmltYWwiLCAiTGluZUl0ZW0iLCAiQnJhbmRTZXR0aW5ncyIsICJCcmFuZCIsICJDaGVja291dFBheW1lbnRNZXRob2QiLCAiU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwiLCAiU3Vic2NyaXB0aW9uTWluaW1hbCIsICJJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwiLCAiSW52b2ljZUxpbmVJdGVtTWluaW1hbCIsICJEaXNjb3VudE1pbmltYWwiLCAiSW52b2ljZU1pbmltYWwiLCAiQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsIiwgIlByZXZpZXdDaGVja291dFJlc3BvbnNlIiwgIl9QYXltZW50Rm9ybVByZWZpbGxDb21tb24iLCAiUGF5bWVudEZvcm1QcmVmaWxsIiwgIkNvbXBsZXRlZEZvcm1QcmVmaWxsIiwgIkV4cGlyZWRGb3JtUHJlZmlsbCIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciIsICJOZXdDdXN0b21lckZpZWxkcyIsICJQcmljZVF0eSIsICJDYXJ0SW5mbyIsICJQcm9jZXNzb3JTcGVjaWZpY01ldGFkYXRhIiwgImZpeFByb3RvIiwgInRhcmdldCIsICJwcm90b3R5cGUiLCAic2V0UHJvdG90eXBlT2YiLCAiZml4U3RhY2siLCAiY2FwdHVyZVN0YWNrVHJhY2UiLCAiX19leHRlbmRzIiwgIl9leHRlbmRTdGF0aWNzIiwgIl9fIiwgIl9zdXBlciIsICJDdXN0b21FcnJvciIsICJtZXNzYWdlIiwgIm9wdGlvbnMiLCAiX25ld1RhcmdldCIsICJfdGhpcyIsICJjcmVhdGVPanNGbG93TG9nZ2VycyIsICJwcmVmaXgiLCAibG9nIiwgImVyciIsICJBV1hfTE9BRElORyIsICJQUl9MT0FESU5HIiwgImVycl9fIiwgIk9wdGlvbmFsRm4iLCAiWm9kRm9ybUNhbGxiYWNrcyIsICJfRm9ybUNhbGxiYWNrcyIsICJyYXdDYWxsYmFja3MiLCAia2V5IiwgInJhd0NhbGxiYWNrIiwgInNhZmVDYWxsYmFjayIsICJvYmoiLCAiaW5zdGFuY2UiLCAiRm9ybUNhbGxiYWNrcyIsICJ1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3MiLCAicHJvcHMiLCAiX2EiLCAiZm9ybUNhbGxiYWNrcyIsICJ1c2VQYXltZW50UmVxdWVzdHMiLCAib3JpZ2luYWxPblBheW1lbnRSZXF1ZXN0TG9hZCIsICJwYXltZW50UmVxdWVzdHMiLCAic2V0UGF5bWVudFJlcXVlc3RzIiwgIm92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkIiwgInBheW1lbnRSZXF1ZXN0czIiLCAiRk9STV9UQVJHRVQiLCAiRWxlbWVudHNGb3JtIiwgIm9wRm9ybSIsICJzZXRPcEZvcm0iLCAiZWxlbWVudHNDb250ZXh0VmFsdWUiLCAic2V0RWxlbWVudHNDb250ZXh0VmFsdWUiLCAibG9hZGVkIiwgInNldExvYWRlZCIsICJzdHJpcGVMaW5rQ3RybCIsICJzZXRTdHJpcGVMaW5rQ3RybCIsICJhaXJ3YWxsZXgiLCAic2V0QWlyd2FsbGV4IiwgInRvdGFsQW1vdW50QXRvbXMiLCAiY3VycmVuY3kiLCAiZm9ybSIsICJ2YWx1ZSIsICJnZXRFbGVtZW50c0NvbnRleHRWYWx1ZSIsICJyZXN1bHQiLCAicHJldiIsICJjaGlsZHJlblByb3BzIiwgIkVsZW1lbnRGcmFtZSIsICJlbGVtZW50VHlwZSIsICJmb3JtSWQiLCAicmVmZXJyZXIiLCAiZm9ybUhlaWdodCIsICJjaGVja291dFNlY3VyZVRva2VuIiwgInJlZ2lzdGVySWZyYW1lIiwgImJhc2VVcmwiLCAic3ViUGF0aCIsICJoYXNMb2FkZWQiLCAic2V0SGFzTG9hZGVkIiwgImlmcmFtZVJlZiIsICJlbGVtZW50U3R5bGUiLCAiZnJhbWVTdHlsZSIsICJxdWVyeVN0cmluZyIsICJwYXJhbXMiLCAiQ2FyZEN2Y0VsZW1lbnQiLCAiQ2FyZEVsZW1lbnQiLCAiQ2FyZEV4cGlyeUVsZW1lbnQiLCAiQ2FyZE51bWJlckVsZW1lbnQiXQp9Cg==