@getopenpay/openpay-js-react 0.2.17-alpha.f7c2cdd → 0.2.18

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,5 +1,5 @@
1
1
  import { createContext as Zr, useContext as Wr, useState as ce, useCallback as Jr, useEffect as dt, useRef as Xr, useMemo as it } from "react";
2
- import { jsx as H, Fragment as st } from "react/jsx-runtime";
2
+ import { jsx as Y, Fragment as st } from "react/jsx-runtime";
3
3
  import { z as e } from "zod";
4
4
  import { v4 as bt } from "uuid";
5
5
  import { connectToChild as Xt } from "penpal";
@@ -41,7 +41,7 @@ const Qt = Zr({
41
41
  ${t.map((n) => `• ${pt(n.msg)}`).join(`
42
42
  `)}`, cn = (t) => `Encountered the following errors:
43
43
  ${t.map((n) => `- ${n.path.join("/")}: ${n.message}`).join(`
44
- `)}`, re = (t) => {
44
+ `)}`, te = (t) => {
45
45
  if (t instanceof Error)
46
46
  if (an(t.message)) {
47
47
  const n = JSON.parse(t.message);
@@ -65,9 +65,9 @@ ${t.message}`), t.message);
65
65
  return;
66
66
  }
67
67
  };
68
- var G = /* @__PURE__ */ ((t) => (t.pockytPaypal = "pockyt-paypal", t.airwallexGooglePay = "airwallex-google-pay", t.airwallexApplePay = "airwallex-apple-pay", t.authorizenetGooglePay = "authorizenet-google-pay", t.authorizenetApplePay = "authorizenet-apple-pay", t.loopCrypto = "loop-crypto", t))(G || {});
69
- e.nativeEnum(G);
70
- const j = e.string().trim().min(1, { message: "Cannot be blank" }), k = e.string().trim().optional(), z = (t) => e.nullable(t.optional());
68
+ var q = /* @__PURE__ */ ((t) => (t.pockytPaypal = "pockyt-paypal", t.airwallexGooglePay = "airwallex-google-pay", t.airwallexApplePay = "airwallex-apple-pay", t.authorizenetGooglePay = "authorizenet-google-pay", t.authorizenetApplePay = "authorizenet-apple-pay", t.loopCrypto = "loop-crypto", t))(q || {});
69
+ e.nativeEnum(q);
70
+ const N = e.string().trim().min(1, { message: "Cannot be blank" }), S = e.string().trim().optional(), F = (t) => e.nullable(t.optional());
71
71
  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 || {});
72
72
  const er = e.nativeEnum(p);
73
73
  var tr = /* @__PURE__ */ ((t) => (t.CARD_NUMBER = "cardNumber", t.CARD_EXPIRY = "cardExpiry", t.CARD_CVC = "cardCvc", t))(tr || {});
@@ -75,29 +75,29 @@ const rr = e.nativeEnum(tr), nr = e.union([er, rr]);
75
75
  var ve = /* @__PURE__ */ ((t) => (t.CARD = "card", t.CARD_NUMBER = "card-number", t.CARD_EXPIRY = "card-expiry", t.CARD_CVC = "card-cvc", t))(ve || {});
76
76
  const un = e.nativeEnum(ve), He = e.object({
77
77
  provider: e.string(),
78
- processor_name: z(e.string()),
79
- metadata: z(e.record(e.string(), e.any()))
78
+ processor_name: F(e.string()),
79
+ metadata: F(e.record(e.string(), e.any()))
80
80
  }), dn = e.object({
81
81
  id: e.string()
82
82
  });
83
83
  e.object({
84
- cardNumber: k,
85
- expiry: k,
86
- cvc: k
84
+ cardNumber: S,
85
+ expiry: S,
86
+ cvc: S
87
87
  });
88
88
  e.object({
89
- backgroundColor: k,
90
- color: k,
91
- fontFamily: k,
92
- fontSize: k,
93
- fontWeight: k,
94
- margin: k,
95
- padding: k,
96
- letterSpacing: k,
97
- lineHeight: k,
98
- hideIcon: k
89
+ backgroundColor: S,
90
+ color: S,
91
+ fontFamily: S,
92
+ fontSize: S,
93
+ fontWeight: S,
94
+ margin: S,
95
+ padding: S,
96
+ letterSpacing: S,
97
+ lineHeight: S,
98
+ hideIcon: S
99
99
  });
100
- const W = e.enum([
100
+ const Z = e.enum([
101
101
  // Element -> Form
102
102
  "LAYOUT",
103
103
  "LOADED",
@@ -118,64 +118,64 @@ const W = e.enum([
118
118
  "TOKENIZE",
119
119
  "CHECKOUT",
120
120
  "START_PAYMENT_FLOW"
121
- ]), pn = W.extract(["TOKENIZE_STARTED", "CHECKOUT_STARTED"]), mn = e.object({ type: pn }), yn = W.extract(["BLUR", "FOCUS", "CHANGE"]), _n = e.object({
121
+ ]), pn = Z.extract(["TOKENIZE_STARTED", "CHECKOUT_STARTED"]), mn = e.object({ type: pn }), yn = Z.extract(["BLUR", "FOCUS", "CHANGE"]), _n = e.object({
122
122
  type: yn,
123
123
  elementType: rr,
124
124
  errors: e.array(e.string()).optional()
125
- }), hn = W.extract(["LOAD_ERROR", "TOKENIZE_ERROR", "CHECKOUT_ERROR"]), fn = e.object({
125
+ }), hn = Z.extract(["LOAD_ERROR", "TOKENIZE_ERROR", "CHECKOUT_ERROR"]), fn = e.object({
126
126
  type: hn,
127
- message: j,
127
+ message: N,
128
128
  headers: e.record(e.string(), e.string()).optional()
129
- }), gn = W.extract(["VALIDATION_ERROR"]), bn = e.object({
129
+ }), gn = Z.extract(["VALIDATION_ERROR"]), bn = e.object({
130
130
  type: gn,
131
131
  elementType: nr,
132
132
  errors: e.array(e.string())
133
133
  }), wn = e.object({
134
- type: e.literal(W.enum.LAYOUT),
135
- height: j
134
+ type: e.literal(Z.enum.LAYOUT),
135
+ height: N
136
136
  }), vn = e.object({
137
- type: e.literal(W.enum.LOADED),
138
- sessionId: j,
137
+ type: e.literal(Z.enum.LOADED),
138
+ sessionId: N,
139
139
  totalAmountAtoms: e.number(),
140
- currency: k,
140
+ currency: S,
141
141
  checkoutPaymentMethods: e.array(He)
142
142
  }), Cn = e.object({
143
- type: e.literal(W.enum.PAYMENT_FLOW_STARTED),
143
+ type: e.literal(Z.enum.PAYMENT_FLOW_STARTED),
144
144
  nextActionMetadata: e.record(e.string(), e.any()),
145
145
  paymentFlowMetadata: e.any().optional(),
146
146
  startPFMetadata: e.optional(e.record(e.string(), e.any()))
147
147
  }), En = e.object({
148
- type: e.literal(W.enum.SETUP_PAYMENT_METHOD_SUCCESS),
148
+ type: e.literal(Z.enum.SETUP_PAYMENT_METHOD_SUCCESS),
149
149
  paymentMethodId: e.string()
150
150
  }), Me = e.object({
151
- firstName: j,
152
- lastName: j,
153
- email: j,
154
- zipCode: j,
155
- country: j,
156
- promotionCode: k
151
+ firstName: N,
152
+ lastName: N,
153
+ email: N,
154
+ zipCode: N,
155
+ country: N,
156
+ promotionCode: S
157
157
  }), Pn = e.object({
158
- firstName: k,
159
- lastName: k,
160
- email: j,
161
- zipCode: j,
162
- country: j,
163
- promotionCode: k,
164
- address: k,
165
- city: k,
166
- state: k
167
- }), kn = W.extract(["TOKENIZE", "CHECKOUT", "START_PAYMENT_FLOW"]), Sn = e.object({
158
+ firstName: S,
159
+ lastName: S,
160
+ email: N,
161
+ zipCode: N,
162
+ country: N,
163
+ promotionCode: S,
164
+ address: S,
165
+ city: S,
166
+ state: S
167
+ }), kn = Z.extract(["TOKENIZE", "CHECKOUT", "START_PAYMENT_FLOW"]), Sn = e.object({
168
168
  type: kn,
169
- sessionId: j,
169
+ sessionId: N,
170
170
  checkoutPaymentMethod: He,
171
171
  paymentFlowMetadata: e.any().optional(),
172
172
  doNotUseLegacyCCFlow: e.boolean().optional(),
173
- existingCCPMId: k
173
+ existingCCPMId: S
174
174
  }).extend(Me.shape), An = e.object({
175
- type: e.literal(W.enum.TOKENIZE_SUCCESS),
175
+ type: e.literal(Z.enum.TOKENIZE_SUCCESS),
176
176
  isReadyForCheckout: e.boolean()
177
177
  }), In = e.object({
178
- type: e.literal(W.enum.CHECKOUT_SUCCESS),
178
+ type: e.literal(Z.enum.CHECKOUT_SUCCESS),
179
179
  invoiceUrls: e.array(e.string()),
180
180
  subscriptionIds: e.array(e.string()),
181
181
  customerId: e.string()
@@ -193,16 +193,16 @@ const W = e.enum([
193
193
  En
194
194
  ]), On = e.object({
195
195
  payload: Rn,
196
- nonce: j,
197
- formId: j,
198
- elementId: j
196
+ nonce: N,
197
+ formId: N,
198
+ elementId: N
199
199
  });
200
200
  e.object({
201
201
  amountAtom: e.number(),
202
202
  /**
203
203
  * The three-letter ISO 4217 currency code for the payment.
204
204
  */
205
- currency: j
205
+ currency: N
206
206
  });
207
207
  e.enum(["apple_pay", "google_pay"]);
208
208
  e.object({
@@ -211,10 +211,10 @@ e.object({
211
211
  });
212
212
  e.object({
213
213
  secure_token: e.string(),
214
- existing_cc_pm_id: z(e.string()),
215
- their_pm_id: z(e.string()),
216
- checkout_attempt_id: z(e.string()),
217
- processor_specific_metadata: z(e.record(e.string(), e.any()))
214
+ existing_cc_pm_id: F(e.string()),
215
+ their_pm_id: F(e.string()),
216
+ checkout_attempt_id: F(e.string()),
217
+ processor_specific_metadata: F(e.record(e.string(), e.any()))
218
218
  });
219
219
  const vt = e.object({
220
220
  invoice_urls: e.array(e.string()),
@@ -231,7 +231,7 @@ const Tn = e.object({
231
231
  success: e.literal(!1),
232
232
  error_type: e.literal("validation_error"),
233
233
  errors: e.array(xn)
234
- }), Nn = e.discriminatedUnion("success", [
234
+ }), jn = e.discriminatedUnion("success", [
235
235
  e.object({ success: e.literal(!0) }),
236
236
  Tn
237
237
  ]);
@@ -240,7 +240,7 @@ e.object({
240
240
  checkout_payment_method: He,
241
241
  non_cde_form_fields: Me,
242
242
  do_not_use_legacy_cc_flow: e.boolean().optional(),
243
- existing_cc_pm_id: z(e.string()),
243
+ existing_cc_pm_id: F(e.string()),
244
244
  extra_metadata: e.record(e.string(), e.any())
245
245
  });
246
246
  e.object({
@@ -250,7 +250,7 @@ e.object({
250
250
  extra_metadata: e.record(e.string(), e.any()).optional()
251
251
  });
252
252
  var O = /* @__PURE__ */ ((t) => (t.SUCCESS = "success", t.FAILURE = "failure", t.CANCELLED = "cancelled", t))(O || {});
253
- const jn = e.object({
253
+ const Nn = e.object({
254
254
  status: e.enum([
255
255
  "success",
256
256
  "failure",
@@ -270,18 +270,18 @@ const Mn = e.object({
270
270
  their_pm_id: e.string().optional()
271
271
  }), or = e.object({
272
272
  type: e.string(),
273
- redirect_url: z(e.string()),
274
- initial_intent_id: z(e.string()),
275
- consent_id: z(e.string()),
276
- their_pm_id: z(e.string()),
277
- payment_session: z(e.record(e.string(), e.any()))
273
+ redirect_url: F(e.string()),
274
+ initial_intent_id: F(e.string()),
275
+ consent_id: F(e.string()),
276
+ their_pm_id: F(e.string()),
277
+ payment_session: F(e.record(e.string(), e.any()))
278
278
  }), Dn = e.discriminatedUnion("present", [
279
279
  e.object({ present: e.literal(!0), href: e.string() }),
280
280
  e.object({ present: e.literal(!1) })
281
281
  ]), Ln = e.object({
282
282
  payment_methods: e.array(dn),
283
- pay_first_success_response: z(vt),
284
- required_user_actions: z(e.array(or))
283
+ pay_first_success_response: F(vt),
284
+ required_user_actions: F(e.array(or))
285
285
  }), Un = (t) => {
286
286
  const n = {};
287
287
  return Object.entries(t).forEach(([r, o]) => {
@@ -364,7 +364,7 @@ const Mn = e.object({
364
364
  else throw s === "canceled" ? new Error("Payment cancelled, please click Submit again to pay") : new Error(
365
365
  `${((r = i.error) == null ? void 0 : r.message) ?? ((a = (o = i.setupIntent) == null ? void 0 : o.last_setup_error) == null ? void 0 : a.message) ?? "Payment failed, please click submit again to pay."}`
366
366
  );
367
- }, Hn = (t) => JSON.stringify(t), te = (t, n) => Array.from(t.querySelectorAll("[data-opid]") ?? []).reduce((r, o) => {
367
+ }, Hn = (t) => JSON.stringify(t), ee = (t, n) => Array.from(t.querySelectorAll("[data-opid]") ?? []).reduce((r, o) => {
368
368
  const a = o.getAttribute("data-opid");
369
369
  return a ? { ...r, [a]: o.value } : r;
370
370
  }, {}), Bn = (t) => {
@@ -646,7 +646,7 @@ class pr extends wo {
646
646
  return this.response.message;
647
647
  }
648
648
  }
649
- const F = async (t, n, r) => {
649
+ const U = async (t, n, r) => {
650
650
  const o = await t.send(n);
651
651
  if (Co(o))
652
652
  throw new pr(o);
@@ -655,7 +655,7 @@ const F = async (t, n, r) => {
655
655
  throw a.success ? new Error("Invalid state") : (console.error("OJS queryApi got a schema error. Expected schema:", r, "Actual:", o), a.error);
656
656
  }
657
657
  return o;
658
- }, vo = (t, n) => n.safeParse(t).success, Co = (t) => Jn.safeParse(t).success, Eo = async (t, n) => await F(t, { type: "get_checkout_preview", payload: n }, cr), N = async (t) => await F(t, { type: "get_prefill", payload: {} }, lr), Se = async (t, n) => await F(t, { type: "v2_start_payment_flow", payload: n }, dr), Po = async (t, n) => await F(t, { type: "start_payment_flow_for_cc", payload: n }, mo), ko = async (t, n) => await F(t, { type: "start_payment_flow_for_pr", payload: n }, dr), B = async (t, n) => await F(t, { type: "confirm_payment_flow", payload: n }, Ln), So = async (t, n) => await F(t, { type: "finalize_setup_payment_method", payload: n }, ur), Ao = async (t, n) => await F(
658
+ }, vo = (t, n) => n.safeParse(t).success, Co = (t) => Jn.safeParse(t).success, Eo = async (t, n) => await U(t, { type: "get_checkout_preview", payload: n }, cr), j = async (t) => await U(t, { type: "get_prefill", payload: {} }, lr), Se = async (t, n) => await U(t, { type: "v2_start_payment_flow", payload: n }, dr), Po = async (t, n) => await U(t, { type: "start_payment_flow_for_cc", payload: n }, mo), ko = async (t, n) => await U(t, { type: "start_payment_flow_for_pr", payload: n }, dr), H = async (t, n) => await U(t, { type: "confirm_payment_flow", payload: n }, Ln), So = async (t, n) => await U(t, { type: "finalize_setup_payment_method", payload: n }, ur), Ao = async (t, n) => await U(
659
659
  t,
660
660
  { type: "check_if_popup_window_verified", payload: n },
661
661
  Dn
@@ -684,16 +684,16 @@ const F = async (t, n, r) => {
684
684
  throw new Error("No CDE connections found");
685
685
  return await Promise.all(
686
686
  Array.from(t.values()).map(
687
- (r) => F(r, { type: "tokenize_card", payload: n }, Nn)
687
+ (r) => U(r, { type: "tokenize_card", payload: n }, jn)
688
688
  )
689
689
  );
690
690
  }, Ot = async (t, n) => {
691
691
  try {
692
- return await F(t, { type: "checkout_card_elements", payload: n }, vt);
692
+ return await U(t, { type: "checkout_card_elements", payload: n }, vt);
693
693
  } catch (r) {
694
694
  throw console.error("[cde-client] Error during checkoutCardElements:", r, JSON.stringify(r)), r;
695
695
  }
696
- }, Oo = async (t, n) => await F(t, { type: "setup_payment_method", payload: n }, ur), Et = async (t, n) => await F(t, { type: "checkout", payload: n }, vt), mr = 1e3, xo = async (t, n) => {
696
+ }, Oo = async (t, n) => await U(t, { type: "setup_payment_method", payload: n }, ur), Et = async (t, n) => await U(t, { type: "checkout", payload: n }, vt), mr = 1e3, xo = async (t, n) => {
697
697
  console.log(n);
698
698
  const r = await Xt({
699
699
  iframe: t,
@@ -701,17 +701,17 @@ const F = async (t, n, r) => {
701
701
  timeout: mr,
702
702
  childOrigin: "*"
703
703
  // TODO: use with proper childOrigin
704
- }).promise, o = await F(r, { type: "ping-3ds-status" }, jn);
704
+ }).promise, o = await U(r, { type: "ping-3ds-status" }, Nn);
705
705
  return console.log("🟢 CDE connection successful! Stopping polling... Result:", o), o;
706
- }, yr = async (t, n) => await F(t, { type: "prepare_payment_flow", payload: n }, _o), _r = async (t, n) => {
706
+ }, yr = async (t, n) => await U(t, { type: "prepare_payment_flow", payload: n }, _o), _r = async (t, n) => {
707
707
  try {
708
- return (await F(
708
+ return (await U(
709
709
  t,
710
710
  { type: "get_standardized_error_code", payload: { message: n } },
711
711
  yo
712
712
  )).error_code;
713
713
  } catch (r) {
714
- return console.error("[cde-client] Error during getStandardizedErrorCode:", re(r)), "PAYMENT_FAILED_GENERIC";
714
+ return console.error("[cde-client] Error during getStandardizedErrorCode:", te(r)), "PAYMENT_FAILED_GENERIC";
715
715
  }
716
716
  };
717
717
  function Ze(t) {
@@ -733,17 +733,17 @@ const ie = (t) => async (n) => {
733
733
  else
734
734
  throw new Error(`Unhandled mode: ${a}`);
735
735
  } catch (a) {
736
- const i = re(a), s = await _r(n.context.anyCdeConnection, i);
736
+ const i = te(a), s = await _r(n.context.anyCdeConnection, i);
737
737
  n.formCallbacks.get.onCheckoutError(i, s);
738
738
  }
739
739
  }, he = (t) => async (n) => {
740
740
  try {
741
741
  return await t(n);
742
742
  } catch (r) {
743
- const { err__: o } = A("init-error-catcher"), a = re(r), i = await _r(n.context.anyCdeConnection, a);
743
+ const { err__: o } = I("init-error-catcher"), a = te(r), i = await _r(n.context.anyCdeConnection, a);
744
744
  return o(i, a, r), { isAvailable: !1, reason: a, errorCode: i };
745
745
  }
746
- }, A = (t) => {
746
+ }, I = (t) => {
747
747
  const n = (...o) => {
748
748
  window.console.log(`${le.green.bold("ojs/")}${le.bold.gray(`${t}`)} `, ...o);
749
749
  }, r = (...o) => {
@@ -755,16 +755,16 @@ const ie = (t) => async (n) => {
755
755
  log__: n,
756
756
  err__: r
757
757
  };
758
- }, { log__: lc, err__: To } = A("common"), De = (t) => {
758
+ }, { log__: ic, err__: To } = I("common"), De = (t) => {
759
759
  if (t.payment_methods.length !== 1)
760
760
  throw new Error(`Expected exactly one payment method, got ${t.payment_methods.length}`);
761
761
  return { payment_method_id: t.payment_methods[0].id };
762
- }, J = (t, n) => {
762
+ }, W = (t, n) => {
763
763
  const r = t.find((o) => n.safeParse(o).success);
764
764
  if (!r)
765
765
  throw To("No CPMs found for model. All models:", t), new Error("No CPMs found for model");
766
766
  return n.parse(r);
767
- }, No = (t) => ({
767
+ }, jo = (t) => ({
768
768
  new_customer_email: t.email,
769
769
  new_customer_address: {
770
770
  zip_code: t.zipCode,
@@ -773,7 +773,7 @@ const ie = (t) => async (n) => {
773
773
  new_customer_first_name: t.firstName,
774
774
  new_customer_last_name: t.lastName
775
775
  }), We = async (t) => {
776
- const { log__: n } = A(t.logPrefix), r = await N(t.anyCdeConnection), o = De(t.confirmResult);
776
+ const { log__: n } = I(t.logPrefix), r = await j(t.anyCdeConnection), o = De(t.confirmResult);
777
777
  if (r.mode === "setup")
778
778
  return n("Setting up payment method..."), { mode: "setup", result: await So(t.anyCdeConnection, {
779
779
  secure_token: r.token,
@@ -798,7 +798,7 @@ const ie = (t) => async (n) => {
798
798
  };
799
799
  return { mode: "checkout", result: await Et(t.anyCdeConnection, a) };
800
800
  }
801
- }, { log__: hr, err__: fr } = A("common-cc"), ue = (t, n, r) => {
801
+ }, { log__: hr, err__: fr } = I("common-cc"), ue = (t, n, r) => {
802
802
  if (r) {
803
803
  hr(`Received default field values: ${JSON.stringify(r)}`);
804
804
  for (const [a, i] of Object.entries(r))
@@ -812,7 +812,7 @@ const ie = (t) => async (n) => {
812
812
  throw fr("Got validation errors in non-CDE form fields", i), new Error("Got validation errors in non-CDE form fields");
813
813
  }
814
814
  return o.data;
815
- }, jo = (t, n) => {
815
+ }, No = (t, n) => {
816
816
  for (const r of t)
817
817
  if (r.success === !1)
818
818
  throw r.errors.forEach((o) => {
@@ -824,7 +824,7 @@ const ie = (t) => async (n) => {
824
824
  n(i, o.errors);
825
825
  }
826
826
  }), hr(`Error tokenizing card: got validation errors: ${JSON.stringify(r.errors)}`), new Error("Got validation errors while tokenizing card");
827
- }, xt = "ojs-stripe-link-btn", { log__: x, err__: Mo } = A("stripe-link"), Do = e.object({
827
+ }, xt = "ojs-stripe-link-btn", { log__: x, err__: Mo } = I("stripe-link"), Do = e.object({
828
828
  provider: e.literal("stripe_link"),
829
829
  processor_name: e.literal("stripe"),
830
830
  metadata: e.object({
@@ -838,9 +838,9 @@ const ie = (t) => async (n) => {
838
838
  async ({ context: t, formCallbacks: n }) => {
839
839
  const r = t.customInitParams.stripeLink;
840
840
  x("Checking if there are any CPMs for Stripe Link...");
841
- const o = J(t.checkoutPaymentMethods, Do);
841
+ const o = W(t.checkoutPaymentMethods, Do);
842
842
  x("Starting stripe link flow...");
843
- const a = t.anyCdeConnection, i = await N(a), s = i.mode === "setup";
843
+ const a = t.anyCdeConnection, i = await j(a), s = i.mode === "setup";
844
844
  x("Creating stripe elements...");
845
845
  const c = await Ae(a, i.token, s, void 0), { elements: l, stripe: u } = await qn(o.metadata.stripe_pk, {
846
846
  mode: "setup",
@@ -879,7 +879,7 @@ const ie = (t) => async (n) => {
879
879
  y.error ? (Mo("error", y.error), n.get.onCheckoutError(y.error.message ?? "Stripe Link unknown error")) : (x("paymentMethod", y.paymentMethod), R.stripeLink.run({
880
880
  context: t,
881
881
  checkoutPaymentMethod: o,
882
- nonCdeFormInputs: te(t.formDiv),
882
+ nonCdeFormInputs: ee(t.formDiv),
883
883
  formCallbacks: n,
884
884
  customParams: { stripePM: y.paymentMethod },
885
885
  initResult: { isAvailable: !0 }
@@ -919,10 +919,10 @@ const ie = (t) => async (n) => {
919
919
  }
920
920
  });
921
921
  x("Start payment flow response", l);
922
- const u = Lo.parse(l.required_user_actions)[0].our_existing_pm_id, d = await N(i);
922
+ const u = Lo.parse(l.required_user_actions)[0].our_existing_pm_id, d = await j(i);
923
923
  if (d.mode === "setup") {
924
924
  x("Doing payment setup...");
925
- const _ = await B(i, {
925
+ const _ = await H(i, {
926
926
  secure_token: d.token,
927
927
  existing_cc_pm_id: u
928
928
  });
@@ -1028,7 +1028,7 @@ const br = async (t) => {
1028
1028
  throw new Error(`${t} popup window blocked. Please allow popups for this site.`);
1029
1029
  return r;
1030
1030
  }, Yo = async (t, n, r, o) => {
1031
- const { err__: a } = A("popup-verify");
1031
+ const { err__: a } = I("popup-verify");
1032
1032
  return new Promise((i, s) => {
1033
1033
  const c = Ko(t, o), l = setInterval(async () => {
1034
1034
  try {
@@ -1038,11 +1038,11 @@ const br = async (t) => {
1038
1038
  else if (c.closed)
1039
1039
  throw new Error(`${t} payment cancelled`);
1040
1040
  } catch (u) {
1041
- a(re(u)), clearInterval(l), s(re(u));
1041
+ a(te(u)), clearInterval(l), s(te(u));
1042
1042
  }
1043
1043
  }, 1e3);
1044
1044
  });
1045
- }, { log__: Ho, err__: wr } = A("pockyt-cc"), Bo = e.object({
1045
+ }, { log__: Ho, err__: wr } = I("pockyt-cc"), Bo = e.object({
1046
1046
  "op-pockyt-3ds-url": e.string(),
1047
1047
  "op-pockyt-txn-no": e.string(),
1048
1048
  "op-pockyt-ref-no": e.string()
@@ -1062,7 +1062,7 @@ const br = async (t) => {
1062
1062
  } catch (n) {
1063
1063
  const r = "Error verifying 3DS verification result.";
1064
1064
  throw wr(r, `Resulting URL: ${t}.
1065
- Error: ${re(n)}`), new Error(r);
1065
+ Error: ${te(n)}`), new Error(r);
1066
1066
  }
1067
1067
  }, Wo = (t, n) => new URL(t).searchParams.get(n), Jo = (t) => (t == null ? void 0 : t["op-pockyt-3ds-url"]) !== void 0, Xo = async (t, n) => {
1068
1068
  const r = Zo(n), o = await br({ url: r["op-pockyt-3ds-url"], baseUrl: t });
@@ -1073,7 +1073,7 @@ Error: ${re(n)}`), new Error(r);
1073
1073
  reference_no: r["op-pockyt-ref-no"]
1074
1074
  }
1075
1075
  };
1076
- }, { log__: Qo, err__: Pt } = A("airwallex-cc"), ea = e.object({
1076
+ }, { log__: Qo, err__: Pt } = I("airwallex-cc"), ea = e.object({
1077
1077
  "op-airwallex-3ds-url": e.string(),
1078
1078
  "op-airwallex-initial-intent-id": e.string(),
1079
1079
  "op-airwallex-consent-id": e.string()
@@ -1093,7 +1093,7 @@ Error: ${re(n)}`), new Error(r);
1093
1093
  } catch (n) {
1094
1094
  const r = "Error verifying Airwallex 3DS verification result.";
1095
1095
  throw Pt(r, `Resulting URL: ${t}.
1096
- Error: ${re(n)}`), new Error(r);
1096
+ Error: ${te(n)}`), new Error(r);
1097
1097
  }
1098
1098
  }, oa = async (t, n) => {
1099
1099
  const r = ta(n), o = await br({ url: r["op-airwallex-3ds-url"], baseUrl: t }), a = na(o.href ?? ""), i = r["op-airwallex-initial-intent-id"];
@@ -1155,7 +1155,7 @@ Error: ${re(n)}`), new Error(r);
1155
1155
  "sv-SE",
1156
1156
  "zh-CN",
1157
1157
  "zh-TW"
1158
- ]), { log__: Ee, err__: je } = A("adyen-cc"), sa = e.object({
1158
+ ]), { log__: Ee, err__: Ne } = I("adyen-cc"), sa = e.object({
1159
1159
  "op-account-id": e.string(),
1160
1160
  "op-adyen-client-key": e.string(),
1161
1161
  "op-adyen-environment": aa,
@@ -1163,14 +1163,14 @@ Error: ${re(n)}`), new Error(r);
1163
1163
  }), Pr = "Unable to process your credit card. Please contact support for assistance.", ca = (t) => {
1164
1164
  const n = sa.safeParse(t);
1165
1165
  if (!n.success)
1166
- throw je(`Adyen 3DS is required but headers are malformed. Got: ${JSON.stringify(t)}`), new Error(Pr);
1166
+ throw Ne(`Adyen 3DS is required but headers are malformed. Got: ${JSON.stringify(t)}`), new Error(Pr);
1167
1167
  return n.data;
1168
1168
  }, la = (t) => JSON.parse(t), Tt = () => "AdyenWeb" in window && "AdyenCheckout" in window.AdyenWeb, ua = async () => {
1169
1169
  Ee("Waiting for Adyen SDK to load...");
1170
1170
  for (let t = 0; t < 10; t++)
1171
1171
  Tt() || await Ct(500);
1172
1172
  if (!Tt())
1173
- throw je("Adyen SDK not loaded properly"), new Error(Pr);
1173
+ throw Ne("Adyen SDK not loaded properly"), new Error(Pr);
1174
1174
  return Ee("Adyen SDK loaded successfully"), window.AdyenWeb.AdyenCheckout;
1175
1175
  }, da = (t) => {
1176
1176
  const { headers: n, locale: r, countryCode: o, component: a, host: i, cancelButton: s } = t, c = la(n["op-adyen-action"]);
@@ -1178,9 +1178,9 @@ Error: ${re(n)}`), new Error(r);
1178
1178
  const u = () => {
1179
1179
  Ee("Cleaning up Adyen 3DS flow"), s.removeEventListener("click", f), i.remove();
1180
1180
  }, d = (y) => {
1181
- je("Authentication failed. Result:", y), l({ status: O.FAILURE, cleanup: u });
1181
+ Ne("Authentication failed. Result:", y), l({ status: O.FAILURE, cleanup: u });
1182
1182
  }, _ = (y) => {
1183
- je("Adyen error:", y), l({ status: O.FAILURE, cleanup: u });
1183
+ Ne("Adyen error:", y), l({ status: O.FAILURE, cleanup: u });
1184
1184
  }, f = () => {
1185
1185
  l({ status: O.CANCELLED, cleanup: u });
1186
1186
  };
@@ -1204,7 +1204,7 @@ Error: ${re(n)}`), new Error(r);
1204
1204
  });
1205
1205
  }, pa = (t) => {
1206
1206
  const n = navigator.languages && navigator.languages.length ? navigator.languages[0] : navigator.language, r = t ?? n, o = ia.safeParse(r);
1207
- return o.success ? (Ee(`Resolved locale: ${o.data}`), o.data) : (je(`Resolved invalid locale: ${r}. Defaulting to en-US.`), "en-US");
1207
+ return o.success ? (Ee(`Resolved locale: ${o.data}`), o.data) : (Ne(`Resolved invalid locale: ${r}. Defaulting to en-US.`), "en-US");
1208
1208
  }, ma = (t) => (t == null ? void 0 : t["op-adyen-action"]) !== void 0, ya = async (t, n, r) => {
1209
1209
  const o = ca(n), a = document.createElement("div");
1210
1210
  a.id = "adyen-container";
@@ -1232,7 +1232,7 @@ Error: ${re(n)}`), new Error(r);
1232
1232
  };
1233
1233
  } else
1234
1234
  Ze(l.status);
1235
- }, { log__: P, err__: Nt } = A("common-cc"), { log__: jt } = A("stripe-cc");
1235
+ }, { log__: k, err__: jt } = I("common-cc"), { log__: Nt } = I("stripe-cc");
1236
1236
  e.array(
1237
1237
  e.object({
1238
1238
  our_existing_pm_id: e.string()
@@ -1247,9 +1247,9 @@ const _a = ie(
1247
1247
  customParams: a
1248
1248
  }) => {
1249
1249
  var i;
1250
- P("├ Running common CC flow...", { checkoutPaymentMethod: n });
1251
- const s = t.anyCdeConnection, c = await N(s);
1252
- P(`├ Validating non-CDE form fields [Mode: ${c.mode}]`);
1250
+ k("├ Running common CC flow...", { checkoutPaymentMethod: n });
1251
+ const s = t.anyCdeConnection, c = await j(s);
1252
+ k(`├ Validating non-CDE form fields [Mode: ${c.mode}]`);
1253
1253
  const l = ue(r, o.get.onValidationError), u = {
1254
1254
  session_id: t.elementsSessionId,
1255
1255
  checkout_payment_method: n,
@@ -1259,35 +1259,35 @@ const _a = ie(
1259
1259
  }
1260
1260
  };
1261
1261
  try {
1262
- P(`├ Tokenizing card info in CDE [Session: ${t.elementsSessionId}]`);
1262
+ k(`├ Tokenizing card info in CDE [Session: ${t.elementsSessionId}]`);
1263
1263
  const d = await Ro(a.currentCdeConnections, {
1264
1264
  session_id: t.elementsSessionId
1265
1265
  });
1266
- if (jo(d, o.get.onValidationError), c.mode === "setup") {
1267
- P(`├ Setting up payment method in CDE [Token: ${c.token}]`);
1266
+ if (No(d, o.get.onValidationError), c.mode === "setup") {
1267
+ k(`├ Setting up payment method in CDE [Token: ${c.token}]`);
1268
1268
  const _ = await Oo(s, u);
1269
- return P(`╰ Setup completed successfully [PM ID: ${_.payment_method_id}]`), { mode: "setup", result: _ };
1269
+ return k(`╰ Setup completed successfully [PM ID: ${_.payment_method_id}]`), { mode: "setup", result: _ };
1270
1270
  } else {
1271
- P(`├ Initial checkout flow. Checking out card info in CDE [Session: ${t.elementsSessionId}]`);
1271
+ k(`├ Initial checkout flow. Checking out card info in CDE [Session: ${t.elementsSessionId}]`);
1272
1272
  const _ = await Ot(s, u);
1273
- return P("╰ Checkout completed successfully."), { mode: "checkout", result: _ };
1273
+ return k("╰ Checkout completed successfully."), { mode: "checkout", result: _ };
1274
1274
  }
1275
1275
  } catch (d) {
1276
1276
  if (d instanceof pr && d.originalErrorMessage.includes("3DS_REQUIRED")) {
1277
- P("├ Card requires 3DS, starting non-legacy payment flow"), P("Received 3DS error response headers:", d.response.headers);
1277
+ k("├ Card requires 3DS, starting non-legacy payment flow"), k("Received 3DS error response headers:", d.response.headers);
1278
1278
  const _ = Jo(d.response.headers);
1279
1279
  if (_) {
1280
- P("├ Pockyt 3DS case detected. Going through Pockyt 3DS flow.");
1280
+ k("├ Pockyt 3DS case detected. Going through Pockyt 3DS flow.");
1281
1281
  const h = await Xo(t.baseUrl, d.response.headers);
1282
1282
  u.extra_metadata.pockyt = h;
1283
1283
  }
1284
1284
  if (ra(d.response.headers)) {
1285
- P("├ Airwallex 3DS case detected. Going through Airwallex 3DS flow.");
1285
+ k("├ Airwallex 3DS case detected. Going through Airwallex 3DS flow.");
1286
1286
  const h = await oa(t.baseUrl, d.response.headers);
1287
1287
  u.extra_metadata.airwallex = h;
1288
1288
  }
1289
1289
  if (ma(d.response.headers)) {
1290
- P("├ Adyen 3DS case detected. Going through Adyen 3DS flow.");
1290
+ k("├ Adyen 3DS case detected. Going through Adyen 3DS flow.");
1291
1291
  const h = await ya(
1292
1292
  r[p.COUNTRY],
1293
1293
  d.response.headers,
@@ -1296,30 +1296,30 @@ const _a = ie(
1296
1296
  u.extra_metadata.adyen = h;
1297
1297
  }
1298
1298
  const f = await Po(s, u);
1299
- P("├ Payment flow result:", f);
1299
+ k("├ Payment flow result:", f);
1300
1300
  const m = ((i = d.response.headers) == null ? void 0 : i["op-should-use-new-flow"]) !== "true";
1301
- _ ? P("├ Pre-start 3DS is successful, other 3DS flows will be skipped.") : m ? (P("├ Using stripe 3DS flow"), await wa(f)) : (P("├ Using common 3DS flow"), await ba(f, t.baseUrl));
1301
+ _ ? k("├ Pre-start 3DS is successful, other 3DS flows will be skipped.") : m ? (k("├ Using stripe 3DS flow"), await wa(f)) : (k("├ Using common 3DS flow"), await ba(f, t.baseUrl));
1302
1302
  const y = f.cc_pm_id;
1303
1303
  if (c.mode === "setup") {
1304
- P(`├ Confirming payment flow [cc_pm_id: ${y}]`);
1305
- const h = await B(s, {
1304
+ k(`├ Confirming payment flow [cc_pm_id: ${y}]`);
1305
+ const h = await H(s, {
1306
1306
  secure_token: c.token,
1307
1307
  existing_cc_pm_id: y
1308
1308
  });
1309
- P("├ Confirm payment flow result received Result:", h);
1309
+ k("├ Confirm payment flow result received Result:", h);
1310
1310
  const C = De(h);
1311
- return P(`╰ Setup completed successfully [PM ID: ${C.payment_method_id}]`), { mode: "setup", result: C };
1311
+ return k(`╰ Setup completed successfully [PM ID: ${C.payment_method_id}]`), { mode: "setup", result: C };
1312
1312
  } else {
1313
- P(`├ Checking out after 3DS flow [Flow: ${m ? "legacy" : "new"}]`);
1313
+ k(`├ Checking out after 3DS flow [Flow: ${m ? "legacy" : "new"}]`);
1314
1314
  const h = await Ot(s, {
1315
1315
  ...u,
1316
1316
  existing_cc_pm_id: y,
1317
1317
  do_not_use_legacy_cc_flow: m
1318
1318
  });
1319
- return P("╰ Checkout completed successfully."), { mode: "checkout", result: h };
1319
+ return k("╰ Checkout completed successfully."), { mode: "checkout", result: h };
1320
1320
  }
1321
1321
  }
1322
- throw Nt("╰ Error checking out card info in CDE"), Nt(d), d;
1322
+ throw jt("╰ Error checking out card info in CDE"), jt(d), d;
1323
1323
  }
1324
1324
  }
1325
1325
  ), ha = (t) => {
@@ -1335,21 +1335,21 @@ const _a = ie(
1335
1335
  }, ba = async (t, n) => {
1336
1336
  const r = ga(t);
1337
1337
  if (r.redirect_url === "3DS_COMPLETE") {
1338
- P("├ 3DS flow completed successfully");
1338
+ k("├ 3DS flow completed successfully");
1339
1339
  return;
1340
1340
  }
1341
- P(`├ Using common 3DS flow [URL: ${r.redirect_url}]`);
1341
+ k(`├ Using common 3DS flow [URL: ${r.redirect_url}]`);
1342
1342
  const { status: o } = await Je({ url: r.redirect_url, baseUrl: n });
1343
- if (P(`╰ 3DS verification completed [Status: ${o}]`), o === O.CANCELLED)
1343
+ if (k(`╰ 3DS verification completed [Status: ${o}]`), o === O.CANCELLED)
1344
1344
  throw new Error("3DS verification cancelled");
1345
1345
  if (o === O.FAILURE)
1346
1346
  throw new Error("3DS verification failed");
1347
1347
  }, wa = async (t) => {
1348
1348
  const n = ha(t);
1349
- jt(`├ Using stripe 3DS flow [Client Secret: ${n.client_secret.substring(0, 8)}...]`), await Yn(n), jt("╰ Stripe 3DS flow completed successfully");
1350
- }, Z = e.enum(["stripe", "airwallex", "authorize_net"]);
1351
- Z.Enum.stripe;
1352
- const { log__: U, err__: va } = A("stripe-pr"), Ca = e.object({
1349
+ Nt(`├ Using stripe 3DS flow [Client Secret: ${n.client_secret.substring(0, 8)}...]`), await Yn(n), Nt("╰ Stripe 3DS flow completed successfully");
1350
+ }, B = e.enum(["stripe", "airwallex", "authorize_net"]);
1351
+ B.Enum.stripe;
1352
+ const { log__: L, err__: va } = I("stripe-pr"), Ca = e.object({
1353
1353
  provider: e.union([e.literal("apple_pay"), e.literal("google_pay")]),
1354
1354
  processor_name: e.literal("stripe"),
1355
1355
  metadata: e.object({
@@ -1357,30 +1357,30 @@ const { log__: U, err__: va } = A("stripe-pr"), Ca = e.object({
1357
1357
  })
1358
1358
  }), Ea = he(
1359
1359
  async ({ context: t, formCallbacks: n }) => {
1360
- U("Checking if there are any CPMs for Stripe PR...");
1361
- const r = J(t.checkoutPaymentMethods, Ca);
1362
- U("Initializing Stripe PR flow...");
1363
- const o = t.anyCdeConnection, a = await N(o), i = a.mode === "setup";
1364
- U("Getting initial preview amount");
1360
+ L("Checking if there are any CPMs for Stripe PR...");
1361
+ const r = W(t.checkoutPaymentMethods, Ca);
1362
+ L("Initializing Stripe PR flow...");
1363
+ const o = t.anyCdeConnection, a = await j(o), i = a.mode === "setup";
1364
+ L("Getting initial preview amount");
1365
1365
  const s = await Ae(o, a.token, i, void 0), c = await Gn(
1366
1366
  r.metadata.stripe_pk,
1367
1367
  s.amountAtom,
1368
1368
  s.currency,
1369
1369
  i
1370
1370
  );
1371
- U("Checking if can make payment");
1371
+ L("Checking if can make payment");
1372
1372
  const l = await c.canMakePayment();
1373
1373
  if (l === null)
1374
1374
  return va("canMakePayment returned null"), { isAvailable: !1, reason: "canMakePayment returned null" };
1375
- U("Stripe PR flow initialized successfully. Can make payment", l);
1375
+ L("Stripe PR flow initialized successfully. Can make payment", l);
1376
1376
  const u = (d, _) => R.stripePR.run({
1377
1377
  context: t,
1378
- checkoutPaymentMethod: Ne(t.checkoutPaymentMethods, d),
1379
- nonCdeFormInputs: te(t.formDiv),
1378
+ checkoutPaymentMethod: je(t.checkoutPaymentMethods, d),
1379
+ nonCdeFormInputs: ee(t.formDiv),
1380
1380
  formCallbacks: n,
1381
1381
  customParams: { provider: d, overridePaymentRequest: _ == null ? void 0 : _.overridePaymentRequest },
1382
1382
  initResult: {
1383
- processor: Z.Enum.stripe,
1383
+ processor: B.Enum.stripe,
1384
1384
  pr: c,
1385
1385
  isAvailable: !0,
1386
1386
  availableProviders: { applePay: l.applePay, googlePay: l.googlePay },
@@ -1388,7 +1388,7 @@ const { log__: U, err__: va } = A("stripe-pr"), Ca = e.object({
1388
1388
  }
1389
1389
  });
1390
1390
  return {
1391
- processor: Z.Enum.stripe,
1391
+ processor: B.Enum.stripe,
1392
1392
  isAvailable: !0,
1393
1393
  pr: c,
1394
1394
  availableProviders: {
@@ -1407,32 +1407,32 @@ const { log__: U, err__: va } = A("stripe-pr"), Ca = e.object({
1407
1407
  customParams: a,
1408
1408
  initResult: i
1409
1409
  }) => {
1410
- if (U("Running Stripe PR flow..."), a.provider !== n.provider)
1410
+ if (L("Running Stripe PR flow..."), a.provider !== n.provider)
1411
1411
  throw new Error(`Provider mismatch. Expected ${a.provider}, got ${n.provider}`);
1412
1412
  const s = t.anyCdeConnection, c = i.pr;
1413
1413
  if (a != null && a.overridePaymentRequest) {
1414
1414
  const y = a.overridePaymentRequest;
1415
- U("Overriding PR amount with", y), Sa(c, y.amount, y.pending, y.applePayPaymentRequest);
1415
+ L("Overriding PR amount with", y), Sa(c, y.amount, y.pending, y.applePayPaymentRequest);
1416
1416
  }
1417
- U("Showing PR dialog..."), c.show();
1417
+ L("Showing PR dialog..."), c.show();
1418
1418
  const l = await Vn(c);
1419
- U("Stripe PM added event:", l), U("Merging PM fields with form fields...");
1419
+ L("Stripe PM added event:", l), L("Merging PM fields with form fields...");
1420
1420
  const u = ka(r, l), d = ue(u, o.get.onValidationError);
1421
- U("PR dialog finished. Starting payment flow...", d);
1421
+ L("PR dialog finished. Starting payment flow...", d);
1422
1422
  const _ = await ko(s, {
1423
1423
  fields: d,
1424
1424
  checkoutPaymentMethod: n
1425
1425
  }), f = Aa(_);
1426
- U("Confirming PR with Stripe..."), await Kn(f, l);
1427
- const m = await N(s);
1426
+ L("Confirming PR with Stripe..."), await Kn(f, l);
1427
+ const m = await j(s);
1428
1428
  if (m.mode === "setup") {
1429
- U("Confirming payment flow for setup...");
1430
- const y = await B(s, {
1429
+ L("Confirming payment flow for setup...");
1430
+ const y = await H(s, {
1431
1431
  secure_token: m.token
1432
1432
  });
1433
1433
  return { mode: "setup", result: De(y) };
1434
1434
  } else {
1435
- U("Performing checkout...");
1435
+ L("Performing checkout...");
1436
1436
  const y = {
1437
1437
  secure_token: m.token,
1438
1438
  payment_input: {
@@ -1455,7 +1455,7 @@ const { log__: U, err__: va } = A("stripe-pr"), Ca = e.object({
1455
1455
  ), ka = (t, n) => {
1456
1456
  var r, o, a, i;
1457
1457
  const s = { ...t }, [c, ...l] = ((o = (r = n.payerName) == null ? void 0 : r.trim()) == null ? void 0 : o.split(/\s+/)) ?? [], u = l.join(" ") || void 0, d = (i = (a = n.paymentMethod) == null ? void 0 : a.billing_details) == null ? void 0 : i.address, _ = n.shippingAddress;
1458
- 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] || n.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", U("Final form inputs:", s), s;
1458
+ 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] || n.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", L("Final form inputs:", s), s;
1459
1459
  }, Sa = (t, n, r, o) => {
1460
1460
  t.update({
1461
1461
  total: {
@@ -1474,7 +1474,7 @@ const { log__: U, err__: va } = A("stripe-pr"), Ca = e.object({
1474
1474
  throw new Error(`Error occurred.
1475
1475
  Details: got ${t.required_user_actions.length} required user actions`);
1476
1476
  return zn.parse(t.required_user_actions[0]);
1477
- }, { log__: Q, err__: Mt } = A("pockyt-paypal"), Ia = e.object({
1477
+ }, { log__: X, err__: Mt } = I("pockyt-paypal"), Ia = e.object({
1478
1478
  processor_name: e.literal("pockyt"),
1479
1479
  provider: e.literal("paypal")
1480
1480
  });
@@ -1493,17 +1493,17 @@ const Ra = ie(
1493
1493
  customParams: a
1494
1494
  }) => {
1495
1495
  var i, s;
1496
- Q("Running Pockyt Paypal flow...");
1497
- const c = t.anyCdeConnection, l = await N(c);
1498
- Q("Verifying CPM...");
1496
+ X("Running Pockyt Paypal flow...");
1497
+ const c = t.anyCdeConnection, l = await j(c);
1498
+ X("Verifying CPM...");
1499
1499
  const u = Ia.parse(n);
1500
- Q("├ Validating non-CDE form fields");
1500
+ X("├ Validating non-CDE form fields");
1501
1501
  const d = a == null ? void 0 : a.settings, _ = ue(
1502
1502
  r,
1503
1503
  o.get.onValidationError,
1504
1504
  d == null ? void 0 : d.defaultFieldValues
1505
- ), f = No(_);
1506
- Q(`Starting payment flow... Mode: ${l.mode}`);
1505
+ ), f = jo(_);
1506
+ X(`Starting payment flow... Mode: ${l.mode}`);
1507
1507
  const m = bt(), y = l.mode !== "setup", h = {
1508
1508
  payment_provider: u.provider,
1509
1509
  checkout_payment_method: u,
@@ -1523,25 +1523,25 @@ const Ra = ie(
1523
1523
  r: E
1524
1524
  }), w = `${C}?${v.toString()}`;
1525
1525
  if ((s = a == null ? void 0 : a.settings) != null && s.useRedirectFlow)
1526
- throw Q("Starting redirect mode for PayPal..."), window.location.href = w, await Ct(20 * 1e3), new Error("Paypal flow timed out, please try again with another payment method.");
1527
- Q("Starting popup mode for PayPal..."), Q("Opening paypal iframe...");
1528
- const I = await Yo(
1526
+ throw X("Starting redirect mode for PayPal..."), window.location.href = w, await Ct(20 * 1e3), new Error("Paypal flow timed out, please try again with another payment method.");
1527
+ X("Starting popup mode for PayPal..."), X("Opening paypal iframe...");
1528
+ const P = await Yo(
1529
1529
  "PayPal",
1530
1530
  c,
1531
1531
  m,
1532
1532
  w
1533
1533
  );
1534
- Q("Paypal flow result", I);
1535
- const q = vr(I.href), D = Wo(I.href, "catt");
1536
- if (!D)
1537
- throw Mt("Checkout attempt ID not found in redirect URL:", I.href), new Error("Checkout attempt ID not found in redirect URL");
1538
- Q(`Confirming payment flow using vault ID ${q}`);
1539
- const se = await B(c, {
1534
+ X("Paypal flow result", P);
1535
+ const $ = vr(P.href), re = Wo(P.href, "catt");
1536
+ if (!re)
1537
+ throw Mt("Checkout attempt ID not found in redirect URL:", P.href), new Error("Checkout attempt ID not found in redirect URL");
1538
+ X(`Confirming payment flow using vault ID ${$}`);
1539
+ const se = await H(c, {
1540
1540
  secure_token: l.token,
1541
- their_pm_id: q,
1542
- checkout_attempt_id: y ? D : void 0
1541
+ their_pm_id: $,
1542
+ checkout_attempt_id: y ? re : void 0
1543
1543
  });
1544
- if (Q("Confirm payment flow result", se), l.mode === "setup")
1544
+ if (X("Confirm payment flow result", se), l.mode === "setup")
1545
1545
  return {
1546
1546
  mode: "setup",
1547
1547
  result: {
@@ -1627,27 +1627,27 @@ const Sr = (t) => t === wt || t === window.location.origin ? "PRODUCTION" : "TES
1627
1627
  s[p.EMAIL] = s[p.EMAIL] || n.email || "op_unfilled@getopenpay.com", s[p.COUNTRY] = s[p.COUNTRY] || c.countryCode || "US", s[p.ADDRESS] = s[p.ADDRESS] || c.address1 || "", s[p.CITY] = s[p.CITY] || c.locality || "", s[p.ZIP_CODE] = s[p.ZIP_CODE] || c.postalCode || "00000", s[p.STATE] = s[p.STATE] || c.administrativeArea || "", s[p.FIRST_NAME] = s[p.FIRST_NAME] || l || "_OP_UNKNOWN", s[p.LAST_NAME] = s[p.LAST_NAME] || d || "_OP_UNKNOWN";
1628
1628
  }
1629
1629
  return s;
1630
- }, { log__: Y, err__: fe } = A("awx-google-pay"), xa = he(
1630
+ }, { log__: K, err__: fe } = I("awx-google-pay"), xa = he(
1631
1631
  async ({ context: t, formCallbacks: n }) => {
1632
1632
  var r, o;
1633
1633
  const a = {
1634
- processor: Z.Enum.airwallex,
1634
+ processor: B.Enum.airwallex,
1635
1635
  isAvailable: !1,
1636
1636
  isLoading: !1,
1637
1637
  startFlow: async () => {
1638
1638
  }
1639
- }, i = J(t.checkoutPaymentMethods, Er);
1639
+ }, i = W(t.checkoutPaymentMethods, Er);
1640
1640
  if (!i)
1641
1641
  return a;
1642
- Y("Google Pay CPM", i);
1642
+ K("Google Pay CPM", i);
1643
1643
  const s = i.metadata;
1644
1644
  if (!s.processor_account_id)
1645
1645
  return fe("No gateway merchant ID found in processor account"), a;
1646
- if (Y("Loading Google Pay SDK..."), await kr(), !((o = (r = window.google) == null ? void 0 : r.payments) != null && o.api))
1646
+ if (K("Loading Google Pay SDK..."), await kr(), !((o = (r = window.google) == null ? void 0 : r.payments) != null && o.api))
1647
1647
  return fe("Google Pay SDK not loaded properly"), a;
1648
1648
  if (Sr(t.baseUrl) === "PRODUCTION" && !s.google_pay_merchant_id)
1649
1649
  return fe("Google Pay merchant ID is required for production environment"), a;
1650
- Y("Google Pay SDK loaded", window.google.payments);
1650
+ K("Google Pay SDK loaded", window.google.payments);
1651
1651
  try {
1652
1652
  const f = Xe({
1653
1653
  gateway: "airwallex",
@@ -1663,16 +1663,16 @@ const Sr = (t) => t === wt || t === window.location.origin ? "PRODUCTION" : "TES
1663
1663
  f
1664
1664
  );
1665
1665
  if (!m)
1666
- return Y("Google Pay is not available for this user"), a;
1666
+ return K("Google Pay is not available for this user"), a;
1667
1667
  } catch (f) {
1668
1668
  return fe("Error checking Google Pay availability", f), a;
1669
1669
  }
1670
- const c = t.anyCdeConnection, l = await N(c), u = l.mode === "setup", d = await Ae(c, l.token, u, void 0), _ = async (f) => {
1670
+ const c = t.anyCdeConnection, l = await j(c), u = l.mode === "setup", d = await Ae(c, l.token, u, void 0), _ = async (f) => {
1671
1671
  try {
1672
1672
  R.airwallexGooglePay.run({
1673
1673
  context: t,
1674
1674
  checkoutPaymentMethod: i,
1675
- nonCdeFormInputs: te(t.formDiv),
1675
+ nonCdeFormInputs: ee(t.formDiv),
1676
1676
  formCallbacks: n,
1677
1677
  initResult: void 0,
1678
1678
  customParams: {
@@ -1685,7 +1685,7 @@ const Sr = (t) => t === wt || t === window.location.origin ? "PRODUCTION" : "TES
1685
1685
  }
1686
1686
  };
1687
1687
  return {
1688
- processor: Z.Enum.airwallex,
1688
+ processor: B.Enum.airwallex,
1689
1689
  isAvailable: !0,
1690
1690
  isLoading: !1,
1691
1691
  startFlow: _
@@ -1700,8 +1700,8 @@ const Sr = (t) => t === wt || t === window.location.origin ? "PRODUCTION" : "TES
1700
1700
  customParams: a
1701
1701
  }) => {
1702
1702
  var i, s, c, l, u, d, _;
1703
- Y("Starting Google Pay flow...");
1704
- const f = J(t.checkoutPaymentMethods, Er), { initialPreview: m, overridePaymentRequest: y } = a, h = f.metadata;
1703
+ K("Starting Google Pay flow...");
1704
+ const f = W(t.checkoutPaymentMethods, Er), { initialPreview: m, overridePaymentRequest: y } = a, h = f.metadata;
1705
1705
  if (!h.processor_account_id)
1706
1706
  throw new Error("No gateway merchant ID found in processor account");
1707
1707
  const C = Xe({
@@ -1714,9 +1714,9 @@ const Sr = (t) => t === wt || t === window.location.origin ? "PRODUCTION" : "TES
1714
1714
  }), E = Qe(t.baseUrl, C);
1715
1715
  try {
1716
1716
  const v = await E.loadPaymentData(C);
1717
- Y("Google Pay Payment data", v);
1718
- const w = t.anyCdeConnection, I = await N(w), q = Ar(r, v), D = ue(
1719
- q,
1717
+ K("Google Pay Payment data", v);
1718
+ const w = t.anyCdeConnection, P = await j(w), $ = Ar(r, v), re = ue(
1719
+ $,
1720
1720
  o.get.onValidationError,
1721
1721
  a == null ? void 0 : a.defaultFieldValues
1722
1722
  ), se = (s = (i = v.paymentMethodData) == null ? void 0 : i.tokenizationData) == null ? void 0 : s.token;
@@ -1725,17 +1725,17 @@ const Sr = (t) => t === wt || t === window.location.origin ? "PRODUCTION" : "TES
1725
1725
  const Br = await Se(w, {
1726
1726
  payment_provider: n.provider,
1727
1727
  checkout_payment_method: n,
1728
- new_customer_email: D[p.EMAIL],
1729
- new_customer_first_name: D[p.FIRST_NAME],
1730
- new_customer_last_name: D[p.LAST_NAME],
1728
+ new_customer_email: re[p.EMAIL],
1729
+ new_customer_first_name: re[p.FIRST_NAME],
1730
+ new_customer_last_name: re[p.LAST_NAME],
1731
1731
  new_customer_address: {
1732
- zip_code: D[p.ZIP_CODE],
1733
- country: D[p.COUNTRY]
1732
+ zip_code: re[p.ZIP_CODE],
1733
+ country: re[p.COUNTRY]
1734
1734
  }
1735
1735
  }), ot = Oa(Br);
1736
- Y("Start flow next actions", ot);
1737
- let pe = await B(w, {
1738
- secure_token: I.token,
1736
+ K("Start flow next actions", ot);
1737
+ let pe = await H(w, {
1738
+ secure_token: P.token,
1739
1739
  processor_specific_metadata: {
1740
1740
  payment_provider: n.provider,
1741
1741
  // GooglePay's encrypted_payment_token provided to verify the consent first
@@ -1749,36 +1749,36 @@ const Sr = (t) => t === wt || t === window.location.origin ? "PRODUCTION" : "TES
1749
1749
  }
1750
1750
  }
1751
1751
  });
1752
- Y("[1st] Confirm payment flow response", pe);
1752
+ K("[1st] Confirm payment flow response", pe);
1753
1753
  let at = (l = (c = pe.payment_methods) == null ? void 0 : c[0]) == null ? void 0 : l.id;
1754
1754
  const me = (u = pe.required_user_actions) == null ? void 0 : u.find(
1755
1755
  (Oe) => Oe.type === "airwallex_payment_consent"
1756
1756
  );
1757
1757
  if (me && me.redirect_url) {
1758
- Y("3DS Required, starting verification...", me);
1758
+ K("3DS Required, starting verification...", me);
1759
1759
  const { status: Oe } = await Je({
1760
1760
  url: me.redirect_url,
1761
1761
  baseUrl: t.baseUrl
1762
1762
  });
1763
- if (Y(`╰ 3DS verification completed [Status: ${Oe}]`), Oe === O.CANCELLED)
1763
+ if (K(`╰ 3DS verification completed [Status: ${Oe}]`), Oe === O.CANCELLED)
1764
1764
  throw new Error("3DS verification cancelled");
1765
1765
  if (Oe === O.FAILURE)
1766
1766
  throw new Error("3DS verification failed");
1767
1767
  }
1768
- if (me && !at && (pe = await B(w, {
1769
- secure_token: I.token,
1768
+ if (me && !at && (pe = await H(w, {
1769
+ secure_token: P.token,
1770
1770
  their_pm_id: me.their_pm_id,
1771
1771
  processor_specific_metadata: {
1772
1772
  payment_provider: n.provider,
1773
1773
  airwallex_consent_id: me.consent_id
1774
1774
  }
1775
- }), Y("[2nd] Confirm payment flow response", pe), at = (_ = (d = pe.payment_methods) == null ? void 0 : d[0]) == null ? void 0 : _.id), !at)
1775
+ }), K("[2nd] Confirm payment flow response", pe), at = (_ = (d = pe.payment_methods) == null ? void 0 : d[0]) == null ? void 0 : _.id), !at)
1776
1776
  throw new Error("No PM ID found");
1777
1777
  return We({
1778
1778
  logPrefix: "awx-googlepay",
1779
1779
  anyCdeConnection: w,
1780
1780
  checkoutPaymentMethod: n,
1781
- requiredFormFields: D,
1781
+ requiredFormFields: re,
1782
1782
  confirmResult: pe,
1783
1783
  usePayFirstFlow: !1
1784
1784
  });
@@ -1792,7 +1792,8 @@ const Sr = (t) => t === wt || t === window.location.origin ? "PRODUCTION" : "TES
1792
1792
  }), Rr = (t, n) => {
1793
1793
  const r = n.token.paymentMethod.billingContact, o = n.billingContact, a = n.shippingContact, i = { ...t };
1794
1794
  return (r || o || a) && (i[p.EMAIL] = i[p.EMAIL] || (r == null ? void 0 : r.emailAddress) || (o == null ? void 0 : o.emailAddress) || (a == null ? void 0 : a.emailAddress) || "op_unfilled@email.com", i[p.COUNTRY] = i[p.COUNTRY] || (r == null ? void 0 : r.countryCode) || (o == null ? void 0 : o.countryCode) || (a == null ? void 0 : a.countryCode) || "US", i[p.ZIP_CODE] = i[p.ZIP_CODE] || (r == null ? void 0 : r.postalCode) || (o == null ? void 0 : o.postalCode) || (a == null ? void 0 : a.postalCode) || "00000", i[p.FIRST_NAME] = i[p.FIRST_NAME] || (r == null ? void 0 : r.givenName) || (o == null ? void 0 : o.givenName) || (a == null ? void 0 : a.givenName) || "_OP_UNKNOWN", i[p.LAST_NAME] = i[p.LAST_NAME] || (r == null ? void 0 : r.familyName) || (o == null ? void 0 : o.familyName) || (a == null ? void 0 : a.familyName) || "_OP_UNKNOWN"), i;
1795
- }, Na = e.object({
1795
+ };
1796
+ e.object({
1796
1797
  data: e.object({
1797
1798
  messageHeaders: e.record(e.string(), e.any()),
1798
1799
  errors: e.array(e.any()),
@@ -1800,22 +1801,8 @@ const Sr = (t) => t === wt || t === window.location.origin ? "PRODUCTION" : "TES
1800
1801
  messageBody: e.record(e.string(), e.any())
1801
1802
  }),
1802
1803
  origin: e.literal("https://applepay.cdn-apple.com")
1803
- }), ja = (t) => Na.safeParse(t).data, Ma = (t) => {
1804
- const n = new AbortController();
1805
- return window.addEventListener(
1806
- "message",
1807
- (r) => {
1808
- var o;
1809
- const a = ja(r);
1810
- ((o = a == null ? void 0 : a.data) == null ? void 0 : o.messageType) === "windowclosing" && (t(), n.abort());
1811
- },
1812
- {
1813
- signal: n.signal
1814
- }
1815
- ), {
1816
- cleanupCancelListener: () => n.abort()
1817
- };
1818
- }, Or = ({
1804
+ });
1805
+ const Or = ({
1819
1806
  total: t,
1820
1807
  prefill: n
1821
1808
  }) => {
@@ -1865,8 +1852,8 @@ const Sr = (t) => t === wt || t === window.location.origin ? "PRODUCTION" : "TES
1865
1852
  amount: c
1866
1853
  }
1867
1854
  };
1868
- }, { log__: Fe } = A("awx-apple-pay");
1869
- async function Da(t, n) {
1855
+ }, { log__: Fe } = I("awx-apple-pay");
1856
+ async function ja(t, n) {
1870
1857
  try {
1871
1858
  const r = (await yr(n.connection, {
1872
1859
  checkout_payment_method: n.checkoutPaymentMethod,
@@ -1885,7 +1872,7 @@ async function Da(t, n) {
1885
1872
  throw n.session.abort(), r;
1886
1873
  }
1887
1874
  }
1888
- async function La(t, n) {
1875
+ async function Na(t, n) {
1889
1876
  if (!t.redirect_url)
1890
1877
  throw new Error("No redirect URL found");
1891
1878
  Fe("3DS Required, starting verification...", t);
@@ -1897,7 +1884,7 @@ async function La(t, n) {
1897
1884
  throw new Error("3DS verification cancelled");
1898
1885
  if (r === O.FAILURE)
1899
1886
  throw new Error("3DS verification failed");
1900
- const o = await B(n.connection, {
1887
+ const o = await H(n.connection, {
1901
1888
  secure_token: n.prefill.token,
1902
1889
  processor_specific_metadata: {
1903
1890
  their_pm_id: t.their_pm_id,
@@ -1907,7 +1894,7 @@ async function La(t, n) {
1907
1894
  });
1908
1895
  return Fe("[2nd] Confirm payment flow response", o), o;
1909
1896
  }
1910
- async function Ua(t, n) {
1897
+ async function Ma(t, n) {
1911
1898
  var r, o, a, i, s;
1912
1899
  try {
1913
1900
  const c = t.payment, l = Rr(n.nonCdeFormInputs, c), u = ue(
@@ -1927,7 +1914,7 @@ async function Ua(t, n) {
1927
1914
  })).required_user_actions[0].consent_id;
1928
1915
  if (!d)
1929
1916
  throw new Error("No consent ID received from payment flow");
1930
- let _ = await B(n.connection, {
1917
+ let _ = await H(n.connection, {
1931
1918
  secure_token: n.prefill.token,
1932
1919
  processor_specific_metadata: {
1933
1920
  payment_provider: n.checkoutPaymentMethod.provider,
@@ -1946,7 +1933,7 @@ async function Ua(t, n) {
1946
1933
  const m = (a = _.required_user_actions) == null ? void 0 : a.find(
1947
1934
  (h) => h.type === "airwallex_payment_consent"
1948
1935
  );
1949
- if (m != null && m.redirect_url && m.consent_id && m.their_pm_id && (_ = await La(m, n), f = (s = (i = _.payment_methods) == null ? void 0 : i[0]) == null ? void 0 : s.id), !f)
1936
+ if (m != null && m.redirect_url && m.consent_id && m.their_pm_id && (_ = await Na(m, n), f = (s = (i = _.payment_methods) == null ? void 0 : i[0]) == null ? void 0 : s.id), !f)
1950
1937
  throw new Error("No PM ID found");
1951
1938
  const y = {
1952
1939
  status: ApplePaySession.STATUS_SUCCESS
@@ -1966,15 +1953,15 @@ async function Ua(t, n) {
1966
1953
  throw n.session.completePayment(l), c;
1967
1954
  }
1968
1955
  }
1969
- const { log__: ge, err__: mt } = A("awx-apple-pay"), Fa = he(
1956
+ const { log__: ge, err__: mt } = I("awx-apple-pay"), Da = he(
1970
1957
  async ({ context: t, formCallbacks: n }) => {
1971
1958
  const r = {
1972
- processor: Z.Enum.airwallex,
1959
+ processor: B.Enum.airwallex,
1973
1960
  isAvailable: !1,
1974
1961
  isLoading: !1,
1975
1962
  startFlow: async () => {
1976
1963
  }
1977
- }, o = J(t.checkoutPaymentMethods, Cr);
1964
+ }, o = W(t.checkoutPaymentMethods, Cr);
1978
1965
  if (!o)
1979
1966
  return r;
1980
1967
  ge("Loading Apple Pay SDK...");
@@ -1989,12 +1976,12 @@ const { log__: ge, err__: mt } = A("awx-apple-pay"), Fa = he(
1989
1976
  return ge("No active cards available for Apple Pay"), r;
1990
1977
  if (!o.metadata.processor_account_id)
1991
1978
  throw new Error("No gateway merchant ID found in processor account");
1992
- const a = t.anyCdeConnection, i = await N(a), s = i.mode === "setup", c = await Ae(a, i.token, s, void 0), l = async (u) => {
1979
+ const a = t.anyCdeConnection, i = await j(a), s = i.mode === "setup", c = await Ae(a, i.token, s, void 0), l = async (u) => {
1993
1980
  try {
1994
1981
  await R.airwallexApplePay.run({
1995
1982
  context: t,
1996
1983
  checkoutPaymentMethod: o,
1997
- nonCdeFormInputs: te(t.formDiv),
1984
+ nonCdeFormInputs: ee(t.formDiv),
1998
1985
  formCallbacks: n,
1999
1986
  customParams: {
2000
1987
  ...u,
@@ -2007,13 +1994,13 @@ const { log__: ge, err__: mt } = A("awx-apple-pay"), Fa = he(
2007
1994
  }
2008
1995
  };
2009
1996
  return {
2010
- processor: Z.Enum.airwallex,
1997
+ processor: B.Enum.airwallex,
2011
1998
  isAvailable: !0,
2012
1999
  isLoading: !1,
2013
2000
  startFlow: l
2014
2001
  };
2015
2002
  }
2016
- ), za = ie(
2003
+ ), La = ie(
2017
2004
  async ({
2018
2005
  context: t,
2019
2006
  checkoutPaymentMethod: n,
@@ -2022,7 +2009,7 @@ const { log__: ge, err__: mt } = A("awx-apple-pay"), Fa = he(
2022
2009
  formCallbacks: a
2023
2010
  }) => {
2024
2011
  var i;
2025
- const s = J(t.checkoutPaymentMethods, Cr), { overridePaymentRequest: c, initialPreview: l } = o, u = t.anyCdeConnection, d = await N(u), _ = d.mode === "setup", { currencyCode: f, total: m } = xr({
2012
+ const s = W(t.checkoutPaymentMethods, Cr), { overridePaymentRequest: c, initialPreview: l } = o, u = t.anyCdeConnection, d = await j(u), _ = d.mode === "setup", { currencyCode: f, total: m } = xr({
2026
2013
  overridePaymentRequest: c,
2027
2014
  initialPreview: l,
2028
2015
  defaultLabel: (i = s == null ? void 0 : s.metadata) == null ? void 0 : i.processor_account_name
@@ -2059,31 +2046,31 @@ const { log__: ge, err__: mt } = A("awx-apple-pay"), Fa = he(
2059
2046
  return new Promise((E, v) => {
2060
2047
  const w = () => {
2061
2048
  ge("Payment cancelled by user"), v(new Error("Payment cancelled by user"));
2062
- }, { cleanupCancelListener: I } = Ma(w);
2063
- h.oncancel = w, h.onvalidatemerchant = async (q) => {
2049
+ };
2050
+ h.oncancel = w, h.onvalidatemerchant = async (P) => {
2064
2051
  try {
2065
- await Da(q, C);
2066
- } catch (D) {
2067
- v(D);
2052
+ await ja(P, C);
2053
+ } catch ($) {
2054
+ v($);
2068
2055
  }
2069
2056
  }, h.onpaymentmethodselected = () => {
2070
- const q = {
2057
+ const P = {
2071
2058
  newTotal: { ...m }
2072
2059
  };
2073
- h.completePaymentMethodSelection(q);
2074
- }, h.onpaymentauthorized = async (q) => {
2060
+ h.completePaymentMethodSelection(P);
2061
+ }, h.onpaymentauthorized = async (P) => {
2075
2062
  try {
2076
- const D = await Ua(q, C);
2077
- I(), E(D);
2078
- } catch (D) {
2079
- v(D);
2063
+ const $ = await Ma(P, C);
2064
+ E($);
2065
+ } catch ($) {
2066
+ v($);
2080
2067
  }
2081
2068
  }, h.begin();
2082
2069
  }).catch((E) => {
2083
2070
  throw mt("Apple Pay payment error", E), E;
2084
2071
  });
2085
2072
  }
2086
- ), $a = 1, qa = e.object({
2073
+ ), Ua = 1, Fa = e.object({
2087
2074
  processor_name: e.literal("loop"),
2088
2075
  provider: e.literal("crypto"),
2089
2076
  metadata: e.object({
@@ -2091,14 +2078,14 @@ const { log__: ge, err__: mt } = A("awx-apple-pay"), Fa = he(
2091
2078
  entity_id: e.string(),
2092
2079
  api_token: e.string()
2093
2080
  })
2094
- }), { log__: L, err__: Ga } = A("loop-crypto"), Va = he(
2081
+ }), { log__: D, err__: za } = I("loop-crypto"), $a = he(
2095
2082
  async ({ context: t }) => {
2096
- L("Checking if there are any CPMs for Loop Crypto...");
2097
- const n = J(t.checkoutPaymentMethods, qa);
2098
- L(`checkoutPaymentMethod: ${JSON.stringify(n)}`), L("Starting Loop Crypto flow...");
2099
- const r = await N(t.anyCdeConnection);
2083
+ D("Checking if there are any CPMs for Loop Crypto...");
2084
+ const n = W(t.checkoutPaymentMethods, Fa);
2085
+ D(`checkoutPaymentMethod: ${JSON.stringify(n)}`), D("Starting Loop Crypto flow...");
2086
+ const r = await j(t.anyCdeConnection);
2100
2087
  let o;
2101
- if (r.mode === "setup" ? o = $a : o = r.amount_total_atom, r.currency !== "usd" && r.mode !== "setup")
2088
+ if (r.mode === "setup" ? o = Ua : o = r.amount_total_atom, r.currency !== "usd" && r.mode !== "setup")
2102
2089
  throw Error("Cannot support non USD currency for Loop");
2103
2090
  const a = o, i = Math.max(a * 12, 1e5), s = bt(), c = {
2104
2091
  paymentUsdAmount: a,
@@ -2115,7 +2102,7 @@ const { log__: ge, err__: mt } = A("awx-apple-pay"), Fa = he(
2115
2102
  initLoopConnectProps: l
2116
2103
  };
2117
2104
  }
2118
- ), Ka = ie(
2105
+ ), qa = ie(
2119
2106
  async ({
2120
2107
  context: t,
2121
2108
  checkoutPaymentMethod: n,
@@ -2124,11 +2111,11 @@ const { log__: ge, err__: mt } = A("awx-apple-pay"), Fa = he(
2124
2111
  customParams: a,
2125
2112
  initResult: i
2126
2113
  }) => {
2127
- L("Running Loop flow..."), L("context", t), L("checkoutPaymentMethod", n), L("nonCdeFormInputs", r), L("flowCallbacks", o), L("customParams", a), L("initResult", i);
2114
+ D("Running Loop flow..."), D("context", t), D("checkoutPaymentMethod", n), D("nonCdeFormInputs", r), D("flowCallbacks", o), D("customParams", a), D("initResult", i);
2128
2115
  const s = t.anyCdeConnection;
2129
2116
  if (!i.isAvailable)
2130
2117
  throw Error("Failed to initialize Loop flow. Cannot submit without initialization. Exiting running Loop flow.");
2131
- const c = await N(t.anyCdeConnection), l = c.mode !== "setup", u = await Se(t.anyCdeConnection, {
2118
+ const c = await j(t.anyCdeConnection), l = c.mode !== "setup", u = await Se(t.anyCdeConnection, {
2132
2119
  checkout_payment_method: n,
2133
2120
  payment_provider: n.provider,
2134
2121
  new_customer_email: a.email,
@@ -2145,7 +2132,7 @@ const { log__: ge, err__: mt } = A("awx-apple-pay"), Fa = he(
2145
2132
  throw Error(
2146
2133
  `Payin was not successful: ${a.detail.type} ${a.detail.message} ${JSON.stringify(a.detail.data)}`
2147
2134
  );
2148
- const d = await B(s, {
2135
+ const d = await H(s, {
2149
2136
  secure_token: c.token,
2150
2137
  their_pm_id: a.payin.paymentMethod.paymentMethodId,
2151
2138
  checkout_attempt_id: c.mode !== "setup" ? u.checkout_attempt_id : void 0,
@@ -2154,13 +2141,13 @@ const { log__: ge, err__: mt } = A("awx-apple-pay"), Fa = he(
2154
2141
  loop_payin: a.payin
2155
2142
  }
2156
2143
  });
2157
- if (L(`Confirm result: ${d}`), c.mode === "setup") {
2158
- L("Doing payment setup..."), L("├ Confirm payment flow result received Result:", d);
2144
+ if (D(`Confirm result: ${d}`), c.mode === "setup") {
2145
+ D("Doing payment setup..."), D("├ Confirm payment flow result received Result:", d);
2159
2146
  const _ = De(d);
2160
- return L(`╰ Setup completed successfully [PM ID: ${_.payment_method_id}]`), { mode: "setup", result: _ };
2147
+ return D(`╰ Setup completed successfully [PM ID: ${_.payment_method_id}]`), { mode: "setup", result: _ };
2161
2148
  } else {
2162
- if (L("Doing checkout..."), !d.pay_first_success_response)
2163
- throw Ga("Checkout failed, no pay-first success response:", d), new Error("Checkout failed, please try again with another payment method.");
2149
+ if (D("Doing checkout..."), !d.pay_first_success_response)
2150
+ throw za("Checkout failed, no pay-first success response:", d), new Error("Checkout failed, please try again with another payment method.");
2164
2151
  return {
2165
2152
  mode: "checkout",
2166
2153
  result: d.pay_first_success_response
@@ -2168,7 +2155,7 @@ const { log__: ge, err__: mt } = A("awx-apple-pay"), Fa = he(
2168
2155
  }
2169
2156
  }
2170
2157
  );
2171
- async function Ya(t, n) {
2158
+ async function Ga(t, n) {
2172
2159
  try {
2173
2160
  const r = (await yr(n.connection, {
2174
2161
  checkout_payment_method: n.checkoutPaymentMethod,
@@ -2187,7 +2174,7 @@ async function Ya(t, n) {
2187
2174
  throw n.session.abort(), r;
2188
2175
  }
2189
2176
  }
2190
- async function Ha(t, n) {
2177
+ async function Va(t, n) {
2191
2178
  var r, o;
2192
2179
  try {
2193
2180
  const a = t.payment, i = Rr(n.nonCdeFormInputs, a), s = ue(i, n.formCallbacks.get.onValidationError);
@@ -2205,7 +2192,7 @@ async function Ha(t, n) {
2205
2192
  const c = {
2206
2193
  dataDescriptor: "COMMON.APPLE.INAPP.PAYMENT",
2207
2194
  dataValue: window.btoa(JSON.stringify(a.token.paymentData))
2208
- }, l = await B(n.connection, {
2195
+ }, l = await H(n.connection, {
2209
2196
  secure_token: n.prefill.token,
2210
2197
  processor_specific_metadata: {
2211
2198
  payment_provider: n.checkoutPaymentMethod.provider,
@@ -2239,7 +2226,7 @@ const Tr = e.object({
2239
2226
  processor_account_id: e.string(),
2240
2227
  processor_account_name: e.string()
2241
2228
  })
2242
- }), Nr = e.object({
2229
+ }), jr = e.object({
2243
2230
  provider: e.literal("google_pay"),
2244
2231
  processor_name: e.literal("authorize_net"),
2245
2232
  metadata: e.object({
@@ -2247,15 +2234,15 @@ const Tr = e.object({
2247
2234
  processor_account_name: e.string(),
2248
2235
  google_pay_merchant_id: e.string().nullish()
2249
2236
  })
2250
- }), { log__: xe, err__: yt } = A("authnet-applepay"), Ba = he(
2237
+ }), { log__: xe, err__: yt } = I("authnet-applepay"), Ka = he(
2251
2238
  async ({ context: t, formCallbacks: n }) => {
2252
2239
  const r = {
2253
- processor: Z.Enum.authorize_net,
2240
+ processor: B.Enum.authorize_net,
2254
2241
  isAvailable: !1,
2255
2242
  isLoading: !1,
2256
2243
  startFlow: async () => {
2257
2244
  }
2258
- }, o = J(t.checkoutPaymentMethods, Tr);
2245
+ }, o = W(t.checkoutPaymentMethods, Tr);
2259
2246
  if (!o)
2260
2247
  return r;
2261
2248
  xe("Loading Apple Pay SDK...");
@@ -2270,12 +2257,12 @@ const Tr = e.object({
2270
2257
  return xe("No active cards available for Apple Pay"), r;
2271
2258
  if (!o.metadata.processor_account_id)
2272
2259
  throw new Error("No gateway merchant ID found in processor account");
2273
- const a = t.anyCdeConnection, i = await N(a), s = i.mode === "setup", c = await Ae(a, i.token, s, void 0), l = async (u) => {
2260
+ const a = t.anyCdeConnection, i = await j(a), s = i.mode === "setup", c = await Ae(a, i.token, s, void 0), l = async (u) => {
2274
2261
  try {
2275
2262
  await R.authorizeNetApplePay.run({
2276
2263
  context: t,
2277
2264
  checkoutPaymentMethod: o,
2278
- nonCdeFormInputs: te(t.formDiv),
2265
+ nonCdeFormInputs: ee(t.formDiv),
2279
2266
  formCallbacks: n,
2280
2267
  customParams: {
2281
2268
  ...u,
@@ -2288,13 +2275,13 @@ const Tr = e.object({
2288
2275
  }
2289
2276
  };
2290
2277
  return {
2291
- processor: Z.Enum.authorize_net,
2278
+ processor: B.Enum.authorize_net,
2292
2279
  isAvailable: !0,
2293
2280
  isLoading: !1,
2294
2281
  startFlow: l
2295
2282
  };
2296
2283
  }
2297
- ), Za = ie(
2284
+ ), Ya = ie(
2298
2285
  async ({
2299
2286
  context: t,
2300
2287
  checkoutPaymentMethod: n,
@@ -2303,11 +2290,11 @@ const Tr = e.object({
2303
2290
  formCallbacks: a
2304
2291
  }) => {
2305
2292
  var i;
2306
- const { initialPreview: s, overridePaymentRequest: c } = o, l = J(t.checkoutPaymentMethods, Tr), { currencyCode: u, total: d } = xr({
2293
+ const { initialPreview: s, overridePaymentRequest: c } = o, l = W(t.checkoutPaymentMethods, Tr), { currencyCode: u, total: d } = xr({
2307
2294
  overridePaymentRequest: c,
2308
2295
  initialPreview: s,
2309
2296
  defaultLabel: (i = l == null ? void 0 : l.metadata) == null ? void 0 : i.processor_account_name
2310
- }), _ = t.anyCdeConnection, f = await N(_), m = f.mode === "setup", y = {
2297
+ }), _ = t.anyCdeConnection, f = await j(_), m = f.mode === "setup", y = {
2311
2298
  countryCode: "US",
2312
2299
  currencyCode: u,
2313
2300
  total: d,
@@ -2336,9 +2323,9 @@ const Tr = e.object({
2336
2323
  xe("Payment cancelled by user"), v(new Error("Payment cancelled by user"));
2337
2324
  }, h.onvalidatemerchant = async (w) => {
2338
2325
  try {
2339
- await Ya(w, C);
2340
- } catch (I) {
2341
- v(I);
2326
+ await Ga(w, C);
2327
+ } catch (P) {
2328
+ v(P);
2342
2329
  }
2343
2330
  }, h.onpaymentmethodselected = () => {
2344
2331
  const w = {
@@ -2347,27 +2334,27 @@ const Tr = e.object({
2347
2334
  h.completePaymentMethodSelection(w);
2348
2335
  }, h.onpaymentauthorized = async (w) => {
2349
2336
  try {
2350
- const I = await Ha(w, C);
2351
- E(I);
2352
- } catch (I) {
2353
- v(I);
2337
+ const P = await Va(w, C);
2338
+ E(P);
2339
+ } catch (P) {
2340
+ v(P);
2354
2341
  }
2355
2342
  }, h.begin();
2356
2343
  }).catch((E) => {
2357
2344
  throw yt("Apple Pay payment error", E), E;
2358
2345
  });
2359
2346
  }
2360
- ), { log__: _e, err__: Te } = A("authnet-googlepay"), Wa = he(
2347
+ ), { log__: _e, err__: Te } = I("authnet-googlepay"), Ha = he(
2361
2348
  async ({ context: t, formCallbacks: n }) => {
2362
2349
  var r, o;
2363
2350
  _e("Initializing Authnet GooglePay flow");
2364
2351
  const a = {
2365
- processor: Z.Enum.authorize_net,
2352
+ processor: B.Enum.authorize_net,
2366
2353
  isAvailable: !1,
2367
2354
  isLoading: !1,
2368
2355
  startFlow: async () => {
2369
2356
  }
2370
- }, i = J(t.checkoutPaymentMethods, Nr);
2357
+ }, i = W(t.checkoutPaymentMethods, jr);
2371
2358
  if (!i)
2372
2359
  return a;
2373
2360
  _e("Google Pay CPM", i);
@@ -2396,12 +2383,12 @@ const Tr = e.object({
2396
2383
  } catch (f) {
2397
2384
  return Te("Error checking Google Pay availability", f), a;
2398
2385
  }
2399
- const c = t.anyCdeConnection, l = await N(c), u = l.mode === "setup", d = await Ae(c, l.token, u, void 0), _ = async (f) => {
2386
+ const c = t.anyCdeConnection, l = await j(c), u = l.mode === "setup", d = await Ae(c, l.token, u, void 0), _ = async (f) => {
2400
2387
  try {
2401
2388
  R.authorizeNetGooglePay.run({
2402
2389
  context: t,
2403
2390
  checkoutPaymentMethod: i,
2404
- nonCdeFormInputs: te(t.formDiv),
2391
+ nonCdeFormInputs: ee(t.formDiv),
2405
2392
  formCallbacks: n,
2406
2393
  initResult: void 0,
2407
2394
  customParams: {
@@ -2414,13 +2401,13 @@ const Tr = e.object({
2414
2401
  }
2415
2402
  };
2416
2403
  return {
2417
- processor: Z.Enum.authorize_net,
2404
+ processor: B.Enum.authorize_net,
2418
2405
  isAvailable: !0,
2419
2406
  isLoading: !1,
2420
2407
  startFlow: _
2421
2408
  };
2422
2409
  }
2423
- ), Ja = ie(
2410
+ ), Ba = ie(
2424
2411
  async ({
2425
2412
  context: t,
2426
2413
  nonCdeFormInputs: n,
@@ -2429,7 +2416,7 @@ const Tr = e.object({
2429
2416
  customParams: a
2430
2417
  }) => {
2431
2418
  var i, s, c, l;
2432
- const { initialPreview: u, overridePaymentRequest: d } = a, _ = J(t.checkoutPaymentMethods, Nr).metadata, f = Xe({
2419
+ const { initialPreview: u, overridePaymentRequest: d } = a, _ = W(t.checkoutPaymentMethods, jr).metadata, f = Xe({
2433
2420
  gateway: "authorizenet",
2434
2421
  gatewayMerchantId: _.processor_account_id,
2435
2422
  merchantName: _.processor_account_name,
@@ -2440,10 +2427,10 @@ const Tr = e.object({
2440
2427
  try {
2441
2428
  const y = await m.loadPaymentData(f);
2442
2429
  _e("Google Pay Payment data", y);
2443
- const h = t.anyCdeConnection, C = await N(h), E = Ar(n, y), v = ue(E, o.get.onValidationError), w = (s = (i = y.paymentMethodData) == null ? void 0 : i.tokenizationData) == null ? void 0 : s.token;
2430
+ const h = t.anyCdeConnection, C = await j(h), E = Ar(n, y), v = ue(E, o.get.onValidationError), w = (s = (i = y.paymentMethodData) == null ? void 0 : i.tokenizationData) == null ? void 0 : s.token;
2444
2431
  if (!w)
2445
2432
  throw new Error("No payment token received from Google Pay");
2446
- const I = await Se(h, {
2433
+ const P = await Se(h, {
2447
2434
  payment_provider: r.provider,
2448
2435
  checkout_payment_method: r,
2449
2436
  new_customer_email: v[p.EMAIL],
@@ -2454,8 +2441,8 @@ const Tr = e.object({
2454
2441
  country: v[p.COUNTRY]
2455
2442
  }
2456
2443
  });
2457
- _e("Start payment flow response", I);
2458
- const q = await B(h, {
2444
+ _e("Start payment flow response", P);
2445
+ const $ = await H(h, {
2459
2446
  secure_token: C.token,
2460
2447
  processor_specific_metadata: {
2461
2448
  payment_provider: r.provider,
@@ -2465,21 +2452,21 @@ const Tr = e.object({
2465
2452
  }
2466
2453
  }
2467
2454
  });
2468
- if (!((l = (c = q.payment_methods) == null ? void 0 : c[0]) != null && l.id))
2455
+ if (!((l = (c = $.payment_methods) == null ? void 0 : c[0]) != null && l.id))
2469
2456
  throw new Error("No PM ID found");
2470
2457
  return We({
2471
2458
  logPrefix: "authnet-googlepay",
2472
2459
  anyCdeConnection: h,
2473
2460
  checkoutPaymentMethod: r,
2474
2461
  requiredFormFields: v,
2475
- confirmResult: q,
2462
+ confirmResult: $,
2476
2463
  usePayFirstFlow: !1
2477
2464
  });
2478
2465
  } catch (y) {
2479
2466
  throw Te("Google Pay payment error", y), new Error((y == null ? void 0 : y.message) ?? "Unknown error");
2480
2467
  }
2481
2468
  }
2482
- ), Ne = (t, n, r) => {
2469
+ ), je = (t, n, r) => {
2483
2470
  const o = t.filter((a) => {
2484
2471
  const i = r === void 0 ? !0 : a.processor_name === r, s = a.provider === n;
2485
2472
  return i && s;
@@ -2516,21 +2503,21 @@ const Tr = e.object({
2516
2503
  run: Ta
2517
2504
  },
2518
2505
  airwallexApplePay: {
2519
- init: Fa,
2520
- run: za
2506
+ init: Da,
2507
+ run: La
2521
2508
  },
2522
2509
  // Loop
2523
2510
  loopCrypto: {
2524
- init: Va,
2525
- run: Ka
2511
+ init: $a,
2512
+ run: qa
2526
2513
  },
2527
2514
  authorizeNetApplePay: {
2528
- init: Ba,
2529
- run: Za
2515
+ init: Ka,
2516
+ run: Ya
2530
2517
  },
2531
2518
  authorizeNetGooglePay: {
2532
- init: Wa,
2533
- run: Ja
2519
+ init: Ha,
2520
+ run: Ba
2534
2521
  }
2535
2522
  // 👉 Add more flows here
2536
2523
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
@@ -2551,7 +2538,7 @@ function de(t, n) {
2551
2538
  }
2552
2539
  t.prototype = n === null ? Object.create(n) : (r.prototype = n.prototype, new r());
2553
2540
  }
2554
- function Xa(t, n, r, o) {
2541
+ function Za(t, n, r, o) {
2555
2542
  function a(i) {
2556
2543
  return i instanceof r ? i : new r(function(s) {
2557
2544
  s(i);
@@ -2578,7 +2565,7 @@ function Xa(t, n, r, o) {
2578
2565
  u((o = o.apply(t, [])).next());
2579
2566
  });
2580
2567
  }
2581
- function jr(t, n) {
2568
+ function Nr(t, n) {
2582
2569
  var r = { label: 0, sent: function() {
2583
2570
  if (i[0] & 1) throw i[1];
2584
2571
  return i[1];
@@ -2673,7 +2660,7 @@ function Ve(t, n, r) {
2673
2660
  function Ce(t) {
2674
2661
  return this instanceof Ce ? (this.v = t, this) : new Ce(t);
2675
2662
  }
2676
- function Qa(t, n, r) {
2663
+ function Wa(t, n, r) {
2677
2664
  if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
2678
2665
  var o = r.apply(t, n || []), a, i = [];
2679
2666
  return a = Object.create((typeof AsyncIterator == "function" ? AsyncIterator : Object).prototype), c("next"), c("throw"), c("return", s), a[Symbol.asyncIterator] = function() {
@@ -2711,7 +2698,7 @@ function Qa(t, n, r) {
2711
2698
  m(y), i.shift(), i.length && l(i[0][0], i[0][1]);
2712
2699
  }
2713
2700
  }
2714
- function ei(t) {
2701
+ function Ja(t) {
2715
2702
  if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
2716
2703
  var n = t[Symbol.asyncIterator], r;
2717
2704
  return n ? n.call(t) : (t = typeof Pe == "function" ? Pe(t) : t[Symbol.iterator](), r = {}, o("next"), o("throw"), o("return"), r[Symbol.asyncIterator] = function() {
@@ -2855,7 +2842,7 @@ var Lr = {
2855
2842
  Promise: void 0,
2856
2843
  useDeprecatedSynchronousErrorHandling: !1,
2857
2844
  useDeprecatedNextContext: !1
2858
- }, ti = {
2845
+ }, Xa = {
2859
2846
  setTimeout: function(t, n) {
2860
2847
  for (var r = [], o = 2; o < arguments.length; o++)
2861
2848
  r[o - 2] = arguments[o];
@@ -2867,7 +2854,7 @@ var Lr = {
2867
2854
  delegate: void 0
2868
2855
  };
2869
2856
  function Ur(t) {
2870
- ti.setTimeout(function() {
2857
+ Xa.setTimeout(function() {
2871
2858
  throw t;
2872
2859
  });
2873
2860
  }
@@ -2880,7 +2867,7 @@ var kt = function(t) {
2880
2867
  de(n, t);
2881
2868
  function n(r) {
2882
2869
  var o = t.call(this) || this;
2883
- return o.isStopped = !1, r ? (o.destination = r, Dr(r) && r.add(o)) : o.destination = ai, o;
2870
+ return o.isStopped = !1, r ? (o.destination = r, Dr(r) && r.add(o)) : o.destination = ri, o;
2884
2871
  }
2885
2872
  return n.create = function(r, o, a) {
2886
2873
  return new ht(r, o, a);
@@ -2907,11 +2894,11 @@ var kt = function(t) {
2907
2894
  this.unsubscribe();
2908
2895
  }
2909
2896
  }, n;
2910
- }(Le), ri = Function.prototype.bind;
2897
+ }(Le), Qa = Function.prototype.bind;
2911
2898
  function ut(t, n) {
2912
- return ri.call(t, n);
2899
+ return Qa.call(t, n);
2913
2900
  }
2914
- var ni = function() {
2901
+ var ei = function() {
2915
2902
  function t(n) {
2916
2903
  this.partialObserver = n;
2917
2904
  }
@@ -2962,29 +2949,29 @@ var ni = function() {
2962
2949
  complete: r.complete && ut(r.complete, c)
2963
2950
  }) : s = r;
2964
2951
  }
2965
- return i.destination = new ni(s), i;
2952
+ return i.destination = new ei(s), i;
2966
2953
  }
2967
2954
  return n;
2968
2955
  }(kt);
2969
2956
  function Ue(t) {
2970
2957
  Ur(t);
2971
2958
  }
2972
- function oi(t) {
2959
+ function ti(t) {
2973
2960
  throw t;
2974
2961
  }
2975
- var ai = {
2962
+ var ri = {
2976
2963
  closed: !0,
2977
2964
  next: Lt,
2978
- error: oi,
2965
+ error: ti,
2979
2966
  complete: Lt
2980
2967
  }, St = function() {
2981
2968
  return typeof Symbol == "function" && Symbol.observable || "@@observable";
2982
2969
  }();
2983
- function ii(t) {
2970
+ function ni(t) {
2984
2971
  return t;
2985
2972
  }
2986
- function si(t) {
2987
- return t.length === 0 ? ii : t.length === 1 ? t[0] : function(n) {
2973
+ function oi(t) {
2974
+ return t.length === 0 ? ni : t.length === 1 ? t[0] : function(n) {
2988
2975
  return t.reduce(function(r, o) {
2989
2976
  return o(r);
2990
2977
  }, n);
@@ -2998,7 +2985,7 @@ var ae = function() {
2998
2985
  var r = new t();
2999
2986
  return r.source = this, r.operator = n, r;
3000
2987
  }, t.prototype.subscribe = function(n, r, o) {
3001
- var a = this, i = li(n) ? n : new ht(n, r, o);
2988
+ var a = this, i = ii(n) ? n : new ht(n, r, o);
3002
2989
  return ze(function() {
3003
2990
  var s = a, c = s.operator, l = s.source;
3004
2991
  i.add(c ? c.call(i, l) : l ? a._subscribe(i) : a._trySubscribe(i));
@@ -3033,7 +3020,7 @@ var ae = function() {
3033
3020
  }, t.prototype.pipe = function() {
3034
3021
  for (var n = [], r = 0; r < arguments.length; r++)
3035
3022
  n[r] = arguments[r];
3036
- return si(n)(this);
3023
+ return oi(n)(this);
3037
3024
  }, t.prototype.toPromise = function(n) {
3038
3025
  var r = this;
3039
3026
  return n = Ut(n), new n(function(o, a) {
@@ -3054,18 +3041,18 @@ function Ut(t) {
3054
3041
  var n;
3055
3042
  return (n = t ?? Lr.Promise) !== null && n !== void 0 ? n : Promise;
3056
3043
  }
3057
- function ci(t) {
3044
+ function ai(t) {
3058
3045
  return t && T(t.next) && T(t.error) && T(t.complete);
3059
3046
  }
3060
- function li(t) {
3061
- return t && t instanceof kt || ci(t) && Dr(t);
3047
+ function ii(t) {
3048
+ return t && t instanceof kt || ai(t) && Dr(t);
3062
3049
  }
3063
- function ui(t) {
3050
+ function si(t) {
3064
3051
  return T(t == null ? void 0 : t.lift);
3065
3052
  }
3066
- function di(t) {
3053
+ function ci(t) {
3067
3054
  return function(n) {
3068
- if (ui(n))
3055
+ if (si(n))
3069
3056
  return n.lift(function(r) {
3070
3057
  try {
3071
3058
  return t(r, this);
@@ -3076,10 +3063,10 @@ function di(t) {
3076
3063
  throw new TypeError("Unable to lift unknown Observable type");
3077
3064
  };
3078
3065
  }
3079
- function pi(t, n, r, o, a) {
3080
- return new mi(t, n, r, o, a);
3066
+ function li(t, n, r, o, a) {
3067
+ return new ui(t, n, r, o, a);
3081
3068
  }
3082
- var mi = function(t) {
3069
+ var ui = function(t) {
3083
3070
  de(n, t);
3084
3071
  function n(r, o, a, i, s, c) {
3085
3072
  var l = t.call(this, r) || this;
@@ -3114,7 +3101,7 @@ var mi = function(t) {
3114
3101
  t.prototype.unsubscribe.call(this), !o && ((r = this.onFinalize) === null || r === void 0 || r.call(this));
3115
3102
  }
3116
3103
  }, n;
3117
- }(kt), yi = et(function(t) {
3104
+ }(kt), di = et(function(t) {
3118
3105
  return function() {
3119
3106
  t(this), this.name = "ObjectUnsubscribedError", this.message = "object unsubscribed";
3120
3107
  };
@@ -3129,7 +3116,7 @@ var mi = function(t) {
3129
3116
  return o.operator = r, o;
3130
3117
  }, n.prototype._throwIfClosed = function() {
3131
3118
  if (this.closed)
3132
- throw new yi();
3119
+ throw new di();
3133
3120
  }, n.prototype.next = function(r) {
3134
3121
  var o = this;
3135
3122
  ze(function() {
@@ -3216,12 +3203,12 @@ var mi = function(t) {
3216
3203
  var o, a;
3217
3204
  return (a = (o = this.source) === null || o === void 0 ? void 0 : o.subscribe(r)) !== null && a !== void 0 ? a : Mr;
3218
3205
  }, n;
3219
- }(Fr), _i = {
3206
+ }(Fr), pi = {
3220
3207
  now: function() {
3221
3208
  return Date.now();
3222
3209
  },
3223
3210
  delegate: void 0
3224
- }, hi = function(t) {
3211
+ }, mi = function(t) {
3225
3212
  de(n, t);
3226
3213
  function n(r, o) {
3227
3214
  return t.call(this) || this;
@@ -3239,7 +3226,7 @@ var mi = function(t) {
3239
3226
  return clearInterval(t);
3240
3227
  },
3241
3228
  delegate: void 0
3242
- }, fi = function(t) {
3229
+ }, yi = function(t) {
3243
3230
  de(n, t);
3244
3231
  function n(r, o) {
3245
3232
  var a = t.call(this, r, o) || this;
@@ -3281,14 +3268,14 @@ var mi = function(t) {
3281
3268
  this.work = this.state = this.scheduler = null, this.pending = !1, Ke(i, this), o != null && (this.id = this.recycleAsyncId(a, o, null)), this.delay = null, t.prototype.unsubscribe.call(this);
3282
3269
  }
3283
3270
  }, n;
3284
- }(hi), $t = function() {
3271
+ }(mi), $t = function() {
3285
3272
  function t(n, r) {
3286
3273
  r === void 0 && (r = t.now), this.schedulerActionCtor = n, this.now = r;
3287
3274
  }
3288
3275
  return t.prototype.schedule = function(n, r, o) {
3289
3276
  return r === void 0 && (r = 0), new this.schedulerActionCtor(this, n).schedule(o, r);
3290
- }, t.now = _i.now, t;
3291
- }(), gi = function(t) {
3277
+ }, t.now = pi.now, t;
3278
+ }(), _i = function(t) {
3292
3279
  de(n, t);
3293
3280
  function n(r, o) {
3294
3281
  o === void 0 && (o = $t.now);
@@ -3313,32 +3300,32 @@ var mi = function(t) {
3313
3300
  throw a;
3314
3301
  }
3315
3302
  }, n;
3316
- }($t), bi = new gi(fi), wi = function(t) {
3303
+ }($t), hi = new _i(yi), fi = function(t) {
3317
3304
  return t && typeof t.length == "number" && typeof t != "function";
3318
3305
  };
3319
- function vi(t) {
3306
+ function gi(t) {
3320
3307
  return T(t == null ? void 0 : t.then);
3321
3308
  }
3322
- function Ci(t) {
3309
+ function bi(t) {
3323
3310
  return T(t[St]);
3324
3311
  }
3325
- function Ei(t) {
3312
+ function wi(t) {
3326
3313
  return Symbol.asyncIterator && T(t == null ? void 0 : t[Symbol.asyncIterator]);
3327
3314
  }
3328
- function Pi(t) {
3315
+ function vi(t) {
3329
3316
  return new TypeError("You provided " + (t !== null && typeof t == "object" ? "an invalid object" : "'" + t + "'") + " where a stream was expected. You can provide an Observable, Promise, ReadableStream, Array, AsyncIterable, or Iterable.");
3330
3317
  }
3331
- function ki() {
3318
+ function Ci() {
3332
3319
  return typeof Symbol != "function" || !Symbol.iterator ? "@@iterator" : Symbol.iterator;
3333
3320
  }
3334
- var Si = ki();
3335
- function Ai(t) {
3336
- return T(t == null ? void 0 : t[Si]);
3321
+ var Ei = Ci();
3322
+ function Pi(t) {
3323
+ return T(t == null ? void 0 : t[Ei]);
3337
3324
  }
3338
- function Ii(t) {
3339
- return Qa(this, arguments, function() {
3325
+ function ki(t) {
3326
+ return Wa(this, arguments, function() {
3340
3327
  var n, r, o, a;
3341
- return jr(this, function(i) {
3328
+ return Nr(this, function(i) {
3342
3329
  switch (i.label) {
3343
3330
  case 0:
3344
3331
  n = t.getReader(), i.label = 1;
@@ -3366,29 +3353,29 @@ function Ii(t) {
3366
3353
  });
3367
3354
  });
3368
3355
  }
3369
- function Ri(t) {
3356
+ function Si(t) {
3370
3357
  return T(t == null ? void 0 : t.getReader);
3371
3358
  }
3372
- function Oi(t) {
3359
+ function Ai(t) {
3373
3360
  if (t instanceof ae)
3374
3361
  return t;
3375
3362
  if (t != null) {
3376
- if (Ci(t))
3377
- return xi(t);
3363
+ if (bi(t))
3364
+ return Ii(t);
3365
+ if (fi(t))
3366
+ return Ri(t);
3367
+ if (gi(t))
3368
+ return Oi(t);
3378
3369
  if (wi(t))
3379
- return Ti(t);
3380
- if (vi(t))
3381
- return Ni(t);
3382
- if (Ei(t))
3383
3370
  return zr(t);
3384
- if (Ai(t))
3385
- return ji(t);
3386
- if (Ri(t))
3387
- return Mi(t);
3371
+ if (Pi(t))
3372
+ return xi(t);
3373
+ if (Si(t))
3374
+ return Ti(t);
3388
3375
  }
3389
- throw Pi(t);
3376
+ throw vi(t);
3390
3377
  }
3391
- function xi(t) {
3378
+ function Ii(t) {
3392
3379
  return new ae(function(n) {
3393
3380
  var r = t[St]();
3394
3381
  if (T(r.subscribe))
@@ -3396,14 +3383,14 @@ function xi(t) {
3396
3383
  throw new TypeError("Provided object does not correctly implement Symbol.observable");
3397
3384
  });
3398
3385
  }
3399
- function Ti(t) {
3386
+ function Ri(t) {
3400
3387
  return new ae(function(n) {
3401
3388
  for (var r = 0; r < t.length && !n.closed; r++)
3402
3389
  n.next(t[r]);
3403
3390
  n.complete();
3404
3391
  });
3405
3392
  }
3406
- function Ni(t) {
3393
+ function Oi(t) {
3407
3394
  return new ae(function(n) {
3408
3395
  t.then(function(r) {
3409
3396
  n.closed || (n.next(r), n.complete());
@@ -3412,7 +3399,7 @@ function Ni(t) {
3412
3399
  }).then(null, Ur);
3413
3400
  });
3414
3401
  }
3415
- function ji(t) {
3402
+ function xi(t) {
3416
3403
  return new ae(function(n) {
3417
3404
  var r, o;
3418
3405
  try {
@@ -3435,22 +3422,22 @@ function ji(t) {
3435
3422
  }
3436
3423
  function zr(t) {
3437
3424
  return new ae(function(n) {
3438
- Di(t, n).catch(function(r) {
3425
+ ji(t, n).catch(function(r) {
3439
3426
  return n.error(r);
3440
3427
  });
3441
3428
  });
3442
3429
  }
3443
- function Mi(t) {
3444
- return zr(Ii(t));
3430
+ function Ti(t) {
3431
+ return zr(ki(t));
3445
3432
  }
3446
- function Di(t, n) {
3433
+ function ji(t, n) {
3447
3434
  var r, o, a, i;
3448
- return Xa(this, void 0, void 0, function() {
3435
+ return Za(this, void 0, void 0, function() {
3449
3436
  var s, c;
3450
- return jr(this, function(l) {
3437
+ return Nr(this, function(l) {
3451
3438
  switch (l.label) {
3452
3439
  case 0:
3453
- l.trys.push([0, 5, 6, 11]), r = ei(t), l.label = 1;
3440
+ l.trys.push([0, 5, 6, 11]), r = Ja(t), l.label = 1;
3454
3441
  case 1:
3455
3442
  return [4, r.next()];
3456
3443
  case 2:
@@ -3481,7 +3468,7 @@ function Di(t, n) {
3481
3468
  });
3482
3469
  });
3483
3470
  }
3484
- function Li(t, n, r, o, a) {
3471
+ function Ni(t, n, r, o, a) {
3485
3472
  o === void 0 && (o = 0), a === void 0 && (a = !1);
3486
3473
  var i = n.schedule(function() {
3487
3474
  r(), a ? t.add(this.schedule(null, o)) : this.unsubscribe();
@@ -3489,7 +3476,7 @@ function Li(t, n, r, o, a) {
3489
3476
  if (t.add(i), !a)
3490
3477
  return i;
3491
3478
  }
3492
- function Ui(t, n) {
3479
+ function Mi(t, n) {
3493
3480
  var r = T(t) ? t : function() {
3494
3481
  return t;
3495
3482
  }, o = function(a) {
@@ -3497,12 +3484,12 @@ function Ui(t, n) {
3497
3484
  };
3498
3485
  return new ae(o);
3499
3486
  }
3500
- var Fi = et(function(t) {
3487
+ var Di = et(function(t) {
3501
3488
  return function() {
3502
3489
  t(this), this.name = "EmptyError", this.message = "no elements in sequence";
3503
3490
  };
3504
3491
  });
3505
- function zi(t, n) {
3492
+ function Li(t, n) {
3506
3493
  return new Promise(function(r, o) {
3507
3494
  var a = !1, i;
3508
3495
  t.subscribe({
@@ -3511,28 +3498,28 @@ function zi(t, n) {
3511
3498
  },
3512
3499
  error: o,
3513
3500
  complete: function() {
3514
- a ? r(i) : o(new Fi());
3501
+ a ? r(i) : o(new Di());
3515
3502
  }
3516
3503
  });
3517
3504
  });
3518
3505
  }
3519
- function $i(t) {
3506
+ function Ui(t) {
3520
3507
  return t instanceof Date && !isNaN(t);
3521
3508
  }
3522
- var qi = et(function(t) {
3509
+ var Fi = et(function(t) {
3523
3510
  return function(n) {
3524
3511
  n === void 0 && (n = null), t(this), this.message = "Timeout has occurred", this.name = "TimeoutError", this.info = n;
3525
3512
  };
3526
3513
  });
3527
- function Gi(t, n) {
3528
- var r = $i(t) ? { first: t } : typeof t == "number" ? { each: t } : t, o = r.first, a = r.each, i = r.with, s = i === void 0 ? Vi : i, c = r.scheduler, l = c === void 0 ? bi : c, u = r.meta, d = u === void 0 ? null : u;
3514
+ function zi(t, n) {
3515
+ var r = Ui(t) ? { first: t } : typeof t == "number" ? { each: t } : t, o = r.first, a = r.each, i = r.with, s = i === void 0 ? $i : i, c = r.scheduler, l = c === void 0 ? hi : c, u = r.meta, d = u === void 0 ? null : u;
3529
3516
  if (o == null && a == null)
3530
3517
  throw new TypeError("No timeout provided.");
3531
- return di(function(_, f) {
3518
+ return ci(function(_, f) {
3532
3519
  var m, y, h = null, C = 0, E = function(v) {
3533
- y = Li(f, l, function() {
3520
+ y = Ni(f, l, function() {
3534
3521
  try {
3535
- m.unsubscribe(), Oi(s({
3522
+ m.unsubscribe(), Ai(s({
3536
3523
  meta: d,
3537
3524
  lastValue: h,
3538
3525
  seen: C
@@ -3542,15 +3529,15 @@ function Gi(t, n) {
3542
3529
  }
3543
3530
  }, v);
3544
3531
  };
3545
- m = _.subscribe(pi(f, function(v) {
3532
+ m = _.subscribe(li(f, function(v) {
3546
3533
  y == null || y.unsubscribe(), C++, f.next(h = v), a > 0 && E(a);
3547
3534
  }, void 0, void 0, function() {
3548
3535
  y != null && y.closed || y == null || y.unsubscribe(), h = null;
3549
3536
  })), !C && E(o != null ? typeof o == "number" ? o : +o - l.now() : a);
3550
3537
  });
3551
3538
  }
3552
- function Vi(t) {
3553
- throw new qi(t);
3539
+ function $i(t) {
3540
+ throw new Fi(t);
3554
3541
  }
3555
3542
  class $e {
3556
3543
  constructor() {
@@ -3586,16 +3573,16 @@ class $e {
3586
3573
  this._current.status !== "initial" && Ze(this._current);
3587
3574
  const r = {
3588
3575
  first: n.timeoutSec * 1e3,
3589
- with: () => Ui(() => new Error(n.timeoutErrMsg))
3576
+ with: () => Mi(() => new Error(n.timeoutErrMsg))
3590
3577
  };
3591
- return zi(this._subject.pipe(Gi(r)));
3578
+ return Li(this._subject.pipe(zi(r)));
3592
3579
  }, this._current = { status: "initial", isSuccess: !1 }, this._subject = new Fr();
3593
3580
  }
3594
3581
  get current() {
3595
3582
  return this._current;
3596
3583
  }
3597
3584
  }
3598
- const { log__: Ki, err__: Yi } = A("init-flows"), ye = (t, n) => {
3585
+ const { log__: qi, err__: Gi } = I("init-flows"), ye = (t, n) => {
3599
3586
  const r = new $e();
3600
3587
  return {
3601
3588
  publisher: r,
@@ -3604,15 +3591,15 @@ const { log__: Ki, err__: Yi } = A("init-flows"), ye = (t, n) => {
3604
3591
  if (r.current.isSuccess)
3605
3592
  throw new Error("This flow has already been initialized.");
3606
3593
  const a = await n(o);
3607
- Ki(`✔ ${t} flow initialized successfully. Result:`, a), r.set(a);
3594
+ qi(`✔ ${t} flow initialized successfully. Result:`, a), r.set(a);
3608
3595
  } catch (a) {
3609
- Yi(`𝙭 ${t} flow initialization failed. Error:`, re(a), "Details:", a), r.throw(a, re(a));
3596
+ Gi(`𝙭 ${t} flow initialization failed. Error:`, te(a), "Details:", a), r.throw(a, te(a));
3610
3597
  }
3611
3598
  }
3612
3599
  };
3613
- }, Hi = async (t, n, r) => {
3600
+ }, Vi = async (t, n, r) => {
3614
3601
  await Promise.all(Object.values(t).map((o) => o.initialize({ context: n, formCallbacks: r })));
3615
- }, Bi = () => ({
3602
+ }, Ki = () => ({
3616
3603
  // 💡 Add new init flows here
3617
3604
  // Stripe PR
3618
3605
  stripePR: ye("Stripe PR", R.stripePR.init),
@@ -3629,23 +3616,23 @@ const { log__: Ki, err__: Yi } = A("init-flows"), ye = (t, n) => {
3629
3616
  // Authnet ApplePay
3630
3617
  authorizeNetApplePay: ye("Authnet ApplePay", R.authorizeNetApplePay.init)
3631
3618
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
3632
- }), { err__: Zi } = A("form-callbacks"), V = e.function().optional(), qt = e.object({
3633
- onFocus: V,
3634
- onBlur: V,
3635
- onChange: V,
3636
- onLoad: V,
3637
- onLoadError: V,
3638
- onValidationError: V,
3639
- onCheckoutStarted: V,
3640
- onCheckoutSuccess: V,
3641
- onSetupPaymentMethodSuccess: V,
3642
- onCheckoutError: V,
3643
- onPaymentRequestLoad: V
3619
+ }), { err__: Yi } = I("form-callbacks"), G = e.function().optional(), qt = e.object({
3620
+ onFocus: G,
3621
+ onBlur: G,
3622
+ onChange: G,
3623
+ onLoad: G,
3624
+ onLoadError: G,
3625
+ onValidationError: G,
3626
+ onCheckoutStarted: G,
3627
+ onCheckoutSuccess: G,
3628
+ onSetupPaymentMethodSuccess: G,
3629
+ onCheckoutError: G,
3630
+ onPaymentRequestLoad: G
3644
3631
  }), be = class qe {
3645
3632
  constructor() {
3646
3633
  this.setCallbacks = (n) => {
3647
3634
  this._callbacks = qe.createEmptyCallbacks(), Object.entries(n).forEach(([r, o]) => {
3648
- const a = ln(r, o ?? qe.NOOP, Zi);
3635
+ const a = ln(r, o ?? qe.NOOP, Yi);
3649
3636
  this._callbacks[r] = a;
3650
3637
  });
3651
3638
  }, this._callbacks = qe.createEmptyCallbacks();
@@ -3667,12 +3654,14 @@ be.NOOP = () => {
3667
3654
  const n = new be();
3668
3655
  return n.setCallbacks(qt.parse(t)), n;
3669
3656
  };
3670
- let Wi = be;
3671
- class Ji {
3657
+ let Hi = be;
3658
+ class Bi {
3672
3659
  constructor(n, r, o, a) {
3673
3660
  this.handleMessage = (i) => {
3674
- if (!i.source)
3675
- throw new Error("No source found");
3661
+ if (!i.source) {
3662
+ console.warn("[OJS] No source found");
3663
+ return;
3664
+ }
3676
3665
  if (Gt(i.origin) !== Gt(this.baseUrl) || typeof i.data == "object" && i.data.penpal || typeof i.data == "object" && i.data.source && i.data.source === "react-devtools-bridge")
3677
3666
  return;
3678
3667
  let s = null;
@@ -3712,7 +3701,7 @@ class Ji {
3712
3701
  }
3713
3702
  }
3714
3703
  const Gt = (t) => new URL(t).origin;
3715
- async function Xi(t, n) {
3704
+ async function Zi(t, n) {
3716
3705
  const r = await Xt({
3717
3706
  iframe: t,
3718
3707
  debug: !1,
@@ -3722,7 +3711,7 @@ async function Xi(t, n) {
3722
3711
  throw new Error("Got invalid CDE connection object");
3723
3712
  return r;
3724
3713
  }
3725
- class Qi {
3714
+ class Wi {
3726
3715
  constructor() {
3727
3716
  this.connections = /* @__PURE__ */ new Map();
3728
3717
  }
@@ -3739,7 +3728,7 @@ class Qi {
3739
3728
  return this.connections;
3740
3729
  }
3741
3730
  }
3742
- const es = (t, n, r) => {
3731
+ const Ji = (t, n, r) => {
3743
3732
  const { stripePR: o } = t;
3744
3733
  o.publisher.subscribe((a) => {
3745
3734
  if (a.isSuccess) {
@@ -3764,14 +3753,14 @@ const es = (t, n, r) => {
3764
3753
  });
3765
3754
  }, Vt = (t, n, r, o, a) => R.stripePR.run({
3766
3755
  context: r,
3767
- checkoutPaymentMethod: Ne(r.checkoutPaymentMethods, t),
3768
- nonCdeFormInputs: te(r.formDiv),
3756
+ checkoutPaymentMethod: je(r.checkoutPaymentMethods, t),
3757
+ nonCdeFormInputs: ee(r.formDiv),
3769
3758
  formCallbacks: o,
3770
3759
  customParams: { provider: t, overridePaymentRequest: a == null ? void 0 : a.overridePaymentRequest },
3771
3760
  initResult: n
3772
- }), Kt = "The secure form failed to load properly. Please check your internet connection, or try again later.", { log__: ne, err__: oe } = A("op-form"), we = class ft {
3761
+ }), Kt = "The secure form failed to load properly. Please check your internet connection, or try again later.", { log__: ne, err__: oe } = I("op-form"), we = class ft {
3773
3762
  constructor(n) {
3774
- this.cdeLoadEvent = new $e(), this.anyCdeConn = new $e(), this.context = new $e(), this.initFlows = Bi(), this.startFormInit = async () => {
3763
+ this.cdeLoadEvent = new $e(), this.anyCdeConn = new $e(), this.context = new $e(), this.initFlows = Ki(), this.startFormInit = async () => {
3775
3764
  try {
3776
3765
  ne("Initializing OpenPay form:"), ne("├ Waiting for CDE load event...");
3777
3766
  const r = await this.cdeLoadEvent.waitForLoad({
@@ -3790,9 +3779,9 @@ const es = (t, n, r) => {
3790
3779
  o,
3791
3780
  this.getFormDiv()
3792
3781
  );
3793
- this.context.set(a), es(this.initFlows, a, this.formCallbacks), ne("├ Starting OJS init flows..."), await Hi(this.initFlows, a, this.formCallbacks), this.formCallbacks.get.onLoad(r.totalAmountAtoms, r.currency), ne("╰ Done initializing OJS flows.");
3782
+ this.context.set(a), Ji(this.initFlows, a, this.formCallbacks), ne("├ Starting OJS init flows..."), await Vi(this.initFlows, a, this.formCallbacks), this.formCallbacks.get.onLoad(r.totalAmountAtoms, r.currency), ne("╰ Done initializing OJS flows.");
3794
3783
  } catch (r) {
3795
- const o = re(r);
3784
+ const o = te(r);
3796
3785
  oe("╰ Error initializing OP form:", o), this.formCallbacks.get.onLoadError(o);
3797
3786
  }
3798
3787
  }, this.setFormHeight = (r) => {
@@ -3828,7 +3817,7 @@ const es = (t, n, r) => {
3828
3817
  const o = new URLSearchParams();
3829
3818
  return o.append("referer", this.referrer), o.append("formId", this.formId), r.styles && o.append("styles", Hn(r.styles)), o.append("secureToken", this.config.checkoutSecureToken), o;
3830
3819
  }, this.connectToElement = (r) => {
3831
- Xi(r.node).then((o) => {
3820
+ Zi(r.node).then((o) => {
3832
3821
  this.connectionManager.addConnection(r.type, o), this.anyCdeConn.current.isSuccess || this.anyCdeConn.set(o);
3833
3822
  }).catch((o) => oe("[FORM] Error connecting to CDE iframe", o));
3834
3823
  }, this.getFormDiv = () => document.querySelector(this.formTarget) ?? document.body, this.submitCard = () => {
@@ -3839,8 +3828,8 @@ const es = (t, n, r) => {
3839
3828
  }
3840
3829
  R.commonCC.run({
3841
3830
  context: r,
3842
- checkoutPaymentMethod: Ne(r.checkoutPaymentMethods, "credit_card"),
3843
- nonCdeFormInputs: te(r.formDiv),
3831
+ checkoutPaymentMethod: je(r.checkoutPaymentMethods, "credit_card"),
3832
+ nonCdeFormInputs: ee(r.formDiv),
3844
3833
  formCallbacks: this.formCallbacks,
3845
3834
  customParams: {
3846
3835
  currentCdeConnections: this.connectionManager.getAllConnections()
@@ -3854,10 +3843,10 @@ const es = (t, n, r) => {
3854
3843
  return;
3855
3844
  }
3856
3845
  const r = {
3857
- airwallexGooglePay: G.airwallexGooglePay,
3858
- airwallexApplePay: G.airwallexApplePay,
3859
- authorizeNetGooglePay: G.authorizenetGooglePay,
3860
- authorizeNetApplePay: G.authorizenetApplePay
3846
+ airwallexGooglePay: q.airwallexGooglePay,
3847
+ airwallexApplePay: q.airwallexApplePay,
3848
+ authorizeNetGooglePay: q.authorizenetGooglePay,
3849
+ authorizeNetApplePay: q.authorizenetApplePay
3861
3850
  };
3862
3851
  return Object.entries(this.initFlows).map(([o, a]) => ({
3863
3852
  name: r[o] ?? o,
@@ -3870,16 +3859,16 @@ const es = (t, n, r) => {
3870
3859
  return;
3871
3860
  }
3872
3861
  switch (r) {
3873
- case G.pockytPaypal:
3862
+ case q.pockytPaypal:
3874
3863
  return R.pockytPaypal.run({
3875
3864
  context: a,
3876
- checkoutPaymentMethod: Ne(a.checkoutPaymentMethods, "paypal", "pockyt"),
3877
- nonCdeFormInputs: te(a.formDiv),
3865
+ checkoutPaymentMethod: je(a.checkoutPaymentMethods, "paypal", "pockyt"),
3866
+ nonCdeFormInputs: ee(a.formDiv),
3878
3867
  formCallbacks: this.formCallbacks,
3879
3868
  customParams: { settings: o },
3880
3869
  initResult: void 0
3881
3870
  });
3882
- case G.airwallexGooglePay: {
3871
+ case q.airwallexGooglePay: {
3883
3872
  const i = this.initFlows.airwallexGooglePay.publisher.getValueIfLoadedElse(null);
3884
3873
  if (!i) {
3885
3874
  oe(
@@ -3889,7 +3878,7 @@ const es = (t, n, r) => {
3889
3878
  }
3890
3879
  return i.startFlow(o);
3891
3880
  }
3892
- case G.airwallexApplePay: {
3881
+ case q.airwallexApplePay: {
3893
3882
  const i = this.initFlows.airwallexApplePay.publisher.getValueIfLoadedElse(null);
3894
3883
  if (!i) {
3895
3884
  oe(
@@ -3899,7 +3888,7 @@ const es = (t, n, r) => {
3899
3888
  }
3900
3889
  return i.startFlow(o);
3901
3890
  }
3902
- case G.authorizenetGooglePay: {
3891
+ case q.authorizenetGooglePay: {
3903
3892
  const i = this.initFlows.authorizeNetGooglePay.publisher.getValueIfLoadedElse(null);
3904
3893
  if (!i) {
3905
3894
  oe(
@@ -3909,7 +3898,7 @@ const es = (t, n, r) => {
3909
3898
  }
3910
3899
  return i.startFlow(o);
3911
3900
  }
3912
- case G.authorizenetApplePay: {
3901
+ case q.authorizenetApplePay: {
3913
3902
  const i = this.initFlows.authorizeNetApplePay.publisher.getValueIfLoadedElse(null);
3914
3903
  if (!i) {
3915
3904
  oe(
@@ -3919,14 +3908,14 @@ const es = (t, n, r) => {
3919
3908
  }
3920
3909
  return i.startFlow(o);
3921
3910
  }
3922
- case G.loopCrypto: {
3911
+ case q.loopCrypto: {
3923
3912
  const i = this.initFlows.loop.publisher.current;
3924
3913
  if (!i.isSuccess)
3925
3914
  throw Error("Loop has not successfully initialized. Cannot submit.");
3926
3915
  return R.loopCrypto.run({
3927
3916
  context: a,
3928
- checkoutPaymentMethod: Ne(a.checkoutPaymentMethods, "crypto", "loop"),
3929
- nonCdeFormInputs: te(a.formDiv),
3917
+ checkoutPaymentMethod: je(a.checkoutPaymentMethods, "crypto", "loop"),
3918
+ nonCdeFormInputs: ee(a.formDiv),
3930
3919
  formCallbacks: this.formCallbacks,
3931
3920
  // AI generated stuff below to get the typing right.
3932
3921
  // TODO: Move the email, firstName and lastName fields to `nonCdeFormInputs`
@@ -3957,7 +3946,7 @@ const es = (t, n, r) => {
3957
3946
  window.removeEventListener("message", this.eventHandler.handleMessage.bind(this.eventHandler)), this.registeredElements = null, delete window.ojs;
3958
3947
  }, this.updateCallbacks = (r) => {
3959
3948
  this.formCallbacks.setCallbacks(r);
3960
- }, ft.assignAsSingleton(this), this.ojsVersion = "0.2.17", this.ojsReleaseVersion = "local_build", this.baseUrl = n.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...n, baseUrl: this.baseUrl }, this.formCallbacks = Wi.fromObject(n), this.registeredElements = null, this.formId = `opjs-form-${bt()}`, this.referrer = window.location.origin, this.formTarget = n.formTarget ?? "body", this.formProperties = { height: "1px" }, this.connectionManager = new Qi(), this.eventHandler = new Ji(this.formId, this.baseUrl, this.formCallbacks, {
3949
+ }, ft.assignAsSingleton(this), this.ojsVersion = "0.2.18", this.ojsReleaseVersion = "local_build", this.baseUrl = n.baseUrl ?? "https://cde.getopenpay.com", this.config = { ...n, baseUrl: this.baseUrl }, this.formCallbacks = Hi.fromObject(n), this.registeredElements = null, this.formId = `opjs-form-${bt()}`, this.referrer = window.location.origin, this.formTarget = n.formTarget ?? "body", this.formProperties = { height: "1px" }, this.connectionManager = new Wi(), this.eventHandler = new Bi(this.formId, this.baseUrl, this.formCallbacks, {
3961
3950
  setFormHeight: this.setFormHeight,
3962
3951
  onCdeLoaded: this.onCdeLoaded,
3963
3952
  onCdeLoadError: this.onCdeLoadError
@@ -3981,20 +3970,20 @@ we.ojsFlows = R, we.assignAsSingleton = (t) => {
3981
3970
  customInitParams: t.customInitParams ?? {}
3982
3971
  });
3983
3972
  let Ye = we;
3984
- const ts = e.object({
3973
+ const Xi = e.object({
3985
3974
  type: e.string(),
3986
3975
  loc: e.array(e.string()),
3987
3976
  msg: e.string(),
3988
3977
  url: e.string()
3989
3978
  });
3990
- e.array(ts);
3991
- const rs = e.object({
3979
+ e.array(Xi);
3980
+ const Qi = e.object({
3992
3981
  code: e.string(),
3993
3982
  message: e.string(),
3994
3983
  path: e.array(e.string())
3995
3984
  });
3996
- e.array(rs);
3997
- const ns = (t, n, r) => (...o) => {
3985
+ e.array(Qi);
3986
+ const es = (t, n, r) => (...o) => {
3998
3987
  try {
3999
3988
  return n(...o);
4000
3989
  } catch (a) {
@@ -4004,38 +3993,38 @@ const ns = (t, n, r) => (...o) => {
4004
3993
  };
4005
3994
  var $r = /* @__PURE__ */ ((t) => (t.pockytPaypal = "pockyt-paypal", t.airwallexGooglePay = "airwallex-google-pay", t.airwallexApplePay = "airwallex-apple-pay", t.authorizenetGooglePay = "authorizenet-google-pay", t.authorizenetApplePay = "authorizenet-apple-pay", t.loopCrypto = "loop-crypto", t))($r || {});
4006
3995
  e.nativeEnum($r);
4007
- const M = e.string().trim().min(1, { message: "Cannot be blank" }), S = e.string().trim().optional(), $ = (t) => e.nullable(t.optional());
3996
+ const M = e.string().trim().min(1, { message: "Cannot be blank" }), A = e.string().trim().optional(), z = (t) => e.nullable(t.optional());
4008
3997
  var qr = /* @__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))(qr || {});
4009
- const os = e.nativeEnum(qr);
3998
+ const ts = e.nativeEnum(qr);
4010
3999
  var Gr = /* @__PURE__ */ ((t) => (t.CARD_NUMBER = "cardNumber", t.CARD_EXPIRY = "cardExpiry", t.CARD_CVC = "cardCvc", t))(Gr || {});
4011
- const Vr = e.nativeEnum(Gr), as = e.union([os, Vr]);
4000
+ const Vr = e.nativeEnum(Gr), rs = e.union([ts, Vr]);
4012
4001
  var Ie = /* @__PURE__ */ ((t) => (t.CARD = "card", t.CARD_NUMBER = "card-number", t.CARD_EXPIRY = "card-expiry", t.CARD_CVC = "card-cvc", t))(Ie || {});
4013
4002
  e.nativeEnum(Ie);
4014
4003
  const tt = e.object({
4015
4004
  provider: e.string(),
4016
- processor_name: $(e.string()),
4017
- metadata: $(e.record(e.string(), e.any()))
4018
- }), is = e.object({
4005
+ processor_name: z(e.string()),
4006
+ metadata: z(e.record(e.string(), e.any()))
4007
+ }), ns = e.object({
4019
4008
  id: e.string()
4020
4009
  });
4021
4010
  e.object({
4022
- cardNumber: S,
4023
- expiry: S,
4024
- cvc: S
4011
+ cardNumber: A,
4012
+ expiry: A,
4013
+ cvc: A
4025
4014
  });
4026
4015
  e.object({
4027
- backgroundColor: S,
4028
- color: S,
4029
- fontFamily: S,
4030
- fontSize: S,
4031
- fontWeight: S,
4032
- margin: S,
4033
- padding: S,
4034
- letterSpacing: S,
4035
- lineHeight: S,
4036
- hideIcon: S
4016
+ backgroundColor: A,
4017
+ color: A,
4018
+ fontFamily: A,
4019
+ fontSize: A,
4020
+ fontWeight: A,
4021
+ margin: A,
4022
+ padding: A,
4023
+ letterSpacing: A,
4024
+ lineHeight: A,
4025
+ hideIcon: A
4037
4026
  });
4038
- const X = e.enum([
4027
+ const J = e.enum([
4039
4028
  // Element -> Form
4040
4029
  "LAYOUT",
4041
4030
  "LOADED",
@@ -4056,34 +4045,34 @@ const X = e.enum([
4056
4045
  "TOKENIZE",
4057
4046
  "CHECKOUT",
4058
4047
  "START_PAYMENT_FLOW"
4059
- ]), ss = X.extract(["TOKENIZE_STARTED", "CHECKOUT_STARTED"]), cs = e.object({ type: ss }), ls = X.extract(["BLUR", "FOCUS", "CHANGE"]), us = e.object({
4060
- type: ls,
4048
+ ]), os = J.extract(["TOKENIZE_STARTED", "CHECKOUT_STARTED"]), as = e.object({ type: os }), is = J.extract(["BLUR", "FOCUS", "CHANGE"]), ss = e.object({
4049
+ type: is,
4061
4050
  elementType: Vr,
4062
4051
  errors: e.array(e.string()).optional()
4063
- }), ds = X.extract(["LOAD_ERROR", "TOKENIZE_ERROR", "CHECKOUT_ERROR"]), ps = e.object({
4064
- type: ds,
4052
+ }), cs = J.extract(["LOAD_ERROR", "TOKENIZE_ERROR", "CHECKOUT_ERROR"]), ls = e.object({
4053
+ type: cs,
4065
4054
  message: M,
4066
4055
  headers: e.record(e.string(), e.string()).optional()
4067
- }), ms = X.extract(["VALIDATION_ERROR"]), ys = e.object({
4068
- type: ms,
4069
- elementType: as,
4056
+ }), us = J.extract(["VALIDATION_ERROR"]), ds = e.object({
4057
+ type: us,
4058
+ elementType: rs,
4070
4059
  errors: e.array(e.string())
4071
- }), _s = e.object({
4072
- type: e.literal(X.enum.LAYOUT),
4060
+ }), ps = e.object({
4061
+ type: e.literal(J.enum.LAYOUT),
4073
4062
  height: M
4074
- }), hs = e.object({
4075
- type: e.literal(X.enum.LOADED),
4063
+ }), ms = e.object({
4064
+ type: e.literal(J.enum.LOADED),
4076
4065
  sessionId: M,
4077
4066
  totalAmountAtoms: e.number(),
4078
- currency: S,
4067
+ currency: A,
4079
4068
  checkoutPaymentMethods: e.array(tt)
4080
- }), fs = e.object({
4081
- type: e.literal(X.enum.PAYMENT_FLOW_STARTED),
4069
+ }), ys = e.object({
4070
+ type: e.literal(J.enum.PAYMENT_FLOW_STARTED),
4082
4071
  nextActionMetadata: e.record(e.string(), e.any()),
4083
4072
  paymentFlowMetadata: e.any().optional(),
4084
4073
  startPFMetadata: e.optional(e.record(e.string(), e.any()))
4085
- }), gs = e.object({
4086
- type: e.literal(X.enum.SETUP_PAYMENT_METHOD_SUCCESS),
4074
+ }), _s = e.object({
4075
+ type: e.literal(J.enum.SETUP_PAYMENT_METHOD_SUCCESS),
4087
4076
  paymentMethodId: e.string()
4088
4077
  }), rt = e.object({
4089
4078
  firstName: M,
@@ -4091,47 +4080,47 @@ const X = e.enum([
4091
4080
  email: M,
4092
4081
  zipCode: M,
4093
4082
  country: M,
4094
- promotionCode: S
4095
- }), bs = e.object({
4096
- firstName: S,
4097
- lastName: S,
4083
+ promotionCode: A
4084
+ }), hs = e.object({
4085
+ firstName: A,
4086
+ lastName: A,
4098
4087
  email: M,
4099
4088
  zipCode: M,
4100
4089
  country: M,
4101
- promotionCode: S,
4102
- address: S,
4103
- city: S,
4104
- state: S
4105
- }), ws = X.extract(["TOKENIZE", "CHECKOUT", "START_PAYMENT_FLOW"]), vs = e.object({
4106
- type: ws,
4090
+ promotionCode: A,
4091
+ address: A,
4092
+ city: A,
4093
+ state: A
4094
+ }), fs = J.extract(["TOKENIZE", "CHECKOUT", "START_PAYMENT_FLOW"]), gs = e.object({
4095
+ type: fs,
4107
4096
  sessionId: M,
4108
4097
  checkoutPaymentMethod: tt,
4109
4098
  paymentFlowMetadata: e.any().optional(),
4110
4099
  doNotUseLegacyCCFlow: e.boolean().optional(),
4111
- existingCCPMId: S
4112
- }).extend(rt.shape), Cs = e.object({
4113
- type: e.literal(X.enum.TOKENIZE_SUCCESS),
4100
+ existingCCPMId: A
4101
+ }).extend(rt.shape), bs = e.object({
4102
+ type: e.literal(J.enum.TOKENIZE_SUCCESS),
4114
4103
  isReadyForCheckout: e.boolean()
4115
- }), Es = e.object({
4116
- type: e.literal(X.enum.CHECKOUT_SUCCESS),
4104
+ }), ws = e.object({
4105
+ type: e.literal(J.enum.CHECKOUT_SUCCESS),
4117
4106
  invoiceUrls: e.array(e.string()),
4118
4107
  subscriptionIds: e.array(e.string()),
4119
4108
  customerId: e.string()
4120
- }), Ps = e.discriminatedUnion("type", [
4121
- cs,
4122
- us,
4109
+ }), vs = e.discriminatedUnion("type", [
4110
+ as,
4111
+ ss,
4112
+ ls,
4113
+ ds,
4123
4114
  ps,
4115
+ ms,
4116
+ gs,
4117
+ bs,
4118
+ ws,
4124
4119
  ys,
4125
- _s,
4126
- hs,
4127
- vs,
4128
- Cs,
4129
- Es,
4130
- fs,
4131
- gs
4120
+ _s
4132
4121
  ]);
4133
4122
  e.object({
4134
- payload: Ps,
4123
+ payload: vs,
4135
4124
  nonce: M,
4136
4125
  formId: M,
4137
4126
  elementId: M
@@ -4150,37 +4139,37 @@ e.object({
4150
4139
  });
4151
4140
  e.object({
4152
4141
  secure_token: e.string(),
4153
- existing_cc_pm_id: $(e.string()),
4154
- their_pm_id: $(e.string()),
4155
- checkout_attempt_id: $(e.string()),
4156
- processor_specific_metadata: $(e.record(e.string(), e.any()))
4142
+ existing_cc_pm_id: z(e.string()),
4143
+ their_pm_id: z(e.string()),
4144
+ checkout_attempt_id: z(e.string()),
4145
+ processor_specific_metadata: z(e.record(e.string(), e.any()))
4157
4146
  });
4158
- const ks = e.object({
4147
+ const Cs = e.object({
4159
4148
  invoice_urls: e.array(e.string()),
4160
4149
  subscription_ids: e.array(e.string()),
4161
4150
  customer_id: e.string()
4162
- }), Ss = e.object({
4151
+ }), Es = e.object({
4163
4152
  elementType: e.string(),
4164
4153
  errors: e.array(e.string())
4165
4154
  });
4166
4155
  e.object({
4167
4156
  session_id: e.string()
4168
4157
  });
4169
- const As = e.object({
4158
+ const Ps = e.object({
4170
4159
  success: e.literal(!1),
4171
4160
  error_type: e.literal("validation_error"),
4172
- errors: e.array(Ss)
4161
+ errors: e.array(Es)
4173
4162
  });
4174
4163
  e.discriminatedUnion("success", [
4175
4164
  e.object({ success: e.literal(!0) }),
4176
- As
4165
+ Ps
4177
4166
  ]);
4178
4167
  e.object({
4179
4168
  session_id: e.string(),
4180
4169
  checkout_payment_method: tt,
4181
4170
  non_cde_form_fields: rt,
4182
4171
  do_not_use_legacy_cc_flow: e.boolean().optional(),
4183
- existing_cc_pm_id: $(e.string()),
4172
+ existing_cc_pm_id: z(e.string()),
4184
4173
  extra_metadata: e.record(e.string(), e.any())
4185
4174
  });
4186
4175
  e.object({
@@ -4208,22 +4197,22 @@ e.object({
4208
4197
  consent_id: e.string(),
4209
4198
  their_pm_id: e.string().optional()
4210
4199
  });
4211
- const Is = e.object({
4200
+ const ks = e.object({
4212
4201
  type: e.string(),
4213
- redirect_url: $(e.string()),
4214
- initial_intent_id: $(e.string()),
4215
- consent_id: $(e.string()),
4216
- their_pm_id: $(e.string()),
4217
- payment_session: $(e.record(e.string(), e.any()))
4202
+ redirect_url: z(e.string()),
4203
+ initial_intent_id: z(e.string()),
4204
+ consent_id: z(e.string()),
4205
+ their_pm_id: z(e.string()),
4206
+ payment_session: z(e.record(e.string(), e.any()))
4218
4207
  });
4219
4208
  e.discriminatedUnion("present", [
4220
4209
  e.object({ present: e.literal(!0), href: e.string() }),
4221
4210
  e.object({ present: e.literal(!1) })
4222
4211
  ]);
4223
4212
  e.object({
4224
- payment_methods: e.array(is),
4225
- pay_first_success_response: $(ks),
4226
- required_user_actions: $(e.array(Is))
4213
+ payment_methods: e.array(ns),
4214
+ pay_first_success_response: z(Cs),
4215
+ required_user_actions: z(e.array(ks))
4227
4216
  });
4228
4217
  e.object({
4229
4218
  stripe_pk: e.string(),
@@ -4235,7 +4224,7 @@ e.object({
4235
4224
  client_secret: e.string(),
4236
4225
  stripe_pk: e.string()
4237
4226
  });
4238
- const Rs = (t) => JSON.stringify(t), b = (t) => e.nullable(t.optional());
4227
+ const Ss = (t) => JSON.stringify(t), b = (t) => e.nullable(t.optional());
4239
4228
  e.string().trim().min(1, { message: "Cannot be blank" });
4240
4229
  e.object({
4241
4230
  cde_response_type: e.literal("error"),
@@ -4259,45 +4248,45 @@ const Kr = e.object({
4259
4248
  billing_interval: b(e.string()),
4260
4249
  billing_interval_count: b(e.number().int()),
4261
4250
  quantity: e.number().int()
4262
- }), Os = e.record(e.string(), e.any()), xs = e.object({
4251
+ }), As = e.record(e.string(), e.any()), Is = e.object({
4263
4252
  name: e.string(),
4264
- settings: b(Os)
4253
+ settings: b(As)
4265
4254
  }), Re = e.object({
4266
4255
  provider: e.string(),
4267
4256
  processor_name: b(e.string()),
4268
4257
  metadata: b(e.record(e.string(), e.any()))
4269
- }), Ts = e.object({
4258
+ }), Rs = e.object({
4270
4259
  quantity: e.number()
4271
- }), Ns = e.object({
4260
+ }), Os = e.object({
4272
4261
  id: b(e.string()),
4273
4262
  billing_interval: b(e.string()),
4274
4263
  billing_interval_count: b(e.number().int()),
4275
- subscription_items: e.array(Ts),
4264
+ subscription_items: e.array(Rs),
4276
4265
  trial_start: b(e.string()),
4277
4266
  trial_end: b(e.string())
4278
4267
  }), Hr = e.object({
4279
4268
  amount_atom: e.number()
4280
- }), js = e.object({
4269
+ }), xs = e.object({
4281
4270
  amount_atom: e.number(),
4282
4271
  amount_atom_considering_discount_applied: e.number(),
4283
4272
  currency: e.string(),
4284
4273
  discount_amount_atoms: e.array(Hr),
4285
4274
  subscription_item_id: e.string()
4286
- }), Ms = e.object({
4275
+ }), Ts = e.object({
4287
4276
  coupon: Kr
4288
- }), Ds = e.object({
4277
+ }), js = e.object({
4289
4278
  currency: e.string(),
4290
- discounts: e.array(Ms),
4279
+ discounts: e.array(Ts),
4291
4280
  hosted_invoice_url: b(e.string()),
4292
- lines: e.array(js),
4281
+ lines: e.array(xs),
4293
4282
  remaining_amount_atom: e.number(),
4294
4283
  tax_amount_atom: e.number(),
4295
4284
  total_amount_atom: e.number(),
4296
4285
  total_discount_amount_atoms: e.array(Hr)
4297
4286
  }), Yt = e.object({
4298
- created: e.array(Ns),
4299
- invoices: e.array(Ds)
4300
- }), Ls = e.object({
4287
+ created: e.array(Os),
4288
+ invoices: e.array(js)
4289
+ }), Ns = e.object({
4301
4290
  preview: Yt,
4302
4291
  preview_post_trial: b(Yt),
4303
4292
  coupons: e.array(Kr)
@@ -4309,11 +4298,11 @@ const Kr = e.object({
4309
4298
  line_items: e.array(Yr),
4310
4299
  amount_subtotal_atom: e.number().int(),
4311
4300
  amount_total_atom: e.number().int(),
4312
- brand: xs,
4313
- subs_preview: b(Ls),
4301
+ brand: Is,
4302
+ subs_preview: b(Ns),
4314
4303
  // Null in setup mode
4315
4304
  methods_available: e.array(Re)
4316
- }), Us = e.discriminatedUnion("mode", [
4305
+ }), Ms = e.discriminatedUnion("mode", [
4317
4306
  e.object({
4318
4307
  mode: e.literal("setup"),
4319
4308
  currency: e.nullable(e.undefined())
@@ -4322,12 +4311,12 @@ const Kr = e.object({
4322
4311
  mode: e.enum(["payment", "subscription"]),
4323
4312
  currency: e.string()
4324
4313
  }).extend(Ht.shape)
4325
- ]), Fs = e.object({
4314
+ ]), Ds = e.object({
4326
4315
  status: e.literal("complete")
4327
- }), zs = e.object({
4316
+ }), Ls = e.object({
4328
4317
  status: e.literal("expired")
4329
4318
  });
4330
- e.union([Us, Fs, zs]);
4319
+ e.union([Ms, Ds, Ls]);
4331
4320
  e.object({
4332
4321
  logo: e.string(),
4333
4322
  icon: e.string(),
@@ -4362,26 +4351,26 @@ e.object({
4362
4351
  id: e.string(),
4363
4352
  return_url: e.string()
4364
4353
  });
4365
- const $s = e.object({
4354
+ const Us = e.object({
4366
4355
  type: e.string(),
4367
4356
  loc: e.array(e.string()),
4368
4357
  msg: e.string(),
4369
4358
  url: e.string()
4370
4359
  });
4371
- e.array($s);
4372
- const qs = e.object({
4360
+ e.array(Us);
4361
+ const Fs = e.object({
4373
4362
  new_customer_email: e.string().optional(),
4374
4363
  new_customer_address: e.record(e.string(), e.any()).optional(),
4375
4364
  new_customer_first_name: e.string().optional(),
4376
4365
  new_customer_last_name: e.string().optional()
4377
- }), Gs = e.object({
4366
+ }), zs = e.object({
4378
4367
  price_id: e.string(),
4379
4368
  quantity: e.number().int()
4380
- }), Vs = e.object({
4381
- line_items: e.array(Gs),
4369
+ }), $s = e.object({
4370
+ line_items: e.array(zs),
4382
4371
  promotion_code: e.string().optional(),
4383
4372
  displayed_total_amount_atom: e.number().int()
4384
- }), Ks = e.object({
4373
+ }), qs = e.object({
4385
4374
  processor_specific_metadata: b(e.record(e.string(), e.any()))
4386
4375
  });
4387
4376
  e.object({
@@ -4390,14 +4379,14 @@ e.object({
4390
4379
  existing_cc_pm_id: e.string().optional(),
4391
4380
  their_existing_pm_id: e.string().optional(),
4392
4381
  use_pay_first_flow: e.boolean().optional(),
4393
- pay_first_flow_cart_info: Vs.optional()
4394
- }).extend(qs.shape).extend(Ks.shape);
4382
+ pay_first_flow_cart_info: $s.optional()
4383
+ }).extend(Fs.shape).extend(qs.shape);
4395
4384
  e.object({
4396
4385
  required_user_actions: e.array(e.record(e.string(), e.any())),
4397
4386
  checkout_attempt_id: b(e.string())
4398
4387
  });
4399
4388
  e.object({
4400
- fields: bs,
4389
+ fields: hs,
4401
4390
  checkoutPaymentMethod: Re
4402
4391
  });
4403
4392
  e.object({
@@ -4449,16 +4438,16 @@ e.object({
4449
4438
  e.object({
4450
4439
  next_action_metadata: b(e.record(e.any()))
4451
4440
  });
4452
- function Ys(t, n) {
4441
+ function Gs(t, n) {
4453
4442
  var r = Object.setPrototypeOf;
4454
4443
  r ? r(t, n) : t.__proto__ = n;
4455
4444
  }
4456
- function Hs(t, n) {
4445
+ function Vs(t, n) {
4457
4446
  n === void 0 && (n = t.constructor);
4458
4447
  var r = Error.captureStackTrace;
4459
4448
  r && r(t, n);
4460
4449
  }
4461
- var Bs = /* @__PURE__ */ function() {
4450
+ var Ks = /* @__PURE__ */ function() {
4462
4451
  var t = function(r, o) {
4463
4452
  return t = Object.setPrototypeOf || {
4464
4453
  __proto__: []
@@ -4479,18 +4468,18 @@ var Bs = /* @__PURE__ */ function() {
4479
4468
  };
4480
4469
  }();
4481
4470
  (function(t) {
4482
- Bs(n, t);
4471
+ Ks(n, t);
4483
4472
  function n(r, o) {
4484
4473
  var a = this.constructor, i = t.call(this, r, o) || this;
4485
4474
  return Object.defineProperty(i, "name", {
4486
4475
  value: a.name,
4487
4476
  enumerable: !1,
4488
4477
  configurable: !0
4489
- }), Ys(i, a.prototype), Hs(i), i;
4478
+ }), Gs(i, a.prototype), Vs(i), i;
4490
4479
  }
4491
4480
  return n;
4492
4481
  })(Error);
4493
- const Zs = (t) => {
4482
+ const Ys = (t) => {
4494
4483
  const n = (...o) => {
4495
4484
  window.console.log(`${le.green.bold("ojs/")}${le.bold.gray(`${t}`)} `, ...o);
4496
4485
  }, r = (...o) => {
@@ -4547,7 +4536,7 @@ const Bt = {
4547
4536
  isLoading: !0,
4548
4537
  startFlow: async () => {
4549
4538
  }
4550
- }, Ws = e.enum(["test", "live", "live-us", "live-in", "live-apse", "live-au"]);
4539
+ }, Hs = e.enum(["test", "live", "live-us", "live-in", "live-apse", "live-au"]);
4551
4540
  e.enum([
4552
4541
  "ar",
4553
4542
  "bg-BG",
@@ -4585,7 +4574,7 @@ e.enum([
4585
4574
  e.object({
4586
4575
  "op-account-id": e.string(),
4587
4576
  "op-adyen-client-key": e.string(),
4588
- "op-adyen-environment": Ws,
4577
+ "op-adyen-environment": Hs,
4589
4578
  "op-adyen-action": e.string()
4590
4579
  });
4591
4580
  e.array(
@@ -4593,8 +4582,8 @@ e.array(
4593
4582
  our_existing_pm_id: e.string()
4594
4583
  })
4595
4584
  ).length(1);
4596
- const Js = e.enum(["stripe", "airwallex", "authorize_net"]);
4597
- Js.Enum.stripe;
4585
+ const Bs = e.enum(["stripe", "airwallex", "authorize_net"]);
4586
+ Bs.Enum.stripe;
4598
4587
  e.object({
4599
4588
  provider: e.union([e.literal("apple_pay"), e.literal("google_pay")]),
4600
4589
  processor_name: e.literal("stripe"),
@@ -4630,7 +4619,7 @@ e.object({
4630
4619
  api_token: e.string()
4631
4620
  })
4632
4621
  });
4633
- var Xs = /* @__PURE__ */ ((t) => (t.IDLE = "idle", t.CONFIRMING_BALANCE = "confirmingBalance", t.CONFIRMING_AUTHORIZATION = "confirmingAuthorization", t.UPDATING_AUTHORIZATION = "updatingAuthorization", t.SIGNING_MESSAGE = "signingMessage", t.CREATING_CUSTOMER = "creatingCustomer", t.PROCESSING_PAYMENT = "processingPayment", t.CREATING_PAYMENT = "creatingPayment", t.CONFIRMING_PAYMENT = "confirmingPayment", t.COMPLETE = "complete", t))(Xs || {});
4622
+ var Zs = /* @__PURE__ */ ((t) => (t.IDLE = "idle", t.CONFIRMING_BALANCE = "confirmingBalance", t.CONFIRMING_AUTHORIZATION = "confirmingAuthorization", t.UPDATING_AUTHORIZATION = "updatingAuthorization", t.SIGNING_MESSAGE = "signingMessage", t.CREATING_CUSTOMER = "creatingCustomer", t.PROCESSING_PAYMENT = "processingPayment", t.CREATING_PAYMENT = "creatingPayment", t.CONFIRMING_PAYMENT = "confirmingPayment", t.COMPLETE = "complete", t))(Zs || {});
4634
4623
  e.object({
4635
4624
  provider: e.literal("apple_pay"),
4636
4625
  processor_name: e.literal("authorize_net"),
@@ -4658,26 +4647,26 @@ const Zt = {
4658
4647
  and ".isAvailable" to know if a payment request is available.`
4659
4648
  );
4660
4649
  }
4661
- }, { err__: Qs } = Zs("form-callbacks"), K = e.function().optional(), Wt = e.object({
4662
- onFocus: K,
4663
- onBlur: K,
4664
- onChange: K,
4665
- onLoad: K,
4666
- onLoadError: K,
4667
- onValidationError: K,
4668
- onCheckoutStarted: K,
4669
- onCheckoutSuccess: K,
4670
- onSetupPaymentMethodSuccess: K,
4671
- onCheckoutError: K,
4672
- onPaymentRequestLoad: K
4673
- }), ee = class ee {
4650
+ }, { err__: Ws } = Ys("form-callbacks"), V = e.function().optional(), Wt = e.object({
4651
+ onFocus: V,
4652
+ onBlur: V,
4653
+ onChange: V,
4654
+ onLoad: V,
4655
+ onLoadError: V,
4656
+ onValidationError: V,
4657
+ onCheckoutStarted: V,
4658
+ onCheckoutSuccess: V,
4659
+ onSetupPaymentMethodSuccess: V,
4660
+ onCheckoutError: V,
4661
+ onPaymentRequestLoad: V
4662
+ }), Q = class Q {
4674
4663
  constructor() {
4675
4664
  this.setCallbacks = (n) => {
4676
- this._callbacks = ee.createEmptyCallbacks(), Object.entries(n).forEach(([r, o]) => {
4677
- const a = ns(r, o ?? ee.NOOP, Qs);
4665
+ this._callbacks = Q.createEmptyCallbacks(), Object.entries(n).forEach(([r, o]) => {
4666
+ const a = es(r, o ?? Q.NOOP, Ws);
4678
4667
  this._callbacks[r] = a;
4679
4668
  });
4680
- }, this._callbacks = ee.createEmptyCallbacks();
4669
+ }, this._callbacks = Q.createEmptyCallbacks();
4681
4670
  }
4682
4671
  /**
4683
4672
  * Returns a read-only version of the callbacks object.
@@ -4686,18 +4675,18 @@ const Zt = {
4686
4675
  return { ...this._callbacks };
4687
4676
  }
4688
4677
  };
4689
- ee.NOOP = () => {
4690
- }, ee.createEmptyCallbacks = () => {
4678
+ Q.NOOP = () => {
4679
+ }, Q.createEmptyCallbacks = () => {
4691
4680
  const n = {};
4692
4681
  return Object.keys(Wt.keyof().enum).forEach((r) => {
4693
- n[r] = ee.NOOP;
4682
+ n[r] = Q.NOOP;
4694
4683
  }), n;
4695
- }, ee.fromObject = (n) => {
4696
- const r = new ee();
4684
+ }, Q.fromObject = (n) => {
4685
+ const r = new Q();
4697
4686
  return r.setCallbacks(Wt.parse(n)), r;
4698
4687
  };
4699
- let gt = ee;
4700
- const ec = (t) => {
4688
+ let gt = Q;
4689
+ const Js = (t) => {
4701
4690
  var r;
4702
4691
  const n = gt.fromObject({
4703
4692
  onFocus: t.onFocus,
@@ -4713,7 +4702,7 @@ const ec = (t) => {
4713
4702
  onPaymentRequestLoad: t.onPaymentRequestLoad
4714
4703
  });
4715
4704
  return Ye.getInstance() && ((r = Ye.getInstance()) == null || r.updateCallbacks(n.get)), n.get;
4716
- }, tc = (t) => {
4705
+ }, Xs = (t) => {
4717
4706
  const [n, r] = ce({
4718
4707
  apple_pay: Zt,
4719
4708
  google_pay: Zt
@@ -4724,11 +4713,11 @@ const ec = (t) => {
4724
4713
  [t]
4725
4714
  );
4726
4715
  return { paymentRequests: n, overridenOnPaymentRequestLoad: o };
4727
- }, Jt = "op_ojs_form", uc = (t) => {
4728
- const [n, r] = ce(), [o, a] = ce(null), { paymentRequests: i, overridenOnPaymentRequestLoad: s } = tc(t.onPaymentRequestLoad), [c, l] = ce(!1), [u, d] = ce(null), [_, f] = ce(null), [m, y] = ce({
4716
+ }, Jt = "op_ojs_form", sc = (t) => {
4717
+ const [n, r] = ce(), [o, a] = ce(null), { paymentRequests: i, overridenOnPaymentRequestLoad: s } = Xs(t.onPaymentRequestLoad), [c, l] = ce(!1), [u, d] = ce(null), [_, f] = ce(null), [m, y] = ce({
4729
4718
  googlePay: Bt,
4730
4719
  applePay: Bt
4731
- }), h = ec({
4720
+ }), h = Js({
4732
4721
  ...t,
4733
4722
  onPaymentRequestLoad: s,
4734
4723
  onLoad: (E, v) => {
@@ -4746,7 +4735,7 @@ const ec = (t) => {
4746
4735
  ...h
4747
4736
  });
4748
4737
  r(E);
4749
- const v = rc(E);
4738
+ const v = Qs(E);
4750
4739
  return a(v), E.initFlows.stripeLink.publisher.subscribe((w) => {
4751
4740
  w.isSuccess && w.loadedValue.isAvailable && d(w.loadedValue.controller);
4752
4741
  }), E.initFlows.loop.publisher.subscribe((w) => {
@@ -4755,13 +4744,13 @@ const ec = (t) => {
4755
4744
  config: w.loadedValue.initLoopConnectProps
4756
4745
  });
4757
4746
  }), E.initFlows.airwallexGooglePay.publisher.subscribe((w) => {
4758
- w.isSuccess && w.loadedValue.isAvailable && y((I) => ({
4759
- applePay: I.applePay,
4747
+ w.isSuccess && w.loadedValue.isAvailable && y((P) => ({
4748
+ applePay: P.applePay,
4760
4749
  googlePay: w.loadedValue
4761
4750
  }));
4762
4751
  }), E.initFlows.airwallexApplePay.publisher.subscribe((w) => {
4763
- w.isSuccess && w.loadedValue.isAvailable && y((I) => ({
4764
- googlePay: I.googlePay,
4752
+ w.isSuccess && w.loadedValue.isAvailable && y((P) => ({
4753
+ googlePay: P.googlePay,
4765
4754
  applePay: {
4766
4755
  ...w.loadedValue,
4767
4756
  isLoading: !1
@@ -4771,7 +4760,7 @@ const ec = (t) => {
4771
4760
  E.destroy();
4772
4761
  };
4773
4762
  }, []), !n)
4774
- return /* @__PURE__ */ H(st, {});
4763
+ return /* @__PURE__ */ Y(st, {});
4775
4764
  const C = {
4776
4765
  submit: n.submitCard,
4777
4766
  submitWith: n.generalSubmit,
@@ -4788,8 +4777,8 @@ const ec = (t) => {
4788
4777
  airwallex: m,
4789
4778
  loop: _
4790
4779
  };
4791
- return /* @__PURE__ */ H(st, { children: o ? /* @__PURE__ */ H(Qt.Provider, { value: o, children: /* @__PURE__ */ H("div", { id: Jt, className: t.className, children: t.children(C) }) }) : /* @__PURE__ */ H(st, {}) });
4792
- }, rc = (t) => ({
4780
+ return /* @__PURE__ */ Y(st, { children: o ? /* @__PURE__ */ Y(Qt.Provider, { value: o, children: /* @__PURE__ */ Y("div", { id: Jt, className: t.className, children: t.children(C) }) }) : /* @__PURE__ */ Y(st, {}) });
4781
+ }, Qs = (t) => ({
4793
4782
  formId: t.formId,
4794
4783
  formHeight: t.formProperties.height,
4795
4784
  referrer: t.referrer,
@@ -4797,7 +4786,7 @@ const ec = (t) => {
4797
4786
  registerIframe: t.registerIframe,
4798
4787
  baseUrl: t.baseUrl
4799
4788
  }), nt = (t) => {
4800
- const { elementType: n, styles: r } = t, { formId: o, referrer: a, formHeight: i, checkoutSecureToken: s, registerIframe: c, baseUrl: l } = Qr(), u = n.toLowerCase(), [d, _] = ce(!1), f = Xr(null), m = it(() => r ? Rs(r) : "", [r]), y = it(() => ({
4789
+ const { elementType: n, styles: r } = t, { formId: o, referrer: a, formHeight: i, checkoutSecureToken: s, registerIframe: c, baseUrl: l } = Qr(), u = n.toLowerCase(), [d, _] = ce(!1), f = Xr(null), m = it(() => r ? Ss(r) : "", [r]), y = it(() => ({
4801
4790
  border: "none",
4802
4791
  width: "100%",
4803
4792
  height: i
@@ -4808,7 +4797,7 @@ const ec = (t) => {
4808
4797
  }, [m, o, a, s]);
4809
4798
  return dt(() => _(!0), []), dt(() => {
4810
4799
  !f.current || !d || c(n, f.current);
4811
- }, [d]), s ? /* @__PURE__ */ H(
4800
+ }, [d]), s ? /* @__PURE__ */ Y(
4812
4801
  "iframe",
4813
4802
  {
4814
4803
  id: `ojs-${u}-element`,
@@ -4818,16 +4807,16 @@ const ec = (t) => {
4818
4807
  style: y,
4819
4808
  ref: f
4820
4809
  }
4821
- ) : (console.error("[form] Cannot render partially initialized frame"), /* @__PURE__ */ H("div", {}));
4822
- }, dc = ({ styles: t }) => /* @__PURE__ */ H(nt, { styles: t, elementType: Ie.CARD_CVC }), pc = ({ styles: t }) => /* @__PURE__ */ H(nt, { styles: t, elementType: Ie.CARD }), mc = ({ styles: t }) => /* @__PURE__ */ H(nt, { styles: t, elementType: Ie.CARD_EXPIRY }), yc = ({ styles: t }) => /* @__PURE__ */ H(nt, { styles: t, elementType: Ie.CARD_NUMBER });
4810
+ ) : (console.error("[form] Cannot render partially initialized frame"), /* @__PURE__ */ Y("div", {}));
4811
+ }, cc = ({ styles: t }) => /* @__PURE__ */ Y(nt, { styles: t, elementType: Ie.CARD_CVC }), lc = ({ styles: t }) => /* @__PURE__ */ Y(nt, { styles: t, elementType: Ie.CARD }), uc = ({ styles: t }) => /* @__PURE__ */ Y(nt, { styles: t, elementType: Ie.CARD_EXPIRY }), dc = ({ styles: t }) => /* @__PURE__ */ Y(nt, { styles: t, elementType: Ie.CARD_NUMBER });
4823
4812
  export {
4824
- dc as CardCvcElement,
4825
- pc as CardElement,
4826
- mc as CardExpiryElement,
4827
- yc as CardNumberElement,
4828
- uc as ElementsForm,
4813
+ cc as CardCvcElement,
4814
+ lc as CardElement,
4815
+ uc as CardExpiryElement,
4816
+ dc as CardNumberElement,
4817
+ sc as ElementsForm,
4829
4818
  qr as FieldName,
4830
- Xs as PayInState,
4819
+ Zs as PayInState,
4831
4820
  Qr as useOpenPayElements
4832
4821
  };
4833
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXguanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3gsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QvanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHsgeiBhcyB6JDEgfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCBBZSBmcm9tICdjaGFsayc7XG5cbmNvbnN0IEVsZW1lbnRzQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe1xuICBmb3JtSWQ6IFwiXCIsXG4gIGZvcm1IZWlnaHQ6IFwiXCIsXG4gIHJlZmVycmVyOiB2b2lkIDAsXG4gIGNoZWNrb3V0U2VjdXJlVG9rZW46IHZvaWQgMCxcbiAgcmVnaXN0ZXJJZnJhbWU6ICgpID0+IHtcbiAgfSxcbiAgYmFzZVVybDogXCJcIlxufSk7XG5cbmNvbnN0IHVzZU9wZW5QYXlFbGVtZW50cyA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoRWxlbWVudHNDb250ZXh0KTtcbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXNlT3BlblBheUVsZW1lbnRzIG11c3QgYmUgdXNlZCB3aXRoaW4gYW4gT3BlblBheUVsZW1lbnRzUHJvdmlkZXJcIik7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ7XG59O1xuXG5jb25zdCBldCA9IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIiwgZ24gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pLCB3biA9IHokMS5hcnJheShnbiksIGJuID0geiQxLm9iamVjdCh7XG4gIGNvZGU6IHokMS5zdHJpbmcoKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBwYXRoOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSksIHZuID0geiQxLmFycmF5KGJuKSwgRW4gPSB7XG4gIFwiZmFpbGVkIHRvIGZldGNoXCI6IFwiQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluXCJcbn0sIFdlID0gKHQpID0+IHtcbiAgY29uc3QgbiA9IHQudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gIHJldHVybiBFbltuXSA/PyB0O1xufSwgQ24gPSAodCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB0eXBlb2YgSlNPTi5wYXJzZSh0KSA9PSBcIm9iamVjdFwiO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gITE7XG4gIH1cbn0sIFNuID0gKHQpID0+IHQubGVuZ3RoID09PSAxID8gV2UodFswXS5tc2cpIDogYFBsZWFzZSBmaXggdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4ke3QubWFwKChlKSA9PiBg4oCiICR7V2UoZS5tc2cpfWApLmpvaW4oYFxuYCl9YCwgUG4gPSAodCkgPT4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHt0Lm1hcCgoZSkgPT4gYC0gJHtlLnBhdGguam9pbihcIi9cIil9OiAke2UubWVzc2FnZX1gKS5qb2luKGBcbmApfWAsIEogPSAodCkgPT4ge1xuICBpZiAodCBpbnN0YW5jZW9mIEVycm9yKVxuICAgIGlmIChDbih0Lm1lc3NhZ2UpKSB7XG4gICAgICBjb25zdCBuID0gSlNPTi5wYXJzZSh0Lm1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIHduLnNhZmVQYXJzZShuKS5zdWNjZXNzID8gU24obikgOiB2bi5zYWZlUGFyc2Uobikuc3VjY2VzcyA/IFBuKG4pIDogKGNvbnNvbGUud2FybihgRW5jb3VudGVyZWQgdW5rbm93biBzdHJpbmdpZmllZCBKU09OIG9iamVjdDpcbiR7dC5tZXNzYWdlfWApLCB0Lm1lc3NhZ2UpO1xuICAgIH0gZWxzZVxuICAgICAgcmV0dXJuIFdlKHQubWVzc2FnZSk7XG4gIGlmICh0eXBlb2YgdCA9PSBcIm9iamVjdFwiKVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodCk7XG4gICAgfSBjYXRjaCAobikge1xuICAgICAgcmV0dXJuIG4gKyBcIlwiO1xuICAgIH1cbiAgZWxzZVxuICAgIHJldHVybiB0ICsgXCJcIjtcbn0sIGtuID0gKHQsIG4sIGUpID0+ICguLi5yKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIG4oLi4ucik7XG4gIH0gY2F0Y2ggKGEpIHtcbiAgICBlKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHt0fSk6YCwgYSk7XG4gICAgcmV0dXJuO1xuICB9XG59O1xudmFyIHggPSAvKiBAX19QVVJFX18gKi8gKCh0KSA9PiAodC5wb2NreXRQYXlwYWwgPSBcInBvY2t5dC1wYXlwYWxcIiwgdC5haXJ3YWxsZXhHb29nbGVQYXkgPSBcImFpcndhbGxleC1nb29nbGUtcGF5XCIsIHQuYWlyd2FsbGV4QXBwbGVQYXkgPSBcImFpcndhbGxleC1hcHBsZS1wYXlcIiwgdC5hdXRob3JpemVuZXRHb29nbGVQYXkgPSBcImF1dGhvcml6ZW5ldC1nb29nbGUtcGF5XCIsIHQuYXV0aG9yaXplbmV0QXBwbGVQYXkgPSBcImF1dGhvcml6ZW5ldC1hcHBsZS1wYXlcIiwgdC5sb29wQ3J5cHRvID0gXCJsb29wLWNyeXB0b1wiLCB0KSkoeCB8fCB7fSk7XG56JDEubmF0aXZlRW51bSh4KTsgY29uc3QgTyA9IHokMS5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogXCJDYW5ub3QgYmUgYmxhbmtcIiB9KSwgUyA9IHokMS5zdHJpbmcoKS50cmltKCkub3B0aW9uYWwoKSwgaiA9ICh0KSA9PiB6JDEubnVsbGFibGUodC5vcHRpb25hbCgpKTtcbnZhciBwID0gLyogQF9fUFVSRV9fICovICgodCkgPT4gKHQuRklSU1RfTkFNRSA9IFwiZmlyc3ROYW1lXCIsIHQuTEFTVF9OQU1FID0gXCJsYXN0TmFtZVwiLCB0LkVNQUlMID0gXCJlbWFpbFwiLCB0LlpJUF9DT0RFID0gXCJ6aXBDb2RlXCIsIHQuQ0lUWSA9IFwiY2l0eVwiLCB0LlNUQVRFID0gXCJzdGF0ZVwiLCB0LkNPVU5UUlkgPSBcImNvdW50cnlcIiwgdC5BRERSRVNTID0gXCJhZGRyZXNzXCIsIHQuUEhPTkUgPSBcInBob25lXCIsIHQuUFJPTU9USU9OX0NPREUgPSBcInByb21vdGlvbkNvZGVcIiwgdCkpKHAgfHwge30pO1xuY29uc3QgSXQgPSB6JDEubmF0aXZlRW51bShwKTtcbnZhciBSdCA9IC8qIEBfX1BVUkVfXyAqLyAoKHQpID0+ICh0LkNBUkRfTlVNQkVSID0gXCJjYXJkTnVtYmVyXCIsIHQuQ0FSRF9FWFBJUlkgPSBcImNhcmRFeHBpcnlcIiwgdC5DQVJEX0NWQyA9IFwiY2FyZEN2Y1wiLCB0KSkoUnQgfHwge30pO1xuY29uc3QgRnQgPSB6JDEubmF0aXZlRW51bShSdCksIE10ID0geiQxLnVuaW9uKFtJdCwgRnRdKTtcbnZhciBkZSA9IC8qIEBfX1BVUkVfXyAqLyAoKHQpID0+ICh0LkNBUkQgPSBcImNhcmRcIiwgdC5DQVJEX05VTUJFUiA9IFwiY2FyZC1udW1iZXJcIiwgdC5DQVJEX0VYUElSWSA9IFwiY2FyZC1leHBpcnlcIiwgdC5DQVJEX0NWQyA9IFwiY2FyZC1jdmNcIiwgdCkpKGRlIHx8IHt9KTtcbmNvbnN0IEFuID0geiQxLm5hdGl2ZUVudW0oZGUpLCBUZSA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogaih6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogaih6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCBJbiA9IHokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBjYXJkTnVtYmVyOiBTLFxuICBleHBpcnk6IFMsXG4gIGN2YzogU1xufSk7XG56JDEub2JqZWN0KHtcbiAgYmFja2dyb3VuZENvbG9yOiBTLFxuICBjb2xvcjogUyxcbiAgZm9udEZhbWlseTogUyxcbiAgZm9udFNpemU6IFMsXG4gIGZvbnRXZWlnaHQ6IFMsXG4gIG1hcmdpbjogUyxcbiAgcGFkZGluZzogUyxcbiAgbGV0dGVyU3BhY2luZzogUyxcbiAgbGluZUhlaWdodDogUyxcbiAgaGlkZUljb246IFNcbn0pO1xuY29uc3QgcSA9IHokMS5lbnVtKFtcbiAgLy8gRWxlbWVudCAtPiBGb3JtXG4gIFwiTEFZT1VUXCIsXG4gIFwiTE9BREVEXCIsXG4gIFwiQkxVUlwiLFxuICBcIkZPQ1VTXCIsXG4gIFwiQ0hBTkdFXCIsXG4gIFwiVE9LRU5JWkVfU1RBUlRFRFwiLFxuICBcIkNIRUNLT1VUX1NUQVJURURcIixcbiAgXCJQQVlNRU5UX0ZMT1dfU1RBUlRFRFwiLFxuICBcIlRPS0VOSVpFX1NVQ0NFU1NcIixcbiAgXCJDSEVDS09VVF9TVUNDRVNTXCIsXG4gIFwiTE9BRF9FUlJPUlwiLFxuICBcIlZBTElEQVRJT05fRVJST1JcIixcbiAgXCJUT0tFTklaRV9FUlJPUlwiLFxuICBcIkNIRUNLT1VUX0VSUk9SXCIsXG4gIFwiU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTU1wiLFxuICAvLyBGb3JtIC0+IEVsZW1lbnRcbiAgXCJUT0tFTklaRVwiLFxuICBcIkNIRUNLT1VUXCIsXG4gIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJcbl0pLCBSbiA9IHEuZXh0cmFjdChbXCJUT0tFTklaRV9TVEFSVEVEXCIsIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiXSksIEZuID0geiQxLm9iamVjdCh7IHR5cGU6IFJuIH0pLCBNbiA9IHEuZXh0cmFjdChbXCJCTFVSXCIsIFwiRk9DVVNcIiwgXCJDSEFOR0VcIl0pLCBEbiA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBNbixcbiAgZWxlbWVudFR5cGU6IEZ0LFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pLCBPbiA9IHEuZXh0cmFjdChbXCJMT0FEX0VSUk9SXCIsIFwiVE9LRU5JWkVfRVJST1JcIiwgXCJDSEVDS09VVF9FUlJPUlwiXSksIE5uID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IE9uLFxuICBtZXNzYWdlOiBPLFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KSwgVG4gPSBxLmV4dHJhY3QoW1wiVkFMSURBVElPTl9FUlJPUlwiXSksIExuID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IFRuLFxuICBlbGVtZW50VHlwZTogTXQsXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pLCBVbiA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChxLmVudW0uTEFZT1VUKSxcbiAgaGVpZ2h0OiBPXG59KSwgam4gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwocS5lbnVtLkxPQURFRCksXG4gIHNlc3Npb25JZDogTyxcbiAgdG90YWxBbW91bnRBdG9tczogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogUyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogeiQxLmFycmF5KFRlKVxufSksIHhuID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKHEuZW51bS5QQVlNRU5UX0ZMT1dfU1RBUlRFRCksXG4gIG5leHRBY3Rpb25NZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBzdGFydFBGTWV0YWRhdGE6IHokMS5vcHRpb25hbCh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCAkbiA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChxLmVudW0uU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTUyksXG4gIHBheW1lbnRNZXRob2RJZDogeiQxLnN0cmluZygpXG59KSwgQ2UgPSB6JDEub2JqZWN0KHtcbiAgZmlyc3ROYW1lOiBPLFxuICBsYXN0TmFtZTogTyxcbiAgZW1haWw6IE8sXG4gIHppcENvZGU6IE8sXG4gIGNvdW50cnk6IE8sXG4gIHByb21vdGlvbkNvZGU6IFNcbn0pLCB6biA9IHokMS5vYmplY3Qoe1xuICBmaXJzdE5hbWU6IFMsXG4gIGxhc3ROYW1lOiBTLFxuICBlbWFpbDogTyxcbiAgemlwQ29kZTogTyxcbiAgY291bnRyeTogTyxcbiAgcHJvbW90aW9uQ29kZTogUyxcbiAgYWRkcmVzczogUyxcbiAgY2l0eTogUyxcbiAgc3RhdGU6IFNcbn0pLCBHbiA9IHEuZXh0cmFjdChbXCJUT0tFTklaRVwiLCBcIkNIRUNLT1VUXCIsIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJdKSwgVm4gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogR24sXG4gIHNlc3Npb25JZDogTyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBUZSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogeiQxLmFueSgpLm9wdGlvbmFsKCksXG4gIGRvTm90VXNlTGVnYWN5Q0NGbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nQ0NQTUlkOiBTXG59KS5leHRlbmQoQ2Uuc2hhcGUpLCBxbiA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChxLmVudW0uVE9LRU5JWkVfU1VDQ0VTUyksXG4gIGlzUmVhZHlGb3JDaGVja291dDogeiQxLmJvb2xlYW4oKVxufSksIFluID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKHEuZW51bS5DSEVDS09VVF9TVUNDRVNTKSxcbiAgaW52b2ljZVVybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25JZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcklkOiB6JDEuc3RyaW5nKClcbn0pLCBLbiA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgRm4sXG4gIERuLFxuICBObixcbiAgTG4sXG4gIFVuLFxuICBqbixcbiAgVm4sXG4gIHFuLFxuICBZbixcbiAgeG4sXG4gICRuXG5dKSwgV24gPSB6JDEub2JqZWN0KHtcbiAgcGF5bG9hZDogS24sXG4gIG5vbmNlOiBPLFxuICBmb3JtSWQ6IE8sXG4gIGVsZW1lbnRJZDogT1xufSk7XG56JDEub2JqZWN0KHtcbiAgYW1vdW50QXRvbTogeiQxLm51bWJlcigpLFxuICAvKipcbiAgICogVGhlIHRocmVlLWxldHRlciBJU08gNDIxNyBjdXJyZW5jeSBjb2RlIGZvciB0aGUgcGF5bWVudC5cbiAgICovXG4gIGN1cnJlbmN5OiBPXG59KTtcbnokMS5lbnVtKFtcImFwcGxlX3BheVwiLCBcImdvb2dsZV9wYXlcIl0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBleGlzdGluZ19jY19wbV9pZDogaih6JDEuc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogaih6JDEuc3RyaW5nKCkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBqKHokMS5zdHJpbmcoKSksXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogaih6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgdHQgPSB6JDEub2JqZWN0KHtcbiAgaW52b2ljZV91cmxzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uX2lkczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2lkOiB6JDEuc3RyaW5nKClcbn0pLCBIbiA9IHokMS5vYmplY3Qoe1xuICBlbGVtZW50VHlwZTogeiQxLnN0cmluZygpLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgSm4gPSB6JDEub2JqZWN0KHtcbiAgc3VjY2VzczogeiQxLmxpdGVyYWwoITEpLFxuICBlcnJvcl90eXBlOiB6JDEubGl0ZXJhbChcInZhbGlkYXRpb25fZXJyb3JcIiksXG4gIGVycm9yczogeiQxLmFycmF5KEhuKVxufSksIFpuID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInN1Y2Nlc3NcIiwgW1xuICB6JDEub2JqZWN0KHsgc3VjY2VzczogeiQxLmxpdGVyYWwoITApIH0pLFxuICBKblxuXSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogVGUsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IENlLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBqKHokMS5zdHJpbmcoKSksXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogVGUsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IENlLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKVxufSk7XG52YXIgSSA9IC8qIEBfX1BVUkVfXyAqLyAoKHQpID0+ICh0LlNVQ0NFU1MgPSBcInN1Y2Nlc3NcIiwgdC5GQUlMVVJFID0gXCJmYWlsdXJlXCIsIHQuQ0FOQ0VMTEVEID0gXCJjYW5jZWxsZWRcIiwgdCkpKEkgfHwge30pO1xuY29uc3QgQm4gPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXG4gICAgXCJzdWNjZXNzXCIsXG4gICAgXCJmYWlsdXJlXCIsXG4gICAgXCJjYW5jZWxsZWRcIlxuICAgIC8qIENBTkNFTExFRCAqL1xuICBdKSxcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG5jb25zdCBRbiA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogeiQxLnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogeiQxLnN0cmluZygpLFxuICBjb25zZW50X2lkOiB6JDEuc3RyaW5nKCksXG4gIHRoZWlyX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSksIER0ID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiBqKHokMS5zdHJpbmcoKSksXG4gIGluaXRpYWxfaW50ZW50X2lkOiBqKHokMS5zdHJpbmcoKSksXG4gIGNvbnNlbnRfaWQ6IGooeiQxLnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IGooeiQxLnN0cmluZygpKSxcbiAgcGF5bWVudF9zZXNzaW9uOiBqKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIFhuID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInByZXNlbnRcIiwgW1xuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwoITApLCBocmVmOiB6JDEuc3RyaW5nKCkgfSksXG4gIHokMS5vYmplY3QoeyBwcmVzZW50OiB6JDEubGl0ZXJhbCghMSkgfSlcbl0pLCBlciA9IHokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZHM6IHokMS5hcnJheShJbiksXG4gIHBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlOiBqKHR0KSxcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiBqKHokMS5hcnJheShEdCkpXG59KSwgdHIgPSAodCkgPT4ge1xuICBjb25zdCBuID0ge307XG4gIHJldHVybiBPYmplY3QuZW50cmllcyh0KS5mb3JFYWNoKChbZSwgcl0pID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYSA9IEl0LnBhcnNlKGUpO1xuICAgICAgQXJyYXkuaXNBcnJheShyKSA/IG5bYV0gPSByIDogQXJyYXkuaXNBcnJheShyLl9lcnJvcnMpICYmIChuW2FdID0gci5fZXJyb3JzKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0pLCBuO1xufSwgbnIgPSB6JDEub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BtX2lkOiB6JDEuc3RyaW5nKClcbn0pLCByciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbn0pLCBvciA9IHtcbiAgdXNkOiBcInVzZFwiLFxuICBicmw6IFwiYnJsXCJcbn0sIExlID0gYXN5bmMgKHQpID0+IHtcbiAgZm9yIChsZXQgZSA9IDA7IGUgPCAxMDsgZSsrKVxuICAgIHN0KCkgfHwgYXdhaXQgbnQoNTAwKTtcbiAgaWYgKCFzdCgpKVxuICAgIHRocm93IGNvbnNvbGUubG9nKFwiU3RyaXBlIEpTIG5vdCBmb3VuZC5cIiksIG5ldyBFcnJvcihcIlN0cmlwZSBKUyBub3QgZm91bmQuXCIpO1xuICByZXR1cm4gbmV3IFN0cmlwZSh0KTtcbn0sIGFyID0gYXN5bmMgKHQsIG4pID0+IHtcbiAgY29uc3QgZSA9IGF3YWl0IExlKHQpO1xuICByZXR1cm4ge1xuICAgIGVsZW1lbnRzOiBlLmVsZW1lbnRzKG4pLFxuICAgIHN0cmlwZTogZVxuICB9O1xufSwgaXIgPSBhc3luYyAodCwgbiwgZSwgciwgYSkgPT4ge1xuICBjb25zdCBpID0gYXdhaXQgTGUodCksIHMgPSBvcltlLnRvTG93ZXJDYXNlKCkudHJpbSgpXTtcbiAgcmV0dXJuIGkucGF5bWVudFJlcXVlc3Qoe1xuICAgIC8vIFRPRE86IHJlcGxhY2UgdGhpcyB3aXRoIHN0cmlwZSBhY2NvdW50IGNvdW50cnkgYXMgc29vbiBhcyB3ZSBzdXBwb3J0IGl0XG4gICAgY291bnRyeTogXCJVU1wiLFxuICAgIGN1cnJlbmN5OiBzLFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogXCJUb3RhbFwiLFxuICAgICAgYW1vdW50OiBuLFxuICAgICAgcGVuZGluZzogclxuICAgIH0sXG4gICAgLy8gcmVxdWVzdFNoaXBwaW5nOiB0cnVlLFxuICAgIHJlcXVlc3RQYXllck5hbWU6ICEwLFxuICAgIHJlcXVlc3RQYXllckVtYWlsOiAhMCxcbiAgICBkaXNhYmxlV2FsbGV0czogW11cbiAgfSk7XG59LCBudCA9ICh0KSA9PiBuZXcgUHJvbWlzZSgobikgPT4ge1xuICBzZXRUaW1lb3V0KG4sIHQpO1xufSksIHN0ID0gKCkgPT4gXCJTdHJpcGVcIiBpbiB3aW5kb3csIHNyID0gYXN5bmMgKHQpID0+IG5ldyBQcm9taXNlKChuLCBlKSA9PiB7XG4gIHRyeSB7XG4gICAgdC5vbihcInBheW1lbnRtZXRob2RcIiwgYXN5bmMgKHIpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKFwicGF5bWVudG1ldGhvZCBFVlQ6OiBcIiwgciksIG4ocik7XG4gICAgfSksIHQub24oXCJ0b2tlblwiLCBhc3luYyAocikgPT4ge1xuICAgICAgY29uc29sZS5sb2coXCJ0b2tlbiBFVlQ6OiBcIiwgcik7XG4gICAgfSksIHQub24oXCJjYW5jZWxcIiwgKCkgPT4ge1xuICAgICAgZShuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlcIikpO1xuICAgIH0pO1xuICB9IGNhdGNoIChyKSB7XG4gICAgZShyKTtcbiAgfVxufSksIGNyID0gYXN5bmMgKHQsIG4pID0+IHtcbiAgaWYgKCF0LnN0cmlwZV9wayB8fCAhdC5jbGllbnRfc2VjcmV0KVxuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBuZXh0IGFjdGlvbiBtZXRhZGF0YSBmb3JtYXQ6ICR7SlNPTi5zdHJpbmdpZnkodCl9YCk7XG4gIGNvbnN0IHIgPSBhd2FpdCAoYXdhaXQgTGUodC5zdHJpcGVfcGspKS5jb25maXJtQ2FyZFNldHVwKHQuY2xpZW50X3NlY3JldCwge1xuICAgIHBheW1lbnRfbWV0aG9kOiBuLnBheW1lbnRNZXRob2QuaWRcbiAgfSk7XG4gIGlmIChyLmVycm9yKVxuICAgIHRocm93IG4uY29tcGxldGUoXCJmYWlsXCIpLCBuZXcgRXJyb3IoYFBheW1lbnQgZmFpbGVkOiAke3IuZXJyb3IubWVzc2FnZSA/PyBcInVua25vd25cIn1gKTtcbiAgcmV0dXJuIG4uY29tcGxldGUoXCJzdWNjZXNzXCIpLCByO1xufSwgbHIgPSBhc3luYyAodCkgPT4ge1xuICB2YXIgYSwgaSwgcywgYztcbiAgY29uc3QgZSA9IGF3YWl0IChhd2FpdCBMZSh0LnN0cmlwZV9waykpLmNvbmZpcm1DYXJkU2V0dXAodC5jbGllbnRfc2VjcmV0LCB7XG4gICAgcGF5bWVudF9tZXRob2Q6IHQuc3RyaXBlX3BtX2lkXG4gIH0pLCByID0gKGEgPSBlLnNldHVwSW50ZW50KSA9PSBudWxsID8gdm9pZCAwIDogYS5zdGF0dXM7XG4gIGlmIChyID09PSBcInN1Y2NlZWRlZFwiKVxuICAgIGNvbnNvbGUubG9nKFwiWzNEU10gQ09ORklSTUlORyBQTTpcIiwgdC5zdHJpcGVfcG1faWQpLCBjb25zb2xlLmxvZyhcIlszRFNdIFNldHVwIGludGVudCBjcmVhdGVkOlwiLCBlLnNldHVwSW50ZW50KTtcbiAgZWxzZSB0aHJvdyByID09PSBcImNhbmNlbGVkXCIgPyBuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlcIikgOiBuZXcgRXJyb3IoXG4gICAgYCR7KChpID0gZS5lcnJvcikgPT0gbnVsbCA/IHZvaWQgMCA6IGkubWVzc2FnZSkgPz8gKChjID0gKHMgPSBlLnNldHVwSW50ZW50KSA9PSBudWxsID8gdm9pZCAwIDogcy5sYXN0X3NldHVwX2Vycm9yKSA9PSBudWxsID8gdm9pZCAwIDogYy5tZXNzYWdlKSA/PyBcIlBheW1lbnQgZmFpbGVkLCBwbGVhc2UgY2xpY2sgc3VibWl0IGFnYWluIHRvIHBheS5cIn1gXG4gICk7XG59LCB1ciA9ICh0KSA9PiBKU09OLnN0cmluZ2lmeSh0KSwgSCA9ICh0LCBuKSA9PiBBcnJheS5mcm9tKHQucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLW9waWRdXCIpID8/IFtdKS5yZWR1Y2UoKGEsIGkpID0+IHtcbiAgY29uc3QgcyA9IGkuZ2V0QXR0cmlidXRlKFwiZGF0YS1vcGlkXCIpO1xuICByZXR1cm4gcyA/IHsgLi4uYSwgW3NdOiBpLnZhbHVlIH0gOiBhO1xufSwge30pLCBkciA9ICh0KSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIFduLnBhcnNlKHQpO1xuICB9IGNhdGNoIChuKSB7XG4gICAgdGhyb3cgY29uc29sZS5lcnJvcihcIkVycm9yIHBhcnNpbmcgZXZlbnQgcGF5bG9hZDpcIiwgdCwgbiksIG47XG4gIH1cbn0sIHByID0gYXN5bmMgKHQpID0+IHtcbiAgaWYgKHR5cGVvZiB0ICE9IFwib2JqZWN0XCIgfHwgIXQpIHJldHVybiAhMTtcbiAgdHJ5IHtcbiAgICBjb25zdCBuID0geyB0eXBlOiBcInBpbmdcIiB9LCBlID0gYXdhaXQgdC5zZW5kKG4pO1xuICAgIGlmIChlICE9PSAhMClcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJ3RydWUnIGFmdGVyIHBpbmcsIGdvdCAke0pTT04uc3RyaW5naWZ5KGUpfWApO1xuICAgIHJldHVybiAhMDtcbiAgfSBjYXRjaCAobikge1xuICAgIHJldHVybiBjb25zb2xlLmVycm9yKFwiSW52YWxpZCBDREUgY29ubmVjdGlvbiBjaGVjazpcIiwgbiksICExO1xuICB9XG59LCBtciA9ICh0LCBuKSA9PiAhIXQgJiYgbiwgZyA9ICh0KSA9PiB6JDEubnVsbGFibGUodC5vcHRpb25hbCgpKTtcbnokMS5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogXCJDYW5ub3QgYmUgYmxhbmtcIiB9KTtcbmNvbnN0IHlyID0geiQxLm9iamVjdCh7XG4gIGNkZV9yZXNwb25zZV90eXBlOiB6JDEubGl0ZXJhbChcImVycm9yXCIpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xueiQxLmVudW0oW1widXNkXCIsIFwiYnJsXCJdKTtcbmNvbnN0IE90ID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgYW1vdW50X2F0b21fb2ZmOiBnKHokMS5udW1iZXIoKSksXG4gIHBlcmNlbnRfb2ZmOiBnKHokMS5udW1iZXIoKSksXG4gIGN1cnJlbmN5OiBnKHokMS5zdHJpbmcoKSksXG4gIGR1cmF0aW9uOiB6JDEuc3RyaW5nKCksXG4gIGR1cmF0aW9uX2luX21vbnRoczogZyh6JDEubnVtYmVyKCkpXG59KSwgTnQgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IGcoeiQxLnN0cmluZygpKSxcbiAgcHJpY2VfaWQ6IHokMS5zdHJpbmcoKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogZyh6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBnKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKCkuaW50KClcbn0pLCBmciA9IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLCBociA9IHokMS5vYmplY3Qoe1xuICBuYW1lOiB6JDEuc3RyaW5nKCksXG4gIHNldHRpbmdzOiBnKGZyKVxufSksIGZlID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBnKHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBnKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIF9yID0geiQxLm9iamVjdCh7XG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKClcbn0pLCBnciA9IHokMS5vYmplY3Qoe1xuICBpZDogZyh6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsOiBnKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IGcoeiQxLm51bWJlcigpLmludCgpKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1zOiB6JDEuYXJyYXkoX3IpLFxuICB0cmlhbF9zdGFydDogZyh6JDEuc3RyaW5nKCkpLFxuICB0cmlhbF9lbmQ6IGcoeiQxLnN0cmluZygpKVxufSksIFR0ID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6JDEubnVtYmVyKClcbn0pLCB3ciA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICBhbW91bnRfYXRvbV9jb25zaWRlcmluZ19kaXNjb3VudF9hcHBsaWVkOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRpc2NvdW50X2Ftb3VudF9hdG9tczogeiQxLmFycmF5KFR0KSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1faWQ6IHokMS5zdHJpbmcoKVxufSksIGJyID0geiQxLm9iamVjdCh7XG4gIGNvdXBvbjogT3Rcbn0pLCB2ciA9IHokMS5vYmplY3Qoe1xuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudHM6IHokMS5hcnJheShiciksXG4gIGhvc3RlZF9pbnZvaWNlX3VybDogZyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lczogeiQxLmFycmF5KHdyKSxcbiAgcmVtYWluaW5nX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRheF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9kaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShUdClcbn0pLCBjdCA9IHokMS5vYmplY3Qoe1xuICBjcmVhdGVkOiB6JDEuYXJyYXkoZ3IpLFxuICBpbnZvaWNlczogeiQxLmFycmF5KHZyKVxufSksIEx0ID0geiQxLm9iamVjdCh7XG4gIHByZXZpZXc6IGN0LFxuICBwcmV2aWV3X3Bvc3RfdHJpYWw6IGcoY3QpLFxuICBjb3Vwb25zOiB6JDEuYXJyYXkoT3QpXG59KSwgbHQgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcIm9wZW5cIiksXG4gIGxvY2FsZTogZyh6JDEuc3RyaW5nKCkpLFxuICB0b2tlbjogeiQxLnN0cmluZygpLFxuICBlbWFpbDogZyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoTnQpLFxuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBicmFuZDogaHIsXG4gIHN1YnNfcHJldmlldzogZyhMdCksXG4gIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICBtZXRob2RzX2F2YWlsYWJsZTogeiQxLmFycmF5KGZlKVxufSksIFV0ID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcIm1vZGVcIiwgW1xuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEubGl0ZXJhbChcInNldHVwXCIpLFxuICAgIGN1cnJlbmN5OiB6JDEubnVsbGFibGUoeiQxLnVuZGVmaW5lZCgpKVxuICB9KS5leHRlbmQobHQuc2hhcGUpLFxuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEuZW51bShbXCJwYXltZW50XCIsIFwic3Vic2NyaXB0aW9uXCJdKSxcbiAgICBjdXJyZW5jeTogeiQxLnN0cmluZygpXG4gIH0pLmV4dGVuZChsdC5zaGFwZSlcbl0pLCBFciA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiY29tcGxldGVcIilcbn0pLCBDciA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiZXhwaXJlZFwiKVxufSk7XG56JDEudW5pb24oW1V0LCBFciwgQ3JdKTtcbnokMS5vYmplY3Qoe1xuICBsb2dvOiB6JDEuc3RyaW5nKCksXG4gIGljb246IHokMS5zdHJpbmcoKSxcbiAgcHJpbWFyeV9jb2xvcjogeiQxLnN0cmluZygpLFxuICBzZWNvbmRhcnlfY29sb3I6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHBtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwYXltZW50X2lucHV0OiB6JDEuYW55KCksXG4gIC8vIFNob3VsZCBmb2xsb3cgQW55UGF5bWVudElucHV0IGZyb20gQ0RFXG4gIGN1c3RvbWVyX2ZpcnN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9sYXN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl96aXBfY29kZTogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl9jb3VudHJ5OiB6JDEuc3RyaW5nKCksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShOdCksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGNhbmNlbF9hdF9lbmQ6IHokMS5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBmZSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHVzZV9jb25maXJtZWRfcG1faWQ6IGcoeiQxLnN0cmluZygpKVxufSk7XG5jb25zdCBqdCA9IHokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZF9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICByZXR1cm5fdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgU3IgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLmFycmF5KFNyKTtcbmNvbnN0IFByID0geiQxLm9iamVjdCh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KSwga3IgPSB6JDEub2JqZWN0KHtcbiAgcHJpY2VfaWQ6IHokMS5zdHJpbmcoKSxcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKS5pbnQoKVxufSksIEFyID0geiQxLm9iamVjdCh7XG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShrciksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KClcbn0pLCBJciA9IHokMS5vYmplY3Qoe1xuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IGcoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X3Byb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBmZSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aGVpcl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHVzZV9wYXlfZmlyc3RfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IEFyLm9wdGlvbmFsKClcbn0pLmV4dGVuZChQci5zaGFwZSkuZXh0ZW5kKElyLnNoYXBlKTtcbmNvbnN0IHh0ID0geiQxLm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeiQxLmFycmF5KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogZyh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBmaWVsZHM6IHpuLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZlXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IENlLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogZmUsXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKVxuICAvLyBUaGlzIGlzIG9wdGlvbmFsIGluIENERSwgYnV0IG5vdCBpbiBPSlMgbW92aW5nIGZvcndhcmRcbn0pO1xuY29uc3QgUnIgPSB6JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBjY19wbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5yZWNvcmQoeiQxLmFueSgpKTtcbnokMS5vYmplY3Qoe1xuICBmaXJzdF9uYW1lOiBnKHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogZyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lMTogZyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lMjogZyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lMzogZyh6JDEuc3RyaW5nKCkpLFxuICBjaXR5OiBnKHokMS5zdHJpbmcoKSksXG4gIHN0YXRlOiBnKHokMS5zdHJpbmcoKSksXG4gIGNvdW50cnk6IGcoeiQxLnN0cmluZygpKSxcbiAgemlwX2NvZGU6IGcoeiQxLnN0cmluZygpKSxcbiAgZW1haWw6IGcoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogZyh6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IGcoeiQxLnN0cmluZygpKSxcbiAgdXBkYXRlX3Byb2Nlc3Nvcl9jdXN0b21lcjogZyh6JDEuYm9vbGVhbigpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKSxcbiAgZW1haWw6IGcoeiQxLnN0cmluZygpKSxcbiAgZmlyc3RfbmFtZTogZyh6JDEuc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IGcoeiQxLnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBnKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IGcoeiQxLnN0cmluZygpKSxcbiAgYWRkcmVzczogZyh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBGciA9IHokMS5vYmplY3Qoe1xuICBlcnJvcl9jb2RlOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBmZSxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5hbnkoKSkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBNciA9IHokMS5vYmplY3Qoe1xuICBuZXh0X2FjdGlvbl9tZXRhZGF0YTogZyh6JDEucmVjb3JkKHokMS5hbnkoKSkpXG59KSwgRHIgPSAodCkgPT4gdC5yZWR1Y2UoKG4sIGUpID0+IG4gKyBlLCAwKTtcbmZ1bmN0aW9uIE9yKHQsIG4pIHtcbiAgdmFyIGUgPSBPYmplY3Quc2V0UHJvdG90eXBlT2Y7XG4gIGUgPyBlKHQsIG4pIDogdC5fX3Byb3RvX18gPSBuO1xufVxuZnVuY3Rpb24gTnIodCwgbikge1xuICBuID09PSB2b2lkIDAgJiYgKG4gPSB0LmNvbnN0cnVjdG9yKTtcbiAgdmFyIGUgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcbiAgZSAmJiBlKHQsIG4pO1xufVxudmFyIFRyID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKCkge1xuICB2YXIgdCA9IGZ1bmN0aW9uKGUsIHIpIHtcbiAgICByZXR1cm4gdCA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7XG4gICAgICBfX3Byb3RvX186IFtdXG4gICAgfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uKGEsIGkpIHtcbiAgICAgIGEuX19wcm90b19fID0gaTtcbiAgICB9IHx8IGZ1bmN0aW9uKGEsIGkpIHtcbiAgICAgIGZvciAodmFyIHMgaW4gaSlcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGksIHMpICYmIChhW3NdID0gaVtzXSk7XG4gICAgfSwgdChlLCByKTtcbiAgfTtcbiAgcmV0dXJuIGZ1bmN0aW9uKG4sIGUpIHtcbiAgICBpZiAodHlwZW9mIGUgIT0gXCJmdW5jdGlvblwiICYmIGUgIT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGUpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICB0KG4sIGUpO1xuICAgIGZ1bmN0aW9uIHIoKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gbjtcbiAgICB9XG4gICAgbi5wcm90b3R5cGUgPSBlID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShlKSA6IChyLnByb3RvdHlwZSA9IGUucHJvdG90eXBlLCBuZXcgcigpKTtcbiAgfTtcbn0oKSwgTHIgPSBmdW5jdGlvbih0KSB7XG4gIFRyKG4sIHQpO1xuICBmdW5jdGlvbiBuKGUsIHIpIHtcbiAgICB2YXIgYSA9IHRoaXMuY29uc3RydWN0b3IsIGkgPSB0LmNhbGwodGhpcywgZSwgcikgfHwgdGhpcztcbiAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGksIFwibmFtZVwiLCB7XG4gICAgICB2YWx1ZTogYS5uYW1lLFxuICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICBjb25maWd1cmFibGU6ICEwXG4gICAgfSksIE9yKGksIGEucHJvdG90eXBlKSwgTnIoaSksIGk7XG4gIH1cbiAgcmV0dXJuIG47XG59KEVycm9yKTtcbmNsYXNzICR0IGV4dGVuZHMgTHIge1xuICBjb25zdHJ1Y3RvcihuKSB7XG4gICAgY29uc3QgZSA9IGAke24ubWVzc2FnZX1gO1xuICAgIHN1cGVyKGUpLCB0aGlzLnJlc3BvbnNlID0gbjtcbiAgfVxuICBnZXQgb3JpZ2luYWxFcnJvck1lc3NhZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzcG9uc2UubWVzc2FnZTtcbiAgfVxufVxuY29uc3QgVSA9IGFzeW5jICh0LCBuLCBlKSA9PiB7XG4gIGNvbnN0IHIgPSBhd2FpdCB0LnNlbmQobik7XG4gIGlmIChqcihyKSlcbiAgICB0aHJvdyBuZXcgJHQocik7XG4gIGlmICghVXIociwgZSkpIHtcbiAgICBjb25zdCBhID0gZS5zYWZlUGFyc2Uocik7XG4gICAgdGhyb3cgYS5zdWNjZXNzID8gbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZVwiKSA6IChjb25zb2xlLmVycm9yKFwiT0pTIHF1ZXJ5QXBpIGdvdCBhIHNjaGVtYSBlcnJvci4gRXhwZWN0ZWQgc2NoZW1hOlwiLCBlLCBcIkFjdHVhbDpcIiwgciksIGEuZXJyb3IpO1xuICB9XG4gIHJldHVybiByO1xufSwgVXIgPSAodCwgbikgPT4gbi5zYWZlUGFyc2UodCkuc3VjY2VzcywganIgPSAodCkgPT4geXIuc2FmZVBhcnNlKHQpLnN1Y2Nlc3MsIHhyID0gYXN5bmMgKHQsIG4pID0+IGF3YWl0IFUodCwgeyB0eXBlOiBcImdldF9jaGVja291dF9wcmV2aWV3XCIsIHBheWxvYWQ6IG4gfSwgTHQpLCBNID0gYXN5bmMgKHQpID0+IGF3YWl0IFUodCwgeyB0eXBlOiBcImdldF9wcmVmaWxsXCIsIHBheWxvYWQ6IHt9IH0sIFV0KSwgaGUgPSBhc3luYyAodCwgbikgPT4gYXdhaXQgVSh0LCB7IHR5cGU6IFwidjJfc3RhcnRfcGF5bWVudF9mbG93XCIsIHBheWxvYWQ6IG4gfSwgeHQpLCAkciA9IGFzeW5jICh0LCBuKSA9PiBhd2FpdCBVKHQsIHsgdHlwZTogXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX2NjXCIsIHBheWxvYWQ6IG4gfSwgUnIpLCB6ciA9IGFzeW5jICh0LCBuKSA9PiBhd2FpdCBVKHQsIHsgdHlwZTogXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX3ByXCIsIHBheWxvYWQ6IG4gfSwgeHQpLCBHID0gYXN5bmMgKHQsIG4pID0+IGF3YWl0IFUodCwgeyB0eXBlOiBcImNvbmZpcm1fcGF5bWVudF9mbG93XCIsIHBheWxvYWQ6IG4gfSwgZXIpLCBHciA9IGFzeW5jICh0LCBuKSA9PiBhd2FpdCBVKHQsIHsgdHlwZTogXCJmaW5hbGl6ZV9zZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkOiBuIH0sIGp0KSwgVnIgPSBhc3luYyAodCwgbikgPT4gYXdhaXQgVShcbiAgdCxcbiAgeyB0eXBlOiBcImNoZWNrX2lmX3BvcHVwX3dpbmRvd192ZXJpZmllZFwiLCBwYXlsb2FkOiBuIH0sXG4gIFhuXG4pLCBxciA9IGFzeW5jICh0LCBuLCBlKSA9PiB7XG4gIGNvbnN0IHIgPSBhd2FpdCB4cih0LCB7XG4gICAgc2VjdXJlX3Rva2VuOiBuLFxuICAgIHByb21vdGlvbl9jb2RlOiBlXG4gIH0pLCBhID0gbmV3IFNldChyLnByZXZpZXcuaW52b2ljZXMubWFwKChjKSA9PiBjLmN1cnJlbmN5KSk7XG4gIGlmIChhLnNpemUgIT09IDEpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBleGFjdGx5IG9uZSBjdXJyZW5jeSwgZ290ICR7YS5zaXplfWApO1xuICBjb25zdCBpID0gYS52YWx1ZXMoKS5uZXh0KCkudmFsdWUgPz8gXCJ1c2RcIiwgcyA9IERyKHIucHJldmlldy5pbnZvaWNlcy5tYXAoKGMpID0+IGMucmVtYWluaW5nX2Ftb3VudF9hdG9tKSk7XG4gIHJldHVybiB7XG4gICAgY3VycmVuY3k6IGksXG4gICAgYW1vdW50QXRvbTogc1xuICB9O1xufSwgX2UgPSBhc3luYyAodCwgbiwgZSwgcikgPT4ge1xuICBpZiAoZSlcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiAwLCBjdXJyZW5jeTogXCJ1c2RcIiB9O1xuICB7XG4gICAgciA9IHIgfHwgdm9pZCAwO1xuICAgIGNvbnN0IGEgPSBhd2FpdCBxcih0LCBuLCByKTtcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiBhLmFtb3VudEF0b20sIGN1cnJlbmN5OiBhLmN1cnJlbmN5IH07XG4gIH1cbn0sIFlyID0gYXN5bmMgKHQsIG4pID0+IHtcbiAgaWYgKHQuc2l6ZSA9PT0gMClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBDREUgY29ubmVjdGlvbnMgZm91bmRcIik7XG4gIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBBcnJheS5mcm9tKHQudmFsdWVzKCkpLm1hcChcbiAgICAgIChyKSA9PiBVKHIsIHsgdHlwZTogXCJ0b2tlbml6ZV9jYXJkXCIsIHBheWxvYWQ6IG4gfSwgWm4pXG4gICAgKVxuICApO1xufSwgdXQgPSBhc3luYyAodCwgbikgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBVKHQsIHsgdHlwZTogXCJjaGVja291dF9jYXJkX2VsZW1lbnRzXCIsIHBheWxvYWQ6IG4gfSwgdHQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgY29uc29sZS5lcnJvcihcIltjZGUtY2xpZW50XSBFcnJvciBkdXJpbmcgY2hlY2tvdXRDYXJkRWxlbWVudHM6XCIsIGUsIEpTT04uc3RyaW5naWZ5KGUpKSwgZTtcbiAgfVxufSwgS3IgPSBhc3luYyAodCwgbikgPT4gYXdhaXQgVSh0LCB7IHR5cGU6IFwic2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZDogbiB9LCBqdCksIHJ0ID0gYXN5bmMgKHQsIG4pID0+IGF3YWl0IFUodCwgeyB0eXBlOiBcImNoZWNrb3V0XCIsIHBheWxvYWQ6IG4gfSwgdHQpLCB6dCA9IDFlMywgV3IgPSBhc3luYyAodCwgbikgPT4ge1xuICBjb25zb2xlLmxvZyhuKTtcbiAgY29uc3QgciA9IGF3YWl0IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWU6IHQsXG4gICAgZGVidWc6ICEwLFxuICAgIHRpbWVvdXQ6IHp0LFxuICAgIGNoaWxkT3JpZ2luOiBcIipcIlxuICAgIC8vIFRPRE86IHVzZSB3aXRoIHByb3BlciBjaGlsZE9yaWdpblxuICB9KS5wcm9taXNlLCBhID0gYXdhaXQgVShyLCB7IHR5cGU6IFwicGluZy0zZHMtc3RhdHVzXCIgfSwgQm4pO1xuICByZXR1cm4gY29uc29sZS5sb2coXCLwn5+iIENERSBjb25uZWN0aW9uIHN1Y2Nlc3NmdWwhIFN0b3BwaW5nIHBvbGxpbmcuLi4gUmVzdWx0OlwiLCBhKSwgYTtcbn0sIEd0ID0gYXN5bmMgKHQsIG4pID0+IGF3YWl0IFUodCwgeyB0eXBlOiBcInByZXBhcmVfcGF5bWVudF9mbG93XCIsIHBheWxvYWQ6IG4gfSwgTXIpLCBWdCA9IGFzeW5jICh0LCBuKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIChhd2FpdCBVKFxuICAgICAgdCxcbiAgICAgIHsgdHlwZTogXCJnZXRfc3RhbmRhcmRpemVkX2Vycm9yX2NvZGVcIiwgcGF5bG9hZDogeyBtZXNzYWdlOiBuIH0gfSxcbiAgICAgIEZyXG4gICAgKSkuZXJyb3JfY29kZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBjb25zb2xlLmVycm9yKFwiW2NkZS1jbGllbnRdIEVycm9yIGR1cmluZyBnZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGU6XCIsIEooZSkpLCBcIlBBWU1FTlRfRkFJTEVEX0dFTkVSSUNcIjtcbiAgfVxufTtcbmZ1bmN0aW9uIFVlKHQpIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgY2FzZTogJHt0fWApO1xufVxuY29uc3QgZWUgPSAodCkgPT4gYXN5bmMgKG4pID0+IHtcbiAgdmFyIGUsIHI7XG4gIHRyeSB7XG4gICAgKHIgPSAoZSA9IG4uZm9ybUNhbGxiYWNrcy5nZXQpLm9uQ2hlY2tvdXRTdGFydGVkKSA9PSBudWxsIHx8IHIuY2FsbChlKTtcbiAgICBjb25zdCBhID0gYXdhaXQgdChuKTtcbiAgICBpZiAoYS5tb2RlID09PSBcInNldHVwXCIpXG4gICAgICBuLmZvcm1DYWxsYmFja3MuZ2V0Lm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyhhLnJlc3VsdC5wYXltZW50X21ldGhvZF9pZCk7XG4gICAgZWxzZSBpZiAoYS5tb2RlID09PSBcImNoZWNrb3V0XCIpXG4gICAgICBuLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRTdWNjZXNzKFxuICAgICAgICBhLnJlc3VsdC5pbnZvaWNlX3VybHMsXG4gICAgICAgIGEucmVzdWx0LnN1YnNjcmlwdGlvbl9pZHMsXG4gICAgICAgIGEucmVzdWx0LmN1c3RvbWVyX2lkXG4gICAgICApO1xuICAgIGVsc2VcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIG1vZGU6ICR7YX1gKTtcbiAgfSBjYXRjaCAoYSkge1xuICAgIGNvbnN0IGkgPSBKKGEpLCBzID0gYXdhaXQgVnQobi5jb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sIGkpO1xuICAgIG4uZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKGksIHMpO1xuICB9XG59LCBzZSA9ICh0KSA9PiBhc3luYyAobikgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCB0KG4pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc3QgeyBlcnJfXzogciB9ID0gUChcImluaXQtZXJyb3ItY2F0Y2hlclwiKSwgYSA9IEooZSksIGkgPSBhd2FpdCBWdChuLmNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwgYSk7XG4gICAgcmV0dXJuIHIoaSwgYSwgZSksIHsgaXNBdmFpbGFibGU6ICExLCByZWFzb246IGEsIGVycm9yQ29kZTogaSB9O1xuICB9XG59LCBQID0gKHQpID0+IHtcbiAgY29uc3QgbiA9ICguLi5yKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUubG9nKGAke0FlLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7QWUuYm9sZC5ncmF5KGAke3R9YCl9XHRgLCAuLi5yKTtcbiAgfSwgZSA9ICguLi5yKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUud2FybihgJHtBZS5yZWQuYm9sZChcIm9qcy9cIil9JHtBZS5ib2xkLmdyYXkoYCR7dH1gKX1cdGAsIC4uLnIpO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZzogbixcbiAgICBlcnI6IGUsXG4gICAgbG9nX186IG4sXG4gICAgZXJyX186IGVcbiAgfTtcbn0sIHsgbG9nX186IHZpLCBlcnJfXzogSHIgfSA9IFAoXCJjb21tb25cIiksIFNlID0gKHQpID0+IHtcbiAgaWYgKHQucGF5bWVudF9tZXRob2RzLmxlbmd0aCAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIHBheW1lbnQgbWV0aG9kLCBnb3QgJHt0LnBheW1lbnRfbWV0aG9kcy5sZW5ndGh9YCk7XG4gIHJldHVybiB7IHBheW1lbnRfbWV0aG9kX2lkOiB0LnBheW1lbnRfbWV0aG9kc1swXS5pZCB9O1xufSwgWSA9ICh0LCBuKSA9PiB7XG4gIGNvbnN0IGUgPSB0LmZpbmQoKHIpID0+IG4uc2FmZVBhcnNlKHIpLnN1Y2Nlc3MpO1xuICBpZiAoIWUpXG4gICAgdGhyb3cgSHIoXCJObyBDUE1zIGZvdW5kIGZvciBtb2RlbC4gQWxsIG1vZGVsczpcIiwgdCksIG5ldyBFcnJvcihcIk5vIENQTXMgZm91bmQgZm9yIG1vZGVsXCIpO1xuICByZXR1cm4gbi5wYXJzZShlKTtcbn0sIEpyID0gKHQpID0+ICh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogdC5lbWFpbCxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICB6aXBfY29kZTogdC56aXBDb2RlLFxuICAgIGNvdW50cnk6IHQuY291bnRyeVxuICB9LFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogdC5maXJzdE5hbWUsXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHQubGFzdE5hbWVcbn0pLCBqZSA9IGFzeW5jICh0KSA9PiB7XG4gIGNvbnN0IHsgbG9nX186IG4gfSA9IFAodC5sb2dQcmVmaXgpLCBlID0gYXdhaXQgTSh0LmFueUNkZUNvbm5lY3Rpb24pLCByID0gU2UodC5jb25maXJtUmVzdWx0KTtcbiAgaWYgKGUubW9kZSA9PT0gXCJzZXR1cFwiKVxuICAgIHJldHVybiBuKFwiU2V0dGluZyB1cCBwYXltZW50IG1ldGhvZC4uLlwiKSwgeyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogYXdhaXQgR3IodC5hbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IGUudG9rZW4sXG4gICAgICBwbV9pZDogci5wYXltZW50X21ldGhvZF9pZFxuICAgIH0pIH07XG4gIHtcbiAgICBuKFwiRG9pbmcgY2hlY2tvdXQuLi5cIik7XG4gICAgY29uc3QgYSA9IHtcbiAgICAgIHNlY3VyZV90b2tlbjogZS50b2tlbixcbiAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgcHJvdmlkZXJfdHlwZTogdC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICAgIH0sXG4gICAgICBjdXN0b21lcl9lbWFpbDogdC5yZXF1aXJlZEZvcm1GaWVsZHNbcC5FTUFJTF0sXG4gICAgICBjdXN0b21lcl96aXBfY29kZTogdC5yZXF1aXJlZEZvcm1GaWVsZHNbcC5aSVBfQ09ERV0sXG4gICAgICBjdXN0b21lcl9jb3VudHJ5OiB0LnJlcXVpcmVkRm9ybUZpZWxkc1twLkNPVU5UUlldLFxuICAgICAgcHJvbW90aW9uX2NvZGU6IHQucmVxdWlyZWRGb3JtRmllbGRzW3AuUFJPTU9USU9OX0NPREVdLFxuICAgICAgbGluZV9pdGVtczogZS5saW5lX2l0ZW1zLFxuICAgICAgdG90YWxfYW1vdW50X2F0b206IGUuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICBjYW5jZWxfYXRfZW5kOiAhMSxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHVzZV9jb25maXJtZWRfcG1faWQ6IHIucGF5bWVudF9tZXRob2RfaWRcbiAgICB9O1xuICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCBydCh0LmFueUNkZUNvbm5lY3Rpb24sIGEpIH07XG4gIH1cbn0sIHsgbG9nX186IHF0LCBlcnJfXzogWXQgfSA9IFAoXCJjb21tb24tY2NcIiksIHRlID0gKHQsIG4sIGUpID0+IHtcbiAgaWYgKGUpIHtcbiAgICBxdChgUmVjZWl2ZWQgZGVmYXVsdCBmaWVsZCB2YWx1ZXM6ICR7SlNPTi5zdHJpbmdpZnkoZSl9YCk7XG4gICAgZm9yIChjb25zdCBbYSwgaV0gb2YgT2JqZWN0LmVudHJpZXMoZSkpXG4gICAgICB0W2FdIHx8ICh0W2FdID0gaSk7XG4gIH1cbiAgY29uc3QgciA9IENlLnNhZmVQYXJzZSh0KTtcbiAgaWYgKCFyLnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBhID0gci5lcnJvci5mb3JtYXQoKSwgaSA9IHRyKGEpO1xuICAgIGZvciAoY29uc3QgW3MsIGNdIG9mIE9iamVjdC5lbnRyaWVzKGkpKVxuICAgICAgbihzLCBjLCBzKTtcbiAgICB0aHJvdyBZdChcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIsIGkpLCBuZXcgRXJyb3IoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgaW4gbm9uLUNERSBmb3JtIGZpZWxkc1wiKTtcbiAgfVxuICByZXR1cm4gci5kYXRhO1xufSwgWnIgPSAodCwgbikgPT4ge1xuICBmb3IgKGNvbnN0IGUgb2YgdClcbiAgICBpZiAoZS5zdWNjZXNzID09PSAhMSlcbiAgICAgIHRocm93IGUuZXJyb3JzLmZvckVhY2goKHIpID0+IHtcbiAgICAgICAgY29uc3QgYSA9IE10LnNhZmVQYXJzZShyLmVsZW1lbnRUeXBlKTtcbiAgICAgICAgaWYgKCFhLnN1Y2Nlc3MpXG4gICAgICAgICAgWXQoYFVua25vd24gZmllbGQgbmFtZSBpbiBvblZhbGlkYXRpb25FcnJvcjogJHtyLmVsZW1lbnRUeXBlfS4gRXJyb3Igb2JqZWN0OmAsIHIpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBjb25zdCBpID0gYS5kYXRhO1xuICAgICAgICAgIG4oaSwgci5lcnJvcnMpO1xuICAgICAgICB9XG4gICAgICB9KSwgcXQoYEVycm9yIHRva2VuaXppbmcgY2FyZDogZ290IHZhbGlkYXRpb24gZXJyb3JzOiAke0pTT04uc3RyaW5naWZ5KGUuZXJyb3JzKX1gKSwgbmV3IEVycm9yKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIHdoaWxlIHRva2VuaXppbmcgY2FyZFwiKTtcbn0sIGR0ID0gXCJvanMtc3RyaXBlLWxpbmstYnRuXCIsIHsgbG9nX186IFIsIGVycl9fOiBCciB9ID0gUChcInN0cmlwZS1saW5rXCIpLCBRciA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJzdHJpcGVfbGlua1wiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pLCBYciA9IHokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpLCBlbyA9IHNlKFxuICBhc3luYyAoeyBjb250ZXh0OiB0LCBmb3JtQ2FsbGJhY2tzOiBuIH0pID0+IHtcbiAgICBjb25zdCBlID0gdC5jdXN0b21Jbml0UGFyYW1zLnN0cmlwZUxpbms7XG4gICAgUihcIkNoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgU3RyaXBlIExpbmsuLi5cIik7XG4gICAgY29uc3QgciA9IFkodC5jaGVja291dFBheW1lbnRNZXRob2RzLCBRcik7XG4gICAgUihcIlN0YXJ0aW5nIHN0cmlwZSBsaW5rIGZsb3cuLi5cIik7XG4gICAgY29uc3QgYSA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgaSA9IGF3YWl0IE0oYSksIHMgPSBpLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBSKFwiQ3JlYXRpbmcgc3RyaXBlIGVsZW1lbnRzLi4uXCIpO1xuICAgIGNvbnN0IGMgPSBhd2FpdCBfZShhLCBpLnRva2VuLCBzLCB2b2lkIDApLCB7IGVsZW1lbnRzOiBsLCBzdHJpcGU6IHUgfSA9IGF3YWl0IGFyKHIubWV0YWRhdGEuc3RyaXBlX3BrLCB7XG4gICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICBjdXJyZW5jeTogYy5jdXJyZW5jeSxcbiAgICAgIHNldHVwX2Z1dHVyZV91c2FnZTogXCJvZmZfc2Vzc2lvblwiLFxuICAgICAgcGF5bWVudE1ldGhvZENyZWF0aW9uOiBcIm1hbnVhbFwiXG4gICAgfSk7XG4gICAgUihcIkNyZWF0aW5nIGV4cHJlc3MgY2hlY2tvdXQuLi5cIik7XG4gICAgY29uc3QgZCA9IGwuY3JlYXRlKFwiZXhwcmVzc0NoZWNrb3V0XCIsIHtcbiAgICAgIGJ1dHRvbkhlaWdodDogZSA9PSBudWxsID8gdm9pZCAwIDogZS5idXR0b25IZWlnaHQsXG4gICAgICBwYXltZW50TWV0aG9kczoge1xuICAgICAgICBhbWF6b25QYXk6IFwibmV2ZXJcIixcbiAgICAgICAgYXBwbGVQYXk6IFwibmV2ZXJcIixcbiAgICAgICAgZ29vZ2xlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIHBheXBhbDogXCJuZXZlclwiXG4gICAgICB9XG4gICAgfSksIGYgPSAoKSA9PiB7XG4gICAgICBkLm1vdW50KGAjJHtkdH1gKTtcbiAgICB9LCBoID0gKCkgPT4ge1xuICAgICAgZC51bm1vdW50KCk7XG4gICAgfTtcbiAgICByZXR1cm4gZSAhPSBudWxsICYmIGUuZG9Ob3RNb3VudE9uSW5pdCA/IFIoXCJOT1QgbW91bnRpbmcgc3RyaXBlIGxpbmsgYnV0dG9uIChkb05vdE1vdW50T25Jbml0IGlzIHRydWUpXCIpIDogKFIoXCJNb3VudGluZyBzdHJpcGUgbGluayBidXR0b24uLi5cIiksIGYoKSksIGQub24oXCJjbGlja1wiLCBhc3luYyAoeSkgPT4ge1xuICAgICAgaWYgKFIoXCJTdHJpcGUgTGluayBidXR0b24gY2xpY2tlZFwiKSwgZSAhPSBudWxsICYmIGUub3ZlcnJpZGVMaW5rU3VibWl0ICYmICFhd2FpdCBlLm92ZXJyaWRlTGlua1N1Ym1pdCgpKSB7XG4gICAgICAgIFIoXCJTdHJpcGUgTGluayBzdWJtaXQgYWJvcnRlZCBieSBvdmVycmlkZUxpbmtTdWJtaXRcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHkucmVzb2x2ZSgpO1xuICAgIH0pLCBkLm9uKFwiY29uZmlybVwiLCBhc3luYyAoeSkgPT4ge1xuICAgICAgUihcIlN0cmlwZSBMaW5rIHdpbmRvdyBjb25maXJtZWRcIiwgeSk7XG4gICAgICBjb25zdCBtID0gYXdhaXQgdS5jcmVhdGVQYXltZW50TWV0aG9kKHtcbiAgICAgICAgZWxlbWVudHM6IGwsXG4gICAgICAgIHBhcmFtczoge1xuICAgICAgICAgIGJpbGxpbmdfZGV0YWlsczogeS5iaWxsaW5nRGV0YWlsc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIG0uZXJyb3IgPyAoQnIoXCJlcnJvclwiLCBtLmVycm9yKSwgbi5nZXQub25DaGVja291dEVycm9yKG0uZXJyb3IubWVzc2FnZSA/PyBcIlN0cmlwZSBMaW5rIHVua25vd24gZXJyb3JcIikpIDogKFIoXCJwYXltZW50TWV0aG9kXCIsIG0ucGF5bWVudE1ldGhvZCksIEEuc3RyaXBlTGluay5ydW4oe1xuICAgICAgICBjb250ZXh0OiB0LFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IEgodC5mb3JtRGl2KSxcbiAgICAgICAgZm9ybUNhbGxiYWNrczogbixcbiAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHN0cmlwZVBNOiBtLnBheW1lbnRNZXRob2QgfSxcbiAgICAgICAgaW5pdFJlc3VsdDogeyBpc0F2YWlsYWJsZTogITAgfVxuICAgICAgfSkpO1xuICAgIH0pLCB7XG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBjb250cm9sbGVyOiB7XG4gICAgICAgIG1vdW50QnV0dG9uOiBmLFxuICAgICAgICBkaXNtb3VudEJ1dHRvbjogaCxcbiAgICAgICAgd2FpdEZvckJ1dHRvblRvTW91bnQ6IGFzeW5jICgpID0+IGF3YWl0IHJvKGR0KVxuICAgICAgfVxuICAgIH07XG4gIH1cbiksIHRvID0gZWUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICBmb3JtQ2FsbGJhY2tzOiByLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgUihcIlJ1bm5pbmcgU3RyaXBlIExpbmsgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBpID0gdC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIFIoXCJNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uXCIpO1xuICAgIGNvbnN0IHMgPSBubyhlLCBhLnN0cmlwZVBNKSwgYyA9IHRlKHMsIHIuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBSKFwiU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGwgPSBhd2FpdCBoZShpLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBuLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IG4sXG4gICAgICB0aGVpcl9leGlzdGluZ19wbV9pZDogYS5zdHJpcGVQTS5pZCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogY1twLkVNQUlMXSxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBjW3AuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBjW3AuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiB7XG4gICAgICAgIHppcF9jb2RlOiBjW3AuWklQX0NPREVdLFxuICAgICAgICBjb3VudHJ5OiBjW3AuQ09VTlRSWV1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBSKFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGwpO1xuICAgIGNvbnN0IGQgPSBYci5wYXJzZShsLnJlcXVpcmVkX3VzZXJfYWN0aW9ucylbMF0ub3VyX2V4aXN0aW5nX3BtX2lkLCBmID0gYXdhaXQgTShpKTtcbiAgICBpZiAoZi5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIFIoXCJEb2luZyBwYXltZW50IHNldHVwLi4uXCIpO1xuICAgICAgY29uc3QgaCA9IGF3YWl0IEcoaSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGYudG9rZW4sXG4gICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBkXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBTZShoKSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBSKFwiRG9pbmcgY2hlY2tvdXQuLi5cIik7XG4gICAgICBjb25zdCBoID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGYudG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiBuLnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBjW3AuRU1BSUxdLFxuICAgICAgICBjdXN0b21lcl96aXBfY29kZTogY1twLlpJUF9DT0RFXSxcbiAgICAgICAgY3VzdG9tZXJfY291bnRyeTogY1twLkNPVU5UUlldLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogY1twLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgbGluZV9pdGVtczogZi5saW5lX2l0ZW1zLFxuICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogZi5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgY2FuY2VsX2F0X2VuZDogITEsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBuXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IGF3YWl0IHJ0KGksIGgpIH07XG4gICAgfVxuICB9XG4pLCBubyA9ICh0LCBuKSA9PiB7XG4gIHZhciBzLCBjLCBsLCB1LCBkO1xuICBjb25zdCBlID0geyAuLi50IH0sIFtyLCAuLi5hXSA9ICgoYyA9IChzID0gbi5iaWxsaW5nX2RldGFpbHMubmFtZSkgPT0gbnVsbCA/IHZvaWQgMCA6IHMudHJpbSgpKSA9PSBudWxsID8gdm9pZCAwIDogYy5zcGxpdCgvXFxzKy8pKSA/PyBbXSwgaSA9IGEuam9pbihcIiBcIikgfHwgdm9pZCAwO1xuICByZXR1cm4gZVtwLkZJUlNUX05BTUVdID0gZVtwLkZJUlNUX05BTUVdIHx8IHIgfHwgXCJfT1BfVU5LTk9XTlwiLCBlW3AuTEFTVF9OQU1FXSA9IGVbcC5MQVNUX05BTUVdIHx8IGkgfHwgXCJfT1BfVU5LTk9XTlwiLCBlW3AuRU1BSUxdID0gZVtwLkVNQUlMXSB8fCAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAoKGwgPSBuLmxpbmspID09IG51bGwgPyB2b2lkIDAgOiBsLmVtYWlsKSB8fCBuLmJpbGxpbmdfZGV0YWlscy5lbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCIsIGVbcC5aSVBfQ09ERV0gPSBlW3AuWklQX0NPREVdIHx8ICgodSA9IG4uYmlsbGluZ19kZXRhaWxzLmFkZHJlc3MpID09IG51bGwgPyB2b2lkIDAgOiB1LnBvc3RhbF9jb2RlKSB8fCBcIjAwMDAwXCIsIGVbcC5DT1VOVFJZXSA9IGVbcC5DT1VOVFJZXSB8fCAoKGQgPSBuLmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzKSA9PSBudWxsID8gdm9pZCAwIDogZC5jb3VudHJ5KSB8fCBcIlVTXCIsIFIoXCJGaW5hbCBmb3JtIGlucHV0czpcIiwgZSksIGU7XG59LCBybyA9ICh0KSA9PiBuZXcgUHJvbWlzZSgobikgPT4ge1xuICBjb25zdCBlID0gKCkgPT4ge1xuICAgIGNvbnN0IHIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0KTtcbiAgICByID8gbihyKSA6IHJlcXVlc3RBbmltYXRpb25GcmFtZShlKTtcbiAgfTtcbiAgZSgpO1xufSksIG9vID0gXCJAa2V5ZnJhbWVzIGZhZGVJbnswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC45KX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEpfX0ub3ZlcmxheXtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt6LWluZGV4OjIxNDc0ODM2NDghaW1wb3J0YW50O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwMDA4MH0uY29udGFpbmVye21heC13aWR0aDo1MDBweDttYXgtaGVpZ2h0OjYwMHB4O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZC1jb2xvcjojZmZmO3Bvc2l0aW9uOnJlbGF0aXZlO2FuaW1hdGlvbjpmYWRlSW4gLjNzIGVhc2Utb3V0fS5mcmFtZSwjYWR5ZW4tY29udGFpbmVyLCNhZHllbi1jb250YWluZXI+KnttYXgtd2lkdGg6NTAwcHg7bWF4LWhlaWdodDo2MDBweDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JvcmRlcjpub25lfS5jYW5jZWwtYnV0dG9ue3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOm5vbmU7Zm9udC1zaXplOjFyZW07Y29sb3I6I2ZmZjtjdXJzb3I6cG9pbnRlcjt0b3A6LTEuNXJlbTtwYWRkaW5nOjA7cmlnaHQ6MH1cIiwgS3QgPSAodCkgPT4ge1xuICBjb25zdCBuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICBuLmlubmVySFRNTCA9IGBcbiAgICA8c3R5bGU+XG4gICAgICAke29vfVxuICAgIDwvc3R5bGU+XG4gICAgPGRpdiBjbGFzcz1cIm92ZXJsYXlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idXR0b25cIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGlmcmFtZSBzcmM9XCIke3R9XCIgY2xhc3M9XCJmcmFtZVwiIGlkPVwidGhyZWUtZHMtaWZyYW1lXCIgdGl0bGU9XCIzRCBTZWN1cmUgdmVyaWZpY2F0aW9uXCIgYWxsb3c9XCJwYXltZW50XCI+PC9pZnJhbWU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYDtcbiAgY29uc3QgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksIHIgPSBlLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pO1xuICByLmFwcGVuZENoaWxkKG4uY29udGVudC5jbG9uZU5vZGUoITApKTtcbiAgY29uc3QgYSA9IHIucXVlcnlTZWxlY3RvcihcIiN0aHJlZS1kcy1pZnJhbWVcIiksIGkgPSByLnF1ZXJ5U2VsZWN0b3IoXCIuY2FuY2VsLWJ1dHRvblwiKTtcbiAgcmV0dXJuIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZSksIHsgaG9zdDogZSwgaWZyYW1lOiBhLCBjYW5jZWxCdXR0b246IGkgfTtcbn07XG5mdW5jdGlvbiBhbyh0LCBuLCBlKSB7XG4gIGNvbnN0IHIgPSBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGkgPSBhd2FpdCBXcih0LCBlKTtcbiAgICAgIGkgJiYgKGNsZWFySW50ZXJ2YWwoYSksIG4oaSkpO1xuICAgIH0gY2F0Y2gge1xuICAgIH1cbiAgfTtcbiAgcigpO1xuICBjb25zdCBhID0gc2V0SW50ZXJ2YWwociwgenQpO1xuICByZXR1cm4gYTtcbn1cbmZ1bmN0aW9uIGlvKHtcbiAgZWxlbWVudHM6IHQsXG4gIHBvbGxpbmdJbnRlcnZhbDogbixcbiAgcmVzb2x2ZTogZVxufSkge1xuICBjb25zdCByID0gKCkgPT4ge1xuICAgIGNsZWFySW50ZXJ2YWwobiksIHQuaG9zdC5yZW1vdmUoKSwgZSh7IHN0YXR1czogSS5DQU5DRUxMRUQgfSk7XG4gIH07XG4gIHJldHVybiB0LmNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgciksICgpID0+IHtcbiAgICB0LmNhbmNlbEJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgcik7XG4gIH07XG59XG5hc3luYyBmdW5jdGlvbiB4ZSh0KSB7XG4gIGNvbnN0IHsgdXJsOiBuLCBiYXNlVXJsOiBlIH0gPSB0LCByID0gS3Qobik7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgoYSkgPT4ge1xuICAgIGNvbnN0IGkgPSAobCkgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHIuaG9zdC5yZW1vdmUoKTtcbiAgICAgIH0sIDFlMyksIGEobCksIGMgPT0gbnVsbCB8fCBjKCk7XG4gICAgfSwgcyA9IGFvKHIuaWZyYW1lLCBpLCBuZXcgVVJMKGUpLm9yaWdpbiksIGMgPSBpbyh7XG4gICAgICBlbGVtZW50czogcixcbiAgICAgIHBvbGxpbmdJbnRlcnZhbDogcyxcbiAgICAgIHJlc29sdmU6IGFcbiAgICB9KTtcbiAgfSk7XG59XG5jb25zdCBXdCA9IGFzeW5jICh0KSA9PiB7XG4gIGNvbnN0IG4gPSBhd2FpdCB4ZSh0KTtcbiAgaWYgKG4uc3RhdHVzID09PSBJLkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKG4uc3RhdHVzID09PSBJLkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIHJldHVybiBuLnN0YXR1cyAhPT0gSS5TVUNDRVNTICYmIFVlKG4uc3RhdHVzKSwge1xuICAgIGhyZWY6IG4uaHJlZlxuICB9O1xufSwgc28gPSAodCwgbikgPT4ge1xuICBjb25zdCBlID0gd2luZG93Lm9wZW4obiwgXCJfYmxhbmtcIik7XG4gIGlmICghZSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dH0gcG9wdXAgd2luZG93IGJsb2NrZWQuIFBsZWFzZSBhbGxvdyBwb3B1cHMgZm9yIHRoaXMgc2l0ZS5gKTtcbiAgcmV0dXJuIGU7XG59LCBjbyA9IGFzeW5jICh0LCBuLCBlLCByKSA9PiB7XG4gIGNvbnN0IHsgZXJyX186IGEgfSA9IFAoXCJwb3B1cC12ZXJpZnlcIik7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgoaSwgcykgPT4ge1xuICAgIGNvbnN0IGMgPSBzbyh0LCByKSwgbCA9IHNldEludGVydmFsKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHUgPSBhd2FpdCBWcihuLCBlKTtcbiAgICAgICAgaWYgKHUucHJlc2VudClcbiAgICAgICAgICBjbGVhckludGVydmFsKGwpLCBjLmNsb3NlKCksIGkoeyBocmVmOiB1LmhyZWYgfSk7XG4gICAgICAgIGVsc2UgaWYgKGMuY2xvc2VkKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0fSBwYXltZW50IGNhbmNlbGxlZGApO1xuICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICBhKEoodSkpLCBjbGVhckludGVydmFsKGwpLCBzKEoodSkpO1xuICAgICAgfVxuICAgIH0sIDFlMyk7XG4gIH0pO1xufSwgeyBsb2dfXzogbG8sIGVycl9fOiBIdCB9ID0gUChcInBvY2t5dC1jY1wiKSwgdW8gPSB6JDEub2JqZWN0KHtcbiAgXCJvcC1wb2NreXQtM2RzLXVybFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtcG9ja3l0LXR4bi1ub1wiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtcG9ja3l0LXJlZi1ub1wiOiB6JDEuc3RyaW5nKClcbn0pLCBwbyA9ICh0KSA9PiB7XG4gIGNvbnN0IG4gPSB1by5zYWZlUGFyc2UodCk7XG4gIGlmICghbi5zdWNjZXNzKSB7XG4gICAgY29uc3QgZSA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgciA9IGBQb2NreXQgM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeSh0KX1gO1xuICAgIHRocm93IEh0KHIpLCBuZXcgRXJyb3IoZSk7XG4gIH1cbiAgcmV0dXJuIG4uZGF0YTtcbn0sIEp0ID0gKHQpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBuID0gbmV3IFVSTCh0ID8/IFwiXCIpLnNlYXJjaFBhcmFtcy5nZXQoXCJ2YXVsdElkXCIpO1xuICAgIGlmICghbilcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHZhdWx0IElEIGZvdW5kIGluIDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0XCIpO1xuICAgIHJldHVybiBsbyhgM0RTIHZlcmlmaWNhdGlvbiBzdWNjZXNzLiBbVmF1bHQgSUQ6ICR7bn1dYCksIG47XG4gIH0gY2F0Y2ggKG4pIHtcbiAgICBjb25zdCBlID0gXCJFcnJvciB2ZXJpZnlpbmcgM0RTIHZlcmlmaWNhdGlvbiByZXN1bHQuXCI7XG4gICAgdGhyb3cgSHQoZSwgYFJlc3VsdGluZyBVUkw6ICR7dH0uXG5FcnJvcjogJHtKKG4pfWApLCBuZXcgRXJyb3IoZSk7XG4gIH1cbn0sIG1vID0gKHQsIG4pID0+IG5ldyBVUkwodCkuc2VhcmNoUGFyYW1zLmdldChuKSwgeW8gPSAodCkgPT4gKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHRbXCJvcC1wb2NreXQtM2RzLXVybFwiXSkgIT09IHZvaWQgMCwgZm8gPSBhc3luYyAodCwgbikgPT4ge1xuICBjb25zdCBlID0gcG8obiksIHIgPSBhd2FpdCBXdCh7IHVybDogZVtcIm9wLXBvY2t5dC0zZHMtdXJsXCJdLCBiYXNlVXJsOiB0IH0pO1xuICByZXR1cm4ge1xuICAgIGV4aXN0aW5nX2NjOiB7XG4gICAgICB2YXVsdF9pZDogSnQoci5ocmVmID8/IFwiXCIpLFxuICAgICAgdHJhbnNhY3Rpb25fbm86IGVbXCJvcC1wb2NreXQtdHhuLW5vXCJdLFxuICAgICAgcmVmZXJlbmNlX25vOiBlW1wib3AtcG9ja3l0LXJlZi1ub1wiXVxuICAgIH1cbiAgfTtcbn0sIHsgbG9nX186IGhvLCBlcnJfXzogb3QgfSA9IFAoXCJhaXJ3YWxsZXgtY2NcIiksIF9vID0geiQxLm9iamVjdCh7XG4gIFwib3AtYWlyd2FsbGV4LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFpcndhbGxleC1pbml0aWFsLWludGVudC1pZFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIjogeiQxLnN0cmluZygpXG59KSwgZ28gPSAodCkgPT4ge1xuICBjb25zdCBuID0gX28uc2FmZVBhcnNlKHQpO1xuICBpZiAoIW4uc3VjY2Vzcykge1xuICAgIGNvbnN0IGUgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIHIgPSBgQWlyd2FsbGV4IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkodCl9YDtcbiAgICB0aHJvdyBvdChyKSwgbmV3IEVycm9yKGUpO1xuICB9XG4gIHJldHVybiBuLmRhdGE7XG59LCB3byA9ICh0KSA9PiAodCA9PSBudWxsID8gdm9pZCAwIDogdFtcIm9wLWFpcndhbGxleC0zZHMtdXJsXCJdKSAhPT0gdm9pZCAwLCBibyA9ICh0KSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgbiA9IG5ldyBVUkwodCA/PyBcIlwiKS5zZWFyY2hQYXJhbXMuZ2V0KFwicGF5bWVudF9pbnRlbnRfaWRcIik7XG4gICAgaWYgKCFuKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gaW50ZW50IElEIGZvdW5kIGluIEFpcndhbGxleCAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdFwiKTtcbiAgICByZXR1cm4gaG8oYEFpcndhbGxleCAzRFMgdmVyaWZpY2F0aW9uIHN1Y2Nlc3MuIFtJbnRlbnQgSUQ6ICR7bn1dYCksIG47XG4gIH0gY2F0Y2ggKG4pIHtcbiAgICBjb25zdCBlID0gXCJFcnJvciB2ZXJpZnlpbmcgQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0LlwiO1xuICAgIHRocm93IG90KGUsIGBSZXN1bHRpbmcgVVJMOiAke3R9LlxuRXJyb3I6ICR7SihuKX1gKSwgbmV3IEVycm9yKGUpO1xuICB9XG59LCB2byA9IGFzeW5jICh0LCBuKSA9PiB7XG4gIGNvbnN0IGUgPSBnbyhuKSwgciA9IGF3YWl0IFd0KHsgdXJsOiBlW1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0sIGJhc2VVcmw6IHQgfSksIGEgPSBibyhyLmhyZWYgPz8gXCJcIiksIGkgPSBlW1wib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCJdO1xuICBpZiAoaSAhPT0gYSkge1xuICAgIGNvbnN0IGMgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIGwgPSBgSW50ZW50IElEIGZyb20gY2FsbGJhY2sgKCR7YX0pIGRvZXMgbm90IG1hdGNoIHRoZSBpbml0aWFsIGludGVudCBJRCAoJHtpfSkuYDtcbiAgICB0aHJvdyBvdChsKSwgbmV3IEVycm9yKGMpO1xuICB9XG4gIHJldHVybiB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIGluaXRpYWxfaW50ZW50X2lkOiBhLFxuICAgICAgY29uc2VudF9pZDogZVtcIm9wLWFpcndhbGxleC1jb25zZW50LWlkXCJdXG4gICAgfVxuICB9O1xufSwgWnQgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIEJ0ID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pLCBFbyA9IHokMS5lbnVtKFtcInRlc3RcIiwgXCJsaXZlXCIsIFwibGl2ZS11c1wiLCBcImxpdmUtaW5cIiwgXCJsaXZlLWFwc2VcIiwgXCJsaXZlLWF1XCJdKSwgQ28gPSB6JDEuZW51bShbXG4gIFwiYXJcIixcbiAgXCJiZy1CR1wiLFxuICBcImNhLUVTXCIsXG4gIFwiY3MtQ1pcIixcbiAgXCJkYS1ES1wiLFxuICBcImRlLURFXCIsXG4gIFwiZWwtR1JcIixcbiAgXCJlbi1VU1wiLFxuICBcImVzLUVTXCIsXG4gIFwiZXQtRUVcIixcbiAgXCJmaS1GSVwiLFxuICBcImZyLUZSXCIsXG4gIFwiaHItSFJcIixcbiAgXCJodS1IVVwiLFxuICBcImlzLUlTXCIsXG4gIFwiaXQtSVRcIixcbiAgXCJqYS1KUFwiLFxuICBcImtvLUtSXCIsXG4gIFwibHQtTFRcIixcbiAgXCJsdi1MVlwiLFxuICBcIm5sLU5MXCIsXG4gIFwibm8tTk9cIixcbiAgXCJwbC1QTFwiLFxuICBcInB0LUJSXCIsXG4gIFwicHQtUFRcIixcbiAgXCJyby1ST1wiLFxuICBcInJ1LVJVXCIsXG4gIFwic2stU0tcIixcbiAgXCJzbC1TSVwiLFxuICBcInN2LVNFXCIsXG4gIFwiemgtQ05cIixcbiAgXCJ6aC1UV1wiXG5dKSwgeyBsb2dfXzogbWUsIGVycl9fOiBFZSB9ID0gUChcImFkeWVuLWNjXCIpLCBTbyA9IHokMS5vYmplY3Qoe1xuICBcIm9wLWFjY291bnQtaWRcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWNsaWVudC1rZXlcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWVudmlyb25tZW50XCI6IEVvLFxuICBcIm9wLWFkeWVuLWFjdGlvblwiOiB6JDEuc3RyaW5nKClcbn0pLCBRdCA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgUG8gPSAodCkgPT4ge1xuICBjb25zdCBuID0gU28uc2FmZVBhcnNlKHQpO1xuICBpZiAoIW4uc3VjY2VzcylcbiAgICB0aHJvdyBFZShgQWR5ZW4gM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeSh0KX1gKSwgbmV3IEVycm9yKFF0KTtcbiAgcmV0dXJuIG4uZGF0YTtcbn0sIGtvID0gKHQpID0+IEpTT04ucGFyc2UodCksIHB0ID0gKCkgPT4gXCJBZHllbldlYlwiIGluIHdpbmRvdyAmJiBcIkFkeWVuQ2hlY2tvdXRcIiBpbiB3aW5kb3cuQWR5ZW5XZWIsIEFvID0gYXN5bmMgKCkgPT4ge1xuICBtZShcIldhaXRpbmcgZm9yIEFkeWVuIFNESyB0byBsb2FkLi4uXCIpO1xuICBmb3IgKGxldCB0ID0gMDsgdCA8IDEwOyB0KyspXG4gICAgcHQoKSB8fCBhd2FpdCBudCg1MDApO1xuICBpZiAoIXB0KCkpXG4gICAgdGhyb3cgRWUoXCJBZHllbiBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKSwgbmV3IEVycm9yKFF0KTtcbiAgcmV0dXJuIG1lKFwiQWR5ZW4gU0RLIGxvYWRlZCBzdWNjZXNzZnVsbHlcIiksIHdpbmRvdy5BZHllbldlYi5BZHllbkNoZWNrb3V0O1xufSwgSW8gPSAodCkgPT4ge1xuICBjb25zdCB7IGhlYWRlcnM6IG4sIGxvY2FsZTogZSwgY291bnRyeUNvZGU6IHIsIGNvbXBvbmVudDogYSwgaG9zdDogaSwgY2FuY2VsQnV0dG9uOiBzIH0gPSB0LCBjID0ga28obltcIm9wLWFkeWVuLWFjdGlvblwiXSk7XG4gIHJldHVybiBtZShgUnVubmluZyBBZHllbiAzRFMgZmxvdyBmb3IgYWN0aW9uIHR5cGU6ICR7Yy50eXBlfWApLCBuZXcgUHJvbWlzZSgobCkgPT4ge1xuICAgIGNvbnN0IHUgPSAoKSA9PiB7XG4gICAgICBtZShcIkNsZWFuaW5nIHVwIEFkeWVuIDNEUyBmbG93XCIpLCBzLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoKSwgaS5yZW1vdmUoKTtcbiAgICB9LCBkID0gKG0pID0+IHtcbiAgICAgIEVlKFwiQXV0aGVudGljYXRpb24gZmFpbGVkLiBSZXN1bHQ6XCIsIG0pLCBsKHsgc3RhdHVzOiBJLkZBSUxVUkUsIGNsZWFudXA6IHUgfSk7XG4gICAgfSwgZiA9IChtKSA9PiB7XG4gICAgICBFZShcIkFkeWVuIGVycm9yOlwiLCBtKSwgbCh7IHN0YXR1czogSS5GQUlMVVJFLCBjbGVhbnVwOiB1IH0pO1xuICAgIH0sIGggPSAoKSA9PiB7XG4gICAgICBsKHsgc3RhdHVzOiBJLkNBTkNFTExFRCwgY2xlYW51cDogdSB9KTtcbiAgICB9O1xuICAgIHMuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGgpO1xuICAgIGNvbnN0IHkgPSAobSwgXywgdikgPT4ge1xuICAgICAgaS5yZW1vdmUoKSwgbCh7IHN0YXR1czogSS5TVUNDRVNTLCBhZGRpdGlvbmFsRGV0YWlsczogbSwgY2xlYW51cDogdSB9KTtcbiAgICB9O1xuICAgIEFvKCkudGhlbihcbiAgICAgIChtKSA9PiBtKHtcbiAgICAgICAgY2xpZW50S2V5OiBuW1wib3AtYWR5ZW4tY2xpZW50LWtleVwiXSxcbiAgICAgICAgZW52aXJvbm1lbnQ6IG5bXCJvcC1hZHllbi1lbnZpcm9ubWVudFwiXSxcbiAgICAgICAgbG9jYWxlOiBlLFxuICAgICAgICBjb3VudHJ5Q29kZTogcixcbiAgICAgICAgb25BZGRpdGlvbmFsRGV0YWlsczogeSxcbiAgICAgICAgb25QYXltZW50RmFpbGVkOiBkLFxuICAgICAgICBvbkVycm9yOiBmXG4gICAgICB9KVxuICAgICkudGhlbigobSkgPT4ge1xuICAgICAgbS5jcmVhdGVGcm9tQWN0aW9uKGMsIHsgY2hhbGxlbmdlV2luZG93U2l6ZTogXCIwM1wiIH0pLm1vdW50KGEpO1xuICAgIH0pO1xuICB9KTtcbn0sIFJvID0gKHQpID0+IHtcbiAgY29uc3QgbiA9IG5hdmlnYXRvci5sYW5ndWFnZXMgJiYgbmF2aWdhdG9yLmxhbmd1YWdlcy5sZW5ndGggPyBuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdIDogbmF2aWdhdG9yLmxhbmd1YWdlLCBlID0gdCA/PyBuLCByID0gQ28uc2FmZVBhcnNlKGUpO1xuICByZXR1cm4gci5zdWNjZXNzID8gKG1lKGBSZXNvbHZlZCBsb2NhbGU6ICR7ci5kYXRhfWApLCByLmRhdGEpIDogKEVlKGBSZXNvbHZlZCBpbnZhbGlkIGxvY2FsZTogJHtlfS4gRGVmYXVsdGluZyB0byBlbi1VUy5gKSwgXCJlbi1VU1wiKTtcbn0sIEZvID0gKHQpID0+ICh0ID09IG51bGwgPyB2b2lkIDAgOiB0W1wib3AtYWR5ZW4tYWN0aW9uXCJdKSAhPT0gdm9pZCAwLCBNbyA9IGFzeW5jICh0LCBuLCBlKSA9PiB7XG4gIGNvbnN0IHIgPSBQbyhuKSwgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGEuaWQgPSBcImFkeWVuLWNvbnRhaW5lclwiO1xuICBjb25zdCB7IGhvc3Q6IGksIGlmcmFtZTogcywgY2FuY2VsQnV0dG9uOiBjIH0gPSBLdChcImh0dHA6Ly9leGFtcGxlLmNvbVwiKTtcbiAgcy5yZXBsYWNlV2l0aChhKTtcbiAgY29uc3QgbCA9IGF3YWl0IElvKHtcbiAgICBoZWFkZXJzOiByLFxuICAgIGxvY2FsZTogUm8oZSksXG4gICAgY291bnRyeUNvZGU6IHQsXG4gICAgY29tcG9uZW50OiBhLFxuICAgIGhvc3Q6IGksXG4gICAgY2FuY2VsQnV0dG9uOiBjXG4gIH0pO1xuICBpZiAobC5jbGVhbnVwKCksIGwuc3RhdHVzID09PSBJLkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIGlmIChsLnN0YXR1cyA9PT0gSS5DQU5DRUxMRUQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChsLnN0YXR1cyA9PT0gSS5TVUNDRVNTKSB7XG4gICAgaWYgKCFsLmFkZGl0aW9uYWxEZXRhaWxzKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBzdWNjZWVkZWQgYnV0IG5vIGFkZGl0aW9uYWwgZGV0YWlscyB3ZXJlIHJldHVybmVkXCIpO1xuICAgIHJldHVybiBtZShcIjNEUyB2ZXJpZmljYXRpb24gc3VjY2VlZGVkXCIpLCB7XG4gICAgICBleGlzdGluZ19jYzoge1xuICAgICAgICBhZGRpdGlvbmFsX2RldGFpbHM6IGwuYWRkaXRpb25hbERldGFpbHMuZGF0YVxuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZVxuICAgIFVlKGwuc3RhdHVzKTtcbn0sIHsgbG9nX186IEMsIGVycl9fOiBtdCB9ID0gUChcImNvbW1vbi1jY1wiKSwgeyBsb2dfXzogeXQgfSA9IFAoXCJzdHJpcGUtY2NcIik7XG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IERvID0gZWUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICBmb3JtQ2FsbGJhY2tzOiByLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgdmFyIHU7XG4gICAgQyhcIuKUnCBSdW5uaW5nIGNvbW1vbiBDQyBmbG93Li4uXCIsIHsgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuIH0pO1xuICAgIGNvbnN0IGkgPSB0LmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBNKGkpO1xuICAgIEMoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHMgW01vZGU6ICR7cy5tb2RlfV1gKTtcbiAgICBjb25zdCBjID0gdGUoZSwgci5nZXQub25WYWxpZGF0aW9uRXJyb3IpLCBsID0ge1xuICAgICAgc2Vzc2lvbl9pZDogdC5lbGVtZW50c1Nlc3Npb25JZCxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBuLFxuICAgICAgbm9uX2NkZV9mb3JtX2ZpZWxkczogYyxcbiAgICAgIGV4dHJhX21ldGFkYXRhOiB7XG4gICAgICAgIG9yaWdpbjogd2luZG93LmxvY2F0aW9uLm9yaWdpblxuICAgICAgfVxuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgIEMoYOKUnCBUb2tlbml6aW5nIGNhcmQgaW5mbyBpbiBDREUgW1Nlc3Npb246ICR7dC5lbGVtZW50c1Nlc3Npb25JZH1dYCk7XG4gICAgICBjb25zdCBkID0gYXdhaXQgWXIoYS5jdXJyZW50Q2RlQ29ubmVjdGlvbnMsIHtcbiAgICAgICAgc2Vzc2lvbl9pZDogdC5lbGVtZW50c1Nlc3Npb25JZFxuICAgICAgfSk7XG4gICAgICBpZiAoWnIoZCwgci5nZXQub25WYWxpZGF0aW9uRXJyb3IpLCBzLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICBDKGDilJwgU2V0dGluZyB1cCBwYXltZW50IG1ldGhvZCBpbiBDREUgW1Rva2VuOiAke3MudG9rZW59XWApO1xuICAgICAgICBjb25zdCBmID0gYXdhaXQgS3IoaSwgbCk7XG4gICAgICAgIHJldHVybiBDKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7Zi5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGYgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIEMoYOKUnCBJbml0aWFsIGNoZWNrb3V0IGZsb3cuIENoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke3QuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgICBjb25zdCBmID0gYXdhaXQgdXQoaSwgbCk7XG4gICAgICAgIHJldHVybiBDKFwi4pWwIENoZWNrb3V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXCIpLCB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBmIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZCkge1xuICAgICAgaWYgKGQgaW5zdGFuY2VvZiAkdCAmJiBkLm9yaWdpbmFsRXJyb3JNZXNzYWdlLmluY2x1ZGVzKFwiM0RTX1JFUVVJUkVEXCIpKSB7XG4gICAgICAgIEMoXCLilJwgQ2FyZCByZXF1aXJlcyAzRFMsIHN0YXJ0aW5nIG5vbi1sZWdhY3kgcGF5bWVudCBmbG93XCIpLCBDKFwiUmVjZWl2ZWQgM0RTIGVycm9yIHJlc3BvbnNlIGhlYWRlcnM6XCIsIGQucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgIGNvbnN0IGYgPSB5byhkLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICBpZiAoZikge1xuICAgICAgICAgIEMoXCLilJwgUG9ja3l0IDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIFBvY2t5dCAzRFMgZmxvdy5cIik7XG4gICAgICAgICAgY29uc3QgdyA9IGF3YWl0IGZvKHQuYmFzZVVybCwgZC5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICBsLmV4dHJhX21ldGFkYXRhLnBvY2t5dCA9IHc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdvKGQucmVzcG9uc2UuaGVhZGVycykpIHtcbiAgICAgICAgICBDKFwi4pScIEFpcndhbGxleCAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBBaXJ3YWxsZXggM0RTIGZsb3cuXCIpO1xuICAgICAgICAgIGNvbnN0IHcgPSBhd2FpdCB2byh0LmJhc2VVcmwsIGQucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgbC5leHRyYV9tZXRhZGF0YS5haXJ3YWxsZXggPSB3O1xuICAgICAgICB9XG4gICAgICAgIGlmIChGbyhkLnJlc3BvbnNlLmhlYWRlcnMpKSB7XG4gICAgICAgICAgQyhcIuKUnCBBZHllbiAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBBZHllbiAzRFMgZmxvdy5cIik7XG4gICAgICAgICAgY29uc3QgdyA9IGF3YWl0IE1vKFxuICAgICAgICAgICAgZVtwLkNPVU5UUlldLFxuICAgICAgICAgICAgZC5yZXNwb25zZS5oZWFkZXJzLFxuICAgICAgICAgICAgcy5sb2NhbGVcbiAgICAgICAgICApO1xuICAgICAgICAgIGwuZXh0cmFfbWV0YWRhdGEuYWR5ZW4gPSB3O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG0gPSBhd2FpdCAkcihpLCBsKTtcbiAgICAgICAgQyhcIuKUnCBQYXltZW50IGZsb3cgcmVzdWx0OlwiLCBtKTtcbiAgICAgICAgY29uc3QgXyA9ICgodSA9IGQucmVzcG9uc2UuaGVhZGVycykgPT0gbnVsbCA/IHZvaWQgMCA6IHVbXCJvcC1zaG91bGQtdXNlLW5ldy1mbG93XCJdKSAhPT0gXCJ0cnVlXCI7XG4gICAgICAgIGYgPyBDKFwi4pScIFByZS1zdGFydCAzRFMgaXMgc3VjY2Vzc2Z1bCwgb3RoZXIgM0RTIGZsb3dzIHdpbGwgYmUgc2tpcHBlZC5cIikgOiBfID8gKEMoXCLilJwgVXNpbmcgc3RyaXBlIDNEUyBmbG93XCIpLCBhd2FpdCBVbyhtKSkgOiAoQyhcIuKUnCBVc2luZyBjb21tb24gM0RTIGZsb3dcIiksIGF3YWl0IExvKG0sIHQuYmFzZVVybCkpO1xuICAgICAgICBjb25zdCB2ID0gbS5jY19wbV9pZDtcbiAgICAgICAgaWYgKHMubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgICAgQyhg4pScIENvbmZpcm1pbmcgcGF5bWVudCBmbG93IFtjY19wbV9pZDogJHt2fV1gKTtcbiAgICAgICAgICBjb25zdCB3ID0gYXdhaXQgRyhpLCB7XG4gICAgICAgICAgICBzZWN1cmVfdG9rZW46IHMudG9rZW4sXG4gICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogdlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIEMoXCLilJwgQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0IHJlY2VpdmVkIFJlc3VsdDpcIiwgdyk7XG4gICAgICAgICAgY29uc3QgYiA9IFNlKHcpO1xuICAgICAgICAgIHJldHVybiBDKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7Yi5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGIgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBDKGDilJwgQ2hlY2tpbmcgb3V0IGFmdGVyIDNEUyBmbG93IFtGbG93OiAke18gPyBcImxlZ2FjeVwiIDogXCJuZXdcIn1dYCk7XG4gICAgICAgICAgY29uc3QgdyA9IGF3YWl0IHV0KGksIHtcbiAgICAgICAgICAgIC4uLmwsXG4gICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogdixcbiAgICAgICAgICAgIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IF9cbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gQyhcIuKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlwiKSwgeyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogdyB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aHJvdyBtdChcIuKVsCBFcnJvciBjaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERVwiKSwgbXQoZCksIGQ7XG4gICAgfVxuICB9XG4pLCBPbyA9ICh0KSA9PiB7XG4gIGNvbnN0IG4gPSB0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChlKSA9PiBlLnR5cGUgPT09IFwic3RyaXBlXzNkc1wiKTtcbiAgaWYgKCFuKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHN0cmlwZSAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICByZXR1cm4gbnIucGFyc2Uobik7XG59LCBObyA9IFtcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIiwgXCJhZHllblwiXSwgVG8gPSAodCkgPT4ge1xuICBjb25zdCBuID0gdC5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoZSkgPT4gTm8uaW5jbHVkZXMoZS50eXBlKSk7XG4gIGlmICghbilcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb21tb24gM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgcmV0dXJuIFFuLnBhcnNlKG4pO1xufSwgTG8gPSBhc3luYyAodCwgbikgPT4ge1xuICBjb25zdCBlID0gVG8odCk7XG4gIGlmIChlLnJlZGlyZWN0X3VybCA9PT0gXCIzRFNfQ09NUExFVEVcIikge1xuICAgIEMoXCLilJwgM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKTtcbiAgICByZXR1cm47XG4gIH1cbiAgQyhg4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvdyBbVVJMOiAke2UucmVkaXJlY3RfdXJsfV1gKTtcbiAgY29uc3QgeyBzdGF0dXM6IHIgfSA9IGF3YWl0IHhlKHsgdXJsOiBlLnJlZGlyZWN0X3VybCwgYmFzZVVybDogbiB9KTtcbiAgaWYgKEMoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3J9XWApLCByID09PSBJLkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKHIgPT09IEkuRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbn0sIFVvID0gYXN5bmMgKHQpID0+IHtcbiAgY29uc3QgbiA9IE9vKHQpO1xuICB5dChg4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvdyBbQ2xpZW50IFNlY3JldDogJHtuLmNsaWVudF9zZWNyZXQuc3Vic3RyaW5nKDAsIDgpfS4uLl1gKSwgYXdhaXQgbHIobiksIHl0KFwi4pWwIFN0cmlwZSAzRFMgZmxvdyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xufSwgViA9IHokMS5lbnVtKFtcInN0cmlwZVwiLCBcImFpcndhbGxleFwiLCBcImF1dGhvcml6ZV9uZXRcIl0pO1xuVi5FbnVtLnN0cmlwZTtcbmNvbnN0IHsgbG9nX186IEwsIGVycl9fOiBqbyB9ID0gUChcInN0cmlwZS1wclwiKSwgeG8gPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS51bmlvbihbeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksIHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKV0pLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSksICRvID0gc2UoXG4gIGFzeW5jICh7IGNvbnRleHQ6IHQsIGZvcm1DYWxsYmFja3M6IG4gfSkgPT4ge1xuICAgIEwoXCJDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBQUi4uLlwiKTtcbiAgICBjb25zdCBlID0gWSh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIHhvKTtcbiAgICBMKFwiSW5pdGlhbGl6aW5nIFN0cmlwZSBQUiBmbG93Li4uXCIpO1xuICAgIGNvbnN0IHIgPSB0LmFueUNkZUNvbm5lY3Rpb24sIGEgPSBhd2FpdCBNKHIpLCBpID0gYS5tb2RlID09PSBcInNldHVwXCI7XG4gICAgTChcIkdldHRpbmcgaW5pdGlhbCBwcmV2aWV3IGFtb3VudFwiKTtcbiAgICBjb25zdCBzID0gYXdhaXQgX2UociwgYS50b2tlbiwgaSwgdm9pZCAwKSwgYyA9IGF3YWl0IGlyKFxuICAgICAgZS5tZXRhZGF0YS5zdHJpcGVfcGssXG4gICAgICBzLmFtb3VudEF0b20sXG4gICAgICBzLmN1cnJlbmN5LFxuICAgICAgaVxuICAgICk7XG4gICAgTChcIkNoZWNraW5nIGlmIGNhbiBtYWtlIHBheW1lbnRcIik7XG4gICAgY29uc3QgbCA9IGF3YWl0IGMuY2FuTWFrZVBheW1lbnQoKTtcbiAgICBpZiAobCA9PT0gbnVsbClcbiAgICAgIHJldHVybiBqbyhcImNhbk1ha2VQYXltZW50IHJldHVybmVkIG51bGxcIiksIHsgaXNBdmFpbGFibGU6ICExLCByZWFzb246IFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiIH07XG4gICAgTChcIlN0cmlwZSBQUiBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gQ2FuIG1ha2UgcGF5bWVudFwiLCBsKTtcbiAgICBjb25zdCB1ID0gKGQsIGYpID0+IEEuc3RyaXBlUFIucnVuKHtcbiAgICAgIGNvbnRleHQ6IHQsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHZlKHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgZCksXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiBIKHQuZm9ybURpdiksXG4gICAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgICAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyOiBkLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBmID09IG51bGwgPyB2b2lkIDAgOiBmLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgICAgIGluaXRSZXN1bHQ6IHtcbiAgICAgICAgcHJvY2Vzc29yOiBWLkVudW0uc3RyaXBlLFxuICAgICAgICBwcjogYyxcbiAgICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgICBhdmFpbGFibGVQcm92aWRlcnM6IHsgYXBwbGVQYXk6IGwuYXBwbGVQYXksIGdvb2dsZVBheTogbC5nb29nbGVQYXkgfSxcbiAgICAgICAgc3RhcnRGbG93OiB1XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogVi5FbnVtLnN0cmlwZSxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIHByOiBjLFxuICAgICAgYXZhaWxhYmxlUHJvdmlkZXJzOiB7XG4gICAgICAgIGFwcGxlUGF5OiBsLmFwcGxlUGF5LFxuICAgICAgICBnb29nbGVQYXk6IGwuZ29vZ2xlUGF5XG4gICAgICB9LFxuICAgICAgc3RhcnRGbG93OiB1XG4gICAgfTtcbiAgfVxuKSwgem8gPSBlZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICBub25DZGVGb3JtSW5wdXRzOiBlLFxuICAgIGZvcm1DYWxsYmFja3M6IHIsXG4gICAgY3VzdG9tUGFyYW1zOiBhLFxuICAgIGluaXRSZXN1bHQ6IGlcbiAgfSkgPT4ge1xuICAgIGlmIChMKFwiUnVubmluZyBTdHJpcGUgUFIgZmxvdy4uLlwiKSwgYS5wcm92aWRlciAhPT0gbi5wcm92aWRlcilcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvdmlkZXIgbWlzbWF0Y2guIEV4cGVjdGVkICR7YS5wcm92aWRlcn0sIGdvdCAke24ucHJvdmlkZXJ9YCk7XG4gICAgY29uc3QgcyA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGkucHI7XG4gICAgaWYgKGEgIT0gbnVsbCAmJiBhLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QpIHtcbiAgICAgIGNvbnN0IG0gPSBhLm92ZXJyaWRlUGF5bWVudFJlcXVlc3Q7XG4gICAgICBMKFwiT3ZlcnJpZGluZyBQUiBhbW91bnQgd2l0aFwiLCBtKSwgVm8oYywgbS5hbW91bnQsIG0ucGVuZGluZywgbS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0KTtcbiAgICB9XG4gICAgTChcIlNob3dpbmcgUFIgZGlhbG9nLi4uXCIpLCBjLnNob3coKTtcbiAgICBjb25zdCBsID0gYXdhaXQgc3IoYyk7XG4gICAgTChcIlN0cmlwZSBQTSBhZGRlZCBldmVudDpcIiwgbCksIEwoXCJNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uXCIpO1xuICAgIGNvbnN0IHUgPSBHbyhlLCBsKSwgZCA9IHRlKHUsIHIuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBMKFwiUFIgZGlhbG9nIGZpbmlzaGVkLiBTdGFydGluZyBwYXltZW50IGZsb3cuLi5cIiwgZCk7XG4gICAgY29uc3QgZiA9IGF3YWl0IHpyKHMsIHtcbiAgICAgIGZpZWxkczogZCxcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogblxuICAgIH0pLCBoID0gcW8oZik7XG4gICAgTChcIkNvbmZpcm1pbmcgUFIgd2l0aCBTdHJpcGUuLi5cIiksIGF3YWl0IGNyKGgsIGwpO1xuICAgIGNvbnN0IHkgPSBhd2FpdCBNKHMpO1xuICAgIGlmICh5Lm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgTChcIkNvbmZpcm1pbmcgcGF5bWVudCBmbG93IGZvciBzZXR1cC4uLlwiKTtcbiAgICAgIGNvbnN0IG0gPSBhd2FpdCBHKHMsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiB5LnRva2VuXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBTZShtKSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBMKFwiUGVyZm9ybWluZyBjaGVja291dC4uLlwiKTtcbiAgICAgIGNvbnN0IG0gPSB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogeS50b2tlbixcbiAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgIHByb3ZpZGVyX3R5cGU6IG4ucHJvdmlkZXJcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfZmlyc3RfbmFtZTogZFtwLkZJUlNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9sYXN0X25hbWU6IGRbcC5MQVNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9lbWFpbDogZFtwLkVNQUlMXSxcbiAgICAgICAgY3VzdG9tZXJfemlwX2NvZGU6IGRbcC5aSVBfQ09ERV0sXG4gICAgICAgIGN1c3RvbWVyX2NvdW50cnk6IGRbcC5DT1VOVFJZXSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IGRbcC5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgIGxpbmVfaXRlbXM6IHkubGluZV9pdGVtcyxcbiAgICAgICAgdG90YWxfYW1vdW50X2F0b206IHkuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgIGNhbmNlbF9hdF9lbmQ6ICExLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogblxuICAgICAgfTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCBydChzLCBtKSB9O1xuICAgIH1cbiAgfVxuKSwgR28gPSAodCwgbikgPT4ge1xuICB2YXIgbCwgdSwgZCwgZjtcbiAgY29uc3QgZSA9IHsgLi4udCB9LCBbciwgLi4uYV0gPSAoKHUgPSAobCA9IG4ucGF5ZXJOYW1lKSA9PSBudWxsID8gdm9pZCAwIDogbC50cmltKCkpID09IG51bGwgPyB2b2lkIDAgOiB1LnNwbGl0KC9cXHMrLykpID8/IFtdLCBpID0gYS5qb2luKFwiIFwiKSB8fCB2b2lkIDAsIHMgPSAoZiA9IChkID0gbi5wYXltZW50TWV0aG9kKSA9PSBudWxsID8gdm9pZCAwIDogZC5iaWxsaW5nX2RldGFpbHMpID09IG51bGwgPyB2b2lkIDAgOiBmLmFkZHJlc3MsIGMgPSBuLnNoaXBwaW5nQWRkcmVzcztcbiAgcmV0dXJuIGVbcC5GSVJTVF9OQU1FXSA9IGVbcC5GSVJTVF9OQU1FXSB8fCByIHx8IFwiX09QX1VOS05PV05cIiwgZVtwLkxBU1RfTkFNRV0gPSBlW3AuTEFTVF9OQU1FXSB8fCBpIHx8IFwiX09QX1VOS05PV05cIiwgZVtwLkVNQUlMXSA9IGVbcC5FTUFJTF0gfHwgbi5wYXllckVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIiwgZVtwLlpJUF9DT0RFXSA9IGVbcC5aSVBfQ09ERV0gfHwgKHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMucG9zdGFsX2NvZGUpIHx8IChjID09IG51bGwgPyB2b2lkIDAgOiBjLnBvc3RhbENvZGUpIHx8IFwiMDAwMDBcIiwgZVtwLkNPVU5UUlldID0gZVtwLkNPVU5UUlldIHx8IChzID09IG51bGwgPyB2b2lkIDAgOiBzLmNvdW50cnkpIHx8IChjID09IG51bGwgPyB2b2lkIDAgOiBjLmNvdW50cnkpIHx8IFwiVVNcIiwgTChcIkZpbmFsIGZvcm0gaW5wdXRzOlwiLCBlKSwgZTtcbn0sIFZvID0gKHQsIG4sIGUsIHIpID0+IHtcbiAgdC51cGRhdGUoe1xuICAgIHRvdGFsOiB7XG4gICAgICBhbW91bnQ6IG4uYW1vdW50QXRvbSxcbiAgICAgIGxhYmVsOiBcIlRvdGFsXCIsXG4gICAgICBwZW5kaW5nOiBlXG4gICAgfSxcbiAgICBjdXJyZW5jeTogbi5jdXJyZW5jeSxcbiAgICAvLyBTdHJpcGUncyBhcHBsZVBheSBvcHRpb24gb25seSBzdXBwb3J0cyAncmVjdXJyaW5nUGF5bWVudFJlcXVlc3QnIHwgJ2RlZmVycmVkUGF5bWVudFJlcXVlc3QnIHwgJ2F1dG9tYXRpY1JlbG9hZFBheW1lbnRSZXF1ZXN0JyBvZiBuYXRpdmUgQXBwbGVQYXkgcGF5bWVudCByZXF1ZXN0XG4gICAgLy8gV2UncmUgYWNjZXB0aW5nIG5hdGl2ZSBQYXltZW50IFJlcXVlc3QgaGVyZSBmb3IgbW9yZSBjb21tb24gdHlwaW5nLlxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBzdHJpcGUgZG8gbm90IGV4cGVjdCBhZGRpdGlvbmFsIGZpZWxkc1xuICAgIGFwcGxlUGF5OiByXG4gIH0pO1xufSwgcW8gPSAodCkgPT4ge1xuICBpZiAodC5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RoICE9PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Igb2NjdXJyZWQuXG5EZXRhaWxzOiBnb3QgJHt0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGh9IHJlcXVpcmVkIHVzZXIgYWN0aW9uc2ApO1xuICByZXR1cm4gcnIucGFyc2UodC5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0pO1xufSwgeyBsb2dfXzogSywgZXJyX186IGZ0IH0gPSBQKFwicG9ja3l0LXBheXBhbFwiKSwgWW8gPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwicG9ja3l0XCIpLFxuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJwYXlwYWxcIilcbn0pO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBwYXlwYWxfaWZyYW1lX3VybDogeiQxLnN0cmluZygpLFxuICAgIHZlcmlmeV90b2tlbjogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IEtvID0gZWUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICBmb3JtQ2FsbGJhY2tzOiByLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgdmFyIGssIGNlO1xuICAgIEsoXCJSdW5uaW5nIFBvY2t5dCBQYXlwYWwgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBpID0gdC5hbnlDZGVDb25uZWN0aW9uLCBzID0gYXdhaXQgTShpKTtcbiAgICBLKFwiVmVyaWZ5aW5nIENQTS4uLlwiKTtcbiAgICBjb25zdCBjID0gWW8ucGFyc2Uobik7XG4gICAgSyhcIuKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHNcIik7XG4gICAgY29uc3QgbCA9IGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuc2V0dGluZ3MsIHUgPSB0ZShcbiAgICAgIGUsXG4gICAgICByLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIGwgPT0gbnVsbCA/IHZvaWQgMCA6IGwuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgKSwgZCA9IEpyKHUpO1xuICAgIEsoYFN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLiBNb2RlOiAke3MubW9kZX1gKTtcbiAgICBjb25zdCBmID0gdjQoKSwgaCA9IHMubW9kZSAhPT0gXCJzZXR1cFwiLCB5ID0ge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogYy5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjLFxuICAgICAgdXNlX3BheV9maXJzdF9mbG93OiBoLFxuICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBoID8ge1xuICAgICAgICAvLyBUT0RPIGFkZCBjb3Vwb24gYW5kIGNhcnQgYWRqdXN0ZWQgbGluZSBpdGVtcyBsYXRlclxuICAgICAgICBsaW5lX2l0ZW1zOiBzLmxpbmVfaXRlbXMsXG4gICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogcy5hbW91bnRfdG90YWxfYXRvbVxuICAgICAgfSA6IHZvaWQgMCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICB1c2VfcGF5cGFsX3JlZGlyZWN0X2Zsb3c6ICEhKChrID0gYSA9PSBudWxsID8gdm9pZCAwIDogYS5zZXR0aW5ncykgIT0gbnVsbCAmJiBrLnVzZVJlZGlyZWN0RmxvdyksXG4gICAgICAgIGZyb250ZW5kX3Rva2VuX2Zvcl9yZWRpcmVjdF9mbG93OiBmXG4gICAgICB9LFxuICAgICAgLi4uZFxuICAgIH0sIG0gPSBuZXcgVVJMKFwiL2FwcC9wcmUtYWN0aW9uL3N0YXJ0L1wiLCB0LmJhc2VVcmwpLnRvU3RyaW5nKCksIF8gPSBidG9hKEpTT04uc3RyaW5naWZ5KHkpKSwgdiA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgc3Q6IHMudG9rZW4sXG4gICAgICByOiBfXG4gICAgfSksIHcgPSBgJHttfT8ke3YudG9TdHJpbmcoKX1gO1xuICAgIGlmICgoY2UgPSBhID09IG51bGwgPyB2b2lkIDAgOiBhLnNldHRpbmdzKSAhPSBudWxsICYmIGNlLnVzZVJlZGlyZWN0RmxvdylcbiAgICAgIHRocm93IEsoXCJTdGFydGluZyByZWRpcmVjdCBtb2RlIGZvciBQYXlQYWwuLi5cIiksIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdywgYXdhaXQgbnQoMjAgKiAxZTMpLCBuZXcgRXJyb3IoXCJQYXlwYWwgZmxvdyB0aW1lZCBvdXQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICBLKFwiU3RhcnRpbmcgcG9wdXAgbW9kZSBmb3IgUGF5UGFsLi4uXCIpLCBLKFwiT3BlbmluZyBwYXlwYWwgaWZyYW1lLi4uXCIpO1xuICAgIGNvbnN0IGIgPSBhd2FpdCBjbyhcbiAgICAgIFwiUGF5UGFsXCIsXG4gICAgICBpLFxuICAgICAgZixcbiAgICAgIHdcbiAgICApO1xuICAgIEsoXCJQYXlwYWwgZmxvdyByZXN1bHRcIiwgYik7XG4gICAgY29uc3QgRSA9IEp0KGIuaHJlZiksIEQgPSBtbyhiLmhyZWYsIFwiY2F0dFwiKTtcbiAgICBpZiAoIUQpXG4gICAgICB0aHJvdyBmdChcIkNoZWNrb3V0IGF0dGVtcHQgSUQgbm90IGZvdW5kIGluIHJlZGlyZWN0IFVSTDpcIiwgYi5ocmVmKSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgYXR0ZW1wdCBJRCBub3QgZm91bmQgaW4gcmVkaXJlY3QgVVJMXCIpO1xuICAgIEsoYENvbmZpcm1pbmcgcGF5bWVudCBmbG93IHVzaW5nIHZhdWx0IElEICR7RX1gKTtcbiAgICBjb25zdCBOID0gYXdhaXQgRyhpLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHMudG9rZW4sXG4gICAgICB0aGVpcl9wbV9pZDogRSxcbiAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IGggPyBEIDogdm9pZCAwXG4gICAgfSk7XG4gICAgaWYgKEsoXCJDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHRcIiwgTiksIHMubW9kZSA9PT0gXCJzZXR1cFwiKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICBwYXltZW50X21ldGhvZF9pZDogTi5wYXltZW50X21ldGhvZHNbMF0uaWRcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICBpZiAoIU4ucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2UpXG4gICAgICB0aHJvdyBmdChcIkNoZWNrb3V0IGZhaWxlZCwgbm8gcGF5LWZpcnN0IHN1Y2Nlc3MgcmVzcG9uc2U6XCIsIE4pLCBuZXcgRXJyb3IoXCJDaGVja291dCBmYWlsZWQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgcmVzdWx0OiBOLnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgfTtcbiAgfVxuKSwgJGUgPSAoe1xuICBnYXRld2F5OiB0LFxuICBnYXRld2F5TWVyY2hhbnRJZDogbixcbiAgbWVyY2hhbnROYW1lOiBlLFxuICBtZXJjaGFudElkOiByLFxuICBpbml0aWFsUHJldmlldzogYSxcbiAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogaSxcbiAgcHJlZmlsbDogc1xufSkgPT4ge1xuICB2YXIgZiwgaDtcbiAgY29uc3QgYyA9ICgoZiA9IGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogZi5hbW91bnRBdG9tKSA/PyAoYSA9PSBudWxsID8gdm9pZCAwIDogYS5hbW91bnRBdG9tKSA/PyAwLCBsID0gTWF0aC5tYXgoYyAvIDEwMCwgMCksIHUgPSAoKChoID0gaSA9PSBudWxsID8gdm9pZCAwIDogaS5hbW91bnQpID09IG51bGwgPyB2b2lkIDAgOiBoLmN1cnJlbmN5KSA/PyAocyA9PSBudWxsID8gdm9pZCAwIDogcy5jdXJyZW5jeSkgPz8gYS5jdXJyZW5jeSkudG9VcHBlckNhc2UoKSwgZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAyLFxuICAgIGFwaVZlcnNpb25NaW5vcjogMCxcbiAgICBhbGxvd2VkUGF5bWVudE1ldGhvZHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJDQVJEXCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBhbGxvd2VkQXV0aE1ldGhvZHM6IFtcIlBBTl9PTkxZXCIsIFwiQ1JZUFRPR1JBTV8zRFNcIl0sXG4gICAgICAgICAgYWxsb3dlZENhcmROZXR3b3JrczogW1wiQU1FWFwiLCBcIkRJU0NPVkVSXCIsIFwiSU5URVJBQ1wiLCBcIkpDQlwiLCBcIk1BU1RFUkNBUkRcIiwgXCJWSVNBXCJdLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUmVxdWlyZWQ6ICEwLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUGFyYW1ldGVyczoge1xuICAgICAgICAgICAgZm9ybWF0OiBcIkZVTExcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWxsb3dDcmVkaXRDYXJkczogITAsXG4gICAgICAgICAgYWxsb3dQcmVwYWlkQ2FyZHM6ICEwXG4gICAgICAgIH0sXG4gICAgICAgIHRva2VuaXphdGlvblNwZWNpZmljYXRpb246IHtcbiAgICAgICAgICB0eXBlOiBcIlBBWU1FTlRfR0FURVdBWVwiLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIGdhdGV3YXk6IHQsXG4gICAgICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIF0sXG4gICAgZW1haWxSZXF1aXJlZDogITAsXG4gICAgbWVyY2hhbnRJbmZvOiB7XG4gICAgICAvLyBQUk9EIGVudiB3aWxsIG5lZWQgdGhpc1xuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcGF5L2FwaS93ZWIvcmVmZXJlbmNlL3JlcXVlc3Qtb2JqZWN0cyNNZXJjaGFudEluZm9cbiAgICAgIG1lcmNoYW50SWQ6IHIgPz8gXCJcIixcbiAgICAgIG1lcmNoYW50TmFtZTogZVxuICAgIH0sXG4gICAgdHJhbnNhY3Rpb25JbmZvOiB7XG4gICAgICBjb3VudHJ5Q29kZTogXCJVU1wiLFxuICAgICAgY3VycmVuY3lDb2RlOiB1LFxuICAgICAgdG90YWxQcmljZVN0YXR1czogaSAhPSBudWxsICYmIGkucGVuZGluZyA/IFwiRVNUSU1BVEVEXCIgOiBcIkZJTkFMXCIsXG4gICAgICB0b3RhbFByaWNlOiBsLnRvRml4ZWQoMilcbiAgICB9XG4gIH07XG4gIHJldHVybiBpICE9IG51bGwgJiYgaS5nb29nbGVQYXlQYXltZW50UmVxdWVzdCA/IHsgLi4uZCwgLi4uaS5nb29nbGVQYXlQYXltZW50UmVxdWVzdCB9IDogZDtcbn0sIFh0ID0gKCkgPT4gbmV3IFByb21pc2UoKHQsIG4pID0+IHtcbiAgY29uc3QgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gIGUuc3JjID0gXCJodHRwczovL3BheS5nb29nbGUuY29tL2dwL3AvanMvcGF5LmpzXCIsIGUuYXN5bmMgPSAhMCwgZS5vbmxvYWQgPSAoKSA9PiB0KCksIGUub25lcnJvciA9ICgpID0+IG4obmV3IEVycm9yKFwiRmFpbGVkIHRvIGxvYWQgR29vZ2xlIFBheSBTREtcIikpLCBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpO1xufSk7XG5sZXQgcWUgPSBudWxsO1xuY29uc3QgZW4gPSAodCkgPT4gdCA9PT0gZXQgfHwgdCA9PT0gd2luZG93LmxvY2F0aW9uLm9yaWdpbiA/IFwiUFJPRFVDVElPTlwiIDogXCJURVNUXCIsIHplID0gKHQsIG4pID0+IHtcbiAgY29uc3QgZSA9IGVuKHQpO1xuICByZXR1cm4gcWUgPT09IG51bGwgJiYgKHFlID0gbmV3IHdpbmRvdy5nb29nbGUucGF5bWVudHMuYXBpLlBheW1lbnRzQ2xpZW50KHtcbiAgICBlbnZpcm9ubWVudDogZSxcbiAgICBtZXJjaGFudEluZm86IG4ubWVyY2hhbnRJbmZvXG4gIH0pKSwgcWU7XG59LCBXbyA9ICh0KSA9PiB7XG4gIGNvbnN0IG4gPSB0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChlKSA9PiBlLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiKTtcbiAgcmV0dXJuIG4gPyBEdC5wYXJzZShuKSA6IG51bGw7XG59LCB0biA9ICh0LCBuKSA9PiB7XG4gIHZhciBhLCBpLCBzLCBjO1xuICBjb25zdCBlID0geyAuLi50IH0sIHIgPSAoaSA9IChhID0gbi5wYXltZW50TWV0aG9kRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IGEuaW5mbykgPT0gbnVsbCA/IHZvaWQgMCA6IGkuYmlsbGluZ0FkZHJlc3M7XG4gIGlmIChyKSB7XG4gICAgY29uc3QgW2wsIC4uLnVdID0gKChjID0gKHMgPSByLm5hbWUpID09IG51bGwgPyB2b2lkIDAgOiBzLnRyaW0oKSkgPT0gbnVsbCA/IHZvaWQgMCA6IGMuc3BsaXQoL1xccysvKSkgPz8gW10sIGQgPSB1LmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgICBlW3AuRU1BSUxdID0gZVtwLkVNQUlMXSB8fCBuLmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIiwgZVtwLkNPVU5UUlldID0gZVtwLkNPVU5UUlldIHx8IHIuY291bnRyeUNvZGUgfHwgXCJVU1wiLCBlW3AuQUREUkVTU10gPSBlW3AuQUREUkVTU10gfHwgci5hZGRyZXNzMSB8fCBcIlwiLCBlW3AuQ0lUWV0gPSBlW3AuQ0lUWV0gfHwgci5sb2NhbGl0eSB8fCBcIlwiLCBlW3AuWklQX0NPREVdID0gZVtwLlpJUF9DT0RFXSB8fCByLnBvc3RhbENvZGUgfHwgXCIwMDAwMFwiLCBlW3AuU1RBVEVdID0gZVtwLlNUQVRFXSB8fCByLmFkbWluaXN0cmF0aXZlQXJlYSB8fCBcIlwiLCBlW3AuRklSU1RfTkFNRV0gPSBlW3AuRklSU1RfTkFNRV0gfHwgbCB8fCBcIl9PUF9VTktOT1dOXCIsIGVbcC5MQVNUX05BTUVdID0gZVtwLkxBU1RfTkFNRV0gfHwgZCB8fCBcIl9PUF9VTktOT1dOXCI7XG4gIH1cbiAgcmV0dXJuIGU7XG59LCB7IGxvZ19fOiB6LCBlcnJfXzogbGUgfSA9IFAoXCJhd3gtZ29vZ2xlLXBheVwiKSwgSG8gPSBzZShcbiAgYXN5bmMgKHsgY29udGV4dDogdCwgZm9ybUNhbGxiYWNrczogbiB9KSA9PiB7XG4gICAgdmFyIGYsIGg7XG4gICAgY29uc3QgZSA9IHtcbiAgICAgIHByb2Nlc3NvcjogVi5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCByID0gWSh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEJ0KTtcbiAgICBpZiAoIXIpXG4gICAgICByZXR1cm4gZTtcbiAgICB6KFwiR29vZ2xlIFBheSBDUE1cIiwgcik7XG4gICAgY29uc3QgYSA9IHIubWV0YWRhdGE7XG4gICAgaWYgKCFhLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgcmV0dXJuIGxlKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKSwgZTtcbiAgICBpZiAoeihcIkxvYWRpbmcgR29vZ2xlIFBheSBTREsuLi5cIiksIGF3YWl0IFh0KCksICEoKGggPSAoZiA9IHdpbmRvdy5nb29nbGUpID09IG51bGwgPyB2b2lkIDAgOiBmLnBheW1lbnRzKSAhPSBudWxsICYmIGguYXBpKSlcbiAgICAgIHJldHVybiBsZShcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIiksIGU7XG4gICAgaWYgKGVuKHQuYmFzZVVybCkgPT09IFwiUFJPRFVDVElPTlwiICYmICFhLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQpXG4gICAgICByZXR1cm4gbGUoXCJHb29nbGUgUGF5IG1lcmNoYW50IElEIGlzIHJlcXVpcmVkIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50XCIpLCBlO1xuICAgIHooXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHkgPSAkZSh7XG4gICAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBhLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IGEucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogYS5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3OiB7XG4gICAgICAgICAgYW1vdW50QXRvbTogMCxcbiAgICAgICAgICBjdXJyZW5jeTogXCJVU0RcIlxuICAgICAgICB9XG4gICAgICB9KSwgeyByZXN1bHQ6IG0gfSA9IGF3YWl0IHplKHQuYmFzZVVybCwgeSkuaXNSZWFkeVRvUGF5KFxuICAgICAgICB5XG4gICAgICApO1xuICAgICAgaWYgKCFtKVxuICAgICAgICByZXR1cm4geihcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpLCBlO1xuICAgIH0gY2F0Y2ggKHkpIHtcbiAgICAgIHJldHVybiBsZShcIkVycm9yIGNoZWNraW5nIEdvb2dsZSBQYXkgYXZhaWxhYmlsaXR5XCIsIHkpLCBlO1xuICAgIH1cbiAgICBjb25zdCBzID0gdC5hbnlDZGVDb25uZWN0aW9uLCBjID0gYXdhaXQgTShzKSwgbCA9IGMubW9kZSA9PT0gXCJzZXR1cFwiLCB1ID0gYXdhaXQgX2UocywgYy50b2tlbiwgbCwgdm9pZCAwKSwgZCA9IGFzeW5jICh5KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBBLmFpcndhbGxleEdvb2dsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IEgodC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLnksXG4gICAgICAgICAgICBpbml0aWFsUHJldmlldzogdVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgIGxlKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIG0pLCBuLmdldC5vbkNoZWNrb3V0RXJyb3IoKG0gPT0gbnVsbCA/IHZvaWQgMCA6IG0ubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogVi5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGRcbiAgICB9O1xuICB9XG4pLCBKbyA9IGVlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgZm9ybUNhbGxiYWNrczogcixcbiAgICBjdXN0b21QYXJhbXM6IGFcbiAgfSkgPT4ge1xuICAgIHZhciBmLCBoLCB5LCBtLCBfLCB2LCB3O1xuICAgIHooXCJTdGFydGluZyBHb29nbGUgUGF5IGZsb3cuLi5cIik7XG4gICAgY29uc3QgaSA9IFkodC5jaGVja291dFBheW1lbnRNZXRob2RzLCBCdCksIHsgaW5pdGlhbFByZXZpZXc6IHMsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGMgfSA9IGEsIGwgPSBpLm1ldGFkYXRhO1xuICAgIGlmICghbC5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgY29uc3QgdSA9ICRlKHtcbiAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICBnYXRld2F5TWVyY2hhbnRJZDogbC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgIG1lcmNoYW50TmFtZTogbC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgbWVyY2hhbnRJZDogbC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICBpbml0aWFsUHJldmlldzogcyxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGNcbiAgICB9KSwgZCA9IHplKHQuYmFzZVVybCwgdSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGIgPSBhd2FpdCBkLmxvYWRQYXltZW50RGF0YSh1KTtcbiAgICAgIHooXCJHb29nbGUgUGF5IFBheW1lbnQgZGF0YVwiLCBiKTtcbiAgICAgIGNvbnN0IEUgPSB0LmFueUNkZUNvbm5lY3Rpb24sIEQgPSBhd2FpdCBNKEUpLCBOID0gdG4oZSwgYiksIGsgPSB0ZShcbiAgICAgICAgTixcbiAgICAgICAgci5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICAgIGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgICApLCBjZSA9IChoID0gKGYgPSBiLnBheW1lbnRNZXRob2REYXRhKSA9PSBudWxsID8gdm9pZCAwIDogZi50b2tlbml6YXRpb25EYXRhKSA9PSBudWxsID8gdm9pZCAwIDogaC50b2tlbjtcbiAgICAgIGlmICghY2UpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBheW1lbnQgdG9rZW4gcmVjZWl2ZWQgZnJvbSBHb29nbGUgUGF5XCIpO1xuICAgICAgY29uc3QgX24gPSBhd2FpdCBoZShFLCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IG4ucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBuLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IGtbcC5FTUFJTF0sXG4gICAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBrW3AuRklSU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IGtbcC5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICAgIHppcF9jb2RlOiBrW3AuWklQX0NPREVdLFxuICAgICAgICAgIGNvdW50cnk6IGtbcC5DT1VOVFJZXVxuICAgICAgICB9XG4gICAgICB9KSwga2UgPSBXbyhfbik7XG4gICAgICB6KFwiU3RhcnQgZmxvdyBuZXh0IGFjdGlvbnNcIiwga2UpO1xuICAgICAgbGV0IHJlID0gYXdhaXQgRyhFLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogRC50b2tlbixcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogbi5wcm92aWRlcixcbiAgICAgICAgICAvLyBHb29nbGVQYXkncyBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbiBwcm92aWRlZCB0byB2ZXJpZnkgdGhlIGNvbnNlbnQgZmlyc3RcbiAgICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDoga2UgPT0gbnVsbCA/IHZvaWQgMCA6IGtlLmNvbnNlbnRfaWQsXG4gICAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfbWV0aG9kX2RhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IFwiZ29vZ2xlcGF5XCIsXG4gICAgICAgICAgICBnb29nbGVwYXk6IHtcbiAgICAgICAgICAgICAgcGF5bWVudF9kYXRhX3R5cGU6IFwiZW5jcnlwdGVkX3BheW1lbnRfdG9rZW5cIixcbiAgICAgICAgICAgICAgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW46IGNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHooXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCByZSk7XG4gICAgICBsZXQgVmUgPSAobSA9ICh5ID0gcmUucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogeVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IG0uaWQ7XG4gICAgICBjb25zdCBvZSA9IChfID0gcmUucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogXy5maW5kKFxuICAgICAgICAoZ2UpID0+IGdlLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgICApO1xuICAgICAgaWYgKG9lICYmIG9lLnJlZGlyZWN0X3VybCkge1xuICAgICAgICB6KFwiM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgb2UpO1xuICAgICAgICBjb25zdCB7IHN0YXR1czogZ2UgfSA9IGF3YWl0IHhlKHtcbiAgICAgICAgICB1cmw6IG9lLnJlZGlyZWN0X3VybCxcbiAgICAgICAgICBiYXNlVXJsOiB0LmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh6KGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtnZX1dYCksIGdlID09PSBJLkNBTkNFTExFRClcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgaWYgKGdlID09PSBJLkZBSUxVUkUpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICB9XG4gICAgICBpZiAob2UgJiYgIVZlICYmIChyZSA9IGF3YWl0IEcoRSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IEQudG9rZW4sXG4gICAgICAgIHRoZWlyX3BtX2lkOiBvZS50aGVpcl9wbV9pZCxcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogbi5wcm92aWRlcixcbiAgICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogb2UuY29uc2VudF9pZFxuICAgICAgICB9XG4gICAgICB9KSwgeihcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIHJlKSwgVmUgPSAodyA9ICh2ID0gcmUucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogdlswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IHcuaWQpLCAhVmUpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgICAgcmV0dXJuIGplKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF3eC1nb29nbGVwYXlcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbjogRSxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IGssXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IHJlLFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChiKSB7XG4gICAgICB0aHJvdyBsZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBiKSwgbmV3IEVycm9yKChiID09IG51bGwgPyB2b2lkIDAgOiBiLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksIG5uID0gKCkgPT4gbmV3IFByb21pc2UoKHQsIG4pID0+IHtcbiAgY29uc3QgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gIGUuc3JjID0gXCJodHRwczovL2FwcGxlcGF5LmNkbi1hcHBsZS5jb20vanNhcGkvMS5sYXRlc3QvYXBwbGUtcGF5LXNkay5qc1wiLCBlLmNyb3NzT3JpZ2luID0gXCJhbm9ueW1vdXNcIiwgZS5hc3luYyA9ICEwLCBlLm9ubG9hZCA9ICgpID0+IHQoKSwgZS5vbmVycm9yID0gKCkgPT4gbihuZXcgRXJyb3IoXCJGYWlsZWQgdG8gbG9hZCBBcHBsZSBQYXkgU0RLXCIpKSwgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlKTtcbn0pLCBybiA9ICh0LCBuKSA9PiB7XG4gIGNvbnN0IGUgPSBuLnRva2VuLnBheW1lbnRNZXRob2QuYmlsbGluZ0NvbnRhY3QsIHIgPSBuLmJpbGxpbmdDb250YWN0LCBhID0gbi5zaGlwcGluZ0NvbnRhY3QsIGkgPSB7IC4uLnQgfTtcbiAgcmV0dXJuIChlIHx8IHIgfHwgYSkgJiYgKGlbcC5FTUFJTF0gPSBpW3AuRU1BSUxdIHx8IChlID09IG51bGwgPyB2b2lkIDAgOiBlLmVtYWlsQWRkcmVzcykgfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZW1haWxBZGRyZXNzKSB8fCAoYSA9PSBudWxsID8gdm9pZCAwIDogYS5lbWFpbEFkZHJlc3MpIHx8IFwib3BfdW5maWxsZWRAZW1haWwuY29tXCIsIGlbcC5DT1VOVFJZXSA9IGlbcC5DT1VOVFJZXSB8fCAoZSA9PSBudWxsID8gdm9pZCAwIDogZS5jb3VudHJ5Q29kZSkgfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuY291bnRyeUNvZGUpIHx8IChhID09IG51bGwgPyB2b2lkIDAgOiBhLmNvdW50cnlDb2RlKSB8fCBcIlVTXCIsIGlbcC5aSVBfQ09ERV0gPSBpW3AuWklQX0NPREVdIHx8IChlID09IG51bGwgPyB2b2lkIDAgOiBlLnBvc3RhbENvZGUpIHx8IChyID09IG51bGwgPyB2b2lkIDAgOiByLnBvc3RhbENvZGUpIHx8IChhID09IG51bGwgPyB2b2lkIDAgOiBhLnBvc3RhbENvZGUpIHx8IFwiMDAwMDBcIiwgaVtwLkZJUlNUX05BTUVdID0gaVtwLkZJUlNUX05BTUVdIHx8IChlID09IG51bGwgPyB2b2lkIDAgOiBlLmdpdmVuTmFtZSkgfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZ2l2ZW5OYW1lKSB8fCAoYSA9PSBudWxsID8gdm9pZCAwIDogYS5naXZlbk5hbWUpIHx8IFwiX09QX1VOS05PV05cIiwgaVtwLkxBU1RfTkFNRV0gPSBpW3AuTEFTVF9OQU1FXSB8fCAoZSA9PSBudWxsID8gdm9pZCAwIDogZS5mYW1pbHlOYW1lKSB8fCAociA9PSBudWxsID8gdm9pZCAwIDogci5mYW1pbHlOYW1lKSB8fCAoYSA9PSBudWxsID8gdm9pZCAwIDogYS5mYW1pbHlOYW1lKSB8fCBcIl9PUF9VTktOT1dOXCIpLCBpO1xufSwgWm8gPSB6JDEub2JqZWN0KHtcbiAgZGF0YTogeiQxLm9iamVjdCh7XG4gICAgbWVzc2FnZUhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICAgIGVycm9yczogeiQxLmFycmF5KHokMS5hbnkoKSksXG4gICAgbWVzc2FnZVR5cGU6IHokMS5zdHJpbmcoKSxcbiAgICBtZXNzYWdlQm9keTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSlcbiAgfSksXG4gIG9yaWdpbjogeiQxLmxpdGVyYWwoXCJodHRwczovL2FwcGxlcGF5LmNkbi1hcHBsZS5jb21cIilcbn0pLCBCbyA9ICh0KSA9PiBaby5zYWZlUGFyc2UodCkuZGF0YSwgUW8gPSAodCkgPT4ge1xuICBjb25zdCBuID0gbmV3IEFib3J0Q29udHJvbGxlcigpO1xuICByZXR1cm4gd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgXCJtZXNzYWdlXCIsXG4gICAgKGUpID0+IHtcbiAgICAgIHZhciBhO1xuICAgICAgY29uc3QgciA9IEJvKGUpO1xuICAgICAgKChhID0gciA9PSBudWxsID8gdm9pZCAwIDogci5kYXRhKSA9PSBudWxsID8gdm9pZCAwIDogYS5tZXNzYWdlVHlwZSkgPT09IFwid2luZG93Y2xvc2luZ1wiICYmICh0KCksIG4uYWJvcnQoKSk7XG4gICAgfSxcbiAgICB7XG4gICAgICBzaWduYWw6IG4uc2lnbmFsXG4gICAgfVxuICApLCB7XG4gICAgY2xlYW51cENhbmNlbExpc3RlbmVyOiAoKSA9PiBuLmFib3J0KClcbiAgfTtcbn0sIG9uID0gKHtcbiAgdG90YWw6IHQsXG4gIHByZWZpbGw6IG5cbn0pID0+IHtcbiAgdmFyIHI7XG4gIGlmIChuLm1vZGUgPT09IFwic2V0dXBcIilcbiAgICByZXR1cm4ge1xuICAgICAgcGF5bWVudERlc2NyaXB0aW9uOiBcIlNldHVwIHJlY3VycmluZyBwYXltZW50XCIsXG4gICAgICByZWd1bGFyQmlsbGluZzoge1xuICAgICAgICBhbW91bnQ6IHQuYW1vdW50LFxuICAgICAgICBsYWJlbDogXCJTZXR1cCByZWN1cnJpbmcgcGF5bWVudFwiLFxuICAgICAgICBwYXltZW50VGltaW5nOiBcInJlY3VycmluZ1wiLFxuICAgICAgICB0eXBlOiBcImZpbmFsXCJcbiAgICAgIH0sXG4gICAgICAvLyBUT0RPOiB0aGlzIHNob3VsZCBiZSBiaWxsaW5nIHBvcnRhbCB1cmxcbiAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9kb2N1bWVudGF0aW9uL3Bhc3NraXQvcGtyZWN1cnJpbmdwYXltZW50cmVxdWVzdC9tYW5hZ2VtZW50dXJsI0Rpc2N1c3Npb25cbiAgICAgIC8vIFRoaXMgaXMgcHJvYmFibHkgdXNlZCB3aGVuIHVzZXIgcmVtb3ZlIGEgY2FyZCBmcm9tIHRoZWlyIEFwcGxlUGF5IHdhbGxldC5cbiAgICAgIC8vIEN1cnJlbnR5IHNldCB0byBjaGVja291dCBzZXNzaW9uIHVybCB0byBzYXRpc2Z5IEFwcGxlUGF5IHR5cGVzXG4gICAgICBtYW5hZ2VtZW50VVJMOiBuZXcgVVJMKGAvcGF5LyR7bi50b2tlbn1gLCBldCkudG9TdHJpbmcoKVxuICAgIH07XG4gIGNvbnN0IGUgPSAociA9IG4ubGluZV9pdGVtcykgPT0gbnVsbCA/IHZvaWQgMCA6IHJbMF07XG4gIGlmIChlKVxuICAgIHJldHVybiB7XG4gICAgICBwYXltZW50RGVzY3JpcHRpb246IChlID09IG51bGwgPyB2b2lkIDAgOiBlLmRlc2NyaXB0aW9uKSA/PyBcIlwiLFxuICAgICAgcmVndWxhckJpbGxpbmc6IHtcbiAgICAgICAgYW1vdW50OiB0LmFtb3VudCxcbiAgICAgICAgbGFiZWw6IChlID09IG51bGwgPyB2b2lkIDAgOiBlLmRlc2NyaXB0aW9uKSA/PyBcIlwiLFxuICAgICAgICByZWN1cnJpbmdQYXltZW50SW50ZXJ2YWxVbml0OiBlID09IG51bGwgPyB2b2lkIDAgOiBlLmJpbGxpbmdfaW50ZXJ2YWwsXG4gICAgICAgIHJlY3VycmluZ1BheW1lbnRJbnRlcnZhbENvdW50OiAoZSA9PSBudWxsID8gdm9pZCAwIDogZS5iaWxsaW5nX2ludGVydmFsX2NvdW50KSA/PyB2b2lkIDAsXG4gICAgICAgIHBheW1lbnRUaW1pbmc6IFwicmVjdXJyaW5nXCIsXG4gICAgICAgIHR5cGU6IFwiZmluYWxcIlxuICAgICAgfSxcbiAgICAgIG1hbmFnZW1lbnRVUkw6IGBodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbS9wYXkvJHtuLnRva2VufWBcbiAgICB9O1xufSwgYW4gPSAoe1xuICBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiB0LFxuICBpbml0aWFsUHJldmlldzogbixcbiAgcHJlZmlsbDogZSxcbiAgZGVmYXVsdExhYmVsOiByID0gXCJUb3RhbFwiXG59KSA9PiB7XG4gIHZhciBjLCBsO1xuICBjb25zdCBhID0gKCgoYyA9IHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogYy5jdXJyZW5jeSkgPz8gKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuY3VycmVuY3kpID8/IG4uY3VycmVuY3kpLnRvVXBwZXJDYXNlKCksIHMgPSAoKCgobCA9IHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogbC5hbW91bnRBdG9tKSA/PyAobiA9PSBudWxsID8gdm9pZCAwIDogbi5hbW91bnRBdG9tKSA/PyAwKSAvIDEwMCkudG9GaXhlZCgyKTtcbiAgcmV0dXJuIHtcbiAgICBjdXJyZW5jeUNvZGU6IGEsXG4gICAgdG90YWw6IHtcbiAgICAgIGxhYmVsOiAodCA9PSBudWxsID8gdm9pZCAwIDogdC5sYWJlbCkgPz8gciA/PyBcIlRvdGFsXCIsXG4gICAgICB0eXBlOiB0ICE9IG51bGwgJiYgdC5wZW5kaW5nID8gXCJwZW5kaW5nXCIgOiBcImZpbmFsXCIsXG4gICAgICBhbW91bnQ6IHNcbiAgICB9XG4gIH07XG59LCB7IGxvZ19fOiBSZSB9ID0gUChcImF3eC1hcHBsZS1wYXlcIik7XG5hc3luYyBmdW5jdGlvbiBYbyh0LCBuKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgciA9IChhd2FpdCBHdChuLmNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBuLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9zZXNzaW9uOiB7XG4gICAgICAgICAgdmFsaWRhdGlvbl91cmw6IHQudmFsaWRhdGlvblVSTCxcbiAgICAgICAgICBpbml0aWF0aXZlX2NvbnRleHQ6IHdpbmRvdy5sb2NhdGlvbi5ob3N0bmFtZSxcbiAgICAgICAgICB0aGVpcl9hY2NvdW50X2lkOiBuLnByb2Nlc3NvckFjY291bnQucHJvY2Vzc29yX2FjY291bnRfaWRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pKS5uZXh0X2FjdGlvbl9tZXRhZGF0YSwgYSA9IHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuYXBwbGVfcGF5X3Nlc3Npb247XG4gICAgaWYgKCFhKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gc2Vzc2lvbiBkYXRhIHJlY2VpdmVkIGZyb20gcGF5bWVudCBmbG93XCIpO1xuICAgIG4uc2Vzc2lvbi5jb21wbGV0ZU1lcmNoYW50VmFsaWRhdGlvbihhKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG4uc2Vzc2lvbi5hYm9ydCgpLCBlO1xuICB9XG59XG5hc3luYyBmdW5jdGlvbiBlYSh0LCBuKSB7XG4gIGlmICghdC5yZWRpcmVjdF91cmwpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcmVkaXJlY3QgVVJMIGZvdW5kXCIpO1xuICBSZShcIjNEUyBSZXF1aXJlZCwgc3RhcnRpbmcgdmVyaWZpY2F0aW9uLi4uXCIsIHQpO1xuICBjb25zdCB7IHN0YXR1czogZSB9ID0gYXdhaXQgeGUoe1xuICAgIHVybDogdC5yZWRpcmVjdF91cmwsXG4gICAgYmFzZVVybDogbi5iYXNlVXJsXG4gIH0pO1xuICBpZiAoUmUoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke2V9XWApLCBlID09PSBJLkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKGUgPT09IEkuRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbiAgY29uc3QgciA9IGF3YWl0IEcobi5jb25uZWN0aW9uLCB7XG4gICAgc2VjdXJlX3Rva2VuOiBuLnByZWZpbGwudG9rZW4sXG4gICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICB0aGVpcl9wbV9pZDogdC50aGVpcl9wbV9pZCxcbiAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiB0LmNvbnNlbnRfaWQsXG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBuLmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlclxuICAgIH1cbiAgfSk7XG4gIHJldHVybiBSZShcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIHIpLCByO1xufVxuYXN5bmMgZnVuY3Rpb24gdGEodCwgbikge1xuICB2YXIgZSwgciwgYSwgaSwgcztcbiAgdHJ5IHtcbiAgICBjb25zdCBjID0gdC5wYXltZW50LCBsID0gcm4obi5ub25DZGVGb3JtSW5wdXRzLCBjKSwgdSA9IHRlKFxuICAgICAgbCxcbiAgICAgIG4uZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICBuLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgICksIGggPSAoYXdhaXQgaGUobi5jb25uZWN0aW9uLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBuLmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBuLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogdVtwLkVNQUlMXSxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiB1W3AuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiB1W3AuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiB7XG4gICAgICAgIHppcF9jb2RlOiB1W3AuWklQX0NPREVdLFxuICAgICAgICBjb3VudHJ5OiB1W3AuQ09VTlRSWV1cbiAgICAgIH1cbiAgICB9KSkucmVxdWlyZWRfdXNlcl9hY3Rpb25zWzBdLmNvbnNlbnRfaWQ7XG4gICAgaWYgKCFoKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gY29uc2VudCBJRCByZWNlaXZlZCBmcm9tIHBheW1lbnQgZmxvd1wiKTtcbiAgICBsZXQgeSA9IGF3YWl0IEcobi5jb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IG4ucHJlZmlsbC50b2tlbixcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBwYXltZW50X3Byb3ZpZGVyOiBuLmNoZWNrb3V0UGF5bWVudE1ldGhvZC5wcm92aWRlcixcbiAgICAgICAgYWlyd2FsbGV4X2NvbnNlbnRfaWQ6IGgsXG4gICAgICAgIGFpcndhbGxleF9wYXltZW50X21ldGhvZF9kYXRhOiB7XG4gICAgICAgICAgdHlwZTogXCJhcHBsZXBheVwiLFxuICAgICAgICAgIGFwcGxlcGF5OiB7XG4gICAgICAgICAgICBwYXltZW50X2RhdGFfdHlwZTogXCJlbmNyeXB0ZWRfcGF5bWVudF90b2tlblwiLFxuICAgICAgICAgICAgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW46IEpTT04uc3RyaW5naWZ5KGMudG9rZW4pXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgUmUoXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCB5KTtcbiAgICBsZXQgbSA9IChyID0gKGUgPSB5LnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IGVbMF0pID09IG51bGwgPyB2b2lkIDAgOiByLmlkO1xuICAgIGNvbnN0IF8gPSAoYSA9IHkucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogYS5maW5kKFxuICAgICAgKHcpID0+IHcudHlwZSA9PT0gXCJhaXJ3YWxsZXhfcGF5bWVudF9jb25zZW50XCJcbiAgICApO1xuICAgIGlmIChfICE9IG51bGwgJiYgXy5yZWRpcmVjdF91cmwgJiYgXy5jb25zZW50X2lkICYmIF8udGhlaXJfcG1faWQgJiYgKHkgPSBhd2FpdCBlYShfLCBuKSwgbSA9IChzID0gKGkgPSB5LnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IGlbMF0pID09IG51bGwgPyB2b2lkIDAgOiBzLmlkKSwgIW0pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBQTSBJRCBmb3VuZFwiKTtcbiAgICBjb25zdCB2ID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX1NVQ0NFU1NcbiAgICB9O1xuICAgIHJldHVybiBuLnNlc3Npb24uY29tcGxldGVQYXltZW50KHYpLCBqZSh7XG4gICAgICBsb2dQcmVmaXg6IFwiYXd4LWFwcGxlcGF5XCIsXG4gICAgICBhbnlDZGVDb25uZWN0aW9uOiBuLmNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4uY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiB1LFxuICAgICAgY29uZmlybVJlc3VsdDogeSxcbiAgICAgIHVzZVBheUZpcnN0RmxvdzogITFcbiAgICB9KTtcbiAgfSBjYXRjaCAoYykge1xuICAgIGNvbnN0IGwgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfRkFJTFVSRVxuICAgIH07XG4gICAgdGhyb3cgbi5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChsKSwgYztcbiAgfVxufVxuY29uc3QgeyBsb2dfXzogdWUsIGVycl9fOiBIZSB9ID0gUChcImF3eC1hcHBsZS1wYXlcIiksIG5hID0gc2UoXG4gIGFzeW5jICh7IGNvbnRleHQ6IHQsIGZvcm1DYWxsYmFja3M6IG4gfSkgPT4ge1xuICAgIGNvbnN0IGUgPSB7XG4gICAgICBwcm9jZXNzb3I6IFYuRW51bS5haXJ3YWxsZXgsXG4gICAgICBpc0F2YWlsYWJsZTogITEsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgICB9XG4gICAgfSwgciA9IFkodC5jaGVja291dFBheW1lbnRNZXRob2RzLCBadCk7XG4gICAgaWYgKCFyKVxuICAgICAgcmV0dXJuIGU7XG4gICAgdWUoXCJMb2FkaW5nIEFwcGxlIFBheSBTREsuLi5cIik7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IG5uKCksIHVlKFwiQXBwbGUgUGF5IFNESyBsb2FkZWQgc3VjY2Vzc2Z1bGx5XCIpO1xuICAgIH0gY2F0Y2ggKGYpIHtcbiAgICAgIHJldHVybiBIZShcIkZhaWxlZCB0byBsb2FkIEFwcGxlIFBheSBTREtcIiwgZiksIGU7XG4gICAgfVxuICAgIGlmICghd2luZG93LkFwcGxlUGF5U2Vzc2lvbiB8fCAhQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIHVlKFwiQXBwbGUgUGF5IGlzIG5vdCBhdmFpbGFibGUgb24gdGhpcyBkZXZpY2UvYnJvd3NlclwiKSwgZTtcbiAgICBpZiAodWUoXCJBcHBsZSBQYXkgTG9hZGVkXCIpLCAhYXdhaXQgQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIHVlKFwiTm8gYWN0aXZlIGNhcmRzIGF2YWlsYWJsZSBmb3IgQXBwbGUgUGF5XCIpLCBlO1xuICAgIGlmICghci5tZXRhZGF0YS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgY29uc3QgcyA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGF3YWl0IE0ocyksIGwgPSBjLm1vZGUgPT09IFwic2V0dXBcIiwgdSA9IGF3YWl0IF9lKHMsIGMudG9rZW4sIGwsIHZvaWQgMCksIGQgPSBhc3luYyAoZikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgQS5haXJ3YWxsZXhBcHBsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IEgodC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uZixcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiB1XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgIEhlKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgaCksIG4uZ2V0Lm9uQ2hlY2tvdXRFcnJvcigoaCA9PSBudWxsID8gdm9pZCAwIDogaC5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBWLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogZFxuICAgIH07XG4gIH1cbiksIHJhID0gZWUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICBjdXN0b21QYXJhbXM6IHIsXG4gICAgZm9ybUNhbGxiYWNrczogYVxuICB9KSA9PiB7XG4gICAgdmFyIHY7XG4gICAgY29uc3QgaSA9IFkodC5jaGVja291dFBheW1lbnRNZXRob2RzLCBadCksIHsgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcywgaW5pdGlhbFByZXZpZXc6IGMgfSA9IHIsIGwgPSB0LmFueUNkZUNvbm5lY3Rpb24sIHUgPSBhd2FpdCBNKGwpLCBkID0gdS5tb2RlID09PSBcInNldHVwXCIsIHsgY3VycmVuY3lDb2RlOiBmLCB0b3RhbDogaCB9ID0gYW4oe1xuICAgICAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogcyxcbiAgICAgIGluaXRpYWxQcmV2aWV3OiBjLFxuICAgICAgZGVmYXVsdExhYmVsOiAodiA9IGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkubWV0YWRhdGEpID09IG51bGwgPyB2b2lkIDAgOiB2LnByb2Nlc3Nvcl9hY2NvdW50X25hbWVcbiAgICB9KSwgeSA9IHtcbiAgICAgIGNvdW50cnlDb2RlOiBcIlVTXCIsXG4gICAgICBjdXJyZW5jeUNvZGU6IGYsXG4gICAgICByZXF1aXJlZEJpbGxpbmdDb250YWN0RmllbGRzOiBbXCJlbWFpbFwiLCBcInBvc3RhbEFkZHJlc3NcIiwgXCJuYW1lXCJdLFxuICAgICAgcmVxdWlyZWRTaGlwcGluZ0NvbnRhY3RGaWVsZHM6IFtcImVtYWlsXCJdLFxuICAgICAgc3VwcG9ydGVkTmV0d29ya3M6IFtcInZpc2FcIiwgXCJtYXN0ZXJDYXJkXCIsIFwiYW1leFwiLCBcImRpc2NvdmVyXCJdLFxuICAgICAgbWVyY2hhbnRDYXBhYmlsaXRpZXM6IFtcbiAgICAgICAgXCJzdXBwb3J0czNEU1wiLFxuICAgICAgICBcInN1cHBvcnRzQ3JlZGl0XCIsXG4gICAgICAgIFwic3VwcG9ydHNEZWJpdFwiLFxuICAgICAgICBcInN1cHBvcnRzRU1WXCJcbiAgICAgIF0sXG4gICAgICB0b3RhbDogaCxcbiAgICAgIHJlY3VycmluZ1BheW1lbnRSZXF1ZXN0OiBvbih7XG4gICAgICAgIHRvdGFsOiBoLFxuICAgICAgICBwcmVmaWxsOiB1XG4gICAgICB9KSxcbiAgICAgIC4uLihzID09IG51bGwgPyB2b2lkIDAgOiBzLmFwcGxlUGF5UGF5bWVudFJlcXVlc3QpID8/IHt9XG4gICAgfSwgbSA9IG5ldyBBcHBsZVBheVNlc3Npb24oMywgeSksIF8gPSB7XG4gICAgICBzZXNzaW9uOiBtLFxuICAgICAgY29ubmVjdGlvbjogdC5hbnlDZGVDb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICAgIHByb2Nlc3NvckFjY291bnQ6IGkubWV0YWRhdGEsXG4gICAgICBwcmVmaWxsOiB1LFxuICAgICAgaXNTZXR1cE1vZGU6IGQsXG4gICAgICBiYXNlVXJsOiB0LmJhc2VVcmwsXG4gICAgICBmb3JtQ2FsbGJhY2tzOiBhLFxuICAgICAgZGVmYXVsdEZpZWxkVmFsdWVzOiByID09IG51bGwgPyB2b2lkIDAgOiByLmRlZmF1bHRGaWVsZFZhbHVlc1xuICAgIH07XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKCh3LCBiKSA9PiB7XG4gICAgICBjb25zdCBFID0gKCkgPT4ge1xuICAgICAgICB1ZShcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIiksIGIobmV3IEVycm9yKFwiUGF5bWVudCBjYW5jZWxsZWQgYnkgdXNlclwiKSk7XG4gICAgICB9LCB7IGNsZWFudXBDYW5jZWxMaXN0ZW5lcjogRCB9ID0gUW8oRSk7XG4gICAgICBtLm9uY2FuY2VsID0gRSwgbS5vbnZhbGlkYXRlbWVyY2hhbnQgPSBhc3luYyAoTikgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IFhvKE4sIF8pO1xuICAgICAgICB9IGNhdGNoIChrKSB7XG4gICAgICAgICAgYihrKTtcbiAgICAgICAgfVxuICAgICAgfSwgbS5vbnBheW1lbnRtZXRob2RzZWxlY3RlZCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgTiA9IHtcbiAgICAgICAgICBuZXdUb3RhbDogeyAuLi5oIH1cbiAgICAgICAgfTtcbiAgICAgICAgbS5jb21wbGV0ZVBheW1lbnRNZXRob2RTZWxlY3Rpb24oTik7XG4gICAgICB9LCBtLm9ucGF5bWVudGF1dGhvcml6ZWQgPSBhc3luYyAoTikgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGsgPSBhd2FpdCB0YShOLCBfKTtcbiAgICAgICAgICBEKCksIHcoayk7XG4gICAgICAgIH0gY2F0Y2ggKGspIHtcbiAgICAgICAgICBiKGspO1xuICAgICAgICB9XG4gICAgICB9LCBtLmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKHcpID0+IHtcbiAgICAgIHRocm93IEhlKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgdyksIHc7XG4gICAgfSk7XG4gIH1cbiksIG9hID0gMSwgYWEgPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwibG9vcFwiKSxcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiY3J5cHRvXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBlbnRpdHlfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBhcGlfdG9rZW46IHokMS5zdHJpbmcoKVxuICB9KVxufSksIHsgbG9nX186IFQsIGVycl9fOiBpYSB9ID0gUChcImxvb3AtY3J5cHRvXCIpLCBzYSA9IHNlKFxuICBhc3luYyAoeyBjb250ZXh0OiB0IH0pID0+IHtcbiAgICBUKFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBMb29wIENyeXB0by4uLlwiKTtcbiAgICBjb25zdCBuID0gWSh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIGFhKTtcbiAgICBUKGBjaGVja291dFBheW1lbnRNZXRob2Q6ICR7SlNPTi5zdHJpbmdpZnkobil9YCksIFQoXCJTdGFydGluZyBMb29wIENyeXB0byBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGUgPSBhd2FpdCBNKHQuYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgbGV0IHI7XG4gICAgaWYgKGUubW9kZSA9PT0gXCJzZXR1cFwiID8gciA9IG9hIDogciA9IGUuYW1vdW50X3RvdGFsX2F0b20sIGUuY3VycmVuY3kgIT09IFwidXNkXCIgJiYgZS5tb2RlICE9PSBcInNldHVwXCIpXG4gICAgICB0aHJvdyBFcnJvcihcIkNhbm5vdCBzdXBwb3J0IG5vbiBVU0QgY3VycmVuY3kgZm9yIExvb3BcIik7XG4gICAgY29uc3QgYSA9IHIsIGkgPSBNYXRoLm1heChhICogMTIsIDFlNSksIHMgPSB2NCgpLCBjID0ge1xuICAgICAgcGF5bWVudFVzZEFtb3VudDogYSxcbiAgICAgIHN1Z2dlc3RlZEF1dGhvcml6YXRpb25Vc2RBbW91bnQ6IGksXG4gICAgICBjdXN0b21lclJlZklkOiBzXG4gICAgfSwgbCA9IHtcbiAgICAgIGFwaUtleTogbi5tZXRhZGF0YS5hcGlfdG9rZW4sXG4gICAgICBlbnRpdHlJZDogbi5tZXRhZGF0YS5lbnRpdHlfaWQsXG4gICAgICBtZXJjaGFudElkOiBuLm1ldGFkYXRhLm1lcmNoYW50X2lkXG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgd2lkZ2V0UHJvcHM6IGMsXG4gICAgICBpbml0TG9vcENvbm5lY3RQcm9wczogbFxuICAgIH07XG4gIH1cbiksIGNhID0gZWUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICBmb3JtQ2FsbGJhY2tzOiByLFxuICAgIGN1c3RvbVBhcmFtczogYSxcbiAgICBpbml0UmVzdWx0OiBpXG4gIH0pID0+IHtcbiAgICBUKFwiUnVubmluZyBMb29wIGZsb3cuLi5cIiksIFQoXCJjb250ZXh0XCIsIHQpLCBUKFwiY2hlY2tvdXRQYXltZW50TWV0aG9kXCIsIG4pLCBUKFwibm9uQ2RlRm9ybUlucHV0c1wiLCBlKSwgVChcImZsb3dDYWxsYmFja3NcIiwgciksIFQoXCJjdXN0b21QYXJhbXNcIiwgYSksIFQoXCJpbml0UmVzdWx0XCIsIGkpO1xuICAgIGNvbnN0IHMgPSB0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgaWYgKCFpLmlzQXZhaWxhYmxlKVxuICAgICAgdGhyb3cgRXJyb3IoXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBMb29wIGZsb3cuIENhbm5vdCBzdWJtaXQgd2l0aG91dCBpbml0aWFsaXphdGlvbi4gRXhpdGluZyBydW5uaW5nIExvb3AgZmxvdy5cIik7XG4gICAgY29uc3QgYyA9IGF3YWl0IE0odC5hbnlDZGVDb25uZWN0aW9uKSwgbCA9IGMubW9kZSAhPT0gXCJzZXR1cFwiLCB1ID0gYXdhaXQgaGUodC5hbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogbixcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IG4ucHJvdmlkZXIsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IGEuZW1haWwsXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogYS5maXJzdE5hbWUsXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBhLmxhc3ROYW1lLFxuICAgICAgdXNlX3BheV9maXJzdF9mbG93OiBsLFxuICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBsID8ge1xuICAgICAgICAvLyBUT0RPIGFkZCBjb3Vwb24gYW5kIGNhcnQgYWRqdXN0ZWQgbGluZSBpdGVtcyBsYXRlclxuICAgICAgICBsaW5lX2l0ZW1zOiBjLmxpbmVfaXRlbXMsXG4gICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogaS53aWRnZXRQcm9wcy5wYXltZW50VXNkQW1vdW50XG4gICAgICB9IDogdm9pZCAwXG4gICAgfSk7XG4gICAgaWYgKCFhLnN1Y2Nlc3MpXG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgYFBheWluIHdhcyBub3Qgc3VjY2Vzc2Z1bDogJHthLmRldGFpbC50eXBlfSAke2EuZGV0YWlsLm1lc3NhZ2V9ICR7SlNPTi5zdHJpbmdpZnkoYS5kZXRhaWwuZGF0YSl9YFxuICAgICAgKTtcbiAgICBjb25zdCBkID0gYXdhaXQgRyhzLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IGMudG9rZW4sXG4gICAgICB0aGVpcl9wbV9pZDogYS5wYXlpbi5wYXltZW50TWV0aG9kLnBheW1lbnRNZXRob2RJZCxcbiAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IGMubW9kZSAhPT0gXCJzZXR1cFwiID8gdS5jaGVja291dF9hdHRlbXB0X2lkIDogdm9pZCAwLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGxvb3BfY3VzdG9tZXI6IGEuY3VzdG9tZXIsXG4gICAgICAgIGxvb3BfcGF5aW46IGEucGF5aW5cbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoVChgQ29uZmlybSByZXN1bHQ6ICR7ZH1gKSwgYy5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIFQoXCJEb2luZyBwYXltZW50IHNldHVwLi4uXCIpLCBUKFwi4pScIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdCByZWNlaXZlZCBSZXN1bHQ6XCIsIGQpO1xuICAgICAgY29uc3QgZiA9IFNlKGQpO1xuICAgICAgcmV0dXJuIFQoYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHtmLnBheW1lbnRfbWV0aG9kX2lkfV1gKSwgeyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogZiB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoVChcIkRvaW5nIGNoZWNrb3V0Li4uXCIpLCAhZC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZSlcbiAgICAgICAgdGhyb3cgaWEoXCJDaGVja291dCBmYWlsZWQsIG5vIHBheS1maXJzdCBzdWNjZXNzIHJlc3BvbnNlOlwiLCBkKSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICAgIHJlc3VsdDogZC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZVxuICAgICAgfTtcbiAgICB9XG4gIH1cbik7XG5hc3luYyBmdW5jdGlvbiBsYSh0LCBuKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgciA9IChhd2FpdCBHdChuLmNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBuLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBhcHBsZV9wYXltZW50X3Nlc3Npb246IHtcbiAgICAgICAgICB2YWxpZGF0aW9uX3VybDogdC52YWxpZGF0aW9uVVJMLFxuICAgICAgICAgIGluaXRpYXRpdmVfY29udGV4dDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFxuICAgICAgICAgIHRoZWlyX2FjY291bnRfaWQ6IG4ucHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkpLm5leHRfYWN0aW9uX21ldGFkYXRhLCBhID0gciA9PSBudWxsID8gdm9pZCAwIDogci5hcHBsZV9wYXlfc2Vzc2lvbjtcbiAgICBpZiAoIWEpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXNzaW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgbi5zZXNzaW9uLmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKGEpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbi5zZXNzaW9uLmFib3J0KCksIGU7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIHVhKHQsIG4pIHtcbiAgdmFyIGUsIHI7XG4gIHRyeSB7XG4gICAgY29uc3QgYSA9IHQucGF5bWVudCwgaSA9IHJuKG4ubm9uQ2RlRm9ybUlucHV0cywgYSksIHMgPSB0ZShpLCBuLmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBhd2FpdCBoZShuLmNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IG4uY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IG4uY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBzW3AuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHNbcC5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHNbcC5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICAgICAgemlwX2NvZGU6IHNbcC5aSVBfQ09ERV0sXG4gICAgICAgIGNvdW50cnk6IHNbcC5DT1VOVFJZXVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGMgPSB7XG4gICAgICBkYXRhRGVzY3JpcHRvcjogXCJDT01NT04uQVBQTEUuSU5BUFAuUEFZTUVOVFwiLFxuICAgICAgZGF0YVZhbHVlOiB3aW5kb3cuYnRvYShKU09OLnN0cmluZ2lmeShhLnRva2VuLnBheW1lbnREYXRhKSlcbiAgICB9LCBsID0gYXdhaXQgRyhuLmNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogbi5wcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IG4uY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBtb2JpbGVfd2FsbGV0X3BheW1lbnRfZGF0YTogY1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghKChyID0gKGUgPSBsLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IGVbMF0pID09IG51bGwgPyB2b2lkIDAgOiByLmlkKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgIGNvbnN0IGQgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfU1VDQ0VTU1xuICAgIH07XG4gICAgcmV0dXJuIG4uc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQoZCksIGplKHtcbiAgICAgIGxvZ1ByZWZpeDogXCJhdXRobmV0LWFwcGxlcGF5XCIsXG4gICAgICBhbnlDZGVDb25uZWN0aW9uOiBuLmNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4uY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBzLFxuICAgICAgY29uZmlybVJlc3VsdDogbCxcbiAgICAgIHVzZVBheUZpcnN0RmxvdzogITFcbiAgICB9KTtcbiAgfSBjYXRjaCAoYSkge1xuICAgIGNvbnN0IGkgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfRkFJTFVSRVxuICAgIH07XG4gICAgdGhyb3cgbi5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChpKSwgYTtcbiAgfVxufVxuY29uc3Qgc24gPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pLCBjbiA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSksIHsgbG9nX186IHdlLCBlcnJfXzogSmUgfSA9IFAoXCJhdXRobmV0LWFwcGxlcGF5XCIpLCBkYSA9IHNlKFxuICBhc3luYyAoeyBjb250ZXh0OiB0LCBmb3JtQ2FsbGJhY2tzOiBuIH0pID0+IHtcbiAgICBjb25zdCBlID0ge1xuICAgICAgcHJvY2Vzc29yOiBWLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCByID0gWSh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIHNuKTtcbiAgICBpZiAoIXIpXG4gICAgICByZXR1cm4gZTtcbiAgICB3ZShcIkxvYWRpbmcgQXBwbGUgUGF5IFNESy4uLlwiKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgbm4oKSwgd2UoXCJBcHBsZSBQYXkgU0RLIGxvYWRlZCBzdWNjZXNzZnVsbHlcIik7XG4gICAgfSBjYXRjaCAoZikge1xuICAgICAgcmV0dXJuIEplKFwiRmFpbGVkIHRvIGxvYWQgQXBwbGUgUGF5IFNES1wiLCBmKSwgZTtcbiAgICB9XG4gICAgaWYgKCF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gd2UoXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpLCBlO1xuICAgIGlmICghYXdhaXQgQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIHdlKFwiTm8gYWN0aXZlIGNhcmRzIGF2YWlsYWJsZSBmb3IgQXBwbGUgUGF5XCIpLCBlO1xuICAgIGlmICghci5tZXRhZGF0YS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgY29uc3QgcyA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGF3YWl0IE0ocyksIGwgPSBjLm1vZGUgPT09IFwic2V0dXBcIiwgdSA9IGF3YWl0IF9lKHMsIGMudG9rZW4sIGwsIHZvaWQgMCksIGQgPSBhc3luYyAoZikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgQS5hdXRob3JpemVOZXRBcHBsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IEgodC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uZixcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiB1XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgIEplKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgaCksIG4uZ2V0Lm9uQ2hlY2tvdXRFcnJvcigoaCA9PSBudWxsID8gdm9pZCAwIDogaC5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBWLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGRcbiAgICB9O1xuICB9XG4pLCBwYSA9IGVlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgY3VzdG9tUGFyYW1zOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IGFcbiAgfSkgPT4ge1xuICAgIHZhciB2O1xuICAgIGNvbnN0IHsgaW5pdGlhbFByZXZpZXc6IGksIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHMgfSA9IHIsIGMgPSBZKHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgc24pLCB7IGN1cnJlbmN5Q29kZTogbCwgdG90YWw6IHUgfSA9IGFuKHtcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHMsXG4gICAgICBpbml0aWFsUHJldmlldzogaSxcbiAgICAgIGRlZmF1bHRMYWJlbDogKHYgPSBjID09IG51bGwgPyB2b2lkIDAgOiBjLm1ldGFkYXRhKSA9PSBudWxsID8gdm9pZCAwIDogdi5wcm9jZXNzb3JfYWNjb3VudF9uYW1lXG4gICAgfSksIGQgPSB0LmFueUNkZUNvbm5lY3Rpb24sIGYgPSBhd2FpdCBNKGQpLCBoID0gZi5tb2RlID09PSBcInNldHVwXCIsIHkgPSB7XG4gICAgICBjb3VudHJ5Q29kZTogXCJVU1wiLFxuICAgICAgY3VycmVuY3lDb2RlOiBsLFxuICAgICAgdG90YWw6IHUsXG4gICAgICByZXF1aXJlZEJpbGxpbmdDb250YWN0RmllbGRzOiBbXCJlbWFpbFwiLCBcInBvc3RhbEFkZHJlc3NcIiwgXCJuYW1lXCJdLFxuICAgICAgcmVxdWlyZWRTaGlwcGluZ0NvbnRhY3RGaWVsZHM6IFtcImVtYWlsXCJdLFxuICAgICAgc3VwcG9ydGVkTmV0d29ya3M6IFtcInZpc2FcIiwgXCJtYXN0ZXJDYXJkXCIsIFwiYW1leFwiLCBcImRpc2NvdmVyXCJdLFxuICAgICAgbWVyY2hhbnRDYXBhYmlsaXRpZXM6IFtcInN1cHBvcnRzM0RTXCIsIFwic3VwcG9ydHNDcmVkaXRcIiwgXCJzdXBwb3J0c0RlYml0XCJdLFxuICAgICAgcmVjdXJyaW5nUGF5bWVudFJlcXVlc3Q6IG9uKHtcbiAgICAgICAgdG90YWw6IHUsXG4gICAgICAgIHByZWZpbGw6IGZcbiAgICAgIH0pLFxuICAgICAgLi4uKHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMuYXBwbGVQYXlQYXltZW50UmVxdWVzdCkgPz8ge31cbiAgICB9LCBtID0gbmV3IEFwcGxlUGF5U2Vzc2lvbigzLCB5KSwgXyA9IHtcbiAgICAgIHNlc3Npb246IG0sXG4gICAgICBjb25uZWN0aW9uOiB0LmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiBlLFxuICAgICAgcHJvY2Vzc29yQWNjb3VudDogbi5tZXRhZGF0YSxcbiAgICAgIHByZWZpbGw6IGYsXG4gICAgICBpc1NldHVwTW9kZTogaCxcbiAgICAgIGJhc2VVcmw6IHQuYmFzZVVybCxcbiAgICAgIGZvcm1DYWxsYmFja3M6IGFcbiAgICB9O1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgodywgYikgPT4ge1xuICAgICAgbS5vbmNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgd2UoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpLCBiKG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIikpO1xuICAgICAgfSwgbS5vbnZhbGlkYXRlbWVyY2hhbnQgPSBhc3luYyAoRSkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGxhKEUsIF8pO1xuICAgICAgICB9IGNhdGNoIChEKSB7XG4gICAgICAgICAgYihEKTtcbiAgICAgICAgfVxuICAgICAgfSwgbS5vbnBheW1lbnRtZXRob2RzZWxlY3RlZCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgRSA9IHtcbiAgICAgICAgICBuZXdUb3RhbDogeS50b3RhbFxuICAgICAgICB9O1xuICAgICAgICBtLmNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbihFKTtcbiAgICAgIH0sIG0ub25wYXltZW50YXV0aG9yaXplZCA9IGFzeW5jIChFKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgRCA9IGF3YWl0IHVhKEUsIF8pO1xuICAgICAgICAgIHcoRCk7XG4gICAgICAgIH0gY2F0Y2ggKEQpIHtcbiAgICAgICAgICBiKEQpO1xuICAgICAgICB9XG4gICAgICB9LCBtLmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKHcpID0+IHtcbiAgICAgIHRocm93IEplKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgdyksIHc7XG4gICAgfSk7XG4gIH1cbiksIHsgbG9nX186IGllLCBlcnJfXzogYmUgfSA9IFAoXCJhdXRobmV0LWdvb2dsZXBheVwiKSwgbWEgPSBzZShcbiAgYXN5bmMgKHsgY29udGV4dDogdCwgZm9ybUNhbGxiYWNrczogbiB9KSA9PiB7XG4gICAgdmFyIGQsIGY7XG4gICAgaWUoXCJJbml0aWFsaXppbmcgQXV0aG5ldCBHb29nbGVQYXkgZmxvd1wiKTtcbiAgICBjb25zdCBlID0ge1xuICAgICAgcHJvY2Vzc29yOiBWLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCByID0gWSh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIGNuKTtcbiAgICBpZiAoIXIpXG4gICAgICByZXR1cm4gZTtcbiAgICBpZShcIkdvb2dsZSBQYXkgQ1BNXCIsIHIpO1xuICAgIGNvbnN0IGEgPSByLm1ldGFkYXRhO1xuICAgIGlmICghYS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHJldHVybiBiZShcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIiksIGU7XG4gICAgaWYgKGllKFwiTG9hZGluZyBHb29nbGUgUGF5IFNESy4uLlwiKSwgYXdhaXQgWHQoKSwgISgoZiA9IChkID0gd2luZG93Lmdvb2dsZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGQucGF5bWVudHMpICE9IG51bGwgJiYgZi5hcGkpKVxuICAgICAgcmV0dXJuIGJlKFwiR29vZ2xlIFBheSBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKSwgZTtcbiAgICBpZShcIkdvb2dsZSBQYXkgU0RLIGxvYWRlZFwiLCB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgaCA9ICRlKHtcbiAgICAgICAgZ2F0ZXdheTogXCJhdXRob3JpemVuZXRcIixcbiAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IGEucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICAgIG1lcmNoYW50TmFtZTogYS5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgICBtZXJjaGFudElkOiBhLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgICAgLy8gVGhpcyBpcyBmb3IgaW5pdGlhbCBwYXltZW50IHJlcXVlc3QgdG8gY2hlY2sgYXZhaWxhYmlsaXR5LiBBY3R1YWwgYGluaXRpYWxQcmV2aWV3YCB3aWxsIGJlIHVzZWQgd2hlbiB0aGUgVUkgaXMgc2hvd25cbiAgICAgICAgaW5pdGlhbFByZXZpZXc6IHtcbiAgICAgICAgICBhbW91bnRBdG9tOiAwLFxuICAgICAgICAgIGN1cnJlbmN5OiBcIlVTRFwiXG4gICAgICAgIH1cbiAgICAgIH0pLCB7IHJlc3VsdDogeSB9ID0gYXdhaXQgemUodC5iYXNlVXJsLCBoKS5pc1JlYWR5VG9QYXkoXG4gICAgICAgIGhcbiAgICAgICk7XG4gICAgICBpZiAoIXkpXG4gICAgICAgIHJldHVybiBpZShcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpLCBlO1xuICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgIHJldHVybiBiZShcIkVycm9yIGNoZWNraW5nIEdvb2dsZSBQYXkgYXZhaWxhYmlsaXR5XCIsIGgpLCBlO1xuICAgIH1cbiAgICBjb25zdCBpID0gdC5hbnlDZGVDb25uZWN0aW9uLCBzID0gYXdhaXQgTShpKSwgYyA9IHMubW9kZSA9PT0gXCJzZXR1cFwiLCBsID0gYXdhaXQgX2UoaSwgcy50b2tlbiwgYywgdm9pZCAwKSwgdSA9IGFzeW5jIChoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBBLmF1dGhvcml6ZU5ldEdvb2dsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IEgodC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLmgsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlldzogbFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoICh5KSB7XG4gICAgICAgIGJlKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIHkpLCBuLmdldC5vbkNoZWNrb3V0RXJyb3IoKHkgPT0gbnVsbCA/IHZvaWQgMCA6IHkubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogVi5FbnVtLmF1dGhvcml6ZV9uZXQsXG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiB1XG4gICAgfTtcbiAgfVxuKSwgeWEgPSBlZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IG4sXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBlLFxuICAgIGZvcm1DYWxsYmFja3M6IHIsXG4gICAgY3VzdG9tUGFyYW1zOiBhXG4gIH0pID0+IHtcbiAgICB2YXIgZiwgaCwgeSwgbTtcbiAgICBjb25zdCB7IGluaXRpYWxQcmV2aWV3OiBpLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzIH0gPSBhLCBsID0gWSh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIGNuKS5tZXRhZGF0YSwgdSA9ICRlKHtcbiAgICAgIGdhdGV3YXk6IFwiYXV0aG9yaXplbmV0XCIsXG4gICAgICBnYXRld2F5TWVyY2hhbnRJZDogbC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgIG1lcmNoYW50TmFtZTogbC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgbWVyY2hhbnRJZDogbC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICBpbml0aWFsUHJldmlldzogaSxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHNcbiAgICB9KSwgZCA9IHplKHQuYmFzZVVybCwgdSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IF8gPSBhd2FpdCBkLmxvYWRQYXltZW50RGF0YSh1KTtcbiAgICAgIGllKFwiR29vZ2xlIFBheSBQYXltZW50IGRhdGFcIiwgXyk7XG4gICAgICBjb25zdCB2ID0gdC5hbnlDZGVDb25uZWN0aW9uLCB3ID0gYXdhaXQgTSh2KSwgYiA9IHRuKG4sIF8pLCBFID0gdGUoYiwgci5nZXQub25WYWxpZGF0aW9uRXJyb3IpLCBEID0gKGggPSAoZiA9IF8ucGF5bWVudE1ldGhvZERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBmLnRva2VuaXphdGlvbkRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBoLnRva2VuO1xuICAgICAgaWYgKCFEKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IHRva2VuIHJlY2VpdmVkIGZyb20gR29vZ2xlIFBheVwiKTtcbiAgICAgIGNvbnN0IE4gPSBhd2FpdCBoZSh2LCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGUucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBlLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IEVbcC5FTUFJTF0sXG4gICAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBFW3AuRklSU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IEVbcC5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICAgIHppcF9jb2RlOiBFW3AuWklQX0NPREVdLFxuICAgICAgICAgIGNvdW50cnk6IEVbcC5DT1VOVFJZXVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGllKFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIE4pO1xuICAgICAgY29uc3QgayA9IGF3YWl0IEcodiwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHcudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGUucHJvdmlkZXIsXG4gICAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICAgIGRhdGFEZXNjcmlwdG9yOiBcIkNPTU1PTi5HT09HTEUuSU5BUFAuUEFZTUVOVFwiLFxuICAgICAgICAgICAgZGF0YVZhbHVlOiB3aW5kb3cuYnRvYShEKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAoISgobSA9ICh5ID0gay5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiB5WzBdKSA9PSBudWxsID8gdm9pZCAwIDogbS5pZCkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgICAgcmV0dXJuIGplKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF1dGhuZXQtZ29vZ2xlcGF5XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IHYsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZSxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBFLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBrLFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChfKSB7XG4gICAgICB0aHJvdyBiZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBfKSwgbmV3IEVycm9yKChfID09IG51bGwgPyB2b2lkIDAgOiBfLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksIHZlID0gKHQsIG4sIGUpID0+IHtcbiAgY29uc3QgciA9IHQuZmlsdGVyKChhKSA9PiB7XG4gICAgY29uc3QgaSA9IGUgPT09IHZvaWQgMCA/ICEwIDogYS5wcm9jZXNzb3JfbmFtZSA9PT0gZSwgcyA9IGEucHJvdmlkZXIgPT09IG47XG4gICAgcmV0dXJuIGkgJiYgcztcbiAgfSk7XG4gIGlmIChyLmxlbmd0aCA9PT0gMClcbiAgICB0aHJvdyBjb25zb2xlLmVycm9yKFwiQ1BNcyBsaXN0XCIsIHQpLCBuZXcgRXJyb3IoYE5vIENQTXMgZm91bmQgd2l0aCBwcm92aWRlciAnJHtufScgYW5kIHByb2Nlc3NvciAnJHtlfSdgKTtcbiAgaWYgKHIubGVuZ3RoICE9PSAxKVxuICAgIHRocm93IGNvbnNvbGUuZXJyb3IoXCJDUE1zIGxpc3RcIiwgdCksIG5ldyBFcnJvcihgTW9yZSB0aGFuIG9uZSBDUE0gZm91bmQgd2l0aCBwcm92aWRlciAnJHtufScgYW5kIHByb2Nlc3NvciAnJHtlfSdgKTtcbiAgcmV0dXJuIHJbMF07XG59LCBBID0ge1xuICAvLyDinIsgTm90ZTogRm9yIGZsb3dzIHRoYXQgcmVxdWlyZSBpbml0aWFsaXphdGlvbiwgcGxlYXNlIGFkZCB0aGVtIHRvIGBpbml0LWZsb3dzLnRzYFxuICAvLyBDb21tb25cbiAgY29tbW9uQ0M6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IERvXG4gIH0sXG4gIC8vIFN0cmlwZVxuICBzdHJpcGVQUjoge1xuICAgIGluaXQ6ICRvLFxuICAgIHJ1bjogem9cbiAgfSxcbiAgc3RyaXBlTGluazoge1xuICAgIGluaXQ6IGVvLFxuICAgIHJ1bjogdG9cbiAgfSxcbiAgLy8gUG9ja3l0XG4gIHBvY2t5dFBheXBhbDoge1xuICAgIHJ1bjogS29cbiAgfSxcbiAgLy8gQWlyd2FsbGV4XG4gIGFpcndhbGxleEdvb2dsZVBheToge1xuICAgIGluaXQ6IEhvLFxuICAgIHJ1bjogSm9cbiAgfSxcbiAgYWlyd2FsbGV4QXBwbGVQYXk6IHtcbiAgICBpbml0OiBuYSxcbiAgICBydW46IHJhXG4gIH0sXG4gIC8vIExvb3BcbiAgbG9vcENyeXB0bzoge1xuICAgIGluaXQ6IHNhLFxuICAgIHJ1bjogY2FcbiAgfSxcbiAgYXV0aG9yaXplTmV0QXBwbGVQYXk6IHtcbiAgICBpbml0OiBkYSxcbiAgICBydW46IHBhXG4gIH0sXG4gIGF1dGhvcml6ZU5ldEdvb2dsZVBheToge1xuICAgIGluaXQ6IG1hLFxuICAgIHJ1bjogeWFcbiAgfVxuICAvLyDwn5GJIEFkZCBtb3JlIGZsb3dzIGhlcmVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbn07XG52YXIgWmUgPSBmdW5jdGlvbih0LCBuKSB7XG4gIHJldHVybiBaZSA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uKGUsIHIpIHtcbiAgICBlLl9fcHJvdG9fXyA9IHI7XG4gIH0gfHwgZnVuY3Rpb24oZSwgcikge1xuICAgIGZvciAodmFyIGEgaW4gcikgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIGEpICYmIChlW2FdID0gclthXSk7XG4gIH0sIFplKHQsIG4pO1xufTtcbmZ1bmN0aW9uIG5lKHQsIG4pIHtcbiAgaWYgKHR5cGVvZiBuICE9IFwiZnVuY3Rpb25cIiAmJiBuICE9PSBudWxsKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKG4pICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgWmUodCwgbik7XG4gIGZ1bmN0aW9uIGUoKSB7XG4gICAgdGhpcy5jb25zdHJ1Y3RvciA9IHQ7XG4gIH1cbiAgdC5wcm90b3R5cGUgPSBuID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShuKSA6IChlLnByb3RvdHlwZSA9IG4ucHJvdG90eXBlLCBuZXcgZSgpKTtcbn1cbmZ1bmN0aW9uIGZhKHQsIG4sIGUsIHIpIHtcbiAgZnVuY3Rpb24gYShpKSB7XG4gICAgcmV0dXJuIGkgaW5zdGFuY2VvZiBlID8gaSA6IG5ldyBlKGZ1bmN0aW9uKHMpIHtcbiAgICAgIHMoaSk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG5ldyAoZSB8fCAoZSA9IFByb21pc2UpKShmdW5jdGlvbihpLCBzKSB7XG4gICAgZnVuY3Rpb24gYyhkKSB7XG4gICAgICB0cnkge1xuICAgICAgICB1KHIubmV4dChkKSk7XG4gICAgICB9IGNhdGNoIChmKSB7XG4gICAgICAgIHMoZik7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGwoZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdShyLnRocm93KGQpKTtcbiAgICAgIH0gY2F0Y2ggKGYpIHtcbiAgICAgICAgcyhmKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdShkKSB7XG4gICAgICBkLmRvbmUgPyBpKGQudmFsdWUpIDogYShkLnZhbHVlKS50aGVuKGMsIGwpO1xuICAgIH1cbiAgICB1KChyID0gci5hcHBseSh0LCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gbG4odCwgbikge1xuICB2YXIgZSA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmIChpWzBdICYgMSkgdGhyb3cgaVsxXTtcbiAgICByZXR1cm4gaVsxXTtcbiAgfSwgdHJ5czogW10sIG9wczogW10gfSwgciwgYSwgaSwgcyA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBJdGVyYXRvciA9PSBcImZ1bmN0aW9uXCIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTtcbiAgcmV0dXJuIHMubmV4dCA9IGMoMCksIHMudGhyb3cgPSBjKDEpLCBzLnJldHVybiA9IGMoMiksIHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIChzW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSksIHM7XG4gIGZ1bmN0aW9uIGModSkge1xuICAgIHJldHVybiBmdW5jdGlvbihkKSB7XG4gICAgICByZXR1cm4gbChbdSwgZF0pO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gbCh1KSB7XG4gICAgaWYgKHIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgIGZvciAoOyBzICYmIChzID0gMCwgdVswXSAmJiAoZSA9IDApKSwgZTsgKSB0cnkge1xuICAgICAgaWYgKHIgPSAxLCBhICYmIChpID0gdVswXSAmIDIgPyBhLnJldHVybiA6IHVbMF0gPyBhLnRocm93IHx8ICgoaSA9IGEucmV0dXJuKSAmJiBpLmNhbGwoYSksIDApIDogYS5uZXh0KSAmJiAhKGkgPSBpLmNhbGwoYSwgdVsxXSkpLmRvbmUpIHJldHVybiBpO1xuICAgICAgc3dpdGNoIChhID0gMCwgaSAmJiAodSA9IFt1WzBdICYgMiwgaS52YWx1ZV0pLCB1WzBdKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGkgPSB1O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIGUubGFiZWwrKywgeyB2YWx1ZTogdVsxXSwgZG9uZTogITEgfTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIGUubGFiZWwrKywgYSA9IHVbMV0sIHUgPSBbMF07XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICB1ID0gZS5vcHMucG9wKCksIGUudHJ5cy5wb3AoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoaSA9IGUudHJ5cywgIShpID0gaS5sZW5ndGggPiAwICYmIGlbaS5sZW5ndGggLSAxXSkgJiYgKHVbMF0gPT09IDYgfHwgdVswXSA9PT0gMikpIHtcbiAgICAgICAgICAgIGUgPSAwO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1WzBdID09PSAzICYmICghaSB8fCB1WzFdID4gaVswXSAmJiB1WzFdIDwgaVszXSkpIHtcbiAgICAgICAgICAgIGUubGFiZWwgPSB1WzFdO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1WzBdID09PSA2ICYmIGUubGFiZWwgPCBpWzFdKSB7XG4gICAgICAgICAgICBlLmxhYmVsID0gaVsxXSwgaSA9IHU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGkgJiYgZS5sYWJlbCA8IGlbMl0pIHtcbiAgICAgICAgICAgIGUubGFiZWwgPSBpWzJdLCBlLm9wcy5wdXNoKHUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlbMl0gJiYgZS5vcHMucG9wKCksIGUudHJ5cy5wb3AoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHUgPSBuLmNhbGwodCwgZSk7XG4gICAgfSBjYXRjaCAoZCkge1xuICAgICAgdSA9IFs2LCBkXSwgYSA9IDA7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHIgPSBpID0gMDtcbiAgICB9XG4gICAgaWYgKHVbMF0gJiA1KSB0aHJvdyB1WzFdO1xuICAgIHJldHVybiB7IHZhbHVlOiB1WzBdID8gdVsxXSA6IHZvaWQgMCwgZG9uZTogITAgfTtcbiAgfVxufVxuZnVuY3Rpb24geWUodCkge1xuICB2YXIgbiA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgZSA9IG4gJiYgdFtuXSwgciA9IDA7XG4gIGlmIChlKSByZXR1cm4gZS5jYWxsKHQpO1xuICBpZiAodCAmJiB0eXBlb2YgdC5sZW5ndGggPT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0ICYmIHIgPj0gdC5sZW5ndGggJiYgKHQgPSB2b2lkIDApLCB7IHZhbHVlOiB0ICYmIHRbcisrXSwgZG9uZTogIXQgfTtcbiAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IobiA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cbmZ1bmN0aW9uIERlKHQsIG4pIHtcbiAgdmFyIGUgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiB0W1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghZSkgcmV0dXJuIHQ7XG4gIHZhciByID0gZS5jYWxsKHQpLCBhLCBpID0gW10sIHM7XG4gIHRyeSB7XG4gICAgZm9yICg7IChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShhID0gci5uZXh0KCkpLmRvbmU7ICkgaS5wdXNoKGEudmFsdWUpO1xuICB9IGNhdGNoIChjKSB7XG4gICAgcyA9IHsgZXJyb3I6IGMgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgYSAmJiAhYS5kb25lICYmIChlID0gci5yZXR1cm4pICYmIGUuY2FsbChyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHMpIHRocm93IHMuZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBpO1xufVxuZnVuY3Rpb24gT2UodCwgbiwgZSkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgciA9IDAsIGEgPSBuLmxlbmd0aCwgaTsgciA8IGE7IHIrKylcbiAgICAoaSB8fCAhKHIgaW4gbikpICYmIChpIHx8IChpID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobiwgMCwgcikpLCBpW3JdID0gbltyXSk7XG4gIHJldHVybiB0LmNvbmNhdChpIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG4pKTtcbn1cbmZ1bmN0aW9uIHBlKHQpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBwZSA/ICh0aGlzLnYgPSB0LCB0aGlzKSA6IG5ldyBwZSh0KTtcbn1cbmZ1bmN0aW9uIGhhKHQsIG4sIGUpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIHIgPSBlLmFwcGx5KHQsIG4gfHwgW10pLCBhLCBpID0gW107XG4gIHJldHVybiBhID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgYyhcIm5leHRcIiksIGMoXCJ0aHJvd1wiKSwgYyhcInJldHVyblwiLCBzKSwgYVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgYTtcbiAgZnVuY3Rpb24gcyh5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG0pIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobSkudGhlbih5LCBmKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGMoeSwgbSkge1xuICAgIHJbeV0gJiYgKGFbeV0gPSBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odiwgdykge1xuICAgICAgICBpLnB1c2goW3ksIF8sIHYsIHddKSA+IDEgfHwgbCh5LCBfKTtcbiAgICAgIH0pO1xuICAgIH0sIG0gJiYgKGFbeV0gPSBtKGFbeV0pKSk7XG4gIH1cbiAgZnVuY3Rpb24gbCh5LCBtKSB7XG4gICAgdHJ5IHtcbiAgICAgIHUoclt5XShtKSk7XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgaChpWzBdWzNdLCBfKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gdSh5KSB7XG4gICAgeS52YWx1ZSBpbnN0YW5jZW9mIHBlID8gUHJvbWlzZS5yZXNvbHZlKHkudmFsdWUudikudGhlbihkLCBmKSA6IGgoaVswXVsyXSwgeSk7XG4gIH1cbiAgZnVuY3Rpb24gZCh5KSB7XG4gICAgbChcIm5leHRcIiwgeSk7XG4gIH1cbiAgZnVuY3Rpb24gZih5KSB7XG4gICAgbChcInRocm93XCIsIHkpO1xuICB9XG4gIGZ1bmN0aW9uIGgoeSwgbSkge1xuICAgIHkobSksIGkuc2hpZnQoKSwgaS5sZW5ndGggJiYgbChpWzBdWzBdLCBpWzBdWzFdKTtcbiAgfVxufVxuZnVuY3Rpb24gX2EodCkge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgbiA9IHRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBlO1xuICByZXR1cm4gbiA/IG4uY2FsbCh0KSA6ICh0ID0gdHlwZW9mIHllID09IFwiZnVuY3Rpb25cIiA/IHllKHQpIDogdFtTeW1ib2wuaXRlcmF0b3JdKCksIGUgPSB7fSwgcihcIm5leHRcIiksIHIoXCJ0aHJvd1wiKSwgcihcInJldHVyblwiKSwgZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgZSk7XG4gIGZ1bmN0aW9uIHIoaSkge1xuICAgIGVbaV0gPSB0W2ldICYmIGZ1bmN0aW9uKHMpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihjLCBsKSB7XG4gICAgICAgIHMgPSB0W2ldKHMpLCBhKGMsIGwsIHMuZG9uZSwgcy52YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGEoaSwgcywgYywgbCkge1xuICAgIFByb21pc2UucmVzb2x2ZShsKS50aGVuKGZ1bmN0aW9uKHUpIHtcbiAgICAgIGkoeyB2YWx1ZTogdSwgZG9uZTogYyB9KTtcbiAgICB9LCBzKTtcbiAgfVxufVxuZnVuY3Rpb24gRih0KSB7XG4gIHJldHVybiB0eXBlb2YgdCA9PSBcImZ1bmN0aW9uXCI7XG59XG5mdW5jdGlvbiBHZSh0KSB7XG4gIHZhciBuID0gZnVuY3Rpb24ocikge1xuICAgIEVycm9yLmNhbGwociksIHIuc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbiAgfSwgZSA9IHQobik7XG4gIHJldHVybiBlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSwgZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBlLCBlO1xufVxudmFyIFllID0gR2UoZnVuY3Rpb24odCkge1xuICByZXR1cm4gZnVuY3Rpb24oZSkge1xuICAgIHQodGhpcyksIHRoaXMubWVzc2FnZSA9IGUgPyBlLmxlbmd0aCArIGAgZXJyb3JzIG9jY3VycmVkIGR1cmluZyB1bnN1YnNjcmlwdGlvbjpcbmAgKyBlLm1hcChmdW5jdGlvbihyLCBhKSB7XG4gICAgICByZXR1cm4gYSArIDEgKyBcIikgXCIgKyByLnRvU3RyaW5nKCk7XG4gICAgfSkuam9pbihgXG4gIGApIDogXCJcIiwgdGhpcy5uYW1lID0gXCJVbnN1YnNjcmlwdGlvbkVycm9yXCIsIHRoaXMuZXJyb3JzID0gZTtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gTmUodCwgbikge1xuICBpZiAodCkge1xuICAgIHZhciBlID0gdC5pbmRleE9mKG4pO1xuICAgIDAgPD0gZSAmJiB0LnNwbGljZShlLCAxKTtcbiAgfVxufVxudmFyIFBlID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHQobikge1xuICAgIHRoaXMuaW5pdGlhbFRlYXJkb3duID0gbiwgdGhpcy5jbG9zZWQgPSAhMSwgdGhpcy5fcGFyZW50YWdlID0gbnVsbCwgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIG4sIGUsIHIsIGEsIGk7XG4gICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgdGhpcy5jbG9zZWQgPSAhMDtcbiAgICAgIHZhciBzID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgaWYgKHMpXG4gICAgICAgIGlmICh0aGlzLl9wYXJlbnRhZ2UgPSBudWxsLCBBcnJheS5pc0FycmF5KHMpKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciBjID0geWUocyksIGwgPSBjLm5leHQoKTsgIWwuZG9uZTsgbCA9IGMubmV4dCgpKSB7XG4gICAgICAgICAgICAgIHZhciB1ID0gbC52YWx1ZTtcbiAgICAgICAgICAgICAgdS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAgICAgbiA9IHsgZXJyb3I6IF8gfTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgbCAmJiAhbC5kb25lICYmIChlID0gYy5yZXR1cm4pICYmIGUuY2FsbChjKTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgIGlmIChuKSB0aHJvdyBuLmVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgIHMucmVtb3ZlKHRoaXMpO1xuICAgICAgdmFyIGQgPSB0aGlzLmluaXRpYWxUZWFyZG93bjtcbiAgICAgIGlmIChGKGQpKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGQoKTtcbiAgICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAgIGkgPSBfIGluc3RhbmNlb2YgWWUgPyBfLmVycm9ycyA6IFtfXTtcbiAgICAgICAgfVxuICAgICAgdmFyIGYgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgICAgaWYgKGYpIHtcbiAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZm9yICh2YXIgaCA9IHllKGYpLCB5ID0gaC5uZXh0KCk7ICF5LmRvbmU7IHkgPSBoLm5leHQoKSkge1xuICAgICAgICAgICAgdmFyIG0gPSB5LnZhbHVlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgaHQobSk7XG4gICAgICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgICAgIGkgPSBpID8/IFtdLCBfIGluc3RhbmNlb2YgWWUgPyBpID0gT2UoT2UoW10sIERlKGkpKSwgRGUoXy5lcnJvcnMpKSA6IGkucHVzaChfKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgICByID0geyBlcnJvcjogXyB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB5ICYmICF5LmRvbmUgJiYgKGEgPSBoLnJldHVybikgJiYgYS5jYWxsKGgpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAocikgdGhyb3cgci5lcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpKVxuICAgICAgICB0aHJvdyBuZXcgWWUoaSk7XG4gICAgfVxuICB9LCB0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbihuKSB7XG4gICAgdmFyIGU7XG4gICAgaWYgKG4gJiYgbiAhPT0gdGhpcylcbiAgICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgICAgaHQobik7XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKG4gaW5zdGFuY2VvZiB0KSB7XG4gICAgICAgICAgaWYgKG4uY2xvc2VkIHx8IG4uX2hhc1BhcmVudCh0aGlzKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICBuLl9hZGRQYXJlbnQodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgKHRoaXMuX2ZpbmFsaXplcnMgPSAoZSA9IHRoaXMuX2ZpbmFsaXplcnMpICE9PSBudWxsICYmIGUgIT09IHZvaWQgMCA/IGUgOiBbXSkucHVzaChuKTtcbiAgICAgIH1cbiAgfSwgdC5wcm90b3R5cGUuX2hhc1BhcmVudCA9IGZ1bmN0aW9uKG4pIHtcbiAgICB2YXIgZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICByZXR1cm4gZSA9PT0gbiB8fCBBcnJheS5pc0FycmF5KGUpICYmIGUuaW5jbHVkZXMobik7XG4gIH0sIHQucHJvdG90eXBlLl9hZGRQYXJlbnQgPSBmdW5jdGlvbihuKSB7XG4gICAgdmFyIGUgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgdGhpcy5fcGFyZW50YWdlID0gQXJyYXkuaXNBcnJheShlKSA/IChlLnB1c2gobiksIGUpIDogZSA/IFtlLCBuXSA6IG47XG4gIH0sIHQucHJvdG90eXBlLl9yZW1vdmVQYXJlbnQgPSBmdW5jdGlvbihuKSB7XG4gICAgdmFyIGUgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgZSA9PT0gbiA/IHRoaXMuX3BhcmVudGFnZSA9IG51bGwgOiBBcnJheS5pc0FycmF5KGUpICYmIE5lKGUsIG4pO1xuICB9LCB0LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbihuKSB7XG4gICAgdmFyIGUgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgIGUgJiYgTmUoZSwgbiksIG4gaW5zdGFuY2VvZiB0ICYmIG4uX3JlbW92ZVBhcmVudCh0aGlzKTtcbiAgfSwgdC5FTVBUWSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBuID0gbmV3IHQoKTtcbiAgICByZXR1cm4gbi5jbG9zZWQgPSAhMCwgbjtcbiAgfSgpLCB0O1xufSgpLCB1biA9IFBlLkVNUFRZO1xuZnVuY3Rpb24gZG4odCkge1xuICByZXR1cm4gdCBpbnN0YW5jZW9mIFBlIHx8IHQgJiYgXCJjbG9zZWRcIiBpbiB0ICYmIEYodC5yZW1vdmUpICYmIEYodC5hZGQpICYmIEYodC51bnN1YnNjcmliZSk7XG59XG5mdW5jdGlvbiBodCh0KSB7XG4gIEYodCkgPyB0KCkgOiB0LnVuc3Vic2NyaWJlKCk7XG59XG52YXIgcG4gPSB7XG4gIG9uVW5oYW5kbGVkRXJyb3I6IG51bGwsXG4gIG9uU3RvcHBlZE5vdGlmaWNhdGlvbjogbnVsbCxcbiAgUHJvbWlzZTogdm9pZCAwLFxuICB1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nOiAhMSxcbiAgdXNlRGVwcmVjYXRlZE5leHRDb250ZXh0OiAhMVxufSwgbW4gPSB7XG4gIHNldFRpbWVvdXQ6IGZ1bmN0aW9uKHQsIG4pIHtcbiAgICBmb3IgKHZhciBlID0gW10sIHIgPSAyOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgZVtyIC0gMl0gPSBhcmd1bWVudHNbcl07XG4gICAgcmV0dXJuIHNldFRpbWVvdXQuYXBwbHkodm9pZCAwLCBPZShbdCwgbl0sIERlKGUpKSk7XG4gIH0sXG4gIGNsZWFyVGltZW91dDogZnVuY3Rpb24odCkge1xuICAgIHJldHVybiAoY2xlYXJUaW1lb3V0KSh0KTtcbiAgfSxcbiAgZGVsZWdhdGU6IHZvaWQgMFxufTtcbmZ1bmN0aW9uIHluKHQpIHtcbiAgbW4uc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICB0aHJvdyB0O1xuICB9KTtcbn1cbmZ1bmN0aW9uIF90KCkge1xufVxuZnVuY3Rpb24gRmUodCkge1xuICB0KCk7XG59XG52YXIgYXQgPSBmdW5jdGlvbih0KSB7XG4gIG5lKG4sIHQpO1xuICBmdW5jdGlvbiBuKGUpIHtcbiAgICB2YXIgciA9IHQuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiByLmlzU3RvcHBlZCA9ICExLCBlID8gKHIuZGVzdGluYXRpb24gPSBlLCBkbihlKSAmJiBlLmFkZChyKSkgOiByLmRlc3RpbmF0aW9uID0gdmEsIHI7XG4gIH1cbiAgcmV0dXJuIG4uY3JlYXRlID0gZnVuY3Rpb24oZSwgciwgYSkge1xuICAgIHJldHVybiBuZXcgQmUoZSwgciwgYSk7XG4gIH0sIG4ucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihlKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgdGhpcy5fbmV4dChlKTtcbiAgfSwgbi5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihlKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIHRoaXMuX2Vycm9yKGUpKTtcbiAgfSwgbi5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSAhMCwgdGhpcy5fY29tcGxldGUoKSk7XG4gIH0sIG4ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5jbG9zZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyksIHRoaXMuZGVzdGluYXRpb24gPSBudWxsKTtcbiAgfSwgbi5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbihlKSB7XG4gICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KGUpO1xuICB9LCBuLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbihlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH0sIG4ucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH0sIG47XG59KFBlKSwgZ2EgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZDtcbmZ1bmN0aW9uIEtlKHQsIG4pIHtcbiAgcmV0dXJuIGdhLmNhbGwodCwgbik7XG59XG52YXIgd2EgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gdChuKSB7XG4gICAgdGhpcy5wYXJ0aWFsT2JzZXJ2ZXIgPSBuO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24obikge1xuICAgIHZhciBlID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKGUubmV4dClcbiAgICAgIHRyeSB7XG4gICAgICAgIGUubmV4dChuKTtcbiAgICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgICAgSWUocik7XG4gICAgICB9XG4gIH0sIHQucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24obikge1xuICAgIHZhciBlID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKGUuZXJyb3IpXG4gICAgICB0cnkge1xuICAgICAgICBlLmVycm9yKG4pO1xuICAgICAgfSBjYXRjaCAocikge1xuICAgICAgICBJZShyKTtcbiAgICAgIH1cbiAgICBlbHNlXG4gICAgICBJZShuKTtcbiAgfSwgdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgbiA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgIGlmIChuLmNvbXBsZXRlKVxuICAgICAgdHJ5IHtcbiAgICAgICAgbi5jb21wbGV0ZSgpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBJZShlKTtcbiAgICAgIH1cbiAgfSwgdDtcbn0oKSwgQmUgPSBmdW5jdGlvbih0KSB7XG4gIG5lKG4sIHQpO1xuICBmdW5jdGlvbiBuKGUsIHIsIGEpIHtcbiAgICB2YXIgaSA9IHQuY2FsbCh0aGlzKSB8fCB0aGlzLCBzO1xuICAgIGlmIChGKGUpIHx8ICFlKVxuICAgICAgcyA9IHtcbiAgICAgICAgbmV4dDogZSA/PyB2b2lkIDAsXG4gICAgICAgIGVycm9yOiByID8/IHZvaWQgMCxcbiAgICAgICAgY29tcGxldGU6IGEgPz8gdm9pZCAwXG4gICAgICB9O1xuICAgIGVsc2Uge1xuICAgICAgdmFyIGM7XG4gICAgICBpICYmIHBuLnVzZURlcHJlY2F0ZWROZXh0Q29udGV4dCA/IChjID0gT2JqZWN0LmNyZWF0ZShlKSwgYy51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaS51bnN1YnNjcmliZSgpO1xuICAgICAgfSwgcyA9IHtcbiAgICAgICAgbmV4dDogZS5uZXh0ICYmIEtlKGUubmV4dCwgYyksXG4gICAgICAgIGVycm9yOiBlLmVycm9yICYmIEtlKGUuZXJyb3IsIGMpLFxuICAgICAgICBjb21wbGV0ZTogZS5jb21wbGV0ZSAmJiBLZShlLmNvbXBsZXRlLCBjKVxuICAgICAgfSkgOiBzID0gZTtcbiAgICB9XG4gICAgcmV0dXJuIGkuZGVzdGluYXRpb24gPSBuZXcgd2EocyksIGk7XG4gIH1cbiAgcmV0dXJuIG47XG59KGF0KTtcbmZ1bmN0aW9uIEllKHQpIHtcbiAgeW4odCk7XG59XG5mdW5jdGlvbiBiYSh0KSB7XG4gIHRocm93IHQ7XG59XG52YXIgdmEgPSB7XG4gIGNsb3NlZDogITAsXG4gIG5leHQ6IF90LFxuICBlcnJvcjogYmEsXG4gIGNvbXBsZXRlOiBfdFxufSwgaXQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5vYnNlcnZhYmxlIHx8IFwiQEBvYnNlcnZhYmxlXCI7XG59KCk7XG5mdW5jdGlvbiBFYSh0KSB7XG4gIHJldHVybiB0O1xufVxuZnVuY3Rpb24gQ2EodCkge1xuICByZXR1cm4gdC5sZW5ndGggPT09IDAgPyBFYSA6IHQubGVuZ3RoID09PSAxID8gdFswXSA6IGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gdC5yZWR1Y2UoZnVuY3Rpb24ociwgYSkge1xuICAgICAgcmV0dXJuIGEocik7XG4gICAgfSwgZSk7XG4gIH07XG59XG52YXIgWCA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiB0KG4pIHtcbiAgICBuICYmICh0aGlzLl9zdWJzY3JpYmUgPSBuKTtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uKG4pIHtcbiAgICB2YXIgZSA9IG5ldyB0KCk7XG4gICAgcmV0dXJuIGUuc291cmNlID0gdGhpcywgZS5vcGVyYXRvciA9IG4sIGU7XG4gIH0sIHQucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uKG4sIGUsIHIpIHtcbiAgICB2YXIgYSA9IHRoaXMsIGkgPSBQYShuKSA/IG4gOiBuZXcgQmUobiwgZSwgcik7XG4gICAgcmV0dXJuIEZlKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHMgPSBhLCBjID0gcy5vcGVyYXRvciwgbCA9IHMuc291cmNlO1xuICAgICAgaS5hZGQoYyA/IGMuY2FsbChpLCBsKSA6IGwgPyBhLl9zdWJzY3JpYmUoaSkgOiBhLl90cnlTdWJzY3JpYmUoaSkpO1xuICAgIH0pLCBpO1xuICB9LCB0LnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24obikge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5fc3Vic2NyaWJlKG4pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIG4uZXJyb3IoZSk7XG4gICAgfVxuICB9LCB0LnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24obiwgZSkge1xuICAgIHZhciByID0gdGhpcztcbiAgICByZXR1cm4gZSA9IGd0KGUpLCBuZXcgZShmdW5jdGlvbihhLCBpKSB7XG4gICAgICB2YXIgcyA9IG5ldyBCZSh7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uKGMpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbihjKTtcbiAgICAgICAgICB9IGNhdGNoIChsKSB7XG4gICAgICAgICAgICBpKGwpLCBzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogaSxcbiAgICAgICAgY29tcGxldGU6IGFcbiAgICAgIH0pO1xuICAgICAgci5zdWJzY3JpYmUocyk7XG4gICAgfSk7XG4gIH0sIHQucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihuKSB7XG4gICAgdmFyIGU7XG4gICAgcmV0dXJuIChlID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUuc3Vic2NyaWJlKG4pO1xuICB9LCB0LnByb3RvdHlwZVtpdF0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgdC5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uKCkge1xuICAgIGZvciAodmFyIG4gPSBbXSwgZSA9IDA7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspXG4gICAgICBuW2VdID0gYXJndW1lbnRzW2VdO1xuICAgIHJldHVybiBDYShuKSh0aGlzKTtcbiAgfSwgdC5wcm90b3R5cGUudG9Qcm9taXNlID0gZnVuY3Rpb24obikge1xuICAgIHZhciBlID0gdGhpcztcbiAgICByZXR1cm4gbiA9IGd0KG4pLCBuZXcgbihmdW5jdGlvbihyLCBhKSB7XG4gICAgICB2YXIgaTtcbiAgICAgIGUuc3Vic2NyaWJlKGZ1bmN0aW9uKHMpIHtcbiAgICAgICAgcmV0dXJuIGkgPSBzO1xuICAgICAgfSwgZnVuY3Rpb24ocykge1xuICAgICAgICByZXR1cm4gYShzKTtcbiAgICAgIH0sIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcihpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9LCB0LmNyZWF0ZSA9IGZ1bmN0aW9uKG4pIHtcbiAgICByZXR1cm4gbmV3IHQobik7XG4gIH0sIHQ7XG59KCk7XG5mdW5jdGlvbiBndCh0KSB7XG4gIHZhciBuO1xuICByZXR1cm4gKG4gPSB0ID8/IHBuLlByb21pc2UpICE9PSBudWxsICYmIG4gIT09IHZvaWQgMCA/IG4gOiBQcm9taXNlO1xufVxuZnVuY3Rpb24gU2EodCkge1xuICByZXR1cm4gdCAmJiBGKHQubmV4dCkgJiYgRih0LmVycm9yKSAmJiBGKHQuY29tcGxldGUpO1xufVxuZnVuY3Rpb24gUGEodCkge1xuICByZXR1cm4gdCAmJiB0IGluc3RhbmNlb2YgYXQgfHwgU2EodCkgJiYgZG4odCk7XG59XG5mdW5jdGlvbiBrYSh0KSB7XG4gIHJldHVybiBGKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQubGlmdCk7XG59XG5mdW5jdGlvbiBBYSh0KSB7XG4gIHJldHVybiBmdW5jdGlvbihuKSB7XG4gICAgaWYgKGthKG4pKVxuICAgICAgcmV0dXJuIG4ubGlmdChmdW5jdGlvbihlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIHQoZSwgdGhpcyk7XG4gICAgICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgICAgICB0aGlzLmVycm9yKHIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZhYmxlIHR5cGVcIik7XG4gIH07XG59XG5mdW5jdGlvbiBJYSh0LCBuLCBlLCByLCBhKSB7XG4gIHJldHVybiBuZXcgUmEodCwgbiwgZSwgciwgYSk7XG59XG52YXIgUmEgPSBmdW5jdGlvbih0KSB7XG4gIG5lKG4sIHQpO1xuICBmdW5jdGlvbiBuKGUsIHIsIGEsIGksIHMsIGMpIHtcbiAgICB2YXIgbCA9IHQuY2FsbCh0aGlzLCBlKSB8fCB0aGlzO1xuICAgIHJldHVybiBsLm9uRmluYWxpemUgPSBzLCBsLnNob3VsZFVuc3Vic2NyaWJlID0gYywgbC5fbmV4dCA9IHIgPyBmdW5jdGlvbih1KSB7XG4gICAgICB0cnkge1xuICAgICAgICByKHUpO1xuICAgICAgfSBjYXRjaCAoZCkge1xuICAgICAgICBlLmVycm9yKGQpO1xuICAgICAgfVxuICAgIH0gOiB0LnByb3RvdHlwZS5fbmV4dCwgbC5fZXJyb3IgPSBpID8gZnVuY3Rpb24odSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaSh1KTtcbiAgICAgIH0gY2F0Y2ggKGQpIHtcbiAgICAgICAgZS5lcnJvcihkKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9IDogdC5wcm90b3R5cGUuX2Vycm9yLCBsLl9jb21wbGV0ZSA9IGEgPyBmdW5jdGlvbigpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGEoKTtcbiAgICAgIH0gY2F0Y2ggKHUpIHtcbiAgICAgICAgZS5lcnJvcih1KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9IDogdC5wcm90b3R5cGUuX2NvbXBsZXRlLCBsO1xuICB9XG4gIHJldHVybiBuLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlO1xuICAgIGlmICghdGhpcy5zaG91bGRVbnN1YnNjcmliZSB8fCB0aGlzLnNob3VsZFVuc3Vic2NyaWJlKCkpIHtcbiAgICAgIHZhciByID0gdGhpcy5jbG9zZWQ7XG4gICAgICB0LnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpLCAhciAmJiAoKGUgPSB0aGlzLm9uRmluYWxpemUpID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCB8fCBlLmNhbGwodGhpcykpO1xuICAgIH1cbiAgfSwgbjtcbn0oYXQpLCBGYSA9IEdlKGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHQodGhpcyksIHRoaXMubmFtZSA9IFwiT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3JcIiwgdGhpcy5tZXNzYWdlID0gXCJvYmplY3QgdW5zdWJzY3JpYmVkXCI7XG4gIH07XG59KSwgZm4gPSBmdW5jdGlvbih0KSB7XG4gIG5lKG4sIHQpO1xuICBmdW5jdGlvbiBuKCkge1xuICAgIHZhciBlID0gdC5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgcmV0dXJuIGUuY2xvc2VkID0gITEsIGUuY3VycmVudE9ic2VydmVycyA9IG51bGwsIGUub2JzZXJ2ZXJzID0gW10sIGUuaXNTdG9wcGVkID0gITEsIGUuaGFzRXJyb3IgPSAhMSwgZS50aHJvd25FcnJvciA9IG51bGwsIGU7XG4gIH1cbiAgcmV0dXJuIG4ucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIHIgPSBuZXcgd3QodGhpcywgdGhpcyk7XG4gICAgcmV0dXJuIHIub3BlcmF0b3IgPSBlLCByO1xuICB9LCBuLnByb3RvdHlwZS5fdGhyb3dJZkNsb3NlZCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgIHRocm93IG5ldyBGYSgpO1xuICB9LCBuLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciByID0gdGhpcztcbiAgICBGZShmdW5jdGlvbigpIHtcbiAgICAgIHZhciBhLCBpO1xuICAgICAgaWYgKHIuX3Rocm93SWZDbG9zZWQoKSwgIXIuaXNTdG9wcGVkKSB7XG4gICAgICAgIHIuY3VycmVudE9ic2VydmVycyB8fCAoci5jdXJyZW50T2JzZXJ2ZXJzID0gQXJyYXkuZnJvbShyLm9ic2VydmVycykpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGZvciAodmFyIHMgPSB5ZShyLmN1cnJlbnRPYnNlcnZlcnMpLCBjID0gcy5uZXh0KCk7ICFjLmRvbmU7IGMgPSBzLm5leHQoKSkge1xuICAgICAgICAgICAgdmFyIGwgPSBjLnZhbHVlO1xuICAgICAgICAgICAgbC5uZXh0KGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICAgIGEgPSB7IGVycm9yOiB1IH07XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGMgJiYgIWMuZG9uZSAmJiAoaSA9IHMucmV0dXJuKSAmJiBpLmNhbGwocyk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmIChhKSB0aHJvdyBhLmVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9LCBuLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgciA9IHRoaXM7XG4gICAgRmUoZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoci5fdGhyb3dJZkNsb3NlZCgpLCAhci5pc1N0b3BwZWQpIHtcbiAgICAgICAgci5oYXNFcnJvciA9IHIuaXNTdG9wcGVkID0gITAsIHIudGhyb3duRXJyb3IgPSBlO1xuICAgICAgICBmb3IgKHZhciBhID0gci5vYnNlcnZlcnM7IGEubGVuZ3RoOyApXG4gICAgICAgICAgYS5zaGlmdCgpLmVycm9yKGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCBuLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlID0gdGhpcztcbiAgICBGZShmdW5jdGlvbigpIHtcbiAgICAgIGlmIChlLl90aHJvd0lmQ2xvc2VkKCksICFlLmlzU3RvcHBlZCkge1xuICAgICAgICBlLmlzU3RvcHBlZCA9ICEwO1xuICAgICAgICBmb3IgKHZhciByID0gZS5vYnNlcnZlcnM7IHIubGVuZ3RoOyApXG4gICAgICAgICAgci5zaGlmdCgpLmNvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIG4ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgPSB0aGlzLmNsb3NlZCA9ICEwLCB0aGlzLm9ic2VydmVycyA9IHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gIH0sIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSwgXCJvYnNlcnZlZFwiLCB7XG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBlO1xuICAgICAgcmV0dXJuICgoZSA9IHRoaXMub2JzZXJ2ZXJzKSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlLmxlbmd0aCkgPiAwO1xuICAgIH0sXG4gICAgZW51bWVyYWJsZTogITEsXG4gICAgY29uZmlndXJhYmxlOiAhMFxuICB9KSwgbi5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLCB0LnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlLmNhbGwodGhpcywgZSk7XG4gIH0sIG4ucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSwgdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhlKSwgdGhpcy5faW5uZXJTdWJzY3JpYmUoZSk7XG4gIH0sIG4ucHJvdG90eXBlLl9pbm5lclN1YnNjcmliZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgciA9IHRoaXMsIGEgPSB0aGlzLCBpID0gYS5oYXNFcnJvciwgcyA9IGEuaXNTdG9wcGVkLCBjID0gYS5vYnNlcnZlcnM7XG4gICAgcmV0dXJuIGkgfHwgcyA/IHVuIDogKHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGwsIGMucHVzaChlKSwgbmV3IFBlKGZ1bmN0aW9uKCkge1xuICAgICAgci5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbCwgTmUoYywgZSk7XG4gICAgfSkpO1xuICB9LCBuLnByb3RvdHlwZS5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgciA9IHRoaXMsIGEgPSByLmhhc0Vycm9yLCBpID0gci50aHJvd25FcnJvciwgcyA9IHIuaXNTdG9wcGVkO1xuICAgIGEgPyBlLmVycm9yKGkpIDogcyAmJiBlLmNvbXBsZXRlKCk7XG4gIH0sIG4ucHJvdG90eXBlLmFzT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlID0gbmV3IFgoKTtcbiAgICByZXR1cm4gZS5zb3VyY2UgPSB0aGlzLCBlO1xuICB9LCBuLmNyZWF0ZSA9IGZ1bmN0aW9uKGUsIHIpIHtcbiAgICByZXR1cm4gbmV3IHd0KGUsIHIpO1xuICB9LCBuO1xufShYKSwgd3QgPSBmdW5jdGlvbih0KSB7XG4gIG5lKG4sIHQpO1xuICBmdW5jdGlvbiBuKGUsIHIpIHtcbiAgICB2YXIgYSA9IHQuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiBhLmRlc3RpbmF0aW9uID0gZSwgYS5zb3VyY2UgPSByLCBhO1xuICB9XG4gIHJldHVybiBuLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciByLCBhO1xuICAgIChhID0gKHIgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByLm5leHQpID09PSBudWxsIHx8IGEgPT09IHZvaWQgMCB8fCBhLmNhbGwociwgZSk7XG4gIH0sIG4ucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciByLCBhO1xuICAgIChhID0gKHIgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByLmVycm9yKSA9PT0gbnVsbCB8fCBhID09PSB2b2lkIDAgfHwgYS5jYWxsKHIsIGUpO1xuICB9LCBuLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlLCByO1xuICAgIChyID0gKGUgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlLmNvbXBsZXRlKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgfHwgci5jYWxsKGUpO1xuICB9LCBuLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciByLCBhO1xuICAgIHJldHVybiAoYSA9IChyID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IHIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHIuc3Vic2NyaWJlKGUpKSAhPT0gbnVsbCAmJiBhICE9PSB2b2lkIDAgPyBhIDogdW47XG4gIH0sIG47XG59KGZuKSwgTWEgPSB7XG4gIG5vdzogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIERhdGUubm93KCk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn0sIERhID0gZnVuY3Rpb24odCkge1xuICBuZShuLCB0KTtcbiAgZnVuY3Rpb24gbihlLCByKSB7XG4gICAgcmV0dXJuIHQuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICB9XG4gIHJldHVybiBuLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKGUsIHIpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgbjtcbn0oUGUpLCBidCA9IHtcbiAgc2V0SW50ZXJ2YWw6IGZ1bmN0aW9uKHQsIG4pIHtcbiAgICBmb3IgKHZhciBlID0gW10sIHIgPSAyOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgZVtyIC0gMl0gPSBhcmd1bWVudHNbcl07XG4gICAgcmV0dXJuIHNldEludGVydmFsLmFwcGx5KHZvaWQgMCwgT2UoW3QsIG5dLCBEZShlKSkpO1xuICB9LFxuICBjbGVhckludGVydmFsOiBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIGNsZWFySW50ZXJ2YWwodCk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn0sIE9hID0gZnVuY3Rpb24odCkge1xuICBuZShuLCB0KTtcbiAgZnVuY3Rpb24gbihlLCByKSB7XG4gICAgdmFyIGEgPSB0LmNhbGwodGhpcywgZSwgcikgfHwgdGhpcztcbiAgICByZXR1cm4gYS5zY2hlZHVsZXIgPSBlLCBhLndvcmsgPSByLCBhLnBlbmRpbmcgPSAhMSwgYTtcbiAgfVxuICByZXR1cm4gbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihlLCByKSB7XG4gICAgdmFyIGE7XG4gICAgaWYgKHIgPT09IHZvaWQgMCAmJiAociA9IDApLCB0aGlzLmNsb3NlZClcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIHRoaXMuc3RhdGUgPSBlO1xuICAgIHZhciBpID0gdGhpcy5pZCwgcyA9IHRoaXMuc2NoZWR1bGVyO1xuICAgIHJldHVybiBpICE9IG51bGwgJiYgKHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHMsIGksIHIpKSwgdGhpcy5wZW5kaW5nID0gITAsIHRoaXMuZGVsYXkgPSByLCB0aGlzLmlkID0gKGEgPSB0aGlzLmlkKSAhPT0gbnVsbCAmJiBhICE9PSB2b2lkIDAgPyBhIDogdGhpcy5yZXF1ZXN0QXN5bmNJZChzLCB0aGlzLmlkLCByKSwgdGhpcztcbiAgfSwgbi5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbihlLCByLCBhKSB7XG4gICAgcmV0dXJuIGEgPT09IHZvaWQgMCAmJiAoYSA9IDApLCBidC5zZXRJbnRlcnZhbChlLmZsdXNoLmJpbmQoZSwgdGhpcyksIGEpO1xuICB9LCBuLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uKGUsIHIsIGEpIHtcbiAgICBpZiAoYSA9PT0gdm9pZCAwICYmIChhID0gMCksIGEgIT0gbnVsbCAmJiB0aGlzLmRlbGF5ID09PSBhICYmIHRoaXMucGVuZGluZyA9PT0gITEpXG4gICAgICByZXR1cm4gcjtcbiAgICByICE9IG51bGwgJiYgYnQuY2xlYXJJbnRlcnZhbChyKTtcbiAgfSwgbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGUsIHIpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICByZXR1cm4gbmV3IEVycm9yKFwiZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvblwiKTtcbiAgICB0aGlzLnBlbmRpbmcgPSAhMTtcbiAgICB2YXIgYSA9IHRoaXMuX2V4ZWN1dGUoZSwgcik7XG4gICAgaWYgKGEpXG4gICAgICByZXR1cm4gYTtcbiAgICB0aGlzLnBlbmRpbmcgPT09ICExICYmIHRoaXMuaWQgIT0gbnVsbCAmJiAodGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsIHRoaXMuaWQsIG51bGwpKTtcbiAgfSwgbi5wcm90b3R5cGUuX2V4ZWN1dGUgPSBmdW5jdGlvbihlLCByKSB7XG4gICAgdmFyIGEgPSAhMSwgaTtcbiAgICB0cnkge1xuICAgICAgdGhpcy53b3JrKGUpO1xuICAgIH0gY2F0Y2ggKHMpIHtcbiAgICAgIGEgPSAhMCwgaSA9IHMgfHwgbmV3IEVycm9yKFwiU2NoZWR1bGVkIGFjdGlvbiB0aHJldyBmYWxzeSBlcnJvclwiKTtcbiAgICB9XG4gICAgaWYgKGEpXG4gICAgICByZXR1cm4gdGhpcy51bnN1YnNjcmliZSgpLCBpO1xuICB9LCBuLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgIHZhciBlID0gdGhpcywgciA9IGUuaWQsIGEgPSBlLnNjaGVkdWxlciwgaSA9IGEuYWN0aW9ucztcbiAgICAgIHRoaXMud29yayA9IHRoaXMuc3RhdGUgPSB0aGlzLnNjaGVkdWxlciA9IG51bGwsIHRoaXMucGVuZGluZyA9ICExLCBOZShpLCB0aGlzKSwgciAhPSBudWxsICYmICh0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChhLCByLCBudWxsKSksIHRoaXMuZGVsYXkgPSBudWxsLCB0LnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgIH1cbiAgfSwgbjtcbn0oRGEpLCB2dCA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiB0KG4sIGUpIHtcbiAgICBlID09PSB2b2lkIDAgJiYgKGUgPSB0Lm5vdyksIHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3RvciA9IG4sIHRoaXMubm93ID0gZTtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihuLCBlLCByKSB7XG4gICAgcmV0dXJuIGUgPT09IHZvaWQgMCAmJiAoZSA9IDApLCBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsIG4pLnNjaGVkdWxlKHIsIGUpO1xuICB9LCB0Lm5vdyA9IE1hLm5vdywgdDtcbn0oKSwgTmEgPSBmdW5jdGlvbih0KSB7XG4gIG5lKG4sIHQpO1xuICBmdW5jdGlvbiBuKGUsIHIpIHtcbiAgICByID09PSB2b2lkIDAgJiYgKHIgPSB2dC5ub3cpO1xuICAgIHZhciBhID0gdC5jYWxsKHRoaXMsIGUsIHIpIHx8IHRoaXM7XG4gICAgcmV0dXJuIGEuYWN0aW9ucyA9IFtdLCBhLl9hY3RpdmUgPSAhMSwgYTtcbiAgfVxuICByZXR1cm4gbi5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIHIgPSB0aGlzLmFjdGlvbnM7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgci5wdXNoKGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgYTtcbiAgICB0aGlzLl9hY3RpdmUgPSAhMDtcbiAgICBkb1xuICAgICAgaWYgKGEgPSBlLmV4ZWN1dGUoZS5zdGF0ZSwgZS5kZWxheSkpXG4gICAgICAgIGJyZWFrO1xuICAgIHdoaWxlIChlID0gci5zaGlmdCgpKTtcbiAgICBpZiAodGhpcy5fYWN0aXZlID0gITEsIGEpIHtcbiAgICAgIGZvciAoOyBlID0gci5zaGlmdCgpOyApXG4gICAgICAgIGUudW5zdWJzY3JpYmUoKTtcbiAgICAgIHRocm93IGE7XG4gICAgfVxuICB9LCBuO1xufSh2dCksIFRhID0gbmV3IE5hKE9hKSwgTGEgPSBmdW5jdGlvbih0KSB7XG4gIHJldHVybiB0ICYmIHR5cGVvZiB0Lmxlbmd0aCA9PSBcIm51bWJlclwiICYmIHR5cGVvZiB0ICE9IFwiZnVuY3Rpb25cIjtcbn07XG5mdW5jdGlvbiBVYSh0KSB7XG4gIHJldHVybiBGKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQudGhlbik7XG59XG5mdW5jdGlvbiBqYSh0KSB7XG4gIHJldHVybiBGKHRbaXRdKTtcbn1cbmZ1bmN0aW9uIHhhKHQpIHtcbiAgcmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yICYmIEYodCA9PSBudWxsID8gdm9pZCAwIDogdFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pO1xufVxuZnVuY3Rpb24gJGEodCkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIllvdSBwcm92aWRlZCBcIiArICh0ICE9PSBudWxsICYmIHR5cGVvZiB0ID09IFwib2JqZWN0XCIgPyBcImFuIGludmFsaWQgb2JqZWN0XCIgOiBcIidcIiArIHQgKyBcIidcIikgKyBcIiB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwgQXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLlwiKTtcbn1cbmZ1bmN0aW9uIHphKCkge1xuICByZXR1cm4gdHlwZW9mIFN5bWJvbCAhPSBcImZ1bmN0aW9uXCIgfHwgIVN5bWJvbC5pdGVyYXRvciA/IFwiQEBpdGVyYXRvclwiIDogU3ltYm9sLml0ZXJhdG9yO1xufVxudmFyIEdhID0gemEoKTtcbmZ1bmN0aW9uIFZhKHQpIHtcbiAgcmV0dXJuIEYodCA9PSBudWxsID8gdm9pZCAwIDogdFtHYV0pO1xufVxuZnVuY3Rpb24gcWEodCkge1xuICByZXR1cm4gaGEodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgZSwgciwgYSwgaTtcbiAgICByZXR1cm4gbG4odGhpcywgZnVuY3Rpb24ocykge1xuICAgICAgc3dpdGNoIChzLmxhYmVsKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBlID0gdC5nZXRSZWFkZXIoKSwgcy5sYWJlbCA9IDE7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBzLnRyeXMucHVzaChbMSwgLCA5LCAxMF0pLCBzLmxhYmVsID0gMjtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHJldHVybiBbNCwgcGUoZS5yZWFkKCkpXTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJldHVybiByID0gcy5zZW50KCksIGEgPSByLnZhbHVlLCBpID0gci5kb25lLCBpID8gWzQsIHBlKHZvaWQgMCldIDogWzMsIDVdO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIFsyLCBzLnNlbnQoKV07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByZXR1cm4gWzQsIHBlKGEpXTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIHJldHVybiBbNCwgcy5zZW50KCldO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgcmV0dXJuIHMuc2VudCgpLCBbMywgMl07XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIHJldHVybiBlLnJlbGVhc2VMb2NrKCksIFs3XTtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIFlhKHQpIHtcbiAgcmV0dXJuIEYodCA9PSBudWxsID8gdm9pZCAwIDogdC5nZXRSZWFkZXIpO1xufVxuZnVuY3Rpb24gS2EodCkge1xuICBpZiAodCBpbnN0YW5jZW9mIFgpXG4gICAgcmV0dXJuIHQ7XG4gIGlmICh0ICE9IG51bGwpIHtcbiAgICBpZiAoamEodCkpXG4gICAgICByZXR1cm4gV2EodCk7XG4gICAgaWYgKExhKHQpKVxuICAgICAgcmV0dXJuIEhhKHQpO1xuICAgIGlmIChVYSh0KSlcbiAgICAgIHJldHVybiBKYSh0KTtcbiAgICBpZiAoeGEodCkpXG4gICAgICByZXR1cm4gaG4odCk7XG4gICAgaWYgKFZhKHQpKVxuICAgICAgcmV0dXJuIFphKHQpO1xuICAgIGlmIChZYSh0KSlcbiAgICAgIHJldHVybiBCYSh0KTtcbiAgfVxuICB0aHJvdyAkYSh0KTtcbn1cbmZ1bmN0aW9uIFdhKHQpIHtcbiAgcmV0dXJuIG5ldyBYKGZ1bmN0aW9uKG4pIHtcbiAgICB2YXIgZSA9IHRbaXRdKCk7XG4gICAgaWYgKEYoZS5zdWJzY3JpYmUpKVxuICAgICAgcmV0dXJuIGUuc3Vic2NyaWJlKG4pO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcm92aWRlZCBvYmplY3QgZG9lcyBub3QgY29ycmVjdGx5IGltcGxlbWVudCBTeW1ib2wub2JzZXJ2YWJsZVwiKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBIYSh0KSB7XG4gIHJldHVybiBuZXcgWChmdW5jdGlvbihuKSB7XG4gICAgZm9yICh2YXIgZSA9IDA7IGUgPCB0Lmxlbmd0aCAmJiAhbi5jbG9zZWQ7IGUrKylcbiAgICAgIG4ubmV4dCh0W2VdKTtcbiAgICBuLmNvbXBsZXRlKCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gSmEodCkge1xuICByZXR1cm4gbmV3IFgoZnVuY3Rpb24obikge1xuICAgIHQudGhlbihmdW5jdGlvbihlKSB7XG4gICAgICBuLmNsb3NlZCB8fCAobi5uZXh0KGUpLCBuLmNvbXBsZXRlKCkpO1xuICAgIH0sIGZ1bmN0aW9uKGUpIHtcbiAgICAgIHJldHVybiBuLmVycm9yKGUpO1xuICAgIH0pLnRoZW4obnVsbCwgeW4pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIFphKHQpIHtcbiAgcmV0dXJuIG5ldyBYKGZ1bmN0aW9uKG4pIHtcbiAgICB2YXIgZSwgcjtcbiAgICB0cnkge1xuICAgICAgZm9yICh2YXIgYSA9IHllKHQpLCBpID0gYS5uZXh0KCk7ICFpLmRvbmU7IGkgPSBhLm5leHQoKSkge1xuICAgICAgICB2YXIgcyA9IGkudmFsdWU7XG4gICAgICAgIGlmIChuLm5leHQocyksIG4uY2xvc2VkKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChjKSB7XG4gICAgICBlID0geyBlcnJvcjogYyB9O1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBpICYmICFpLmRvbmUgJiYgKHIgPSBhLnJldHVybikgJiYgci5jYWxsKGEpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKGUpIHRocm93IGUuZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICAgIG4uY29tcGxldGUoKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBobih0KSB7XG4gIHJldHVybiBuZXcgWChmdW5jdGlvbihuKSB7XG4gICAgUWEodCwgbikuY2F0Y2goZnVuY3Rpb24oZSkge1xuICAgICAgcmV0dXJuIG4uZXJyb3IoZSk7XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gQmEodCkge1xuICByZXR1cm4gaG4ocWEodCkpO1xufVxuZnVuY3Rpb24gUWEodCwgbikge1xuICB2YXIgZSwgciwgYSwgaTtcbiAgcmV0dXJuIGZhKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgcywgYztcbiAgICByZXR1cm4gbG4odGhpcywgZnVuY3Rpb24obCkge1xuICAgICAgc3dpdGNoIChsLmxhYmVsKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBsLnRyeXMucHVzaChbMCwgNSwgNiwgMTFdKSwgZSA9IF9hKHQpLCBsLmxhYmVsID0gMTtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiBbNCwgZS5uZXh0KCldO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgaWYgKHIgPSBsLnNlbnQoKSwgISFyLmRvbmUpIHJldHVybiBbMywgNF07XG4gICAgICAgICAgaWYgKHMgPSByLnZhbHVlLCBuLm5leHQocyksIG4uY2xvc2VkKVxuICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICBsLmxhYmVsID0gMztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJldHVybiBbMywgMV07XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gWzMsIDExXTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJldHVybiBjID0gbC5zZW50KCksIGEgPSB7IGVycm9yOiBjIH0sIFszLCAxMV07XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICByZXR1cm4gbC50cnlzLnB1c2goWzYsICwgOSwgMTBdKSwgciAmJiAhci5kb25lICYmIChpID0gZS5yZXR1cm4pID8gWzQsIGkuY2FsbChlKV0gOiBbMywgOF07XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBsLnNlbnQoKSwgbC5sYWJlbCA9IDg7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIGlmIChhKSB0aHJvdyBhLmVycm9yO1xuICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICByZXR1cm4gbi5jb21wbGV0ZSgpLCBbMl07XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gWGEodCwgbiwgZSwgciwgYSkge1xuICByID09PSB2b2lkIDAgJiYgKHIgPSAwKSwgYSA9PT0gdm9pZCAwICYmIChhID0gITEpO1xuICB2YXIgaSA9IG4uc2NoZWR1bGUoZnVuY3Rpb24oKSB7XG4gICAgZSgpLCBhID8gdC5hZGQodGhpcy5zY2hlZHVsZShudWxsLCByKSkgOiB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gIH0sIHIpO1xuICBpZiAodC5hZGQoaSksICFhKVxuICAgIHJldHVybiBpO1xufVxuZnVuY3Rpb24gZWkodCwgbikge1xuICB2YXIgZSA9IEYodCkgPyB0IDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHQ7XG4gIH0sIHIgPSBmdW5jdGlvbihhKSB7XG4gICAgcmV0dXJuIGEuZXJyb3IoZSgpKTtcbiAgfTtcbiAgcmV0dXJuIG5ldyBYKHIpO1xufVxudmFyIHRpID0gR2UoZnVuY3Rpb24odCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdCh0aGlzKSwgdGhpcy5uYW1lID0gXCJFbXB0eUVycm9yXCIsIHRoaXMubWVzc2FnZSA9IFwibm8gZWxlbWVudHMgaW4gc2VxdWVuY2VcIjtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gbmkodCwgbikge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZSwgcikge1xuICAgIHZhciBhID0gITEsIGk7XG4gICAgdC5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogZnVuY3Rpb24ocykge1xuICAgICAgICBpID0gcywgYSA9ICEwO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiByLFxuICAgICAgY29tcGxldGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICBhID8gZShpKSA6IHIobmV3IHRpKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHJpKHQpIHtcbiAgcmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTih0KTtcbn1cbnZhciBvaSA9IEdlKGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGUpIHtcbiAgICBlID09PSB2b2lkIDAgJiYgKGUgPSBudWxsKSwgdCh0aGlzKSwgdGhpcy5tZXNzYWdlID0gXCJUaW1lb3V0IGhhcyBvY2N1cnJlZFwiLCB0aGlzLm5hbWUgPSBcIlRpbWVvdXRFcnJvclwiLCB0aGlzLmluZm8gPSBlO1xuICB9O1xufSk7XG5mdW5jdGlvbiBhaSh0LCBuKSB7XG4gIHZhciBlID0gcmkodCkgPyB7IGZpcnN0OiB0IH0gOiB0eXBlb2YgdCA9PSBcIm51bWJlclwiID8geyBlYWNoOiB0IH0gOiB0LCByID0gZS5maXJzdCwgYSA9IGUuZWFjaCwgaSA9IGUud2l0aCwgcyA9IGkgPT09IHZvaWQgMCA/IGlpIDogaSwgYyA9IGUuc2NoZWR1bGVyLCBsID0gYyA9PT0gdm9pZCAwID8gVGEgOiBjLCB1ID0gZS5tZXRhLCBkID0gdSA9PT0gdm9pZCAwID8gbnVsbCA6IHU7XG4gIGlmIChyID09IG51bGwgJiYgYSA9PSBudWxsKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJObyB0aW1lb3V0IHByb3ZpZGVkLlwiKTtcbiAgcmV0dXJuIEFhKGZ1bmN0aW9uKGYsIGgpIHtcbiAgICB2YXIgeSwgbSwgXyA9IG51bGwsIHYgPSAwLCB3ID0gZnVuY3Rpb24oYikge1xuICAgICAgbSA9IFhhKGgsIGwsIGZ1bmN0aW9uKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHkudW5zdWJzY3JpYmUoKSwgS2Eocyh7XG4gICAgICAgICAgICBtZXRhOiBkLFxuICAgICAgICAgICAgbGFzdFZhbHVlOiBfLFxuICAgICAgICAgICAgc2VlbjogdlxuICAgICAgICAgIH0pKS5zdWJzY3JpYmUoaCk7XG4gICAgICAgIH0gY2F0Y2ggKEUpIHtcbiAgICAgICAgICBoLmVycm9yKEUpO1xuICAgICAgICB9XG4gICAgICB9LCBiKTtcbiAgICB9O1xuICAgIHkgPSBmLnN1YnNjcmliZShJYShoLCBmdW5jdGlvbihiKSB7XG4gICAgICBtID09IG51bGwgfHwgbS51bnN1YnNjcmliZSgpLCB2KyssIGgubmV4dChfID0gYiksIGEgPiAwICYmIHcoYSk7XG4gICAgfSwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKCkge1xuICAgICAgbSAhPSBudWxsICYmIG0uY2xvc2VkIHx8IG0gPT0gbnVsbCB8fCBtLnVuc3Vic2NyaWJlKCksIF8gPSBudWxsO1xuICAgIH0pKSwgIXYgJiYgdyhyICE9IG51bGwgPyB0eXBlb2YgciA9PSBcIm51bWJlclwiID8gciA6ICtyIC0gbC5ub3coKSA6IGEpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGlpKHQpIHtcbiAgdGhyb3cgbmV3IG9pKHQpO1xufVxuY2xhc3MgTWUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNldCA9IChuKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkZWRPbmNlIGlzIGFscmVhZHkgaW4gc3VjY2VzcyBzdGF0ZVwiKTtcbiAgICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJzdWNjZXNzXCIsIGlzU3VjY2VzczogITAsIGxvYWRlZFZhbHVlOiBuIH0sIHRoaXMuX3N1YmplY3QubmV4dChuKSwgdGhpcy5fc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgIH0sIHRoaXMudGhyb3cgPSAobiwgZSkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiZXJyb3JcIiwgaXNTdWNjZXNzOiAhMSwgZXJyb3I6IG4sIGVyck1zZzogZSB9LCB0aGlzLl9zdWJqZWN0LmVycm9yKG4pO1xuICAgIH0sIHRoaXMuZ2V0VmFsdWVJZkxvYWRlZEVsc2UgPSAobikgPT4gdGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiID8gdGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZSA6IG4sIHRoaXMuc3Vic2NyaWJlID0gKG4pID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgbih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIiAmJiBuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgY29uc3QgZSA9IHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJzdWNjZXNzXCIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChuZXh0KTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIG4odGhpcy5fY3VycmVudCksIGUudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiZXJyb3JcIilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGUgKGVycm9yKTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIG4odGhpcy5fY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sIHRoaXMud2FpdEZvckxvYWQgPSAobikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlKTtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiKSByZXR1cm4gUHJvbWlzZS5yZWplY3QodGhpcy5fY3VycmVudC5lcnJvcik7XG4gICAgICB0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJpbml0aWFsXCIgJiYgVWUodGhpcy5fY3VycmVudCk7XG4gICAgICBjb25zdCBlID0ge1xuICAgICAgICBmaXJzdDogbi50aW1lb3V0U2VjICogMWUzLFxuICAgICAgICB3aXRoOiAoKSA9PiBlaSgoKSA9PiBuZXcgRXJyb3Iobi50aW1lb3V0RXJyTXNnKSlcbiAgICAgIH07XG4gICAgICByZXR1cm4gbmkodGhpcy5fc3ViamVjdC5waXBlKGFpKGUpKSk7XG4gICAgfSwgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImluaXRpYWxcIiwgaXNTdWNjZXNzOiAhMSB9LCB0aGlzLl9zdWJqZWN0ID0gbmV3IGZuKCk7XG4gIH1cbiAgZ2V0IGN1cnJlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnQ7XG4gIH1cbn1cbmNvbnN0IHsgbG9nX186IHNpLCBlcnJfXzogY2kgfSA9IFAoXCJpbml0LWZsb3dzXCIpLCBhZSA9ICh0LCBuKSA9PiB7XG4gIGNvbnN0IGUgPSBuZXcgTWUoKTtcbiAgcmV0dXJuIHtcbiAgICBwdWJsaXNoZXI6IGUsXG4gICAgaW5pdGlhbGl6ZTogYXN5bmMgKHIpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChlLmN1cnJlbnQuaXNTdWNjZXNzKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgZmxvdyBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLlwiKTtcbiAgICAgICAgY29uc3QgYSA9IGF3YWl0IG4ocik7XG4gICAgICAgIHNpKGDinJQgJHt0fSBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gUmVzdWx0OmAsIGEpLCBlLnNldChhKTtcbiAgICAgIH0gY2F0Y2ggKGEpIHtcbiAgICAgICAgY2koYPCdma0gJHt0fSBmbG93IGluaXRpYWxpemF0aW9uIGZhaWxlZC4gRXJyb3I6YCwgSihhKSwgXCJEZXRhaWxzOlwiLCBhKSwgZS50aHJvdyhhLCBKKGEpKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59LCBsaSA9IGFzeW5jICh0LCBuLCBlKSA9PiB7XG4gIGF3YWl0IFByb21pc2UuYWxsKE9iamVjdC52YWx1ZXModCkubWFwKChyKSA9PiByLmluaXRpYWxpemUoeyBjb250ZXh0OiBuLCBmb3JtQ2FsbGJhY2tzOiBlIH0pKSk7XG59LCB1aSA9ICgpID0+ICh7XG4gIC8vIPCfkqEgQWRkIG5ldyBpbml0IGZsb3dzIGhlcmVcbiAgLy8gU3RyaXBlIFBSXG4gIHN0cmlwZVBSOiBhZShcIlN0cmlwZSBQUlwiLCBBLnN0cmlwZVBSLmluaXQpLFxuICAvLyBTdHJpcGUgTGlua1xuICBzdHJpcGVMaW5rOiBhZShcIlN0cmlwZSBMaW5rXCIsIEEuc3RyaXBlTGluay5pbml0KSxcbiAgLy8gQWlyd2FsbGV4IEdvb2dsZVBheVxuICBhaXJ3YWxsZXhHb29nbGVQYXk6IGFlKFwiQWlyd2FsbGV4IEdvb2dsZVBheVwiLCBBLmFpcndhbGxleEdvb2dsZVBheS5pbml0KSxcbiAgLy8gQWlyd2FsbGV4IEFwcGxlUGF5XG4gIGFpcndhbGxleEFwcGxlUGF5OiBhZShcIkFpcndhbGxleCBBcHBsZVBheVwiLCBBLmFpcndhbGxleEFwcGxlUGF5LmluaXQpLFxuICAvLyBMb29wXG4gIGxvb3A6IGFlKFwiTG9vcFwiLCBBLmxvb3BDcnlwdG8uaW5pdCksXG4gIC8vIEF1dGhuZXQgR29vZ2xlUGF5XG4gIGF1dGhvcml6ZU5ldEdvb2dsZVBheTogYWUoXCJBdXRobmV0IEdvb2dsZVBheVwiLCBBLmF1dGhvcml6ZU5ldEdvb2dsZVBheS5pbml0KSxcbiAgLy8gQXV0aG5ldCBBcHBsZVBheVxuICBhdXRob3JpemVOZXRBcHBsZVBheTogYWUoXCJBdXRobmV0IEFwcGxlUGF5XCIsIEEuYXV0aG9yaXplTmV0QXBwbGVQYXkuaW5pdClcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbn0pLCB7IGVycl9fOiBkaSB9ID0gUChcImZvcm0tY2FsbGJhY2tzXCIpLCAkID0geiQxLmZ1bmN0aW9uKCkub3B0aW9uYWwoKSwgRXQgPSB6JDEub2JqZWN0KHtcbiAgb25Gb2N1czogJCxcbiAgb25CbHVyOiAkLFxuICBvbkNoYW5nZTogJCxcbiAgb25Mb2FkOiAkLFxuICBvbkxvYWRFcnJvcjogJCxcbiAgb25WYWxpZGF0aW9uRXJyb3I6ICQsXG4gIG9uQ2hlY2tvdXRTdGFydGVkOiAkLFxuICBvbkNoZWNrb3V0U3VjY2VzczogJCxcbiAgb25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzOiAkLFxuICBvbkNoZWNrb3V0RXJyb3I6ICQsXG4gIG9uUGF5bWVudFJlcXVlc3RMb2FkOiAkXG59KSwgVyA9IGNsYXNzIFcge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNldENhbGxiYWNrcyA9IChuKSA9PiB7XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSBXLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCksIE9iamVjdC5lbnRyaWVzKG4pLmZvckVhY2goKFtlLCByXSkgPT4ge1xuICAgICAgICBjb25zdCBhID0ga24oZSwgciA/PyBXLk5PT1AsIGRpKTtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2VdID0gYTtcbiAgICAgIH0pO1xuICAgIH0sIHRoaXMuX2NhbGxiYWNrcyA9IFcuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHJlYWQtb25seSB2ZXJzaW9uIG9mIHRoZSBjYWxsYmFja3Mgb2JqZWN0LlxuICAgKi9cbiAgZ2V0IGdldCgpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLl9jYWxsYmFja3MgfTtcbiAgfVxufTtcblcuTk9PUCA9ICgpID0+IHtcbn0sIFcuY3JlYXRlRW1wdHlDYWxsYmFja3MgPSAoKSA9PiB7XG4gIGNvbnN0IG4gPSB7fTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKEV0LmtleW9mKCkuZW51bSkuZm9yRWFjaCgoZSkgPT4ge1xuICAgIG5bZV0gPSBXLk5PT1A7XG4gIH0pLCBuO1xufSwgVy5mcm9tT2JqZWN0ID0gKG4pID0+IHtcbiAgY29uc3QgZSA9IG5ldyBXKCk7XG4gIHJldHVybiBlLnNldENhbGxiYWNrcyhFdC5wYXJzZShuKSksIGU7XG59O1xubGV0IFFlID0gVztcbmNsYXNzIHBpIHtcbiAgY29uc3RydWN0b3IobiwgZSwgciwgYSkge1xuICAgIHRoaXMuaGFuZGxlTWVzc2FnZSA9IChpKSA9PiB7XG4gICAgICBpZiAoIWkuc291cmNlKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzb3VyY2UgZm91bmRcIik7XG4gICAgICBpZiAoQ3QoaS5vcmlnaW4pICE9PSBDdCh0aGlzLmJhc2VVcmwpIHx8IHR5cGVvZiBpLmRhdGEgPT0gXCJvYmplY3RcIiAmJiBpLmRhdGEucGVucGFsIHx8IHR5cGVvZiBpLmRhdGEgPT0gXCJvYmplY3RcIiAmJiBpLmRhdGEuc291cmNlICYmIGkuZGF0YS5zb3VyY2UgPT09IFwicmVhY3QtZGV2dG9vbHMtYnJpZGdlXCIpXG4gICAgICAgIHJldHVybjtcbiAgICAgIGxldCBzID0gbnVsbDtcbiAgICAgIHRyeSB7XG4gICAgICAgIHMgPSBkcihKU09OLnBhcnNlKGkuZGF0YSkpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghdGhpcy52YWxpZGF0ZUV2ZW50KHMpKSByZXR1cm47XG4gICAgICBjb25zdCB7IGVsZW1lbnRJZDogbCwgcGF5bG9hZDogdSB9ID0gcywgZCA9IHUudHlwZTtcbiAgICAgIHN3aXRjaCAoZCkge1xuICAgICAgICBjYXNlIFwiTEFZT1VUXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5zZXRGb3JtSGVpZ2h0KHUuaGVpZ2h0ID8gYCR7dS5oZWlnaHR9cHhgIDogXCIxMDAlXCIpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiRk9DVVNcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uRm9jdXMobCwgdS5lbGVtZW50VHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJCTFVSXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkJsdXIobCwgdS5lbGVtZW50VHlwZSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJDSEFOR0VcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hhbmdlKGwsIHUuZWxlbWVudFR5cGUsIHUuZXJyb3JzKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkxPQURFRFwiOlxuICAgICAgICAgIHRoaXMuZXZlbnRUYXJnZXRzW2xdID0gaS5zb3VyY2UsIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Mub25DZGVMb2FkZWQodSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMT0FEX0VSUk9SXCI6XG4gICAgICAgICAgdGhpcy5pbnRlcm5hbENhbGxiYWNrcy5vbkNkZUxvYWRFcnJvcih1Lm1lc3NhZ2UpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiVkFMSURBVElPTl9FUlJPUlwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25WYWxpZGF0aW9uRXJyb3IodS5lbGVtZW50VHlwZSwgdS5lcnJvcnMsIGwpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIGNvbnNvbGUud2FybihcIltmb3JtXSBVbmhhbmRsZWQgZXZlbnQgdHlwZTpcIiwgZCk7XG4gICAgICB9XG4gICAgfSwgdGhpcy52YWxpZGF0ZUV2ZW50ID0gKGkpID0+IGkuZm9ybUlkICE9PSB0aGlzLmZvcm1JZCB8fCAhaS5lbGVtZW50SWQgPyAoY29uc29sZS5sb2coXCJbT0pTXSBmb3JtSWRcIiwgdGhpcy5mb3JtSWQsIGkuZm9ybUlkKSwgY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIHVua25vd24gZXZlbnQ6XCIsIGkpLCAhMSkgOiB0aGlzLm5vbmNlcy5oYXMoaS5ub25jZSkgPyAoY29uc29sZS53YXJuKFwiW2Zvcm1dIElnbm9yaW5nIGR1cGxpY2F0ZSBldmVudDpcIiwgaSksICExKSA6ICh0aGlzLm5vbmNlcy5hZGQoaS5ub25jZSksICEwKSwgdGhpcy5ldmVudFRhcmdldHMgPSB7fSwgdGhpcy5ub25jZXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpLCB0aGlzLmZvcm1JZCA9IG4sIHRoaXMuYmFzZVVybCA9IGUsIHRoaXMuZm9ybUNhbGxiYWNrcyA9IHIsIHRoaXMuaW50ZXJuYWxDYWxsYmFja3MgPSBhO1xuICB9XG59XG5jb25zdCBDdCA9ICh0KSA9PiBuZXcgVVJMKHQpLm9yaWdpbjtcbmFzeW5jIGZ1bmN0aW9uIG1pKHQsIG4pIHtcbiAgY29uc3QgciA9IGF3YWl0IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWU6IHQsXG4gICAgZGVidWc6ICExLFxuICAgIGNoaWxkT3JpZ2luOiBuXG4gIH0pLnByb21pc2UsIGEgPSBhd2FpdCBwcihyKTtcbiAgaWYgKCFtcihyLCBhKSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJHb3QgaW52YWxpZCBDREUgY29ubmVjdGlvbiBvYmplY3RcIik7XG4gIHJldHVybiByO1xufVxuY2xhc3MgeWkge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTtcbiAgfVxuICBhZGRDb25uZWN0aW9uKG4sIGUpIHtcbiAgICB0aGlzLmNvbm5lY3Rpb25zLnNldChuLCBlKTtcbiAgfVxuICBnZXRDb25uZWN0aW9uKCkge1xuICAgIGNvbnN0IG4gPSB0aGlzLmNvbm5lY3Rpb25zLnZhbHVlcygpLm5leHQoKS52YWx1ZTtcbiAgICBpZiAoIW4pXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb25uZWN0aW9uIG5vdCBmb3VuZFwiKTtcbiAgICByZXR1cm4gbjtcbiAgfVxuICBnZXRBbGxDb25uZWN0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5jb25uZWN0aW9ucztcbiAgfVxufVxuY29uc3QgZmkgPSAodCwgbiwgZSkgPT4ge1xuICBjb25zdCB7IHN0cmlwZVBSOiByIH0gPSB0O1xuICByLnB1Ymxpc2hlci5zdWJzY3JpYmUoKGEpID0+IHtcbiAgICBpZiAoYS5pc1N1Y2Nlc3MpIHtcbiAgICAgIGNvbnN0IGkgPSBhLmxvYWRlZFZhbHVlLCBzID0gaS5pc0F2YWlsYWJsZSAmJiBpLmF2YWlsYWJsZVByb3ZpZGVycy5hcHBsZVBheSwgYyA9IGkuaXNBdmFpbGFibGUgJiYgaS5hdmFpbGFibGVQcm92aWRlcnMuZ29vZ2xlUGF5LCBsID0ge1xuICAgICAgICBhcHBsZV9wYXk6IHtcbiAgICAgICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgICAgIGlzQXZhaWxhYmxlOiBzLFxuICAgICAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKHUpID0+IHtcbiAgICAgICAgICAgIHMgJiYgU3QoXCJhcHBsZV9wYXlcIiwgaSwgbiwgZSwgdSk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnb29nbGVfcGF5OiB7XG4gICAgICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgICAgICBpc0F2YWlsYWJsZTogYyxcbiAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jICh1KSA9PiB7XG4gICAgICAgICAgICBjICYmIFN0KFwiZ29vZ2xlX3BheVwiLCBpLCBuLCBlLCB1KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBlLmdldC5vblBheW1lbnRSZXF1ZXN0TG9hZChsKTtcbiAgICB9XG4gIH0pO1xufSwgU3QgPSAodCwgbiwgZSwgciwgYSkgPT4gQS5zdHJpcGVQUi5ydW4oe1xuICBjb250ZXh0OiBlLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IHZlKGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgdCksXG4gIG5vbkNkZUZvcm1JbnB1dHM6IEgoZS5mb3JtRGl2KSxcbiAgZm9ybUNhbGxiYWNrczogcixcbiAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyOiB0LCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBhID09IG51bGwgPyB2b2lkIDAgOiBhLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgaW5pdFJlc3VsdDogblxufSksIFB0ID0gXCJUaGUgc2VjdXJlIGZvcm0gZmFpbGVkIHRvIGxvYWQgcHJvcGVybHkuIFBsZWFzZSBjaGVjayB5b3VyIGludGVybmV0IGNvbm5lY3Rpb24sIG9yIHRyeSBhZ2FpbiBsYXRlci5cIiwgeyBsb2dfXzogWiwgZXJyX186IEIgfSA9IFAoXCJvcC1mb3JtXCIpLCBRID0gY2xhc3MgUSB7XG4gIGNvbnN0cnVjdG9yKG4pIHtcbiAgICB0aGlzLmNkZUxvYWRFdmVudCA9IG5ldyBNZSgpLCB0aGlzLmFueUNkZUNvbm4gPSBuZXcgTWUoKSwgdGhpcy5jb250ZXh0ID0gbmV3IE1lKCksIHRoaXMuaW5pdEZsb3dzID0gdWkoKSwgdGhpcy5zdGFydEZvcm1Jbml0ID0gYXN5bmMgKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgWihcIkluaXRpYWxpemluZyBPcGVuUGF5IGZvcm06XCIpLCBaKFwi4pScIFdhaXRpbmcgZm9yIENERSBsb2FkIGV2ZW50Li4uXCIpO1xuICAgICAgICBjb25zdCBlID0gYXdhaXQgdGhpcy5jZGVMb2FkRXZlbnQud2FpdEZvckxvYWQoe1xuICAgICAgICAgIHRpbWVvdXRTZWM6IDEyMCxcbiAgICAgICAgICB0aW1lb3V0RXJyTXNnOiBQdFxuICAgICAgICB9KTtcbiAgICAgICAgWihcIuKUnCBDREUgbG9hZCBldmVudCByZWNlaXZlZFwiKSwgWihcIuKUnCBXYWl0aW5nIGZvciBDREUgY29ubmVjdGlvbi4uLlwiKTtcbiAgICAgICAgY29uc3QgciA9IGF3YWl0IHRoaXMuYW55Q2RlQ29ubi53YWl0Rm9yTG9hZCh7XG4gICAgICAgICAgdGltZW91dFNlYzogMTIwLFxuICAgICAgICAgIHRpbWVvdXRFcnJNc2c6IFB0XG4gICAgICAgIH0pO1xuICAgICAgICBaKFwi4pScIENERSBjb25uZWN0aW9uIHJlY2VpdmVkXCIpLCBaKFwi4pScIENyZWF0aW5nIE9KUyBjb250ZXh0LCBzZXR0aW5nIHVwIGhhbmRsZXJzLi4uXCIpO1xuICAgICAgICBjb25zdCBhID0gUS5idWlsZE9qc0Zsb3dDb250ZXh0KFxuICAgICAgICAgIHRoaXMuY29uZmlnLFxuICAgICAgICAgIGUsXG4gICAgICAgICAgcixcbiAgICAgICAgICB0aGlzLmdldEZvcm1EaXYoKVxuICAgICAgICApO1xuICAgICAgICB0aGlzLmNvbnRleHQuc2V0KGEpLCBmaSh0aGlzLmluaXRGbG93cywgYSwgdGhpcy5mb3JtQ2FsbGJhY2tzKSwgWihcIuKUnCBTdGFydGluZyBPSlMgaW5pdCBmbG93cy4uLlwiKSwgYXdhaXQgbGkodGhpcy5pbml0Rmxvd3MsIGEsIHRoaXMuZm9ybUNhbGxiYWNrcyksIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25Mb2FkKGUudG90YWxBbW91bnRBdG9tcywgZS5jdXJyZW5jeSksIFooXCLilbAgRG9uZSBpbml0aWFsaXppbmcgT0pTIGZsb3dzLlwiKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY29uc3QgciA9IEooZSk7XG4gICAgICAgIEIoXCLilbAgRXJyb3IgaW5pdGlhbGl6aW5nIE9QIGZvcm06XCIsIHIpLCB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uTG9hZEVycm9yKHIpO1xuICAgICAgfVxuICAgIH0sIHRoaXMuc2V0Rm9ybUhlaWdodCA9IChlKSA9PiB7XG4gICAgICB0aGlzLmZvcm1Qcm9wZXJ0aWVzLmhlaWdodCA9IGUsIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzICYmIE9iamVjdC52YWx1ZXModGhpcy5yZWdpc3RlcmVkRWxlbWVudHMpLmZvckVhY2goKHIpID0+IHtcbiAgICAgICAgciAmJiAoci5ub2RlLnN0eWxlLmhlaWdodCA9IGUpO1xuICAgICAgfSk7XG4gICAgfSwgdGhpcy5vbkNkZUxvYWRlZCA9IChlKSA9PiB7XG4gICAgICB0aGlzLmNkZUxvYWRFdmVudC5jdXJyZW50LmlzU3VjY2VzcyB8fCB0aGlzLmNkZUxvYWRFdmVudC5zZXQoZSk7XG4gICAgfSwgdGhpcy5vbkNkZUxvYWRFcnJvciA9IChlKSA9PiB7XG4gICAgICB0aGlzLmNkZUxvYWRFdmVudC5jdXJyZW50LmlzU3VjY2VzcyB8fCB0aGlzLmNkZUxvYWRFdmVudC50aHJvdyhuZXcgRXJyb3IoZSksIGUpO1xuICAgIH0sIHRoaXMuY3JlYXRlRWxlbWVudCA9IChlLCByID0ge30pID0+IHtcbiAgICAgIGlmICghdGhpcy5jb25maWcpIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgZm9ybSBub3QgaW5pdGlhbGl6ZWRcIik7XG4gICAgICBjb25zdCBhID0gQW4ucGFyc2UoZSksIGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpLCBzID0gdGhpcy5idWlsZFF1ZXJ5U3RyaW5nKHIpO1xuICAgICAgaS5uYW1lID0gYCR7YX0tZWxlbWVudGA7XG4gICAgICBjb25zdCBjID0gbmV3IFVSTChgL2FwcC92MS8ke2kubmFtZX0vYCwgdGhpcy5jb25maWcuYmFzZVVybCk7XG4gICAgICByZXR1cm4gYy5zZWFyY2ggPSBzLnRvU3RyaW5nKCksIGkuc3JjID0gYy5ocmVmLCBpLnN0eWxlLmJvcmRlciA9IFwibm9uZVwiLCBpLnN0eWxlLndpZHRoID0gXCIxMDAlXCIsIHRoaXMucmVnaXN0ZXJJZnJhbWUoYSwgaSk7XG4gICAgfSwgdGhpcy5yZWdpc3RlcklmcmFtZSA9IChlLCByKSA9PiB7XG4gICAgICBjb25zdCBhID0ge1xuICAgICAgICB0eXBlOiBlLFxuICAgICAgICBub2RlOiByLFxuICAgICAgICBtb3VudDogKGkpID0+IHtcbiAgICAgICAgICB2YXIgcztcbiAgICAgICAgICByZXR1cm4gKHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKGkpKSA9PSBudWxsID8gdm9pZCAwIDogcy5hcHBlbmRDaGlsZChyKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIHJldHVybiB0aGlzLmNvbm5lY3RUb0VsZW1lbnQoeyB0eXBlOiBhLnR5cGUsIG5vZGU6IGEubm9kZSB9KSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgfHwgKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0ge1xuICAgICAgICBbZGUuQ0FSRF06IHZvaWQgMCxcbiAgICAgICAgW2RlLkNBUkRfTlVNQkVSXTogdm9pZCAwLFxuICAgICAgICBbZGUuQ0FSRF9FWFBJUlldOiB2b2lkIDAsXG4gICAgICAgIFtkZS5DQVJEX0NWQ106IHZvaWQgMFxuICAgICAgfSksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzW2VdID0gYSwgYTtcbiAgICB9LCB0aGlzLmJ1aWxkUXVlcnlTdHJpbmcgPSAoZSkgPT4ge1xuICAgICAgY29uc3QgciA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoKTtcbiAgICAgIHJldHVybiByLmFwcGVuZChcInJlZmVyZXJcIiwgdGhpcy5yZWZlcnJlciksIHIuYXBwZW5kKFwiZm9ybUlkXCIsIHRoaXMuZm9ybUlkKSwgZS5zdHlsZXMgJiYgci5hcHBlbmQoXCJzdHlsZXNcIiwgdXIoZS5zdHlsZXMpKSwgci5hcHBlbmQoXCJzZWN1cmVUb2tlblwiLCB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuKSwgcjtcbiAgICB9LCB0aGlzLmNvbm5lY3RUb0VsZW1lbnQgPSAoZSkgPT4ge1xuICAgICAgbWkoZS5ub2RlKS50aGVuKChyKSA9PiB7XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuYWRkQ29ubmVjdGlvbihlLnR5cGUsIHIpLCB0aGlzLmFueUNkZUNvbm4uY3VycmVudC5pc1N1Y2Nlc3MgfHwgdGhpcy5hbnlDZGVDb25uLnNldChyKTtcbiAgICAgIH0pLmNhdGNoKChyKSA9PiBCKFwiW0ZPUk1dIEVycm9yIGNvbm5lY3RpbmcgdG8gQ0RFIGlmcmFtZVwiLCByKSk7XG4gICAgfSwgdGhpcy5nZXRGb3JtRGl2ID0gKCkgPT4gZG9jdW1lbnQucXVlcnlTZWxlY3Rvcih0aGlzLmZvcm1UYXJnZXQpID8/IGRvY3VtZW50LmJvZHksIHRoaXMuc3VibWl0Q2FyZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGUgPSB0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICBpZiAoIWUpIHtcbiAgICAgICAgQihcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgc3VibWl0dGluZy5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIEEuY29tbW9uQ0MucnVuKHtcbiAgICAgICAgY29udGV4dDogZSxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB2ZShlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFwiY3JlZGl0X2NhcmRcIiksXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IEgoZS5mb3JtRGl2KSxcbiAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICBjdXJyZW50Q2RlQ29ubmVjdGlvbnM6IHRoaXMuY29ubmVjdGlvbk1hbmFnZXIuZ2V0QWxsQ29ubmVjdGlvbnMoKVxuICAgICAgICB9LFxuICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgLy8gVGhpcyBmbG93IHJlcXVpcmVzIG5vIGluaXRpYWxpemF0aW9uXG4gICAgICB9KTtcbiAgICB9LCB0aGlzLmdldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzID0gKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLmNvbnRleHQuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCkpIHtcbiAgICAgICAgQihcIlBsZWFzZSB3YWl0IGZvciB0aGUgZm9ybSB0byBmaW5pc2ggbG9hZGluZyBiZWZvcmUgZ2V0dGluZyBhdmFpbGFibGUgcGF5bWVudCBtZXRob2RzLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY29uc3QgciA9IHtcbiAgICAgICAgYWlyd2FsbGV4R29vZ2xlUGF5OiB4LmFpcndhbGxleEdvb2dsZVBheSxcbiAgICAgICAgYWlyd2FsbGV4QXBwbGVQYXk6IHguYWlyd2FsbGV4QXBwbGVQYXksXG4gICAgICAgIGF1dGhvcml6ZU5ldEdvb2dsZVBheTogeC5hdXRob3JpemVuZXRHb29nbGVQYXksXG4gICAgICAgIGF1dGhvcml6ZU5ldEFwcGxlUGF5OiB4LmF1dGhvcml6ZW5ldEFwcGxlUGF5XG4gICAgICB9O1xuICAgICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMuaW5pdEZsb3dzKS5tYXAoKFthLCBpXSkgPT4gKHtcbiAgICAgICAgbmFtZTogclthXSA/PyBhLFxuICAgICAgICAuLi5pLnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKVxuICAgICAgfSkpO1xuICAgIH0sIHRoaXMuZ2VuZXJhbFN1Ym1pdCA9IChlLCByKSA9PiB7XG4gICAgICBjb25zdCBhID0gdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgaWYgKCFhKSB7XG4gICAgICAgIEIoXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIHN1Ym1pdHRpbmcuXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzd2l0Y2ggKGUpIHtcbiAgICAgICAgY2FzZSB4LnBvY2t5dFBheXBhbDpcbiAgICAgICAgICByZXR1cm4gQS5wb2NreXRQYXlwYWwucnVuKHtcbiAgICAgICAgICAgIGNvbnRleHQ6IGEsXG4gICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHZlKGEuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgXCJwYXlwYWxcIiwgXCJwb2NreXRcIiksXG4gICAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBIKGEuZm9ybURpdiksXG4gICAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiB0aGlzLmZvcm1DYWxsYmFja3MsXG4gICAgICAgICAgICBjdXN0b21QYXJhbXM6IHsgc2V0dGluZ3M6IHIgfSxcbiAgICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMFxuICAgICAgICAgIH0pO1xuICAgICAgICBjYXNlIHguYWlyd2FsbGV4R29vZ2xlUGF5OiB7XG4gICAgICAgICAgY29uc3QgaSA9IHRoaXMuaW5pdEZsb3dzLmFpcndhbGxleEdvb2dsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgaWYgKCFpKSB7XG4gICAgICAgICAgICBCKFxuICAgICAgICAgICAgICBcImFpcndhbGxleC1nb29nbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaS5zdGFydEZsb3cocik7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSB4LmFpcndhbGxleEFwcGxlUGF5OiB7XG4gICAgICAgICAgY29uc3QgaSA9IHRoaXMuaW5pdEZsb3dzLmFpcndhbGxleEFwcGxlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICBpZiAoIWkpIHtcbiAgICAgICAgICAgIEIoXG4gICAgICAgICAgICAgIFwiYWlyd2FsbGV4LWFwcGxlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGkuc3RhcnRGbG93KHIpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgeC5hdXRob3JpemVuZXRHb29nbGVQYXk6IHtcbiAgICAgICAgICBjb25zdCBpID0gdGhpcy5pbml0Rmxvd3MuYXV0aG9yaXplTmV0R29vZ2xlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICBpZiAoIWkpIHtcbiAgICAgICAgICAgIEIoXG4gICAgICAgICAgICAgIFwiYXV0aG9yaXplLW5ldC1nb29nbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaS5zdGFydEZsb3cocik7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSB4LmF1dGhvcml6ZW5ldEFwcGxlUGF5OiB7XG4gICAgICAgICAgY29uc3QgaSA9IHRoaXMuaW5pdEZsb3dzLmF1dGhvcml6ZU5ldEFwcGxlUGF5LnB1Ymxpc2hlci5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgICAgICBpZiAoIWkpIHtcbiAgICAgICAgICAgIEIoXG4gICAgICAgICAgICAgIFwiYXV0aG9yaXplLW5ldC1hcHBsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBpLnN0YXJ0RmxvdyhyKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIHgubG9vcENyeXB0bzoge1xuICAgICAgICAgIGNvbnN0IGkgPSB0aGlzLmluaXRGbG93cy5sb29wLnB1Ymxpc2hlci5jdXJyZW50O1xuICAgICAgICAgIGlmICghaS5pc1N1Y2Nlc3MpXG4gICAgICAgICAgICB0aHJvdyBFcnJvcihcIkxvb3AgaGFzIG5vdCBzdWNjZXNzZnVsbHkgaW5pdGlhbGl6ZWQuIENhbm5vdCBzdWJtaXQuXCIpO1xuICAgICAgICAgIHJldHVybiBBLmxvb3BDcnlwdG8ucnVuKHtcbiAgICAgICAgICAgIGNvbnRleHQ6IGEsXG4gICAgICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHZlKGEuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgXCJjcnlwdG9cIiwgXCJsb29wXCIpLFxuICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogSChhLmZvcm1EaXYpLFxuICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgLy8gQUkgZ2VuZXJhdGVkIHN0dWZmIGJlbG93IHRvIGdldCB0aGUgdHlwaW5nIHJpZ2h0LlxuICAgICAgICAgICAgLy8gVE9ETzogTW92ZSB0aGUgZW1haWwsIGZpcnN0TmFtZSBhbmQgbGFzdE5hbWUgZmllbGRzIHRvIGBub25DZGVGb3JtSW5wdXRzYFxuICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiByICYmIFwic3VjY2Vzc1wiIGluIHIgJiYgci5zdWNjZXNzID8ge1xuICAgICAgICAgICAgICBjdXN0b21lcjogci5jdXN0b21lcixcbiAgICAgICAgICAgICAgcGF5aW46IHIucGF5aW4sXG4gICAgICAgICAgICAgIGVtYWlsOiByLmVtYWlsLFxuICAgICAgICAgICAgICBmaXJzdE5hbWU6IHIuZmlyc3ROYW1lLFxuICAgICAgICAgICAgICBsYXN0TmFtZTogci5sYXN0TmFtZSxcbiAgICAgICAgICAgICAgc3VjY2VzczogITBcbiAgICAgICAgICAgIH0gOiB7XG4gICAgICAgICAgICAgIGRldGFpbDogci5kZXRhaWwsXG4gICAgICAgICAgICAgIGVtYWlsOiByLmVtYWlsLFxuICAgICAgICAgICAgICBmaXJzdE5hbWU6IHIuZmlyc3ROYW1lLFxuICAgICAgICAgICAgICBsYXN0TmFtZTogci5sYXN0TmFtZSxcbiAgICAgICAgICAgICAgc3VjY2VzczogITFcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBpbml0UmVzdWx0OiBpLmxvYWRlZFZhbHVlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBVZShlKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLnN1Ym1pdCA9IHRoaXMuc3VibWl0Q2FyZCwgdGhpcy5kZXN0cm95ID0gKCkgPT4ge1xuICAgICAgWihcIkRlc3Ryb3lpbmcgT3BlblBheSBmb3JtLi4uXCIpO1xuICAgICAgZm9yIChjb25zdCBlIG9mIE9iamVjdC52YWx1ZXModGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPz8ge30pKVxuICAgICAgICBlICYmIGUubm9kZS5yZW1vdmUoKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCB0aGlzLmV2ZW50SGFuZGxlci5oYW5kbGVNZXNzYWdlLmJpbmQodGhpcy5ldmVudEhhbmRsZXIpKSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSBudWxsLCBkZWxldGUgd2luZG93Lm9qcztcbiAgICB9LCB0aGlzLnVwZGF0ZUNhbGxiYWNrcyA9IChlKSA9PiB7XG4gICAgICB0aGlzLmZvcm1DYWxsYmFja3Muc2V0Q2FsbGJhY2tzKGUpO1xuICAgIH0sIFEuYXNzaWduQXNTaW5nbGV0b24odGhpcyksIHRoaXMub2pzVmVyc2lvbiA9IFwiMC4yLjE3XCIsIHRoaXMub2pzUmVsZWFzZVZlcnNpb24gPSBcImxvY2FsX2J1aWxkXCIsIHRoaXMuYmFzZVVybCA9IG4uYmFzZVVybCA/PyBcImh0dHBzOi8vY2RlLmdldG9wZW5wYXkuY29tXCIsIHRoaXMuY29uZmlnID0geyAuLi5uLCBiYXNlVXJsOiB0aGlzLmJhc2VVcmwgfSwgdGhpcy5mb3JtQ2FsbGJhY2tzID0gUWUuZnJvbU9iamVjdChuKSwgdGhpcy5yZWdpc3RlcmVkRWxlbWVudHMgPSBudWxsLCB0aGlzLmZvcm1JZCA9IGBvcGpzLWZvcm0tJHt2NCgpfWAsIHRoaXMucmVmZXJyZXIgPSB3aW5kb3cubG9jYXRpb24ub3JpZ2luLCB0aGlzLmZvcm1UYXJnZXQgPSBuLmZvcm1UYXJnZXQgPz8gXCJib2R5XCIsIHRoaXMuZm9ybVByb3BlcnRpZXMgPSB7IGhlaWdodDogXCIxcHhcIiB9LCB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyID0gbmV3IHlpKCksIHRoaXMuZXZlbnRIYW5kbGVyID0gbmV3IHBpKHRoaXMuZm9ybUlkLCB0aGlzLmJhc2VVcmwsIHRoaXMuZm9ybUNhbGxiYWNrcywge1xuICAgICAgc2V0Rm9ybUhlaWdodDogdGhpcy5zZXRGb3JtSGVpZ2h0LFxuICAgICAgb25DZGVMb2FkZWQ6IHRoaXMub25DZGVMb2FkZWQsXG4gICAgICBvbkNkZUxvYWRFcnJvcjogdGhpcy5vbkNkZUxvYWRFcnJvclxuICAgIH0pLCB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMuZXZlbnRIYW5kbGVyKSksIHRoaXMuc3RhcnRGb3JtSW5pdCgpO1xuICB9XG4gIGdldCBjaGVja291dFNlY3VyZVRva2VuKCkge1xuICAgIHJldHVybiB0aGlzLmNvbmZpZy5jaGVja291dFNlY3VyZVRva2VuO1xuICB9XG59O1xuUS5vanNGbG93cyA9IEEsIFEuYXNzaWduQXNTaW5nbGV0b24gPSAobikgPT4ge1xuICBpZiAoUS5nZXRJbnN0YW5jZSgpKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk9wZW5QYXkgaW5zdGFuY2UgYWxyZWFkeSBleGlzdHMuIE9ubHkgb25lIGluc3RhbmNlIGlzIGFsbG93ZWQuXCIpO1xuICB3aW5kb3cub2pzID0gbjtcbn0sIFEuZ2V0SW5zdGFuY2UgPSAoKSA9PiB3aW5kb3cub2pzID8/IG51bGwsIFEuYnVpbGRPanNGbG93Q29udGV4dCA9IChuLCBlLCByLCBhKSA9PiAoe1xuICBjaGVja291dFNlY3VyZVRva2VuOiBuLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gIGJhc2VVcmw6IG5ldyBVUkwobi5iYXNlVXJsID8/IGV0KS5vcmlnaW4sXG4gIGZvcm1EaXY6IGEsXG4gIGVsZW1lbnRzU2Vzc2lvbklkOiBlLnNlc3Npb25JZCxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogZS5jaGVja291dFBheW1lbnRNZXRob2RzLFxuICBhbnlDZGVDb25uZWN0aW9uOiByLFxuICBjdXN0b21Jbml0UGFyYW1zOiBuLmN1c3RvbUluaXRQYXJhbXMgPz8ge31cbn0pO1xubGV0IGt0ID0gUTtcblxuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGxvYzogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIG1zZzogeiQxLnN0cmluZygpLFxuICB1cmw6IHokMS5zdHJpbmcoKVxufSk7XG56JDEuYXJyYXkoUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IkMSk7XG5jb25zdCBab2RGaWVsZEVycm9yID0geiQxLm9iamVjdCh7XG4gIGNvZGU6IHokMS5zdHJpbmcoKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBwYXRoOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG56JDEuYXJyYXkoWm9kRmllbGRFcnJvcik7XG5jb25zdCBtYWtlQ2FsbGJhY2tTYWZlID0gKGNhbGxiYWNrTmFtZSwgZm4sIGVycm9yTG9nZ2VyKSA9PiB7XG4gIHJldHVybiAoLi4uYXJncykgPT4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gZm4oLi4uYXJncyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGVycm9yTG9nZ2VyKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHtjYWxsYmFja05hbWV9KTpgLCBlcnJvcik7XG4gICAgICByZXR1cm4gdm9pZCAwO1xuICAgIH1cbiAgfTtcbn07XG5cbnZhciBTdWJtaXRNZXRob2RzID0gLyogQF9fUFVSRV9fICovICgoU3VibWl0TWV0aG9kczIpID0+IHtcbiAgU3VibWl0TWV0aG9kczJbXCJwb2NreXRQYXlwYWxcIl0gPSBcInBvY2t5dC1wYXlwYWxcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhaXJ3YWxsZXhHb29nbGVQYXlcIl0gPSBcImFpcndhbGxleC1nb29nbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4QXBwbGVQYXlcIl0gPSBcImFpcndhbGxleC1hcHBsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJhdXRob3JpemVuZXRHb29nbGVQYXlcIl0gPSBcImF1dGhvcml6ZW5ldC1nb29nbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYXV0aG9yaXplbmV0QXBwbGVQYXlcIl0gPSBcImF1dGhvcml6ZW5ldC1hcHBsZS1wYXlcIjtcbiAgU3VibWl0TWV0aG9kczJbXCJsb29wQ3J5cHRvXCJdID0gXCJsb29wLWNyeXB0b1wiO1xuICByZXR1cm4gU3VibWl0TWV0aG9kczI7XG59KShTdWJtaXRNZXRob2RzIHx8IHt9KTtcbnokMS5uYXRpdmVFbnVtKFN1Ym1pdE1ldGhvZHMpO1xuXG5jb25zdCBSZXF1aXJlZFN0cmluZyA9IHokMS5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogYENhbm5vdCBiZSBibGFua2AgfSk7XG5jb25zdCBPcHRpb25hbFN0cmluZyA9IHokMS5zdHJpbmcoKS50cmltKCkub3B0aW9uYWwoKTtcbmNvbnN0IG51bGxPclVuZGVmT3IkMSA9ICh6VHlwZSkgPT4geiQxLm51bGxhYmxlKHpUeXBlLm9wdGlvbmFsKCkpO1xudmFyIEZpZWxkTmFtZSA9IC8qIEBfX1BVUkVfXyAqLyAoKEZpZWxkTmFtZTIpID0+IHtcbiAgRmllbGROYW1lMltcIkZJUlNUX05BTUVcIl0gPSBcImZpcnN0TmFtZVwiO1xuICBGaWVsZE5hbWUyW1wiTEFTVF9OQU1FXCJdID0gXCJsYXN0TmFtZVwiO1xuICBGaWVsZE5hbWUyW1wiRU1BSUxcIl0gPSBcImVtYWlsXCI7XG4gIEZpZWxkTmFtZTJbXCJaSVBfQ09ERVwiXSA9IFwiemlwQ29kZVwiO1xuICBGaWVsZE5hbWUyW1wiQ0lUWVwiXSA9IFwiY2l0eVwiO1xuICBGaWVsZE5hbWUyW1wiU1RBVEVcIl0gPSBcInN0YXRlXCI7XG4gIEZpZWxkTmFtZTJbXCJDT1VOVFJZXCJdID0gXCJjb3VudHJ5XCI7XG4gIEZpZWxkTmFtZTJbXCJBRERSRVNTXCJdID0gXCJhZGRyZXNzXCI7XG4gIEZpZWxkTmFtZTJbXCJQSE9ORVwiXSA9IFwicGhvbmVcIjtcbiAgRmllbGROYW1lMltcIlBST01PVElPTl9DT0RFXCJdID0gXCJwcm9tb3Rpb25Db2RlXCI7XG4gIHJldHVybiBGaWVsZE5hbWUyO1xufSkoRmllbGROYW1lIHx8IHt9KTtcbmNvbnN0IEZpZWxkTmFtZUVudW0gPSB6JDEubmF0aXZlRW51bShGaWVsZE5hbWUpO1xudmFyIFByaXZhdGVGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChQcml2YXRlRmllbGROYW1lMikgPT4ge1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfTlVNQkVSXCJdID0gXCJjYXJkTnVtYmVyXCI7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9FWFBJUllcIl0gPSBcImNhcmRFeHBpcnlcIjtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX0NWQ1wiXSA9IFwiY2FyZEN2Y1wiO1xuICByZXR1cm4gUHJpdmF0ZUZpZWxkTmFtZTI7XG59KShQcml2YXRlRmllbGROYW1lIHx8IHt9KTtcbmNvbnN0IFByaXZhdGVGaWVsZE5hbWVFbnVtID0geiQxLm5hdGl2ZUVudW0oUHJpdmF0ZUZpZWxkTmFtZSk7XG5jb25zdCBBbGxGaWVsZE5hbWVzID0geiQxLnVuaW9uKFtGaWVsZE5hbWVFbnVtLCBQcml2YXRlRmllbGROYW1lRW51bV0pO1xudmFyIEVsZW1lbnRUeXBlRW51bSA9IC8qIEBfX1BVUkVfXyAqLyAoKEVsZW1lbnRUeXBlRW51bTIpID0+IHtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRcIl0gPSBcImNhcmRcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfTlVNQkVSXCJdID0gXCJjYXJkLW51bWJlclwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9FWFBJUllcIl0gPSBcImNhcmQtZXhwaXJ5XCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX0NWQ1wiXSA9IFwiY2FyZC1jdmNcIjtcbiAgcmV0dXJuIEVsZW1lbnRUeXBlRW51bTI7XG59KShFbGVtZW50VHlwZUVudW0gfHwge30pO1xueiQxLm5hdGl2ZUVudW0oRWxlbWVudFR5cGVFbnVtKTtcbmNvbnN0IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IG51bGxPclVuZGVmT3IkMSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgUGF5bWVudE1ldGhvZE1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgY2FyZE51bWJlcjogT3B0aW9uYWxTdHJpbmcsXG4gIGV4cGlyeTogT3B0aW9uYWxTdHJpbmcsXG4gIGN2YzogT3B0aW9uYWxTdHJpbmdcbn0pO1xueiQxLm9iamVjdCh7XG4gIGJhY2tncm91bmRDb2xvcjogT3B0aW9uYWxTdHJpbmcsXG4gIGNvbG9yOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udEZhbWlseTogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRTaXplOiBPcHRpb25hbFN0cmluZyxcbiAgZm9udFdlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gIG1hcmdpbjogT3B0aW9uYWxTdHJpbmcsXG4gIHBhZGRpbmc6IE9wdGlvbmFsU3RyaW5nLFxuICBsZXR0ZXJTcGFjaW5nOiBPcHRpb25hbFN0cmluZyxcbiAgbGluZUhlaWdodDogT3B0aW9uYWxTdHJpbmcsXG4gIGhpZGVJY29uOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBFdmVudFR5cGUgPSB6JDEuZW51bShbXG4gIC8vIEVsZW1lbnQgLT4gRm9ybVxuICBcIkxBWU9VVFwiLFxuICBcIkxPQURFRFwiLFxuICBcIkJMVVJcIixcbiAgXCJGT0NVU1wiLFxuICBcIkNIQU5HRVwiLFxuICBcIlRPS0VOSVpFX1NUQVJURURcIixcbiAgXCJDSEVDS09VVF9TVEFSVEVEXCIsXG4gIFwiUEFZTUVOVF9GTE9XX1NUQVJURURcIixcbiAgXCJUT0tFTklaRV9TVUNDRVNTXCIsXG4gIFwiQ0hFQ0tPVVRfU1VDQ0VTU1wiLFxuICBcIkxPQURfRVJST1JcIixcbiAgXCJWQUxJREFUSU9OX0VSUk9SXCIsXG4gIFwiVE9LRU5JWkVfRVJST1JcIixcbiAgXCJDSEVDS09VVF9FUlJPUlwiLFxuICBcIlNFVFVQX1BBWU1FTlRfTUVUSE9EX1NVQ0NFU1NcIixcbiAgLy8gRm9ybSAtPiBFbGVtZW50XG4gIFwiVE9LRU5JWkVcIixcbiAgXCJDSEVDS09VVFwiLFxuICBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXG5dKTtcbmNvbnN0IEdlbmVyaWNFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJUT0tFTklaRV9TVEFSVEVEXCIsIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiXSk7XG5jb25zdCBHZW5lcmljRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7IHR5cGU6IEdlbmVyaWNFdmVudFR5cGUgfSk7XG5jb25zdCBJbnB1dEV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIkJMVVJcIiwgXCJGT0NVU1wiLCBcIkNIQU5HRVwiXSk7XG5jb25zdCBJbnB1dEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBJbnB1dEV2ZW50VHlwZSxcbiAgZWxlbWVudFR5cGU6IFByaXZhdGVGaWVsZE5hbWVFbnVtLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgRXJyb3JFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJMT0FEX0VSUk9SXCIsIFwiVE9LRU5JWkVfRVJST1JcIiwgXCJDSEVDS09VVF9FUlJPUlwiXSk7XG5jb25zdCBFcnJvckV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBFcnJvckV2ZW50VHlwZSxcbiAgbWVzc2FnZTogUmVxdWlyZWRTdHJpbmcsXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVkFMSURBVElPTl9FUlJPUlwiXSk7XG5jb25zdCBWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogVmFsaWRhdGlvbkVycm9yRXZlbnRUeXBlLFxuICBlbGVtZW50VHlwZTogQWxsRmllbGROYW1lcyxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSk7XG5jb25zdCBMYXlvdXRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTEFZT1VUKSxcbiAgaGVpZ2h0OiBSZXF1aXJlZFN0cmluZ1xufSk7XG5jb25zdCBMb2FkZWRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uTE9BREVEKSxcbiAgc2Vzc2lvbklkOiBSZXF1aXJlZFN0cmluZyxcbiAgdG90YWxBbW91bnRBdG9tczogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogT3B0aW9uYWxTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IHokMS5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QkMSlcbn0pO1xuY29uc3QgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlBBWU1FTlRfRkxPV19TVEFSVEVEKSxcbiAgbmV4dEFjdGlvbk1ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogeiQxLmFueSgpLm9wdGlvbmFsKCksXG4gIHN0YXJ0UEZNZXRhZGF0YTogeiQxLm9wdGlvbmFsKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5TRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTKSxcbiAgcGF5bWVudE1ldGhvZElkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgUmVxdWlyZWRGb3JtRmllbGRzID0geiQxLm9iamVjdCh7XG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJ6aXBDb2RlXCIgLyogWklQX0NPREUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgUFJGb3JtRmllbGRzID0geiQxLm9iamVjdCh7XG4gIFtcImZpcnN0TmFtZVwiIC8qIEZJUlNUX05BTUUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wibGFzdE5hbWVcIiAvKiBMQVNUX05BTUUgKi9dOiBPcHRpb25hbFN0cmluZyxcbiAgW1wiZW1haWxcIiAvKiBFTUFJTCAqL106IFJlcXVpcmVkU3RyaW5nLFxuICBbXCJ6aXBDb2RlXCIgLyogWklQX0NPREUgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiY291bnRyeVwiIC8qIENPVU5UUlkgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wicHJvbW90aW9uQ29kZVwiIC8qIFBST01PVElPTl9DT0RFICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImFkZHJlc3NcIiAvKiBBRERSRVNTICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImNpdHlcIiAvKiBDSVRZICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcInN0YXRlXCIgLyogU1RBVEUgKi9dOiBPcHRpb25hbFN0cmluZ1xufSk7XG5jb25zdCBTdWJtaXRFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJUT0tFTklaRVwiLCBcIkNIRUNLT1VUXCIsIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJdKTtcbmNvbnN0IFN1Ym1pdEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBTdWJtaXRFdmVudFR5cGUsXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEsXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBkb05vdFVzZUxlZ2FjeUNDRmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBleGlzdGluZ0NDUE1JZDogT3B0aW9uYWxTdHJpbmdcbn0pLmV4dGVuZChSZXF1aXJlZEZvcm1GaWVsZHMuc2hhcGUpO1xuY29uc3QgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLlRPS0VOSVpFX1NVQ0NFU1MpLFxuICBpc1JlYWR5Rm9yQ2hlY2tvdXQ6IHokMS5ib29sZWFuKClcbn0pO1xuY29uc3QgQ2hlY2tvdXRTdWNjZXNzRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkNIRUNLT1VUX1NVQ0NFU1MpLFxuICBpbnZvaWNlVXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbklkczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVySWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBFdmVudFBheWxvYWQgPSB6JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwidHlwZVwiLCBbXG4gIEdlbmVyaWNFdmVudFBheWxvYWQsXG4gIElucHV0RXZlbnRQYXlsb2FkLFxuICBFcnJvckV2ZW50UGF5bG9hZCxcbiAgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkLFxuICBMYXlvdXRFdmVudFBheWxvYWQsXG4gIExvYWRlZEV2ZW50UGF5bG9hZCxcbiAgU3VibWl0RXZlbnRQYXlsb2FkLFxuICBUb2tlbml6ZVN1Y2Nlc3NFdmVudFBheWxvYWQsXG4gIENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCxcbiAgUGF5bWVudEZsb3dTdGFydGVkRXZlbnRQYXlsb2FkLFxuICBTZXR1cENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZFxuXSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bG9hZDogRXZlbnRQYXlsb2FkLFxuICBub25jZTogUmVxdWlyZWRTdHJpbmcsXG4gIGZvcm1JZDogUmVxdWlyZWRTdHJpbmcsXG4gIGVsZW1lbnRJZDogUmVxdWlyZWRTdHJpbmdcbn0pO1xueiQxLm9iamVjdCh7XG4gIGFtb3VudEF0b206IHokMS5udW1iZXIoKSxcbiAgLyoqXG4gICAqIFRoZSB0aHJlZS1sZXR0ZXIgSVNPIDQyMTcgY3VycmVuY3kgY29kZSBmb3IgdGhlIHBheW1lbnQuXG4gICAqL1xuICBjdXJyZW5jeTogUmVxdWlyZWRTdHJpbmdcbn0pO1xueiQxLmVudW0oW1wiYXBwbGVfcGF5XCIsIFwiZ29vZ2xlX3BheVwiXSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlID0geiQxLm9iamVjdCh7XG4gIGludm9pY2VfdXJsczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIHN1YnNjcmlwdGlvbl9pZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcl9pZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IEZpZWxkVmFsaWRhdGlvbkVycm9yID0geiQxLm9iamVjdCh7XG4gIGVsZW1lbnRUeXBlOiB6JDEuc3RyaW5nKCksXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlID0geiQxLm9iamVjdCh7XG4gIHN1Y2Nlc3M6IHokMS5saXRlcmFsKGZhbHNlKSxcbiAgZXJyb3JfdHlwZTogeiQxLmxpdGVyYWwoXCJ2YWxpZGF0aW9uX2Vycm9yXCIpLFxuICBlcnJvcnM6IHokMS5hcnJheShGaWVsZFZhbGlkYXRpb25FcnJvcilcbn0pO1xueiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInN1Y2Nlc3NcIiwgW1xuICB6JDEub2JqZWN0KHsgc3VjY2VzczogeiQxLmxpdGVyYWwodHJ1ZSkgfSksXG4gIFRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2Vcbl0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKS5vcHRpb25hbCgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5lbnVtKFtcInN1Y2Nlc3NcIiAvKiBTVUNDRVNTICovLCBcImZhaWx1cmVcIiAvKiBGQUlMVVJFICovLCBcImNhbmNlbGxlZFwiIC8qIENBTkNFTExFRCAqL10pLFxuICBocmVmOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbnokMS5vYmplY3Qoe1xuICBocmVmOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKS5udWxsYWJsZSgpXG59KTtcbnokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogeiQxLnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogeiQxLnN0cmluZygpLFxuICBjb25zZW50X2lkOiB6JDEuc3RyaW5nKCksXG4gIHRoZWlyX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBDb21tb25OZXh0QWN0aW9uTWV0YWRhdGEgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBpbml0aWFsX2ludGVudF9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIGNvbnNlbnRfaWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIHBheW1lbnRfc2Vzc2lvbjogbnVsbE9yVW5kZWZPciQxKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG56JDEuZGlzY3JpbWluYXRlZFVuaW9uKFwicHJlc2VudFwiLCBbXG4gIHokMS5vYmplY3QoeyBwcmVzZW50OiB6JDEubGl0ZXJhbCh0cnVlKSwgaHJlZjogeiQxLnN0cmluZygpIH0pLFxuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwoZmFsc2UpIH0pXG5dKTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZHM6IHokMS5hcnJheShQYXltZW50TWV0aG9kTWluaW1hbCksXG4gIHBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlOiBudWxsT3JVbmRlZk9yJDEoQ2hlY2tvdXRTdWNjZXNzUmVzcG9uc2UpLFxuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IG51bGxPclVuZGVmT3IkMSh6JDEuYXJyYXkoQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhKSlcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgY2xpZW50X3NlY3JldDogeiQxLnN0cmluZygpLFxuICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxufSk7XG5cbmNvbnN0IGNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nID0gKHN0eWxlcykgPT4ge1xuICBjb25zdCBzZXJpYWxpemVkU3R5bGVzID0gSlNPTi5zdHJpbmdpZnkoc3R5bGVzKTtcbiAgcmV0dXJuIHNlcmlhbGl6ZWRTdHlsZXM7XG59O1xuXG5jb25zdCBudWxsT3JVbmRlZk9yID0gKHpUeXBlKSA9PiB6JDEubnVsbGFibGUoelR5cGUub3B0aW9uYWwoKSk7XG56JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBDYW5ub3QgYmUgYmxhbmtgIH0pO1xueiQxLm9iamVjdCh7XG4gIGNkZV9yZXNwb25zZV90eXBlOiB6JDEubGl0ZXJhbChcImVycm9yXCIpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xueiQxLmVudW0oW1widXNkXCIsIFwiYnJsXCJdKTtcbmNvbnN0IENvdXBvbk1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBhbW91bnRfYXRvbV9vZmY6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpKSxcbiAgcGVyY2VudF9vZmY6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpKSxcbiAgY3VycmVuY3k6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgZHVyYXRpb246IHokMS5zdHJpbmcoKSxcbiAgZHVyYXRpb25faW5fbW9udGhzOiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKSlcbn0pO1xuY29uc3QgTGluZUl0ZW0gPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgcHJpY2VfaWQ6IHokMS5zdHJpbmcoKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKCkuaW50KClcbn0pO1xuY29uc3QgQnJhbmRTZXR0aW5ncyA9IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpO1xuY29uc3QgQnJhbmQgPSB6JDEub2JqZWN0KHtcbiAgbmFtZTogeiQxLnN0cmluZygpLFxuICBzZXR0aW5nczogbnVsbE9yVW5kZWZPcihCcmFuZFNldHRpbmdzKVxufSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgcHJvY2Vzc29yX25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbWV0YWRhdGE6IG51bGxPclVuZGVmT3IoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKClcbn0pO1xuY29uc3QgU3Vic2NyaXB0aW9uTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBpZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IG51bGxPclVuZGVmT3IoeiQxLm51bWJlcigpLmludCgpKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1zOiB6JDEuYXJyYXkoU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwpLFxuICB0cmlhbF9zdGFydDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICB0cmlhbF9lbmQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKVxufSk7XG5jb25zdCBJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X2F0b206IHokMS5udW1iZXIoKVxufSk7XG5jb25zdCBJbnZvaWNlTGluZUl0ZW1NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIGFtb3VudF9hdG9tX2NvbnNpZGVyaW5nX2Rpc2NvdW50X2FwcGxpZWQ6IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGlzY291bnRfYW1vdW50X2F0b21zOiB6JDEuYXJyYXkoSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBEaXNjb3VudE1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgY291cG9uOiBDb3Vwb25NaW5pbWFsXG59KTtcbmNvbnN0IEludm9pY2VNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRpc2NvdW50czogeiQxLmFycmF5KERpc2NvdW50TWluaW1hbCksXG4gIGhvc3RlZF9pbnZvaWNlX3VybDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsaW5lczogeiQxLmFycmF5KEludm9pY2VMaW5lSXRlbU1pbmltYWwpLFxuICByZW1haW5pbmdfYW1vdW50X2F0b206IHokMS5udW1iZXIoKSxcbiAgdGF4X2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRvdGFsX2Rpc2NvdW50X2Ftb3VudF9hdG9tczogeiQxLmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbClcbn0pO1xuY29uc3QgQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGNyZWF0ZWQ6IHokMS5hcnJheShTdWJzY3JpcHRpb25NaW5pbWFsKSxcbiAgaW52b2ljZXM6IHokMS5hcnJheShJbnZvaWNlTWluaW1hbClcbn0pO1xuY29uc3QgUHJldmlld0NoZWNrb3V0UmVzcG9uc2UgPSB6JDEub2JqZWN0KHtcbiAgcHJldmlldzogQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsLFxuICBwcmV2aWV3X3Bvc3RfdHJpYWw6IG51bGxPclVuZGVmT3IoQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsKSxcbiAgY291cG9uczogeiQxLmFycmF5KENvdXBvbk1pbmltYWwpXG59KTtcbmNvbnN0IF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24gPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcIm9wZW5cIiksXG4gIGxvY2FsZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICB0b2tlbjogeiQxLnN0cmluZygpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoTGluZUl0ZW0pLFxuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBicmFuZDogQnJhbmQsXG4gIHN1YnNfcHJldmlldzogbnVsbE9yVW5kZWZPcihQcmV2aWV3Q2hlY2tvdXRSZXNwb25zZSksXG4gIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICBtZXRob2RzX2F2YWlsYWJsZTogeiQxLmFycmF5KENoZWNrb3V0UGF5bWVudE1ldGhvZClcbn0pO1xuY29uc3QgUGF5bWVudEZvcm1QcmVmaWxsID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcIm1vZGVcIiwgW1xuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEubGl0ZXJhbChcInNldHVwXCIpLFxuICAgIGN1cnJlbmN5OiB6JDEubnVsbGFibGUoeiQxLnVuZGVmaW5lZCgpKVxuICB9KS5leHRlbmQoX1BheW1lbnRGb3JtUHJlZmlsbENvbW1vbi5zaGFwZSksXG4gIHokMS5vYmplY3Qoe1xuICAgIG1vZGU6IHokMS5lbnVtKFtcInBheW1lbnRcIiwgXCJzdWJzY3JpcHRpb25cIl0pLFxuICAgIGN1cnJlbmN5OiB6JDEuc3RyaW5nKClcbiAgfSkuZXh0ZW5kKF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24uc2hhcGUpXG5dKTtcbmNvbnN0IENvbXBsZXRlZEZvcm1QcmVmaWxsID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJjb21wbGV0ZVwiKVxufSk7XG5jb25zdCBFeHBpcmVkRm9ybVByZWZpbGwgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcImV4cGlyZWRcIilcbn0pO1xueiQxLnVuaW9uKFtQYXltZW50Rm9ybVByZWZpbGwsIENvbXBsZXRlZEZvcm1QcmVmaWxsLCBFeHBpcmVkRm9ybVByZWZpbGxdKTtcbnokMS5vYmplY3Qoe1xuICBsb2dvOiB6JDEuc3RyaW5nKCksXG4gIGljb246IHokMS5zdHJpbmcoKSxcbiAgcHJpbWFyeV9jb2xvcjogeiQxLnN0cmluZygpLFxuICBzZWNvbmRhcnlfY29sb3I6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHBtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwYXltZW50X2lucHV0OiB6JDEuYW55KCksXG4gIC8vIFNob3VsZCBmb2xsb3cgQW55UGF5bWVudElucHV0IGZyb20gQ0RFXG4gIGN1c3RvbWVyX2ZpcnN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9sYXN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl96aXBfY29kZTogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl9jb3VudHJ5OiB6JDEuc3RyaW5nKCksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShMaW5lSXRlbSksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGNhbmNlbF9hdF9lbmQ6IHokMS5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZG9fbm90X3VzZV9sZWdhY3lfY2NfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICB1c2VfY29uZmlybWVkX3BtX2lkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHBheW1lbnRfbWV0aG9kX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKCksXG4gIHJldHVybl91cmw6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGxvYzogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIG1zZzogeiQxLnN0cmluZygpLFxuICB1cmw6IHokMS5zdHJpbmcoKVxufSk7XG56JDEuYXJyYXkoUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IpO1xuY29uc3QgTmV3Q3VzdG9tZXJGaWVsZHMgPSB6JDEub2JqZWN0KHtcbiAgbmV3X2N1c3RvbWVyX2VtYWlsOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgUHJpY2VRdHkgPSB6JDEub2JqZWN0KHtcbiAgcHJpY2VfaWQ6IHokMS5zdHJpbmcoKSxcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBDYXJ0SW5mbyA9IHokMS5vYmplY3Qoe1xuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoUHJpY2VRdHkpLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IFByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEgPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bWVudF9wcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleGlzdGluZ19jY19wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRoZWlyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdXNlX3BheV9maXJzdF9mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHBheV9maXJzdF9mbG93X2NhcnRfaW5mbzogQ2FydEluZm8ub3B0aW9uYWwoKVxufSkuZXh0ZW5kKE5ld0N1c3RvbWVyRmllbGRzLnNoYXBlKS5leHRlbmQoUHJvY2Vzc29yU3BlY2lmaWNNZXRhZGF0YS5zaGFwZSk7XG56JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIGZpZWxkczogUFJGb3JtRmllbGRzLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZFxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBub25fY2RlX2Zvcm1fZmllbGRzOiBSZXF1aXJlZEZvcm1GaWVsZHMsXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKVxuICAvLyBUaGlzIGlzIG9wdGlvbmFsIGluIENERSwgYnV0IG5vdCBpbiBPSlMgbW92aW5nIGZvcndhcmRcbn0pO1xueiQxLm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeiQxLmFycmF5KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgY2NfcG1faWQ6IHokMS5zdHJpbmcoKVxufSk7XG56JDEucmVjb3JkKHokMS5hbnkoKSk7XG56JDEub2JqZWN0KHtcbiAgZmlyc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZTE6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZTI6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZTM6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgY2l0eTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBzdGF0ZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBjb3VudHJ5OiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHppcF9jb2RlOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGVtYWlsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHVwZGF0ZV9wcm9jZXNzb3JfY3VzdG9tZXI6IG51bGxPclVuZGVmT3IoeiQxLmJvb2xlYW4oKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKCksXG4gIGVtYWlsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGZpcnN0X25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGFkZHJlc3M6IG51bGxPclVuZGVmT3IoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBtZXNzYWdlOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGVycm9yX2NvZGU6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5hbnkoKSkub3B0aW9uYWwoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgbmV4dF9hY3Rpb25fbWV0YWRhdGE6IG51bGxPclVuZGVmT3IoeiQxLnJlY29yZCh6JDEuYW55KCkpKVxufSk7XG5cbmZ1bmN0aW9uIGZpeFByb3RvKHRhcmdldCwgcHJvdG90eXBlKSB7XG4gIHZhciBzZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZjtcbiAgc2V0UHJvdG90eXBlT2YgPyBzZXRQcm90b3R5cGVPZih0YXJnZXQsIHByb3RvdHlwZSkgOiB0YXJnZXQuX19wcm90b19fID0gcHJvdG90eXBlO1xufVxuZnVuY3Rpb24gZml4U3RhY2sodGFyZ2V0LCBmbikge1xuICBpZiAoZm4gPT09IHZvaWQgMCkge1xuICAgIGZuID0gdGFyZ2V0LmNvbnN0cnVjdG9yO1xuICB9XG5cbiAgdmFyIGNhcHR1cmVTdGFja1RyYWNlID0gRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U7XG4gIGNhcHR1cmVTdGFja1RyYWNlICYmIGNhcHR1cmVTdGFja1RyYWNlKHRhcmdldCwgZm4pO1xufVxuXG52YXIgX19leHRlbmRzID0gZnVuY3Rpb24gKCkge1xuICB2YXIgX2V4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbiBleHRlbmRTdGF0aWNzKGQsIGIpIHtcbiAgICBfZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7XG4gICAgICBfX3Byb3RvX186IFtdXG4gICAgfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgICBkLl9fcHJvdG9fXyA9IGI7XG4gICAgfSB8fCBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgZm9yICh2YXIgcCBpbiBiKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gX2V4dGVuZFN0YXRpY3MoZCwgYik7XG4gIH07XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChkLCBiKSB7XG4gICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbCkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xuXG4gICAgX2V4dGVuZFN0YXRpY3MoZCwgYik7XG5cbiAgICBmdW5jdGlvbiBfXygpIHtcbiAgICAgIHRoaXMuY29uc3RydWN0b3IgPSBkO1xuICAgIH1cblxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcbiAgfTtcbn0oKTtcblxuKGZ1bmN0aW9uIChfc3VwZXIpIHtcbiAgX19leHRlbmRzKEN1c3RvbUVycm9yLCBfc3VwZXIpO1xuXG4gIGZ1bmN0aW9uIEN1c3RvbUVycm9yKG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICB2YXIgX25ld1RhcmdldCA9IHRoaXMuY29uc3RydWN0b3I7XG5cbiAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBtZXNzYWdlLCBvcHRpb25zKSB8fCB0aGlzO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KF90aGlzLCAnbmFtZScsIHtcbiAgICAgIHZhbHVlOiBfbmV3VGFyZ2V0Lm5hbWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pO1xuICAgIGZpeFByb3RvKF90aGlzLCBfbmV3VGFyZ2V0LnByb3RvdHlwZSk7XG4gICAgZml4U3RhY2soX3RoaXMpO1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHJldHVybiBDdXN0b21FcnJvcjtcbn0pKEVycm9yKTtcblxuY29uc3QgY3JlYXRlT2pzRmxvd0xvZ2dlcnMgPSAocHJlZml4KSA9PiB7XG4gIGNvbnN0IGxvZyA9ICguLi5hcmdzKSA9PiB7XG4gICAgd2luZG93W1wiY29uc29sZVwiXS5sb2coYCR7QWUuZ3JlZW4uYm9sZChcIm9qcy9cIil9JHtBZS5ib2xkLmdyYXkoYCR7cHJlZml4fWApfVx0YCwgLi4uYXJncyk7XG4gIH07XG4gIGNvbnN0IGVyciA9ICguLi5hcmdzKSA9PiB7XG4gICAgd2luZG93W1wiY29uc29sZVwiXS53YXJuKGAke0FlLnJlZC5ib2xkKFwib2pzL1wiKX0ke0FlLmJvbGQuZ3JheShgJHtwcmVmaXh9YCl9XHRgLCAuLi5hcmdzKTtcbiAgfTtcbiAgcmV0dXJuIHtcbiAgICBsb2csXG4gICAgZXJyLFxuICAgIGxvZ19fOiBsb2csXG4gICAgZXJyX186IGVyclxuICB9O1xufTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInN0cmlwZV9saW5rXCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxueiQxLm9iamVjdCh7XG4gIFwib3AtcG9ja3l0LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC10eG4tbm9cIjogeiQxLnN0cmluZygpLFxuICBcIm9wLXBvY2t5dC1yZWYtbm9cIjogeiQxLnN0cmluZygpXG59KTtcblxueiQxLm9iamVjdCh7XG4gIFwib3AtYWlyd2FsbGV4LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFpcndhbGxleC1pbml0aWFsLWludGVudC1pZFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIjogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKSxcbiAgICBnb29nbGVfcGF5X21lcmNoYW50X2lkOiB6JDEuc3RyaW5nKCkubnVsbGlzaCgpXG4gIH0pXG59KTtcbmNvbnN0IEFXWF9MT0FESU5HID0ge1xuICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gIGlzTG9hZGluZzogdHJ1ZSxcbiAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gIH1cbn07XG5cbmNvbnN0IEFkeWVuRW52aXJvbm1lbnQgPSB6JDEuZW51bShbXCJ0ZXN0XCIsIFwibGl2ZVwiLCBcImxpdmUtdXNcIiwgXCJsaXZlLWluXCIsIFwibGl2ZS1hcHNlXCIsIFwibGl2ZS1hdVwiXSk7XG56JDEuZW51bShbXG4gIFwiYXJcIixcbiAgXCJiZy1CR1wiLFxuICBcImNhLUVTXCIsXG4gIFwiY3MtQ1pcIixcbiAgXCJkYS1ES1wiLFxuICBcImRlLURFXCIsXG4gIFwiZWwtR1JcIixcbiAgXCJlbi1VU1wiLFxuICBcImVzLUVTXCIsXG4gIFwiZXQtRUVcIixcbiAgXCJmaS1GSVwiLFxuICBcImZyLUZSXCIsXG4gIFwiaHItSFJcIixcbiAgXCJodS1IVVwiLFxuICBcImlzLUlTXCIsXG4gIFwiaXQtSVRcIixcbiAgXCJqYS1KUFwiLFxuICBcImtvLUtSXCIsXG4gIFwibHQtTFRcIixcbiAgXCJsdi1MVlwiLFxuICBcIm5sLU5MXCIsXG4gIFwibm8tTk9cIixcbiAgXCJwbC1QTFwiLFxuICBcInB0LUJSXCIsXG4gIFwicHQtUFRcIixcbiAgXCJyby1ST1wiLFxuICBcInJ1LVJVXCIsXG4gIFwic2stU0tcIixcbiAgXCJzbC1TSVwiLFxuICBcInN2LVNFXCIsXG4gIFwiemgtQ05cIixcbiAgXCJ6aC1UV1wiXG5dKTtcbnokMS5vYmplY3Qoe1xuICBcIm9wLWFjY291bnQtaWRcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWNsaWVudC1rZXlcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWVudmlyb25tZW50XCI6IEFkeWVuRW52aXJvbm1lbnQsXG4gIFwib3AtYWR5ZW4tYWN0aW9uXCI6IHokMS5zdHJpbmcoKVxufSk7XG5cbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuXG5jb25zdCBQYXltZW50UHJvY2Vzc29yID0geiQxLmVudW0oW1wic3RyaXBlXCIsIFwiYWlyd2FsbGV4XCIsIFwiYXV0aG9yaXplX25ldFwiXSk7XG4oe1xuICBwcm9jZXNzb3I6IFBheW1lbnRQcm9jZXNzb3IuRW51bS5zdHJpcGUsXG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgaXNMb2FkaW5nOiB0cnVlLFxuICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgfVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnVuaW9uKFt6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSwgeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpXSksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInN0cmlwZVwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHN0cmlwZV9wazogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcblxueiQxLm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcInBvY2t5dFwiKSxcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwicGF5cGFsXCIpXG59KTtcbnokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgcGF5cGFsX2lmcmFtZV91cmw6IHokMS5zdHJpbmcoKSxcbiAgICB2ZXJpZnlfdG9rZW46IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5cbnokMS5vYmplY3Qoe1xuICBkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBtZXNzYWdlSGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gICAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLmFueSgpKSxcbiAgICBtZXNzYWdlVHlwZTogeiQxLnN0cmluZygpLFxuICAgIG1lc3NhZ2VCb2R5OiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKVxuICB9KSxcbiAgb3JpZ2luOiB6JDEubGl0ZXJhbChcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbVwiKVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJsb29wXCIpLFxuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJjcnlwdG9cIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBtZXJjaGFudF9pZDogeiQxLnN0cmluZygpLFxuICAgIGVudGl0eV9pZDogeiQxLnN0cmluZygpLFxuICAgIGFwaV90b2tlbjogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcbnZhciBQYXlJblN0YXRlID0gLyogQF9fUFVSRV9fICovICgoUGF5SW5TdGF0ZTIpID0+IHtcbiAgUGF5SW5TdGF0ZTJbXCJJRExFXCJdID0gXCJpZGxlXCI7XG4gIFBheUluU3RhdGUyW1wiQ09ORklSTUlOR19CQUxBTkNFXCJdID0gXCJjb25maXJtaW5nQmFsYW5jZVwiO1xuICBQYXlJblN0YXRlMltcIkNPTkZJUk1JTkdfQVVUSE9SSVpBVElPTlwiXSA9IFwiY29uZmlybWluZ0F1dGhvcml6YXRpb25cIjtcbiAgUGF5SW5TdGF0ZTJbXCJVUERBVElOR19BVVRIT1JJWkFUSU9OXCJdID0gXCJ1cGRhdGluZ0F1dGhvcml6YXRpb25cIjtcbiAgUGF5SW5TdGF0ZTJbXCJTSUdOSU5HX01FU1NBR0VcIl0gPSBcInNpZ25pbmdNZXNzYWdlXCI7XG4gIFBheUluU3RhdGUyW1wiQ1JFQVRJTkdfQ1VTVE9NRVJcIl0gPSBcImNyZWF0aW5nQ3VzdG9tZXJcIjtcbiAgUGF5SW5TdGF0ZTJbXCJQUk9DRVNTSU5HX1BBWU1FTlRcIl0gPSBcInByb2Nlc3NpbmdQYXltZW50XCI7XG4gIFBheUluU3RhdGUyW1wiQ1JFQVRJTkdfUEFZTUVOVFwiXSA9IFwiY3JlYXRpbmdQYXltZW50XCI7XG4gIFBheUluU3RhdGUyW1wiQ09ORklSTUlOR19QQVlNRU5UXCJdID0gXCJjb25maXJtaW5nUGF5bWVudFwiO1xuICBQYXlJblN0YXRlMltcIkNPTVBMRVRFXCJdID0gXCJjb21wbGV0ZVwiO1xuICByZXR1cm4gUGF5SW5TdGF0ZTI7XG59KShQYXlJblN0YXRlIHx8IHt9KTtcblxueiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImFwcGxlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYXV0aG9yaXplX25ldFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpXG4gIH0pXG59KTtcbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5cbmNvbnN0IFBSX0xPQURJTkcgPSB7XG4gIGlzTG9hZGluZzogdHJ1ZSxcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICBjb25zb2xlLndhcm4oXG4gICAgICBgc3RhcnRGbG93IHRyaWdnZXJlZCB3aGlsZSBwYXltZW50IHJlcXVlc3QgaXMgc3RpbGwgbm90IHJlYWR5LiBcbiAgICAgIFlvdSBjYW4gY2hlY2sgdGhlIFwiLmlzTG9hZGluZ1wiIHBhcmFtIHRvIGtub3cgd2hlbiBhIHBheW1lbnQgcmVxdWVzdCBpcyBzdGlsbCBsb2FkaW5nLCBcbiAgICAgIGFuZCBcIi5pc0F2YWlsYWJsZVwiIHRvIGtub3cgaWYgYSBwYXltZW50IHJlcXVlc3QgaXMgYXZhaWxhYmxlLmBcbiAgICApO1xuICB9XG59O1xuXG5jb25zdCB7IGVycl9fIH0gPSBjcmVhdGVPanNGbG93TG9nZ2VycyhcImZvcm0tY2FsbGJhY2tzXCIpO1xuY29uc3QgT3B0aW9uYWxGbiA9IHokMS5mdW5jdGlvbigpLm9wdGlvbmFsKCk7XG5jb25zdCBab2RGb3JtQ2FsbGJhY2tzID0geiQxLm9iamVjdCh7XG4gIG9uRm9jdXM6IE9wdGlvbmFsRm4sXG4gIG9uQmx1cjogT3B0aW9uYWxGbixcbiAgb25DaGFuZ2U6IE9wdGlvbmFsRm4sXG4gIG9uTG9hZDogT3B0aW9uYWxGbixcbiAgb25Mb2FkRXJyb3I6IE9wdGlvbmFsRm4sXG4gIG9uVmFsaWRhdGlvbkVycm9yOiBPcHRpb25hbEZuLFxuICBvbkNoZWNrb3V0U3RhcnRlZDogT3B0aW9uYWxGbixcbiAgb25DaGVja291dFN1Y2Nlc3M6IE9wdGlvbmFsRm4sXG4gIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogT3B0aW9uYWxGbixcbiAgb25DaGVja291dEVycm9yOiBPcHRpb25hbEZuLFxuICBvblBheW1lbnRSZXF1ZXN0TG9hZDogT3B0aW9uYWxGblxufSk7XG5jbGFzcyBGb3JtQ2FsbGJhY2tzIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLyoqXG4gICAgICogU2V0cyBBTEwgZm9ybSBjYWxsYmFja3MuIE5vdGUgdGhhdCBhbGwgb2xkIGNhbGxiYWNrcyBhcmUgcmVtb3ZlZC5cbiAgICAgKi9cbiAgICB0aGlzLnNldENhbGxiYWNrcyA9IChyYXdDYWxsYmFja3MpID0+IHtcbiAgICAgIHRoaXMuX2NhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgICAgIE9iamVjdC5lbnRyaWVzKHJhd0NhbGxiYWNrcykuZm9yRWFjaCgoW2tleSwgcmF3Q2FsbGJhY2tdKSA9PiB7XG4gICAgICAgIGNvbnN0IHNhZmVDYWxsYmFjayA9IG1ha2VDYWxsYmFja1NhZmUoa2V5LCByYXdDYWxsYmFjayA/PyBGb3JtQ2FsbGJhY2tzLk5PT1AsIGVycl9fKTtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2tleV0gPSBzYWZlQ2FsbGJhY2s7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIHRoaXMuX2NhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuTk9PUCA9ICgpID0+IHtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5jcmVhdGVFbXB0eUNhbGxiYWNrcyA9ICgpID0+IHtcbiAgICAgIGNvbnN0IHggPSB7fTtcbiAgICAgIE9iamVjdC5rZXlzKFpvZEZvcm1DYWxsYmFja3Mua2V5b2YoKS5lbnVtKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgeFtrZXldID0gRm9ybUNhbGxiYWNrcy5OT09QO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4geDtcbiAgICB9O1xuICB9XG4gIHN0YXRpYyB7XG4gICAgdGhpcy5mcm9tT2JqZWN0ID0gKG9iaikgPT4ge1xuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRm9ybUNhbGxiYWNrcygpO1xuICAgICAgaW5zdGFuY2Uuc2V0Q2FsbGJhY2tzKFpvZEZvcm1DYWxsYmFja3MucGFyc2Uob2JqKSk7XG4gICAgICByZXR1cm4gaW5zdGFuY2U7XG4gICAgfTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHJlYWQtb25seSB2ZXJzaW9uIG9mIHRoZSBjYWxsYmFja3Mgb2JqZWN0LlxuICAgKi9cbiAgZ2V0IGdldCgpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLl9jYWxsYmFja3MgfTtcbiAgfVxufVxuXG5jb25zdCB1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3MgPSAocHJvcHMpID0+IHtcbiAgY29uc3QgZm9ybUNhbGxiYWNrcyA9IEZvcm1DYWxsYmFja3MuZnJvbU9iamVjdCh7XG4gICAgb25Gb2N1czogcHJvcHMub25Gb2N1cyxcbiAgICBvbkJsdXI6IHByb3BzLm9uQmx1cixcbiAgICBvbkNoYW5nZTogcHJvcHMub25DaGFuZ2UsXG4gICAgb25Mb2FkOiBwcm9wcy5vbkxvYWQsXG4gICAgb25Mb2FkRXJyb3I6IHByb3BzLm9uTG9hZEVycm9yLFxuICAgIG9uVmFsaWRhdGlvbkVycm9yOiBwcm9wcy5vblZhbGlkYXRpb25FcnJvcixcbiAgICBvbkNoZWNrb3V0U3RhcnRlZDogcHJvcHMub25DaGVja291dFN0YXJ0ZWQsXG4gICAgb25DaGVja291dFN1Y2Nlc3M6IHByb3BzLm9uQ2hlY2tvdXRTdWNjZXNzLFxuICAgIG9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzczogcHJvcHMub25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzLFxuICAgIG9uQ2hlY2tvdXRFcnJvcjogcHJvcHMub25DaGVja291dEVycm9yLFxuICAgIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBwcm9wcy5vblBheW1lbnRSZXF1ZXN0TG9hZFxuICB9KTtcbiAgaWYgKGt0LmdldEluc3RhbmNlKCkpIHtcbiAgICBrdC5nZXRJbnN0YW5jZSgpPy51cGRhdGVDYWxsYmFja3MoZm9ybUNhbGxiYWNrcy5nZXQpO1xuICB9XG4gIHJldHVybiBmb3JtQ2FsbGJhY2tzLmdldDtcbn07XG5cbmNvbnN0IHVzZVBheW1lbnRSZXF1ZXN0cyA9IChvcmlnaW5hbE9uUGF5bWVudFJlcXVlc3RMb2FkKSA9PiB7XG4gIGNvbnN0IFtwYXltZW50UmVxdWVzdHMsIHNldFBheW1lbnRSZXF1ZXN0c10gPSB1c2VTdGF0ZSh7XG4gICAgYXBwbGVfcGF5OiBQUl9MT0FESU5HLFxuICAgIGdvb2dsZV9wYXk6IFBSX0xPQURJTkdcbiAgfSk7XG4gIGNvbnN0IG92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkID0gdXNlQ2FsbGJhY2soXG4gICAgKHBheW1lbnRSZXF1ZXN0czIpID0+IHtcbiAgICAgIHNldFBheW1lbnRSZXF1ZXN0cyhwYXltZW50UmVxdWVzdHMyKTtcbiAgICAgIG9yaWdpbmFsT25QYXltZW50UmVxdWVzdExvYWQ/LihwYXltZW50UmVxdWVzdHMyKTtcbiAgICB9LFxuICAgIFtvcmlnaW5hbE9uUGF5bWVudFJlcXVlc3RMb2FkXVxuICApO1xuICByZXR1cm4geyBwYXltZW50UmVxdWVzdHMsIG92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkIH07XG59O1xuXG5jb25zdCBGT1JNX1RBUkdFVCA9IFwib3Bfb2pzX2Zvcm1cIjtcbmNvbnN0IEVsZW1lbnRzRm9ybSA9IChwcm9wcykgPT4ge1xuICBjb25zdCBbb3BGb3JtLCBzZXRPcEZvcm1dID0gdXNlU3RhdGUoKTtcbiAgY29uc3QgW2VsZW1lbnRzQ29udGV4dFZhbHVlLCBzZXRFbGVtZW50c0NvbnRleHRWYWx1ZV0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgeyBwYXltZW50UmVxdWVzdHMsIG92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkIH0gPSB1c2VQYXltZW50UmVxdWVzdHMocHJvcHMub25QYXltZW50UmVxdWVzdExvYWQpO1xuICBjb25zdCBbbG9hZGVkLCBzZXRMb2FkZWRdID0gdXNlU3RhdGUoZmFsc2UpO1xuICBjb25zdCBbc3RyaXBlTGlua0N0cmwsIHNldFN0cmlwZUxpbmtDdHJsXSA9IHVzZVN0YXRlKG51bGwpO1xuICBjb25zdCBbbG9vcENvbmZpZywgc2V0TG9vcENvbmZpZ10gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW2FpcndhbGxleCwgc2V0QWlyd2FsbGV4XSA9IHVzZVN0YXRlKHtcbiAgICBnb29nbGVQYXk6IEFXWF9MT0FESU5HLFxuICAgIGFwcGxlUGF5OiBBV1hfTE9BRElOR1xuICB9KTtcbiAgY29uc3QgZm9ybUNhbGxiYWNrcyA9IHVzZVJlYWN0aXZlRm9ybUNhbGxiYWNrcyh7XG4gICAgLi4ucHJvcHMsXG4gICAgb25QYXltZW50UmVxdWVzdExvYWQ6IG92ZXJyaWRlbk9uUGF5bWVudFJlcXVlc3RMb2FkLFxuICAgIG9uTG9hZDogKHRvdGFsQW1vdW50QXRvbXMsIGN1cnJlbmN5KSA9PiB7XG4gICAgICBzZXRMb2FkZWQodHJ1ZSk7XG4gICAgICBwcm9wcy5vbkxvYWQ/Lih0b3RhbEFtb3VudEF0b21zLCBjdXJyZW5jeSk7XG4gICAgfVxuICB9KTtcbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAob3BGb3JtKSByZXR1cm47XG4gICAgY29uc3QgZm9ybSA9IGt0LmdldEluc3RhbmNlKCkgPz8gbmV3IGt0KHtcbiAgICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IHByb3BzLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgICBmb3JtVGFyZ2V0OiBgIyR7Rk9STV9UQVJHRVR9YCxcbiAgICAgIGJhc2VVcmw6IHByb3BzLmJhc2VVcmwsXG4gICAgICBjdXN0b21Jbml0UGFyYW1zOiBwcm9wcy5jdXN0b21Jbml0UGFyYW1zLFxuICAgICAgLi4uZm9ybUNhbGxiYWNrc1xuICAgIH0pO1xuICAgIHNldE9wRm9ybShmb3JtKTtcbiAgICBjb25zdCB2YWx1ZSA9IGdldEVsZW1lbnRzQ29udGV4dFZhbHVlKGZvcm0pO1xuICAgIHNldEVsZW1lbnRzQ29udGV4dFZhbHVlKHZhbHVlKTtcbiAgICBmb3JtLmluaXRGbG93cy5zdHJpcGVMaW5rLnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgIHNldFN0cmlwZUxpbmtDdHJsKHJlc3VsdC5sb2FkZWRWYWx1ZS5jb250cm9sbGVyKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBmb3JtLmluaXRGbG93cy5sb29wLnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgIHNldExvb3BDb25maWcoe1xuICAgICAgICAgIHdpZGdldDogcmVzdWx0LmxvYWRlZFZhbHVlLndpZGdldFByb3BzLFxuICAgICAgICAgIGNvbmZpZzogcmVzdWx0LmxvYWRlZFZhbHVlLmluaXRMb29wQ29ubmVjdFByb3BzXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGZvcm0uaW5pdEZsb3dzLmFpcndhbGxleEdvb2dsZVBheS5wdWJsaXNoZXIuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzICYmIHJlc3VsdC5sb2FkZWRWYWx1ZS5pc0F2YWlsYWJsZSkge1xuICAgICAgICBzZXRBaXJ3YWxsZXgoKHByZXYpID0+ICh7XG4gICAgICAgICAgYXBwbGVQYXk6IHByZXYuYXBwbGVQYXksXG4gICAgICAgICAgZ29vZ2xlUGF5OiByZXN1bHQubG9hZGVkVmFsdWVcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGZvcm0uaW5pdEZsb3dzLmFpcndhbGxleEFwcGxlUGF5LnB1Ymxpc2hlci5zdWJzY3JpYmUoKHJlc3VsdCkgPT4ge1xuICAgICAgaWYgKHJlc3VsdC5pc1N1Y2Nlc3MgJiYgcmVzdWx0LmxvYWRlZFZhbHVlLmlzQXZhaWxhYmxlKSB7XG4gICAgICAgIHNldEFpcndhbGxleCgocHJldikgPT4gKHtcbiAgICAgICAgICBnb29nbGVQYXk6IHByZXYuZ29vZ2xlUGF5LFxuICAgICAgICAgIGFwcGxlUGF5OiB7XG4gICAgICAgICAgICAuLi5yZXN1bHQubG9hZGVkVmFsdWUsXG4gICAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlXG4gICAgICAgICAgfVxuICAgICAgICB9KSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIGZvcm0uZGVzdHJveSgpO1xuICAgIH07XG4gIH0sIFtdKTtcbiAgaWYgKCFvcEZvcm0pIHtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChGcmFnbWVudCwge30pO1xuICB9XG4gIGNvbnN0IGNoaWxkcmVuUHJvcHMgPSB7XG4gICAgc3VibWl0OiBvcEZvcm0uc3VibWl0Q2FyZCxcbiAgICBzdWJtaXRXaXRoOiBvcEZvcm0uZ2VuZXJhbFN1Ym1pdCxcbiAgICBhcHBsZVBheTogcGF5bWVudFJlcXVlc3RzLmFwcGxlX3BheSxcbiAgICBnb29nbGVQYXk6IHBheW1lbnRSZXF1ZXN0cy5nb29nbGVfcGF5LFxuICAgIGxvYWRlZCxcbiAgICAvLyBEaXNhYmxlIGR5bmFtaWMgcHJldmlld3MgZmVhdHVyZSBmb3Igbm93XG4gICAgcHJldmlldzoge1xuICAgICAgYW1vdW50OiBudWxsLFxuICAgICAgaXNMb2FkaW5nOiBmYWxzZSxcbiAgICAgIGVycm9yOiBudWxsXG4gICAgfSxcbiAgICBzdHJpcGVMaW5rOiBzdHJpcGVMaW5rQ3RybCxcbiAgICBhaXJ3YWxsZXgsXG4gICAgbG9vcDogbG9vcENvbmZpZ1xuICB9O1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChGcmFnbWVudCwgeyBjaGlsZHJlbjogZWxlbWVudHNDb250ZXh0VmFsdWUgPyAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRzQ29udGV4dC5Qcm92aWRlciwgeyB2YWx1ZTogZWxlbWVudHNDb250ZXh0VmFsdWUsIGNoaWxkcmVuOiAvKiBAX19QVVJFX18gKi8ganN4KFwiZGl2XCIsIHsgaWQ6IEZPUk1fVEFSR0VULCBjbGFzc05hbWU6IHByb3BzLmNsYXNzTmFtZSwgY2hpbGRyZW46IHByb3BzLmNoaWxkcmVuKGNoaWxkcmVuUHJvcHMpIH0pIH0pIDogLyogQF9fUFVSRV9fICovIGpzeChGcmFnbWVudCwge30pIH0pO1xufTtcbmNvbnN0IGdldEVsZW1lbnRzQ29udGV4dFZhbHVlID0gKG9wRm9ybSkgPT4ge1xuICByZXR1cm4ge1xuICAgIGZvcm1JZDogb3BGb3JtLmZvcm1JZCxcbiAgICBmb3JtSGVpZ2h0OiBvcEZvcm0uZm9ybVByb3BlcnRpZXMuaGVpZ2h0LFxuICAgIHJlZmVycmVyOiBvcEZvcm0ucmVmZXJyZXIsXG4gICAgY2hlY2tvdXRTZWN1cmVUb2tlbjogb3BGb3JtLmNoZWNrb3V0U2VjdXJlVG9rZW4sXG4gICAgcmVnaXN0ZXJJZnJhbWU6IG9wRm9ybS5yZWdpc3RlcklmcmFtZSxcbiAgICBiYXNlVXJsOiBvcEZvcm0uYmFzZVVybFxuICB9O1xufTtcblxuY29uc3QgRWxlbWVudEZyYW1lID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IHsgZWxlbWVudFR5cGUsIHN0eWxlcyB9ID0gcHJvcHM7XG4gIGNvbnN0IHsgZm9ybUlkLCByZWZlcnJlciwgZm9ybUhlaWdodCwgY2hlY2tvdXRTZWN1cmVUb2tlbiwgcmVnaXN0ZXJJZnJhbWUsIGJhc2VVcmwgfSA9IHVzZU9wZW5QYXlFbGVtZW50cygpO1xuICBjb25zdCBzdWJQYXRoID0gZWxlbWVudFR5cGUudG9Mb3dlckNhc2UoKTtcbiAgY29uc3QgW2hhc0xvYWRlZCwgc2V0SGFzTG9hZGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgaWZyYW1lUmVmID0gdXNlUmVmKG51bGwpO1xuICBjb25zdCBlbGVtZW50U3R5bGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIXN0eWxlcykgcmV0dXJuIFwiXCI7XG4gICAgcmV0dXJuIGNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nKHN0eWxlcyk7XG4gIH0sIFtzdHlsZXNdKTtcbiAgY29uc3QgZnJhbWVTdHlsZSA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBib3JkZXI6IFwibm9uZVwiLFxuICAgICAgd2lkdGg6IFwiMTAwJVwiLFxuICAgICAgaGVpZ2h0OiBmb3JtSGVpZ2h0XG4gICAgfTtcbiAgfSwgW2Zvcm1IZWlnaHRdKTtcbiAgY29uc3QgcXVlcnlTdHJpbmcgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoIWNoZWNrb3V0U2VjdXJlVG9rZW4gfHwgIXJlZmVycmVyKSByZXR1cm4gXCJcIjtcbiAgICBjb25zdCBwYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgcGFyYW1zLmFwcGVuZChcInJlZmVyZXJcIiwgcmVmZXJyZXIpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJzdHlsZXNcIiwgZWxlbWVudFN0eWxlKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwiZm9ybUlkXCIsIGZvcm1JZCk7XG4gICAgcGFyYW1zLmFwcGVuZChcInNlY3VyZVRva2VuXCIsIGNoZWNrb3V0U2VjdXJlVG9rZW4pO1xuICAgIHJldHVybiBwYXJhbXMudG9TdHJpbmcoKTtcbiAgfSwgW2VsZW1lbnRTdHlsZSwgZm9ybUlkLCByZWZlcnJlciwgY2hlY2tvdXRTZWN1cmVUb2tlbl0pO1xuICB1c2VFZmZlY3QoKCkgPT4gc2V0SGFzTG9hZGVkKHRydWUpLCBbXSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFpZnJhbWVSZWYuY3VycmVudCB8fCAhaGFzTG9hZGVkKSByZXR1cm47XG4gICAgcmVnaXN0ZXJJZnJhbWUoZWxlbWVudFR5cGUsIGlmcmFtZVJlZi5jdXJyZW50KTtcbiAgfSwgW2hhc0xvYWRlZF0pO1xuICBpZiAoIWNoZWNrb3V0U2VjdXJlVG9rZW4pIHtcbiAgICBjb25zb2xlLmVycm9yKFwiW2Zvcm1dIENhbm5vdCByZW5kZXIgcGFydGlhbGx5IGluaXRpYWxpemVkIGZyYW1lXCIpO1xuICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KFwiZGl2XCIsIHt9KTtcbiAgfVxuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChcbiAgICBcImlmcmFtZVwiLFxuICAgIHtcbiAgICAgIGlkOiBgb2pzLSR7c3ViUGF0aH0tZWxlbWVudGAsXG4gICAgICBuYW1lOiBgJHtzdWJQYXRofS1lbGVtZW50YCxcbiAgICAgIGNsYXNzTmFtZTogXCJvanMtaWZyYW1lXCIsXG4gICAgICBzcmM6IGAke2Jhc2VVcmx9L2FwcC92MS8ke3N1YlBhdGh9LWVsZW1lbnQvPyR7cXVlcnlTdHJpbmd9YCxcbiAgICAgIHN0eWxlOiBmcmFtZVN0eWxlLFxuICAgICAgcmVmOiBpZnJhbWVSZWZcbiAgICB9XG4gICk7XG59O1xuXG5jb25zdCBDYXJkQ3ZjRWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRF9DVkMgfSk7XG59O1xuXG5jb25zdCBDYXJkRWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRCB9KTtcbn07XG5cbmNvbnN0IENhcmRFeHBpcnlFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX0VYUElSWSB9KTtcbn07XG5cbmNvbnN0IENhcmROdW1iZXJFbGVtZW50ID0gKHsgc3R5bGVzIH0pID0+IHtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRWxlbWVudEZyYW1lLCB7IHN0eWxlcywgZWxlbWVudFR5cGU6IEVsZW1lbnRUeXBlRW51bS5DQVJEX05VTUJFUiB9KTtcbn07XG5cbmV4cG9ydCB7IENhcmRDdmNFbGVtZW50LCBDYXJkRWxlbWVudCwgQ2FyZEV4cGlyeUVsZW1lbnQsIENhcmROdW1iZXJFbGVtZW50LCBFbGVtZW50c0Zvcm0sIEZpZWxkTmFtZSwgUGF5SW5TdGF0ZSwgdXNlT3BlblBheUVsZW1lbnRzIH07Il0sCiAgIm1hcHBpbmdzIjogIkFBQUEsU0FBUyxpQkFBQUEsSUFBZSxjQUFBQyxJQUFZLFlBQUFDLElBQVUsZUFBQUMsSUFBYSxhQUFBQyxJQUFXLFVBQUFDLElBQVEsV0FBQUMs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QyxFQUFFLFFBQUE5RyxFQUFPLE1BQ1gsZ0JBQUE1YixFQUFJd2hCLElBQWMsRUFBRSxRQUFBNUYsR0FBUSxhQUFhN0IsR0FBZ0IsWUFBWSxDQUFDLEdBR3pGNEksS0FBb0IsQ0FBQyxFQUFFLFFBQUEvRyxFQUFPLE1BQ1gsZ0JBQUE1YixFQUFJd2hCLElBQWMsRUFBRSxRQUFBNUYsR0FBUSxhQUFhN0IsR0FBZ0IsWUFBWSxDQUFDOyIsCiAgIm5hbWVzIjogWyJjcmVhdGVDb250ZXh0IiwgInVzZUNvbnRleHQiLCAidXNlU3RhdGUiLCAidXNlQ2FsbGJhY2siLCAidXNlRWZmZWN0IiwgInVzZVJlZiIsICJ1c2VNZW1vIiwgImpzeCIsICJGcmFnbWVudCIsICJ6JDEiLCAidjQiLCAiY29ubmVjdFRvQ2hpbGQiLCAiQWUiLCAiRWxlbWVudHNDb250ZXh0IiwgInVzZU9wZW5QYXlFbGVtZW50cyIsICJjb250ZXh0IiwgImV0IiwgImduIiwgInduIiwgImJuIiwgInZuIiwgIkVuIiwgIldlIiwgIkNuIiwgIlNuIiwgImUiLCAiUG4iLCAiSiIsICJrbiIsICJyIiwgIngiLCAiTyIsICJTIiwgImoiLCAiSXQiLCAiUnQiLCAiRnQiLCAiTXQiLCAiZGUiLCAiQW4iLCAiVGUiLCAiSW4iLCAicSIsICJSbiIsICJGbiIsICJNbiIsICJEbiIsICJPbiIsICJObiIsICJUbiIsICJMbiIsICJVbiIsICJqbiIsICJ4biIsICIkbiIsICJDZSIsICJ6biIsICJHbiIsICJWbiIsICJxbiIsICJZbiIsICJLbiIsICJXbiIsICJ0dCIsICJIbiIsICJKbiIsICJabiIsICJJIiwgIkJuIiwgIlFuIiwgIkR0IiwgIlhuIiwgImVyIiwgInRyIiwgIm5yIiwgInJyIiwgIm9yIiwgIkxlIiwgInN0IiwgIm50IiwgImFyIiwgImlyIiwgInNyIiwgImNyIiwgImxyIiwgImEiLCAiaSIsICJzIiwgImMiLCAidXIiLCAiSCIsICJkciIsICJwciIsICJtciIsICJ5ciIsICJPdCIsICJOdCIsICJmciIsICJociIsICJmZSIsICJfciIsICJnciIsICJUdCIsICJ3ciIsICJiciIsICJ2ciIsICJjdCIsICJMdCIsICJsdCIsICJVdCIsICJFciIsICJDciIsICJqdCIsICJTciIsICJQciIsICJrciIsICJBciIsICJJciIsICJ4dCIsICJSciIsICJGciIsICJNciIsICJEciIsICJPciIsICJOciIsICJUciIsICJMciIsICIkdCIsICJVIiwgImpyIiwgIlVyIiwgInhyIiwgIk0iLCAiaGUiLCAiJHIiLCAienIiLCAiRyIsICJHciIsICJWciIsICJxciIsICJfZSIsICJZciIsICJ1dCIsICJLciIsICJydCIsICJ6dCIsICJXciIsICJHdCIsICJWdCIsICJVZSIsICJlZSIsICJzZSIsICJQIiwgInZpIiwgIkhyIiwgIlNlIiwgIlkiLCAiSnIiLCAiamUiLCAicXQiLCAiWXQiLCAidGUiLCAiWnIiLCAiZHQiLCAiUiIsICJCciIsICJRciIsICJYciIsICJlbyIsICJmIiwgImgiLCAieSIsICJtIiwgIkEiLCAicm8iLCAidG8iLCAibm8iLCAiZCIsICJsIiwgInUiLCAib28iLCAiS3QiLCAiYW8iLCAiaW8iLCAieGUiLCAiV3QiLCAic28iLCAiY28iLCAibG8iLCAiSHQiLCAidW8iLCAicG8iLCAiSnQiLCAibW8iLCAieW8iLCAiZm8iLCAiaG8iLCAib3QiLCAiX28iLCAiZ28iLCAid28iLCAiYm8iLCAidm8iLCAiWnQiLCAiQnQiLCAiRW8iLCAiQ28iLCAibWUiLCAiRWUiLCAiU28iLCAiUXQiLCAiUG8iLCAia28iLCAicHQiLCAiQW8iLCAiSW8iLCAiXyIsICJ2IiwgIlJvIiwgIkZvIiwgIk1vIiwgIkMiLCAibXQiLCAieXQiLCAiRG8iLCAidyIsICJVbyIsICJMbyIsICJiIiwgIk9vIiwgIk5vIiwgIlRvIiwgIlYiLCAiTCIsICJqbyIsICJ4byIsICIkbyIsICJ2ZSIsICJ6byIsICJWbyIsICJHbyIsICJxbyIsICJLIiwgImZ0IiwgIllvIiwgIktvIiwgImsiLCAiY2UiLCAiRSIsICJOIiwgIiRlIiwgIlh0IiwgInFlIiwgImVuIiwgInplIiwgIldvIiwgInRuIiwgInoiLCAibGUiLCAiSG8iLCAiSm8iLCAiRCIsICJfbiIsICJrZSIsICJyZSIsICJWZSIsICJvZSIsICJnZSIsICJubiIsICJybiIsICJabyIsICJCbyIsICJRbyIsICJvbiIsICJhbiIsICJSZSIsICJYbyIsICJlYSIsICJ0YSIsICJ1ZSIsICJIZSIsICJuYSIsICJyYSIsICJvYSIsICJhYSIsICJUIiwgImlhIiwgInNhIiwgImNhIiwgImxhIiwgInVhIiwgInNuIiwgImNuIiwgIndlIiwgIkplIiwgImRhIiwgInBhIiwgImllIiwgImJlIiwgIm1hIiwgInlhIiwgIlplIiwgIm5lIiwgImZhIiwgImxuIiwgInllIiwgIkRlIiwgIk9lIiwgInBlIiwgImhhIiwgIl9hIiwgIkYiLCAiR2UiLCAiWWUiLCAiTmUiLCAiUGUiLCAiaHQiLCAidW4iLCAiZG4iLCAicG4iLCAibW4iLCAieW4iLCAiX3QiLCAiRmUiLCAiYXQiLCAidmEiLCAiQmUiLCAiZ2EiLCAiS2UiLCAid2EiLCAiSWUiLCAiYmEiLCAiaXQiLCAiRWEiLCAiQ2EiLCAiWCIsICJQYSIsICJndCIsICJTYSIsICJrYSIsICJBYSIsICJJYSIsICJSYSIsICJGYSIsICJmbiIsICJ3dCIsICJNYSIsICJEYSIsICJidCIsICJPYSIsICJ2dCIsICJOYSIsICJUYSIsICJMYSIsICJVYSIsICJqYSIsICJ4YSIsICIkYSIsICJ6YSIsICJHYSIsICJWYSIsICJxYSIsICJZYSIsICJLYSIsICJXYSIsICJIYSIsICJKYSIsICJobiIsICJaYSIsICJCYSIsICJRYSIsICJYYSIsICJlaSIsICJ0aSIsICJuaSIsICJyaSIsICJvaSIsICJhaSIsICJpaSIsICJNZSIsICJzaSIsICJjaSIsICJhZSIsICJsaSIsICJ1aSIsICJkaSIsICIkIiwgIkV0IiwgIlciLCAibiIsICJRZSIsICJwaSIsICJDdCIsICJtaSIsICJ5aSIsICJmaSIsICJTdCIsICJQdCIsICJaIiwgIkIiLCAiUSIsICJrdCIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxIiwgIlpvZEZpZWxkRXJyb3IiLCAibWFrZUNhbGxiYWNrU2FmZSIsICJjYWxsYmFja05hbWUiLCAiZXJyb3JMb2dnZXIiLCAiYXJncyIsICJlcnJvciIsICJTdWJtaXRNZXRob2RzIiwgIlN1Ym1pdE1ldGhvZHMyIiwgIlJlcXVpcmVkU3RyaW5nIiwgIk9wdGlvbmFsU3RyaW5nIiwgIm51bGxPclVuZGVmT3IkMSIsICJ6VHlwZSIsICJGaWVsZE5hbWUiLCAiRmllbGROYW1lMiIsICJGaWVsZE5hbWVFbnVtIiwgIlByaXZhdGVGaWVsZE5hbWUiLCAiUHJpdmF0ZUZpZWxkTmFtZTIiLCAiUHJpdmF0ZUZpZWxkTmFtZUVudW0iLCAiQWxsRmllbGROYW1lcyIsICJFbGVtZW50VHlwZUVudW0iLCAiRWxlbWVudFR5cGVFbnVtMiIsICJDaGVja291dFBheW1lbnRNZXRob2QkMSIsICJQYXltZW50TWV0aG9kTWluaW1hbCIsICJFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRQYXlsb2FkIiwgIklucHV0RXZlbnRUeXBlIiwgIklucHV0RXZlbnRQYXlsb2FkIiwgIkVycm9yRXZlbnRUeXBlIiwgIkVycm9yRXZlbnRQYXlsb2FkIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQiLCAiTGF5b3V0RXZlbnRQYXlsb2FkIiwgIkxvYWRlZEV2ZW50UGF5bG9hZCIsICJQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQiLCAiU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiUmVxdWlyZWRGb3JtRmllbGRzIiwgIlBSRm9ybUZpZWxkcyIsICJTdWJtaXRFdmVudFR5cGUiLCAiU3VibWl0RXZlbnRQYXlsb2FkIiwgIlRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiRXZlbnRQYXlsb2FkIiwgIkNoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlIiwgIkZpZWxkVmFsaWRhdGlvbkVycm9yIiwgIlRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UiLCAiQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhIiwgImNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nIiwgInN0eWxlcyIsICJudWxsT3JVbmRlZk9yIiwgIkNvdXBvbk1pbmltYWwiLCAiTGluZUl0ZW0iLCAiQnJhbmRTZXR0aW5ncyIsICJCcmFuZCIsICJDaGVja291dFBheW1lbnRNZXRob2QiLCAiU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwiLCAiU3Vic2NyaXB0aW9uTWluaW1hbCIsICJJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwiLCAiSW52b2ljZUxpbmVJdGVtTWluaW1hbCIsICJEaXNjb3VudE1pbmltYWwiLCAiSW52b2ljZU1pbmltYWwiLCAiQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsIiwgIlByZXZpZXdDaGVja291dFJlc3BvbnNlIiwgIl9QYXltZW50Rm9ybVByZWZpbGxDb21tb24iLCAiUGF5bWVudEZvcm1QcmVmaWxsIiwgIkNvbXBsZXRlZEZvcm1QcmVmaWxsIiwgIkV4cGlyZWRGb3JtUHJlZmlsbCIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciIsICJOZXdDdXN0b21lckZpZWxkcyIsICJQcmljZVF0eSIsICJDYXJ0SW5mbyIsICJQcm9jZXNzb3JTcGVjaWZpY01ldGFkYXRhIiwgImZpeFByb3RvIiwgInRhcmdldCIsICJwcm90b3R5cGUiLCAic2V0UHJvdG90eXBlT2YiLCAiZml4U3RhY2siLCAiY2FwdHVyZVN0YWNrVHJhY2UiLCAiX19leHRlbmRzIiwgIl9leHRlbmRTdGF0aWNzIiwgInAiLCAiX18iLCAiX3N1cGVyIiwgIkN1c3RvbUVycm9yIiwgIm1lc3NhZ2UiLCAib3B0aW9ucyIsICJfbmV3VGFyZ2V0IiwgIl90aGlzIiwgImNyZWF0ZU9qc0Zsb3dMb2dnZXJzIiwgInByZWZpeCIsICJsb2ciLCAiZXJyIiwgIkFXWF9MT0FESU5HIiwgIkFkeWVuRW52aXJvbm1lbnQiLCAiUGF5bWVudFByb2Nlc3NvciIsICJQYXlJblN0YXRlIiwgIlBheUluU3RhdGUyIiwgIlBSX0xPQURJTkciLCAiZXJyX18iLCAiT3B0aW9uYWxGbiIsICJab2RGb3JtQ2FsbGJhY2tzIiwgIl9Gb3JtQ2FsbGJhY2tzIiwgInJhd0NhbGxiYWNrcyIsICJrZXkiLCAicmF3Q2FsbGJhY2siLCAic2FmZUNhbGxiYWNrIiwgIm9iaiIsICJpbnN0YW5jZSIsICJGb3JtQ2FsbGJhY2tzIiwgInVzZVJlYWN0aXZlRm9ybUNhbGxiYWNrcyIsICJwcm9wcyIsICJmb3JtQ2FsbGJhY2tzIiwgInVzZVBheW1lbnRSZXF1ZXN0cyIsICJvcmlnaW5hbE9uUGF5bWVudFJlcXVlc3RMb2FkIiwgInBheW1lbnRSZXF1ZXN0cyIsICJzZXRQYXltZW50UmVxdWVzdHMiLCAib3ZlcnJpZGVuT25QYXltZW50UmVxdWVzdExvYWQiLCAicGF5bWVudFJlcXVlc3RzMiIsICJGT1JNX1RBUkdFVCIsICJFbGVtZW50c0Zvcm0iLCAib3BGb3JtIiwgInNldE9wRm9ybSIsICJlbGVtZW50c0NvbnRleHRWYWx1ZSIsICJzZXRFbGVtZW50c0NvbnRleHRWYWx1ZSIsICJsb2FkZWQiLCAic2V0TG9hZGVkIiwgInN0cmlwZUxpbmtDdHJsIiwgInNldFN0cmlwZUxpbmtDdHJsIiwgImxvb3BDb25maWciLCAic2V0TG9vcENvbmZpZyIsICJhaXJ3YWxsZXgiLCAic2V0QWlyd2FsbGV4IiwgInRvdGFsQW1vdW50QXRvbXMiLCAiY3VycmVuY3kiLCAiZm9ybSIsICJ2YWx1ZSIsICJnZXRFbGVtZW50c0NvbnRleHRWYWx1ZSIsICJyZXN1bHQiLCAicHJldiIsICJjaGlsZHJlblByb3BzIiwgIkVsZW1lbnRGcmFtZSIsICJlbGVtZW50VHlwZSIsICJmb3JtSWQiLCAicmVmZXJyZXIiLCAiZm9ybUhlaWdodCIsICJjaGVja291dFNlY3VyZVRva2VuIiwgInJlZ2lzdGVySWZyYW1lIiwgImJhc2VVcmwiLCAic3ViUGF0aCIsICJoYXNMb2FkZWQiLCAic2V0SGFzTG9hZGVkIiwgImlmcmFtZVJlZiIsICJlbGVtZW50U3R5bGUiLCAiZnJhbWVTdHlsZSIsICJxdWVyeVN0cmluZyIsICJwYXJhbXMiLCAiQ2FyZEN2Y0VsZW1lbnQiLCAiQ2FyZEVsZW1lbnQiLCAiQ2FyZEV4cGlyeUVsZW1lbnQiLCAiQ2FyZE51bWJlckVsZW1lbnQiXQp9Cg==
4822
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiaW5kZXguanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7IGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBqc3gsIEZyYWdtZW50IH0gZnJvbSAncmVhY3QvanN4LXJ1bnRpbWUnO1xuaW1wb3J0IHsgeiBhcyB6JDEgfSBmcm9tICd6b2QnO1xuaW1wb3J0IHsgdjQgfSBmcm9tICd1dWlkJztcbmltcG9ydCB7IGNvbm5lY3RUb0NoaWxkIH0gZnJvbSAncGVucGFsJztcbmltcG9ydCBBZSBmcm9tICdjaGFsayc7XG5cbmNvbnN0IEVsZW1lbnRzQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe1xuICBmb3JtSWQ6IFwiXCIsXG4gIGZvcm1IZWlnaHQ6IFwiXCIsXG4gIHJlZmVycmVyOiB2b2lkIDAsXG4gIGNoZWNrb3V0U2VjdXJlVG9rZW46IHZvaWQgMCxcbiAgcmVnaXN0ZXJJZnJhbWU6ICgpID0+IHtcbiAgfSxcbiAgYmFzZVVybDogXCJcIlxufSk7XG5cbmNvbnN0IHVzZU9wZW5QYXlFbGVtZW50cyA9ICgpID0+IHtcbiAgY29uc3QgY29udGV4dCA9IHVzZUNvbnRleHQoRWxlbWVudHNDb250ZXh0KTtcbiAgaWYgKCFjb250ZXh0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXNlT3BlblBheUVsZW1lbnRzIG11c3QgYmUgdXNlZCB3aXRoaW4gYW4gT3BlblBheUVsZW1lbnRzUHJvdmlkZXJcIik7XG4gIH1cbiAgcmV0dXJuIGNvbnRleHQ7XG59O1xuXG5jb25zdCBldCA9IFwiaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb21cIiwgZ24gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pLCB3biA9IHokMS5hcnJheShnbiksIGJuID0geiQxLm9iamVjdCh7XG4gIGNvZGU6IHokMS5zdHJpbmcoKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBwYXRoOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKVxufSksIHZuID0geiQxLmFycmF5KGJuKSwgRW4gPSB7XG4gIFwiZmFpbGVkIHRvIGZldGNoXCI6IFwiQ29ubmVjdGlvbiBlcnJvcjogcGxlYXNlIGRvdWJsZSBjaGVjayBpZiB5b3UgYXJlIGNvbm5lY3RlZCB0byB0aGUgaW50ZXJuZXQsIHRoZW4gdHJ5IGFnYWluXCJcbn0sIFdlID0gKHQpID0+IHtcbiAgY29uc3QgbiA9IHQudG9Mb3dlckNhc2UoKS50cmltKCk7XG4gIHJldHVybiBFbltuXSA/PyB0O1xufSwgQ24gPSAodCkgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiB0eXBlb2YgSlNPTi5wYXJzZSh0KSA9PSBcIm9iamVjdFwiO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gITE7XG4gIH1cbn0sIFNuID0gKHQpID0+IHQubGVuZ3RoID09PSAxID8gV2UodFswXS5tc2cpIDogYFBsZWFzZSBmaXggdGhlIGZvbGxvd2luZyBlcnJvcnM6XG4ke3QubWFwKChlKSA9PiBg4oCiICR7V2UoZS5tc2cpfWApLmpvaW4oYFxuYCl9YCwgUG4gPSAodCkgPT4gYEVuY291bnRlcmVkIHRoZSBmb2xsb3dpbmcgZXJyb3JzOlxuJHt0Lm1hcCgoZSkgPT4gYC0gJHtlLnBhdGguam9pbihcIi9cIil9OiAke2UubWVzc2FnZX1gKS5qb2luKGBcbmApfWAsIEggPSAodCkgPT4ge1xuICBpZiAodCBpbnN0YW5jZW9mIEVycm9yKVxuICAgIGlmIChDbih0Lm1lc3NhZ2UpKSB7XG4gICAgICBjb25zdCBuID0gSlNPTi5wYXJzZSh0Lm1lc3NhZ2UpO1xuICAgICAgcmV0dXJuIHduLnNhZmVQYXJzZShuKS5zdWNjZXNzID8gU24obikgOiB2bi5zYWZlUGFyc2Uobikuc3VjY2VzcyA/IFBuKG4pIDogKGNvbnNvbGUud2FybihgRW5jb3VudGVyZWQgdW5rbm93biBzdHJpbmdpZmllZCBKU09OIG9iamVjdDpcbiR7dC5tZXNzYWdlfWApLCB0Lm1lc3NhZ2UpO1xuICAgIH0gZWxzZVxuICAgICAgcmV0dXJuIFdlKHQubWVzc2FnZSk7XG4gIGlmICh0eXBlb2YgdCA9PSBcIm9iamVjdFwiKVxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkodCk7XG4gICAgfSBjYXRjaCAobikge1xuICAgICAgcmV0dXJuIG4gKyBcIlwiO1xuICAgIH1cbiAgZWxzZVxuICAgIHJldHVybiB0ICsgXCJcIjtcbn0sIGtuID0gKHQsIG4sIGUpID0+ICguLi5yKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIG4oLi4ucik7XG4gIH0gY2F0Y2ggKGEpIHtcbiAgICBlKGBbZm9ybV0gRXJyb3IgcnVubmluZyBjYWxsYmFjayAoJHt0fSk6YCwgYSk7XG4gICAgcmV0dXJuO1xuICB9XG59O1xudmFyIHggPSAvKiBAX19QVVJFX18gKi8gKCh0KSA9PiAodC5wb2NreXRQYXlwYWwgPSBcInBvY2t5dC1wYXlwYWxcIiwgdC5haXJ3YWxsZXhHb29nbGVQYXkgPSBcImFpcndhbGxleC1nb29nbGUtcGF5XCIsIHQuYWlyd2FsbGV4QXBwbGVQYXkgPSBcImFpcndhbGxleC1hcHBsZS1wYXlcIiwgdC5hdXRob3JpemVuZXRHb29nbGVQYXkgPSBcImF1dGhvcml6ZW5ldC1nb29nbGUtcGF5XCIsIHQuYXV0aG9yaXplbmV0QXBwbGVQYXkgPSBcImF1dGhvcml6ZW5ldC1hcHBsZS1wYXlcIiwgdC5sb29wQ3J5cHRvID0gXCJsb29wLWNyeXB0b1wiLCB0KSkoeCB8fCB7fSk7XG56JDEubmF0aXZlRW51bSh4KTsgY29uc3QgRCA9IHokMS5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogXCJDYW5ub3QgYmUgYmxhbmtcIiB9KSwgUyA9IHokMS5zdHJpbmcoKS50cmltKCkub3B0aW9uYWwoKSwgVSA9ICh0KSA9PiB6JDEubnVsbGFibGUodC5vcHRpb25hbCgpKTtcbnZhciBwID0gLyogQF9fUFVSRV9fICovICgodCkgPT4gKHQuRklSU1RfTkFNRSA9IFwiZmlyc3ROYW1lXCIsIHQuTEFTVF9OQU1FID0gXCJsYXN0TmFtZVwiLCB0LkVNQUlMID0gXCJlbWFpbFwiLCB0LlpJUF9DT0RFID0gXCJ6aXBDb2RlXCIsIHQuQ0lUWSA9IFwiY2l0eVwiLCB0LlNUQVRFID0gXCJzdGF0ZVwiLCB0LkNPVU5UUlkgPSBcImNvdW50cnlcIiwgdC5BRERSRVNTID0gXCJhZGRyZXNzXCIsIHQuUEhPTkUgPSBcInBob25lXCIsIHQuUFJPTU9USU9OX0NPREUgPSBcInByb21vdGlvbkNvZGVcIiwgdCkpKHAgfHwge30pO1xuY29uc3QgSXQgPSB6JDEubmF0aXZlRW51bShwKTtcbnZhciBSdCA9IC8qIEBfX1BVUkVfXyAqLyAoKHQpID0+ICh0LkNBUkRfTlVNQkVSID0gXCJjYXJkTnVtYmVyXCIsIHQuQ0FSRF9FWFBJUlkgPSBcImNhcmRFeHBpcnlcIiwgdC5DQVJEX0NWQyA9IFwiY2FyZEN2Y1wiLCB0KSkoUnQgfHwge30pO1xuY29uc3QgRnQgPSB6JDEubmF0aXZlRW51bShSdCksIE10ID0geiQxLnVuaW9uKFtJdCwgRnRdKTtcbnZhciBkZSA9IC8qIEBfX1BVUkVfXyAqLyAoKHQpID0+ICh0LkNBUkQgPSBcImNhcmRcIiwgdC5DQVJEX05VTUJFUiA9IFwiY2FyZC1udW1iZXJcIiwgdC5DQVJEX0VYUElSWSA9IFwiY2FyZC1leHBpcnlcIiwgdC5DQVJEX0NWQyA9IFwiY2FyZC1jdmNcIiwgdCkpKGRlIHx8IHt9KTtcbmNvbnN0IEFuID0geiQxLm5hdGl2ZUVudW0oZGUpLCBUZSA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogVSh6JDEuc3RyaW5nKCkpLFxuICBtZXRhZGF0YTogVSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCBJbiA9IHokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBjYXJkTnVtYmVyOiBTLFxuICBleHBpcnk6IFMsXG4gIGN2YzogU1xufSk7XG56JDEub2JqZWN0KHtcbiAgYmFja2dyb3VuZENvbG9yOiBTLFxuICBjb2xvcjogUyxcbiAgZm9udEZhbWlseTogUyxcbiAgZm9udFNpemU6IFMsXG4gIGZvbnRXZWlnaHQ6IFMsXG4gIG1hcmdpbjogUyxcbiAgcGFkZGluZzogUyxcbiAgbGV0dGVyU3BhY2luZzogUyxcbiAgbGluZUhlaWdodDogUyxcbiAgaGlkZUljb246IFNcbn0pO1xuY29uc3QgcSA9IHokMS5lbnVtKFtcbiAgLy8gRWxlbWVudCAtPiBGb3JtXG4gIFwiTEFZT1VUXCIsXG4gIFwiTE9BREVEXCIsXG4gIFwiQkxVUlwiLFxuICBcIkZPQ1VTXCIsXG4gIFwiQ0hBTkdFXCIsXG4gIFwiVE9LRU5JWkVfU1RBUlRFRFwiLFxuICBcIkNIRUNLT1VUX1NUQVJURURcIixcbiAgXCJQQVlNRU5UX0ZMT1dfU1RBUlRFRFwiLFxuICBcIlRPS0VOSVpFX1NVQ0NFU1NcIixcbiAgXCJDSEVDS09VVF9TVUNDRVNTXCIsXG4gIFwiTE9BRF9FUlJPUlwiLFxuICBcIlZBTElEQVRJT05fRVJST1JcIixcbiAgXCJUT0tFTklaRV9FUlJPUlwiLFxuICBcIkNIRUNLT1VUX0VSUk9SXCIsXG4gIFwiU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTU1wiLFxuICAvLyBGb3JtIC0+IEVsZW1lbnRcbiAgXCJUT0tFTklaRVwiLFxuICBcIkNIRUNLT1VUXCIsXG4gIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJcbl0pLCBSbiA9IHEuZXh0cmFjdChbXCJUT0tFTklaRV9TVEFSVEVEXCIsIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiXSksIEZuID0geiQxLm9iamVjdCh7IHR5cGU6IFJuIH0pLCBNbiA9IHEuZXh0cmFjdChbXCJCTFVSXCIsIFwiRk9DVVNcIiwgXCJDSEFOR0VcIl0pLCBEbiA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiBNbixcbiAgZWxlbWVudFR5cGU6IEZ0LFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pLCBPbiA9IHEuZXh0cmFjdChbXCJMT0FEX0VSUk9SXCIsIFwiVE9LRU5JWkVfRVJST1JcIiwgXCJDSEVDS09VVF9FUlJPUlwiXSksIE5uID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IE9uLFxuICBtZXNzYWdlOiBELFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KSwgVG4gPSBxLmV4dHJhY3QoW1wiVkFMSURBVElPTl9FUlJPUlwiXSksIExuID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IFRuLFxuICBlbGVtZW50VHlwZTogTXQsXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pLCBVbiA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChxLmVudW0uTEFZT1VUKSxcbiAgaGVpZ2h0OiBEXG59KSwgam4gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwocS5lbnVtLkxPQURFRCksXG4gIHNlc3Npb25JZDogRCxcbiAgdG90YWxBbW91bnRBdG9tczogeiQxLm51bWJlcigpLFxuICBjdXJyZW5jeTogUyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kczogeiQxLmFycmF5KFRlKVxufSksIHhuID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKHEuZW51bS5QQVlNRU5UX0ZMT1dfU1RBUlRFRCksXG4gIG5leHRBY3Rpb25NZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBzdGFydFBGTWV0YWRhdGE6IHokMS5vcHRpb25hbCh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pLCAkbiA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChxLmVudW0uU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTUyksXG4gIHBheW1lbnRNZXRob2RJZDogeiQxLnN0cmluZygpXG59KSwgQ2UgPSB6JDEub2JqZWN0KHtcbiAgZmlyc3ROYW1lOiBELFxuICBsYXN0TmFtZTogRCxcbiAgZW1haWw6IEQsXG4gIHppcENvZGU6IEQsXG4gIGNvdW50cnk6IEQsXG4gIHByb21vdGlvbkNvZGU6IFNcbn0pLCB6biA9IHokMS5vYmplY3Qoe1xuICBmaXJzdE5hbWU6IFMsXG4gIGxhc3ROYW1lOiBTLFxuICBlbWFpbDogRCxcbiAgemlwQ29kZTogRCxcbiAgY291bnRyeTogRCxcbiAgcHJvbW90aW9uQ29kZTogUyxcbiAgYWRkcmVzczogUyxcbiAgY2l0eTogUyxcbiAgc3RhdGU6IFNcbn0pLCBHbiA9IHEuZXh0cmFjdChbXCJUT0tFTklaRVwiLCBcIkNIRUNLT1VUXCIsIFwiU1RBUlRfUEFZTUVOVF9GTE9XXCJdKSwgVm4gPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogR24sXG4gIHNlc3Npb25JZDogRCxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBUZSxcbiAgcGF5bWVudEZsb3dNZXRhZGF0YTogeiQxLmFueSgpLm9wdGlvbmFsKCksXG4gIGRvTm90VXNlTGVnYWN5Q0NGbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nQ0NQTUlkOiBTXG59KS5leHRlbmQoQ2Uuc2hhcGUpLCBxbiA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChxLmVudW0uVE9LRU5JWkVfU1VDQ0VTUyksXG4gIGlzUmVhZHlGb3JDaGVja291dDogeiQxLmJvb2xlYW4oKVxufSksIFluID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKHEuZW51bS5DSEVDS09VVF9TVUNDRVNTKSxcbiAgaW52b2ljZVVybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25JZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcklkOiB6JDEuc3RyaW5nKClcbn0pLCBLbiA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJ0eXBlXCIsIFtcbiAgRm4sXG4gIERuLFxuICBObixcbiAgTG4sXG4gIFVuLFxuICBqbixcbiAgVm4sXG4gIHFuLFxuICBZbixcbiAgeG4sXG4gICRuXG5dKSwgV24gPSB6JDEub2JqZWN0KHtcbiAgcGF5bG9hZDogS24sXG4gIG5vbmNlOiBELFxuICBmb3JtSWQ6IEQsXG4gIGVsZW1lbnRJZDogRFxufSk7XG56JDEub2JqZWN0KHtcbiAgYW1vdW50QXRvbTogeiQxLm51bWJlcigpLFxuICAvKipcbiAgICogVGhlIHRocmVlLWxldHRlciBJU08gNDIxNyBjdXJyZW5jeSBjb2RlIGZvciB0aGUgcGF5bWVudC5cbiAgICovXG4gIGN1cnJlbmN5OiBEXG59KTtcbnokMS5lbnVtKFtcImFwcGxlX3BheVwiLCBcImdvb2dsZV9wYXlcIl0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBleGlzdGluZ19jY19wbV9pZDogVSh6JDEuc3RyaW5nKCkpLFxuICB0aGVpcl9wbV9pZDogVSh6JDEuc3RyaW5nKCkpLFxuICBjaGVja291dF9hdHRlbXB0X2lkOiBVKHokMS5zdHJpbmcoKSksXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogVSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgdHQgPSB6JDEub2JqZWN0KHtcbiAgaW52b2ljZV91cmxzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgc3Vic2NyaXB0aW9uX2lkczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSksXG4gIGN1c3RvbWVyX2lkOiB6JDEuc3RyaW5nKClcbn0pLCBKbiA9IHokMS5vYmplY3Qoe1xuICBlbGVtZW50VHlwZTogeiQxLnN0cmluZygpLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgSG4gPSB6JDEub2JqZWN0KHtcbiAgc3VjY2VzczogeiQxLmxpdGVyYWwoITEpLFxuICBlcnJvcl90eXBlOiB6JDEubGl0ZXJhbChcInZhbGlkYXRpb25fZXJyb3JcIiksXG4gIGVycm9yczogeiQxLmFycmF5KEpuKVxufSksIFpuID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInN1Y2Nlc3NcIiwgW1xuICB6JDEub2JqZWN0KHsgc3VjY2VzczogeiQxLmxpdGVyYWwoITApIH0pLFxuICBIblxuXSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogVGUsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IENlLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBVKHokMS5zdHJpbmcoKSksXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2Vzc2lvbl9pZDogeiQxLnN0cmluZygpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogVGUsXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IENlLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKVxufSk7XG52YXIgSSA9IC8qIEBfX1BVUkVfXyAqLyAoKHQpID0+ICh0LlNVQ0NFU1MgPSBcInN1Y2Nlc3NcIiwgdC5GQUlMVVJFID0gXCJmYWlsdXJlXCIsIHQuQ0FOQ0VMTEVEID0gXCJjYW5jZWxsZWRcIiwgdCkpKEkgfHwge30pO1xuY29uc3QgQm4gPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXG4gICAgXCJzdWNjZXNzXCIsXG4gICAgXCJmYWlsdXJlXCIsXG4gICAgXCJjYW5jZWxsZWRcIlxuICAgIC8qIENBTkNFTExFRCAqL1xuICBdKSxcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG5jb25zdCBRbiA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIHJlZGlyZWN0X3VybDogeiQxLnN0cmluZygpLFxuICBpbml0aWFsX2ludGVudF9pZDogeiQxLnN0cmluZygpLFxuICBjb25zZW50X2lkOiB6JDEuc3RyaW5nKCksXG4gIHRoZWlyX3BtX2lkOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKVxufSksIER0ID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiBVKHokMS5zdHJpbmcoKSksXG4gIGluaXRpYWxfaW50ZW50X2lkOiBVKHokMS5zdHJpbmcoKSksXG4gIGNvbnNlbnRfaWQ6IFUoeiQxLnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IFUoeiQxLnN0cmluZygpKSxcbiAgcGF5bWVudF9zZXNzaW9uOiBVKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIFhuID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInByZXNlbnRcIiwgW1xuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwoITApLCBocmVmOiB6JDEuc3RyaW5nKCkgfSksXG4gIHokMS5vYmplY3QoeyBwcmVzZW50OiB6JDEubGl0ZXJhbCghMSkgfSlcbl0pLCBlciA9IHokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZHM6IHokMS5hcnJheShJbiksXG4gIHBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlOiBVKHR0KSxcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiBVKHokMS5hcnJheShEdCkpXG59KSwgdHIgPSAodCkgPT4ge1xuICBjb25zdCBuID0ge307XG4gIHJldHVybiBPYmplY3QuZW50cmllcyh0KS5mb3JFYWNoKChbZSwgcl0pID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYSA9IEl0LnBhcnNlKGUpO1xuICAgICAgQXJyYXkuaXNBcnJheShyKSA/IG5bYV0gPSByIDogQXJyYXkuaXNBcnJheShyLl9lcnJvcnMpICYmIChuW2FdID0gci5fZXJyb3JzKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH0pLCBuO1xufSwgbnIgPSB6JDEub2JqZWN0KHtcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BtX2lkOiB6JDEuc3RyaW5nKClcbn0pLCByciA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbn0pLCBvciA9IHtcbiAgdXNkOiBcInVzZFwiLFxuICBicmw6IFwiYnJsXCJcbn0sIExlID0gYXN5bmMgKHQpID0+IHtcbiAgZm9yIChsZXQgZSA9IDA7IGUgPCAxMDsgZSsrKVxuICAgIHN0KCkgfHwgYXdhaXQgbnQoNTAwKTtcbiAgaWYgKCFzdCgpKVxuICAgIHRocm93IGNvbnNvbGUubG9nKFwiU3RyaXBlIEpTIG5vdCBmb3VuZC5cIiksIG5ldyBFcnJvcihcIlN0cmlwZSBKUyBub3QgZm91bmQuXCIpO1xuICByZXR1cm4gbmV3IFN0cmlwZSh0KTtcbn0sIGFyID0gYXN5bmMgKHQsIG4pID0+IHtcbiAgY29uc3QgZSA9IGF3YWl0IExlKHQpO1xuICByZXR1cm4ge1xuICAgIGVsZW1lbnRzOiBlLmVsZW1lbnRzKG4pLFxuICAgIHN0cmlwZTogZVxuICB9O1xufSwgaXIgPSBhc3luYyAodCwgbiwgZSwgciwgYSkgPT4ge1xuICBjb25zdCBpID0gYXdhaXQgTGUodCksIHMgPSBvcltlLnRvTG93ZXJDYXNlKCkudHJpbSgpXTtcbiAgcmV0dXJuIGkucGF5bWVudFJlcXVlc3Qoe1xuICAgIC8vIFRPRE86IHJlcGxhY2UgdGhpcyB3aXRoIHN0cmlwZSBhY2NvdW50IGNvdW50cnkgYXMgc29vbiBhcyB3ZSBzdXBwb3J0IGl0XG4gICAgY291bnRyeTogXCJVU1wiLFxuICAgIGN1cnJlbmN5OiBzLFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogXCJUb3RhbFwiLFxuICAgICAgYW1vdW50OiBuLFxuICAgICAgcGVuZGluZzogclxuICAgIH0sXG4gICAgLy8gcmVxdWVzdFNoaXBwaW5nOiB0cnVlLFxuICAgIHJlcXVlc3RQYXllck5hbWU6ICEwLFxuICAgIHJlcXVlc3RQYXllckVtYWlsOiAhMCxcbiAgICBkaXNhYmxlV2FsbGV0czogW11cbiAgfSk7XG59LCBudCA9ICh0KSA9PiBuZXcgUHJvbWlzZSgobikgPT4ge1xuICBzZXRUaW1lb3V0KG4sIHQpO1xufSksIHN0ID0gKCkgPT4gXCJTdHJpcGVcIiBpbiB3aW5kb3csIHNyID0gYXN5bmMgKHQpID0+IG5ldyBQcm9taXNlKChuLCBlKSA9PiB7XG4gIHRyeSB7XG4gICAgdC5vbihcInBheW1lbnRtZXRob2RcIiwgYXN5bmMgKHIpID0+IHtcbiAgICAgIGNvbnNvbGUubG9nKFwicGF5bWVudG1ldGhvZCBFVlQ6OiBcIiwgciksIG4ocik7XG4gICAgfSksIHQub24oXCJ0b2tlblwiLCBhc3luYyAocikgPT4ge1xuICAgICAgY29uc29sZS5sb2coXCJ0b2tlbiBFVlQ6OiBcIiwgcik7XG4gICAgfSksIHQub24oXCJjYW5jZWxcIiwgKCkgPT4ge1xuICAgICAgZShuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlcIikpO1xuICAgIH0pO1xuICB9IGNhdGNoIChyKSB7XG4gICAgZShyKTtcbiAgfVxufSksIGNyID0gYXN5bmMgKHQsIG4pID0+IHtcbiAgaWYgKCF0LnN0cmlwZV9wayB8fCAhdC5jbGllbnRfc2VjcmV0KVxuICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBuZXh0IGFjdGlvbiBtZXRhZGF0YSBmb3JtYXQ6ICR7SlNPTi5zdHJpbmdpZnkodCl9YCk7XG4gIGNvbnN0IHIgPSBhd2FpdCAoYXdhaXQgTGUodC5zdHJpcGVfcGspKS5jb25maXJtQ2FyZFNldHVwKHQuY2xpZW50X3NlY3JldCwge1xuICAgIHBheW1lbnRfbWV0aG9kOiBuLnBheW1lbnRNZXRob2QuaWRcbiAgfSk7XG4gIGlmIChyLmVycm9yKVxuICAgIHRocm93IG4uY29tcGxldGUoXCJmYWlsXCIpLCBuZXcgRXJyb3IoYFBheW1lbnQgZmFpbGVkOiAke3IuZXJyb3IubWVzc2FnZSA/PyBcInVua25vd25cIn1gKTtcbiAgcmV0dXJuIG4uY29tcGxldGUoXCJzdWNjZXNzXCIpLCByO1xufSwgbHIgPSBhc3luYyAodCkgPT4ge1xuICB2YXIgYSwgaSwgcywgYztcbiAgY29uc3QgZSA9IGF3YWl0IChhd2FpdCBMZSh0LnN0cmlwZV9waykpLmNvbmZpcm1DYXJkU2V0dXAodC5jbGllbnRfc2VjcmV0LCB7XG4gICAgcGF5bWVudF9tZXRob2Q6IHQuc3RyaXBlX3BtX2lkXG4gIH0pLCByID0gKGEgPSBlLnNldHVwSW50ZW50KSA9PSBudWxsID8gdm9pZCAwIDogYS5zdGF0dXM7XG4gIGlmIChyID09PSBcInN1Y2NlZWRlZFwiKVxuICAgIGNvbnNvbGUubG9nKFwiWzNEU10gQ09ORklSTUlORyBQTTpcIiwgdC5zdHJpcGVfcG1faWQpLCBjb25zb2xlLmxvZyhcIlszRFNdIFNldHVwIGludGVudCBjcmVhdGVkOlwiLCBlLnNldHVwSW50ZW50KTtcbiAgZWxzZSB0aHJvdyByID09PSBcImNhbmNlbGVkXCIgPyBuZXcgRXJyb3IoXCJQYXltZW50IGNhbmNlbGxlZCwgcGxlYXNlIGNsaWNrIFN1Ym1pdCBhZ2FpbiB0byBwYXlcIikgOiBuZXcgRXJyb3IoXG4gICAgYCR7KChpID0gZS5lcnJvcikgPT0gbnVsbCA/IHZvaWQgMCA6IGkubWVzc2FnZSkgPz8gKChjID0gKHMgPSBlLnNldHVwSW50ZW50KSA9PSBudWxsID8gdm9pZCAwIDogcy5sYXN0X3NldHVwX2Vycm9yKSA9PSBudWxsID8gdm9pZCAwIDogYy5tZXNzYWdlKSA/PyBcIlBheW1lbnQgZmFpbGVkLCBwbGVhc2UgY2xpY2sgc3VibWl0IGFnYWluIHRvIHBheS5cIn1gXG4gICk7XG59LCB1ciA9ICh0KSA9PiBKU09OLnN0cmluZ2lmeSh0KSwgSiA9ICh0LCBuKSA9PiBBcnJheS5mcm9tKHQucXVlcnlTZWxlY3RvckFsbChcIltkYXRhLW9waWRdXCIpID8/IFtdKS5yZWR1Y2UoKGEsIGkpID0+IHtcbiAgY29uc3QgcyA9IGkuZ2V0QXR0cmlidXRlKFwiZGF0YS1vcGlkXCIpO1xuICByZXR1cm4gcyA/IHsgLi4uYSwgW3NdOiBpLnZhbHVlIH0gOiBhO1xufSwge30pLCBkciA9ICh0KSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIFduLnBhcnNlKHQpO1xuICB9IGNhdGNoIChuKSB7XG4gICAgdGhyb3cgY29uc29sZS5lcnJvcihcIkVycm9yIHBhcnNpbmcgZXZlbnQgcGF5bG9hZDpcIiwgdCwgbiksIG47XG4gIH1cbn0sIHByID0gYXN5bmMgKHQpID0+IHtcbiAgaWYgKHR5cGVvZiB0ICE9IFwib2JqZWN0XCIgfHwgIXQpIHJldHVybiAhMTtcbiAgdHJ5IHtcbiAgICBjb25zdCBuID0geyB0eXBlOiBcInBpbmdcIiB9LCBlID0gYXdhaXQgdC5zZW5kKG4pO1xuICAgIGlmIChlICE9PSAhMClcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRXhwZWN0ZWQgJ3RydWUnIGFmdGVyIHBpbmcsIGdvdCAke0pTT04uc3RyaW5naWZ5KGUpfWApO1xuICAgIHJldHVybiAhMDtcbiAgfSBjYXRjaCAobikge1xuICAgIHJldHVybiBjb25zb2xlLmVycm9yKFwiSW52YWxpZCBDREUgY29ubmVjdGlvbiBjaGVjazpcIiwgbiksICExO1xuICB9XG59LCBtciA9ICh0LCBuKSA9PiAhIXQgJiYgbiwgZyA9ICh0KSA9PiB6JDEubnVsbGFibGUodC5vcHRpb25hbCgpKTtcbnokMS5zdHJpbmcoKS50cmltKCkubWluKDEsIHsgbWVzc2FnZTogXCJDYW5ub3QgYmUgYmxhbmtcIiB9KTtcbmNvbnN0IHlyID0geiQxLm9iamVjdCh7XG4gIGNkZV9yZXNwb25zZV90eXBlOiB6JDEubGl0ZXJhbChcImVycm9yXCIpLFxuICBtZXNzYWdlOiB6JDEuc3RyaW5nKCksXG4gIGhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuc3RyaW5nKCkpLm9wdGlvbmFsKClcbn0pO1xueiQxLmVudW0oW1widXNkXCIsIFwiYnJsXCJdKTtcbmNvbnN0IE90ID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgYW1vdW50X2F0b21fb2ZmOiBnKHokMS5udW1iZXIoKSksXG4gIHBlcmNlbnRfb2ZmOiBnKHokMS5udW1iZXIoKSksXG4gIGN1cnJlbmN5OiBnKHokMS5zdHJpbmcoKSksXG4gIGR1cmF0aW9uOiB6JDEuc3RyaW5nKCksXG4gIGR1cmF0aW9uX2luX21vbnRoczogZyh6JDEubnVtYmVyKCkpXG59KSwgTnQgPSB6JDEub2JqZWN0KHtcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgY3VycmVuY3k6IHokMS5zdHJpbmcoKSxcbiAgZGVzY3JpcHRpb246IGcoeiQxLnN0cmluZygpKSxcbiAgcHJpY2VfaWQ6IHokMS5zdHJpbmcoKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogZyh6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBnKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKCkuaW50KClcbn0pLCBmciA9IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLCBociA9IHokMS5vYmplY3Qoe1xuICBuYW1lOiB6JDEuc3RyaW5nKCksXG4gIHNldHRpbmdzOiBnKGZyKVxufSksIGZlID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBnKHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBnKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSksIF9yID0geiQxLm9iamVjdCh7XG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKClcbn0pLCBnciA9IHokMS5vYmplY3Qoe1xuICBpZDogZyh6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsOiBnKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfaW50ZXJ2YWxfY291bnQ6IGcoeiQxLm51bWJlcigpLmludCgpKSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1zOiB6JDEuYXJyYXkoX3IpLFxuICB0cmlhbF9zdGFydDogZyh6JDEuc3RyaW5nKCkpLFxuICB0cmlhbF9lbmQ6IGcoeiQxLnN0cmluZygpKVxufSksIFR0ID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6JDEubnVtYmVyKClcbn0pLCB3ciA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICBhbW91bnRfYXRvbV9jb25zaWRlcmluZ19kaXNjb3VudF9hcHBsaWVkOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRpc2NvdW50X2Ftb3VudF9hdG9tczogeiQxLmFycmF5KFR0KSxcbiAgc3Vic2NyaXB0aW9uX2l0ZW1faWQ6IHokMS5zdHJpbmcoKVxufSksIGJyID0geiQxLm9iamVjdCh7XG4gIGNvdXBvbjogT3Rcbn0pLCB2ciA9IHokMS5vYmplY3Qoe1xuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudHM6IHokMS5hcnJheShiciksXG4gIGhvc3RlZF9pbnZvaWNlX3VybDogZyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lczogeiQxLmFycmF5KHdyKSxcbiAgcmVtYWluaW5nX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRheF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9kaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShUdClcbn0pLCBjdCA9IHokMS5vYmplY3Qoe1xuICBjcmVhdGVkOiB6JDEuYXJyYXkoZ3IpLFxuICBpbnZvaWNlczogeiQxLmFycmF5KHZyKVxufSksIEx0ID0geiQxLm9iamVjdCh7XG4gIHByZXZpZXc6IGN0LFxuICBwcmV2aWV3X3Bvc3RfdHJpYWw6IGcoY3QpLFxuICBjb3Vwb25zOiB6JDEuYXJyYXkoT3QpXG59KSwgbHQgPSB6JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEubGl0ZXJhbChcIm9wZW5cIiksXG4gIGxvY2FsZTogZyh6JDEuc3RyaW5nKCkpLFxuICB0b2tlbjogeiQxLnN0cmluZygpLFxuICBlbWFpbDogZyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoTnQpLFxuICBhbW91bnRfc3VidG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBhbW91bnRfdG90YWxfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBicmFuZDogaHIsXG4gIHN1YnNfcHJldmlldzogZyhMdCksXG4gIC8vIE51bGwgaW4gc2V0dXAgbW9kZVxuICBtZXRob2RzX2F2YWlsYWJsZTogeiQxLmFycmF5KGZlKVxufSksIFV0ID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcIm1vZGVcIiwgW1xuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEubGl0ZXJhbChcInNldHVwXCIpLFxuICAgIGN1cnJlbmN5OiB6JDEubnVsbGFibGUoeiQxLnVuZGVmaW5lZCgpKVxuICB9KS5leHRlbmQobHQuc2hhcGUpLFxuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEuZW51bShbXCJwYXltZW50XCIsIFwic3Vic2NyaXB0aW9uXCJdKSxcbiAgICBjdXJyZW5jeTogeiQxLnN0cmluZygpXG4gIH0pLmV4dGVuZChsdC5zaGFwZSlcbl0pLCBFciA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiY29tcGxldGVcIilcbn0pLCBDciA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiZXhwaXJlZFwiKVxufSk7XG56JDEudW5pb24oW1V0LCBFciwgQ3JdKTtcbnokMS5vYmplY3Qoe1xuICBsb2dvOiB6JDEuc3RyaW5nKCksXG4gIGljb246IHokMS5zdHJpbmcoKSxcbiAgcHJpbWFyeV9jb2xvcjogeiQxLnN0cmluZygpLFxuICBzZWNvbmRhcnlfY29sb3I6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc2VjdXJlX3Rva2VuOiB6JDEuc3RyaW5nKCksXG4gIHBtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwYXltZW50X2lucHV0OiB6JDEuYW55KCksXG4gIC8vIFNob3VsZCBmb2xsb3cgQW55UGF5bWVudElucHV0IGZyb20gQ0RFXG4gIGN1c3RvbWVyX2ZpcnN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9sYXN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBjdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl96aXBfY29kZTogeiQxLnN0cmluZygpLFxuICBjdXN0b21lcl9jb3VudHJ5OiB6JDEuc3RyaW5nKCksXG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShOdCksXG4gIHRvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGNhbmNlbF9hdF9lbmQ6IHokMS5ib29sZWFuKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBmZSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHVzZV9jb25maXJtZWRfcG1faWQ6IGcoeiQxLnN0cmluZygpKVxufSk7XG5jb25zdCBqdCA9IHokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZF9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICByZXR1cm5fdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgU3IgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLmFycmF5KFNyKTtcbmNvbnN0IFByID0geiQxLm9iamVjdCh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KSwga3IgPSB6JDEub2JqZWN0KHtcbiAgcHJpY2VfaWQ6IHokMS5zdHJpbmcoKSxcbiAgcXVhbnRpdHk6IHokMS5udW1iZXIoKS5pbnQoKVxufSksIEFyID0geiQxLm9iamVjdCh7XG4gIGxpbmVfaXRlbXM6IHokMS5hcnJheShrciksXG4gIHByb21vdGlvbl9jb2RlOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZGlzcGxheWVkX3RvdGFsX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KClcbn0pLCBJciA9IHokMS5vYmplY3Qoe1xuICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IGcoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X3Byb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBmZSxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aGVpcl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHVzZV9wYXlfZmlyc3RfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IEFyLm9wdGlvbmFsKClcbn0pLmV4dGVuZChQci5zaGFwZSkuZXh0ZW5kKElyLnNoYXBlKTtcbmNvbnN0IHh0ID0geiQxLm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeiQxLmFycmF5KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogZyh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBmaWVsZHM6IHpuLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IGZlXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIG5vbl9jZGVfZm9ybV9maWVsZHM6IENlLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogZmUsXG4gIGV4dHJhX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKVxuICAvLyBUaGlzIGlzIG9wdGlvbmFsIGluIENERSwgYnV0IG5vdCBpbiBPSlMgbW92aW5nIGZvcndhcmRcbn0pO1xuY29uc3QgUnIgPSB6JDEub2JqZWN0KHtcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiB6JDEuYXJyYXkoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpLFxuICBjY19wbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5yZWNvcmQoeiQxLmFueSgpKTtcbnokMS5vYmplY3Qoe1xuICBmaXJzdF9uYW1lOiBnKHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogZyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lMTogZyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lMjogZyh6JDEuc3RyaW5nKCkpLFxuICBsaW5lMzogZyh6JDEuc3RyaW5nKCkpLFxuICBjaXR5OiBnKHokMS5zdHJpbmcoKSksXG4gIHN0YXRlOiBnKHokMS5zdHJpbmcoKSksXG4gIGNvdW50cnk6IGcoeiQxLnN0cmluZygpKSxcbiAgemlwX2NvZGU6IGcoeiQxLnN0cmluZygpKSxcbiAgZW1haWw6IGcoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogZyh6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IGcoeiQxLnN0cmluZygpKSxcbiAgdXBkYXRlX3Byb2Nlc3Nvcl9jdXN0b21lcjogZyh6JDEuYm9vbGVhbigpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaWQ6IHokMS5zdHJpbmcoKSxcbiAgZW1haWw6IGcoeiQxLnN0cmluZygpKSxcbiAgZmlyc3RfbmFtZTogZyh6JDEuc3RyaW5nKCkpLFxuICBsYXN0X25hbWU6IGcoeiQxLnN0cmluZygpKSxcbiAgcGhvbmVfbnVtYmVyOiBnKHokMS5zdHJpbmcoKSksXG4gIGJpbGxpbmdfZW1haWw6IGcoeiQxLnN0cmluZygpKSxcbiAgYWRkcmVzczogZyh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBGciA9IHokMS5vYmplY3Qoe1xuICBlcnJvcl9jb2RlOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBmZSxcbiAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB6JDEucmVjb3JkKHokMS5hbnkoKSkub3B0aW9uYWwoKVxufSk7XG5jb25zdCBNciA9IHokMS5vYmplY3Qoe1xuICBuZXh0X2FjdGlvbl9tZXRhZGF0YTogZyh6JDEucmVjb3JkKHokMS5hbnkoKSkpXG59KSwgRHIgPSAodCkgPT4gdC5yZWR1Y2UoKG4sIGUpID0+IG4gKyBlLCAwKTtcbmZ1bmN0aW9uIE9yKHQsIG4pIHtcbiAgdmFyIGUgPSBPYmplY3Quc2V0UHJvdG90eXBlT2Y7XG4gIGUgPyBlKHQsIG4pIDogdC5fX3Byb3RvX18gPSBuO1xufVxuZnVuY3Rpb24gTnIodCwgbikge1xuICBuID09PSB2b2lkIDAgJiYgKG4gPSB0LmNvbnN0cnVjdG9yKTtcbiAgdmFyIGUgPSBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZTtcbiAgZSAmJiBlKHQsIG4pO1xufVxudmFyIFRyID0gLyogQF9fUFVSRV9fICovIGZ1bmN0aW9uKCkge1xuICB2YXIgdCA9IGZ1bmN0aW9uKGUsIHIpIHtcbiAgICByZXR1cm4gdCA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7XG4gICAgICBfX3Byb3RvX186IFtdXG4gICAgfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uKGEsIGkpIHtcbiAgICAgIGEuX19wcm90b19fID0gaTtcbiAgICB9IHx8IGZ1bmN0aW9uKGEsIGkpIHtcbiAgICAgIGZvciAodmFyIHMgaW4gaSlcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGksIHMpICYmIChhW3NdID0gaVtzXSk7XG4gICAgfSwgdChlLCByKTtcbiAgfTtcbiAgcmV0dXJuIGZ1bmN0aW9uKG4sIGUpIHtcbiAgICBpZiAodHlwZW9mIGUgIT0gXCJmdW5jdGlvblwiICYmIGUgIT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGUpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgICB0KG4sIGUpO1xuICAgIGZ1bmN0aW9uIHIoKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gbjtcbiAgICB9XG4gICAgbi5wcm90b3R5cGUgPSBlID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShlKSA6IChyLnByb3RvdHlwZSA9IGUucHJvdG90eXBlLCBuZXcgcigpKTtcbiAgfTtcbn0oKSwgTHIgPSBmdW5jdGlvbih0KSB7XG4gIFRyKG4sIHQpO1xuICBmdW5jdGlvbiBuKGUsIHIpIHtcbiAgICB2YXIgYSA9IHRoaXMuY29uc3RydWN0b3IsIGkgPSB0LmNhbGwodGhpcywgZSwgcikgfHwgdGhpcztcbiAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGksIFwibmFtZVwiLCB7XG4gICAgICB2YWx1ZTogYS5uYW1lLFxuICAgICAgZW51bWVyYWJsZTogITEsXG4gICAgICBjb25maWd1cmFibGU6ICEwXG4gICAgfSksIE9yKGksIGEucHJvdG90eXBlKSwgTnIoaSksIGk7XG4gIH1cbiAgcmV0dXJuIG47XG59KEVycm9yKTtcbmNsYXNzICR0IGV4dGVuZHMgTHIge1xuICBjb25zdHJ1Y3RvcihuKSB7XG4gICAgY29uc3QgZSA9IGAke24ubWVzc2FnZX1gO1xuICAgIHN1cGVyKGUpLCB0aGlzLnJlc3BvbnNlID0gbjtcbiAgfVxuICBnZXQgb3JpZ2luYWxFcnJvck1lc3NhZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMucmVzcG9uc2UubWVzc2FnZTtcbiAgfVxufVxuY29uc3QgTCA9IGFzeW5jICh0LCBuLCBlKSA9PiB7XG4gIGNvbnN0IHIgPSBhd2FpdCB0LnNlbmQobik7XG4gIGlmIChqcihyKSlcbiAgICB0aHJvdyBuZXcgJHQocik7XG4gIGlmICghVXIociwgZSkpIHtcbiAgICBjb25zdCBhID0gZS5zYWZlUGFyc2Uocik7XG4gICAgdGhyb3cgYS5zdWNjZXNzID8gbmV3IEVycm9yKFwiSW52YWxpZCBzdGF0ZVwiKSA6IChjb25zb2xlLmVycm9yKFwiT0pTIHF1ZXJ5QXBpIGdvdCBhIHNjaGVtYSBlcnJvci4gRXhwZWN0ZWQgc2NoZW1hOlwiLCBlLCBcIkFjdHVhbDpcIiwgciksIGEuZXJyb3IpO1xuICB9XG4gIHJldHVybiByO1xufSwgVXIgPSAodCwgbikgPT4gbi5zYWZlUGFyc2UodCkuc3VjY2VzcywganIgPSAodCkgPT4geXIuc2FmZVBhcnNlKHQpLnN1Y2Nlc3MsIHhyID0gYXN5bmMgKHQsIG4pID0+IGF3YWl0IEwodCwgeyB0eXBlOiBcImdldF9jaGVja291dF9wcmV2aWV3XCIsIHBheWxvYWQ6IG4gfSwgTHQpLCBNID0gYXN5bmMgKHQpID0+IGF3YWl0IEwodCwgeyB0eXBlOiBcImdldF9wcmVmaWxsXCIsIHBheWxvYWQ6IHt9IH0sIFV0KSwgaGUgPSBhc3luYyAodCwgbikgPT4gYXdhaXQgTCh0LCB7IHR5cGU6IFwidjJfc3RhcnRfcGF5bWVudF9mbG93XCIsIHBheWxvYWQ6IG4gfSwgeHQpLCAkciA9IGFzeW5jICh0LCBuKSA9PiBhd2FpdCBMKHQsIHsgdHlwZTogXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX2NjXCIsIHBheWxvYWQ6IG4gfSwgUnIpLCB6ciA9IGFzeW5jICh0LCBuKSA9PiBhd2FpdCBMKHQsIHsgdHlwZTogXCJzdGFydF9wYXltZW50X2Zsb3dfZm9yX3ByXCIsIHBheWxvYWQ6IG4gfSwgeHQpLCBHID0gYXN5bmMgKHQsIG4pID0+IGF3YWl0IEwodCwgeyB0eXBlOiBcImNvbmZpcm1fcGF5bWVudF9mbG93XCIsIHBheWxvYWQ6IG4gfSwgZXIpLCBHciA9IGFzeW5jICh0LCBuKSA9PiBhd2FpdCBMKHQsIHsgdHlwZTogXCJmaW5hbGl6ZV9zZXR1cF9wYXltZW50X21ldGhvZFwiLCBwYXlsb2FkOiBuIH0sIGp0KSwgVnIgPSBhc3luYyAodCwgbikgPT4gYXdhaXQgTChcbiAgdCxcbiAgeyB0eXBlOiBcImNoZWNrX2lmX3BvcHVwX3dpbmRvd192ZXJpZmllZFwiLCBwYXlsb2FkOiBuIH0sXG4gIFhuXG4pLCBxciA9IGFzeW5jICh0LCBuLCBlKSA9PiB7XG4gIGNvbnN0IHIgPSBhd2FpdCB4cih0LCB7XG4gICAgc2VjdXJlX3Rva2VuOiBuLFxuICAgIHByb21vdGlvbl9jb2RlOiBlXG4gIH0pLCBhID0gbmV3IFNldChyLnByZXZpZXcuaW52b2ljZXMubWFwKChjKSA9PiBjLmN1cnJlbmN5KSk7XG4gIGlmIChhLnNpemUgIT09IDEpXG4gICAgdGhyb3cgbmV3IEVycm9yKGBFeHBlY3RlZCBleGFjdGx5IG9uZSBjdXJyZW5jeSwgZ290ICR7YS5zaXplfWApO1xuICBjb25zdCBpID0gYS52YWx1ZXMoKS5uZXh0KCkudmFsdWUgPz8gXCJ1c2RcIiwgcyA9IERyKHIucHJldmlldy5pbnZvaWNlcy5tYXAoKGMpID0+IGMucmVtYWluaW5nX2Ftb3VudF9hdG9tKSk7XG4gIHJldHVybiB7XG4gICAgY3VycmVuY3k6IGksXG4gICAgYW1vdW50QXRvbTogc1xuICB9O1xufSwgX2UgPSBhc3luYyAodCwgbiwgZSwgcikgPT4ge1xuICBpZiAoZSlcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiAwLCBjdXJyZW5jeTogXCJ1c2RcIiB9O1xuICB7XG4gICAgciA9IHIgfHwgdm9pZCAwO1xuICAgIGNvbnN0IGEgPSBhd2FpdCBxcih0LCBuLCByKTtcbiAgICByZXR1cm4geyBhbW91bnRBdG9tOiBhLmFtb3VudEF0b20sIGN1cnJlbmN5OiBhLmN1cnJlbmN5IH07XG4gIH1cbn0sIFlyID0gYXN5bmMgKHQsIG4pID0+IHtcbiAgaWYgKHQuc2l6ZSA9PT0gMClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBDREUgY29ubmVjdGlvbnMgZm91bmRcIik7XG4gIHJldHVybiBhd2FpdCBQcm9taXNlLmFsbChcbiAgICBBcnJheS5mcm9tKHQudmFsdWVzKCkpLm1hcChcbiAgICAgIChyKSA9PiBMKHIsIHsgdHlwZTogXCJ0b2tlbml6ZV9jYXJkXCIsIHBheWxvYWQ6IG4gfSwgWm4pXG4gICAgKVxuICApO1xufSwgdXQgPSBhc3luYyAodCwgbikgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCBMKHQsIHsgdHlwZTogXCJjaGVja291dF9jYXJkX2VsZW1lbnRzXCIsIHBheWxvYWQ6IG4gfSwgdHQpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgY29uc29sZS5lcnJvcihcIltjZGUtY2xpZW50XSBFcnJvciBkdXJpbmcgY2hlY2tvdXRDYXJkRWxlbWVudHM6XCIsIGUsIEpTT04uc3RyaW5naWZ5KGUpKSwgZTtcbiAgfVxufSwgS3IgPSBhc3luYyAodCwgbikgPT4gYXdhaXQgTCh0LCB7IHR5cGU6IFwic2V0dXBfcGF5bWVudF9tZXRob2RcIiwgcGF5bG9hZDogbiB9LCBqdCksIHJ0ID0gYXN5bmMgKHQsIG4pID0+IGF3YWl0IEwodCwgeyB0eXBlOiBcImNoZWNrb3V0XCIsIHBheWxvYWQ6IG4gfSwgdHQpLCB6dCA9IDFlMywgV3IgPSBhc3luYyAodCwgbikgPT4ge1xuICBjb25zb2xlLmxvZyhuKTtcbiAgY29uc3QgciA9IGF3YWl0IGNvbm5lY3RUb0NoaWxkKHtcbiAgICBpZnJhbWU6IHQsXG4gICAgZGVidWc6ICEwLFxuICAgIHRpbWVvdXQ6IHp0LFxuICAgIGNoaWxkT3JpZ2luOiBcIipcIlxuICAgIC8vIFRPRE86IHVzZSB3aXRoIHByb3BlciBjaGlsZE9yaWdpblxuICB9KS5wcm9taXNlLCBhID0gYXdhaXQgTChyLCB7IHR5cGU6IFwicGluZy0zZHMtc3RhdHVzXCIgfSwgQm4pO1xuICByZXR1cm4gY29uc29sZS5sb2coXCLwn5+iIENERSBjb25uZWN0aW9uIHN1Y2Nlc3NmdWwhIFN0b3BwaW5nIHBvbGxpbmcuLi4gUmVzdWx0OlwiLCBhKSwgYTtcbn0sIEd0ID0gYXN5bmMgKHQsIG4pID0+IGF3YWl0IEwodCwgeyB0eXBlOiBcInByZXBhcmVfcGF5bWVudF9mbG93XCIsIHBheWxvYWQ6IG4gfSwgTXIpLCBWdCA9IGFzeW5jICh0LCBuKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIChhd2FpdCBMKFxuICAgICAgdCxcbiAgICAgIHsgdHlwZTogXCJnZXRfc3RhbmRhcmRpemVkX2Vycm9yX2NvZGVcIiwgcGF5bG9hZDogeyBtZXNzYWdlOiBuIH0gfSxcbiAgICAgIEZyXG4gICAgKSkuZXJyb3JfY29kZTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBjb25zb2xlLmVycm9yKFwiW2NkZS1jbGllbnRdIEVycm9yIGR1cmluZyBnZXRTdGFuZGFyZGl6ZWRFcnJvckNvZGU6XCIsIEgoZSkpLCBcIlBBWU1FTlRfRkFJTEVEX0dFTkVSSUNcIjtcbiAgfVxufTtcbmZ1bmN0aW9uIFVlKHQpIHtcbiAgdGhyb3cgbmV3IEVycm9yKGBVbmhhbmRsZWQgY2FzZTogJHt0fWApO1xufVxuY29uc3QgZWUgPSAodCkgPT4gYXN5bmMgKG4pID0+IHtcbiAgdmFyIGUsIHI7XG4gIHRyeSB7XG4gICAgKHIgPSAoZSA9IG4uZm9ybUNhbGxiYWNrcy5nZXQpLm9uQ2hlY2tvdXRTdGFydGVkKSA9PSBudWxsIHx8IHIuY2FsbChlKTtcbiAgICBjb25zdCBhID0gYXdhaXQgdChuKTtcbiAgICBpZiAoYS5tb2RlID09PSBcInNldHVwXCIpXG4gICAgICBuLmZvcm1DYWxsYmFja3MuZ2V0Lm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyhhLnJlc3VsdC5wYXltZW50X21ldGhvZF9pZCk7XG4gICAgZWxzZSBpZiAoYS5tb2RlID09PSBcImNoZWNrb3V0XCIpXG4gICAgICBuLmZvcm1DYWxsYmFja3MuZ2V0Lm9uQ2hlY2tvdXRTdWNjZXNzKFxuICAgICAgICBhLnJlc3VsdC5pbnZvaWNlX3VybHMsXG4gICAgICAgIGEucmVzdWx0LnN1YnNjcmlwdGlvbl9pZHMsXG4gICAgICAgIGEucmVzdWx0LmN1c3RvbWVyX2lkXG4gICAgICApO1xuICAgIGVsc2VcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5oYW5kbGVkIG1vZGU6ICR7YX1gKTtcbiAgfSBjYXRjaCAoYSkge1xuICAgIGNvbnN0IGkgPSBIKGEpLCBzID0gYXdhaXQgVnQobi5jb250ZXh0LmFueUNkZUNvbm5lY3Rpb24sIGkpO1xuICAgIG4uZm9ybUNhbGxiYWNrcy5nZXQub25DaGVja291dEVycm9yKGksIHMpO1xuICB9XG59LCBzZSA9ICh0KSA9PiBhc3luYyAobikgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBhd2FpdCB0KG4pO1xuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc3QgeyBlcnJfXzogciB9ID0gUChcImluaXQtZXJyb3ItY2F0Y2hlclwiKSwgYSA9IEgoZSksIGkgPSBhd2FpdCBWdChuLmNvbnRleHQuYW55Q2RlQ29ubmVjdGlvbiwgYSk7XG4gICAgcmV0dXJuIHIoaSwgYSwgZSksIHsgaXNBdmFpbGFibGU6ICExLCByZWFzb246IGEsIGVycm9yQ29kZTogaSB9O1xuICB9XG59LCBQID0gKHQpID0+IHtcbiAgY29uc3QgbiA9ICguLi5yKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUubG9nKGAke0FlLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7QWUuYm9sZC5ncmF5KGAke3R9YCl9XHRgLCAuLi5yKTtcbiAgfSwgZSA9ICguLi5yKSA9PiB7XG4gICAgd2luZG93LmNvbnNvbGUud2FybihgJHtBZS5yZWQuYm9sZChcIm9qcy9cIil9JHtBZS5ib2xkLmdyYXkoYCR7dH1gKX1cdGAsIC4uLnIpO1xuICB9O1xuICByZXR1cm4ge1xuICAgIGxvZzogbixcbiAgICBlcnI6IGUsXG4gICAgbG9nX186IG4sXG4gICAgZXJyX186IGVcbiAgfTtcbn0sIHsgbG9nX186IGdpLCBlcnJfXzogSnIgfSA9IFAoXCJjb21tb25cIiksIFNlID0gKHQpID0+IHtcbiAgaWYgKHQucGF5bWVudF9tZXRob2RzLmxlbmd0aCAhPT0gMSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIHBheW1lbnQgbWV0aG9kLCBnb3QgJHt0LnBheW1lbnRfbWV0aG9kcy5sZW5ndGh9YCk7XG4gIHJldHVybiB7IHBheW1lbnRfbWV0aG9kX2lkOiB0LnBheW1lbnRfbWV0aG9kc1swXS5pZCB9O1xufSwgWSA9ICh0LCBuKSA9PiB7XG4gIGNvbnN0IGUgPSB0LmZpbmQoKHIpID0+IG4uc2FmZVBhcnNlKHIpLnN1Y2Nlc3MpO1xuICBpZiAoIWUpXG4gICAgdGhyb3cgSnIoXCJObyBDUE1zIGZvdW5kIGZvciBtb2RlbC4gQWxsIG1vZGVsczpcIiwgdCksIG5ldyBFcnJvcihcIk5vIENQTXMgZm91bmQgZm9yIG1vZGVsXCIpO1xuICByZXR1cm4gbi5wYXJzZShlKTtcbn0sIEhyID0gKHQpID0+ICh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogdC5lbWFpbCxcbiAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICB6aXBfY29kZTogdC56aXBDb2RlLFxuICAgIGNvdW50cnk6IHQuY291bnRyeVxuICB9LFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogdC5maXJzdE5hbWUsXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHQubGFzdE5hbWVcbn0pLCBqZSA9IGFzeW5jICh0KSA9PiB7XG4gIGNvbnN0IHsgbG9nX186IG4gfSA9IFAodC5sb2dQcmVmaXgpLCBlID0gYXdhaXQgTSh0LmFueUNkZUNvbm5lY3Rpb24pLCByID0gU2UodC5jb25maXJtUmVzdWx0KTtcbiAgaWYgKGUubW9kZSA9PT0gXCJzZXR1cFwiKVxuICAgIHJldHVybiBuKFwiU2V0dGluZyB1cCBwYXltZW50IG1ldGhvZC4uLlwiKSwgeyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogYXdhaXQgR3IodC5hbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IGUudG9rZW4sXG4gICAgICBwbV9pZDogci5wYXltZW50X21ldGhvZF9pZFxuICAgIH0pIH07XG4gIHtcbiAgICBuKFwiRG9pbmcgY2hlY2tvdXQuLi5cIik7XG4gICAgY29uc3QgYSA9IHtcbiAgICAgIHNlY3VyZV90b2tlbjogZS50b2tlbixcbiAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgcHJvdmlkZXJfdHlwZTogdC5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICAgIH0sXG4gICAgICBjdXN0b21lcl9lbWFpbDogdC5yZXF1aXJlZEZvcm1GaWVsZHNbcC5FTUFJTF0sXG4gICAgICBjdXN0b21lcl96aXBfY29kZTogdC5yZXF1aXJlZEZvcm1GaWVsZHNbcC5aSVBfQ09ERV0sXG4gICAgICBjdXN0b21lcl9jb3VudHJ5OiB0LnJlcXVpcmVkRm9ybUZpZWxkc1twLkNPVU5UUlldLFxuICAgICAgcHJvbW90aW9uX2NvZGU6IHQucmVxdWlyZWRGb3JtRmllbGRzW3AuUFJPTU9USU9OX0NPREVdLFxuICAgICAgbGluZV9pdGVtczogZS5saW5lX2l0ZW1zLFxuICAgICAgdG90YWxfYW1vdW50X2F0b206IGUuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICBjYW5jZWxfYXRfZW5kOiAhMSxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiB0LmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHVzZV9jb25maXJtZWRfcG1faWQ6IHIucGF5bWVudF9tZXRob2RfaWRcbiAgICB9O1xuICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCBydCh0LmFueUNkZUNvbm5lY3Rpb24sIGEpIH07XG4gIH1cbn0sIHsgbG9nX186IHF0LCBlcnJfXzogWXQgfSA9IFAoXCJjb21tb24tY2NcIiksIHRlID0gKHQsIG4sIGUpID0+IHtcbiAgaWYgKGUpIHtcbiAgICBxdChgUmVjZWl2ZWQgZGVmYXVsdCBmaWVsZCB2YWx1ZXM6ICR7SlNPTi5zdHJpbmdpZnkoZSl9YCk7XG4gICAgZm9yIChjb25zdCBbYSwgaV0gb2YgT2JqZWN0LmVudHJpZXMoZSkpXG4gICAgICB0W2FdIHx8ICh0W2FdID0gaSk7XG4gIH1cbiAgY29uc3QgciA9IENlLnNhZmVQYXJzZSh0KTtcbiAgaWYgKCFyLnN1Y2Nlc3MpIHtcbiAgICBjb25zdCBhID0gci5lcnJvci5mb3JtYXQoKSwgaSA9IHRyKGEpO1xuICAgIGZvciAoY29uc3QgW3MsIGNdIG9mIE9iamVjdC5lbnRyaWVzKGkpKVxuICAgICAgbihzLCBjLCBzKTtcbiAgICB0aHJvdyBZdChcIkdvdCB2YWxpZGF0aW9uIGVycm9ycyBpbiBub24tQ0RFIGZvcm0gZmllbGRzXCIsIGkpLCBuZXcgRXJyb3IoXCJHb3QgdmFsaWRhdGlvbiBlcnJvcnMgaW4gbm9uLUNERSBmb3JtIGZpZWxkc1wiKTtcbiAgfVxuICByZXR1cm4gci5kYXRhO1xufSwgWnIgPSAodCwgbikgPT4ge1xuICBmb3IgKGNvbnN0IGUgb2YgdClcbiAgICBpZiAoZS5zdWNjZXNzID09PSAhMSlcbiAgICAgIHRocm93IGUuZXJyb3JzLmZvckVhY2goKHIpID0+IHtcbiAgICAgICAgY29uc3QgYSA9IE10LnNhZmVQYXJzZShyLmVsZW1lbnRUeXBlKTtcbiAgICAgICAgaWYgKCFhLnN1Y2Nlc3MpXG4gICAgICAgICAgWXQoYFVua25vd24gZmllbGQgbmFtZSBpbiBvblZhbGlkYXRpb25FcnJvcjogJHtyLmVsZW1lbnRUeXBlfS4gRXJyb3Igb2JqZWN0OmAsIHIpO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICBjb25zdCBpID0gYS5kYXRhO1xuICAgICAgICAgIG4oaSwgci5lcnJvcnMpO1xuICAgICAgICB9XG4gICAgICB9KSwgcXQoYEVycm9yIHRva2VuaXppbmcgY2FyZDogZ290IHZhbGlkYXRpb24gZXJyb3JzOiAke0pTT04uc3RyaW5naWZ5KGUuZXJyb3JzKX1gKSwgbmV3IEVycm9yKFwiR290IHZhbGlkYXRpb24gZXJyb3JzIHdoaWxlIHRva2VuaXppbmcgY2FyZFwiKTtcbn0sIGR0ID0gXCJvanMtc3RyaXBlLWxpbmstYnRuXCIsIHsgbG9nX186IFIsIGVycl9fOiBCciB9ID0gUChcInN0cmlwZS1saW5rXCIpLCBRciA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJzdHJpcGVfbGlua1wiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pLCBYciA9IHokMS5hcnJheShcbiAgeiQxLm9iamVjdCh7XG4gICAgb3VyX2V4aXN0aW5nX3BtX2lkOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpLCBlbyA9IHNlKFxuICBhc3luYyAoeyBjb250ZXh0OiB0LCBmb3JtQ2FsbGJhY2tzOiBuIH0pID0+IHtcbiAgICBjb25zdCBlID0gdC5jdXN0b21Jbml0UGFyYW1zLnN0cmlwZUxpbms7XG4gICAgUihcIkNoZWNraW5nIGlmIHRoZXJlIGFyZSBhbnkgQ1BNcyBmb3IgU3RyaXBlIExpbmsuLi5cIik7XG4gICAgY29uc3QgciA9IFkodC5jaGVja291dFBheW1lbnRNZXRob2RzLCBRcik7XG4gICAgUihcIlN0YXJ0aW5nIHN0cmlwZSBsaW5rIGZsb3cuLi5cIik7XG4gICAgY29uc3QgYSA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgaSA9IGF3YWl0IE0oYSksIHMgPSBpLm1vZGUgPT09IFwic2V0dXBcIjtcbiAgICBSKFwiQ3JlYXRpbmcgc3RyaXBlIGVsZW1lbnRzLi4uXCIpO1xuICAgIGNvbnN0IGMgPSBhd2FpdCBfZShhLCBpLnRva2VuLCBzLCB2b2lkIDApLCB7IGVsZW1lbnRzOiBsLCBzdHJpcGU6IHUgfSA9IGF3YWl0IGFyKHIubWV0YWRhdGEuc3RyaXBlX3BrLCB7XG4gICAgICBtb2RlOiBcInNldHVwXCIsXG4gICAgICBjdXJyZW5jeTogYy5jdXJyZW5jeSxcbiAgICAgIHNldHVwX2Z1dHVyZV91c2FnZTogXCJvZmZfc2Vzc2lvblwiLFxuICAgICAgcGF5bWVudE1ldGhvZENyZWF0aW9uOiBcIm1hbnVhbFwiXG4gICAgfSk7XG4gICAgUihcIkNyZWF0aW5nIGV4cHJlc3MgY2hlY2tvdXQuLi5cIik7XG4gICAgY29uc3QgZCA9IGwuY3JlYXRlKFwiZXhwcmVzc0NoZWNrb3V0XCIsIHtcbiAgICAgIGJ1dHRvbkhlaWdodDogZSA9PSBudWxsID8gdm9pZCAwIDogZS5idXR0b25IZWlnaHQsXG4gICAgICBwYXltZW50TWV0aG9kczoge1xuICAgICAgICBhbWF6b25QYXk6IFwibmV2ZXJcIixcbiAgICAgICAgYXBwbGVQYXk6IFwibmV2ZXJcIixcbiAgICAgICAgZ29vZ2xlUGF5OiBcIm5ldmVyXCIsXG4gICAgICAgIHBheXBhbDogXCJuZXZlclwiXG4gICAgICB9XG4gICAgfSksIGYgPSAoKSA9PiB7XG4gICAgICBkLm1vdW50KGAjJHtkdH1gKTtcbiAgICB9LCBoID0gKCkgPT4ge1xuICAgICAgZC51bm1vdW50KCk7XG4gICAgfTtcbiAgICByZXR1cm4gZSAhPSBudWxsICYmIGUuZG9Ob3RNb3VudE9uSW5pdCA/IFIoXCJOT1QgbW91bnRpbmcgc3RyaXBlIGxpbmsgYnV0dG9uIChkb05vdE1vdW50T25Jbml0IGlzIHRydWUpXCIpIDogKFIoXCJNb3VudGluZyBzdHJpcGUgbGluayBidXR0b24uLi5cIiksIGYoKSksIGQub24oXCJjbGlja1wiLCBhc3luYyAoeSkgPT4ge1xuICAgICAgaWYgKFIoXCJTdHJpcGUgTGluayBidXR0b24gY2xpY2tlZFwiKSwgZSAhPSBudWxsICYmIGUub3ZlcnJpZGVMaW5rU3VibWl0ICYmICFhd2FpdCBlLm92ZXJyaWRlTGlua1N1Ym1pdCgpKSB7XG4gICAgICAgIFIoXCJTdHJpcGUgTGluayBzdWJtaXQgYWJvcnRlZCBieSBvdmVycmlkZUxpbmtTdWJtaXRcIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHkucmVzb2x2ZSgpO1xuICAgIH0pLCBkLm9uKFwiY29uZmlybVwiLCBhc3luYyAoeSkgPT4ge1xuICAgICAgUihcIlN0cmlwZSBMaW5rIHdpbmRvdyBjb25maXJtZWRcIiwgeSk7XG4gICAgICBjb25zdCBtID0gYXdhaXQgdS5jcmVhdGVQYXltZW50TWV0aG9kKHtcbiAgICAgICAgZWxlbWVudHM6IGwsXG4gICAgICAgIHBhcmFtczoge1xuICAgICAgICAgIGJpbGxpbmdfZGV0YWlsczogeS5iaWxsaW5nRGV0YWlsc1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIG0uZXJyb3IgPyAoQnIoXCJlcnJvclwiLCBtLmVycm9yKSwgbi5nZXQub25DaGVja291dEVycm9yKG0uZXJyb3IubWVzc2FnZSA/PyBcIlN0cmlwZSBMaW5rIHVua25vd24gZXJyb3JcIikpIDogKFIoXCJwYXltZW50TWV0aG9kXCIsIG0ucGF5bWVudE1ldGhvZCksIEEuc3RyaXBlTGluay5ydW4oe1xuICAgICAgICBjb250ZXh0OiB0LFxuICAgICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHIsXG4gICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IEoodC5mb3JtRGl2KSxcbiAgICAgICAgZm9ybUNhbGxiYWNrczogbixcbiAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHN0cmlwZVBNOiBtLnBheW1lbnRNZXRob2QgfSxcbiAgICAgICAgaW5pdFJlc3VsdDogeyBpc0F2YWlsYWJsZTogITAgfVxuICAgICAgfSkpO1xuICAgIH0pLCB7XG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBjb250cm9sbGVyOiB7XG4gICAgICAgIG1vdW50QnV0dG9uOiBmLFxuICAgICAgICBkaXNtb3VudEJ1dHRvbjogaCxcbiAgICAgICAgd2FpdEZvckJ1dHRvblRvTW91bnQ6IGFzeW5jICgpID0+IGF3YWl0IHJvKGR0KVxuICAgICAgfVxuICAgIH07XG4gIH1cbiksIHRvID0gZWUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICBmb3JtQ2FsbGJhY2tzOiByLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgUihcIlJ1bm5pbmcgU3RyaXBlIExpbmsgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBpID0gdC5hbnlDZGVDb25uZWN0aW9uO1xuICAgIFIoXCJNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uXCIpO1xuICAgIGNvbnN0IHMgPSBubyhlLCBhLnN0cmlwZVBNKSwgYyA9IHRlKHMsIHIuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBSKFwiU3RhcnRpbmcgcGF5bWVudCBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGwgPSBhd2FpdCBoZShpLCB7XG4gICAgICBwYXltZW50X3Byb3ZpZGVyOiBuLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IG4sXG4gICAgICB0aGVpcl9leGlzdGluZ19wbV9pZDogYS5zdHJpcGVQTS5pZCxcbiAgICAgIG5ld19jdXN0b21lcl9lbWFpbDogY1twLkVNQUlMXSxcbiAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBjW3AuRklSU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBjW3AuTEFTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9hZGRyZXNzOiB7XG4gICAgICAgIHppcF9jb2RlOiBjW3AuWklQX0NPREVdLFxuICAgICAgICBjb3VudHJ5OiBjW3AuQ09VTlRSWV1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBSKFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIGwpO1xuICAgIGNvbnN0IGQgPSBYci5wYXJzZShsLnJlcXVpcmVkX3VzZXJfYWN0aW9ucylbMF0ub3VyX2V4aXN0aW5nX3BtX2lkLCBmID0gYXdhaXQgTShpKTtcbiAgICBpZiAoZi5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIFIoXCJEb2luZyBwYXltZW50IHNldHVwLi4uXCIpO1xuICAgICAgY29uc3QgaCA9IGF3YWl0IEcoaSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGYudG9rZW4sXG4gICAgICAgIGV4aXN0aW5nX2NjX3BtX2lkOiBkXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBTZShoKSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBSKFwiRG9pbmcgY2hlY2tvdXQuLi5cIik7XG4gICAgICBjb25zdCBoID0ge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGYudG9rZW4sXG4gICAgICAgIHBheW1lbnRfaW5wdXQ6IHtcbiAgICAgICAgICBwcm92aWRlcl90eXBlOiBuLnByb3ZpZGVyXG4gICAgICAgIH0sXG4gICAgICAgIGN1c3RvbWVyX2VtYWlsOiBjW3AuRU1BSUxdLFxuICAgICAgICBjdXN0b21lcl96aXBfY29kZTogY1twLlpJUF9DT0RFXSxcbiAgICAgICAgY3VzdG9tZXJfY291bnRyeTogY1twLkNPVU5UUlldLFxuICAgICAgICBwcm9tb3Rpb25fY29kZTogY1twLlBST01PVElPTl9DT0RFXSxcbiAgICAgICAgbGluZV9pdGVtczogZi5saW5lX2l0ZW1zLFxuICAgICAgICB0b3RhbF9hbW91bnRfYXRvbTogZi5hbW91bnRfdG90YWxfYXRvbSxcbiAgICAgICAgY2FuY2VsX2F0X2VuZDogITEsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBuXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHsgbW9kZTogXCJjaGVja291dFwiLCByZXN1bHQ6IGF3YWl0IHJ0KGksIGgpIH07XG4gICAgfVxuICB9XG4pLCBubyA9ICh0LCBuKSA9PiB7XG4gIHZhciBzLCBjLCBsLCB1LCBkO1xuICBjb25zdCBlID0geyAuLi50IH0sIFtyLCAuLi5hXSA9ICgoYyA9IChzID0gbi5iaWxsaW5nX2RldGFpbHMubmFtZSkgPT0gbnVsbCA/IHZvaWQgMCA6IHMudHJpbSgpKSA9PSBudWxsID8gdm9pZCAwIDogYy5zcGxpdCgvXFxzKy8pKSA/PyBbXSwgaSA9IGEuam9pbihcIiBcIikgfHwgdm9pZCAwO1xuICByZXR1cm4gZVtwLkZJUlNUX05BTUVdID0gZVtwLkZJUlNUX05BTUVdIHx8IHIgfHwgXCJfT1BfVU5LTk9XTlwiLCBlW3AuTEFTVF9OQU1FXSA9IGVbcC5MQVNUX05BTUVdIHx8IGkgfHwgXCJfT1BfVU5LTk9XTlwiLCBlW3AuRU1BSUxdID0gZVtwLkVNQUlMXSB8fCAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICAoKGwgPSBuLmxpbmspID09IG51bGwgPyB2b2lkIDAgOiBsLmVtYWlsKSB8fCBuLmJpbGxpbmdfZGV0YWlscy5lbWFpbCB8fCBcIm9wX3VuZmlsbGVkQGdldG9wZW5wYXkuY29tXCIsIGVbcC5aSVBfQ09ERV0gPSBlW3AuWklQX0NPREVdIHx8ICgodSA9IG4uYmlsbGluZ19kZXRhaWxzLmFkZHJlc3MpID09IG51bGwgPyB2b2lkIDAgOiB1LnBvc3RhbF9jb2RlKSB8fCBcIjAwMDAwXCIsIGVbcC5DT1VOVFJZXSA9IGVbcC5DT1VOVFJZXSB8fCAoKGQgPSBuLmJpbGxpbmdfZGV0YWlscy5hZGRyZXNzKSA9PSBudWxsID8gdm9pZCAwIDogZC5jb3VudHJ5KSB8fCBcIlVTXCIsIFIoXCJGaW5hbCBmb3JtIGlucHV0czpcIiwgZSksIGU7XG59LCBybyA9ICh0KSA9PiBuZXcgUHJvbWlzZSgobikgPT4ge1xuICBjb25zdCBlID0gKCkgPT4ge1xuICAgIGNvbnN0IHIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCh0KTtcbiAgICByID8gbihyKSA6IHJlcXVlc3RBbmltYXRpb25GcmFtZShlKTtcbiAgfTtcbiAgZSgpO1xufSksIG9vID0gXCJAa2V5ZnJhbWVzIGZhZGVJbnswJXtvcGFjaXR5OjA7dHJhbnNmb3JtOnNjYWxlKC45KX10b3tvcGFjaXR5OjE7dHJhbnNmb3JtOnNjYWxlKDEpfX0ub3ZlcmxheXtwb3NpdGlvbjpmaXhlZDt0b3A6MDtsZWZ0OjA7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTt6LWluZGV4OjIxNDc0ODM2NDghaW1wb3J0YW50O2Rpc3BsYXk6ZmxleDtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2FsaWduLWl0ZW1zOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiMwMDAwMDA4MH0uY29udGFpbmVye21heC13aWR0aDo1MDBweDttYXgtaGVpZ2h0OjYwMHB4O3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7YmFja2dyb3VuZC1jb2xvcjojZmZmO3Bvc2l0aW9uOnJlbGF0aXZlO2FuaW1hdGlvbjpmYWRlSW4gLjNzIGVhc2Utb3V0fS5mcmFtZSwjYWR5ZW4tY29udGFpbmVyLCNhZHllbi1jb250YWluZXI+KnttYXgtd2lkdGg6NTAwcHg7bWF4LWhlaWdodDo2MDBweDt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JvcmRlcjpub25lfS5jYW5jZWwtYnV0dG9ue3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQ6dHJhbnNwYXJlbnQ7Ym9yZGVyOm5vbmU7Zm9udC1zaXplOjFyZW07Y29sb3I6I2ZmZjtjdXJzb3I6cG9pbnRlcjt0b3A6LTEuNXJlbTtwYWRkaW5nOjA7cmlnaHQ6MH1cIiwgS3QgPSAodCkgPT4ge1xuICBjb25zdCBuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcInRlbXBsYXRlXCIpO1xuICBuLmlubmVySFRNTCA9IGBcbiAgICA8c3R5bGU+XG4gICAgICAke29vfVxuICAgIDwvc3R5bGU+XG4gICAgPGRpdiBjbGFzcz1cIm92ZXJsYXlcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgICAgPGJ1dHRvbiBjbGFzcz1cImNhbmNlbC1idXR0b25cIj5DYW5jZWw8L2J1dHRvbj5cbiAgICAgICAgPGlmcmFtZSBzcmM9XCIke3R9XCIgY2xhc3M9XCJmcmFtZVwiIGlkPVwidGhyZWUtZHMtaWZyYW1lXCIgdGl0bGU9XCIzRCBTZWN1cmUgdmVyaWZpY2F0aW9uXCIgYWxsb3c9XCJwYXltZW50XCI+PC9pZnJhbWU+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgYDtcbiAgY29uc3QgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIiksIHIgPSBlLmF0dGFjaFNoYWRvdyh7IG1vZGU6IFwib3BlblwiIH0pO1xuICByLmFwcGVuZENoaWxkKG4uY29udGVudC5jbG9uZU5vZGUoITApKTtcbiAgY29uc3QgYSA9IHIucXVlcnlTZWxlY3RvcihcIiN0aHJlZS1kcy1pZnJhbWVcIiksIGkgPSByLnF1ZXJ5U2VsZWN0b3IoXCIuY2FuY2VsLWJ1dHRvblwiKTtcbiAgcmV0dXJuIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZSksIHsgaG9zdDogZSwgaWZyYW1lOiBhLCBjYW5jZWxCdXR0b246IGkgfTtcbn07XG5mdW5jdGlvbiBhbyh0LCBuLCBlKSB7XG4gIGNvbnN0IHIgPSBhc3luYyAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGkgPSBhd2FpdCBXcih0LCBlKTtcbiAgICAgIGkgJiYgKGNsZWFySW50ZXJ2YWwoYSksIG4oaSkpO1xuICAgIH0gY2F0Y2gge1xuICAgIH1cbiAgfTtcbiAgcigpO1xuICBjb25zdCBhID0gc2V0SW50ZXJ2YWwociwgenQpO1xuICByZXR1cm4gYTtcbn1cbmZ1bmN0aW9uIGlvKHtcbiAgZWxlbWVudHM6IHQsXG4gIHBvbGxpbmdJbnRlcnZhbDogbixcbiAgcmVzb2x2ZTogZVxufSkge1xuICBjb25zdCByID0gKCkgPT4ge1xuICAgIGNsZWFySW50ZXJ2YWwobiksIHQuaG9zdC5yZW1vdmUoKSwgZSh7IHN0YXR1czogSS5DQU5DRUxMRUQgfSk7XG4gIH07XG4gIHJldHVybiB0LmNhbmNlbEJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgciksICgpID0+IHtcbiAgICB0LmNhbmNlbEJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKFwiY2xpY2tcIiwgcik7XG4gIH07XG59XG5hc3luYyBmdW5jdGlvbiB4ZSh0KSB7XG4gIGNvbnN0IHsgdXJsOiBuLCBiYXNlVXJsOiBlIH0gPSB0LCByID0gS3Qobik7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgoYSkgPT4ge1xuICAgIGNvbnN0IGkgPSAobCkgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHIuaG9zdC5yZW1vdmUoKTtcbiAgICAgIH0sIDFlMyksIGEobCksIGMgPT0gbnVsbCB8fCBjKCk7XG4gICAgfSwgcyA9IGFvKHIuaWZyYW1lLCBpLCBuZXcgVVJMKGUpLm9yaWdpbiksIGMgPSBpbyh7XG4gICAgICBlbGVtZW50czogcixcbiAgICAgIHBvbGxpbmdJbnRlcnZhbDogcyxcbiAgICAgIHJlc29sdmU6IGFcbiAgICB9KTtcbiAgfSk7XG59XG5jb25zdCBXdCA9IGFzeW5jICh0KSA9PiB7XG4gIGNvbnN0IG4gPSBhd2FpdCB4ZSh0KTtcbiAgaWYgKG4uc3RhdHVzID09PSBJLkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKG4uc3RhdHVzID09PSBJLkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIHJldHVybiBuLnN0YXR1cyAhPT0gSS5TVUNDRVNTICYmIFVlKG4uc3RhdHVzKSwge1xuICAgIGhyZWY6IG4uaHJlZlxuICB9O1xufSwgc28gPSAodCwgbikgPT4ge1xuICBjb25zdCBlID0gd2luZG93Lm9wZW4obiwgXCJfYmxhbmtcIik7XG4gIGlmICghZSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7dH0gcG9wdXAgd2luZG93IGJsb2NrZWQuIFBsZWFzZSBhbGxvdyBwb3B1cHMgZm9yIHRoaXMgc2l0ZS5gKTtcbiAgcmV0dXJuIGU7XG59LCBjbyA9IGFzeW5jICh0LCBuLCBlLCByKSA9PiB7XG4gIGNvbnN0IHsgZXJyX186IGEgfSA9IFAoXCJwb3B1cC12ZXJpZnlcIik7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgoaSwgcykgPT4ge1xuICAgIGNvbnN0IGMgPSBzbyh0LCByKSwgbCA9IHNldEludGVydmFsKGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHUgPSBhd2FpdCBWcihuLCBlKTtcbiAgICAgICAgaWYgKHUucHJlc2VudClcbiAgICAgICAgICBjbGVhckludGVydmFsKGwpLCBjLmNsb3NlKCksIGkoeyBocmVmOiB1LmhyZWYgfSk7XG4gICAgICAgIGVsc2UgaWYgKGMuY2xvc2VkKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHt0fSBwYXltZW50IGNhbmNlbGxlZGApO1xuICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICBhKEgodSkpLCBjbGVhckludGVydmFsKGwpLCBzKEgodSkpO1xuICAgICAgfVxuICAgIH0sIDFlMyk7XG4gIH0pO1xufSwgeyBsb2dfXzogbG8sIGVycl9fOiBKdCB9ID0gUChcInBvY2t5dC1jY1wiKSwgdW8gPSB6JDEub2JqZWN0KHtcbiAgXCJvcC1wb2NreXQtM2RzLXVybFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtcG9ja3l0LXR4bi1ub1wiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtcG9ja3l0LXJlZi1ub1wiOiB6JDEuc3RyaW5nKClcbn0pLCBwbyA9ICh0KSA9PiB7XG4gIGNvbnN0IG4gPSB1by5zYWZlUGFyc2UodCk7XG4gIGlmICghbi5zdWNjZXNzKSB7XG4gICAgY29uc3QgZSA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgciA9IGBQb2NreXQgM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeSh0KX1gO1xuICAgIHRocm93IEp0KHIpLCBuZXcgRXJyb3IoZSk7XG4gIH1cbiAgcmV0dXJuIG4uZGF0YTtcbn0sIEh0ID0gKHQpID0+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBuID0gbmV3IFVSTCh0ID8/IFwiXCIpLnNlYXJjaFBhcmFtcy5nZXQoXCJ2YXVsdElkXCIpO1xuICAgIGlmICghbilcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHZhdWx0IElEIGZvdW5kIGluIDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0XCIpO1xuICAgIHJldHVybiBsbyhgM0RTIHZlcmlmaWNhdGlvbiBzdWNjZXNzLiBbVmF1bHQgSUQ6ICR7bn1dYCksIG47XG4gIH0gY2F0Y2ggKG4pIHtcbiAgICBjb25zdCBlID0gXCJFcnJvciB2ZXJpZnlpbmcgM0RTIHZlcmlmaWNhdGlvbiByZXN1bHQuXCI7XG4gICAgdGhyb3cgSnQoZSwgYFJlc3VsdGluZyBVUkw6ICR7dH0uXG5FcnJvcjogJHtIKG4pfWApLCBuZXcgRXJyb3IoZSk7XG4gIH1cbn0sIG1vID0gKHQsIG4pID0+IG5ldyBVUkwodCkuc2VhcmNoUGFyYW1zLmdldChuKSwgeW8gPSAodCkgPT4gKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHRbXCJvcC1wb2NreXQtM2RzLXVybFwiXSkgIT09IHZvaWQgMCwgZm8gPSBhc3luYyAodCwgbikgPT4ge1xuICBjb25zdCBlID0gcG8obiksIHIgPSBhd2FpdCBXdCh7IHVybDogZVtcIm9wLXBvY2t5dC0zZHMtdXJsXCJdLCBiYXNlVXJsOiB0IH0pO1xuICByZXR1cm4ge1xuICAgIGV4aXN0aW5nX2NjOiB7XG4gICAgICB2YXVsdF9pZDogSHQoci5ocmVmID8/IFwiXCIpLFxuICAgICAgdHJhbnNhY3Rpb25fbm86IGVbXCJvcC1wb2NreXQtdHhuLW5vXCJdLFxuICAgICAgcmVmZXJlbmNlX25vOiBlW1wib3AtcG9ja3l0LXJlZi1ub1wiXVxuICAgIH1cbiAgfTtcbn0sIHsgbG9nX186IGhvLCBlcnJfXzogb3QgfSA9IFAoXCJhaXJ3YWxsZXgtY2NcIiksIF9vID0geiQxLm9iamVjdCh7XG4gIFwib3AtYWlyd2FsbGV4LTNkcy11cmxcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFpcndhbGxleC1pbml0aWFsLWludGVudC1pZFwiOiB6JDEuc3RyaW5nKCksXG4gIFwib3AtYWlyd2FsbGV4LWNvbnNlbnQtaWRcIjogeiQxLnN0cmluZygpXG59KSwgZ28gPSAodCkgPT4ge1xuICBjb25zdCBuID0gX28uc2FmZVBhcnNlKHQpO1xuICBpZiAoIW4uc3VjY2Vzcykge1xuICAgIGNvbnN0IGUgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIHIgPSBgQWlyd2FsbGV4IDNEUyBpcyByZXF1aXJlZCBidXQgaGVhZGVycyBhcmUgbWFsZm9ybWVkLiBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkodCl9YDtcbiAgICB0aHJvdyBvdChyKSwgbmV3IEVycm9yKGUpO1xuICB9XG4gIHJldHVybiBuLmRhdGE7XG59LCB3byA9ICh0KSA9PiAodCA9PSBudWxsID8gdm9pZCAwIDogdFtcIm9wLWFpcndhbGxleC0zZHMtdXJsXCJdKSAhPT0gdm9pZCAwLCBibyA9ICh0KSA9PiB7XG4gIHRyeSB7XG4gICAgY29uc3QgbiA9IG5ldyBVUkwodCA/PyBcIlwiKS5zZWFyY2hQYXJhbXMuZ2V0KFwicGF5bWVudF9pbnRlbnRfaWRcIik7XG4gICAgaWYgKCFuKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gaW50ZW50IElEIGZvdW5kIGluIEFpcndhbGxleCAzRFMgdmVyaWZpY2F0aW9uIHJlc3VsdFwiKTtcbiAgICByZXR1cm4gaG8oYEFpcndhbGxleCAzRFMgdmVyaWZpY2F0aW9uIHN1Y2Nlc3MuIFtJbnRlbnQgSUQ6ICR7bn1dYCksIG47XG4gIH0gY2F0Y2ggKG4pIHtcbiAgICBjb25zdCBlID0gXCJFcnJvciB2ZXJpZnlpbmcgQWlyd2FsbGV4IDNEUyB2ZXJpZmljYXRpb24gcmVzdWx0LlwiO1xuICAgIHRocm93IG90KGUsIGBSZXN1bHRpbmcgVVJMOiAke3R9LlxuRXJyb3I6ICR7SChuKX1gKSwgbmV3IEVycm9yKGUpO1xuICB9XG59LCB2byA9IGFzeW5jICh0LCBuKSA9PiB7XG4gIGNvbnN0IGUgPSBnbyhuKSwgciA9IGF3YWl0IFd0KHsgdXJsOiBlW1wib3AtYWlyd2FsbGV4LTNkcy11cmxcIl0sIGJhc2VVcmw6IHQgfSksIGEgPSBibyhyLmhyZWYgPz8gXCJcIiksIGkgPSBlW1wib3AtYWlyd2FsbGV4LWluaXRpYWwtaW50ZW50LWlkXCJdO1xuICBpZiAoaSAhPT0gYSkge1xuICAgIGNvbnN0IGMgPSBcIlVuYWJsZSB0byBwcm9jZXNzIHlvdXIgY3JlZGl0IGNhcmQuIFBsZWFzZSBjb250YWN0IHN1cHBvcnQgZm9yIGFzc2lzdGFuY2UuXCIsIGwgPSBgSW50ZW50IElEIGZyb20gY2FsbGJhY2sgKCR7YX0pIGRvZXMgbm90IG1hdGNoIHRoZSBpbml0aWFsIGludGVudCBJRCAoJHtpfSkuYDtcbiAgICB0aHJvdyBvdChsKSwgbmV3IEVycm9yKGMpO1xuICB9XG4gIHJldHVybiB7XG4gICAgZXhpc3RpbmdfY2M6IHtcbiAgICAgIGluaXRpYWxfaW50ZW50X2lkOiBhLFxuICAgICAgY29uc2VudF9pZDogZVtcIm9wLWFpcndhbGxleC1jb25zZW50LWlkXCJdXG4gICAgfVxuICB9O1xufSwgWnQgPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKVxuICB9KVxufSksIEJ0ID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcImdvb2dsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImFpcndhbGxleFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pLCBFbyA9IHokMS5lbnVtKFtcInRlc3RcIiwgXCJsaXZlXCIsIFwibGl2ZS11c1wiLCBcImxpdmUtaW5cIiwgXCJsaXZlLWFwc2VcIiwgXCJsaXZlLWF1XCJdKSwgQ28gPSB6JDEuZW51bShbXG4gIFwiYXJcIixcbiAgXCJiZy1CR1wiLFxuICBcImNhLUVTXCIsXG4gIFwiY3MtQ1pcIixcbiAgXCJkYS1ES1wiLFxuICBcImRlLURFXCIsXG4gIFwiZWwtR1JcIixcbiAgXCJlbi1VU1wiLFxuICBcImVzLUVTXCIsXG4gIFwiZXQtRUVcIixcbiAgXCJmaS1GSVwiLFxuICBcImZyLUZSXCIsXG4gIFwiaHItSFJcIixcbiAgXCJodS1IVVwiLFxuICBcImlzLUlTXCIsXG4gIFwiaXQtSVRcIixcbiAgXCJqYS1KUFwiLFxuICBcImtvLUtSXCIsXG4gIFwibHQtTFRcIixcbiAgXCJsdi1MVlwiLFxuICBcIm5sLU5MXCIsXG4gIFwibm8tTk9cIixcbiAgXCJwbC1QTFwiLFxuICBcInB0LUJSXCIsXG4gIFwicHQtUFRcIixcbiAgXCJyby1ST1wiLFxuICBcInJ1LVJVXCIsXG4gIFwic2stU0tcIixcbiAgXCJzbC1TSVwiLFxuICBcInN2LVNFXCIsXG4gIFwiemgtQ05cIixcbiAgXCJ6aC1UV1wiXG5dKSwgeyBsb2dfXzogbWUsIGVycl9fOiBFZSB9ID0gUChcImFkeWVuLWNjXCIpLCBTbyA9IHokMS5vYmplY3Qoe1xuICBcIm9wLWFjY291bnQtaWRcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWNsaWVudC1rZXlcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFkeWVuLWVudmlyb25tZW50XCI6IEVvLFxuICBcIm9wLWFkeWVuLWFjdGlvblwiOiB6JDEuc3RyaW5nKClcbn0pLCBRdCA9IFwiVW5hYmxlIHRvIHByb2Nlc3MgeW91ciBjcmVkaXQgY2FyZC4gUGxlYXNlIGNvbnRhY3Qgc3VwcG9ydCBmb3IgYXNzaXN0YW5jZS5cIiwgUG8gPSAodCkgPT4ge1xuICBjb25zdCBuID0gU28uc2FmZVBhcnNlKHQpO1xuICBpZiAoIW4uc3VjY2VzcylcbiAgICB0aHJvdyBFZShgQWR5ZW4gM0RTIGlzIHJlcXVpcmVkIGJ1dCBoZWFkZXJzIGFyZSBtYWxmb3JtZWQuIEdvdDogJHtKU09OLnN0cmluZ2lmeSh0KX1gKSwgbmV3IEVycm9yKFF0KTtcbiAgcmV0dXJuIG4uZGF0YTtcbn0sIGtvID0gKHQpID0+IEpTT04ucGFyc2UodCksIHB0ID0gKCkgPT4gXCJBZHllbldlYlwiIGluIHdpbmRvdyAmJiBcIkFkeWVuQ2hlY2tvdXRcIiBpbiB3aW5kb3cuQWR5ZW5XZWIsIEFvID0gYXN5bmMgKCkgPT4ge1xuICBtZShcIldhaXRpbmcgZm9yIEFkeWVuIFNESyB0byBsb2FkLi4uXCIpO1xuICBmb3IgKGxldCB0ID0gMDsgdCA8IDEwOyB0KyspXG4gICAgcHQoKSB8fCBhd2FpdCBudCg1MDApO1xuICBpZiAoIXB0KCkpXG4gICAgdGhyb3cgRWUoXCJBZHllbiBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKSwgbmV3IEVycm9yKFF0KTtcbiAgcmV0dXJuIG1lKFwiQWR5ZW4gU0RLIGxvYWRlZCBzdWNjZXNzZnVsbHlcIiksIHdpbmRvdy5BZHllbldlYi5BZHllbkNoZWNrb3V0O1xufSwgSW8gPSAodCkgPT4ge1xuICBjb25zdCB7IGhlYWRlcnM6IG4sIGxvY2FsZTogZSwgY291bnRyeUNvZGU6IHIsIGNvbXBvbmVudDogYSwgaG9zdDogaSwgY2FuY2VsQnV0dG9uOiBzIH0gPSB0LCBjID0ga28obltcIm9wLWFkeWVuLWFjdGlvblwiXSk7XG4gIHJldHVybiBtZShgUnVubmluZyBBZHllbiAzRFMgZmxvdyBmb3IgYWN0aW9uIHR5cGU6ICR7Yy50eXBlfWApLCBuZXcgUHJvbWlzZSgobCkgPT4ge1xuICAgIGNvbnN0IHUgPSAoKSA9PiB7XG4gICAgICBtZShcIkNsZWFuaW5nIHVwIEFkeWVuIDNEUyBmbG93XCIpLCBzLnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjbGlja1wiLCBoKSwgaS5yZW1vdmUoKTtcbiAgICB9LCBkID0gKG0pID0+IHtcbiAgICAgIEVlKFwiQXV0aGVudGljYXRpb24gZmFpbGVkLiBSZXN1bHQ6XCIsIG0pLCBsKHsgc3RhdHVzOiBJLkZBSUxVUkUsIGNsZWFudXA6IHUgfSk7XG4gICAgfSwgZiA9IChtKSA9PiB7XG4gICAgICBFZShcIkFkeWVuIGVycm9yOlwiLCBtKSwgbCh7IHN0YXR1czogSS5GQUlMVVJFLCBjbGVhbnVwOiB1IH0pO1xuICAgIH0sIGggPSAoKSA9PiB7XG4gICAgICBsKHsgc3RhdHVzOiBJLkNBTkNFTExFRCwgY2xlYW51cDogdSB9KTtcbiAgICB9O1xuICAgIHMuYWRkRXZlbnRMaXN0ZW5lcihcImNsaWNrXCIsIGgpO1xuICAgIGNvbnN0IHkgPSAobSwgXywgdikgPT4ge1xuICAgICAgaS5yZW1vdmUoKSwgbCh7IHN0YXR1czogSS5TVUNDRVNTLCBhZGRpdGlvbmFsRGV0YWlsczogbSwgY2xlYW51cDogdSB9KTtcbiAgICB9O1xuICAgIEFvKCkudGhlbihcbiAgICAgIChtKSA9PiBtKHtcbiAgICAgICAgY2xpZW50S2V5OiBuW1wib3AtYWR5ZW4tY2xpZW50LWtleVwiXSxcbiAgICAgICAgZW52aXJvbm1lbnQ6IG5bXCJvcC1hZHllbi1lbnZpcm9ubWVudFwiXSxcbiAgICAgICAgbG9jYWxlOiBlLFxuICAgICAgICBjb3VudHJ5Q29kZTogcixcbiAgICAgICAgb25BZGRpdGlvbmFsRGV0YWlsczogeSxcbiAgICAgICAgb25QYXltZW50RmFpbGVkOiBkLFxuICAgICAgICBvbkVycm9yOiBmXG4gICAgICB9KVxuICAgICkudGhlbigobSkgPT4ge1xuICAgICAgbS5jcmVhdGVGcm9tQWN0aW9uKGMsIHsgY2hhbGxlbmdlV2luZG93U2l6ZTogXCIwM1wiIH0pLm1vdW50KGEpO1xuICAgIH0pO1xuICB9KTtcbn0sIFJvID0gKHQpID0+IHtcbiAgY29uc3QgbiA9IG5hdmlnYXRvci5sYW5ndWFnZXMgJiYgbmF2aWdhdG9yLmxhbmd1YWdlcy5sZW5ndGggPyBuYXZpZ2F0b3IubGFuZ3VhZ2VzWzBdIDogbmF2aWdhdG9yLmxhbmd1YWdlLCBlID0gdCA/PyBuLCByID0gQ28uc2FmZVBhcnNlKGUpO1xuICByZXR1cm4gci5zdWNjZXNzID8gKG1lKGBSZXNvbHZlZCBsb2NhbGU6ICR7ci5kYXRhfWApLCByLmRhdGEpIDogKEVlKGBSZXNvbHZlZCBpbnZhbGlkIGxvY2FsZTogJHtlfS4gRGVmYXVsdGluZyB0byBlbi1VUy5gKSwgXCJlbi1VU1wiKTtcbn0sIEZvID0gKHQpID0+ICh0ID09IG51bGwgPyB2b2lkIDAgOiB0W1wib3AtYWR5ZW4tYWN0aW9uXCJdKSAhPT0gdm9pZCAwLCBNbyA9IGFzeW5jICh0LCBuLCBlKSA9PiB7XG4gIGNvbnN0IHIgPSBQbyhuKSwgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIik7XG4gIGEuaWQgPSBcImFkeWVuLWNvbnRhaW5lclwiO1xuICBjb25zdCB7IGhvc3Q6IGksIGlmcmFtZTogcywgY2FuY2VsQnV0dG9uOiBjIH0gPSBLdChcImh0dHA6Ly9leGFtcGxlLmNvbVwiKTtcbiAgcy5yZXBsYWNlV2l0aChhKTtcbiAgY29uc3QgbCA9IGF3YWl0IElvKHtcbiAgICBoZWFkZXJzOiByLFxuICAgIGxvY2FsZTogUm8oZSksXG4gICAgY291bnRyeUNvZGU6IHQsXG4gICAgY29tcG9uZW50OiBhLFxuICAgIGhvc3Q6IGksXG4gICAgY2FuY2VsQnV0dG9uOiBjXG4gIH0pO1xuICBpZiAobC5jbGVhbnVwKCksIGwuc3RhdHVzID09PSBJLkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIGlmIChsLnN0YXR1cyA9PT0gSS5DQU5DRUxMRUQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChsLnN0YXR1cyA9PT0gSS5TVUNDRVNTKSB7XG4gICAgaWYgKCFsLmFkZGl0aW9uYWxEZXRhaWxzKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBzdWNjZWVkZWQgYnV0IG5vIGFkZGl0aW9uYWwgZGV0YWlscyB3ZXJlIHJldHVybmVkXCIpO1xuICAgIHJldHVybiBtZShcIjNEUyB2ZXJpZmljYXRpb24gc3VjY2VlZGVkXCIpLCB7XG4gICAgICBleGlzdGluZ19jYzoge1xuICAgICAgICBhZGRpdGlvbmFsX2RldGFpbHM6IGwuYWRkaXRpb25hbERldGFpbHMuZGF0YVxuICAgICAgfVxuICAgIH07XG4gIH0gZWxzZVxuICAgIFVlKGwuc3RhdHVzKTtcbn0sIHsgbG9nX186IEMsIGVycl9fOiBtdCB9ID0gUChcImNvbW1vbi1jY1wiKSwgeyBsb2dfXzogeXQgfSA9IFAoXCJzdHJpcGUtY2NcIik7XG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IERvID0gZWUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICBmb3JtQ2FsbGJhY2tzOiByLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgdmFyIHU7XG4gICAgQyhcIuKUnCBSdW5uaW5nIGNvbW1vbiBDQyBmbG93Li4uXCIsIHsgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuIH0pO1xuICAgIGNvbnN0IGkgPSB0LmFueUNkZUNvbm5lY3Rpb24sIHMgPSBhd2FpdCBNKGkpO1xuICAgIEMoYOKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHMgW01vZGU6ICR7cy5tb2RlfV1gKTtcbiAgICBjb25zdCBjID0gdGUoZSwgci5nZXQub25WYWxpZGF0aW9uRXJyb3IpLCBsID0ge1xuICAgICAgc2Vzc2lvbl9pZDogdC5lbGVtZW50c1Nlc3Npb25JZCxcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBuLFxuICAgICAgbm9uX2NkZV9mb3JtX2ZpZWxkczogYyxcbiAgICAgIGV4dHJhX21ldGFkYXRhOiB7XG4gICAgICAgIG9yaWdpbjogd2luZG93LmxvY2F0aW9uLm9yaWdpblxuICAgICAgfVxuICAgIH07XG4gICAgdHJ5IHtcbiAgICAgIEMoYOKUnCBUb2tlbml6aW5nIGNhcmQgaW5mbyBpbiBDREUgW1Nlc3Npb246ICR7dC5lbGVtZW50c1Nlc3Npb25JZH1dYCk7XG4gICAgICBjb25zdCBkID0gYXdhaXQgWXIoYS5jdXJyZW50Q2RlQ29ubmVjdGlvbnMsIHtcbiAgICAgICAgc2Vzc2lvbl9pZDogdC5lbGVtZW50c1Nlc3Npb25JZFxuICAgICAgfSk7XG4gICAgICBpZiAoWnIoZCwgci5nZXQub25WYWxpZGF0aW9uRXJyb3IpLCBzLm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgICBDKGDilJwgU2V0dGluZyB1cCBwYXltZW50IG1ldGhvZCBpbiBDREUgW1Rva2VuOiAke3MudG9rZW59XWApO1xuICAgICAgICBjb25zdCBmID0gYXdhaXQgS3IoaSwgbCk7XG4gICAgICAgIHJldHVybiBDKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7Zi5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGYgfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIEMoYOKUnCBJbml0aWFsIGNoZWNrb3V0IGZsb3cuIENoZWNraW5nIG91dCBjYXJkIGluZm8gaW4gQ0RFIFtTZXNzaW9uOiAke3QuZWxlbWVudHNTZXNzaW9uSWR9XWApO1xuICAgICAgICBjb25zdCBmID0gYXdhaXQgdXQoaSwgbCk7XG4gICAgICAgIHJldHVybiBDKFwi4pWwIENoZWNrb3V0IGNvbXBsZXRlZCBzdWNjZXNzZnVsbHkuXCIpLCB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBmIH07XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZCkge1xuICAgICAgaWYgKGQgaW5zdGFuY2VvZiAkdCAmJiBkLm9yaWdpbmFsRXJyb3JNZXNzYWdlLmluY2x1ZGVzKFwiM0RTX1JFUVVJUkVEXCIpKSB7XG4gICAgICAgIEMoXCLilJwgQ2FyZCByZXF1aXJlcyAzRFMsIHN0YXJ0aW5nIG5vbi1sZWdhY3kgcGF5bWVudCBmbG93XCIpLCBDKFwiUmVjZWl2ZWQgM0RTIGVycm9yIHJlc3BvbnNlIGhlYWRlcnM6XCIsIGQucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgIGNvbnN0IGYgPSB5byhkLnJlc3BvbnNlLmhlYWRlcnMpO1xuICAgICAgICBpZiAoZikge1xuICAgICAgICAgIEMoXCLilJwgUG9ja3l0IDNEUyBjYXNlIGRldGVjdGVkLiBHb2luZyB0aHJvdWdoIFBvY2t5dCAzRFMgZmxvdy5cIik7XG4gICAgICAgICAgY29uc3QgdyA9IGF3YWl0IGZvKHQuYmFzZVVybCwgZC5yZXNwb25zZS5oZWFkZXJzKTtcbiAgICAgICAgICBsLmV4dHJhX21ldGFkYXRhLnBvY2t5dCA9IHc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdvKGQucmVzcG9uc2UuaGVhZGVycykpIHtcbiAgICAgICAgICBDKFwi4pScIEFpcndhbGxleCAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBBaXJ3YWxsZXggM0RTIGZsb3cuXCIpO1xuICAgICAgICAgIGNvbnN0IHcgPSBhd2FpdCB2byh0LmJhc2VVcmwsIGQucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICAgICAgbC5leHRyYV9tZXRhZGF0YS5haXJ3YWxsZXggPSB3O1xuICAgICAgICB9XG4gICAgICAgIGlmIChGbyhkLnJlc3BvbnNlLmhlYWRlcnMpKSB7XG4gICAgICAgICAgQyhcIuKUnCBBZHllbiAzRFMgY2FzZSBkZXRlY3RlZC4gR29pbmcgdGhyb3VnaCBBZHllbiAzRFMgZmxvdy5cIik7XG4gICAgICAgICAgY29uc3QgdyA9IGF3YWl0IE1vKFxuICAgICAgICAgICAgZVtwLkNPVU5UUlldLFxuICAgICAgICAgICAgZC5yZXNwb25zZS5oZWFkZXJzLFxuICAgICAgICAgICAgcy5sb2NhbGVcbiAgICAgICAgICApO1xuICAgICAgICAgIGwuZXh0cmFfbWV0YWRhdGEuYWR5ZW4gPSB3O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG0gPSBhd2FpdCAkcihpLCBsKTtcbiAgICAgICAgQyhcIuKUnCBQYXltZW50IGZsb3cgcmVzdWx0OlwiLCBtKTtcbiAgICAgICAgY29uc3QgXyA9ICgodSA9IGQucmVzcG9uc2UuaGVhZGVycykgPT0gbnVsbCA/IHZvaWQgMCA6IHVbXCJvcC1zaG91bGQtdXNlLW5ldy1mbG93XCJdKSAhPT0gXCJ0cnVlXCI7XG4gICAgICAgIGYgPyBDKFwi4pScIFByZS1zdGFydCAzRFMgaXMgc3VjY2Vzc2Z1bCwgb3RoZXIgM0RTIGZsb3dzIHdpbGwgYmUgc2tpcHBlZC5cIikgOiBfID8gKEMoXCLilJwgVXNpbmcgc3RyaXBlIDNEUyBmbG93XCIpLCBhd2FpdCBVbyhtKSkgOiAoQyhcIuKUnCBVc2luZyBjb21tb24gM0RTIGZsb3dcIiksIGF3YWl0IExvKG0sIHQuYmFzZVVybCkpO1xuICAgICAgICBjb25zdCB2ID0gbS5jY19wbV9pZDtcbiAgICAgICAgaWYgKHMubW9kZSA9PT0gXCJzZXR1cFwiKSB7XG4gICAgICAgICAgQyhg4pScIENvbmZpcm1pbmcgcGF5bWVudCBmbG93IFtjY19wbV9pZDogJHt2fV1gKTtcbiAgICAgICAgICBjb25zdCB3ID0gYXdhaXQgRyhpLCB7XG4gICAgICAgICAgICBzZWN1cmVfdG9rZW46IHMudG9rZW4sXG4gICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogdlxuICAgICAgICAgIH0pO1xuICAgICAgICAgIEMoXCLilJwgQ29uZmlybSBwYXltZW50IGZsb3cgcmVzdWx0IHJlY2VpdmVkIFJlc3VsdDpcIiwgdyk7XG4gICAgICAgICAgY29uc3QgYiA9IFNlKHcpO1xuICAgICAgICAgIHJldHVybiBDKGDilbAgU2V0dXAgY29tcGxldGVkIHN1Y2Nlc3NmdWxseSBbUE0gSUQ6ICR7Yi5wYXltZW50X21ldGhvZF9pZH1dYCksIHsgbW9kZTogXCJzZXR1cFwiLCByZXN1bHQ6IGIgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBDKGDilJwgQ2hlY2tpbmcgb3V0IGFmdGVyIDNEUyBmbG93IFtGbG93OiAke18gPyBcImxlZ2FjeVwiIDogXCJuZXdcIn1dYCk7XG4gICAgICAgICAgY29uc3QgdyA9IGF3YWl0IHV0KGksIHtcbiAgICAgICAgICAgIC4uLmwsXG4gICAgICAgICAgICBleGlzdGluZ19jY19wbV9pZDogdixcbiAgICAgICAgICAgIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IF9cbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gQyhcIuKVsCBDaGVja291dCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5LlwiKSwgeyBtb2RlOiBcImNoZWNrb3V0XCIsIHJlc3VsdDogdyB9O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aHJvdyBtdChcIuKVsCBFcnJvciBjaGVja2luZyBvdXQgY2FyZCBpbmZvIGluIENERVwiKSwgbXQoZCksIGQ7XG4gICAgfVxuICB9XG4pLCBPbyA9ICh0KSA9PiB7XG4gIGNvbnN0IG4gPSB0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChlKSA9PiBlLnR5cGUgPT09IFwic3RyaXBlXzNkc1wiKTtcbiAgaWYgKCFuKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHN0cmlwZSAzRFMgYWN0aW9uIGZvdW5kXCIpO1xuICByZXR1cm4gbnIucGFyc2Uobik7XG59LCBObyA9IFtcImFpcndhbGxleF9wYXltZW50X2NvbnNlbnRcIiwgXCJhZHllblwiXSwgVG8gPSAodCkgPT4ge1xuICBjb25zdCBuID0gdC5yZXF1aXJlZF91c2VyX2FjdGlvbnMuZmluZCgoZSkgPT4gTm8uaW5jbHVkZXMoZS50eXBlKSk7XG4gIGlmICghbilcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBjb21tb24gM0RTIGFjdGlvbiBmb3VuZFwiKTtcbiAgcmV0dXJuIFFuLnBhcnNlKG4pO1xufSwgTG8gPSBhc3luYyAodCwgbikgPT4ge1xuICBjb25zdCBlID0gVG8odCk7XG4gIGlmIChlLnJlZGlyZWN0X3VybCA9PT0gXCIzRFNfQ09NUExFVEVcIikge1xuICAgIEMoXCLilJwgM0RTIGZsb3cgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVwiKTtcbiAgICByZXR1cm47XG4gIH1cbiAgQyhg4pScIFVzaW5nIGNvbW1vbiAzRFMgZmxvdyBbVVJMOiAke2UucmVkaXJlY3RfdXJsfV1gKTtcbiAgY29uc3QgeyBzdGF0dXM6IHIgfSA9IGF3YWl0IHhlKHsgdXJsOiBlLnJlZGlyZWN0X3VybCwgYmFzZVVybDogbiB9KTtcbiAgaWYgKEMoYOKVsCAzRFMgdmVyaWZpY2F0aW9uIGNvbXBsZXRlZCBbU3RhdHVzOiAke3J9XWApLCByID09PSBJLkNBTkNFTExFRClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgaWYgKHIgPT09IEkuRkFJTFVSRSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGZhaWxlZFwiKTtcbn0sIFVvID0gYXN5bmMgKHQpID0+IHtcbiAgY29uc3QgbiA9IE9vKHQpO1xuICB5dChg4pScIFVzaW5nIHN0cmlwZSAzRFMgZmxvdyBbQ2xpZW50IFNlY3JldDogJHtuLmNsaWVudF9zZWNyZXQuc3Vic3RyaW5nKDAsIDgpfS4uLl1gKSwgYXdhaXQgbHIobiksIHl0KFwi4pWwIFN0cmlwZSAzRFMgZmxvdyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XCIpO1xufSwgViA9IHokMS5lbnVtKFtcInN0cmlwZVwiLCBcImFpcndhbGxleFwiLCBcImF1dGhvcml6ZV9uZXRcIl0pO1xuVi5FbnVtLnN0cmlwZTtcbmNvbnN0IHsgbG9nX186IFQsIGVycl9fOiBqbyB9ID0gUChcInN0cmlwZS1wclwiKSwgeG8gPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS51bmlvbihbeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksIHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKV0pLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSksICRvID0gc2UoXG4gIGFzeW5jICh7IGNvbnRleHQ6IHQsIGZvcm1DYWxsYmFja3M6IG4gfSkgPT4ge1xuICAgIFQoXCJDaGVja2luZyBpZiB0aGVyZSBhcmUgYW55IENQTXMgZm9yIFN0cmlwZSBQUi4uLlwiKTtcbiAgICBjb25zdCBlID0gWSh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIHhvKTtcbiAgICBUKFwiSW5pdGlhbGl6aW5nIFN0cmlwZSBQUiBmbG93Li4uXCIpO1xuICAgIGNvbnN0IHIgPSB0LmFueUNkZUNvbm5lY3Rpb24sIGEgPSBhd2FpdCBNKHIpLCBpID0gYS5tb2RlID09PSBcInNldHVwXCI7XG4gICAgVChcIkdldHRpbmcgaW5pdGlhbCBwcmV2aWV3IGFtb3VudFwiKTtcbiAgICBjb25zdCBzID0gYXdhaXQgX2UociwgYS50b2tlbiwgaSwgdm9pZCAwKSwgYyA9IGF3YWl0IGlyKFxuICAgICAgZS5tZXRhZGF0YS5zdHJpcGVfcGssXG4gICAgICBzLmFtb3VudEF0b20sXG4gICAgICBzLmN1cnJlbmN5LFxuICAgICAgaVxuICAgICk7XG4gICAgVChcIkNoZWNraW5nIGlmIGNhbiBtYWtlIHBheW1lbnRcIik7XG4gICAgY29uc3QgbCA9IGF3YWl0IGMuY2FuTWFrZVBheW1lbnQoKTtcbiAgICBpZiAobCA9PT0gbnVsbClcbiAgICAgIHJldHVybiBqbyhcImNhbk1ha2VQYXltZW50IHJldHVybmVkIG51bGxcIiksIHsgaXNBdmFpbGFibGU6ICExLCByZWFzb246IFwiY2FuTWFrZVBheW1lbnQgcmV0dXJuZWQgbnVsbFwiIH07XG4gICAgVChcIlN0cmlwZSBQUiBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gQ2FuIG1ha2UgcGF5bWVudFwiLCBsKTtcbiAgICBjb25zdCB1ID0gKGQsIGYpID0+IEEuc3RyaXBlUFIucnVuKHtcbiAgICAgIGNvbnRleHQ6IHQsXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IHZlKHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgZCksXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiBKKHQuZm9ybURpdiksXG4gICAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgICAgY3VzdG9tUGFyYW1zOiB7IHByb3ZpZGVyOiBkLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBmID09IG51bGwgPyB2b2lkIDAgOiBmLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QgfSxcbiAgICAgIGluaXRSZXN1bHQ6IHtcbiAgICAgICAgcHJvY2Vzc29yOiBWLkVudW0uc3RyaXBlLFxuICAgICAgICBwcjogYyxcbiAgICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgICBhdmFpbGFibGVQcm92aWRlcnM6IHsgYXBwbGVQYXk6IGwuYXBwbGVQYXksIGdvb2dsZVBheTogbC5nb29nbGVQYXkgfSxcbiAgICAgICAgc3RhcnRGbG93OiB1XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogVi5FbnVtLnN0cmlwZSxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIHByOiBjLFxuICAgICAgYXZhaWxhYmxlUHJvdmlkZXJzOiB7XG4gICAgICAgIGFwcGxlUGF5OiBsLmFwcGxlUGF5LFxuICAgICAgICBnb29nbGVQYXk6IGwuZ29vZ2xlUGF5XG4gICAgICB9LFxuICAgICAgc3RhcnRGbG93OiB1XG4gICAgfTtcbiAgfVxuKSwgem8gPSBlZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiB0LFxuICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICBub25DZGVGb3JtSW5wdXRzOiBlLFxuICAgIGZvcm1DYWxsYmFja3M6IHIsXG4gICAgY3VzdG9tUGFyYW1zOiBhLFxuICAgIGluaXRSZXN1bHQ6IGlcbiAgfSkgPT4ge1xuICAgIGlmIChUKFwiUnVubmluZyBTdHJpcGUgUFIgZmxvdy4uLlwiKSwgYS5wcm92aWRlciAhPT0gbi5wcm92aWRlcilcbiAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvdmlkZXIgbWlzbWF0Y2guIEV4cGVjdGVkICR7YS5wcm92aWRlcn0sIGdvdCAke24ucHJvdmlkZXJ9YCk7XG4gICAgY29uc3QgcyA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGkucHI7XG4gICAgaWYgKGEgIT0gbnVsbCAmJiBhLm92ZXJyaWRlUGF5bWVudFJlcXVlc3QpIHtcbiAgICAgIGNvbnN0IG0gPSBhLm92ZXJyaWRlUGF5bWVudFJlcXVlc3Q7XG4gICAgICBUKFwiT3ZlcnJpZGluZyBQUiBhbW91bnQgd2l0aFwiLCBtKSwgVm8oYywgbS5hbW91bnQsIG0ucGVuZGluZywgbS5hcHBsZVBheVBheW1lbnRSZXF1ZXN0KTtcbiAgICB9XG4gICAgVChcIlNob3dpbmcgUFIgZGlhbG9nLi4uXCIpLCBjLnNob3coKTtcbiAgICBjb25zdCBsID0gYXdhaXQgc3IoYyk7XG4gICAgVChcIlN0cmlwZSBQTSBhZGRlZCBldmVudDpcIiwgbCksIFQoXCJNZXJnaW5nIFBNIGZpZWxkcyB3aXRoIGZvcm0gZmllbGRzLi4uXCIpO1xuICAgIGNvbnN0IHUgPSBHbyhlLCBsKSwgZCA9IHRlKHUsIHIuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBUKFwiUFIgZGlhbG9nIGZpbmlzaGVkLiBTdGFydGluZyBwYXltZW50IGZsb3cuLi5cIiwgZCk7XG4gICAgY29uc3QgZiA9IGF3YWl0IHpyKHMsIHtcbiAgICAgIGZpZWxkczogZCxcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogblxuICAgIH0pLCBoID0gcW8oZik7XG4gICAgVChcIkNvbmZpcm1pbmcgUFIgd2l0aCBTdHJpcGUuLi5cIiksIGF3YWl0IGNyKGgsIGwpO1xuICAgIGNvbnN0IHkgPSBhd2FpdCBNKHMpO1xuICAgIGlmICh5Lm1vZGUgPT09IFwic2V0dXBcIikge1xuICAgICAgVChcIkNvbmZpcm1pbmcgcGF5bWVudCBmbG93IGZvciBzZXR1cC4uLlwiKTtcbiAgICAgIGNvbnN0IG0gPSBhd2FpdCBHKHMsIHtcbiAgICAgICAgc2VjdXJlX3Rva2VuOiB5LnRva2VuXG4gICAgICB9KTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwic2V0dXBcIiwgcmVzdWx0OiBTZShtKSB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBUKFwiUGVyZm9ybWluZyBjaGVja291dC4uLlwiKTtcbiAgICAgIGNvbnN0IG0gPSB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogeS50b2tlbixcbiAgICAgICAgcGF5bWVudF9pbnB1dDoge1xuICAgICAgICAgIHByb3ZpZGVyX3R5cGU6IG4ucHJvdmlkZXJcbiAgICAgICAgfSxcbiAgICAgICAgY3VzdG9tZXJfZmlyc3RfbmFtZTogZFtwLkZJUlNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9sYXN0X25hbWU6IGRbcC5MQVNUX05BTUVdLFxuICAgICAgICBjdXN0b21lcl9lbWFpbDogZFtwLkVNQUlMXSxcbiAgICAgICAgY3VzdG9tZXJfemlwX2NvZGU6IGRbcC5aSVBfQ09ERV0sXG4gICAgICAgIGN1c3RvbWVyX2NvdW50cnk6IGRbcC5DT1VOVFJZXSxcbiAgICAgICAgcHJvbW90aW9uX2NvZGU6IGRbcC5QUk9NT1RJT05fQ09ERV0sXG4gICAgICAgIGxpbmVfaXRlbXM6IHkubGluZV9pdGVtcyxcbiAgICAgICAgdG90YWxfYW1vdW50X2F0b206IHkuYW1vdW50X3RvdGFsX2F0b20sXG4gICAgICAgIGNhbmNlbF9hdF9lbmQ6ICExLFxuICAgICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogblxuICAgICAgfTtcbiAgICAgIHJldHVybiB7IG1vZGU6IFwiY2hlY2tvdXRcIiwgcmVzdWx0OiBhd2FpdCBydChzLCBtKSB9O1xuICAgIH1cbiAgfVxuKSwgR28gPSAodCwgbikgPT4ge1xuICB2YXIgbCwgdSwgZCwgZjtcbiAgY29uc3QgZSA9IHsgLi4udCB9LCBbciwgLi4uYV0gPSAoKHUgPSAobCA9IG4ucGF5ZXJOYW1lKSA9PSBudWxsID8gdm9pZCAwIDogbC50cmltKCkpID09IG51bGwgPyB2b2lkIDAgOiB1LnNwbGl0KC9cXHMrLykpID8/IFtdLCBpID0gYS5qb2luKFwiIFwiKSB8fCB2b2lkIDAsIHMgPSAoZiA9IChkID0gbi5wYXltZW50TWV0aG9kKSA9PSBudWxsID8gdm9pZCAwIDogZC5iaWxsaW5nX2RldGFpbHMpID09IG51bGwgPyB2b2lkIDAgOiBmLmFkZHJlc3MsIGMgPSBuLnNoaXBwaW5nQWRkcmVzcztcbiAgcmV0dXJuIGVbcC5GSVJTVF9OQU1FXSA9IGVbcC5GSVJTVF9OQU1FXSB8fCByIHx8IFwiX09QX1VOS05PV05cIiwgZVtwLkxBU1RfTkFNRV0gPSBlW3AuTEFTVF9OQU1FXSB8fCBpIHx8IFwiX09QX1VOS05PV05cIiwgZVtwLkVNQUlMXSA9IGVbcC5FTUFJTF0gfHwgbi5wYXllckVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIiwgZVtwLlpJUF9DT0RFXSA9IGVbcC5aSVBfQ09ERV0gfHwgKHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMucG9zdGFsX2NvZGUpIHx8IChjID09IG51bGwgPyB2b2lkIDAgOiBjLnBvc3RhbENvZGUpIHx8IFwiMDAwMDBcIiwgZVtwLkNPVU5UUlldID0gZVtwLkNPVU5UUlldIHx8IChzID09IG51bGwgPyB2b2lkIDAgOiBzLmNvdW50cnkpIHx8IChjID09IG51bGwgPyB2b2lkIDAgOiBjLmNvdW50cnkpIHx8IFwiVVNcIiwgVChcIkZpbmFsIGZvcm0gaW5wdXRzOlwiLCBlKSwgZTtcbn0sIFZvID0gKHQsIG4sIGUsIHIpID0+IHtcbiAgdC51cGRhdGUoe1xuICAgIHRvdGFsOiB7XG4gICAgICBhbW91bnQ6IG4uYW1vdW50QXRvbSxcbiAgICAgIGxhYmVsOiBcIlRvdGFsXCIsXG4gICAgICBwZW5kaW5nOiBlXG4gICAgfSxcbiAgICBjdXJyZW5jeTogbi5jdXJyZW5jeSxcbiAgICAvLyBTdHJpcGUncyBhcHBsZVBheSBvcHRpb24gb25seSBzdXBwb3J0cyAncmVjdXJyaW5nUGF5bWVudFJlcXVlc3QnIHwgJ2RlZmVycmVkUGF5bWVudFJlcXVlc3QnIHwgJ2F1dG9tYXRpY1JlbG9hZFBheW1lbnRSZXF1ZXN0JyBvZiBuYXRpdmUgQXBwbGVQYXkgcGF5bWVudCByZXF1ZXN0XG4gICAgLy8gV2UncmUgYWNjZXB0aW5nIG5hdGl2ZSBQYXltZW50IFJlcXVlc3QgaGVyZSBmb3IgbW9yZSBjb21tb24gdHlwaW5nLlxuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgLSBzdHJpcGUgZG8gbm90IGV4cGVjdCBhZGRpdGlvbmFsIGZpZWxkc1xuICAgIGFwcGxlUGF5OiByXG4gIH0pO1xufSwgcW8gPSAodCkgPT4ge1xuICBpZiAodC5yZXF1aXJlZF91c2VyX2FjdGlvbnMubGVuZ3RoICE9PSAxKVxuICAgIHRocm93IG5ldyBFcnJvcihgRXJyb3Igb2NjdXJyZWQuXG5EZXRhaWxzOiBnb3QgJHt0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5sZW5ndGh9IHJlcXVpcmVkIHVzZXIgYWN0aW9uc2ApO1xuICByZXR1cm4gcnIucGFyc2UodC5yZXF1aXJlZF91c2VyX2FjdGlvbnNbMF0pO1xufSwgeyBsb2dfXzogSywgZXJyX186IGZ0IH0gPSBQKFwicG9ja3l0LXBheXBhbFwiKSwgWW8gPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwicG9ja3l0XCIpLFxuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJwYXlwYWxcIilcbn0pO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBwYXlwYWxfaWZyYW1lX3VybDogeiQxLnN0cmluZygpLFxuICAgIHZlcmlmeV90b2tlbjogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcbmNvbnN0IEtvID0gZWUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICBmb3JtQ2FsbGJhY2tzOiByLFxuICAgIGN1c3RvbVBhcmFtczogYVxuICB9KSA9PiB7XG4gICAgdmFyIGosIGNlO1xuICAgIEsoXCJSdW5uaW5nIFBvY2t5dCBQYXlwYWwgZmxvdy4uLlwiKTtcbiAgICBjb25zdCBpID0gdC5hbnlDZGVDb25uZWN0aW9uLCBzID0gYXdhaXQgTShpKTtcbiAgICBLKFwiVmVyaWZ5aW5nIENQTS4uLlwiKTtcbiAgICBjb25zdCBjID0gWW8ucGFyc2Uobik7XG4gICAgSyhcIuKUnCBWYWxpZGF0aW5nIG5vbi1DREUgZm9ybSBmaWVsZHNcIik7XG4gICAgY29uc3QgbCA9IGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuc2V0dGluZ3MsIHUgPSB0ZShcbiAgICAgIGUsXG4gICAgICByLmdldC5vblZhbGlkYXRpb25FcnJvcixcbiAgICAgIGwgPT0gbnVsbCA/IHZvaWQgMCA6IGwuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgKSwgZCA9IEhyKHUpO1xuICAgIEsoYFN0YXJ0aW5nIHBheW1lbnQgZmxvdy4uLiBNb2RlOiAke3MubW9kZX1gKTtcbiAgICBjb25zdCBmID0gdjQoKSwgaCA9IHMubW9kZSAhPT0gXCJzZXR1cFwiLCB5ID0ge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogYy5wcm92aWRlcixcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBjLFxuICAgICAgdXNlX3BheV9maXJzdF9mbG93OiBoLFxuICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBoID8ge1xuICAgICAgICAvLyBUT0RPIGFkZCBjb3Vwb24gYW5kIGNhcnQgYWRqdXN0ZWQgbGluZSBpdGVtcyBsYXRlclxuICAgICAgICBsaW5lX2l0ZW1zOiBzLmxpbmVfaXRlbXMsXG4gICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogcy5hbW91bnRfdG90YWxfYXRvbVxuICAgICAgfSA6IHZvaWQgMCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICB1c2VfcGF5cGFsX3JlZGlyZWN0X2Zsb3c6ICEhKChqID0gYSA9PSBudWxsID8gdm9pZCAwIDogYS5zZXR0aW5ncykgIT0gbnVsbCAmJiBqLnVzZVJlZGlyZWN0RmxvdyksXG4gICAgICAgIGZyb250ZW5kX3Rva2VuX2Zvcl9yZWRpcmVjdF9mbG93OiBmXG4gICAgICB9LFxuICAgICAgLi4uZFxuICAgIH0sIG0gPSBuZXcgVVJMKFwiL2FwcC9wcmUtYWN0aW9uL3N0YXJ0L1wiLCB0LmJhc2VVcmwpLnRvU3RyaW5nKCksIF8gPSBidG9hKEpTT04uc3RyaW5naWZ5KHkpKSwgdiA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgc3Q6IHMudG9rZW4sXG4gICAgICByOiBfXG4gICAgfSksIHcgPSBgJHttfT8ke3YudG9TdHJpbmcoKX1gO1xuICAgIGlmICgoY2UgPSBhID09IG51bGwgPyB2b2lkIDAgOiBhLnNldHRpbmdzKSAhPSBudWxsICYmIGNlLnVzZVJlZGlyZWN0RmxvdylcbiAgICAgIHRocm93IEsoXCJTdGFydGluZyByZWRpcmVjdCBtb2RlIGZvciBQYXlQYWwuLi5cIiksIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gdywgYXdhaXQgbnQoMjAgKiAxZTMpLCBuZXcgRXJyb3IoXCJQYXlwYWwgZmxvdyB0aW1lZCBvdXQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICBLKFwiU3RhcnRpbmcgcG9wdXAgbW9kZSBmb3IgUGF5UGFsLi4uXCIpLCBLKFwiT3BlbmluZyBwYXlwYWwgaWZyYW1lLi4uXCIpO1xuICAgIGNvbnN0IGIgPSBhd2FpdCBjbyhcbiAgICAgIFwiUGF5UGFsXCIsXG4gICAgICBpLFxuICAgICAgZixcbiAgICAgIHdcbiAgICApO1xuICAgIEsoXCJQYXlwYWwgZmxvdyByZXN1bHRcIiwgYik7XG4gICAgY29uc3QgRSA9IEh0KGIuaHJlZiksIGsgPSBtbyhiLmhyZWYsIFwiY2F0dFwiKTtcbiAgICBpZiAoIWspXG4gICAgICB0aHJvdyBmdChcIkNoZWNrb3V0IGF0dGVtcHQgSUQgbm90IGZvdW5kIGluIHJlZGlyZWN0IFVSTDpcIiwgYi5ocmVmKSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgYXR0ZW1wdCBJRCBub3QgZm91bmQgaW4gcmVkaXJlY3QgVVJMXCIpO1xuICAgIEsoYENvbmZpcm1pbmcgcGF5bWVudCBmbG93IHVzaW5nIHZhdWx0IElEICR7RX1gKTtcbiAgICBjb25zdCBPID0gYXdhaXQgRyhpLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IHMudG9rZW4sXG4gICAgICB0aGVpcl9wbV9pZDogRSxcbiAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IGggPyBrIDogdm9pZCAwXG4gICAgfSk7XG4gICAgaWYgKEsoXCJDb25maXJtIHBheW1lbnQgZmxvdyByZXN1bHRcIiwgTyksIHMubW9kZSA9PT0gXCJzZXR1cFwiKVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbW9kZTogXCJzZXR1cFwiLFxuICAgICAgICByZXN1bHQ6IHtcbiAgICAgICAgICBwYXltZW50X21ldGhvZF9pZDogTy5wYXltZW50X21ldGhvZHNbMF0uaWRcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICBpZiAoIU8ucGF5X2ZpcnN0X3N1Y2Nlc3NfcmVzcG9uc2UpXG4gICAgICB0aHJvdyBmdChcIkNoZWNrb3V0IGZhaWxlZCwgbm8gcGF5LWZpcnN0IHN1Y2Nlc3MgcmVzcG9uc2U6XCIsIE8pLCBuZXcgRXJyb3IoXCJDaGVja291dCBmYWlsZWQsIHBsZWFzZSB0cnkgYWdhaW4gd2l0aCBhbm90aGVyIHBheW1lbnQgbWV0aG9kLlwiKTtcbiAgICByZXR1cm4ge1xuICAgICAgbW9kZTogXCJjaGVja291dFwiLFxuICAgICAgcmVzdWx0OiBPLnBheV9maXJzdF9zdWNjZXNzX3Jlc3BvbnNlXG4gICAgfTtcbiAgfVxuKSwgJGUgPSAoe1xuICBnYXRld2F5OiB0LFxuICBnYXRld2F5TWVyY2hhbnRJZDogbixcbiAgbWVyY2hhbnROYW1lOiBlLFxuICBtZXJjaGFudElkOiByLFxuICBpbml0aWFsUHJldmlldzogYSxcbiAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogaSxcbiAgcHJlZmlsbDogc1xufSkgPT4ge1xuICB2YXIgZiwgaDtcbiAgY29uc3QgYyA9ICgoZiA9IGkgPT0gbnVsbCA/IHZvaWQgMCA6IGkuYW1vdW50KSA9PSBudWxsID8gdm9pZCAwIDogZi5hbW91bnRBdG9tKSA/PyAoYSA9PSBudWxsID8gdm9pZCAwIDogYS5hbW91bnRBdG9tKSA/PyAwLCBsID0gTWF0aC5tYXgoYyAvIDEwMCwgMCksIHUgPSAoKChoID0gaSA9PSBudWxsID8gdm9pZCAwIDogaS5hbW91bnQpID09IG51bGwgPyB2b2lkIDAgOiBoLmN1cnJlbmN5KSA/PyAocyA9PSBudWxsID8gdm9pZCAwIDogcy5jdXJyZW5jeSkgPz8gYS5jdXJyZW5jeSkudG9VcHBlckNhc2UoKSwgZCA9IHtcbiAgICBhcGlWZXJzaW9uOiAyLFxuICAgIGFwaVZlcnNpb25NaW5vcjogMCxcbiAgICBhbGxvd2VkUGF5bWVudE1ldGhvZHM6IFtcbiAgICAgIHtcbiAgICAgICAgdHlwZTogXCJDQVJEXCIsXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBhbGxvd2VkQXV0aE1ldGhvZHM6IFtcIlBBTl9PTkxZXCIsIFwiQ1JZUFRPR1JBTV8zRFNcIl0sXG4gICAgICAgICAgYWxsb3dlZENhcmROZXR3b3JrczogW1wiQU1FWFwiLCBcIkRJU0NPVkVSXCIsIFwiSU5URVJBQ1wiLCBcIkpDQlwiLCBcIk1BU1RFUkNBUkRcIiwgXCJWSVNBXCJdLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUmVxdWlyZWQ6ICEwLFxuICAgICAgICAgIGJpbGxpbmdBZGRyZXNzUGFyYW1ldGVyczoge1xuICAgICAgICAgICAgZm9ybWF0OiBcIkZVTExcIlxuICAgICAgICAgIH0sXG4gICAgICAgICAgYWxsb3dDcmVkaXRDYXJkczogITAsXG4gICAgICAgICAgYWxsb3dQcmVwYWlkQ2FyZHM6ICEwXG4gICAgICAgIH0sXG4gICAgICAgIHRva2VuaXphdGlvblNwZWNpZmljYXRpb246IHtcbiAgICAgICAgICB0eXBlOiBcIlBBWU1FTlRfR0FURVdBWVwiLFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgIGdhdGV3YXk6IHQsXG4gICAgICAgICAgICBnYXRld2F5TWVyY2hhbnRJZDogblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIF0sXG4gICAgZW1haWxSZXF1aXJlZDogITAsXG4gICAgbWVyY2hhbnRJbmZvOiB7XG4gICAgICAvLyBQUk9EIGVudiB3aWxsIG5lZWQgdGhpc1xuICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXJzLmdvb2dsZS5jb20vcGF5L2FwaS93ZWIvcmVmZXJlbmNlL3JlcXVlc3Qtb2JqZWN0cyNNZXJjaGFudEluZm9cbiAgICAgIG1lcmNoYW50SWQ6IHIgPz8gXCJcIixcbiAgICAgIG1lcmNoYW50TmFtZTogZVxuICAgIH0sXG4gICAgdHJhbnNhY3Rpb25JbmZvOiB7XG4gICAgICBjb3VudHJ5Q29kZTogXCJVU1wiLFxuICAgICAgY3VycmVuY3lDb2RlOiB1LFxuICAgICAgdG90YWxQcmljZVN0YXR1czogaSAhPSBudWxsICYmIGkucGVuZGluZyA/IFwiRVNUSU1BVEVEXCIgOiBcIkZJTkFMXCIsXG4gICAgICB0b3RhbFByaWNlOiBsLnRvRml4ZWQoMilcbiAgICB9XG4gIH07XG4gIHJldHVybiBpICE9IG51bGwgJiYgaS5nb29nbGVQYXlQYXltZW50UmVxdWVzdCA/IHsgLi4uZCwgLi4uaS5nb29nbGVQYXlQYXltZW50UmVxdWVzdCB9IDogZDtcbn0sIFh0ID0gKCkgPT4gbmV3IFByb21pc2UoKHQsIG4pID0+IHtcbiAgY29uc3QgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gIGUuc3JjID0gXCJodHRwczovL3BheS5nb29nbGUuY29tL2dwL3AvanMvcGF5LmpzXCIsIGUuYXN5bmMgPSAhMCwgZS5vbmxvYWQgPSAoKSA9PiB0KCksIGUub25lcnJvciA9ICgpID0+IG4obmV3IEVycm9yKFwiRmFpbGVkIHRvIGxvYWQgR29vZ2xlIFBheSBTREtcIikpLCBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpO1xufSk7XG5sZXQgcWUgPSBudWxsO1xuY29uc3QgZW4gPSAodCkgPT4gdCA9PT0gZXQgfHwgdCA9PT0gd2luZG93LmxvY2F0aW9uLm9yaWdpbiA/IFwiUFJPRFVDVElPTlwiIDogXCJURVNUXCIsIHplID0gKHQsIG4pID0+IHtcbiAgY29uc3QgZSA9IGVuKHQpO1xuICByZXR1cm4gcWUgPT09IG51bGwgJiYgKHFlID0gbmV3IHdpbmRvdy5nb29nbGUucGF5bWVudHMuYXBpLlBheW1lbnRzQ2xpZW50KHtcbiAgICBlbnZpcm9ubWVudDogZSxcbiAgICBtZXJjaGFudEluZm86IG4ubWVyY2hhbnRJbmZvXG4gIH0pKSwgcWU7XG59LCBXbyA9ICh0KSA9PiB7XG4gIGNvbnN0IG4gPSB0LnJlcXVpcmVkX3VzZXJfYWN0aW9ucy5maW5kKChlKSA9PiBlLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiKTtcbiAgcmV0dXJuIG4gPyBEdC5wYXJzZShuKSA6IG51bGw7XG59LCB0biA9ICh0LCBuKSA9PiB7XG4gIHZhciBhLCBpLCBzLCBjO1xuICBjb25zdCBlID0geyAuLi50IH0sIHIgPSAoaSA9IChhID0gbi5wYXltZW50TWV0aG9kRGF0YSkgPT0gbnVsbCA/IHZvaWQgMCA6IGEuaW5mbykgPT0gbnVsbCA/IHZvaWQgMCA6IGkuYmlsbGluZ0FkZHJlc3M7XG4gIGlmIChyKSB7XG4gICAgY29uc3QgW2wsIC4uLnVdID0gKChjID0gKHMgPSByLm5hbWUpID09IG51bGwgPyB2b2lkIDAgOiBzLnRyaW0oKSkgPT0gbnVsbCA/IHZvaWQgMCA6IGMuc3BsaXQoL1xccysvKSkgPz8gW10sIGQgPSB1LmpvaW4oXCIgXCIpIHx8IHZvaWQgMDtcbiAgICBlW3AuRU1BSUxdID0gZVtwLkVNQUlMXSB8fCBuLmVtYWlsIHx8IFwib3BfdW5maWxsZWRAZ2V0b3BlbnBheS5jb21cIiwgZVtwLkNPVU5UUlldID0gZVtwLkNPVU5UUlldIHx8IHIuY291bnRyeUNvZGUgfHwgXCJVU1wiLCBlW3AuQUREUkVTU10gPSBlW3AuQUREUkVTU10gfHwgci5hZGRyZXNzMSB8fCBcIlwiLCBlW3AuQ0lUWV0gPSBlW3AuQ0lUWV0gfHwgci5sb2NhbGl0eSB8fCBcIlwiLCBlW3AuWklQX0NPREVdID0gZVtwLlpJUF9DT0RFXSB8fCByLnBvc3RhbENvZGUgfHwgXCIwMDAwMFwiLCBlW3AuU1RBVEVdID0gZVtwLlNUQVRFXSB8fCByLmFkbWluaXN0cmF0aXZlQXJlYSB8fCBcIlwiLCBlW3AuRklSU1RfTkFNRV0gPSBlW3AuRklSU1RfTkFNRV0gfHwgbCB8fCBcIl9PUF9VTktOT1dOXCIsIGVbcC5MQVNUX05BTUVdID0gZVtwLkxBU1RfTkFNRV0gfHwgZCB8fCBcIl9PUF9VTktOT1dOXCI7XG4gIH1cbiAgcmV0dXJuIGU7XG59LCB7IGxvZ19fOiB6LCBlcnJfXzogbGUgfSA9IFAoXCJhd3gtZ29vZ2xlLXBheVwiKSwgSm8gPSBzZShcbiAgYXN5bmMgKHsgY29udGV4dDogdCwgZm9ybUNhbGxiYWNrczogbiB9KSA9PiB7XG4gICAgdmFyIGYsIGg7XG4gICAgY29uc3QgZSA9IHtcbiAgICAgIHByb2Nlc3NvcjogVi5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCByID0gWSh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIEJ0KTtcbiAgICBpZiAoIXIpXG4gICAgICByZXR1cm4gZTtcbiAgICB6KFwiR29vZ2xlIFBheSBDUE1cIiwgcik7XG4gICAgY29uc3QgYSA9IHIubWV0YWRhdGE7XG4gICAgaWYgKCFhLnByb2Nlc3Nvcl9hY2NvdW50X2lkKVxuICAgICAgcmV0dXJuIGxlKFwiTm8gZ2F0ZXdheSBtZXJjaGFudCBJRCBmb3VuZCBpbiBwcm9jZXNzb3IgYWNjb3VudFwiKSwgZTtcbiAgICBpZiAoeihcIkxvYWRpbmcgR29vZ2xlIFBheSBTREsuLi5cIiksIGF3YWl0IFh0KCksICEoKGggPSAoZiA9IHdpbmRvdy5nb29nbGUpID09IG51bGwgPyB2b2lkIDAgOiBmLnBheW1lbnRzKSAhPSBudWxsICYmIGguYXBpKSlcbiAgICAgIHJldHVybiBsZShcIkdvb2dsZSBQYXkgU0RLIG5vdCBsb2FkZWQgcHJvcGVybHlcIiksIGU7XG4gICAgaWYgKGVuKHQuYmFzZVVybCkgPT09IFwiUFJPRFVDVElPTlwiICYmICFhLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQpXG4gICAgICByZXR1cm4gbGUoXCJHb29nbGUgUGF5IG1lcmNoYW50IElEIGlzIHJlcXVpcmVkIGZvciBwcm9kdWN0aW9uIGVudmlyb25tZW50XCIpLCBlO1xuICAgIHooXCJHb29nbGUgUGF5IFNESyBsb2FkZWRcIiwgd2luZG93Lmdvb2dsZS5wYXltZW50cyk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHkgPSAkZSh7XG4gICAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICAgIGdhdGV3YXlNZXJjaGFudElkOiBhLnByb2Nlc3Nvcl9hY2NvdW50X2lkLFxuICAgICAgICBtZXJjaGFudE5hbWU6IGEucHJvY2Vzc29yX2FjY291bnRfbmFtZSxcbiAgICAgICAgbWVyY2hhbnRJZDogYS5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGluaXRpYWwgcGF5bWVudCByZXF1ZXN0IHRvIGNoZWNrIGF2YWlsYWJpbGl0eS4gQWN0dWFsIGBpbml0aWFsUHJldmlld2Agd2lsbCBiZSB1c2VkIHdoZW4gdGhlIFVJIGlzIHNob3duXG4gICAgICAgIGluaXRpYWxQcmV2aWV3OiB7XG4gICAgICAgICAgYW1vdW50QXRvbTogMCxcbiAgICAgICAgICBjdXJyZW5jeTogXCJVU0RcIlxuICAgICAgICB9XG4gICAgICB9KSwgeyByZXN1bHQ6IG0gfSA9IGF3YWl0IHplKHQuYmFzZVVybCwgeSkuaXNSZWFkeVRvUGF5KFxuICAgICAgICB5XG4gICAgICApO1xuICAgICAgaWYgKCFtKVxuICAgICAgICByZXR1cm4geihcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpLCBlO1xuICAgIH0gY2F0Y2ggKHkpIHtcbiAgICAgIHJldHVybiBsZShcIkVycm9yIGNoZWNraW5nIEdvb2dsZSBQYXkgYXZhaWxhYmlsaXR5XCIsIHkpLCBlO1xuICAgIH1cbiAgICBjb25zdCBzID0gdC5hbnlDZGVDb25uZWN0aW9uLCBjID0gYXdhaXQgTShzKSwgbCA9IGMubW9kZSA9PT0gXCJzZXR1cFwiLCB1ID0gYXdhaXQgX2UocywgYy50b2tlbiwgbCwgdm9pZCAwKSwgZCA9IGFzeW5jICh5KSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBBLmFpcndhbGxleEdvb2dsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IEoodC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLnksXG4gICAgICAgICAgICBpbml0aWFsUHJldmlldzogdVxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChtKSB7XG4gICAgICAgIGxlKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIG0pLCBuLmdldC5vbkNoZWNrb3V0RXJyb3IoKG0gPT0gbnVsbCA/IHZvaWQgMCA6IG0ubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogVi5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGRcbiAgICB9O1xuICB9XG4pLCBIbyA9IGVlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgZm9ybUNhbGxiYWNrczogcixcbiAgICBjdXN0b21QYXJhbXM6IGFcbiAgfSkgPT4ge1xuICAgIHZhciBmLCBoLCB5LCBtLCBfLCB2LCB3O1xuICAgIHooXCJTdGFydGluZyBHb29nbGUgUGF5IGZsb3cuLi5cIik7XG4gICAgY29uc3QgaSA9IFkodC5jaGVja291dFBheW1lbnRNZXRob2RzLCBCdCksIHsgaW5pdGlhbFByZXZpZXc6IHMsIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGMgfSA9IGEsIGwgPSBpLm1ldGFkYXRhO1xuICAgIGlmICghbC5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgY29uc3QgdSA9ICRlKHtcbiAgICAgIGdhdGV3YXk6IFwiYWlyd2FsbGV4XCIsXG4gICAgICBnYXRld2F5TWVyY2hhbnRJZDogbC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgIG1lcmNoYW50TmFtZTogbC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgbWVyY2hhbnRJZDogbC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICBpbml0aWFsUHJldmlldzogcyxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IGNcbiAgICB9KSwgZCA9IHplKHQuYmFzZVVybCwgdSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGIgPSBhd2FpdCBkLmxvYWRQYXltZW50RGF0YSh1KTtcbiAgICAgIHooXCJHb29nbGUgUGF5IFBheW1lbnQgZGF0YVwiLCBiKTtcbiAgICAgIGNvbnN0IEUgPSB0LmFueUNkZUNvbm5lY3Rpb24sIGsgPSBhd2FpdCBNKEUpLCBPID0gdG4oZSwgYiksIGogPSB0ZShcbiAgICAgICAgTyxcbiAgICAgICAgci5nZXQub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgICAgIGEgPT0gbnVsbCA/IHZvaWQgMCA6IGEuZGVmYXVsdEZpZWxkVmFsdWVzXG4gICAgICApLCBjZSA9IChoID0gKGYgPSBiLnBheW1lbnRNZXRob2REYXRhKSA9PSBudWxsID8gdm9pZCAwIDogZi50b2tlbml6YXRpb25EYXRhKSA9PSBudWxsID8gdm9pZCAwIDogaC50b2tlbjtcbiAgICAgIGlmICghY2UpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHBheW1lbnQgdG9rZW4gcmVjZWl2ZWQgZnJvbSBHb29nbGUgUGF5XCIpO1xuICAgICAgY29uc3QgX24gPSBhd2FpdCBoZShFLCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IG4ucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBuLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IGpbcC5FTUFJTF0sXG4gICAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBqW3AuRklSU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IGpbcC5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICAgIHppcF9jb2RlOiBqW3AuWklQX0NPREVdLFxuICAgICAgICAgIGNvdW50cnk6IGpbcC5DT1VOVFJZXVxuICAgICAgICB9XG4gICAgICB9KSwga2UgPSBXbyhfbik7XG4gICAgICB6KFwiU3RhcnQgZmxvdyBuZXh0IGFjdGlvbnNcIiwga2UpO1xuICAgICAgbGV0IHJlID0gYXdhaXQgRyhFLCB7XG4gICAgICAgIHNlY3VyZV90b2tlbjogay50b2tlbixcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogbi5wcm92aWRlcixcbiAgICAgICAgICAvLyBHb29nbGVQYXkncyBlbmNyeXB0ZWRfcGF5bWVudF90b2tlbiBwcm92aWRlZCB0byB2ZXJpZnkgdGhlIGNvbnNlbnQgZmlyc3RcbiAgICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDoga2UgPT0gbnVsbCA/IHZvaWQgMCA6IGtlLmNvbnNlbnRfaWQsXG4gICAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfbWV0aG9kX2RhdGE6IHtcbiAgICAgICAgICAgIHR5cGU6IFwiZ29vZ2xlcGF5XCIsXG4gICAgICAgICAgICBnb29nbGVwYXk6IHtcbiAgICAgICAgICAgICAgcGF5bWVudF9kYXRhX3R5cGU6IFwiZW5jcnlwdGVkX3BheW1lbnRfdG9rZW5cIixcbiAgICAgICAgICAgICAgZW5jcnlwdGVkX3BheW1lbnRfdG9rZW46IGNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIHooXCJbMXN0XSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCByZSk7XG4gICAgICBsZXQgVmUgPSAobSA9ICh5ID0gcmUucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogeVswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IG0uaWQ7XG4gICAgICBjb25zdCBvZSA9IChfID0gcmUucmVxdWlyZWRfdXNlcl9hY3Rpb25zKSA9PSBudWxsID8gdm9pZCAwIDogXy5maW5kKFxuICAgICAgICAoZ2UpID0+IGdlLnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgICApO1xuICAgICAgaWYgKG9lICYmIG9lLnJlZGlyZWN0X3VybCkge1xuICAgICAgICB6KFwiM0RTIFJlcXVpcmVkLCBzdGFydGluZyB2ZXJpZmljYXRpb24uLi5cIiwgb2UpO1xuICAgICAgICBjb25zdCB7IHN0YXR1czogZ2UgfSA9IGF3YWl0IHhlKHtcbiAgICAgICAgICB1cmw6IG9lLnJlZGlyZWN0X3VybCxcbiAgICAgICAgICBiYXNlVXJsOiB0LmJhc2VVcmxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh6KGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtnZX1dYCksIGdlID09PSBJLkNBTkNFTExFRClcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCIzRFMgdmVyaWZpY2F0aW9uIGNhbmNlbGxlZFwiKTtcbiAgICAgICAgaWYgKGdlID09PSBJLkZBSUxVUkUpXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gICAgICB9XG4gICAgICBpZiAob2UgJiYgIVZlICYmIChyZSA9IGF3YWl0IEcoRSwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IGsudG9rZW4sXG4gICAgICAgIHRoZWlyX3BtX2lkOiBvZS50aGVpcl9wbV9pZCxcbiAgICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgICAgcGF5bWVudF9wcm92aWRlcjogbi5wcm92aWRlcixcbiAgICAgICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogb2UuY29uc2VudF9pZFxuICAgICAgICB9XG4gICAgICB9KSwgeihcIlsybmRdIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIHJlKSwgVmUgPSAodyA9ICh2ID0gcmUucGF5bWVudF9tZXRob2RzKSA9PSBudWxsID8gdm9pZCAwIDogdlswXSkgPT0gbnVsbCA/IHZvaWQgMCA6IHcuaWQpLCAhVmUpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgICAgcmV0dXJuIGplKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF3eC1nb29nbGVwYXlcIixcbiAgICAgICAgYW55Q2RlQ29ubmVjdGlvbjogRSxcbiAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgICAgICByZXF1aXJlZEZvcm1GaWVsZHM6IGosXG4gICAgICAgIGNvbmZpcm1SZXN1bHQ6IHJlLFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChiKSB7XG4gICAgICB0aHJvdyBsZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBiKSwgbmV3IEVycm9yKChiID09IG51bGwgPyB2b2lkIDAgOiBiLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksIG5uID0gKCkgPT4gbmV3IFByb21pc2UoKHQsIG4pID0+IHtcbiAgY29uc3QgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzY3JpcHRcIik7XG4gIGUuc3JjID0gXCJodHRwczovL2FwcGxlcGF5LmNkbi1hcHBsZS5jb20vanNhcGkvMS5sYXRlc3QvYXBwbGUtcGF5LXNkay5qc1wiLCBlLmNyb3NzT3JpZ2luID0gXCJhbm9ueW1vdXNcIiwgZS5hc3luYyA9ICEwLCBlLm9ubG9hZCA9ICgpID0+IHQoKSwgZS5vbmVycm9yID0gKCkgPT4gbihuZXcgRXJyb3IoXCJGYWlsZWQgdG8gbG9hZCBBcHBsZSBQYXkgU0RLXCIpKSwgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlKTtcbn0pLCBybiA9ICh0LCBuKSA9PiB7XG4gIGNvbnN0IGUgPSBuLnRva2VuLnBheW1lbnRNZXRob2QuYmlsbGluZ0NvbnRhY3QsIHIgPSBuLmJpbGxpbmdDb250YWN0LCBhID0gbi5zaGlwcGluZ0NvbnRhY3QsIGkgPSB7IC4uLnQgfTtcbiAgcmV0dXJuIChlIHx8IHIgfHwgYSkgJiYgKGlbcC5FTUFJTF0gPSBpW3AuRU1BSUxdIHx8IChlID09IG51bGwgPyB2b2lkIDAgOiBlLmVtYWlsQWRkcmVzcykgfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZW1haWxBZGRyZXNzKSB8fCAoYSA9PSBudWxsID8gdm9pZCAwIDogYS5lbWFpbEFkZHJlc3MpIHx8IFwib3BfdW5maWxsZWRAZW1haWwuY29tXCIsIGlbcC5DT1VOVFJZXSA9IGlbcC5DT1VOVFJZXSB8fCAoZSA9PSBudWxsID8gdm9pZCAwIDogZS5jb3VudHJ5Q29kZSkgfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuY291bnRyeUNvZGUpIHx8IChhID09IG51bGwgPyB2b2lkIDAgOiBhLmNvdW50cnlDb2RlKSB8fCBcIlVTXCIsIGlbcC5aSVBfQ09ERV0gPSBpW3AuWklQX0NPREVdIHx8IChlID09IG51bGwgPyB2b2lkIDAgOiBlLnBvc3RhbENvZGUpIHx8IChyID09IG51bGwgPyB2b2lkIDAgOiByLnBvc3RhbENvZGUpIHx8IChhID09IG51bGwgPyB2b2lkIDAgOiBhLnBvc3RhbENvZGUpIHx8IFwiMDAwMDBcIiwgaVtwLkZJUlNUX05BTUVdID0gaVtwLkZJUlNUX05BTUVdIHx8IChlID09IG51bGwgPyB2b2lkIDAgOiBlLmdpdmVuTmFtZSkgfHwgKHIgPT0gbnVsbCA/IHZvaWQgMCA6IHIuZ2l2ZW5OYW1lKSB8fCAoYSA9PSBudWxsID8gdm9pZCAwIDogYS5naXZlbk5hbWUpIHx8IFwiX09QX1VOS05PV05cIiwgaVtwLkxBU1RfTkFNRV0gPSBpW3AuTEFTVF9OQU1FXSB8fCAoZSA9PSBudWxsID8gdm9pZCAwIDogZS5mYW1pbHlOYW1lKSB8fCAociA9PSBudWxsID8gdm9pZCAwIDogci5mYW1pbHlOYW1lKSB8fCAoYSA9PSBudWxsID8gdm9pZCAwIDogYS5mYW1pbHlOYW1lKSB8fCBcIl9PUF9VTktOT1dOXCIpLCBpO1xufTtcbnokMS5vYmplY3Qoe1xuICBkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBtZXNzYWdlSGVhZGVyczogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gICAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLmFueSgpKSxcbiAgICBtZXNzYWdlVHlwZTogeiQxLnN0cmluZygpLFxuICAgIG1lc3NhZ2VCb2R5OiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKVxuICB9KSxcbiAgb3JpZ2luOiB6JDEubGl0ZXJhbChcImh0dHBzOi8vYXBwbGVwYXkuY2RuLWFwcGxlLmNvbVwiKVxufSk7XG5jb25zdCBvbiA9ICh7XG4gIHRvdGFsOiB0LFxuICBwcmVmaWxsOiBuXG59KSA9PiB7XG4gIHZhciByO1xuICBpZiAobi5tb2RlID09PSBcInNldHVwXCIpXG4gICAgcmV0dXJuIHtcbiAgICAgIHBheW1lbnREZXNjcmlwdGlvbjogXCJTZXR1cCByZWN1cnJpbmcgcGF5bWVudFwiLFxuICAgICAgcmVndWxhckJpbGxpbmc6IHtcbiAgICAgICAgYW1vdW50OiB0LmFtb3VudCxcbiAgICAgICAgbGFiZWw6IFwiU2V0dXAgcmVjdXJyaW5nIHBheW1lbnRcIixcbiAgICAgICAgcGF5bWVudFRpbWluZzogXCJyZWN1cnJpbmdcIixcbiAgICAgICAgdHlwZTogXCJmaW5hbFwiXG4gICAgICB9LFxuICAgICAgLy8gVE9ETzogdGhpcyBzaG91bGQgYmUgYmlsbGluZyBwb3J0YWwgdXJsXG4gICAgICAvLyBodHRwczovL2RldmVsb3Blci5hcHBsZS5jb20vZG9jdW1lbnRhdGlvbi9wYXNza2l0L3BrcmVjdXJyaW5ncGF5bWVudHJlcXVlc3QvbWFuYWdlbWVudHVybCNEaXNjdXNzaW9uXG4gICAgICAvLyBUaGlzIGlzIHByb2JhYmx5IHVzZWQgd2hlbiB1c2VyIHJlbW92ZSBhIGNhcmQgZnJvbSB0aGVpciBBcHBsZVBheSB3YWxsZXQuXG4gICAgICAvLyBDdXJyZW50eSBzZXQgdG8gY2hlY2tvdXQgc2Vzc2lvbiB1cmwgdG8gc2F0aXNmeSBBcHBsZVBheSB0eXBlc1xuICAgICAgbWFuYWdlbWVudFVSTDogbmV3IFVSTChgL3BheS8ke24udG9rZW59YCwgZXQpLnRvU3RyaW5nKClcbiAgICB9O1xuICBjb25zdCBlID0gKHIgPSBuLmxpbmVfaXRlbXMpID09IG51bGwgPyB2b2lkIDAgOiByWzBdO1xuICBpZiAoZSlcbiAgICByZXR1cm4ge1xuICAgICAgcGF5bWVudERlc2NyaXB0aW9uOiAoZSA9PSBudWxsID8gdm9pZCAwIDogZS5kZXNjcmlwdGlvbikgPz8gXCJcIixcbiAgICAgIHJlZ3VsYXJCaWxsaW5nOiB7XG4gICAgICAgIGFtb3VudDogdC5hbW91bnQsXG4gICAgICAgIGxhYmVsOiAoZSA9PSBudWxsID8gdm9pZCAwIDogZS5kZXNjcmlwdGlvbikgPz8gXCJcIixcbiAgICAgICAgcmVjdXJyaW5nUGF5bWVudEludGVydmFsVW5pdDogZSA9PSBudWxsID8gdm9pZCAwIDogZS5iaWxsaW5nX2ludGVydmFsLFxuICAgICAgICByZWN1cnJpbmdQYXltZW50SW50ZXJ2YWxDb3VudDogKGUgPT0gbnVsbCA/IHZvaWQgMCA6IGUuYmlsbGluZ19pbnRlcnZhbF9jb3VudCkgPz8gdm9pZCAwLFxuICAgICAgICBwYXltZW50VGltaW5nOiBcInJlY3VycmluZ1wiLFxuICAgICAgICB0eXBlOiBcImZpbmFsXCJcbiAgICAgIH0sXG4gICAgICBtYW5hZ2VtZW50VVJMOiBgaHR0cHM6Ly9jZGUuZ2V0b3BlbnBheS5jb20vcGF5LyR7bi50b2tlbn1gXG4gICAgfTtcbn0sIGFuID0gKHtcbiAgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogdCxcbiAgaW5pdGlhbFByZXZpZXc6IG4sXG4gIHByZWZpbGw6IGUsXG4gIGRlZmF1bHRMYWJlbDogciA9IFwiVG90YWxcIlxufSkgPT4ge1xuICB2YXIgYywgbDtcbiAgY29uc3QgYSA9ICgoKGMgPSB0ID09IG51bGwgPyB2b2lkIDAgOiB0LmFtb3VudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGMuY3VycmVuY3kpID8/IChlID09IG51bGwgPyB2b2lkIDAgOiBlLmN1cnJlbmN5KSA/PyBuLmN1cnJlbmN5KS50b1VwcGVyQ2FzZSgpLCBzID0gKCgoKGwgPSB0ID09IG51bGwgPyB2b2lkIDAgOiB0LmFtb3VudCkgPT0gbnVsbCA/IHZvaWQgMCA6IGwuYW1vdW50QXRvbSkgPz8gKG4gPT0gbnVsbCA/IHZvaWQgMCA6IG4uYW1vdW50QXRvbSkgPz8gMCkgLyAxMDApLnRvRml4ZWQoMik7XG4gIHJldHVybiB7XG4gICAgY3VycmVuY3lDb2RlOiBhLFxuICAgIHRvdGFsOiB7XG4gICAgICBsYWJlbDogKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQubGFiZWwpID8/IHIgPz8gXCJUb3RhbFwiLFxuICAgICAgdHlwZTogdCAhPSBudWxsICYmIHQucGVuZGluZyA/IFwicGVuZGluZ1wiIDogXCJmaW5hbFwiLFxuICAgICAgYW1vdW50OiBzXG4gICAgfVxuICB9O1xufSwgeyBsb2dfXzogUmUgfSA9IFAoXCJhd3gtYXBwbGUtcGF5XCIpO1xuYXN5bmMgZnVuY3Rpb24gWm8odCwgbikge1xuICB0cnkge1xuICAgIGNvbnN0IHIgPSAoYXdhaXQgR3Qobi5jb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogbi5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgYWlyd2FsbGV4X3BheW1lbnRfc2Vzc2lvbjoge1xuICAgICAgICAgIHZhbGlkYXRpb25fdXJsOiB0LnZhbGlkYXRpb25VUkwsXG4gICAgICAgICAgaW5pdGlhdGl2ZV9jb250ZXh0OiB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWUsXG4gICAgICAgICAgdGhlaXJfYWNjb3VudF9pZDogbi5wcm9jZXNzb3JBY2NvdW50LnByb2Nlc3Nvcl9hY2NvdW50X2lkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KSkubmV4dF9hY3Rpb25fbWV0YWRhdGEsIGEgPSByID09IG51bGwgPyB2b2lkIDAgOiByLmFwcGxlX3BheV9zZXNzaW9uO1xuICAgIGlmICghYSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHNlc3Npb24gZGF0YSByZWNlaXZlZCBmcm9tIHBheW1lbnQgZmxvd1wiKTtcbiAgICBuLnNlc3Npb24uY29tcGxldGVNZXJjaGFudFZhbGlkYXRpb24oYSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICB0aHJvdyBuLnNlc3Npb24uYWJvcnQoKSwgZTtcbiAgfVxufVxuYXN5bmMgZnVuY3Rpb24gQm8odCwgbikge1xuICBpZiAoIXQucmVkaXJlY3RfdXJsKVxuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHJlZGlyZWN0IFVSTCBmb3VuZFwiKTtcbiAgUmUoXCIzRFMgUmVxdWlyZWQsIHN0YXJ0aW5nIHZlcmlmaWNhdGlvbi4uLlwiLCB0KTtcbiAgY29uc3QgeyBzdGF0dXM6IGUgfSA9IGF3YWl0IHhlKHtcbiAgICB1cmw6IHQucmVkaXJlY3RfdXJsLFxuICAgIGJhc2VVcmw6IG4uYmFzZVVybFxuICB9KTtcbiAgaWYgKFJlKGDilbAgM0RTIHZlcmlmaWNhdGlvbiBjb21wbGV0ZWQgW1N0YXR1czogJHtlfV1gKSwgZSA9PT0gSS5DQU5DRUxMRUQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBjYW5jZWxsZWRcIik7XG4gIGlmIChlID09PSBJLkZBSUxVUkUpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiM0RTIHZlcmlmaWNhdGlvbiBmYWlsZWRcIik7XG4gIGNvbnN0IHIgPSBhd2FpdCBHKG4uY29ubmVjdGlvbiwge1xuICAgIHNlY3VyZV90b2tlbjogbi5wcmVmaWxsLnRva2VuLFxuICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgdGhlaXJfcG1faWQ6IHQudGhlaXJfcG1faWQsXG4gICAgICBhaXJ3YWxsZXhfY29uc2VudF9pZDogdC5jb25zZW50X2lkLFxuICAgICAgcGF5bWVudF9wcm92aWRlcjogbi5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXJcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gUmUoXCJbMm5kXSBDb25maXJtIHBheW1lbnQgZmxvdyByZXNwb25zZVwiLCByKSwgcjtcbn1cbmFzeW5jIGZ1bmN0aW9uIFFvKHQsIG4pIHtcbiAgdmFyIGUsIHIsIGEsIGksIHM7XG4gIHRyeSB7XG4gICAgY29uc3QgYyA9IHQucGF5bWVudCwgbCA9IHJuKG4ubm9uQ2RlRm9ybUlucHV0cywgYyksIHUgPSB0ZShcbiAgICAgIGwsXG4gICAgICBuLmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yLFxuICAgICAgbi5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICApLCBoID0gKGF3YWl0IGhlKG4uY29ubmVjdGlvbiwge1xuICAgICAgcGF5bWVudF9wcm92aWRlcjogbi5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogbi5jaGVja291dFBheW1lbnRNZXRob2QsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IHVbcC5FTUFJTF0sXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogdVtwLkZJUlNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2xhc3RfbmFtZTogdVtwLkxBU1RfTkFNRV0sXG4gICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICB6aXBfY29kZTogdVtwLlpJUF9DT0RFXSxcbiAgICAgICAgY291bnRyeTogdVtwLkNPVU5UUlldXG4gICAgICB9XG4gICAgfSkpLnJlcXVpcmVkX3VzZXJfYWN0aW9uc1swXS5jb25zZW50X2lkO1xuICAgIGlmICghaClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGNvbnNlbnQgSUQgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgbGV0IHkgPSBhd2FpdCBHKG4uY29ubmVjdGlvbiwge1xuICAgICAgc2VjdXJlX3Rva2VuOiBuLnByZWZpbGwudG9rZW4sXG4gICAgICBwcm9jZXNzb3Jfc3BlY2lmaWNfbWV0YWRhdGE6IHtcbiAgICAgICAgcGF5bWVudF9wcm92aWRlcjogbi5jaGVja291dFBheW1lbnRNZXRob2QucHJvdmlkZXIsXG4gICAgICAgIGFpcndhbGxleF9jb25zZW50X2lkOiBoLFxuICAgICAgICBhaXJ3YWxsZXhfcGF5bWVudF9tZXRob2RfZGF0YToge1xuICAgICAgICAgIHR5cGU6IFwiYXBwbGVwYXlcIixcbiAgICAgICAgICBhcHBsZXBheToge1xuICAgICAgICAgICAgcGF5bWVudF9kYXRhX3R5cGU6IFwiZW5jcnlwdGVkX3BheW1lbnRfdG9rZW5cIixcbiAgICAgICAgICAgIGVuY3J5cHRlZF9wYXltZW50X3Rva2VuOiBKU09OLnN0cmluZ2lmeShjLnRva2VuKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIFJlKFwiWzFzdF0gQ29uZmlybSBwYXltZW50IGZsb3cgcmVzcG9uc2VcIiwgeSk7XG4gICAgbGV0IG0gPSAociA9IChlID0geS5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiBlWzBdKSA9PSBudWxsID8gdm9pZCAwIDogci5pZDtcbiAgICBjb25zdCBfID0gKGEgPSB5LnJlcXVpcmVkX3VzZXJfYWN0aW9ucykgPT0gbnVsbCA/IHZvaWQgMCA6IGEuZmluZChcbiAgICAgICh3KSA9PiB3LnR5cGUgPT09IFwiYWlyd2FsbGV4X3BheW1lbnRfY29uc2VudFwiXG4gICAgKTtcbiAgICBpZiAoXyAhPSBudWxsICYmIF8ucmVkaXJlY3RfdXJsICYmIF8uY29uc2VudF9pZCAmJiBfLnRoZWlyX3BtX2lkICYmICh5ID0gYXdhaXQgQm8oXywgbiksIG0gPSAocyA9IChpID0geS5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiBpWzBdKSA9PSBudWxsID8gdm9pZCAwIDogcy5pZCksICFtKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gUE0gSUQgZm91bmRcIik7XG4gICAgY29uc3QgdiA9IHtcbiAgICAgIHN0YXR1czogQXBwbGVQYXlTZXNzaW9uLlNUQVRVU19TVUNDRVNTXG4gICAgfTtcbiAgICByZXR1cm4gbi5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudCh2KSwgamUoe1xuICAgICAgbG9nUHJlZml4OiBcImF3eC1hcHBsZXBheVwiLFxuICAgICAgYW55Q2RlQ29ubmVjdGlvbjogbi5jb25uZWN0aW9uLFxuICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHJlcXVpcmVkRm9ybUZpZWxkczogdSxcbiAgICAgIGNvbmZpcm1SZXN1bHQ6IHksXG4gICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgfSk7XG4gIH0gY2F0Y2ggKGMpIHtcbiAgICBjb25zdCBsID0ge1xuICAgICAgc3RhdHVzOiBBcHBsZVBheVNlc3Npb24uU1RBVFVTX0ZBSUxVUkVcbiAgICB9O1xuICAgIHRocm93IG4uc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQobCksIGM7XG4gIH1cbn1cbmNvbnN0IHsgbG9nX186IHVlLCBlcnJfXzogSmUgfSA9IFAoXCJhd3gtYXBwbGUtcGF5XCIpLCBYbyA9IHNlKFxuICBhc3luYyAoeyBjb250ZXh0OiB0LCBmb3JtQ2FsbGJhY2tzOiBuIH0pID0+IHtcbiAgICBjb25zdCBlID0ge1xuICAgICAgcHJvY2Vzc29yOiBWLkVudW0uYWlyd2FsbGV4LFxuICAgICAgaXNBdmFpbGFibGU6ICExLFxuICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICAgICAgfVxuICAgIH0sIHIgPSBZKHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgWnQpO1xuICAgIGlmICghcilcbiAgICAgIHJldHVybiBlO1xuICAgIHVlKFwiTG9hZGluZyBBcHBsZSBQYXkgU0RLLi4uXCIpO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBubigpLCB1ZShcIkFwcGxlIFBheSBTREsgbG9hZGVkIHN1Y2Nlc3NmdWxseVwiKTtcbiAgICB9IGNhdGNoIChmKSB7XG4gICAgICByZXR1cm4gSmUoXCJGYWlsZWQgdG8gbG9hZCBBcHBsZSBQYXkgU0RLXCIsIGYpLCBlO1xuICAgIH1cbiAgICBpZiAoIXdpbmRvdy5BcHBsZVBheVNlc3Npb24gfHwgIUFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSlcbiAgICAgIHJldHVybiB1ZShcIkFwcGxlIFBheSBpcyBub3QgYXZhaWxhYmxlIG9uIHRoaXMgZGV2aWNlL2Jyb3dzZXJcIiksIGU7XG4gICAgaWYgKHVlKFwiQXBwbGUgUGF5IExvYWRlZFwiKSwgIWF3YWl0IEFwcGxlUGF5U2Vzc2lvbi5jYW5NYWtlUGF5bWVudHMoKSlcbiAgICAgIHJldHVybiB1ZShcIk5vIGFjdGl2ZSBjYXJkcyBhdmFpbGFibGUgZm9yIEFwcGxlIFBheVwiKSwgZTtcbiAgICBpZiAoIXIubWV0YWRhdGEucHJvY2Vzc29yX2FjY291bnRfaWQpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBnYXRld2F5IG1lcmNoYW50IElEIGZvdW5kIGluIHByb2Nlc3NvciBhY2NvdW50XCIpO1xuICAgIGNvbnN0IHMgPSB0LmFueUNkZUNvbm5lY3Rpb24sIGMgPSBhd2FpdCBNKHMpLCBsID0gYy5tb2RlID09PSBcInNldHVwXCIsIHUgPSBhd2FpdCBfZShzLCBjLnRva2VuLCBsLCB2b2lkIDApLCBkID0gYXN5bmMgKGYpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IEEuYWlyd2FsbGV4QXBwbGVQYXkucnVuKHtcbiAgICAgICAgICBjb250ZXh0OiB0LFxuICAgICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogcixcbiAgICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBKKHQuZm9ybURpdiksXG4gICAgICAgICAgZm9ybUNhbGxiYWNrczogbixcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLmYsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlldzogdVxuICAgICAgICAgIH0sXG4gICAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIH0pO1xuICAgICAgfSBjYXRjaCAoaCkge1xuICAgICAgICBKZShcIkFwcGxlIFBheSBwYXltZW50IGVycm9yXCIsIGgpLCBuLmdldC5vbkNoZWNrb3V0RXJyb3IoKGggPT0gbnVsbCA/IHZvaWQgMCA6IGgubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogVi5FbnVtLmFpcndhbGxleCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGRcbiAgICB9O1xuICB9XG4pLCBlYSA9IGVlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgY3VzdG9tUGFyYW1zOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IGFcbiAgfSkgPT4ge1xuICAgIHZhciB2O1xuICAgIGNvbnN0IGkgPSBZKHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgWnQpLCB7IG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHMsIGluaXRpYWxQcmV2aWV3OiBjIH0gPSByLCBsID0gdC5hbnlDZGVDb25uZWN0aW9uLCB1ID0gYXdhaXQgTShsKSwgZCA9IHUubW9kZSA9PT0gXCJzZXR1cFwiLCB7IGN1cnJlbmN5Q29kZTogZiwgdG90YWw6IGggfSA9IGFuKHtcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHMsXG4gICAgICBpbml0aWFsUHJldmlldzogYyxcbiAgICAgIGRlZmF1bHRMYWJlbDogKHYgPSBpID09IG51bGwgPyB2b2lkIDAgOiBpLm1ldGFkYXRhKSA9PSBudWxsID8gdm9pZCAwIDogdi5wcm9jZXNzb3JfYWNjb3VudF9uYW1lXG4gICAgfSksIHkgPSB7XG4gICAgICBjb3VudHJ5Q29kZTogXCJVU1wiLFxuICAgICAgY3VycmVuY3lDb2RlOiBmLFxuICAgICAgcmVxdWlyZWRCaWxsaW5nQ29udGFjdEZpZWxkczogW1wiZW1haWxcIiwgXCJwb3N0YWxBZGRyZXNzXCIsIFwibmFtZVwiXSxcbiAgICAgIHJlcXVpcmVkU2hpcHBpbmdDb250YWN0RmllbGRzOiBbXCJlbWFpbFwiXSxcbiAgICAgIHN1cHBvcnRlZE5ldHdvcmtzOiBbXCJ2aXNhXCIsIFwibWFzdGVyQ2FyZFwiLCBcImFtZXhcIiwgXCJkaXNjb3ZlclwiXSxcbiAgICAgIG1lcmNoYW50Q2FwYWJpbGl0aWVzOiBbXG4gICAgICAgIFwic3VwcG9ydHMzRFNcIixcbiAgICAgICAgXCJzdXBwb3J0c0NyZWRpdFwiLFxuICAgICAgICBcInN1cHBvcnRzRGViaXRcIixcbiAgICAgICAgXCJzdXBwb3J0c0VNVlwiXG4gICAgICBdLFxuICAgICAgdG90YWw6IGgsXG4gICAgICByZWN1cnJpbmdQYXltZW50UmVxdWVzdDogb24oe1xuICAgICAgICB0b3RhbDogaCxcbiAgICAgICAgcHJlZmlsbDogdVxuICAgICAgfSksXG4gICAgICAuLi4ocyA9PSBudWxsID8gdm9pZCAwIDogcy5hcHBsZVBheVBheW1lbnRSZXF1ZXN0KSA/PyB7fVxuICAgIH0sIG0gPSBuZXcgQXBwbGVQYXlTZXNzaW9uKDMsIHkpLCBfID0ge1xuICAgICAgc2Vzc2lvbjogbSxcbiAgICAgIGNvbm5lY3Rpb246IHQuYW55Q2RlQ29ubmVjdGlvbixcbiAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogbixcbiAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgICBwcm9jZXNzb3JBY2NvdW50OiBpLm1ldGFkYXRhLFxuICAgICAgcHJlZmlsbDogdSxcbiAgICAgIGlzU2V0dXBNb2RlOiBkLFxuICAgICAgYmFzZVVybDogdC5iYXNlVXJsLFxuICAgICAgZm9ybUNhbGxiYWNrczogYSxcbiAgICAgIGRlZmF1bHRGaWVsZFZhbHVlczogciA9PSBudWxsID8gdm9pZCAwIDogci5kZWZhdWx0RmllbGRWYWx1ZXNcbiAgICB9O1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgodywgYikgPT4ge1xuICAgICAgY29uc3QgRSA9ICgpID0+IHtcbiAgICAgICAgdWUoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpLCBiKG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIikpO1xuICAgICAgfTtcbiAgICAgIG0ub25jYW5jZWwgPSBFLCBtLm9udmFsaWRhdGVtZXJjaGFudCA9IGFzeW5jIChrKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgWm8oaywgXyk7XG4gICAgICAgIH0gY2F0Y2ggKE8pIHtcbiAgICAgICAgICBiKE8pO1xuICAgICAgICB9XG4gICAgICB9LCBtLm9ucGF5bWVudG1ldGhvZHNlbGVjdGVkID0gKCkgPT4ge1xuICAgICAgICBjb25zdCBrID0ge1xuICAgICAgICAgIG5ld1RvdGFsOiB7IC4uLmggfVxuICAgICAgICB9O1xuICAgICAgICBtLmNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbihrKTtcbiAgICAgIH0sIG0ub25wYXltZW50YXV0aG9yaXplZCA9IGFzeW5jIChrKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgTyA9IGF3YWl0IFFvKGssIF8pO1xuICAgICAgICAgIHcoTyk7XG4gICAgICAgIH0gY2F0Y2ggKE8pIHtcbiAgICAgICAgICBiKE8pO1xuICAgICAgICB9XG4gICAgICB9LCBtLmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKHcpID0+IHtcbiAgICAgIHRocm93IEplKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgdyksIHc7XG4gICAgfSk7XG4gIH1cbiksIHRhID0gMSwgbmEgPSB6JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwibG9vcFwiKSxcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiY3J5cHRvXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBlbnRpdHlfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBhcGlfdG9rZW46IHokMS5zdHJpbmcoKVxuICB9KVxufSksIHsgbG9nX186IE4sIGVycl9fOiByYSB9ID0gUChcImxvb3AtY3J5cHRvXCIpLCBvYSA9IHNlKFxuICBhc3luYyAoeyBjb250ZXh0OiB0IH0pID0+IHtcbiAgICBOKFwiQ2hlY2tpbmcgaWYgdGhlcmUgYXJlIGFueSBDUE1zIGZvciBMb29wIENyeXB0by4uLlwiKTtcbiAgICBjb25zdCBuID0gWSh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIG5hKTtcbiAgICBOKGBjaGVja291dFBheW1lbnRNZXRob2Q6ICR7SlNPTi5zdHJpbmdpZnkobil9YCksIE4oXCJTdGFydGluZyBMb29wIENyeXB0byBmbG93Li4uXCIpO1xuICAgIGNvbnN0IGUgPSBhd2FpdCBNKHQuYW55Q2RlQ29ubmVjdGlvbik7XG4gICAgbGV0IHI7XG4gICAgaWYgKGUubW9kZSA9PT0gXCJzZXR1cFwiID8gciA9IHRhIDogciA9IGUuYW1vdW50X3RvdGFsX2F0b20sIGUuY3VycmVuY3kgIT09IFwidXNkXCIgJiYgZS5tb2RlICE9PSBcInNldHVwXCIpXG4gICAgICB0aHJvdyBFcnJvcihcIkNhbm5vdCBzdXBwb3J0IG5vbiBVU0QgY3VycmVuY3kgZm9yIExvb3BcIik7XG4gICAgY29uc3QgYSA9IHIsIGkgPSBNYXRoLm1heChhICogMTIsIDFlNSksIHMgPSB2NCgpLCBjID0ge1xuICAgICAgcGF5bWVudFVzZEFtb3VudDogYSxcbiAgICAgIHN1Z2dlc3RlZEF1dGhvcml6YXRpb25Vc2RBbW91bnQ6IGksXG4gICAgICBjdXN0b21lclJlZklkOiBzXG4gICAgfSwgbCA9IHtcbiAgICAgIGFwaUtleTogbi5tZXRhZGF0YS5hcGlfdG9rZW4sXG4gICAgICBlbnRpdHlJZDogbi5tZXRhZGF0YS5lbnRpdHlfaWQsXG4gICAgICBtZXJjaGFudElkOiBuLm1ldGFkYXRhLm1lcmNoYW50X2lkXG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgaXNBdmFpbGFibGU6ICEwLFxuICAgICAgd2lkZ2V0UHJvcHM6IGMsXG4gICAgICBpbml0TG9vcENvbm5lY3RQcm9wczogbFxuICAgIH07XG4gIH1cbiksIGFhID0gZWUoXG4gIGFzeW5jICh7XG4gICAgY29udGV4dDogdCxcbiAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgbm9uQ2RlRm9ybUlucHV0czogZSxcbiAgICBmb3JtQ2FsbGJhY2tzOiByLFxuICAgIGN1c3RvbVBhcmFtczogYSxcbiAgICBpbml0UmVzdWx0OiBpXG4gIH0pID0+IHtcbiAgICBOKFwiUnVubmluZyBMb29wIGZsb3cuLi5cIiksIE4oXCJjb250ZXh0XCIsIHQpLCBOKFwiY2hlY2tvdXRQYXltZW50TWV0aG9kXCIsIG4pLCBOKFwibm9uQ2RlRm9ybUlucHV0c1wiLCBlKSwgTihcImZsb3dDYWxsYmFja3NcIiwgciksIE4oXCJjdXN0b21QYXJhbXNcIiwgYSksIE4oXCJpbml0UmVzdWx0XCIsIGkpO1xuICAgIGNvbnN0IHMgPSB0LmFueUNkZUNvbm5lY3Rpb247XG4gICAgaWYgKCFpLmlzQXZhaWxhYmxlKVxuICAgICAgdGhyb3cgRXJyb3IoXCJGYWlsZWQgdG8gaW5pdGlhbGl6ZSBMb29wIGZsb3cuIENhbm5vdCBzdWJtaXQgd2l0aG91dCBpbml0aWFsaXphdGlvbi4gRXhpdGluZyBydW5uaW5nIExvb3AgZmxvdy5cIik7XG4gICAgY29uc3QgYyA9IGF3YWl0IE0odC5hbnlDZGVDb25uZWN0aW9uKSwgbCA9IGMubW9kZSAhPT0gXCJzZXR1cFwiLCB1ID0gYXdhaXQgaGUodC5hbnlDZGVDb25uZWN0aW9uLCB7XG4gICAgICBjaGVja291dF9wYXltZW50X21ldGhvZDogbixcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IG4ucHJvdmlkZXIsXG4gICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IGEuZW1haWwsXG4gICAgICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogYS5maXJzdE5hbWUsXG4gICAgICBuZXdfY3VzdG9tZXJfbGFzdF9uYW1lOiBhLmxhc3ROYW1lLFxuICAgICAgdXNlX3BheV9maXJzdF9mbG93OiBsLFxuICAgICAgcGF5X2ZpcnN0X2Zsb3dfY2FydF9pbmZvOiBsID8ge1xuICAgICAgICAvLyBUT0RPIGFkZCBjb3Vwb24gYW5kIGNhcnQgYWRqdXN0ZWQgbGluZSBpdGVtcyBsYXRlclxuICAgICAgICBsaW5lX2l0ZW1zOiBjLmxpbmVfaXRlbXMsXG4gICAgICAgIGRpc3BsYXllZF90b3RhbF9hbW91bnRfYXRvbTogaS53aWRnZXRQcm9wcy5wYXltZW50VXNkQW1vdW50XG4gICAgICB9IDogdm9pZCAwXG4gICAgfSk7XG4gICAgaWYgKCFhLnN1Y2Nlc3MpXG4gICAgICB0aHJvdyBFcnJvcihcbiAgICAgICAgYFBheWluIHdhcyBub3Qgc3VjY2Vzc2Z1bDogJHthLmRldGFpbC50eXBlfSAke2EuZGV0YWlsLm1lc3NhZ2V9ICR7SlNPTi5zdHJpbmdpZnkoYS5kZXRhaWwuZGF0YSl9YFxuICAgICAgKTtcbiAgICBjb25zdCBkID0gYXdhaXQgRyhzLCB7XG4gICAgICBzZWN1cmVfdG9rZW46IGMudG9rZW4sXG4gICAgICB0aGVpcl9wbV9pZDogYS5wYXlpbi5wYXltZW50TWV0aG9kLnBheW1lbnRNZXRob2RJZCxcbiAgICAgIGNoZWNrb3V0X2F0dGVtcHRfaWQ6IGMubW9kZSAhPT0gXCJzZXR1cFwiID8gdS5jaGVja291dF9hdHRlbXB0X2lkIDogdm9pZCAwLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIGxvb3BfY3VzdG9tZXI6IGEuY3VzdG9tZXIsXG4gICAgICAgIGxvb3BfcGF5aW46IGEucGF5aW5cbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoTihgQ29uZmlybSByZXN1bHQ6ICR7ZH1gKSwgYy5tb2RlID09PSBcInNldHVwXCIpIHtcbiAgICAgIE4oXCJEb2luZyBwYXltZW50IHNldHVwLi4uXCIpLCBOKFwi4pScIENvbmZpcm0gcGF5bWVudCBmbG93IHJlc3VsdCByZWNlaXZlZCBSZXN1bHQ6XCIsIGQpO1xuICAgICAgY29uc3QgZiA9IFNlKGQpO1xuICAgICAgcmV0dXJuIE4oYOKVsCBTZXR1cCBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5IFtQTSBJRDogJHtmLnBheW1lbnRfbWV0aG9kX2lkfV1gKSwgeyBtb2RlOiBcInNldHVwXCIsIHJlc3VsdDogZiB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoTihcIkRvaW5nIGNoZWNrb3V0Li4uXCIpLCAhZC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZSlcbiAgICAgICAgdGhyb3cgcmEoXCJDaGVja291dCBmYWlsZWQsIG5vIHBheS1maXJzdCBzdWNjZXNzIHJlc3BvbnNlOlwiLCBkKSwgbmV3IEVycm9yKFwiQ2hlY2tvdXQgZmFpbGVkLCBwbGVhc2UgdHJ5IGFnYWluIHdpdGggYW5vdGhlciBwYXltZW50IG1ldGhvZC5cIik7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtb2RlOiBcImNoZWNrb3V0XCIsXG4gICAgICAgIHJlc3VsdDogZC5wYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZVxuICAgICAgfTtcbiAgICB9XG4gIH1cbik7XG5hc3luYyBmdW5jdGlvbiBpYSh0LCBuKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgciA9IChhd2FpdCBHdChuLmNvbm5lY3Rpb24sIHtcbiAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBuLmNoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICBhcHBsZV9wYXltZW50X3Nlc3Npb246IHtcbiAgICAgICAgICB2YWxpZGF0aW9uX3VybDogdC52YWxpZGF0aW9uVVJMLFxuICAgICAgICAgIGluaXRpYXRpdmVfY29udGV4dDogd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lLFxuICAgICAgICAgIHRoZWlyX2FjY291bnRfaWQ6IG4ucHJvY2Vzc29yQWNjb3VudC5wcm9jZXNzb3JfYWNjb3VudF9pZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSkpLm5leHRfYWN0aW9uX21ldGFkYXRhLCBhID0gciA9PSBudWxsID8gdm9pZCAwIDogci5hcHBsZV9wYXlfc2Vzc2lvbjtcbiAgICBpZiAoIWEpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBzZXNzaW9uIGRhdGEgcmVjZWl2ZWQgZnJvbSBwYXltZW50IGZsb3dcIik7XG4gICAgbi5zZXNzaW9uLmNvbXBsZXRlTWVyY2hhbnRWYWxpZGF0aW9uKGEpO1xuICB9IGNhdGNoIChlKSB7XG4gICAgdGhyb3cgbi5zZXNzaW9uLmFib3J0KCksIGU7XG4gIH1cbn1cbmFzeW5jIGZ1bmN0aW9uIHNhKHQsIG4pIHtcbiAgdmFyIGUsIHI7XG4gIHRyeSB7XG4gICAgY29uc3QgYSA9IHQucGF5bWVudCwgaSA9IHJuKG4ubm9uQ2RlRm9ybUlucHV0cywgYSksIHMgPSB0ZShpLCBuLmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKTtcbiAgICBhd2FpdCBoZShuLmNvbm5lY3Rpb24sIHtcbiAgICAgIHBheW1lbnRfcHJvdmlkZXI6IG4uY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IG4uY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgbmV3X2N1c3RvbWVyX2VtYWlsOiBzW3AuRU1BSUxdLFxuICAgICAgbmV3X2N1c3RvbWVyX2ZpcnN0X25hbWU6IHNbcC5GSVJTVF9OQU1FXSxcbiAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHNbcC5MQVNUX05BTUVdLFxuICAgICAgbmV3X2N1c3RvbWVyX2FkZHJlc3M6IHtcbiAgICAgICAgemlwX2NvZGU6IHNbcC5aSVBfQ09ERV0sXG4gICAgICAgIGNvdW50cnk6IHNbcC5DT1VOVFJZXVxuICAgICAgfVxuICAgIH0pO1xuICAgIGNvbnN0IGMgPSB7XG4gICAgICBkYXRhRGVzY3JpcHRvcjogXCJDT01NT04uQVBQTEUuSU5BUFAuUEFZTUVOVFwiLFxuICAgICAgZGF0YVZhbHVlOiB3aW5kb3cuYnRvYShKU09OLnN0cmluZ2lmeShhLnRva2VuLnBheW1lbnREYXRhKSlcbiAgICB9LCBsID0gYXdhaXQgRyhuLmNvbm5lY3Rpb24sIHtcbiAgICAgIHNlY3VyZV90b2tlbjogbi5wcmVmaWxsLnRva2VuLFxuICAgICAgcHJvY2Vzc29yX3NwZWNpZmljX21ldGFkYXRhOiB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IG4uY2hlY2tvdXRQYXltZW50TWV0aG9kLnByb3ZpZGVyLFxuICAgICAgICBtb2JpbGVfd2FsbGV0X3BheW1lbnRfZGF0YTogY1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICghKChyID0gKGUgPSBsLnBheW1lbnRfbWV0aG9kcykgPT0gbnVsbCA/IHZvaWQgMCA6IGVbMF0pID09IG51bGwgPyB2b2lkIDAgOiByLmlkKSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgIGNvbnN0IGQgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfU1VDQ0VTU1xuICAgIH07XG4gICAgcmV0dXJuIG4uc2Vzc2lvbi5jb21wbGV0ZVBheW1lbnQoZCksIGplKHtcbiAgICAgIGxvZ1ByZWZpeDogXCJhdXRobmV0LWFwcGxlcGF5XCIsXG4gICAgICBhbnlDZGVDb25uZWN0aW9uOiBuLmNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4uY2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBzLFxuICAgICAgY29uZmlybVJlc3VsdDogbCxcbiAgICAgIHVzZVBheUZpcnN0RmxvdzogITFcbiAgICB9KTtcbiAgfSBjYXRjaCAoYSkge1xuICAgIGNvbnN0IGkgPSB7XG4gICAgICBzdGF0dXM6IEFwcGxlUGF5U2Vzc2lvbi5TVEFUVVNfRkFJTFVSRVxuICAgIH07XG4gICAgdGhyb3cgbi5zZXNzaW9uLmNvbXBsZXRlUGF5bWVudChpKSwgYTtcbiAgfVxufVxuY29uc3Qgc24gPSB6JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pLCBjbiA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJnb29nbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhdXRob3JpemVfbmV0XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSksIHsgbG9nX186IHdlLCBlcnJfXzogSGUgfSA9IFAoXCJhdXRobmV0LWFwcGxlcGF5XCIpLCBjYSA9IHNlKFxuICBhc3luYyAoeyBjb250ZXh0OiB0LCBmb3JtQ2FsbGJhY2tzOiBuIH0pID0+IHtcbiAgICBjb25zdCBlID0ge1xuICAgICAgcHJvY2Vzc29yOiBWLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCByID0gWSh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIHNuKTtcbiAgICBpZiAoIXIpXG4gICAgICByZXR1cm4gZTtcbiAgICB3ZShcIkxvYWRpbmcgQXBwbGUgUGF5IFNESy4uLlwiKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgbm4oKSwgd2UoXCJBcHBsZSBQYXkgU0RLIGxvYWRlZCBzdWNjZXNzZnVsbHlcIik7XG4gICAgfSBjYXRjaCAoZikge1xuICAgICAgcmV0dXJuIEhlKFwiRmFpbGVkIHRvIGxvYWQgQXBwbGUgUGF5IFNES1wiLCBmKSwgZTtcbiAgICB9XG4gICAgaWYgKCF3aW5kb3cuQXBwbGVQYXlTZXNzaW9uIHx8ICFBcHBsZVBheVNlc3Npb24uY2FuTWFrZVBheW1lbnRzKCkpXG4gICAgICByZXR1cm4gd2UoXCJBcHBsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBvbiB0aGlzIGRldmljZS9icm93c2VyXCIpLCBlO1xuICAgIGlmICghYXdhaXQgQXBwbGVQYXlTZXNzaW9uLmNhbk1ha2VQYXltZW50cygpKVxuICAgICAgcmV0dXJuIHdlKFwiTm8gYWN0aXZlIGNhcmRzIGF2YWlsYWJsZSBmb3IgQXBwbGUgUGF5XCIpLCBlO1xuICAgIGlmICghci5tZXRhZGF0YS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIik7XG4gICAgY29uc3QgcyA9IHQuYW55Q2RlQ29ubmVjdGlvbiwgYyA9IGF3YWl0IE0ocyksIGwgPSBjLm1vZGUgPT09IFwic2V0dXBcIiwgdSA9IGF3YWl0IF9lKHMsIGMudG9rZW4sIGwsIHZvaWQgMCksIGQgPSBhc3luYyAoZikgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgQS5hdXRob3JpemVOZXRBcHBsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IEoodC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgICAgICAgIGN1c3RvbVBhcmFtczoge1xuICAgICAgICAgICAgLi4uZixcbiAgICAgICAgICAgIGluaXRpYWxQcmV2aWV3OiB1XG4gICAgICAgICAgfSxcbiAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChoKSB7XG4gICAgICAgIEhlKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgaCksIG4uZ2V0Lm9uQ2hlY2tvdXRFcnJvcigoaCA9PSBudWxsID8gdm9pZCAwIDogaC5tZXNzYWdlKSA/PyBcIlVua25vd24gZXJyb3JcIik7XG4gICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvY2Vzc29yOiBWLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMCxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGRcbiAgICB9O1xuICB9XG4pLCBsYSA9IGVlKFxuICBhc3luYyAoe1xuICAgIGNvbnRleHQ6IHQsXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBuLFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IGUsXG4gICAgY3VzdG9tUGFyYW1zOiByLFxuICAgIGZvcm1DYWxsYmFja3M6IGFcbiAgfSkgPT4ge1xuICAgIHZhciB2O1xuICAgIGNvbnN0IHsgaW5pdGlhbFByZXZpZXc6IGksIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHMgfSA9IHIsIGMgPSBZKHQuY2hlY2tvdXRQYXltZW50TWV0aG9kcywgc24pLCB7IGN1cnJlbmN5Q29kZTogbCwgdG90YWw6IHUgfSA9IGFuKHtcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHMsXG4gICAgICBpbml0aWFsUHJldmlldzogaSxcbiAgICAgIGRlZmF1bHRMYWJlbDogKHYgPSBjID09IG51bGwgPyB2b2lkIDAgOiBjLm1ldGFkYXRhKSA9PSBudWxsID8gdm9pZCAwIDogdi5wcm9jZXNzb3JfYWNjb3VudF9uYW1lXG4gICAgfSksIGQgPSB0LmFueUNkZUNvbm5lY3Rpb24sIGYgPSBhd2FpdCBNKGQpLCBoID0gZi5tb2RlID09PSBcInNldHVwXCIsIHkgPSB7XG4gICAgICBjb3VudHJ5Q29kZTogXCJVU1wiLFxuICAgICAgY3VycmVuY3lDb2RlOiBsLFxuICAgICAgdG90YWw6IHUsXG4gICAgICByZXF1aXJlZEJpbGxpbmdDb250YWN0RmllbGRzOiBbXCJlbWFpbFwiLCBcInBvc3RhbEFkZHJlc3NcIiwgXCJuYW1lXCJdLFxuICAgICAgcmVxdWlyZWRTaGlwcGluZ0NvbnRhY3RGaWVsZHM6IFtcImVtYWlsXCJdLFxuICAgICAgc3VwcG9ydGVkTmV0d29ya3M6IFtcInZpc2FcIiwgXCJtYXN0ZXJDYXJkXCIsIFwiYW1leFwiLCBcImRpc2NvdmVyXCJdLFxuICAgICAgbWVyY2hhbnRDYXBhYmlsaXRpZXM6IFtcInN1cHBvcnRzM0RTXCIsIFwic3VwcG9ydHNDcmVkaXRcIiwgXCJzdXBwb3J0c0RlYml0XCJdLFxuICAgICAgcmVjdXJyaW5nUGF5bWVudFJlcXVlc3Q6IG9uKHtcbiAgICAgICAgdG90YWw6IHUsXG4gICAgICAgIHByZWZpbGw6IGZcbiAgICAgIH0pLFxuICAgICAgLi4uKHMgPT0gbnVsbCA/IHZvaWQgMCA6IHMuYXBwbGVQYXlQYXltZW50UmVxdWVzdCkgPz8ge31cbiAgICB9LCBtID0gbmV3IEFwcGxlUGF5U2Vzc2lvbigzLCB5KSwgXyA9IHtcbiAgICAgIHNlc3Npb246IG0sXG4gICAgICBjb25uZWN0aW9uOiB0LmFueUNkZUNvbm5lY3Rpb24sXG4gICAgICBjaGVja291dFBheW1lbnRNZXRob2Q6IG4sXG4gICAgICBub25DZGVGb3JtSW5wdXRzOiBlLFxuICAgICAgcHJvY2Vzc29yQWNjb3VudDogbi5tZXRhZGF0YSxcbiAgICAgIHByZWZpbGw6IGYsXG4gICAgICBpc1NldHVwTW9kZTogaCxcbiAgICAgIGJhc2VVcmw6IHQuYmFzZVVybCxcbiAgICAgIGZvcm1DYWxsYmFja3M6IGFcbiAgICB9O1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgodywgYikgPT4ge1xuICAgICAgbS5vbmNhbmNlbCA9ICgpID0+IHtcbiAgICAgICAgd2UoXCJQYXltZW50IGNhbmNlbGxlZCBieSB1c2VyXCIpLCBiKG5ldyBFcnJvcihcIlBheW1lbnQgY2FuY2VsbGVkIGJ5IHVzZXJcIikpO1xuICAgICAgfSwgbS5vbnZhbGlkYXRlbWVyY2hhbnQgPSBhc3luYyAoRSkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGF3YWl0IGlhKEUsIF8pO1xuICAgICAgICB9IGNhdGNoIChrKSB7XG4gICAgICAgICAgYihrKTtcbiAgICAgICAgfVxuICAgICAgfSwgbS5vbnBheW1lbnRtZXRob2RzZWxlY3RlZCA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgRSA9IHtcbiAgICAgICAgICBuZXdUb3RhbDogeS50b3RhbFxuICAgICAgICB9O1xuICAgICAgICBtLmNvbXBsZXRlUGF5bWVudE1ldGhvZFNlbGVjdGlvbihFKTtcbiAgICAgIH0sIG0ub25wYXltZW50YXV0aG9yaXplZCA9IGFzeW5jIChFKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgayA9IGF3YWl0IHNhKEUsIF8pO1xuICAgICAgICAgIHcoayk7XG4gICAgICAgIH0gY2F0Y2ggKGspIHtcbiAgICAgICAgICBiKGspO1xuICAgICAgICB9XG4gICAgICB9LCBtLmJlZ2luKCk7XG4gICAgfSkuY2F0Y2goKHcpID0+IHtcbiAgICAgIHRocm93IEhlKFwiQXBwbGUgUGF5IHBheW1lbnQgZXJyb3JcIiwgdyksIHc7XG4gICAgfSk7XG4gIH1cbiksIHsgbG9nX186IGllLCBlcnJfXzogYmUgfSA9IFAoXCJhdXRobmV0LWdvb2dsZXBheVwiKSwgdWEgPSBzZShcbiAgYXN5bmMgKHsgY29udGV4dDogdCwgZm9ybUNhbGxiYWNrczogbiB9KSA9PiB7XG4gICAgdmFyIGQsIGY7XG4gICAgaWUoXCJJbml0aWFsaXppbmcgQXV0aG5ldCBHb29nbGVQYXkgZmxvd1wiKTtcbiAgICBjb25zdCBlID0ge1xuICAgICAgcHJvY2Vzc29yOiBWLkVudW0uYXV0aG9yaXplX25ldCxcbiAgICAgIGlzQXZhaWxhYmxlOiAhMSxcbiAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICBzdGFydEZsb3c6IGFzeW5jICgpID0+IHtcbiAgICAgIH1cbiAgICB9LCByID0gWSh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIGNuKTtcbiAgICBpZiAoIXIpXG4gICAgICByZXR1cm4gZTtcbiAgICBpZShcIkdvb2dsZSBQYXkgQ1BNXCIsIHIpO1xuICAgIGNvbnN0IGEgPSByLm1ldGFkYXRhO1xuICAgIGlmICghYS5wcm9jZXNzb3JfYWNjb3VudF9pZClcbiAgICAgIHJldHVybiBiZShcIk5vIGdhdGV3YXkgbWVyY2hhbnQgSUQgZm91bmQgaW4gcHJvY2Vzc29yIGFjY291bnRcIiksIGU7XG4gICAgaWYgKGllKFwiTG9hZGluZyBHb29nbGUgUGF5IFNESy4uLlwiKSwgYXdhaXQgWHQoKSwgISgoZiA9IChkID0gd2luZG93Lmdvb2dsZSkgPT0gbnVsbCA/IHZvaWQgMCA6IGQucGF5bWVudHMpICE9IG51bGwgJiYgZi5hcGkpKVxuICAgICAgcmV0dXJuIGJlKFwiR29vZ2xlIFBheSBTREsgbm90IGxvYWRlZCBwcm9wZXJseVwiKSwgZTtcbiAgICBpZShcIkdvb2dsZSBQYXkgU0RLIGxvYWRlZFwiLCB3aW5kb3cuZ29vZ2xlLnBheW1lbnRzKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgaCA9ICRlKHtcbiAgICAgICAgZ2F0ZXdheTogXCJhdXRob3JpemVuZXRcIixcbiAgICAgICAgZ2F0ZXdheU1lcmNoYW50SWQ6IGEucHJvY2Vzc29yX2FjY291bnRfaWQsXG4gICAgICAgIG1lcmNoYW50TmFtZTogYS5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgICBtZXJjaGFudElkOiBhLmdvb2dsZV9wYXlfbWVyY2hhbnRfaWQgPz8gXCJcIixcbiAgICAgICAgLy8gVGhpcyBpcyBmb3IgaW5pdGlhbCBwYXltZW50IHJlcXVlc3QgdG8gY2hlY2sgYXZhaWxhYmlsaXR5LiBBY3R1YWwgYGluaXRpYWxQcmV2aWV3YCB3aWxsIGJlIHVzZWQgd2hlbiB0aGUgVUkgaXMgc2hvd25cbiAgICAgICAgaW5pdGlhbFByZXZpZXc6IHtcbiAgICAgICAgICBhbW91bnRBdG9tOiAwLFxuICAgICAgICAgIGN1cnJlbmN5OiBcIlVTRFwiXG4gICAgICAgIH1cbiAgICAgIH0pLCB7IHJlc3VsdDogeSB9ID0gYXdhaXQgemUodC5iYXNlVXJsLCBoKS5pc1JlYWR5VG9QYXkoXG4gICAgICAgIGhcbiAgICAgICk7XG4gICAgICBpZiAoIXkpXG4gICAgICAgIHJldHVybiBpZShcIkdvb2dsZSBQYXkgaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhpcyB1c2VyXCIpLCBlO1xuICAgIH0gY2F0Y2ggKGgpIHtcbiAgICAgIHJldHVybiBiZShcIkVycm9yIGNoZWNraW5nIEdvb2dsZSBQYXkgYXZhaWxhYmlsaXR5XCIsIGgpLCBlO1xuICAgIH1cbiAgICBjb25zdCBpID0gdC5hbnlDZGVDb25uZWN0aW9uLCBzID0gYXdhaXQgTShpKSwgYyA9IHMubW9kZSA9PT0gXCJzZXR1cFwiLCBsID0gYXdhaXQgX2UoaSwgcy50b2tlbiwgYywgdm9pZCAwKSwgdSA9IGFzeW5jIChoKSA9PiB7XG4gICAgICB0cnkge1xuICAgICAgICBBLmF1dGhvcml6ZU5ldEdvb2dsZVBheS5ydW4oe1xuICAgICAgICAgIGNvbnRleHQ6IHQsXG4gICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiByLFxuICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IEoodC5mb3JtRGl2KSxcbiAgICAgICAgICBmb3JtQ2FsbGJhY2tzOiBuLFxuICAgICAgICAgIGluaXRSZXN1bHQ6IHZvaWQgMCxcbiAgICAgICAgICBjdXN0b21QYXJhbXM6IHtcbiAgICAgICAgICAgIC4uLmgsXG4gICAgICAgICAgICBpbml0aWFsUHJldmlldzogbFxuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoICh5KSB7XG4gICAgICAgIGJlKFwiR29vZ2xlIFBheSBwYXltZW50IGVycm9yXCIsIHkpLCBuLmdldC5vbkNoZWNrb3V0RXJyb3IoKHkgPT0gbnVsbCA/IHZvaWQgMCA6IHkubWVzc2FnZSkgPz8gXCJVbmtub3duIGVycm9yXCIpO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIHtcbiAgICAgIHByb2Nlc3NvcjogVi5FbnVtLmF1dGhvcml6ZV9uZXQsXG4gICAgICBpc0F2YWlsYWJsZTogITAsXG4gICAgICBpc0xvYWRpbmc6ICExLFxuICAgICAgc3RhcnRGbG93OiB1XG4gICAgfTtcbiAgfVxuKSwgZGEgPSBlZShcbiAgYXN5bmMgKHtcbiAgICBjb250ZXh0OiB0LFxuICAgIG5vbkNkZUZvcm1JbnB1dHM6IG4sXG4gICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBlLFxuICAgIGZvcm1DYWxsYmFja3M6IHIsXG4gICAgY3VzdG9tUGFyYW1zOiBhXG4gIH0pID0+IHtcbiAgICB2YXIgZiwgaCwgeSwgbTtcbiAgICBjb25zdCB7IGluaXRpYWxQcmV2aWV3OiBpLCBvdmVycmlkZVBheW1lbnRSZXF1ZXN0OiBzIH0gPSBhLCBsID0gWSh0LmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIGNuKS5tZXRhZGF0YSwgdSA9ICRlKHtcbiAgICAgIGdhdGV3YXk6IFwiYXV0aG9yaXplbmV0XCIsXG4gICAgICBnYXRld2F5TWVyY2hhbnRJZDogbC5wcm9jZXNzb3JfYWNjb3VudF9pZCxcbiAgICAgIG1lcmNoYW50TmFtZTogbC5wcm9jZXNzb3JfYWNjb3VudF9uYW1lLFxuICAgICAgbWVyY2hhbnRJZDogbC5nb29nbGVfcGF5X21lcmNoYW50X2lkID8/IFwiXCIsXG4gICAgICBpbml0aWFsUHJldmlldzogaSxcbiAgICAgIG92ZXJyaWRlUGF5bWVudFJlcXVlc3Q6IHNcbiAgICB9KSwgZCA9IHplKHQuYmFzZVVybCwgdSk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IF8gPSBhd2FpdCBkLmxvYWRQYXltZW50RGF0YSh1KTtcbiAgICAgIGllKFwiR29vZ2xlIFBheSBQYXltZW50IGRhdGFcIiwgXyk7XG4gICAgICBjb25zdCB2ID0gdC5hbnlDZGVDb25uZWN0aW9uLCB3ID0gYXdhaXQgTSh2KSwgYiA9IHRuKG4sIF8pLCBFID0gdGUoYiwgci5nZXQub25WYWxpZGF0aW9uRXJyb3IpLCBrID0gKGggPSAoZiA9IF8ucGF5bWVudE1ldGhvZERhdGEpID09IG51bGwgPyB2b2lkIDAgOiBmLnRva2VuaXphdGlvbkRhdGEpID09IG51bGwgPyB2b2lkIDAgOiBoLnRva2VuO1xuICAgICAgaWYgKCFrKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJObyBwYXltZW50IHRva2VuIHJlY2VpdmVkIGZyb20gR29vZ2xlIFBheVwiKTtcbiAgICAgIGNvbnN0IE8gPSBhd2FpdCBoZSh2LCB7XG4gICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGUucHJvdmlkZXIsXG4gICAgICAgIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBlLFxuICAgICAgICBuZXdfY3VzdG9tZXJfZW1haWw6IEVbcC5FTUFJTF0sXG4gICAgICAgIG5ld19jdXN0b21lcl9maXJzdF9uYW1lOiBFW3AuRklSU1RfTkFNRV0sXG4gICAgICAgIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IEVbcC5MQVNUX05BTUVdLFxuICAgICAgICBuZXdfY3VzdG9tZXJfYWRkcmVzczoge1xuICAgICAgICAgIHppcF9jb2RlOiBFW3AuWklQX0NPREVdLFxuICAgICAgICAgIGNvdW50cnk6IEVbcC5DT1VOVFJZXVxuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGllKFwiU3RhcnQgcGF5bWVudCBmbG93IHJlc3BvbnNlXCIsIE8pO1xuICAgICAgY29uc3QgaiA9IGF3YWl0IEcodiwge1xuICAgICAgICBzZWN1cmVfdG9rZW46IHcudG9rZW4sXG4gICAgICAgIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YToge1xuICAgICAgICAgIHBheW1lbnRfcHJvdmlkZXI6IGUucHJvdmlkZXIsXG4gICAgICAgICAgbW9iaWxlX3dhbGxldF9wYXltZW50X2RhdGE6IHtcbiAgICAgICAgICAgIGRhdGFEZXNjcmlwdG9yOiBcIkNPTU1PTi5HT09HTEUuSU5BUFAuUEFZTUVOVFwiLFxuICAgICAgICAgICAgZGF0YVZhbHVlOiB3aW5kb3cuYnRvYShrKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAoISgobSA9ICh5ID0gai5wYXltZW50X21ldGhvZHMpID09IG51bGwgPyB2b2lkIDAgOiB5WzBdKSA9PSBudWxsID8gdm9pZCAwIDogbS5pZCkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIk5vIFBNIElEIGZvdW5kXCIpO1xuICAgICAgcmV0dXJuIGplKHtcbiAgICAgICAgbG9nUHJlZml4OiBcImF1dGhuZXQtZ29vZ2xlcGF5XCIsXG4gICAgICAgIGFueUNkZUNvbm5lY3Rpb246IHYsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogZSxcbiAgICAgICAgcmVxdWlyZWRGb3JtRmllbGRzOiBFLFxuICAgICAgICBjb25maXJtUmVzdWx0OiBqLFxuICAgICAgICB1c2VQYXlGaXJzdEZsb3c6ICExXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChfKSB7XG4gICAgICB0aHJvdyBiZShcIkdvb2dsZSBQYXkgcGF5bWVudCBlcnJvclwiLCBfKSwgbmV3IEVycm9yKChfID09IG51bGwgPyB2b2lkIDAgOiBfLm1lc3NhZ2UpID8/IFwiVW5rbm93biBlcnJvclwiKTtcbiAgICB9XG4gIH1cbiksIHZlID0gKHQsIG4sIGUpID0+IHtcbiAgY29uc3QgciA9IHQuZmlsdGVyKChhKSA9PiB7XG4gICAgY29uc3QgaSA9IGUgPT09IHZvaWQgMCA/ICEwIDogYS5wcm9jZXNzb3JfbmFtZSA9PT0gZSwgcyA9IGEucHJvdmlkZXIgPT09IG47XG4gICAgcmV0dXJuIGkgJiYgcztcbiAgfSk7XG4gIGlmIChyLmxlbmd0aCA9PT0gMClcbiAgICB0aHJvdyBjb25zb2xlLmVycm9yKFwiQ1BNcyBsaXN0XCIsIHQpLCBuZXcgRXJyb3IoYE5vIENQTXMgZm91bmQgd2l0aCBwcm92aWRlciAnJHtufScgYW5kIHByb2Nlc3NvciAnJHtlfSdgKTtcbiAgaWYgKHIubGVuZ3RoICE9PSAxKVxuICAgIHRocm93IGNvbnNvbGUuZXJyb3IoXCJDUE1zIGxpc3RcIiwgdCksIG5ldyBFcnJvcihgTW9yZSB0aGFuIG9uZSBDUE0gZm91bmQgd2l0aCBwcm92aWRlciAnJHtufScgYW5kIHByb2Nlc3NvciAnJHtlfSdgKTtcbiAgcmV0dXJuIHJbMF07XG59LCBBID0ge1xuICAvLyDinIsgTm90ZTogRm9yIGZsb3dzIHRoYXQgcmVxdWlyZSBpbml0aWFsaXphdGlvbiwgcGxlYXNlIGFkZCB0aGVtIHRvIGBpbml0LWZsb3dzLnRzYFxuICAvLyBDb21tb25cbiAgY29tbW9uQ0M6IHtcbiAgICBpbml0OiBhc3luYyAoKSA9PiB7XG4gICAgfSxcbiAgICBydW46IERvXG4gIH0sXG4gIC8vIFN0cmlwZVxuICBzdHJpcGVQUjoge1xuICAgIGluaXQ6ICRvLFxuICAgIHJ1bjogem9cbiAgfSxcbiAgc3RyaXBlTGluazoge1xuICAgIGluaXQ6IGVvLFxuICAgIHJ1bjogdG9cbiAgfSxcbiAgLy8gUG9ja3l0XG4gIHBvY2t5dFBheXBhbDoge1xuICAgIHJ1bjogS29cbiAgfSxcbiAgLy8gQWlyd2FsbGV4XG4gIGFpcndhbGxleEdvb2dsZVBheToge1xuICAgIGluaXQ6IEpvLFxuICAgIHJ1bjogSG9cbiAgfSxcbiAgYWlyd2FsbGV4QXBwbGVQYXk6IHtcbiAgICBpbml0OiBYbyxcbiAgICBydW46IGVhXG4gIH0sXG4gIC8vIExvb3BcbiAgbG9vcENyeXB0bzoge1xuICAgIGluaXQ6IG9hLFxuICAgIHJ1bjogYWFcbiAgfSxcbiAgYXV0aG9yaXplTmV0QXBwbGVQYXk6IHtcbiAgICBpbml0OiBjYSxcbiAgICBydW46IGxhXG4gIH0sXG4gIGF1dGhvcml6ZU5ldEdvb2dsZVBheToge1xuICAgIGluaXQ6IHVhLFxuICAgIHJ1bjogZGFcbiAgfVxuICAvLyDwn5GJIEFkZCBtb3JlIGZsb3dzIGhlcmVcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbn07XG52YXIgWmUgPSBmdW5jdGlvbih0LCBuKSB7XG4gIHJldHVybiBaZSA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uKGUsIHIpIHtcbiAgICBlLl9fcHJvdG9fXyA9IHI7XG4gIH0gfHwgZnVuY3Rpb24oZSwgcikge1xuICAgIGZvciAodmFyIGEgaW4gcikgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHIsIGEpICYmIChlW2FdID0gclthXSk7XG4gIH0sIFplKHQsIG4pO1xufTtcbmZ1bmN0aW9uIG5lKHQsIG4pIHtcbiAgaWYgKHR5cGVvZiBuICE9IFwiZnVuY3Rpb25cIiAmJiBuICE9PSBudWxsKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKG4pICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcbiAgWmUodCwgbik7XG4gIGZ1bmN0aW9uIGUoKSB7XG4gICAgdGhpcy5jb25zdHJ1Y3RvciA9IHQ7XG4gIH1cbiAgdC5wcm90b3R5cGUgPSBuID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShuKSA6IChlLnByb3RvdHlwZSA9IG4ucHJvdG90eXBlLCBuZXcgZSgpKTtcbn1cbmZ1bmN0aW9uIHBhKHQsIG4sIGUsIHIpIHtcbiAgZnVuY3Rpb24gYShpKSB7XG4gICAgcmV0dXJuIGkgaW5zdGFuY2VvZiBlID8gaSA6IG5ldyBlKGZ1bmN0aW9uKHMpIHtcbiAgICAgIHMoaSk7XG4gICAgfSk7XG4gIH1cbiAgcmV0dXJuIG5ldyAoZSB8fCAoZSA9IFByb21pc2UpKShmdW5jdGlvbihpLCBzKSB7XG4gICAgZnVuY3Rpb24gYyhkKSB7XG4gICAgICB0cnkge1xuICAgICAgICB1KHIubmV4dChkKSk7XG4gICAgICB9IGNhdGNoIChmKSB7XG4gICAgICAgIHMoZik7XG4gICAgICB9XG4gICAgfVxuICAgIGZ1bmN0aW9uIGwoZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdShyLnRocm93KGQpKTtcbiAgICAgIH0gY2F0Y2ggKGYpIHtcbiAgICAgICAgcyhmKTtcbiAgICAgIH1cbiAgICB9XG4gICAgZnVuY3Rpb24gdShkKSB7XG4gICAgICBkLmRvbmUgPyBpKGQudmFsdWUpIDogYShkLnZhbHVlKS50aGVuKGMsIGwpO1xuICAgIH1cbiAgICB1KChyID0gci5hcHBseSh0LCBbXSkpLm5leHQoKSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gbG4odCwgbikge1xuICB2YXIgZSA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkge1xuICAgIGlmIChpWzBdICYgMSkgdGhyb3cgaVsxXTtcbiAgICByZXR1cm4gaVsxXTtcbiAgfSwgdHJ5czogW10sIG9wczogW10gfSwgciwgYSwgaSwgcyA9IE9iamVjdC5jcmVhdGUoKHR5cGVvZiBJdGVyYXRvciA9PSBcImZ1bmN0aW9uXCIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTtcbiAgcmV0dXJuIHMubmV4dCA9IGMoMCksIHMudGhyb3cgPSBjKDEpLCBzLnJldHVybiA9IGMoMiksIHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIChzW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSksIHM7XG4gIGZ1bmN0aW9uIGModSkge1xuICAgIHJldHVybiBmdW5jdGlvbihkKSB7XG4gICAgICByZXR1cm4gbChbdSwgZF0pO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gbCh1KSB7XG4gICAgaWYgKHIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xuICAgIGZvciAoOyBzICYmIChzID0gMCwgdVswXSAmJiAoZSA9IDApKSwgZTsgKSB0cnkge1xuICAgICAgaWYgKHIgPSAxLCBhICYmIChpID0gdVswXSAmIDIgPyBhLnJldHVybiA6IHVbMF0gPyBhLnRocm93IHx8ICgoaSA9IGEucmV0dXJuKSAmJiBpLmNhbGwoYSksIDApIDogYS5uZXh0KSAmJiAhKGkgPSBpLmNhbGwoYSwgdVsxXSkpLmRvbmUpIHJldHVybiBpO1xuICAgICAgc3dpdGNoIChhID0gMCwgaSAmJiAodSA9IFt1WzBdICYgMiwgaS52YWx1ZV0pLCB1WzBdKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGkgPSB1O1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIGUubGFiZWwrKywgeyB2YWx1ZTogdVsxXSwgZG9uZTogITEgfTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIGUubGFiZWwrKywgYSA9IHVbMV0sIHUgPSBbMF07XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICB1ID0gZS5vcHMucG9wKCksIGUudHJ5cy5wb3AoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBpZiAoaSA9IGUudHJ5cywgIShpID0gaS5sZW5ndGggPiAwICYmIGlbaS5sZW5ndGggLSAxXSkgJiYgKHVbMF0gPT09IDYgfHwgdVswXSA9PT0gMikpIHtcbiAgICAgICAgICAgIGUgPSAwO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1WzBdID09PSAzICYmICghaSB8fCB1WzFdID4gaVswXSAmJiB1WzFdIDwgaVszXSkpIHtcbiAgICAgICAgICAgIGUubGFiZWwgPSB1WzFdO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICh1WzBdID09PSA2ICYmIGUubGFiZWwgPCBpWzFdKSB7XG4gICAgICAgICAgICBlLmxhYmVsID0gaVsxXSwgaSA9IHU7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGkgJiYgZS5sYWJlbCA8IGlbMl0pIHtcbiAgICAgICAgICAgIGUubGFiZWwgPSBpWzJdLCBlLm9wcy5wdXNoKHUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlbMl0gJiYgZS5vcHMucG9wKCksIGUudHJ5cy5wb3AoKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIHUgPSBuLmNhbGwodCwgZSk7XG4gICAgfSBjYXRjaCAoZCkge1xuICAgICAgdSA9IFs2LCBkXSwgYSA9IDA7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHIgPSBpID0gMDtcbiAgICB9XG4gICAgaWYgKHVbMF0gJiA1KSB0aHJvdyB1WzFdO1xuICAgIHJldHVybiB7IHZhbHVlOiB1WzBdID8gdVsxXSA6IHZvaWQgMCwgZG9uZTogITAgfTtcbiAgfVxufVxuZnVuY3Rpb24geWUodCkge1xuICB2YXIgbiA9IHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgZSA9IG4gJiYgdFtuXSwgciA9IDA7XG4gIGlmIChlKSByZXR1cm4gZS5jYWxsKHQpO1xuICBpZiAodCAmJiB0eXBlb2YgdC5sZW5ndGggPT0gXCJudW1iZXJcIikgcmV0dXJuIHtcbiAgICBuZXh0OiBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0ICYmIHIgPj0gdC5sZW5ndGggJiYgKHQgPSB2b2lkIDApLCB7IHZhbHVlOiB0ICYmIHRbcisrXSwgZG9uZTogIXQgfTtcbiAgICB9XG4gIH07XG4gIHRocm93IG5ldyBUeXBlRXJyb3IobiA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbn1cbmZ1bmN0aW9uIERlKHQsIG4pIHtcbiAgdmFyIGUgPSB0eXBlb2YgU3ltYm9sID09IFwiZnVuY3Rpb25cIiAmJiB0W1N5bWJvbC5pdGVyYXRvcl07XG4gIGlmICghZSkgcmV0dXJuIHQ7XG4gIHZhciByID0gZS5jYWxsKHQpLCBhLCBpID0gW10sIHM7XG4gIHRyeSB7XG4gICAgZm9yICg7IChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShhID0gci5uZXh0KCkpLmRvbmU7ICkgaS5wdXNoKGEudmFsdWUpO1xuICB9IGNhdGNoIChjKSB7XG4gICAgcyA9IHsgZXJyb3I6IGMgfTtcbiAgfSBmaW5hbGx5IHtcbiAgICB0cnkge1xuICAgICAgYSAmJiAhYS5kb25lICYmIChlID0gci5yZXR1cm4pICYmIGUuY2FsbChyKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHMpIHRocm93IHMuZXJyb3I7XG4gICAgfVxuICB9XG4gIHJldHVybiBpO1xufVxuZnVuY3Rpb24gT2UodCwgbiwgZSkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgciA9IDAsIGEgPSBuLmxlbmd0aCwgaTsgciA8IGE7IHIrKylcbiAgICAoaSB8fCAhKHIgaW4gbikpICYmIChpIHx8IChpID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwobiwgMCwgcikpLCBpW3JdID0gbltyXSk7XG4gIHJldHVybiB0LmNvbmNhdChpIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKG4pKTtcbn1cbmZ1bmN0aW9uIHBlKHQpIHtcbiAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBwZSA/ICh0aGlzLnYgPSB0LCB0aGlzKSA6IG5ldyBwZSh0KTtcbn1cbmZ1bmN0aW9uIG1hKHQsIG4sIGUpIHtcbiAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcbiAgdmFyIHIgPSBlLmFwcGx5KHQsIG4gfHwgW10pLCBhLCBpID0gW107XG4gIHJldHVybiBhID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT0gXCJmdW5jdGlvblwiID8gQXN5bmNJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKSwgYyhcIm5leHRcIiksIGMoXCJ0aHJvd1wiKSwgYyhcInJldHVyblwiLCBzKSwgYVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgYTtcbiAgZnVuY3Rpb24gcyh5KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uKG0pIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobSkudGhlbih5LCBmKTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGMoeSwgbSkge1xuICAgIHJbeV0gJiYgKGFbeV0gPSBmdW5jdGlvbihfKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odiwgdykge1xuICAgICAgICBpLnB1c2goW3ksIF8sIHYsIHddKSA+IDEgfHwgbCh5LCBfKTtcbiAgICAgIH0pO1xuICAgIH0sIG0gJiYgKGFbeV0gPSBtKGFbeV0pKSk7XG4gIH1cbiAgZnVuY3Rpb24gbCh5LCBtKSB7XG4gICAgdHJ5IHtcbiAgICAgIHUoclt5XShtKSk7XG4gICAgfSBjYXRjaCAoXykge1xuICAgICAgaChpWzBdWzNdLCBfKTtcbiAgICB9XG4gIH1cbiAgZnVuY3Rpb24gdSh5KSB7XG4gICAgeS52YWx1ZSBpbnN0YW5jZW9mIHBlID8gUHJvbWlzZS5yZXNvbHZlKHkudmFsdWUudikudGhlbihkLCBmKSA6IGgoaVswXVsyXSwgeSk7XG4gIH1cbiAgZnVuY3Rpb24gZCh5KSB7XG4gICAgbChcIm5leHRcIiwgeSk7XG4gIH1cbiAgZnVuY3Rpb24gZih5KSB7XG4gICAgbChcInRocm93XCIsIHkpO1xuICB9XG4gIGZ1bmN0aW9uIGgoeSwgbSkge1xuICAgIHkobSksIGkuc2hpZnQoKSwgaS5sZW5ndGggJiYgbChpWzBdWzBdLCBpWzBdWzFdKTtcbiAgfVxufVxuZnVuY3Rpb24geWEodCkge1xuICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xuICB2YXIgbiA9IHRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBlO1xuICByZXR1cm4gbiA/IG4uY2FsbCh0KSA6ICh0ID0gdHlwZW9mIHllID09IFwiZnVuY3Rpb25cIiA/IHllKHQpIDogdFtTeW1ib2wuaXRlcmF0b3JdKCksIGUgPSB7fSwgcihcIm5leHRcIiksIHIoXCJ0aHJvd1wiKSwgcihcInJldHVyblwiKSwgZVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgZSk7XG4gIGZ1bmN0aW9uIHIoaSkge1xuICAgIGVbaV0gPSB0W2ldICYmIGZ1bmN0aW9uKHMpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihjLCBsKSB7XG4gICAgICAgIHMgPSB0W2ldKHMpLCBhKGMsIGwsIHMuZG9uZSwgcy52YWx1ZSk7XG4gICAgICB9KTtcbiAgICB9O1xuICB9XG4gIGZ1bmN0aW9uIGEoaSwgcywgYywgbCkge1xuICAgIFByb21pc2UucmVzb2x2ZShsKS50aGVuKGZ1bmN0aW9uKHUpIHtcbiAgICAgIGkoeyB2YWx1ZTogdSwgZG9uZTogYyB9KTtcbiAgICB9LCBzKTtcbiAgfVxufVxuZnVuY3Rpb24gRih0KSB7XG4gIHJldHVybiB0eXBlb2YgdCA9PSBcImZ1bmN0aW9uXCI7XG59XG5mdW5jdGlvbiBHZSh0KSB7XG4gIHZhciBuID0gZnVuY3Rpb24ocikge1xuICAgIEVycm9yLmNhbGwociksIHIuc3RhY2sgPSBuZXcgRXJyb3IoKS5zdGFjaztcbiAgfSwgZSA9IHQobik7XG4gIHJldHVybiBlLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKSwgZS5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBlLCBlO1xufVxudmFyIFllID0gR2UoZnVuY3Rpb24odCkge1xuICByZXR1cm4gZnVuY3Rpb24oZSkge1xuICAgIHQodGhpcyksIHRoaXMubWVzc2FnZSA9IGUgPyBlLmxlbmd0aCArIGAgZXJyb3JzIG9jY3VycmVkIGR1cmluZyB1bnN1YnNjcmlwdGlvbjpcbmAgKyBlLm1hcChmdW5jdGlvbihyLCBhKSB7XG4gICAgICByZXR1cm4gYSArIDEgKyBcIikgXCIgKyByLnRvU3RyaW5nKCk7XG4gICAgfSkuam9pbihgXG4gIGApIDogXCJcIiwgdGhpcy5uYW1lID0gXCJVbnN1YnNjcmlwdGlvbkVycm9yXCIsIHRoaXMuZXJyb3JzID0gZTtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gTmUodCwgbikge1xuICBpZiAodCkge1xuICAgIHZhciBlID0gdC5pbmRleE9mKG4pO1xuICAgIDAgPD0gZSAmJiB0LnNwbGljZShlLCAxKTtcbiAgfVxufVxudmFyIFBlID0gZnVuY3Rpb24oKSB7XG4gIGZ1bmN0aW9uIHQobikge1xuICAgIHRoaXMuaW5pdGlhbFRlYXJkb3duID0gbiwgdGhpcy5jbG9zZWQgPSAhMSwgdGhpcy5fcGFyZW50YWdlID0gbnVsbCwgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gIH1cbiAgcmV0dXJuIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIG4sIGUsIHIsIGEsIGk7XG4gICAgaWYgKCF0aGlzLmNsb3NlZCkge1xuICAgICAgdGhpcy5jbG9zZWQgPSAhMDtcbiAgICAgIHZhciBzID0gdGhpcy5fcGFyZW50YWdlO1xuICAgICAgaWYgKHMpXG4gICAgICAgIGlmICh0aGlzLl9wYXJlbnRhZ2UgPSBudWxsLCBBcnJheS5pc0FycmF5KHMpKVxuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBmb3IgKHZhciBjID0geWUocyksIGwgPSBjLm5leHQoKTsgIWwuZG9uZTsgbCA9IGMubmV4dCgpKSB7XG4gICAgICAgICAgICAgIHZhciB1ID0gbC52YWx1ZTtcbiAgICAgICAgICAgICAgdS5yZW1vdmUodGhpcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAgICAgbiA9IHsgZXJyb3I6IF8gfTtcbiAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgbCAmJiAhbC5kb25lICYmIChlID0gYy5yZXR1cm4pICYmIGUuY2FsbChjKTtcbiAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgIGlmIChuKSB0aHJvdyBuLmVycm9yO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgIHMucmVtb3ZlKHRoaXMpO1xuICAgICAgdmFyIGQgPSB0aGlzLmluaXRpYWxUZWFyZG93bjtcbiAgICAgIGlmIChGKGQpKVxuICAgICAgICB0cnkge1xuICAgICAgICAgIGQoKTtcbiAgICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAgIGkgPSBfIGluc3RhbmNlb2YgWWUgPyBfLmVycm9ycyA6IFtfXTtcbiAgICAgICAgfVxuICAgICAgdmFyIGYgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgICAgaWYgKGYpIHtcbiAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZm9yICh2YXIgaCA9IHllKGYpLCB5ID0gaC5uZXh0KCk7ICF5LmRvbmU7IHkgPSBoLm5leHQoKSkge1xuICAgICAgICAgICAgdmFyIG0gPSB5LnZhbHVlO1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgaHQobSk7XG4gICAgICAgICAgICB9IGNhdGNoIChfKSB7XG4gICAgICAgICAgICAgIGkgPSBpID8/IFtdLCBfIGluc3RhbmNlb2YgWWUgPyBpID0gT2UoT2UoW10sIERlKGkpKSwgRGUoXy5lcnJvcnMpKSA6IGkucHVzaChfKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgICByID0geyBlcnJvcjogXyB9O1xuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICB5ICYmICF5LmRvbmUgJiYgKGEgPSBoLnJldHVybikgJiYgYS5jYWxsKGgpO1xuICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICBpZiAocikgdGhyb3cgci5lcnJvcjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChpKVxuICAgICAgICB0aHJvdyBuZXcgWWUoaSk7XG4gICAgfVxuICB9LCB0LnByb3RvdHlwZS5hZGQgPSBmdW5jdGlvbihuKSB7XG4gICAgdmFyIGU7XG4gICAgaWYgKG4gJiYgbiAhPT0gdGhpcylcbiAgICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgICAgaHQobik7XG4gICAgICBlbHNlIHtcbiAgICAgICAgaWYgKG4gaW5zdGFuY2VvZiB0KSB7XG4gICAgICAgICAgaWYgKG4uY2xvc2VkIHx8IG4uX2hhc1BhcmVudCh0aGlzKSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICBuLl9hZGRQYXJlbnQodGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgKHRoaXMuX2ZpbmFsaXplcnMgPSAoZSA9IHRoaXMuX2ZpbmFsaXplcnMpICE9PSBudWxsICYmIGUgIT09IHZvaWQgMCA/IGUgOiBbXSkucHVzaChuKTtcbiAgICAgIH1cbiAgfSwgdC5wcm90b3R5cGUuX2hhc1BhcmVudCA9IGZ1bmN0aW9uKG4pIHtcbiAgICB2YXIgZSA9IHRoaXMuX3BhcmVudGFnZTtcbiAgICByZXR1cm4gZSA9PT0gbiB8fCBBcnJheS5pc0FycmF5KGUpICYmIGUuaW5jbHVkZXMobik7XG4gIH0sIHQucHJvdG90eXBlLl9hZGRQYXJlbnQgPSBmdW5jdGlvbihuKSB7XG4gICAgdmFyIGUgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgdGhpcy5fcGFyZW50YWdlID0gQXJyYXkuaXNBcnJheShlKSA/IChlLnB1c2gobiksIGUpIDogZSA/IFtlLCBuXSA6IG47XG4gIH0sIHQucHJvdG90eXBlLl9yZW1vdmVQYXJlbnQgPSBmdW5jdGlvbihuKSB7XG4gICAgdmFyIGUgPSB0aGlzLl9wYXJlbnRhZ2U7XG4gICAgZSA9PT0gbiA/IHRoaXMuX3BhcmVudGFnZSA9IG51bGwgOiBBcnJheS5pc0FycmF5KGUpICYmIE5lKGUsIG4pO1xuICB9LCB0LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbihuKSB7XG4gICAgdmFyIGUgPSB0aGlzLl9maW5hbGl6ZXJzO1xuICAgIGUgJiYgTmUoZSwgbiksIG4gaW5zdGFuY2VvZiB0ICYmIG4uX3JlbW92ZVBhcmVudCh0aGlzKTtcbiAgfSwgdC5FTVBUWSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBuID0gbmV3IHQoKTtcbiAgICByZXR1cm4gbi5jbG9zZWQgPSAhMCwgbjtcbiAgfSgpLCB0O1xufSgpLCB1biA9IFBlLkVNUFRZO1xuZnVuY3Rpb24gZG4odCkge1xuICByZXR1cm4gdCBpbnN0YW5jZW9mIFBlIHx8IHQgJiYgXCJjbG9zZWRcIiBpbiB0ICYmIEYodC5yZW1vdmUpICYmIEYodC5hZGQpICYmIEYodC51bnN1YnNjcmliZSk7XG59XG5mdW5jdGlvbiBodCh0KSB7XG4gIEYodCkgPyB0KCkgOiB0LnVuc3Vic2NyaWJlKCk7XG59XG52YXIgcG4gPSB7XG4gIG9uVW5oYW5kbGVkRXJyb3I6IG51bGwsXG4gIG9uU3RvcHBlZE5vdGlmaWNhdGlvbjogbnVsbCxcbiAgUHJvbWlzZTogdm9pZCAwLFxuICB1c2VEZXByZWNhdGVkU3luY2hyb25vdXNFcnJvckhhbmRsaW5nOiAhMSxcbiAgdXNlRGVwcmVjYXRlZE5leHRDb250ZXh0OiAhMVxufSwgbW4gPSB7XG4gIHNldFRpbWVvdXQ6IGZ1bmN0aW9uKHQsIG4pIHtcbiAgICBmb3IgKHZhciBlID0gW10sIHIgPSAyOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgZVtyIC0gMl0gPSBhcmd1bWVudHNbcl07XG4gICAgcmV0dXJuIHNldFRpbWVvdXQuYXBwbHkodm9pZCAwLCBPZShbdCwgbl0sIERlKGUpKSk7XG4gIH0sXG4gIGNsZWFyVGltZW91dDogZnVuY3Rpb24odCkge1xuICAgIHJldHVybiAoY2xlYXJUaW1lb3V0KSh0KTtcbiAgfSxcbiAgZGVsZWdhdGU6IHZvaWQgMFxufTtcbmZ1bmN0aW9uIHluKHQpIHtcbiAgbW4uc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICB0aHJvdyB0O1xuICB9KTtcbn1cbmZ1bmN0aW9uIF90KCkge1xufVxuZnVuY3Rpb24gRmUodCkge1xuICB0KCk7XG59XG52YXIgYXQgPSBmdW5jdGlvbih0KSB7XG4gIG5lKG4sIHQpO1xuICBmdW5jdGlvbiBuKGUpIHtcbiAgICB2YXIgciA9IHQuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiByLmlzU3RvcHBlZCA9ICExLCBlID8gKHIuZGVzdGluYXRpb24gPSBlLCBkbihlKSAmJiBlLmFkZChyKSkgOiByLmRlc3RpbmF0aW9uID0gZ2EsIHI7XG4gIH1cbiAgcmV0dXJuIG4uY3JlYXRlID0gZnVuY3Rpb24oZSwgciwgYSkge1xuICAgIHJldHVybiBuZXcgQmUoZSwgciwgYSk7XG4gIH0sIG4ucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbihlKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgdGhpcy5fbmV4dChlKTtcbiAgfSwgbi5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihlKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIHRoaXMuX2Vycm9yKGUpKTtcbiAgfSwgbi5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB0aGlzLmlzU3RvcHBlZCB8fCAodGhpcy5pc1N0b3BwZWQgPSAhMCwgdGhpcy5fY29tcGxldGUoKSk7XG4gIH0sIG4ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5jbG9zZWQgfHwgKHRoaXMuaXNTdG9wcGVkID0gITAsIHQucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyksIHRoaXMuZGVzdGluYXRpb24gPSBudWxsKTtcbiAgfSwgbi5wcm90b3R5cGUuX25leHQgPSBmdW5jdGlvbihlKSB7XG4gICAgdGhpcy5kZXN0aW5hdGlvbi5uZXh0KGUpO1xuICB9LCBuLnByb3RvdHlwZS5fZXJyb3IgPSBmdW5jdGlvbihlKSB7XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZSk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH0sIG4ucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH0sIG47XG59KFBlKSwgZmEgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZDtcbmZ1bmN0aW9uIEtlKHQsIG4pIHtcbiAgcmV0dXJuIGZhLmNhbGwodCwgbik7XG59XG52YXIgaGEgPSBmdW5jdGlvbigpIHtcbiAgZnVuY3Rpb24gdChuKSB7XG4gICAgdGhpcy5wYXJ0aWFsT2JzZXJ2ZXIgPSBuO1xuICB9XG4gIHJldHVybiB0LnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24obikge1xuICAgIHZhciBlID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKGUubmV4dClcbiAgICAgIHRyeSB7XG4gICAgICAgIGUubmV4dChuKTtcbiAgICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgICAgSWUocik7XG4gICAgICB9XG4gIH0sIHQucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24obikge1xuICAgIHZhciBlID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7XG4gICAgaWYgKGUuZXJyb3IpXG4gICAgICB0cnkge1xuICAgICAgICBlLmVycm9yKG4pO1xuICAgICAgfSBjYXRjaCAocikge1xuICAgICAgICBJZShyKTtcbiAgICAgIH1cbiAgICBlbHNlXG4gICAgICBJZShuKTtcbiAgfSwgdC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgbiA9IHRoaXMucGFydGlhbE9ic2VydmVyO1xuICAgIGlmIChuLmNvbXBsZXRlKVxuICAgICAgdHJ5IHtcbiAgICAgICAgbi5jb21wbGV0ZSgpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBJZShlKTtcbiAgICAgIH1cbiAgfSwgdDtcbn0oKSwgQmUgPSBmdW5jdGlvbih0KSB7XG4gIG5lKG4sIHQpO1xuICBmdW5jdGlvbiBuKGUsIHIsIGEpIHtcbiAgICB2YXIgaSA9IHQuY2FsbCh0aGlzKSB8fCB0aGlzLCBzO1xuICAgIGlmIChGKGUpIHx8ICFlKVxuICAgICAgcyA9IHtcbiAgICAgICAgbmV4dDogZSA/PyB2b2lkIDAsXG4gICAgICAgIGVycm9yOiByID8/IHZvaWQgMCxcbiAgICAgICAgY29tcGxldGU6IGEgPz8gdm9pZCAwXG4gICAgICB9O1xuICAgIGVsc2Uge1xuICAgICAgdmFyIGM7XG4gICAgICBpICYmIHBuLnVzZURlcHJlY2F0ZWROZXh0Q29udGV4dCA/IChjID0gT2JqZWN0LmNyZWF0ZShlKSwgYy51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gaS51bnN1YnNjcmliZSgpO1xuICAgICAgfSwgcyA9IHtcbiAgICAgICAgbmV4dDogZS5uZXh0ICYmIEtlKGUubmV4dCwgYyksXG4gICAgICAgIGVycm9yOiBlLmVycm9yICYmIEtlKGUuZXJyb3IsIGMpLFxuICAgICAgICBjb21wbGV0ZTogZS5jb21wbGV0ZSAmJiBLZShlLmNvbXBsZXRlLCBjKVxuICAgICAgfSkgOiBzID0gZTtcbiAgICB9XG4gICAgcmV0dXJuIGkuZGVzdGluYXRpb24gPSBuZXcgaGEocyksIGk7XG4gIH1cbiAgcmV0dXJuIG47XG59KGF0KTtcbmZ1bmN0aW9uIEllKHQpIHtcbiAgeW4odCk7XG59XG5mdW5jdGlvbiBfYSh0KSB7XG4gIHRocm93IHQ7XG59XG52YXIgZ2EgPSB7XG4gIGNsb3NlZDogITAsXG4gIG5leHQ6IF90LFxuICBlcnJvcjogX2EsXG4gIGNvbXBsZXRlOiBfdFxufSwgaXQgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHR5cGVvZiBTeW1ib2wgPT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5vYnNlcnZhYmxlIHx8IFwiQEBvYnNlcnZhYmxlXCI7XG59KCk7XG5mdW5jdGlvbiB3YSh0KSB7XG4gIHJldHVybiB0O1xufVxuZnVuY3Rpb24gYmEodCkge1xuICByZXR1cm4gdC5sZW5ndGggPT09IDAgPyB3YSA6IHQubGVuZ3RoID09PSAxID8gdFswXSA6IGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gdC5yZWR1Y2UoZnVuY3Rpb24ociwgYSkge1xuICAgICAgcmV0dXJuIGEocik7XG4gICAgfSwgZSk7XG4gIH07XG59XG52YXIgWCA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiB0KG4pIHtcbiAgICBuICYmICh0aGlzLl9zdWJzY3JpYmUgPSBuKTtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUubGlmdCA9IGZ1bmN0aW9uKG4pIHtcbiAgICB2YXIgZSA9IG5ldyB0KCk7XG4gICAgcmV0dXJuIGUuc291cmNlID0gdGhpcywgZS5vcGVyYXRvciA9IG4sIGU7XG4gIH0sIHQucHJvdG90eXBlLnN1YnNjcmliZSA9IGZ1bmN0aW9uKG4sIGUsIHIpIHtcbiAgICB2YXIgYSA9IHRoaXMsIGkgPSBFYShuKSA/IG4gOiBuZXcgQmUobiwgZSwgcik7XG4gICAgcmV0dXJuIEZlKGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHMgPSBhLCBjID0gcy5vcGVyYXRvciwgbCA9IHMuc291cmNlO1xuICAgICAgaS5hZGQoYyA/IGMuY2FsbChpLCBsKSA6IGwgPyBhLl9zdWJzY3JpYmUoaSkgOiBhLl90cnlTdWJzY3JpYmUoaSkpO1xuICAgIH0pLCBpO1xuICB9LCB0LnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlID0gZnVuY3Rpb24obikge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpcy5fc3Vic2NyaWJlKG4pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIG4uZXJyb3IoZSk7XG4gICAgfVxuICB9LCB0LnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24obiwgZSkge1xuICAgIHZhciByID0gdGhpcztcbiAgICByZXR1cm4gZSA9IGd0KGUpLCBuZXcgZShmdW5jdGlvbihhLCBpKSB7XG4gICAgICB2YXIgcyA9IG5ldyBCZSh7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uKGMpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgbihjKTtcbiAgICAgICAgICB9IGNhdGNoIChsKSB7XG4gICAgICAgICAgICBpKGwpLCBzLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBlcnJvcjogaSxcbiAgICAgICAgY29tcGxldGU6IGFcbiAgICAgIH0pO1xuICAgICAgci5zdWJzY3JpYmUocyk7XG4gICAgfSk7XG4gIH0sIHQucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihuKSB7XG4gICAgdmFyIGU7XG4gICAgcmV0dXJuIChlID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGUuc3Vic2NyaWJlKG4pO1xuICB9LCB0LnByb3RvdHlwZVtpdF0gPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgdC5wcm90b3R5cGUucGlwZSA9IGZ1bmN0aW9uKCkge1xuICAgIGZvciAodmFyIG4gPSBbXSwgZSA9IDA7IGUgPCBhcmd1bWVudHMubGVuZ3RoOyBlKyspXG4gICAgICBuW2VdID0gYXJndW1lbnRzW2VdO1xuICAgIHJldHVybiBiYShuKSh0aGlzKTtcbiAgfSwgdC5wcm90b3R5cGUudG9Qcm9taXNlID0gZnVuY3Rpb24obikge1xuICAgIHZhciBlID0gdGhpcztcbiAgICByZXR1cm4gbiA9IGd0KG4pLCBuZXcgbihmdW5jdGlvbihyLCBhKSB7XG4gICAgICB2YXIgaTtcbiAgICAgIGUuc3Vic2NyaWJlKGZ1bmN0aW9uKHMpIHtcbiAgICAgICAgcmV0dXJuIGkgPSBzO1xuICAgICAgfSwgZnVuY3Rpb24ocykge1xuICAgICAgICByZXR1cm4gYShzKTtcbiAgICAgIH0sIGZ1bmN0aW9uKCkge1xuICAgICAgICByZXR1cm4gcihpKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9LCB0LmNyZWF0ZSA9IGZ1bmN0aW9uKG4pIHtcbiAgICByZXR1cm4gbmV3IHQobik7XG4gIH0sIHQ7XG59KCk7XG5mdW5jdGlvbiBndCh0KSB7XG4gIHZhciBuO1xuICByZXR1cm4gKG4gPSB0ID8/IHBuLlByb21pc2UpICE9PSBudWxsICYmIG4gIT09IHZvaWQgMCA/IG4gOiBQcm9taXNlO1xufVxuZnVuY3Rpb24gdmEodCkge1xuICByZXR1cm4gdCAmJiBGKHQubmV4dCkgJiYgRih0LmVycm9yKSAmJiBGKHQuY29tcGxldGUpO1xufVxuZnVuY3Rpb24gRWEodCkge1xuICByZXR1cm4gdCAmJiB0IGluc3RhbmNlb2YgYXQgfHwgdmEodCkgJiYgZG4odCk7XG59XG5mdW5jdGlvbiBDYSh0KSB7XG4gIHJldHVybiBGKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQubGlmdCk7XG59XG5mdW5jdGlvbiBTYSh0KSB7XG4gIHJldHVybiBmdW5jdGlvbihuKSB7XG4gICAgaWYgKENhKG4pKVxuICAgICAgcmV0dXJuIG4ubGlmdChmdW5jdGlvbihlKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIHQoZSwgdGhpcyk7XG4gICAgICAgIH0gY2F0Y2ggKHIpIHtcbiAgICAgICAgICB0aGlzLmVycm9yKHIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZhYmxlIHR5cGVcIik7XG4gIH07XG59XG5mdW5jdGlvbiBQYSh0LCBuLCBlLCByLCBhKSB7XG4gIHJldHVybiBuZXcga2EodCwgbiwgZSwgciwgYSk7XG59XG52YXIga2EgPSBmdW5jdGlvbih0KSB7XG4gIG5lKG4sIHQpO1xuICBmdW5jdGlvbiBuKGUsIHIsIGEsIGksIHMsIGMpIHtcbiAgICB2YXIgbCA9IHQuY2FsbCh0aGlzLCBlKSB8fCB0aGlzO1xuICAgIHJldHVybiBsLm9uRmluYWxpemUgPSBzLCBsLnNob3VsZFVuc3Vic2NyaWJlID0gYywgbC5fbmV4dCA9IHIgPyBmdW5jdGlvbih1KSB7XG4gICAgICB0cnkge1xuICAgICAgICByKHUpO1xuICAgICAgfSBjYXRjaCAoZCkge1xuICAgICAgICBlLmVycm9yKGQpO1xuICAgICAgfVxuICAgIH0gOiB0LnByb3RvdHlwZS5fbmV4dCwgbC5fZXJyb3IgPSBpID8gZnVuY3Rpb24odSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaSh1KTtcbiAgICAgIH0gY2F0Y2ggKGQpIHtcbiAgICAgICAgZS5lcnJvcihkKTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9IDogdC5wcm90b3R5cGUuX2Vycm9yLCBsLl9jb21wbGV0ZSA9IGEgPyBmdW5jdGlvbigpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGEoKTtcbiAgICAgIH0gY2F0Y2ggKHUpIHtcbiAgICAgICAgZS5lcnJvcih1KTtcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTtcbiAgICAgIH1cbiAgICB9IDogdC5wcm90b3R5cGUuX2NvbXBsZXRlLCBsO1xuICB9XG4gIHJldHVybiBuLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlO1xuICAgIGlmICghdGhpcy5zaG91bGRVbnN1YnNjcmliZSB8fCB0aGlzLnNob3VsZFVuc3Vic2NyaWJlKCkpIHtcbiAgICAgIHZhciByID0gdGhpcy5jbG9zZWQ7XG4gICAgICB0LnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpLCAhciAmJiAoKGUgPSB0aGlzLm9uRmluYWxpemUpID09PSBudWxsIHx8IGUgPT09IHZvaWQgMCB8fCBlLmNhbGwodGhpcykpO1xuICAgIH1cbiAgfSwgbjtcbn0oYXQpLCBBYSA9IEdlKGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKCkge1xuICAgIHQodGhpcyksIHRoaXMubmFtZSA9IFwiT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3JcIiwgdGhpcy5tZXNzYWdlID0gXCJvYmplY3QgdW5zdWJzY3JpYmVkXCI7XG4gIH07XG59KSwgZm4gPSBmdW5jdGlvbih0KSB7XG4gIG5lKG4sIHQpO1xuICBmdW5jdGlvbiBuKCkge1xuICAgIHZhciBlID0gdC5jYWxsKHRoaXMpIHx8IHRoaXM7XG4gICAgcmV0dXJuIGUuY2xvc2VkID0gITEsIGUuY3VycmVudE9ic2VydmVycyA9IG51bGwsIGUub2JzZXJ2ZXJzID0gW10sIGUuaXNTdG9wcGVkID0gITEsIGUuaGFzRXJyb3IgPSAhMSwgZS50aHJvd25FcnJvciA9IG51bGwsIGU7XG4gIH1cbiAgcmV0dXJuIG4ucHJvdG90eXBlLmxpZnQgPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIHIgPSBuZXcgd3QodGhpcywgdGhpcyk7XG4gICAgcmV0dXJuIHIub3BlcmF0b3IgPSBlLCByO1xuICB9LCBuLnByb3RvdHlwZS5fdGhyb3dJZkNsb3NlZCA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICh0aGlzLmNsb3NlZClcbiAgICAgIHRocm93IG5ldyBBYSgpO1xuICB9LCBuLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciByID0gdGhpcztcbiAgICBGZShmdW5jdGlvbigpIHtcbiAgICAgIHZhciBhLCBpO1xuICAgICAgaWYgKHIuX3Rocm93SWZDbG9zZWQoKSwgIXIuaXNTdG9wcGVkKSB7XG4gICAgICAgIHIuY3VycmVudE9ic2VydmVycyB8fCAoci5jdXJyZW50T2JzZXJ2ZXJzID0gQXJyYXkuZnJvbShyLm9ic2VydmVycykpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGZvciAodmFyIHMgPSB5ZShyLmN1cnJlbnRPYnNlcnZlcnMpLCBjID0gcy5uZXh0KCk7ICFjLmRvbmU7IGMgPSBzLm5leHQoKSkge1xuICAgICAgICAgICAgdmFyIGwgPSBjLnZhbHVlO1xuICAgICAgICAgICAgbC5uZXh0KGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAodSkge1xuICAgICAgICAgIGEgPSB7IGVycm9yOiB1IH07XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGMgJiYgIWMuZG9uZSAmJiAoaSA9IHMucmV0dXJuKSAmJiBpLmNhbGwocyk7XG4gICAgICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgICAgIGlmIChhKSB0aHJvdyBhLmVycm9yO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9LCBuLnByb3RvdHlwZS5lcnJvciA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgciA9IHRoaXM7XG4gICAgRmUoZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoci5fdGhyb3dJZkNsb3NlZCgpLCAhci5pc1N0b3BwZWQpIHtcbiAgICAgICAgci5oYXNFcnJvciA9IHIuaXNTdG9wcGVkID0gITAsIHIudGhyb3duRXJyb3IgPSBlO1xuICAgICAgICBmb3IgKHZhciBhID0gci5vYnNlcnZlcnM7IGEubGVuZ3RoOyApXG4gICAgICAgICAgYS5zaGlmdCgpLmVycm9yKGUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9LCBuLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlID0gdGhpcztcbiAgICBGZShmdW5jdGlvbigpIHtcbiAgICAgIGlmIChlLl90aHJvd0lmQ2xvc2VkKCksICFlLmlzU3RvcHBlZCkge1xuICAgICAgICBlLmlzU3RvcHBlZCA9ICEwO1xuICAgICAgICBmb3IgKHZhciByID0gZS5vYnNlcnZlcnM7IHIubGVuZ3RoOyApXG4gICAgICAgICAgci5zaGlmdCgpLmNvbXBsZXRlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH0sIG4ucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7XG4gICAgdGhpcy5pc1N0b3BwZWQgPSB0aGlzLmNsb3NlZCA9ICEwLCB0aGlzLm9ic2VydmVycyA9IHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7XG4gIH0sIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSwgXCJvYnNlcnZlZFwiLCB7XG4gICAgZ2V0OiBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBlO1xuICAgICAgcmV0dXJuICgoZSA9IHRoaXMub2JzZXJ2ZXJzKSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlLmxlbmd0aCkgPiAwO1xuICAgIH0sXG4gICAgZW51bWVyYWJsZTogITEsXG4gICAgY29uZmlndXJhYmxlOiAhMFxuICB9KSwgbi5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICByZXR1cm4gdGhpcy5fdGhyb3dJZkNsb3NlZCgpLCB0LnByb3RvdHlwZS5fdHJ5U3Vic2NyaWJlLmNhbGwodGhpcywgZSk7XG4gIH0sIG4ucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihlKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Rocm93SWZDbG9zZWQoKSwgdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhlKSwgdGhpcy5faW5uZXJTdWJzY3JpYmUoZSk7XG4gIH0sIG4ucHJvdG90eXBlLl9pbm5lclN1YnNjcmliZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgciA9IHRoaXMsIGEgPSB0aGlzLCBpID0gYS5oYXNFcnJvciwgcyA9IGEuaXNTdG9wcGVkLCBjID0gYS5vYnNlcnZlcnM7XG4gICAgcmV0dXJuIGkgfHwgcyA/IHVuIDogKHRoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGwsIGMucHVzaChlKSwgbmV3IFBlKGZ1bmN0aW9uKCkge1xuICAgICAgci5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbCwgTmUoYywgZSk7XG4gICAgfSkpO1xuICB9LCBuLnByb3RvdHlwZS5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyA9IGZ1bmN0aW9uKGUpIHtcbiAgICB2YXIgciA9IHRoaXMsIGEgPSByLmhhc0Vycm9yLCBpID0gci50aHJvd25FcnJvciwgcyA9IHIuaXNTdG9wcGVkO1xuICAgIGEgPyBlLmVycm9yKGkpIDogcyAmJiBlLmNvbXBsZXRlKCk7XG4gIH0sIG4ucHJvdG90eXBlLmFzT2JzZXJ2YWJsZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlID0gbmV3IFgoKTtcbiAgICByZXR1cm4gZS5zb3VyY2UgPSB0aGlzLCBlO1xuICB9LCBuLmNyZWF0ZSA9IGZ1bmN0aW9uKGUsIHIpIHtcbiAgICByZXR1cm4gbmV3IHd0KGUsIHIpO1xuICB9LCBuO1xufShYKSwgd3QgPSBmdW5jdGlvbih0KSB7XG4gIG5lKG4sIHQpO1xuICBmdW5jdGlvbiBuKGUsIHIpIHtcbiAgICB2YXIgYSA9IHQuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICAgIHJldHVybiBhLmRlc3RpbmF0aW9uID0gZSwgYS5zb3VyY2UgPSByLCBhO1xuICB9XG4gIHJldHVybiBuLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciByLCBhO1xuICAgIChhID0gKHIgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByLm5leHQpID09PSBudWxsIHx8IGEgPT09IHZvaWQgMCB8fCBhLmNhbGwociwgZSk7XG4gIH0sIG4ucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciByLCBhO1xuICAgIChhID0gKHIgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgPyB2b2lkIDAgOiByLmVycm9yKSA9PT0gbnVsbCB8fCBhID09PSB2b2lkIDAgfHwgYS5jYWxsKHIsIGUpO1xuICB9LCBuLnByb3RvdHlwZS5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBlLCByO1xuICAgIChyID0gKGUgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlLmNvbXBsZXRlKSA9PT0gbnVsbCB8fCByID09PSB2b2lkIDAgfHwgci5jYWxsKGUpO1xuICB9LCBuLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24oZSkge1xuICAgIHZhciByLCBhO1xuICAgIHJldHVybiAoYSA9IChyID0gdGhpcy5zb3VyY2UpID09PSBudWxsIHx8IHIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHIuc3Vic2NyaWJlKGUpKSAhPT0gbnVsbCAmJiBhICE9PSB2b2lkIDAgPyBhIDogdW47XG4gIH0sIG47XG59KGZuKSwgSWEgPSB7XG4gIG5vdzogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIERhdGUubm93KCk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn0sIFJhID0gZnVuY3Rpb24odCkge1xuICBuZShuLCB0KTtcbiAgZnVuY3Rpb24gbihlLCByKSB7XG4gICAgcmV0dXJuIHQuY2FsbCh0aGlzKSB8fCB0aGlzO1xuICB9XG4gIHJldHVybiBuLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKGUsIHIpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSwgbjtcbn0oUGUpLCBidCA9IHtcbiAgc2V0SW50ZXJ2YWw6IGZ1bmN0aW9uKHQsIG4pIHtcbiAgICBmb3IgKHZhciBlID0gW10sIHIgPSAyOyByIDwgYXJndW1lbnRzLmxlbmd0aDsgcisrKVxuICAgICAgZVtyIC0gMl0gPSBhcmd1bWVudHNbcl07XG4gICAgcmV0dXJuIHNldEludGVydmFsLmFwcGx5KHZvaWQgMCwgT2UoW3QsIG5dLCBEZShlKSkpO1xuICB9LFxuICBjbGVhckludGVydmFsOiBmdW5jdGlvbih0KSB7XG4gICAgcmV0dXJuIGNsZWFySW50ZXJ2YWwodCk7XG4gIH0sXG4gIGRlbGVnYXRlOiB2b2lkIDBcbn0sIEZhID0gZnVuY3Rpb24odCkge1xuICBuZShuLCB0KTtcbiAgZnVuY3Rpb24gbihlLCByKSB7XG4gICAgdmFyIGEgPSB0LmNhbGwodGhpcywgZSwgcikgfHwgdGhpcztcbiAgICByZXR1cm4gYS5zY2hlZHVsZXIgPSBlLCBhLndvcmsgPSByLCBhLnBlbmRpbmcgPSAhMSwgYTtcbiAgfVxuICByZXR1cm4gbi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihlLCByKSB7XG4gICAgdmFyIGE7XG4gICAgaWYgKHIgPT09IHZvaWQgMCAmJiAociA9IDApLCB0aGlzLmNsb3NlZClcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIHRoaXMuc3RhdGUgPSBlO1xuICAgIHZhciBpID0gdGhpcy5pZCwgcyA9IHRoaXMuc2NoZWR1bGVyO1xuICAgIHJldHVybiBpICE9IG51bGwgJiYgKHRoaXMuaWQgPSB0aGlzLnJlY3ljbGVBc3luY0lkKHMsIGksIHIpKSwgdGhpcy5wZW5kaW5nID0gITAsIHRoaXMuZGVsYXkgPSByLCB0aGlzLmlkID0gKGEgPSB0aGlzLmlkKSAhPT0gbnVsbCAmJiBhICE9PSB2b2lkIDAgPyBhIDogdGhpcy5yZXF1ZXN0QXN5bmNJZChzLCB0aGlzLmlkLCByKSwgdGhpcztcbiAgfSwgbi5wcm90b3R5cGUucmVxdWVzdEFzeW5jSWQgPSBmdW5jdGlvbihlLCByLCBhKSB7XG4gICAgcmV0dXJuIGEgPT09IHZvaWQgMCAmJiAoYSA9IDApLCBidC5zZXRJbnRlcnZhbChlLmZsdXNoLmJpbmQoZSwgdGhpcyksIGEpO1xuICB9LCBuLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uKGUsIHIsIGEpIHtcbiAgICBpZiAoYSA9PT0gdm9pZCAwICYmIChhID0gMCksIGEgIT0gbnVsbCAmJiB0aGlzLmRlbGF5ID09PSBhICYmIHRoaXMucGVuZGluZyA9PT0gITEpXG4gICAgICByZXR1cm4gcjtcbiAgICByICE9IG51bGwgJiYgYnQuY2xlYXJJbnRlcnZhbChyKTtcbiAgfSwgbi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKGUsIHIpIHtcbiAgICBpZiAodGhpcy5jbG9zZWQpXG4gICAgICByZXR1cm4gbmV3IEVycm9yKFwiZXhlY3V0aW5nIGEgY2FuY2VsbGVkIGFjdGlvblwiKTtcbiAgICB0aGlzLnBlbmRpbmcgPSAhMTtcbiAgICB2YXIgYSA9IHRoaXMuX2V4ZWN1dGUoZSwgcik7XG4gICAgaWYgKGEpXG4gICAgICByZXR1cm4gYTtcbiAgICB0aGlzLnBlbmRpbmcgPT09ICExICYmIHRoaXMuaWQgIT0gbnVsbCAmJiAodGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQodGhpcy5zY2hlZHVsZXIsIHRoaXMuaWQsIG51bGwpKTtcbiAgfSwgbi5wcm90b3R5cGUuX2V4ZWN1dGUgPSBmdW5jdGlvbihlLCByKSB7XG4gICAgdmFyIGEgPSAhMSwgaTtcbiAgICB0cnkge1xuICAgICAgdGhpcy53b3JrKGUpO1xuICAgIH0gY2F0Y2ggKHMpIHtcbiAgICAgIGEgPSAhMCwgaSA9IHMgfHwgbmV3IEVycm9yKFwiU2NoZWR1bGVkIGFjdGlvbiB0aHJldyBmYWxzeSBlcnJvclwiKTtcbiAgICB9XG4gICAgaWYgKGEpXG4gICAgICByZXR1cm4gdGhpcy51bnN1YnNjcmliZSgpLCBpO1xuICB9LCBuLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkge1xuICAgIGlmICghdGhpcy5jbG9zZWQpIHtcbiAgICAgIHZhciBlID0gdGhpcywgciA9IGUuaWQsIGEgPSBlLnNjaGVkdWxlciwgaSA9IGEuYWN0aW9ucztcbiAgICAgIHRoaXMud29yayA9IHRoaXMuc3RhdGUgPSB0aGlzLnNjaGVkdWxlciA9IG51bGwsIHRoaXMucGVuZGluZyA9ICExLCBOZShpLCB0aGlzKSwgciAhPSBudWxsICYmICh0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChhLCByLCBudWxsKSksIHRoaXMuZGVsYXkgPSBudWxsLCB0LnByb3RvdHlwZS51bnN1YnNjcmliZS5jYWxsKHRoaXMpO1xuICAgIH1cbiAgfSwgbjtcbn0oUmEpLCB2dCA9IGZ1bmN0aW9uKCkge1xuICBmdW5jdGlvbiB0KG4sIGUpIHtcbiAgICBlID09PSB2b2lkIDAgJiYgKGUgPSB0Lm5vdyksIHRoaXMuc2NoZWR1bGVyQWN0aW9uQ3RvciA9IG4sIHRoaXMubm93ID0gZTtcbiAgfVxuICByZXR1cm4gdC5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihuLCBlLCByKSB7XG4gICAgcmV0dXJuIGUgPT09IHZvaWQgMCAmJiAoZSA9IDApLCBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsIG4pLnNjaGVkdWxlKHIsIGUpO1xuICB9LCB0Lm5vdyA9IElhLm5vdywgdDtcbn0oKSwgTWEgPSBmdW5jdGlvbih0KSB7XG4gIG5lKG4sIHQpO1xuICBmdW5jdGlvbiBuKGUsIHIpIHtcbiAgICByID09PSB2b2lkIDAgJiYgKHIgPSB2dC5ub3cpO1xuICAgIHZhciBhID0gdC5jYWxsKHRoaXMsIGUsIHIpIHx8IHRoaXM7XG4gICAgcmV0dXJuIGEuYWN0aW9ucyA9IFtdLCBhLl9hY3RpdmUgPSAhMSwgYTtcbiAgfVxuICByZXR1cm4gbi5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbihlKSB7XG4gICAgdmFyIHIgPSB0aGlzLmFjdGlvbnM7XG4gICAgaWYgKHRoaXMuX2FjdGl2ZSkge1xuICAgICAgci5wdXNoKGUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgYTtcbiAgICB0aGlzLl9hY3RpdmUgPSAhMDtcbiAgICBkb1xuICAgICAgaWYgKGEgPSBlLmV4ZWN1dGUoZS5zdGF0ZSwgZS5kZWxheSkpXG4gICAgICAgIGJyZWFrO1xuICAgIHdoaWxlIChlID0gci5zaGlmdCgpKTtcbiAgICBpZiAodGhpcy5fYWN0aXZlID0gITEsIGEpIHtcbiAgICAgIGZvciAoOyBlID0gci5zaGlmdCgpOyApXG4gICAgICAgIGUudW5zdWJzY3JpYmUoKTtcbiAgICAgIHRocm93IGE7XG4gICAgfVxuICB9LCBuO1xufSh2dCksIERhID0gbmV3IE1hKEZhKSwgT2EgPSBmdW5jdGlvbih0KSB7XG4gIHJldHVybiB0ICYmIHR5cGVvZiB0Lmxlbmd0aCA9PSBcIm51bWJlclwiICYmIHR5cGVvZiB0ICE9IFwiZnVuY3Rpb25cIjtcbn07XG5mdW5jdGlvbiBOYSh0KSB7XG4gIHJldHVybiBGKHQgPT0gbnVsbCA/IHZvaWQgMCA6IHQudGhlbik7XG59XG5mdW5jdGlvbiBUYSh0KSB7XG4gIHJldHVybiBGKHRbaXRdKTtcbn1cbmZ1bmN0aW9uIExhKHQpIHtcbiAgcmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yICYmIEYodCA9PSBudWxsID8gdm9pZCAwIDogdFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0pO1xufVxuZnVuY3Rpb24gVWEodCkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcihcIllvdSBwcm92aWRlZCBcIiArICh0ICE9PSBudWxsICYmIHR5cGVvZiB0ID09IFwib2JqZWN0XCIgPyBcImFuIGludmFsaWQgb2JqZWN0XCIgOiBcIidcIiArIHQgKyBcIidcIikgKyBcIiB3aGVyZSBhIHN0cmVhbSB3YXMgZXhwZWN0ZWQuIFlvdSBjYW4gcHJvdmlkZSBhbiBPYnNlcnZhYmxlLCBQcm9taXNlLCBSZWFkYWJsZVN0cmVhbSwgQXJyYXksIEFzeW5jSXRlcmFibGUsIG9yIEl0ZXJhYmxlLlwiKTtcbn1cbmZ1bmN0aW9uIGphKCkge1xuICByZXR1cm4gdHlwZW9mIFN5bWJvbCAhPSBcImZ1bmN0aW9uXCIgfHwgIVN5bWJvbC5pdGVyYXRvciA/IFwiQEBpdGVyYXRvclwiIDogU3ltYm9sLml0ZXJhdG9yO1xufVxudmFyIHhhID0gamEoKTtcbmZ1bmN0aW9uICRhKHQpIHtcbiAgcmV0dXJuIEYodCA9PSBudWxsID8gdm9pZCAwIDogdFt4YV0pO1xufVxuZnVuY3Rpb24gemEodCkge1xuICByZXR1cm4gbWEodGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgZSwgciwgYSwgaTtcbiAgICByZXR1cm4gbG4odGhpcywgZnVuY3Rpb24ocykge1xuICAgICAgc3dpdGNoIChzLmxhYmVsKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBlID0gdC5nZXRSZWFkZXIoKSwgcy5sYWJlbCA9IDE7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICBzLnRyeXMucHVzaChbMSwgLCA5LCAxMF0pLCBzLmxhYmVsID0gMjtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHJldHVybiBbNCwgcGUoZS5yZWFkKCkpXTtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJldHVybiByID0gcy5zZW50KCksIGEgPSByLnZhbHVlLCBpID0gci5kb25lLCBpID8gWzQsIHBlKHZvaWQgMCldIDogWzMsIDVdO1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgcmV0dXJuIFsyLCBzLnNlbnQoKV07XG4gICAgICAgIGNhc2UgNTpcbiAgICAgICAgICByZXR1cm4gWzQsIHBlKGEpXTtcbiAgICAgICAgY2FzZSA2OlxuICAgICAgICAgIHJldHVybiBbNCwgcy5zZW50KCldO1xuICAgICAgICBjYXNlIDc6XG4gICAgICAgICAgcmV0dXJuIHMuc2VudCgpLCBbMywgMl07XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIHJldHVybiBlLnJlbGVhc2VMb2NrKCksIFs3XTtcbiAgICAgICAgY2FzZSAxMDpcbiAgICAgICAgICByZXR1cm4gWzJdO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIEdhKHQpIHtcbiAgcmV0dXJuIEYodCA9PSBudWxsID8gdm9pZCAwIDogdC5nZXRSZWFkZXIpO1xufVxuZnVuY3Rpb24gVmEodCkge1xuICBpZiAodCBpbnN0YW5jZW9mIFgpXG4gICAgcmV0dXJuIHQ7XG4gIGlmICh0ICE9IG51bGwpIHtcbiAgICBpZiAoVGEodCkpXG4gICAgICByZXR1cm4gcWEodCk7XG4gICAgaWYgKE9hKHQpKVxuICAgICAgcmV0dXJuIFlhKHQpO1xuICAgIGlmIChOYSh0KSlcbiAgICAgIHJldHVybiBLYSh0KTtcbiAgICBpZiAoTGEodCkpXG4gICAgICByZXR1cm4gaG4odCk7XG4gICAgaWYgKCRhKHQpKVxuICAgICAgcmV0dXJuIFdhKHQpO1xuICAgIGlmIChHYSh0KSlcbiAgICAgIHJldHVybiBKYSh0KTtcbiAgfVxuICB0aHJvdyBVYSh0KTtcbn1cbmZ1bmN0aW9uIHFhKHQpIHtcbiAgcmV0dXJuIG5ldyBYKGZ1bmN0aW9uKG4pIHtcbiAgICB2YXIgZSA9IHRbaXRdKCk7XG4gICAgaWYgKEYoZS5zdWJzY3JpYmUpKVxuICAgICAgcmV0dXJuIGUuc3Vic2NyaWJlKG4pO1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcm92aWRlZCBvYmplY3QgZG9lcyBub3QgY29ycmVjdGx5IGltcGxlbWVudCBTeW1ib2wub2JzZXJ2YWJsZVwiKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBZYSh0KSB7XG4gIHJldHVybiBuZXcgWChmdW5jdGlvbihuKSB7XG4gICAgZm9yICh2YXIgZSA9IDA7IGUgPCB0Lmxlbmd0aCAmJiAhbi5jbG9zZWQ7IGUrKylcbiAgICAgIG4ubmV4dCh0W2VdKTtcbiAgICBuLmNvbXBsZXRlKCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gS2EodCkge1xuICByZXR1cm4gbmV3IFgoZnVuY3Rpb24obikge1xuICAgIHQudGhlbihmdW5jdGlvbihlKSB7XG4gICAgICBuLmNsb3NlZCB8fCAobi5uZXh0KGUpLCBuLmNvbXBsZXRlKCkpO1xuICAgIH0sIGZ1bmN0aW9uKGUpIHtcbiAgICAgIHJldHVybiBuLmVycm9yKGUpO1xuICAgIH0pLnRoZW4obnVsbCwgeW4pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIFdhKHQpIHtcbiAgcmV0dXJuIG5ldyBYKGZ1bmN0aW9uKG4pIHtcbiAgICB2YXIgZSwgcjtcbiAgICB0cnkge1xuICAgICAgZm9yICh2YXIgYSA9IHllKHQpLCBpID0gYS5uZXh0KCk7ICFpLmRvbmU7IGkgPSBhLm5leHQoKSkge1xuICAgICAgICB2YXIgcyA9IGkudmFsdWU7XG4gICAgICAgIGlmIChuLm5leHQocyksIG4uY2xvc2VkKVxuICAgICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChjKSB7XG4gICAgICBlID0geyBlcnJvcjogYyB9O1xuICAgIH0gZmluYWxseSB7XG4gICAgICB0cnkge1xuICAgICAgICBpICYmICFpLmRvbmUgJiYgKHIgPSBhLnJldHVybikgJiYgci5jYWxsKGEpO1xuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgaWYgKGUpIHRocm93IGUuZXJyb3I7XG4gICAgICB9XG4gICAgfVxuICAgIG4uY29tcGxldGUoKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBobih0KSB7XG4gIHJldHVybiBuZXcgWChmdW5jdGlvbihuKSB7XG4gICAgSGEodCwgbikuY2F0Y2goZnVuY3Rpb24oZSkge1xuICAgICAgcmV0dXJuIG4uZXJyb3IoZSk7XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gSmEodCkge1xuICByZXR1cm4gaG4oemEodCkpO1xufVxuZnVuY3Rpb24gSGEodCwgbikge1xuICB2YXIgZSwgciwgYSwgaTtcbiAgcmV0dXJuIHBhKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbigpIHtcbiAgICB2YXIgcywgYztcbiAgICByZXR1cm4gbG4odGhpcywgZnVuY3Rpb24obCkge1xuICAgICAgc3dpdGNoIChsLmxhYmVsKSB7XG4gICAgICAgIGNhc2UgMDpcbiAgICAgICAgICBsLnRyeXMucHVzaChbMCwgNSwgNiwgMTFdKSwgZSA9IHlhKHQpLCBsLmxhYmVsID0gMTtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIHJldHVybiBbNCwgZS5uZXh0KCldO1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgaWYgKHIgPSBsLnNlbnQoKSwgISFyLmRvbmUpIHJldHVybiBbMywgNF07XG4gICAgICAgICAgaWYgKHMgPSByLnZhbHVlLCBuLm5leHQocyksIG4uY2xvc2VkKVxuICAgICAgICAgICAgcmV0dXJuIFsyXTtcbiAgICAgICAgICBsLmxhYmVsID0gMztcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHJldHVybiBbMywgMV07XG4gICAgICAgIGNhc2UgNDpcbiAgICAgICAgICByZXR1cm4gWzMsIDExXTtcbiAgICAgICAgY2FzZSA1OlxuICAgICAgICAgIHJldHVybiBjID0gbC5zZW50KCksIGEgPSB7IGVycm9yOiBjIH0sIFszLCAxMV07XG4gICAgICAgIGNhc2UgNjpcbiAgICAgICAgICByZXR1cm4gbC50cnlzLnB1c2goWzYsICwgOSwgMTBdKSwgciAmJiAhci5kb25lICYmIChpID0gZS5yZXR1cm4pID8gWzQsIGkuY2FsbChlKV0gOiBbMywgOF07XG4gICAgICAgIGNhc2UgNzpcbiAgICAgICAgICBsLnNlbnQoKSwgbC5sYWJlbCA9IDg7XG4gICAgICAgIGNhc2UgODpcbiAgICAgICAgICByZXR1cm4gWzMsIDEwXTtcbiAgICAgICAgY2FzZSA5OlxuICAgICAgICAgIGlmIChhKSB0aHJvdyBhLmVycm9yO1xuICAgICAgICAgIHJldHVybiBbN107XG4gICAgICAgIGNhc2UgMTA6XG4gICAgICAgICAgcmV0dXJuIFs3XTtcbiAgICAgICAgY2FzZSAxMTpcbiAgICAgICAgICByZXR1cm4gbi5jb21wbGV0ZSgpLCBbMl07XG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xufVxuZnVuY3Rpb24gWmEodCwgbiwgZSwgciwgYSkge1xuICByID09PSB2b2lkIDAgJiYgKHIgPSAwKSwgYSA9PT0gdm9pZCAwICYmIChhID0gITEpO1xuICB2YXIgaSA9IG4uc2NoZWR1bGUoZnVuY3Rpb24oKSB7XG4gICAgZSgpLCBhID8gdC5hZGQodGhpcy5zY2hlZHVsZShudWxsLCByKSkgOiB0aGlzLnVuc3Vic2NyaWJlKCk7XG4gIH0sIHIpO1xuICBpZiAodC5hZGQoaSksICFhKVxuICAgIHJldHVybiBpO1xufVxuZnVuY3Rpb24gQmEodCwgbikge1xuICB2YXIgZSA9IEYodCkgPyB0IDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHQ7XG4gIH0sIHIgPSBmdW5jdGlvbihhKSB7XG4gICAgcmV0dXJuIGEuZXJyb3IoZSgpKTtcbiAgfTtcbiAgcmV0dXJuIG5ldyBYKHIpO1xufVxudmFyIFFhID0gR2UoZnVuY3Rpb24odCkge1xuICByZXR1cm4gZnVuY3Rpb24oKSB7XG4gICAgdCh0aGlzKSwgdGhpcy5uYW1lID0gXCJFbXB0eUVycm9yXCIsIHRoaXMubWVzc2FnZSA9IFwibm8gZWxlbWVudHMgaW4gc2VxdWVuY2VcIjtcbiAgfTtcbn0pO1xuZnVuY3Rpb24gWGEodCwgbikge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZSwgcikge1xuICAgIHZhciBhID0gITEsIGk7XG4gICAgdC5zdWJzY3JpYmUoe1xuICAgICAgbmV4dDogZnVuY3Rpb24ocykge1xuICAgICAgICBpID0gcywgYSA9ICEwO1xuICAgICAgfSxcbiAgICAgIGVycm9yOiByLFxuICAgICAgY29tcGxldGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICBhID8gZShpKSA6IHIobmV3IFFhKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cbmZ1bmN0aW9uIGVpKHQpIHtcbiAgcmV0dXJuIHQgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTih0KTtcbn1cbnZhciB0aSA9IEdlKGZ1bmN0aW9uKHQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGUpIHtcbiAgICBlID09PSB2b2lkIDAgJiYgKGUgPSBudWxsKSwgdCh0aGlzKSwgdGhpcy5tZXNzYWdlID0gXCJUaW1lb3V0IGhhcyBvY2N1cnJlZFwiLCB0aGlzLm5hbWUgPSBcIlRpbWVvdXRFcnJvclwiLCB0aGlzLmluZm8gPSBlO1xuICB9O1xufSk7XG5mdW5jdGlvbiBuaSh0LCBuKSB7XG4gIHZhciBlID0gZWkodCkgPyB7IGZpcnN0OiB0IH0gOiB0eXBlb2YgdCA9PSBcIm51bWJlclwiID8geyBlYWNoOiB0IH0gOiB0LCByID0gZS5maXJzdCwgYSA9IGUuZWFjaCwgaSA9IGUud2l0aCwgcyA9IGkgPT09IHZvaWQgMCA/IHJpIDogaSwgYyA9IGUuc2NoZWR1bGVyLCBsID0gYyA9PT0gdm9pZCAwID8gRGEgOiBjLCB1ID0gZS5tZXRhLCBkID0gdSA9PT0gdm9pZCAwID8gbnVsbCA6IHU7XG4gIGlmIChyID09IG51bGwgJiYgYSA9PSBudWxsKVxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJObyB0aW1lb3V0IHByb3ZpZGVkLlwiKTtcbiAgcmV0dXJuIFNhKGZ1bmN0aW9uKGYsIGgpIHtcbiAgICB2YXIgeSwgbSwgXyA9IG51bGwsIHYgPSAwLCB3ID0gZnVuY3Rpb24oYikge1xuICAgICAgbSA9IFphKGgsIGwsIGZ1bmN0aW9uKCkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIHkudW5zdWJzY3JpYmUoKSwgVmEocyh7XG4gICAgICAgICAgICBtZXRhOiBkLFxuICAgICAgICAgICAgbGFzdFZhbHVlOiBfLFxuICAgICAgICAgICAgc2VlbjogdlxuICAgICAgICAgIH0pKS5zdWJzY3JpYmUoaCk7XG4gICAgICAgIH0gY2F0Y2ggKEUpIHtcbiAgICAgICAgICBoLmVycm9yKEUpO1xuICAgICAgICB9XG4gICAgICB9LCBiKTtcbiAgICB9O1xuICAgIHkgPSBmLnN1YnNjcmliZShQYShoLCBmdW5jdGlvbihiKSB7XG4gICAgICBtID09IG51bGwgfHwgbS51bnN1YnNjcmliZSgpLCB2KyssIGgubmV4dChfID0gYiksIGEgPiAwICYmIHcoYSk7XG4gICAgfSwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKCkge1xuICAgICAgbSAhPSBudWxsICYmIG0uY2xvc2VkIHx8IG0gPT0gbnVsbCB8fCBtLnVuc3Vic2NyaWJlKCksIF8gPSBudWxsO1xuICAgIH0pKSwgIXYgJiYgdyhyICE9IG51bGwgPyB0eXBlb2YgciA9PSBcIm51bWJlclwiID8gciA6ICtyIC0gbC5ub3coKSA6IGEpO1xuICB9KTtcbn1cbmZ1bmN0aW9uIHJpKHQpIHtcbiAgdGhyb3cgbmV3IHRpKHQpO1xufVxuY2xhc3MgTWUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNldCA9IChuKSA9PiB7XG4gICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJMb2FkZWRPbmNlIGlzIGFscmVhZHkgaW4gc3VjY2VzcyBzdGF0ZVwiKTtcbiAgICAgIHRoaXMuX2N1cnJlbnQgPSB7IHN0YXR1czogXCJzdWNjZXNzXCIsIGlzU3VjY2VzczogITAsIGxvYWRlZFZhbHVlOiBuIH0sIHRoaXMuX3N1YmplY3QubmV4dChuKSwgdGhpcy5fc3ViamVjdC5jb21wbGV0ZSgpO1xuICAgIH0sIHRoaXMudGhyb3cgPSAobiwgZSkgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTG9hZGVkT25jZSBpcyBhbHJlYWR5IGluIHN1Y2Nlc3Mgc3RhdGVcIik7XG4gICAgICB0aGlzLl9jdXJyZW50ID0geyBzdGF0dXM6IFwiZXJyb3JcIiwgaXNTdWNjZXNzOiAhMSwgZXJyb3I6IG4sIGVyck1zZzogZSB9LCB0aGlzLl9zdWJqZWN0LmVycm9yKG4pO1xuICAgIH0sIHRoaXMuZ2V0VmFsdWVJZkxvYWRlZEVsc2UgPSAobikgPT4gdGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwic3VjY2Vzc1wiID8gdGhpcy5fY3VycmVudC5sb2FkZWRWYWx1ZSA6IG4sIHRoaXMuc3Vic2NyaWJlID0gKG4pID0+IHtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgbih0aGlzLl9jdXJyZW50KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5fY3VycmVudC5zdGF0dXMgPT09IFwiZXJyb3JcIiAmJiBuKHRoaXMuX2N1cnJlbnQpO1xuICAgICAgY29uc3QgZSA9IHRoaXMuX3N1YmplY3Quc3Vic2NyaWJlKHtcbiAgICAgICAgbmV4dDogKCkgPT4ge1xuICAgICAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJzdWNjZXNzXCIpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0YXRlIChuZXh0KTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIG4odGhpcy5fY3VycmVudCksIGUudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3I6ICgpID0+IHtcbiAgICAgICAgICBpZiAodGhpcy5fY3VycmVudC5zdGF0dXMgIT09IFwiZXJyb3JcIilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RhdGUgKGVycm9yKTogcGxlYXNlIG1ha2Ugc3VyZSB0byB1cGRhdGUgX2N1cnJlbnQgYmVmb3JlIHRoZSBzdWJqZWN0XCIpO1xuICAgICAgICAgIG4odGhpcy5fY3VycmVudCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0sIHRoaXMud2FpdEZvckxvYWQgPSAobikgPT4ge1xuICAgICAgaWYgKHRoaXMuX2N1cnJlbnQuc3RhdHVzID09PSBcInN1Y2Nlc3NcIikgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9jdXJyZW50LmxvYWRlZFZhbHVlKTtcbiAgICAgIGlmICh0aGlzLl9jdXJyZW50LnN0YXR1cyA9PT0gXCJlcnJvclwiKSByZXR1cm4gUHJvbWlzZS5yZWplY3QodGhpcy5fY3VycmVudC5lcnJvcik7XG4gICAgICB0aGlzLl9jdXJyZW50LnN0YXR1cyAhPT0gXCJpbml0aWFsXCIgJiYgVWUodGhpcy5fY3VycmVudCk7XG4gICAgICBjb25zdCBlID0ge1xuICAgICAgICBmaXJzdDogbi50aW1lb3V0U2VjICogMWUzLFxuICAgICAgICB3aXRoOiAoKSA9PiBCYSgoKSA9PiBuZXcgRXJyb3Iobi50aW1lb3V0RXJyTXNnKSlcbiAgICAgIH07XG4gICAgICByZXR1cm4gWGEodGhpcy5fc3ViamVjdC5waXBlKG5pKGUpKSk7XG4gICAgfSwgdGhpcy5fY3VycmVudCA9IHsgc3RhdHVzOiBcImluaXRpYWxcIiwgaXNTdWNjZXNzOiAhMSB9LCB0aGlzLl9zdWJqZWN0ID0gbmV3IGZuKCk7XG4gIH1cbiAgZ2V0IGN1cnJlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnQ7XG4gIH1cbn1cbmNvbnN0IHsgbG9nX186IG9pLCBlcnJfXzogYWkgfSA9IFAoXCJpbml0LWZsb3dzXCIpLCBhZSA9ICh0LCBuKSA9PiB7XG4gIGNvbnN0IGUgPSBuZXcgTWUoKTtcbiAgcmV0dXJuIHtcbiAgICBwdWJsaXNoZXI6IGUsXG4gICAgaW5pdGlhbGl6ZTogYXN5bmMgKHIpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmIChlLmN1cnJlbnQuaXNTdWNjZXNzKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoaXMgZmxvdyBoYXMgYWxyZWFkeSBiZWVuIGluaXRpYWxpemVkLlwiKTtcbiAgICAgICAgY29uc3QgYSA9IGF3YWl0IG4ocik7XG4gICAgICAgIG9pKGDinJQgJHt0fSBmbG93IGluaXRpYWxpemVkIHN1Y2Nlc3NmdWxseS4gUmVzdWx0OmAsIGEpLCBlLnNldChhKTtcbiAgICAgIH0gY2F0Y2ggKGEpIHtcbiAgICAgICAgYWkoYPCdma0gJHt0fSBmbG93IGluaXRpYWxpemF0aW9uIGZhaWxlZC4gRXJyb3I6YCwgSChhKSwgXCJEZXRhaWxzOlwiLCBhKSwgZS50aHJvdyhhLCBIKGEpKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG59LCBpaSA9IGFzeW5jICh0LCBuLCBlKSA9PiB7XG4gIGF3YWl0IFByb21pc2UuYWxsKE9iamVjdC52YWx1ZXModCkubWFwKChyKSA9PiByLmluaXRpYWxpemUoeyBjb250ZXh0OiBuLCBmb3JtQ2FsbGJhY2tzOiBlIH0pKSk7XG59LCBzaSA9ICgpID0+ICh7XG4gIC8vIPCfkqEgQWRkIG5ldyBpbml0IGZsb3dzIGhlcmVcbiAgLy8gU3RyaXBlIFBSXG4gIHN0cmlwZVBSOiBhZShcIlN0cmlwZSBQUlwiLCBBLnN0cmlwZVBSLmluaXQpLFxuICAvLyBTdHJpcGUgTGlua1xuICBzdHJpcGVMaW5rOiBhZShcIlN0cmlwZSBMaW5rXCIsIEEuc3RyaXBlTGluay5pbml0KSxcbiAgLy8gQWlyd2FsbGV4IEdvb2dsZVBheVxuICBhaXJ3YWxsZXhHb29nbGVQYXk6IGFlKFwiQWlyd2FsbGV4IEdvb2dsZVBheVwiLCBBLmFpcndhbGxleEdvb2dsZVBheS5pbml0KSxcbiAgLy8gQWlyd2FsbGV4IEFwcGxlUGF5XG4gIGFpcndhbGxleEFwcGxlUGF5OiBhZShcIkFpcndhbGxleCBBcHBsZVBheVwiLCBBLmFpcndhbGxleEFwcGxlUGF5LmluaXQpLFxuICAvLyBMb29wXG4gIGxvb3A6IGFlKFwiTG9vcFwiLCBBLmxvb3BDcnlwdG8uaW5pdCksXG4gIC8vIEF1dGhuZXQgR29vZ2xlUGF5XG4gIGF1dGhvcml6ZU5ldEdvb2dsZVBheTogYWUoXCJBdXRobmV0IEdvb2dsZVBheVwiLCBBLmF1dGhvcml6ZU5ldEdvb2dsZVBheS5pbml0KSxcbiAgLy8gQXV0aG5ldCBBcHBsZVBheVxuICBhdXRob3JpemVOZXRBcHBsZVBheTogYWUoXCJBdXRobmV0IEFwcGxlUGF5XCIsIEEuYXV0aG9yaXplTmV0QXBwbGVQYXkuaW5pdClcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbn0pLCB7IGVycl9fOiBjaSB9ID0gUChcImZvcm0tY2FsbGJhY2tzXCIpLCAkID0geiQxLmZ1bmN0aW9uKCkub3B0aW9uYWwoKSwgRXQgPSB6JDEub2JqZWN0KHtcbiAgb25Gb2N1czogJCxcbiAgb25CbHVyOiAkLFxuICBvbkNoYW5nZTogJCxcbiAgb25Mb2FkOiAkLFxuICBvbkxvYWRFcnJvcjogJCxcbiAgb25WYWxpZGF0aW9uRXJyb3I6ICQsXG4gIG9uQ2hlY2tvdXRTdGFydGVkOiAkLFxuICBvbkNoZWNrb3V0U3VjY2VzczogJCxcbiAgb25TZXR1cFBheW1lbnRNZXRob2RTdWNjZXNzOiAkLFxuICBvbkNoZWNrb3V0RXJyb3I6ICQsXG4gIG9uUGF5bWVudFJlcXVlc3RMb2FkOiAkXG59KSwgVyA9IGNsYXNzIFcge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLnNldENhbGxiYWNrcyA9IChuKSA9PiB7XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSBXLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCksIE9iamVjdC5lbnRyaWVzKG4pLmZvckVhY2goKFtlLCByXSkgPT4ge1xuICAgICAgICBjb25zdCBhID0ga24oZSwgciA/PyBXLk5PT1AsIGNpKTtcbiAgICAgICAgdGhpcy5fY2FsbGJhY2tzW2VdID0gYTtcbiAgICAgIH0pO1xuICAgIH0sIHRoaXMuX2NhbGxiYWNrcyA9IFcuY3JlYXRlRW1wdHlDYWxsYmFja3MoKTtcbiAgfVxuICAvKipcbiAgICogUmV0dXJucyBhIHJlYWQtb25seSB2ZXJzaW9uIG9mIHRoZSBjYWxsYmFja3Mgb2JqZWN0LlxuICAgKi9cbiAgZ2V0IGdldCgpIHtcbiAgICByZXR1cm4geyAuLi50aGlzLl9jYWxsYmFja3MgfTtcbiAgfVxufTtcblcuTk9PUCA9ICgpID0+IHtcbn0sIFcuY3JlYXRlRW1wdHlDYWxsYmFja3MgPSAoKSA9PiB7XG4gIGNvbnN0IG4gPSB7fTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKEV0LmtleW9mKCkuZW51bSkuZm9yRWFjaCgoZSkgPT4ge1xuICAgIG5bZV0gPSBXLk5PT1A7XG4gIH0pLCBuO1xufSwgVy5mcm9tT2JqZWN0ID0gKG4pID0+IHtcbiAgY29uc3QgZSA9IG5ldyBXKCk7XG4gIHJldHVybiBlLnNldENhbGxiYWNrcyhFdC5wYXJzZShuKSksIGU7XG59O1xubGV0IFFlID0gVztcbmNsYXNzIGxpIHtcbiAgY29uc3RydWN0b3IobiwgZSwgciwgYSkge1xuICAgIHRoaXMuaGFuZGxlTWVzc2FnZSA9IChpKSA9PiB7XG4gICAgICBpZiAoIWkuc291cmNlKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihcIltPSlNdIE5vIHNvdXJjZSBmb3VuZFwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKEN0KGkub3JpZ2luKSAhPT0gQ3QodGhpcy5iYXNlVXJsKSB8fCB0eXBlb2YgaS5kYXRhID09IFwib2JqZWN0XCIgJiYgaS5kYXRhLnBlbnBhbCB8fCB0eXBlb2YgaS5kYXRhID09IFwib2JqZWN0XCIgJiYgaS5kYXRhLnNvdXJjZSAmJiBpLmRhdGEuc291cmNlID09PSBcInJlYWN0LWRldnRvb2xzLWJyaWRnZVwiKVxuICAgICAgICByZXR1cm47XG4gICAgICBsZXQgcyA9IG51bGw7XG4gICAgICB0cnkge1xuICAgICAgICBzID0gZHIoSlNPTi5wYXJzZShpLmRhdGEpKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoIXRoaXMudmFsaWRhdGVFdmVudChzKSkgcmV0dXJuO1xuICAgICAgY29uc3QgeyBlbGVtZW50SWQ6IGwsIHBheWxvYWQ6IHUgfSA9IHMsIGQgPSB1LnR5cGU7XG4gICAgICBzd2l0Y2ggKGQpIHtcbiAgICAgICAgY2FzZSBcIkxBWU9VVFwiOlxuICAgICAgICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Muc2V0Rm9ybUhlaWdodCh1LmhlaWdodCA/IGAke3UuaGVpZ2h0fXB4YCA6IFwiMTAwJVwiKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIkZPQ1VTXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkZvY3VzKGwsIHUuZWxlbWVudFR5cGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQkxVUlwiOlxuICAgICAgICAgIHRoaXMuZm9ybUNhbGxiYWNrcy5nZXQub25CbHVyKGwsIHUuZWxlbWVudFR5cGUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiQ0hBTkdFXCI6XG4gICAgICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkNoYW5nZShsLCB1LmVsZW1lbnRUeXBlLCB1LmVycm9ycyk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJMT0FERURcIjpcbiAgICAgICAgICB0aGlzLmV2ZW50VGFyZ2V0c1tsXSA9IGkuc291cmNlLCB0aGlzLmludGVybmFsQ2FsbGJhY2tzLm9uQ2RlTG9hZGVkKHUpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFwiTE9BRF9FUlJPUlwiOlxuICAgICAgICAgIHRoaXMuaW50ZXJuYWxDYWxsYmFja3Mub25DZGVMb2FkRXJyb3IodS5tZXNzYWdlKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIlZBTElEQVRJT05fRVJST1JcIjpcbiAgICAgICAgICB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uVmFsaWRhdGlvbkVycm9yKHUuZWxlbWVudFR5cGUsIHUuZXJyb3JzLCBsKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICBjb25zb2xlLndhcm4oXCJbZm9ybV0gVW5oYW5kbGVkIGV2ZW50IHR5cGU6XCIsIGQpO1xuICAgICAgfVxuICAgIH0sIHRoaXMudmFsaWRhdGVFdmVudCA9IChpKSA9PiBpLmZvcm1JZCAhPT0gdGhpcy5mb3JtSWQgfHwgIWkuZWxlbWVudElkID8gKGNvbnNvbGUubG9nKFwiW09KU10gZm9ybUlkXCIsIHRoaXMuZm9ybUlkLCBpLmZvcm1JZCksIGNvbnNvbGUud2FybihcIltmb3JtXSBJZ25vcmluZyB1bmtub3duIGV2ZW50OlwiLCBpKSwgITEpIDogdGhpcy5ub25jZXMuaGFzKGkubm9uY2UpID8gKGNvbnNvbGUud2FybihcIltmb3JtXSBJZ25vcmluZyBkdXBsaWNhdGUgZXZlbnQ6XCIsIGkpLCAhMSkgOiAodGhpcy5ub25jZXMuYWRkKGkubm9uY2UpLCAhMCksIHRoaXMuZXZlbnRUYXJnZXRzID0ge30sIHRoaXMubm9uY2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSwgdGhpcy5mb3JtSWQgPSBuLCB0aGlzLmJhc2VVcmwgPSBlLCB0aGlzLmZvcm1DYWxsYmFja3MgPSByLCB0aGlzLmludGVybmFsQ2FsbGJhY2tzID0gYTtcbiAgfVxufVxuY29uc3QgQ3QgPSAodCkgPT4gbmV3IFVSTCh0KS5vcmlnaW47XG5hc3luYyBmdW5jdGlvbiB1aSh0LCBuKSB7XG4gIGNvbnN0IHIgPSBhd2FpdCBjb25uZWN0VG9DaGlsZCh7XG4gICAgaWZyYW1lOiB0LFxuICAgIGRlYnVnOiAhMSxcbiAgICBjaGlsZE9yaWdpbjogblxuICB9KS5wcm9taXNlLCBhID0gYXdhaXQgcHIocik7XG4gIGlmICghbXIociwgYSkpXG4gICAgdGhyb3cgbmV3IEVycm9yKFwiR290IGludmFsaWQgQ0RFIGNvbm5lY3Rpb24gb2JqZWN0XCIpO1xuICByZXR1cm4gcjtcbn1cbmNsYXNzIGRpIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7XG4gIH1cbiAgYWRkQ29ubmVjdGlvbihuLCBlKSB7XG4gICAgdGhpcy5jb25uZWN0aW9ucy5zZXQobiwgZSk7XG4gIH1cbiAgZ2V0Q29ubmVjdGlvbigpIHtcbiAgICBjb25zdCBuID0gdGhpcy5jb25uZWN0aW9ucy52YWx1ZXMoKS5uZXh0KCkudmFsdWU7XG4gICAgaWYgKCFuKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ29ubmVjdGlvbiBub3QgZm91bmRcIik7XG4gICAgcmV0dXJuIG47XG4gIH1cbiAgZ2V0QWxsQ29ubmVjdGlvbnMoKSB7XG4gICAgcmV0dXJuIHRoaXMuY29ubmVjdGlvbnM7XG4gIH1cbn1cbmNvbnN0IHBpID0gKHQsIG4sIGUpID0+IHtcbiAgY29uc3QgeyBzdHJpcGVQUjogciB9ID0gdDtcbiAgci5wdWJsaXNoZXIuc3Vic2NyaWJlKChhKSA9PiB7XG4gICAgaWYgKGEuaXNTdWNjZXNzKSB7XG4gICAgICBjb25zdCBpID0gYS5sb2FkZWRWYWx1ZSwgcyA9IGkuaXNBdmFpbGFibGUgJiYgaS5hdmFpbGFibGVQcm92aWRlcnMuYXBwbGVQYXksIGMgPSBpLmlzQXZhaWxhYmxlICYmIGkuYXZhaWxhYmxlUHJvdmlkZXJzLmdvb2dsZVBheSwgbCA9IHtcbiAgICAgICAgYXBwbGVfcGF5OiB7XG4gICAgICAgICAgaXNMb2FkaW5nOiAhMSxcbiAgICAgICAgICBpc0F2YWlsYWJsZTogcyxcbiAgICAgICAgICBzdGFydEZsb3c6IGFzeW5jICh1KSA9PiB7XG4gICAgICAgICAgICBzICYmIFN0KFwiYXBwbGVfcGF5XCIsIGksIG4sIGUsIHUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZ29vZ2xlX3BheToge1xuICAgICAgICAgIGlzTG9hZGluZzogITEsXG4gICAgICAgICAgaXNBdmFpbGFibGU6IGMsXG4gICAgICAgICAgc3RhcnRGbG93OiBhc3luYyAodSkgPT4ge1xuICAgICAgICAgICAgYyAmJiBTdChcImdvb2dsZV9wYXlcIiwgaSwgbiwgZSwgdSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgICAgZS5nZXQub25QYXltZW50UmVxdWVzdExvYWQobCk7XG4gICAgfVxuICB9KTtcbn0sIFN0ID0gKHQsIG4sIGUsIHIsIGEpID0+IEEuc3RyaXBlUFIucnVuKHtcbiAgY29udGV4dDogZSxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB2ZShlLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIHQpLFxuICBub25DZGVGb3JtSW5wdXRzOiBKKGUuZm9ybURpdiksXG4gIGZvcm1DYWxsYmFja3M6IHIsXG4gIGN1c3RvbVBhcmFtczogeyBwcm92aWRlcjogdCwgb3ZlcnJpZGVQYXltZW50UmVxdWVzdDogYSA9PSBudWxsID8gdm9pZCAwIDogYS5vdmVycmlkZVBheW1lbnRSZXF1ZXN0IH0sXG4gIGluaXRSZXN1bHQ6IG5cbn0pLCBQdCA9IFwiVGhlIHNlY3VyZSBmb3JtIGZhaWxlZCB0byBsb2FkIHByb3Blcmx5LiBQbGVhc2UgY2hlY2sgeW91ciBpbnRlcm5ldCBjb25uZWN0aW9uLCBvciB0cnkgYWdhaW4gbGF0ZXIuXCIsIHsgbG9nX186IFosIGVycl9fOiBCIH0gPSBQKFwib3AtZm9ybVwiKSwgUSA9IGNsYXNzIFEge1xuICBjb25zdHJ1Y3RvcihuKSB7XG4gICAgdGhpcy5jZGVMb2FkRXZlbnQgPSBuZXcgTWUoKSwgdGhpcy5hbnlDZGVDb25uID0gbmV3IE1lKCksIHRoaXMuY29udGV4dCA9IG5ldyBNZSgpLCB0aGlzLmluaXRGbG93cyA9IHNpKCksIHRoaXMuc3RhcnRGb3JtSW5pdCA9IGFzeW5jICgpID0+IHtcbiAgICAgIHRyeSB7XG4gICAgICAgIFooXCJJbml0aWFsaXppbmcgT3BlblBheSBmb3JtOlwiKSwgWihcIuKUnCBXYWl0aW5nIGZvciBDREUgbG9hZCBldmVudC4uLlwiKTtcbiAgICAgICAgY29uc3QgZSA9IGF3YWl0IHRoaXMuY2RlTG9hZEV2ZW50LndhaXRGb3JMb2FkKHtcbiAgICAgICAgICB0aW1lb3V0U2VjOiAxMjAsXG4gICAgICAgICAgdGltZW91dEVyck1zZzogUHRcbiAgICAgICAgfSk7XG4gICAgICAgIFooXCLilJwgQ0RFIGxvYWQgZXZlbnQgcmVjZWl2ZWRcIiksIFooXCLilJwgV2FpdGluZyBmb3IgQ0RFIGNvbm5lY3Rpb24uLi5cIik7XG4gICAgICAgIGNvbnN0IHIgPSBhd2FpdCB0aGlzLmFueUNkZUNvbm4ud2FpdEZvckxvYWQoe1xuICAgICAgICAgIHRpbWVvdXRTZWM6IDEyMCxcbiAgICAgICAgICB0aW1lb3V0RXJyTXNnOiBQdFxuICAgICAgICB9KTtcbiAgICAgICAgWihcIuKUnCBDREUgY29ubmVjdGlvbiByZWNlaXZlZFwiKSwgWihcIuKUnCBDcmVhdGluZyBPSlMgY29udGV4dCwgc2V0dGluZyB1cCBoYW5kbGVycy4uLlwiKTtcbiAgICAgICAgY29uc3QgYSA9IFEuYnVpbGRPanNGbG93Q29udGV4dChcbiAgICAgICAgICB0aGlzLmNvbmZpZyxcbiAgICAgICAgICBlLFxuICAgICAgICAgIHIsXG4gICAgICAgICAgdGhpcy5nZXRGb3JtRGl2KClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5jb250ZXh0LnNldChhKSwgcGkodGhpcy5pbml0Rmxvd3MsIGEsIHRoaXMuZm9ybUNhbGxiYWNrcyksIFooXCLilJwgU3RhcnRpbmcgT0pTIGluaXQgZmxvd3MuLi5cIiksIGF3YWl0IGlpKHRoaXMuaW5pdEZsb3dzLCBhLCB0aGlzLmZvcm1DYWxsYmFja3MpLCB0aGlzLmZvcm1DYWxsYmFja3MuZ2V0Lm9uTG9hZChlLnRvdGFsQW1vdW50QXRvbXMsIGUuY3VycmVuY3kpLCBaKFwi4pWwIERvbmUgaW5pdGlhbGl6aW5nIE9KUyBmbG93cy5cIik7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNvbnN0IHIgPSBIKGUpO1xuICAgICAgICBCKFwi4pWwIEVycm9yIGluaXRpYWxpemluZyBPUCBmb3JtOlwiLCByKSwgdGhpcy5mb3JtQ2FsbGJhY2tzLmdldC5vbkxvYWRFcnJvcihyKTtcbiAgICAgIH1cbiAgICB9LCB0aGlzLnNldEZvcm1IZWlnaHQgPSAoZSkgPT4ge1xuICAgICAgdGhpcy5mb3JtUHJvcGVydGllcy5oZWlnaHQgPSBlLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyAmJiBPYmplY3QudmFsdWVzKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzKS5mb3JFYWNoKChyKSA9PiB7XG4gICAgICAgIHIgJiYgKHIubm9kZS5zdHlsZS5oZWlnaHQgPSBlKTtcbiAgICAgIH0pO1xuICAgIH0sIHRoaXMub25DZGVMb2FkZWQgPSAoZSkgPT4ge1xuICAgICAgdGhpcy5jZGVMb2FkRXZlbnQuY3VycmVudC5pc1N1Y2Nlc3MgfHwgdGhpcy5jZGVMb2FkRXZlbnQuc2V0KGUpO1xuICAgIH0sIHRoaXMub25DZGVMb2FkRXJyb3IgPSAoZSkgPT4ge1xuICAgICAgdGhpcy5jZGVMb2FkRXZlbnQuY3VycmVudC5pc1N1Y2Nlc3MgfHwgdGhpcy5jZGVMb2FkRXZlbnQudGhyb3cobmV3IEVycm9yKGUpLCBlKTtcbiAgICB9LCB0aGlzLmNyZWF0ZUVsZW1lbnQgPSAoZSwgciA9IHt9KSA9PiB7XG4gICAgICBpZiAoIXRoaXMuY29uZmlnKSB0aHJvdyBuZXcgRXJyb3IoXCJPcGVuUGF5IGZvcm0gbm90IGluaXRpYWxpemVkXCIpO1xuICAgICAgY29uc3QgYSA9IEFuLnBhcnNlKGUpLCBpID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImlmcmFtZVwiKSwgcyA9IHRoaXMuYnVpbGRRdWVyeVN0cmluZyhyKTtcbiAgICAgIGkubmFtZSA9IGAke2F9LWVsZW1lbnRgO1xuICAgICAgY29uc3QgYyA9IG5ldyBVUkwoYC9hcHAvdjEvJHtpLm5hbWV9L2AsIHRoaXMuY29uZmlnLmJhc2VVcmwpO1xuICAgICAgcmV0dXJuIGMuc2VhcmNoID0gcy50b1N0cmluZygpLCBpLnNyYyA9IGMuaHJlZiwgaS5zdHlsZS5ib3JkZXIgPSBcIm5vbmVcIiwgaS5zdHlsZS53aWR0aCA9IFwiMTAwJVwiLCB0aGlzLnJlZ2lzdGVySWZyYW1lKGEsIGkpO1xuICAgIH0sIHRoaXMucmVnaXN0ZXJJZnJhbWUgPSAoZSwgcikgPT4ge1xuICAgICAgY29uc3QgYSA9IHtcbiAgICAgICAgdHlwZTogZSxcbiAgICAgICAgbm9kZTogcixcbiAgICAgICAgbW91bnQ6IChpKSA9PiB7XG4gICAgICAgICAgdmFyIHM7XG4gICAgICAgICAgcmV0dXJuIChzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihpKSkgPT0gbnVsbCA/IHZvaWQgMCA6IHMuYXBwZW5kQ2hpbGQocik7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICByZXR1cm4gdGhpcy5jb25uZWN0VG9FbGVtZW50KHsgdHlwZTogYS50eXBlLCBub2RlOiBhLm5vZGUgfSksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzIHx8ICh0aGlzLnJlZ2lzdGVyZWRFbGVtZW50cyA9IHtcbiAgICAgICAgW2RlLkNBUkRdOiB2b2lkIDAsXG4gICAgICAgIFtkZS5DQVJEX05VTUJFUl06IHZvaWQgMCxcbiAgICAgICAgW2RlLkNBUkRfRVhQSVJZXTogdm9pZCAwLFxuICAgICAgICBbZGUuQ0FSRF9DVkNdOiB2b2lkIDBcbiAgICAgIH0pLCB0aGlzLnJlZ2lzdGVyZWRFbGVtZW50c1tlXSA9IGEsIGE7XG4gICAgfSwgdGhpcy5idWlsZFF1ZXJ5U3RyaW5nID0gKGUpID0+IHtcbiAgICAgIGNvbnN0IHIgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKCk7XG4gICAgICByZXR1cm4gci5hcHBlbmQoXCJyZWZlcmVyXCIsIHRoaXMucmVmZXJyZXIpLCByLmFwcGVuZChcImZvcm1JZFwiLCB0aGlzLmZvcm1JZCksIGUuc3R5bGVzICYmIHIuYXBwZW5kKFwic3R5bGVzXCIsIHVyKGUuc3R5bGVzKSksIHIuYXBwZW5kKFwic2VjdXJlVG9rZW5cIiwgdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbiksIHI7XG4gICAgfSwgdGhpcy5jb25uZWN0VG9FbGVtZW50ID0gKGUpID0+IHtcbiAgICAgIHVpKGUubm9kZSkudGhlbigocikgPT4ge1xuICAgICAgICB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmFkZENvbm5lY3Rpb24oZS50eXBlLCByKSwgdGhpcy5hbnlDZGVDb25uLmN1cnJlbnQuaXNTdWNjZXNzIHx8IHRoaXMuYW55Q2RlQ29ubi5zZXQocik7XG4gICAgICB9KS5jYXRjaCgocikgPT4gQihcIltGT1JNXSBFcnJvciBjb25uZWN0aW5nIHRvIENERSBpZnJhbWVcIiwgcikpO1xuICAgIH0sIHRoaXMuZ2V0Rm9ybURpdiA9ICgpID0+IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGhpcy5mb3JtVGFyZ2V0KSA/PyBkb2N1bWVudC5ib2R5LCB0aGlzLnN1Ym1pdENhcmQgPSAoKSA9PiB7XG4gICAgICBjb25zdCBlID0gdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgaWYgKCFlKSB7XG4gICAgICAgIEIoXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIHN1Ym1pdHRpbmcuXCIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBBLmNvbW1vbkNDLnJ1bih7XG4gICAgICAgIGNvbnRleHQ6IGUsXG4gICAgICAgIGNoZWNrb3V0UGF5bWVudE1ldGhvZDogdmUoZS5jaGVja291dFBheW1lbnRNZXRob2RzLCBcImNyZWRpdF9jYXJkXCIpLFxuICAgICAgICBub25DZGVGb3JtSW5wdXRzOiBKKGUuZm9ybURpdiksXG4gICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgY3VzdG9tUGFyYW1zOiB7XG4gICAgICAgICAgY3VycmVudENkZUNvbm5lY3Rpb25zOiB0aGlzLmNvbm5lY3Rpb25NYW5hZ2VyLmdldEFsbENvbm5lY3Rpb25zKClcbiAgICAgICAgfSxcbiAgICAgICAgaW5pdFJlc3VsdDogdm9pZCAwXG4gICAgICAgIC8vIFRoaXMgZmxvdyByZXF1aXJlcyBubyBpbml0aWFsaXphdGlvblxuICAgICAgfSk7XG4gICAgfSwgdGhpcy5nZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcyA9ICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5jb250ZXh0LmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpKSB7XG4gICAgICAgIEIoXCJQbGVhc2Ugd2FpdCBmb3IgdGhlIGZvcm0gdG8gZmluaXNoIGxvYWRpbmcgYmVmb3JlIGdldHRpbmcgYXZhaWxhYmxlIHBheW1lbnQgbWV0aG9kcy5cIik7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHIgPSB7XG4gICAgICAgIGFpcndhbGxleEdvb2dsZVBheTogeC5haXJ3YWxsZXhHb29nbGVQYXksXG4gICAgICAgIGFpcndhbGxleEFwcGxlUGF5OiB4LmFpcndhbGxleEFwcGxlUGF5LFxuICAgICAgICBhdXRob3JpemVOZXRHb29nbGVQYXk6IHguYXV0aG9yaXplbmV0R29vZ2xlUGF5LFxuICAgICAgICBhdXRob3JpemVOZXRBcHBsZVBheTogeC5hdXRob3JpemVuZXRBcHBsZVBheVxuICAgICAgfTtcbiAgICAgIHJldHVybiBPYmplY3QuZW50cmllcyh0aGlzLmluaXRGbG93cykubWFwKChbYSwgaV0pID0+ICh7XG4gICAgICAgIG5hbWU6IHJbYV0gPz8gYSxcbiAgICAgICAgLi4uaS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbClcbiAgICAgIH0pKTtcbiAgICB9LCB0aGlzLmdlbmVyYWxTdWJtaXQgPSAoZSwgcikgPT4ge1xuICAgICAgY29uc3QgYSA9IHRoaXMuY29udGV4dC5nZXRWYWx1ZUlmTG9hZGVkRWxzZShudWxsKTtcbiAgICAgIGlmICghYSkge1xuICAgICAgICBCKFwiUGxlYXNlIHdhaXQgZm9yIHRoZSBmb3JtIHRvIGZpbmlzaCBsb2FkaW5nIGJlZm9yZSBzdWJtaXR0aW5nLlwiKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgc3dpdGNoIChlKSB7XG4gICAgICAgIGNhc2UgeC5wb2NreXRQYXlwYWw6XG4gICAgICAgICAgcmV0dXJuIEEucG9ja3l0UGF5cGFsLnJ1bih7XG4gICAgICAgICAgICBjb250ZXh0OiBhLFxuICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB2ZShhLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFwicGF5cGFsXCIsIFwicG9ja3l0XCIpLFxuICAgICAgICAgICAgbm9uQ2RlRm9ybUlucHV0czogSihhLmZvcm1EaXYpLFxuICAgICAgICAgICAgZm9ybUNhbGxiYWNrczogdGhpcy5mb3JtQ2FsbGJhY2tzLFxuICAgICAgICAgICAgY3VzdG9tUGFyYW1zOiB7IHNldHRpbmdzOiByIH0sXG4gICAgICAgICAgICBpbml0UmVzdWx0OiB2b2lkIDBcbiAgICAgICAgICB9KTtcbiAgICAgICAgY2FzZSB4LmFpcndhbGxleEdvb2dsZVBheToge1xuICAgICAgICAgIGNvbnN0IGkgPSB0aGlzLmluaXRGbG93cy5haXJ3YWxsZXhHb29nbGVQYXkucHVibGlzaGVyLmdldFZhbHVlSWZMb2FkZWRFbHNlKG51bGwpO1xuICAgICAgICAgIGlmICghaSkge1xuICAgICAgICAgICAgQihcbiAgICAgICAgICAgICAgXCJhaXJ3YWxsZXgtZ29vZ2xlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGkuc3RhcnRGbG93KHIpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgeC5haXJ3YWxsZXhBcHBsZVBheToge1xuICAgICAgICAgIGNvbnN0IGkgPSB0aGlzLmluaXRGbG93cy5haXJ3YWxsZXhBcHBsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgaWYgKCFpKSB7XG4gICAgICAgICAgICBCKFxuICAgICAgICAgICAgICBcImFpcndhbGxleC1hcHBsZS1wYXkgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGNoZWNrIHRoZSBhdmFpbGFiaWxpdHkgdXNpbmcgJ2dldEF2YWlsYWJsZVBheW1lbnRNZXRob2RzKCknXCJcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBpLnN0YXJ0RmxvdyhyKTtcbiAgICAgICAgfVxuICAgICAgICBjYXNlIHguYXV0aG9yaXplbmV0R29vZ2xlUGF5OiB7XG4gICAgICAgICAgY29uc3QgaSA9IHRoaXMuaW5pdEZsb3dzLmF1dGhvcml6ZU5ldEdvb2dsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgaWYgKCFpKSB7XG4gICAgICAgICAgICBCKFxuICAgICAgICAgICAgICBcImF1dGhvcml6ZS1uZXQtZ29vZ2xlLXBheSBpcyBub3QgYXZhaWxhYmxlLiBQbGVhc2UgY2hlY2sgdGhlIGF2YWlsYWJpbGl0eSB1c2luZyAnZ2V0QXZhaWxhYmxlUGF5bWVudE1ldGhvZHMoKSdcIlxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGkuc3RhcnRGbG93KHIpO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgeC5hdXRob3JpemVuZXRBcHBsZVBheToge1xuICAgICAgICAgIGNvbnN0IGkgPSB0aGlzLmluaXRGbG93cy5hdXRob3JpemVOZXRBcHBsZVBheS5wdWJsaXNoZXIuZ2V0VmFsdWVJZkxvYWRlZEVsc2UobnVsbCk7XG4gICAgICAgICAgaWYgKCFpKSB7XG4gICAgICAgICAgICBCKFxuICAgICAgICAgICAgICBcImF1dGhvcml6ZS1uZXQtYXBwbGUtcGF5IGlzIG5vdCBhdmFpbGFibGUuIFBsZWFzZSBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IHVzaW5nICdnZXRBdmFpbGFibGVQYXltZW50TWV0aG9kcygpJ1wiXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gaS5zdGFydEZsb3cocik7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSB4Lmxvb3BDcnlwdG86IHtcbiAgICAgICAgICBjb25zdCBpID0gdGhpcy5pbml0Rmxvd3MubG9vcC5wdWJsaXNoZXIuY3VycmVudDtcbiAgICAgICAgICBpZiAoIWkuaXNTdWNjZXNzKVxuICAgICAgICAgICAgdGhyb3cgRXJyb3IoXCJMb29wIGhhcyBub3Qgc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemVkLiBDYW5ub3Qgc3VibWl0LlwiKTtcbiAgICAgICAgICByZXR1cm4gQS5sb29wQ3J5cHRvLnJ1bih7XG4gICAgICAgICAgICBjb250ZXh0OiBhLFxuICAgICAgICAgICAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiB2ZShhLmNoZWNrb3V0UGF5bWVudE1ldGhvZHMsIFwiY3J5cHRvXCIsIFwibG9vcFwiKSxcbiAgICAgICAgICAgIG5vbkNkZUZvcm1JbnB1dHM6IEooYS5mb3JtRGl2KSxcbiAgICAgICAgICAgIGZvcm1DYWxsYmFja3M6IHRoaXMuZm9ybUNhbGxiYWNrcyxcbiAgICAgICAgICAgIC8vIEFJIGdlbmVyYXRlZCBzdHVmZiBiZWxvdyB0byBnZXQgdGhlIHR5cGluZyByaWdodC5cbiAgICAgICAgICAgIC8vIFRPRE86IE1vdmUgdGhlIGVtYWlsLCBmaXJzdE5hbWUgYW5kIGxhc3ROYW1lIGZpZWxkcyB0byBgbm9uQ2RlRm9ybUlucHV0c2BcbiAgICAgICAgICAgIGN1c3RvbVBhcmFtczogciAmJiBcInN1Y2Nlc3NcIiBpbiByICYmIHIuc3VjY2VzcyA/IHtcbiAgICAgICAgICAgICAgY3VzdG9tZXI6IHIuY3VzdG9tZXIsXG4gICAgICAgICAgICAgIHBheWluOiByLnBheWluLFxuICAgICAgICAgICAgICBlbWFpbDogci5lbWFpbCxcbiAgICAgICAgICAgICAgZmlyc3ROYW1lOiByLmZpcnN0TmFtZSxcbiAgICAgICAgICAgICAgbGFzdE5hbWU6IHIubGFzdE5hbWUsXG4gICAgICAgICAgICAgIHN1Y2Nlc3M6ICEwXG4gICAgICAgICAgICB9IDoge1xuICAgICAgICAgICAgICBkZXRhaWw6IHIuZGV0YWlsLFxuICAgICAgICAgICAgICBlbWFpbDogci5lbWFpbCxcbiAgICAgICAgICAgICAgZmlyc3ROYW1lOiByLmZpcnN0TmFtZSxcbiAgICAgICAgICAgICAgbGFzdE5hbWU6IHIubGFzdE5hbWUsXG4gICAgICAgICAgICAgIHN1Y2Nlc3M6ICExXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgaW5pdFJlc3VsdDogaS5sb2FkZWRWYWx1ZVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgVWUoZSk7XG4gICAgICB9XG4gICAgfSwgdGhpcy5zdWJtaXQgPSB0aGlzLnN1Ym1pdENhcmQsIHRoaXMuZGVzdHJveSA9ICgpID0+IHtcbiAgICAgIFooXCJEZXN0cm95aW5nIE9wZW5QYXkgZm9ybS4uLlwiKTtcbiAgICAgIGZvciAoY29uc3QgZSBvZiBPYmplY3QudmFsdWVzKHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID8/IHt9KSlcbiAgICAgICAgZSAmJiBlLm5vZGUucmVtb3ZlKCk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIiwgdGhpcy5ldmVudEhhbmRsZXIuaGFuZGxlTWVzc2FnZS5iaW5kKHRoaXMuZXZlbnRIYW5kbGVyKSksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0gbnVsbCwgZGVsZXRlIHdpbmRvdy5vanM7XG4gICAgfSwgdGhpcy51cGRhdGVDYWxsYmFja3MgPSAoZSkgPT4ge1xuICAgICAgdGhpcy5mb3JtQ2FsbGJhY2tzLnNldENhbGxiYWNrcyhlKTtcbiAgICB9LCBRLmFzc2lnbkFzU2luZ2xldG9uKHRoaXMpLCB0aGlzLm9qc1ZlcnNpb24gPSBcIjAuMi4xOFwiLCB0aGlzLm9qc1JlbGVhc2VWZXJzaW9uID0gXCJsb2NhbF9idWlsZFwiLCB0aGlzLmJhc2VVcmwgPSBuLmJhc2VVcmwgPz8gXCJodHRwczovL2NkZS5nZXRvcGVucGF5LmNvbVwiLCB0aGlzLmNvbmZpZyA9IHsgLi4ubiwgYmFzZVVybDogdGhpcy5iYXNlVXJsIH0sIHRoaXMuZm9ybUNhbGxiYWNrcyA9IFFlLmZyb21PYmplY3QobiksIHRoaXMucmVnaXN0ZXJlZEVsZW1lbnRzID0gbnVsbCwgdGhpcy5mb3JtSWQgPSBgb3Bqcy1mb3JtLSR7djQoKX1gLCB0aGlzLnJlZmVycmVyID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbiwgdGhpcy5mb3JtVGFyZ2V0ID0gbi5mb3JtVGFyZ2V0ID8/IFwiYm9keVwiLCB0aGlzLmZvcm1Qcm9wZXJ0aWVzID0geyBoZWlnaHQ6IFwiMXB4XCIgfSwgdGhpcy5jb25uZWN0aW9uTWFuYWdlciA9IG5ldyBkaSgpLCB0aGlzLmV2ZW50SGFuZGxlciA9IG5ldyBsaSh0aGlzLmZvcm1JZCwgdGhpcy5iYXNlVXJsLCB0aGlzLmZvcm1DYWxsYmFja3MsIHtcbiAgICAgIHNldEZvcm1IZWlnaHQ6IHRoaXMuc2V0Rm9ybUhlaWdodCxcbiAgICAgIG9uQ2RlTG9hZGVkOiB0aGlzLm9uQ2RlTG9hZGVkLFxuICAgICAgb25DZGVMb2FkRXJyb3I6IHRoaXMub25DZGVMb2FkRXJyb3JcbiAgICB9KSwgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoXCJtZXNzYWdlXCIsIHRoaXMuZXZlbnRIYW5kbGVyLmhhbmRsZU1lc3NhZ2UuYmluZCh0aGlzLmV2ZW50SGFuZGxlcikpLCB0aGlzLnN0YXJ0Rm9ybUluaXQoKTtcbiAgfVxuICBnZXQgY2hlY2tvdXRTZWN1cmVUb2tlbigpIHtcbiAgICByZXR1cm4gdGhpcy5jb25maWcuY2hlY2tvdXRTZWN1cmVUb2tlbjtcbiAgfVxufTtcblEub2pzRmxvd3MgPSBBLCBRLmFzc2lnbkFzU2luZ2xldG9uID0gKG4pID0+IHtcbiAgaWYgKFEuZ2V0SW5zdGFuY2UoKSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJPcGVuUGF5IGluc3RhbmNlIGFscmVhZHkgZXhpc3RzLiBPbmx5IG9uZSBpbnN0YW5jZSBpcyBhbGxvd2VkLlwiKTtcbiAgd2luZG93Lm9qcyA9IG47XG59LCBRLmdldEluc3RhbmNlID0gKCkgPT4gd2luZG93Lm9qcyA/PyBudWxsLCBRLmJ1aWxkT2pzRmxvd0NvbnRleHQgPSAobiwgZSwgciwgYSkgPT4gKHtcbiAgY2hlY2tvdXRTZWN1cmVUb2tlbjogbi5jaGVja291dFNlY3VyZVRva2VuLFxuICBiYXNlVXJsOiBuZXcgVVJMKG4uYmFzZVVybCA/PyBldCkub3JpZ2luLFxuICBmb3JtRGl2OiBhLFxuICBlbGVtZW50c1Nlc3Npb25JZDogZS5zZXNzaW9uSWQsXG4gIGNoZWNrb3V0UGF5bWVudE1ldGhvZHM6IGUuY2hlY2tvdXRQYXltZW50TWV0aG9kcyxcbiAgYW55Q2RlQ29ubmVjdGlvbjogcixcbiAgY3VzdG9tSW5pdFBhcmFtczogbi5jdXN0b21Jbml0UGFyYW1zID8/IHt9XG59KTtcbmxldCBrdCA9IFE7XG5cbmNvbnN0IFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yJDEpO1xuY29uc3QgWm9kRmllbGRFcnJvciA9IHokMS5vYmplY3Qoe1xuICBjb2RlOiB6JDEuc3RyaW5nKCksXG4gIG1lc3NhZ2U6IHokMS5zdHJpbmcoKSxcbiAgcGF0aDogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pO1xueiQxLmFycmF5KFpvZEZpZWxkRXJyb3IpO1xuY29uc3QgbWFrZUNhbGxiYWNrU2FmZSA9IChjYWxsYmFja05hbWUsIGZuLCBlcnJvckxvZ2dlcikgPT4ge1xuICByZXR1cm4gKC4uLmFyZ3MpID0+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGZuKC4uLmFyZ3MpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBlcnJvckxvZ2dlcihgW2Zvcm1dIEVycm9yIHJ1bm5pbmcgY2FsbGJhY2sgKCR7Y2FsbGJhY2tOYW1lfSk6YCwgZXJyb3IpO1xuICAgICAgcmV0dXJuIHZvaWQgMDtcbiAgICB9XG4gIH07XG59O1xuXG52YXIgU3VibWl0TWV0aG9kcyA9IC8qIEBfX1BVUkVfXyAqLyAoKFN1Ym1pdE1ldGhvZHMyKSA9PiB7XG4gIFN1Ym1pdE1ldGhvZHMyW1wicG9ja3l0UGF5cGFsXCJdID0gXCJwb2NreXQtcGF5cGFsXCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYWlyd2FsbGV4R29vZ2xlUGF5XCJdID0gXCJhaXJ3YWxsZXgtZ29vZ2xlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImFpcndhbGxleEFwcGxlUGF5XCJdID0gXCJhaXJ3YWxsZXgtYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wiYXV0aG9yaXplbmV0R29vZ2xlUGF5XCJdID0gXCJhdXRob3JpemVuZXQtZ29vZ2xlLXBheVwiO1xuICBTdWJtaXRNZXRob2RzMltcImF1dGhvcml6ZW5ldEFwcGxlUGF5XCJdID0gXCJhdXRob3JpemVuZXQtYXBwbGUtcGF5XCI7XG4gIFN1Ym1pdE1ldGhvZHMyW1wibG9vcENyeXB0b1wiXSA9IFwibG9vcC1jcnlwdG9cIjtcbiAgcmV0dXJuIFN1Ym1pdE1ldGhvZHMyO1xufSkoU3VibWl0TWV0aG9kcyB8fCB7fSk7XG56JDEubmF0aXZlRW51bShTdWJtaXRNZXRob2RzKTtcblxuY29uc3QgUmVxdWlyZWRTdHJpbmcgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm1pbigxLCB7IG1lc3NhZ2U6IGBDYW5ub3QgYmUgYmxhbmtgIH0pO1xuY29uc3QgT3B0aW9uYWxTdHJpbmcgPSB6JDEuc3RyaW5nKCkudHJpbSgpLm9wdGlvbmFsKCk7XG5jb25zdCBudWxsT3JVbmRlZk9yJDEgPSAoelR5cGUpID0+IHokMS5udWxsYWJsZSh6VHlwZS5vcHRpb25hbCgpKTtcbnZhciBGaWVsZE5hbWUgPSAvKiBAX19QVVJFX18gKi8gKChGaWVsZE5hbWUyKSA9PiB7XG4gIEZpZWxkTmFtZTJbXCJGSVJTVF9OQU1FXCJdID0gXCJmaXJzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkxBU1RfTkFNRVwiXSA9IFwibGFzdE5hbWVcIjtcbiAgRmllbGROYW1lMltcIkVNQUlMXCJdID0gXCJlbWFpbFwiO1xuICBGaWVsZE5hbWUyW1wiWklQX0NPREVcIl0gPSBcInppcENvZGVcIjtcbiAgRmllbGROYW1lMltcIkNJVFlcIl0gPSBcImNpdHlcIjtcbiAgRmllbGROYW1lMltcIlNUQVRFXCJdID0gXCJzdGF0ZVwiO1xuICBGaWVsZE5hbWUyW1wiQ09VTlRSWVwiXSA9IFwiY291bnRyeVwiO1xuICBGaWVsZE5hbWUyW1wiQUREUkVTU1wiXSA9IFwiYWRkcmVzc1wiO1xuICBGaWVsZE5hbWUyW1wiUEhPTkVcIl0gPSBcInBob25lXCI7XG4gIEZpZWxkTmFtZTJbXCJQUk9NT1RJT05fQ09ERVwiXSA9IFwicHJvbW90aW9uQ29kZVwiO1xuICByZXR1cm4gRmllbGROYW1lMjtcbn0pKEZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBGaWVsZE5hbWVFbnVtID0geiQxLm5hdGl2ZUVudW0oRmllbGROYW1lKTtcbnZhciBQcml2YXRlRmllbGROYW1lID0gLyogQF9fUFVSRV9fICovICgoUHJpdmF0ZUZpZWxkTmFtZTIpID0+IHtcbiAgUHJpdmF0ZUZpZWxkTmFtZTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZE51bWJlclwiO1xuICBQcml2YXRlRmllbGROYW1lMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkRXhwaXJ5XCI7XG4gIFByaXZhdGVGaWVsZE5hbWUyW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmRDdmNcIjtcbiAgcmV0dXJuIFByaXZhdGVGaWVsZE5hbWUyO1xufSkoUHJpdmF0ZUZpZWxkTmFtZSB8fCB7fSk7XG5jb25zdCBQcml2YXRlRmllbGROYW1lRW51bSA9IHokMS5uYXRpdmVFbnVtKFByaXZhdGVGaWVsZE5hbWUpO1xuY29uc3QgQWxsRmllbGROYW1lcyA9IHokMS51bmlvbihbRmllbGROYW1lRW51bSwgUHJpdmF0ZUZpZWxkTmFtZUVudW1dKTtcbnZhciBFbGVtZW50VHlwZUVudW0gPSAvKiBAX19QVVJFX18gKi8gKChFbGVtZW50VHlwZUVudW0yKSA9PiB7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEXCJdID0gXCJjYXJkXCI7XG4gIEVsZW1lbnRUeXBlRW51bTJbXCJDQVJEX05VTUJFUlwiXSA9IFwiY2FyZC1udW1iZXJcIjtcbiAgRWxlbWVudFR5cGVFbnVtMltcIkNBUkRfRVhQSVJZXCJdID0gXCJjYXJkLWV4cGlyeVwiO1xuICBFbGVtZW50VHlwZUVudW0yW1wiQ0FSRF9DVkNcIl0gPSBcImNhcmQtY3ZjXCI7XG4gIHJldHVybiBFbGVtZW50VHlwZUVudW0yO1xufSkoRWxlbWVudFR5cGVFbnVtIHx8IHt9KTtcbnokMS5uYXRpdmVFbnVtKEVsZW1lbnRUeXBlRW51bSk7XG5jb25zdCBDaGVja291dFBheW1lbnRNZXRob2QkMSA9IHokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLnN0cmluZygpLFxuICBwcm9jZXNzb3JfbmFtZTogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yJDEoeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkpXG59KTtcbmNvbnN0IFBheW1lbnRNZXRob2RNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGlkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGNhcmROdW1iZXI6IE9wdGlvbmFsU3RyaW5nLFxuICBleHBpcnk6IE9wdGlvbmFsU3RyaW5nLFxuICBjdmM6IE9wdGlvbmFsU3RyaW5nXG59KTtcbnokMS5vYmplY3Qoe1xuICBiYWNrZ3JvdW5kQ29sb3I6IE9wdGlvbmFsU3RyaW5nLFxuICBjb2xvcjogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRGYW1pbHk6IE9wdGlvbmFsU3RyaW5nLFxuICBmb250U2l6ZTogT3B0aW9uYWxTdHJpbmcsXG4gIGZvbnRXZWlnaHQ6IE9wdGlvbmFsU3RyaW5nLFxuICBtYXJnaW46IE9wdGlvbmFsU3RyaW5nLFxuICBwYWRkaW5nOiBPcHRpb25hbFN0cmluZyxcbiAgbGV0dGVyU3BhY2luZzogT3B0aW9uYWxTdHJpbmcsXG4gIGxpbmVIZWlnaHQ6IE9wdGlvbmFsU3RyaW5nLFxuICBoaWRlSWNvbjogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgRXZlbnRUeXBlID0geiQxLmVudW0oW1xuICAvLyBFbGVtZW50IC0+IEZvcm1cbiAgXCJMQVlPVVRcIixcbiAgXCJMT0FERURcIixcbiAgXCJCTFVSXCIsXG4gIFwiRk9DVVNcIixcbiAgXCJDSEFOR0VcIixcbiAgXCJUT0tFTklaRV9TVEFSVEVEXCIsXG4gIFwiQ0hFQ0tPVVRfU1RBUlRFRFwiLFxuICBcIlBBWU1FTlRfRkxPV19TVEFSVEVEXCIsXG4gIFwiVE9LRU5JWkVfU1VDQ0VTU1wiLFxuICBcIkNIRUNLT1VUX1NVQ0NFU1NcIixcbiAgXCJMT0FEX0VSUk9SXCIsXG4gIFwiVkFMSURBVElPTl9FUlJPUlwiLFxuICBcIlRPS0VOSVpFX0VSUk9SXCIsXG4gIFwiQ0hFQ0tPVVRfRVJST1JcIixcbiAgXCJTRVRVUF9QQVlNRU5UX01FVEhPRF9TVUNDRVNTXCIsXG4gIC8vIEZvcm0gLT4gRWxlbWVudFxuICBcIlRPS0VOSVpFXCIsXG4gIFwiQ0hFQ0tPVVRcIixcbiAgXCJTVEFSVF9QQVlNRU5UX0ZMT1dcIlxuXSk7XG5jb25zdCBHZW5lcmljRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVfU1RBUlRFRFwiLCBcIkNIRUNLT1VUX1NUQVJURURcIl0pO1xuY29uc3QgR2VuZXJpY0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3QoeyB0eXBlOiBHZW5lcmljRXZlbnRUeXBlIH0pO1xuY29uc3QgSW5wdXRFdmVudFR5cGUgPSBFdmVudFR5cGUuZXh0cmFjdChbXCJCTFVSXCIsIFwiRk9DVVNcIiwgXCJDSEFOR0VcIl0pO1xuY29uc3QgSW5wdXRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogSW5wdXRFdmVudFR5cGUsXG4gIGVsZW1lbnRUeXBlOiBQcml2YXRlRmllbGROYW1lRW51bSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IEVycm9yRXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiTE9BRF9FUlJPUlwiLCBcIlRPS0VOSVpFX0VSUk9SXCIsIFwiQ0hFQ0tPVVRfRVJST1JcIl0pO1xuY29uc3QgRXJyb3JFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogRXJyb3JFdmVudFR5cGUsXG4gIG1lc3NhZ2U6IFJlcXVpcmVkU3RyaW5nLFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSA9IEV2ZW50VHlwZS5leHRyYWN0KFtcIlZBTElEQVRJT05fRVJST1JcIl0pO1xuY29uc3QgVmFsaWRhdGlvbkVycm9yRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IFZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSxcbiAgZWxlbWVudFR5cGU6IEFsbEZpZWxkTmFtZXMsXG4gIGVycm9yczogeiQxLmFycmF5KHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgTGF5b3V0RXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkxBWU9VVCksXG4gIGhlaWdodDogUmVxdWlyZWRTdHJpbmdcbn0pO1xuY29uc3QgTG9hZGVkRXZlbnRQYXlsb2FkID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5saXRlcmFsKEV2ZW50VHlwZS5lbnVtLkxPQURFRCksXG4gIHNlc3Npb25JZDogUmVxdWlyZWRTdHJpbmcsXG4gIHRvdGFsQW1vdW50QXRvbXM6IHokMS5udW1iZXIoKSxcbiAgY3VycmVuY3k6IE9wdGlvbmFsU3RyaW5nLFxuICBjaGVja291dFBheW1lbnRNZXRob2RzOiB6JDEuYXJyYXkoQ2hlY2tvdXRQYXltZW50TWV0aG9kJDEpXG59KTtcbmNvbnN0IFBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5QQVlNRU5UX0ZMT1dfU1RBUlRFRCksXG4gIG5leHRBY3Rpb25NZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSksXG4gIHBheW1lbnRGbG93TWV0YWRhdGE6IHokMS5hbnkoKS5vcHRpb25hbCgpLFxuICBzdGFydFBGTWV0YWRhdGE6IHokMS5vcHRpb25hbCh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xuY29uc3QgU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLmxpdGVyYWwoRXZlbnRUeXBlLmVudW0uU0VUVVBfUEFZTUVOVF9NRVRIT0RfU1VDQ0VTUyksXG4gIHBheW1lbnRNZXRob2RJZDogeiQxLnN0cmluZygpXG59KTtcbmNvbnN0IFJlcXVpcmVkRm9ybUZpZWxkcyA9IHokMS5vYmplY3Qoe1xuICBbXCJmaXJzdE5hbWVcIiAvKiBGSVJTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImxhc3ROYW1lXCIgLyogTEFTVF9OQU1FICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImVtYWlsXCIgLyogRU1BSUwgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nXG59KTtcbmNvbnN0IFBSRm9ybUZpZWxkcyA9IHokMS5vYmplY3Qoe1xuICBbXCJmaXJzdE5hbWVcIiAvKiBGSVJTVF9OQU1FICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImxhc3ROYW1lXCIgLyogTEFTVF9OQU1FICovXTogT3B0aW9uYWxTdHJpbmcsXG4gIFtcImVtYWlsXCIgLyogRU1BSUwgKi9dOiBSZXF1aXJlZFN0cmluZyxcbiAgW1wiemlwQ29kZVwiIC8qIFpJUF9DT0RFICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcImNvdW50cnlcIiAvKiBDT1VOVFJZICovXTogUmVxdWlyZWRTdHJpbmcsXG4gIFtcInByb21vdGlvbkNvZGVcIiAvKiBQUk9NT1RJT05fQ09ERSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJhZGRyZXNzXCIgLyogQUREUkVTUyAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJjaXR5XCIgLyogQ0lUWSAqL106IE9wdGlvbmFsU3RyaW5nLFxuICBbXCJzdGF0ZVwiIC8qIFNUQVRFICovXTogT3B0aW9uYWxTdHJpbmdcbn0pO1xuY29uc3QgU3VibWl0RXZlbnRUeXBlID0gRXZlbnRUeXBlLmV4dHJhY3QoW1wiVE9LRU5JWkVcIiwgXCJDSEVDS09VVFwiLCBcIlNUQVJUX1BBWU1FTlRfRkxPV1wiXSk7XG5jb25zdCBTdWJtaXRFdmVudFBheWxvYWQgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogU3VibWl0RXZlbnRUeXBlLFxuICBzZXNzaW9uSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICBjaGVja291dFBheW1lbnRNZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCQxLFxuICBwYXltZW50Rmxvd01ldGFkYXRhOiB6JDEuYW55KCkub3B0aW9uYWwoKSxcbiAgZG9Ob3RVc2VMZWdhY3lDQ0Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgZXhpc3RpbmdDQ1BNSWQ6IE9wdGlvbmFsU3RyaW5nXG59KS5leHRlbmQoUmVxdWlyZWRGb3JtRmllbGRzLnNoYXBlKTtcbmNvbnN0IFRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5UT0tFTklaRV9TVUNDRVNTKSxcbiAgaXNSZWFkeUZvckNoZWNrb3V0OiB6JDEuYm9vbGVhbigpXG59KTtcbmNvbnN0IENoZWNrb3V0U3VjY2Vzc0V2ZW50UGF5bG9hZCA9IHokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEubGl0ZXJhbChFdmVudFR5cGUuZW51bS5DSEVDS09VVF9TVUNDRVNTKSxcbiAgaW52b2ljZVVybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25JZHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBjdXN0b21lcklkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgRXZlbnRQYXlsb2FkID0geiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICBHZW5lcmljRXZlbnRQYXlsb2FkLFxuICBJbnB1dEV2ZW50UGF5bG9hZCxcbiAgRXJyb3JFdmVudFBheWxvYWQsXG4gIFZhbGlkYXRpb25FcnJvckV2ZW50UGF5bG9hZCxcbiAgTGF5b3V0RXZlbnRQYXlsb2FkLFxuICBMb2FkZWRFdmVudFBheWxvYWQsXG4gIFN1Ym1pdEV2ZW50UGF5bG9hZCxcbiAgVG9rZW5pemVTdWNjZXNzRXZlbnRQYXlsb2FkLFxuICBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQsXG4gIFBheW1lbnRGbG93U3RhcnRlZEV2ZW50UGF5bG9hZCxcbiAgU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWRcbl0pO1xueiQxLm9iamVjdCh7XG4gIHBheWxvYWQ6IEV2ZW50UGF5bG9hZCxcbiAgbm9uY2U6IFJlcXVpcmVkU3RyaW5nLFxuICBmb3JtSWQ6IFJlcXVpcmVkU3RyaW5nLFxuICBlbGVtZW50SWQ6IFJlcXVpcmVkU3RyaW5nXG59KTtcbnokMS5vYmplY3Qoe1xuICBhbW91bnRBdG9tOiB6JDEubnVtYmVyKCksXG4gIC8qKlxuICAgKiBUaGUgdGhyZWUtbGV0dGVyIElTTyA0MjE3IGN1cnJlbmN5IGNvZGUgZm9yIHRoZSBwYXltZW50LlxuICAgKi9cbiAgY3VycmVuY3k6IFJlcXVpcmVkU3RyaW5nXG59KTtcbnokMS5lbnVtKFtcImFwcGxlX3BheVwiLCBcImdvb2dsZV9wYXlcIl0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBleGlzdGluZ19jY19wbV9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIHRoZWlyX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbnVsbE9yVW5kZWZPciQxKHokMS5zdHJpbmcoKSksXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogbnVsbE9yVW5kZWZPciQxKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBDaGVja291dFN1Y2Nlc3NSZXNwb25zZSA9IHokMS5vYmplY3Qoe1xuICBpbnZvaWNlX3VybHM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBzdWJzY3JpcHRpb25faWRzOiB6JDEuYXJyYXkoeiQxLnN0cmluZygpKSxcbiAgY3VzdG9tZXJfaWQ6IHokMS5zdHJpbmcoKVxufSk7XG5jb25zdCBGaWVsZFZhbGlkYXRpb25FcnJvciA9IHokMS5vYmplY3Qoe1xuICBlbGVtZW50VHlwZTogeiQxLnN0cmluZygpLFxuICBlcnJvcnM6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgVG9rZW5pemVDYXJkRXJyb3JSZXNwb25zZSA9IHokMS5vYmplY3Qoe1xuICBzdWNjZXNzOiB6JDEubGl0ZXJhbChmYWxzZSksXG4gIGVycm9yX3R5cGU6IHokMS5saXRlcmFsKFwidmFsaWRhdGlvbl9lcnJvclwiKSxcbiAgZXJyb3JzOiB6JDEuYXJyYXkoRmllbGRWYWxpZGF0aW9uRXJyb3IpXG59KTtcbnokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJzdWNjZXNzXCIsIFtcbiAgeiQxLm9iamVjdCh7IHN1Y2Nlc3M6IHokMS5saXRlcmFsKHRydWUpIH0pLFxuICBUb2tlbml6ZUNhcmRFcnJvclJlc3BvbnNlXG5dKTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBkb19ub3RfdXNlX2xlZ2FjeV9jY19mbG93OiB6JDEuYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIGV4aXN0aW5nX2NjX3BtX2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgZXh0cmFfbWV0YWRhdGE6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZXNzaW9uX2lkOiB6JDEuc3RyaW5nKCksXG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QkMSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSkub3B0aW9uYWwoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgc3RhdHVzOiB6JDEuZW51bShbXCJzdWNjZXNzXCIgLyogU1VDQ0VTUyAqLywgXCJmYWlsdXJlXCIgLyogRkFJTFVSRSAqLywgXCJjYW5jZWxsZWRcIiAvKiBDQU5DRUxMRUQgKi9dKSxcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgaHJlZjogeiQxLnN0cmluZygpLm9wdGlvbmFsKCkubnVsbGFibGUoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICByZWRpcmVjdF91cmw6IHokMS5zdHJpbmcoKSxcbiAgaW5pdGlhbF9pbnRlbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgY29uc2VudF9pZDogeiQxLnN0cmluZygpLFxuICB0aGVpcl9wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKClcbn0pO1xuY29uc3QgQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhID0geiQxLm9iamVjdCh7XG4gIHR5cGU6IHokMS5zdHJpbmcoKSxcbiAgcmVkaXJlY3RfdXJsOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgaW5pdGlhbF9pbnRlbnRfaWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBjb25zZW50X2lkOiBudWxsT3JVbmRlZk9yJDEoeiQxLnN0cmluZygpKSxcbiAgdGhlaXJfcG1faWQ6IG51bGxPclVuZGVmT3IkMSh6JDEuc3RyaW5nKCkpLFxuICBwYXltZW50X3Nlc3Npb246IG51bGxPclVuZGVmT3IkMSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xueiQxLmRpc2NyaW1pbmF0ZWRVbmlvbihcInByZXNlbnRcIiwgW1xuICB6JDEub2JqZWN0KHsgcHJlc2VudDogeiQxLmxpdGVyYWwodHJ1ZSksIGhyZWY6IHokMS5zdHJpbmcoKSB9KSxcbiAgeiQxLm9iamVjdCh7IHByZXNlbnQ6IHokMS5saXRlcmFsKGZhbHNlKSB9KVxuXSk7XG56JDEub2JqZWN0KHtcbiAgcGF5bWVudF9tZXRob2RzOiB6JDEuYXJyYXkoUGF5bWVudE1ldGhvZE1pbmltYWwpLFxuICBwYXlfZmlyc3Rfc3VjY2Vzc19yZXNwb25zZTogbnVsbE9yVW5kZWZPciQxKENoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlKSxcbiAgcmVxdWlyZWRfdXNlcl9hY3Rpb25zOiBudWxsT3JVbmRlZk9yJDEoeiQxLmFycmF5KENvbW1vbk5leHRBY3Rpb25NZXRhZGF0YSkpXG59KTtcblxueiQxLm9iamVjdCh7XG4gIHN0cmlwZV9wazogeiQxLnN0cmluZygpLFxuICBjbGllbnRfc2VjcmV0OiB6JDEuc3RyaW5nKCksXG4gIHN0cmlwZV9wbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICB0eXBlOiB6JDEuc3RyaW5nKCksXG4gIGNsaWVudF9zZWNyZXQ6IHokMS5zdHJpbmcoKSxcbiAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbn0pO1xuXG5jb25zdCBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyA9IChzdHlsZXMpID0+IHtcbiAgY29uc3Qgc2VyaWFsaXplZFN0eWxlcyA9IEpTT04uc3RyaW5naWZ5KHN0eWxlcyk7XG4gIHJldHVybiBzZXJpYWxpemVkU3R5bGVzO1xufTtcblxuY29uc3QgbnVsbE9yVW5kZWZPciA9ICh6VHlwZSkgPT4geiQxLm51bGxhYmxlKHpUeXBlLm9wdGlvbmFsKCkpO1xueiQxLnN0cmluZygpLnRyaW0oKS5taW4oMSwgeyBtZXNzYWdlOiBgQ2Fubm90IGJlIGJsYW5rYCB9KTtcbnokMS5vYmplY3Qoe1xuICBjZGVfcmVzcG9uc2VfdHlwZTogeiQxLmxpdGVyYWwoXCJlcnJvclwiKSxcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpLFxuICBoZWFkZXJzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLnN0cmluZygpKS5vcHRpb25hbCgpXG59KTtcbnokMS5lbnVtKFtcInVzZFwiLCBcImJybFwiXSk7XG5jb25zdCBDb3Vwb25NaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgYW1vdW50X2F0b21fb2ZmOiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKSksXG4gIHBlcmNlbnRfb2ZmOiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKSksXG4gIGN1cnJlbmN5OiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGR1cmF0aW9uOiB6JDEuc3RyaW5nKCksXG4gIGR1cmF0aW9uX2luX21vbnRoczogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkpXG59KTtcbmNvbnN0IExpbmVJdGVtID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9zdWJ0b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGFtb3VudF90b3RhbF9hdG9tOiB6JDEubnVtYmVyKCkuaW50KCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHByaWNlX2lkOiB6JDEuc3RyaW5nKCksXG4gIGJpbGxpbmdfaW50ZXJ2YWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbF9jb3VudDogbnVsbE9yVW5kZWZPcih6JDEubnVtYmVyKCkuaW50KCkpLFxuICBxdWFudGl0eTogeiQxLm51bWJlcigpLmludCgpXG59KTtcbmNvbnN0IEJyYW5kU2V0dGluZ3MgPSB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKTtcbmNvbnN0IEJyYW5kID0geiQxLm9iamVjdCh7XG4gIG5hbWU6IHokMS5zdHJpbmcoKSxcbiAgc2V0dGluZ3M6IG51bGxPclVuZGVmT3IoQnJhbmRTZXR0aW5ncylcbn0pO1xuY29uc3QgQ2hlY2tvdXRQYXltZW50TWV0aG9kID0geiQxLm9iamVjdCh7XG4gIHByb3ZpZGVyOiB6JDEuc3RyaW5nKCksXG4gIHByb2Nlc3Nvcl9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIG1ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG5jb25zdCBTdWJzY3JpcHRpb25JdGVtTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBxdWFudGl0eTogeiQxLm51bWJlcigpXG59KTtcbmNvbnN0IFN1YnNjcmlwdGlvbk1pbmltYWwgPSB6JDEub2JqZWN0KHtcbiAgaWQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19pbnRlcnZhbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2ludGVydmFsX2NvdW50OiBudWxsT3JVbmRlZk9yKHokMS5udW1iZXIoKS5pbnQoKSksXG4gIHN1YnNjcmlwdGlvbl9pdGVtczogeiQxLmFycmF5KFN1YnNjcmlwdGlvbkl0ZW1NaW5pbWFsKSxcbiAgdHJpYWxfc3RhcnQ6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgdHJpYWxfZW5kOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSlcbn0pO1xuY29uc3QgSW52b2ljZUl0ZW1EaXNjb3VudEFtb3VudHNNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGFtb3VudF9hdG9tOiB6JDEubnVtYmVyKClcbn0pO1xuY29uc3QgSW52b2ljZUxpbmVJdGVtTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBhbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICBhbW91bnRfYXRvbV9jb25zaWRlcmluZ19kaXNjb3VudF9hcHBsaWVkOiB6JDEubnVtYmVyKCksXG4gIGN1cnJlbmN5OiB6JDEuc3RyaW5nKCksXG4gIGRpc2NvdW50X2Ftb3VudF9hdG9tczogeiQxLmFycmF5KEludm9pY2VJdGVtRGlzY291bnRBbW91bnRzTWluaW1hbCksXG4gIHN1YnNjcmlwdGlvbl9pdGVtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgRGlzY291bnRNaW5pbWFsID0geiQxLm9iamVjdCh7XG4gIGNvdXBvbjogQ291cG9uTWluaW1hbFxufSk7XG5jb25zdCBJbnZvaWNlTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBjdXJyZW5jeTogeiQxLnN0cmluZygpLFxuICBkaXNjb3VudHM6IHokMS5hcnJheShEaXNjb3VudE1pbmltYWwpLFxuICBob3N0ZWRfaW52b2ljZV91cmw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZXM6IHokMS5hcnJheShJbnZvaWNlTGluZUl0ZW1NaW5pbWFsKSxcbiAgcmVtYWluaW5nX2Ftb3VudF9hdG9tOiB6JDEubnVtYmVyKCksXG4gIHRheF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLFxuICB0b3RhbF9kaXNjb3VudF9hbW91bnRfYXRvbXM6IHokMS5hcnJheShJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwpXG59KTtcbmNvbnN0IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCA9IHokMS5vYmplY3Qoe1xuICBjcmVhdGVkOiB6JDEuYXJyYXkoU3Vic2NyaXB0aW9uTWluaW1hbCksXG4gIGludm9pY2VzOiB6JDEuYXJyYXkoSW52b2ljZU1pbmltYWwpXG59KTtcbmNvbnN0IFByZXZpZXdDaGVja291dFJlc3BvbnNlID0geiQxLm9iamVjdCh7XG4gIHByZXZpZXc6IENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCxcbiAgcHJldmlld19wb3N0X3RyaWFsOiBudWxsT3JVbmRlZk9yKENyZWF0ZVN1YnNjcmlwdGlvblJlc3BvbnNlTWluaW1hbCksXG4gIGNvdXBvbnM6IHokMS5hcnJheShDb3Vwb25NaW5pbWFsKVxufSk7XG5jb25zdCBfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJvcGVuXCIpLFxuICBsb2NhbGU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgZW1haWw6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KExpbmVJdGVtKSxcbiAgYW1vdW50X3N1YnRvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYW1vdW50X3RvdGFsX2F0b206IHokMS5udW1iZXIoKS5pbnQoKSxcbiAgYnJhbmQ6IEJyYW5kLFxuICBzdWJzX3ByZXZpZXc6IG51bGxPclVuZGVmT3IoUHJldmlld0NoZWNrb3V0UmVzcG9uc2UpLFxuICAvLyBOdWxsIGluIHNldHVwIG1vZGVcbiAgbWV0aG9kc19hdmFpbGFibGU6IHokMS5hcnJheShDaGVja291dFBheW1lbnRNZXRob2QpXG59KTtcbmNvbnN0IFBheW1lbnRGb3JtUHJlZmlsbCA9IHokMS5kaXNjcmltaW5hdGVkVW5pb24oXCJtb2RlXCIsIFtcbiAgeiQxLm9iamVjdCh7XG4gICAgbW9kZTogeiQxLmxpdGVyYWwoXCJzZXR1cFwiKSxcbiAgICBjdXJyZW5jeTogeiQxLm51bGxhYmxlKHokMS51bmRlZmluZWQoKSlcbiAgfSkuZXh0ZW5kKF9QYXltZW50Rm9ybVByZWZpbGxDb21tb24uc2hhcGUpLFxuICB6JDEub2JqZWN0KHtcbiAgICBtb2RlOiB6JDEuZW51bShbXCJwYXltZW50XCIsIFwic3Vic2NyaXB0aW9uXCJdKSxcbiAgICBjdXJyZW5jeTogeiQxLnN0cmluZygpXG4gIH0pLmV4dGVuZChfUGF5bWVudEZvcm1QcmVmaWxsQ29tbW9uLnNoYXBlKVxuXSk7XG5jb25zdCBDb21wbGV0ZWRGb3JtUHJlZmlsbCA9IHokMS5vYmplY3Qoe1xuICBzdGF0dXM6IHokMS5saXRlcmFsKFwiY29tcGxldGVcIilcbn0pO1xuY29uc3QgRXhwaXJlZEZvcm1QcmVmaWxsID0geiQxLm9iamVjdCh7XG4gIHN0YXR1czogeiQxLmxpdGVyYWwoXCJleHBpcmVkXCIpXG59KTtcbnokMS51bmlvbihbUGF5bWVudEZvcm1QcmVmaWxsLCBDb21wbGV0ZWRGb3JtUHJlZmlsbCwgRXhwaXJlZEZvcm1QcmVmaWxsXSk7XG56JDEub2JqZWN0KHtcbiAgbG9nbzogeiQxLnN0cmluZygpLFxuICBpY29uOiB6JDEuc3RyaW5nKCksXG4gIHByaW1hcnlfY29sb3I6IHokMS5zdHJpbmcoKSxcbiAgc2Vjb25kYXJ5X2NvbG9yOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlY3VyZV90b2tlbjogeiQxLnN0cmluZygpLFxuICBwbV9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBzZWN1cmVfdG9rZW46IHokMS5zdHJpbmcoKSxcbiAgcGF5bWVudF9pbnB1dDogeiQxLmFueSgpLFxuICAvLyBTaG91bGQgZm9sbG93IEFueVBheW1lbnRJbnB1dCBmcm9tIENERVxuICBjdXN0b21lcl9maXJzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfbGFzdF9uYW1lOiB6JDEuc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgY3VzdG9tZXJfZW1haWw6IHokMS5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfemlwX2NvZGU6IHokMS5zdHJpbmcoKSxcbiAgY3VzdG9tZXJfY291bnRyeTogeiQxLnN0cmluZygpLFxuICBsaW5lX2l0ZW1zOiB6JDEuYXJyYXkoTGluZUl0ZW0pLFxuICB0b3RhbF9hbW91bnRfYXRvbTogeiQxLm51bWJlcigpLmludCgpLFxuICBjYW5jZWxfYXRfZW5kOiB6JDEuYm9vbGVhbigpLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBwcm9tb3Rpb25fY29kZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGRvX25vdF91c2VfbGVnYWN5X2NjX2Zsb3c6IHokMS5ib29sZWFuKCkub3B0aW9uYWwoKSxcbiAgdXNlX2NvbmZpcm1lZF9wbV9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBwYXltZW50X21ldGhvZF9pZDogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICByZXR1cm5fdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xuY29uc3QgUHlkYW50aWNWYWxpZGF0aW9uRXJyb3IgPSB6JDEub2JqZWN0KHtcbiAgdHlwZTogeiQxLnN0cmluZygpLFxuICBsb2M6IHokMS5hcnJheSh6JDEuc3RyaW5nKCkpLFxuICBtc2c6IHokMS5zdHJpbmcoKSxcbiAgdXJsOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLmFycmF5KFB5ZGFudGljVmFsaWRhdGlvbkVycm9yKTtcbmNvbnN0IE5ld0N1c3RvbWVyRmllbGRzID0geiQxLm9iamVjdCh7XG4gIG5ld19jdXN0b21lcl9lbWFpbDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9hZGRyZXNzOiB6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKS5vcHRpb25hbCgpLFxuICBuZXdfY3VzdG9tZXJfZmlyc3RfbmFtZTogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIG5ld19jdXN0b21lcl9sYXN0X25hbWU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpXG59KTtcbmNvbnN0IFByaWNlUXR5ID0geiQxLm9iamVjdCh7XG4gIHByaWNlX2lkOiB6JDEuc3RyaW5nKCksXG4gIHF1YW50aXR5OiB6JDEubnVtYmVyKCkuaW50KClcbn0pO1xuY29uc3QgQ2FydEluZm8gPSB6JDEub2JqZWN0KHtcbiAgbGluZV9pdGVtczogeiQxLmFycmF5KFByaWNlUXR5KSxcbiAgcHJvbW90aW9uX2NvZGU6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBkaXNwbGF5ZWRfdG90YWxfYW1vdW50X2F0b206IHokMS5udW1iZXIoKS5pbnQoKVxufSk7XG5jb25zdCBQcm9jZXNzb3JTcGVjaWZpY01ldGFkYXRhID0geiQxLm9iamVjdCh7XG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogbnVsbE9yVW5kZWZPcih6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSlcbn0pO1xueiQxLm9iamVjdCh7XG4gIHBheW1lbnRfcHJvdmlkZXI6IHokMS5zdHJpbmcoKSxcbiAgY2hlY2tvdXRfcGF5bWVudF9tZXRob2Q6IENoZWNrb3V0UGF5bWVudE1ldGhvZCxcbiAgZXhpc3RpbmdfY2NfcG1faWQ6IHokMS5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0aGVpcl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHVzZV9wYXlfZmlyc3RfZmxvdzogeiQxLmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBwYXlfZmlyc3RfZmxvd19jYXJ0X2luZm86IENhcnRJbmZvLm9wdGlvbmFsKClcbn0pLmV4dGVuZChOZXdDdXN0b21lckZpZWxkcy5zaGFwZSkuZXh0ZW5kKFByb2Nlc3NvclNwZWNpZmljTWV0YWRhdGEuc2hhcGUpO1xueiQxLm9iamVjdCh7XG4gIHJlcXVpcmVkX3VzZXJfYWN0aW9uczogeiQxLmFycmF5KHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKSxcbiAgY2hlY2tvdXRfYXR0ZW1wdF9pZDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBmaWVsZHM6IFBSRm9ybUZpZWxkcyxcbiAgY2hlY2tvdXRQYXltZW50TWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2Rcbn0pO1xueiQxLm9iamVjdCh7XG4gIHNlc3Npb25faWQ6IHokMS5zdHJpbmcoKSxcbiAgbm9uX2NkZV9mb3JtX2ZpZWxkczogUmVxdWlyZWRGb3JtRmllbGRzLFxuICBjaGVja291dF9wYXltZW50X21ldGhvZDogQ2hlY2tvdXRQYXltZW50TWV0aG9kLFxuICBleHRyYV9tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSlcbiAgLy8gVGhpcyBpcyBvcHRpb25hbCBpbiBDREUsIGJ1dCBub3QgaW4gT0pTIG1vdmluZyBmb3J3YXJkXG59KTtcbnokMS5vYmplY3Qoe1xuICByZXF1aXJlZF91c2VyX2FjdGlvbnM6IHokMS5hcnJheSh6JDEucmVjb3JkKHokMS5zdHJpbmcoKSwgeiQxLmFueSgpKSksXG4gIGNjX3BtX2lkOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLnJlY29yZCh6JDEuYW55KCkpO1xueiQxLm9iamVjdCh7XG4gIGZpcnN0X25hbWU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgbGFzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmUxOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmUyOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxpbmUzOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGNpdHk6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgc3RhdGU6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgY291bnRyeTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICB6aXBfY29kZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBiaWxsaW5nX2VtYWlsOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIHBob25lX251bWJlcjogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICB1cGRhdGVfcHJvY2Vzc29yX2N1c3RvbWVyOiBudWxsT3JVbmRlZk9yKHokMS5ib29sZWFuKCkpXG59KTtcbnokMS5vYmplY3Qoe1xuICBpZDogeiQxLnN0cmluZygpLFxuICBlbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBmaXJzdF9uYW1lOiBudWxsT3JVbmRlZk9yKHokMS5zdHJpbmcoKSksXG4gIGxhc3RfbmFtZTogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBwaG9uZV9udW1iZXI6IG51bGxPclVuZGVmT3IoeiQxLnN0cmluZygpKSxcbiAgYmlsbGluZ19lbWFpbDogbnVsbE9yVW5kZWZPcih6JDEuc3RyaW5nKCkpLFxuICBhZGRyZXNzOiBudWxsT3JVbmRlZk9yKHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpKVxufSk7XG56JDEub2JqZWN0KHtcbiAgbWVzc2FnZTogeiQxLnN0cmluZygpXG59KTtcbnokMS5vYmplY3Qoe1xuICBlcnJvcl9jb2RlOiB6JDEuc3RyaW5nKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIGNoZWNrb3V0X3BheW1lbnRfbWV0aG9kOiBDaGVja291dFBheW1lbnRNZXRob2QsXG4gIHByb2Nlc3Nvcl9zcGVjaWZpY19tZXRhZGF0YTogeiQxLnJlY29yZCh6JDEuYW55KCkpLm9wdGlvbmFsKClcbn0pO1xueiQxLm9iamVjdCh7XG4gIG5leHRfYWN0aW9uX21ldGFkYXRhOiBudWxsT3JVbmRlZk9yKHokMS5yZWNvcmQoeiQxLmFueSgpKSlcbn0pO1xuXG5mdW5jdGlvbiBmaXhQcm90byh0YXJnZXQsIHByb3RvdHlwZSkge1xuICB2YXIgc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2Y7XG4gIHNldFByb3RvdHlwZU9mID8gc2V0UHJvdG90eXBlT2YodGFyZ2V0LCBwcm90b3R5cGUpIDogdGFyZ2V0Ll9fcHJvdG9fXyA9IHByb3RvdHlwZTtcbn1cbmZ1bmN0aW9uIGZpeFN0YWNrKHRhcmdldCwgZm4pIHtcbiAgaWYgKGZuID09PSB2b2lkIDApIHtcbiAgICBmbiA9IHRhcmdldC5jb25zdHJ1Y3RvcjtcbiAgfVxuXG4gIHZhciBjYXB0dXJlU3RhY2tUcmFjZSA9IEVycm9yLmNhcHR1cmVTdGFja1RyYWNlO1xuICBjYXB0dXJlU3RhY2tUcmFjZSAmJiBjYXB0dXJlU3RhY2tUcmFjZSh0YXJnZXQsIGZuKTtcbn1cblxudmFyIF9fZXh0ZW5kcyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIF9leHRlbmRTdGF0aWNzID0gZnVuY3Rpb24gZXh0ZW5kU3RhdGljcyhkLCBiKSB7XG4gICAgX2V4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwge1xuICAgICAgX19wcm90b19fOiBbXVxuICAgIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikge1xuICAgICAgZC5fX3Byb3RvX18gPSBiO1xuICAgIH0gfHwgZnVuY3Rpb24gKGQsIGIpIHtcbiAgICAgIGZvciAodmFyIHAgaW4gYikge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuICB9O1xuXG4gIHJldHVybiBmdW5jdGlvbiAoZCwgYikge1xuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcblxuICAgIF9leHRlbmRTdGF0aWNzKGQsIGIpO1xuXG4gICAgZnVuY3Rpb24gX18oKSB7XG4gICAgICB0aGlzLmNvbnN0cnVjdG9yID0gZDtcbiAgICB9XG5cbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XG4gIH07XG59KCk7XG5cbihmdW5jdGlvbiAoX3N1cGVyKSB7XG4gIF9fZXh0ZW5kcyhDdXN0b21FcnJvciwgX3N1cGVyKTtcblxuICBmdW5jdGlvbiBDdXN0b21FcnJvcihtZXNzYWdlLCBvcHRpb25zKSB7XG4gICAgdmFyIF9uZXdUYXJnZXQgPSB0aGlzLmNvbnN0cnVjdG9yO1xuXG4gICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgbWVzc2FnZSwgb3B0aW9ucykgfHwgdGhpcztcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfdGhpcywgJ25hbWUnLCB7XG4gICAgICB2YWx1ZTogX25ld1RhcmdldC5uYW1lLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgICBmaXhQcm90byhfdGhpcywgX25ld1RhcmdldC5wcm90b3R5cGUpO1xuICAgIGZpeFN0YWNrKF90aGlzKTtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICByZXR1cm4gQ3VzdG9tRXJyb3I7XG59KShFcnJvcik7XG5cbmNvbnN0IGNyZWF0ZU9qc0Zsb3dMb2dnZXJzID0gKHByZWZpeCkgPT4ge1xuICBjb25zdCBsb2cgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ubG9nKGAke0FlLmdyZWVuLmJvbGQoXCJvanMvXCIpfSR7QWUuYm9sZC5ncmF5KGAke3ByZWZpeH1gKX1cdGAsIC4uLmFyZ3MpO1xuICB9O1xuICBjb25zdCBlcnIgPSAoLi4uYXJncykgPT4ge1xuICAgIHdpbmRvd1tcImNvbnNvbGVcIl0ud2FybihgJHtBZS5yZWQuYm9sZChcIm9qcy9cIil9JHtBZS5ib2xkLmdyYXkoYCR7cHJlZml4fWApfVx0YCwgLi4uYXJncyk7XG4gIH07XG4gIHJldHVybiB7XG4gICAgbG9nLFxuICAgIGVycixcbiAgICBsb2dfXzogbG9nLFxuICAgIGVycl9fOiBlcnJcbiAgfTtcbn07XG5cbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJzdHJpcGVfbGlua1wiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwic3RyaXBlXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgc3RyaXBlX3BrOiB6JDEuc3RyaW5nKClcbiAgfSlcbn0pO1xueiQxLmFycmF5KFxuICB6JDEub2JqZWN0KHtcbiAgICBvdXJfZXhpc3RpbmdfcG1faWQ6IHokMS5zdHJpbmcoKVxuICB9KVxuKS5sZW5ndGgoMSk7XG5cbnokMS5vYmplY3Qoe1xuICBcIm9wLXBvY2t5dC0zZHMtdXJsXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtdHhuLW5vXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1wb2NreXQtcmVmLW5vXCI6IHokMS5zdHJpbmcoKVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBcIm9wLWFpcndhbGxleC0zZHMtdXJsXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1haXJ3YWxsZXgtaW5pdGlhbC1pbnRlbnQtaWRcIjogeiQxLnN0cmluZygpLFxuICBcIm9wLWFpcndhbGxleC1jb25zZW50LWlkXCI6IHokMS5zdHJpbmcoKVxufSk7XG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiYXBwbGVfcGF5XCIpLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJhaXJ3YWxsZXhcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYWlyd2FsbGV4XCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgcHJvY2Vzc29yX2FjY291bnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9uYW1lOiB6JDEuc3RyaW5nKCksXG4gICAgZ29vZ2xlX3BheV9tZXJjaGFudF9pZDogeiQxLnN0cmluZygpLm51bGxpc2goKVxuICB9KVxufSk7XG5jb25zdCBBV1hfTE9BRElORyA9IHtcbiAgaXNBdmFpbGFibGU6IGZhbHNlLFxuICBpc0xvYWRpbmc6IHRydWUsXG4gIHN0YXJ0RmxvdzogYXN5bmMgKCkgPT4ge1xuICB9XG59O1xuXG5jb25zdCBBZHllbkVudmlyb25tZW50ID0geiQxLmVudW0oW1widGVzdFwiLCBcImxpdmVcIiwgXCJsaXZlLXVzXCIsIFwibGl2ZS1pblwiLCBcImxpdmUtYXBzZVwiLCBcImxpdmUtYXVcIl0pO1xueiQxLmVudW0oW1xuICBcImFyXCIsXG4gIFwiYmctQkdcIixcbiAgXCJjYS1FU1wiLFxuICBcImNzLUNaXCIsXG4gIFwiZGEtREtcIixcbiAgXCJkZS1ERVwiLFxuICBcImVsLUdSXCIsXG4gIFwiZW4tVVNcIixcbiAgXCJlcy1FU1wiLFxuICBcImV0LUVFXCIsXG4gIFwiZmktRklcIixcbiAgXCJmci1GUlwiLFxuICBcImhyLUhSXCIsXG4gIFwiaHUtSFVcIixcbiAgXCJpcy1JU1wiLFxuICBcIml0LUlUXCIsXG4gIFwiamEtSlBcIixcbiAgXCJrby1LUlwiLFxuICBcImx0LUxUXCIsXG4gIFwibHYtTFZcIixcbiAgXCJubC1OTFwiLFxuICBcIm5vLU5PXCIsXG4gIFwicGwtUExcIixcbiAgXCJwdC1CUlwiLFxuICBcInB0LVBUXCIsXG4gIFwicm8tUk9cIixcbiAgXCJydS1SVVwiLFxuICBcInNrLVNLXCIsXG4gIFwic2wtU0lcIixcbiAgXCJzdi1TRVwiLFxuICBcInpoLUNOXCIsXG4gIFwiemgtVFdcIlxuXSk7XG56JDEub2JqZWN0KHtcbiAgXCJvcC1hY2NvdW50LWlkXCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1hZHllbi1jbGllbnQta2V5XCI6IHokMS5zdHJpbmcoKSxcbiAgXCJvcC1hZHllbi1lbnZpcm9ubWVudFwiOiBBZHllbkVudmlyb25tZW50LFxuICBcIm9wLWFkeWVuLWFjdGlvblwiOiB6JDEuc3RyaW5nKClcbn0pO1xuXG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIG91cl9leGlzdGluZ19wbV9pZDogeiQxLnN0cmluZygpXG4gIH0pXG4pLmxlbmd0aCgxKTtcblxuY29uc3QgUGF5bWVudFByb2Nlc3NvciA9IHokMS5lbnVtKFtcInN0cmlwZVwiLCBcImFpcndhbGxleFwiLCBcImF1dGhvcml6ZV9uZXRcIl0pO1xuKHtcbiAgcHJvY2Vzc29yOiBQYXltZW50UHJvY2Vzc29yLkVudW0uc3RyaXBlLFxuICBpc0F2YWlsYWJsZTogZmFsc2UsXG4gIGlzTG9hZGluZzogdHJ1ZSxcbiAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gIH1cbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS51bmlvbihbeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksIHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKV0pLFxuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJzdHJpcGVcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBzdHJpcGVfcGs6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG5cbnokMS5vYmplY3Qoe1xuICBwcm9jZXNzb3JfbmFtZTogeiQxLmxpdGVyYWwoXCJwb2NreXRcIiksXG4gIHByb3ZpZGVyOiB6JDEubGl0ZXJhbChcInBheXBhbFwiKVxufSk7XG56JDEuYXJyYXkoXG4gIHokMS5vYmplY3Qoe1xuICAgIHBheXBhbF9pZnJhbWVfdXJsOiB6JDEuc3RyaW5nKCksXG4gICAgdmVyaWZ5X3Rva2VuOiB6JDEuc3RyaW5nKClcbiAgfSlcbikubGVuZ3RoKDEpO1xuXG56JDEub2JqZWN0KHtcbiAgZGF0YTogeiQxLm9iamVjdCh7XG4gICAgbWVzc2FnZUhlYWRlcnM6IHokMS5yZWNvcmQoeiQxLnN0cmluZygpLCB6JDEuYW55KCkpLFxuICAgIGVycm9yczogeiQxLmFycmF5KHokMS5hbnkoKSksXG4gICAgbWVzc2FnZVR5cGU6IHokMS5zdHJpbmcoKSxcbiAgICBtZXNzYWdlQm9keTogeiQxLnJlY29yZCh6JDEuc3RyaW5nKCksIHokMS5hbnkoKSlcbiAgfSksXG4gIG9yaWdpbjogeiQxLmxpdGVyYWwoXCJodHRwczovL2FwcGxlcGF5LmNkbi1hcHBsZS5jb21cIilcbn0pO1xuXG56JDEub2JqZWN0KHtcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwibG9vcFwiKSxcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiY3J5cHRvXCIpLFxuICBtZXRhZGF0YTogeiQxLm9iamVjdCh7XG4gICAgbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBlbnRpdHlfaWQ6IHokMS5zdHJpbmcoKSxcbiAgICBhcGlfdG9rZW46IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG52YXIgUGF5SW5TdGF0ZSA9IC8qIEBfX1BVUkVfXyAqLyAoKFBheUluU3RhdGUyKSA9PiB7XG4gIFBheUluU3RhdGUyW1wiSURMRVwiXSA9IFwiaWRsZVwiO1xuICBQYXlJblN0YXRlMltcIkNPTkZJUk1JTkdfQkFMQU5DRVwiXSA9IFwiY29uZmlybWluZ0JhbGFuY2VcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDT05GSVJNSU5HX0FVVEhPUklaQVRJT05cIl0gPSBcImNvbmZpcm1pbmdBdXRob3JpemF0aW9uXCI7XG4gIFBheUluU3RhdGUyW1wiVVBEQVRJTkdfQVVUSE9SSVpBVElPTlwiXSA9IFwidXBkYXRpbmdBdXRob3JpemF0aW9uXCI7XG4gIFBheUluU3RhdGUyW1wiU0lHTklOR19NRVNTQUdFXCJdID0gXCJzaWduaW5nTWVzc2FnZVwiO1xuICBQYXlJblN0YXRlMltcIkNSRUFUSU5HX0NVU1RPTUVSXCJdID0gXCJjcmVhdGluZ0N1c3RvbWVyXCI7XG4gIFBheUluU3RhdGUyW1wiUFJPQ0VTU0lOR19QQVlNRU5UXCJdID0gXCJwcm9jZXNzaW5nUGF5bWVudFwiO1xuICBQYXlJblN0YXRlMltcIkNSRUFUSU5HX1BBWU1FTlRcIl0gPSBcImNyZWF0aW5nUGF5bWVudFwiO1xuICBQYXlJblN0YXRlMltcIkNPTkZJUk1JTkdfUEFZTUVOVFwiXSA9IFwiY29uZmlybWluZ1BheW1lbnRcIjtcbiAgUGF5SW5TdGF0ZTJbXCJDT01QTEVURVwiXSA9IFwiY29tcGxldGVcIjtcbiAgcmV0dXJuIFBheUluU3RhdGUyO1xufSkoUGF5SW5TdGF0ZSB8fCB7fSk7XG5cbnokMS5vYmplY3Qoe1xuICBwcm92aWRlcjogeiQxLmxpdGVyYWwoXCJhcHBsZV9wYXlcIiksXG4gIHByb2Nlc3Nvcl9uYW1lOiB6JDEubGl0ZXJhbChcImF1dGhvcml6ZV9uZXRcIiksXG4gIG1ldGFkYXRhOiB6JDEub2JqZWN0KHtcbiAgICBwcm9jZXNzb3JfYWNjb3VudF9pZDogeiQxLnN0cmluZygpLFxuICAgIHByb2Nlc3Nvcl9hY2NvdW50X25hbWU6IHokMS5zdHJpbmcoKVxuICB9KVxufSk7XG56JDEub2JqZWN0KHtcbiAgcHJvdmlkZXI6IHokMS5saXRlcmFsKFwiZ29vZ2xlX3BheVwiKSxcbiAgcHJvY2Vzc29yX25hbWU6IHokMS5saXRlcmFsKFwiYXV0aG9yaXplX25ldFwiKSxcbiAgbWV0YWRhdGE6IHokMS5vYmplY3Qoe1xuICAgIHByb2Nlc3Nvcl9hY2NvdW50X2lkOiB6JDEuc3RyaW5nKCksXG4gICAgcHJvY2Vzc29yX2FjY291bnRfbmFtZTogeiQxLnN0cmluZygpLFxuICAgIGdvb2dsZV9wYXlfbWVyY2hhbnRfaWQ6IHokMS5zdHJpbmcoKS5udWxsaXNoKClcbiAgfSlcbn0pO1xuXG5jb25zdCBQUl9MT0FESU5HID0ge1xuICBpc0xvYWRpbmc6IHRydWUsXG4gIGlzQXZhaWxhYmxlOiBmYWxzZSxcbiAgc3RhcnRGbG93OiBhc3luYyAoKSA9PiB7XG4gICAgY29uc29sZS53YXJuKFxuICAgICAgYHN0YXJ0RmxvdyB0cmlnZ2VyZWQgd2hpbGUgcGF5bWVudCByZXF1ZXN0IGlzIHN0aWxsIG5vdCByZWFkeS4gXG4gICAgICBZb3UgY2FuIGNoZWNrIHRoZSBcIi5pc0xvYWRpbmdcIiBwYXJhbSB0byBrbm93IHdoZW4gYSBwYXltZW50IHJlcXVlc3QgaXMgc3RpbGwgbG9hZGluZywgXG4gICAgICBhbmQgXCIuaXNBdmFpbGFibGVcIiB0byBrbm93IGlmIGEgcGF5bWVudCByZXF1ZXN0IGlzIGF2YWlsYWJsZS5gXG4gICAgKTtcbiAgfVxufTtcblxuY29uc3QgeyBlcnJfXyB9ID0gY3JlYXRlT2pzRmxvd0xvZ2dlcnMoXCJmb3JtLWNhbGxiYWNrc1wiKTtcbmNvbnN0IE9wdGlvbmFsRm4gPSB6JDEuZnVuY3Rpb24oKS5vcHRpb25hbCgpO1xuY29uc3QgWm9kRm9ybUNhbGxiYWNrcyA9IHokMS5vYmplY3Qoe1xuICBvbkZvY3VzOiBPcHRpb25hbEZuLFxuICBvbkJsdXI6IE9wdGlvbmFsRm4sXG4gIG9uQ2hhbmdlOiBPcHRpb25hbEZuLFxuICBvbkxvYWQ6IE9wdGlvbmFsRm4sXG4gIG9uTG9hZEVycm9yOiBPcHRpb25hbEZuLFxuICBvblZhbGlkYXRpb25FcnJvcjogT3B0aW9uYWxGbixcbiAgb25DaGVja291dFN0YXJ0ZWQ6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRTdWNjZXNzOiBPcHRpb25hbEZuLFxuICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IE9wdGlvbmFsRm4sXG4gIG9uQ2hlY2tvdXRFcnJvcjogT3B0aW9uYWxGbixcbiAgb25QYXltZW50UmVxdWVzdExvYWQ6IE9wdGlvbmFsRm5cbn0pO1xuY2xhc3MgRm9ybUNhbGxiYWNrcyB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8qKlxuICAgICAqIFNldHMgQUxMIGZvcm0gY2FsbGJhY2tzLiBOb3RlIHRoYXQgYWxsIG9sZCBjYWxsYmFja3MgYXJlIHJlbW92ZWQuXG4gICAgICovXG4gICAgdGhpcy5zZXRDYWxsYmFja3MgPSAocmF3Q2FsbGJhY2tzKSA9PiB7XG4gICAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gICAgICBPYmplY3QuZW50cmllcyhyYXdDYWxsYmFja3MpLmZvckVhY2goKFtrZXksIHJhd0NhbGxiYWNrXSkgPT4ge1xuICAgICAgICBjb25zdCBzYWZlQ2FsbGJhY2sgPSBtYWtlQ2FsbGJhY2tTYWZlKGtleSwgcmF3Q2FsbGJhY2sgPz8gRm9ybUNhbGxiYWNrcy5OT09QLCBlcnJfXyk7XG4gICAgICAgIHRoaXMuX2NhbGxiYWNrc1trZXldID0gc2FmZUNhbGxiYWNrO1xuICAgICAgfSk7XG4gICAgfTtcbiAgICB0aGlzLl9jYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmNyZWF0ZUVtcHR5Q2FsbGJhY2tzKCk7XG4gIH1cbiAgc3RhdGljIHtcbiAgICB0aGlzLk5PT1AgPSAoKSA9PiB7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuY3JlYXRlRW1wdHlDYWxsYmFja3MgPSAoKSA9PiB7XG4gICAgICBjb25zdCB4ID0ge307XG4gICAgICBPYmplY3Qua2V5cyhab2RGb3JtQ2FsbGJhY2tzLmtleW9mKCkuZW51bSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIHhba2V5XSA9IEZvcm1DYWxsYmFja3MuTk9PUDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHg7XG4gICAgfTtcbiAgfVxuICBzdGF0aWMge1xuICAgIHRoaXMuZnJvbU9iamVjdCA9IChvYmopID0+IHtcbiAgICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IEZvcm1DYWxsYmFja3MoKTtcbiAgICAgIGluc3RhbmNlLnNldENhbGxiYWNrcyhab2RGb3JtQ2FsbGJhY2tzLnBhcnNlKG9iaikpO1xuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH07XG4gIH1cbiAgLyoqXG4gICAqIFJldHVybnMgYSByZWFkLW9ubHkgdmVyc2lvbiBvZiB0aGUgY2FsbGJhY2tzIG9iamVjdC5cbiAgICovXG4gIGdldCBnZXQoKSB7XG4gICAgcmV0dXJuIHsgLi4udGhpcy5fY2FsbGJhY2tzIH07XG4gIH1cbn1cblxuY29uc3QgdXNlUmVhY3RpdmVGb3JtQ2FsbGJhY2tzID0gKHByb3BzKSA9PiB7XG4gIGNvbnN0IGZvcm1DYWxsYmFja3MgPSBGb3JtQ2FsbGJhY2tzLmZyb21PYmplY3Qoe1xuICAgIG9uRm9jdXM6IHByb3BzLm9uRm9jdXMsXG4gICAgb25CbHVyOiBwcm9wcy5vbkJsdXIsXG4gICAgb25DaGFuZ2U6IHByb3BzLm9uQ2hhbmdlLFxuICAgIG9uTG9hZDogcHJvcHMub25Mb2FkLFxuICAgIG9uTG9hZEVycm9yOiBwcm9wcy5vbkxvYWRFcnJvcixcbiAgICBvblZhbGlkYXRpb25FcnJvcjogcHJvcHMub25WYWxpZGF0aW9uRXJyb3IsXG4gICAgb25DaGVja291dFN0YXJ0ZWQ6IHByb3BzLm9uQ2hlY2tvdXRTdGFydGVkLFxuICAgIG9uQ2hlY2tvdXRTdWNjZXNzOiBwcm9wcy5vbkNoZWNrb3V0U3VjY2VzcyxcbiAgICBvblNldHVwUGF5bWVudE1ldGhvZFN1Y2Nlc3M6IHByb3BzLm9uU2V0dXBQYXltZW50TWV0aG9kU3VjY2VzcyxcbiAgICBvbkNoZWNrb3V0RXJyb3I6IHByb3BzLm9uQ2hlY2tvdXRFcnJvcixcbiAgICBvblBheW1lbnRSZXF1ZXN0TG9hZDogcHJvcHMub25QYXltZW50UmVxdWVzdExvYWRcbiAgfSk7XG4gIGlmIChrdC5nZXRJbnN0YW5jZSgpKSB7XG4gICAga3QuZ2V0SW5zdGFuY2UoKT8udXBkYXRlQ2FsbGJhY2tzKGZvcm1DYWxsYmFja3MuZ2V0KTtcbiAgfVxuICByZXR1cm4gZm9ybUNhbGxiYWNrcy5nZXQ7XG59O1xuXG5jb25zdCB1c2VQYXltZW50UmVxdWVzdHMgPSAob3JpZ2luYWxPblBheW1lbnRSZXF1ZXN0TG9hZCkgPT4ge1xuICBjb25zdCBbcGF5bWVudFJlcXVlc3RzLCBzZXRQYXltZW50UmVxdWVzdHNdID0gdXNlU3RhdGUoe1xuICAgIGFwcGxlX3BheTogUFJfTE9BRElORyxcbiAgICBnb29nbGVfcGF5OiBQUl9MT0FESU5HXG4gIH0pO1xuICBjb25zdCBvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCA9IHVzZUNhbGxiYWNrKFxuICAgIChwYXltZW50UmVxdWVzdHMyKSA9PiB7XG4gICAgICBzZXRQYXltZW50UmVxdWVzdHMocGF5bWVudFJlcXVlc3RzMik7XG4gICAgICBvcmlnaW5hbE9uUGF5bWVudFJlcXVlc3RMb2FkPy4ocGF5bWVudFJlcXVlc3RzMik7XG4gICAgfSxcbiAgICBbb3JpZ2luYWxPblBheW1lbnRSZXF1ZXN0TG9hZF1cbiAgKTtcbiAgcmV0dXJuIHsgcGF5bWVudFJlcXVlc3RzLCBvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCB9O1xufTtcblxuY29uc3QgRk9STV9UQVJHRVQgPSBcIm9wX29qc19mb3JtXCI7XG5jb25zdCBFbGVtZW50c0Zvcm0gPSAocHJvcHMpID0+IHtcbiAgY29uc3QgW29wRm9ybSwgc2V0T3BGb3JtXSA9IHVzZVN0YXRlKCk7XG4gIGNvbnN0IFtlbGVtZW50c0NvbnRleHRWYWx1ZSwgc2V0RWxlbWVudHNDb250ZXh0VmFsdWVdID0gdXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IHsgcGF5bWVudFJlcXVlc3RzLCBvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCB9ID0gdXNlUGF5bWVudFJlcXVlc3RzKHByb3BzLm9uUGF5bWVudFJlcXVlc3RMb2FkKTtcbiAgY29uc3QgW2xvYWRlZCwgc2V0TG9hZGVkXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW3N0cmlwZUxpbmtDdHJsLCBzZXRTdHJpcGVMaW5rQ3RybF0gPSB1c2VTdGF0ZShudWxsKTtcbiAgY29uc3QgW2xvb3BDb25maWcsIHNldExvb3BDb25maWddID0gdXNlU3RhdGUobnVsbCk7XG4gIGNvbnN0IFthaXJ3YWxsZXgsIHNldEFpcndhbGxleF0gPSB1c2VTdGF0ZSh7XG4gICAgZ29vZ2xlUGF5OiBBV1hfTE9BRElORyxcbiAgICBhcHBsZVBheTogQVdYX0xPQURJTkdcbiAgfSk7XG4gIGNvbnN0IGZvcm1DYWxsYmFja3MgPSB1c2VSZWFjdGl2ZUZvcm1DYWxsYmFja3Moe1xuICAgIC4uLnByb3BzLFxuICAgIG9uUGF5bWVudFJlcXVlc3RMb2FkOiBvdmVycmlkZW5PblBheW1lbnRSZXF1ZXN0TG9hZCxcbiAgICBvbkxvYWQ6ICh0b3RhbEFtb3VudEF0b21zLCBjdXJyZW5jeSkgPT4ge1xuICAgICAgc2V0TG9hZGVkKHRydWUpO1xuICAgICAgcHJvcHMub25Mb2FkPy4odG90YWxBbW91bnRBdG9tcywgY3VycmVuY3kpO1xuICAgIH1cbiAgfSk7XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG9wRm9ybSkgcmV0dXJuO1xuICAgIGNvbnN0IGZvcm0gPSBrdC5nZXRJbnN0YW5jZSgpID8/IG5ldyBrdCh7XG4gICAgICBjaGVja291dFNlY3VyZVRva2VuOiBwcm9wcy5jaGVja291dFNlY3VyZVRva2VuLFxuICAgICAgZm9ybVRhcmdldDogYCMke0ZPUk1fVEFSR0VUfWAsXG4gICAgICBiYXNlVXJsOiBwcm9wcy5iYXNlVXJsLFxuICAgICAgY3VzdG9tSW5pdFBhcmFtczogcHJvcHMuY3VzdG9tSW5pdFBhcmFtcyxcbiAgICAgIC4uLmZvcm1DYWxsYmFja3NcbiAgICB9KTtcbiAgICBzZXRPcEZvcm0oZm9ybSk7XG4gICAgY29uc3QgdmFsdWUgPSBnZXRFbGVtZW50c0NvbnRleHRWYWx1ZShmb3JtKTtcbiAgICBzZXRFbGVtZW50c0NvbnRleHRWYWx1ZSh2YWx1ZSk7XG4gICAgZm9ybS5pbml0Rmxvd3Muc3RyaXBlTGluay5wdWJsaXNoZXIuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzICYmIHJlc3VsdC5sb2FkZWRWYWx1ZS5pc0F2YWlsYWJsZSkge1xuICAgICAgICBzZXRTdHJpcGVMaW5rQ3RybChyZXN1bHQubG9hZGVkVmFsdWUuY29udHJvbGxlcik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgZm9ybS5pbml0Rmxvd3MubG9vcC5wdWJsaXNoZXIuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzICYmIHJlc3VsdC5sb2FkZWRWYWx1ZS5pc0F2YWlsYWJsZSkge1xuICAgICAgICBzZXRMb29wQ29uZmlnKHtcbiAgICAgICAgICB3aWRnZXQ6IHJlc3VsdC5sb2FkZWRWYWx1ZS53aWRnZXRQcm9wcyxcbiAgICAgICAgICBjb25maWc6IHJlc3VsdC5sb2FkZWRWYWx1ZS5pbml0TG9vcENvbm5lY3RQcm9wc1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBmb3JtLmluaXRGbG93cy5haXJ3YWxsZXhHb29nbGVQYXkucHVibGlzaGVyLnN1YnNjcmliZSgocmVzdWx0KSA9PiB7XG4gICAgICBpZiAocmVzdWx0LmlzU3VjY2VzcyAmJiByZXN1bHQubG9hZGVkVmFsdWUuaXNBdmFpbGFibGUpIHtcbiAgICAgICAgc2V0QWlyd2FsbGV4KChwcmV2KSA9PiAoe1xuICAgICAgICAgIGFwcGxlUGF5OiBwcmV2LmFwcGxlUGF5LFxuICAgICAgICAgIGdvb2dsZVBheTogcmVzdWx0LmxvYWRlZFZhbHVlXG4gICAgICAgIH0pKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBmb3JtLmluaXRGbG93cy5haXJ3YWxsZXhBcHBsZVBheS5wdWJsaXNoZXIuc3Vic2NyaWJlKChyZXN1bHQpID0+IHtcbiAgICAgIGlmIChyZXN1bHQuaXNTdWNjZXNzICYmIHJlc3VsdC5sb2FkZWRWYWx1ZS5pc0F2YWlsYWJsZSkge1xuICAgICAgICBzZXRBaXJ3YWxsZXgoKHByZXYpID0+ICh7XG4gICAgICAgICAgZ29vZ2xlUGF5OiBwcmV2Lmdvb2dsZVBheSxcbiAgICAgICAgICBhcHBsZVBheToge1xuICAgICAgICAgICAgLi4ucmVzdWx0LmxvYWRlZFZhbHVlLFxuICAgICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZVxuICAgICAgICAgIH1cbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBmb3JtLmRlc3Ryb3koKTtcbiAgICB9O1xuICB9LCBbXSk7XG4gIGlmICghb3BGb3JtKSB7XG4gICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRnJhZ21lbnQsIHt9KTtcbiAgfVxuICBjb25zdCBjaGlsZHJlblByb3BzID0ge1xuICAgIHN1Ym1pdDogb3BGb3JtLnN1Ym1pdENhcmQsXG4gICAgc3VibWl0V2l0aDogb3BGb3JtLmdlbmVyYWxTdWJtaXQsXG4gICAgYXBwbGVQYXk6IHBheW1lbnRSZXF1ZXN0cy5hcHBsZV9wYXksXG4gICAgZ29vZ2xlUGF5OiBwYXltZW50UmVxdWVzdHMuZ29vZ2xlX3BheSxcbiAgICBsb2FkZWQsXG4gICAgLy8gRGlzYWJsZSBkeW5hbWljIHByZXZpZXdzIGZlYXR1cmUgZm9yIG5vd1xuICAgIHByZXZpZXc6IHtcbiAgICAgIGFtb3VudDogbnVsbCxcbiAgICAgIGlzTG9hZGluZzogZmFsc2UsXG4gICAgICBlcnJvcjogbnVsbFxuICAgIH0sXG4gICAgc3RyaXBlTGluazogc3RyaXBlTGlua0N0cmwsXG4gICAgYWlyd2FsbGV4LFxuICAgIGxvb3A6IGxvb3BDb25maWdcbiAgfTtcbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goRnJhZ21lbnQsIHsgY2hpbGRyZW46IGVsZW1lbnRzQ29udGV4dFZhbHVlID8gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50c0NvbnRleHQuUHJvdmlkZXIsIHsgdmFsdWU6IGVsZW1lbnRzQ29udGV4dFZhbHVlLCBjaGlsZHJlbjogLyogQF9fUFVSRV9fICovIGpzeChcImRpdlwiLCB7IGlkOiBGT1JNX1RBUkdFVCwgY2xhc3NOYW1lOiBwcm9wcy5jbGFzc05hbWUsIGNoaWxkcmVuOiBwcm9wcy5jaGlsZHJlbihjaGlsZHJlblByb3BzKSB9KSB9KSA6IC8qIEBfX1BVUkVfXyAqLyBqc3goRnJhZ21lbnQsIHt9KSB9KTtcbn07XG5jb25zdCBnZXRFbGVtZW50c0NvbnRleHRWYWx1ZSA9IChvcEZvcm0pID0+IHtcbiAgcmV0dXJuIHtcbiAgICBmb3JtSWQ6IG9wRm9ybS5mb3JtSWQsXG4gICAgZm9ybUhlaWdodDogb3BGb3JtLmZvcm1Qcm9wZXJ0aWVzLmhlaWdodCxcbiAgICByZWZlcnJlcjogb3BGb3JtLnJlZmVycmVyLFxuICAgIGNoZWNrb3V0U2VjdXJlVG9rZW46IG9wRm9ybS5jaGVja291dFNlY3VyZVRva2VuLFxuICAgIHJlZ2lzdGVySWZyYW1lOiBvcEZvcm0ucmVnaXN0ZXJJZnJhbWUsXG4gICAgYmFzZVVybDogb3BGb3JtLmJhc2VVcmxcbiAgfTtcbn07XG5cbmNvbnN0IEVsZW1lbnRGcmFtZSA9IChwcm9wcykgPT4ge1xuICBjb25zdCB7IGVsZW1lbnRUeXBlLCBzdHlsZXMgfSA9IHByb3BzO1xuICBjb25zdCB7IGZvcm1JZCwgcmVmZXJyZXIsIGZvcm1IZWlnaHQsIGNoZWNrb3V0U2VjdXJlVG9rZW4sIHJlZ2lzdGVySWZyYW1lLCBiYXNlVXJsIH0gPSB1c2VPcGVuUGF5RWxlbWVudHMoKTtcbiAgY29uc3Qgc3ViUGF0aCA9IGVsZW1lbnRUeXBlLnRvTG93ZXJDYXNlKCk7XG4gIGNvbnN0IFtoYXNMb2FkZWQsIHNldEhhc0xvYWRlZF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IGlmcmFtZVJlZiA9IHVzZVJlZihudWxsKTtcbiAgY29uc3QgZWxlbWVudFN0eWxlID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFzdHlsZXMpIHJldHVybiBcIlwiO1xuICAgIHJldHVybiBjb252ZXJ0U3R5bGVzVG9RdWVyeVN0cmluZyhzdHlsZXMpO1xuICB9LCBbc3R5bGVzXSk7XG4gIGNvbnN0IGZyYW1lU3R5bGUgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4ge1xuICAgICAgYm9yZGVyOiBcIm5vbmVcIixcbiAgICAgIHdpZHRoOiBcIjEwMCVcIixcbiAgICAgIGhlaWdodDogZm9ybUhlaWdodFxuICAgIH07XG4gIH0sIFtmb3JtSGVpZ2h0XSk7XG4gIGNvbnN0IHF1ZXJ5U3RyaW5nID0gdXNlTWVtbygoKSA9PiB7XG4gICAgaWYgKCFjaGVja291dFNlY3VyZVRva2VuIHx8ICFyZWZlcnJlcikgcmV0dXJuIFwiXCI7XG4gICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcygpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJyZWZlcmVyXCIsIHJlZmVycmVyKTtcbiAgICBwYXJhbXMuYXBwZW5kKFwic3R5bGVzXCIsIGVsZW1lbnRTdHlsZSk7XG4gICAgcGFyYW1zLmFwcGVuZChcImZvcm1JZFwiLCBmb3JtSWQpO1xuICAgIHBhcmFtcy5hcHBlbmQoXCJzZWN1cmVUb2tlblwiLCBjaGVja291dFNlY3VyZVRva2VuKTtcbiAgICByZXR1cm4gcGFyYW1zLnRvU3RyaW5nKCk7XG4gIH0sIFtlbGVtZW50U3R5bGUsIGZvcm1JZCwgcmVmZXJyZXIsIGNoZWNrb3V0U2VjdXJlVG9rZW5dKTtcbiAgdXNlRWZmZWN0KCgpID0+IHNldEhhc0xvYWRlZCh0cnVlKSwgW10pO1xuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghaWZyYW1lUmVmLmN1cnJlbnQgfHwgIWhhc0xvYWRlZCkgcmV0dXJuO1xuICAgIHJlZ2lzdGVySWZyYW1lKGVsZW1lbnRUeXBlLCBpZnJhbWVSZWYuY3VycmVudCk7XG4gIH0sIFtoYXNMb2FkZWRdKTtcbiAgaWYgKCFjaGVja291dFNlY3VyZVRva2VuKSB7XG4gICAgY29uc29sZS5lcnJvcihcIltmb3JtXSBDYW5ub3QgcmVuZGVyIHBhcnRpYWxseSBpbml0aWFsaXplZCBmcmFtZVwiKTtcbiAgICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChcImRpdlwiLCB7fSk7XG4gIH1cbiAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBqc3goXG4gICAgXCJpZnJhbWVcIixcbiAgICB7XG4gICAgICBpZDogYG9qcy0ke3N1YlBhdGh9LWVsZW1lbnRgLFxuICAgICAgbmFtZTogYCR7c3ViUGF0aH0tZWxlbWVudGAsXG4gICAgICBjbGFzc05hbWU6IFwib2pzLWlmcmFtZVwiLFxuICAgICAgc3JjOiBgJHtiYXNlVXJsfS9hcHAvdjEvJHtzdWJQYXRofS1lbGVtZW50Lz8ke3F1ZXJ5U3RyaW5nfWAsXG4gICAgICBzdHlsZTogZnJhbWVTdHlsZSxcbiAgICAgIHJlZjogaWZyYW1lUmVmXG4gICAgfVxuICApO1xufTtcblxuY29uc3QgQ2FyZEN2Y0VsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkRfQ1ZDIH0pO1xufTtcblxuY29uc3QgQ2FyZEVsZW1lbnQgPSAoeyBzdHlsZXMgfSkgPT4ge1xuICByZXR1cm4gLyogQF9fUFVSRV9fICovIGpzeChFbGVtZW50RnJhbWUsIHsgc3R5bGVzLCBlbGVtZW50VHlwZTogRWxlbWVudFR5cGVFbnVtLkNBUkQgfSk7XG59O1xuXG5jb25zdCBDYXJkRXhwaXJ5RWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRF9FWFBJUlkgfSk7XG59O1xuXG5jb25zdCBDYXJkTnVtYmVyRWxlbWVudCA9ICh7IHN0eWxlcyB9KSA9PiB7XG4gIHJldHVybiAvKiBAX19QVVJFX18gKi8ganN4KEVsZW1lbnRGcmFtZSwgeyBzdHlsZXMsIGVsZW1lbnRUeXBlOiBFbGVtZW50VHlwZUVudW0uQ0FSRF9OVU1CRVIgfSk7XG59O1xuXG5leHBvcnQgeyBDYXJkQ3ZjRWxlbWVudCwgQ2FyZEVsZW1lbnQsIENhcmRFeHBpcnlFbGVtZW50LCBDYXJkTnVtYmVyRWxlbWVudCwgRWxlbWVudHNGb3JtLCBGaWVsZE5hbWUsIFBheUluU3RhdGUsIHVzZU9wZW5QYXlFbGVtZW50cyB9OyJdLAogICJtYXBwaW5ncyI6ICJBQUFBLFNBQVMsaUJBQUFBLElBQWUsY0FBQUMsSUFBWSxZQUFBQyxJQUFVLGVBQUFDLElBQWEsYUFBQUMsSUFBVyxVQUFBQyxJQUFRLFdBQUFDLFVBQWU7QUFDN0YsU0FBUyxPQUFBQyxHQUFLLFlBQUFDLFVBQWdCO0FBQzlCLFNBQVMsS0FBS0MsU0FBVztBQUN6QixTQUFTLE1BQUFDLFVBQVU7QUFDbkIsU0FBUyxrQkFBQUMsVUFBc0I7QUFDL0IsT0FBT0MsUUFBUTtBQUVmLE1BQU1DLEtBQWtCYixHQUFjO0FBQUEsRUFDcEMsUUFBUTtBQUFBLEVBQ1IsWUFBWTtBQUFBLEVBQ1osVUFBVTtBQUFBLEVBQ1YscUJBQXFCO0FBQUEsRUFDckIsZ0JBQWdCLE1BQU07QUFBQSxFQUN0QjtBQUFBLEVBQ0EsU0FBUztBQUNYLENBQUMsR0FFS2MsS0FBcUIsTUFBTTtBQUMvQixRQUFNQyxJQUFVZCxHQUFXWSxFQUFlO0FBQzFDLE1BQUksQ0FBQ0U7QUFDSCxVQUFNLElBQUksTUFBTSxtRUFBbUU7QUFFckYsU0FBT0E7QUFDVCxHQUVNQyxLQUFLLDhCQUE4QkMsS0FBS1IsRUFBSSxPQUFPO0FBQUEsRUFDdkQsTUFBTUEsRUFBSSxPQUFPO0FBQUEsRUFDakIsS0FBS0EsRUFBSSxNQUFNQSxFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQzNCLEtBQUtBLEVBQUksT0FBTztBQUFBLEVBQ2hCLEtBQUtBLEVBQUksT0FBTztBQUNsQixDQUFDLEdBQUdTLEtBQUtULEVBQUksTUFBTVEsRUFBRSxHQUFHRSxLQUFLVixFQUFJLE9BQU87QUFBQSxFQUN0QyxNQUFNQSxFQUFJLE9BQU87QUFBQSxFQUNqQixTQUFTQSxFQUFJLE9BQU87QUFBQSxFQUNwQixNQUFNQSxFQUFJLE1BQU1BLEVBQUksT0FBTyxDQUFDO0FBQzlCLENBQUMsR0FBR1csS0FBS1gsRUFBSSxNQUFNVSxFQUFFLEdBQUdFLEtBQUs7QUFBQSxFQUMzQixtQkFBbUI7QUFDckIsR0FBR0MsS0FBSyxDQUFDLE1BQU07QUFDYixRQUFNLElBQUksRUFBRSxZQUFZLEVBQUUsS0FBSztBQUMvQixTQUFPRCxHQUFHLENBQUMsS0FBSztBQUNsQixHQUFHRSxLQUFLLENBQUMsTUFBTTtBQUNiLE1BQUk7QUFDRixXQUFPLE9BQU8sS0FBSyxNQUFNLENBQUMsS0FBSztBQUFBLEVBQ2pDLFFBQVE7QUFDTixXQUFPO0FBQUEsRUFDVDtBQUNGLEdBQUdDLEtBQUssQ0FBQyxNQUFNLEVBQUUsV0FBVyxJQUFJRixHQUFHLEVBQUUsQ0FBQyxFQUFFLEdBQUcsSUFBSTtBQUFBLEVBQzdDLEVBQUUsSUFBSSxDQUFDRyxNQUFNLEtBQUtILEdBQUdHLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxLQUFLO0FBQUEsQ0FDckMsQ0FBQyxJQUFJQyxLQUFLLENBQUMsTUFBTTtBQUFBLEVBQ2hCLEVBQUUsSUFBSSxDQUFDRCxNQUFNLEtBQUtBLEVBQUUsS0FBSyxLQUFLLEdBQUcsQ0FBQyxLQUFLQSxFQUFFLE9BQU8sRUFBRSxFQUFFLEtBQUs7QUFBQSxDQUMxRCxDQUFDLElBQUlFLEtBQUksQ0FBQyxNQUFNO0FBQ2YsTUFBSSxhQUFhO0FBQ2YsUUFBSUosR0FBRyxFQUFFLE9BQU8sR0FBRztBQUNqQixZQUFNLElBQUksS0FBSyxNQUFNLEVBQUUsT0FBTztBQUM5QixhQUFPTCxHQUFHLFVBQVUsQ0FBQyxFQUFFLFVBQVVNLEdBQUcsQ0FBQyxJQUFJSixHQUFHLFVBQVUsQ0FBQyxFQUFFLFVBQVVNLEdBQUcsQ0FBQyxLQUFLLFFBQVEsS0FBSztBQUFBLEVBQzdGLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRTtBQUFBLElBQ2Q7QUFDRSxhQUFPSixHQUFHLEVBQUUsT0FBTztBQUN2QixNQUFJLE9BQU8sS0FBSztBQUNkLFFBQUk7QUFDRixhQUFPLEtBQUssVUFBVSxDQUFDO0FBQUEsSUFDekIsU0FBUyxHQUFHO0FBQ1YsYUFBTyxJQUFJO0FBQUEsSUFDYjtBQUFBO0FBRUEsV0FBTyxJQUFJO0FBQ2YsR0FBR00sS0FBSyxDQUFDLEdBQUcsR0FBR0gsTUFBTSxJQUFJSSxNQUFNO0FBQzdCLE1BQUk7QUFDRixXQUFPLEVBQUUsR0FBR0EsQ0FBQztBQUFBLEVBQ2YsU0FBUyxHQUFHO0FBQ1YsSUFBQUosRUFBRSxrQ0FBa0MsQ0FBQyxNQUFNLENBQUM7QUFDNUM7QUFBQSxFQUNGO0FBQ0Y7QUFDQSxJQUFJSyxJQUFxQixrQkFBQyxPQUFPLEVBQUUsZUFBZSxpQkFBaUIsRUFBRSxxQkFBcUIsd0JBQXdCLEVBQUUsb0JBQW9CLHVCQUF1QixFQUFFLHdCQUF3QiwyQkFBMkIsRUFBRSx1QkFBdUIsMEJBQTBCLEVBQUUsYUFBYSxlQUFlLElBQUlBLEtBQUssQ0FBQyxDQUFDO0FBQ2hUckIsRUFBSSxXQUFXcUIsQ0FBQztBQUFHLE1BQU1DLElBQUl0QixFQUFJLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxHQUFHLEVBQUUsU0FBUyxrQkFBa0IsQ0FBQyxHQUFHLElBQUlBLEVBQUksT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLEdBQUd1QixJQUFJLENBQUMsTUFBTXZCLEVBQUksU0FBUyxFQUFFLFNBQVMsQ0FBQztBQUNqSyxJQUFJLElBQXFCLGtCQUFDLE9BQU8sRUFBRSxhQUFhLGFBQWEsRUFBRSxZQUFZLFlBQVksRUFBRSxRQUFRLFNBQVMsRUFBRSxXQUFXLFdBQVcsRUFBRSxPQUFPLFFBQVEsRUFBRSxRQUFRLFNBQVMsRUFBRSxVQUFVLFdBQVcsRUFBRSxVQUFVLFdBQVcsRUFBRSxRQUFRLFNBQVMsRUFBRSxpQkFBaUIsaUJBQWlCLElBQUksS0FBSyxDQUFDLENBQUM7QUFDdFIsTUFBTXdCLEtBQUt4QixFQUFJLFdBQVcsQ0FBQztBQUMzQixJQUFJeUIsS0FBc0Isa0JBQUMsT0FBTyxFQUFFLGNBQWMsY0FBYyxFQUFFLGNBQWMsY0FBYyxFQUFFLFdBQVcsV0FBVyxJQUFJQSxNQUFNLENBQUMsQ0FBQztBQUNsSSxNQUFNQyxLQUFLMUIsRUFBSSxXQUFXeUIsRUFBRSxHQUFHRSxLQUFLM0IsRUFBSSxNQUFNLENBQUN3QixJQUFJRSxFQUFFLENBQUM7QUFDdEQsSUFBSUUsS0FBc0Isa0JBQUMsT0FBTyxFQUFFLE9BQU8sUUFBUSxFQUFFLGNBQWMsZUFBZSxFQUFFLGNBQWMsZUFBZSxFQUFFLFdBQVcsWUFBWSxJQUFJQSxNQUFNLENBQUMsQ0FBQztBQUN0SixNQUFNQyxLQUFLN0IsRUFBSSxXQUFXNEIsRUFBRSxHQUFHRSxLQUFLOUIsRUFBSSxPQUFPO0FBQUEsRUFDN0MsVUFBVUEsRUFBSSxPQUFPO0FBQUEsRUFDckIsZ0JBQWdCdUIsRUFBRXZCLEVBQUksT0FBTyxDQUFDO0FBQUEsRUFDOUIsVUFBVXVCLEVBQUV2QixFQUFJLE9BQU9BLEVBQUksT0FBTyxHQUFHQSxFQUFJLElBQUksQ0FBQyxDQUFDO0FBQ2pELENBQUMsR0FBRytCLEtBQUsvQixFQUFJLE9BQU87QUFBQSxFQUNsQixJQUFJQSxFQUFJLE9BQU87QUFDakIsQ0FBQztBQUNEQSxFQUFJLE9BQU87QUFBQSxFQUNULFlBQVk7QUFBQSxFQUNaLFFBQVE7QUFBQSxFQUNSLEtBQUs7QUFDUCxDQUFDO0FBQ0RBLEVBQUksT0FBTztBQUFBLEVBQ1QsaUJBQWlCO0FBQUEsRUFDakIsT0FBTztBQUFBLEVBQ1AsWUFBWTtBQUFBLEVBQ1osVUFBVTtBQUFBLEVBQ1YsWUFBWTtBQUFBLEVBQ1osUUFBUTtBQUFBLEVBQ1IsU0FBUztBQUFBLEVBQ1QsZUFBZTtBQUFBLEVBQ2YsWUFBWTtBQUFBLEVBQ1osVUFBVTtBQUNaLENBQUM7QUFDRCxNQUFNZ0MsSUFBSWhDLEVBQUksS0FBSztBQUFBO0FBQUEsRUFFakI7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBO0FBQUEsRUFFQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0YsQ0FBQyxHQUFHaUMsS0FBS0QsRUFBRSxRQUFRLENBQUMsb0JBQW9CLGtCQUFrQixDQUFDLEdBQUdFLEtBQUtsQyxFQUFJLE9BQU8sRUFBRSxNQUFNaUMsR0FBRyxDQUFDLEdBQUdFLEtBQUtILEVBQUUsUUFBUSxDQUFDLFFBQVEsU0FBUyxRQUFRLENBQUMsR0FBR0ksS0FBS3BDLEVBQUksT0FBTztBQUFBLEVBQ3hKLE1BQU1tQztBQUFBLEVBQ04sYUFBYVQ7QUFBQSxFQUNiLFFBQVExQixFQUFJLE1BQU1BLEVBQUksT0FBTyxDQUFDLEVBQUUsU0FBUztBQUMzQyxDQUFDLEdBQUdxQyxLQUFLTCxFQUFFLFFBQVEsQ0FBQyxjQUFjLGtCQUFrQixnQkFBZ0IsQ0FBQyxHQUFHTSxLQUFLdEMsRUFBSSxPQUFPO0FBQUEsRUFDdEYsTUFBTXFDO0FBQUEsRUFDTixTQUFTZjtBQUFBLEVBQ1QsU0FBU3RCLEVBQUksT0FBT0EsRUFBSSxPQUFPLEdBQUdBLEVBQUksT0FBTyxDQUFDLEVBQUUsU0FBUztBQUMzRCxDQUFDLEdBQUd1QyxLQUFLUCxFQUFFLFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHUSxLQUFLeEMsRUFBSSxPQUFPO0FBQUEsRUFDeEQsTUFBTXVDO0FBQUEsRUFDTixhQUFhWjtBQUFBLEVBQ2IsUUFBUTNCLEVBQUksTUFBTUEsRUFBSSxPQUFPLENBQUM7QUFDaEMsQ0FBQyxHQUFHeUMsS0FBS3pDLEVBQUksT0FBTztBQUFBLEVBQ2xCLE1BQU1BLEVBQUksUUFBUWdDLEVBQUUsS0FBSyxNQUFNO0FBQUEsRUFDL0IsUUFBUVY7QUFDVixDQUFDLEdBQUdvQixLQUFLMUMsRUFBSSxPQUFPO0FBQUEsRUFDbEIsTUFBTUEsRUFBSSxRQUFRZ0MsRUFBRSxLQUFLLE1BQU07QUFBQSxFQUMvQixXQUFXVjtBQUFBLEVBQ1gsa0JBQWtCdEIsRUFBSSxPQUFPO0FBQUEsRUFDN0IsVUFBVTtBQUFBLEVBQ1Ysd0JBQXdCQSxFQUFJLE1BQU04QixFQUFFO0FBQ3RDLENBQUMsR0FBR2EsS0FBSzNDLEVBQUksT0FBTztBQUFBLEVBQ2xCLE1BQU1BLEVBQUksUUFBUWdDLEVBQUUsS0FBSyxvQkFBb0I7QUFBQSxFQUM3QyxvQkFBb0JoQyxFQUFJLE9BQU9BLEVBQUksT0FBTyxHQUFHQSxFQUFJLElBQUksQ0FBQztBQUFBLEVBQ3RELHFCQUFxQkEsRUFBSSxJQUFJLEVBQUUsU0FBUztBQUFBLEVBQ3hDLGlCQUFpQkEsRUFBSSxTQUFTQSxFQUFJLE9BQU9BLEVBQUksT0FBTyxHQUFHQSxFQUFJLElBQUksQ0FBQyxDQUFDO0FBQ25FLENBQUMsR0FBRzRDLEtBQUs1QyxFQUFJLE9BQU87QUFBQSxFQUNsQixNQUFNQSxFQUFJLFFBQVFnQyxFQUFFLEtBQUssNEJBQTRCO0FBQUEsRUFDckQsaUJBQWlCaEMsRUFBSSxPQUFPO0FBQzlCLENBQUMsR0FBRzZDLEtBQUs3QyxFQUFJLE9BQU87QUFBQSxFQUNsQixXQUFXc0I7QUFBQSxFQUNYLFVBQVVBO0FBQUEsRUFDVixPQUFPQTtBQUFBLEVBQ1AsU0FBU0E7QUFBQSxFQUNULFNBQVNBO0FBQUEsRUFDVCxlQUFlO0FBQ2pCLENBQUMsR0FBR3dCLEtBQUs5QyxFQUFJLE9BQU87QUFBQSxFQUNsQixXQUFXO0FBQUEsRUFDWCxVQUFVO0FBQUEsRUFDVixPQUFPc0I7QUFBQSxFQUNQLFNBQVNBO0FBQUEsRUFDVCxTQUFTQTtBQUFBLEVBQ1QsZUFBZTtBQUFBLEVBQ2YsU0FBUztBQUFBLEVBQ1QsTUFBTTtBQUFBLEVBQ04sT0FBTztBQUNULENBQUMsR0FBR3lCLEtBQUtmLEVBQUUsUUFBUSxDQUFDLFlBQVksWUFBWSxvQkFBb0IsQ0FBQyxHQUFHZ0IsS0FBS2hELEVBQUksT0FBTztBQUFBLEVBQ2xGLE1BQU0rQztBQUFBLEVBQ04sV0FBV3pCO0FBQUEsRUFDWCx1QkFBdUJRO0FBQUEsRUFDdkIscUJBQXFCOUIsRUFBSSxJQUFJLEVBQUUsU0FBUztBQUFBLEVBQ3hDLHNCQUFzQkEsRUFBSSxRQUFRLEVBQUUsU0FBUztBQUFBLEVBQzdDLGdCQUFnQjtBQUNsQixDQUFDLEVBQUUsT0FBTzZDLEdBQUcsS0FBSyxHQUFHSSxLQUFLakQsRUFBSSxPQUFPO0FBQUEsRUFDbkMsTUFBTUEsRUFBSSxRQUFRZ0MsRUFBRSxLQUFLLGdCQUFnQjtBQUFBLEVBQ3pDLG9CQUFvQmhDLEVBQUksUUFBUTtBQUNsQyxDQUFDLEdBQUdrRCxLQUFLbEQsRUFBSSxPQUFPO0FBQUEsRUFDbEIsTUFBTUEsRUFBSSxRQUFRZ0MsRUFBRSxLQUFLLGdCQUFnQjtBQUFBLEVBQ3pDLGFBQWFoQyxFQUFJLE1BQU1BLEVBQUksT0FBTyxDQUFDO0FBQUEsRUFDbkMsaUJBQWlCQSxFQUFJLE1BQU1BLEVBQUksT0FBTyxDQUFDO0FBQUEsRUFDdkMsWUFBWUEsRUFBSSxPQUFPO0FBQ3pCLENBQUMsR0FBR21ELEtBQUtuRCxFQUFJLG1CQUFtQixRQUFRO0FBQUEsRUFDdENrQztBQUFBLEVBQ0FFO0FBQUEsRUFDQUU7QUFBQSxFQUNBRTtBQUFBLEVBQ0FDO0FBQUEsRUFDQUM7QUFBQSxFQUNBTTtBQUFBLEVBQ0FDO0FBQUEsRUFDQUM7QUFBQSxFQUNBUDtBQUFBLEVBQ0FDO0FBQ0YsQ0FBQyxHQUFHUSxLQUFLcEQsRUFBSSxPQUFPO0FBQUEsRUFDbEIsU0FBU21EO0FBQUEsRUFDVCxPQUFPN0I7QUFBQSxFQUNQLFFBQVFBO0FBQUEsRUFDUixXQUFXQTtBQUNiLENBQUM7QUFDRHRCLEVBQUksT0FBTztBQUFBLEVBQ1QsWUFBWUEsRUFBSSxPQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJdkIsVUFBVXNCO0FBQ1osQ0FBQztBQUNEdEIsRUFBSSxLQUFLLENBQUMsYUFBYSxZQUFZLENBQUM7QUFDcENBLEVBQUksT0FBTztBQUFBLEVBQ1QsY0FBY0EsRUFBSSxPQUFPO0FBQUEsRUFDekIsZ0JBQWdCQSxFQUFJLE9BQU8sRUFBRSxTQUFTO0FBQ3hDLENBQUM7QUFDREEsRUFBSSxPQUFPO0FBQUEsRUFDVCxjQUFjQSxFQUFJLE9BQU87QUFBQSxFQUN6QixtQkFBbUJ1QixFQUFFdkIsRUFBSSxPQUFPLENBQUM7QUFBQSxFQUNqQyxhQUFhdUIsRUFBRXZCLEVBQUksT0FBTyxDQUFDO0FBQUEsRUFDM0IscUJBQXFCdUIsRUFBRXZCLEVBQUksT0FBTyxDQUFDO0FBQUEsRUFDbkMsNkJBQTZCdUIsRUFBRXZCLEVBQUksT0FBT0EsRUFBSSxPQUFPLEdBQUdBLEVBQUksSUFBSSxDQUFDLENBQUM7QUFDcEUsQ0FBQztBQUNELE1BQU1xRCxLQUFLckQsRUFBSSxPQUFPO0FBQUEsRUFDcEIsY0FBY0EsRUFBSSxNQUFNQSxFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQ3BDLGtCQUFrQkEsRUFBSSxNQUFNQSxFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQ3hDLGFBQWFBLEVBQUksT0FBTztBQUMxQixDQUFDLEdBQUdzRCxLQUFLdEQsRUFBSSxPQUFPO0FBQUEsRUFDbEIsYUFBYUEsRUFBSSxPQUFPO0FBQUEsRUFDeEIsUUFBUUEsRUFBSSxNQUFNQSxFQUFJLE9BQU8sQ0FBQztBQUNoQyxDQUFDO0FBQ0RBLEVBQUksT0FBTztBQUFBLEVBQ1QsWUFBWUEsRUFBSSxPQUFPO0FBQ3pCLENBQUM7QUFDRCxNQUFNdUQsS0FBS3ZELEVBQUksT0FBTztBQUFBLEVBQ3BCLFNBQVNBLEVBQUksUUFBUSxFQUFFO0FBQUEsRUFDdkIsWUFBWUEsRUFBSSxRQUFRLGtCQUFrQjtBQUFBLEVBQzFDLFFBQVFBLEVBQUksTUFBTXNELEVBQUU7QUFDdEIsQ0FBQyxHQUFHRSxLQUFLeEQsRUFBSSxtQkFBbUIsV0FBVztBQUFBLEVBQ3pDQSxFQUFJLE9BQU8sRUFBRSxTQUFTQSxFQUFJLFFBQVEsRUFBRSxFQUFFLENBQUM7QUFBQSxFQUN2Q3VEO0FBQ0YsQ0FBQztBQUNEdkQsRUFBSSxPQUFPO0FBQUEsRUFDVCxZQUFZQSxFQUFJLE9BQU87QUFBQSxFQUN2Qix5QkFBeUI4QjtBQUFBLEVBQ3pCLHFCQUFxQmU7QUFBQSxFQUNyQiwyQkFBMkI3QyxFQUFJLFFBQVEsRUFBRSxTQUFTO0FBQUEsRUFDbEQsbUJBQW1CdUIsRUFBRXZCLEVBQUksT0FBTyxDQUFDO0FBQUEsRUFDakMsZ0JBQWdCQSxFQUFJLE9BQU9BLEVBQUksT0FBTyxHQUFHQSxFQUFJLElBQUksQ0FBQztBQUNwRCxDQUFDO0FBQ0RBLEVBQUksT0FBTztBQUFBLEVBQ1QsWUFBWUEsRUFBSSxPQUFPO0FBQUEsRUFDdkIseUJBQXlCOEI7QUFBQSxFQUN6QixxQkFBcUJlO0FBQUEsRUFDckIsZ0JBQWdCN0MsRUFBSSxPQUFPQSxFQUFJLE9BQU8sR0FBR0EsRUFBSSxJQUFJLENBQUMsRUFBRSxTQUFTO0FBQy9ELENBQUM7QUFDRCxJQUFJeUQsSUFBcUIsa0JBQUMsT0FBTyxFQUFFLFVBQVUsV0FBVyxFQUFFLFVBQVUsV0FBVyxFQUFFLFlBQVksYUFBYSxJQUFJQSxLQUFLLENBQUMsQ0FBQztBQUNySCxNQUFNQyxLQUFLMUQsRUFBSSxPQUFPO0FBQUEsRUFDcEIsUUFBUUEsRUFBSSxLQUFLO0FBQUEsSUFDZjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUE7QUFBQSxFQUVGLENBQUM7QUFBQSxFQUNELE1BQU1BLEVBQUksT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTO0FBQ3pDLENBQUM7QUFDREEsRUFBSSxPQUFPO0FBQUEsRUFDVCxNQUFNQSxFQUFJLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUztBQUN6QyxDQUFDO0FBQ0QsTUFBTTJELEtBQUszRCxFQUFJLE9BQU87QUFBQSxFQUNwQixNQUFNQSxFQUFJLE9BQU87QUFBQSxFQUNqQixjQUFjQSxFQUFJLE9BQU87QUFBQSxFQUN6QixtQkFBbUJBLEVBQUksT0FBTztBQUFBLEVBQzlCLFlBQVlBLEVBQUksT0FBTztBQUFBLEVBQ3ZCLGFBQWFBLEVBQUksT0FBTyxFQUFFLFNBQVM7QUFDckMsQ0FBQyxHQUFHNEQsS0FBSzVELEVBQUksT0FBTztBQUFBLEVBQ2xCLE1BQU1BLEVBQUksT0FBTztBQUFBLEVBQ2pCLGNBQWN1QixFQUFFdkIsRUFBSSxPQUFPLENBQUM7QUFBQSxFQUM1QixtQkFBbUJ1QixFQUFFdkIsRUFBSSxPQUFPLENBQUM7QUFBQSxFQUNqQyxZQUFZdUIsRUFBRXZCLEVBQUksT0FBTyxDQUFDO0FBQUEsRUFDMUIsYUFBYXVCLEVBQUV2QixFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQzNCLGlCQUFpQnVCLEVBQUV2QixFQUFJLE9BQU9BLEVBQUksT0FBTyxHQUFHQSxFQUFJLElBQUksQ0FBQyxDQUFDO0FBQ3hELENBQUMsR0FBRzZELEtBQUs3RCxFQUFJLG1CQUFtQixXQUFXO0FBQUEsRUFDekNBLEVBQUksT0FBTyxFQUFFLFNBQVNBLEVBQUksUUFBUSxFQUFFLEdBQUcsTUFBTUEsRUFBSSxPQUFPLEVBQUUsQ0FBQztBQUFBLEVBQzNEQSxFQUFJLE9BQU8sRUFBRSxTQUFTQSxFQUFJLFFBQVEsRUFBRSxFQUFFLENBQUM7QUFDekMsQ0FBQyxHQUFHOEQsS0FBSzlELEVBQUksT0FBTztBQUFBLEVBQ2xCLGlCQUFpQkEsRUFBSSxNQUFNK0IsRUFBRTtBQUFBLEVBQzdCLDRCQUE0QlIsRUFBRThCLEVBQUU7QUFBQSxFQUNoQyx1QkFBdUI5QixFQUFFdkIsRUFBSSxNQUFNNEQsRUFBRSxDQUFDO0FBQ3hDLENBQUMsR0FBR0csS0FBSyxDQUFDLE1BQU07QUFDZCxRQUFNLElBQUksQ0FBQztBQUNYLFNBQU8sT0FBTyxRQUFRLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQy9DLEdBQUdJLENBQUMsTUFBTTtBQUMzQyxRQUFJO0FBQ0YsWUFBTSxJQUFJSSxHQUFHLE1BQU1SLENBQUM7QUFDcEIsWUFBTSxRQUFRSSxDQUFDLElBQUksRUFBRSxDQUFDLElBQUlBLElBQUksTUFBTSxRQUFRQSxFQUFFLE9BQU8sTUFBTSxFQUFFLENBQUMsSUFBSUEsRUFBRTtBQUFBLElBQ3RFLFFBQVE7QUFDTjtBQUFBLElBQ0Y7QUFBQSxFQUNGLENBQUMsR0FBRztBQUNOLEdBQUc0QyxLQUFLaEUsRUFBSSxPQUFPO0FBQUEsRUFDakIsV0FBV0EsRUFBSSxPQUFPO0FBQUEsRUFDdEIsZUFBZUEsRUFBSSxPQUFPO0FBQUEsRUFDMUIsY0FBY0EsRUFBSSxPQUFPO0FBQzNCLENBQUMsR0FBR2lFLEtBQUtqRSxFQUFJLE9BQU87QUFBQSxFQUNsQixNQUFNQSxFQUFJLE9BQU87QUFBQSxFQUNqQixlQUFlQSxFQUFJLE9BQU87QUFBQSxFQUMxQixXQUFXQSxFQUFJLE9BQU87QUFDeEIsQ0FBQyxHQUFHa0UsS0FBSztBQUFBLEVBQ1AsS0FBSztBQUFBLEVBQ0wsS0FBSztBQUNQLEdBQUdDLEtBQUssT0FBTyxNQUFNO0FBQ25CLFdBQVNuRCxJQUFJLEdBQUdBLElBQUksSUFBSUE7QUFDdEIsSUFBQW9ELEdBQUcsS0FBSyxNQUFNQyxHQUFHLEdBQUc7QUFDdEIsTUFBSSxDQUFDRCxHQUFHO0FBQ04sVUFBTSxRQUFRLElBQUksc0JBQXNCLEdBQUcsSUFBSSxNQUFNLHNCQUFzQjtBQUM3RSxTQUFPLElBQUksT0FBTyxDQUFDO0FBQ3JCLEdBQUdFLEtBQUssT0FBTyxHQUFHLE1BQU07QUFDdEIsUUFBTXRELElBQUksTUFBTW1ELEdBQUcsQ0FBQztBQUNwQixTQUFPO0FBQUEsSUFDTCxVQUFVbkQsRUFBRSxTQUFTLENBQUM7QUFBQSxJQUN0QixRQUFRQTtBQUFBLEVBQ1Y7QUFDRixHQUFHdUQsS0FBSyxPQUFPLEdBQUcsR0FBR3ZELEdBQUdJLEdBQUcsTUFBTTtBQUMvQixRQUFNLElBQUksTUFBTStDLEdBQUcsQ0FBQyxHQUFHLElBQUlELEdBQUdsRCxFQUFFLFlBQVksRUFBRSxLQUFLLENBQUM7QUFDcEQsU0FBTyxFQUFFLGVBQWU7QUFBQTtBQUFBLElBRXRCLFNBQVM7QUFBQSxJQUNULFVBQVU7QUFBQSxJQUNWLE9BQU87QUFBQSxNQUNMLE9BQU87QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFNBQVNJO0FBQUEsSUFDWDtBQUFBO0FBQUEsSUFFQSxrQkFBa0I7QUFBQSxJQUNsQixtQkFBbUI7QUFBQSxJQUNuQixnQkFBZ0IsQ0FBQztBQUFBLEVBQ25CLENBQUM7QUFDSCxHQUFHaUQsS0FBSyxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUMsTUFBTTtBQUNoQyxhQUFXLEdBQUcsQ0FBQztBQUNqQixDQUFDLEdBQUdELEtBQUssTUFBTSxZQUFZLFFBQVFJLEtBQUssT0FBTyxNQUFNLElBQUksUUFBUSxDQUFDLEdBQUd4RCxNQUFNO0FBQ3pFLE1BQUk7QUFDRixNQUFFLEdBQUcsaUJBQWlCLE9BQU9JLE1BQU07QUFDakMsY0FBUSxJQUFJLHdCQUF3QkEsQ0FBQyxHQUFHLEVBQUVBLENBQUM7QUFBQSxJQUM3QyxDQUFDLEdBQUcsRUFBRSxHQUFHLFNBQVMsT0FBT0EsTUFBTTtBQUM3QixjQUFRLElBQUksZ0JBQWdCQSxDQUFDO0FBQUEsSUFDL0IsQ0FBQyxHQUFHLEVBQUUsR0FBRyxVQUFVLE1BQU07QUFDdkIsTUFBQUosRUFBRSxJQUFJLE1BQU0scURBQXFELENBQUM7QUFBQSxJQUNwRSxDQUFDO0FBQUEsRUFDSCxTQUFTSSxHQUFHO0FBQ1YsSUFBQUosRUFBRUksQ0FBQztBQUFBLEVBQ0w7QUFDRixDQUFDLEdBQUdxRCxLQUFLLE9BQU8sR0FBRyxNQUFNO0FBQ3ZCLE1BQUksQ0FBQyxFQUFFLGFBQWEsQ0FBQyxFQUFFO0FBQ3JCLFVBQU0sSUFBSSxNQUFNLHdDQUF3QyxLQUFLLFVBQVUsQ0FBQyxDQUFDLEVBQUU7QUFDN0UsUUFBTSxJQUFJLE9BQU8sTUFBTU4sR0FBRyxFQUFFLFNBQVMsR0FBRyxpQkFBaUIsRUFBRSxlQUFlO0FBQUEsSUFDeEUsZ0JBQWdCLEVBQUUsY0FBYztBQUFBLEVBQ2xDLENBQUM7QUFDRCxNQUFJLEVBQUU7QUFDSixVQUFNLEVBQUUsU0FBUyxNQUFNLEdBQUcsSUFBSSxNQUFNLG1CQUFtQixFQUFFLE1BQU0sV0FBVyxTQUFTLEVBQUU7QUFDdkYsU0FBTyxFQUFFLFNBQVMsU0FBUyxHQUFHO0FBQ2hDLEdBQUdPLEtBQUssT0FBTyxNQUFNO0FBQ25CLE1BQUlDLEdBQUdDLEdBQUdDLEdBQUdDO0FBQ2IsUUFBTTlELElBQUksT0FBTyxNQUFNbUQsR0FBRyxFQUFFLFNBQVMsR0FBRyxpQkFBaUIsRUFBRSxlQUFlO0FBQUEsSUFDeEUsZ0JBQWdCLEVBQUU7QUFBQSxFQUNwQixDQUFDLEdBQUcvQyxLQUFLdUQsSUFBSTNELEVBQUUsZ0JBQWdCLE9BQU8sU0FBUzJELEVBQUU7QUFDakQsTUFBSXZELE1BQU07QUFDUixZQUFRLElBQUksd0JBQXdCLEVBQUUsWUFBWSxHQUFHLFFBQVEsSUFBSSwrQkFBK0JKLEVBQUUsV0FBVztBQUFBLE1BQzFHLE9BQU1JLE1BQU0sYUFBYSxJQUFJLE1BQU0scURBQXFELElBQUksSUFBSTtBQUFBLElBQ25HLEtBQUt3RCxJQUFJNUQsRUFBRSxVQUFVLE9BQU8sU0FBUzRELEVBQUUsY0FBY0UsS0FBS0QsSUFBSTdELEVBQUUsZ0JBQWdCLE9BQU8sU0FBUzZELEVBQUUscUJBQXFCLE9BQU8sU0FBU0MsRUFBRSxZQUFZLG1EQUFtRDtBQUFBLEVBQzFNO0FBQ0YsR0FBR0MsS0FBSyxDQUFDLE1BQU0sS0FBSyxVQUFVLENBQUMsR0FBR0MsS0FBSSxDQUFDLEdBQUcsTUFBTSxNQUFNLEtBQUssRUFBRSxpQkFBaUIsYUFBYSxLQUFLLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQ0wsR0FBR0MsTUFBTTtBQUNuSCxRQUFNQyxJQUFJRCxFQUFFLGFBQWEsV0FBVztBQUNwQyxTQUFPQyxJQUFJLEVBQUUsR0FBR0YsR0FBRyxDQUFDRSxDQUFDLEdBQUdELEVBQUUsTUFBTSxJQUFJRDtBQUN0QyxHQUFHLENBQUMsQ0FBQyxHQUFHTSxLQUFLLENBQUMsTUFBTTtBQUNsQixNQUFJO0FBQ0YsV0FBTzdCLEdBQUcsTUFBTSxDQUFDO0FBQUEsRUFDbkIsU0FBUyxHQUFHO0FBQ1YsVUFBTSxRQUFRLE1BQU0sZ0NBQWdDLEdBQUcsQ0FBQyxHQUFHO0FBQUEsRUFDN0Q7QUFDRixHQUFHOEIsS0FBSyxPQUFPLE1BQU07QUFDbkIsTUFBSSxPQUFPLEtBQUssWUFBWSxDQUFDLEVBQUcsUUFBTztBQUN2QyxNQUFJO0FBQ0YsVUFBTSxJQUFJLEVBQUUsTUFBTSxPQUFPLEdBQUdsRSxJQUFJLE1BQU0sRUFBRSxLQUFLLENBQUM7QUFDOUMsUUFBSUEsTUFBTTtBQUNSLFlBQU0sSUFBSSxNQUFNLG1DQUFtQyxLQUFLLFVBQVVBLENBQUMsQ0FBQyxFQUFFO0FBQ3hFLFdBQU87QUFBQSxFQUNULFNBQVMsR0FBRztBQUNWLFdBQU8sUUFBUSxNQUFNLGlDQUFpQyxDQUFDLEdBQUc7QUFBQSxFQUM1RDtBQUNGLEdBQUdtRSxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU1uRixFQUFJLFNBQVMsRUFBRSxTQUFTLENBQUM7QUFDaEVBLEVBQUksT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEdBQUcsRUFBRSxTQUFTLGtCQUFrQixDQUFDO0FBQ3pELE1BQU1vRixLQUFLcEYsRUFBSSxPQUFPO0FBQUEsRUFDcEIsbUJBQW1CQSxFQUFJLFFBQVEsT0FBTztBQUFBLEVBQ3RDLFNBQVNBLEVBQUksT0FBTztBQUFBLEVBQ3BCLFNBQVNBLEVBQUksT0FBT0EsRUFBSSxPQUFPLEdBQUdBLEVBQUksT0FBTyxDQUFDLEVBQUUsU0FBUztBQUMzRCxDQUFDO0FBQ0RBLEVBQUksS0FBSyxDQUFDLE9BQU8sS0FBSyxDQUFDO0FBQ3ZCLE1BQU1xRixLQUFLckYsRUFBSSxPQUFPO0FBQUEsRUFDcEIsTUFBTUEsRUFBSSxPQUFPO0FBQUEsRUFDakIsaUJBQWlCLEVBQUVBLEVBQUksT0FBTyxDQUFDO0FBQUEsRUFDL0IsYUFBYSxFQUFFQSxFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQzNCLFVBQVUsRUFBRUEsRUFBSSxPQUFPLENBQUM7QUFBQSxFQUN4QixVQUFVQSxFQUFJLE9BQU87QUFBQSxFQUNyQixvQkFBb0IsRUFBRUEsRUFBSSxPQUFPLENBQUM7QUFDcEMsQ0FBQyxHQUFHc0YsS0FBS3RGLEVBQUksT0FBTztBQUFBLEVBQ2xCLHNCQUFzQkEsRUFBSSxPQUFPLEVBQUUsSUFBSTtBQUFBLEVBQ3ZDLG1CQUFtQkEsRUFBSSxPQUFPLEVBQUUsSUFBSTtBQUFBLEVBQ3BDLFVBQVVBLEVBQUksT0FBTztBQUFBLEVBQ3JCLGFBQWEsRUFBRUEsRUFBSSxPQUFPLENBQUM7QUFBQSxFQUMzQixVQUFVQSxFQUFJLE9BQU87QUFBQSxFQUNyQixrQkFBa0IsRUFBRUEsRUFBSSxPQUFPLENBQUM7QUFBQSxFQUNoQyx3QkFBd0IsRUFBRUEsRUFBSSxPQUFPLEVBQUUsSUFBSSxDQUFDO0FBQUEsRUFDNUMsVUFBVUEsRUFBSSxPQUFPLEVBQUUsSUFBSTtBQUM3QixDQUFDLEdBQUd1RixLQUFLdkYsRUFBSSxPQUFPQSxFQUFJLE9BQU8sR0FBR0EsRUFBSSxJQUFJLENBQUMsR0FBR3dGLEtBQUt4RixFQUFJLE9BQU87QUFBQSxFQUM1RCxNQUFNQSxFQUFJLE9BQU87QUFBQSxFQUNqQixVQUFVLEVBQUV1RixFQUFFO0FBQ2hCLENBQUMsR0FBR0UsS0FBS3pGLEVBQUksT0FBTztBQUFBLEVBQ2xCLFVBQVVBLEVBQUksT0FBTztBQUFBLEVBQ3JCLGdCQUFnQixFQUFFQSxFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQzlCLFVBQVUsRUFBRUEsRUFBSSxPQUFPQSxFQUFJLE9BQU8sR0FBR0EsRUFBSSxJQUFJLENBQUMsQ0FBQztBQUNqRCxDQUFDLEdBQUcwRixLQUFLMUYsRUFBSSxPQUFPO0FBQUEsRUFDbEIsVUFBVUEsRUFBSSxPQUFPO0FBQ3ZCLENBQUMsR0FBRzJGLEtBQUszRixFQUFJLE9BQU87QUFBQSxFQUNsQixJQUFJLEVBQUVBLEVBQUksT0FBTyxDQUFDO0FBQUEsRUFDbEIsa0JBQWtCLEVBQUVBLEVBQUksT0FBTyxDQUFDO0FBQUEsRUFDaEMsd0JBQXdCLEVBQUVBLEVBQUksT0FBTyxFQUFFLElBQUksQ0FBQztBQUFBLEVBQzVDLG9CQUFvQkEsRUFBSSxNQUFNMEYsRUFBRTtBQUFBLEVBQ2hDLGFBQWEsRUFBRTFGLEVBQUksT0FBTyxDQUFDO0FBQUEsRUFDM0IsV0FBVyxFQUFFQSxFQUFJLE9BQU8sQ0FBQztBQUMzQixDQUFDLEdBQUc0RixLQUFLNUYsRUFBSSxPQUFPO0FBQUEsRUFDbEIsYUFBYUEsRUFBSSxPQUFPO0FBQzFCLENBQUMsR0FBRzZGLEtBQUs3RixFQUFJLE9BQU87QUFBQSxFQUNsQixhQUFhQSxFQUFJLE9BQU87QUFBQSxFQUN4QiwwQ0FBMENBLEVBQUksT0FBTztBQUFBLEVBQ3JELFVBQVVBLEVBQUksT0FBTztBQUFBLEVBQ3JCLHVCQUF1QkEsRUFBSSxNQUFNNEYsRUFBRTtBQUFBLEVBQ25DLHNCQUFzQjVGLEVBQUksT0FBTztBQUNuQyxDQUFDLEdBQUc4RixLQUFLOUYsRUFBSSxPQUFPO0FBQUEsRUFDbEIsUUFBUXFGO0FBQ1YsQ0FBQyxHQUFHVSxLQUFLL0YsRUFBSSxPQUFPO0FBQUEsRUFDbEIsVUFBVUEsRUFBSSxPQUFPO0FBQUEsRUFDckIsV0FBV0EsRUFBSSxNQUFNOEYsRUFBRTtBQUFBLEVBQ3ZCLG9CQUFvQixFQUFFOUYsRUFBSSxPQUFPLENBQUM7QUFBQSxFQUNsQyxPQUFPQSxFQUFJLE1BQU02RixFQUFFO0FBQUEsRUFDbkIsdUJBQXVCN0YsRUFBSSxPQUFPO0FBQUEsRUFDbEMsaUJBQWlCQSxFQUFJLE9BQU87QUFBQSxFQUM1QixtQkFBbUJBLEVBQUksT0FBTztBQUFBLEVBQzlCLDZCQUE2QkEsRUFBSSxNQUFNNEYsRUFBRTtBQUMzQyxDQUFDLEdBQUdJLEtBQUtoRyxFQUFJLE9BQU87QUFBQSxFQUNsQixTQUFTQSxFQUFJLE1BQU0yRixFQUFFO0FBQUEsRUFDckIsVUFBVTNGLEVBQUksTUFBTStGLEVBQUU7QUFDeEIsQ0FBQyxHQUFHRSxLQUFLakcsRUFBSSxPQUFPO0FBQUEsRUFDbEIsU0FBU2dHO0FBQUEsRUFDVCxvQkFBb0IsRUFBRUEsRUFBRTtBQUFBLEVBQ3hCLFNBQVNoRyxFQUFJLE1BQU1xRixFQUFFO0FBQ3ZCLENBQUMsR0FBR2EsS0FBS2xHLEVBQUksT0FBTztBQUFBLEVBQ2xCLFFBQVFBLEVBQUksUUFBUSxNQUFNO0FBQUEsRUFDMUIsUUFBUSxFQUFFQSxFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQ3RCLE9BQU9BLEVBQUksT0FBTztBQUFBLEVBQ2xCLE9BQU8sRUFBRUEsRUFBSSxPQUFPLENBQUM7QUFBQSxFQUNyQixZQUFZQSxFQUFJLE1BQU1zRixFQUFFO0FBQUEsRUFDeEIsc0JBQXNCdEYsRUFBSSxPQUFPLEVBQUUsSUFBSTtBQUFBLEVBQ3ZDLG1CQUFtQkEsRUFBSSxPQUFPLEVBQUUsSUFBSTtBQUFBLEVBQ3BDLE9BQU93RjtBQUFBLEVBQ1AsY0FBYyxFQUFFUyxFQUFFO0FBQUE7QUFBQSxFQUVsQixtQkFBbUJqRyxFQUFJLE1BQU15RixFQUFFO0FBQ2pDLENBQUMsR0FBR1UsS0FBS25HLEVBQUksbUJBQW1CLFFBQVE7QUFBQSxFQUN0Q0EsRUFBSSxPQUFPO0FBQUEsSUFDVCxNQUFNQSxFQUFJLFFBQVEsT0FBTztBQUFBLElBQ3pCLFVBQVVBLEVBQUksU0FBU0EsRUFBSSxVQUFVLENBQUM7QUFBQSxFQUN4QyxDQUFDLEVBQUUsT0FBT2tHLEdBQUcsS0FBSztBQUFBLEVBQ2xCbEcsRUFBSSxPQUFPO0FBQUEsSUFDVCxNQUFNQSxFQUFJLEtBQUssQ0FBQyxXQUFXLGNBQWMsQ0FBQztBQUFBLElBQzFDLFVBQVVBLEVBQUksT0FBTztBQUFBLEVBQ3ZCLENBQUMsRUFBRSxPQUFPa0csR0FBRyxLQUFLO0FBQ3BCLENBQUMsR0FBR0UsS0FBS3BHLEVBQUksT0FBTztBQUFBLEVBQ2xCLFFBQVFBLEVBQUksUUFBUSxVQUFVO0FBQ2hDLENBQUMsR0FBR3FHLEtBQUtyRyxFQUFJLE9BQU87QUFBQSxFQUNsQixRQUFRQSxFQUFJLFFBQVEsU0FBUztBQUMvQixDQUFDO0FBQ0RBLEVBQUksTUFBTSxDQUFDbUcsSUFBSUMsSUFBSUMsRUFBRSxDQUFDO0FBQ3RCckcsRUFBSSxPQUFPO0FBQUEsRUFDVCxNQUFNQSxFQUFJLE9BQU87QUFBQSxFQUNqQixNQUFNQSxFQUFJLE9BQU87QUFBQSxFQUNqQixlQUFlQSxFQUFJLE9BQU87QUFBQSxFQUMxQixpQkFBaUJBLEVBQUksT0FBTztBQUM5QixDQUFDO0FBQ0RBLEVBQUksT0FBTztBQUFBLEVBQ1QsY0FBY0EsRUFBSSxPQUFPO0FBQUEsRUFDekIsT0FBT0EsRUFBSSxPQUFPO0FBQ3BCLENBQUM7QUFDREEsRUFBSSxPQUFPO0FBQUEsRUFDVCxjQUFjQSxFQUFJLE9BQU87QUFBQSxFQUN6QixlQUFlQSxFQUFJLElBQUk7QUFBQTtBQUFBLEVBRXZCLHFCQUFxQkEsRUFBSSxPQUFPLEVBQUUsU0FBUztBQUFBLEVBQzNDLG9CQUFvQkEsRUFBSSxPQUFPLEVBQUUsU0FBUztBQUFBLEVBQzFDLGdCQUFnQkEsRUFBSSxPQUFPO0FBQUEsRUFDM0IsbUJBQW1CQSxFQUFJLE9BQU87QUFBQSxFQUM5QixrQkFBa0JBLEVBQUksT0FBTztBQUFBLEVBQzdCLFlBQVlBLEVBQUksTUFBTXNGLEVBQUU7QUFBQSxFQUN4QixtQkFBbUJ0RixFQUFJLE9BQU8sRUFBRSxJQUFJO0FBQUEsRUFDcEMsZUFBZUEsRUFBSSxRQUFRO0FBQUEsRUFDM0IseUJBQXlCeUY7QUFBQSxFQUN6QixnQkFBZ0J6RixFQUFJLE9BQU8sRUFBRSxTQUFTO0FBQUEsRUFDdEMsMkJBQTJCQSxFQUFJLFFBQVEsRUFBRSxTQUFTO0FBQUEsRUFDbEQscUJBQXFCLEVBQUVBLEVBQUksT0FBTyxDQUFDO0FBQ3JDLENBQUM7QUFDRCxNQUFNc0csS0FBS3RHLEVBQUksT0FBTztBQUFBLEVBQ3BCLG1CQUFtQkEsRUFBSSxPQUFPO0FBQ2hDLENBQUM7QUFDREEsRUFBSSxPQUFPO0FBQUEsRUFDVCxJQUFJQSxFQUFJLE9BQU87QUFBQSxFQUNmLFlBQVlBLEVBQUksT0FBTztBQUN6QixDQUFDO0FBQ0QsTUFBTXVHLEtBQUt2RyxFQUFJLE9BQU87QUFBQSxFQUNwQixNQUFNQSxFQUFJLE9BQU87QUFBQSxFQUNqQixLQUFLQSxFQUFJLE1BQU1BLEVBQUksT0FBTyxDQUFDO0FBQUEsRUFDM0IsS0FBS0EsRUFBSSxPQUFPO0FBQUEsRUFDaEIsS0FBS0EsRUFBSSxPQUFPO0FBQ2xCLENBQUM7QUFDREEsRUFBSSxNQUFNdUcsRUFBRTtBQUNaLE1BQU1DLEtBQUt4RyxFQUFJLE9BQU87QUFBQSxFQUNwQixvQkFBb0JBLEVBQUksT0FBTyxFQUFFLFNBQVM7QUFBQSxFQUMxQyxzQkFBc0JBLEVBQUksT0FBT0EsRUFBSSxPQUFPLEdBQUdBLEVBQUksSUFBSSxDQUFDLEVBQUUsU0FBUztBQUFBLEVBQ25FLHlCQUF5QkEsRUFBSSxPQUFPLEVBQUUsU0FBUztBQUFBLEVBQy9DLHdCQUF3QkEsRUFBSSxPQUFPLEVBQUUsU0FBUztBQUNoRCxDQUFDLEdBQUd5RyxLQUFLekcsRUFBSSxPQUFPO0FBQUEsRUFDbEIsVUFBVUEsRUFBSSxPQUFPO0FBQUEsRUFDckIsVUFBVUEsRUFBSSxPQUFPLEVBQUUsSUFBSTtBQUM3QixDQUFDLEdBQUcwRyxLQUFLMUcsRUFBSSxPQUFPO0FBQUEsRUFDbEIsWUFBWUEsRUFBSSxNQUFNeUcsRUFBRTtBQUFBLEVBQ3hCLGdCQUFnQnpHLEVBQUksT0FBTyxFQUFFLFNBQVM7QUFBQSxFQUN0Qyw2QkFBNkJBLEVBQUksT0FBTyxFQUFFLElBQUk7QUFDaEQsQ0FBQyxHQUFHMkcsS0FBSzNHLEVBQUksT0FBTztBQUFBLEVBQ2xCLDZCQUE2QixFQUFFQSxFQUFJLE9BQU9BLEVBQUksT0FBTyxHQUFHQSxFQUFJLElBQUksQ0FBQyxDQUFDO0FBQ3BFLENBQUM7QUFDREEsRUFBSSxPQUFPO0FBQUEsRUFDVCxrQkFBa0JBLEVBQUksT0FBTztBQUFBLEVBQzdCLHlCQUF5QnlGO0FBQUEsRUFDekIsbUJBQW1CekYsRUFBSSxPQUFPLEVBQUUsU0FBUztBQUFBLEVBQ3pDLHNCQUFzQkEsRUFBSSxPQUFPLEVBQUUsU0FBUztBQUFBLEVBQzVDLG9CQUFvQkEsRUFBSSxRQUFRLEVBQUUsU0FBUztBQUFBLEVBQzNDLDBCQUEwQjBHLEdBQUcsU0FBUztBQUN4QyxDQUFDLEVBQUUsT0FBT0YsR0FBRyxLQUFLLEVBQUUsT0FBT0csR0FBRyxLQUFLO0FBQ25DLE1BQU1DLEtBQUs1RyxFQUFJLE9BQU87QUFBQSxFQUNwQix1QkFBdUJBLEVBQUksTUFBTUEsRUFBSSxPQUFPQSxFQUFJLE9BQU8sR0FBR0EsRUFBSSxJQUFJLENBQUMsQ0FBQztBQUFBLEVBQ3BFLHFCQUFxQixFQUFFQSxFQUFJLE9BQU8sQ0FBQztBQUNyQyxDQUFDO0FBQ0RBLEVBQUksT0FBTztBQUFBLEVBQ1QsUUFBUThDO0FBQUEsRUFDUix1QkFBdUIyQztBQUN6QixDQUFDO0FBQ0R6RixFQUFJLE9BQU87QUFBQSxFQUNULFlBQVlBLEVBQUksT0FBTztBQUFBLEVBQ3ZCLHFCQUFxQjZDO0FBQUEsRUFDckIseUJBQXlCNEM7QUFBQSxFQUN6QixnQkFBZ0J6RixFQUFJLE9BQU9BLEVBQUksT0FBTyxHQUFHQSxFQUFJLElBQUksQ0FBQztBQUFBO0FBRXBELENBQUM7QUFDRCxNQUFNNkcsS0FBSzdHLEVBQUksT0FBTztBQUFBLEVBQ3BCLHVCQUF1QkEsRUFBSSxNQUFNQSxFQUFJLE9BQU9BLEVBQUksT0FBTyxHQUFHQSxFQUFJLElBQUksQ0FBQyxDQUFDO0FBQUEsRUFDcEUsVUFBVUEsRUFBSSxPQUFPO0FBQ3ZCLENBQUM7QUFDREEsRUFBSSxPQUFPQSxFQUFJLElBQUksQ0FBQztBQUNwQkEsRUFBSSxPQUFPO0FBQUEsRUFDVCxZQUFZLEVBQUVBLEVBQUksT0FBTyxDQUFDO0FBQUEsRUFDMUIsV0FBVyxFQUFFQSxFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQ3pCLE9BQU8sRUFBRUEsRUFBSSxPQUFPLENBQUM7QUFBQSxFQUNyQixPQUFPLEVBQUVBLEVBQUksT0FBTyxDQUFDO0FBQUEsRUFDckIsT0FBTyxFQUFFQSxFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQ3JCLE1BQU0sRUFBRUEsRUFBSSxPQUFPLENBQUM7QUFBQSxFQUNwQixPQUFPLEVBQUVBLEVBQUksT0FBTyxDQUFDO0FBQUEsRUFDckIsU0FBUyxFQUFFQSxFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQ3ZCLFVBQVUsRUFBRUEsRUFBSSxPQUFPLENBQUM7QUFBQSxFQUN4QixPQUFPLEVBQUVBLEVBQUksT0FBTyxDQUFDO0FBQUEsRUFDckIsZUFBZSxFQUFFQSxFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQzdCLGNBQWMsRUFBRUEsRUFBSSxPQUFPLENBQUM7QUFBQSxFQUM1QiwyQkFBMkIsRUFBRUEsRUFBSSxRQUFRLENBQUM7QUFDNUMsQ0FBQztBQUNEQSxFQUFJLE9BQU87QUFBQSxFQUNULElBQUlBLEVBQUksT0FBTztBQUFBLEVBQ2YsT0FBTyxFQUFFQSxFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQ3JCLFlBQVksRUFBRUEsRUFBSSxPQUFPLENBQUM7QUFBQSxFQUMxQixXQUFXLEVBQUVBLEVBQUksT0FBTyxDQUFDO0FBQUEsRUFDekIsY0FBYyxFQUFFQSxFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQzVCLGVBQWUsRUFBRUEsRUFBSSxPQUFPLENBQUM7QUFBQSxFQUM3QixTQUFTLEVBQUVBLEVBQUksT0FBT0EsRUFBSSxPQUFPLEdBQUdBLEVBQUksSUFBSSxDQUFDLENBQUM7QUFDaEQsQ0FBQztBQUNEQSxFQUFJLE9BQU87QUFBQSxFQUNULFNBQVNBLEVBQUksT0FBTztBQUN0QixDQUFDO0FBQ0QsTUFBTThHLEtBQUs5RyxFQUFJLE9BQU87QUFBQSxFQUNwQixZQUFZQSxFQUFJLE9BQU87QUFDekIsQ0FBQztBQUNEQSxFQUFJLE9BQU87QUFBQSxFQUNULHlCQUF5QnlGO0FBQUEsRUFDekIsNkJBQTZCekYsRUFBSSxPQUFPQSxFQUFJLElBQUksQ0FBQyxFQUFFLFNBQVM7QUFDOUQsQ0FBQztBQUNELE1BQU0rRyxLQUFLL0csRUFBSSxPQUFPO0FBQUEsRUFDcEIsc0JBQXNCLEVBQUVBLEVBQUksT0FBT0EsRUFBSSxJQUFJLENBQUMsQ0FBQztBQUMvQyxDQUFDLEdBQUdnSCxLQUFLLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxHQUFHaEcsTUFBTSxJQUFJQSxHQUFHLENBQUM7QUFDM0MsU0FBU2lHLEdBQUcsR0FBRyxHQUFHO0FBQ2hCLE1BQUlqRyxJQUFJLE9BQU87QUFDZixFQUFBQSxJQUFJQSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsWUFBWTtBQUM5QjtBQUNBLFNBQVNrRyxHQUFHLEdBQUcsR0FBRztBQUNoQixRQUFNLFdBQVcsSUFBSSxFQUFFO0FBQ3ZCLE1BQUlsRyxJQUFJLE1BQU07QUFDZCxFQUFBQSxLQUFLQSxFQUFFLEdBQUcsQ0FBQztBQUNiO0FBQ0EsSUFBSW1HLEtBQXFCLDJCQUFXO0FBQ2xDLE1BQUksSUFBSSxTQUFTbkcsR0FBRyxHQUFHO0FBQ3JCLFdBQU8sSUFBSSxPQUFPLGtCQUFrQjtBQUFBLE1BQ2xDLFdBQVcsQ0FBQztBQUFBLElBQ2QsYUFBYSxTQUFTLFNBQVMyRCxHQUFHQyxHQUFHO0FBQ25DLE1BQUFELEVBQUUsWUFBWUM7QUFBQSxJQUNoQixLQUFLLFNBQVNELEdBQUdDLEdBQUc7QUFDbEIsZUFBU0MsS0FBS0Q7QUFDWixlQUFPLFVBQVUsZUFBZSxLQUFLQSxHQUFHQyxDQUFDLE1BQU1GLEVBQUVFLENBQUMsSUFBSUQsRUFBRUMsQ0FBQztBQUFBLElBQzdELEdBQUcsRUFBRTdELEdBQUcsQ0FBQztBQUFBLEVBQ1g7QUFDQSxTQUFPLFNBQVMsR0FBR0EsR0FBRztBQUNwQixRQUFJLE9BQU9BLEtBQUssY0FBY0EsTUFBTSxLQUFNLE9BQU0sSUFBSSxVQUFVLHlCQUF5QixPQUFPQSxDQUFDLElBQUksK0JBQStCO0FBQ2xJLE1BQUUsR0FBR0EsQ0FBQztBQUNOLGFBQVNJLElBQUk7QUFDWCxXQUFLLGNBQWM7QUFBQSxJQUNyQjtBQUNBLE1BQUUsWUFBWUosTUFBTSxPQUFPLE9BQU8sT0FBT0EsQ0FBQyxLQUFLSSxFQUFFLFlBQVlKLEVBQUUsV0FBVyxJQUFJSSxFQUFFO0FBQUEsRUFDbEY7QUFDRixFQUFFLEdBQUdnRyxLQUFLLFNBQVMsR0FBRztBQUNwQixFQUFBRCxHQUFHLEdBQUcsQ0FBQztBQUNQLFdBQVMsRUFBRW5HLEdBQUdJLEdBQUc7QUFDZixRQUFJLElBQUksS0FBSyxhQUFhLElBQUksRUFBRSxLQUFLLE1BQU1KLEdBQUdJLENBQUMsS0FBSztBQUNwRCxXQUFPLE9BQU8sZUFBZSxHQUFHLFFBQVE7QUFBQSxNQUN0QyxPQUFPLEVBQUU7QUFBQSxNQUNULFlBQVk7QUFBQSxNQUNaLGNBQWM7QUFBQSxJQUNoQixDQUFDLEdBQUc2RixHQUFHLEdBQUcsRUFBRSxTQUFTLEdBQUdDLEdBQUcsQ0FBQyxHQUFHO0FBQUEsRUFDakM7QUFDQSxTQUFPO0FBQ1QsRUFBRSxLQUFLO0FBQ1AsTUFBTUcsV0FBV0QsR0FBRztBQUFBLEVBQ2xCLFlBQVksR0FBRztBQUNiLFVBQU1wRyxJQUFJLEdBQUcsRUFBRSxPQUFPO0FBQ3RCLFVBQU1BLENBQUMsR0FBRyxLQUFLLFdBQVc7QUFBQSxFQUM1QjtBQUFBLEVBQ0EsSUFBSSx1QkFBdUI7QUFDekIsV0FBTyxLQUFLLFNBQVM7QUFBQSxFQUN2QjtBQUNGO0FBQ0EsTUFBTXNHLElBQUksT0FBTyxHQUFHLEdBQUd0RyxNQUFNO0FBQzNCLFFBQU1JLElBQUksTUFBTSxFQUFFLEtBQUssQ0FBQztBQUN4QixNQUFJbUcsR0FBR25HLENBQUM7QUFDTixVQUFNLElBQUlpRyxHQUFHakcsQ0FBQztBQUNoQixNQUFJLENBQUNvRyxHQUFHcEcsR0FBR0osQ0FBQyxHQUFHO0FBQ2IsVUFBTSxJQUFJQSxFQUFFLFVBQVVJLENBQUM7QUFDdkIsVUFBTSxFQUFFLFVBQVUsSUFBSSxNQUFNLGVBQWUsS0FBSyxRQUFRLE1BQU0scURBQXFESixHQUFHLFdBQVdJLENBQUMsR0FBRyxFQUFFO0FBQUEsRUFDekk7QUFDQSxTQUFPQTtBQUNULEdBQUdvRyxLQUFLLENBQUMsR0FBRyxNQUFNLEVBQUUsVUFBVSxDQUFDLEVBQUUsU0FBU0QsS0FBSyxDQUFDLE1BQU1uQyxHQUFHLFVBQVUsQ0FBQyxFQUFFLFNBQVNxQyxLQUFLLE9BQU8sR0FBRyxNQUFNLE1BQU1ILEVBQUUsR0FBRyxFQUFFLE1BQU0sd0JBQXdCLFNBQVMsRUFBRSxHQUFHckIsRUFBRSxHQUFHeUIsSUFBSSxPQUFPLE1BQU0sTUFBTUosRUFBRSxHQUFHLEVBQUUsTUFBTSxlQUFlLFNBQVMsQ0FBQyxFQUFFLEdBQUduQixFQUFFLEdBQUd3QixLQUFLLE9BQU8sR0FBRyxNQUFNLE1BQU1MLEVBQUUsR0FBRyxFQUFFLE1BQU0seUJBQXlCLFNBQVMsRUFBRSxHQUFHVixFQUFFLEdBQUdnQixLQUFLLE9BQU8sR0FBRyxNQUFNLE1BQU1OLEVBQUUsR0FBRyxFQUFFLE1BQU0sNkJBQTZCLFNBQVMsRUFBRSxHQUFHVCxFQUFFLEdBQUdnQixLQUFLLE9BQU8sR0FBRyxNQUFNLE1BQU1QLEVBQUUsR0FBRyxFQUFFLE1BQU0sNkJBQTZCLFNBQVMsRUFBRSxHQUFHVixFQUFFLEdBQUdrQixJQUFJLE9BQU8sR0FBRyxNQUFNLE1BQU1SLEVBQUUsR0FBRyxFQUFFLE1BQU0sd0JBQXdCLFNBQVMsRUFBRSxHQUFHeEQsRUFBRSxHQUFHaUUsS0FBSyxPQUFPLEdBQUcsTUFBTSxNQUFNVCxFQUFFLEdBQUcsRUFBRSxNQUFNLGlDQUFpQyxTQUFTLEVBQUUsR0FBR2hCLEVBQUUsR0FBRzBCLEtBQUssT0FBTyxHQUFHLE1BQU0sTUFBTVY7QUFBQSxFQUNwckI7QUFBQSxFQUNBLEVBQUUsTUFBTSxrQ0FBa0MsU0FBUyxFQUFFO0FBQUEsRUFDckR6RDtBQUNGLEdBQUdvRSxLQUFLLE9BQU8sR0FBRyxHQUFHakgsTUFBTTtBQUN6QixRQUFNSSxJQUFJLE1BQU1xRyxHQUFHLEdBQUc7QUFBQSxJQUNwQixjQUFjO0FBQUEsSUFDZCxnQkFBZ0J6RztBQUFBLEVBQ2xCLENBQUMsR0FBRyxJQUFJLElBQUksSUFBSUksRUFBRSxRQUFRLFNBQVMsSUFBSSxDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUM7QUFDekQsTUFBSSxFQUFFLFNBQVM7QUFDYixVQUFNLElBQUksTUFBTSxzQ0FBc0MsRUFBRSxJQUFJLEVBQUU7QUFDaEUsUUFBTSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxTQUFTLE9BQU8sSUFBSTRGLEdBQUc1RixFQUFFLFFBQVEsU0FBUyxJQUFJLENBQUMsTUFBTSxFQUFFLHFCQUFxQixDQUFDO0FBQ3pHLFNBQU87QUFBQSxJQUNMLFVBQVU7QUFBQSxJQUNWLFlBQVk7QUFBQSxFQUNkO0FBQ0YsR0FBRzhHLEtBQUssT0FBTyxHQUFHLEdBQUdsSCxHQUFHSSxNQUFNO0FBQzVCLE1BQUlKO0FBQ0YsV0FBTyxFQUFFLFlBQVksR0FBRyxVQUFVLE1BQU07QUFDMUM7QUFDRSxJQUFBSSxJQUFJQSxLQUFLO0FBQ1QsVUFBTSxJQUFJLE1BQU02RyxHQUFHLEdBQUcsR0FBRzdHLENBQUM7QUFDMUIsV0FBTyxFQUFFLFlBQVksRUFBRSxZQUFZLFVBQVUsRUFBRSxTQUFTO0FBQUEsRUFDMUQ7QUFDRixHQUFHK0csS0FBSyxPQUFPLEdBQUcsTUFBTTtBQUN0QixNQUFJLEVBQUUsU0FBUztBQUNiLFVBQU0sSUFBSSxNQUFNLDBCQUEwQjtBQUM1QyxTQUFPLE1BQU0sUUFBUTtBQUFBLElBQ25CLE1BQU0sS0FBSyxFQUFFLE9BQU8sQ0FBQyxFQUFFO0FBQUEsTUFDckIsQ0FBQyxNQUFNYixFQUFFLEdBQUcsRUFBRSxNQUFNLGlCQUFpQixTQUFTLEVBQUUsR0FBRzlELEVBQUU7QUFBQSxJQUN2RDtBQUFBLEVBQ0Y7QUFDRixHQUFHNEUsS0FBSyxPQUFPLEdBQUcsTUFBTTtBQUN0QixNQUFJO0FBQ0YsV0FBTyxNQUFNZCxFQUFFLEdBQUcsRUFBRSxNQUFNLDBCQUEwQixTQUFTLEVBQUUsR0FBR2pFLEVBQUU7QUFBQSxFQUN0RSxTQUFTckMsR0FBRztBQUNWLFVBQU0sUUFBUSxNQUFNLG1EQUFtREEsR0FBRyxLQUFLLFVBQVVBLENBQUMsQ0FBQyxHQUFHQTtBQUFBLEVBQ2hHO0FBQ0YsR0FBR3FILEtBQUssT0FBTyxHQUFHLE1BQU0sTUFBTWYsRUFBRSxHQUFHLEVBQUUsTUFBTSx3QkFBd0IsU0FBUyxFQUFFLEdBQUdoQixFQUFFLEdBQUdnQyxLQUFLLE9BQU8sR0FBRyxNQUFNLE1BQU1oQixFQUFFLEdBQUcsRUFBRSxNQUFNLFlBQVksU0FBUyxFQUFFLEdBQUdqRSxFQUFFLEdBQUdrRixLQUFLLEtBQUtDLEtBQUssT0FBTyxHQUFHLE1BQU07QUFDMUwsVUFBUSxJQUFJLENBQUM7QUFDYixRQUFNLElBQUksTUFBTXRJLEdBQWU7QUFBQSxJQUM3QixRQUFRO0FBQUEsSUFDUixPQUFPO0FBQUEsSUFDUCxTQUFTcUk7QUFBQSxJQUNULGFBQWE7QUFBQTtBQUFBLEVBRWYsQ0FBQyxFQUFFLFNBQVM1RCxJQUFJLE1BQU0yQyxFQUFFLEdBQUcsRUFBRSxNQUFNLGtCQUFrQixHQUFHNUQsRUFBRTtBQUMxRCxTQUFPLFFBQVEsSUFBSSw2REFBNkRpQixDQUFDLEdBQUdBO0FBQ3RGLEdBQUc4RCxLQUFLLE9BQU8sR0FBRyxNQUFNLE1BQU1uQixFQUFFLEdBQUcsRUFBRSxNQUFNLHdCQUF3QixTQUFTLEVBQUUsR0FBR1AsRUFBRSxHQUFHMkIsS0FBSyxPQUFPLEdBQUcsTUFBTTtBQUN6RyxNQUFJO0FBQ0YsWUFBUSxNQUFNcEI7QUFBQSxNQUNaO0FBQUEsTUFDQSxFQUFFLE1BQU0sK0JBQStCLFNBQVMsRUFBRSxTQUFTLEVBQUUsRUFBRTtBQUFBLE1BQy9EUjtBQUFBLElBQ0YsR0FBRztBQUFBLEVBQ0wsU0FBUzlGLEdBQUc7QUFDVixXQUFPLFFBQVEsTUFBTSx1REFBdURFLEdBQUVGLENBQUMsQ0FBQyxHQUFHO0FBQUEsRUFDckY7QUFDRjtBQUNBLFNBQVMySCxHQUFHLEdBQUc7QUFDYixRQUFNLElBQUksTUFBTSxtQkFBbUIsQ0FBQyxFQUFFO0FBQ3hDO0FBQ0EsTUFBTUMsS0FBSyxDQUFDLE1BQU0sT0FBTyxNQUFNO0FBQzdCLE1BQUk1SCxHQUFHSTtBQUNQLE1BQUk7QUFDRixLQUFDQSxLQUFLSixJQUFJLEVBQUUsY0FBYyxLQUFLLHNCQUFzQixRQUFRSSxFQUFFLEtBQUtKLENBQUM7QUFDckUsVUFBTSxJQUFJLE1BQU0sRUFBRSxDQUFDO0FBQ25CLFFBQUksRUFBRSxTQUFTO0FBQ2IsUUFBRSxjQUFjLElBQUksNEJBQTRCLEVBQUUsT0FBTyxpQkFBaUI7QUFBQSxhQUNuRSxFQUFFLFNBQVM7QUFDbEIsUUFBRSxjQUFjLElBQUk7QUFBQSxRQUNsQixFQUFFLE9BQU87QUFBQSxRQUNULEVBQUUsT0FBTztBQUFBLFFBQ1QsRUFBRSxPQUFPO0FBQUEsTUFDWDtBQUFBO0FBRUEsWUFBTSxJQUFJLE1BQU0sbUJBQW1CLENBQUMsRUFBRTtBQUFBLEVBQzFDLFNBQVMsR0FBRztBQUNWLFVBQU0sSUFBSUUsR0FBRSxDQUFDLEdBQUcsSUFBSSxNQUFNd0gsR0FBRyxFQUFFLFFBQVEsa0JBQWtCLENBQUM7QUFDMUQsTUFBRSxjQUFjLElBQUksZ0JBQWdCLEdBQUcsQ0FBQztBQUFBLEVBQzFDO0FBQ0YsR0FBR0csS0FBSyxDQUFDLE1BQU0sT0FBTyxNQUFNO0FBQzFCLE1BQUk7QUFDRixXQUFPLE1BQU0sRUFBRSxDQUFDO0FBQUEsRUFDbEIsU0FBUzdILEdBQUc7QUFDVixVQUFNLEVBQUUsT0FBT0ksRUFBRSxJQUFJMEgsRUFBRSxvQkFBb0IsR0FBRyxJQUFJNUgsR0FBRUYsQ0FBQyxHQUFHLElBQUksTUFBTTBILEdBQUcsRUFBRSxRQUFRLGtCQUFrQixDQUFDO0FBQ2xHLFdBQU90SCxFQUFFLEdBQUcsR0FBR0osQ0FBQyxHQUFHLEVBQUUsYUFBYSxJQUFJLFFBQVEsR0FBRyxXQUFXLEVBQUU7QUFBQSxFQUNoRTtBQUNGLEdBQUc4SCxJQUFJLENBQUMsTUFBTTtBQUNaLFFBQU0sSUFBSSxJQUFJMUgsTUFBTTtBQUNsQixXQUFPLFFBQVEsSUFBSSxHQUFHakIsR0FBRyxNQUFNLEtBQUssTUFBTSxDQUFDLEdBQUdBLEdBQUcsS0FBSyxLQUFLLEdBQUcsQ0FBQyxFQUFFLENBQUMsS0FBSyxHQUFHaUIsQ0FBQztBQUFBLEVBQzdFLEdBQUdKLElBQUksSUFBSUksTUFBTTtBQUNmLFdBQU8sUUFBUSxLQUFLLEdBQUdqQixHQUFHLElBQUksS0FBSyxNQUFNLENBQUMsR0FBR0EsR0FBRyxLQUFLLEtBQUssR0FBRyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEdBQUdpQixDQUFDO0FBQUEsRUFDNUU7QUFDQSxTQUFPO0FBQUEsSUFDTCxLQUFLO0FBQUEsSUFDTCxLQUFLSjtBQUFBLElBQ0wsT0FBTztBQUFBLElBQ1AsT0FBT0E7QUFBQSxFQUNUO0FBQ0YsR0FBRyxFQUFFLE9BQU8rSCxJQUFJLE9BQU9DLEdBQUcsSUFBSUYsRUFBRSxRQUFRLEdBQUdHLEtBQUssQ0FBQyxNQUFNO0FBQ3JELE1BQUksRUFBRSxnQkFBZ0IsV0FBVztBQUMvQixVQUFNLElBQUksTUFBTSw0Q0FBNEMsRUFBRSxnQkFBZ0IsTUFBTSxFQUFFO0FBQ3hGLFNBQU8sRUFBRSxtQkFBbUIsRUFBRSxnQkFBZ0IsQ0FBQyxFQUFFLEdBQUc7QUFDdEQsR0FBR0MsSUFBSSxDQUFDLEdBQUcsTUFBTTtBQUNmLFFBQU1sSSxJQUFJLEVBQUUsS0FBSyxDQUFDSSxNQUFNLEVBQUUsVUFBVUEsQ0FBQyxFQUFFLE9BQU87QUFDOUMsTUFBSSxDQUFDSjtBQUNILFVBQU1nSSxHQUFHLHdDQUF3QyxDQUFDLEdBQUcsSUFBSSxNQUFNLHlCQUF5QjtBQUMxRixTQUFPLEVBQUUsTUFBTWhJLENBQUM7QUFDbEIsR0FBR21JLEtBQUssQ0FBQyxPQUFPO0FBQUEsRUFDZCxvQkFBb0IsRUFBRTtBQUFBLEVBQ3RCLHNCQUFzQjtBQUFBLElBQ3BCLFVBQVUsRUFBRTtBQUFBLElBQ1osU0FBUyxFQUFFO0FBQUEsRUFDYjtBQUFBLEVBQ0EseUJBQXlCLEVBQUU7QUFBQSxFQUMzQix3QkFBd0IsRUFBRTtBQUM1QixJQUFJQyxLQUFLLE9BQU8sTUFBTTtBQUNwQixRQUFNLEVBQUUsT0FBTyxFQUFFLElBQUlOLEVBQUUsRUFBRSxTQUFTLEdBQUc5SCxJQUFJLE1BQU0wRyxFQUFFLEVBQUUsZ0JBQWdCLEdBQUd0RyxJQUFJNkgsR0FBRyxFQUFFLGFBQWE7QUFDNUYsTUFBSWpJLEVBQUUsU0FBUztBQUNiLFdBQU8sRUFBRSw4QkFBOEIsR0FBRyxFQUFFLE1BQU0sU0FBUyxRQUFRLE1BQU0rRyxHQUFHLEVBQUUsa0JBQWtCO0FBQUEsTUFDOUYsY0FBYy9HLEVBQUU7QUFBQSxNQUNoQixPQUFPSSxFQUFFO0FBQUEsSUFDWCxDQUFDLEVBQUU7QUFDTDtBQUNFLE1BQUUsbUJBQW1CO0FBQ3JCLFVBQU0sSUFBSTtBQUFBLE1BQ1IsY0FBY0osRUFBRTtBQUFBLE1BQ2hCLGVBQWU7QUFBQSxRQUNiLGVBQWUsRUFBRSxzQkFBc0I7QUFBQSxNQUN6QztBQUFBLE1BQ0EsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsS0FBSztBQUFBLE1BQzVDLG1CQUFtQixFQUFFLG1CQUFtQixFQUFFLFFBQVE7QUFBQSxNQUNsRCxrQkFBa0IsRUFBRSxtQkFBbUIsRUFBRSxPQUFPO0FBQUEsTUFDaEQsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsY0FBYztBQUFBLE1BQ3JELFlBQVlBLEVBQUU7QUFBQSxNQUNkLG1CQUFtQkEsRUFBRTtBQUFBLE1BQ3JCLGVBQWU7QUFBQSxNQUNmLHlCQUF5QixFQUFFO0FBQUEsTUFDM0IscUJBQXFCSSxFQUFFO0FBQUEsSUFDekI7QUFDQSxXQUFPLEVBQUUsTUFBTSxZQUFZLFFBQVEsTUFBTWtILEdBQUcsRUFBRSxrQkFBa0IsQ0FBQyxFQUFFO0FBQUEsRUFDckU7QUFDRixHQUFHLEVBQUUsT0FBT2UsSUFBSSxPQUFPQyxHQUFHLElBQUlSLEVBQUUsV0FBVyxHQUFHUyxLQUFLLENBQUMsR0FBRyxHQUFHdkksTUFBTTtBQUM5RCxNQUFJQSxHQUFHO0FBQ0wsSUFBQXFJLEdBQUcsa0NBQWtDLEtBQUssVUFBVXJJLENBQUMsQ0FBQyxFQUFFO0FBQ3hELGVBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxPQUFPLFFBQVFBLENBQUM7QUFDbkMsUUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUk7QUFBQSxFQUNwQjtBQUNBLFFBQU1JLElBQUl5QixHQUFHLFVBQVUsQ0FBQztBQUN4QixNQUFJLENBQUN6QixFQUFFLFNBQVM7QUFDZCxVQUFNLElBQUlBLEVBQUUsTUFBTSxPQUFPLEdBQUcsSUFBSTJDLEdBQUcsQ0FBQztBQUNwQyxlQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssT0FBTyxRQUFRLENBQUM7QUFDbkMsUUFBRSxHQUFHLEdBQUcsQ0FBQztBQUNYLFVBQU11RixHQUFHLGdEQUFnRCxDQUFDLEdBQUcsSUFBSSxNQUFNLDhDQUE4QztBQUFBLEVBQ3ZIO0FBQ0EsU0FBT2xJLEVBQUU7QUFDWCxHQUFHb0ksS0FBSyxDQUFDLEdBQUcsTUFBTTtBQUNoQixhQUFXeEksS0FBSztBQUNkLFFBQUlBLEVBQUUsWUFBWTtBQUNoQixZQUFNQSxFQUFFLE9BQU8sUUFBUSxDQUFDSSxNQUFNO0FBQzVCLGNBQU0sSUFBSU8sR0FBRyxVQUFVUCxFQUFFLFdBQVc7QUFDcEMsWUFBSSxDQUFDLEVBQUU7QUFDTCxVQUFBa0ksR0FBRyw0Q0FBNENsSSxFQUFFLFdBQVcsbUJBQW1CQSxDQUFDO0FBQUEsYUFDN0U7QUFDSCxnQkFBTSxJQUFJLEVBQUU7QUFDWixZQUFFLEdBQUdBLEVBQUUsTUFBTTtBQUFBLFFBQ2Y7QUFBQSxNQUNGLENBQUMsR0FBR2lJLEdBQUcsaURBQWlELEtBQUssVUFBVXJJLEVBQUUsTUFBTSxDQUFDLEVBQUUsR0FBRyxJQUFJLE1BQU0sNkNBQTZDO0FBQ2xKLEdBQUd5SSxLQUFLLHVCQUF1QixFQUFFLE9BQU9DLEdBQUcsT0FBT0MsR0FBRyxJQUFJYixFQUFFLGFBQWEsR0FBR2MsS0FBSzVKLEVBQUksT0FBTztBQUFBLEVBQ3pGLFVBQVVBLEVBQUksUUFBUSxhQUFhO0FBQUEsRUFDbkMsZ0JBQWdCQSxFQUFJLFFBQVEsUUFBUTtBQUFBLEVBQ3BDLFVBQVVBLEVBQUksT0FBTztBQUFBLElBQ25CLFdBQVdBLEVBQUksT0FBTztBQUFBLEVBQ3hCLENBQUM7QUFDSCxDQUFDLEdBQUc2SixLQUFLN0osRUFBSTtBQUFBLEVBQ1hBLEVBQUksT0FBTztBQUFBLElBQ1Qsb0JBQW9CQSxFQUFJLE9BQU87QUFBQSxFQUNqQyxDQUFDO0FBQ0gsRUFBRSxPQUFPLENBQUMsR0FBRzhKLEtBQUtqQjtBQUFBLEVBQ2hCLE9BQU8sRUFBRSxTQUFTLEdBQUcsZUFBZSxFQUFFLE1BQU07QUFDMUMsVUFBTTdILElBQUksRUFBRSxpQkFBaUI7QUFDN0IsSUFBQTBJLEVBQUUsbURBQW1EO0FBQ3JELFVBQU10SSxJQUFJOEgsRUFBRSxFQUFFLHdCQUF3QlUsRUFBRTtBQUN4QyxJQUFBRixFQUFFLDhCQUE4QjtBQUNoQyxVQUFNLElBQUksRUFBRSxrQkFBa0IsSUFBSSxNQUFNaEMsRUFBRSxDQUFDLEdBQUcsSUFBSSxFQUFFLFNBQVM7QUFDN0QsSUFBQWdDLEVBQUUsNkJBQTZCO0FBQy9CLFVBQU0sSUFBSSxNQUFNeEIsR0FBRyxHQUFHLEVBQUUsT0FBTyxHQUFHLE1BQU0sR0FBRyxFQUFFLFVBQVUsR0FBRyxRQUFRLEVBQUUsSUFBSSxNQUFNNUQsR0FBR2xELEVBQUUsU0FBUyxXQUFXO0FBQUEsTUFDckcsTUFBTTtBQUFBLE1BQ04sVUFBVSxFQUFFO0FBQUEsTUFDWixvQkFBb0I7QUFBQSxNQUNwQix1QkFBdUI7QUFBQSxJQUN6QixDQUFDO0FBQ0QsSUFBQXNJLEVBQUUsOEJBQThCO0FBQ2hDLFVBQU0sSUFBSSxFQUFFLE9BQU8sbUJBQW1CO0FBQUEsTUFDcEMsY0FBYzFJLEtBQUssT0FBTyxTQUFTQSxFQUFFO0FBQUEsTUFDckMsZ0JBQWdCO0FBQUEsUUFDZCxXQUFXO0FBQUEsUUFDWCxVQUFVO0FBQUEsUUFDVixXQUFXO0FBQUEsUUFDWCxRQUFRO0FBQUEsTUFDVjtBQUFBLElBQ0YsQ0FBQyxHQUFHK0ksSUFBSSxNQUFNO0FBQ1osUUFBRSxNQUFNLElBQUlOLEVBQUUsRUFBRTtBQUFBLElBQ2xCLEdBQUdPLElBQUksTUFBTTtBQUNYLFFBQUUsUUFBUTtBQUFBLElBQ1o7QUFDQSxXQUFPaEosS0FBSyxRQUFRQSxFQUFFLG1CQUFtQjBJLEVBQUUsNERBQTRELEtBQUtBLEVBQUUsZ0NBQWdDLEdBQUdLLEVBQUUsSUFBSSxFQUFFLEdBQUcsU0FBUyxPQUFPRSxNQUFNO0FBQ2hMLFVBQUlQLEVBQUUsNEJBQTRCLEdBQUcxSSxLQUFLLFFBQVFBLEVBQUUsc0JBQXNCLENBQUMsTUFBTUEsRUFBRSxtQkFBbUIsR0FBRztBQUN2RyxRQUFBMEksRUFBRSxrREFBa0Q7QUFDcEQ7QUFBQSxNQUNGO0FBQ0EsTUFBQU8sRUFBRSxRQUFRO0FBQUEsSUFDWixDQUFDLEdBQUcsRUFBRSxHQUFHLFdBQVcsT0FBT0EsTUFBTTtBQUMvQixNQUFBUCxFQUFFLGdDQUFnQ08sQ0FBQztBQUNuQyxZQUFNQyxJQUFJLE1BQU0sRUFBRSxvQkFBb0I7QUFBQSxRQUNwQyxVQUFVO0FBQUEsUUFDVixRQUFRO0FBQUEsVUFDTixpQkFBaUJELEVBQUU7QUFBQSxRQUNyQjtBQUFBLE1BQ0YsQ0FBQztBQUNELE1BQUFDLEVBQUUsU0FBU1AsR0FBRyxTQUFTTyxFQUFFLEtBQUssR0FBRyxFQUFFLElBQUksZ0JBQWdCQSxFQUFFLE1BQU0sV0FBVywyQkFBMkIsTUFBTVIsRUFBRSxpQkFBaUJRLEVBQUUsYUFBYSxHQUFHQyxFQUFFLFdBQVcsSUFBSTtBQUFBLFFBQy9KLFNBQVM7QUFBQSxRQUNULHVCQUF1Qi9JO0FBQUEsUUFDdkIsa0JBQWtCNEQsR0FBRSxFQUFFLE9BQU87QUFBQSxRQUM3QixlQUFlO0FBQUEsUUFDZixjQUFjLEVBQUUsVUFBVWtGLEVBQUUsY0FBYztBQUFBLFFBQzFDLFlBQVksRUFBRSxhQUFhLEdBQUc7QUFBQSxNQUNoQyxDQUFDO0FBQUEsSUFDSCxDQUFDLEdBQUc7QUFBQSxNQUNGLGFBQWE7QUFBQSxNQUNiLFlBQVk7QUFBQSxRQUNWLGFBQWFIO0FBQUEsUUFDYixnQkFBZ0JDO0FBQUEsUUFDaEIsc0JBQXNCLFlBQVksTUFBTUksR0FBR1gsRUFBRTtBQUFBLE1BQy9DO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRixHQUFHWSxLQUFLekI7QUFBQSxFQUNOLE9BQU87QUFBQSxJQUNMLFNBQVM7QUFBQSxJQUNULHVCQUF1QjtBQUFBLElBQ3ZCLGtCQUFrQjVIO0FBQUEsSUFDbEIsZUFBZUk7QUFBQSxJQUNmLGNBQWM7QUFBQSxFQUNoQixNQUFNO0FBQ0osSUFBQXNJLEVBQUUsNkJBQTZCO0FBQy9CLFVBQU0sSUFBSSxFQUFFO0FBQ1osSUFBQUEsRUFBRSx1Q0FBdUM7QUFDekMsVUFBTSxJQUFJWSxHQUFHdEosR0FBRyxFQUFFLFFBQVEsR0FBRyxJQUFJdUksR0FBRyxHQUFHbkksRUFBRSxJQUFJLGlCQUFpQjtBQUM5RCxJQUFBc0ksRUFBRSwwQkFBMEI7QUFDNUIsVUFBTSxJQUFJLE1BQU0vQixHQUFHLEdBQUc7QUFBQSxNQUNwQixrQkFBa0IsRUFBRTtBQUFBLE1BQ3BCLHlCQUF5QjtBQUFBLE1BQ3pCLHNCQUFzQixFQUFFLFNBQVM7QUFBQSxNQUNqQyxvQkFBb0IsRUFBRSxFQUFFLEtBQUs7QUFBQSxNQUM3Qix5QkFBeUIsRUFBRSxFQUFFLFVBQVU7QUFBQSxNQUN2Qyx3QkFBd0IsRUFBRSxFQUFFLFNBQVM7QUFBQSxNQUNyQyxzQkFBc0I7QUFBQSxRQUNwQixVQUFVLEVBQUUsRUFBRSxRQUFRO0FBQUEsUUFDdEIsU0FBUyxFQUFFLEVBQUUsT0FBTztBQUFBLE1BQ3RCO0FBQUEsSUFDRixDQUFDO0FBQ0QsSUFBQStCLEVBQUUsK0JBQStCLENBQUM7QUFDbEMsVUFBTWEsSUFBSVYsR0FBRyxNQUFNLEVBQUUscUJBQXFCLEVBQUUsQ0FBQyxFQUFFLG9CQUFvQkUsSUFBSSxNQUFNckMsRUFBRSxDQUFDO0FBQ2hGLFFBQUlxQyxFQUFFLFNBQVMsU0FBUztBQUN0QixNQUFBTCxFQUFFLHdCQUF3QjtBQUMxQixZQUFNTSxJQUFJLE1BQU1sQyxFQUFFLEdBQUc7QUFBQSxRQUNuQixjQUFjaUMsRUFBRTtBQUFBLFFBQ2hCLG1CQUFtQlE7QUFBQSxNQUNyQixDQUFDO0FBQ0QsYUFBTyxFQUFFLE1BQU0sU0FBUyxRQUFRdEIsR0FBR2UsQ0FBQyxFQUFFO0FBQUEsSUFDeEMsT0FBTztBQUNMLE1BQUFOLEVBQUUsbUJBQW1CO0FBQ3JCLFlBQU1NLElBQUk7QUFBQSxRQUNSLGNBQWNELEVBQUU7QUFBQSxRQUNoQixlQUFlO0FBQUEsVUFDYixlQUFlLEVBQUU7QUFBQSxRQUNuQjtBQUFBLFFBQ0EsZ0JBQWdCLEVBQUUsRUFBRSxLQUFLO0FBQUEsUUFDekIsbUJBQW1CLEVBQUUsRUFBRSxRQUFRO0FBQUEsUUFDL0Isa0JBQWtCLEVBQUUsRUFBRSxPQUFPO0FBQUEsUUFDN0IsZ0JBQWdCLEVBQUUsRUFBRSxjQUFjO0FBQUEsUUFDbEMsWUFBWUEsRUFBRTtBQUFBLFFBQ2QsbUJBQW1CQSxFQUFFO0FBQUEsUUFDckIsZUFBZTtBQUFBLFFBQ2YseUJBQXlCO0FBQUEsTUFDM0I7QUFDQSxhQUFPLEVBQUUsTUFBTSxZQUFZLFFBQVEsTUFBTXpCLEdBQUcsR0FBRzBCLENBQUMsRUFBRTtBQUFBLElBQ3BEO0FBQUEsRUFDRjtBQUNGLEdBQUdNLEtBQUssQ0FBQyxHQUFHLE1BQU07QUFDaEIsTUFBSXpGLEdBQUdDLEdBQUcwRixHQUFHQyxHQUFHRjtBQUNoQixRQUFNdkosSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUNJLEdBQUcsR0FBR3VELENBQUMsTUFBTUcsS0FBS0QsSUFBSSxFQUFFLGdCQUFnQixTQUFTLE9BQU8sU0FBU0EsRUFBRSxLQUFLLE1BQU0sT0FBTyxTQUFTQyxFQUFFLE1BQU0sS0FBSyxNQUFNLENBQUMsR0FBR0YsSUFBSUQsRUFBRSxLQUFLLEdBQUcsS0FBSztBQUM3SixTQUFPM0QsRUFBRSxFQUFFLFVBQVUsSUFBSUEsRUFBRSxFQUFFLFVBQVUsS0FBS0ksS0FBSyxlQUFlSixFQUFFLEVBQUUsU0FBUyxJQUFJQSxFQUFFLEVBQUUsU0FBUyxLQUFLNEQsS0FBSyxlQUFlNUQsRUFBRSxFQUFFLEtBQUssSUFBSUEsRUFBRSxFQUFFLEtBQUs7QUFBQSxJQUMzSXdKLElBQUksRUFBRSxTQUFTLE9BQU8sU0FBU0EsRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLFNBQVMsOEJBQThCeEosRUFBRSxFQUFFLFFBQVEsSUFBSUEsRUFBRSxFQUFFLFFBQVEsT0FBT3lKLElBQUksRUFBRSxnQkFBZ0IsWUFBWSxPQUFPLFNBQVNBLEVBQUUsZ0JBQWdCLFNBQVN6SixFQUFFLEVBQUUsT0FBTyxJQUFJQSxFQUFFLEVBQUUsT0FBTyxPQUFPdUosSUFBSSxFQUFFLGdCQUFnQixZQUFZLE9BQU8sU0FBU0EsRUFBRSxZQUFZLE1BQU1iLEVBQUUsc0JBQXNCMUksQ0FBQyxHQUFHQTtBQUMzVixHQUFHb0osS0FBSyxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUMsTUFBTTtBQUNoQyxRQUFNcEosSUFBSSxNQUFNO0FBQ2QsVUFBTUksSUFBSSxTQUFTLGVBQWUsQ0FBQztBQUNuQyxJQUFBQSxJQUFJLEVBQUVBLENBQUMsSUFBSSxzQkFBc0JKLENBQUM7QUFBQSxFQUNwQztBQUNBLEVBQUFBLEVBQUU7QUFDSixDQUFDLEdBQUcwSixLQUFLLHNvQkFBc29CQyxLQUFLLENBQUMsTUFBTTtBQUN6cEIsUUFBTSxJQUFJLFNBQVMsY0FBYyxVQUFVO0FBQzNDLElBQUUsWUFBWTtBQUFBO0FBQUEsUUFFUkQsRUFBRTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsdUJBS2EsQ0FBQztBQUFBO0FBQUE7QUFBQTtBQUl0QixRQUFNMUosSUFBSSxTQUFTLGNBQWMsS0FBSyxHQUFHSSxJQUFJSixFQUFFLGFBQWEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUM1RSxFQUFBSSxFQUFFLFlBQVksRUFBRSxRQUFRLFVBQVUsRUFBRSxDQUFDO0FBQ3JDLFFBQU0sSUFBSUEsRUFBRSxjQUFjLGtCQUFrQixHQUFHLElBQUlBLEVBQUUsY0FBYyxnQkFBZ0I7QUFDbkYsU0FBTyxTQUFTLEtBQUssWUFBWUosQ0FBQyxHQUFHLEVBQUUsTUFBTUEsR0FBRyxRQUFRLEdBQUcsY0FBYyxFQUFFO0FBQzdFO0FBQ0EsU0FBUzRKLEdBQUcsR0FBRyxHQUFHNUosR0FBRztBQUNuQixRQUFNSSxJQUFJLFlBQVk7QUFDcEIsUUFBSTtBQUNGLFlBQU0sSUFBSSxNQUFNb0gsR0FBRyxHQUFHeEgsQ0FBQztBQUN2QixZQUFNLGNBQWMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUFBLElBQzdCLFFBQVE7QUFBQSxJQUNSO0FBQUEsRUFDRjtBQUNBLEVBQUFJLEVBQUU7QUFDRixRQUFNLElBQUksWUFBWUEsR0FBR21ILEVBQUU7QUFDM0IsU0FBTztBQUNUO0FBQ0EsU0FBU3NDLEdBQUc7QUFBQSxFQUNWLFVBQVU7QUFBQSxFQUNWLGlCQUFpQjtBQUFBLEVBQ2pCLFNBQVM3SjtBQUNYLEdBQUc7QUFDRCxRQUFNSSxJQUFJLE1BQU07QUFDZCxrQkFBYyxDQUFDLEdBQUcsRUFBRSxLQUFLLE9BQU8sR0FBR0osRUFBRSxFQUFFLFFBQVF5QyxFQUFFLFVBQVUsQ0FBQztBQUFBLEVBQzlEO0FBQ0EsU0FBTyxFQUFFLGFBQWEsaUJBQWlCLFNBQVNyQyxDQUFDLEdBQUcsTUFBTTtBQUN4RCxNQUFFLGFBQWEsb0JBQW9CLFNBQVNBLENBQUM7QUFBQSxFQUMvQztBQUNGO0FBQ0EsZUFBZTBKLEdBQUcsR0FBRztBQUNuQixRQUFNLEVBQUUsS0FBSyxHQUFHLFNBQVM5SixFQUFFLElBQUksR0FBR0ksSUFBSXVKLEdBQUcsQ0FBQztBQUMxQyxTQUFPLElBQUksUUFBUSxDQUFDLE1BQU07QUFDeEIsVUFBTSxJQUFJLENBQUMsTUFBTTtBQUNmLGlCQUFXLE1BQU07QUFDZixRQUFBdkosRUFBRSxLQUFLLE9BQU87QUFBQSxNQUNoQixHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBRyxLQUFLLFFBQVEsRUFBRTtBQUFBLElBQ2hDLEdBQUcsSUFBSXdKLEdBQUd4SixFQUFFLFFBQVEsR0FBRyxJQUFJLElBQUlKLENBQUMsRUFBRSxNQUFNLEdBQUcsSUFBSTZKLEdBQUc7QUFBQSxNQUNoRCxVQUFVeko7QUFBQSxNQUNWLGlCQUFpQjtBQUFBLE1BQ2pCLFNBQVM7QUFBQSxJQUNYLENBQUM7QUFBQSxFQUNILENBQUM7QUFDSDtBQUNBLE1BQU0ySixLQUFLLE9BQU8sTUFBTTtBQUN0QixRQUFNLElBQUksTUFBTUQsR0FBRyxDQUFDO0FBQ3BCLE1BQUksRUFBRSxXQUFXckgsRUFBRTtBQUNqQixVQUFNLElBQUksTUFBTSw0QkFBNEI7QUFDOUMsTUFBSSxFQUFFLFdBQVdBLEVBQUU7QUFDakIsVUFBTSxJQUFJLE1BQU0seUJBQXlCO0FBQzNDLFNBQU8sRUFBRSxXQUFXQSxFQUFFLFdBQVdrRixHQUFHLEVBQUUsTUFBTSxHQUFHO0FBQUEsSUFDN0MsTUFBTSxFQUFFO0FBQUEsRUFDVjtBQUNGLEdBQUdxQyxLQUFLLENBQUMsR0FBRyxNQUFNO0FBQ2hCLFFBQU1oSyxJQUFJLE9BQU8sS0FBSyxHQUFHLFFBQVE7QUFDakMsTUFBSSxDQUFDQTtBQUNILFVBQU0sSUFBSSxNQUFNLEdBQUcsQ0FBQywyREFBMkQ7QUFDakYsU0FBT0E7QUFDVCxHQUFHaUssS0FBSyxPQUFPLEdBQUcsR0FBR2pLLEdBQUdJLE1BQU07QUFDNUIsUUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJMEgsRUFBRSxjQUFjO0FBQ3JDLFNBQU8sSUFBSSxRQUFRLENBQUMsR0FBRyxNQUFNO0FBQzNCLFVBQU0sSUFBSWtDLEdBQUcsR0FBRzVKLENBQUMsR0FBRyxJQUFJLFlBQVksWUFBWTtBQUM5QyxVQUFJO0FBQ0YsY0FBTSxJQUFJLE1BQU00RyxHQUFHLEdBQUdoSCxDQUFDO0FBQ3ZCLFlBQUksRUFBRTtBQUNKLHdCQUFjLENBQUMsR0FBRyxFQUFFLE1BQU0sR0FBRyxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQztBQUFBLGlCQUN4QyxFQUFFO0FBQ1QsZ0JBQU0sSUFBSSxNQUFNLEdBQUcsQ0FBQyxvQkFBb0I7QUFBQSxNQUM1QyxTQUFTLEdBQUc7QUFDVixVQUFFRSxHQUFFLENBQUMsQ0FBQyxHQUFHLGNBQWMsQ0FBQyxHQUFHLEVBQUVBLEdBQUUsQ0FBQyxDQUFDO0FBQUEsTUFDbkM7QUFBQSxJQUNGLEdBQUcsR0FBRztBQUFBLEVBQ1IsQ0FBQztBQUNILEdBQUcsRUFBRSxPQUFPZ0ssSUFBSSxPQUFPQyxHQUFHLElBQUlyQyxFQUFFLFdBQVcsR0FBR3NDLEtBQUtwTCxFQUFJLE9BQU87QUFBQSxFQUM1RCxxQkFBcUJBLEVBQUksT0FBTztBQUFBLEVBQ2hDLG9CQUFvQkEsRUFBSSxPQUFPO0FBQUEsRUFDL0Isb0JBQW9CQSxFQUFJLE9BQU87QUFDakMsQ0FBQyxHQUFHcUwsS0FBSyxDQUFDLE1BQU07QUFDZCxRQUFNLElBQUlELEdBQUcsVUFBVSxDQUFDO0FBQ3hCLE1BQUksQ0FBQyxFQUFFLFNBQVM7QUFDZCxVQUFNcEssSUFBSSw4RUFBOEVJLElBQUksMERBQTBELEtBQUssVUFBVSxDQUFDLENBQUM7QUFDdkssVUFBTStKLEdBQUcvSixDQUFDLEdBQUcsSUFBSSxNQUFNSixDQUFDO0FBQUEsRUFDMUI7QUFDQSxTQUFPLEVBQUU7QUFDWCxHQUFHc0ssS0FBSyxDQUFDLE1BQU07QUFDYixNQUFJO0FBQ0YsVUFBTSxJQUFJLElBQUksSUFBSSxLQUFLLEVBQUUsRUFBRSxhQUFhLElBQUksU0FBUztBQUNyRCxRQUFJLENBQUM7QUFDSCxZQUFNLElBQUksTUFBTSw4Q0FBOEM7QUFDaEUsV0FBT0osR0FBRyx3Q0FBd0MsQ0FBQyxHQUFHLEdBQUc7QUFBQSxFQUMzRCxTQUFTLEdBQUc7QUFDVixVQUFNbEssSUFBSTtBQUNWLFVBQU1tSyxHQUFHbkssR0FBRyxrQkFBa0IsQ0FBQztBQUFBLFNBQzFCRSxHQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxNQUFNRixDQUFDO0FBQUEsRUFDM0I7QUFDRixHQUFHdUssS0FBSyxDQUFDLEdBQUcsTUFBTSxJQUFJLElBQUksQ0FBQyxFQUFFLGFBQWEsSUFBSSxDQUFDLEdBQUdDLEtBQUssQ0FBQyxPQUFPLEtBQUssT0FBTyxTQUFTLEVBQUUsbUJBQW1CLE9BQU8sUUFBUUMsS0FBSyxPQUFPLEdBQUcsTUFBTTtBQUMzSSxRQUFNekssSUFBSXFLLEdBQUcsQ0FBQyxHQUFHakssSUFBSSxNQUFNMkosR0FBRyxFQUFFLEtBQUsvSixFQUFFLG1CQUFtQixHQUFHLFNBQVMsRUFBRSxDQUFDO0FBQ3pFLFNBQU87QUFBQSxJQUNMLGFBQWE7QUFBQSxNQUNYLFVBQVVzSyxHQUFHbEssRUFBRSxRQUFRLEVBQUU7QUFBQSxNQUN6QixnQkFBZ0JKLEVBQUUsa0JBQWtCO0FBQUEsTUFDcEMsY0FBY0EsRUFBRSxrQkFBa0I7QUFBQSxJQUNwQztBQUFBLEVBQ0Y7QUFDRixHQUFHLEVBQUUsT0FBTzBLLElBQUksT0FBT0MsR0FBRyxJQUFJN0MsRUFBRSxjQUFjLEdBQUc4QyxLQUFLNUwsRUFBSSxPQUFPO0FBQUEsRUFDL0Qsd0JBQXdCQSxFQUFJLE9BQU87QUFBQSxFQUNuQyxrQ0FBa0NBLEVBQUksT0FBTztBQUFBLEVBQzdDLDJCQUEyQkEsRUFBSSxPQUFPO0FBQ3hDLENBQUMsR0FBRzZMLEtBQUssQ0FBQyxNQUFNO0FBQ2QsUUFBTSxJQUFJRCxHQUFHLFVBQVUsQ0FBQztBQUN4QixNQUFJLENBQUMsRUFBRSxTQUFTO0FBQ2QsVUFBTTVLLElBQUksOEVBQThFSSxJQUFJLDZEQUE2RCxLQUFLLFVBQVUsQ0FBQyxDQUFDO0FBQzFLLFVBQU11SyxHQUFHdkssQ0FBQyxHQUFHLElBQUksTUFBTUosQ0FBQztBQUFBLEVBQzFCO0FBQ0EsU0FBTyxFQUFFO0FBQ1gsR0FBRzhLLEtBQUssQ0FBQyxPQUFPLEtBQUssT0FBTyxTQUFTLEVBQUUsc0JBQXNCLE9BQU8sUUFBUUMsS0FBSyxDQUFDLE1BQU07QUFDdEYsTUFBSTtBQUNGLFVBQU0sSUFBSSxJQUFJLElBQUksS0FBSyxFQUFFLEVBQUUsYUFBYSxJQUFJLG1CQUFtQjtBQUMvRCxRQUFJLENBQUM7QUFDSCxZQUFNLElBQUksTUFBTSx5REFBeUQ7QUFDM0UsV0FBT0wsR0FBRyxtREFBbUQsQ0FBQyxHQUFHLEdBQUc7QUFBQSxFQUN0RSxTQUFTLEdBQUc7QUFDVixVQUFNMUssSUFBSTtBQUNWLFVBQU0ySyxHQUFHM0ssR0FBRyxrQkFBa0IsQ0FBQztBQUFBLFNBQzFCRSxHQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxNQUFNRixDQUFDO0FBQUEsRUFDM0I7QUFDRixHQUFHZ0wsS0FBSyxPQUFPLEdBQUcsTUFBTTtBQUN0QixRQUFNaEwsSUFBSTZLLEdBQUcsQ0FBQyxHQUFHekssSUFBSSxNQUFNMkosR0FBRyxFQUFFLEtBQUsvSixFQUFFLHNCQUFzQixHQUFHLFNBQVMsRUFBRSxDQUFDLEdBQUcsSUFBSStLLEdBQUczSyxFQUFFLFFBQVEsRUFBRSxHQUFHLElBQUlKLEVBQUUsZ0NBQWdDO0FBQzNJLE1BQUksTUFBTSxHQUFHO0FBQ1gsVUFBTThELElBQUksOEVBQThFMEYsSUFBSSw0QkFBNEIsQ0FBQywyQ0FBMkMsQ0FBQztBQUNySyxVQUFNbUIsR0FBR25CLENBQUMsR0FBRyxJQUFJLE1BQU0xRixDQUFDO0FBQUEsRUFDMUI7QUFDQSxTQUFPO0FBQUEsSUFDTCxhQUFhO0FBQUEsTUFDWCxtQkFBbUI7QUFBQSxNQUNuQixZQUFZOUQsRUFBRSx5QkFBeUI7QUFBQSxJQUN6QztBQUFBLEVBQ0Y7QUFDRixHQUFHaUwsS0FBS2pNLEVBQUksT0FBTztBQUFBLEVBQ2pCLFVBQVVBLEVBQUksUUFBUSxXQUFXO0FBQUEsRUFDakMsZ0JBQWdCQSxFQUFJLFFBQVEsV0FBVztBQUFBLEVBQ3ZDLFVBQVVBLEVBQUksT0FBTztBQUFBLElBQ25CLHNCQUFzQkEsRUFBSSxPQUFPO0FBQUEsSUFDakMsd0JBQXdCQSxFQUFJLE9BQU87QUFBQSxFQUNyQyxDQUFDO0FBQ0gsQ0FBQyxHQUFHa00sS0FBS2xNLEVBQUksT0FBTztBQUFBLEVBQ2xCLFVBQVVBLEVBQUksUUFBUSxZQUFZO0FBQUEsRUFDbEMsZ0JBQWdCQSxFQUFJLFFBQVEsV0FBVztBQUFBLEVBQ3ZDLFVBQVVBLEVBQUksT0FBTztBQUFBLElBQ25CLHNCQUFzQkEsRUFBSSxPQUFPO0FBQUEsSUFDakMsd0JBQXdCQSxFQUFJLE9BQU87QUFBQSxJQUNuQyx3QkFBd0JBLEVBQUksT0FBTyxFQUFFLFFBQVE7QUFBQSxFQUMvQyxDQUFDO0FBQ0gsQ0FBQyxHQUFHbU0sS0FBS25NLEVBQUksS0FBSyxDQUFDLFFBQVEsUUFBUSxXQUFXLFdBQVcsYUFBYSxTQUFTLENBQUMsR0FBR29NLEtBQUtwTSxFQUFJLEtBQUs7QUFBQSxFQUMvRjtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFDRixDQUFDLEdBQUcsRUFBRSxPQUFPcU0sSUFBSSxPQUFPQyxHQUFHLElBQUl4RCxFQUFFLFVBQVUsR0FBR3lELEtBQUt2TSxFQUFJLE9BQU87QUFBQSxFQUM1RCxpQkFBaUJBLEVBQUksT0FBTztBQUFBLEVBQzVCLHVCQUF1QkEsRUFBSSxPQUFPO0FBQUEsRUFDbEMsd0JBQXdCbU07QUFBQSxFQUN4QixtQkFBbUJuTSxFQUFJLE9BQU87QUFDaEMsQ0FBQyxHQUFHd00sS0FBSyw4RUFBOEVDLEtBQUssQ0FBQyxNQUFNO0FBQ2pHLFFBQU0sSUFBSUYsR0FBRyxVQUFVLENBQUM7QUFDeEIsTUFBSSxDQUFDLEVBQUU7QUFDTCxVQUFNRCxHQUFHLHlEQUF5RCxLQUFLLFVBQVUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxJQUFJLE1BQU1FLEVBQUU7QUFDdEcsU0FBTyxFQUFFO0FBQ1gsR0FBR0UsS0FBSyxDQUFDLE1BQU0sS0FBSyxNQUFNLENBQUMsR0FBR0MsS0FBSyxNQUFNLGNBQWMsVUFBVSxtQkFBbUIsT0FBTyxVQUFVQyxLQUFLLFlBQVk7QUFDcEgsRUFBQVAsR0FBRyxrQ0FBa0M7QUFDckMsV0FBUyxJQUFJLEdBQUcsSUFBSSxJQUFJO0FBQ3RCLElBQUFNLEdBQUcsS0FBSyxNQUFNdEksR0FBRyxHQUFHO0FBQ3RCLE1BQUksQ0FBQ3NJLEdBQUc7QUFDTixVQUFNTCxHQUFHLCtCQUErQixHQUFHLElBQUksTUFBTUUsRUFBRTtBQUN6RCxTQUFPSCxHQUFHLCtCQUErQixHQUFHLE9BQU8sU0FBUztBQUM5RCxHQUFHUSxLQUFLLENBQUMsTUFBTTtBQUNiLFFBQU0sRUFBRSxTQUFTLEdBQUcsUUFBUTdMLEdBQUcsYUFBYUksR0FBRyxXQUFXLEdBQUcsTUFBTSxHQUFHLGNBQWMsRUFBRSxJQUFJLEdBQUcsSUFBSXNMLEdBQUcsRUFBRSxpQkFBaUIsQ0FBQztBQUN4SCxTQUFPTCxHQUFHLDJDQUEyQyxFQUFFLElBQUksRUFBRSxHQUFHLElBQUksUUFBUSxDQUFDLE1BQU07QUFDakYsVUFBTSxJQUFJLE1BQU07QUFDZCxNQUFBQSxHQUFHLDRCQUE0QixHQUFHLEVBQUUsb0JBQW9CLFNBQVNyQyxDQUFDLEdBQUcsRUFBRSxPQUFPO0FBQUEsSUFDaEYsR0FBRyxJQUFJLENBQUNFLE1BQU07QUFDWixNQUFBb0MsR0FBRyxrQ0FBa0NwQyxDQUFDLEdBQUcsRUFBRSxFQUFFLFFBQVF6RyxFQUFFLFNBQVMsU0FBUyxFQUFFLENBQUM7QUFBQSxJQUM5RSxHQUFHc0csSUFBSSxDQUFDRyxNQUFNO0FBQ1osTUFBQW9DLEdBQUcsZ0JBQWdCcEMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxRQUFRekcsRUFBRSxTQUFTLFNBQVMsRUFBRSxDQUFDO0FBQUEsSUFDNUQsR0FBR3VHLElBQUksTUFBTTtBQUNYLFFBQUUsRUFBRSxRQUFRdkcsRUFBRSxXQUFXLFNBQVMsRUFBRSxDQUFDO0FBQUEsSUFDdkM7QUFDQSxNQUFFLGlCQUFpQixTQUFTdUcsQ0FBQztBQUM3QixVQUFNQyxJQUFJLENBQUNDLEdBQUc0QyxHQUFHQyxNQUFNO0FBQ3JCLFFBQUUsT0FBTyxHQUFHLEVBQUUsRUFBRSxRQUFRdEosRUFBRSxTQUFTLG1CQUFtQnlHLEdBQUcsU0FBUyxFQUFFLENBQUM7QUFBQSxJQUN2RTtBQUNBLElBQUEwQyxHQUFHLEVBQUU7QUFBQSxNQUNILENBQUMxQyxNQUFNQSxFQUFFO0FBQUEsUUFDUCxXQUFXLEVBQUUscUJBQXFCO0FBQUEsUUFDbEMsYUFBYSxFQUFFLHNCQUFzQjtBQUFBLFFBQ3JDLFFBQVFsSjtBQUFBLFFBQ1IsYUFBYUk7QUFBQSxRQUNiLHFCQUFxQjZJO0FBQUEsUUFDckIsaUJBQWlCO0FBQUEsUUFDakIsU0FBU0Y7QUFBQSxNQUNYLENBQUM7QUFBQSxJQUNILEVBQUUsS0FBSyxDQUFDRyxNQUFNO0FBQ1osTUFBQUEsRUFBRSxpQkFBaUIsR0FBRyxFQUFFLHFCQUFxQixLQUFLLENBQUMsRUFBRSxNQUFNLENBQUM7QUFBQSxJQUM5RCxDQUFDO0FBQUEsRUFDSCxDQUFDO0FBQ0gsR0FBRzhDLEtBQUssQ0FBQyxNQUFNO0FBQ2IsUUFBTSxJQUFJLFVBQVUsYUFBYSxVQUFVLFVBQVUsU0FBUyxVQUFVLFVBQVUsQ0FBQyxJQUFJLFVBQVUsVUFBVWhNLElBQUksS0FBSyxHQUFHSSxJQUFJZ0wsR0FBRyxVQUFVcEwsQ0FBQztBQUN6SSxTQUFPSSxFQUFFLFdBQVdpTCxHQUFHLG9CQUFvQmpMLEVBQUUsSUFBSSxFQUFFLEdBQUdBLEVBQUUsU0FBU2tMLEdBQUcsNEJBQTRCdEwsQ0FBQyx3QkFBd0IsR0FBRztBQUM5SCxHQUFHaU0sS0FBSyxDQUFDLE9BQU8sS0FBSyxPQUFPLFNBQVMsRUFBRSxpQkFBaUIsT0FBTyxRQUFRQyxLQUFLLE9BQU8sR0FBRyxHQUFHbE0sTUFBTTtBQUM3RixRQUFNSSxJQUFJcUwsR0FBRyxDQUFDLEdBQUcsSUFBSSxTQUFTLGNBQWMsS0FBSztBQUNqRCxJQUFFLEtBQUs7QUFDUCxRQUFNLEVBQUUsTUFBTSxHQUFHLFFBQVEsR0FBRyxjQUFjLEVBQUUsSUFBSTlCLEdBQUcsb0JBQW9CO0FBQ3ZFLElBQUUsWUFBWSxDQUFDO0FBQ2YsUUFBTSxJQUFJLE1BQU1rQyxHQUFHO0FBQUEsSUFDakIsU0FBU3pMO0FBQUEsSUFDVCxRQUFRNEwsR0FBR2hNLENBQUM7QUFBQSxJQUNaLGFBQWE7QUFBQSxJQUNiLFdBQVc7QUFBQSxJQUNYLE1BQU07QUFBQSxJQUNOLGNBQWM7QUFBQSxFQUNoQixDQUFDO0FBQ0QsTUFBSSxFQUFFLFFBQVEsR0FBRyxFQUFFLFdBQVd5QyxFQUFFO0FBQzlCLFVBQU0sSUFBSSxNQUFNLHlCQUF5QjtBQUMzQyxNQUFJLEVBQUUsV0FBV0EsRUFBRTtBQUNqQixVQUFNLElBQUksTUFBTSw0QkFBNEI7QUFDOUMsTUFBSSxFQUFFLFdBQVdBLEVBQUUsU0FBUztBQUMxQixRQUFJLENBQUMsRUFBRTtBQUNMLFlBQU0sSUFBSSxNQUFNLG9FQUFvRTtBQUN0RixXQUFPNEksR0FBRyw0QkFBNEIsR0FBRztBQUFBLE1BQ3ZDLGFBQWE7QUFBQSxRQUNYLG9CQUFvQixFQUFFLGtCQUFrQjtBQUFBLE1BQzFDO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRSxJQUFBMUQsR0FBRyxFQUFFLE1BQU07QUFDZixHQUFHLEVBQUUsT0FBT3dFLEdBQUcsT0FBT0MsR0FBRyxJQUFJdEUsRUFBRSxXQUFXLEdBQUcsRUFBRSxPQUFPdUUsR0FBRyxJQUFJdkUsRUFBRSxXQUFXO0FBQzFFOUksRUFBSTtBQUFBLEVBQ0ZBLEVBQUksT0FBTztBQUFBLElBQ1Qsb0JBQW9CQSxFQUFJLE9BQU87QUFBQSxFQUNqQyxDQUFDO0FBQ0gsRUFBRSxPQUFPLENBQUM7QUFDVixNQUFNc04sS0FBSzFFO0FBQUEsRUFDVCxPQUFPO0FBQUEsSUFDTCxTQUFTO0FBQUEsSUFDVCx1QkFBdUI7QUFBQSxJQUN2QixrQkFBa0I1SDtBQUFBLElBQ2xCLGVBQWVJO0FBQUEsSUFDZixjQUFjO0FBQUEsRUFDaEIsTUFBTTtBQUNKLFFBQUlxSjtBQUNKLElBQUEwQyxFQUFFLCtCQUErQixFQUFFLHVCQUF1QixFQUFFLENBQUM7QUFDN0QsVUFBTXZJLElBQUksRUFBRSxrQkFBa0JDLElBQUksTUFBTTZDLEVBQUU5QyxDQUFDO0FBQzNDLElBQUF1SSxFQUFFLDJDQUEyQ3RJLEVBQUUsSUFBSSxHQUFHO0FBQ3RELFVBQU1DLElBQUl5RSxHQUFHdkksR0FBR0ksRUFBRSxJQUFJLGlCQUFpQixHQUFHb0osSUFBSTtBQUFBLE1BQzVDLFlBQVksRUFBRTtBQUFBLE1BQ2QseUJBQXlCO0FBQUEsTUFDekIscUJBQXFCMUY7QUFBQSxNQUNyQixnQkFBZ0I7QUFBQSxRQUNkLFFBQVEsT0FBTyxTQUFTO0FBQUEsTUFDMUI7QUFBQSxJQUNGO0FBQ0EsUUFBSTtBQUNGLE1BQUFxSSxFQUFFLDJDQUEyQyxFQUFFLGlCQUFpQixHQUFHO0FBQ25FLFlBQU0sSUFBSSxNQUFNaEYsR0FBRyxFQUFFLHVCQUF1QjtBQUFBLFFBQzFDLFlBQVksRUFBRTtBQUFBLE1BQ2hCLENBQUM7QUFDRCxVQUFJcUIsR0FBRyxHQUFHcEksRUFBRSxJQUFJLGlCQUFpQixHQUFHeUQsRUFBRSxTQUFTLFNBQVM7QUFDdEQsUUFBQXNJLEVBQUUsOENBQThDdEksRUFBRSxLQUFLLEdBQUc7QUFDMUQsY0FBTWtGLElBQUksTUFBTTFCLEdBQUd6RCxHQUFHNEYsQ0FBQztBQUN2QixlQUFPMkMsRUFBRSwwQ0FBMENwRCxFQUFFLGlCQUFpQixHQUFHLEdBQUcsRUFBRSxNQUFNLFNBQVMsUUFBUUEsRUFBRTtBQUFBLE1BQ3pHLE9BQU87QUFDTCxRQUFBb0QsRUFBRSxvRUFBb0UsRUFBRSxpQkFBaUIsR0FBRztBQUM1RixjQUFNcEQsSUFBSSxNQUFNM0IsR0FBR3hELEdBQUc0RixDQUFDO0FBQ3ZCLGVBQU8yQyxFQUFFLG9DQUFvQyxHQUFHLEVBQUUsTUFBTSxZQUFZLFFBQVFwRCxFQUFFO0FBQUEsTUFDaEY7QUFBQSxJQUNGLFNBQVMsR0FBRztBQUNWLFVBQUksYUFBYTFDLE1BQU0sRUFBRSxxQkFBcUIsU0FBUyxjQUFjLEdBQUc7QUFDdEUsUUFBQThGLEVBQUUsdURBQXVELEdBQUdBLEVBQUUsd0NBQXdDLEVBQUUsU0FBUyxPQUFPO0FBQ3hILGNBQU1wRCxJQUFJeUIsR0FBRyxFQUFFLFNBQVMsT0FBTztBQUMvQixZQUFJekIsR0FBRztBQUNMLFVBQUFvRCxFQUFFLDREQUE0RDtBQUM5RCxnQkFBTUksSUFBSSxNQUFNOUIsR0FBRyxFQUFFLFNBQVMsRUFBRSxTQUFTLE9BQU87QUFDaEQsVUFBQWpCLEVBQUUsZUFBZSxTQUFTK0M7QUFBQSxRQUM1QjtBQUNBLFlBQUl6QixHQUFHLEVBQUUsU0FBUyxPQUFPLEdBQUc7QUFDMUIsVUFBQXFCLEVBQUUsa0VBQWtFO0FBQ3BFLGdCQUFNSSxJQUFJLE1BQU12QixHQUFHLEVBQUUsU0FBUyxFQUFFLFNBQVMsT0FBTztBQUNoRCxVQUFBeEIsRUFBRSxlQUFlLFlBQVkrQztBQUFBLFFBQy9CO0FBQ0EsWUFBSU4sR0FBRyxFQUFFLFNBQVMsT0FBTyxHQUFHO0FBQzFCLFVBQUFFLEVBQUUsMERBQTBEO0FBQzVELGdCQUFNSSxJQUFJLE1BQU1MO0FBQUEsWUFDZGxNLEVBQUUsRUFBRSxPQUFPO0FBQUEsWUFDWCxFQUFFLFNBQVM7QUFBQSxZQUNYNkQsRUFBRTtBQUFBLFVBQ0o7QUFDQSxVQUFBMkYsRUFBRSxlQUFlLFFBQVErQztBQUFBLFFBQzNCO0FBQ0EsY0FBTXJELElBQUksTUFBTXRDLEdBQUdoRCxHQUFHNEYsQ0FBQztBQUN2QixRQUFBMkMsRUFBRSwwQkFBMEJqRCxDQUFDO0FBQzdCLGNBQU00QyxNQUFNckMsSUFBSSxFQUFFLFNBQVMsWUFBWSxPQUFPLFNBQVNBLEVBQUUsd0JBQXdCLE9BQU87QUFDeEYsUUFBQVYsSUFBSW9ELEVBQUUsaUVBQWlFLElBQUlMLEtBQUtLLEVBQUUseUJBQXlCLEdBQUcsTUFBTUssR0FBR3RELENBQUMsTUFBTWlELEVBQUUseUJBQXlCLEdBQUcsTUFBTU0sR0FBR3ZELEdBQUcsRUFBRSxPQUFPO0FBQ2pMLGNBQU02QyxJQUFJN0MsRUFBRTtBQUNaLFlBQUlyRixFQUFFLFNBQVMsU0FBUztBQUN0QixVQUFBc0ksRUFBRSx3Q0FBd0NKLENBQUMsR0FBRztBQUM5QyxnQkFBTVEsSUFBSSxNQUFNekYsRUFBRWxELEdBQUc7QUFBQSxZQUNuQixjQUFjQyxFQUFFO0FBQUEsWUFDaEIsbUJBQW1Ca0k7QUFBQSxVQUNyQixDQUFDO0FBQ0QsVUFBQUksRUFBRSxrREFBa0RJLENBQUM7QUFDckQsZ0JBQU1HLElBQUl6RSxHQUFHc0UsQ0FBQztBQUNkLGlCQUFPSixFQUFFLDBDQUEwQ08sRUFBRSxpQkFBaUIsR0FBRyxHQUFHLEVBQUUsTUFBTSxTQUFTLFFBQVFBLEVBQUU7QUFBQSxRQUN6RyxPQUFPO0FBQ0wsVUFBQVAsRUFBRSx3Q0FBd0NMLElBQUksV0FBVyxLQUFLLEdBQUc7QUFDakUsZ0JBQU1TLElBQUksTUFBTW5GLEdBQUd4RCxHQUFHO0FBQUEsWUFDcEIsR0FBRzRGO0FBQUEsWUFDSCxtQkFBbUJ1QztBQUFBLFlBQ25CLDJCQUEyQkQ7QUFBQSxVQUM3QixDQUFDO0FBQ0QsaUJBQU9LLEVBQUUsb0NBQW9DLEdBQUcsRUFBRSxNQUFNLFlBQVksUUFBUUksRUFBRTtBQUFBLFFBQ2hGO0FBQUEsTUFDRjtBQUNBLFlBQU1ILEdBQUcsdUNBQXVDLEdBQUdBLEdBQUcsQ0FBQyxHQUFHO0FBQUEsSUFDNUQ7QUFBQSxFQUNGO0FBQ0YsR0FBR08sS0FBSyxDQUFDLE1BQU07QUFDYixRQUFNLElBQUksRUFBRSxzQkFBc0IsS0FBSyxDQUFDM00sTUFBTUEsRUFBRSxTQUFTLFlBQVk7QUFDckUsTUFBSSxDQUFDO0FBQ0gsVUFBTSxJQUFJLE1BQU0sNEJBQTRCO0FBQzlDLFNBQU9nRCxHQUFHLE1BQU0sQ0FBQztBQUNuQixHQUFHNEosS0FBSyxDQUFDLDZCQUE2QixPQUFPLEdBQUdDLEtBQUssQ0FBQyxNQUFNO0FBQzFELFFBQU0sSUFBSSxFQUFFLHNCQUFzQixLQUFLLENBQUM3TSxNQUFNNE0sR0FBRyxTQUFTNU0sRUFBRSxJQUFJLENBQUM7QUFDakUsTUFBSSxDQUFDO0FBQ0gsVUFBTSxJQUFJLE1BQU0sNEJBQTRCO0FBQzlDLFNBQU8yQyxHQUFHLE1BQU0sQ0FBQztBQUNuQixHQUFHOEosS0FBSyxPQUFPLEdBQUcsTUFBTTtBQUN0QixRQUFNek0sSUFBSTZNLEdBQUcsQ0FBQztBQUNkLE1BQUk3TSxFQUFFLGlCQUFpQixnQkFBZ0I7QUFDckMsSUFBQW1NLEVBQUUsbUNBQW1DO0FBQ3JDO0FBQUEsRUFDRjtBQUNBLEVBQUFBLEVBQUUsaUNBQWlDbk0sRUFBRSxZQUFZLEdBQUc7QUFDcEQsUUFBTSxFQUFFLFFBQVFJLEVBQUUsSUFBSSxNQUFNMEosR0FBRyxFQUFFLEtBQUs5SixFQUFFLGNBQWMsU0FBUyxFQUFFLENBQUM7QUFDbEUsTUFBSW1NLEVBQUUseUNBQXlDL0wsQ0FBQyxHQUFHLEdBQUdBLE1BQU1xQyxFQUFFO0FBQzVELFVBQU0sSUFBSSxNQUFNLDRCQUE0QjtBQUM5QyxNQUFJckMsTUFBTXFDLEVBQUU7QUFDVixVQUFNLElBQUksTUFBTSx5QkFBeUI7QUFDN0MsR0FBRytKLEtBQUssT0FBTyxNQUFNO0FBQ25CLFFBQU0sSUFBSUcsR0FBRyxDQUFDO0FBQ2QsRUFBQU4sR0FBRywyQ0FBMkMsRUFBRSxjQUFjLFVBQVUsR0FBRyxDQUFDLENBQUMsTUFBTSxHQUFHLE1BQU0zSSxHQUFHLENBQUMsR0FBRzJJLEdBQUcsMENBQTBDO0FBQ2xKLEdBQUdTLElBQUk5TixFQUFJLEtBQUssQ0FBQyxVQUFVLGFBQWEsZUFBZSxDQUFDO0FBQ3hEOE4sRUFBRSxLQUFLO0FBQ1AsTUFBTSxFQUFFLE9BQU9DLEdBQUcsT0FBT0MsR0FBRyxJQUFJbEYsRUFBRSxXQUFXLEdBQUdtRixLQUFLak8sRUFBSSxPQUFPO0FBQUEsRUFDOUQsVUFBVUEsRUFBSSxNQUFNLENBQUNBLEVBQUksUUFBUSxXQUFXLEdBQUdBLEVBQUksUUFBUSxZQUFZLENBQUMsQ0FBQztBQUFBLEVBQ3pFLGdCQUFnQkEsRUFBSSxRQUFRLFFBQVE7QUFBQSxFQUNwQyxVQUFVQSxFQUFJLE9BQU87QUFBQSxJQUNuQixXQUFXQSxFQUFJLE9BQU87QUFBQSxFQUN4QixDQUFDO0FBQ0gsQ0FBQyxHQUFHa08sS0FBS3JGO0FBQUEsRUFDUCxPQUFPLEVBQUUsU0FBUyxHQUFHLGVBQWUsRUFBRSxNQUFNO0FBQzFDLElBQUFrRixFQUFFLGlEQUFpRDtBQUNuRCxVQUFNL00sSUFBSWtJLEVBQUUsRUFBRSx3QkFBd0IrRSxFQUFFO0FBQ3hDLElBQUFGLEVBQUUsZ0NBQWdDO0FBQ2xDLFVBQU0zTSxJQUFJLEVBQUUsa0JBQWtCLElBQUksTUFBTXNHLEVBQUV0RyxDQUFDLEdBQUcsSUFBSSxFQUFFLFNBQVM7QUFDN0QsSUFBQTJNLEVBQUUsZ0NBQWdDO0FBQ2xDLFVBQU0sSUFBSSxNQUFNN0YsR0FBRzlHLEdBQUcsRUFBRSxPQUFPLEdBQUcsTUFBTSxHQUFHLElBQUksTUFBTW1EO0FBQUEsTUFDbkR2RCxFQUFFLFNBQVM7QUFBQSxNQUNYLEVBQUU7QUFBQSxNQUNGLEVBQUU7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUNBLElBQUErTSxFQUFFLDhCQUE4QjtBQUNoQyxVQUFNLElBQUksTUFBTSxFQUFFLGVBQWU7QUFDakMsUUFBSSxNQUFNO0FBQ1IsYUFBT0MsR0FBRyw4QkFBOEIsR0FBRyxFQUFFLGFBQWEsSUFBSSxRQUFRLCtCQUErQjtBQUN2RyxJQUFBRCxFQUFFLDZEQUE2RCxDQUFDO0FBQ2hFLFVBQU0sSUFBSSxDQUFDLEdBQUdoRSxNQUFNSSxFQUFFLFNBQVMsSUFBSTtBQUFBLE1BQ2pDLFNBQVM7QUFBQSxNQUNULHVCQUF1QmdFLEdBQUcsRUFBRSx3QkFBd0IsQ0FBQztBQUFBLE1BQ3JELGtCQUFrQm5KLEdBQUUsRUFBRSxPQUFPO0FBQUEsTUFDN0IsZUFBZTtBQUFBLE1BQ2YsY0FBYyxFQUFFLFVBQVUsR0FBRyx3QkFBd0IrRSxLQUFLLE9BQU8sU0FBU0EsRUFBRSx1QkFBdUI7QUFBQSxNQUNuRyxZQUFZO0FBQUEsUUFDVixXQUFXK0QsRUFBRSxLQUFLO0FBQUEsUUFDbEIsSUFBSTtBQUFBLFFBQ0osYUFBYTtBQUFBLFFBQ2Isb0JBQW9CLEVBQUUsVUFBVSxFQUFFLFVBQVUsV0FBVyxFQUFFLFVBQVU7QUFBQSxRQUNuRSxXQUFXO0FBQUEsTUFDYjtBQUFBLElBQ0YsQ0FBQztBQUNELFdBQU87QUFBQSxNQUNMLFdBQVdBLEVBQUUsS0FBSztBQUFBLE1BQ2xCLGFBQWE7QUFBQSxNQUNiLElBQUk7QUFBQSxNQUNKLG9CQUFvQjtBQUFBLFFBQ2xCLFVBQVUsRUFBRTtBQUFBLFFBQ1osV0FBVyxFQUFFO0FBQUEsTUFDZjtBQUFBLE1BQ0EsV0FBVztBQUFBLElBQ2I7QUFBQSxFQUNGO0FBQ0YsR0FBR00sS0FBS3hGO0FBQUEsRUFDTixPQUFPO0FBQUEsSUFDTCxTQUFTO0FBQUEsSUFDVCx1QkFBdUI7QUFBQSxJQUN2QixrQkFBa0I1SDtBQUFBLElBQ2xCLGVBQWVJO0FBQUEsSUFDZixjQUFjO0FBQUEsSUFDZCxZQUFZO0FBQUEsRUFDZCxNQUFNO0FBQ0osUUFBSTJNLEVBQUUsMkJBQTJCLEdBQUcsRUFBRSxhQUFhLEVBQUU7QUFDbkQsWUFBTSxJQUFJLE1BQU0sK0JBQStCLEVBQUUsUUFBUSxTQUFTLEVBQUUsUUFBUSxFQUFFO0FBQ2hGLFVBQU0sSUFBSSxFQUFFLGtCQUFrQixJQUFJLEVBQUU7QUFDcEMsUUFBSSxLQUFLLFFBQVEsRUFBRSx3QkFBd0I7QUFDekMsWUFBTTdELElBQUksRUFBRTtBQUNaLE1BQUE2RCxFQUFFLDZCQUE2QjdELENBQUMsR0FBR21FLEdBQUcsR0FBR25FLEVBQUUsUUFBUUEsRUFBRSxTQUFTQSxFQUFFLHNCQUFzQjtBQUFBLElBQ3hGO0FBQ0EsSUFBQTZELEVBQUUsc0JBQXNCLEdBQUcsRUFBRSxLQUFLO0FBQ2xDLFVBQU0sSUFBSSxNQUFNdkosR0FBRyxDQUFDO0FBQ3BCLElBQUF1SixFQUFFLDBCQUEwQixDQUFDLEdBQUdBLEVBQUUsdUNBQXVDO0FBQ3pFLFVBQU0sSUFBSU8sR0FBR3ROLEdBQUcsQ0FBQyxHQUFHLElBQUl1SSxHQUFHLEdBQUduSSxFQUFFLElBQUksaUJBQWlCO0FBQ3JELElBQUEyTSxFQUFFLGdEQUFnRCxDQUFDO0FBQ25ELFVBQU1oRSxJQUFJLE1BQU1sQyxHQUFHLEdBQUc7QUFBQSxNQUNwQixRQUFRO0FBQUEsTUFDUix1QkFBdUI7QUFBQSxJQUN6QixDQUFDLEdBQUdtQyxJQUFJdUUsR0FBR3hFLENBQUM7QUFDWixJQUFBZ0UsRUFBRSw4QkFBOEIsR0FBRyxNQUFNdEosR0FBR3VGLEdBQUcsQ0FBQztBQUNoRCxVQUFNQyxJQUFJLE1BQU12QyxFQUFFLENBQUM7QUFDbkIsUUFBSXVDLEVBQUUsU0FBUyxTQUFTO0FBQ3RCLE1BQUE4RCxFQUFFLHNDQUFzQztBQUN4QyxZQUFNN0QsSUFBSSxNQUFNcEMsRUFBRSxHQUFHO0FBQUEsUUFDbkIsY0FBY21DLEVBQUU7QUFBQSxNQUNsQixDQUFDO0FBQ0QsYUFBTyxFQUFFLE1BQU0sU0FBUyxRQUFRaEIsR0FBR2lCLENBQUMsRUFBRTtBQUFBLElBQ3hDLE9BQU87QUFDTCxNQUFBNkQsRUFBRSx3QkFBd0I7QUFDMUIsWUFBTTdELElBQUk7QUFBQSxRQUNSLGNBQWNELEVBQUU7QUFBQSxRQUNoQixlQUFlO0FBQUEsVUFDYixlQUFlLEVBQUU7QUFBQSxRQUNuQjtBQUFBLFFBQ0EscUJBQXFCLEVBQUUsRUFBRSxVQUFVO0FBQUEsUUFDbkMsb0JBQW9CLEVBQUUsRUFBRSxTQUFTO0FBQUEsUUFDakMsZ0JBQWdCLEVBQUUsRUFBRSxLQUFLO0FBQUEsUUFDekIsbUJBQW1CLEVBQUUsRUFBRSxRQUFRO0FBQUEsUUFDL0Isa0JBQWtCLEVBQUUsRUFBRSxPQUFPO0FBQUEsUUFDN0IsZ0JBQWdCLEVBQUUsRUFBRSxjQUFjO0FBQUEsUUFDbEMsWUFBWUEsRUFBRTtBQUFBLFFBQ2QsbUJBQW1CQSxFQUFFO0FBQUEsUUFDckIsZUFBZTtBQUFBLFFBQ2YseUJBQXlCO0FBQUEsTUFDM0I7QUFDQSxhQUFPLEVBQUUsTUFBTSxZQUFZLFFBQVEsTUFBTTNCLEdBQUcsR0FBRzRCLENBQUMsRUFBRTtBQUFBLElBQ3BEO0FBQUEsRUFDRjtBQUNGLEdBQUdvRSxLQUFLLENBQUMsR0FBRyxNQUFNO0FBQ2hCLE1BQUk5RCxHQUFHQyxHQUFHRixHQUFHUjtBQUNiLFFBQU0vSSxJQUFJLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQ0ksR0FBRyxHQUFHdUQsQ0FBQyxNQUFNOEYsS0FBS0QsSUFBSSxFQUFFLGNBQWMsT0FBTyxTQUFTQSxFQUFFLEtBQUssTUFBTSxPQUFPLFNBQVNDLEVBQUUsTUFBTSxLQUFLLE1BQU0sQ0FBQyxHQUFHN0YsSUFBSUQsRUFBRSxLQUFLLEdBQUcsS0FBSyxRQUFRRSxLQUFLa0YsS0FBS1EsSUFBSSxFQUFFLGtCQUFrQixPQUFPLFNBQVNBLEVBQUUsb0JBQW9CLE9BQU8sU0FBU1IsRUFBRSxTQUFTakYsSUFBSSxFQUFFO0FBQ25RLFNBQU85RCxFQUFFLEVBQUUsVUFBVSxJQUFJQSxFQUFFLEVBQUUsVUFBVSxLQUFLSSxLQUFLLGVBQWVKLEVBQUUsRUFBRSxTQUFTLElBQUlBLEVBQUUsRUFBRSxTQUFTLEtBQUs0RCxLQUFLLGVBQWU1RCxFQUFFLEVBQUUsS0FBSyxJQUFJQSxFQUFFLEVBQUUsS0FBSyxLQUFLLEVBQUUsY0FBYyw4QkFBOEJBLEVBQUUsRUFBRSxRQUFRLElBQUlBLEVBQUUsRUFBRSxRQUFRLE1BQU02RCxLQUFLLE9BQU8sU0FBU0EsRUFBRSxpQkFBaUJDLEtBQUssT0FBTyxTQUFTQSxFQUFFLGVBQWUsU0FBUzlELEVBQUUsRUFBRSxPQUFPLElBQUlBLEVBQUUsRUFBRSxPQUFPLE1BQU02RCxLQUFLLE9BQU8sU0FBU0EsRUFBRSxhQUFhQyxLQUFLLE9BQU8sU0FBU0EsRUFBRSxZQUFZLE1BQU1pSixFQUFFLHNCQUFzQi9NLENBQUMsR0FBR0E7QUFDcGMsR0FBR3FOLEtBQUssQ0FBQyxHQUFHLEdBQUdyTixHQUFHSSxNQUFNO0FBQ3RCLElBQUUsT0FBTztBQUFBLElBQ1AsT0FBTztBQUFBLE1BQ0wsUUFBUSxFQUFFO0FBQUEsTUFDVixPQUFPO0FBQUEsTUFDUCxTQUFTSjtBQUFBLElBQ1g7QUFBQSxJQUNBLFVBQVUsRUFBRTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBSVosVUFBVUk7QUFBQSxFQUNaLENBQUM7QUFDSCxHQUFHbU4sS0FBSyxDQUFDLE1BQU07QUFDYixNQUFJLEVBQUUsc0JBQXNCLFdBQVc7QUFDckMsVUFBTSxJQUFJLE1BQU07QUFBQSxlQUNMLEVBQUUsc0JBQXNCLE1BQU0sd0JBQXdCO0FBQ25FLFNBQU90SyxHQUFHLE1BQU0sRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO0FBQzVDLEdBQUcsRUFBRSxPQUFPdUssR0FBRyxPQUFPQyxHQUFHLElBQUkzRixFQUFFLGVBQWUsR0FBRzRGLEtBQUsxTyxFQUFJLE9BQU87QUFBQSxFQUMvRCxnQkFBZ0JBLEVBQUksUUFBUSxRQUFRO0FBQUEsRUFDcEMsVUFBVUEsRUFBSSxRQUFRLFFBQVE7QUFDaEMsQ0FBQztBQUNEQSxFQUFJO0FBQUEsRUFDRkEsRUFBSSxPQUFPO0FBQUEsSUFDVCxtQkFBbUJBLEVBQUksT0FBTztBQUFBLElBQzlCLGNBQWNBLEVBQUksT0FBTztBQUFBLEVBQzNCLENBQUM7QUFDSCxFQUFFLE9BQU8sQ0FBQztBQUNWLE1BQU0yTyxLQUFLL0Y7QUFBQSxFQUNULE9BQU87QUFBQSxJQUNMLFNBQVM7QUFBQSxJQUNULHVCQUF1QjtBQUFBLElBQ3ZCLGtCQUFrQjVIO0FBQUEsSUFDbEIsZUFBZUk7QUFBQSxJQUNmLGNBQWM7QUFBQSxFQUNoQixNQUFNO0FBQ0osUUFBSXdOLEdBQUdDO0FBQ1AsSUFBQUwsRUFBRSwrQkFBK0I7QUFDakMsVUFBTTVKLElBQUksRUFBRSxrQkFBa0JDLElBQUksTUFBTTZDLEVBQUU5QyxDQUFDO0FBQzNDLElBQUE0SixFQUFFLGtCQUFrQjtBQUNwQixVQUFNMUosSUFBSTRKLEdBQUcsTUFBTSxDQUFDO0FBQ3BCLElBQUFGLEVBQUUsa0NBQWtDO0FBQ3BDLFVBQU1oRSxJQUFJLEtBQUssT0FBTyxTQUFTLEVBQUUsVUFBVUMsSUFBSWxCO0FBQUEsTUFDN0N2STtBQUFBLE1BQ0FJLEVBQUUsSUFBSTtBQUFBLE1BQ05vSixLQUFLLE9BQU8sU0FBU0EsRUFBRTtBQUFBLElBQ3pCLEdBQUdELElBQUlwQixHQUFHc0IsQ0FBQztBQUNYLElBQUErRCxFQUFFLGtDQUFrQzNKLEVBQUUsSUFBSSxFQUFFO0FBQzVDLFVBQU1rRixJQUFJOUosR0FBRyxHQUFHK0osSUFBSW5GLEVBQUUsU0FBUyxTQUFTb0YsSUFBSTtBQUFBLE1BQzFDLGtCQUFrQm5GLEVBQUU7QUFBQSxNQUNwQix5QkFBeUJBO0FBQUEsTUFDekIsb0JBQW9Ca0Y7QUFBQSxNQUNwQiwwQkFBMEJBLElBQUk7QUFBQTtBQUFBLFFBRTVCLFlBQVluRixFQUFFO0FBQUEsUUFDZCw2QkFBNkJBLEVBQUU7QUFBQSxNQUNqQyxJQUFJO0FBQUEsTUFDSiw2QkFBNkI7QUFBQSxRQUMzQiwwQkFBMEIsQ0FBQyxHQUFHK0osSUFBSSxLQUFLLE9BQU8sU0FBUyxFQUFFLGFBQWEsUUFBUUEsRUFBRTtBQUFBLFFBQ2hGLGtDQUFrQzdFO0FBQUEsTUFDcEM7QUFBQSxNQUNBLEdBQUdRO0FBQUEsSUFDTCxHQUFHTCxJQUFJLElBQUksSUFBSSwwQkFBMEIsRUFBRSxPQUFPLEVBQUUsU0FBUyxHQUFHNEMsSUFBSSxLQUFLLEtBQUssVUFBVTdDLENBQUMsQ0FBQyxHQUFHLElBQUksSUFBSSxnQkFBZ0I7QUFBQSxNQUNuSCxJQUFJcEYsRUFBRTtBQUFBLE1BQ04sR0FBR2lJO0FBQUEsSUFDTCxDQUFDLEdBQUcsSUFBSSxHQUFHNUMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDO0FBQzVCLFNBQUsyRSxJQUFLLEtBQUssT0FBTyxTQUFTLEVBQUUsYUFBYSxRQUFRQSxFQUFHO0FBQ3ZELFlBQU1MLEVBQUUsc0NBQXNDLEdBQUcsT0FBTyxTQUFTLE9BQU8sR0FBRyxNQUFNbkssR0FBRyxLQUFLLEdBQUcsR0FBRyxJQUFJLE1BQU0sc0VBQXNFO0FBQ2pMLElBQUFtSyxFQUFFLG1DQUFtQyxHQUFHQSxFQUFFLDBCQUEwQjtBQUNwRSxVQUFNZCxJQUFJLE1BQU16QztBQUFBLE1BQ2Q7QUFBQSxNQUNBckc7QUFBQSxNQUNBbUY7QUFBQSxNQUNBO0FBQUEsSUFDRjtBQUNBLElBQUF5RSxFQUFFLHNCQUFzQmQsQ0FBQztBQUN6QixVQUFNb0IsSUFBSXhELEdBQUdvQyxFQUFFLElBQUksR0FBR3FCLEtBQUl4RCxHQUFHbUMsRUFBRSxNQUFNLE1BQU07QUFDM0MsUUFBSSxDQUFDcUI7QUFDSCxZQUFNTixHQUFHLGtEQUFrRGYsRUFBRSxJQUFJLEdBQUcsSUFBSSxNQUFNLCtDQUErQztBQUMvSCxJQUFBYyxFQUFFLDBDQUEwQ00sQ0FBQyxFQUFFO0FBQy9DLFVBQU1FLEtBQUksTUFBTWxILEVBQUVsRCxHQUFHO0FBQUEsTUFDbkIsY0FBY0MsRUFBRTtBQUFBLE1BQ2hCLGFBQWFpSztBQUFBLE1BQ2IscUJBQXFCOUUsSUFBSStFLEtBQUk7QUFBQSxJQUMvQixDQUFDO0FBQ0QsUUFBSVAsRUFBRSwrQkFBK0JRLEVBQUMsR0FBR25LLEVBQUUsU0FBUztBQUNsRCxhQUFPO0FBQUEsUUFDTCxNQUFNO0FBQUEsUUFDTixRQUFRO0FBQUEsVUFDTixtQkFBbUJtSyxHQUFFLGdCQUFnQixDQUFDLEVBQUU7QUFBQSxRQUMxQztBQUFBLE1BQ0Y7QUFDRixRQUFJLENBQUNBLEdBQUU7QUFDTCxZQUFNUCxHQUFHLG1EQUFtRE8sRUFBQyxHQUFHLElBQUksTUFBTSxnRUFBZ0U7QUFDNUksV0FBTztBQUFBLE1BQ0wsTUFBTTtBQUFBLE1BQ04sUUFBUUEsR0FBRTtBQUFBLElBQ1o7QUFBQSxFQUNGO0FBQ0YsR0FBR0MsS0FBSyxDQUFDO0FBQUEsRUFDUCxTQUFTO0FBQUEsRUFDVCxtQkFBbUI7QUFBQSxFQUNuQixjQUFjak87QUFBQSxFQUNkLFlBQVlJO0FBQUEsRUFDWixnQkFBZ0I7QUFBQSxFQUNoQix3QkFBd0I7QUFBQSxFQUN4QixTQUFTO0FBQ1gsTUFBTTtBQUNKLE1BQUkySSxHQUFHQztBQUNQLFFBQU1sRixNQUFNaUYsSUFBSSxLQUFLLE9BQU8sU0FBUyxFQUFFLFdBQVcsT0FBTyxTQUFTQSxFQUFFLGdCQUFnQixLQUFLLE9BQU8sU0FBUyxFQUFFLGVBQWUsR0FBR1MsSUFBSSxLQUFLLElBQUkxRixJQUFJLEtBQUssQ0FBQyxHQUFHMkYsT0FBT1QsSUFBSSxLQUFLLE9BQU8sU0FBUyxFQUFFLFdBQVcsT0FBTyxTQUFTQSxFQUFFLGNBQWMsS0FBSyxPQUFPLFNBQVMsRUFBRSxhQUFhLEVBQUUsVUFBVSxZQUFZLEdBQUdPLElBQUk7QUFBQSxJQUNyUyxZQUFZO0FBQUEsSUFDWixpQkFBaUI7QUFBQSxJQUNqQix1QkFBdUI7QUFBQSxNQUNyQjtBQUFBLFFBQ0UsTUFBTTtBQUFBLFFBQ04sWUFBWTtBQUFBLFVBQ1Ysb0JBQW9CLENBQUMsWUFBWSxnQkFBZ0I7QUFBQSxVQUNqRCxxQkFBcUIsQ0FBQyxRQUFRLFlBQVksV0FBVyxPQUFPLGNBQWMsTUFBTTtBQUFBLFVBQ2hGLHdCQUF3QjtBQUFBLFVBQ3hCLDBCQUEwQjtBQUFBLFlBQ3hCLFFBQVE7QUFBQSxVQUNWO0FBQUEsVUFDQSxrQkFBa0I7QUFBQSxVQUNsQixtQkFBbUI7QUFBQSxRQUNyQjtBQUFBLFFBQ0EsMkJBQTJCO0FBQUEsVUFDekIsTUFBTTtBQUFBLFVBQ04sWUFBWTtBQUFBLFlBQ1YsU0FBUztBQUFBLFlBQ1QsbUJBQW1CO0FBQUEsVUFDckI7QUFBQSxRQUNGO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFBQSxJQUNBLGVBQWU7QUFBQSxJQUNmLGNBQWM7QUFBQTtBQUFBO0FBQUEsTUFHWixZQUFZbkosS0FBSztBQUFBLE1BQ2pCLGNBQWNKO0FBQUEsSUFDaEI7QUFBQSxJQUNBLGlCQUFpQjtBQUFBLE1BQ2YsYUFBYTtBQUFBLE1BQ2IsY0FBY3lKO0FBQUEsTUFDZCxrQkFBa0IsS0FBSyxRQUFRLEVBQUUsVUFBVSxjQUFjO0FBQUEsTUFDekQsWUFBWUQsRUFBRSxRQUFRLENBQUM7QUFBQSxJQUN6QjtBQUFBLEVBQ0Y7QUFDQSxTQUFPLEtBQUssUUFBUSxFQUFFLDBCQUEwQixFQUFFLEdBQUdELEdBQUcsR0FBRyxFQUFFLHdCQUF3QixJQUFJQTtBQUMzRixHQUFHMkUsS0FBSyxNQUFNLElBQUksUUFBUSxDQUFDLEdBQUcsTUFBTTtBQUNsQyxRQUFNbE8sSUFBSSxTQUFTLGNBQWMsUUFBUTtBQUN6QyxFQUFBQSxFQUFFLE1BQU0seUNBQXlDQSxFQUFFLFFBQVEsSUFBSUEsRUFBRSxTQUFTLE1BQU0sRUFBRSxHQUFHQSxFQUFFLFVBQVUsTUFBTSxFQUFFLElBQUksTUFBTSwrQkFBK0IsQ0FBQyxHQUFHLFNBQVMsS0FBSyxZQUFZQSxDQUFDO0FBQ25MLENBQUM7QUFDRCxJQUFJbU8sS0FBSztBQUNULE1BQU1DLEtBQUssQ0FBQyxNQUFNLE1BQU03TyxNQUFNLE1BQU0sT0FBTyxTQUFTLFNBQVMsZUFBZSxRQUFROE8sS0FBSyxDQUFDLEdBQUcsTUFBTTtBQUNqRyxRQUFNck8sSUFBSW9PLEdBQUcsQ0FBQztBQUNkLFNBQU9ELE9BQU8sU0FBU0EsS0FBSyxJQUFJLE9BQU8sT0FBTyxTQUFTLElBQUksZUFBZTtBQUFBLElBQ3hFLGFBQWFuTztBQUFBLElBQ2IsY0FBYyxFQUFFO0FBQUEsRUFDbEIsQ0FBQyxJQUFJbU87QUFDUCxHQUFHRyxLQUFLLENBQUMsTUFBTTtBQUNiLFFBQU0sSUFBSSxFQUFFLHNCQUFzQixLQUFLLENBQUN0TyxNQUFNQSxFQUFFLFNBQVMsMkJBQTJCO0FBQ3BGLFNBQU8sSUFBSTRDLEdBQUcsTUFBTSxDQUFDLElBQUk7QUFDM0IsR0FBRzJMLEtBQUssQ0FBQyxHQUFHLE1BQU07QUFDaEIsTUFBSTVLLEdBQUdDLEdBQUdDLEdBQUdDO0FBQ2IsUUFBTTlELElBQUksRUFBRSxHQUFHLEVBQUUsR0FBR0ksS0FBS3dELEtBQUtELElBQUksRUFBRSxzQkFBc0IsT0FBTyxTQUFTQSxFQUFFLFNBQVMsT0FBTyxTQUFTQyxFQUFFO0FBQ3ZHLE1BQUl4RCxHQUFHO0FBQ0wsVUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0wRCxLQUFLRCxJQUFJekQsRUFBRSxTQUFTLE9BQU8sU0FBU3lELEVBQUUsS0FBSyxNQUFNLE9BQU8sU0FBU0MsRUFBRSxNQUFNLEtBQUssTUFBTSxDQUFDLEdBQUcsSUFBSSxFQUFFLEtBQUssR0FBRyxLQUFLO0FBQy9ILElBQUE5RCxFQUFFLEVBQUUsS0FBSyxJQUFJQSxFQUFFLEVBQUUsS0FBSyxLQUFLLEVBQUUsU0FBUyw4QkFBOEJBLEVBQUUsRUFBRSxPQUFPLElBQUlBLEVBQUUsRUFBRSxPQUFPLEtBQUtJLEVBQUUsZUFBZSxNQUFNSixFQUFFLEVBQUUsT0FBTyxJQUFJQSxFQUFFLEVBQUUsT0FBTyxLQUFLSSxFQUFFLFlBQVksSUFBSUosRUFBRSxFQUFFLElBQUksSUFBSUEsRUFBRSxFQUFFLElBQUksS0FBS0ksRUFBRSxZQUFZLElBQUlKLEVBQUUsRUFBRSxRQUFRLElBQUlBLEVBQUUsRUFBRSxRQUFRLEtBQUtJLEVBQUUsY0FBYyxTQUFTSixFQUFFLEVBQUUsS0FBSyxJQUFJQSxFQUFFLEVBQUUsS0FBSyxLQUFLSSxFQUFFLHNCQUFzQixJQUFJSixFQUFFLEVBQUUsVUFBVSxJQUFJQSxFQUFFLEVBQUUsVUFBVSxLQUFLLEtBQUssZUFBZUEsRUFBRSxFQUFFLFNBQVMsSUFBSUEsRUFBRSxFQUFFLFNBQVMsS0FBSyxLQUFLO0FBQUEsRUFDMWE7QUFDQSxTQUFPQTtBQUNULEdBQUcsRUFBRSxPQUFPd08sR0FBRyxPQUFPQyxHQUFHLElBQUkzRyxFQUFFLGdCQUFnQixHQUFHNEcsS0FBSzdHO0FBQUEsRUFDckQsT0FBTyxFQUFFLFNBQVMsR0FBRyxlQUFlLEVBQUUsTUFBTTtBQUMxQyxRQUFJa0IsR0FBR0M7QUFDUCxVQUFNaEosSUFBSTtBQUFBLE1BQ1IsV0FBVzhNLEVBQUUsS0FBSztBQUFBLE1BQ2xCLGFBQWE7QUFBQSxNQUNiLFdBQVc7QUFBQSxNQUNYLFdBQVcsWUFBWTtBQUFBLE1BQ3ZCO0FBQUEsSUFDRixHQUFHMU0sSUFBSThILEVBQUUsRUFBRSx3QkFBd0JnRCxFQUFFO0FBQ3JDLFFBQUksQ0FBQzlLO0FBQ0gsYUFBT0o7QUFDVCxJQUFBd08sRUFBRSxrQkFBa0JwTyxDQUFDO0FBQ3JCLFVBQU11RCxJQUFJdkQsRUFBRTtBQUNaLFFBQUksQ0FBQ3VELEVBQUU7QUFDTCxhQUFPOEssR0FBRyxtREFBbUQsR0FBR3pPO0FBQ2xFLFFBQUl3TyxFQUFFLDJCQUEyQixHQUFHLE1BQU1OLEdBQUcsR0FBRyxHQUFHbEYsS0FBS0QsSUFBSSxPQUFPLFdBQVcsT0FBTyxTQUFTQSxFQUFFLGFBQWEsUUFBUUMsRUFBRTtBQUNySCxhQUFPeUYsR0FBRyxvQ0FBb0MsR0FBR3pPO0FBQ25ELFFBQUlvTyxHQUFHLEVBQUUsT0FBTyxNQUFNLGdCQUFnQixDQUFDekssRUFBRTtBQUN2QyxhQUFPOEssR0FBRywrREFBK0QsR0FBR3pPO0FBQzlFLElBQUF3TyxFQUFFLHlCQUF5QixPQUFPLE9BQU8sUUFBUTtBQUNqRCxRQUFJO0FBQ0YsWUFBTXZGLElBQUlnRixHQUFHO0FBQUEsUUFDWCxTQUFTO0FBQUEsUUFDVCxtQkFBbUJ0SyxFQUFFO0FBQUEsUUFDckIsY0FBY0EsRUFBRTtBQUFBLFFBQ2hCLFlBQVlBLEVBQUUsMEJBQTBCO0FBQUE7QUFBQSxRQUV4QyxnQkFBZ0I7QUFBQSxVQUNkLFlBQVk7QUFBQSxVQUNaLFVBQVU7QUFBQSxRQUNaO0FBQUEsTUFDRixDQUFDLEdBQUcsRUFBRSxRQUFRLEVBQUUsSUFBSSxNQUFNMEssR0FBRyxFQUFFLFNBQVNwRixDQUFDLEVBQUU7QUFBQSxRQUN6Q0E7QUFBQSxNQUNGO0FBQ0EsVUFBSSxDQUFDO0FBQ0gsZUFBT3VGLEVBQUUsMkNBQTJDLEdBQUd4TztBQUFBLElBQzNELFNBQVNpSixHQUFHO0FBQ1YsYUFBT3dGLEdBQUcsMENBQTBDeEYsQ0FBQyxHQUFHako7QUFBQSxJQUMxRDtBQUNBLFVBQU02RCxJQUFJLEVBQUUsa0JBQWtCQyxJQUFJLE1BQU00QyxFQUFFN0MsQ0FBQyxHQUFHMkYsSUFBSTFGLEVBQUUsU0FBUyxTQUFTMkYsSUFBSSxNQUFNdkMsR0FBR3JELEdBQUdDLEVBQUUsT0FBTzBGLEdBQUcsTUFBTSxHQUFHRCxJQUFJLE9BQU9OLE1BQU07QUFDMUgsVUFBSTtBQUNGLFFBQUFFLEVBQUUsbUJBQW1CLElBQUk7QUFBQSxVQUN2QixTQUFTO0FBQUEsVUFDVCx1QkFBdUIvSTtBQUFBLFVBQ3ZCLGtCQUFrQjRELEdBQUUsRUFBRSxPQUFPO0FBQUEsVUFDN0IsZUFBZTtBQUFBLFVBQ2YsWUFBWTtBQUFBLFVBQ1osY0FBYztBQUFBLFlBQ1osR0FBR2lGO0FBQUEsWUFDSCxnQkFBZ0JRO0FBQUEsVUFDbEI7QUFBQSxRQUNGLENBQUM7QUFBQSxNQUNILFNBQVMsR0FBRztBQUNWLFFBQUFnRixHQUFHLDRCQUE0QixDQUFDLEdBQUcsRUFBRSxJQUFJLGlCQUFpQixLQUFLLE9BQU8sU0FBUyxFQUFFLFlBQVksZUFBZTtBQUFBLE1BQzlHO0FBQUEsSUFDRjtBQUNBLFdBQU87QUFBQSxNQUNMLFdBQVczQixFQUFFLEtBQUs7QUFBQSxNQUNsQixhQUFhO0FBQUEsTUFDYixXQUFXO0FBQUEsTUFDWCxXQUFXdkQ7QUFBQSxJQUNiO0FBQUEsRUFDRjtBQUNGLEdBQUdvRixLQUFLL0c7QUFBQSxFQUNOLE9BQU87QUFBQSxJQUNMLFNBQVM7QUFBQSxJQUNULHVCQUF1QjtBQUFBLElBQ3ZCLGtCQUFrQjVIO0FBQUEsSUFDbEIsZUFBZUk7QUFBQSxJQUNmLGNBQWM7QUFBQSxFQUNoQixNQUFNO0FBQ0osUUFBSTJJLEdBQUdDLEdBQUdDLEdBQUdDLEdBQUc0QyxHQUFHQyxHQUFHUTtBQUN0QixJQUFBaUMsRUFBRSw2QkFBNkI7QUFDL0IsVUFBTTVLLElBQUlzRSxFQUFFLEVBQUUsd0JBQXdCZ0QsRUFBRSxHQUFHLEVBQUUsZ0JBQWdCckgsR0FBRyx3QkFBd0JDLEVBQUUsSUFBSSxHQUFHMEYsSUFBSTVGLEVBQUU7QUFDdkcsUUFBSSxDQUFDNEYsRUFBRTtBQUNMLFlBQU0sSUFBSSxNQUFNLG1EQUFtRDtBQUNyRSxVQUFNQyxJQUFJd0UsR0FBRztBQUFBLE1BQ1gsU0FBUztBQUFBLE1BQ1QsbUJBQW1CekUsRUFBRTtBQUFBLE1BQ3JCLGNBQWNBLEVBQUU7QUFBQSxNQUNoQixZQUFZQSxFQUFFLDBCQUEwQjtBQUFBLE1BQ3hDLGdCQUFnQjNGO0FBQUEsTUFDaEIsd0JBQXdCQztBQUFBLElBQzFCLENBQUMsR0FBR3lGLElBQUk4RSxHQUFHLEVBQUUsU0FBUzVFLENBQUM7QUFDdkIsUUFBSTtBQUNGLFlBQU1pRCxJQUFJLE1BQU1uRCxFQUFFLGdCQUFnQkUsQ0FBQztBQUNuQyxNQUFBK0UsRUFBRSwyQkFBMkI5QixDQUFDO0FBQzlCLFlBQU1vQixJQUFJLEVBQUUsa0JBQWtCQyxJQUFJLE1BQU1ySCxFQUFFb0gsQ0FBQyxHQUFHRSxJQUFJTyxHQUFHdk8sR0FBRzBNLENBQUMsR0FBR2tCLEtBQUlyRjtBQUFBLFFBQzlEeUY7QUFBQSxRQUNBNU4sRUFBRSxJQUFJO0FBQUEsUUFDTixLQUFLLE9BQU8sU0FBUyxFQUFFO0FBQUEsTUFDekIsR0FBR3lOLE1BQU03RSxLQUFLRCxJQUFJMkQsRUFBRSxzQkFBc0IsT0FBTyxTQUFTM0QsRUFBRSxxQkFBcUIsT0FBTyxTQUFTQyxFQUFFO0FBQ25HLFVBQUksQ0FBQzZFO0FBQ0gsY0FBTSxJQUFJLE1BQU0sMkNBQTJDO0FBQzdELFlBQU1lLEtBQUssTUFBTWpJLEdBQUdtSCxHQUFHO0FBQUEsUUFDckIsa0JBQWtCLEVBQUU7QUFBQSxRQUNwQix5QkFBeUI7QUFBQSxRQUN6QixvQkFBb0JGLEdBQUUsRUFBRSxLQUFLO0FBQUEsUUFDN0IseUJBQXlCQSxHQUFFLEVBQUUsVUFBVTtBQUFBLFFBQ3ZDLHdCQUF3QkEsR0FBRSxFQUFFLFNBQVM7QUFBQSxRQUNyQyxzQkFBc0I7QUFBQSxVQUNwQixVQUFVQSxHQUFFLEVBQUUsUUFBUTtBQUFBLFVBQ3RCLFNBQVNBLEdBQUUsRUFBRSxPQUFPO0FBQUEsUUFDdEI7QUFBQSxNQUNGLENBQUMsR0FBR2lCLEtBQUtQLEdBQUdNLEVBQUU7QUFDZCxNQUFBSixFQUFFLDJCQUEyQkssRUFBRTtBQUMvQixVQUFJQyxLQUFLLE1BQU1oSSxFQUFFZ0gsR0FBRztBQUFBLFFBQ2xCLGNBQWNDLEVBQUU7QUFBQSxRQUNoQiw2QkFBNkI7QUFBQSxVQUMzQixrQkFBa0IsRUFBRTtBQUFBO0FBQUEsVUFFcEIsc0JBQXNCYyxNQUFNLE9BQU8sU0FBU0EsR0FBRztBQUFBLFVBQy9DLCtCQUErQjtBQUFBLFlBQzdCLE1BQU07QUFBQSxZQUNOLFdBQVc7QUFBQSxjQUNULG1CQUFtQjtBQUFBLGNBQ25CLHlCQUF5QmhCO0FBQUEsWUFDM0I7QUFBQSxVQUNGO0FBQUEsUUFDRjtBQUFBLE1BQ0YsQ0FBQztBQUNELE1BQUFXLEVBQUUsdUNBQXVDTSxFQUFFO0FBQzNDLFVBQUlDLE1BQU03RixLQUFLRCxJQUFJNkYsR0FBRyxvQkFBb0IsT0FBTyxTQUFTN0YsRUFBRSxDQUFDLE1BQU0sT0FBTyxTQUFTQyxFQUFFO0FBQ3JGLFlBQU04RixNQUFNbEQsSUFBSWdELEdBQUcsMEJBQTBCLE9BQU8sU0FBU2hELEVBQUU7QUFBQSxRQUM3RCxDQUFDbUQsT0FBT0EsR0FBRyxTQUFTO0FBQUEsTUFDdEI7QUFDQSxVQUFJRCxNQUFNQSxHQUFHLGNBQWM7QUFDekIsUUFBQVIsRUFBRSwwQ0FBMENRLEVBQUU7QUFDOUMsY0FBTSxFQUFFLFFBQVFDLEdBQUcsSUFBSSxNQUFNbkYsR0FBRztBQUFBLFVBQzlCLEtBQUtrRixHQUFHO0FBQUEsVUFDUixTQUFTLEVBQUU7QUFBQSxRQUNiLENBQUM7QUFDRCxZQUFJUixFQUFFLHlDQUF5Q1MsRUFBRSxHQUFHLEdBQUdBLE9BQU94TSxFQUFFO0FBQzlELGdCQUFNLElBQUksTUFBTSw0QkFBNEI7QUFDOUMsWUFBSXdNLE9BQU94TSxFQUFFO0FBQ1gsZ0JBQU0sSUFBSSxNQUFNLHlCQUF5QjtBQUFBLE1BQzdDO0FBQ0EsVUFBSXVNLE1BQU0sQ0FBQ0QsT0FBT0QsS0FBSyxNQUFNaEksRUFBRWdILEdBQUc7QUFBQSxRQUNoQyxjQUFjQyxFQUFFO0FBQUEsUUFDaEIsYUFBYWlCLEdBQUc7QUFBQSxRQUNoQiw2QkFBNkI7QUFBQSxVQUMzQixrQkFBa0IsRUFBRTtBQUFBLFVBQ3BCLHNCQUFzQkEsR0FBRztBQUFBLFFBQzNCO0FBQUEsTUFDRixDQUFDLEdBQUdSLEVBQUUsdUNBQXVDTSxFQUFFLEdBQUdDLE1BQU14QyxLQUFLUixJQUFJK0MsR0FBRyxvQkFBb0IsT0FBTyxTQUFTL0MsRUFBRSxDQUFDLE1BQU0sT0FBTyxTQUFTUSxFQUFFLEtBQUssQ0FBQ3dDO0FBQ3ZJLGNBQU0sSUFBSSxNQUFNLGdCQUFnQjtBQUNsQyxhQUFPM0csR0FBRztBQUFBLFFBQ1IsV0FBVztBQUFBLFFBQ1gsa0JBQWtCMEY7QUFBQSxRQUNsQix1QkFBdUI7QUFBQSxRQUN2QixvQkFBb0JGO0FBQUEsUUFDcEIsZUFBZWtCO0FBQUEsUUFDZixpQkFBaUI7QUFBQSxNQUNuQixDQUFDO0FBQUEsSUFDSCxTQUFTcEMsR0FBRztBQUNWLFlBQU0rQixHQUFHLDRCQUE0Qi9CLENBQUMsR0FBRyxJQUFJLE9BQU9BLEtBQUssT0FBTyxTQUFTQSxFQUFFLFlBQVksZUFBZTtBQUFBLElBQ3hHO0FBQUEsRUFDRjtBQUNGLEdBQUd3QyxLQUFLLE1BQU0sSUFBSSxRQUFRLENBQUMsR0FBRyxNQUFNO0FBQ2xDLFFBQU1sUCxJQUFJLFNBQVMsY0FBYyxRQUFRO0FBQ3pDLEVBQUFBLEVBQUUsTUFBTSxrRUFBa0VBLEVBQUUsY0FBYyxhQUFhQSxFQUFFLFFBQVEsSUFBSUEsRUFBRSxTQUFTLE1BQU0sRUFBRSxHQUFHQSxFQUFFLFVBQVUsTUFBTSxFQUFFLElBQUksTUFBTSw4QkFBOEIsQ0FBQyxHQUFHLFNBQVMsS0FBSyxZQUFZQSxDQUFDO0FBQ3hPLENBQUMsR0FBR21QLEtBQUssQ0FBQyxHQUFHLE1BQU07QUFDakIsUUFBTW5QLElBQUksRUFBRSxNQUFNLGNBQWMsZ0JBQWdCSSxJQUFJLEVBQUUsZ0JBQWdCLElBQUksRUFBRSxpQkFBaUIsSUFBSSxFQUFFLEdBQUcsRUFBRTtBQUN4RyxVQUFRSixLQUFLSSxLQUFLLE9BQU8sRUFBRSxFQUFFLEtBQUssSUFBSSxFQUFFLEVBQUUsS0FBSyxNQUFNSixLQUFLLE9BQU8sU0FBU0EsRUFBRSxrQkFBa0JJLEtBQUssT0FBTyxTQUFTQSxFQUFFLGtCQUFrQixLQUFLLE9BQU8sU0FBUyxFQUFFLGlCQUFpQix5QkFBeUIsRUFBRSxFQUFFLE9BQU8sSUFBSSxFQUFFLEVBQUUsT0FBTyxNQUFNSixLQUFLLE9BQU8sU0FBU0EsRUFBRSxpQkFBaUJJLEtBQUssT0FBTyxTQUFTQSxFQUFFLGlCQUFpQixLQUFLLE9BQU8sU0FBUyxFQUFFLGdCQUFnQixNQUFNLEVBQUUsRUFBRSxRQUFRLElBQUksRUFBRSxFQUFFLFFBQVEsTUFBTUosS0FBSyxPQUFPLFNBQVNBLEVBQUUsZ0JBQWdCSSxLQUFLLE9BQU8sU0FBU0EsRUFBRSxnQkFBZ0IsS0FBSyxPQUFPLFNBQVMsRUFBRSxlQUFlLFNBQVMsRUFBRSxFQUFFLFVBQVUsSUFBSSxFQUFFLEVBQUUsVUFBVSxNQUFNSixLQUFLLE9BQU8sU0FBU0EsRUFBRSxlQUFlSSxLQUFLLE9BQU8sU0FBU0EsRUFBRSxlQUFlLEtBQUssT0FBTyxTQUFTLEVBQUUsY0FBYyxlQUFlLEVBQUUsRUFBRSxTQUFTLElBQUksRUFBRSxFQUFFLFNBQVMsTUFBTUosS0FBSyxPQUFPLFNBQVNBLEVBQUUsZ0JBQWdCSSxLQUFLLE9BQU8sU0FBU0EsRUFBRSxnQkFBZ0IsS0FBSyxPQUFPLFNBQVMsRUFBRSxlQUFlLGdCQUFnQjtBQUNwMUI7QUFDQXBCLEVBQUksT0FBTztBQUFBLEVBQ1QsTUFBTUEsRUFBSSxPQUFPO0FBQUEsSUFDZixnQkFBZ0JBLEVBQUksT0FBT0EsRUFBSSxPQUFPLEdBQUdBLEVBQUksSUFBSSxDQUFDO0FBQUEsSUFDbEQsUUFBUUEsRUFBSSxNQUFNQSxFQUFJLElBQUksQ0FBQztBQUFBLElBQzNCLGFBQWFBLEVBQUksT0FBTztBQUFBLElBQ3hCLGFBQWFBLEVBQUksT0FBT0EsRUFBSSxPQUFPLEdBQUdBLEVBQUksSUFBSSxDQUFDO0FBQUEsRUFDakQsQ0FBQztBQUFBLEVBQ0QsUUFBUUEsRUFBSSxRQUFRLGdDQUFnQztBQUN0RCxDQUFDO0FBQ0QsTUFBTW9RLEtBQUssQ0FBQztBQUFBLEVBQ1YsT0FBTztBQUFBLEVBQ1AsU0FBUztBQUNYLE1BQU07QUFDSixNQUFJO0FBQ0osTUFBSSxFQUFFLFNBQVM7QUFDYixXQUFPO0FBQUEsTUFDTCxvQkFBb0I7QUFBQSxNQUNwQixnQkFBZ0I7QUFBQSxRQUNkLFFBQVEsRUFBRTtBQUFBLFFBQ1YsT0FBTztBQUFBLFFBQ1AsZUFBZTtBQUFBLFFBQ2YsTUFBTTtBQUFBLE1BQ1I7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BS0EsZUFBZSxJQUFJLElBQUksUUFBUSxFQUFFLEtBQUssSUFBSTdQLEVBQUUsRUFBRSxTQUFTO0FBQUEsSUFDekQ7QUFDRixRQUFNUyxLQUFLLElBQUksRUFBRSxlQUFlLE9BQU8sU0FBUyxFQUFFLENBQUM7QUFDbkQsTUFBSUE7QUFDRixXQUFPO0FBQUEsTUFDTCxxQkFBcUJBLEtBQUssT0FBTyxTQUFTQSxFQUFFLGdCQUFnQjtBQUFBLE1BQzVELGdCQUFnQjtBQUFBLFFBQ2QsUUFBUSxFQUFFO0FBQUEsUUFDVixRQUFRQSxLQUFLLE9BQU8sU0FBU0EsRUFBRSxnQkFBZ0I7QUFBQSxRQUMvQyw4QkFBOEJBLEtBQUssT0FBTyxTQUFTQSxFQUFFO0FBQUEsUUFDckQsZ0NBQWdDQSxLQUFLLE9BQU8sU0FBU0EsRUFBRSwyQkFBMkI7QUFBQSxRQUNsRixlQUFlO0FBQUEsUUFDZixNQUFNO0FBQUEsTUFDUjtBQUFBLE1BQ0EsZUFBZSxrQ0FBa0MsRUFBRSxLQUFLO0FBQUEsSUFDMUQ7QUFDSixHQUFHcVAsS0FBSyxDQUFDO0FBQUEsRUFDUCx3QkFBd0I7QUFBQSxFQUN4QixnQkFBZ0I7QUFBQSxFQUNoQixTQUFTclA7QUFBQSxFQUNULGNBQWNJLElBQUk7QUFDcEIsTUFBTTtBQUNKLE1BQUkwRCxHQUFHMEY7QUFDUCxRQUFNN0YsT0FBT0csSUFBSSxLQUFLLE9BQU8sU0FBUyxFQUFFLFdBQVcsT0FBTyxTQUFTQSxFQUFFLGNBQWM5RCxLQUFLLE9BQU8sU0FBU0EsRUFBRSxhQUFhLEVBQUUsVUFBVSxZQUFZLEdBQUc2RCxRQUFRMkYsSUFBSSxLQUFLLE9BQU8sU0FBUyxFQUFFLFdBQVcsT0FBTyxTQUFTQSxFQUFFLGdCQUFnQixLQUFLLE9BQU8sU0FBUyxFQUFFLGVBQWUsS0FBSyxLQUFLLFFBQVEsQ0FBQztBQUMzUixTQUFPO0FBQUEsSUFDTCxjQUFjN0Y7QUFBQSxJQUNkLE9BQU87QUFBQSxNQUNMLFFBQVEsS0FBSyxPQUFPLFNBQVMsRUFBRSxVQUFVdkQsS0FBSztBQUFBLE1BQzlDLE1BQU0sS0FBSyxRQUFRLEVBQUUsVUFBVSxZQUFZO0FBQUEsTUFDM0MsUUFBUXlEO0FBQUEsSUFDVjtBQUFBLEVBQ0Y7QUFDRixHQUFHLEVBQUUsT0FBT3lMLEdBQUcsSUFBSXhILEVBQUUsZUFBZTtBQUNwQyxlQUFleUgsR0FBRyxHQUFHLEdBQUc7QUFDdEIsTUFBSTtBQUNGLFVBQU0sS0FBSyxNQUFNOUgsR0FBRyxFQUFFLFlBQVk7QUFBQSxNQUNoQyx5QkFBeUIsRUFBRTtBQUFBLE1BQzNCLDZCQUE2QjtBQUFBLFFBQzNCLDJCQUEyQjtBQUFBLFVBQ3pCLGdCQUFnQixFQUFFO0FBQUEsVUFDbEIsb0JBQW9CLE9BQU8sU0FBUztBQUFBLFVBQ3BDLGtCQUFrQixFQUFFLGlCQUFpQjtBQUFBLFFBQ3ZDO0FBQUEsTUFDRjtBQUFBLElBQ0YsQ0FBQyxHQUFHLHNCQUFzQjlELElBQUksS0FBSyxPQUFPLFNBQVMsRUFBRTtBQUNyRCxRQUFJLENBQUNBO0FBQ0gsWUFBTSxJQUFJLE1BQU0sNENBQTRDO0FBQzlELE1BQUUsUUFBUSwyQkFBMkJBLENBQUM7QUFBQSxFQUN4QyxTQUFTM0QsR0FBRztBQUNWLFVBQU0sRUFBRSxRQUFRLE1BQU0sR0FBR0E7QUFBQSxFQUMzQjtBQUNGO0FBQ0EsZUFBZXdQLEdBQUcsR0FBRyxHQUFHO0FBQ3RCLE1BQUksQ0FBQyxFQUFFO0FBQ0wsVUFBTSxJQUFJLE1BQU0sdUJBQXVCO0FBQ3pDLEVBQUFGLEdBQUcsMENBQTBDLENBQUM7QUFDOUMsUUFBTSxFQUFFLFFBQVF0UCxFQUFFLElBQUksTUFBTThKLEdBQUc7QUFBQSxJQUM3QixLQUFLLEVBQUU7QUFBQSxJQUNQLFNBQVMsRUFBRTtBQUFBLEVBQ2IsQ0FBQztBQUNELE1BQUl3RixHQUFHLHlDQUF5Q3RQLENBQUMsR0FBRyxHQUFHQSxNQUFNeUMsRUFBRTtBQUM3RCxVQUFNLElBQUksTUFBTSw0QkFBNEI7QUFDOUMsTUFBSXpDLE1BQU15QyxFQUFFO0FBQ1YsVUFBTSxJQUFJLE1BQU0seUJBQXlCO0FBQzNDLFFBQU1yQyxJQUFJLE1BQU0wRyxFQUFFLEVBQUUsWUFBWTtBQUFBLElBQzlCLGNBQWMsRUFBRSxRQUFRO0FBQUEsSUFDeEIsNkJBQTZCO0FBQUEsTUFDM0IsYUFBYSxFQUFFO0FBQUEsTUFDZixzQkFBc0IsRUFBRTtBQUFBLE1BQ3hCLGtCQUFrQixFQUFFLHNCQUFzQjtBQUFBLElBQzVDO0FBQUEsRUFDRixDQUFDO0FBQ0QsU0FBT3dJLEdBQUcsdUNBQXVDbFAsQ0FBQyxHQUFHQTtBQUN2RDtBQUNBLGVBQWVxUCxHQUFHLEdBQUcsR0FBRztBQUN0QixNQUFJelAsR0FBR0ksR0FBRyxHQUFHLEdBQUc7QUFDaEIsTUFBSTtBQUNGLFVBQU0sSUFBSSxFQUFFLFNBQVMsSUFBSStPLEdBQUcsRUFBRSxrQkFBa0IsQ0FBQyxHQUFHLElBQUk1RztBQUFBLE1BQ3REO0FBQUEsTUFDQSxFQUFFLGNBQWMsSUFBSTtBQUFBLE1BQ3BCLEVBQUU7QUFBQSxJQUNKLEdBQUdTLEtBQUssTUFBTXJDLEdBQUcsRUFBRSxZQUFZO0FBQUEsTUFDN0Isa0JBQWtCLEVBQUUsc0JBQXNCO0FBQUEsTUFDMUMseUJBQXlCLEVBQUU7QUFBQSxNQUMzQixvQkFBb0IsRUFBRSxFQUFFLEtBQUs7QUFBQSxNQUM3Qix5QkFBeUIsRUFBRSxFQUFFLFVBQVU7QUFBQSxNQUN2Qyx3QkFBd0IsRUFBRSxFQUFFLFNBQVM7QUFBQSxNQUNyQyxzQkFBc0I7QUFBQSxRQUNwQixVQUFVLEVBQUUsRUFBRSxRQUFRO0FBQUEsUUFDdEIsU0FBUyxFQUFFLEVBQUUsT0FBTztBQUFBLE1BQ3RCO0FBQUEsSUFDRixDQUFDLEdBQUcsc0JBQXNCLENBQUMsRUFBRTtBQUM3QixRQUFJLENBQUNxQztBQUNILFlBQU0sSUFBSSxNQUFNLDBDQUEwQztBQUM1RCxRQUFJQyxJQUFJLE1BQU1uQyxFQUFFLEVBQUUsWUFBWTtBQUFBLE1BQzVCLGNBQWMsRUFBRSxRQUFRO0FBQUEsTUFDeEIsNkJBQTZCO0FBQUEsUUFDM0Isa0JBQWtCLEVBQUUsc0JBQXNCO0FBQUEsUUFDMUMsc0JBQXNCa0M7QUFBQSxRQUN0QiwrQkFBK0I7QUFBQSxVQUM3QixNQUFNO0FBQUEsVUFDTixVQUFVO0FBQUEsWUFDUixtQkFBbUI7QUFBQSxZQUNuQix5QkFBeUIsS0FBSyxVQUFVLEVBQUUsS0FBSztBQUFBLFVBQ2pEO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFBQSxJQUNGLENBQUM7QUFDRCxJQUFBc0csR0FBRyx1Q0FBdUNyRyxDQUFDO0FBQzNDLFFBQUlDLEtBQUs5SSxLQUFLSixJQUFJaUosRUFBRSxvQkFBb0IsT0FBTyxTQUFTakosRUFBRSxDQUFDLE1BQU0sT0FBTyxTQUFTSSxFQUFFO0FBQ25GLFVBQU0wTCxLQUFLLElBQUk3QyxFQUFFLDBCQUEwQixPQUFPLFNBQVMsRUFBRTtBQUFBLE1BQzNELENBQUNzRCxNQUFNQSxFQUFFLFNBQVM7QUFBQSxJQUNwQjtBQUNBLFFBQUlULEtBQUssUUFBUUEsRUFBRSxnQkFBZ0JBLEVBQUUsY0FBY0EsRUFBRSxnQkFBZ0I3QyxJQUFJLE1BQU11RyxHQUFHMUQsR0FBRyxDQUFDLEdBQUc1QyxLQUFLLEtBQUssSUFBSUQsRUFBRSxvQkFBb0IsT0FBTyxTQUFTLEVBQUUsQ0FBQyxNQUFNLE9BQU8sU0FBUyxFQUFFLEtBQUssQ0FBQ0M7QUFDNUssWUFBTSxJQUFJLE1BQU0sZ0JBQWdCO0FBQ2xDLFVBQU02QyxJQUFJO0FBQUEsTUFDUixRQUFRLGdCQUFnQjtBQUFBLElBQzFCO0FBQ0EsV0FBTyxFQUFFLFFBQVEsZ0JBQWdCQSxDQUFDLEdBQUczRCxHQUFHO0FBQUEsTUFDdEMsV0FBVztBQUFBLE1BQ1gsa0JBQWtCLEVBQUU7QUFBQSxNQUNwQix1QkFBdUIsRUFBRTtBQUFBLE1BQ3pCLG9CQUFvQjtBQUFBLE1BQ3BCLGVBQWVhO0FBQUEsTUFDZixpQkFBaUI7QUFBQSxJQUNuQixDQUFDO0FBQUEsRUFDSCxTQUFTLEdBQUc7QUFDVixVQUFNLElBQUk7QUFBQSxNQUNSLFFBQVEsZ0JBQWdCO0FBQUEsSUFDMUI7QUFDQSxVQUFNLEVBQUUsUUFBUSxnQkFBZ0IsQ0FBQyxHQUFHO0FBQUEsRUFDdEM7QUFDRjtBQUNBLE1BQU0sRUFBRSxPQUFPeUcsSUFBSSxPQUFPQyxHQUFHLElBQUk3SCxFQUFFLGVBQWUsR0FBRzhILEtBQUsvSDtBQUFBLEVBQ3hELE9BQU8sRUFBRSxTQUFTLEdBQUcsZUFBZSxFQUFFLE1BQU07QUFDMUMsVUFBTTdILElBQUk7QUFBQSxNQUNSLFdBQVc4TSxFQUFFLEtBQUs7QUFBQSxNQUNsQixhQUFhO0FBQUEsTUFDYixXQUFXO0FBQUEsTUFDWCxXQUFXLFlBQVk7QUFBQSxNQUN2QjtBQUFBLElBQ0YsR0FBRzFNLElBQUk4SCxFQUFFLEVBQUUsd0JBQXdCK0MsRUFBRTtBQUNyQyxRQUFJLENBQUM3SztBQUNILGFBQU9KO0FBQ1QsSUFBQTBQLEdBQUcsMEJBQTBCO0FBQzdCLFFBQUk7QUFDRixZQUFNUixHQUFHLEdBQUdRLEdBQUcsbUNBQW1DO0FBQUEsSUFDcEQsU0FBUzNHLEdBQUc7QUFDVixhQUFPNEcsR0FBRyxnQ0FBZ0M1RyxDQUFDLEdBQUcvSTtBQUFBLElBQ2hEO0FBQ0EsUUFBSSxDQUFDLE9BQU8sbUJBQW1CLENBQUMsZ0JBQWdCLGdCQUFnQjtBQUM5RCxhQUFPMFAsR0FBRyxtREFBbUQsR0FBRzFQO0FBQ2xFLFFBQUkwUCxHQUFHLGtCQUFrQixHQUFHLENBQUMsTUFBTSxnQkFBZ0IsZ0JBQWdCO0FBQ2pFLGFBQU9BLEdBQUcseUNBQXlDLEdBQUcxUDtBQUN4RCxRQUFJLENBQUNJLEVBQUUsU0FBUztBQUNkLFlBQU0sSUFBSSxNQUFNLG1EQUFtRDtBQUNyRSxVQUFNeUQsSUFBSSxFQUFFLGtCQUFrQkMsSUFBSSxNQUFNNEMsRUFBRTdDLENBQUMsR0FBRzJGLElBQUkxRixFQUFFLFNBQVMsU0FBUzJGLElBQUksTUFBTXZDLEdBQUdyRCxHQUFHQyxFQUFFLE9BQU8wRixHQUFHLE1BQU0sR0FBR0QsSUFBSSxPQUFPUixNQUFNO0FBQzFILFVBQUk7QUFDRixjQUFNSSxFQUFFLGtCQUFrQixJQUFJO0FBQUEsVUFDNUIsU0FBUztBQUFBLFVBQ1QsdUJBQXVCL0k7QUFBQSxVQUN2QixrQkFBa0I0RCxHQUFFLEVBQUUsT0FBTztBQUFBLFVBQzdCLGVBQWU7QUFBQSxVQUNmLGNBQWM7QUFBQSxZQUNaLEdBQUcrRTtBQUFBLFlBQ0gsZ0JBQWdCVTtBQUFBLFVBQ2xCO0FBQUEsVUFDQSxZQUFZO0FBQUEsUUFDZCxDQUFDO0FBQUEsTUFDSCxTQUFTVCxHQUFHO0FBQ1YsUUFBQTJHLEdBQUcsMkJBQTJCM0csQ0FBQyxHQUFHLEVBQUUsSUFBSSxpQkFBaUJBLEtBQUssT0FBTyxTQUFTQSxFQUFFLFlBQVksZUFBZTtBQUFBLE1BQzdHO0FBQUEsSUFDRjtBQUNBLFdBQU87QUFBQSxNQUNMLFdBQVc4RCxFQUFFLEtBQUs7QUFBQSxNQUNsQixhQUFhO0FBQUEsTUFDYixXQUFXO0FBQUEsTUFDWCxXQUFXdkQ7QUFBQSxJQUNiO0FBQUEsRUFDRjtBQUNGLEdBQUdzRyxLQUFLakk7QUFBQSxFQUNOLE9BQU87QUFBQSxJQUNMLFNBQVM7QUFBQSxJQUNULHVCQUF1QjtBQUFBLElBQ3ZCLGtCQUFrQjVIO0FBQUEsSUFDbEIsY0FBY0k7QUFBQSxJQUNkLGVBQWU7QUFBQSxFQUNqQixNQUFNO0FBQ0osUUFBSTJMO0FBQ0osVUFBTW5JLElBQUlzRSxFQUFFLEVBQUUsd0JBQXdCK0MsRUFBRSxHQUFHLEVBQUUsd0JBQXdCcEgsR0FBRyxnQkFBZ0JDLEVBQUUsSUFBSTFELEdBQUdvSixJQUFJLEVBQUUsa0JBQWtCQyxJQUFJLE1BQU0vQyxFQUFFOEMsQ0FBQyxHQUFHRCxJQUFJRSxFQUFFLFNBQVMsU0FBUyxFQUFFLGNBQWMsR0FBRyxPQUFPVCxFQUFFLElBQUlxRyxHQUFHO0FBQUEsTUFDbE0sd0JBQXdCeEw7QUFBQSxNQUN4QixnQkFBZ0JDO0FBQUEsTUFDaEIsZUFBZWlJLElBQUluSSxLQUFLLE9BQU8sU0FBU0EsRUFBRSxhQUFhLE9BQU8sU0FBU21JLEVBQUU7QUFBQSxJQUMzRSxDQUFDLEdBQUcsSUFBSTtBQUFBLE1BQ04sYUFBYTtBQUFBLE1BQ2IsY0FBYztBQUFBLE1BQ2QsOEJBQThCLENBQUMsU0FBUyxpQkFBaUIsTUFBTTtBQUFBLE1BQy9ELCtCQUErQixDQUFDLE9BQU87QUFBQSxNQUN2QyxtQkFBbUIsQ0FBQyxRQUFRLGNBQWMsUUFBUSxVQUFVO0FBQUEsTUFDNUQsc0JBQXNCO0FBQUEsUUFDcEI7QUFBQSxRQUNBO0FBQUEsUUFDQTtBQUFBLFFBQ0E7QUFBQSxNQUNGO0FBQUEsTUFDQSxPQUFPL0M7QUFBQSxNQUNQLHlCQUF5Qm9HLEdBQUc7QUFBQSxRQUMxQixPQUFPcEc7QUFBQSxRQUNQLFNBQVNTO0FBQUEsTUFDWCxDQUFDO0FBQUEsTUFDRCxJQUFJNUYsS0FBSyxPQUFPLFNBQVNBLEVBQUUsMkJBQTJCLENBQUM7QUFBQSxJQUN6RCxHQUFHcUYsSUFBSSxJQUFJLGdCQUFnQixHQUFHLENBQUMsR0FBRzRDLElBQUk7QUFBQSxNQUNwQyxTQUFTNUM7QUFBQSxNQUNULFlBQVksRUFBRTtBQUFBLE1BQ2QsdUJBQXVCO0FBQUEsTUFDdkIsa0JBQWtCbEo7QUFBQSxNQUNsQixrQkFBa0I0RCxFQUFFO0FBQUEsTUFDcEIsU0FBUzZGO0FBQUEsTUFDVCxhQUFhRjtBQUFBLE1BQ2IsU0FBUyxFQUFFO0FBQUEsTUFDWCxlQUFlO0FBQUEsTUFDZixvQkFBb0JuSixLQUFLLE9BQU8sU0FBU0EsRUFBRTtBQUFBLElBQzdDO0FBQ0EsV0FBTyxJQUFJLFFBQVEsQ0FBQ21NLEdBQUdHLE1BQU07QUFDM0IsWUFBTW9CLElBQUksTUFBTTtBQUNkLFFBQUE0QixHQUFHLDJCQUEyQixHQUFHaEQsRUFBRSxJQUFJLE1BQU0sMkJBQTJCLENBQUM7QUFBQSxNQUMzRTtBQUNBLE1BQUF4RCxFQUFFLFdBQVc0RSxHQUFHNUUsRUFBRSxxQkFBcUIsT0FBTzZFLE1BQU07QUFDbEQsWUFBSTtBQUNGLGdCQUFNd0IsR0FBR3hCLEdBQUdqQyxDQUFDO0FBQUEsUUFDZixTQUFTa0MsR0FBRztBQUNWLFVBQUF0QixFQUFFc0IsQ0FBQztBQUFBLFFBQ0w7QUFBQSxNQUNGLEdBQUc5RSxFQUFFLDBCQUEwQixNQUFNO0FBQ25DLGNBQU02RSxJQUFJO0FBQUEsVUFDUixVQUFVLEVBQUUsR0FBRy9FLEVBQUU7QUFBQSxRQUNuQjtBQUNBLFFBQUFFLEVBQUUsK0JBQStCNkUsQ0FBQztBQUFBLE1BQ3BDLEdBQUc3RSxFQUFFLHNCQUFzQixPQUFPNkUsTUFBTTtBQUN0QyxZQUFJO0FBQ0YsZ0JBQU1DLElBQUksTUFBTXlCLEdBQUcxQixHQUFHakMsQ0FBQztBQUN2QixVQUFBUyxFQUFFeUIsQ0FBQztBQUFBLFFBQ0wsU0FBU0EsR0FBRztBQUNWLFVBQUF0QixFQUFFc0IsQ0FBQztBQUFBLFFBQ0w7QUFBQSxNQUNGLEdBQUc5RSxFQUFFLE1BQU07QUFBQSxJQUNiLENBQUMsRUFBRSxNQUFNLENBQUNxRCxNQUFNO0FBQ2QsWUFBTW9ELEdBQUcsMkJBQTJCcEQsQ0FBQyxHQUFHQTtBQUFBLElBQzFDLENBQUM7QUFBQSxFQUNIO0FBQ0YsR0FBR3VELEtBQUssR0FBR0MsS0FBSy9RLEVBQUksT0FBTztBQUFBLEVBQ3pCLGdCQUFnQkEsRUFBSSxRQUFRLE1BQU07QUFBQSxFQUNsQyxVQUFVQSxFQUFJLFFBQVEsUUFBUTtBQUFBLEVBQzlCLFVBQVVBLEVBQUksT0FBTztBQUFBLElBQ25CLGFBQWFBLEVBQUksT0FBTztBQUFBLElBQ3hCLFdBQVdBLEVBQUksT0FBTztBQUFBLElBQ3RCLFdBQVdBLEVBQUksT0FBTztBQUFBLEVBQ3hCLENBQUM7QUFDSCxDQUFDLEdBQUcsRUFBRSxPQUFPZ1IsR0FBRyxPQUFPQyxHQUFHLElBQUluSSxFQUFFLGFBQWEsR0FBR29JLEtBQUtySTtBQUFBLEVBQ25ELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTTtBQUN4QixJQUFBbUksRUFBRSxtREFBbUQ7QUFDckQsVUFBTSxJQUFJOUgsRUFBRSxFQUFFLHdCQUF3QjZILEVBQUU7QUFDeEMsSUFBQUMsRUFBRSwwQkFBMEIsS0FBSyxVQUFVLENBQUMsQ0FBQyxFQUFFLEdBQUdBLEVBQUUsOEJBQThCO0FBQ2xGLFVBQU1oUSxJQUFJLE1BQU0wRyxFQUFFLEVBQUUsZ0JBQWdCO0FBQ3BDLFFBQUl0RztBQUNKLFFBQUlKLEVBQUUsU0FBUyxVQUFVSSxJQUFJMFAsS0FBSzFQLElBQUlKLEVBQUUsbUJBQW1CQSxFQUFFLGFBQWEsU0FBU0EsRUFBRSxTQUFTO0FBQzVGLFlBQU0sTUFBTSwwQ0FBMEM7QUFDeEQsVUFBTSxJQUFJSSxHQUFHLElBQUksS0FBSyxJQUFJLElBQUksSUFBSSxHQUFHLEdBQUcsSUFBSW5CLEdBQUcsR0FBRyxJQUFJO0FBQUEsTUFDcEQsa0JBQWtCO0FBQUEsTUFDbEIsaUNBQWlDO0FBQUEsTUFDakMsZUFBZTtBQUFBLElBQ2pCLEdBQUcsSUFBSTtBQUFBLE1BQ0wsUUFBUSxFQUFFLFNBQVM7QUFBQSxNQUNuQixVQUFVLEVBQUUsU0FBUztBQUFBLE1BQ3JCLFlBQVksRUFBRSxTQUFTO0FBQUEsSUFDekI7QUFDQSxXQUFPO0FBQUEsTUFDTCxhQUFhO0FBQUEsTUFDYixhQUFhO0FBQUEsTUFDYixzQkFBc0I7QUFBQSxJQUN4QjtBQUFBLEVBQ0Y7QUFDRixHQUFHa1IsS0FBS3ZJO0FBQUEsRUFDTixPQUFPO0FBQUEsSUFDTCxTQUFTO0FBQUEsSUFDVCx1QkFBdUI7QUFBQSxJQUN2QixrQkFBa0I1SDtBQUFBLElBQ2xCLGVBQWVJO0FBQUEsSUFDZixjQUFjO0FBQUEsSUFDZCxZQUFZO0FBQUEsRUFDZCxNQUFNO0FBQ0osSUFBQTRQLEVBQUUsc0JBQXNCLEdBQUdBLEVBQUUsV0FBVyxDQUFDLEdBQUdBLEVBQUUseUJBQXlCLENBQUMsR0FBR0EsRUFBRSxvQkFBb0JoUSxDQUFDLEdBQUdnUSxFQUFFLGlCQUFpQjVQLENBQUMsR0FBRzRQLEVBQUUsZ0JBQWdCLENBQUMsR0FBR0EsRUFBRSxjQUFjLENBQUM7QUFDbkssVUFBTSxJQUFJLEVBQUU7QUFDWixRQUFJLENBQUMsRUFBRTtBQUNMLFlBQU0sTUFBTSxrR0FBa0c7QUFDaEgsVUFBTSxJQUFJLE1BQU10SixFQUFFLEVBQUUsZ0JBQWdCLEdBQUcsSUFBSSxFQUFFLFNBQVMsU0FBUyxJQUFJLE1BQU1DLEdBQUcsRUFBRSxrQkFBa0I7QUFBQSxNQUM5Rix5QkFBeUI7QUFBQSxNQUN6QixrQkFBa0IsRUFBRTtBQUFBLE1BQ3BCLG9CQUFvQixFQUFFO0FBQUEsTUFDdEIseUJBQXlCLEVBQUU7QUFBQSxNQUMzQix3QkFBd0IsRUFBRTtBQUFBLE1BQzFCLG9CQUFvQjtBQUFBLE1BQ3BCLDBCQUEwQixJQUFJO0FBQUE7QUFBQSxRQUU1QixZQUFZLEVBQUU7QUFBQSxRQUNkLDZCQUE2QixFQUFFLFlBQVk7QUFBQSxNQUM3QyxJQUFJO0FBQUEsSUFDTixDQUFDO0FBQ0QsUUFBSSxDQUFDLEVBQUU7QUFDTCxZQUFNO0FBQUEsUUFDSiw2QkFBNkIsRUFBRSxPQUFPLElBQUksSUFBSSxFQUFFLE9BQU8sT0FBTyxJQUFJLEtBQUssVUFBVSxFQUFFLE9BQU8sSUFBSSxDQUFDO0FBQUEsTUFDakc7QUFDRixVQUFNLElBQUksTUFBTUcsRUFBRSxHQUFHO0FBQUEsTUFDbkIsY0FBYyxFQUFFO0FBQUEsTUFDaEIsYUFBYSxFQUFFLE1BQU0sY0FBYztBQUFBLE1BQ25DLHFCQUFxQixFQUFFLFNBQVMsVUFBVSxFQUFFLHNCQUFzQjtBQUFBLE1BQ2xFLDZCQUE2QjtBQUFBLFFBQzNCLGVBQWUsRUFBRTtBQUFBLFFBQ2pCLFlBQVksRUFBRTtBQUFBLE1BQ2hCO0FBQUEsSUFDRixDQUFDO0FBQ0QsUUFBSWtKLEVBQUUsbUJBQW1CLENBQUMsRUFBRSxHQUFHLEVBQUUsU0FBUyxTQUFTO0FBQ2pELE1BQUFBLEVBQUUsd0JBQXdCLEdBQUdBLEVBQUUsa0RBQWtELENBQUM7QUFDbEYsWUFBTWpILElBQUlkLEdBQUcsQ0FBQztBQUNkLGFBQU8rSCxFQUFFLDBDQUEwQ2pILEVBQUUsaUJBQWlCLEdBQUcsR0FBRyxFQUFFLE1BQU0sU0FBUyxRQUFRQSxFQUFFO0FBQUEsSUFDekcsT0FBTztBQUNMLFVBQUlpSCxFQUFFLG1CQUFtQixHQUFHLENBQUMsRUFBRTtBQUM3QixjQUFNQyxHQUFHLG1EQUFtRCxDQUFDLEdBQUcsSUFBSSxNQUFNLGdFQUFnRTtBQUM1SSxhQUFPO0FBQUEsUUFDTCxNQUFNO0FBQUEsUUFDTixRQUFRLEVBQUU7QUFBQSxNQUNaO0FBQUEsSUFDRjtBQUFBLEVBQ0Y7QUFDRjtBQUNBLGVBQWVHLEdBQUcsR0FBRyxHQUFHO0FBQ3RCLE1BQUk7QUFDRixVQUFNLEtBQUssTUFBTTNJLEdBQUcsRUFBRSxZQUFZO0FBQUEsTUFDaEMseUJBQXlCLEVBQUU7QUFBQSxNQUMzQiw2QkFBNkI7QUFBQSxRQUMzQix1QkFBdUI7QUFBQSxVQUNyQixnQkFBZ0IsRUFBRTtBQUFBLFVBQ2xCLG9CQUFvQixPQUFPLFNBQVM7QUFBQSxVQUNwQyxrQkFBa0IsRUFBRSxpQkFBaUI7QUFBQSxRQUN2QztBQUFBLE1BQ0Y7QUFBQSxJQUNGLENBQUMsR0FBRyxzQkFBc0I5RCxJQUFJLEtBQUssT0FBTyxTQUFTLEVBQUU7QUFDckQsUUFBSSxDQUFDQTtBQUNILFlBQU0sSUFBSSxNQUFNLDRDQUE0QztBQUM5RCxNQUFFLFFBQVEsMkJBQTJCQSxDQUFDO0FBQUEsRUFDeEMsU0FBUzNELEdBQUc7QUFDVixVQUFNLEVBQUUsUUFBUSxNQUFNLEdBQUdBO0FBQUEsRUFDM0I7QUFDRjtBQUNBLGVBQWVxUSxHQUFHLEdBQUcsR0FBRztBQUN0QixNQUFJclEsR0FBR0k7QUFDUCxNQUFJO0FBQ0YsVUFBTSxJQUFJLEVBQUUsU0FBUyxJQUFJK08sR0FBRyxFQUFFLGtCQUFrQixDQUFDLEdBQUcsSUFBSTVHLEdBQUcsR0FBRyxFQUFFLGNBQWMsSUFBSSxpQkFBaUI7QUFDbkcsVUFBTTVCLEdBQUcsRUFBRSxZQUFZO0FBQUEsTUFDckIsa0JBQWtCLEVBQUUsc0JBQXNCO0FBQUEsTUFDMUMseUJBQXlCLEVBQUU7QUFBQSxNQUMzQixvQkFBb0IsRUFBRSxFQUFFLEtBQUs7QUFBQSxNQUM3Qix5QkFBeUIsRUFBRSxFQUFFLFVBQVU7QUFBQSxNQUN2Qyx3QkFBd0IsRUFBRSxFQUFFLFNBQVM7QUFBQSxNQUNyQyxzQkFBc0I7QUFBQSxRQUNwQixVQUFVLEVBQUUsRUFBRSxRQUFRO0FBQUEsUUFDdEIsU0FBUyxFQUFFLEVBQUUsT0FBTztBQUFBLE1BQ3RCO0FBQUEsSUFDRixDQUFDO0FBQ0QsVUFBTSxJQUFJO0FBQUEsTUFDUixnQkFBZ0I7QUFBQSxNQUNoQixXQUFXLE9BQU8sS0FBSyxLQUFLLFVBQVUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUFBLElBQzVELEdBQUcsSUFBSSxNQUFNRyxFQUFFLEVBQUUsWUFBWTtBQUFBLE1BQzNCLGNBQWMsRUFBRSxRQUFRO0FBQUEsTUFDeEIsNkJBQTZCO0FBQUEsUUFDM0Isa0JBQWtCLEVBQUUsc0JBQXNCO0FBQUEsUUFDMUMsNEJBQTRCO0FBQUEsTUFDOUI7QUFBQSxJQUNGLENBQUM7QUFDRCxRQUFJLEdBQUcxRyxLQUFLSixJQUFJLEVBQUUsb0JBQW9CLE9BQU8sU0FBU0EsRUFBRSxDQUFDLE1BQU0sUUFBZ0JJLEVBQUU7QUFDL0UsWUFBTSxJQUFJLE1BQU0sZ0JBQWdCO0FBQ2xDLFVBQU1tSixJQUFJO0FBQUEsTUFDUixRQUFRLGdCQUFnQjtBQUFBLElBQzFCO0FBQ0EsV0FBTyxFQUFFLFFBQVEsZ0JBQWdCQSxDQUFDLEdBQUduQixHQUFHO0FBQUEsTUFDdEMsV0FBVztBQUFBLE1BQ1gsa0JBQWtCLEVBQUU7QUFBQSxNQUNwQix1QkFBdUIsRUFBRTtBQUFBLE1BQ3pCLG9CQUFvQjtBQUFBLE1BQ3BCLGVBQWU7QUFBQSxNQUNmLGlCQUFpQjtBQUFBLElBQ25CLENBQUM7QUFBQSxFQUNILFNBQVMsR0FBRztBQUNWLFVBQU0sSUFBSTtBQUFBLE1BQ1IsUUFBUSxnQkFBZ0I7QUFBQSxJQUMxQjtBQUNBLFVBQU0sRUFBRSxRQUFRLGdCQUFnQixDQUFDLEdBQUc7QUFBQSxFQUN0QztBQUNGO0FBQ0EsTUFBTWtJLEtBQUt0UixFQUFJLE9BQU87QUFBQSxFQUNwQixVQUFVQSxFQUFJLFFBQVEsV0FBVztBQUFBLEVBQ2pDLGdCQUFnQkEsRUFBSSxRQUFRLGVBQWU7QUFBQSxFQUMzQyxVQUFVQSxFQUFJLE9BQU87QUFBQSxJQUNuQixzQkFBc0JBLEVBQUksT0FBTztBQUFBLElBQ2pDLHdCQUF3QkEsRUFBSSxPQUFPO0FBQUEsRUFDckMsQ0FBQztBQUNILENBQUMsR0FBR3VSLEtBQUt2UixFQUFJLE9BQU87QUFBQSxFQUNsQixVQUFVQSxFQUFJLFFBQVEsWUFBWTtBQUFBLEVBQ2xDLGdCQUFnQkEsRUFBSSxRQUFRLGVBQWU7QUFBQSxFQUMzQyxVQUFVQSxFQUFJLE9BQU87QUFBQSxJQUNuQixzQkFBc0JBLEVBQUksT0FBTztBQUFBLElBQ2pDLHdCQUF3QkEsRUFBSSxPQUFPO0FBQUEsSUFDbkMsd0JBQXdCQSxFQUFJLE9BQU8sRUFBRSxRQUFRO0FBQUEsRUFDL0MsQ0FBQztBQUNILENBQUMsR0FBRyxFQUFFLE9BQU93UixJQUFJLE9BQU9DLEdBQUcsSUFBSTNJLEVBQUUsa0JBQWtCLEdBQUc0SSxLQUFLN0k7QUFBQSxFQUN6RCxPQUFPLEVBQUUsU0FBUyxHQUFHLGVBQWUsRUFBRSxNQUFNO0FBQzFDLFVBQU03SCxJQUFJO0FBQUEsTUFDUixXQUFXOE0sRUFBRSxLQUFLO0FBQUEsTUFDbEIsYUFBYTtBQUFBLE1BQ2IsV0FBVztBQUFBLE1BQ1gsV0FBVyxZQUFZO0FBQUEsTUFDdkI7QUFBQSxJQUNGLEdBQUcxTSxJQUFJOEgsRUFBRSxFQUFFLHdCQUF3Qm9JLEVBQUU7QUFDckMsUUFBSSxDQUFDbFE7QUFDSCxhQUFPSjtBQUNULElBQUF3USxHQUFHLDBCQUEwQjtBQUM3QixRQUFJO0FBQ0YsWUFBTXRCLEdBQUcsR0FBR3NCLEdBQUcsbUNBQW1DO0FBQUEsSUFDcEQsU0FBU3pILEdBQUc7QUFDVixhQUFPMEgsR0FBRyxnQ0FBZ0MxSCxDQUFDLEdBQUcvSTtBQUFBLElBQ2hEO0FBQ0EsUUFBSSxDQUFDLE9BQU8sbUJBQW1CLENBQUMsZ0JBQWdCLGdCQUFnQjtBQUM5RCxhQUFPd1EsR0FBRyxtREFBbUQsR0FBR3hRO0FBQ2xFLFFBQUksQ0FBQyxNQUFNLGdCQUFnQixnQkFBZ0I7QUFDekMsYUFBT3dRLEdBQUcseUNBQXlDLEdBQUd4UTtBQUN4RCxRQUFJLENBQUNJLEVBQUUsU0FBUztBQUNkLFlBQU0sSUFBSSxNQUFNLG1EQUFtRDtBQUNyRSxVQUFNeUQsSUFBSSxFQUFFLGtCQUFrQkMsSUFBSSxNQUFNNEMsRUFBRTdDLENBQUMsR0FBRzJGLElBQUkxRixFQUFFLFNBQVMsU0FBUzJGLElBQUksTUFBTXZDLEdBQUdyRCxHQUFHQyxFQUFFLE9BQU8wRixHQUFHLE1BQU0sR0FBR0QsSUFBSSxPQUFPUixNQUFNO0FBQzFILFVBQUk7QUFDRixjQUFNSSxFQUFFLHFCQUFxQixJQUFJO0FBQUEsVUFDL0IsU0FBUztBQUFBLFVBQ1QsdUJBQXVCL0k7QUFBQSxVQUN2QixrQkFBa0I0RCxHQUFFLEVBQUUsT0FBTztBQUFBLFVBQzdCLGVBQWU7QUFBQSxVQUNmLGNBQWM7QUFBQSxZQUNaLEdBQUcrRTtBQUFBLFlBQ0gsZ0JBQWdCVTtBQUFBLFVBQ2xCO0FBQUEsVUFDQSxZQUFZO0FBQUEsUUFDZCxDQUFDO0FBQUEsTUFDSCxTQUFTVCxHQUFHO0FBQ1YsUUFBQXlILEdBQUcsMkJBQTJCekgsQ0FBQyxHQUFHLEVBQUUsSUFBSSxpQkFBaUJBLEtBQUssT0FBTyxTQUFTQSxFQUFFLFlBQVksZUFBZTtBQUFBLE1BQzdHO0FBQUEsSUFDRjtBQUNBLFdBQU87QUFBQSxNQUNMLFdBQVc4RCxFQUFFLEtBQUs7QUFBQSxNQUNsQixhQUFhO0FBQUEsTUFDYixXQUFXO0FBQUEsTUFDWCxXQUFXdkQ7QUFBQSxJQUNiO0FBQUEsRUFDRjtBQUNGLEdBQUdvSCxLQUFLL0k7QUFBQSxFQUNOLE9BQU87QUFBQSxJQUNMLFNBQVM7QUFBQSxJQUNULHVCQUF1QjtBQUFBLElBQ3ZCLGtCQUFrQjVIO0FBQUEsSUFDbEIsY0FBY0k7QUFBQSxJQUNkLGVBQWU7QUFBQSxFQUNqQixNQUFNO0FBQ0osUUFBSTJMO0FBQ0osVUFBTSxFQUFFLGdCQUFnQm5JLEdBQUcsd0JBQXdCQyxFQUFFLElBQUl6RCxHQUFHMEQsSUFBSW9FLEVBQUUsRUFBRSx3QkFBd0JvSSxFQUFFLEdBQUcsRUFBRSxjQUFjOUcsR0FBRyxPQUFPQyxFQUFFLElBQUk0RixHQUFHO0FBQUEsTUFDbEksd0JBQXdCeEw7QUFBQSxNQUN4QixnQkFBZ0JEO0FBQUEsTUFDaEIsZUFBZW1JLElBQUlqSSxLQUFLLE9BQU8sU0FBU0EsRUFBRSxhQUFhLE9BQU8sU0FBU2lJLEVBQUU7QUFBQSxJQUMzRSxDQUFDLEdBQUd4QyxJQUFJLEVBQUUsa0JBQWtCLElBQUksTUFBTTdDLEVBQUU2QyxDQUFDLEdBQUdQLElBQUksRUFBRSxTQUFTLFNBQVMsSUFBSTtBQUFBLE1BQ3RFLGFBQWE7QUFBQSxNQUNiLGNBQWNRO0FBQUEsTUFDZCxPQUFPQztBQUFBLE1BQ1AsOEJBQThCLENBQUMsU0FBUyxpQkFBaUIsTUFBTTtBQUFBLE1BQy9ELCtCQUErQixDQUFDLE9BQU87QUFBQSxNQUN2QyxtQkFBbUIsQ0FBQyxRQUFRLGNBQWMsUUFBUSxVQUFVO0FBQUEsTUFDNUQsc0JBQXNCLENBQUMsZUFBZSxrQkFBa0IsZUFBZTtBQUFBLE1BQ3ZFLHlCQUF5QjJGLEdBQUc7QUFBQSxRQUMxQixPQUFPM0Y7QUFBQSxRQUNQLFNBQVM7QUFBQSxNQUNYLENBQUM7QUFBQSxNQUNELElBQUk1RixLQUFLLE9BQU8sU0FBU0EsRUFBRSwyQkFBMkIsQ0FBQztBQUFBLElBQ3pELEdBQUdxRixJQUFJLElBQUksZ0JBQWdCLEdBQUcsQ0FBQyxHQUFHNEMsSUFBSTtBQUFBLE1BQ3BDLFNBQVM1QztBQUFBLE1BQ1QsWUFBWSxFQUFFO0FBQUEsTUFDZCx1QkFBdUI7QUFBQSxNQUN2QixrQkFBa0JsSjtBQUFBLE1BQ2xCLGtCQUFrQixFQUFFO0FBQUEsTUFDcEIsU0FBUztBQUFBLE1BQ1QsYUFBYWdKO0FBQUEsTUFDYixTQUFTLEVBQUU7QUFBQSxNQUNYLGVBQWU7QUFBQSxJQUNqQjtBQUNBLFdBQU8sSUFBSSxRQUFRLENBQUN1RCxHQUFHRyxNQUFNO0FBQzNCLE1BQUF4RCxFQUFFLFdBQVcsTUFBTTtBQUNqQixRQUFBc0gsR0FBRywyQkFBMkIsR0FBRzlELEVBQUUsSUFBSSxNQUFNLDJCQUEyQixDQUFDO0FBQUEsTUFDM0UsR0FBR3hELEVBQUUscUJBQXFCLE9BQU80RSxNQUFNO0FBQ3JDLFlBQUk7QUFDRixnQkFBTXNDLEdBQUd0QyxHQUFHaEMsQ0FBQztBQUFBLFFBQ2YsU0FBU2lDLEdBQUc7QUFDVixVQUFBckIsRUFBRXFCLENBQUM7QUFBQSxRQUNMO0FBQUEsTUFDRixHQUFHN0UsRUFBRSwwQkFBMEIsTUFBTTtBQUNuQyxjQUFNNEUsSUFBSTtBQUFBLFVBQ1IsVUFBVSxFQUFFO0FBQUEsUUFDZDtBQUNBLFFBQUE1RSxFQUFFLCtCQUErQjRFLENBQUM7QUFBQSxNQUNwQyxHQUFHNUUsRUFBRSxzQkFBc0IsT0FBTzRFLE1BQU07QUFDdEMsWUFBSTtBQUNGLGdCQUFNQyxJQUFJLE1BQU1zQyxHQUFHdkMsR0FBR2hDLENBQUM7QUFDdkIsVUFBQVMsRUFBRXdCLENBQUM7QUFBQSxRQUNMLFNBQVNBLEdBQUc7QUFDVixVQUFBckIsRUFBRXFCLENBQUM7QUFBQSxRQUNMO0FBQUEsTUFDRixHQUFHN0UsRUFBRSxNQUFNO0FBQUEsSUFDYixDQUFDLEVBQUUsTUFBTSxDQUFDcUQsTUFBTTtBQUNkLFlBQU1rRSxHQUFHLDJCQUEyQmxFLENBQUMsR0FBR0E7QUFBQSxJQUMxQyxDQUFDO0FBQUEsRUFDSDtBQUNGLEdBQUcsRUFBRSxPQUFPcUUsSUFBSSxPQUFPQyxHQUFHLElBQUkvSSxFQUFFLG1CQUFtQixHQUFHZ0osS0FBS2pKO0FBQUEsRUFDekQsT0FBTyxFQUFFLFNBQVMsR0FBRyxlQUFlLEVBQUUsTUFBTTtBQUMxQyxRQUFJMEIsR0FBR1I7QUFDUCxJQUFBNkgsR0FBRyxxQ0FBcUM7QUFDeEMsVUFBTTVRLElBQUk7QUFBQSxNQUNSLFdBQVc4TSxFQUFFLEtBQUs7QUFBQSxNQUNsQixhQUFhO0FBQUEsTUFDYixXQUFXO0FBQUEsTUFDWCxXQUFXLFlBQVk7QUFBQSxNQUN2QjtBQUFBLElBQ0YsR0FBRzFNLElBQUk4SCxFQUFFLEVBQUUsd0JBQXdCcUksRUFBRTtBQUNyQyxRQUFJLENBQUNuUTtBQUNILGFBQU9KO0FBQ1QsSUFBQTRRLEdBQUcsa0JBQWtCeFEsQ0FBQztBQUN0QixVQUFNdUQsSUFBSXZELEVBQUU7QUFDWixRQUFJLENBQUN1RCxFQUFFO0FBQ0wsYUFBT2tOLEdBQUcsbURBQW1ELEdBQUc3UTtBQUNsRSxRQUFJNFEsR0FBRywyQkFBMkIsR0FBRyxNQUFNMUMsR0FBRyxHQUFHLEdBQUduRixLQUFLUSxJQUFJLE9BQU8sV0FBVyxPQUFPLFNBQVNBLEVBQUUsYUFBYSxRQUFRUixFQUFFO0FBQ3RILGFBQU84SCxHQUFHLG9DQUFvQyxHQUFHN1E7QUFDbkQsSUFBQTRRLEdBQUcseUJBQXlCLE9BQU8sT0FBTyxRQUFRO0FBQ2xELFFBQUk7QUFDRixZQUFNNUgsSUFBSWlGLEdBQUc7QUFBQSxRQUNYLFNBQVM7QUFBQSxRQUNULG1CQUFtQnRLLEVBQUU7QUFBQSxRQUNyQixjQUFjQSxFQUFFO0FBQUEsUUFDaEIsWUFBWUEsRUFBRSwwQkFBMEI7QUFBQTtBQUFBLFFBRXhDLGdCQUFnQjtBQUFBLFVBQ2QsWUFBWTtBQUFBLFVBQ1osVUFBVTtBQUFBLFFBQ1o7QUFBQSxNQUNGLENBQUMsR0FBRyxFQUFFLFFBQVFzRixFQUFFLElBQUksTUFBTW9GLEdBQUcsRUFBRSxTQUFTckYsQ0FBQyxFQUFFO0FBQUEsUUFDekNBO0FBQUEsTUFDRjtBQUNBLFVBQUksQ0FBQ0M7QUFDSCxlQUFPMkgsR0FBRywyQ0FBMkMsR0FBRzVRO0FBQUEsSUFDNUQsU0FBU2dKLEdBQUc7QUFDVixhQUFPNkgsR0FBRywwQ0FBMEM3SCxDQUFDLEdBQUdoSjtBQUFBLElBQzFEO0FBQ0EsVUFBTTRELElBQUksRUFBRSxrQkFBa0JDLElBQUksTUFBTTZDLEVBQUU5QyxDQUFDLEdBQUdFLElBQUlELEVBQUUsU0FBUyxTQUFTMkYsSUFBSSxNQUFNdEMsR0FBR3RELEdBQUdDLEVBQUUsT0FBT0MsR0FBRyxNQUFNLEdBQUcyRixJQUFJLE9BQU9ULE1BQU07QUFDMUgsVUFBSTtBQUNGLFFBQUFHLEVBQUUsc0JBQXNCLElBQUk7QUFBQSxVQUMxQixTQUFTO0FBQUEsVUFDVCx1QkFBdUIvSTtBQUFBLFVBQ3ZCLGtCQUFrQjRELEdBQUUsRUFBRSxPQUFPO0FBQUEsVUFDN0IsZUFBZTtBQUFBLFVBQ2YsWUFBWTtBQUFBLFVBQ1osY0FBYztBQUFBLFlBQ1osR0FBR2dGO0FBQUEsWUFDSCxnQkFBZ0JRO0FBQUEsVUFDbEI7QUFBQSxRQUNGLENBQUM7QUFBQSxNQUNILFNBQVNQLEdBQUc7QUFDVixRQUFBNEgsR0FBRyw0QkFBNEI1SCxDQUFDLEdBQUcsRUFBRSxJQUFJLGlCQUFpQkEsS0FBSyxPQUFPLFNBQVNBLEVBQUUsWUFBWSxlQUFlO0FBQUEsTUFDOUc7QUFBQSxJQUNGO0FBQ0EsV0FBTztBQUFBLE1BQ0wsV0FBVzZELEVBQUUsS0FBSztBQUFBLE1BQ2xCLGFBQWE7QUFBQSxNQUNiLFdBQVc7QUFBQSxNQUNYLFdBQVdyRDtBQUFBLElBQ2I7QUFBQSxFQUNGO0FBQ0YsR0FBR3NILEtBQUtuSjtBQUFBLEVBQ04sT0FBTztBQUFBLElBQ0wsU0FBUztBQUFBLElBQ1Qsa0JBQWtCO0FBQUEsSUFDbEIsdUJBQXVCNUg7QUFBQSxJQUN2QixlQUFlSTtBQUFBLElBQ2YsY0FBYztBQUFBLEVBQ2hCLE1BQU07QUFDSixRQUFJMkksR0FBR0MsR0FBR0MsR0FBR0M7QUFDYixVQUFNLEVBQUUsZ0JBQWdCdEYsR0FBRyx3QkFBd0JDLEVBQUUsSUFBSSxHQUFHMkYsSUFBSXRCLEVBQUUsRUFBRSx3QkFBd0JxSSxFQUFFLEVBQUUsVUFBVTlHLElBQUl3RSxHQUFHO0FBQUEsTUFDL0csU0FBUztBQUFBLE1BQ1QsbUJBQW1CekUsRUFBRTtBQUFBLE1BQ3JCLGNBQWNBLEVBQUU7QUFBQSxNQUNoQixZQUFZQSxFQUFFLDBCQUEwQjtBQUFBLE1BQ3hDLGdCQUFnQjVGO0FBQUEsTUFDaEIsd0JBQXdCQztBQUFBLElBQzFCLENBQUMsR0FBRzBGLElBQUk4RSxHQUFHLEVBQUUsU0FBUzVFLENBQUM7QUFDdkIsUUFBSTtBQUNGLFlBQU1xQyxJQUFJLE1BQU12QyxFQUFFLGdCQUFnQkUsQ0FBQztBQUNuQyxNQUFBbUgsR0FBRywyQkFBMkI5RSxDQUFDO0FBQy9CLFlBQU1DLElBQUksRUFBRSxrQkFBa0JRLElBQUksTUFBTTdGLEVBQUVxRixDQUFDLEdBQUdXLElBQUk2QixHQUFHLEdBQUd6QyxDQUFDLEdBQUdnQyxJQUFJdkYsR0FBR21FLEdBQUd0TSxFQUFFLElBQUksaUJBQWlCLEdBQUcyTixLQUFLL0UsS0FBS0QsSUFBSStDLEVBQUUsc0JBQXNCLE9BQU8sU0FBUy9DLEVBQUUscUJBQXFCLE9BQU8sU0FBU0MsRUFBRTtBQUMvTCxVQUFJLENBQUMrRTtBQUNILGNBQU0sSUFBSSxNQUFNLDJDQUEyQztBQUM3RCxZQUFNQyxJQUFJLE1BQU1ySCxHQUFHb0YsR0FBRztBQUFBLFFBQ3BCLGtCQUFrQi9MLEVBQUU7QUFBQSxRQUNwQix5QkFBeUJBO0FBQUEsUUFDekIsb0JBQW9COE4sRUFBRSxFQUFFLEtBQUs7QUFBQSxRQUM3Qix5QkFBeUJBLEVBQUUsRUFBRSxVQUFVO0FBQUEsUUFDdkMsd0JBQXdCQSxFQUFFLEVBQUUsU0FBUztBQUFBLFFBQ3JDLHNCQUFzQjtBQUFBLFVBQ3BCLFVBQVVBLEVBQUUsRUFBRSxRQUFRO0FBQUEsVUFDdEIsU0FBU0EsRUFBRSxFQUFFLE9BQU87QUFBQSxRQUN0QjtBQUFBLE1BQ0YsQ0FBQztBQUNELE1BQUE4QyxHQUFHLCtCQUErQjVDLENBQUM7QUFDbkMsWUFBTUosSUFBSSxNQUFNOUcsRUFBRWlGLEdBQUc7QUFBQSxRQUNuQixjQUFjUSxFQUFFO0FBQUEsUUFDaEIsNkJBQTZCO0FBQUEsVUFDM0Isa0JBQWtCdk0sRUFBRTtBQUFBLFVBQ3BCLDRCQUE0QjtBQUFBLFlBQzFCLGdCQUFnQjtBQUFBLFlBQ2hCLFdBQVcsT0FBTyxLQUFLK04sQ0FBQztBQUFBLFVBQzFCO0FBQUEsUUFDRjtBQUFBLE1BQ0YsQ0FBQztBQUNELFVBQUksR0FBRzdFLEtBQUtELElBQUkyRSxFQUFFLG9CQUFvQixPQUFPLFNBQVMzRSxFQUFFLENBQUMsTUFBTSxRQUFnQkMsRUFBRTtBQUMvRSxjQUFNLElBQUksTUFBTSxnQkFBZ0I7QUFDbEMsYUFBT2QsR0FBRztBQUFBLFFBQ1IsV0FBVztBQUFBLFFBQ1gsa0JBQWtCMkQ7QUFBQSxRQUNsQix1QkFBdUIvTDtBQUFBLFFBQ3ZCLG9CQUFvQjhOO0FBQUEsUUFDcEIsZUFBZUY7QUFBQSxRQUNmLGlCQUFpQjtBQUFBLE1BQ25CLENBQUM7QUFBQSxJQUNILFNBQVM5QixHQUFHO0FBQ1YsWUFBTStFLEdBQUcsNEJBQTRCL0UsQ0FBQyxHQUFHLElBQUksT0FBT0EsS0FBSyxPQUFPLFNBQVNBLEVBQUUsWUFBWSxlQUFlO0FBQUEsSUFDeEc7QUFBQSxFQUNGO0FBQ0YsR0FBR3FCLEtBQUssQ0FBQyxHQUFHLEdBQUduTixNQUFNO0FBQ25CLFFBQU1JLElBQUksRUFBRSxPQUFPLENBQUMsTUFBTTtBQUN4QixVQUFNLElBQUlKLE1BQU0sU0FBUyxLQUFLLEVBQUUsbUJBQW1CQSxHQUFHLElBQUksRUFBRSxhQUFhO0FBQ3pFLFdBQU8sS0FBSztBQUFBLEVBQ2QsQ0FBQztBQUNELE1BQUlJLEVBQUUsV0FBVztBQUNmLFVBQU0sUUFBUSxNQUFNLGFBQWEsQ0FBQyxHQUFHLElBQUksTUFBTSxnQ0FBZ0MsQ0FBQyxvQkFBb0JKLENBQUMsR0FBRztBQUMxRyxNQUFJSSxFQUFFLFdBQVc7QUFDZixVQUFNLFFBQVEsTUFBTSxhQUFhLENBQUMsR0FBRyxJQUFJLE1BQU0sMENBQTBDLENBQUMsb0JBQW9CSixDQUFDLEdBQUc7QUFDcEgsU0FBT0ksRUFBRSxDQUFDO0FBQ1osR0FBRytJLElBQUk7QUFBQTtBQUFBO0FBQUEsRUFHTCxVQUFVO0FBQUEsSUFDUixNQUFNLFlBQVk7QUFBQSxJQUNsQjtBQUFBLElBQ0EsS0FBS21EO0FBQUEsRUFDUDtBQUFBO0FBQUEsRUFFQSxVQUFVO0FBQUEsSUFDUixNQUFNWTtBQUFBLElBQ04sS0FBS0U7QUFBQSxFQUNQO0FBQUEsRUFDQSxZQUFZO0FBQUEsSUFDVixNQUFNdEU7QUFBQSxJQUNOLEtBQUtPO0FBQUEsRUFDUDtBQUFBO0FBQUEsRUFFQSxjQUFjO0FBQUEsSUFDWixLQUFLc0U7QUFBQSxFQUNQO0FBQUE7QUFBQSxFQUVBLG9CQUFvQjtBQUFBLElBQ2xCLE1BQU1lO0FBQUEsSUFDTixLQUFLQztBQUFBLEVBQ1A7QUFBQSxFQUNBLG1CQUFtQjtBQUFBLElBQ2pCLE1BQU1pQjtBQUFBLElBQ04sS0FBS0M7QUFBQSxFQUNQO0FBQUE7QUFBQSxFQUVBLFlBQVk7QUFBQSxJQUNWLE1BQU1LO0FBQUEsSUFDTixLQUFLQztBQUFBLEVBQ1A7QUFBQSxFQUNBLHNCQUFzQjtBQUFBLElBQ3BCLE1BQU1PO0FBQUEsSUFDTixLQUFLQztBQUFBLEVBQ1A7QUFBQSxFQUNBLHVCQUF1QjtBQUFBLElBQ3JCLE1BQU1HO0FBQUEsSUFDTixLQUFLQztBQUFBLEVBQ1A7QUFBQTtBQUFBO0FBR0Y7QUFDQSxJQUFJQyxLQUFLLFNBQVMsR0FBRyxHQUFHO0FBQ3RCLFNBQU9BLEtBQUssT0FBTyxrQkFBa0IsRUFBRSxXQUFXLENBQUMsRUFBRSxhQUFhLFNBQVMsU0FBU2hSLEdBQUdJLEdBQUc7QUFDeEYsSUFBQUosRUFBRSxZQUFZSTtBQUFBLEVBQ2hCLEtBQUssU0FBU0osR0FBR0ksR0FBRztBQUNsQixhQUFTLEtBQUtBLEVBQUcsUUFBTyxVQUFVLGVBQWUsS0FBS0EsR0FBRyxDQUFDLE1BQU1KLEVBQUUsQ0FBQyxJQUFJSSxFQUFFLENBQUM7QUFBQSxFQUM1RSxHQUFHNFEsR0FBRyxHQUFHLENBQUM7QUFDWjtBQUNBLFNBQVNDLEdBQUcsR0FBRyxHQUFHO0FBQ2hCLE1BQUksT0FBTyxLQUFLLGNBQWMsTUFBTTtBQUNsQyxVQUFNLElBQUksVUFBVSx5QkFBeUIsT0FBTyxDQUFDLElBQUksK0JBQStCO0FBQzFGLEVBQUFELEdBQUcsR0FBRyxDQUFDO0FBQ1AsV0FBU2hSLElBQUk7QUFDWCxTQUFLLGNBQWM7QUFBQSxFQUNyQjtBQUNBLElBQUUsWUFBWSxNQUFNLE9BQU8sT0FBTyxPQUFPLENBQUMsS0FBS0EsRUFBRSxZQUFZLEVBQUUsV0FBVyxJQUFJQSxFQUFFO0FBQ2xGO0FBQ0EsU0FBU2tSLEdBQUcsR0FBRyxHQUFHbFIsR0FBR0ksR0FBRztBQUN0QixXQUFTLEVBQUUsR0FBRztBQUNaLFdBQU8sYUFBYUosSUFBSSxJQUFJLElBQUlBLEVBQUUsU0FBUyxHQUFHO0FBQzVDLFFBQUUsQ0FBQztBQUFBLElBQ0wsQ0FBQztBQUFBLEVBQ0g7QUFDQSxTQUFPLEtBQUtBLE1BQU1BLElBQUksVUFBVSxTQUFTLEdBQUcsR0FBRztBQUM3QyxhQUFTLEVBQUUsR0FBRztBQUNaLFVBQUk7QUFDRixVQUFFSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQUEsTUFDYixTQUFTMkksR0FBRztBQUNWLFVBQUVBLENBQUM7QUFBQSxNQUNMO0FBQUEsSUFDRjtBQUNBLGFBQVMsRUFBRSxHQUFHO0FBQ1osVUFBSTtBQUNGLFVBQUUzSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQUEsTUFDZCxTQUFTMkksR0FBRztBQUNWLFVBQUVBLENBQUM7QUFBQSxNQUNMO0FBQUEsSUFDRjtBQUNBLGFBQVMsRUFBRSxHQUFHO0FBQ1osUUFBRSxPQUFPLEVBQUUsRUFBRSxLQUFLLElBQUksRUFBRSxFQUFFLEtBQUssRUFBRSxLQUFLLEdBQUcsQ0FBQztBQUFBLElBQzVDO0FBQ0EsT0FBRzNJLElBQUlBLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUFBLEVBQy9CLENBQUM7QUFDSDtBQUNBLFNBQVMrUSxHQUFHLEdBQUcsR0FBRztBQUNoQixNQUFJblIsSUFBSSxFQUFFLE9BQU8sR0FBRyxNQUFNLFdBQVc7QUFDbkMsUUFBSSxFQUFFLENBQUMsSUFBSSxFQUFHLE9BQU0sRUFBRSxDQUFDO0FBQ3ZCLFdBQU8sRUFBRSxDQUFDO0FBQUEsRUFDWixHQUFHLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLEdBQUdJLEdBQUcsR0FBRyxHQUFHLElBQUksT0FBTyxRQUFRLE9BQU8sWUFBWSxhQUFhLFdBQVcsUUFBUSxTQUFTO0FBQ2hILFNBQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLEVBQUUsUUFBUSxFQUFFLENBQUMsR0FBRyxFQUFFLFNBQVMsRUFBRSxDQUFDLEdBQUcsT0FBTyxVQUFVLGVBQWUsRUFBRSxPQUFPLFFBQVEsSUFBSSxXQUFXO0FBQ3JILFdBQU87QUFBQSxFQUNULElBQUk7QUFDSixXQUFTLEVBQUUsR0FBRztBQUNaLFdBQU8sU0FBUyxHQUFHO0FBQ2pCLGFBQU8sRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQUEsSUFDakI7QUFBQSxFQUNGO0FBQ0EsV0FBUyxFQUFFLEdBQUc7QUFDWixRQUFJQSxFQUFHLE9BQU0sSUFBSSxVQUFVLGlDQUFpQztBQUM1RCxXQUFPLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxNQUFNSixJQUFJLEtBQUtBLElBQUssS0FBSTtBQUM3QyxVQUFJSSxJQUFJLEdBQUcsTUFBTSxJQUFJLEVBQUUsQ0FBQyxJQUFJLElBQUksRUFBRSxTQUFTLEVBQUUsQ0FBQyxJQUFJLEVBQUUsV0FBVyxJQUFJLEVBQUUsV0FBVyxFQUFFLEtBQUssQ0FBQyxHQUFHLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLEtBQU0sUUFBTztBQUMvSSxjQUFRLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxHQUFHLEVBQUUsS0FBSyxJQUFJLEVBQUUsQ0FBQyxHQUFHO0FBQUEsUUFDbkQsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGNBQUk7QUFDSjtBQUFBLFFBQ0YsS0FBSztBQUNILGlCQUFPSixFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxHQUFHLE1BQU0sR0FBRztBQUFBLFFBQzVDLEtBQUs7QUFDSCxVQUFBQSxFQUFFLFNBQVMsSUFBSSxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztBQUMzQjtBQUFBLFFBQ0YsS0FBSztBQUNILGNBQUlBLEVBQUUsSUFBSSxJQUFJLEdBQUdBLEVBQUUsS0FBSyxJQUFJO0FBQzVCO0FBQUEsUUFDRjtBQUNFLGNBQUksSUFBSUEsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsS0FBSyxFQUFFLEVBQUUsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLE1BQU0sS0FBSyxFQUFFLENBQUMsTUFBTSxJQUFJO0FBQ3BGLFlBQUFBLElBQUk7QUFDSjtBQUFBLFVBQ0Y7QUFDQSxjQUFJLEVBQUUsQ0FBQyxNQUFNLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJO0FBQ3BELFlBQUFBLEVBQUUsUUFBUSxFQUFFLENBQUM7QUFDYjtBQUFBLFVBQ0Y7QUFDQSxjQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUtBLEVBQUUsUUFBUSxFQUFFLENBQUMsR0FBRztBQUNoQyxZQUFBQSxFQUFFLFFBQVEsRUFBRSxDQUFDLEdBQUcsSUFBSTtBQUNwQjtBQUFBLFVBQ0Y7QUFDQSxjQUFJLEtBQUtBLEVBQUUsUUFBUSxFQUFFLENBQUMsR0FBRztBQUN2QixZQUFBQSxFQUFFLFFBQVEsRUFBRSxDQUFDLEdBQUdBLEVBQUUsSUFBSSxLQUFLLENBQUM7QUFDNUI7QUFBQSxVQUNGO0FBQ0EsWUFBRSxDQUFDLEtBQUtBLEVBQUUsSUFBSSxJQUFJLEdBQUdBLEVBQUUsS0FBSyxJQUFJO0FBQ2hDO0FBQUEsTUFDSjtBQUNBLFVBQUksRUFBRSxLQUFLLEdBQUdBLENBQUM7QUFBQSxJQUNqQixTQUFTLEdBQUc7QUFDVixVQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSTtBQUFBLElBQ2xCLFVBQUU7QUFDQSxNQUFBSSxJQUFJLElBQUk7QUFBQSxJQUNWO0FBQ0EsUUFBSSxFQUFFLENBQUMsSUFBSSxFQUFHLE9BQU0sRUFBRSxDQUFDO0FBQ3ZCLFdBQU8sRUFBRSxPQUFPLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxJQUFJLFFBQVEsTUFBTSxHQUFHO0FBQUEsRUFDakQ7QUFDRjtBQUNBLFNBQVNnUixHQUFHLEdBQUc7QUFDYixNQUFJLElBQUksT0FBTyxVQUFVLGNBQWMsT0FBTyxVQUFVcFIsSUFBSSxLQUFLLEVBQUUsQ0FBQyxHQUFHSSxJQUFJO0FBQzNFLE1BQUlKLEVBQUcsUUFBT0EsRUFBRSxLQUFLLENBQUM7QUFDdEIsTUFBSSxLQUFLLE9BQU8sRUFBRSxVQUFVLFNBQVUsUUFBTztBQUFBLElBQzNDLE1BQU0sV0FBVztBQUNmLGFBQU8sS0FBS0ksS0FBSyxFQUFFLFdBQVcsSUFBSSxTQUFTLEVBQUUsT0FBTyxLQUFLLEVBQUVBLEdBQUcsR0FBRyxNQUFNLENBQUMsRUFBRTtBQUFBLElBQzVFO0FBQUEsRUFDRjtBQUNBLFFBQU0sSUFBSSxVQUFVLElBQUksNEJBQTRCLGlDQUFpQztBQUN2RjtBQUNBLFNBQVNpUixHQUFHLEdBQUcsR0FBRztBQUNoQixNQUFJclIsSUFBSSxPQUFPLFVBQVUsY0FBYyxFQUFFLE9BQU8sUUFBUTtBQUN4RCxNQUFJLENBQUNBLEVBQUcsUUFBTztBQUNmLE1BQUlJLElBQUlKLEVBQUUsS0FBSyxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRztBQUM5QixNQUFJO0FBQ0YsWUFBUSxNQUFNLFVBQVUsTUFBTSxNQUFNLEVBQUUsSUFBSUksRUFBRSxLQUFLLEdBQUcsT0FBUSxHQUFFLEtBQUssRUFBRSxLQUFLO0FBQUEsRUFDNUUsU0FBUyxHQUFHO0FBQ1YsUUFBSSxFQUFFLE9BQU8sRUFBRTtBQUFBLEVBQ2pCLFVBQUU7QUFDQSxRQUFJO0FBQ0YsV0FBSyxDQUFDLEVBQUUsU0FBU0osSUFBSUksRUFBRSxXQUFXSixFQUFFLEtBQUtJLENBQUM7QUFBQSxJQUM1QyxVQUFFO0FBQ0EsVUFBSSxFQUFHLE9BQU0sRUFBRTtBQUFBLElBQ2pCO0FBQUEsRUFDRjtBQUNBLFNBQU87QUFDVDtBQUNBLFNBQVNrUixHQUFHLEdBQUcsR0FBR3RSLEdBQUc7QUFDbkIsTUFBSSxVQUFVLFdBQVcsRUFBRyxVQUFTSSxJQUFJLEdBQUcsSUFBSSxFQUFFLFFBQVEsR0FBR0EsSUFBSSxHQUFHQTtBQUNsRSxLQUFDLEtBQUssRUFBRUEsS0FBSyxRQUFRLE1BQU0sSUFBSSxNQUFNLFVBQVUsTUFBTSxLQUFLLEdBQUcsR0FBR0EsQ0FBQyxJQUFJLEVBQUVBLENBQUMsSUFBSSxFQUFFQSxDQUFDO0FBQ2pGLFNBQU8sRUFBRSxPQUFPLEtBQUssTUFBTSxVQUFVLE1BQU0sS0FBSyxDQUFDLENBQUM7QUFDcEQ7QUFDQSxTQUFTbVIsR0FBRyxHQUFHO0FBQ2IsU0FBTyxnQkFBZ0JBLE1BQU0sS0FBSyxJQUFJLEdBQUcsUUFBUSxJQUFJQSxHQUFHLENBQUM7QUFDM0Q7QUFDQSxTQUFTQyxHQUFHLEdBQUcsR0FBR3hSLEdBQUc7QUFDbkIsTUFBSSxDQUFDLE9BQU8sY0FBZSxPQUFNLElBQUksVUFBVSxzQ0FBc0M7QUFDckYsTUFBSUksSUFBSUosRUFBRSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQztBQUNyQyxTQUFPLElBQUksT0FBTyxRQUFRLE9BQU8saUJBQWlCLGFBQWEsZ0JBQWdCLFFBQVEsU0FBUyxHQUFHLEVBQUUsTUFBTSxHQUFHLEVBQUUsT0FBTyxHQUFHLEVBQUUsVUFBVSxDQUFDLEdBQUcsRUFBRSxPQUFPLGFBQWEsSUFBSSxXQUFXO0FBQzdLLFdBQU87QUFBQSxFQUNULEdBQUc7QUFDSCxXQUFTLEVBQUVpSixHQUFHO0FBQ1osV0FBTyxTQUFTQyxHQUFHO0FBQ2pCLGFBQU8sUUFBUSxRQUFRQSxDQUFDLEVBQUUsS0FBS0QsR0FBR0YsQ0FBQztBQUFBLElBQ3JDO0FBQUEsRUFDRjtBQUNBLFdBQVMsRUFBRUUsR0FBR0MsR0FBRztBQUNmLElBQUE5SSxFQUFFNkksQ0FBQyxNQUFNLEVBQUVBLENBQUMsSUFBSSxTQUFTNkMsR0FBRztBQUMxQixhQUFPLElBQUksUUFBUSxTQUFTQyxHQUFHUSxHQUFHO0FBQ2hDLFVBQUUsS0FBSyxDQUFDdEQsR0FBRzZDLEdBQUdDLEdBQUdRLENBQUMsQ0FBQyxJQUFJLEtBQUssRUFBRXRELEdBQUc2QyxDQUFDO0FBQUEsTUFDcEMsQ0FBQztBQUFBLElBQ0gsR0FBRzVDLE1BQU0sRUFBRUQsQ0FBQyxJQUFJQyxFQUFFLEVBQUVELENBQUMsQ0FBQztBQUFBLEVBQ3hCO0FBQ0EsV0FBUyxFQUFFQSxHQUFHQyxHQUFHO0FBQ2YsUUFBSTtBQUNGLFFBQUU5SSxFQUFFNkksQ0FBQyxFQUFFQyxDQUFDLENBQUM7QUFBQSxJQUNYLFNBQVM0QyxHQUFHO0FBQ1YsTUFBQTlDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHOEMsQ0FBQztBQUFBLElBQ2Q7QUFBQSxFQUNGO0FBQ0EsV0FBUyxFQUFFN0MsR0FBRztBQUNaLElBQUFBLEVBQUUsaUJBQWlCc0ksS0FBSyxRQUFRLFFBQVF0SSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEtBQUssR0FBR0YsQ0FBQyxJQUFJQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBR0MsQ0FBQztBQUFBLEVBQzlFO0FBQ0EsV0FBUyxFQUFFQSxHQUFHO0FBQ1osTUFBRSxRQUFRQSxDQUFDO0FBQUEsRUFDYjtBQUNBLFdBQVNGLEVBQUVFLEdBQUc7QUFDWixNQUFFLFNBQVNBLENBQUM7QUFBQSxFQUNkO0FBQ0EsV0FBU0QsRUFBRUMsR0FBR0MsR0FBRztBQUNmLElBQUFELEVBQUVDLENBQUMsR0FBRyxFQUFFLE1BQU0sR0FBRyxFQUFFLFVBQVUsRUFBRSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQUEsRUFDakQ7QUFDRjtBQUNBLFNBQVN1SSxHQUFHLEdBQUc7QUFDYixNQUFJLENBQUMsT0FBTyxjQUFlLE9BQU0sSUFBSSxVQUFVLHNDQUFzQztBQUNyRixNQUFJLElBQUksRUFBRSxPQUFPLGFBQWEsR0FBR3pSO0FBQ2pDLFNBQU8sSUFBSSxFQUFFLEtBQUssQ0FBQyxLQUFLLElBQUksT0FBT29SLE1BQU0sYUFBYUEsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLFFBQVEsRUFBRSxHQUFHcFIsSUFBSSxDQUFDLEdBQUdJLEVBQUUsTUFBTSxHQUFHQSxFQUFFLE9BQU8sR0FBR0EsRUFBRSxRQUFRLEdBQUdKLEVBQUUsT0FBTyxhQUFhLElBQUksV0FBVztBQUNuSyxXQUFPO0FBQUEsRUFDVCxHQUFHQTtBQUNILFdBQVNJLEVBQUUsR0FBRztBQUNaLElBQUFKLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLFNBQVMsR0FBRztBQUN6QixhQUFPLElBQUksUUFBUSxTQUFTLEdBQUcsR0FBRztBQUNoQyxZQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsR0FBRyxFQUFFLE1BQU0sRUFBRSxLQUFLO0FBQUEsTUFDdEMsQ0FBQztBQUFBLElBQ0g7QUFBQSxFQUNGO0FBQ0EsV0FBUyxFQUFFLEdBQUcsR0FBRyxHQUFHLEdBQUc7QUFDckIsWUFBUSxRQUFRLENBQUMsRUFBRSxLQUFLLFNBQVMsR0FBRztBQUNsQyxRQUFFLEVBQUUsT0FBTyxHQUFHLE1BQU0sRUFBRSxDQUFDO0FBQUEsSUFDekIsR0FBRyxDQUFDO0FBQUEsRUFDTjtBQUNGO0FBQ0EsU0FBUzBSLEVBQUUsR0FBRztBQUNaLFNBQU8sT0FBTyxLQUFLO0FBQ3JCO0FBQ0EsU0FBU0MsR0FBRyxHQUFHO0FBQ2IsTUFBSSxJQUFJLFNBQVN2UixHQUFHO0FBQ2xCLFVBQU0sS0FBS0EsQ0FBQyxHQUFHQSxFQUFFLFFBQVEsSUFBSSxNQUFNLEVBQUU7QUFBQSxFQUN2QyxHQUFHSixJQUFJLEVBQUUsQ0FBQztBQUNWLFNBQU9BLEVBQUUsWUFBWSxPQUFPLE9BQU8sTUFBTSxTQUFTLEdBQUdBLEVBQUUsVUFBVSxjQUFjQSxHQUFHQTtBQUNwRjtBQUNBLElBQUk0UixLQUFLRCxHQUFHLFNBQVMsR0FBRztBQUN0QixTQUFPLFNBQVMzUixHQUFHO0FBQ2pCLE1BQUUsSUFBSSxHQUFHLEtBQUssVUFBVUEsSUFBSUEsRUFBRSxTQUFTO0FBQUEsSUFDdkNBLEVBQUUsSUFBSSxTQUFTLEdBQUcyRCxHQUFHO0FBQ25CLGFBQU9BLElBQUksSUFBSSxPQUFPLEVBQUUsU0FBUztBQUFBLElBQ25DLENBQUMsRUFBRSxLQUFLO0FBQUEsR0FDVCxJQUFJLElBQUksS0FBSyxPQUFPLHVCQUF1QixLQUFLLFNBQVMzRDtBQUFBLEVBQzFEO0FBQ0YsQ0FBQztBQUNELFNBQVM2UixHQUFHLEdBQUcsR0FBRztBQUNoQixNQUFJLEdBQUc7QUFDTCxRQUFJN1IsSUFBSSxFQUFFLFFBQVEsQ0FBQztBQUNuQixTQUFLQSxLQUFLLEVBQUUsT0FBT0EsR0FBRyxDQUFDO0FBQUEsRUFDekI7QUFDRjtBQUNBLElBQUk4UixLQUFLLFdBQVc7QUFDbEIsV0FBUyxFQUFFLEdBQUc7QUFDWixTQUFLLGtCQUFrQixHQUFHLEtBQUssU0FBUyxJQUFJLEtBQUssYUFBYSxNQUFNLEtBQUssY0FBYztBQUFBLEVBQ3pGO0FBQ0EsU0FBTyxFQUFFLFVBQVUsY0FBYyxXQUFXO0FBQzFDLFFBQUksR0FBRzlSLEdBQUdJLEdBQUcsR0FBRztBQUNoQixRQUFJLENBQUMsS0FBSyxRQUFRO0FBQ2hCLFdBQUssU0FBUztBQUNkLFVBQUksSUFBSSxLQUFLO0FBQ2IsVUFBSTtBQUNGLFlBQUksS0FBSyxhQUFhLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDekMsY0FBSTtBQUNGLHFCQUFTLElBQUlnUixHQUFHLENBQUMsR0FBRyxJQUFJLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxNQUFNLElBQUksRUFBRSxLQUFLLEdBQUc7QUFDdkQsa0JBQUksSUFBSSxFQUFFO0FBQ1YsZ0JBQUUsT0FBTyxJQUFJO0FBQUEsWUFDZjtBQUFBLFVBQ0YsU0FBU3RGLEdBQUc7QUFDVixnQkFBSSxFQUFFLE9BQU9BLEVBQUU7QUFBQSxVQUNqQixVQUFFO0FBQ0EsZ0JBQUk7QUFDRixtQkFBSyxDQUFDLEVBQUUsU0FBUzlMLElBQUksRUFBRSxXQUFXQSxFQUFFLEtBQUssQ0FBQztBQUFBLFlBQzVDLFVBQUU7QUFDQSxrQkFBSSxFQUFHLE9BQU0sRUFBRTtBQUFBLFlBQ2pCO0FBQUEsVUFDRjtBQUFBO0FBRUEsWUFBRSxPQUFPLElBQUk7QUFDakIsVUFBSSxJQUFJLEtBQUs7QUFDYixVQUFJMFIsRUFBRSxDQUFDO0FBQ0wsWUFBSTtBQUNGLFlBQUU7QUFBQSxRQUNKLFNBQVM1RixHQUFHO0FBQ1YsY0FBSUEsYUFBYThGLEtBQUs5RixFQUFFLFNBQVMsQ0FBQ0EsQ0FBQztBQUFBLFFBQ3JDO0FBQ0YsVUFBSS9DLElBQUksS0FBSztBQUNiLFVBQUlBLEdBQUc7QUFDTCxhQUFLLGNBQWM7QUFDbkIsWUFBSTtBQUNGLG1CQUFTQyxJQUFJb0ksR0FBR3JJLENBQUMsR0FBR0UsSUFBSUQsRUFBRSxLQUFLLEdBQUcsQ0FBQ0MsRUFBRSxNQUFNQSxJQUFJRCxFQUFFLEtBQUssR0FBRztBQUN2RCxnQkFBSUUsSUFBSUQsRUFBRTtBQUNWLGdCQUFJO0FBQ0YsY0FBQThJLEdBQUc3SSxDQUFDO0FBQUEsWUFDTixTQUFTNEMsR0FBRztBQUNWLGtCQUFJLEtBQUssQ0FBQyxHQUFHQSxhQUFhOEYsS0FBSyxJQUFJTixHQUFHQSxHQUFHLENBQUMsR0FBR0QsR0FBRyxDQUFDLENBQUMsR0FBR0EsR0FBR3ZGLEVBQUUsTUFBTSxDQUFDLElBQUksRUFBRSxLQUFLQSxDQUFDO0FBQUEsWUFDL0U7QUFBQSxVQUNGO0FBQUEsUUFDRixTQUFTQSxHQUFHO0FBQ1YsVUFBQTFMLElBQUksRUFBRSxPQUFPMEwsRUFBRTtBQUFBLFFBQ2pCLFVBQUU7QUFDQSxjQUFJO0FBQ0YsWUFBQTdDLEtBQUssQ0FBQ0EsRUFBRSxTQUFTLElBQUlELEVBQUUsV0FBVyxFQUFFLEtBQUtBLENBQUM7QUFBQSxVQUM1QyxVQUFFO0FBQ0EsZ0JBQUk1SSxFQUFHLE9BQU1BLEVBQUU7QUFBQSxVQUNqQjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQ0EsVUFBSTtBQUNGLGNBQU0sSUFBSXdSLEdBQUcsQ0FBQztBQUFBLElBQ2xCO0FBQUEsRUFDRixHQUFHLEVBQUUsVUFBVSxNQUFNLFNBQVMsR0FBRztBQUMvQixRQUFJNVI7QUFDSixRQUFJLEtBQUssTUFBTTtBQUNiLFVBQUksS0FBSztBQUNQLFFBQUErUixHQUFHLENBQUM7QUFBQSxXQUNEO0FBQ0gsWUFBSSxhQUFhLEdBQUc7QUFDbEIsY0FBSSxFQUFFLFVBQVUsRUFBRSxXQUFXLElBQUk7QUFDL0I7QUFDRixZQUFFLFdBQVcsSUFBSTtBQUFBLFFBQ25CO0FBQ0EsU0FBQyxLQUFLLGVBQWUvUixJQUFJLEtBQUssaUJBQWlCLFFBQVFBLE1BQU0sU0FBU0EsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO0FBQUEsTUFDdEY7QUFBQSxFQUNKLEdBQUcsRUFBRSxVQUFVLGFBQWEsU0FBUyxHQUFHO0FBQ3RDLFFBQUlBLElBQUksS0FBSztBQUNiLFdBQU9BLE1BQU0sS0FBSyxNQUFNLFFBQVFBLENBQUMsS0FBS0EsRUFBRSxTQUFTLENBQUM7QUFBQSxFQUNwRCxHQUFHLEVBQUUsVUFBVSxhQUFhLFNBQVMsR0FBRztBQUN0QyxRQUFJQSxJQUFJLEtBQUs7QUFDYixTQUFLLGFBQWEsTUFBTSxRQUFRQSxDQUFDLEtBQUtBLEVBQUUsS0FBSyxDQUFDLEdBQUdBLEtBQUtBLElBQUksQ0FBQ0EsR0FBRyxDQUFDLElBQUk7QUFBQSxFQUNyRSxHQUFHLEVBQUUsVUFBVSxnQkFBZ0IsU0FBUyxHQUFHO0FBQ3pDLFFBQUlBLElBQUksS0FBSztBQUNiLElBQUFBLE1BQU0sSUFBSSxLQUFLLGFBQWEsT0FBTyxNQUFNLFFBQVFBLENBQUMsS0FBSzZSLEdBQUc3UixHQUFHLENBQUM7QUFBQSxFQUNoRSxHQUFHLEVBQUUsVUFBVSxTQUFTLFNBQVMsR0FBRztBQUNsQyxRQUFJQSxJQUFJLEtBQUs7QUFDYixJQUFBQSxLQUFLNlIsR0FBRzdSLEdBQUcsQ0FBQyxHQUFHLGFBQWEsS0FBSyxFQUFFLGNBQWMsSUFBSTtBQUFBLEVBQ3ZELEdBQUcsRUFBRSxRQUFRLFdBQVc7QUFDdEIsUUFBSSxJQUFJLElBQUksRUFBRTtBQUNkLFdBQU8sRUFBRSxTQUFTLElBQUk7QUFBQSxFQUN4QixFQUFFLEdBQUc7QUFDUCxFQUFFLEdBQUdnUyxLQUFLRixHQUFHO0FBQ2IsU0FBU0csR0FBRyxHQUFHO0FBQ2IsU0FBTyxhQUFhSCxNQUFNLEtBQUssWUFBWSxLQUFLSixFQUFFLEVBQUUsTUFBTSxLQUFLQSxFQUFFLEVBQUUsR0FBRyxLQUFLQSxFQUFFLEVBQUUsV0FBVztBQUM1RjtBQUNBLFNBQVNLLEdBQUcsR0FBRztBQUNiLEVBQUFMLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFlBQVk7QUFDN0I7QUFDQSxJQUFJUSxLQUFLO0FBQUEsRUFDUCxrQkFBa0I7QUFBQSxFQUNsQix1QkFBdUI7QUFBQSxFQUN2QixTQUFTO0FBQUEsRUFDVCx1Q0FBdUM7QUFBQSxFQUN2QywwQkFBMEI7QUFDNUIsR0FBR0MsS0FBSztBQUFBLEVBQ04sWUFBWSxTQUFTLEdBQUcsR0FBRztBQUN6QixhQUFTblMsSUFBSSxDQUFDLEdBQUdJLElBQUksR0FBR0EsSUFBSSxVQUFVLFFBQVFBO0FBQzVDLE1BQUFKLEVBQUVJLElBQUksQ0FBQyxJQUFJLFVBQVVBLENBQUM7QUFDeEIsV0FBTyxXQUFXLE1BQU0sUUFBUWtSLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBR0QsR0FBR3JSLENBQUMsQ0FBQyxDQUFDO0FBQUEsRUFDbkQ7QUFBQSxFQUNBLGNBQWMsU0FBUyxHQUFHO0FBQ3hCLFdBQVEsYUFBYyxDQUFDO0FBQUEsRUFDekI7QUFBQSxFQUNBLFVBQVU7QUFDWjtBQUNBLFNBQVNvUyxHQUFHLEdBQUc7QUFDYixFQUFBRCxHQUFHLFdBQVcsV0FBVztBQUN2QixVQUFNO0FBQUEsRUFDUixDQUFDO0FBQ0g7QUFDQSxTQUFTRSxLQUFLO0FBQ2Q7QUFDQSxTQUFTQyxHQUFHLEdBQUc7QUFDYixJQUFFO0FBQ0o7QUFDQSxJQUFJQyxLQUFLLFNBQVMsR0FBRztBQUNuQixFQUFBdEIsR0FBRyxHQUFHLENBQUM7QUFDUCxXQUFTLEVBQUVqUixHQUFHO0FBQ1osUUFBSUksSUFBSSxFQUFFLEtBQUssSUFBSSxLQUFLO0FBQ3hCLFdBQU9BLEVBQUUsWUFBWSxJQUFJSixLQUFLSSxFQUFFLGNBQWNKLEdBQUdpUyxHQUFHalMsQ0FBQyxLQUFLQSxFQUFFLElBQUlJLENBQUMsS0FBS0EsRUFBRSxjQUFjb1MsSUFBSXBTO0FBQUEsRUFDNUY7QUFDQSxTQUFPLEVBQUUsU0FBUyxTQUFTSixHQUFHSSxHQUFHLEdBQUc7QUFDbEMsV0FBTyxJQUFJcVMsR0FBR3pTLEdBQUdJLEdBQUcsQ0FBQztBQUFBLEVBQ3ZCLEdBQUcsRUFBRSxVQUFVLE9BQU8sU0FBU0osR0FBRztBQUNoQyxTQUFLLGFBQWEsS0FBSyxNQUFNQSxDQUFDO0FBQUEsRUFDaEMsR0FBRyxFQUFFLFVBQVUsUUFBUSxTQUFTQSxHQUFHO0FBQ2pDLFNBQUssY0FBYyxLQUFLLFlBQVksSUFBSSxLQUFLLE9BQU9BLENBQUM7QUFBQSxFQUN2RCxHQUFHLEVBQUUsVUFBVSxXQUFXLFdBQVc7QUFDbkMsU0FBSyxjQUFjLEtBQUssWUFBWSxJQUFJLEtBQUssVUFBVTtBQUFBLEVBQ3pELEdBQUcsRUFBRSxVQUFVLGNBQWMsV0FBVztBQUN0QyxTQUFLLFdBQVcsS0FBSyxZQUFZLElBQUksRUFBRSxVQUFVLFlBQVksS0FBSyxJQUFJLEdBQUcsS0FBSyxjQUFjO0FBQUEsRUFDOUYsR0FBRyxFQUFFLFVBQVUsUUFBUSxTQUFTQSxHQUFHO0FBQ2pDLFNBQUssWUFBWSxLQUFLQSxDQUFDO0FBQUEsRUFDekIsR0FBRyxFQUFFLFVBQVUsU0FBUyxTQUFTQSxHQUFHO0FBQ2xDLFFBQUk7QUFDRixXQUFLLFlBQVksTUFBTUEsQ0FBQztBQUFBLElBQzFCLFVBQUU7QUFDQSxXQUFLLFlBQVk7QUFBQSxJQUNuQjtBQUFBLEVBQ0YsR0FBRyxFQUFFLFVBQVUsWUFBWSxXQUFXO0FBQ3BDLFFBQUk7QUFDRixXQUFLLFlBQVksU0FBUztBQUFBLElBQzVCLFVBQUU7QUFDQSxXQUFLLFlBQVk7QUFBQSxJQUNuQjtBQUFBLEVBQ0YsR0FBRztBQUNMLEVBQUU4UixFQUFFLEdBQUdZLEtBQUssU0FBUyxVQUFVO0FBQy9CLFNBQVNDLEdBQUcsR0FBRyxHQUFHO0FBQ2hCLFNBQU9ELEdBQUcsS0FBSyxHQUFHLENBQUM7QUFDckI7QUFDQSxJQUFJRSxLQUFLLFdBQVc7QUFDbEIsV0FBUyxFQUFFLEdBQUc7QUFDWixTQUFLLGtCQUFrQjtBQUFBLEVBQ3pCO0FBQ0EsU0FBTyxFQUFFLFVBQVUsT0FBTyxTQUFTLEdBQUc7QUFDcEMsUUFBSTVTLElBQUksS0FBSztBQUNiLFFBQUlBLEVBQUU7QUFDSixVQUFJO0FBQ0YsUUFBQUEsRUFBRSxLQUFLLENBQUM7QUFBQSxNQUNWLFNBQVNJLEdBQUc7QUFDVixRQUFBeVMsR0FBR3pTLENBQUM7QUFBQSxNQUNOO0FBQUEsRUFDSixHQUFHLEVBQUUsVUFBVSxRQUFRLFNBQVMsR0FBRztBQUNqQyxRQUFJSixJQUFJLEtBQUs7QUFDYixRQUFJQSxFQUFFO0FBQ0osVUFBSTtBQUNGLFFBQUFBLEVBQUUsTUFBTSxDQUFDO0FBQUEsTUFDWCxTQUFTSSxHQUFHO0FBQ1YsUUFBQXlTLEdBQUd6UyxDQUFDO0FBQUEsTUFDTjtBQUFBO0FBRUEsTUFBQXlTLEdBQUcsQ0FBQztBQUFBLEVBQ1IsR0FBRyxFQUFFLFVBQVUsV0FBVyxXQUFXO0FBQ25DLFFBQUksSUFBSSxLQUFLO0FBQ2IsUUFBSSxFQUFFO0FBQ0osVUFBSTtBQUNGLFVBQUUsU0FBUztBQUFBLE1BQ2IsU0FBUzdTLEdBQUc7QUFDVixRQUFBNlMsR0FBRzdTLENBQUM7QUFBQSxNQUNOO0FBQUEsRUFDSixHQUFHO0FBQ0wsRUFBRSxHQUFHeVMsS0FBSyxTQUFTLEdBQUc7QUFDcEIsRUFBQXhCLEdBQUcsR0FBRyxDQUFDO0FBQ1AsV0FBUyxFQUFFalIsR0FBR0ksR0FBRyxHQUFHO0FBQ2xCLFFBQUksSUFBSSxFQUFFLEtBQUssSUFBSSxLQUFLLE1BQU07QUFDOUIsUUFBSXNSLEVBQUUxUixDQUFDLEtBQUssQ0FBQ0E7QUFDWCxVQUFJO0FBQUEsUUFDRixNQUFNQSxLQUFLO0FBQUEsUUFDWCxPQUFPSSxLQUFLO0FBQUEsUUFDWixVQUFVLEtBQUs7QUFBQSxNQUNqQjtBQUFBLFNBQ0c7QUFDSCxVQUFJO0FBQ0osV0FBSzhSLEdBQUcsNEJBQTRCLElBQUksT0FBTyxPQUFPbFMsQ0FBQyxHQUFHLEVBQUUsY0FBYyxXQUFXO0FBQ25GLGVBQU8sRUFBRSxZQUFZO0FBQUEsTUFDdkIsR0FBRyxJQUFJO0FBQUEsUUFDTCxNQUFNQSxFQUFFLFFBQVEyUyxHQUFHM1MsRUFBRSxNQUFNLENBQUM7QUFBQSxRQUM1QixPQUFPQSxFQUFFLFNBQVMyUyxHQUFHM1MsRUFBRSxPQUFPLENBQUM7QUFBQSxRQUMvQixVQUFVQSxFQUFFLFlBQVkyUyxHQUFHM1MsRUFBRSxVQUFVLENBQUM7QUFBQSxNQUMxQyxLQUFLLElBQUlBO0FBQUEsSUFDWDtBQUNBLFdBQU8sRUFBRSxjQUFjLElBQUk0UyxHQUFHLENBQUMsR0FBRztBQUFBLEVBQ3BDO0FBQ0EsU0FBTztBQUNULEVBQUVMLEVBQUU7QUFDSixTQUFTTSxHQUFHLEdBQUc7QUFDYixFQUFBVCxHQUFHLENBQUM7QUFDTjtBQUNBLFNBQVNVLEdBQUcsR0FBRztBQUNiLFFBQU07QUFDUjtBQUNBLElBQUlOLEtBQUs7QUFBQSxFQUNQLFFBQVE7QUFBQSxFQUNSLE1BQU1IO0FBQUEsRUFDTixPQUFPUztBQUFBLEVBQ1AsVUFBVVQ7QUFDWixHQUFHVSxLQUFLLFdBQVc7QUFDakIsU0FBTyxPQUFPLFVBQVUsY0FBYyxPQUFPLGNBQWM7QUFDN0QsRUFBRTtBQUNGLFNBQVNDLEdBQUcsR0FBRztBQUNiLFNBQU87QUFDVDtBQUNBLFNBQVNDLEdBQUcsR0FBRztBQUNiLFNBQU8sRUFBRSxXQUFXLElBQUlELEtBQUssRUFBRSxXQUFXLElBQUksRUFBRSxDQUFDLElBQUksU0FBU2hULEdBQUc7QUFDL0QsV0FBTyxFQUFFLE9BQU8sU0FBUyxHQUFHMkQsR0FBRztBQUM3QixhQUFPQSxFQUFFLENBQUM7QUFBQSxJQUNaLEdBQUczRCxDQUFDO0FBQUEsRUFDTjtBQUNGO0FBQ0EsSUFBSWtULEtBQUksV0FBVztBQUNqQixXQUFTLEVBQUUsR0FBRztBQUNaLFVBQU0sS0FBSyxhQUFhO0FBQUEsRUFDMUI7QUFDQSxTQUFPLEVBQUUsVUFBVSxPQUFPLFNBQVMsR0FBRztBQUNwQyxRQUFJbFQsSUFBSSxJQUFJLEVBQUU7QUFDZCxXQUFPQSxFQUFFLFNBQVMsTUFBTUEsRUFBRSxXQUFXLEdBQUdBO0FBQUEsRUFDMUMsR0FBRyxFQUFFLFVBQVUsWUFBWSxTQUFTLEdBQUdBLEdBQUdJLEdBQUc7QUFDM0MsUUFBSSxJQUFJLE1BQU0sSUFBSStTLEdBQUcsQ0FBQyxJQUFJLElBQUksSUFBSVYsR0FBRyxHQUFHelMsR0FBR0ksQ0FBQztBQUM1QyxXQUFPa1MsR0FBRyxXQUFXO0FBQ25CLFVBQUksSUFBSSxHQUFHLElBQUksRUFBRSxVQUFVLElBQUksRUFBRTtBQUNqQyxRQUFFLElBQUksSUFBSSxFQUFFLEtBQUssR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLFdBQVcsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFBQSxJQUNuRSxDQUFDLEdBQUc7QUFBQSxFQUNOLEdBQUcsRUFBRSxVQUFVLGdCQUFnQixTQUFTLEdBQUc7QUFDekMsUUFBSTtBQUNGLGFBQU8sS0FBSyxXQUFXLENBQUM7QUFBQSxJQUMxQixTQUFTdFMsR0FBRztBQUNWLFFBQUUsTUFBTUEsQ0FBQztBQUFBLElBQ1g7QUFBQSxFQUNGLEdBQUcsRUFBRSxVQUFVLFVBQVUsU0FBUyxHQUFHQSxHQUFHO0FBQ3RDLFFBQUlJLElBQUk7QUFDUixXQUFPSixJQUFJb1QsR0FBR3BULENBQUMsR0FBRyxJQUFJQSxFQUFFLFNBQVMsR0FBRyxHQUFHO0FBQ3JDLFVBQUksSUFBSSxJQUFJeVMsR0FBRztBQUFBLFFBQ2IsTUFBTSxTQUFTLEdBQUc7QUFDaEIsY0FBSTtBQUNGLGNBQUUsQ0FBQztBQUFBLFVBQ0wsU0FBUyxHQUFHO0FBQ1YsY0FBRSxDQUFDLEdBQUcsRUFBRSxZQUFZO0FBQUEsVUFDdEI7QUFBQSxRQUNGO0FBQUEsUUFDQSxPQUFPO0FBQUEsUUFDUCxVQUFVO0FBQUEsTUFDWixDQUFDO0FBQ0QsTUFBQXJTLEVBQUUsVUFBVSxDQUFDO0FBQUEsSUFDZixDQUFDO0FBQUEsRUFDSCxHQUFHLEVBQUUsVUFBVSxhQUFhLFNBQVMsR0FBRztBQUN0QyxRQUFJSjtBQUNKLFlBQVFBLElBQUksS0FBSyxZQUFZLFFBQVFBLE1BQU0sU0FBUyxTQUFTQSxFQUFFLFVBQVUsQ0FBQztBQUFBLEVBQzVFLEdBQUcsRUFBRSxVQUFVK1MsRUFBRSxJQUFJLFdBQVc7QUFDOUIsV0FBTztBQUFBLEVBQ1QsR0FBRyxFQUFFLFVBQVUsT0FBTyxXQUFXO0FBQy9CLGFBQVMsSUFBSSxDQUFDLEdBQUcvUyxJQUFJLEdBQUdBLElBQUksVUFBVSxRQUFRQTtBQUM1QyxRQUFFQSxDQUFDLElBQUksVUFBVUEsQ0FBQztBQUNwQixXQUFPaVQsR0FBRyxDQUFDLEVBQUUsSUFBSTtBQUFBLEVBQ25CLEdBQUcsRUFBRSxVQUFVLFlBQVksU0FBUyxHQUFHO0FBQ3JDLFFBQUlqVCxJQUFJO0FBQ1IsV0FBTyxJQUFJb1QsR0FBRyxDQUFDLEdBQUcsSUFBSSxFQUFFLFNBQVNoVCxHQUFHLEdBQUc7QUFDckMsVUFBSTtBQUNKLE1BQUFKLEVBQUUsVUFBVSxTQUFTLEdBQUc7QUFDdEIsZUFBTyxJQUFJO0FBQUEsTUFDYixHQUFHLFNBQVMsR0FBRztBQUNiLGVBQU8sRUFBRSxDQUFDO0FBQUEsTUFDWixHQUFHLFdBQVc7QUFDWixlQUFPSSxFQUFFLENBQUM7QUFBQSxNQUNaLENBQUM7QUFBQSxJQUNILENBQUM7QUFBQSxFQUNILEdBQUcsRUFBRSxTQUFTLFNBQVMsR0FBRztBQUN4QixXQUFPLElBQUksRUFBRSxDQUFDO0FBQUEsRUFDaEIsR0FBRztBQUNMLEVBQUU7QUFDRixTQUFTZ1QsR0FBRyxHQUFHO0FBQ2IsTUFBSTtBQUNKLFVBQVEsSUFBSSxLQUFLbEIsR0FBRyxhQUFhLFFBQVEsTUFBTSxTQUFTLElBQUk7QUFDOUQ7QUFDQSxTQUFTbUIsR0FBRyxHQUFHO0FBQ2IsU0FBTyxLQUFLM0IsRUFBRSxFQUFFLElBQUksS0FBS0EsRUFBRSxFQUFFLEtBQUssS0FBS0EsRUFBRSxFQUFFLFFBQVE7QUFDckQ7QUFDQSxTQUFTeUIsR0FBRyxHQUFHO0FBQ2IsU0FBTyxLQUFLLGFBQWFaLE1BQU1jLEdBQUcsQ0FBQyxLQUFLcEIsR0FBRyxDQUFDO0FBQzlDO0FBQ0EsU0FBU3FCLEdBQUcsR0FBRztBQUNiLFNBQU81QixFQUFFLEtBQUssT0FBTyxTQUFTLEVBQUUsSUFBSTtBQUN0QztBQUNBLFNBQVM2QixHQUFHLEdBQUc7QUFDYixTQUFPLFNBQVMsR0FBRztBQUNqQixRQUFJRCxHQUFHLENBQUM7QUFDTixhQUFPLEVBQUUsS0FBSyxTQUFTdFQsR0FBRztBQUN4QixZQUFJO0FBQ0YsaUJBQU8sRUFBRUEsR0FBRyxJQUFJO0FBQUEsUUFDbEIsU0FBU0ksR0FBRztBQUNWLGVBQUssTUFBTUEsQ0FBQztBQUFBLFFBQ2Q7QUFBQSxNQUNGLENBQUM7QUFDSCxVQUFNLElBQUksVUFBVSx3Q0FBd0M7QUFBQSxFQUM5RDtBQUNGO0FBQ0EsU0FBU29ULEdBQUcsR0FBRyxHQUFHeFQsR0FBR0ksR0FBRyxHQUFHO0FBQ3pCLFNBQU8sSUFBSXFULEdBQUcsR0FBRyxHQUFHelQsR0FBR0ksR0FBRyxDQUFDO0FBQzdCO0FBQ0EsSUFBSXFULEtBQUssU0FBUyxHQUFHO0FBQ25CLEVBQUF4QyxHQUFHLEdBQUcsQ0FBQztBQUNQLFdBQVMsRUFBRWpSLEdBQUdJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRztBQUMzQixRQUFJLElBQUksRUFBRSxLQUFLLE1BQU1KLENBQUMsS0FBSztBQUMzQixXQUFPLEVBQUUsYUFBYSxHQUFHLEVBQUUsb0JBQW9CLEdBQUcsRUFBRSxRQUFRSSxJQUFJLFNBQVMsR0FBRztBQUMxRSxVQUFJO0FBQ0YsUUFBQUEsRUFBRSxDQUFDO0FBQUEsTUFDTCxTQUFTLEdBQUc7QUFDVixRQUFBSixFQUFFLE1BQU0sQ0FBQztBQUFBLE1BQ1g7QUFBQSxJQUNGLElBQUksRUFBRSxVQUFVLE9BQU8sRUFBRSxTQUFTLElBQUksU0FBUyxHQUFHO0FBQ2hELFVBQUk7QUFDRixVQUFFLENBQUM7QUFBQSxNQUNMLFNBQVMsR0FBRztBQUNWLFFBQUFBLEVBQUUsTUFBTSxDQUFDO0FBQUEsTUFDWCxVQUFFO0FBQ0EsYUFBSyxZQUFZO0FBQUEsTUFDbkI7QUFBQSxJQUNGLElBQUksRUFBRSxVQUFVLFFBQVEsRUFBRSxZQUFZLElBQUksV0FBVztBQUNuRCxVQUFJO0FBQ0YsVUFBRTtBQUFBLE1BQ0osU0FBUyxHQUFHO0FBQ1YsUUFBQUEsRUFBRSxNQUFNLENBQUM7QUFBQSxNQUNYLFVBQUU7QUFDQSxhQUFLLFlBQVk7QUFBQSxNQUNuQjtBQUFBLElBQ0YsSUFBSSxFQUFFLFVBQVUsV0FBVztBQUFBLEVBQzdCO0FBQ0EsU0FBTyxFQUFFLFVBQVUsY0FBYyxXQUFXO0FBQzFDLFFBQUlBO0FBQ0osUUFBSSxDQUFDLEtBQUsscUJBQXFCLEtBQUssa0JBQWtCLEdBQUc7QUFDdkQsVUFBSUksSUFBSSxLQUFLO0FBQ2IsUUFBRSxVQUFVLFlBQVksS0FBSyxJQUFJLEdBQUcsQ0FBQ0EsT0FBT0osSUFBSSxLQUFLLGdCQUFnQixRQUFRQSxNQUFNLFVBQVVBLEVBQUUsS0FBSyxJQUFJO0FBQUEsSUFDMUc7QUFBQSxFQUNGLEdBQUc7QUFDTCxFQUFFdVMsRUFBRSxHQUFHbUIsS0FBSy9CLEdBQUcsU0FBUyxHQUFHO0FBQ3pCLFNBQU8sV0FBVztBQUNoQixNQUFFLElBQUksR0FBRyxLQUFLLE9BQU8sMkJBQTJCLEtBQUssVUFBVTtBQUFBLEVBQ2pFO0FBQ0YsQ0FBQyxHQUFHZ0MsS0FBSyxTQUFTLEdBQUc7QUFDbkIsRUFBQTFDLEdBQUcsR0FBRyxDQUFDO0FBQ1AsV0FBUyxJQUFJO0FBQ1gsUUFBSWpSLElBQUksRUFBRSxLQUFLLElBQUksS0FBSztBQUN4QixXQUFPQSxFQUFFLFNBQVMsSUFBSUEsRUFBRSxtQkFBbUIsTUFBTUEsRUFBRSxZQUFZLENBQUMsR0FBR0EsRUFBRSxZQUFZLElBQUlBLEVBQUUsV0FBVyxJQUFJQSxFQUFFLGNBQWMsTUFBTUE7QUFBQSxFQUM5SDtBQUNBLFNBQU8sRUFBRSxVQUFVLE9BQU8sU0FBU0EsR0FBRztBQUNwQyxRQUFJSSxJQUFJLElBQUl3VCxHQUFHLE1BQU0sSUFBSTtBQUN6QixXQUFPeFQsRUFBRSxXQUFXSixHQUFHSTtBQUFBLEVBQ3pCLEdBQUcsRUFBRSxVQUFVLGlCQUFpQixXQUFXO0FBQ3pDLFFBQUksS0FBSztBQUNQLFlBQU0sSUFBSXNULEdBQUc7QUFBQSxFQUNqQixHQUFHLEVBQUUsVUFBVSxPQUFPLFNBQVMxVCxHQUFHO0FBQ2hDLFFBQUlJLElBQUk7QUFDUixJQUFBa1MsR0FBRyxXQUFXO0FBQ1osVUFBSSxHQUFHO0FBQ1AsVUFBSWxTLEVBQUUsZUFBZSxHQUFHLENBQUNBLEVBQUUsV0FBVztBQUNwQyxRQUFBQSxFQUFFLHFCQUFxQkEsRUFBRSxtQkFBbUIsTUFBTSxLQUFLQSxFQUFFLFNBQVM7QUFDbEUsWUFBSTtBQUNGLG1CQUFTLElBQUlnUixHQUFHaFIsRUFBRSxnQkFBZ0IsR0FBRyxJQUFJLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxNQUFNLElBQUksRUFBRSxLQUFLLEdBQUc7QUFDeEUsZ0JBQUksSUFBSSxFQUFFO0FBQ1YsY0FBRSxLQUFLSixDQUFDO0FBQUEsVUFDVjtBQUFBLFFBQ0YsU0FBUyxHQUFHO0FBQ1YsY0FBSSxFQUFFLE9BQU8sRUFBRTtBQUFBLFFBQ2pCLFVBQUU7QUFDQSxjQUFJO0FBQ0YsaUJBQUssQ0FBQyxFQUFFLFNBQVMsSUFBSSxFQUFFLFdBQVcsRUFBRSxLQUFLLENBQUM7QUFBQSxVQUM1QyxVQUFFO0FBQ0EsZ0JBQUksRUFBRyxPQUFNLEVBQUU7QUFBQSxVQUNqQjtBQUFBLFFBQ0Y7QUFBQSxNQUNGO0FBQUEsSUFDRixDQUFDO0FBQUEsRUFDSCxHQUFHLEVBQUUsVUFBVSxRQUFRLFNBQVNBLEdBQUc7QUFDakMsUUFBSUksSUFBSTtBQUNSLElBQUFrUyxHQUFHLFdBQVc7QUFDWixVQUFJbFMsRUFBRSxlQUFlLEdBQUcsQ0FBQ0EsRUFBRSxXQUFXO0FBQ3BDLFFBQUFBLEVBQUUsV0FBV0EsRUFBRSxZQUFZLElBQUlBLEVBQUUsY0FBY0o7QUFDL0MsaUJBQVMsSUFBSUksRUFBRSxXQUFXLEVBQUU7QUFDMUIsWUFBRSxNQUFNLEVBQUUsTUFBTUosQ0FBQztBQUFBLE1BQ3JCO0FBQUEsSUFDRixDQUFDO0FBQUEsRUFDSCxHQUFHLEVBQUUsVUFBVSxXQUFXLFdBQVc7QUFDbkMsUUFBSUEsSUFBSTtBQUNSLElBQUFzUyxHQUFHLFdBQVc7QUFDWixVQUFJdFMsRUFBRSxlQUFlLEdBQUcsQ0FBQ0EsRUFBRSxXQUFXO0FBQ3BDLFFBQUFBLEVBQUUsWUFBWTtBQUNkLGlCQUFTSSxJQUFJSixFQUFFLFdBQVdJLEVBQUU7QUFDMUIsVUFBQUEsRUFBRSxNQUFNLEVBQUUsU0FBUztBQUFBLE1BQ3ZCO0FBQUEsSUFDRixDQUFDO0FBQUEsRUFDSCxHQUFHLEVBQUUsVUFBVSxjQUFjLFdBQVc7QUFDdEMsU0FBSyxZQUFZLEtBQUssU0FBUyxJQUFJLEtBQUssWUFBWSxLQUFLLG1CQUFtQjtBQUFBLEVBQzlFLEdBQUcsT0FBTyxlQUFlLEVBQUUsV0FBVyxZQUFZO0FBQUEsSUFDaEQsS0FBSyxXQUFXO0FBQ2QsVUFBSUo7QUFDSixlQUFTQSxJQUFJLEtBQUssZUFBZSxRQUFRQSxNQUFNLFNBQVMsU0FBU0EsRUFBRSxVQUFVO0FBQUEsSUFDL0U7QUFBQSxJQUNBLFlBQVk7QUFBQSxJQUNaLGNBQWM7QUFBQSxFQUNoQixDQUFDLEdBQUcsRUFBRSxVQUFVLGdCQUFnQixTQUFTQSxHQUFHO0FBQzFDLFdBQU8sS0FBSyxlQUFlLEdBQUcsRUFBRSxVQUFVLGNBQWMsS0FBSyxNQUFNQSxDQUFDO0FBQUEsRUFDdEUsR0FBRyxFQUFFLFVBQVUsYUFBYSxTQUFTQSxHQUFHO0FBQ3RDLFdBQU8sS0FBSyxlQUFlLEdBQUcsS0FBSyx3QkFBd0JBLENBQUMsR0FBRyxLQUFLLGdCQUFnQkEsQ0FBQztBQUFBLEVBQ3ZGLEdBQUcsRUFBRSxVQUFVLGtCQUFrQixTQUFTQSxHQUFHO0FBQzNDLFFBQUlJLElBQUksTUFBTSxJQUFJLE1BQU0sSUFBSSxFQUFFLFVBQVUsSUFBSSxFQUFFLFdBQVcsSUFBSSxFQUFFO0FBQy9ELFdBQU8sS0FBSyxJQUFJNFIsTUFBTSxLQUFLLG1CQUFtQixNQUFNLEVBQUUsS0FBS2hTLENBQUMsR0FBRyxJQUFJOFIsR0FBRyxXQUFXO0FBQy9FLE1BQUExUixFQUFFLG1CQUFtQixNQUFNeVIsR0FBRyxHQUFHN1IsQ0FBQztBQUFBLElBQ3BDLENBQUM7QUFBQSxFQUNILEdBQUcsRUFBRSxVQUFVLDBCQUEwQixTQUFTQSxHQUFHO0FBQ25ELFFBQUlJLElBQUksTUFBTSxJQUFJQSxFQUFFLFVBQVUsSUFBSUEsRUFBRSxhQUFhLElBQUlBLEVBQUU7QUFDdkQsUUFBSUosRUFBRSxNQUFNLENBQUMsSUFBSSxLQUFLQSxFQUFFLFNBQVM7QUFBQSxFQUNuQyxHQUFHLEVBQUUsVUFBVSxlQUFlLFdBQVc7QUFDdkMsUUFBSUEsSUFBSSxJQUFJa1QsR0FBRTtBQUNkLFdBQU9sVCxFQUFFLFNBQVMsTUFBTUE7QUFBQSxFQUMxQixHQUFHLEVBQUUsU0FBUyxTQUFTQSxHQUFHSSxHQUFHO0FBQzNCLFdBQU8sSUFBSXdULEdBQUc1VCxHQUFHSSxDQUFDO0FBQUEsRUFDcEIsR0FBRztBQUNMLEVBQUU4UyxFQUFDLEdBQUdVLEtBQUssU0FBUyxHQUFHO0FBQ3JCLEVBQUEzQyxHQUFHLEdBQUcsQ0FBQztBQUNQLFdBQVMsRUFBRWpSLEdBQUdJLEdBQUc7QUFDZixRQUFJLElBQUksRUFBRSxLQUFLLElBQUksS0FBSztBQUN4QixXQUFPLEVBQUUsY0FBY0osR0FBRyxFQUFFLFNBQVNJLEdBQUc7QUFBQSxFQUMxQztBQUNBLFNBQU8sRUFBRSxVQUFVLE9BQU8sU0FBU0osR0FBRztBQUNwQyxRQUFJSSxHQUFHO0FBQ1AsS0FBQyxLQUFLQSxJQUFJLEtBQUssaUJBQWlCLFFBQVFBLE1BQU0sU0FBUyxTQUFTQSxFQUFFLFVBQVUsUUFBUSxNQUFNLFVBQVUsRUFBRSxLQUFLQSxHQUFHSixDQUFDO0FBQUEsRUFDakgsR0FBRyxFQUFFLFVBQVUsUUFBUSxTQUFTQSxHQUFHO0FBQ2pDLFFBQUlJLEdBQUc7QUFDUCxLQUFDLEtBQUtBLElBQUksS0FBSyxpQkFBaUIsUUFBUUEsTUFBTSxTQUFTLFNBQVNBLEVBQUUsV0FBVyxRQUFRLE1BQU0sVUFBVSxFQUFFLEtBQUtBLEdBQUdKLENBQUM7QUFBQSxFQUNsSCxHQUFHLEVBQUUsVUFBVSxXQUFXLFdBQVc7QUFDbkMsUUFBSUEsR0FBR0k7QUFDUCxLQUFDQSxLQUFLSixJQUFJLEtBQUssaUJBQWlCLFFBQVFBLE1BQU0sU0FBUyxTQUFTQSxFQUFFLGNBQWMsUUFBUUksTUFBTSxVQUFVQSxFQUFFLEtBQUtKLENBQUM7QUFBQSxFQUNsSCxHQUFHLEVBQUUsVUFBVSxhQUFhLFNBQVNBLEdBQUc7QUFDdEMsUUFBSUksR0FBRztBQUNQLFlBQVEsS0FBS0EsSUFBSSxLQUFLLFlBQVksUUFBUUEsTUFBTSxTQUFTLFNBQVNBLEVBQUUsVUFBVUosQ0FBQyxPQUFPLFFBQVEsTUFBTSxTQUFTLElBQUlnUztBQUFBLEVBQ25ILEdBQUc7QUFDTCxFQUFFMkIsRUFBRSxHQUFHRSxLQUFLO0FBQUEsRUFDVixLQUFLLFdBQVc7QUFDZCxXQUFPLEtBQUssSUFBSTtBQUFBLEVBQ2xCO0FBQUEsRUFDQSxVQUFVO0FBQ1osR0FBR0MsS0FBSyxTQUFTLEdBQUc7QUFDbEIsRUFBQTdDLEdBQUcsR0FBRyxDQUFDO0FBQ1AsV0FBUyxFQUFFalIsR0FBR0ksR0FBRztBQUNmLFdBQU8sRUFBRSxLQUFLLElBQUksS0FBSztBQUFBLEVBQ3pCO0FBQ0EsU0FBTyxFQUFFLFVBQVUsV0FBVyxTQUFTSixHQUFHSSxHQUFHO0FBQzNDLFdBQU87QUFBQSxFQUNULEdBQUc7QUFDTCxFQUFFMFIsRUFBRSxHQUFHaUMsS0FBSztBQUFBLEVBQ1YsYUFBYSxTQUFTLEdBQUcsR0FBRztBQUMxQixhQUFTL1QsSUFBSSxDQUFDLEdBQUdJLElBQUksR0FBR0EsSUFBSSxVQUFVLFFBQVFBO0FBQzVDLE1BQUFKLEVBQUVJLElBQUksQ0FBQyxJQUFJLFVBQVVBLENBQUM7QUFDeEIsV0FBTyxZQUFZLE1BQU0sUUFBUWtSLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBR0QsR0FBR3JSLENBQUMsQ0FBQyxDQUFDO0FBQUEsRUFDcEQ7QUFBQSxFQUNBLGVBQWUsU0FBUyxHQUFHO0FBQ3pCLFdBQU8sY0FBYyxDQUFDO0FBQUEsRUFDeEI7QUFBQSxFQUNBLFVBQVU7QUFDWixHQUFHZ1UsS0FBSyxTQUFTLEdBQUc7QUFDbEIsRUFBQS9DLEdBQUcsR0FBRyxDQUFDO0FBQ1AsV0FBUyxFQUFFalIsR0FBR0ksR0FBRztBQUNmLFFBQUksSUFBSSxFQUFFLEtBQUssTUFBTUosR0FBR0ksQ0FBQyxLQUFLO0FBQzlCLFdBQU8sRUFBRSxZQUFZSixHQUFHLEVBQUUsT0FBT0ksR0FBRyxFQUFFLFVBQVUsSUFBSTtBQUFBLEVBQ3REO0FBQ0EsU0FBTyxFQUFFLFVBQVUsV0FBVyxTQUFTSixHQUFHSSxHQUFHO0FBQzNDLFFBQUk7QUFDSixRQUFJQSxNQUFNLFdBQVdBLElBQUksSUFBSSxLQUFLO0FBQ2hDLGFBQU87QUFDVCxTQUFLLFFBQVFKO0FBQ2IsUUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLEtBQUs7QUFDMUIsV0FBTyxLQUFLLFNBQVMsS0FBSyxLQUFLLEtBQUssZUFBZSxHQUFHLEdBQUdJLENBQUMsSUFBSSxLQUFLLFVBQVUsSUFBSSxLQUFLLFFBQVFBLEdBQUcsS0FBSyxNQUFNLElBQUksS0FBSyxRQUFRLFFBQVEsTUFBTSxTQUFTLElBQUksS0FBSyxlQUFlLEdBQUcsS0FBSyxJQUFJQSxDQUFDLEdBQUc7QUFBQSxFQUM5TCxHQUFHLEVBQUUsVUFBVSxpQkFBaUIsU0FBU0osR0FBR0ksR0FBRyxHQUFHO0FBQ2hELFdBQU8sTUFBTSxXQUFXLElBQUksSUFBSTJULEdBQUcsWUFBWS9ULEVBQUUsTUFBTSxLQUFLQSxHQUFHLElBQUksR0FBRyxDQUFDO0FBQUEsRUFDekUsR0FBRyxFQUFFLFVBQVUsaUJBQWlCLFNBQVNBLEdBQUdJLEdBQUcsR0FBRztBQUNoRCxRQUFJLE1BQU0sV0FBVyxJQUFJLElBQUksS0FBSyxRQUFRLEtBQUssVUFBVSxLQUFLLEtBQUssWUFBWTtBQUM3RSxhQUFPQTtBQUNULElBQUFBLEtBQUssUUFBUTJULEdBQUcsY0FBYzNULENBQUM7QUFBQSxFQUNqQyxHQUFHLEVBQUUsVUFBVSxVQUFVLFNBQVNKLEdBQUdJLEdBQUc7QUFDdEMsUUFBSSxLQUFLO0FBQ1AsYUFBTyxJQUFJLE1BQU0sOEJBQThCO0FBQ2pELFNBQUssVUFBVTtBQUNmLFFBQUksSUFBSSxLQUFLLFNBQVNKLEdBQUdJLENBQUM7QUFDMUIsUUFBSTtBQUNGLGFBQU87QUFDVCxTQUFLLFlBQVksTUFBTSxLQUFLLE1BQU0sU0FBUyxLQUFLLEtBQUssS0FBSyxlQUFlLEtBQUssV0FBVyxLQUFLLElBQUksSUFBSTtBQUFBLEVBQ3hHLEdBQUcsRUFBRSxVQUFVLFdBQVcsU0FBU0osR0FBR0ksR0FBRztBQUN2QyxRQUFJLElBQUksSUFBSTtBQUNaLFFBQUk7QUFDRixXQUFLLEtBQUtKLENBQUM7QUFBQSxJQUNiLFNBQVMsR0FBRztBQUNWLFVBQUksSUFBSSxJQUFJLEtBQUssSUFBSSxNQUFNLG9DQUFvQztBQUFBLElBQ2pFO0FBQ0EsUUFBSTtBQUNGLGFBQU8sS0FBSyxZQUFZLEdBQUc7QUFBQSxFQUMvQixHQUFHLEVBQUUsVUFBVSxjQUFjLFdBQVc7QUFDdEMsUUFBSSxDQUFDLEtBQUssUUFBUTtBQUNoQixVQUFJQSxJQUFJLE1BQU1JLElBQUlKLEVBQUUsSUFBSSxJQUFJQSxFQUFFLFdBQVcsSUFBSSxFQUFFO0FBQy9DLFdBQUssT0FBTyxLQUFLLFFBQVEsS0FBSyxZQUFZLE1BQU0sS0FBSyxVQUFVLElBQUk2UixHQUFHLEdBQUcsSUFBSSxHQUFHelIsS0FBSyxTQUFTLEtBQUssS0FBSyxLQUFLLGVBQWUsR0FBR0EsR0FBRyxJQUFJLElBQUksS0FBSyxRQUFRLE1BQU0sRUFBRSxVQUFVLFlBQVksS0FBSyxJQUFJO0FBQUEsSUFDaE07QUFBQSxFQUNGLEdBQUc7QUFDTCxFQUFFMFQsRUFBRSxHQUFHRyxLQUFLLFdBQVc7QUFDckIsV0FBUyxFQUFFLEdBQUdqVSxHQUFHO0FBQ2YsSUFBQUEsTUFBTSxXQUFXQSxJQUFJLEVBQUUsTUFBTSxLQUFLLHNCQUFzQixHQUFHLEtBQUssTUFBTUE7QUFBQSxFQUN4RTtBQUNBLFNBQU8sRUFBRSxVQUFVLFdBQVcsU0FBUyxHQUFHQSxHQUFHSSxHQUFHO0FBQzlDLFdBQU9KLE1BQU0sV0FBV0EsSUFBSSxJQUFJLElBQUksS0FBSyxvQkFBb0IsTUFBTSxDQUFDLEVBQUUsU0FBU0ksR0FBR0osQ0FBQztBQUFBLEVBQ3JGLEdBQUcsRUFBRSxNQUFNNlQsR0FBRyxLQUFLO0FBQ3JCLEVBQUUsR0FBR0ssS0FBSyxTQUFTLEdBQUc7QUFDcEIsRUFBQWpELEdBQUcsR0FBRyxDQUFDO0FBQ1AsV0FBUyxFQUFFalIsR0FBR0ksR0FBRztBQUNmLElBQUFBLE1BQU0sV0FBV0EsSUFBSTZULEdBQUc7QUFDeEIsUUFBSSxJQUFJLEVBQUUsS0FBSyxNQUFNalUsR0FBR0ksQ0FBQyxLQUFLO0FBQzlCLFdBQU8sRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLFVBQVUsSUFBSTtBQUFBLEVBQ3pDO0FBQ0EsU0FBTyxFQUFFLFVBQVUsUUFBUSxTQUFTSixHQUFHO0FBQ3JDLFFBQUlJLElBQUksS0FBSztBQUNiLFFBQUksS0FBSyxTQUFTO0FBQ2hCLE1BQUFBLEVBQUUsS0FBS0osQ0FBQztBQUNSO0FBQUEsSUFDRjtBQUNBLFFBQUk7QUFDSixTQUFLLFVBQVU7QUFDZjtBQUNFLFVBQUksSUFBSUEsRUFBRSxRQUFRQSxFQUFFLE9BQU9BLEVBQUUsS0FBSztBQUNoQztBQUFBLFdBQ0dBLElBQUlJLEVBQUUsTUFBTTtBQUNuQixRQUFJLEtBQUssVUFBVSxJQUFJLEdBQUc7QUFDeEIsYUFBT0osSUFBSUksRUFBRSxNQUFNO0FBQ2pCLFFBQUFKLEVBQUUsWUFBWTtBQUNoQixZQUFNO0FBQUEsSUFDUjtBQUFBLEVBQ0YsR0FBRztBQUNMLEVBQUVpVSxFQUFFLEdBQUdFLEtBQUssSUFBSUQsR0FBR0YsRUFBRSxHQUFHSSxLQUFLLFNBQVMsR0FBRztBQUN2QyxTQUFPLEtBQUssT0FBTyxFQUFFLFVBQVUsWUFBWSxPQUFPLEtBQUs7QUFDekQ7QUFDQSxTQUFTQyxHQUFHLEdBQUc7QUFDYixTQUFPM0MsRUFBRSxLQUFLLE9BQU8sU0FBUyxFQUFFLElBQUk7QUFDdEM7QUFDQSxTQUFTNEMsR0FBRyxHQUFHO0FBQ2IsU0FBTzVDLEVBQUUsRUFBRXFCLEVBQUUsQ0FBQztBQUNoQjtBQUNBLFNBQVN3QixHQUFHLEdBQUc7QUFDYixTQUFPLE9BQU8saUJBQWlCN0MsRUFBRSxLQUFLLE9BQU8sU0FBUyxFQUFFLE9BQU8sYUFBYSxDQUFDO0FBQy9FO0FBQ0EsU0FBUzhDLEdBQUcsR0FBRztBQUNiLFNBQU8sSUFBSSxVQUFVLG1CQUFtQixNQUFNLFFBQVEsT0FBTyxLQUFLLFdBQVcsc0JBQXNCLE1BQU0sSUFBSSxPQUFPLDBIQUEwSDtBQUNoUDtBQUNBLFNBQVNDLEtBQUs7QUFDWixTQUFPLE9BQU8sVUFBVSxjQUFjLENBQUMsT0FBTyxXQUFXLGVBQWUsT0FBTztBQUNqRjtBQUNBLElBQUlDLEtBQUtELEdBQUc7QUFDWixTQUFTRSxHQUFHLEdBQUc7QUFDYixTQUFPakQsRUFBRSxLQUFLLE9BQU8sU0FBUyxFQUFFZ0QsRUFBRSxDQUFDO0FBQ3JDO0FBQ0EsU0FBU0UsR0FBRyxHQUFHO0FBQ2IsU0FBT3BELEdBQUcsTUFBTSxXQUFXLFdBQVc7QUFDcEMsUUFBSXhSLEdBQUcsR0FBRzJELEdBQUdDO0FBQ2IsV0FBT3VOLEdBQUcsTUFBTSxTQUFTdE4sR0FBRztBQUMxQixjQUFRQSxFQUFFLE9BQU87QUFBQSxRQUNmLEtBQUs7QUFDSCxVQUFBN0QsSUFBSSxFQUFFLFVBQVUsR0FBRzZELEVBQUUsUUFBUTtBQUFBLFFBQy9CLEtBQUs7QUFDSCxVQUFBQSxFQUFFLEtBQUssS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHQSxFQUFFLFFBQVE7QUFBQSxRQUN2QyxLQUFLO0FBQ0gsaUJBQU8sQ0FBQyxHQUFHME4sR0FBR3ZSLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFBQSxRQUN6QixLQUFLO0FBQ0gsaUJBQU8sSUFBSTZELEVBQUUsS0FBSyxHQUFHRixJQUFJLEVBQUUsT0FBT0MsSUFBSSxFQUFFLE1BQU1BLElBQUksQ0FBQyxHQUFHMk4sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUFBLFFBQzNFLEtBQUs7QUFDSCxpQkFBTyxDQUFDLEdBQUcxTixFQUFFLEtBQUssQ0FBQztBQUFBLFFBQ3JCLEtBQUs7QUFDSCxpQkFBTyxDQUFDLEdBQUcwTixHQUFHNU4sQ0FBQyxDQUFDO0FBQUEsUUFDbEIsS0FBSztBQUNILGlCQUFPLENBQUMsR0FBR0UsRUFBRSxLQUFLLENBQUM7QUFBQSxRQUNyQixLQUFLO0FBQ0gsaUJBQU9BLEVBQUUsS0FBSyxHQUFHLENBQUMsR0FBRyxDQUFDO0FBQUEsUUFDeEIsS0FBSztBQUNILGlCQUFPLENBQUMsR0FBRyxFQUFFO0FBQUEsUUFDZixLQUFLO0FBQ0gsaUJBQU83RCxFQUFFLFlBQVksR0FBRyxDQUFDLENBQUM7QUFBQSxRQUM1QixLQUFLO0FBQ0gsaUJBQU8sQ0FBQyxDQUFDO0FBQUEsTUFDYjtBQUFBLElBQ0YsQ0FBQztBQUFBLEVBQ0gsQ0FBQztBQUNIO0FBQ0EsU0FBUzZVLEdBQUcsR0FBRztBQUNiLFNBQU9uRCxFQUFFLEtBQUssT0FBTyxTQUFTLEVBQUUsU0FBUztBQUMzQztBQUNBLFNBQVNvRCxHQUFHLEdBQUc7QUFDYixNQUFJLGFBQWE1QjtBQUNmLFdBQU87QUFDVCxNQUFJLEtBQUssTUFBTTtBQUNiLFFBQUlvQixHQUFHLENBQUM7QUFDTixhQUFPUyxHQUFHLENBQUM7QUFDYixRQUFJWCxHQUFHLENBQUM7QUFDTixhQUFPWSxHQUFHLENBQUM7QUFDYixRQUFJWCxHQUFHLENBQUM7QUFDTixhQUFPWSxHQUFHLENBQUM7QUFDYixRQUFJVixHQUFHLENBQUM7QUFDTixhQUFPVyxHQUFHLENBQUM7QUFDYixRQUFJUCxHQUFHLENBQUM7QUFDTixhQUFPUSxHQUFHLENBQUM7QUFDYixRQUFJTixHQUFHLENBQUM7QUFDTixhQUFPTyxHQUFHLENBQUM7QUFBQSxFQUNmO0FBQ0EsUUFBTVosR0FBRyxDQUFDO0FBQ1o7QUFDQSxTQUFTTyxHQUFHLEdBQUc7QUFDYixTQUFPLElBQUk3QixHQUFFLFNBQVMsR0FBRztBQUN2QixRQUFJbFQsSUFBSSxFQUFFK1MsRUFBRSxFQUFFO0FBQ2QsUUFBSXJCLEVBQUUxUixFQUFFLFNBQVM7QUFDZixhQUFPQSxFQUFFLFVBQVUsQ0FBQztBQUN0QixVQUFNLElBQUksVUFBVSxnRUFBZ0U7QUFBQSxFQUN0RixDQUFDO0FBQ0g7QUFDQSxTQUFTZ1YsR0FBRyxHQUFHO0FBQ2IsU0FBTyxJQUFJOUIsR0FBRSxTQUFTLEdBQUc7QUFDdkIsYUFBU2xULElBQUksR0FBR0EsSUFBSSxFQUFFLFVBQVUsQ0FBQyxFQUFFLFFBQVFBO0FBQ3pDLFFBQUUsS0FBSyxFQUFFQSxDQUFDLENBQUM7QUFDYixNQUFFLFNBQVM7QUFBQSxFQUNiLENBQUM7QUFDSDtBQUNBLFNBQVNpVixHQUFHLEdBQUc7QUFDYixTQUFPLElBQUkvQixHQUFFLFNBQVMsR0FBRztBQUN2QixNQUFFLEtBQUssU0FBU2xULEdBQUc7QUFDakIsUUFBRSxXQUFXLEVBQUUsS0FBS0EsQ0FBQyxHQUFHLEVBQUUsU0FBUztBQUFBLElBQ3JDLEdBQUcsU0FBU0EsR0FBRztBQUNiLGFBQU8sRUFBRSxNQUFNQSxDQUFDO0FBQUEsSUFDbEIsQ0FBQyxFQUFFLEtBQUssTUFBTW9TLEVBQUU7QUFBQSxFQUNsQixDQUFDO0FBQ0g7QUFDQSxTQUFTK0MsR0FBRyxHQUFHO0FBQ2IsU0FBTyxJQUFJakMsR0FBRSxTQUFTLEdBQUc7QUFDdkIsUUFBSWxULEdBQUdJO0FBQ1AsUUFBSTtBQUNGLGVBQVMsSUFBSWdSLEdBQUcsQ0FBQyxHQUFHLElBQUksRUFBRSxLQUFLLEdBQUcsQ0FBQyxFQUFFLE1BQU0sSUFBSSxFQUFFLEtBQUssR0FBRztBQUN2RCxZQUFJLElBQUksRUFBRTtBQUNWLFlBQUksRUFBRSxLQUFLLENBQUMsR0FBRyxFQUFFO0FBQ2Y7QUFBQSxNQUNKO0FBQUEsSUFDRixTQUFTLEdBQUc7QUFDVixNQUFBcFIsSUFBSSxFQUFFLE9BQU8sRUFBRTtBQUFBLElBQ2pCLFVBQUU7QUFDQSxVQUFJO0FBQ0YsYUFBSyxDQUFDLEVBQUUsU0FBU0ksSUFBSSxFQUFFLFdBQVdBLEVBQUUsS0FBSyxDQUFDO0FBQUEsTUFDNUMsVUFBRTtBQUNBLFlBQUlKLEVBQUcsT0FBTUEsRUFBRTtBQUFBLE1BQ2pCO0FBQUEsSUFDRjtBQUNBLE1BQUUsU0FBUztBQUFBLEVBQ2IsQ0FBQztBQUNIO0FBQ0EsU0FBU2tWLEdBQUcsR0FBRztBQUNiLFNBQU8sSUFBSWhDLEdBQUUsU0FBUyxHQUFHO0FBQ3ZCLElBQUFtQyxHQUFHLEdBQUcsQ0FBQyxFQUFFLE1BQU0sU0FBU3JWLEdBQUc7QUFDekIsYUFBTyxFQUFFLE1BQU1BLENBQUM7QUFBQSxJQUNsQixDQUFDO0FBQUEsRUFDSCxDQUFDO0FBQ0g7QUFDQSxTQUFTb1YsR0FBRyxHQUFHO0FBQ2IsU0FBT0YsR0FBR04sR0FBRyxDQUFDLENBQUM7QUFDakI7QUFDQSxTQUFTUyxHQUFHLEdBQUcsR0FBRztBQUNoQixNQUFJclYsR0FBR0ksR0FBRyxHQUFHO0FBQ2IsU0FBTzhRLEdBQUcsTUFBTSxRQUFRLFFBQVEsV0FBVztBQUN6QyxRQUFJLEdBQUc7QUFDUCxXQUFPQyxHQUFHLE1BQU0sU0FBUyxHQUFHO0FBQzFCLGNBQVEsRUFBRSxPQUFPO0FBQUEsUUFDZixLQUFLO0FBQ0gsWUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEdBQUcsR0FBRyxFQUFFLENBQUMsR0FBR25SLElBQUl5UixHQUFHLENBQUMsR0FBRyxFQUFFLFFBQVE7QUFBQSxRQUNuRCxLQUFLO0FBQ0gsaUJBQU8sQ0FBQyxHQUFHelIsRUFBRSxLQUFLLENBQUM7QUFBQSxRQUNyQixLQUFLO0FBQ0gsY0FBSUksSUFBSSxFQUFFLEtBQUssR0FBRyxDQUFDLENBQUNBLEVBQUUsS0FBTSxRQUFPLENBQUMsR0FBRyxDQUFDO0FBQ3hDLGNBQUksSUFBSUEsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLEdBQUcsRUFBRTtBQUM1QixtQkFBTyxDQUFDLENBQUM7QUFDWCxZQUFFLFFBQVE7QUFBQSxRQUNaLEtBQUs7QUFDSCxpQkFBTyxDQUFDLEdBQUcsQ0FBQztBQUFBLFFBQ2QsS0FBSztBQUNILGlCQUFPLENBQUMsR0FBRyxFQUFFO0FBQUEsUUFDZixLQUFLO0FBQ0gsaUJBQU8sSUFBSSxFQUFFLEtBQUssR0FBRyxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUU7QUFBQSxRQUMvQyxLQUFLO0FBQ0gsaUJBQU8sRUFBRSxLQUFLLEtBQUssQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBR0EsS0FBSyxDQUFDQSxFQUFFLFNBQVMsSUFBSUosRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLEtBQUtBLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDO0FBQUEsUUFDM0YsS0FBSztBQUNILFlBQUUsS0FBSyxHQUFHLEVBQUUsUUFBUTtBQUFBLFFBQ3RCLEtBQUs7QUFDSCxpQkFBTyxDQUFDLEdBQUcsRUFBRTtBQUFBLFFBQ2YsS0FBSztBQUNILGNBQUksRUFBRyxPQUFNLEVBQUU7QUFDZixpQkFBTyxDQUFDLENBQUM7QUFBQSxRQUNYLEtBQUs7QUFDSCxpQkFBTyxDQUFDLENBQUM7QUFBQSxRQUNYLEtBQUs7QUFDSCxpQkFBTyxFQUFFLFNBQVMsR0FBRyxDQUFDLENBQUM7QUFBQSxNQUMzQjtBQUFBLElBQ0YsQ0FBQztBQUFBLEVBQ0gsQ0FBQztBQUNIO0FBQ0EsU0FBU3NWLEdBQUcsR0FBRyxHQUFHdFYsR0FBR0ksR0FBRyxHQUFHO0FBQ3pCLEVBQUFBLE1BQU0sV0FBV0EsSUFBSSxJQUFJLE1BQU0sV0FBVyxJQUFJO0FBQzlDLE1BQUksSUFBSSxFQUFFLFNBQVMsV0FBVztBQUM1QixJQUFBSixFQUFFLEdBQUcsSUFBSSxFQUFFLElBQUksS0FBSyxTQUFTLE1BQU1JLENBQUMsQ0FBQyxJQUFJLEtBQUssWUFBWTtBQUFBLEVBQzVELEdBQUdBLENBQUM7QUFDSixNQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNiLFdBQU87QUFDWDtBQUNBLFNBQVNtVixHQUFHLEdBQUcsR0FBRztBQUNoQixNQUFJdlYsSUFBSTBSLEVBQUUsQ0FBQyxJQUFJLElBQUksV0FBVztBQUM1QixXQUFPO0FBQUEsRUFDVCxHQUFHdFIsSUFBSSxTQUFTLEdBQUc7QUFDakIsV0FBTyxFQUFFLE1BQU1KLEVBQUUsQ0FBQztBQUFBLEVBQ3BCO0FBQ0EsU0FBTyxJQUFJa1QsR0FBRTlTLENBQUM7QUFDaEI7QUFDQSxJQUFJb1YsS0FBSzdELEdBQUcsU0FBUyxHQUFHO0FBQ3RCLFNBQU8sV0FBVztBQUNoQixNQUFFLElBQUksR0FBRyxLQUFLLE9BQU8sY0FBYyxLQUFLLFVBQVU7QUFBQSxFQUNwRDtBQUNGLENBQUM7QUFDRCxTQUFTOEQsR0FBRyxHQUFHLEdBQUc7QUFDaEIsU0FBTyxJQUFJLFFBQVEsU0FBU3pWLEdBQUdJLEdBQUc7QUFDaEMsUUFBSSxJQUFJLElBQUk7QUFDWixNQUFFLFVBQVU7QUFBQSxNQUNWLE1BQU0sU0FBUyxHQUFHO0FBQ2hCLFlBQUksR0FBRyxJQUFJO0FBQUEsTUFDYjtBQUFBLE1BQ0EsT0FBT0E7QUFBQSxNQUNQLFVBQVUsV0FBVztBQUNuQixZQUFJSixFQUFFLENBQUMsSUFBSUksRUFBRSxJQUFJb1YsR0FBRyxDQUFDO0FBQUEsTUFDdkI7QUFBQSxJQUNGLENBQUM7QUFBQSxFQUNILENBQUM7QUFDSDtBQUNBLFNBQVNFLEdBQUcsR0FBRztBQUNiLFNBQU8sYUFBYSxRQUFRLENBQUMsTUFBTSxDQUFDO0FBQ3RDO0FBQ0EsSUFBSUMsS0FBS2hFLEdBQUcsU0FBUyxHQUFHO0FBQ3RCLFNBQU8sU0FBUzNSLEdBQUc7QUFDakIsSUFBQUEsTUFBTSxXQUFXQSxJQUFJLE9BQU8sRUFBRSxJQUFJLEdBQUcsS0FBSyxVQUFVLHdCQUF3QixLQUFLLE9BQU8sZ0JBQWdCLEtBQUssT0FBT0E7QUFBQSxFQUN0SDtBQUNGLENBQUM7QUFDRCxTQUFTNFYsR0FBRyxHQUFHLEdBQUc7QUFDaEIsTUFBSTVWLElBQUkwVixHQUFHLENBQUMsSUFBSSxFQUFFLE9BQU8sRUFBRSxJQUFJLE9BQU8sS0FBSyxXQUFXLEVBQUUsTUFBTSxFQUFFLElBQUksR0FBR3RWLElBQUlKLEVBQUUsT0FBTyxJQUFJQSxFQUFFLE1BQU0sSUFBSUEsRUFBRSxNQUFNLElBQUksTUFBTSxTQUFTNlYsS0FBSyxHQUFHLElBQUk3VixFQUFFLFdBQVcsSUFBSSxNQUFNLFNBQVNtVSxLQUFLLEdBQUcsSUFBSW5VLEVBQUUsTUFBTSxJQUFJLE1BQU0sU0FBUyxPQUFPO0FBQ3pOLE1BQUlJLEtBQUssUUFBUSxLQUFLO0FBQ3BCLFVBQU0sSUFBSSxVQUFVLHNCQUFzQjtBQUM1QyxTQUFPbVQsR0FBRyxTQUFTeEssR0FBR0MsR0FBRztBQUN2QixRQUFJQyxHQUFHQyxHQUFHNEMsSUFBSSxNQUFNQyxJQUFJLEdBQUdRLElBQUksU0FBU0csR0FBRztBQUN6QyxNQUFBeEQsSUFBSW9NLEdBQUd0TSxHQUFHLEdBQUcsV0FBVztBQUN0QixZQUFJO0FBQ0YsVUFBQUMsRUFBRSxZQUFZLEdBQUc2TCxHQUFHLEVBQUU7QUFBQSxZQUNwQixNQUFNO0FBQUEsWUFDTixXQUFXaEo7QUFBQSxZQUNYLE1BQU1DO0FBQUEsVUFDUixDQUFDLENBQUMsRUFBRSxVQUFVL0MsQ0FBQztBQUFBLFFBQ2pCLFNBQVM4RSxHQUFHO0FBQ1YsVUFBQTlFLEVBQUUsTUFBTThFLENBQUM7QUFBQSxRQUNYO0FBQUEsTUFDRixHQUFHcEIsQ0FBQztBQUFBLElBQ047QUFDQSxJQUFBekQsSUFBSUYsRUFBRSxVQUFVeUssR0FBR3hLLEdBQUcsU0FBUzBELEdBQUc7QUFDaEMsTUFBQXhELEtBQUssUUFBUUEsRUFBRSxZQUFZLEdBQUc2QyxLQUFLL0MsRUFBRSxLQUFLOEMsSUFBSVksQ0FBQyxHQUFHLElBQUksS0FBS0gsRUFBRSxDQUFDO0FBQUEsSUFDaEUsR0FBRyxRQUFRLFFBQVEsV0FBVztBQUM1QixNQUFBckQsS0FBSyxRQUFRQSxFQUFFLFVBQVVBLEtBQUssUUFBUUEsRUFBRSxZQUFZLEdBQUc0QyxJQUFJO0FBQUEsSUFDN0QsQ0FBQyxDQUFDLEdBQUcsQ0FBQ0MsS0FBS1EsRUFBRW5NLEtBQUssT0FBTyxPQUFPQSxLQUFLLFdBQVdBLElBQUksQ0FBQ0EsSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDO0FBQUEsRUFDdEUsQ0FBQztBQUNIO0FBQ0EsU0FBU3lWLEdBQUcsR0FBRztBQUNiLFFBQU0sSUFBSUYsR0FBRyxDQUFDO0FBQ2hCO0FBQ0EsTUFBTUcsR0FBRztBQUFBLEVBQ1AsY0FBYztBQUNaLFNBQUssTUFBTSxDQUFDLE1BQU07QUFDaEIsVUFBSSxLQUFLLFNBQVMsV0FBVztBQUMzQixjQUFNLElBQUksTUFBTSx3Q0FBd0M7QUFDMUQsV0FBSyxXQUFXLEVBQUUsUUFBUSxXQUFXLFdBQVcsSUFBSSxhQUFhLEVBQUUsR0FBRyxLQUFLLFNBQVMsS0FBSyxDQUFDLEdBQUcsS0FBSyxTQUFTLFNBQVM7QUFBQSxJQUN0SCxHQUFHLEtBQUssUUFBUSxDQUFDLEdBQUc5VixNQUFNO0FBQ3hCLFVBQUksS0FBSyxTQUFTLFdBQVc7QUFDM0IsY0FBTSxJQUFJLE1BQU0sd0NBQXdDO0FBQzFELFdBQUssV0FBVyxFQUFFLFFBQVEsU0FBUyxXQUFXLElBQUksT0FBTyxHQUFHLFFBQVFBLEVBQUUsR0FBRyxLQUFLLFNBQVMsTUFBTSxDQUFDO0FBQUEsSUFDaEcsR0FBRyxLQUFLLHVCQUF1QixDQUFDLE1BQU0sS0FBSyxTQUFTLFdBQVcsWUFBWSxLQUFLLFNBQVMsY0FBYyxHQUFHLEtBQUssWUFBWSxDQUFDLE1BQU07QUFDaEksVUFBSSxLQUFLLFNBQVMsV0FBVyxXQUFXO0FBQ3RDLFVBQUUsS0FBSyxRQUFRO0FBQ2Y7QUFBQSxNQUNGO0FBQ0EsV0FBSyxTQUFTLFdBQVcsV0FBVyxFQUFFLEtBQUssUUFBUTtBQUNuRCxZQUFNQSxJQUFJLEtBQUssU0FBUyxVQUFVO0FBQUEsUUFDaEMsTUFBTSxNQUFNO0FBQ1YsY0FBSSxLQUFLLFNBQVMsV0FBVztBQUMzQixrQkFBTSxJQUFJLE1BQU0sOEVBQThFO0FBQ2hHLFlBQUUsS0FBSyxRQUFRLEdBQUdBLEVBQUUsWUFBWTtBQUFBLFFBQ2xDO0FBQUEsUUFDQSxPQUFPLE1BQU07QUFDWCxjQUFJLEtBQUssU0FBUyxXQUFXO0FBQzNCLGtCQUFNLElBQUksTUFBTSwrRUFBK0U7QUFDakcsWUFBRSxLQUFLLFFBQVE7QUFBQSxRQUNqQjtBQUFBLE1BQ0YsQ0FBQztBQUFBLElBQ0gsR0FBRyxLQUFLLGNBQWMsQ0FBQyxNQUFNO0FBQzNCLFVBQUksS0FBSyxTQUFTLFdBQVcsVUFBVyxRQUFPLFFBQVEsUUFBUSxLQUFLLFNBQVMsV0FBVztBQUN4RixVQUFJLEtBQUssU0FBUyxXQUFXLFFBQVMsUUFBTyxRQUFRLE9BQU8sS0FBSyxTQUFTLEtBQUs7QUFDL0UsV0FBSyxTQUFTLFdBQVcsYUFBYTJILEdBQUcsS0FBSyxRQUFRO0FBQ3RELFlBQU0zSCxJQUFJO0FBQUEsUUFDUixPQUFPLEVBQUUsYUFBYTtBQUFBLFFBQ3RCLE1BQU0sTUFBTXVWLEdBQUcsTUFBTSxJQUFJLE1BQU0sRUFBRSxhQUFhLENBQUM7QUFBQSxNQUNqRDtBQUNBLGFBQU9FLEdBQUcsS0FBSyxTQUFTLEtBQUtHLEdBQUc1VixDQUFDLENBQUMsQ0FBQztBQUFBLElBQ3JDLEdBQUcsS0FBSyxXQUFXLEVBQUUsUUFBUSxXQUFXLFdBQVcsR0FBRyxHQUFHLEtBQUssV0FBVyxJQUFJMlQsR0FBRztBQUFBLEVBQ2xGO0FBQUEsRUFDQSxJQUFJLFVBQVU7QUFDWixXQUFPLEtBQUs7QUFBQSxFQUNkO0FBQ0Y7QUFDQSxNQUFNLEVBQUUsT0FBT29DLElBQUksT0FBT0MsR0FBRyxJQUFJbE8sRUFBRSxZQUFZLEdBQUdtTyxLQUFLLENBQUMsR0FBRyxNQUFNO0FBQy9ELFFBQU1qVyxJQUFJLElBQUk4VixHQUFHO0FBQ2pCLFNBQU87QUFBQSxJQUNMLFdBQVc5VjtBQUFBLElBQ1gsWUFBWSxPQUFPSSxNQUFNO0FBQ3ZCLFVBQUk7QUFDRixZQUFJSixFQUFFLFFBQVE7QUFDWixnQkFBTSxJQUFJLE1BQU0seUNBQXlDO0FBQzNELGNBQU0sSUFBSSxNQUFNLEVBQUVJLENBQUM7QUFDbkIsUUFBQTJWLEdBQUcsS0FBSyxDQUFDLDJDQUEyQyxDQUFDLEdBQUcvVixFQUFFLElBQUksQ0FBQztBQUFBLE1BQ2pFLFNBQVMsR0FBRztBQUNWLFFBQUFnVyxHQUFHLE1BQU0sQ0FBQyx1Q0FBdUM5VixHQUFFLENBQUMsR0FBRyxZQUFZLENBQUMsR0FBR0YsRUFBRSxNQUFNLEdBQUdFLEdBQUUsQ0FBQyxDQUFDO0FBQUEsTUFDeEY7QUFBQSxJQUNGO0FBQUEsRUFDRjtBQUNGLEdBQUdnVyxLQUFLLE9BQU8sR0FBRyxHQUFHbFcsTUFBTTtBQUN6QixRQUFNLFFBQVEsSUFBSSxPQUFPLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQ0ksTUFBTUEsRUFBRSxXQUFXLEVBQUUsU0FBUyxHQUFHLGVBQWVKLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDL0YsR0FBR21XLEtBQUssT0FBTztBQUFBO0FBQUE7QUFBQSxFQUdiLFVBQVVGLEdBQUcsYUFBYTlNLEVBQUUsU0FBUyxJQUFJO0FBQUE7QUFBQSxFQUV6QyxZQUFZOE0sR0FBRyxlQUFlOU0sRUFBRSxXQUFXLElBQUk7QUFBQTtBQUFBLEVBRS9DLG9CQUFvQjhNLEdBQUcsdUJBQXVCOU0sRUFBRSxtQkFBbUIsSUFBSTtBQUFBO0FBQUEsRUFFdkUsbUJBQW1COE0sR0FBRyxzQkFBc0I5TSxFQUFFLGtCQUFrQixJQUFJO0FBQUE7QUFBQSxFQUVwRSxNQUFNOE0sR0FBRyxRQUFROU0sRUFBRSxXQUFXLElBQUk7QUFBQTtBQUFBLEVBRWxDLHVCQUF1QjhNLEdBQUcscUJBQXFCOU0sRUFBRSxzQkFBc0IsSUFBSTtBQUFBO0FBQUEsRUFFM0Usc0JBQXNCOE0sR0FBRyxvQkFBb0I5TSxFQUFFLHFCQUFxQixJQUFJO0FBQUE7QUFFMUUsSUFBSSxFQUFFLE9BQU9pTixHQUFHLElBQUl0TyxFQUFFLGdCQUFnQixHQUFHdU8sSUFBSXJYLEVBQUksU0FBUyxFQUFFLFNBQVMsR0FBR3NYLEtBQUt0WCxFQUFJLE9BQU87QUFBQSxFQUN0RixTQUFTcVg7QUFBQSxFQUNULFFBQVFBO0FBQUEsRUFDUixVQUFVQTtBQUFBLEVBQ1YsUUFBUUE7QUFBQSxFQUNSLGFBQWFBO0FBQUEsRUFDYixtQkFBbUJBO0FBQUEsRUFDbkIsbUJBQW1CQTtBQUFBLEVBQ25CLG1CQUFtQkE7QUFBQSxFQUNuQiw2QkFBNkJBO0FBQUEsRUFDN0IsaUJBQWlCQTtBQUFBLEVBQ2pCLHNCQUFzQkE7QUFDeEIsQ0FBQyxHQUFHRSxLQUFJLE1BQU1BLEdBQUU7QUFBQSxFQUNkLGNBQWM7QUFDWixTQUFLLGVBQWUsQ0FBQyxNQUFNO0FBQ3pCLFdBQUssYUFBYUEsR0FBRSxxQkFBcUIsR0FBRyxPQUFPLFFBQVEsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDdlcsR0FBR0ksQ0FBQyxNQUFNO0FBQ2hGLGNBQU0sSUFBSUQsR0FBR0gsR0FBR0ksS0FBS21XLEdBQUUsTUFBTUgsRUFBRTtBQUMvQixhQUFLLFdBQVdwVyxDQUFDLElBQUk7QUFBQSxNQUN2QixDQUFDO0FBQUEsSUFDSCxHQUFHLEtBQUssYUFBYXVXLEdBQUUscUJBQXFCO0FBQUEsRUFDOUM7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUlBLElBQUksTUFBTTtBQUNSLFdBQU8sRUFBRSxHQUFHLEtBQUssV0FBVztBQUFBLEVBQzlCO0FBQ0Y7QUFDQUEsR0FBRSxPQUFPLE1BQU07QUFDZixHQUFHQSxHQUFFLHVCQUF1QixNQUFNO0FBQ2hDLFFBQU1DLElBQUksQ0FBQztBQUNYLFNBQU8sT0FBTyxLQUFLRixHQUFHLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDdFcsTUFBTTtBQUNqRCxJQUFBd1csRUFBRXhXLENBQUMsSUFBSXVXLEdBQUU7QUFBQSxFQUNYLENBQUMsR0FBR0M7QUFDTixHQUFHRCxHQUFFLGFBQWEsQ0FBQ0MsTUFBTTtBQUN2QixRQUFNeFcsSUFBSSxJQUFJdVcsR0FBRTtBQUNoQixTQUFPdlcsRUFBRSxhQUFhc1csR0FBRyxNQUFNRSxDQUFDLENBQUMsR0FBR3hXO0FBQ3RDO0FBQ0EsSUFBSXlXLEtBQUtGO0FBQ1QsTUFBTUcsR0FBRztBQUFBLEVBQ1AsWUFBWSxHQUFHMVcsR0FBR0ksR0FBRyxHQUFHO0FBQ3RCLFNBQUssZ0JBQWdCLENBQUMsTUFBTTtBQUMxQixVQUFJLENBQUMsRUFBRSxRQUFRO0FBQ2IsZ0JBQVEsS0FBSyx1QkFBdUI7QUFDcEM7QUFBQSxNQUNGO0FBQ0EsVUFBSXVXLEdBQUcsRUFBRSxNQUFNLE1BQU1BLEdBQUcsS0FBSyxPQUFPLEtBQUssT0FBTyxFQUFFLFFBQVEsWUFBWSxFQUFFLEtBQUssVUFBVSxPQUFPLEVBQUUsUUFBUSxZQUFZLEVBQUUsS0FBSyxVQUFVLEVBQUUsS0FBSyxXQUFXO0FBQ3JKO0FBQ0YsVUFBSSxJQUFJO0FBQ1IsVUFBSTtBQUNGLFlBQUkxUyxHQUFHLEtBQUssTUFBTSxFQUFFLElBQUksQ0FBQztBQUFBLE1BQzNCLFFBQVE7QUFDTjtBQUFBLE1BQ0Y7QUFDQSxVQUFJLENBQUMsS0FBSyxjQUFjLENBQUMsRUFBRztBQUM1QixZQUFNLEVBQUUsV0FBV3VGLEdBQUcsU0FBU0MsRUFBRSxJQUFJLEdBQUdGLElBQUlFLEVBQUU7QUFDOUMsY0FBUUYsR0FBRztBQUFBLFFBQ1QsS0FBSztBQUNILGVBQUssa0JBQWtCLGNBQWNFLEVBQUUsU0FBUyxHQUFHQSxFQUFFLE1BQU0sT0FBTyxNQUFNO0FBQ3hFO0FBQUEsUUFDRixLQUFLO0FBQ0gsZUFBSyxjQUFjLElBQUksUUFBUUQsR0FBR0MsRUFBRSxXQUFXO0FBQy9DO0FBQUEsUUFDRixLQUFLO0FBQ0gsZUFBSyxjQUFjLElBQUksT0FBT0QsR0FBR0MsRUFBRSxXQUFXO0FBQzlDO0FBQUEsUUFDRixLQUFLO0FBQ0gsZUFBSyxjQUFjLElBQUksU0FBU0QsR0FBR0MsRUFBRSxhQUFhQSxFQUFFLE1BQU07QUFDMUQ7QUFBQSxRQUNGLEtBQUs7QUFDSCxlQUFLLGFBQWFELENBQUMsSUFBSSxFQUFFLFFBQVEsS0FBSyxrQkFBa0IsWUFBWUMsQ0FBQztBQUNyRTtBQUFBLFFBQ0YsS0FBSztBQUNILGVBQUssa0JBQWtCLGVBQWVBLEVBQUUsT0FBTztBQUMvQztBQUFBLFFBQ0YsS0FBSztBQUNILGVBQUssY0FBYyxJQUFJLGtCQUFrQkEsRUFBRSxhQUFhQSxFQUFFLFFBQVFELENBQUM7QUFDbkU7QUFBQSxRQUNGO0FBQ0Usa0JBQVEsS0FBSyxnQ0FBZ0NELENBQUM7QUFBQSxNQUNsRDtBQUFBLElBQ0YsR0FBRyxLQUFLLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxXQUFXLEtBQUssVUFBVSxDQUFDLEVBQUUsYUFBYSxRQUFRLElBQUksZ0JBQWdCLEtBQUssUUFBUSxFQUFFLE1BQU0sR0FBRyxRQUFRLEtBQUssa0NBQWtDLENBQUMsR0FBRyxNQUFNLEtBQUssT0FBTyxJQUFJLEVBQUUsS0FBSyxLQUFLLFFBQVEsS0FBSyxvQ0FBb0MsQ0FBQyxHQUFHLE9BQU8sS0FBSyxPQUFPLElBQUksRUFBRSxLQUFLLEdBQUcsS0FBSyxLQUFLLGVBQWUsQ0FBQyxHQUFHLEtBQUssU0FBeUIsb0JBQUksSUFBSSxHQUFHLEtBQUssU0FBUyxHQUFHLEtBQUssVUFBVXZKLEdBQUcsS0FBSyxnQkFBZ0JJLEdBQUcsS0FBSyxvQkFBb0I7QUFBQSxFQUN0YztBQUNGO0FBQ0EsTUFBTXVXLEtBQUssQ0FBQyxNQUFNLElBQUksSUFBSSxDQUFDLEVBQUU7QUFDN0IsZUFBZUMsR0FBRyxHQUFHLEdBQUc7QUFDdEIsUUFBTSxJQUFJLE1BQU0xWCxHQUFlO0FBQUEsSUFDN0IsUUFBUTtBQUFBLElBQ1IsT0FBTztBQUFBLElBQ1AsYUFBYTtBQUFBLEVBQ2YsQ0FBQyxFQUFFLFNBQVN5RSxJQUFJLE1BQU1PLEdBQUcsQ0FBQztBQUMxQixNQUFJLENBQUNDLEdBQUcsR0FBR1IsQ0FBQztBQUNWLFVBQU0sSUFBSSxNQUFNLG1DQUFtQztBQUNyRCxTQUFPO0FBQ1Q7QUFDQSxNQUFNa1QsR0FBRztBQUFBLEVBQ1AsY0FBYztBQUNaLFNBQUssY0FBOEIsb0JBQUksSUFBSTtBQUFBLEVBQzdDO0FBQUEsRUFDQSxjQUFjLEdBQUc3VyxHQUFHO0FBQ2xCLFNBQUssWUFBWSxJQUFJLEdBQUdBLENBQUM7QUFBQSxFQUMzQjtBQUFBLEVBQ0EsZ0JBQWdCO0FBQ2QsVUFBTSxJQUFJLEtBQUssWUFBWSxPQUFPLEVBQUUsS0FBSyxFQUFFO0FBQzNDLFFBQUksQ0FBQztBQUNILFlBQU0sSUFBSSxNQUFNLHNCQUFzQjtBQUN4QyxXQUFPO0FBQUEsRUFDVDtBQUFBLEVBQ0Esb0JBQW9CO0FBQ2xCLFdBQU8sS0FBSztBQUFBLEVBQ2Q7QUFDRjtBQUNBLE1BQU04VyxLQUFLLENBQUMsR0FBRyxHQUFHOVcsTUFBTTtBQUN0QixRQUFNLEVBQUUsVUFBVUksRUFBRSxJQUFJO0FBQ3hCLEVBQUFBLEVBQUUsVUFBVSxVQUFVLENBQUMsTUFBTTtBQUMzQixRQUFJLEVBQUUsV0FBVztBQUNmLFlBQU0sSUFBSSxFQUFFLGFBQWEsSUFBSSxFQUFFLGVBQWUsRUFBRSxtQkFBbUIsVUFBVSxJQUFJLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixXQUFXLElBQUk7QUFBQSxRQUNwSSxXQUFXO0FBQUEsVUFDVCxXQUFXO0FBQUEsVUFDWCxhQUFhO0FBQUEsVUFDYixXQUFXLE9BQU8sTUFBTTtBQUN0QixpQkFBSzJXLEdBQUcsYUFBYSxHQUFHLEdBQUcvVyxHQUFHLENBQUM7QUFBQSxVQUNqQztBQUFBLFFBQ0Y7QUFBQSxRQUNBLFlBQVk7QUFBQSxVQUNWLFdBQVc7QUFBQSxVQUNYLGFBQWE7QUFBQSxVQUNiLFdBQVcsT0FBTyxNQUFNO0FBQ3RCLGlCQUFLK1csR0FBRyxjQUFjLEdBQUcsR0FBRy9XLEdBQUcsQ0FBQztBQUFBLFVBQ2xDO0FBQUEsUUFDRjtBQUFBLE1BQ0Y7QUFDQSxNQUFBQSxFQUFFLElBQUkscUJBQXFCLENBQUM7QUFBQSxJQUM5QjtBQUFBLEVBQ0YsQ0FBQztBQUNILEdBQUcrVyxLQUFLLENBQUMsR0FBRyxHQUFHL1csR0FBR0ksR0FBRyxNQUFNK0ksRUFBRSxTQUFTLElBQUk7QUFBQSxFQUN4QyxTQUFTbko7QUFBQSxFQUNULHVCQUF1Qm1OLEdBQUduTixFQUFFLHdCQUF3QixDQUFDO0FBQUEsRUFDckQsa0JBQWtCZ0UsR0FBRWhFLEVBQUUsT0FBTztBQUFBLEVBQzdCLGVBQWVJO0FBQUEsRUFDZixjQUFjLEVBQUUsVUFBVSxHQUFHLHdCQUF3QixLQUFLLE9BQU8sU0FBUyxFQUFFLHVCQUF1QjtBQUFBLEVBQ25HLFlBQVk7QUFDZCxDQUFDLEdBQUc0VyxLQUFLLHVHQUF1RyxFQUFFLE9BQU9DLElBQUcsT0FBT0MsR0FBRSxJQUFJcFAsRUFBRSxTQUFTLEdBQUdxUCxLQUFJLE1BQU1BLEdBQUU7QUFBQSxFQUNqSyxZQUFZLEdBQUc7QUFDYixTQUFLLGVBQWUsSUFBSXJCLEdBQUcsR0FBRyxLQUFLLGFBQWEsSUFBSUEsR0FBRyxHQUFHLEtBQUssVUFBVSxJQUFJQSxHQUFHLEdBQUcsS0FBSyxZQUFZSyxHQUFHLEdBQUcsS0FBSyxnQkFBZ0IsWUFBWTtBQUN6SSxVQUFJO0FBQ0YsUUFBQWMsR0FBRSw0QkFBNEIsR0FBR0EsR0FBRSxpQ0FBaUM7QUFDcEUsY0FBTWpYLElBQUksTUFBTSxLQUFLLGFBQWEsWUFBWTtBQUFBLFVBQzVDLFlBQVk7QUFBQSxVQUNaLGVBQWVnWDtBQUFBLFFBQ2pCLENBQUM7QUFDRCxRQUFBQyxHQUFFLDJCQUEyQixHQUFHQSxHQUFFLGlDQUFpQztBQUNuRSxjQUFNN1csSUFBSSxNQUFNLEtBQUssV0FBVyxZQUFZO0FBQUEsVUFDMUMsWUFBWTtBQUFBLFVBQ1osZUFBZTRXO0FBQUEsUUFDakIsQ0FBQztBQUNELFFBQUFDLEdBQUUsMkJBQTJCLEdBQUdBLEdBQUUsZ0RBQWdEO0FBQ2xGLGNBQU0sSUFBSUUsR0FBRTtBQUFBLFVBQ1YsS0FBSztBQUFBLFVBQ0xuWDtBQUFBLFVBQ0FJO0FBQUEsVUFDQSxLQUFLLFdBQVc7QUFBQSxRQUNsQjtBQUNBLGFBQUssUUFBUSxJQUFJLENBQUMsR0FBRzBXLEdBQUcsS0FBSyxXQUFXLEdBQUcsS0FBSyxhQUFhLEdBQUdHLEdBQUUsOEJBQThCLEdBQUcsTUFBTWYsR0FBRyxLQUFLLFdBQVcsR0FBRyxLQUFLLGFBQWEsR0FBRyxLQUFLLGNBQWMsSUFBSSxPQUFPbFcsRUFBRSxrQkFBa0JBLEVBQUUsUUFBUSxHQUFHaVgsR0FBRSxnQ0FBZ0M7QUFBQSxNQUN2UCxTQUFTalgsR0FBRztBQUNWLGNBQU1JLElBQUlGLEdBQUVGLENBQUM7QUFDYixRQUFBa1gsR0FBRSxpQ0FBaUM5VyxDQUFDLEdBQUcsS0FBSyxjQUFjLElBQUksWUFBWUEsQ0FBQztBQUFBLE1BQzdFO0FBQUEsSUFDRixHQUFHLEtBQUssZ0JBQWdCLENBQUNKLE1BQU07QUFDN0IsV0FBSyxlQUFlLFNBQVNBLEdBQUcsS0FBSyxzQkFBc0IsT0FBTyxPQUFPLEtBQUssa0JBQWtCLEVBQUUsUUFBUSxDQUFDSSxNQUFNO0FBQy9HLFFBQUFBLE1BQU1BLEVBQUUsS0FBSyxNQUFNLFNBQVNKO0FBQUEsTUFDOUIsQ0FBQztBQUFBLElBQ0gsR0FBRyxLQUFLLGNBQWMsQ0FBQ0EsTUFBTTtBQUMzQixXQUFLLGFBQWEsUUFBUSxhQUFhLEtBQUssYUFBYSxJQUFJQSxDQUFDO0FBQUEsSUFDaEUsR0FBRyxLQUFLLGlCQUFpQixDQUFDQSxNQUFNO0FBQzlCLFdBQUssYUFBYSxRQUFRLGFBQWEsS0FBSyxhQUFhLE1BQU0sSUFBSSxNQUFNQSxDQUFDLEdBQUdBLENBQUM7QUFBQSxJQUNoRixHQUFHLEtBQUssZ0JBQWdCLENBQUNBLEdBQUdJLElBQUksQ0FBQyxNQUFNO0FBQ3JDLFVBQUksQ0FBQyxLQUFLLE9BQVEsT0FBTSxJQUFJLE1BQU0sOEJBQThCO0FBQ2hFLFlBQU0sSUFBSVMsR0FBRyxNQUFNYixDQUFDLEdBQUcsSUFBSSxTQUFTLGNBQWMsUUFBUSxHQUFHLElBQUksS0FBSyxpQkFBaUJJLENBQUM7QUFDeEYsUUFBRSxPQUFPLEdBQUcsQ0FBQztBQUNiLFlBQU0sSUFBSSxJQUFJLElBQUksV0FBVyxFQUFFLElBQUksS0FBSyxLQUFLLE9BQU8sT0FBTztBQUMzRCxhQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsR0FBRyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFTLFFBQVEsRUFBRSxNQUFNLFFBQVEsUUFBUSxLQUFLLGVBQWUsR0FBRyxDQUFDO0FBQUEsSUFDM0gsR0FBRyxLQUFLLGlCQUFpQixDQUFDSixHQUFHSSxNQUFNO0FBQ2pDLFlBQU0sSUFBSTtBQUFBLFFBQ1IsTUFBTUo7QUFBQSxRQUNOLE1BQU1JO0FBQUEsUUFDTixPQUFPLENBQUMsTUFBTTtBQUNaLGNBQUk7QUFDSixrQkFBUSxJQUFJLFNBQVMsY0FBYyxDQUFDLE1BQU0sT0FBTyxTQUFTLEVBQUUsWUFBWUEsQ0FBQztBQUFBLFFBQzNFO0FBQUEsTUFDRjtBQUNBLGFBQU8sS0FBSyxpQkFBaUIsRUFBRSxNQUFNLEVBQUUsTUFBTSxNQUFNLEVBQUUsS0FBSyxDQUFDLEdBQUcsS0FBSyx1QkFBdUIsS0FBSyxxQkFBcUI7QUFBQSxRQUNsSCxDQUFDUSxHQUFHLElBQUksR0FBRztBQUFBLFFBQ1gsQ0FBQ0EsR0FBRyxXQUFXLEdBQUc7QUFBQSxRQUNsQixDQUFDQSxHQUFHLFdBQVcsR0FBRztBQUFBLFFBQ2xCLENBQUNBLEdBQUcsUUFBUSxHQUFHO0FBQUEsTUFDakIsSUFBSSxLQUFLLG1CQUFtQlosQ0FBQyxJQUFJLEdBQUc7QUFBQSxJQUN0QyxHQUFHLEtBQUssbUJBQW1CLENBQUNBLE1BQU07QUFDaEMsWUFBTUksSUFBSSxJQUFJLGdCQUFnQjtBQUM5QixhQUFPQSxFQUFFLE9BQU8sV0FBVyxLQUFLLFFBQVEsR0FBR0EsRUFBRSxPQUFPLFVBQVUsS0FBSyxNQUFNLEdBQUdKLEVBQUUsVUFBVUksRUFBRSxPQUFPLFVBQVUyRCxHQUFHL0QsRUFBRSxNQUFNLENBQUMsR0FBR0ksRUFBRSxPQUFPLGVBQWUsS0FBSyxPQUFPLG1CQUFtQixHQUFHQTtBQUFBLElBQ3RMLEdBQUcsS0FBSyxtQkFBbUIsQ0FBQ0osTUFBTTtBQUNoQyxNQUFBNFcsR0FBRzVXLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQ0ksTUFBTTtBQUNyQixhQUFLLGtCQUFrQixjQUFjSixFQUFFLE1BQU1JLENBQUMsR0FBRyxLQUFLLFdBQVcsUUFBUSxhQUFhLEtBQUssV0FBVyxJQUFJQSxDQUFDO0FBQUEsTUFDN0csQ0FBQyxFQUFFLE1BQU0sQ0FBQ0EsTUFBTThXLEdBQUUseUNBQXlDOVcsQ0FBQyxDQUFDO0FBQUEsSUFDL0QsR0FBRyxLQUFLLGFBQWEsTUFBTSxTQUFTLGNBQWMsS0FBSyxVQUFVLEtBQUssU0FBUyxNQUFNLEtBQUssYUFBYSxNQUFNO0FBQzNHLFlBQU1KLElBQUksS0FBSyxRQUFRLHFCQUFxQixJQUFJO0FBQ2hELFVBQUksQ0FBQ0EsR0FBRztBQUNOLFFBQUFrWCxHQUFFLCtEQUErRDtBQUNqRTtBQUFBLE1BQ0Y7QUFDQSxNQUFBL04sRUFBRSxTQUFTLElBQUk7QUFBQSxRQUNiLFNBQVNuSjtBQUFBLFFBQ1QsdUJBQXVCbU4sR0FBR25OLEVBQUUsd0JBQXdCLGFBQWE7QUFBQSxRQUNqRSxrQkFBa0JnRSxHQUFFaEUsRUFBRSxPQUFPO0FBQUEsUUFDN0IsZUFBZSxLQUFLO0FBQUEsUUFDcEIsY0FBYztBQUFBLFVBQ1osdUJBQXVCLEtBQUssa0JBQWtCLGtCQUFrQjtBQUFBLFFBQ2xFO0FBQUEsUUFDQSxZQUFZO0FBQUE7QUFBQSxNQUVkLENBQUM7QUFBQSxJQUNILEdBQUcsS0FBSyw2QkFBNkIsTUFBTTtBQUN6QyxVQUFJLENBQUMsS0FBSyxRQUFRLHFCQUFxQixJQUFJLEdBQUc7QUFDNUMsUUFBQWtYLEdBQUUsc0ZBQXNGO0FBQ3hGO0FBQUEsTUFDRjtBQUNBLFlBQU0sSUFBSTtBQUFBLFFBQ1Isb0JBQW9CN1csRUFBRTtBQUFBLFFBQ3RCLG1CQUFtQkEsRUFBRTtBQUFBLFFBQ3JCLHVCQUF1QkEsRUFBRTtBQUFBLFFBQ3pCLHNCQUFzQkEsRUFBRTtBQUFBLE1BQzFCO0FBQ0EsYUFBTyxPQUFPLFFBQVEsS0FBSyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUNzRCxHQUFHQyxDQUFDLE9BQU87QUFBQSxRQUNyRCxNQUFNLEVBQUVELENBQUMsS0FBS0E7QUFBQSxRQUNkLEdBQUdDLEVBQUUsVUFBVSxxQkFBcUIsSUFBSTtBQUFBLE1BQzFDLEVBQUU7QUFBQSxJQUNKLEdBQUcsS0FBSyxnQkFBZ0IsQ0FBQzVELEdBQUdJLE1BQU07QUFDaEMsWUFBTSxJQUFJLEtBQUssUUFBUSxxQkFBcUIsSUFBSTtBQUNoRCxVQUFJLENBQUMsR0FBRztBQUNOLFFBQUE4VyxHQUFFLCtEQUErRDtBQUNqRTtBQUFBLE1BQ0Y7QUFDQSxjQUFRbFgsR0FBRztBQUFBLFFBQ1QsS0FBS0ssRUFBRTtBQUNMLGlCQUFPOEksRUFBRSxhQUFhLElBQUk7QUFBQSxZQUN4QixTQUFTO0FBQUEsWUFDVCx1QkFBdUJnRSxHQUFHLEVBQUUsd0JBQXdCLFVBQVUsUUFBUTtBQUFBLFlBQ3RFLGtCQUFrQm5KLEdBQUUsRUFBRSxPQUFPO0FBQUEsWUFDN0IsZUFBZSxLQUFLO0FBQUEsWUFDcEIsY0FBYyxFQUFFLFVBQVU1RCxFQUFFO0FBQUEsWUFDNUIsWUFBWTtBQUFBLFVBQ2QsQ0FBQztBQUFBLFFBQ0gsS0FBS0MsRUFBRSxvQkFBb0I7QUFDekIsZ0JBQU0sSUFBSSxLQUFLLFVBQVUsbUJBQW1CLFVBQVUscUJBQXFCLElBQUk7QUFDL0UsY0FBSSxDQUFDLEdBQUc7QUFDTixZQUFBNlc7QUFBQSxjQUNFO0FBQUEsWUFDRjtBQUNBO0FBQUEsVUFDRjtBQUNBLGlCQUFPLEVBQUUsVUFBVTlXLENBQUM7QUFBQSxRQUN0QjtBQUFBLFFBQ0EsS0FBS0MsRUFBRSxtQkFBbUI7QUFDeEIsZ0JBQU0sSUFBSSxLQUFLLFVBQVUsa0JBQWtCLFVBQVUscUJBQXFCLElBQUk7QUFDOUUsY0FBSSxDQUFDLEdBQUc7QUFDTixZQUFBNlc7QUFBQSxjQUNFO0FBQUEsWUFDRjtBQUNBO0FBQUEsVUFDRjtBQUNBLGlCQUFPLEVBQUUsVUFBVTlXLENBQUM7QUFBQSxRQUN0QjtBQUFBLFFBQ0EsS0FBS0MsRUFBRSx1QkFBdUI7QUFDNUIsZ0JBQU0sSUFBSSxLQUFLLFVBQVUsc0JBQXNCLFVBQVUscUJBQXFCLElBQUk7QUFDbEYsY0FBSSxDQUFDLEdBQUc7QUFDTixZQUFBNlc7QUFBQSxjQUNFO0FBQUEsWUFDRjtBQUNBO0FBQUEsVUFDRjtBQUNBLGlCQUFPLEVBQUUsVUFBVTlXLENBQUM7QUFBQSxRQUN0QjtBQUFBLFFBQ0EsS0FBS0MsRUFBRSxzQkFBc0I7QUFDM0IsZ0JBQU0sSUFBSSxLQUFLLFVBQVUscUJBQXFCLFVBQVUscUJBQXFCLElBQUk7QUFDakYsY0FBSSxDQUFDLEdBQUc7QUFDTixZQUFBNlc7QUFBQSxjQUNFO0FBQUEsWUFDRjtBQUNBO0FBQUEsVUFDRjtBQUNBLGlCQUFPLEVBQUUsVUFBVTlXLENBQUM7QUFBQSxRQUN0QjtBQUFBLFFBQ0EsS0FBS0MsRUFBRSxZQUFZO0FBQ2pCLGdCQUFNLElBQUksS0FBSyxVQUFVLEtBQUssVUFBVTtBQUN4QyxjQUFJLENBQUMsRUFBRTtBQUNMLGtCQUFNLE1BQU0sdURBQXVEO0FBQ3JFLGlCQUFPOEksRUFBRSxXQUFXLElBQUk7QUFBQSxZQUN0QixTQUFTO0FBQUEsWUFDVCx1QkFBdUJnRSxHQUFHLEVBQUUsd0JBQXdCLFVBQVUsTUFBTTtBQUFBLFlBQ3BFLGtCQUFrQm5KLEdBQUUsRUFBRSxPQUFPO0FBQUEsWUFDN0IsZUFBZSxLQUFLO0FBQUE7QUFBQTtBQUFBLFlBR3BCLGNBQWM1RCxLQUFLLGFBQWFBLEtBQUtBLEVBQUUsVUFBVTtBQUFBLGNBQy9DLFVBQVVBLEVBQUU7QUFBQSxjQUNaLE9BQU9BLEVBQUU7QUFBQSxjQUNULE9BQU9BLEVBQUU7QUFBQSxjQUNULFdBQVdBLEVBQUU7QUFBQSxjQUNiLFVBQVVBLEVBQUU7QUFBQSxjQUNaLFNBQVM7QUFBQSxZQUNYLElBQUk7QUFBQSxjQUNGLFFBQVFBLEVBQUU7QUFBQSxjQUNWLE9BQU9BLEVBQUU7QUFBQSxjQUNULFdBQVdBLEVBQUU7QUFBQSxjQUNiLFVBQVVBLEVBQUU7QUFBQSxjQUNaLFNBQVM7QUFBQSxZQUNYO0FBQUEsWUFDQSxZQUFZLEVBQUU7QUFBQSxVQUNoQixDQUFDO0FBQUEsUUFDSDtBQUFBLFFBQ0E7QUFDRSxVQUFBdUgsR0FBRzNILENBQUM7QUFBQSxNQUNSO0FBQUEsSUFDRixHQUFHLEtBQUssU0FBUyxLQUFLLFlBQVksS0FBSyxVQUFVLE1BQU07QUFDckQsTUFBQWlYLEdBQUUsNEJBQTRCO0FBQzlCLGlCQUFXalgsS0FBSyxPQUFPLE9BQU8sS0FBSyxzQkFBc0IsQ0FBQyxDQUFDO0FBQ3pELFFBQUFBLEtBQUtBLEVBQUUsS0FBSyxPQUFPO0FBQ3JCLGFBQU8sb0JBQW9CLFdBQVcsS0FBSyxhQUFhLGNBQWMsS0FBSyxLQUFLLFlBQVksQ0FBQyxHQUFHLEtBQUsscUJBQXFCLE1BQU0sT0FBTyxPQUFPO0FBQUEsSUFDaEosR0FBRyxLQUFLLGtCQUFrQixDQUFDQSxNQUFNO0FBQy9CLFdBQUssY0FBYyxhQUFhQSxDQUFDO0FBQUEsSUFDbkMsR0FBR21YLEdBQUUsa0JBQWtCLElBQUksR0FBRyxLQUFLLGFBQWEsVUFBVSxLQUFLLG9CQUFvQixlQUFlLEtBQUssVUFBVSxFQUFFLFdBQVcsOEJBQThCLEtBQUssU0FBUyxFQUFFLEdBQUcsR0FBRyxTQUFTLEtBQUssUUFBUSxHQUFHLEtBQUssZ0JBQWdCVixHQUFHLFdBQVcsQ0FBQyxHQUFHLEtBQUsscUJBQXFCLE1BQU0sS0FBSyxTQUFTLGFBQWF4WCxHQUFHLENBQUMsSUFBSSxLQUFLLFdBQVcsT0FBTyxTQUFTLFFBQVEsS0FBSyxhQUFhLEVBQUUsY0FBYyxRQUFRLEtBQUssaUJBQWlCLEVBQUUsUUFBUSxNQUFNLEdBQUcsS0FBSyxvQkFBb0IsSUFBSTRYLEdBQUcsR0FBRyxLQUFLLGVBQWUsSUFBSUgsR0FBRyxLQUFLLFFBQVEsS0FBSyxTQUFTLEtBQUssZUFBZTtBQUFBLE1BQzNoQixlQUFlLEtBQUs7QUFBQSxNQUNwQixhQUFhLEtBQUs7QUFBQSxNQUNsQixnQkFBZ0IsS0FBSztBQUFBLElBQ3ZCLENBQUMsR0FBRyxPQUFPLGlCQUFpQixXQUFXLEtBQUssYUFBYSxjQUFjLEtBQUssS0FBSyxZQUFZLENBQUMsR0FBRyxLQUFLLGNBQWM7QUFBQSxFQUN0SDtBQUFBLEVBQ0EsSUFBSSxzQkFBc0I7QUFDeEIsV0FBTyxLQUFLLE9BQU87QUFBQSxFQUNyQjtBQUNGO0FBQ0FTLEdBQUUsV0FBV2hPLEdBQUdnTyxHQUFFLG9CQUFvQixDQUFDWCxNQUFNO0FBQzNDLE1BQUlXLEdBQUUsWUFBWTtBQUNoQixVQUFNLElBQUksTUFBTSxnRUFBZ0U7QUFDbEYsU0FBTyxNQUFNWDtBQUNmLEdBQUdXLEdBQUUsY0FBYyxNQUFNLE9BQU8sT0FBTyxNQUFNQSxHQUFFLHNCQUFzQixDQUFDWCxHQUFHeFcsR0FBRyxHQUFHMkQsT0FBTztBQUFBLEVBQ3BGLHFCQUFxQjZTLEVBQUU7QUFBQSxFQUN2QixTQUFTLElBQUksSUFBSUEsRUFBRSxXQUFXalgsRUFBRSxFQUFFO0FBQUEsRUFDbEMsU0FBU29FO0FBQUEsRUFDVCxtQkFBbUIzRCxFQUFFO0FBQUEsRUFDckIsd0JBQXdCQSxFQUFFO0FBQUEsRUFDMUIsa0JBQWtCO0FBQUEsRUFDbEIsa0JBQWtCd1csRUFBRSxvQkFBb0IsQ0FBQztBQUMzQztBQUNBLElBQUlZLEtBQUtEO0FBRVQsTUFBTUUsS0FBNEJyWSxFQUFJLE9BQU87QUFBQSxFQUMzQyxNQUFNQSxFQUFJLE9BQU87QUFBQSxFQUNqQixLQUFLQSxFQUFJLE1BQU1BLEVBQUksT0FBTyxDQUFDO0FBQUEsRUFDM0IsS0FBS0EsRUFBSSxPQUFPO0FBQUEsRUFDaEIsS0FBS0EsRUFBSSxPQUFPO0FBQ2xCLENBQUM7QUFDREEsRUFBSSxNQUFNcVksRUFBeUI7QUFDbkMsTUFBTUMsS0FBZ0J0WSxFQUFJLE9BQU87QUFBQSxFQUMvQixNQUFNQSxFQUFJLE9BQU87QUFBQSxFQUNqQixTQUFTQSxFQUFJLE9BQU87QUFBQSxFQUNwQixNQUFNQSxFQUFJLE1BQU1BLEVBQUksT0FBTyxDQUFDO0FBQzlCLENBQUM7QUFDREEsRUFBSSxNQUFNc1ksRUFBYTtBQUN2QixNQUFNQyxLQUFtQixDQUFDQyxHQUFjN0QsR0FBSThELE1BQ25DLElBQUlDLE1BQVM7QUFDbEIsTUFBSTtBQUNGLFdBQU8vRCxFQUFHLEdBQUcrRCxDQUFJO0FBQUEsRUFDbkIsU0FBU0MsR0FBTztBQUNkLElBQUFGLEVBQVksa0NBQWtDRCxDQUFZLE1BQU1HLENBQUs7QUFDckU7QUFBQSxFQUNGO0FBQ0Y7QUFHRixJQUFJQyxLQUFpQyxrQkFBQ0MsT0FDcENBLEVBQWUsZUFBa0IsaUJBQ2pDQSxFQUFlLHFCQUF3Qix3QkFDdkNBLEVBQWUsb0JBQXVCLHVCQUN0Q0EsRUFBZSx3QkFBMkIsMkJBQzFDQSxFQUFlLHVCQUEwQiwwQkFDekNBLEVBQWUsYUFBZ0IsZUFDeEJBLElBQ05ELE1BQWlCLENBQUMsQ0FBQztBQUN0QjVZLEVBQUksV0FBVzRZLEVBQWE7QUFFNUIsTUFBTUUsSUFBaUI5WSxFQUFJLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxHQUFHLEVBQUUsU0FBUyxrQkFBa0IsQ0FBQyxHQUMxRStZLElBQWlCL1ksRUFBSSxPQUFPLEVBQUUsS0FBSyxFQUFFLFNBQVMsR0FDOUNnWixJQUFrQixDQUFDQyxNQUFValosRUFBSSxTQUFTaVosRUFBTSxTQUFTLENBQUM7QUFDaEUsSUFBSUMsS0FBNkIsa0JBQUNDLE9BQ2hDQSxFQUFXLGFBQWdCLGFBQzNCQSxFQUFXLFlBQWUsWUFDMUJBLEVBQVcsUUFBVyxTQUN0QkEsRUFBVyxXQUFjLFdBQ3pCQSxFQUFXLE9BQVUsUUFDckJBLEVBQVcsUUFBVyxTQUN0QkEsRUFBVyxVQUFhLFdBQ3hCQSxFQUFXLFVBQWEsV0FDeEJBLEVBQVcsUUFBVyxTQUN0QkEsRUFBVyxpQkFBb0IsaUJBQ3hCQSxJQUNORCxNQUFhLENBQUMsQ0FBQztBQUNsQixNQUFNRSxLQUFnQnBaLEVBQUksV0FBV2taLEVBQVM7QUFDOUMsSUFBSUcsS0FBb0Msa0JBQUNDLE9BQ3ZDQSxFQUFrQixjQUFpQixjQUNuQ0EsRUFBa0IsY0FBaUIsY0FDbkNBLEVBQWtCLFdBQWMsV0FDekJBLElBQ05ELE1BQW9CLENBQUMsQ0FBQztBQUN6QixNQUFNRSxLQUF1QnZaLEVBQUksV0FBV3FaLEVBQWdCLEdBQ3RERyxLQUFnQnhaLEVBQUksTUFBTSxDQUFDb1osSUFBZUcsRUFBb0IsQ0FBQztBQUNyRSxJQUFJRSxLQUFtQyxrQkFBQ0MsT0FDdENBLEVBQWlCLE9BQVUsUUFDM0JBLEVBQWlCLGNBQWlCLGVBQ2xDQSxFQUFpQixjQUFpQixlQUNsQ0EsRUFBaUIsV0FBYyxZQUN4QkEsSUFDTkQsTUFBbUIsQ0FBQyxDQUFDO0FBQ3hCelosRUFBSSxXQUFXeVosRUFBZTtBQUM5QixNQUFNRSxLQUEwQjNaLEVBQUksT0FBTztBQUFBLEVBQ3pDLFVBQVVBLEVBQUksT0FBTztBQUFBLEVBQ3JCLGdCQUFnQmdaLEVBQWdCaFosRUFBSSxPQUFPLENBQUM7QUFBQSxFQUM1QyxVQUFVZ1osRUFBZ0JoWixFQUFJLE9BQU9BLEVBQUksT0FBTyxHQUFHQSxFQUFJLElBQUksQ0FBQyxDQUFDO0FBQy9ELENBQUMsR0FDSzRaLEtBQXVCNVosRUFBSSxPQUFPO0FBQUEsRUFDdEMsSUFBSUEsRUFBSSxPQUFPO0FBQ2pCLENBQUM7QUFDREEsRUFBSSxPQUFPO0FBQUEsRUFDVCxZQUFZK1k7QUFBQSxFQUNaLFFBQVFBO0FBQUEsRUFDUixLQUFLQTtBQUNQLENBQUM7QUFDRC9ZLEVBQUksT0FBTztBQUFBLEVBQ1QsaUJBQWlCK1k7QUFBQSxFQUNqQixPQUFPQTtBQUFBLEVBQ1AsWUFBWUE7QUFBQSxFQUNaLFVBQVVBO0FBQUEsRUFDVixZQUFZQTtBQUFBLEVBQ1osUUFBUUE7QUFBQSxFQUNSLFNBQVNBO0FBQUEsRUFDVCxlQUFlQTtBQUFBLEVBQ2YsWUFBWUE7QUFBQSxFQUNaLFVBQVVBO0FBQ1osQ0FBQztBQUNELE1BQU1jLElBQVk3WixFQUFJLEtBQUs7QUFBQTtBQUFBLEVBRXpCO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQTtBQUFBLEVBRUE7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUNGLENBQUMsR0FDSzhaLEtBQW1CRCxFQUFVLFFBQVEsQ0FBQyxvQkFBb0Isa0JBQWtCLENBQUMsR0FDN0VFLEtBQXNCL1osRUFBSSxPQUFPLEVBQUUsTUFBTThaLEdBQWlCLENBQUMsR0FDM0RFLEtBQWlCSCxFQUFVLFFBQVEsQ0FBQyxRQUFRLFNBQVMsUUFBUSxDQUFDLEdBQzlESSxLQUFvQmphLEVBQUksT0FBTztBQUFBLEVBQ25DLE1BQU1nYTtBQUFBLEVBQ04sYUFBYVQ7QUFBQSxFQUNiLFFBQVF2WixFQUFJLE1BQU1BLEVBQUksT0FBTyxDQUFDLEVBQUUsU0FBUztBQUMzQyxDQUFDLEdBQ0trYSxLQUFpQkwsRUFBVSxRQUFRLENBQUMsY0FBYyxrQkFBa0IsZ0JBQWdCLENBQUMsR0FDckZNLEtBQW9CbmEsRUFBSSxPQUFPO0FBQUEsRUFDbkMsTUFBTWthO0FBQUEsRUFDTixTQUFTcEI7QUFBQSxFQUNULFNBQVM5WSxFQUFJLE9BQU9BLEVBQUksT0FBTyxHQUFHQSxFQUFJLE9BQU8sQ0FBQyxFQUFFLFNBQVM7QUFDM0QsQ0FBQyxHQUNLb2EsS0FBMkJQLEVBQVUsUUFBUSxDQUFDLGtCQUFrQixDQUFDLEdBQ2pFUSxLQUE4QnJhLEVBQUksT0FBTztBQUFBLEVBQzdDLE1BQU1vYTtBQUFBLEVBQ04sYUFBYVo7QUFBQSxFQUNiLFFBQVF4WixFQUFJLE1BQU1BLEVBQUksT0FBTyxDQUFDO0FBQ2hDLENBQUMsR0FDS3NhLEtBQXFCdGEsRUFBSSxPQUFPO0FBQUEsRUFDcEMsTUFBTUEsRUFBSSxRQUFRNlosRUFBVSxLQUFLLE1BQU07QUFBQSxFQUN2QyxRQUFRZjtBQUNWLENBQUMsR0FDS3lCLEtBQXFCdmEsRUFBSSxPQUFPO0FBQUEsRUFDcEMsTUFBTUEsRUFBSSxRQUFRNlosRUFBVSxLQUFLLE1BQU07QUFBQSxFQUN2QyxXQUFXZjtBQUFBLEVBQ1gsa0JBQWtCOVksRUFBSSxPQUFPO0FBQUEsRUFDN0IsVUFBVStZO0FBQUEsRUFDVix3QkFBd0IvWSxFQUFJLE1BQU0yWixFQUF1QjtBQUMzRCxDQUFDLEdBQ0thLEtBQWlDeGEsRUFBSSxPQUFPO0FBQUEsRUFDaEQsTUFBTUEsRUFBSSxRQUFRNlosRUFBVSxLQUFLLG9CQUFvQjtBQUFBLEVBQ3JELG9CQUFvQjdaLEVBQUksT0FBT0EsRUFBSSxPQUFPLEdBQUdBLEVBQUksSUFBSSxDQUFDO0FBQUEsRUFDdEQscUJBQXFCQSxFQUFJLElBQUksRUFBRSxTQUFTO0FBQUEsRUFDeEMsaUJBQWlCQSxFQUFJLFNBQVNBLEVBQUksT0FBT0EsRUFBSSxPQUFPLEdBQUdBLEVBQUksSUFBSSxDQUFDLENBQUM7QUFDbkUsQ0FBQyxHQUNLeWEsS0FBbUN6YSxFQUFJLE9BQU87QUFBQSxFQUNsRCxNQUFNQSxFQUFJLFFBQVE2WixFQUFVLEtBQUssNEJBQTRCO0FBQUEsRUFDN0QsaUJBQWlCN1osRUFBSSxPQUFPO0FBQzlCLENBQUMsR0FDSzBhLEtBQXFCMWEsRUFBSSxPQUFPO0FBQUEsRUFDbkMsV0FBK0I4WTtBQUFBLEVBQy9CLFVBQTZCQTtBQUFBLEVBQzdCLE9BQXNCQTtBQUFBLEVBQ3RCLFNBQTJCQTtBQUFBLEVBQzNCLFNBQTBCQTtBQUFBLEVBQzFCLGVBQXVDQztBQUMxQyxDQUFDLEdBQ0s0QixLQUFlM2EsRUFBSSxPQUFPO0FBQUEsRUFDN0IsV0FBK0IrWTtBQUFBLEVBQy9CLFVBQTZCQTtBQUFBLEVBQzdCLE9BQXNCRDtBQUFBLEVBQ3RCLFNBQTJCQTtBQUFBLEVBQzNCLFNBQTBCQTtBQUFBLEVBQzFCLGVBQXVDQztBQUFBLEVBQ3ZDLFNBQTBCQTtBQUFBLEVBQzFCLE1BQW9CQTtBQUFBLEVBQ3BCLE9BQXNCQTtBQUN6QixDQUFDLEdBQ0s2QixLQUFrQmYsRUFBVSxRQUFRLENBQUMsWUFBWSxZQUFZLG9CQUFvQixDQUFDLEdBQ2xGZ0IsS0FBcUI3YSxFQUFJLE9BQU87QUFBQSxFQUNwQyxNQUFNNGE7QUFBQSxFQUNOLFdBQVc5QjtBQUFBLEVBQ1gsdUJBQXVCYTtBQUFBLEVBQ3ZCLHFCQUFxQjNaLEVBQUksSUFBSSxFQUFFLFNBQVM7QUFBQSxFQUN4QyxzQkFBc0JBLEVBQUksUUFBUSxFQUFFLFNBQVM7QUFBQSxFQUM3QyxnQkFBZ0IrWTtBQUNsQixDQUFDLEVBQUUsT0FBTzJCLEdBQW1CLEtBQUssR0FDNUJJLEtBQThCOWEsRUFBSSxPQUFPO0FBQUEsRUFDN0MsTUFBTUEsRUFBSSxRQUFRNlosRUFBVSxLQUFLLGdCQUFnQjtBQUFBLEVBQ2pELG9CQUFvQjdaLEVBQUksUUFBUTtBQUNsQyxDQUFDLEdBQ0srYSxLQUE4Qi9hLEVBQUksT0FBTztBQUFBLEVBQzdDLE1BQU1BLEVBQUksUUFBUTZaLEVBQVUsS0FBSyxnQkFBZ0I7QUFBQSxFQUNqRCxhQUFhN1osRUFBSSxNQUFNQSxFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQ25DLGlCQUFpQkEsRUFBSSxNQUFNQSxFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQ3ZDLFlBQVlBLEVBQUksT0FBTztBQUN6QixDQUFDLEdBQ0tnYixLQUFlaGIsRUFBSSxtQkFBbUIsUUFBUTtBQUFBLEVBQ2xEK1o7QUFBQSxFQUNBRTtBQUFBLEVBQ0FFO0FBQUEsRUFDQUU7QUFBQSxFQUNBQztBQUFBLEVBQ0FDO0FBQUEsRUFDQU07QUFBQSxFQUNBQztBQUFBLEVBQ0FDO0FBQUEsRUFDQVA7QUFBQSxFQUNBQztBQUNGLENBQUM7QUFDRHphLEVBQUksT0FBTztBQUFBLEVBQ1QsU0FBU2diO0FBQUEsRUFDVCxPQUFPbEM7QUFBQSxFQUNQLFFBQVFBO0FBQUEsRUFDUixXQUFXQTtBQUNiLENBQUM7QUFDRDlZLEVBQUksT0FBTztBQUFBLEVBQ1QsWUFBWUEsRUFBSSxPQUFPO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFJdkIsVUFBVThZO0FBQ1osQ0FBQztBQUNEOVksRUFBSSxLQUFLLENBQUMsYUFBYSxZQUFZLENBQUM7QUFDcENBLEVBQUksT0FBTztBQUFBLEVBQ1QsY0FBY0EsRUFBSSxPQUFPO0FBQUEsRUFDekIsZ0JBQWdCQSxFQUFJLE9BQU8sRUFBRSxTQUFTO0FBQ3hDLENBQUM7QUFDREEsRUFBSSxPQUFPO0FBQUEsRUFDVCxjQUFjQSxFQUFJLE9BQU87QUFBQSxFQUN6QixtQkFBbUJnWixFQUFnQmhaLEVBQUksT0FBTyxDQUFDO0FBQUEsRUFDL0MsYUFBYWdaLEVBQWdCaFosRUFBSSxPQUFPLENBQUM7QUFBQSxFQUN6QyxxQkFBcUJnWixFQUFnQmhaLEVBQUksT0FBTyxDQUFDO0FBQUEsRUFDakQsNkJBQTZCZ1osRUFBZ0JoWixFQUFJLE9BQU9BLEVBQUksT0FBTyxHQUFHQSxFQUFJLElBQUksQ0FBQyxDQUFDO0FBQ2xGLENBQUM7QUFDRCxNQUFNaWIsS0FBMEJqYixFQUFJLE9BQU87QUFBQSxFQUN6QyxjQUFjQSxFQUFJLE1BQU1BLEVBQUksT0FBTyxDQUFDO0FBQUEsRUFDcEMsa0JBQWtCQSxFQUFJLE1BQU1BLEVBQUksT0FBTyxDQUFDO0FBQUEsRUFDeEMsYUFBYUEsRUFBSSxPQUFPO0FBQzFCLENBQUMsR0FDS2tiLEtBQXVCbGIsRUFBSSxPQUFPO0FBQUEsRUFDdEMsYUFBYUEsRUFBSSxPQUFPO0FBQUEsRUFDeEIsUUFBUUEsRUFBSSxNQUFNQSxFQUFJLE9BQU8sQ0FBQztBQUNoQyxDQUFDO0FBQ0RBLEVBQUksT0FBTztBQUFBLEVBQ1QsWUFBWUEsRUFBSSxPQUFPO0FBQ3pCLENBQUM7QUFDRCxNQUFNbWIsS0FBNEJuYixFQUFJLE9BQU87QUFBQSxFQUMzQyxTQUFTQSxFQUFJLFFBQVEsRUFBSztBQUFBLEVBQzFCLFlBQVlBLEVBQUksUUFBUSxrQkFBa0I7QUFBQSxFQUMxQyxRQUFRQSxFQUFJLE1BQU1rYixFQUFvQjtBQUN4QyxDQUFDO0FBQ0RsYixFQUFJLG1CQUFtQixXQUFXO0FBQUEsRUFDaENBLEVBQUksT0FBTyxFQUFFLFNBQVNBLEVBQUksUUFBUSxFQUFJLEVBQUUsQ0FBQztBQUFBLEVBQ3pDbWI7QUFDRixDQUFDO0FBQ0RuYixFQUFJLE9BQU87QUFBQSxFQUNULFlBQVlBLEVBQUksT0FBTztBQUFBLEVBQ3ZCLHlCQUF5QjJaO0FBQUEsRUFDekIscUJBQXFCZTtBQUFBLEVBQ3JCLDJCQUEyQjFhLEVBQUksUUFBUSxFQUFFLFNBQVM7QUFBQSxFQUNsRCxtQkFBbUJnWixFQUFnQmhaLEVBQUksT0FBTyxDQUFDO0FBQUEsRUFDL0MsZ0JBQWdCQSxFQUFJLE9BQU9BLEVBQUksT0FBTyxHQUFHQSxFQUFJLElBQUksQ0FBQztBQUNwRCxDQUFDO0FBQ0RBLEVBQUksT0FBTztBQUFBLEVBQ1QsWUFBWUEsRUFBSSxPQUFPO0FBQUEsRUFDdkIseUJBQXlCMlo7QUFBQSxFQUN6QixxQkFBcUJlO0FBQUEsRUFDckIsZ0JBQWdCMWEsRUFBSSxPQUFPQSxFQUFJLE9BQU8sR0FBR0EsRUFBSSxJQUFJLENBQUMsRUFBRSxTQUFTO0FBQy9ELENBQUM7QUFDREEsRUFBSSxPQUFPO0FBQUEsRUFDVCxRQUFRQSxFQUFJLEtBQUs7QUFBQSxJQUFDO0FBQUEsSUFBeUI7QUFBQSxJQUF5QjtBQUFBO0FBQUEsRUFBMkIsQ0FBQztBQUFBLEVBQ2hHLE1BQU1BLEVBQUksT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTO0FBQ3pDLENBQUM7QUFDREEsRUFBSSxPQUFPO0FBQUEsRUFDVCxNQUFNQSxFQUFJLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUztBQUN6QyxDQUFDO0FBQ0RBLEVBQUksT0FBTztBQUFBLEVBQ1QsTUFBTUEsRUFBSSxPQUFPO0FBQUEsRUFDakIsY0FBY0EsRUFBSSxPQUFPO0FBQUEsRUFDekIsbUJBQW1CQSxFQUFJLE9BQU87QUFBQSxFQUM5QixZQUFZQSxFQUFJLE9BQU87QUFBQSxFQUN2QixhQUFhQSxFQUFJLE9BQU8sRUFBRSxTQUFTO0FBQ3JDLENBQUM7QUFDRCxNQUFNb2IsS0FBMkJwYixFQUFJLE9BQU87QUFBQSxFQUMxQyxNQUFNQSxFQUFJLE9BQU87QUFBQSxFQUNqQixjQUFjZ1osRUFBZ0JoWixFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQzFDLG1CQUFtQmdaLEVBQWdCaFosRUFBSSxPQUFPLENBQUM7QUFBQSxFQUMvQyxZQUFZZ1osRUFBZ0JoWixFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQ3hDLGFBQWFnWixFQUFnQmhaLEVBQUksT0FBTyxDQUFDO0FBQUEsRUFDekMsaUJBQWlCZ1osRUFBZ0JoWixFQUFJLE9BQU9BLEVBQUksT0FBTyxHQUFHQSxFQUFJLElBQUksQ0FBQyxDQUFDO0FBQ3RFLENBQUM7QUFDREEsRUFBSSxtQkFBbUIsV0FBVztBQUFBLEVBQ2hDQSxFQUFJLE9BQU8sRUFBRSxTQUFTQSxFQUFJLFFBQVEsRUFBSSxHQUFHLE1BQU1BLEVBQUksT0FBTyxFQUFFLENBQUM7QUFBQSxFQUM3REEsRUFBSSxPQUFPLEVBQUUsU0FBU0EsRUFBSSxRQUFRLEVBQUssRUFBRSxDQUFDO0FBQzVDLENBQUM7QUFDREEsRUFBSSxPQUFPO0FBQUEsRUFDVCxpQkFBaUJBLEVBQUksTUFBTTRaLEVBQW9CO0FBQUEsRUFDL0MsNEJBQTRCWixFQUFnQmlDLEVBQXVCO0FBQUEsRUFDbkUsdUJBQXVCakMsRUFBZ0JoWixFQUFJLE1BQU1vYixFQUF3QixDQUFDO0FBQzVFLENBQUM7QUFFRHBiLEVBQUksT0FBTztBQUFBLEVBQ1QsV0FBV0EsRUFBSSxPQUFPO0FBQUEsRUFDdEIsZUFBZUEsRUFBSSxPQUFPO0FBQUEsRUFDMUIsY0FBY0EsRUFBSSxPQUFPO0FBQzNCLENBQUM7QUFDREEsRUFBSSxPQUFPO0FBQUEsRUFDVCxNQUFNQSxFQUFJLE9BQU87QUFBQSxFQUNqQixlQUFlQSxFQUFJLE9BQU87QUFBQSxFQUMxQixXQUFXQSxFQUFJLE9BQU87QUFDeEIsQ0FBQztBQUVELE1BQU1xYixLQUE2QixDQUFDQyxNQUNULEtBQUssVUFBVUEsQ0FBTSxHQUkxQ0MsSUFBZ0IsQ0FBQ3RDLE1BQVVqWixFQUFJLFNBQVNpWixFQUFNLFNBQVMsQ0FBQztBQUM5RGpaLEVBQUksT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEdBQUcsRUFBRSxTQUFTLGtCQUFrQixDQUFDO0FBQ3pEQSxFQUFJLE9BQU87QUFBQSxFQUNULG1CQUFtQkEsRUFBSSxRQUFRLE9BQU87QUFBQSxFQUN0QyxTQUFTQSxFQUFJLE9BQU87QUFBQSxFQUNwQixTQUFTQSxFQUFJLE9BQU9BLEVBQUksT0FBTyxHQUFHQSxFQUFJLE9BQU8sQ0FBQyxFQUFFLFNBQVM7QUFDM0QsQ0FBQztBQUNEQSxFQUFJLEtBQUssQ0FBQyxPQUFPLEtBQUssQ0FBQztBQUN2QixNQUFNd2IsS0FBZ0J4YixFQUFJLE9BQU87QUFBQSxFQUMvQixNQUFNQSxFQUFJLE9BQU87QUFBQSxFQUNqQixpQkFBaUJ1YixFQUFjdmIsRUFBSSxPQUFPLENBQUM7QUFBQSxFQUMzQyxhQUFhdWIsRUFBY3ZiLEVBQUksT0FBTyxDQUFDO0FBQUEsRUFDdkMsVUFBVXViLEVBQWN2YixFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQ3BDLFVBQVVBLEVBQUksT0FBTztBQUFBLEVBQ3JCLG9CQUFvQnViLEVBQWN2YixFQUFJLE9BQU8sQ0FBQztBQUNoRCxDQUFDLEdBQ0t5YixLQUFXemIsRUFBSSxPQUFPO0FBQUEsRUFDMUIsc0JBQXNCQSxFQUFJLE9BQU8sRUFBRSxJQUFJO0FBQUEsRUFDdkMsbUJBQW1CQSxFQUFJLE9BQU8sRUFBRSxJQUFJO0FBQUEsRUFDcEMsVUFBVUEsRUFBSSxPQUFPO0FBQUEsRUFDckIsYUFBYXViLEVBQWN2YixFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQ3ZDLFVBQVVBLEVBQUksT0FBTztBQUFBLEVBQ3JCLGtCQUFrQnViLEVBQWN2YixFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQzVDLHdCQUF3QnViLEVBQWN2YixFQUFJLE9BQU8sRUFBRSxJQUFJLENBQUM7QUFBQSxFQUN4RCxVQUFVQSxFQUFJLE9BQU8sRUFBRSxJQUFJO0FBQzdCLENBQUMsR0FDSzBiLEtBQWdCMWIsRUFBSSxPQUFPQSxFQUFJLE9BQU8sR0FBR0EsRUFBSSxJQUFJLENBQUMsR0FDbEQyYixLQUFRM2IsRUFBSSxPQUFPO0FBQUEsRUFDdkIsTUFBTUEsRUFBSSxPQUFPO0FBQUEsRUFDakIsVUFBVXViLEVBQWNHLEVBQWE7QUFDdkMsQ0FBQyxHQUNLRSxLQUF3QjViLEVBQUksT0FBTztBQUFBLEVBQ3ZDLFVBQVVBLEVBQUksT0FBTztBQUFBLEVBQ3JCLGdCQUFnQnViLEVBQWN2YixFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQzFDLFVBQVV1YixFQUFjdmIsRUFBSSxPQUFPQSxFQUFJLE9BQU8sR0FBR0EsRUFBSSxJQUFJLENBQUMsQ0FBQztBQUM3RCxDQUFDLEdBQ0s2YixLQUEwQjdiLEVBQUksT0FBTztBQUFBLEVBQ3pDLFVBQVVBLEVBQUksT0FBTztBQUN2QixDQUFDLEdBQ0s4YixLQUFzQjliLEVBQUksT0FBTztBQUFBLEVBQ3JDLElBQUl1YixFQUFjdmIsRUFBSSxPQUFPLENBQUM7QUFBQSxFQUM5QixrQkFBa0J1YixFQUFjdmIsRUFBSSxPQUFPLENBQUM7QUFBQSxFQUM1Qyx3QkFBd0J1YixFQUFjdmIsRUFBSSxPQUFPLEVBQUUsSUFBSSxDQUFDO0FBQUEsRUFDeEQsb0JBQW9CQSxFQUFJLE1BQU02YixFQUF1QjtBQUFBLEVBQ3JELGFBQWFOLEVBQWN2YixFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQ3ZDLFdBQVd1YixFQUFjdmIsRUFBSSxPQUFPLENBQUM7QUFDdkMsQ0FBQyxHQUNLK2IsS0FBb0MvYixFQUFJLE9BQU87QUFBQSxFQUNuRCxhQUFhQSxFQUFJLE9BQU87QUFDMUIsQ0FBQyxHQUNLZ2MsS0FBeUJoYyxFQUFJLE9BQU87QUFBQSxFQUN4QyxhQUFhQSxFQUFJLE9BQU87QUFBQSxFQUN4QiwwQ0FBMENBLEVBQUksT0FBTztBQUFBLEVBQ3JELFVBQVVBLEVBQUksT0FBTztBQUFBLEVBQ3JCLHVCQUF1QkEsRUFBSSxNQUFNK2IsRUFBaUM7QUFBQSxFQUNsRSxzQkFBc0IvYixFQUFJLE9BQU87QUFDbkMsQ0FBQyxHQUNLaWMsS0FBa0JqYyxFQUFJLE9BQU87QUFBQSxFQUNqQyxRQUFRd2I7QUFDVixDQUFDLEdBQ0tVLEtBQWlCbGMsRUFBSSxPQUFPO0FBQUEsRUFDaEMsVUFBVUEsRUFBSSxPQUFPO0FBQUEsRUFDckIsV0FBV0EsRUFBSSxNQUFNaWMsRUFBZTtBQUFBLEVBQ3BDLG9CQUFvQlYsRUFBY3ZiLEVBQUksT0FBTyxDQUFDO0FBQUEsRUFDOUMsT0FBT0EsRUFBSSxNQUFNZ2MsRUFBc0I7QUFBQSxFQUN2Qyx1QkFBdUJoYyxFQUFJLE9BQU87QUFBQSxFQUNsQyxpQkFBaUJBLEVBQUksT0FBTztBQUFBLEVBQzVCLG1CQUFtQkEsRUFBSSxPQUFPO0FBQUEsRUFDOUIsNkJBQTZCQSxFQUFJLE1BQU0rYixFQUFpQztBQUMxRSxDQUFDLEdBQ0tJLEtBQW9DbmMsRUFBSSxPQUFPO0FBQUEsRUFDbkQsU0FBU0EsRUFBSSxNQUFNOGIsRUFBbUI7QUFBQSxFQUN0QyxVQUFVOWIsRUFBSSxNQUFNa2MsRUFBYztBQUNwQyxDQUFDLEdBQ0tFLEtBQTBCcGMsRUFBSSxPQUFPO0FBQUEsRUFDekMsU0FBU21jO0FBQUEsRUFDVCxvQkFBb0JaLEVBQWNZLEVBQWlDO0FBQUEsRUFDbkUsU0FBU25jLEVBQUksTUFBTXdiLEVBQWE7QUFDbEMsQ0FBQyxHQUNLYSxLQUE0QnJjLEVBQUksT0FBTztBQUFBLEVBQzNDLFFBQVFBLEVBQUksUUFBUSxNQUFNO0FBQUEsRUFDMUIsUUFBUXViLEVBQWN2YixFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQ2xDLE9BQU9BLEVBQUksT0FBTztBQUFBLEVBQ2xCLE9BQU91YixFQUFjdmIsRUFBSSxPQUFPLENBQUM7QUFBQSxFQUNqQyxZQUFZQSxFQUFJLE1BQU15YixFQUFRO0FBQUEsRUFDOUIsc0JBQXNCemIsRUFBSSxPQUFPLEVBQUUsSUFBSTtBQUFBLEVBQ3ZDLG1CQUFtQkEsRUFBSSxPQUFPLEVBQUUsSUFBSTtBQUFBLEVBQ3BDLE9BQU8yYjtBQUFBLEVBQ1AsY0FBY0osRUFBY2EsRUFBdUI7QUFBQTtBQUFBLEVBRW5ELG1CQUFtQnBjLEVBQUksTUFBTTRiLEVBQXFCO0FBQ3BELENBQUMsR0FDS1UsS0FBcUJ0YyxFQUFJLG1CQUFtQixRQUFRO0FBQUEsRUFDeERBLEVBQUksT0FBTztBQUFBLElBQ1QsTUFBTUEsRUFBSSxRQUFRLE9BQU87QUFBQSxJQUN6QixVQUFVQSxFQUFJLFNBQVNBLEVBQUksVUFBVSxDQUFDO0FBQUEsRUFDeEMsQ0FBQyxFQUFFLE9BQU9xYyxHQUEwQixLQUFLO0FBQUEsRUFDekNyYyxFQUFJLE9BQU87QUFBQSxJQUNULE1BQU1BLEVBQUksS0FBSyxDQUFDLFdBQVcsY0FBYyxDQUFDO0FBQUEsSUFDMUMsVUFBVUEsRUFBSSxPQUFPO0FBQUEsRUFDdkIsQ0FBQyxFQUFFLE9BQU9xYyxHQUEwQixLQUFLO0FBQzNDLENBQUMsR0FDS0UsS0FBdUJ2YyxFQUFJLE9BQU87QUFBQSxFQUN0QyxRQUFRQSxFQUFJLFFBQVEsVUFBVTtBQUNoQyxDQUFDLEdBQ0t3YyxLQUFxQnhjLEVBQUksT0FBTztBQUFBLEVBQ3BDLFFBQVFBLEVBQUksUUFBUSxTQUFTO0FBQy9CLENBQUM7QUFDREEsRUFBSSxNQUFNLENBQUNzYyxJQUFvQkMsSUFBc0JDLEVBQWtCLENBQUM7QUFDeEV4YyxFQUFJLE9BQU87QUFBQSxFQUNULE1BQU1BLEVBQUksT0FBTztBQUFBLEVBQ2pCLE1BQU1BLEVBQUksT0FBTztBQUFBLEVBQ2pCLGVBQWVBLEVBQUksT0FBTztBQUFBLEVBQzFCLGlCQUFpQkEsRUFBSSxPQUFPO0FBQzlCLENBQUM7QUFDREEsRUFBSSxPQUFPO0FBQUEsRUFDVCxjQUFjQSxFQUFJLE9BQU87QUFBQSxFQUN6QixPQUFPQSxFQUFJLE9BQU87QUFDcEIsQ0FBQztBQUNEQSxFQUFJLE9BQU87QUFBQSxFQUNULGNBQWNBLEVBQUksT0FBTztBQUFBLEVBQ3pCLGVBQWVBLEVBQUksSUFBSTtBQUFBO0FBQUEsRUFFdkIscUJBQXFCQSxFQUFJLE9BQU8sRUFBRSxTQUFTO0FBQUEsRUFDM0Msb0JBQW9CQSxFQUFJLE9BQU8sRUFBRSxTQUFTO0FBQUEsRUFDMUMsZ0JBQWdCQSxFQUFJLE9BQU87QUFBQSxFQUMzQixtQkFBbUJBLEVBQUksT0FBTztBQUFBLEVBQzlCLGtCQUFrQkEsRUFBSSxPQUFPO0FBQUEsRUFDN0IsWUFBWUEsRUFBSSxNQUFNeWIsRUFBUTtBQUFBLEVBQzlCLG1CQUFtQnpiLEVBQUksT0FBTyxFQUFFLElBQUk7QUFBQSxFQUNwQyxlQUFlQSxFQUFJLFFBQVE7QUFBQSxFQUMzQix5QkFBeUI0YjtBQUFBLEVBQ3pCLGdCQUFnQjViLEVBQUksT0FBTyxFQUFFLFNBQVM7QUFBQSxFQUN0QywyQkFBMkJBLEVBQUksUUFBUSxFQUFFLFNBQVM7QUFBQSxFQUNsRCxxQkFBcUJ1YixFQUFjdmIsRUFBSSxPQUFPLENBQUM7QUFDakQsQ0FBQztBQUNEQSxFQUFJLE9BQU87QUFBQSxFQUNULG1CQUFtQkEsRUFBSSxPQUFPO0FBQ2hDLENBQUM7QUFDREEsRUFBSSxPQUFPO0FBQUEsRUFDVCxJQUFJQSxFQUFJLE9BQU87QUFBQSxFQUNmLFlBQVlBLEVBQUksT0FBTztBQUN6QixDQUFDO0FBQ0QsTUFBTXljLEtBQTBCemMsRUFBSSxPQUFPO0FBQUEsRUFDekMsTUFBTUEsRUFBSSxPQUFPO0FBQUEsRUFDakIsS0FBS0EsRUFBSSxNQUFNQSxFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQzNCLEtBQUtBLEVBQUksT0FBTztBQUFBLEVBQ2hCLEtBQUtBLEVBQUksT0FBTztBQUNsQixDQUFDO0FBQ0RBLEVBQUksTUFBTXljLEVBQXVCO0FBQ2pDLE1BQU1DLEtBQW9CMWMsRUFBSSxPQUFPO0FBQUEsRUFDbkMsb0JBQW9CQSxFQUFJLE9BQU8sRUFBRSxTQUFTO0FBQUEsRUFDMUMsc0JBQXNCQSxFQUFJLE9BQU9BLEVBQUksT0FBTyxHQUFHQSxFQUFJLElBQUksQ0FBQyxFQUFFLFNBQVM7QUFBQSxFQUNuRSx5QkFBeUJBLEVBQUksT0FBTyxFQUFFLFNBQVM7QUFBQSxFQUMvQyx3QkFBd0JBLEVBQUksT0FBTyxFQUFFLFNBQVM7QUFDaEQsQ0FBQyxHQUNLMmMsS0FBVzNjLEVBQUksT0FBTztBQUFBLEVBQzFCLFVBQVVBLEVBQUksT0FBTztBQUFBLEVBQ3JCLFVBQVVBLEVBQUksT0FBTyxFQUFFLElBQUk7QUFDN0IsQ0FBQyxHQUNLNGMsS0FBVzVjLEVBQUksT0FBTztBQUFBLEVBQzFCLFlBQVlBLEVBQUksTUFBTTJjLEVBQVE7QUFBQSxFQUM5QixnQkFBZ0IzYyxFQUFJLE9BQU8sRUFBRSxTQUFTO0FBQUEsRUFDdEMsNkJBQTZCQSxFQUFJLE9BQU8sRUFBRSxJQUFJO0FBQ2hELENBQUMsR0FDSzZjLEtBQTRCN2MsRUFBSSxPQUFPO0FBQUEsRUFDM0MsNkJBQTZCdWIsRUFBY3ZiLEVBQUksT0FBT0EsRUFBSSxPQUFPLEdBQUdBLEVBQUksSUFBSSxDQUFDLENBQUM7QUFDaEYsQ0FBQztBQUNEQSxFQUFJLE9BQU87QUFBQSxFQUNULGtCQUFrQkEsRUFBSSxPQUFPO0FBQUEsRUFDN0IseUJBQXlCNGI7QUFBQSxFQUN6QixtQkFBbUI1YixFQUFJLE9BQU8sRUFBRSxTQUFTO0FBQUEsRUFDekMsc0JBQXNCQSxFQUFJLE9BQU8sRUFBRSxTQUFTO0FBQUEsRUFDNUMsb0JBQW9CQSxFQUFJLFFBQVEsRUFBRSxTQUFTO0FBQUEsRUFDM0MsMEJBQTBCNGMsR0FBUyxTQUFTO0FBQzlDLENBQUMsRUFBRSxPQUFPRixHQUFrQixLQUFLLEVBQUUsT0FBT0csR0FBMEIsS0FBSztBQUN6RTdjLEVBQUksT0FBTztBQUFBLEVBQ1QsdUJBQXVCQSxFQUFJLE1BQU1BLEVBQUksT0FBT0EsRUFBSSxPQUFPLEdBQUdBLEVBQUksSUFBSSxDQUFDLENBQUM7QUFBQSxFQUNwRSxxQkFBcUJ1YixFQUFjdmIsRUFBSSxPQUFPLENBQUM7QUFDakQsQ0FBQztBQUNEQSxFQUFJLE9BQU87QUFBQSxFQUNULFFBQVEyYTtBQUFBLEVBQ1IsdUJBQXVCaUI7QUFDekIsQ0FBQztBQUNENWIsRUFBSSxPQUFPO0FBQUEsRUFDVCxZQUFZQSxFQUFJLE9BQU87QUFBQSxFQUN2QixxQkFBcUIwYTtBQUFBLEVBQ3JCLHlCQUF5QmtCO0FBQUEsRUFDekIsZ0JBQWdCNWIsRUFBSSxPQUFPQSxFQUFJLE9BQU8sR0FBR0EsRUFBSSxJQUFJLENBQUM7QUFBQTtBQUVwRCxDQUFDO0FBQ0RBLEVBQUksT0FBTztBQUFBLEVBQ1QsdUJBQXVCQSxFQUFJLE1BQU1BLEVBQUksT0FBT0EsRUFBSSxPQUFPLEdBQUdBLEVBQUksSUFBSSxDQUFDLENBQUM7QUFBQSxFQUNwRSxVQUFVQSxFQUFJLE9BQU87QUFDdkIsQ0FBQztBQUNEQSxFQUFJLE9BQU9BLEVBQUksSUFBSSxDQUFDO0FBQ3BCQSxFQUFJLE9BQU87QUFBQSxFQUNULFlBQVl1YixFQUFjdmIsRUFBSSxPQUFPLENBQUM7QUFBQSxFQUN0QyxXQUFXdWIsRUFBY3ZiLEVBQUksT0FBTyxDQUFDO0FBQUEsRUFDckMsT0FBT3ViLEVBQWN2YixFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQ2pDLE9BQU91YixFQUFjdmIsRUFBSSxPQUFPLENBQUM7QUFBQSxFQUNqQyxPQUFPdWIsRUFBY3ZiLEVBQUksT0FBTyxDQUFDO0FBQUEsRUFDakMsTUFBTXViLEVBQWN2YixFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQ2hDLE9BQU91YixFQUFjdmIsRUFBSSxPQUFPLENBQUM7QUFBQSxFQUNqQyxTQUFTdWIsRUFBY3ZiLEVBQUksT0FBTyxDQUFDO0FBQUEsRUFDbkMsVUFBVXViLEVBQWN2YixFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQ3BDLE9BQU91YixFQUFjdmIsRUFBSSxPQUFPLENBQUM7QUFBQSxFQUNqQyxlQUFldWIsRUFBY3ZiLEVBQUksT0FBTyxDQUFDO0FBQUEsRUFDekMsY0FBY3ViLEVBQWN2YixFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQ3hDLDJCQUEyQnViLEVBQWN2YixFQUFJLFFBQVEsQ0FBQztBQUN4RCxDQUFDO0FBQ0RBLEVBQUksT0FBTztBQUFBLEVBQ1QsSUFBSUEsRUFBSSxPQUFPO0FBQUEsRUFDZixPQUFPdWIsRUFBY3ZiLEVBQUksT0FBTyxDQUFDO0FBQUEsRUFDakMsWUFBWXViLEVBQWN2YixFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQ3RDLFdBQVd1YixFQUFjdmIsRUFBSSxPQUFPLENBQUM7QUFBQSxFQUNyQyxjQUFjdWIsRUFBY3ZiLEVBQUksT0FBTyxDQUFDO0FBQUEsRUFDeEMsZUFBZXViLEVBQWN2YixFQUFJLE9BQU8sQ0FBQztBQUFBLEVBQ3pDLFNBQVN1YixFQUFjdmIsRUFBSSxPQUFPQSxFQUFJLE9BQU8sR0FBR0EsRUFBSSxJQUFJLENBQUMsQ0FBQztBQUM1RCxDQUFDO0FBQ0RBLEVBQUksT0FBTztBQUFBLEVBQ1QsU0FBU0EsRUFBSSxPQUFPO0FBQ3RCLENBQUM7QUFDREEsRUFBSSxPQUFPO0FBQUEsRUFDVCxZQUFZQSxFQUFJLE9BQU87QUFDekIsQ0FBQztBQUNEQSxFQUFJLE9BQU87QUFBQSxFQUNULHlCQUF5QjRiO0FBQUEsRUFDekIsNkJBQTZCNWIsRUFBSSxPQUFPQSxFQUFJLElBQUksQ0FBQyxFQUFFLFNBQVM7QUFDOUQsQ0FBQztBQUNEQSxFQUFJLE9BQU87QUFBQSxFQUNULHNCQUFzQnViLEVBQWN2YixFQUFJLE9BQU9BLEVBQUksSUFBSSxDQUFDLENBQUM7QUFDM0QsQ0FBQztBQUVELFNBQVM4YyxHQUFTQyxHQUFRQyxHQUFXO0FBQ25DLE1BQUlDLElBQWlCLE9BQU87QUFDNUIsRUFBQUEsSUFBaUJBLEVBQWVGLEdBQVFDLENBQVMsSUFBSUQsRUFBTyxZQUFZQztBQUMxRTtBQUNBLFNBQVNFLEdBQVNILEdBQVFwSSxHQUFJO0FBQzVCLEVBQUlBLE1BQU8sV0FDVEEsSUFBS29JLEVBQU87QUFHZCxNQUFJSSxJQUFvQixNQUFNO0FBQzlCLEVBQUFBLEtBQXFCQSxFQUFrQkosR0FBUXBJLENBQUU7QUFDbkQ7QUFFQSxJQUFJeUksS0FBWSwyQkFBWTtBQUMxQixNQUFJQyxJQUFpQixTQUF1QjlTLEdBQUdtRCxHQUFHO0FBQ2hELFdBQUEyUCxJQUFpQixPQUFPLGtCQUFrQjtBQUFBLE1BQ3hDLFdBQVcsQ0FBQztBQUFBLElBQ2QsYUFBYSxTQUFTLFNBQVU5UyxHQUFHbUQsR0FBRztBQUNwQyxNQUFBbkQsRUFBRSxZQUFZbUQ7QUFBQSxJQUNoQixLQUFLLFNBQVVuRCxHQUFHbUQsR0FBRztBQUNuQixlQUFTNFAsS0FBSzVQO0FBQ1osUUFBSSxPQUFPLFVBQVUsZUFBZSxLQUFLQSxHQUFHNFAsQ0FBQyxNQUFHL1MsRUFBRStTLENBQUMsSUFBSTVQLEVBQUU0UCxDQUFDO0FBQUEsSUFFOUQsR0FFT0QsRUFBZTlTLEdBQUdtRCxDQUFDO0FBQUEsRUFDNUI7QUFFQSxTQUFPLFNBQVVuRCxHQUFHbUQsR0FBRztBQUNyQixRQUFJLE9BQU9BLEtBQU0sY0FBY0EsTUFBTSxLQUFNLE9BQU0sSUFBSSxVQUFVLHlCQUF5QixPQUFPQSxDQUFDLElBQUksK0JBQStCO0FBRW5JLElBQUEyUCxFQUFlOVMsR0FBR21ELENBQUM7QUFFbkIsYUFBUzZQLElBQUs7QUFDWixXQUFLLGNBQWNoVDtBQUFBLElBQ3JCO0FBRUEsSUFBQUEsRUFBRSxZQUFZbUQsTUFBTSxPQUFPLE9BQU8sT0FBT0EsQ0FBQyxLQUFLNlAsRUFBRyxZQUFZN1AsRUFBRSxXQUFXLElBQUk2UCxFQUFHO0FBQUEsRUFDcEY7QUFDRixFQUFFO0FBQUEsQ0FFRCxTQUFVQyxHQUFRO0FBQ2pCLEVBQUFKLEdBQVVLLEdBQWFELENBQU07QUFFN0IsV0FBU0MsRUFBWUMsR0FBU0MsR0FBUztBQUNyQyxRQUFJQyxJQUFhLEtBQUssYUFFbEJDLElBQVFMLEVBQU8sS0FBSyxNQUFNRSxHQUFTQyxDQUFPLEtBQUs7QUFFbkQsa0JBQU8sZUFBZUUsR0FBTyxRQUFRO0FBQUEsTUFDbkMsT0FBT0QsRUFBVztBQUFBLE1BQ2xCLFlBQVk7QUFBQSxNQUNaLGNBQWM7QUFBQSxJQUNoQixDQUFDLEdBQ0RkLEdBQVNlLEdBQU9ELEVBQVcsU0FBUyxHQUNwQ1YsR0FBU1csQ0FBSyxHQUNQQTtBQUFBLEVBQ1Q7QUFFQSxTQUFPSjtBQUNULEdBQUcsS0FBSztBQUVSLE1BQU1LLEtBQXVCLENBQUNDLE1BQVc7QUFDdkMsUUFBTUMsSUFBTSxJQUFJdEYsTUFBUztBQUN2QixXQUFPLFFBQVcsSUFBSSxHQUFHdlksR0FBRyxNQUFNLEtBQUssTUFBTSxDQUFDLEdBQUdBLEdBQUcsS0FBSyxLQUFLLEdBQUc0ZCxDQUFNLEVBQUUsQ0FBQyxLQUFLLEdBQUdyRixDQUFJO0FBQUEsRUFDeEYsR0FDTXVGLElBQU0sSUFBSXZGLE1BQVM7QUFDdkIsV0FBTyxRQUFXLEtBQUssR0FBR3ZZLEdBQUcsSUFBSSxLQUFLLE1BQU0sQ0FBQyxHQUFHQSxHQUFHLEtBQUssS0FBSyxHQUFHNGQsQ0FBTSxFQUFFLENBQUMsS0FBSyxHQUFHckYsQ0FBSTtBQUFBLEVBQ3ZGO0FBQ0EsU0FBTztBQUFBLElBQ0wsS0FBQXNGO0FBQUEsSUFDQSxLQUFBQztBQUFBLElBQ0EsT0FBT0Q7QUFBQSxJQUNQLE9BQU9DO0FBQUEsRUFDVDtBQUNGO0FBRUFqZSxFQUFJLE9BQU87QUFBQSxFQUNULFVBQVVBLEVBQUksUUFBUSxhQUFhO0FBQUEsRUFDbkMsZ0JBQWdCQSxFQUFJLFFBQVEsUUFBUTtBQUFBLEVBQ3BDLFVBQVVBLEVBQUksT0FBTztBQUFBLElBQ25CLFdBQVdBLEVBQUksT0FBTztBQUFBLEVBQ3hCLENBQUM7QUFDSCxDQUFDO0FBQ0RBLEVBQUk7QUFBQSxFQUNGQSxFQUFJLE9BQU87QUFBQSxJQUNULG9CQUFvQkEsRUFBSSxPQUFPO0FBQUEsRUFDakMsQ0FBQztBQUNILEVBQUUsT0FBTyxDQUFDO0FBRVZBLEVBQUksT0FBTztBQUFBLEVBQ1QscUJBQXFCQSxFQUFJLE9BQU87QUFBQSxFQUNoQyxvQkFBb0JBLEVBQUksT0FBTztBQUFBLEVBQy9CLG9CQUFvQkEsRUFBSSxPQUFPO0FBQ2pDLENBQUM7QUFFREEsRUFBSSxPQUFPO0FBQUEsRUFDVCx3QkFBd0JBLEVBQUksT0FBTztBQUFBLEVBQ25DLGtDQUFrQ0EsRUFBSSxPQUFPO0FBQUEsRUFDN0MsMkJBQTJCQSxFQUFJLE9BQU87QUFDeEMsQ0FBQztBQUNEQSxFQUFJLE9BQU87QUFBQSxFQUNULFVBQVVBLEVBQUksUUFBUSxXQUFXO0FBQUEsRUFDakMsZ0JBQWdCQSxFQUFJLFFBQVEsV0FBVztBQUFBLEVBQ3ZDLFVBQVVBLEVBQUksT0FBTztBQUFBLElBQ25CLHNCQUFzQkEsRUFBSSxPQUFPO0FBQUEsSUFDakMsd0JBQXdCQSxFQUFJLE9BQU87QUFBQSxFQUNyQyxDQUFDO0FBQ0gsQ0FBQztBQUNEQSxFQUFJLE9BQU87QUFBQSxFQUNULFVBQVVBLEVBQUksUUFBUSxZQUFZO0FBQUEsRUFDbEMsZ0JBQWdCQSxFQUFJLFFBQVEsV0FBVztBQUFBLEVBQ3ZDLFVBQVVBLEVBQUksT0FBTztBQUFBLElBQ25CLHNCQUFzQkEsRUFBSSxPQUFPO0FBQUEsSUFDakMsd0JBQXdCQSxFQUFJLE9BQU87QUFBQSxJQUNuQyx3QkFBd0JBLEVBQUksT0FBTyxFQUFFLFFBQVE7QUFBQSxFQUMvQyxDQUFDO0FBQ0gsQ0FBQztBQUNELE1BQU1rZSxLQUFjO0FBQUEsRUFDbEIsYUFBYTtBQUFBLEVBQ2IsV0FBVztBQUFBLEVBQ1gsV0FBVyxZQUFZO0FBQUEsRUFDdkI7QUFDRixHQUVNQyxLQUFtQm5lLEVBQUksS0FBSyxDQUFDLFFBQVEsUUFBUSxXQUFXLFdBQVcsYUFBYSxTQUFTLENBQUM7QUFDaEdBLEVBQUksS0FBSztBQUFBLEVBQ1A7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxFQUNBO0FBQ0YsQ0FBQztBQUNEQSxFQUFJLE9BQU87QUFBQSxFQUNULGlCQUFpQkEsRUFBSSxPQUFPO0FBQUEsRUFDNUIsdUJBQXVCQSxFQUFJLE9BQU87QUFBQSxFQUNsQyx3QkFBd0JtZTtBQUFBLEVBQ3hCLG1CQUFtQm5lLEVBQUksT0FBTztBQUNoQyxDQUFDO0FBRURBLEVBQUk7QUFBQSxFQUNGQSxFQUFJLE9BQU87QUFBQSxJQUNULG9CQUFvQkEsRUFBSSxPQUFPO0FBQUEsRUFDakMsQ0FBQztBQUNILEVBQUUsT0FBTyxDQUFDO0FBRVYsTUFBTW9lLEtBQW1CcGUsRUFBSSxLQUFLLENBQUMsVUFBVSxhQUFhLGVBQWUsQ0FBQztBQUU3RG9lLEdBQWlCLEtBQUs7QUFPbkNwZSxFQUFJLE9BQU87QUFBQSxFQUNULFVBQVVBLEVBQUksTUFBTSxDQUFDQSxFQUFJLFFBQVEsV0FBVyxHQUFHQSxFQUFJLFFBQVEsWUFBWSxDQUFDLENBQUM7QUFBQSxFQUN6RSxnQkFBZ0JBLEVBQUksUUFBUSxRQUFRO0FBQUEsRUFDcEMsVUFBVUEsRUFBSSxPQUFPO0FBQUEsSUFDbkIsV0FBV0EsRUFBSSxPQUFPO0FBQUEsRUFDeEIsQ0FBQztBQUNILENBQUM7QUFFREEsRUFBSSxPQUFPO0FBQUEsRUFDVCxnQkFBZ0JBLEVBQUksUUFBUSxRQUFRO0FBQUEsRUFDcEMsVUFBVUEsRUFBSSxRQUFRLFFBQVE7QUFDaEMsQ0FBQztBQUNEQSxFQUFJO0FBQUEsRUFDRkEsRUFBSSxPQUFPO0FBQUEsSUFDVCxtQkFBbUJBLEVBQUksT0FBTztBQUFBLElBQzlCLGNBQWNBLEVBQUksT0FBTztBQUFBLEVBQzNCLENBQUM7QUFDSCxFQUFFLE9BQU8sQ0FBQztBQUVWQSxFQUFJLE9BQU87QUFBQSxFQUNULE1BQU1BLEVBQUksT0FBTztBQUFBLElBQ2YsZ0JBQWdCQSxFQUFJLE9BQU9BLEVBQUksT0FBTyxHQUFHQSxFQUFJLElBQUksQ0FBQztBQUFBLElBQ2xELFFBQVFBLEVBQUksTUFBTUEsRUFBSSxJQUFJLENBQUM7QUFBQSxJQUMzQixhQUFhQSxFQUFJLE9BQU87QUFBQSxJQUN4QixhQUFhQSxFQUFJLE9BQU9BLEVBQUksT0FBTyxHQUFHQSxFQUFJLElBQUksQ0FBQztBQUFBLEVBQ2pELENBQUM7QUFBQSxFQUNELFFBQVFBLEVBQUksUUFBUSxnQ0FBZ0M7QUFDdEQsQ0FBQztBQUVEQSxFQUFJLE9BQU87QUFBQSxFQUNULGdCQUFnQkEsRUFBSSxRQUFRLE1BQU07QUFBQSxFQUNsQyxVQUFVQSxFQUFJLFFBQVEsUUFBUTtBQUFBLEVBQzlCLFVBQVVBLEVBQUksT0FBTztBQUFBLElBQ25CLGFBQWFBLEVBQUksT0FBTztBQUFBLElBQ3hCLFdBQVdBLEVBQUksT0FBTztBQUFBLElBQ3RCLFdBQVdBLEVBQUksT0FBTztBQUFBLEVBQ3hCLENBQUM7QUFDSCxDQUFDO0FBQ0QsSUFBSXFlLEtBQThCLGtCQUFDQyxPQUNqQ0EsRUFBWSxPQUFVLFFBQ3RCQSxFQUFZLHFCQUF3QixxQkFDcENBLEVBQVksMkJBQThCLDJCQUMxQ0EsRUFBWSx5QkFBNEIseUJBQ3hDQSxFQUFZLGtCQUFxQixrQkFDakNBLEVBQVksb0JBQXVCLG9CQUNuQ0EsRUFBWSxxQkFBd0IscUJBQ3BDQSxFQUFZLG1CQUFzQixtQkFDbENBLEVBQVkscUJBQXdCLHFCQUNwQ0EsRUFBWSxXQUFjLFlBQ25CQSxJQUNORCxNQUFjLENBQUMsQ0FBQztBQUVuQnJlLEVBQUksT0FBTztBQUFBLEVBQ1QsVUFBVUEsRUFBSSxRQUFRLFdBQVc7QUFBQSxFQUNqQyxnQkFBZ0JBLEVBQUksUUFBUSxlQUFlO0FBQUEsRUFDM0MsVUFBVUEsRUFBSSxPQUFPO0FBQUEsSUFDbkIsc0JBQXNCQSxFQUFJLE9BQU87QUFBQSxJQUNqQyx3QkFBd0JBLEVBQUksT0FBTztBQUFBLEVBQ3JDLENBQUM7QUFDSCxDQUFDO0FBQ0RBLEVBQUksT0FBTztBQUFBLEVBQ1QsVUFBVUEsRUFBSSxRQUFRLFlBQVk7QUFBQSxFQUNsQyxnQkFBZ0JBLEVBQUksUUFBUSxlQUFlO0FBQUEsRUFDM0MsVUFBVUEsRUFBSSxPQUFPO0FBQUEsSUFDbkIsc0JBQXNCQSxFQUFJLE9BQU87QUFBQSxJQUNqQyx3QkFBd0JBLEVBQUksT0FBTztBQUFBLElBQ25DLHdCQUF3QkEsRUFBSSxPQUFPLEVBQUUsUUFBUTtBQUFBLEVBQy9DLENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTXVlLEtBQWE7QUFBQSxFQUNqQixXQUFXO0FBQUEsRUFDWCxhQUFhO0FBQUEsRUFDYixXQUFXLFlBQVk7QUFDckIsWUFBUTtBQUFBLE1BQ047QUFBQTtBQUFBO0FBQUEsSUFHRjtBQUFBLEVBQ0Y7QUFDRixHQUVNLEVBQUUsT0FBQUMsR0FBTSxJQUFJVixHQUFxQixnQkFBZ0IsR0FDakRXLElBQWF6ZSxFQUFJLFNBQVMsRUFBRSxTQUFTLEdBQ3JDMGUsS0FBbUIxZSxFQUFJLE9BQU87QUFBQSxFQUNsQyxTQUFTeWU7QUFBQSxFQUNULFFBQVFBO0FBQUEsRUFDUixVQUFVQTtBQUFBLEVBQ1YsUUFBUUE7QUFBQSxFQUNSLGFBQWFBO0FBQUEsRUFDYixtQkFBbUJBO0FBQUEsRUFDbkIsbUJBQW1CQTtBQUFBLEVBQ25CLG1CQUFtQkE7QUFBQSxFQUNuQiw2QkFBNkJBO0FBQUEsRUFDN0IsaUJBQWlCQTtBQUFBLEVBQ2pCLHNCQUFzQkE7QUFDeEIsQ0FBQyxHQUNLRSxJQUFOLE1BQU1BLEVBQWM7QUFBQSxFQUNsQixjQUFjO0FBSVosU0FBSyxlQUFlLENBQUNDLE1BQWlCO0FBQ3BDLFdBQUssYUFBYUQsRUFBYyxxQkFBcUIsR0FDckQsT0FBTyxRQUFRQyxDQUFZLEVBQUUsUUFBUSxDQUFDLENBQUNDLEdBQUtDLENBQVcsTUFBTTtBQUMzRCxjQUFNQyxJQUFleEcsR0FBaUJzRyxHQUFLQyxLQUFlSCxFQUFjLE1BQU1ILEVBQUs7QUFDbkYsYUFBSyxXQUFXSyxDQUFHLElBQUlFO0FBQUEsTUFDekIsQ0FBQztBQUFBLElBQ0gsR0FDQSxLQUFLLGFBQWFKLEVBQWMscUJBQXFCO0FBQUEsRUFDdkQ7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQXdCQSxJQUFJLE1BQU07QUFDUixXQUFPLEVBQUUsR0FBRyxLQUFLLFdBQVc7QUFBQSxFQUM5QjtBQUNGO0FBekJJQSxFQUFLLE9BQU8sTUFBTTtBQUNsQixHQUdBQSxFQUFLLHVCQUF1QixNQUFNO0FBQ2hDLFFBQU10ZCxJQUFJLENBQUM7QUFDWCxnQkFBTyxLQUFLcWQsR0FBaUIsTUFBTSxFQUFFLElBQUksRUFBRSxRQUFRLENBQUNHLE1BQVE7QUFDMUQsSUFBQXhkLEVBQUV3ZCxDQUFHLElBQUlGLEVBQWM7QUFBQSxFQUN6QixDQUFDLEdBQ010ZDtBQUNULEdBR0FzZCxFQUFLLGFBQWEsQ0FBQ0ssTUFBUTtBQUN6QixRQUFNQyxJQUFXLElBQUlOLEVBQWM7QUFDbkMsU0FBQU0sRUFBUyxhQUFhUCxHQUFpQixNQUFNTSxDQUFHLENBQUMsR0FDMUNDO0FBQ1Q7QUFoQ0osSUFBTUMsS0FBTlA7QUEwQ0EsTUFBTVEsS0FBMkIsQ0FBQ0MsTUFBVTtBQWh2SjVDLE1BQUF0TDtBQWl2SkUsUUFBTXVMLElBQWdCSCxHQUFjLFdBQVc7QUFBQSxJQUM3QyxTQUFTRSxFQUFNO0FBQUEsSUFDZixRQUFRQSxFQUFNO0FBQUEsSUFDZCxVQUFVQSxFQUFNO0FBQUEsSUFDaEIsUUFBUUEsRUFBTTtBQUFBLElBQ2QsYUFBYUEsRUFBTTtBQUFBLElBQ25CLG1CQUFtQkEsRUFBTTtBQUFBLElBQ3pCLG1CQUFtQkEsRUFBTTtBQUFBLElBQ3pCLG1CQUFtQkEsRUFBTTtBQUFBLElBQ3pCLDZCQUE2QkEsRUFBTTtBQUFBLElBQ25DLGlCQUFpQkEsRUFBTTtBQUFBLElBQ3ZCLHNCQUFzQkEsRUFBTTtBQUFBLEVBQzlCLENBQUM7QUFDRCxTQUFJaEgsR0FBRyxZQUFZLE9BQ2pCdEUsSUFBQXNFLEdBQUcsWUFBWSxNQUFmLFFBQUF0RSxFQUFrQixnQkFBZ0J1TCxFQUFjLE9BRTNDQSxFQUFjO0FBQ3ZCLEdBRU1DLEtBQXFCLENBQUNDLE1BQWlDO0FBQzNELFFBQU0sQ0FBQ0MsR0FBaUJDLENBQWtCLElBQUloZ0IsR0FBUztBQUFBLElBQ3JELFdBQVc4ZTtBQUFBLElBQ1gsWUFBWUE7QUFBQSxFQUNkLENBQUMsR0FDS21CLElBQWdDaGdCO0FBQUEsSUFDcEMsQ0FBQ2lnQixNQUFxQjtBQUNwQixNQUFBRixFQUFtQkUsQ0FBZ0IsR0FDbkNKLEtBQUEsUUFBQUEsRUFBK0JJO0FBQUEsSUFDakM7QUFBQSxJQUNBLENBQUNKLENBQTRCO0FBQUEsRUFDL0I7QUFDQSxTQUFPLEVBQUUsaUJBQUFDLEdBQWlCLCtCQUFBRSxFQUE4QjtBQUMxRCxHQUVNRSxLQUFjLGVBQ2RDLEtBQWUsQ0FBQ1QsTUFBVTtBQUM5QixRQUFNLENBQUNVLEdBQVFDLENBQVMsSUFBSXRnQixHQUFTLEdBQy9CLENBQUN1Z0IsR0FBc0JDLENBQXVCLElBQUl4Z0IsR0FBUyxJQUFJLEdBQy9ELEVBQUUsaUJBQUErZixHQUFpQiwrQkFBQUUsRUFBOEIsSUFBSUosR0FBbUJGLEVBQU0sb0JBQW9CLEdBQ2xHLENBQUNjLEdBQVFDLENBQVMsSUFBSTFnQixHQUFTLEVBQUssR0FDcEMsQ0FBQzJnQixHQUFnQkMsQ0FBaUIsSUFBSTVnQixHQUFTLElBQUksR0FDbkQsQ0FBQzZnQixHQUFZQyxDQUFhLElBQUk5Z0IsR0FBUyxJQUFJLEdBQzNDLENBQUMrZ0IsR0FBV0MsQ0FBWSxJQUFJaGhCLEdBQVM7QUFBQSxJQUN6QyxXQUFXeWU7QUFBQSxJQUNYLFVBQVVBO0FBQUEsRUFDWixDQUFDLEdBQ0ttQixJQUFnQkYsR0FBeUI7QUFBQSxJQUM3QyxHQUFHQztBQUFBLElBQ0gsc0JBQXNCTTtBQUFBLElBQ3RCLFFBQVEsQ0FBQ2dCLEdBQWtCQyxNQUFhO0FBbHlKNUMsVUFBQTdNO0FBbXlKTSxNQUFBcU0sRUFBVSxFQUFJLElBQ2RyTSxJQUFBc0wsRUFBTSxXQUFOLFFBQUF0TCxFQUFBLEtBQUFzTCxHQUFlc0IsR0FBa0JDO0FBQUEsSUFDbkM7QUFBQSxFQUNGLENBQUM7QUFpREQsTUFoREFoaEIsR0FBVSxNQUFNO0FBQ2QsUUFBSW1nQixFQUFRO0FBQ1osVUFBTWMsSUFBT3hJLEdBQUcsWUFBWSxLQUFLLElBQUlBLEdBQUc7QUFBQSxNQUN0QyxxQkFBcUJnSCxFQUFNO0FBQUEsTUFDM0IsWUFBWSxJQUFJUSxFQUFXO0FBQUEsTUFDM0IsU0FBU1IsRUFBTTtBQUFBLE1BQ2Ysa0JBQWtCQSxFQUFNO0FBQUEsTUFDeEIsR0FBR0M7QUFBQSxJQUNMLENBQUM7QUFDRCxJQUFBVSxFQUFVYSxDQUFJO0FBQ2QsVUFBTUMsSUFBUUMsR0FBd0JGLENBQUk7QUFDMUMsV0FBQVgsRUFBd0JZLENBQUssR0FDN0JELEVBQUssVUFBVSxXQUFXLFVBQVUsVUFBVSxDQUFDRyxNQUFXO0FBQ3hELE1BQUlBLEVBQU8sYUFBYUEsRUFBTyxZQUFZLGVBQ3pDVixFQUFrQlUsRUFBTyxZQUFZLFVBQVU7QUFBQSxJQUVuRCxDQUFDLEdBQ0RILEVBQUssVUFBVSxLQUFLLFVBQVUsVUFBVSxDQUFDRyxNQUFXO0FBQ2xELE1BQUlBLEVBQU8sYUFBYUEsRUFBTyxZQUFZLGVBQ3pDUixFQUFjO0FBQUEsUUFDWixRQUFRUSxFQUFPLFlBQVk7QUFBQSxRQUMzQixRQUFRQSxFQUFPLFlBQVk7QUFBQSxNQUM3QixDQUFDO0FBQUEsSUFFTCxDQUFDLEdBQ0RILEVBQUssVUFBVSxtQkFBbUIsVUFBVSxVQUFVLENBQUNHLE1BQVc7QUFDaEUsTUFBSUEsRUFBTyxhQUFhQSxFQUFPLFlBQVksZUFDekNOLEVBQWEsQ0FBQ08sT0FBVTtBQUFBLFFBQ3RCLFVBQVVBLEVBQUs7QUFBQSxRQUNmLFdBQVdELEVBQU87QUFBQSxNQUNwQixFQUFFO0FBQUEsSUFFTixDQUFDLEdBQ0RILEVBQUssVUFBVSxrQkFBa0IsVUFBVSxVQUFVLENBQUNHLE1BQVc7QUFDL0QsTUFBSUEsRUFBTyxhQUFhQSxFQUFPLFlBQVksZUFDekNOLEVBQWEsQ0FBQ08sT0FBVTtBQUFBLFFBQ3RCLFdBQVdBLEVBQUs7QUFBQSxRQUNoQixVQUFVO0FBQUEsVUFDUixHQUFHRCxFQUFPO0FBQUEsVUFDVixXQUFXO0FBQUEsUUFDYjtBQUFBLE1BQ0YsRUFBRTtBQUFBLElBRU4sQ0FBQyxHQUNNLE1BQU07QUFDWCxNQUFBSCxFQUFLLFFBQVE7QUFBQSxJQUNmO0FBQUEsRUFDRixHQUFHLENBQUMsQ0FBQyxHQUNELENBQUNkO0FBQ0gsV0FBdUIsZ0JBQUFoZ0IsRUFBSUMsSUFBVSxDQUFDLENBQUM7QUFFekMsUUFBTWtoQixJQUFnQjtBQUFBLElBQ3BCLFFBQVFuQixFQUFPO0FBQUEsSUFDZixZQUFZQSxFQUFPO0FBQUEsSUFDbkIsVUFBVU4sRUFBZ0I7QUFBQSxJQUMxQixXQUFXQSxFQUFnQjtBQUFBLElBQzNCLFFBQUFVO0FBQUE7QUFBQSxJQUVBLFNBQVM7QUFBQSxNQUNQLFFBQVE7QUFBQSxNQUNSLFdBQVc7QUFBQSxNQUNYLE9BQU87QUFBQSxJQUNUO0FBQUEsSUFDQSxZQUFZRTtBQUFBLElBQ1osV0FBQUk7QUFBQSxJQUNBLE1BQU1GO0FBQUEsRUFDUjtBQUNBLFNBQXVCLGdCQUFBeGdCLEVBQUlDLElBQVUsRUFBRSxVQUFVaWdCLElBQXVDLGdCQUFBbGdCLEVBQUlNLEdBQWdCLFVBQVUsRUFBRSxPQUFPNGYsR0FBc0IsVUFBMEIsZ0JBQUFsZ0IsRUFBSSxPQUFPLEVBQUUsSUFBSThmLElBQWEsV0FBV1IsRUFBTSxXQUFXLFVBQVVBLEVBQU0sU0FBUzZCLENBQWEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFvQixnQkFBQW5oQixFQUFJQyxJQUFVLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDOVQsR0FDTStnQixLQUEwQixDQUFDaEIsT0FDeEI7QUFBQSxFQUNMLFFBQVFBLEVBQU87QUFBQSxFQUNmLFlBQVlBLEVBQU8sZUFBZTtBQUFBLEVBQ2xDLFVBQVVBLEVBQU87QUFBQSxFQUNqQixxQkFBcUJBLEVBQU87QUFBQSxFQUM1QixnQkFBZ0JBLEVBQU87QUFBQSxFQUN2QixTQUFTQSxFQUFPO0FBQ2xCLElBR0lvQixLQUFlLENBQUM5QixNQUFVO0FBQzlCLFFBQU0sRUFBRSxhQUFBK0IsR0FBYSxRQUFBN0YsRUFBTyxJQUFJOEQsR0FDMUIsRUFBRSxRQUFBZ0MsR0FBUSxVQUFBQyxHQUFVLFlBQUFDLEdBQVkscUJBQUFDLEdBQXFCLGdCQUFBQyxHQUFnQixTQUFBQyxFQUFRLElBQUlwaEIsR0FBbUIsR0FDcEdxaEIsSUFBVVAsRUFBWSxZQUFZLEdBQ2xDLENBQUNRLEdBQVdDLENBQVksSUFBSW5pQixHQUFTLEVBQUssR0FDMUNvaUIsSUFBWWppQixHQUFPLElBQUksR0FDdkJraUIsSUFBZWppQixHQUFRLE1BQ3RCeWIsSUFDRUQsR0FBMkJDLENBQU0sSUFEcEIsSUFFbkIsQ0FBQ0EsQ0FBTSxDQUFDLEdBQ0x5RyxJQUFhbGlCLEdBQVEsT0FDbEI7QUFBQSxJQUNMLFFBQVE7QUFBQSxJQUNSLE9BQU87QUFBQSxJQUNQLFFBQVF5aEI7QUFBQSxFQUNWLElBQ0MsQ0FBQ0EsQ0FBVSxDQUFDLEdBQ1RVLElBQWNuaUIsR0FBUSxNQUFNO0FBQ2hDLFFBQUksQ0FBQzBoQixLQUF1QixDQUFDRixFQUFVLFFBQU87QUFDOUMsVUFBTVksSUFBUyxJQUFJLGdCQUFnQjtBQUNuQyxXQUFBQSxFQUFPLE9BQU8sV0FBV1osQ0FBUSxHQUNqQ1ksRUFBTyxPQUFPLFVBQVVILENBQVksR0FDcENHLEVBQU8sT0FBTyxVQUFVYixDQUFNLEdBQzlCYSxFQUFPLE9BQU8sZUFBZVYsQ0FBbUIsR0FDekNVLEVBQU8sU0FBUztBQUFBLEVBQ3pCLEdBQUcsQ0FBQ0gsR0FBY1YsR0FBUUMsR0FBVUUsQ0FBbUIsQ0FBQztBQU14RCxTQUxBNWhCLEdBQVUsTUFBTWlpQixFQUFhLEVBQUksR0FBRyxDQUFDLENBQUMsR0FDdENqaUIsR0FBVSxNQUFNO0FBQ2QsSUFBSSxDQUFDa2lCLEVBQVUsV0FBVyxDQUFDRixLQUMzQkgsRUFBZUwsR0FBYVUsRUFBVSxPQUFPO0FBQUEsRUFDL0MsR0FBRyxDQUFDRixDQUFTLENBQUMsR0FDVEosSUFJa0IsZ0JBQUF6aEI7QUFBQSxJQUNyQjtBQUFBLElBQ0E7QUFBQSxNQUNFLElBQUksT0FBTzRoQixDQUFPO0FBQUEsTUFDbEIsTUFBTSxHQUFHQSxDQUFPO0FBQUEsTUFDaEIsV0FBVztBQUFBLE1BQ1gsS0FBSyxHQUFHRCxDQUFPLFdBQVdDLENBQU8sYUFBYU0sQ0FBVztBQUFBLE1BQ3pELE9BQU9EO0FBQUEsTUFDUCxLQUFLRjtBQUFBLElBQ1A7QUFBQSxFQUNGLEtBYkUsUUFBUSxNQUFNLGtEQUFrRCxHQUN6QyxnQkFBQS9oQixFQUFJLE9BQU8sQ0FBQyxDQUFDO0FBYXhDLEdBRU1vaUIsS0FBaUIsQ0FBQyxFQUFFLFFBQUE1RyxFQUFPLE1BQ1IsZ0JBQUF4YixFQUFJb2hCLElBQWMsRUFBRSxRQUFBNUYsR0FBUSxhQUFhN0IsR0FBZ0IsU0FBUyxDQUFDLEdBR3RGMEksS0FBYyxDQUFDLEVBQUUsUUFBQTdHLEVBQU8sTUFDTCxnQkFBQXhiLEVBQUlvaEIsSUFBYyxFQUFFLFFBQUE1RixHQUFRLGFBQWE3QixHQUFnQixLQUFLLENBQUMsR0FHbEYySSxLQUFvQixDQUFDLEVBQUUsUUFBQTlHLEVBQU8sTUFDWCxnQkFBQXhiLEVBQUlvaEIsSUFBYyxFQUFFLFFBQUE1RixHQUFRLGFBQWE3QixHQUFnQixZQUFZLENBQUMsR0FHekY0SSxLQUFvQixDQUFDLEVBQUUsUUFBQS9HLEVBQU8sTUFDWCxnQkFBQXhiLEVBQUlvaEIsSUFBYyxFQUFFLFFBQUE1RixHQUFRLGFBQWE3QixHQUFnQixZQUFZLENBQUM7IiwKICAibmFtZXMiOiBbImNyZWF0ZUNvbnRleHQiLCAidXNlQ29udGV4dCIsICJ1c2VTdGF0ZSIsICJ1c2VDYWxsYmFjayIsICJ1c2VFZmZlY3QiLCAidXNlUmVmIiwgInVzZU1lbW8iLCAianN4IiwgIkZyYWdtZW50IiwgInokMSIsICJ2NCIsICJjb25uZWN0VG9DaGlsZCIsICJBZSIsICJFbGVtZW50c0NvbnRleHQiLCAidXNlT3BlblBheUVsZW1lbnRzIiwgImNvbnRleHQiLCAiZXQiLCAiZ24iLCAid24iLCAiYm4iLCAidm4iLCAiRW4iLCAiV2UiLCAiQ24iLCAiU24iLCAiZSIsICJQbiIsICJIIiwgImtuIiwgInIiLCAieCIsICJEIiwgIlUiLCAiSXQiLCAiUnQiLCAiRnQiLCAiTXQiLCAiZGUiLCAiQW4iLCAiVGUiLCAiSW4iLCAicSIsICJSbiIsICJGbiIsICJNbiIsICJEbiIsICJPbiIsICJObiIsICJUbiIsICJMbiIsICJVbiIsICJqbiIsICJ4biIsICIkbiIsICJDZSIsICJ6biIsICJHbiIsICJWbiIsICJxbiIsICJZbiIsICJLbiIsICJXbiIsICJ0dCIsICJKbiIsICJIbiIsICJabiIsICJJIiwgIkJuIiwgIlFuIiwgIkR0IiwgIlhuIiwgImVyIiwgInRyIiwgIm5yIiwgInJyIiwgIm9yIiwgIkxlIiwgInN0IiwgIm50IiwgImFyIiwgImlyIiwgInNyIiwgImNyIiwgImxyIiwgImEiLCAiaSIsICJzIiwgImMiLCAidXIiLCAiSiIsICJkciIsICJwciIsICJtciIsICJ5ciIsICJPdCIsICJOdCIsICJmciIsICJociIsICJmZSIsICJfciIsICJnciIsICJUdCIsICJ3ciIsICJiciIsICJ2ciIsICJjdCIsICJMdCIsICJsdCIsICJVdCIsICJFciIsICJDciIsICJqdCIsICJTciIsICJQciIsICJrciIsICJBciIsICJJciIsICJ4dCIsICJSciIsICJGciIsICJNciIsICJEciIsICJPciIsICJOciIsICJUciIsICJMciIsICIkdCIsICJMIiwgImpyIiwgIlVyIiwgInhyIiwgIk0iLCAiaGUiLCAiJHIiLCAienIiLCAiRyIsICJHciIsICJWciIsICJxciIsICJfZSIsICJZciIsICJ1dCIsICJLciIsICJydCIsICJ6dCIsICJXciIsICJHdCIsICJWdCIsICJVZSIsICJlZSIsICJzZSIsICJQIiwgImdpIiwgIkpyIiwgIlNlIiwgIlkiLCAiSHIiLCAiamUiLCAicXQiLCAiWXQiLCAidGUiLCAiWnIiLCAiZHQiLCAiUiIsICJCciIsICJRciIsICJYciIsICJlbyIsICJmIiwgImgiLCAieSIsICJtIiwgIkEiLCAicm8iLCAidG8iLCAibm8iLCAiZCIsICJsIiwgInUiLCAib28iLCAiS3QiLCAiYW8iLCAiaW8iLCAieGUiLCAiV3QiLCAic28iLCAiY28iLCAibG8iLCAiSnQiLCAidW8iLCAicG8iLCAiSHQiLCAibW8iLCAieW8iLCAiZm8iLCAiaG8iLCAib3QiLCAiX28iLCAiZ28iLCAid28iLCAiYm8iLCAidm8iLCAiWnQiLCAiQnQiLCAiRW8iLCAiQ28iLCAibWUiLCAiRWUiLCAiU28iLCAiUXQiLCAiUG8iLCAia28iLCAicHQiLCAiQW8iLCAiSW8iLCAiXyIsICJ2IiwgIlJvIiwgIkZvIiwgIk1vIiwgIkMiLCAibXQiLCAieXQiLCAiRG8iLCAidyIsICJVbyIsICJMbyIsICJiIiwgIk9vIiwgIk5vIiwgIlRvIiwgIlYiLCAiVCIsICJqbyIsICJ4byIsICIkbyIsICJ2ZSIsICJ6byIsICJWbyIsICJHbyIsICJxbyIsICJLIiwgImZ0IiwgIllvIiwgIktvIiwgImoiLCAiY2UiLCAiRSIsICJrIiwgIk8iLCAiJGUiLCAiWHQiLCAicWUiLCAiZW4iLCAiemUiLCAiV28iLCAidG4iLCAieiIsICJsZSIsICJKbyIsICJIbyIsICJfbiIsICJrZSIsICJyZSIsICJWZSIsICJvZSIsICJnZSIsICJubiIsICJybiIsICJvbiIsICJhbiIsICJSZSIsICJabyIsICJCbyIsICJRbyIsICJ1ZSIsICJKZSIsICJYbyIsICJlYSIsICJ0YSIsICJuYSIsICJOIiwgInJhIiwgIm9hIiwgImFhIiwgImlhIiwgInNhIiwgInNuIiwgImNuIiwgIndlIiwgIkhlIiwgImNhIiwgImxhIiwgImllIiwgImJlIiwgInVhIiwgImRhIiwgIlplIiwgIm5lIiwgInBhIiwgImxuIiwgInllIiwgIkRlIiwgIk9lIiwgInBlIiwgIm1hIiwgInlhIiwgIkYiLCAiR2UiLCAiWWUiLCAiTmUiLCAiUGUiLCAiaHQiLCAidW4iLCAiZG4iLCAicG4iLCAibW4iLCAieW4iLCAiX3QiLCAiRmUiLCAiYXQiLCAiZ2EiLCAiQmUiLCAiZmEiLCAiS2UiLCAiaGEiLCAiSWUiLCAiX2EiLCAiaXQiLCAid2EiLCAiYmEiLCAiWCIsICJFYSIsICJndCIsICJ2YSIsICJDYSIsICJTYSIsICJQYSIsICJrYSIsICJBYSIsICJmbiIsICJ3dCIsICJJYSIsICJSYSIsICJidCIsICJGYSIsICJ2dCIsICJNYSIsICJEYSIsICJPYSIsICJOYSIsICJUYSIsICJMYSIsICJVYSIsICJqYSIsICJ4YSIsICIkYSIsICJ6YSIsICJHYSIsICJWYSIsICJxYSIsICJZYSIsICJLYSIsICJobiIsICJXYSIsICJKYSIsICJIYSIsICJaYSIsICJCYSIsICJRYSIsICJYYSIsICJlaSIsICJ0aSIsICJuaSIsICJyaSIsICJNZSIsICJvaSIsICJhaSIsICJhZSIsICJpaSIsICJzaSIsICJjaSIsICIkIiwgIkV0IiwgIlciLCAibiIsICJRZSIsICJsaSIsICJDdCIsICJ1aSIsICJkaSIsICJwaSIsICJTdCIsICJQdCIsICJaIiwgIkIiLCAiUSIsICJrdCIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciQxIiwgIlpvZEZpZWxkRXJyb3IiLCAibWFrZUNhbGxiYWNrU2FmZSIsICJjYWxsYmFja05hbWUiLCAiZXJyb3JMb2dnZXIiLCAiYXJncyIsICJlcnJvciIsICJTdWJtaXRNZXRob2RzIiwgIlN1Ym1pdE1ldGhvZHMyIiwgIlJlcXVpcmVkU3RyaW5nIiwgIk9wdGlvbmFsU3RyaW5nIiwgIm51bGxPclVuZGVmT3IkMSIsICJ6VHlwZSIsICJGaWVsZE5hbWUiLCAiRmllbGROYW1lMiIsICJGaWVsZE5hbWVFbnVtIiwgIlByaXZhdGVGaWVsZE5hbWUiLCAiUHJpdmF0ZUZpZWxkTmFtZTIiLCAiUHJpdmF0ZUZpZWxkTmFtZUVudW0iLCAiQWxsRmllbGROYW1lcyIsICJFbGVtZW50VHlwZUVudW0iLCAiRWxlbWVudFR5cGVFbnVtMiIsICJDaGVja291dFBheW1lbnRNZXRob2QkMSIsICJQYXltZW50TWV0aG9kTWluaW1hbCIsICJFdmVudFR5cGUiLCAiR2VuZXJpY0V2ZW50VHlwZSIsICJHZW5lcmljRXZlbnRQYXlsb2FkIiwgIklucHV0RXZlbnRUeXBlIiwgIklucHV0RXZlbnRQYXlsb2FkIiwgIkVycm9yRXZlbnRUeXBlIiwgIkVycm9yRXZlbnRQYXlsb2FkIiwgIlZhbGlkYXRpb25FcnJvckV2ZW50VHlwZSIsICJWYWxpZGF0aW9uRXJyb3JFdmVudFBheWxvYWQiLCAiTGF5b3V0RXZlbnRQYXlsb2FkIiwgIkxvYWRlZEV2ZW50UGF5bG9hZCIsICJQYXltZW50Rmxvd1N0YXJ0ZWRFdmVudFBheWxvYWQiLCAiU2V0dXBDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiUmVxdWlyZWRGb3JtRmllbGRzIiwgIlBSRm9ybUZpZWxkcyIsICJTdWJtaXRFdmVudFR5cGUiLCAiU3VibWl0RXZlbnRQYXlsb2FkIiwgIlRva2VuaXplU3VjY2Vzc0V2ZW50UGF5bG9hZCIsICJDaGVja291dFN1Y2Nlc3NFdmVudFBheWxvYWQiLCAiRXZlbnRQYXlsb2FkIiwgIkNoZWNrb3V0U3VjY2Vzc1Jlc3BvbnNlIiwgIkZpZWxkVmFsaWRhdGlvbkVycm9yIiwgIlRva2VuaXplQ2FyZEVycm9yUmVzcG9uc2UiLCAiQ29tbW9uTmV4dEFjdGlvbk1ldGFkYXRhIiwgImNvbnZlcnRTdHlsZXNUb1F1ZXJ5U3RyaW5nIiwgInN0eWxlcyIsICJudWxsT3JVbmRlZk9yIiwgIkNvdXBvbk1pbmltYWwiLCAiTGluZUl0ZW0iLCAiQnJhbmRTZXR0aW5ncyIsICJCcmFuZCIsICJDaGVja291dFBheW1lbnRNZXRob2QiLCAiU3Vic2NyaXB0aW9uSXRlbU1pbmltYWwiLCAiU3Vic2NyaXB0aW9uTWluaW1hbCIsICJJbnZvaWNlSXRlbURpc2NvdW50QW1vdW50c01pbmltYWwiLCAiSW52b2ljZUxpbmVJdGVtTWluaW1hbCIsICJEaXNjb3VudE1pbmltYWwiLCAiSW52b2ljZU1pbmltYWwiLCAiQ3JlYXRlU3Vic2NyaXB0aW9uUmVzcG9uc2VNaW5pbWFsIiwgIlByZXZpZXdDaGVja291dFJlc3BvbnNlIiwgIl9QYXltZW50Rm9ybVByZWZpbGxDb21tb24iLCAiUGF5bWVudEZvcm1QcmVmaWxsIiwgIkNvbXBsZXRlZEZvcm1QcmVmaWxsIiwgIkV4cGlyZWRGb3JtUHJlZmlsbCIsICJQeWRhbnRpY1ZhbGlkYXRpb25FcnJvciIsICJOZXdDdXN0b21lckZpZWxkcyIsICJQcmljZVF0eSIsICJDYXJ0SW5mbyIsICJQcm9jZXNzb3JTcGVjaWZpY01ldGFkYXRhIiwgImZpeFByb3RvIiwgInRhcmdldCIsICJwcm90b3R5cGUiLCAic2V0UHJvdG90eXBlT2YiLCAiZml4U3RhY2siLCAiY2FwdHVyZVN0YWNrVHJhY2UiLCAiX19leHRlbmRzIiwgIl9leHRlbmRTdGF0aWNzIiwgInAiLCAiX18iLCAiX3N1cGVyIiwgIkN1c3RvbUVycm9yIiwgIm1lc3NhZ2UiLCAib3B0aW9ucyIsICJfbmV3VGFyZ2V0IiwgIl90aGlzIiwgImNyZWF0ZU9qc0Zsb3dMb2dnZXJzIiwgInByZWZpeCIsICJsb2ciLCAiZXJyIiwgIkFXWF9MT0FESU5HIiwgIkFkeWVuRW52aXJvbm1lbnQiLCAiUGF5bWVudFByb2Nlc3NvciIsICJQYXlJblN0YXRlIiwgIlBheUluU3RhdGUyIiwgIlBSX0xPQURJTkciLCAiZXJyX18iLCAiT3B0aW9uYWxGbiIsICJab2RGb3JtQ2FsbGJhY2tzIiwgIl9Gb3JtQ2FsbGJhY2tzIiwgInJhd0NhbGxiYWNrcyIsICJrZXkiLCAicmF3Q2FsbGJhY2siLCAic2FmZUNhbGxiYWNrIiwgIm9iaiIsICJpbnN0YW5jZSIsICJGb3JtQ2FsbGJhY2tzIiwgInVzZVJlYWN0aXZlRm9ybUNhbGxiYWNrcyIsICJwcm9wcyIsICJmb3JtQ2FsbGJhY2tzIiwgInVzZVBheW1lbnRSZXF1ZXN0cyIsICJvcmlnaW5hbE9uUGF5bWVudFJlcXVlc3RMb2FkIiwgInBheW1lbnRSZXF1ZXN0cyIsICJzZXRQYXltZW50UmVxdWVzdHMiLCAib3ZlcnJpZGVuT25QYXltZW50UmVxdWVzdExvYWQiLCAicGF5bWVudFJlcXVlc3RzMiIsICJGT1JNX1RBUkdFVCIsICJFbGVtZW50c0Zvcm0iLCAib3BGb3JtIiwgInNldE9wRm9ybSIsICJlbGVtZW50c0NvbnRleHRWYWx1ZSIsICJzZXRFbGVtZW50c0NvbnRleHRWYWx1ZSIsICJsb2FkZWQiLCAic2V0TG9hZGVkIiwgInN0cmlwZUxpbmtDdHJsIiwgInNldFN0cmlwZUxpbmtDdHJsIiwgImxvb3BDb25maWciLCAic2V0TG9vcENvbmZpZyIsICJhaXJ3YWxsZXgiLCAic2V0QWlyd2FsbGV4IiwgInRvdGFsQW1vdW50QXRvbXMiLCAiY3VycmVuY3kiLCAiZm9ybSIsICJ2YWx1ZSIsICJnZXRFbGVtZW50c0NvbnRleHRWYWx1ZSIsICJyZXN1bHQiLCAicHJldiIsICJjaGlsZHJlblByb3BzIiwgIkVsZW1lbnRGcmFtZSIsICJlbGVtZW50VHlwZSIsICJmb3JtSWQiLCAicmVmZXJyZXIiLCAiZm9ybUhlaWdodCIsICJjaGVja291dFNlY3VyZVRva2VuIiwgInJlZ2lzdGVySWZyYW1lIiwgImJhc2VVcmwiLCAic3ViUGF0aCIsICJoYXNMb2FkZWQiLCAic2V0SGFzTG9hZGVkIiwgImlmcmFtZVJlZiIsICJlbGVtZW50U3R5bGUiLCAiZnJhbWVTdHlsZSIsICJxdWVyeVN0cmluZyIsICJwYXJhbXMiLCAiQ2FyZEN2Y0VsZW1lbnQiLCAiQ2FyZEVsZW1lbnQiLCAiQ2FyZEV4cGlyeUVsZW1lbnQiLCAiQ2FyZE51bWJlckVsZW1lbnQiXQp9Cg==